DSDP
dsdpadddatamat.c
Go to the documentation of this file.
1#include "dsdpdatamat.h"
2#include "dsdpsys.h"
3#include "dsdp5.h"
4
10extern int DSDPGetZeroDataMatOps(struct DSDPDataMat_Ops**);
11extern int DSDPGetConstantMat(int,double,char,struct DSDPDataMat_Ops**,void**);
12
13extern int DSDPGetVechMat(int,int,double,const int[], const double[],int, struct DSDPDataMat_Ops**,void**);
14extern int DSDPGetVecUMat(int,int,double,const int[], const double[],int, struct DSDPDataMat_Ops**,void**);
15
16extern int DSDPGetIdentityDataMatP(int,double,struct DSDPDataMat_Ops**,void**);
17extern int DSDPGetIdentityDataMatF(int,double,struct DSDPDataMat_Ops**,void**);
18
19extern int DSDPGetDMat(int,double,double[],struct DSDPDataMat_Ops**,void**);
20
21extern int DSDPGetR1PMat(int,double,int,const int[],const double[],int,struct DSDPDataMat_Ops**,void**);
22extern int DSDPGetR1UMat(int,double,int,const int[],const double[],int,struct DSDPDataMat_Ops**,void**);
23
24extern int SDPConeAddDataMatrix(SDPCone,int, int, int, char, struct DSDPDataMat_Ops*, void*);
25extern int SDPConeSetRMatrix(SDPCone,int,int,char,struct DSDPDataMat_Ops*,void*);
26
27
28#undef __FUNCT__
29#define __FUNCT__ "SDPConeAddASparseVecMat"
49int 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 */
76int 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"
152int 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 */
166int 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"
203int 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 */
228int 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"
265int 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 */
277int 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"
299int 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"
334int 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"
356int 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"
391int 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"
414int 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"
438int 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"
478int 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"
519int 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"
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
The API to DSDP for those applications using DSDP as a subroutine library.
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 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 SDPConeSetRMatrix(SDPCone, int, int, char, struct DSDPDataMat_Ops *, void *)
Add identity to dual 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 DSDPGetIdentityDataMatF(int, double, struct DSDPDataMat_Ops **, void **)
Create a sparse matrix usuable by DSDP in full symmetric format.
Definition identity.c:69
int SDPConeSetRIdentity(SDPCone sdpcone, int blockj, int n, double rr)
Add identify matrix to dual matrix.
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 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 DSDPDataMatSetData(DSDPDataMat *A, struct DSDPDataMat_Ops *ops, void *data)
Set the opaque pointer and function pointers to the matrix.
Definition dsdpdatamat.c:25
The interface between the SDPCone and the data matrices.
Error handling, printing, and profiling.
Symmetric data matrix for one block in the semidefinite cone.
Definition dsdpdatamat.h:15
Table of function pointers that operate on the data matrix.
Internal structure for semidefinite cone.
Definition dsdpsdp.h:80