DSDP
dsdpsdp.h
Go to the documentation of this file.
1 #ifndef __TAO_DSDPSDP_H
2 #define __TAO_DSDPSDP_H
3 
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
int SDPConeComputeXX(SDPCone, int, DSDPVec, double, DSDPDualMat, DSDPVMat)
Compute X.
Definition: sdpcompute.c:235
Internal structure for transpose of data.
Definition: dsdpsdp.h:25
int DSDPBlockDataRowSparsity(DSDPBlockData *, int, int[], int[], int)
Determine sparsity pattern of data.
Definition: dsdpblock.c:330
The interface between the SDPCone and the matrix S.
int SDPConeCheckN(SDPCone, int, int)
Check validity of parameter.
Definition: dsdpadddata.c:48
int DSDPDataTransposeTakeDown(DSDPDataTranspose *)
Free transpose structure for data.
Definition: sdpconesetup.c:89
struct DSDPVec_C DSDPVec
This object hold m+2 variables: a scaling of C, the y variables, and r.
Definition: dsdpvec.h:25
int DSDPMakeVMatWithArray(char, double[], int, int, DSDPVMat *)
Allocate V matrix using the given array.
Definition: sdpsss.c:381
Schur complement matrix whose solution is the Newton direction.
Definition: dsdpschurmat.h:35
Lanczos procedure determines the maximum step length.
int DSDPBlockTakeDownData(DSDPBlockData *)
Free structures in block of data.
Definition: dsdpblock.c:182
int SDPConeMultiply(SDPCone, int, double, DSDPVec, DSDPVec, DSDPVec)
Compute the gradient to the barrier term.
Definition: sdpcompute.c:182
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 DSDPBlockSetDataMatrix(DSDPBlockData *, int, struct DSDPDataMat_Ops *, void *)
Set data matrix into SDP block.
Definition: dsdpblock.c:406
int DSDPBlockASum(DSDPBlockData *, double, DSDPVec, DSDPVMat)
Sum the data matrices.
Definition: dsdpblock.c:20
int SDPConeSetRIdentity(SDPCone, int, int, double)
Add identify matrix to dual matrix.
int SDPConeDestroy(SDPCone)
Free data structure of the cone.
Definition: sdpconesetup.c:350
int DSDPBlockAddDataMatrix(DSDPBlockData *, int, struct DSDPDataMat_Ops *, void *)
Add data matrix into SDP block.
Definition: dsdpblock.c:381
int DSDPBlockADot(DSDPBlockData *, double, DSDPVec, DSDPVMat, DSDPVec)
Compute inner product of XX with data matrices.
Definition: dsdpblock.c:49
The interface between the SDPCone and the Delta S matrix.
int DSDPBlockFactorData(DSDPBlockData *, DSDPVMat, SDPConeVec)
Factor the data matrices.
Definition: dsdpblock.c:113
Internal structures for the DSDP solver.
Definition: dsdp.h:65
Apply Lanczos prodedure to find distance to boundary.
Definition: dsdplanczos.h:13
The API to DSDP for those applications using DSDP as a subroutine library.
int DSDPDataMatCheck(DSDPDataMat, SDPConeVec, DSDPIndex, DSDPVMat)
Check correctness of operations on the data.
Definition: dsdpblock.c:498
Each block of the SDPCone has two vectors of appropriate size.
Internal structure for data in one block of semidefintie.
Definition: dsdpsdp.h:39
Solver, solution types, termination codes,.
int SDPConeCheckStorageFormat(SDPCone, int, char)
Check validity of parameters.
Definition: dsdpadddata.c:101
Vector whose length corresponds to dimension of a block in a cone.
Definition: sdpconevec.h:13
int DSDPBlockGetMatrix(DSDPBlockData *, int, int *, double *, DSDPDataMat *)
Get a data matrix from a block of data.
Definition: dsdpblock.c:307
Symmetric data matrix for one block in the semidefinite cone.
Definition: dsdpdatamat.h:15
int SDPConeCheckJ(SDPCone, int)
Check validity of parameter.
Definition: dsdpadddata.c:31
Methods of a Schur Matrix.
The interface between the SDPCone and the dense matrix array.
int DSDPBlockTakeDown(SDPblk *)
Free data structures in one block of the cone.
Definition: sdpconesetup.c:305
Vector operations used by the solver.
The interface between the SDPCone and the data matrices.
int SDPConeComputeSS(SDPCone, int, DSDPVec, DSDPVMat)
Sum the data matrices.
Definition: sdpcone.c:18
Table of function pointers that operate on the data matrix.
int DSDPBlockDataAllocate(DSDPBlockData *, int)
Allocate some structures.
Definition: dsdpblock.c:221
Internal structure for block of semidefinite cone.
Definition: dsdpsdp.h:52
int DSDPBlockRemoveDataMatrix(DSDPBlockData *, int)
Remove a data matrix.
Definition: dsdpblock.c:351
int DSDPSetDataMatZero(DSDPDataMat *)
Make a data matrix a zero matrix.
int DSDPBlockCountNonzeroMatrices(DSDPBlockData *, int *)
Count how many data matrices are in a block of data.
Definition: dsdpblock.c:272
int DSDPBlockView2(DSDPBlockData *)
Print the data.
Definition: dsdpblock.c:474
Represents an S matrix for one block in the semidefinite cone.
Definition: dsdpdualmat.h:18
int DSDPBlockView(DSDPBlockData *)
Print the structure of the block.
Definition: dsdpblock.c:454
int SDPConeCheckM(SDPCone, int)
Check validity of parameter.
Definition: dsdpadddata.c:68
int DSDPDataTransposeInitialize(DSDPDataTranspose *)
Initialize transpose structure for data.
Definition: sdpconesetup.c:15
Internal structure for semidefinite cone.
Definition: dsdpsdp.h:80
int SDPConeComputeRHS(SDPCone, int, double, DSDPVec, DSDPVec, DSDPVec)
Compute the gradient to the barrier term.
Definition: sdpcompute.c:125
int DSDPBlockvAv(DSDPBlockData *, double, DSDPVec, SDPConeVec, DSDPVec)
Set VAV[i] to aa * Alpha[i] * V' A[i] V.
Definition: dsdpblock.c:84
int SDPConeComputeHessian(SDPCone, double, DSDPSchurMat, DSDPVec, DSDPVec)
Compute the Hessian to the barrier term.
Definition: sdpcompute.c:30
int DSDPMakeVMat(char, int, DSDPVMat *)
Allocate V matrix.
Definition: sdpsss.c:351
int SDPConeComputeX3(SDPCone, int, double, DSDPVec, DSDPVec, DSDPVMat)
Compute the matrix X with the given information.
Definition: sdpcone.c:140
int DSDPBlockDataMarkNonzeroMatrices(DSDPBlockData *, int *)
Mark which variable in block have a data matrix.
Definition: dsdpblock.c:254
Symmetric Delta S matrix for one block in the semidefinite cone.
Definition: dsdpdsmat.h:23
int DSDPDataTransposeSetup(DSDPDataTranspose *, SDPblk *, int, int)
Set up transpose structure for data.
Definition: sdpconesetup.c:36
Dense symmetric matrix for one block in the semidefinite cone.
Definition: dsdpxmat.h:17
int DSDPAddSDP(DSDP, SDPCone)
Pass a semidefinite cone to the solver.
Definition: sdpkcone.c:331
int DSDPBlockInitialize(SDPblk *)
Initialize data structures in one block of the cone.
Definition: sdpconesetup.c:279
int SDPConeSetup(SDPCone, DSDPVec)
Allocate data structure of the cone.
Definition: sdpconesetup.c:249
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 DSDPBlockDataDestroy(DSDPBlockData *)
Free the data matrices.
Definition: dsdpblock.c:195