| Line 65... |
Line 65... |
SETERRQ(((PetscObject)qep)->comm,PETSC_ERR_ARG_WRONGSTATE,"QEPSetOperators must be called first");
|
SETERRQ(((PetscObject)qep)->comm,PETSC_ERR_ARG_WRONGSTATE,"QEPSetOperators must be called first");
|
|
|
/* Set problem dimensions */
|
/* Set problem dimensions */
|
ierr = MatGetSize(qep->M,&qep->n,PETSC_NULL);CHKERRQ(ierr);
|
ierr = MatGetSize(qep->M,&qep->n,PETSC_NULL);CHKERRQ(ierr);
|
ierr = MatGetLocalSize(qep->M,&qep->nloc,PETSC_NULL);CHKERRQ(ierr);
|
ierr = MatGetLocalSize(qep->M,&qep->nloc,PETSC_NULL);CHKERRQ(ierr);
|
|
ierr = SlepcMatGetVecsTemplate(qep->M,&qep->t,PETSC_NULL);CHKERRQ(ierr);
|
|
|
/* Set default problem type */
|
/* Set default problem type */
|
if (!qep->problem_type) {
|
if (!qep->problem_type) {
|
ierr = QEPSetProblemType(qep,QEP_GENERAL);CHKERRQ(ierr);
|
ierr = QEPSetProblemType(qep,QEP_GENERAL);CHKERRQ(ierr);
|
}
|
}
|
| Line 354... |
Line 355... |
contiguous chunk of memory.
|
contiguous chunk of memory.
|
*/
|
*/
|
PetscErrorCode QEPAllocateSolution(QEP qep)
|
PetscErrorCode QEPAllocateSolution(QEP qep)
|
{
|
{
|
PetscErrorCode ierr;
|
PetscErrorCode ierr;
|
Vec t;
|
|
|
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
if (qep->allocated_ncv != qep->ncv) {
|
if (qep->allocated_ncv != qep->ncv) {
|
ierr = QEPFreeSolution(qep);CHKERRQ(ierr);
|
ierr = QEPFreeSolution(qep);CHKERRQ(ierr);
|
ierr = PetscMalloc(qep->ncv*sizeof(PetscScalar),&qep->eigr);CHKERRQ(ierr);
|
ierr = PetscMalloc(qep->ncv*sizeof(PetscScalar),&qep->eigr);CHKERRQ(ierr);
|
ierr = PetscMalloc(qep->ncv*sizeof(PetscScalar),&qep->eigi);CHKERRQ(ierr);
|
ierr = PetscMalloc(qep->ncv*sizeof(PetscScalar),&qep->eigi);CHKERRQ(ierr);
|
ierr = PetscMalloc(qep->ncv*sizeof(PetscReal),&qep->errest);CHKERRQ(ierr);
|
ierr = PetscMalloc(qep->ncv*sizeof(PetscReal),&qep->errest);CHKERRQ(ierr);
|
ierr = PetscMalloc(qep->ncv*sizeof(PetscInt),&qep->perm);CHKERRQ(ierr);
|
ierr = PetscMalloc(qep->ncv*sizeof(PetscInt),&qep->perm);CHKERRQ(ierr);
|
ierr = VecCreateMPIWithArray(((PetscObject)qep)->comm,qep->nloc,PETSC_DECIDE,PETSC_NULL,&t);CHKERRQ(ierr);
|
ierr = VecDuplicateVecs(qep->t,qep->ncv,&qep->V);CHKERRQ(ierr);
|
ierr = SlepcVecDuplicateVecs(t,qep->ncv,&qep->V);CHKERRQ(ierr);
|
|
ierr = VecDestroy(&t);CHKERRQ(ierr);
|
|
qep->allocated_ncv = qep->ncv;
|
qep->allocated_ncv = qep->ncv;
|
}
|
}
|
PetscFunctionReturn(0);
|
PetscFunctionReturn(0);
|
}
|
}
|
|
|
| Line 387... |
Line 385... |
if (qep->allocated_ncv > 0) {
|
if (qep->allocated_ncv > 0) {
|
ierr = PetscFree(qep->eigr);CHKERRQ(ierr);
|
ierr = PetscFree(qep->eigr);CHKERRQ(ierr);
|
ierr = PetscFree(qep->eigi);CHKERRQ(ierr);
|
ierr = PetscFree(qep->eigi);CHKERRQ(ierr);
|
ierr = PetscFree(qep->errest);CHKERRQ(ierr);
|
ierr = PetscFree(qep->errest);CHKERRQ(ierr);
|
ierr = PetscFree(qep->perm);CHKERRQ(ierr);
|
ierr = PetscFree(qep->perm);CHKERRQ(ierr);
|
ierr = SlepcVecDestroyVecs(qep->allocated_ncv,&qep->V);CHKERRQ(ierr);
|
ierr = VecDestroyVecs(qep->allocated_ncv,&qep->V);CHKERRQ(ierr);
|
qep->allocated_ncv = 0;
|
qep->allocated_ncv = 0;
|
}
|
}
|
PetscFunctionReturn(0);
|
PetscFunctionReturn(0);
|
}
|
}
|
|
|