dsdpcone.c

Go to the documentation of this file.
00001 #include "dsdpcone_impl.h"
00002 #include "dsdpcone.h"
00003 #include "dsdpsys.h"
00004 
00010 #define DSDPNoOperationError(a);  { DSDPSETERR1(10,"Cone type: %s, Operation not defined\n",(a).dsdpops->name); }
00011 #define DSDPChkConeError(a,b);  { if (b){DSDPSETERR1(b,"Cone type: %s,\n",(a).dsdpops->name); } }
00012 
00020 #undef __FUNCT__  
00021 #define __FUNCT__ "DSDPConeSetUp"
00022 int DSDPConeSetUp(DSDPCone K,DSDPVec y){
00023   int info;
00024   DSDPFunctionBegin;
00025   if (K.dsdpops->conesetup){
00026     info=K.dsdpops->conesetup(K.conedata,y);DSDPChkConeError(K,info);
00027   } else {
00028     DSDPNoOperationError(K);
00029   }
00030   DSDPFunctionReturn(0);
00031 }
00032 
00041 #undef __FUNCT__  
00042 #define __FUNCT__ "DSDPConeSetUp2"
00043 int DSDPConeSetUp2(DSDPCone K, DSDPVec yy0, DSDPSchurMat M){
00044   int info;
00045   DSDPFunctionBegin;
00046   if (K.dsdpops->conesetup2){
00047     info=K.dsdpops->conesetup2(K.conedata,yy0,M);DSDPChkConeError(K,info);
00048   } else {
00049     DSDPNoOperationError(K);
00050   }
00051   DSDPFunctionReturn(0);
00052 }
00053 
00054 
00062 #undef __FUNCT__  
00063 #define __FUNCT__ "DSDPConeDestroy"
00064 int DSDPConeDestroy(DSDPCone *K){
00065   int info;
00066   DSDPFunctionBegin;
00067   if ((*K).dsdpops->conedestroy){
00068     info=(*K).dsdpops->conedestroy((*K).conedata);DSDPChkConeError(*K,info);
00069     info=DSDPConeInitialize(K); DSDPCHKERR(info);
00070   } else {
00071     DSDPNoOperationError(*K);
00072   }
00073   DSDPFunctionReturn(0);
00074 }
00075 
00076 
00090 #undef __FUNCT__  
00091 #define __FUNCT__ "DSDPConeComputeHessian"
00092 int DSDPConeComputeHessian( DSDPCone K , double mu, DSDPSchurMat M,  DSDPVec vrhs1, DSDPVec vrhs2){
00093   int info;
00094   DSDPFunctionBegin;
00095   if (K.dsdpops->conehessian){
00096     info=K.dsdpops->conehessian(K.conedata,mu,M,vrhs1,vrhs2);DSDPChkConeError(K,info);
00097   } else {
00098     DSDPNoOperationError(K);
00099   }
00100   DSDPFunctionReturn(0);
00101 }
00102 
00103 
00117 #undef __FUNCT__  
00118 #define __FUNCT__ "DSDPConeMultiplyAdd"
00119 int DSDPConeMultiplyAdd( DSDPCone K , double mu, DSDPVec vrow, DSDPVec v, DSDPVec vv){
00120   int info;
00121   DSDPFunctionBegin;
00122   if (K.dsdpops->conehmultiplyadd){
00123     info=K.dsdpops->conehmultiplyadd(K.conedata,mu,vrow,v,vv);DSDPChkConeError(K,info);
00124   } else {
00125     DSDPNoOperationError(K);
00126   }
00127   DSDPFunctionReturn(0);
00128 }
00129 
00130 
00145 #undef __FUNCT__  
00146 #define __FUNCT__ "DSDPConeComputeRHS"
00147 int DSDPConeComputeRHS( DSDPCone K , double mu, DSDPVec vrow,DSDPVec rhs1,DSDPVec rhs2){
00148   int info;
00149   DSDPFunctionBegin;
00150   if (K.dsdpops->conerhs){
00151     info=K.dsdpops->conerhs(K.conedata,mu,vrow,rhs1,rhs2);DSDPChkConeError(K,info);
00152   } else {
00153     DSDPNoOperationError(K);
00154   }
00155   DSDPFunctionReturn(0);
00156 }
00157 
00166 #undef __FUNCT__  
00167 #define __FUNCT__ "DSDPConeANorm2"
00168 int DSDPConeANorm2( DSDPCone K , DSDPVec anorm2){
00169   int info;
00170   DSDPFunctionBegin;
00171   if (K.dsdpops->coneanorm2){
00172     info=K.dsdpops->coneanorm2(K.conedata,anorm2);DSDPChkConeError(K,info);
00173   } else {
00174     DSDPNoOperationError(K);
00175   }
00176   DSDPFunctionReturn(0);
00177 }
00178 
00189 #undef __FUNCT__  
00190 #define __FUNCT__ "DSDPConeSetXMaker"
00191 int DSDPConeSetXMaker( DSDPCone K, double mu, DSDPVec y, DSDPVec dy){
00192   int info;
00193   DSDPFunctionBegin;
00194   if (K.dsdpops->conesetxmaker){
00195     info=K.dsdpops->conesetxmaker(K.conedata,mu,y,dy);DSDPChkConeError(K,info);
00196   } else {
00197     DSDPNoOperationError(K);
00198   }
00199   DSDPFunctionReturn(0);
00200 }
00201 
00214 #undef __FUNCT__  
00215 #define __FUNCT__ "DSDPConeComputeX"
00216 int DSDPConeComputeX( DSDPCone K, double mu, DSDPVec y, DSDPVec dy, DSDPVec AX, double *tracexs){
00217   int info;
00218   double trxs;
00219   DSDPFunctionBegin;
00220   if (K.dsdpops->conecomputex){
00221     trxs=0;
00222     info=K.dsdpops->conecomputex(K.conedata,mu,y,dy,AX,&trxs);DSDPChkConeError(K,info);
00223     *tracexs+=trxs;
00224   } else {
00225     DSDPNoOperationError(K);
00226   }
00227   DSDPFunctionReturn(0);
00228 }
00229 
00240 #undef __FUNCT__
00241 #define __FUNCT__ "DSDPConeComputeS"
00242 int DSDPConeComputeS(DSDPCone K, DSDPVec Y, DSDPDualFactorMatrix flag, DSDPTruth *ispsdefinite){
00243   int info;
00244   DSDPFunctionBegin;
00245   if (K.dsdpops->conecomputes){
00246     info=K.dsdpops->conecomputes(K.conedata,Y,flag,ispsdefinite);DSDPChkConeError(K,info);
00247   } else {
00248     DSDPNoOperationError(K);
00249   }
00250   DSDPFunctionReturn(0);
00251 }
00252 
00253 
00263 #undef __FUNCT__
00264 #define __FUNCT__ "DSDPConeInvertS"
00265 int DSDPConeInvertS(DSDPCone K){
00266   int info;
00267   DSDPFunctionBegin;
00268   if (K.dsdpops->coneinverts){
00269     info=K.dsdpops->coneinverts(K.conedata);DSDPChkConeError(K,info);
00270   } else {
00271     DSDPNoOperationError(K);
00272   }
00273   DSDPFunctionReturn(0);
00274 }
00275 
00286 #undef __FUNCT__
00287 #define __FUNCT__ "DSDPConeComputeMaxStepLength"
00288 int DSDPConeComputeMaxStepLength(DSDPCone K, DSDPVec DY, DSDPDualFactorMatrix flag, double *maxsteplength){
00289   int info;
00290   double conesteplength=1.0e20;
00291   DSDPFunctionBegin;
00292   conesteplength=1.0e30;
00293   if (K.dsdpops->conemaxsteplength){
00294     info=K.dsdpops->conemaxsteplength(K.conedata,DY,flag,&conesteplength);DSDPChkConeError(K,info);
00295   } else {
00296     DSDPNoOperationError(K);
00297   }
00298   *maxsteplength=conesteplength;
00299   DSDPFunctionReturn(0);
00300 }
00301 
00310 #undef __FUNCT__
00311 #define __FUNCT__ "DSDPConeGetDimension"
00312 int DSDPConeGetDimension(DSDPCone K, double *n){
00313   int info;
00314   double nn=0;
00315   DSDPFunctionBegin;
00316   if (K.dsdpops->conesize){
00317     info=K.dsdpops->conesize(K.conedata,&nn);DSDPChkConeError(K,info);
00318   } else {
00319     DSDPNoOperationError(K);
00320   }
00321   *n=nn;
00322   DSDPFunctionReturn(0);
00323 }
00324 
00336 #undef __FUNCT__
00337 #define __FUNCT__ "DSDPSparsityInSchurMat"
00338 int DSDPConeSparsityInSchurMat(DSDPCone K, int row, int rnnz[], int m){
00339   int info,tt;
00340   DSDPFunctionBegin;
00341   if (K.dsdpops->conesparsity){
00342     info=K.dsdpops->conesparsity(K.conedata,row,&tt,rnnz,m);DSDPChkConeError(K,info);
00343   } else {
00344     DSDPNoOperationError(K);
00345   }
00346   DSDPFunctionReturn(0);
00347 }
00348 
00356 #undef __FUNCT__
00357 #define __FUNCT__ "DSDPConeView"
00358 int DSDPConeView(DSDPCone K){
00359   int info;
00360   DSDPFunctionBegin;
00361   if (K.dsdpops->coneview){
00362     info=K.dsdpops->coneview(K.conedata);DSDPChkConeError(K,info);
00363   } else {
00364     DSDPNoOperationError(K);
00365   }
00366   DSDPFunctionReturn(0);
00367 }
00368 
00378 #undef __FUNCT__
00379 #define __FUNCT__ "DSDPConeMonitor"
00380 int DSDPConeMonitor(DSDPCone K, int tag){
00381   int info;
00382   DSDPFunctionBegin;
00383   if (K.dsdpops->conemonitor){
00384     info=K.dsdpops->conemonitor(K.conedata,tag);DSDPChkConeError(K,info);
00385   } else {
00386     DSDPNoOperationError(K);
00387   }
00388   DSDPFunctionReturn(0);
00389 }
00390 
00391 
00401 #undef __FUNCT__
00402 #define __FUNCT__ "DSDPConeComputeLogSDeterminant"
00403 int DSDPConeComputeLogSDeterminant(DSDPCone K, double *logdetobj, double *logdet){
00404   int info;
00405   double conepotential1=0,conepotential2=0;
00406   DSDPFunctionBegin;
00407   if (K.dsdpops->conelogpotential){
00408       info=K.dsdpops->conelogpotential(K.conedata,&conepotential1,&conepotential2);DSDPChkConeError(K,info);
00409   } else {
00410     DSDPNoOperationError(K);
00411   }
00412   *logdetobj=conepotential1;
00413   *logdet=conepotential2;
00414   DSDPFunctionReturn(0);
00415 }
00416 
00425 #undef __FUNCT__
00426 #define __FUNCT__ "DSDPGetConeName"
00427 int DSDPGetConeName(DSDPCone K, char *cname, int maxlength){
00428   DSDPFunctionBegin;
00429   strncpy(cname,K.dsdpops->name,maxlength);
00430   DSDPFunctionReturn(0);
00431 }
00432 
00433 
00434 
00441 #undef __FUNCT__
00442 #define __FUNCT__ "DSDPConeOpsInitialize"
00443 int DSDPConeOpsInitialize(struct  DSDPCone_Ops* dops){
00444   DSDPFunctionBegin;
00445   if (dops==NULL) return 0;
00446   
00447   dops->conesetup=0;
00448   dops->conesetup2=0;
00449   dops->conedestroy=0;
00450   dops->coneanorm2=0;
00451   dops->conehessian=0;
00452   dops->conehmultiplyadd=0;
00453   dops->conerhs=0;
00454   dops->conesetxmaker=0;
00455   dops->conecomputex=0;
00456   dops->conecomputes=0;
00457   dops->coneinverts=0;
00458   dops->conemaxsteplength=0;
00459   dops->conesparsity=0;
00460   dops->conelogpotential=0;
00461   dops->conemonitor=0;
00462   dops->coneview=0;
00463   dops->id=0;
00464   DSDPFunctionReturn(0); 
00465 }
00466 
00475 #undef __FUNCT__
00476 #define __FUNCT__ "DSDPConeSetData"
00477 int DSDPConeSetData(DSDPCone *K, struct DSDPCone_Ops* ops,  void* data){
00478   DSDPFunctionBegin;
00479   (*K).dsdpops=ops;
00480   (*K).conedata=data;
00481   DSDPFunctionReturn(0); 
00482 }
00483 
00484 
00485 static struct  DSDPCone_Ops dsdpcops;
00493 #undef __FUNCT__
00494 #define __FUNCT__ "DSDPConeOpsInitialize"
00495 int DSDPConeInitialize(DSDPCone *K){
00496   int info;
00497   DSDPFunctionBegin;
00498   info=DSDPConeOpsInitialize(&dsdpcops); DSDPCHKERR(info);
00499   info=DSDPConeSetData(K,&dsdpcops,0); DSDPCHKERR(info);
00500   DSDPFunctionReturn(0); 
00501 }
00502 

Generated on Thu May 22 09:42:47 2008 for DSDP by  doxygen 1.5.5