| Line 352... |
Line 352... |
PetscValidHeaderSpecific(ps,PS_CLASSID,1);
|
PetscValidHeaderSpecific(ps,PS_CLASSID,1);
|
PetscValidPointer(eigr,2);
|
PetscValidPointer(eigr,2);
|
if (!ps->ld) SETERRQ(((PetscObject)ps)->comm,PETSC_ERR_ORDER,"Must call PSAllocate() first");
|
if (!ps->ld) SETERRQ(((PetscObject)ps)->comm,PETSC_ERR_ORDER,"Must call PSAllocate() first");
|
if (!ps->ops->solve) SETERRQ1(((PetscObject)ps)->comm,PETSC_ERR_SUP,"PS type %s",((PetscObject)ps)->type_name);
|
if (!ps->ops->solve) SETERRQ1(((PetscObject)ps)->comm,PETSC_ERR_SUP,"PS type %s",((PetscObject)ps)->type_name);
|
if (ps->state>=PS_STATE_CONDENSED) PetscFunctionReturn(0);
|
if (ps->state>=PS_STATE_CONDENSED) PetscFunctionReturn(0);
|
if (ps->method>=ps->nmeth) SETERRQ1(((PetscObject)ps)->comm,PETSC_ERR_ARG_OUTOFRANGE,"The maximum method index for this PS is %d",ps->nmeth-1);
|
|
ierr = PetscLogEventBegin(PS_Solve,ps,0,0,0);CHKERRQ(ierr);
|
ierr = PetscLogEventBegin(PS_Solve,ps,0,0,0);CHKERRQ(ierr);
|
ierr = PetscFPTrapPush(PETSC_FP_TRAP_OFF);CHKERRQ(ierr);
|
ierr = PetscFPTrapPush(PETSC_FP_TRAP_OFF);CHKERRQ(ierr);
|
ierr = (*ps->ops->solve)(ps,eigr,eigi);CHKERRQ(ierr);
|
if (!ps->ops->solve[ps->method]) SETERRQ(((PetscObject)ps)->comm,PETSC_ERR_ARG_OUTOFRANGE,"The specified method number does not exist for this PS");
|
|
ierr = (*ps->ops->solve[ps->method])(ps,eigr,eigi);CHKERRQ(ierr);
|
ierr = PetscFPTrapPop();CHKERRQ(ierr);
|
ierr = PetscFPTrapPop();CHKERRQ(ierr);
|
ierr = PetscLogEventEnd(PS_Solve,ps,0,0,0);CHKERRQ(ierr);
|
ierr = PetscLogEventEnd(PS_Solve,ps,0,0,0);CHKERRQ(ierr);
|
ps->state = PS_STATE_CONDENSED;
|
ps->state = PS_STATE_CONDENSED;
|
ierr = PetscObjectStateIncrease((PetscObject)ps);CHKERRQ(ierr);
|
ierr = PetscObjectStateIncrease((PetscObject)ps);CHKERRQ(ierr);
|
PetscFunctionReturn(0);
|
PetscFunctionReturn(0);
|