Subversion Repositories slepc-dev

Rev

Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2213 Rev 2214
Line 44... Line 44...
  PetscScalar     *pU;
  PetscScalar     *pU;
 
 
  PetscFunctionBegin;
  PetscFunctionBegin;
  ierr = SVDMatGetSize(svd,PETSC_NULL,&N);CHKERRQ(ierr);
  ierr = SVDMatGetSize(svd,PETSC_NULL,&N);CHKERRQ(ierr);
  if (svd->ncv) { /* ncv set */
  if (svd->ncv) { /* ncv set */
    if (svd->ncv<svd->nsv) SETERRQ(1,"The value of ncv must be at least nsv");
    if (svd->ncv<svd->nsv) SETERRQ(((PetscObject)svd)->comm,1,"The value of ncv must be at least nsv");
  }
  }
  else if (svd->mpd) { /* mpd set */
  else if (svd->mpd) { /* mpd set */
    svd->ncv = PetscMin(N,svd->nsv+svd->mpd);
    svd->ncv = PetscMin(N,svd->nsv+svd->mpd);
  }
  }
  else { /* neither set: defaults depend on nsv being small or large */
  else { /* neither set: defaults depend on nsv being small or large */
    if (svd->nsv<500) svd->ncv = PetscMin(N,PetscMax(2*svd->nsv,10));
    if (svd->nsv<500) svd->ncv = PetscMin(N,PetscMax(2*svd->nsv,10));
    else { svd->mpd = 500; svd->ncv = PetscMin(N,svd->nsv+svd->mpd); }
    else { svd->mpd = 500; svd->ncv = PetscMin(N,svd->nsv+svd->mpd); }
  }
  }
  if (!svd->mpd) svd->mpd = svd->ncv;
  if (!svd->mpd) svd->mpd = svd->ncv;
  if (svd->ncv>svd->nsv+svd->mpd) SETERRQ(1,"The value of ncv must not be larger than nev+mpd");
  if (svd->ncv>svd->nsv+svd->mpd) SETERRQ(((PetscObject)svd)->comm,1,"The value of ncv must not be larger than nev+mpd");
  if (!svd->max_it)
  if (!svd->max_it)
    svd->max_it = PetscMax(N/svd->ncv,100);
    svd->max_it = PetscMax(N/svd->ncv,100);
  if (svd->U) {
  if (svd->U) {
    ierr = VecGetArray(svd->U[0],&pU);CHKERRQ(ierr);
    ierr = VecGetArray(svd->U[0],&pU);CHKERRQ(ierr);
    for (i=0;i<svd->n;i++) { ierr = VecDestroy(svd->U[i]); CHKERRQ(ierr); }
    for (i=0;i<svd->n;i++) { ierr = VecDestroy(svd->U[i]); CHKERRQ(ierr); }
Line 154... Line 154...
#define __FUNCT__ "SVDSolve_LANCZOS"
#define __FUNCT__ "SVDSolve_LANCZOS"
PetscErrorCode SVDSolve_LANCZOS(SVD svd)
PetscErrorCode SVDSolve_LANCZOS(SVD svd)
{
{
#if defined(SLEPC_MISSING_LAPACK_BDSDC)
#if defined(SLEPC_MISSING_LAPACK_BDSDC)
  PetscFunctionBegin;
  PetscFunctionBegin;
  SETERRQ(PETSC_ERR_SUP,"BDSDC - Lapack routine is unavailable.");
  SETERRQ(((PetscObject)svd)->comm,PETSC_ERR_SUP,"BDSDC - Lapack routine is unavailable.");
#else
#else
  PetscErrorCode ierr;
  PetscErrorCode ierr;
  SVD_LANCZOS    *lanczos = (SVD_LANCZOS *)svd->data;
  SVD_LANCZOS    *lanczos = (SVD_LANCZOS *)svd->data;
  PetscReal      *alpha,*beta,norm,*work,*Q,*PT;
  PetscReal      *alpha,*beta,norm,*work,*Q,*PT;
  PetscScalar    *swork;
  PetscScalar    *swork;