Subversion Repositories slepc-dev

Rev

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

Rev 1575 Rev 1605
Line 72... Line 72...
#define __FUNCT__ "SVDSetUp_CYCLIC"
#define __FUNCT__ "SVDSetUp_CYCLIC"
PetscErrorCode SVDSetUp_CYCLIC(SVD svd)
PetscErrorCode SVDSetUp_CYCLIC(SVD svd)
{
{
  PetscErrorCode    ierr;
  PetscErrorCode    ierr;
  SVD_CYCLIC        *cyclic = (SVD_CYCLIC *)svd->data;
  SVD_CYCLIC        *cyclic = (SVD_CYCLIC *)svd->data;
  PetscInt          M,N,m,n,i,j,start,end,ncols,*pos;
  PetscInt          M,N,m,n,i,j,start,end,ncols,*pos,nloc;
  const PetscInt    *cols;
  const PetscInt    *cols;
  const PetscScalar *vals;
  const PetscScalar *vals;
 
  PetscScalar       *pU;
 
 
  PetscFunctionBegin;
  PetscFunctionBegin;
 
 
  if (cyclic->mat) {
  if (cyclic->mat) {
    ierr = MatDestroy(cyclic->mat);CHKERRQ(ierr);
    ierr = MatDestroy(cyclic->mat);CHKERRQ(ierr);
Line 138... Line 139...
  ierr = EPSSetTolerances(cyclic->eps,svd->tol,svd->max_it);CHKERRQ(ierr);
  ierr = EPSSetTolerances(cyclic->eps,svd->tol,svd->max_it);CHKERRQ(ierr);
  ierr = EPSSetUp(cyclic->eps);CHKERRQ(ierr);
  ierr = EPSSetUp(cyclic->eps);CHKERRQ(ierr);
  ierr = EPSGetDimensions(cyclic->eps,PETSC_NULL,&svd->ncv,&svd->mpd);CHKERRQ(ierr);
  ierr = EPSGetDimensions(cyclic->eps,PETSC_NULL,&svd->ncv,&svd->mpd);CHKERRQ(ierr);
  ierr = EPSGetTolerances(cyclic->eps,&svd->tol,&svd->max_it);CHKERRQ(ierr);
  ierr = EPSGetTolerances(cyclic->eps,&svd->tol,&svd->max_it);CHKERRQ(ierr);
 
 
  if (svd->U) {  
  if (svd->ncv != svd->n) {
    for (i=0;i<svd->n;i++) { ierr = VecDestroy(svd->U[i]); CHKERRQ(ierr); }
    if (svd->U) {  
    ierr = PetscFree(svd->U);CHKERRQ(ierr);
      ierr = VecGetArray(svd->U[0],&pU);CHKERRQ(ierr);
 
      for (i=0;i<svd->n;i++) { ierr = VecDestroy(svd->U[i]); CHKERRQ(ierr); }
 
      ierr = PetscFree(pU);CHKERRQ(ierr);
 
      ierr = PetscFree(svd->U);CHKERRQ(ierr);
 
    }
 
    ierr = PetscMalloc(sizeof(Vec)*svd->ncv,&svd->U);CHKERRQ(ierr);
 
    ierr = SVDMatGetLocalSize(svd,&nloc,PETSC_NULL);CHKERRQ(ierr);
 
    ierr = PetscMalloc(svd->ncv*nloc*sizeof(PetscScalar),&pU);CHKERRQ(ierr);
 
    for (i=0;i<svd->ncv;i++) {
 
      ierr = VecCreateMPIWithArray(((PetscObject)svd)->comm,nloc,PETSC_DECIDE,pU+i*nloc,&svd->U[i]);CHKERRQ(ierr);
 
    }
  }
  }
  ierr = PetscMalloc(sizeof(Vec)*svd->ncv,&svd->U);CHKERRQ(ierr);
 
  for (i=0;i<svd->ncv;i++) { ierr = SVDMatGetVecs(svd,PETSC_NULL,svd->U+i);CHKERRQ(ierr); }
 
 
 
  PetscFunctionReturn(0);
  PetscFunctionReturn(0);
}
}
 
 
#undef __FUNCT__  
#undef __FUNCT__