DSDP
dsdpadddatamat.c
Go to the documentation of this file.
1#include "dsdpdatamat.h"
2#include "dsdpsys.h"
3#include "dsdp5.h"
4
9
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.
struct SDPCone_C * SDPCone
The SDPCone object points to blocks of data that specify semidefinite matrix inequalities.
Definition dsdp5.h:26
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.
struct DSDPDataMat_C DSDPDataMat
Represents a single symmetric data matrix for one block in this semidefinite cone.
Definition dsdpdatamat.h:25
Error handling, printing, and profiling.
int SDPConeSetADenseVecMat(SDPCone sdpcone, int blockj, int vari, int n, double alpha, double val[], int nnz)
Set a matrix in a dense format.
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 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.
int SDPConeAddDataMatrix(SDPCone, int, int, int, char, struct DSDPDataMat_Ops *, void *)
Add a data matrix .
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 SDPConeSetConstantMat(SDPCone sdpcone, int blockj, int vari, int n, double value)
Set a matrix whose elements are all the same.
int SDPConeRemoveDataMatrix(SDPCone sdpcone, int blockj, int vari)
Remove the data matrix from the cone.
int SDPConeAddConstantMat(SDPCone sdpcone, int blockj, int vari, int n, double value)
Add a matrix whose elements are all the same.
int SDPConeAddIdentity(SDPCone sdpcone, int blockj, int vari, int n, double val)
Add a matrix that is a multiple of the identity matrix.
int SDPConeSetZeroMat(SDPCone sdpcone, int blockj, int vari, int n)
Set a matrix whose elements are all equal zero.
int SDPConeGetStorageFormat(SDPCone sdpcone, int blockj, char *format)
Get the storage format for the block.
int SDPConeSetIdentity(SDPCone sdpcone, int blockj, int vari, int n, double val)
Set a matrix to be a multiple of the identity matrix.
int SDPConeAddADenseVecMat(SDPCone sdpcone, int blockj, int vari, int n, double alpha, double val[], int nnz)
Add a matrix in a dense format.
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.
Table of function pointers that operate on the data matrix.