dsdpadddatamat.c

Go to the documentation of this file.
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 /* Needed for backward compatibility */
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 /* Needed for backward compatibility */
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 /* Needed for backward compatibility */
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 /* Needed for backward compatibility */
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 

Generated on Wed Nov 11 20:41:02 2009 for DSDP by  doxygen 1.6.1