Main Page | Modules | Alphabetical List | Data Structures | Directories | File List | Globals | Related Pages

dsdpdsmat.c

00001 #include "dsdpdsmat_impl.h"
00002 #include "dsdpdsmat.h"
00003 #include "dsdpsys.h"
00008 #define DSDPNoOperationError(a);  { DSDPSETERR1(1,"Delta S Matrix type: %s, Operation not defined\n",(a).dsdpops->matname); }
00009 #define DSDPChkMatError(a,b);  { if (b){ DSDPSETERR1(b,"Delta S Matrix type: %s,\n",(a).dsdpops->matname); } }
00010 
00011 #undef __FUNCT__
00012 #define __FUNCT__ "DSDPDSMatGetType"
00013 int DSDPDSMatGetType(DSDPDSMat A, int *id){
00014   DSDPFunctionBegin;
00015   *id=A.dsdpops->id;
00016   DSDPFunctionReturn(0); 
00017 }
00018 
00019 
00020 #undef __FUNCT__
00021 #define __FUNCT__ "DSDPDSMatSetData"
00022 
00031 int DSDPDSMatSetData(DSDPDSMat *M, struct DSDPDSMat_Ops* ops,  void*data){
00032   int info;
00033   DSDPFunctionBegin;
00034   (*M).dsdpops=ops;
00035   (*M).matdata=data;
00036   info=DSDPDSMatTest(*M); DSDPChkMatError(*M,info);
00037   DSDPFunctionReturn(0); 
00038 }
00039 
00040 
00041 #undef __FUNCT__
00042 #define __FUNCT__ "DSDPDSMatGetSize"
00043 
00050 int DSDPDSMatGetSize(DSDPDSMat A,int*n){
00051   int info;
00052   DSDPFunctionBegin;
00053   if (A.dsdpops->matgetsize){
00054     info=(A.dsdpops->matgetsize)(A.matdata,n); DSDPChkMatError(A,info);
00055   } else {
00056     DSDPNoOperationError(A);
00057   }
00058   DSDPFunctionReturn(0);
00059 }
00060 
00061 
00062 #undef __FUNCT__
00063 #define __FUNCT__ "DSDPDSMatDestroy"
00064 
00070 int DSDPDSMatDestroy(DSDPDSMat *A){
00071   int info;
00072   DSDPFunctionBegin;
00073   if (!(*A).dsdpops){ return 0;}
00074   if ((*A).dsdpops->matdestroy){
00075     info=((*A).dsdpops->matdestroy)((*A).matdata); DSDPChkMatError(*A,info);
00076   } else {
00077     /*    DSDPNoOperationError(1); */
00078   }
00079   info=DSDPDSMatInitialize(A); DSDPCHKERR(info);
00080   DSDPFunctionReturn(0);
00081 }
00082 
00083 
00084 #undef __FUNCT__
00085 #define __FUNCT__ "DSDPDSMatView"
00086 
00092 int DSDPDSMatView(DSDPDSMat A){
00093   int info;
00094   if (A.dsdpops->matview){
00095     info=(A.dsdpops->matview)(A.matdata); DSDPChkMatError(A,info);
00096   } else {
00097     printf("No viewer available for matrix type: %s",A.dsdpops->matname);
00098   }
00099   DSDPFunctionReturn(0);
00100 }
00101 
00102 
00103 #undef __FUNCT__
00104 #define __FUNCT__ "DSDPDSMatZeroEntries"
00105 
00110 int DSDPDSMatZeroEntries(DSDPDSMat A){
00111   int info;
00112   DSDPFunctionBegin;
00113   if (A.dsdpops->matzeroentries){
00114     info=(A.dsdpops->matzeroentries)(A.matdata); DSDPChkMatError(A,info);
00115   } else {
00116     DSDPNoOperationError(A);
00117   }
00118   DSDPFunctionReturn(0);
00119 }
00120 
00121 #undef __FUNCT__
00122 #define __FUNCT__ "DSDPDSMatSetArray"
00123 
00130 int DSDPDSMatSetArray(DSDPDSMat A, DSDPVMat T){
00131   int info,n,nn;
00132   double *ds;
00133   DSDPFunctionBegin;
00134   if (A.dsdpops->matseturmat){
00135     info=DSDPVMatGetSize(T,&n);DSDPCHKERR(info);
00136     info=DSDPVMatGetArray(T, &ds, &nn); DSDPCHKERR(info);
00137     info=(A.dsdpops->matseturmat)(A.matdata,ds,nn,n); DSDPChkMatError(A,info);
00138     info=DSDPVMatRestoreArray(T, &ds, &nn); DSDPCHKERR(info);
00139   } else {
00140     DSDPNoOperationError(A);
00141   }
00142   DSDPFunctionReturn(0);
00143 }
00144 
00145 #undef __FUNCT__
00146 #define __FUNCT__ "DSDPDSMatMult"
00147 
00154 int DSDPDSMatMult(DSDPDSMat A, SDPConeVec X, SDPConeVec Y){
00155   int n,info;
00156   double *x,*y;
00157   
00158   DSDPFunctionBegin;
00159   if (A.dsdpops->matmult){
00160     info=SDPConeVecGetArray(X,&x); DSDPCHKERR(info);
00161     info=SDPConeVecGetArray(Y,&y); DSDPCHKERR(info);
00162     info=SDPConeVecGetSize(Y,&n); DSDPCHKERR(info);
00163     info=(A.dsdpops->matmult)(A.matdata,x,y,n); DSDPChkMatError(A,info);
00164     info=SDPConeVecRestoreArray(X,&x); DSDPCHKERR(info);
00165     info=SDPConeVecRestoreArray(Y,&y); DSDPCHKERR(info);
00166   } else {
00167     DSDPNoOperationError(A);
00168    }
00169   DSDPFunctionReturn(0);
00170 }
00171 
00172 #undef __FUNCT__
00173 #define __FUNCT__ "DSDPDSVecVec"
00174 
00181 int DSDPDSMatVecVec(DSDPDSMat A, SDPConeVec X, double *vAv){
00182   int n,info;
00183   double *x;
00184   
00185   DSDPFunctionBegin;
00186   if (A.dsdpops->matvecvec){
00187     info=SDPConeVecGetArray(X,&x); DSDPCHKERR(info);
00188     info=SDPConeVecGetSize(X,&n); DSDPCHKERR(info);
00189     info=(A.dsdpops->matvecvec)(A.matdata,x,n,vAv); DSDPChkMatError(A,info);
00190     info=SDPConeVecRestoreArray(X,&x); DSDPCHKERR(info);
00191   } else {
00192     DSDPNoOperationError(A);
00193    }
00194   DSDPFunctionReturn(0);
00195 }
00196 
00197 #undef __FUNCT__
00198 #define __FUNCT__ "DSDPDSMatCheck"
00199 int DSDPDSMatCheck(DSDPDSMat DS,SDPConeVec W1,SDPConeVec W2,DSDPVMat T){
00200   DSDPFunctionBegin;
00201   DSDPFunctionReturn(0);
00202 }
00203 
00204 
00205 static struct  DSDPDSMat_Ops dsdpmatops2;
00206 static const char* dsmatname="NOT SET YET";
00207 #undef __FUNCT__
00208 #define __FUNCT__ "DSDPDSMatOpsInitialize"
00209 
00214 int DSDPDSMatOpsInitialize(struct  DSDPDSMat_Ops*aops){
00215   aops->matseturmat=0;
00216   aops->matview=0;
00217   aops->matdestroy=0;
00218   aops->matgetsize=0;
00219   aops->matzeroentries=0;
00220   aops->matmult=0;
00221   aops->mattest=0;
00222   aops->matvecvec=0;
00223   aops->id=0;
00224   aops->matname=dsmatname;
00225   return 0;
00226 }
00227 
00228 #undef __FUNCT__
00229 #define __FUNCT__ "DSDPDSMatTest"
00230 int DSDPDSMatTest(DSDPDSMat A){
00231   int info;
00232   DSDPFunctionBegin;
00233   if (A.dsdpops==0 || A.dsdpops==&dsdpmatops2){
00234   } else if (A.dsdpops->mattest){
00235     DSDPLogInfo(0,120,"Start to set DS Matrix\n");
00236     info=(A.dsdpops->mattest)(A.matdata); DSDPChkMatError(A,info);
00237     DSDPLogInfo(0,120,"Done set DS Matrix\n");
00238   } else {
00239     /*
00240     DSDPNoOperationError(A);
00241     */
00242   }
00243   DSDPFunctionReturn(0);
00244 }
00245 
00246 
00247 #undef __FUNCT__
00248 #define __FUNCT__ "DSDPDSMatInitialize"
00249 
00254 int DSDPDSMatInitialize(DSDPDSMat *B){
00255   int info;
00256   DSDPFunctionBegin;
00257   info=DSDPDSMatOpsInitialize(&dsdpmatops2); DSDPCHKERR(info);
00258   info=DSDPDSMatSetData(B, &dsdpmatops2, 0); DSDPCHKERR(info);
00259   DSDPFunctionReturn(0);
00260 }
00261 

Generated on Sat Oct 15 11:05:36 2005 for DSDP by  doxygen 1.4.2