Subversion Repositories slepc-dev

Rev

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

Rev 2284 Rev 2317
Line 32... Line 32...
  PetscErrorCode ierr;
  PetscErrorCode ierr;
 
 
  PetscFunctionBegin;
  PetscFunctionBegin;
  PetscValidHeaderSpecific(qep,QEP_CLASSID,1);
  PetscValidHeaderSpecific(qep,QEP_CLASSID,1);
  ierr = PetscFree(qep->data);CHKERRQ(ierr);
  ierr = PetscFree(qep->data);CHKERRQ(ierr);
 
 
  /* free work vectors */
  /* free work vectors */
  ierr = QEPDefaultFreeWork(qep);CHKERRQ(ierr);
  ierr = QEPDefaultFreeWork(qep);CHKERRQ(ierr);
  PetscFunctionReturn(0);
  PetscFunctionReturn(0);
}
}
 
 
Line 49... Line 48...
{
{
  PetscErrorCode ierr;
  PetscErrorCode ierr;
  PetscInt       i;
  PetscInt       i;
 
 
  PetscFunctionBegin;
  PetscFunctionBegin;
 
 
  if (qep->nwork != nw) {
  if (qep->nwork != nw) {
    if (qep->nwork > 0) {
    if (qep->nwork > 0) {
      ierr = VecDestroyVecs(qep->nwork,&qep->work); CHKERRQ(ierr);
      ierr = VecDestroyVecs(qep->nwork,&qep->work); CHKERRQ(ierr);
    }
    }
    qep->nwork = nw;
    qep->nwork = nw;
Line 61... Line 59...
    for (i=0;i<nw;i++) {
    for (i=0;i<nw;i++) {
      ierr = MatGetVecs(qep->M,PETSC_NULL,qep->work+i); CHKERRQ(ierr);
      ierr = MatGetVecs(qep->M,PETSC_NULL,qep->work+i); CHKERRQ(ierr);
    }
    }
    ierr = PetscLogObjectParents(qep,nw,qep->work);
    ierr = PetscLogObjectParents(qep,nw,qep->work);
  }
  }
 
 
  PetscFunctionReturn(0);
  PetscFunctionReturn(0);
}
}
 
 
#undef __FUNCT__  
#undef __FUNCT__  
#define __FUNCT__ "QEPDefaultFreeWork"
#define __FUNCT__ "QEPDefaultFreeWork"
Line 90... Line 87...
  QEPDefaultConverged - Checks convergence relative to the eigenvalue.
  QEPDefaultConverged - Checks convergence relative to the eigenvalue.
*/
*/
PetscErrorCode QEPDefaultConverged(QEP qep,PetscScalar eigr,PetscScalar eigi,PetscReal res,PetscReal *errest,void *ctx)
PetscErrorCode QEPDefaultConverged(QEP qep,PetscScalar eigr,PetscScalar eigi,PetscReal res,PetscReal *errest,void *ctx)
{
{
  PetscReal w;
  PetscReal w;
 
 
  PetscFunctionBegin;
  PetscFunctionBegin;
  w = SlepcAbsEigenvalue(eigr,eigi);
  w = SlepcAbsEigenvalue(eigr,eigi);
  *errest = res;
  *errest = res;
  if (w > res) *errest = res / w;
  if (w > res) *errest = res / w;
  PetscFunctionReturn(0);
  PetscFunctionReturn(0);
Line 130... Line 128...
  PetscReal      norm;
  PetscReal      norm;
 
 
  PetscFunctionBegin;
  PetscFunctionBegin;
  ncv = PetscBLASIntCast(qep->ncv);
  ncv = PetscBLASIntCast(qep->ncv);
  nconv = PetscBLASIntCast(qep->nconv);
  nconv = PetscBLASIntCast(qep->nconv);
 
 
  ierr = PetscMalloc(nconv*nconv*sizeof(PetscScalar),&Z);CHKERRQ(ierr);
  ierr = PetscMalloc(nconv*nconv*sizeof(PetscScalar),&Z);CHKERRQ(ierr);
  ierr = PetscMalloc(3*nconv*sizeof(PetscScalar),&work);CHKERRQ(ierr);
  ierr = PetscMalloc(3*nconv*sizeof(PetscScalar),&work);CHKERRQ(ierr);
#if defined(PETSC_USE_COMPLEX)
#if defined(PETSC_USE_COMPLEX)
  ierr = PetscMalloc(nconv*sizeof(PetscReal),&rwork);CHKERRQ(ierr);
  ierr = PetscMalloc(nconv*sizeof(PetscReal),&rwork);CHKERRQ(ierr);
#endif
#endif
Line 217... Line 214...
    if (iscomplex) { qep->errest[k+1] = qep->errest[k]; k++; }
    if (iscomplex) { qep->errest[k+1] = qep->errest[k]; k++; }
    if (marker!=-1 && !qep->trackall) break;
    if (marker!=-1 && !qep->trackall) break;
  }
  }
  if (marker!=-1) k = marker;
  if (marker!=-1) k = marker;
  *kout = k;
  *kout = k;
 
 
  PetscFunctionReturn(0);
  PetscFunctionReturn(0);
}
}