dsdpsdp.h

Go to the documentation of this file.
00001 #ifndef __TAO_DSDPSDP_H
00002 #define __TAO_DSDPSDP_H
00003 
00008 #include "dsdpschurmat.h"
00009 #include "dsdpbasictypes.h"
00010 #include "dsdpvec.h"
00011 
00012 #include "sdpconevec.h"
00013 #include "dsdpdatamat.h"
00014 #include "dsdpdualmat.h"
00015 #include "dsdpxmat.h"
00016 #include "dsdpdsmat.h"
00017 #include "dsdplanczos.h"
00018 
00019 typedef enum { SDPCONEEXIST=1, SDPCONESETUP1=2 } SDPConeStatus;
00020 
00025 typedef struct{
00026   int m;
00027   int *nnzblocks;
00028   int **nzblocks;
00029   int *ttnzmat;
00030   int **nnzmats;
00031   int **idA;
00032   int *idAP;
00033 } DSDPDataTranspose;
00034 
00039 typedef struct{
00040   int maxnnzmats;
00041   int nnzmats;
00042   int *nzmat;
00043   DSDPDataMat *A;
00044   double r;        /* Multiple of Identity added to S to make it psd */
00045   double scl;
00046 } DSDPBlockData;
00047 
00052 typedef struct{
00053 
00054   DSDPBlockData ADATA;
00055   DSDPLanczosStepLength Lanczos;    /* For Lanczos steplength routine */
00056 
00057   int n;                                                /* Dimensions */
00058   double gammamu;          /* Scale Barrier, used only by user option */
00059   double bmu;                                    /* For LMI, not used */
00060   char format;       /* Packed Symmetric, Full Symmetric, Lower,Upper */
00061   int   nnz;
00062   SDPConeStatus status;
00063 
00064   SDPConeVec W;
00065   SDPConeVec W2;
00066   DSDPIndex IS;
00067 
00068   DSDPDualMat S;      /* Dual variable matrices */
00069   DSDPDualMat SS;     /* Compute primal variable matrices */
00070   DSDPDSMat DS;       /* Dual variable step matrices */
00071   DSDPVMat T;         /* Work Array and Primal variable matrice X   */
00072 
00073 } SDPblk;
00074 
00080 struct SDPCone_C {
00081   int keyid;
00082 
00083   /* Dimensions */
00084   int m, nn;
00085 
00086   /* Data in block format */
00087   int nblocks;
00088   SDPblk *blk;
00089 
00090   /* Transpose of Data */
00091   DSDPDataTranspose ATR;
00092 
00093   /* Work space */
00094   DSDPVec Work, Work2;
00095 
00096   /* Current Solution */
00097   DSDPVec YY,YX,DYX;
00098   double xmakermu;
00099 
00100   int optype;
00101   DSDP dsdp;
00102 };
00103 
00104 #define SDPCONEKEY  5438
00105 #define SDPConeValid(a) {if (!(a)||((a)->keyid!=SDPCONEKEY)){ DSDPSETERR(101,"DSDPERROR: Invalid SDPCone object\n");}}
00106 
00107 #define DSDPCHKBLOCKERR(a,b);  { if (b){ DSDPSETERR1(b,"Block Number: %d,\n",a);} }
00108 #define DSDPCHKVARERR(a,b);  { if (b){ DSDPSETERR1(b,"Variable Number: %d,\n",a);} }
00109 
00110 extern int DSDPSetDataMatZero(DSDPDataMat*);
00111 
00112 #include "dsdp5.h"
00113 
00114 #ifdef __cplusplus
00115 extern "C" {
00116 #endif
00117 
00118 /* Operations on the Data */
00119 extern int DSDPBlockDataInitialize(DSDPBlockData*);
00120 extern int DSDPBlockDataAllocate(DSDPBlockData*, int);
00121 extern int DSDPBlockAddDataMatrix(DSDPBlockData*,int, struct DSDPDataMat_Ops*, void*);
00122 extern int DSDPBlockSetDataMatrix(DSDPBlockData*,int, struct DSDPDataMat_Ops*, void*);
00123 extern int DSDPBlockRemoveDataMatrix(DSDPBlockData*,int);
00124 extern int DSDPBlockDataMarkNonzeroMatrices(DSDPBlockData*,int*);
00125 extern int DSDPBlockDataRowSparsity(DSDPBlockData*,int,int[],int[],int);
00126 extern int DSDPBlockASum(DSDPBlockData*,double,DSDPVec,DSDPVMat);
00127 extern int DSDPBlockADot(DSDPBlockData*,double,DSDPVec,DSDPVMat,DSDPVec);
00128 extern int DSDPBlockvAv(DSDPBlockData*,double,DSDPVec,SDPConeVec,DSDPVec);
00129 extern int DSDPBlockDataDestroy(DSDPBlockData*);
00130 extern int DSDPBlockCheck(DSDPBlockData*,SDPConeVec,DSDPVMat);
00131 extern int DSDPBlockANorm2(DSDPBlockData*, DSDPVec, int);
00132 extern int DSDPBlockView(DSDPBlockData*);
00133 extern int DSDPBlockView2(DSDPBlockData*);
00134 extern int DSDPBlockCountNonzeroMatrices(DSDPBlockData *,int*);
00135 extern int DSDPBlockGetMatrix(DSDPBlockData*,int,int*,double*,DSDPDataMat*);
00136 extern int DSDPBlockFactorData(DSDPBlockData*,DSDPVMat,SDPConeVec);
00137 extern int DSDPBlockTakeDownData(DSDPBlockData*);
00138 extern int DSDPBlockDataRank(DSDPBlockData*,int*,int);
00139 
00140 extern int DSDPBlockTakeDown(SDPblk*);
00141 extern int DSDPBlockInitialize(SDPblk*);
00142 
00143 extern int DSDPBlockEventInitialize(void);
00144 extern int DSDPBlockEventZero(void);
00145 
00146 extern int DSDPDataMatCheck(DSDPDataMat,SDPConeVec,DSDPIndex,DSDPVMat);
00147 
00148 /* Operations on the Transpose of the Data */
00149 extern int DSDPDataTransposeInitialize(DSDPDataTranspose*);
00150 extern int DSDPDataTransposeTakeDown(DSDPDataTranspose*);
00151 extern int DSDPDataTransposeSetup(DSDPDataTranspose*,SDPblk*,int,int);
00152 
00153 extern int DSDPUseDefaultDualMatrix(SDPCone);
00154 
00155 extern int SDPConeSetup(SDPCone,DSDPVec);
00156 extern int SDPConeSetup2(SDPCone,DSDPVec,DSDPSchurMat);
00157 extern int SDPConeComputeHessian(SDPCone,double,DSDPSchurMat,DSDPVec,DSDPVec);
00158 extern int SDPConeMultiply(SDPCone,int,double,DSDPVec,DSDPVec,DSDPVec);
00159 extern int SDPConeComputeRHS(SDPCone, int, double, DSDPVec, DSDPVec,DSDPVec);
00160 extern int SDPConeComputeXX(SDPCone,int,DSDPVec,double,DSDPDualMat, DSDPVMat);
00161 extern int SDPConeDestroy(SDPCone);
00162 
00163 extern int SDPConeCheckJ(SDPCone,int);
00164 extern int SDPConeCheckN(SDPCone,int, int);
00165 extern int SDPConeCheckM(SDPCone,int);
00166 extern int SDPConeCheckStorageFormat(SDPCone,int, char);
00167 
00168 
00169 extern int SDPConeComputeSS(SDPCone, int, DSDPVec, DSDPVMat);
00170 extern int SDPConeComputeXDot(SDPCone,int,DSDPVec,DSDPVMat,DSDPVec,double*,double*, double *);
00171 extern int SDPConeComputeX3(SDPCone,int,double,DSDPVec,DSDPVec,DSDPVMat);
00172 
00173 /* extern int DSDPPrintSDPA(TAO_DSDP *); */
00174 extern int DSDPMakeVMat(char, int, DSDPVMat*);
00175 extern int DSDPMakeVMatWithArray(char, double[], int, int, DSDPVMat*);
00176 
00177 extern int DSDPSetDualMatrix(SDPCone sdpcone,int (*createdualmatrix)(DSDPBlockData*,DSDPVec,DSDPVMat,DSDPVec,DSDPVec,DSDPDualMat*,DSDPDualMat*,DSDPDSMat*,void*),void*);
00178 
00179 extern int DSDPAddSDP(DSDP,SDPCone);
00180 #ifdef __cplusplus
00181 }
00182 #endif
00183 
00184 extern int SDPConeSetRIdentity(SDPCone,int,int,double);
00185 extern int DSDPDualMatEventInitialize(void);
00186 extern int DSDPVMatEventInitialize(void);
00187 extern int DSDPDualMatEventZero(void);
00188 extern int DSDPVMatEventZero(void);
00189 
00190 #endif

Generated on Wed Nov 11 20:41:02 2009 for DSDP by  doxygen 1.6.1