00001 #include "dsdpdatamat.h"
00002 #include "dsdpsys.h"
00003 #include "dsdp5.h"
00004
00010 extern int DSDPGetZeroDataMatOps(struct DSDPDataMat_Ops**);
00011 extern int DSDPGetConstantMat(int,double,char,struct DSDPDataMat_Ops**,void**);
00012
00013 extern int DSDPGetVechMat(int,int,double,const int[], const double[],int, struct DSDPDataMat_Ops**,void**);
00014 extern int DSDPGetVecUMat(int,int,double,const int[], const double[],int, struct DSDPDataMat_Ops**,void**);
00015
00016 extern int DSDPGetIdentityDataMatP(int,double,struct DSDPDataMat_Ops**,void**);
00017 extern int DSDPGetIdentityDataMatF(int,double,struct DSDPDataMat_Ops**,void**);
00018
00019 extern int DSDPGetDMat(int,double,double[],struct DSDPDataMat_Ops**,void**);
00020
00021 extern int DSDPGetR1PMat(int,double,int,const int[],const double[],int,struct DSDPDataMat_Ops**,void**);
00022 extern int DSDPGetR1UMat(int,double,int,const int[],const double[],int,struct DSDPDataMat_Ops**,void**);
00023
00024 extern int SDPConeAddDataMatrix(SDPCone,int, int, int, char, struct DSDPDataMat_Ops*, void*);
00025 extern int SDPConeSetRMatrix(SDPCone,int,int,char,struct DSDPDataMat_Ops*,void*);
00026
00027
00028 #undef __FUNCT__
00029 #define __FUNCT__ "SDPConeAddASparseVecMat"
00030
00049 int SDPConeAddASparseVecMat(SDPCone sdpcone,int blockj, int vari, int n,
00050 double alpha, int ishift,
00051 const int ind[], const double val[], int nnz){
00052
00053 int info;
00054 char UPLQ;
00055 void* dmat=0;
00056 struct DSDPDataMat_Ops* dmatops=0;
00057
00058 DSDPFunctionBegin;
00059 info=SDPConeGetStorageFormat(sdpcone,blockj,&UPLQ); DSDPCHKERR(info);
00060 DSDPLogInfo(0,20,"Set sparse matrix: Block: %d, Variable %d, size: %d, Nonzeros: %d .\n",blockj,vari,n,nnz);
00061 switch (UPLQ){
00062 case 'P':
00063 info=DSDPGetVechMat(n,ishift,alpha,ind,val,nnz,&dmatops,&dmat); DSDPCHKERR(info);
00064 break;
00065 case 'U':
00066 info=DSDPGetVecUMat(n,ishift,alpha,ind,val,nnz,&dmatops,&dmat); DSDPCHKERR(info);
00067 break;
00068 }
00069 info=SDPConeAddDataMatrix(sdpcone,blockj,vari,n,UPLQ,dmatops,dmat); DSDPCHKERR(info);
00070 DSDPFunctionReturn(0);
00071 }
00072
00073 #undef __FUNCT__
00074 #define __FUNCT__ "SDPConeAddSparseVecMat"
00075
00076 int SDPConeAddSparseVecMat(SDPCone sdpcone,int blockj, int vari, int n,
00077 int ishift,const int ind[], const double val[], int nnz){
00078
00079 int info;
00080
00081 DSDPFunctionBegin;
00082 info= SDPConeAddASparseVecMat(sdpcone,blockj,vari,n,
00083 1.0,ishift,ind,val,nnz);DSDPCHKERR(info);
00084 DSDPFunctionReturn(0);
00085 }
00086
00087 #undef __FUNCT__
00088 #define __FUNCT__ "SDPConeSetASparseVecMat"
00089
00152 int SDPConeSetASparseVecMat(SDPCone sdpcone,int blockj, int vari, int n,
00153 double alpha,int ishift,
00154 const int ind[], const double val[], int nnz){
00155
00156 int info;
00157 DSDPFunctionBegin;
00158 info=SDPConeRemoveDataMatrix(sdpcone,blockj,vari); DSDPCHKERR(info);
00159 info=SDPConeAddASparseVecMat(sdpcone,blockj,vari,n,alpha,ishift,ind,val,nnz); DSDPCHKERR(info);
00160 DSDPFunctionReturn(0);
00161 }
00162
00163 #undef __FUNCT__
00164 #define __FUNCT__ "SDPConeSetSparseVecMat"
00165
00166 int SDPConeSetSparseVecMat(SDPCone sdpcone,int blockj, int vari, int n,
00167 int ishift,const int ind[], const double val[], int nnz){
00168
00169 int info;
00170 DSDPFunctionBegin;
00171 info=SDPConeSetASparseVecMat(sdpcone,blockj,vari,n,1.0,ishift,ind,val,nnz); DSDPCHKERR(info);
00172 DSDPFunctionReturn(0);
00173 }
00174
00175
00176 #undef __FUNCT__
00177 #define __FUNCT__ "SDPConeAddADenseVecMat"
00178
00203 int SDPConeAddADenseVecMat(SDPCone sdpcone,int blockj, int vari,int n,
00204 double alpha,double val[], int nnz){
00205 int info;
00206 char UPLQ;
00207 void* dmat=0;
00208 struct DSDPDataMat_Ops* dmatops=0;
00209
00210 DSDPFunctionBegin;
00211 info=SDPConeGetStorageFormat(sdpcone,blockj,&UPLQ); DSDPCHKERR(info);
00212 DSDPLogInfo(0,20,"Set dense matrix: Block: %d, Variable %d, size: %d, Nonzeros: %d .\n",blockj,vari,n,nnz);
00213 switch (UPLQ){
00214 case 'P':
00215 info=DSDPGetDMat(n,alpha,val,&dmatops,&dmat); DSDPCHKERR(info);
00216 break;
00217 case 'U':
00218 DSDPSETERR(1,"Dense U Mat type does not exist.\n");
00219 break;
00220 }
00221 info=SDPConeAddDataMatrix(sdpcone,blockj,vari,n,UPLQ,dmatops,dmat); DSDPCHKERR(info);
00222 DSDPFunctionReturn(0);
00223 }
00224
00225 #undef __FUNCT__
00226 #define __FUNCT__ "SDPConeAddDenseVecMat"
00227
00228 int SDPConeAddDenseVecMat(SDPCone sdpcone,int blockj, int vari,int n,
00229 double val[], int nnz){
00230 int info;
00231 DSDPFunctionBegin;
00232 info=SDPConeAddADenseVecMat(sdpcone,blockj,vari,n,1.0,val,nnz); DSDPCHKERR(info);
00233 DSDPFunctionReturn(0);
00234 }
00235
00236
00237 #undef __FUNCT__
00238 #define __FUNCT__ "SDPConeSetADenseVecMat"
00239
00265 int SDPConeSetADenseVecMat(SDPCone sdpcone,int blockj, int vari,int n,
00266 double alpha,double val[], int nnz){
00267 int info;
00268 DSDPFunctionBegin;
00269 info=SDPConeRemoveDataMatrix(sdpcone,blockj,vari); DSDPCHKERR(info);
00270 info=SDPConeAddADenseVecMat(sdpcone,blockj,vari,n,alpha,val,nnz); DSDPCHKERR(info);
00271 DSDPFunctionReturn(0);
00272 }
00273
00274 #undef __FUNCT__
00275 #define __FUNCT__ "SDPConeSetDenseVecMat"
00276
00277 int SDPConeSetDenseVecMat(SDPCone sdpcone,int blockj, int vari,int n,
00278 double val[], int nnz){
00279 int info;
00280 DSDPFunctionBegin;
00281 info=SDPConeSetADenseVecMat(sdpcone,blockj,vari,n,1.0,val,nnz); DSDPCHKERR(info);
00282 DSDPFunctionReturn(0);
00283 }
00284
00285
00286 #undef __FUNCT__
00287 #define __FUNCT__ "SDPConeAddIdentity"
00288
00299 int SDPConeAddIdentity(SDPCone sdpcone, int blockj,int vari, int n,
00300 double val){
00301 int info;
00302 char UPLQ;
00303 struct DSDPDataMat_Ops* identitymatops=0;
00304 void* imat=0;
00305
00306 DSDPFunctionBegin;
00307 DSDPLogInfo(0,20,"Set identity matrix: Block: %d, Variable %d, size: %d, Multiple: %4.4e .\n",blockj,vari,n,val);
00308 info=SDPConeGetStorageFormat(sdpcone,blockj,&UPLQ); DSDPCHKERR(info);
00309 switch (UPLQ){
00310 case 'P':
00311 info=DSDPGetIdentityDataMatP(n,val,&identitymatops,&imat);DSDPCHKERR(info);
00312 break;
00313 case 'U':
00314 info=DSDPGetIdentityDataMatF(n,val,&identitymatops,&imat);DSDPCHKERR(info);
00315 break;
00316 }
00317 info=SDPConeAddDataMatrix(sdpcone,blockj,vari,n,UPLQ,identitymatops,imat); DSDPCHKERR(info);
00318 DSDPFunctionReturn(0);
00319 }
00320
00321 #undef __FUNCT__
00322 #define __FUNCT__ "SDPConeSetIdentity"
00323
00334 int SDPConeSetIdentity(SDPCone sdpcone, int blockj, int vari, int n,
00335 double val){
00336 int info;
00337 DSDPFunctionBegin;
00338 info=SDPConeRemoveDataMatrix(sdpcone,blockj,vari); DSDPCHKERR(info);
00339 info=SDPConeAddIdentity(sdpcone,blockj,vari,n,val); DSDPCHKERR(info);
00340 DSDPFunctionReturn(0);
00341 }
00342
00343 #undef __FUNCT__
00344 #define __FUNCT__ "SDPConeAddConstantMat"
00345
00356 int SDPConeAddConstantMat(SDPCone sdpcone,int blockj, int vari, int n,
00357 double value){
00358 int info;
00359 char UPLQ;
00360 struct DSDPDataMat_Ops* constantmatops=0;
00361 void* smat=0;
00362
00363 DSDPFunctionBegin;
00364 DSDPLogInfo(0,20,"Add allsame matrix: Block: %d, Variable %d, size: %d, Elements: %4.4e .\n",blockj,vari,n,value);
00365 info=SDPConeGetStorageFormat(sdpcone,blockj,&UPLQ); DSDPCHKERR(info);
00366 switch (UPLQ){
00367 case 'P':
00368 info=DSDPGetConstantMat(n,value,UPLQ,&constantmatops,&smat);DSDPCHKERR(info);
00369 break;
00370 case 'U':
00371 info=DSDPGetConstantMat(n,value,UPLQ,&constantmatops,&smat);DSDPCHKERR(info);
00372 break;
00373 }
00374 info=SDPConeAddDataMatrix(sdpcone,blockj,vari,n,UPLQ,constantmatops,smat); DSDPCHKERR(info);
00375 DSDPFunctionReturn(0);
00376 }
00377
00378 #undef __FUNCT__
00379 #define __FUNCT__ "SDPConeSetConstantMat"
00380
00391 int SDPConeSetConstantMat(SDPCone sdpcone,int blockj, int vari, int n,
00392 double value){
00393 int info;
00394 DSDPFunctionBegin;
00395 info=SDPConeRemoveDataMatrix(sdpcone,blockj,vari); DSDPCHKERR(info);
00396 info=SDPConeAddConstantMat(sdpcone,blockj,vari,n,value); DSDPCHKERR(info);
00397 DSDPFunctionReturn(0);
00398 }
00399
00400
00401 #undef __FUNCT__
00402 #define __FUNCT__ "SDPConeSetZeroMat"
00403
00414 int SDPConeSetZeroMat(SDPCone sdpcone,int blockj, int vari, int n){
00415 int info;
00416 char UPLQ;
00417 struct DSDPDataMat_Ops* zeromatops=0;
00418 DSDPFunctionBegin;
00419 DSDPLogInfo(0,20,"Add zero matrix: Block: %d, Variable %d, size: %d .\n",blockj,vari,n);
00420 info=DSDPGetZeroDataMatOps(&zeromatops); DSDPCHKERR(info);
00421 info=SDPConeGetStorageFormat(sdpcone,blockj,&UPLQ); DSDPCHKERR(info);
00422 info=SDPConeRemoveDataMatrix(sdpcone,blockj,vari); DSDPCHKERR(info);
00423 info=SDPConeAddDataMatrix(sdpcone,blockj,vari,n,UPLQ,zeromatops,0); DSDPCHKERR(info);
00424 DSDPFunctionReturn(0);
00425 }
00426
00427 #undef __FUNCT__
00428 #define __FUNCT__ "SDPConeSetRIdentity"
00429
00438 int SDPConeSetRIdentity(SDPCone sdpcone,int blockj, int n, double rr){
00439 int info;
00440 char UPLQ;
00441 struct DSDPDataMat_Ops* identitymatops=0;
00442 void* imat=0;
00443 DSDPFunctionBegin;
00444 info=SDPConeGetStorageFormat(sdpcone,blockj,&UPLQ); DSDPCHKERR(info);
00445 switch (UPLQ){
00446 case 'P':
00447 info=DSDPGetIdentityDataMatP(n,rr,&identitymatops,&imat);DSDPCHKERR(info); break;
00448 case 'U':
00449 info=DSDPGetIdentityDataMatF(n,rr,&identitymatops,&imat);DSDPCHKERR(info); break;
00450 default:
00451 break;
00452 }
00453 info=SDPConeSetRMatrix(sdpcone,blockj,n,UPLQ,identitymatops,imat); DSDPCHKERR(info);
00454
00455 DSDPFunctionReturn(0);
00456 }
00457
00458 #undef __FUNCT__
00459 #define __FUNCT__ "SDPConeAddARankOneMat"
00460
00478 int SDPConeAddARankOneMat(SDPCone sdpcone,int blockj, int vari, int n,
00479 double alpha, int ishift,const int ind[], const double val[], int nnz){
00480
00481 int info;
00482 char UPLQ;
00483 void* dmat=0;
00484 struct DSDPDataMat_Ops* dmatops=0;
00485
00486 DSDPFunctionBegin;
00487 info=SDPConeGetStorageFormat(sdpcone,blockj,&UPLQ); DSDPCHKERR(info);
00488 DSDPLogInfo(0,20,"Set sparse matrix: Block: %d, Variable %d, size: %d, Nonzeros: %d .\n",blockj,vari,n,nnz);
00489 switch (UPLQ){
00490 case 'P':
00491 info=DSDPGetR1PMat(n,alpha,ishift,ind,val,nnz,&dmatops,&dmat); DSDPCHKERR(info);
00492 break;
00493 case 'U':
00494 info=DSDPGetR1UMat(n,alpha,ishift,ind,val,nnz,&dmatops,&dmat); DSDPCHKERR(info);
00495 break;
00496 }
00497 info=SDPConeAddDataMatrix(sdpcone,blockj,vari,n,UPLQ,dmatops,dmat); DSDPCHKERR(info);
00498 DSDPFunctionReturn(0);
00499 }
00500 #undef __FUNCT__
00501 #define __FUNCT__ "SDPConeSetARankOneMat"
00502
00519 int SDPConeSetARankOneMat(SDPCone sdpcone,int blockj, int vari, int n,
00520 double alpha, int ishift,const int ind[], const double val[], int nnz){
00521
00522
00523 int info;
00524 DSDPFunctionBegin;
00525 info=SDPConeRemoveDataMatrix(sdpcone,blockj,vari); DSDPCHKERR(info);
00526 info=SDPConeAddARankOneMat(sdpcone,blockj,vari,n,alpha,ishift,ind,val,nnz); DSDPCHKERR(info);
00527 DSDPFunctionReturn(0);
00528 }
00529
00530 #undef __FUNCT__
00531 #define __FUNCT__ "DSDPSetDataMatZero"
00532
00537 int DSDPSetDataMatZero(DSDPDataMat *A){
00538 int info;
00539 struct DSDPDataMat_Ops* zeromatops=0;
00540 DSDPFunctionBegin;
00541 info=DSDPGetZeroDataMatOps(&zeromatops); DSDPCHKERR(info);
00542 info=DSDPDataMatSetData(A,zeromatops,0);DSDPCHKERR(info);
00543 DSDPFunctionReturn(0);
00544 }
00545