8 #define DSDPNoOperationError(a); { DSDPSETERR1(1,"Data natrix type: %s, Operation not defined\n",(a).dsdpops->matname); }
9 #define DSDPChkDataError(a,b); { if (b){ DSDPSETERR1(b,"Data natrix type: %s,\n",(a).dsdpops->matname);} }
15 #define __FUNCT__ "DSDPDataMatSetData"
31 (*A).dsdpops=&dsdpdatamatdefault;
35 DSDPFunctionReturn(0);
38 static char datamatnoname[20]=
"MATRIX NOT SET";
40 #define __FUNCT__ "DSDPDataMatOpsInitialize"
49 if (dops==NULL)
return 0;
56 dops->mataddrowmultiple=0;
57 dops->mataddallmultiple=0;
64 dops->matname=datamatnoname;
65 DSDPFunctionReturn(0);
70 #define __FUNCT__ "DSDPDataMatInitialize"
83 DSDPFunctionReturn(0);
88 #define __FUNCT__ "DSDPDataMatTest"
99 if (A.dsdpops==0 || A.dsdpops==&dsdpdatamatdefault){
100 }
else if (A.dsdpops->mattest){
101 info=(A.dsdpops->mattest)(A.matdata); DSDPChkDataError(A,info);
107 DSDPFunctionReturn(0);
111 #define __FUNCT__ "DSDPDataMatGetType"
115 DSDPFunctionReturn(0);
119 #define __FUNCT__ "DSDPDataMatGetRank"
132 if (A.dsdpops->matgetrank){
133 info=(A.dsdpops->matgetrank)(A.matdata,rank,n); DSDPChkDataError(A,info);
135 DSDPNoOperationError(A);
137 DSDPFunctionReturn(0);
141 #define __FUNCT__ "DSDPDataMatCountNonzeros"
155 if (A.dsdpops->matnnz){
156 info=(A.dsdpops->matnnz)(A.matdata,nnz,n); DSDPChkDataError(A,info);
158 DSDPNoOperationError(A);
160 DSDPFunctionReturn(0);
164 #define __FUNCT__ "DSDPDataMatFNorm2"
178 if (A.dsdpops->matfnorm2){
180 info=(A.dsdpops->matfnorm2)(A.matdata,n,fnorm2); DSDPChkDataError(A,info);
182 DSDPNoOperationError(A);
184 DSDPFunctionReturn(0);
189 #define __FUNCT__ "DSDPDataMatGetEig"
208 if (A.dsdpops->matgeteig){
209 info=SDPConeVecGetArray(V,&vv); DSDPCHKERR(info);
210 info=SDPConeVecGetSize(V,&n); DSDPCHKERR(info);
211 info=(A.dsdpops->matgeteig)(A.matdata,rr, eigenvalue, vv,n,S.indx+1,S.indx); DSDPChkDataError(A,info);
212 info=SDPConeVecRestoreArray(V,&vv); DSDPCHKERR(info);
214 DSDPNoOperationError(A);
216 DSDPFunctionReturn(0);
220 #define __FUNCT__ "DSDPDataMatFactor"
241 double *dwork3n,
int nd,
int* iwork,
int ni){
245 if (A.dsdpops->matfactor1){
246 info=(A.dsdpops->matfactor1)(A.matdata); DSDPChkDataError(A,info);
247 }
else if (A.dsdpops->matfactor2){
248 info=SDPConeVecGetSize(W,&n);
249 info=SDPConeVecGetArray(W,&dvecwork);
250 info=(A.dsdpops->matfactor2)(A.matdata,dworknn,nn0,dvecwork,n,dwork3n,nd,iwork,ni); DSDPChkDataError(A,info);
251 info=SDPConeVecRestoreArray(W,&dvecwork);
253 DSDPNoOperationError(A);
255 DSDPFunctionReturn(0);
259 #define __FUNCT__ "DSDPDataMatDot"
277 if (A.dsdpops->matdot){
278 info=(A.dsdpops->matdot)(A.matdata,x,nn,n,v); DSDPChkDataError(A,info);
280 DSDPNoOperationError(A);
282 DSDPFunctionReturn(0);
286 #define __FUNCT__ "DSDPDataMatVecVec"
302 if (A.dsdpops->matvecvec){
303 info=SDPConeVecGetSize(W,&n); DSDPCHKERR(info);
304 info=SDPConeVecGetArray(W,&x); DSDPCHKERR(info);
305 info=(A.dsdpops->matvecvec)(A.matdata,x,n,v); DSDPChkDataError(A,info);
306 info=SDPConeVecRestoreArray(W,&x); DSDPCHKERR(info);
308 DSDPNoOperationError(A);
310 DSDPFunctionReturn(0);
314 #define __FUNCT__ "DSDPDataMatMultiply"
329 if (A.dsdpops->matmultiply){
330 info=SDPConeVecGetSize(V1,&n); DSDPCHKERR(info);
331 info=SDPConeVecGetArray(V1,&vv1); DSDPCHKERR(info);
332 info=SDPConeVecGetArray(V2,&vv2); DSDPCHKERR(info);
333 info=(A.dsdpops->matmultiply)(A.matdata,vv1,vv2,n); DSDPChkDataError(A,info);
334 info=SDPConeVecRestoreArray(V1,&vv1); DSDPCHKERR(info);
335 info=SDPConeVecRestoreArray(V2,&vv2); DSDPCHKERR(info);
337 DSDPNoOperationError(A);
339 DSDPFunctionReturn(0);
343 #define __FUNCT__ "DSDPDataMatGetRowNonzeros"
358 if (A.dsdpops->matrownz){
359 info=(A.dsdpops->matrownz)(A.matdata,nrow,nz,nnz,nmax); DSDPChkDataError(A,info);
362 for (i=0;i<nmax;i++){
366 DSDPFunctionReturn(0);
370 #define __FUNCT__ "DSDPDataMatAddRowMultipleToVector"
375 if (A.dsdpops->mataddrowmultiple){
376 info=SDPConeVecGetArray(R,&vv);DSDPCHKERR(info);
377 info=SDPConeVecGetSize(R,&n);DSDPCHKERR(info);
378 info=(A.dsdpops->mataddrowmultiple)(A.matdata,nrow,ytmp,vv,n); DSDPChkDataError(A,info);
379 info=SDPConeVecRestoreArray(R,&vv);DSDPCHKERR(info);
381 DSDPNoOperationError(A);
383 DSDPFunctionReturn(0);
388 #define __FUNCT__ "DSDPDataMatAddMultiple"
405 if (A.dsdpops->mataddallmultiple){
406 info=(A.dsdpops->mataddallmultiple)(A.matdata,ytmp,v,nn,n); DSDPChkDataError(A,info);
408 DSDPNoOperationError(A);
410 DSDPFunctionReturn(0);
415 #define __FUNCT__ "DSDPDataMatView"
426 if (A.dsdpops->matview){
427 info=(A.dsdpops->matview)(A.matdata); DSDPChkDataError(A,info);
429 printf(
"No matrix view available for matrix type %s.\n",A.dsdpops->matname);
431 DSDPFunctionReturn(0);
436 #define __FUNCT__ "DSDPDataMatDestroy"
447 if ( (*A).dsdpops->matdestroy){
448 info=((*A).dsdpops->matdestroy)((*A).matdata); DSDPChkDataError(*A,info);
455 DSDPFunctionReturn(0);