18 #define __FUNCT__ "SDPConeComputeHessian"
32 int i,k,kt,kk,m,n,rank,info;
34 double rtemp,ack,ggamma,bmu,scl;
38 DSDPVec MRowI=sdpcone->Work, Select=sdpcone->Work2;
48 SDPConeValid(sdpcone);
49 info=DSDPVecGetSize(vrhs1,&m);DSDPCHKERR(info);
55 info=DSDPVecZero(MRowI);DSDPCHKERR(info);
57 if (ncols==0){
continue;}
59 for (kt=0; kt<ATranspose.nnzblocks[i]; kt++){
60 kk=ATranspose.nzblocks[i][kt];
61 idA=ATranspose.idA[i][kt];
63 if (ii!=i){DSDPSETERR2(8,
"Data Transpose Error: var %d does not equal %d.\n",i,ii);}
65 if (rank==0)
continue;
67 T=blk[kk].T; S=blk[kk].S; W=blk[kk].W; W2=blk[kk].W2;
68 n=blk[kk].n; ggamma=blk[kk].gammamu; bmu=blk[kk].bmu; IS=blk[kk].IS;
74 if (ncols*blk[kk].nnz < n*n/10) method1=
DSDP_FALSE;
79 for (k=0; k<rank; k++){
82 if (ack==0.0)
continue;
88 if (rtemp==0.0)
continue;
89 rhs1i+=rtemp*ack*bmu; rhs2i+=rtemp*ack*ggamma*mu;
95 info=
DSDPBlockvAv(&blk[kk].ADATA,ack*mu,Select,W2,MRowI);DSDPCHKBLOCKERR(kk,info);
101 info=
DSDPBlockADot(&blk[kk].ADATA,1.0,Select,T,MRowI);DSDPCHKBLOCKERR(kk,info);
104 info=DSDPVecAddElement(vrhs1,i,rhs1i);DSDPCHKERR(info);
105 info=DSDPVecAddElement(vrhs2,i,rhs2i);DSDPCHKERR(info);
109 DSDPFunctionReturn(0);
113 #define __FUNCT__ "SDPConeComputeRHS"
127 int info,i,ii,k,rank,nnzmats;
128 double dtmp,dyiscale=1,ack,scl,rtemp;
129 SDPblk *sdp=&sdpcone->blk[blockj];
135 DSDPIndex IS=sdp->IS;
145 for (i=0;i<nnzmats;i++){
147 info=DSDPVecGetElement(vrow,ii,&dyiscale);DSDPCHKVARERR(ii,info);
148 if (dyiscale==0)
continue;
150 for (k=0; k<rank; k++){
152 if (ack==0)
continue;
155 dtmp=rtemp*ack*mu*dyiscale*scl;
156 info=DSDPVecAddElement(vrhs2,ii,dtmp);DSDPCHKVARERR(ii,info);
163 info=
DSDPBlockADot(&sdp->ADATA,1.0,vrow,T,vrhs2);DSDPCHKERR(info);
166 DSDPFunctionReturn(0);
170 #define __FUNCT__ "SDPConeMultiply"
184 int info,i,ii,k,rank,nnzmats;
185 double dd2,dtmp,dyiscale,ack,scl,vv;
186 SDPblk *sdp=&sdpcone->blk[blockj];
191 DSDPIndex IS=sdp->IS;
197 info=
DSDPBlockASum(&sdp->ADATA,-1.0,vin,T); DSDPCHKERR(info);
200 for (i=0;i<nnzmats;i++){
202 info=DSDPVecGetElement(vrow,ii,&dyiscale);DSDPCHKVARERR(ii,info);
203 if (dyiscale==0)
continue;
206 for (dd2=0,k=0; k<rank; k++){
208 if (ack==0)
continue;
213 dtmp = dd2 * dyiscale *mu *scl;
214 info=DSDPVecAddElement(vout,ii,dtmp);DSDPCHKVARERR(ii,info);
217 DSDPFunctionReturn(0);
223 #define __FUNCT__ "SDPConeComputeXX"
237 int info, i, ii,k, rank, n, nnzmats;
238 double dtmp,dyiscale,ack,scl;
239 SDPblk *sdp=&sdpcone->blk[blockj];
242 DSDPIndex IS=sdp->IS;
246 mu=mu*sdp->gammamu; n=sdp->n;
249 for (i=0;i<nnzmats;i++){
251 info=DSDPVecGetElement(DY,ii,&dyiscale);DSDPCHKVARERR(ii,info);
252 if (dyiscale==0)
continue;
254 for (k=0; k<rank; k++){
256 if (ack==0)
continue;
258 dtmp = ack * dyiscale * mu * scl;
264 DSDPFunctionReturn(0);