Exemplo n.º 1
0
int DSDPSetDefaultSchurMatrixStructure(DSDP dsdp){
  int info;
  DSDPFunctionBegin;
  info=DSDPSchurMatOpsInitialize(&dsdpmatops000); DSDPCHKERR(info);
  dsdpmatops000.matsetup=DSDPCreateSchurMatrix;
  info=DSDPSetSchurMatOps(dsdp,&dsdpmatops000,(void*)dsdp);DSDPCHKERR(info);
  DSDPFunctionReturn(0);
}
Exemplo n.º 2
0
int PDSDPUsePLAPACKLinearSolver(DSDP dsdp, MPI_Comm comm, double ratio, int nb_distr){
  int info;
  plapackM* ctx;

  DSDPFunctionBegin;
  DSDPCALLOC1(&ctx,plapackM,&info);DSDPCHKERR(info);
  info=DSDPPlapackOpsInit(&plapackdsdpops);DSDPCHKERR(info);
  info=DSDPSetSchurMatOps(dsdp,&plapackdsdpops,(void*)ctx);DSDPCHKERR(info);

  ctx->dsdp=dsdp;
  ctx->ratio=ratio;
  ctx->nb_distr=nb_distr;
  ctx->mpi_comm=comm;

  ctx->AMat=NULL;
  ctx->vVec=NULL;
  ctx->wVec=NULL;
  ctx->zero=NULL;
  ctx->one=NULL;
  ctx->dxerror=NULL;
  ctx->templ=NULL;

  DSDPFunctionReturn(0);
}
Exemplo n.º 3
0
static int DSDPCreateSchurMatrix(void *ctx, int m){

  int info;
  int *rnnz,*tnnz,totalnnz;
  int gotit=0;
  DSDP dsdp=(DSDP)ctx;
  chfac *sf;
  MCholSolverALL *AMA;
  void *tdata;
  struct  DSDPSchurMat_Ops *tmatops;

  DSDPFunctionBegin;
  if (m<=1){
    info=DSDPGetDiagSchurMat(m,&tmatops,&tdata); DSDPCHKERR(info);
    info=DSDPSetSchurMatOps(dsdp,tmatops,tdata); DSDPCHKERR(info);
    return 0;
  }

  DSDPCALLOC2(&rnnz,int,(m+1),&info); DSDPCHKERR(info);
  DSDPCALLOC2(&tnnz,int,(m+1),&info); DSDPCHKERR(info);

  info=DSDPCheckForSparsity(dsdp,m,rnnz,tnnz,&totalnnz); DSDPCHKERR(info);

  if (totalnnz*2+m > m*m*0.1 && dsdpuselapack) {
    gotit=1;
    info=DSDPGetLAPACKSUSchurOps(m,&tmatops,&tdata); 
    /* DSDPCHKERR(info); */ if (info) {gotit=0;printf("Try packed format\n"); }
    DSDPLogInfo(0,8,"Creating Dense Full LAPACK Schur Matrix\n");
    info=DSDPSetSchurMatOps(dsdp,tmatops,tdata); DSDPCHKERR(info);
  } 

  if ( 0 && totalnnz*2+m > m*m*0.1 && dsdpuselapack) {

    info=DSDPGetLAPACKPUSchurOps(m,&tmatops,&tdata); DSDPCHKERR(info);
    DSDPLogInfo(0,8,"Creating Dense Packed LAPACK Schur Matrix\n");
    info=DSDPSetSchurMatOps(dsdp,tmatops,tdata); DSDPCHKERR(info);
    gotit=1;

  } 
  if (gotit==0){

    DSDPCALLOC1(&AMA,MCholSolverALL,&info);DSDPCHKERR(info);
    AMA->dsdp=dsdp; AMA->m=m;
    info=DSDPVecCreateSeq(m,&AMA->D1); DSDPCHKERR(info);
    if (totalnnz*2+m > m*m * 0.11 ){
      info=MchlSetup2(m,&sf); DSDPCHKERR(info);
      AMA->M=sf;      AMA->is_dense=1;
      AMA->rnnz=0;    AMA->colnnz=0;
      DSDPLogInfo(0,8,"Creating Dense Full non LAPACK Schur Matrix\n");
    } else {
      info=DSDPCreateM(AMA,&sf,rnnz,tnnz,totalnnz); DSDPCHKERR(info);
      DSDPLogInfo(0,8,"Creating Sparse Schur Matrix\n");
    }
    AMA->M=sf;  
    info=TMatOpsInit(&dsdpmatops); DSDPCHKERR(info);
    info=DSDPSetSchurMatOps(dsdp,&dsdpmatops,(void*)AMA); DSDPCHKERR(info);
  }
  DSDPFREE(&tnnz,&info);DSDPCHKERR(info);
  DSDPFREE(&rnnz,&info);DSDPCHKERR(info);
  DSDPFunctionReturn(0);
}