14 static int IdentityMatDestroy(
void*);
15 static int IdentityMatView(
void*);
16 static int IdentityMatVecVec(
void*,
double[],
int,
double *);
17 static int IdentityMatDotP(
void*,
double[],
int,
int,
double*);
18 static int IdentityMatDotF(
void*,
double[],
int,
int,
double*);
19 static int IdentityMatGetRank(
void*,
int*,
int);
20 static int IdentityMatFactor(
void*);
21 static int IdentityMatGetEig(
void*,
int,
double*,
double[],
int,
int[],
int*);
22 static int IdentityMatAddRowMultiple(
void*,
int,
double,
double[],
int);
23 static int IdentityMatAddMultipleP(
void*,
double,
double[],
int,
int);
24 static int IdentityMatAddMultipleF(
void*,
double,
double[],
int,
int);
25 static int IdentityMatGetRowNnz(
void*,
int,
int[],
int*,
int);
43 #define __FUNCT__ "DSDPSetIdentityP"
49 AA=(identitymat*) malloc(1*
sizeof(identitymat));
52 info=IdentitymatOperationsInitializeP(&identitymatopsp); DSDPCHKERR(info);
53 if (dops){*dops=&identitymatopsp;}
54 if (imat){*imat=(
void*)AA;}
55 DSDPFunctionReturn(0);
68 #define __FUNCT__ "DSDPSetIdentityF"
74 AA=(identitymat*) malloc(1*
sizeof(identitymat));
77 info=IdentitymatOperationsInitializeF(&identitymatopsf); DSDPCHKERR(info);
78 if (dops){*dops=&identitymatopsf;}
79 if (imat){*imat=(
void*)AA;}
80 DSDPFunctionReturn(0);
83 static int IdentityMatDestroy(
void* AA){
89 static int IdentityMatVecVec(
void* AA,
double x[],
int n,
double *v){
90 identitymat* A=(identitymat*)AA;
100 static int IdentityMatDotP(
void* AA,
double x[],
int nn,
int n,
double *v){
101 identitymat* A=(identitymat*)AA;
113 static int IdentityMatDotF(
void* AA,
double x[],
int nn,
int n,
double *v){
114 identitymat* A=(identitymat*)AA;
126 static int IdentityMatFNorm2(
void* AA,
int n,
double *v){
127 identitymat* A=(identitymat*)AA;
132 static int IdentityMatView(
void* AA){
133 identitymat* A=(identitymat*)AA;
134 printf(
"Multiple of Identity matrix: All Diagonal elements equal %8.8e \n",A->dm);
138 static int IdentityMatGetRank(
void *AA,
int*rank,
int n){
139 identitymat* A=(identitymat*)AA;
144 static int IdentityMatFactor(
void*A){
148 static int IdentityMatGetEig(
void*AA,
int neig,
double *eig,
double v[],
int n,
int* indx,
int *nind){
149 identitymat* A = (identitymat*)AA;
151 if (neig<0 || neig>= A->n){ *eig=0;
return 0;}
152 memset((
void*)v,0,(A->n)*
sizeof(
double));
160 static int IdentityMatGetRowNnz(
void*A,
int nrow,
int nz[],
int *nnzz,
int n){
161 identitymat* AA = (identitymat*)A;
162 if (nrow>=0 && nrow < AA->n){
171 static int IdentityMatCountNonzeros(
void*A,
int *nnz,
int n){
172 identitymat* AA = (identitymat*)A;
177 static int IdentityMatAddRowMultiple(
void*A,
int nrow,
double dd,
double rrow[],
int n){
178 identitymat* AA = (identitymat*)A;
179 rrow[nrow] += dd*AA->dm;
183 static int IdentityMatAddMultipleP(
void*A,
double dd,
double vv[],
int nn,
int n){
184 identitymat* AA = (identitymat*)A;
185 double *v=vv,dm=dd*AA->dm;
194 static int IdentityMatAddMultipleF(
void*A,
double dd,
double vv[],
int nn,
int n){
195 identitymat* AA = (identitymat*)A;
196 double *v=vv,dm=dd*AA->dm;
205 static const char *datamatname=
"MULTIPLE OF IDENTITY";
207 static int IdentitymatOperationsInitializeP(
struct DSDPDataMat_Ops* spdiagops){
209 if (spdiagops==NULL)
return 0;
211 spdiagops->matfactor1=IdentityMatFactor;
212 spdiagops->matgetrank=IdentityMatGetRank;
213 spdiagops->matgeteig=IdentityMatGetEig;
214 spdiagops->matvecvec=IdentityMatVecVec;
215 spdiagops->matrownz=IdentityMatGetRowNnz;
216 spdiagops->matdot=IdentityMatDotP;
217 spdiagops->matfnorm2=IdentityMatFNorm2;
218 spdiagops->matnnz=IdentityMatCountNonzeros;
219 spdiagops->mataddrowmultiple=IdentityMatAddRowMultiple;
220 spdiagops->mataddallmultiple=IdentityMatAddMultipleP;
221 spdiagops->matdestroy=IdentityMatDestroy;
222 spdiagops->matview=IdentityMatView;
224 spdiagops->matname=datamatname;
228 static int IdentitymatOperationsInitializeF(
struct DSDPDataMat_Ops* spdiagops){
230 if (spdiagops==NULL)
return 0;
232 spdiagops->matfactor1=IdentityMatFactor;
233 spdiagops->matgetrank=IdentityMatGetRank;
234 spdiagops->matgeteig=IdentityMatGetEig;
235 spdiagops->matvecvec=IdentityMatVecVec;
236 spdiagops->matrownz=IdentityMatGetRowNnz;
237 spdiagops->matdot=IdentityMatDotF;
238 spdiagops->matfnorm2=IdentityMatFNorm2;
239 spdiagops->matnnz=IdentityMatCountNonzeros;
240 spdiagops->mataddrowmultiple=IdentityMatAddRowMultiple;
241 spdiagops->mataddallmultiple=IdentityMatAddMultipleF;
242 spdiagops->matdestroy=IdentityMatDestroy;
243 spdiagops->matview=IdentityMatView;
245 spdiagops->matname=datamatname;