DSDP
dsdpadddatamat.c
Go to the documentation of this file.
1 #include "dsdpdatamat.h"
2 #include "dsdpsys.h"
3 #include "dsdp5.h"
4 
10 extern int DSDPGetZeroDataMatOps(struct DSDPDataMat_Ops**);
11 extern int DSDPGetConstantMat(int,double,char,struct DSDPDataMat_Ops**,void**);
12 
13 extern int DSDPGetVechMat(int,int,double,const int[], const double[],int, struct DSDPDataMat_Ops**,void**);
14 extern int DSDPGetVecUMat(int,int,double,const int[], const double[],int, struct DSDPDataMat_Ops**,void**);
15 
16 extern int DSDPGetIdentityDataMatP(int,double,struct DSDPDataMat_Ops**,void**);
17 extern int DSDPGetIdentityDataMatF(int,double,struct DSDPDataMat_Ops**,void**);
18 
19 extern int DSDPGetDMat(int,double,double[],struct DSDPDataMat_Ops**,void**);
20 
21 extern int DSDPGetR1PMat(int,double,int,const int[],const double[],int,struct DSDPDataMat_Ops**,void**);
22 extern int DSDPGetR1UMat(int,double,int,const int[],const double[],int,struct DSDPDataMat_Ops**,void**);
23 
24 extern int SDPConeAddDataMatrix(SDPCone,int, int, int, char, struct DSDPDataMat_Ops*, void*);
25 extern int SDPConeSetRMatrix(SDPCone,int,int,char,struct DSDPDataMat_Ops*,void*);
26 
27 
28 #undef __FUNCT__
29 #define __FUNCT__ "SDPConeAddASparseVecMat"
30 
49 int SDPConeAddASparseVecMat(SDPCone sdpcone,int blockj, int vari, int n,
50  double alpha, int ishift,
51  const int ind[], const double val[], int nnz){
52 
53  int info;
54  char UPLQ;
55  void* dmat=0;
56  struct DSDPDataMat_Ops* dmatops=0;
57 
58  DSDPFunctionBegin;
59  info=SDPConeGetStorageFormat(sdpcone,blockj,&UPLQ); DSDPCHKERR(info);
60  DSDPLogInfo(0,20,"Set sparse matrix: Block: %d, Variable %d, size: %d, Nonzeros: %d .\n",blockj,vari,n,nnz);
61  switch (UPLQ){
62  case 'P':
63  info=DSDPGetVechMat(n,ishift,alpha,ind,val,nnz,&dmatops,&dmat); DSDPCHKERR(info);
64  break;
65  case 'U':
66  info=DSDPGetVecUMat(n,ishift,alpha,ind,val,nnz,&dmatops,&dmat); DSDPCHKERR(info);
67  break;
68  }
69  info=SDPConeAddDataMatrix(sdpcone,blockj,vari,n,UPLQ,dmatops,dmat); DSDPCHKERR(info);
70  DSDPFunctionReturn(0);
71 }
72 
73 #undef __FUNCT__
74 #define __FUNCT__ "SDPConeAddSparseVecMat"
75 /* Needed for backward compatibility */
76 int SDPConeAddSparseVecMat(SDPCone sdpcone,int blockj, int vari, int n,
77  int ishift,const int ind[], const double val[], int nnz){
78 
79  int info;
80 
81  DSDPFunctionBegin;
82  info= SDPConeAddASparseVecMat(sdpcone,blockj,vari,n,
83  1.0,ishift,ind,val,nnz);DSDPCHKERR(info);
84  DSDPFunctionReturn(0);
85 }
86 
87 #undef __FUNCT__
88 #define __FUNCT__ "SDPConeSetASparseVecMat"
89 
152 int SDPConeSetASparseVecMat(SDPCone sdpcone,int blockj, int vari, int n,
153  double alpha,int ishift,
154  const int ind[], const double val[], int nnz){
155 
156  int info;
157  DSDPFunctionBegin;
158  info=SDPConeRemoveDataMatrix(sdpcone,blockj,vari); DSDPCHKERR(info);
159  info=SDPConeAddASparseVecMat(sdpcone,blockj,vari,n,alpha,ishift,ind,val,nnz); DSDPCHKERR(info);
160  DSDPFunctionReturn(0);
161 }
162 
163 #undef __FUNCT__
164 #define __FUNCT__ "SDPConeSetSparseVecMat"
165 /* Needed for backward compatibility */
166 int SDPConeSetSparseVecMat(SDPCone sdpcone,int blockj, int vari, int n,
167  int ishift,const int ind[], const double val[], int nnz){
168 
169  int info;
170  DSDPFunctionBegin;
171  info=SDPConeSetASparseVecMat(sdpcone,blockj,vari,n,1.0,ishift,ind,val,nnz); DSDPCHKERR(info);
172  DSDPFunctionReturn(0);
173 }
174 
175 
176 #undef __FUNCT__
177 #define __FUNCT__ "SDPConeAddADenseVecMat"
178 
203 int SDPConeAddADenseVecMat(SDPCone sdpcone,int blockj, int vari,int n,
204  double alpha,double val[], int nnz){
205  int info;
206  char UPLQ;
207  void* dmat=0;
208  struct DSDPDataMat_Ops* dmatops=0;
209 
210  DSDPFunctionBegin;
211  info=SDPConeGetStorageFormat(sdpcone,blockj,&UPLQ); DSDPCHKERR(info);
212  DSDPLogInfo(0,20,"Set dense matrix: Block: %d, Variable %d, size: %d, Nonzeros: %d .\n",blockj,vari,n,nnz);
213  switch (UPLQ){
214  case 'P':
215  info=DSDPGetDMat(n,alpha,val,&dmatops,&dmat); DSDPCHKERR(info);
216  break;
217  case 'U':
218  DSDPSETERR(1,"Dense U Mat type does not exist.\n");
219  break;
220  }
221  info=SDPConeAddDataMatrix(sdpcone,blockj,vari,n,UPLQ,dmatops,dmat); DSDPCHKERR(info);
222  DSDPFunctionReturn(0);
223 }
224 
225 #undef __FUNCT__
226 #define __FUNCT__ "SDPConeAddDenseVecMat"
227 /* Needed for backward compatibility */
228 int SDPConeAddDenseVecMat(SDPCone sdpcone,int blockj, int vari,int n,
229  double val[], int nnz){
230  int info;
231  DSDPFunctionBegin;
232  info=SDPConeAddADenseVecMat(sdpcone,blockj,vari,n,1.0,val,nnz); DSDPCHKERR(info);
233  DSDPFunctionReturn(0);
234 }
235 
236 
237 #undef __FUNCT__
238 #define __FUNCT__ "SDPConeSetADenseVecMat"
239 
265 int SDPConeSetADenseVecMat(SDPCone sdpcone,int blockj, int vari,int n,
266  double alpha,double val[], int nnz){
267  int info;
268  DSDPFunctionBegin;
269  info=SDPConeRemoveDataMatrix(sdpcone,blockj,vari); DSDPCHKERR(info);
270  info=SDPConeAddADenseVecMat(sdpcone,blockj,vari,n,alpha,val,nnz); DSDPCHKERR(info);
271  DSDPFunctionReturn(0);
272 }
273 
274 #undef __FUNCT__
275 #define __FUNCT__ "SDPConeSetDenseVecMat"
276 /* Needed for backward compatibility */
277 int SDPConeSetDenseVecMat(SDPCone sdpcone,int blockj, int vari,int n,
278  double val[], int nnz){
279  int info;
280  DSDPFunctionBegin;
281  info=SDPConeSetADenseVecMat(sdpcone,blockj,vari,n,1.0,val,nnz); DSDPCHKERR(info);
282  DSDPFunctionReturn(0);
283 }
284 
285 
286 #undef __FUNCT__
287 #define __FUNCT__ "SDPConeAddIdentity"
288 
299 int SDPConeAddIdentity(SDPCone sdpcone, int blockj,int vari, int n,
300  double val){
301  int info;
302  char UPLQ;
303  struct DSDPDataMat_Ops* identitymatops=0;
304  void* imat=0;
305 
306  DSDPFunctionBegin;
307  DSDPLogInfo(0,20,"Set identity matrix: Block: %d, Variable %d, size: %d, Multiple: %4.4e .\n",blockj,vari,n,val);
308  info=SDPConeGetStorageFormat(sdpcone,blockj,&UPLQ); DSDPCHKERR(info);
309  switch (UPLQ){
310  case 'P':
311  info=DSDPGetIdentityDataMatP(n,val,&identitymatops,&imat);DSDPCHKERR(info);
312  break;
313  case 'U':
314  info=DSDPGetIdentityDataMatF(n,val,&identitymatops,&imat);DSDPCHKERR(info);
315  break;
316  }
317  info=SDPConeAddDataMatrix(sdpcone,blockj,vari,n,UPLQ,identitymatops,imat); DSDPCHKERR(info);
318  DSDPFunctionReturn(0);
319 }
320 
321 #undef __FUNCT__
322 #define __FUNCT__ "SDPConeSetIdentity"
323 
334 int SDPConeSetIdentity(SDPCone sdpcone, int blockj, int vari, int n,
335  double val){
336  int info;
337  DSDPFunctionBegin;
338  info=SDPConeRemoveDataMatrix(sdpcone,blockj,vari); DSDPCHKERR(info);
339  info=SDPConeAddIdentity(sdpcone,blockj,vari,n,val); DSDPCHKERR(info);
340  DSDPFunctionReturn(0);
341 }
342 
343 #undef __FUNCT__
344 #define __FUNCT__ "SDPConeAddConstantMat"
345 
356 int SDPConeAddConstantMat(SDPCone sdpcone,int blockj, int vari, int n,
357  double value){
358  int info;
359  char UPLQ;
360  struct DSDPDataMat_Ops* constantmatops=0;
361  void* smat=0;
362 
363  DSDPFunctionBegin;
364  DSDPLogInfo(0,20,"Add allsame matrix: Block: %d, Variable %d, size: %d, Elements: %4.4e .\n",blockj,vari,n,value);
365  info=SDPConeGetStorageFormat(sdpcone,blockj,&UPLQ); DSDPCHKERR(info);
366  switch (UPLQ){
367  case 'P':
368  info=DSDPGetConstantMat(n,value,UPLQ,&constantmatops,&smat);DSDPCHKERR(info);
369  break;
370  case 'U':
371  info=DSDPGetConstantMat(n,value,UPLQ,&constantmatops,&smat);DSDPCHKERR(info);
372  break;
373  }
374  info=SDPConeAddDataMatrix(sdpcone,blockj,vari,n,UPLQ,constantmatops,smat); DSDPCHKERR(info);
375  DSDPFunctionReturn(0);
376 }
377 
378 #undef __FUNCT__
379 #define __FUNCT__ "SDPConeSetConstantMat"
380 
391 int SDPConeSetConstantMat(SDPCone sdpcone,int blockj, int vari, int n,
392  double value){
393  int info;
394  DSDPFunctionBegin;
395  info=SDPConeRemoveDataMatrix(sdpcone,blockj,vari); DSDPCHKERR(info);
396  info=SDPConeAddConstantMat(sdpcone,blockj,vari,n,value); DSDPCHKERR(info);
397  DSDPFunctionReturn(0);
398 }
399 
400 
401 #undef __FUNCT__
402 #define __FUNCT__ "SDPConeSetZeroMat"
403 
414 int SDPConeSetZeroMat(SDPCone sdpcone,int blockj, int vari, int n){
415  int info;
416  char UPLQ;
417  struct DSDPDataMat_Ops* zeromatops=0;
418  DSDPFunctionBegin;
419  DSDPLogInfo(0,20,"Add zero matrix: Block: %d, Variable %d, size: %d .\n",blockj,vari,n);
420  info=DSDPGetZeroDataMatOps(&zeromatops); DSDPCHKERR(info);
421  info=SDPConeGetStorageFormat(sdpcone,blockj,&UPLQ); DSDPCHKERR(info);
422  info=SDPConeRemoveDataMatrix(sdpcone,blockj,vari); DSDPCHKERR(info);
423  info=SDPConeAddDataMatrix(sdpcone,blockj,vari,n,UPLQ,zeromatops,0); DSDPCHKERR(info);
424  DSDPFunctionReturn(0);
425 }
426 
427 #undef __FUNCT__
428 #define __FUNCT__ "SDPConeSetRIdentity"
429 
438 int SDPConeSetRIdentity(SDPCone sdpcone,int blockj, int n, double rr){
439  int info;
440  char UPLQ;
441  struct DSDPDataMat_Ops* identitymatops=0;
442  void* imat=0;
443  DSDPFunctionBegin;
444  info=SDPConeGetStorageFormat(sdpcone,blockj,&UPLQ); DSDPCHKERR(info);
445  switch (UPLQ){
446  case 'P':
447  info=DSDPGetIdentityDataMatP(n,rr,&identitymatops,&imat);DSDPCHKERR(info); break;
448  case 'U':
449  info=DSDPGetIdentityDataMatF(n,rr,&identitymatops,&imat);DSDPCHKERR(info); break;
450  default:
451  break;
452  }
453  info=SDPConeSetRMatrix(sdpcone,blockj,n,UPLQ,identitymatops,imat); DSDPCHKERR(info);
454 
455  DSDPFunctionReturn(0);
456 }
457 
458 #undef __FUNCT__
459 #define __FUNCT__ "SDPConeAddARankOneMat"
460 
478 int SDPConeAddARankOneMat(SDPCone sdpcone,int blockj, int vari, int n,
479  double alpha, int ishift,const int ind[], const double val[], int nnz){
480 
481  int info;
482  char UPLQ;
483  void* dmat=0;
484  struct DSDPDataMat_Ops* dmatops=0;
485 
486  DSDPFunctionBegin;
487  info=SDPConeGetStorageFormat(sdpcone,blockj,&UPLQ); DSDPCHKERR(info);
488  DSDPLogInfo(0,20,"Set sparse matrix: Block: %d, Variable %d, size: %d, Nonzeros: %d .\n",blockj,vari,n,nnz);
489  switch (UPLQ){
490  case 'P':
491  info=DSDPGetR1PMat(n,alpha,ishift,ind,val,nnz,&dmatops,&dmat); DSDPCHKERR(info);
492  break;
493  case 'U':
494  info=DSDPGetR1UMat(n,alpha,ishift,ind,val,nnz,&dmatops,&dmat); DSDPCHKERR(info);
495  break;
496  }
497  info=SDPConeAddDataMatrix(sdpcone,blockj,vari,n,UPLQ,dmatops,dmat); DSDPCHKERR(info);
498  DSDPFunctionReturn(0);
499 }
500 #undef __FUNCT__
501 #define __FUNCT__ "SDPConeSetARankOneMat"
502 
519 int SDPConeSetARankOneMat(SDPCone sdpcone,int blockj, int vari, int n,
520  double alpha, int ishift,const int ind[], const double val[], int nnz){
521 
522 
523  int info;
524  DSDPFunctionBegin;
525  info=SDPConeRemoveDataMatrix(sdpcone,blockj,vari); DSDPCHKERR(info);
526  info=SDPConeAddARankOneMat(sdpcone,blockj,vari,n,alpha,ishift,ind,val,nnz); DSDPCHKERR(info);
527  DSDPFunctionReturn(0);
528 }
529 
530 #undef __FUNCT__
531 #define __FUNCT__ "DSDPSetDataMatZero"
532 
538  int info;
539  struct DSDPDataMat_Ops* zeromatops=0;
540  DSDPFunctionBegin;
541  info=DSDPGetZeroDataMatOps(&zeromatops); DSDPCHKERR(info);
542  info=DSDPDataMatSetData(A,zeromatops,0);DSDPCHKERR(info);
543  DSDPFunctionReturn(0);
544 }
545