DSDP
dsdpsdp.h
Go to the documentation of this file.
1 #ifndef __TAO_DSDPSDP_H
2 #define __TAO_DSDPSDP_H
8 #include "dsdpschurmat.h"
9 #include "dsdpbasictypes.h"
10 #include "dsdpvec.h"
11 
12 #include "sdpconevec.h"
13 #include "dsdpdatamat.h"
14 #include "dsdpdualmat.h"
15 #include "dsdpxmat.h"
16 #include "dsdpdsmat.h"
17 #include "dsdplanczos.h"
18 
19 typedef enum { SDPCONEEXIST=1, SDPCONESETUP1=2 } SDPConeStatus;
20 
25 typedef struct{
26  int m;
27  int *nnzblocks;
28  int **nzblocks;
29  int *ttnzmat;
30  int **nnzmats;
31  int **idA;
32  int *idAP;
34 
39 typedef struct{
40  int maxnnzmats;
41  int nnzmats;
42  int *nzmat;
43  DSDPDataMat *A;
44  double r; /* Multiple of Identity added to S to make it psd */
45  double scl;
47 
52 typedef struct{
53 
54  DSDPBlockData ADATA;
55  DSDPLanczosStepLength Lanczos; /* For Lanczos steplength routine */
56 
57  int n; /* Dimensions */
58  double gammamu; /* Scale Barrier, used only by user option */
59  double bmu; /* For LMI, not used */
60  char format; /* Packed Symmetric, Full Symmetric, Lower,Upper */
61  int nnz;
62  SDPConeStatus status;
63 
64  SDPConeVec W;
65  SDPConeVec W2;
66  DSDPIndex IS;
67 
68  DSDPDualMat S; /* Dual variable matrices */
69  DSDPDualMat SS; /* Compute primal variable matrices */
70  DSDPDSMat DS; /* Dual variable step matrices */
71  DSDPVMat T; /* Work Array and Primal variable matrice X */
72 
73 } SDPblk;
74 
80 struct SDPCone_C {
81  int keyid;
82 
83  /* Dimensions */
84  int m, nn;
85 
86  /* Data in block format */
87  int nblocks;
88  SDPblk *blk;
89 
90  /* Transpose of Data */
92 
93  /* Work space */
94  DSDPVec Work, Work2;
95 
96  /* Current Solution */
97  DSDPVec YY,YX,DYX;
98  double xmakermu;
99 
100  int optype;
101  DSDP dsdp;
102 };
103 
104 #define SDPCONEKEY 5438
105 #define SDPConeValid(a) {if (!(a)||((a)->keyid!=SDPCONEKEY)){ DSDPSETERR(101,"DSDPERROR: Invalid SDPCone object\n");}}
106 
107 #define DSDPCHKBLOCKERR(a,b); { if (b){ DSDPSETERR1(b,"Block Number: %d,\n",a);} }
108 #define DSDPCHKVARERR(a,b); { if (b){ DSDPSETERR1(b,"Variable Number: %d,\n",a);} }
109 
110 extern int DSDPSetDataMatZero(DSDPDataMat*);
111 
112 #include "dsdp5.h"
113 
114 #ifdef __cplusplus
115 extern "C" {
116 #endif
117 
118 /* Operations on the Data */
120 extern int DSDPBlockDataAllocate(DSDPBlockData*, int);
121 extern int DSDPBlockAddDataMatrix(DSDPBlockData*,int, struct DSDPDataMat_Ops*, void*);
122 extern int DSDPBlockSetDataMatrix(DSDPBlockData*,int, struct DSDPDataMat_Ops*, void*);
125 extern int DSDPBlockDataRowSparsity(DSDPBlockData*,int,int[],int[],int);
126 extern int DSDPBlockASum(DSDPBlockData*,double,DSDPVec,DSDPVMat);
130 extern int DSDPBlockCheck(DSDPBlockData*,SDPConeVec,DSDPVMat);
131 extern int DSDPBlockANorm2(DSDPBlockData*, DSDPVec, int);
132 extern int DSDPBlockView(DSDPBlockData*);
133 extern int DSDPBlockView2(DSDPBlockData*);
135 extern int DSDPBlockGetMatrix(DSDPBlockData*,int,int*,double*,DSDPDataMat*);
138 extern int DSDPBlockDataRank(DSDPBlockData*,int*,int);
139 
140 extern int DSDPBlockTakeDown(SDPblk*);
141 extern int DSDPBlockInitialize(SDPblk*);
142 
143 extern int DSDPBlockEventInitialize(void);
144 extern int DSDPBlockEventZero(void);
145 
146 extern int DSDPDataMatCheck(DSDPDataMat,SDPConeVec,DSDPIndex,DSDPVMat);
147 
148 /* Operations on the Transpose of the Data */
151 extern int DSDPDataTransposeSetup(DSDPDataTranspose*,SDPblk*,int,int);
152 
153 extern int DSDPUseDefaultDualMatrix(SDPCone);
154 
155 extern int SDPConeSetup(SDPCone,DSDPVec);
158 extern int SDPConeMultiply(SDPCone,int,double,DSDPVec,DSDPVec,DSDPVec);
159 extern int SDPConeComputeRHS(SDPCone, int, double, DSDPVec, DSDPVec,DSDPVec);
160 extern int SDPConeComputeXX(SDPCone,int,DSDPVec,double,DSDPDualMat, DSDPVMat);
161 extern int SDPConeDestroy(SDPCone);
162 
163 extern int SDPConeCheckJ(SDPCone,int);
164 extern int SDPConeCheckN(SDPCone,int, int);
165 extern int SDPConeCheckM(SDPCone,int);
166 extern int SDPConeCheckStorageFormat(SDPCone,int, char);
167 
168 
169 extern int SDPConeComputeSS(SDPCone, int, DSDPVec, DSDPVMat);
170 extern int SDPConeComputeXDot(SDPCone,int,DSDPVec,DSDPVMat,DSDPVec,double*,double*, double *);
171 extern int SDPConeComputeX3(SDPCone,int,double,DSDPVec,DSDPVec,DSDPVMat);
172 
173 /* extern int DSDPPrintSDPA(TAO_DSDP *); */
174 extern int DSDPMakeVMat(char, int, DSDPVMat*);
175 extern int DSDPMakeVMatWithArray(char, double[], int, int, DSDPVMat*);
176 
177 extern int DSDPSetDualMatrix(SDPCone sdpcone,int (*createdualmatrix)(DSDPBlockData*,DSDPVec,DSDPVMat,DSDPVec,DSDPVec,DSDPDualMat*,DSDPDualMat*,DSDPDSMat*,void*),void*);
178 
179 extern int DSDPAddSDP(DSDP,SDPCone);
180 #ifdef __cplusplus
181 }
182 #endif
183 
184 extern int SDPConeSetRIdentity(SDPCone,int,int,double);
185 extern int DSDPDualMatEventInitialize(void);
186 extern int DSDPVMatEventInitialize(void);
187 extern int DSDPDualMatEventZero(void);
188 extern int DSDPVMatEventZero(void);
189 
190 #endif
The API to DSDP for those applications using DSDP as a subroutine library.
Solver, solution types, termination codes,.
The interface between the SDPCone and the data matrices.
The interface between the SDPCone and the Delta S matrix.
The interface between the SDPCone and the matrix S.
Lanczos procedure determines the maximum step length.
Methods of a Schur Matrix.
int DSDPBlockvAv(DSDPBlockData *, double, DSDPVec, SDPConeVec, DSDPVec)
Set VAV[i] to aa * Alpha[i] * V' A[i] V.
Definition: dsdpblock.c:84
int SDPConeCheckStorageFormat(SDPCone, int, char)
Check validity of parameters.
Definition: dsdpadddata.c:101
int DSDPDataMatCheck(DSDPDataMat, SDPConeVec, DSDPIndex, DSDPVMat)
Check correctness of operations on the data.
Definition: dsdpblock.c:498
int DSDPDataTransposeInitialize(DSDPDataTranspose *)
Initialize transpose structure for data.
Definition: sdpconesetup.c:15
int DSDPMakeVMatWithArray(char, double[], int, int, DSDPVMat *)
Allocate V matrix using the given array.
Definition: sdpsss.c:381
int SDPConeMultiply(SDPCone, int, double, DSDPVec, DSDPVec, DSDPVec)
Compute the gradient to the barrier term.
Definition: sdpcompute.c:182
int DSDPBlockView(DSDPBlockData *)
Print the structure of the block.
Definition: dsdpblock.c:454
int SDPConeComputeX3(SDPCone, int, double, DSDPVec, DSDPVec, DSDPVMat)
Compute the matrix X with the given information.
Definition: sdpcone.c:140
int SDPConeComputeRHS(SDPCone, int, double, DSDPVec, DSDPVec, DSDPVec)
Compute the gradient to the barrier term.
Definition: sdpcompute.c:125
int DSDPBlockView2(DSDPBlockData *)
Print the data.
Definition: dsdpblock.c:474
int DSDPBlockDataMarkNonzeroMatrices(DSDPBlockData *, int *)
Mark which variable in block have a data matrix.
Definition: dsdpblock.c:254
int DSDPBlockDataAllocate(DSDPBlockData *, int)
Allocate some structures.
Definition: dsdpblock.c:221
int SDPConeCheckJ(SDPCone, int)
Check validity of parameter.
Definition: dsdpadddata.c:31
int SDPConeComputeHessian(SDPCone, double, DSDPSchurMat, DSDPVec, DSDPVec)
Compute the Hessian to the barrier term.
Definition: sdpcompute.c:30
int DSDPBlockADot(DSDPBlockData *, double, DSDPVec, DSDPVMat, DSDPVec)
Compute inner product of XX with data matrices.
Definition: dsdpblock.c:49
int DSDPBlockASum(DSDPBlockData *, double, DSDPVec, DSDPVMat)
Sum the data matrices.
Definition: dsdpblock.c:20
int DSDPDataTransposeSetup(DSDPDataTranspose *, SDPblk *, int, int)
Set up transpose structure for data.
Definition: sdpconesetup.c:36
int SDPConeComputeXX(SDPCone, int, DSDPVec, double, DSDPDualMat, DSDPVMat)
Compute X.
Definition: sdpcompute.c:235
int SDPConeSetup2(SDPCone, DSDPVec, DSDPSchurMat)
Allocate data structure of the cone.
Definition: sdpconesetup.c:224
int DSDPBlockDataInitialize(DSDPBlockData *)
Set pointers to null.
Definition: dsdpblock.c:163
int DSDPBlockDataRowSparsity(DSDPBlockData *, int, int[], int[], int)
Determine sparsity pattern of data.
Definition: dsdpblock.c:330
int DSDPDataTransposeTakeDown(DSDPDataTranspose *)
Free transpose structure for data.
Definition: sdpconesetup.c:89
int SDPConeSetRIdentity(SDPCone, int, int, double)
Add identify matrix to dual matrix.
int DSDPBlockFactorData(DSDPBlockData *, DSDPVMat, SDPConeVec)
Factor the data matrices.
Definition: dsdpblock.c:113
int DSDPBlockGetMatrix(DSDPBlockData *, int, int *, double *, DSDPDataMat *)
Get a data matrix from a block of data.
Definition: dsdpblock.c:307
int DSDPBlockDataDestroy(DSDPBlockData *)
Free the data matrices.
Definition: dsdpblock.c:195
int SDPConeDestroy(SDPCone)
Free data structure of the cone.
Definition: sdpconesetup.c:350
int SDPConeCheckN(SDPCone, int, int)
Check validity of parameter.
Definition: dsdpadddata.c:48
int DSDPSetDataMatZero(DSDPDataMat *)
Make a data matrix a zero matrix.
int SDPConeSetup(SDPCone, DSDPVec)
Allocate data structure of the cone.
Definition: sdpconesetup.c:249
int SDPConeCheckM(SDPCone, int)
Check validity of parameter.
Definition: dsdpadddata.c:68
int DSDPBlockCountNonzeroMatrices(DSDPBlockData *, int *)
Count how many data matrices are in a block of data.
Definition: dsdpblock.c:272
int SDPConeComputeSS(SDPCone, int, DSDPVec, DSDPVMat)
Sum the data matrices.
Definition: sdpcone.c:18
int DSDPBlockInitialize(SDPblk *)
Initialize data structures in one block of the cone.
Definition: sdpconesetup.c:279
int DSDPBlockTakeDownData(DSDPBlockData *)
Free structures in block of data.
Definition: dsdpblock.c:182
int DSDPBlockTakeDown(SDPblk *)
Free data structures in one block of the cone.
Definition: sdpconesetup.c:305
int SDPConeComputeXDot(SDPCone, int, DSDPVec, DSDPVMat, DSDPVec, double *, double *, double *)
Compute inner product of X with the Data, S, and norm of X.
Definition: sdpcone.c:111
int DSDPBlockRemoveDataMatrix(DSDPBlockData *, int)
Remove a data matrix.
Definition: dsdpblock.c:351
int DSDPAddSDP(DSDP, SDPCone)
Pass a semidefinite cone to the solver.
Definition: sdpkcone.c:331
int DSDPMakeVMat(char, int, DSDPVMat *)
Allocate V matrix.
Definition: sdpsss.c:351
Vector operations used by the solver.
struct DSDPVec_C DSDPVec
This object hold m+2 variables: a scaling of C, the y variables, and r.
Definition: dsdpvec.h:25
The interface between the SDPCone and the dense matrix array.
Each block of the SDPCone has two vectors of appropriate size.
Internal structure for data in one block of semidefintie.
Definition: dsdpsdp.h:39
Symmetric Delta S matrix for one block in the semidefinite cone.
Definition: dsdpdsmat.h:23
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 transpose of data.
Definition: dsdpsdp.h:25
Represents an S matrix for one block in the semidefinite cone.
Definition: dsdpdualmat.h:18
Apply Lanczos prodedure to find distance to boundary.
Definition: dsdplanczos.h:13
Schur complement matrix whose solution is the Newton direction.
Definition: dsdpschurmat.h:35
Dense symmetric matrix for one block in the semidefinite cone.
Definition: dsdpxmat.h:17
Internal structures for the DSDP solver.
Definition: dsdp.h:65
Vector whose length corresponds to dimension of a block in a cone.
Definition: sdpconevec.h:13
Internal structure for semidefinite cone.
Definition: dsdpsdp.h:80
Internal structure for block of semidefinite cone.
Definition: dsdpsdp.h:52