示例#1
0
文件: dlpack.c 项目: BrechtBa/casadi
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;
}
示例#2
0
文件: dlpack.c 项目: weiwangudel/DSDP
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;
}
示例#3
0
文件: dlpack.c 项目: BrechtBa/casadi
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;  
}
示例#4
0
文件: dlpack.c 项目: weiwangudel/DSDP
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;  
}
示例#5
0
文件: dlpack.c 项目: BrechtBa/casadi
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;  
}