Subversion Repositories slepc-dev

Rev

Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1603 Rev 1605
Line 158... Line 158...
@*/
@*/
PetscErrorCode SVDSetUp(SVD svd)
PetscErrorCode SVDSetUp(SVD svd)
{
{
  PetscErrorCode ierr;
  PetscErrorCode ierr;
  PetscTruth     flg;
  PetscTruth     flg;
  PetscInt       i,M,N;
  PetscInt       i,M,N,nloc;
 
  PetscScalar    *pV;
 
 
  PetscFunctionBegin;
  PetscFunctionBegin;
  PetscValidHeaderSpecific(svd,SVD_COOKIE,1);
  PetscValidHeaderSpecific(svd,SVD_COOKIE,1);
  if (svd->setupcalled) PetscFunctionReturn(0);
  if (svd->setupcalled) PetscFunctionReturn(0);
  ierr = PetscLogEventBegin(SVD_SetUp,svd,0,0,0);CHKERRQ(ierr);
  ierr = PetscLogEventBegin(SVD_SetUp,svd,0,0,0);CHKERRQ(ierr);
Line 233... Line 234...
    /* free memory for previous solution  */
    /* free memory for previous solution  */
    if (svd->n) {
    if (svd->n) {
      ierr = PetscFree(svd->sigma);CHKERRQ(ierr);
      ierr = PetscFree(svd->sigma);CHKERRQ(ierr);
      ierr = PetscFree(svd->perm);CHKERRQ(ierr);
      ierr = PetscFree(svd->perm);CHKERRQ(ierr);
      ierr = PetscFree(svd->errest);CHKERRQ(ierr);
      ierr = PetscFree(svd->errest);CHKERRQ(ierr);
 
      ierr = VecGetArray(svd->V[0],&pV);CHKERRQ(ierr);
      for (i=0;i<svd->n;i++) {
      for (i=0;i<svd->n;i++) {
        ierr = VecDestroy(svd->V[i]);CHKERRQ(ierr);
        ierr = VecDestroy(svd->V[i]);CHKERRQ(ierr);
      }
      }
 
      ierr = PetscFree(pV);CHKERRQ(ierr);
      ierr = PetscFree(svd->V);CHKERRQ(ierr);
      ierr = PetscFree(svd->V);CHKERRQ(ierr);
    }
    }
    /* allocate memory for next solution */
    /* allocate memory for next solution */
    ierr = PetscMalloc(svd->ncv*sizeof(PetscReal),&svd->sigma);CHKERRQ(ierr);
    ierr = PetscMalloc(svd->ncv*sizeof(PetscReal),&svd->sigma);CHKERRQ(ierr);
    ierr = PetscMalloc(svd->ncv*sizeof(PetscReal),&svd->perm);CHKERRQ(ierr);
    ierr = PetscMalloc(svd->ncv*sizeof(PetscReal),&svd->perm);CHKERRQ(ierr);
    ierr = PetscMalloc(svd->ncv*sizeof(PetscReal),&svd->errest);CHKERRQ(ierr);
    ierr = PetscMalloc(svd->ncv*sizeof(PetscReal),&svd->errest);CHKERRQ(ierr);
    ierr = PetscMalloc(svd->ncv*sizeof(Vec),&svd->V);CHKERRQ(ierr);
    ierr = PetscMalloc(svd->ncv*sizeof(Vec),&svd->V);CHKERRQ(ierr);
 
    ierr = VecGetLocalSize(svd->vec_initial,&nloc);CHKERRQ(ierr);
 
    ierr = PetscMalloc(svd->ncv*nloc*sizeof(PetscScalar),&pV);CHKERRQ(ierr);
    for (i=0;i<svd->ncv;i++) {
    for (i=0;i<svd->ncv;i++) {
      ierr = SVDMatGetVecs(svd,svd->V+i,PETSC_NULL);CHKERRQ(ierr);
      ierr = VecCreateMPIWithArray(((PetscObject)svd)->comm,nloc,PETSC_DECIDE,pV+i*nloc,&svd->V[i]);CHKERRQ(ierr);
    }
    }
    svd->n = svd->ncv;
    svd->n = svd->ncv;
  }
  }
 
 
  ierr = PetscLogEventEnd(SVD_SetUp,svd,0,0,0);CHKERRQ(ierr);
  ierr = PetscLogEventEnd(SVD_SetUp,svd,0,0,0);CHKERRQ(ierr);