static int DvechmatGetRank(void *AA,int *rank, int n){ dvechmat* A=(dvechmat*)AA; if (A->Eig.neigs>=0){ *rank=A->Eig.neigs; } else { DSDPSETERR(1,"Vech Matrix not factored yet\n"); } return 0; }
static int DvechmatGetRank(void *AA,int *rank, int n){ //printf("File %s line %d DvechmatGetRank with address %d\n",__FILE__, __LINE__,&DvechmatGetRank); dvechmat* A=(dvechmat*)AA; if (A->Eig.neigs>=0){ *rank=A->Eig.neigs; } else { DSDPSETERR(1,"Vech Matrix not factored yet\n"); } return 0; }
static int DvechmatGetEig(void* AA, int rank, double *eigenvalue, double vv[], int n, int indz[], int *nind){ dvechmat* A=(dvechmat*)AA; int i,info; double dd; if (A->Eig.neigs>0){ info=EigMatGetEig(&A->Eig,rank,&dd,vv,n);DSDPCHKERR(info); *nind=n; *eigenvalue=dd*A->alpha; for (i=0;i<n;i++){ indz[i]=i;} } else { DSDPSETERR(1,"Vech Matrix not factored yet\n"); } return 0; }
static int DvechmatGetEig(void* AA, int rank, double *eigenvalue, double vv[], int n, int indz[], int *nind){ //printf("File %s line %d DvechmatGetEig with address %d\n",__FILE__, __LINE__,&DvechmatGetEig); dvechmat* A=(dvechmat*)AA; int i,info; double dd; if (A->Eig.neigs>0){ info=EigMatGetEig(&A->Eig,rank,&dd,vv,n);DSDPCHKERR(info); *nind=n; *eigenvalue=dd*A->alpha; for (i=0;i<n;i++){ indz[i]=i;} } else { DSDPSETERR(1,"Vech Matrix not factored yet\n"); } return 0; }
static int DvechEigVecVec(void* AA, double v[], int n, double *vv){ dvechmat* A=(dvechmat*)AA; int i,rank,neigs; double *an,dd,ddd=0,*eigval; if (A->Eig.neigs>=0){ an=A->Eig.an; neigs=A->Eig.neigs; eigval=A->Eig.eigval; for (rank=0;rank<neigs;rank++){ for (dd=0,i=0;i<n;i++){ dd+=v[i]*an[i]; } an+=n; ddd+=dd*dd*eigval[rank]; } *vv=ddd*A->alpha; } else { DSDPSETERR(1,"Vech Matrix not factored yet\n"); } return 0; }