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
19typedef enum { SDPCONEEXIST=1, SDPCONESETUP1=2 } SDPConeStatus;
20
25typedef struct{
26 int m;
27 int *nnzblocks;
28 int **nzblocks;
29 int *ttnzmat;
30 int **nnzmats;
31 int **idA;
32 int *idAP;
34
39typedef 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
52typedef 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
80struct 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
111
112#include "dsdp5.h"
113
114#ifdef __cplusplus
115extern "C" {
116#endif
117
118/* Operations on the Data */
120extern int DSDPBlockDataAllocate(DSDPBlockData*, int);
121extern int DSDPBlockAddDataMatrix(DSDPBlockData*,int, struct DSDPDataMat_Ops*, void*);
122extern int DSDPBlockSetDataMatrix(DSDPBlockData*,int, struct DSDPDataMat_Ops*, void*);
125extern int DSDPBlockDataRowSparsity(DSDPBlockData*,int,int[],int[],int);
126extern int DSDPBlockASum(DSDPBlockData*,double,DSDPVec,DSDPVMat);
130extern int DSDPBlockCheck(DSDPBlockData*,SDPConeVec,DSDPVMat);
131extern int DSDPBlockANorm2(DSDPBlockData*, DSDPVec, int);
132extern int DSDPBlockView(DSDPBlockData*);
133extern int DSDPBlockView2(DSDPBlockData*);
135extern int DSDPBlockGetMatrix(DSDPBlockData*,int,int*,double*,DSDPDataMat*);
138extern int DSDPBlockDataRank(DSDPBlockData*,int*,int);
139
140extern int DSDPBlockTakeDown(SDPblk*);
141extern int DSDPBlockInitialize(SDPblk*);
142
143extern int DSDPBlockEventInitialize(void);
144extern int DSDPBlockEventZero(void);
145
146extern int DSDPDataMatCheck(DSDPDataMat,SDPConeVec,DSDPIndex,DSDPVMat);
147
148/* Operations on the Transpose of the Data */
152
153extern int DSDPUseDefaultDualMatrix(SDPCone);
154
155extern int SDPConeSetup(SDPCone,DSDPVec);
158extern int SDPConeMultiply(SDPCone,int,double,DSDPVec,DSDPVec,DSDPVec);
159extern int SDPConeComputeRHS(SDPCone, int, double, DSDPVec, DSDPVec,DSDPVec);
160extern int SDPConeComputeXX(SDPCone,int,DSDPVec,double,DSDPDualMat, DSDPVMat);
161extern int SDPConeDestroy(SDPCone);
162
163extern int SDPConeCheckJ(SDPCone,int);
164extern int SDPConeCheckN(SDPCone,int, int);
165extern int SDPConeCheckM(SDPCone,int);
166extern int SDPConeCheckStorageFormat(SDPCone,int, char);
167
168
169extern int SDPConeComputeSS(SDPCone, int, DSDPVec, DSDPVMat);
170extern int SDPConeComputeXDot(SDPCone,int,DSDPVec,DSDPVMat,DSDPVec,double*,double*, double *);
171extern int SDPConeComputeX3(SDPCone,int,double,DSDPVec,DSDPVec,DSDPVMat);
172
173/* extern int DSDPPrintSDPA(TAO_DSDP *); */
174extern int DSDPMakeVMat(char, int, DSDPVMat*);
175extern int DSDPMakeVMatWithArray(char, double[], int, int, DSDPVMat*);
176
177extern int DSDPSetDualMatrix(SDPCone sdpcone,int (*createdualmatrix)(DSDPBlockData*,DSDPVec,DSDPVMat,DSDPVec,DSDPVec,DSDPDualMat*,DSDPDualMat*,DSDPDSMat*,void*),void*);
178
179extern int DSDPAddSDP(DSDP,SDPCone);
180#ifdef __cplusplus
181}
182#endif
183
184extern int SDPConeSetRIdentity(SDPCone,int,int,double);
185extern int DSDPDualMatEventInitialize(void);
186extern int DSDPVMatEventInitialize(void);
187extern int DSDPDualMatEventZero(void);
188extern 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.
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.
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 DSDPBlockAddDataMatrix(DSDPBlockData *, int, struct DSDPDataMat_Ops *, void *)
Add data matrix into SDP block.
Definition dsdpblock.c:381
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.
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.
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 DSDPBlockSetDataMatrix(DSDPBlockData *, int, struct DSDPDataMat_Ops *, void *)
Set data matrix into SDP block.
Definition dsdpblock.c:406
int DSDPDataTransposeTakeDown(DSDPDataTranspose *)
Free transpose structure for data.
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.
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.
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.
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.
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.
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