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 
int SDPConeSetARankOneMat(SDPCone sdpcone, int blockj, int vari, int n, double alpha, int ishift, const int ind[], const double val[], int nnz)
Set data matrix where v is a sparse vector.
int SDPConeSetRIdentity(SDPCone sdpcone, int blockj, int n, double rr)
Add identify matrix to dual matrix.
Error handling, printing, and profiling.
int SDPConeAddConstantMat(SDPCone sdpcone, int blockj, int vari, int n, double value)
Add a matrix whose elements are all the same.
int SDPConeAddADenseVecMat(SDPCone sdpcone, int blockj, int vari, int n, double alpha, double val[], int nnz)
Add a matrix in a dense format.
The API to DSDP for those applications using DSDP as a subroutine library.
int SDPConeSetConstantMat(SDPCone sdpcone, int blockj, int vari, int n, double value)
Set a matrix whose elements are all the same.
Symmetric data matrix for one block in the semidefinite cone.
Definition: dsdpdatamat.h:15
int SDPConeSetZeroMat(SDPCone sdpcone, int blockj, int vari, int n)
Set a matrix whose elements are all equal zero.
int SDPConeRemoveDataMatrix(SDPCone sdpcone, int blockj, int vari)
Remove the data matrix from the cone.
Definition: dsdpadddata.c:127
int DSDPGetR1PMat(int, double, int, const int[], const double[], int, struct DSDPDataMat_Ops **, void **)
Create a rank one matrix usuable by DSDP in packed symmetric format.
Definition: rmmat.c:77
int SDPConeAddARankOneMat(SDPCone sdpcone, int blockj, int vari, int n, double alpha, int ishift, const int ind[], const double val[], int nnz)
Add data matrix where v is a sparse vector.
The interface between the SDPCone and the data matrices.
int SDPConeAddASparseVecMat(SDPCone sdpcone, int blockj, int vari, int n, double alpha, int ishift, const int ind[], const double val[], int nnz)
Add data matrix in a sparse format.
int DSDPGetIdentityDataMatF(int, double, struct DSDPDataMat_Ops **, void **)
Create a sparse matrix usuable by DSDP in full symmetric format.
Definition: identity.c:69
Table of function pointers that operate on the data matrix.
int SDPConeSetIdentity(SDPCone sdpcone, int blockj, int vari, int n, double val)
Set a matrix to be a multiple of the identity matrix.
int DSDPGetVechMat(int, int, double, const int[], const double[], int, struct DSDPDataMat_Ops **, void **)
Given data in packed symmetric format, create a sparse matrix usuable by DSDP.
Definition: vech.c:460
int DSDPSetDataMatZero(DSDPDataMat *A)
Make a data matrix a zero matrix.
int DSDPGetIdentityDataMatP(int, double, struct DSDPDataMat_Ops **, void **)
Create a sparse matrix usuable by DSDP in packed symmetric format.
Definition: identity.c:44
int SDPConeSetRMatrix(SDPCone, int, int, char, struct DSDPDataMat_Ops *, void *)
Add identity to dual matrix.
Definition: dsdpadddata.c:181
Internal structure for semidefinite cone.
Definition: dsdpsdp.h:80
int DSDPGetVecUMat(int, int, double, const int[], const double[], int, struct DSDPDataMat_Ops **, void **)
Given data in full symmetric format, create a sparse matrix usuable by DSDP.
Definition: vechu.c:454
int SDPConeGetStorageFormat(SDPCone sdpcone, int blockj, char *format)
Get the storage format for the block.
Definition: dsdpadddata.c:505
int DSDPGetR1UMat(int, double, int, const int[], const double[], int, struct DSDPDataMat_Ops **, void **)
Create a rank one matrix usuable by DSDP in full symmetric format.
Definition: rmmat.c:101
int SDPConeAddIdentity(SDPCone sdpcone, int blockj, int vari, int n, double val)
Add a matrix that is a multiple of the identity matrix.
int SDPConeSetASparseVecMat(SDPCone sdpcone, int blockj, int vari, int n, double alpha, int ishift, const int ind[], const double val[], int nnz)
Set data matrix in a sparse format.
int SDPConeSetADenseVecMat(SDPCone sdpcone, int blockj, int vari, int n, double alpha, double val[], int nnz)
Set a matrix in a dense format.
int SDPConeAddDataMatrix(SDPCone, int, int, int, char, struct DSDPDataMat_Ops *, void *)
Add a data matrix .
Definition: dsdpadddata.c:154