| Line 45... |
Line 45... |
|
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
PetscValidHeaderSpecific(st,ST_CLASSID,1);
|
PetscValidHeaderSpecific(st,ST_CLASSID,1);
|
PetscValidHeaderSpecific(b,VEC_CLASSID,2);
|
PetscValidHeaderSpecific(b,VEC_CLASSID,2);
|
PetscValidHeaderSpecific(x,VEC_CLASSID,3);
|
PetscValidHeaderSpecific(x,VEC_CLASSID,3);
|
if (!st->ksp) { SETERRQ(PETSC_ERR_SUP,"ST has no associated KSP"); }
|
if (!st->ksp) { SETERRQ(((PetscObject)st)->comm,PETSC_ERR_SUP,"ST has no associated KSP"); }
|
ierr = KSPSolve(st->ksp,b,x);CHKERRQ(ierr);
|
ierr = KSPSolve(st->ksp,b,x);CHKERRQ(ierr);
|
ierr = KSPGetConvergedReason(st->ksp,&reason);CHKERRQ(ierr);
|
ierr = KSPGetConvergedReason(st->ksp,&reason);CHKERRQ(ierr);
|
if (reason<0) { SETERRQ1(0,"Warning: KSP did not converge (%d)",reason); }
|
if (reason<0) { SETERRQ1(((PetscObject)st)->comm,0,"Warning: KSP did not converge (%d)",reason); }
|
ierr = KSPGetIterationNumber(st->ksp,&its);CHKERRQ(ierr);
|
ierr = KSPGetIterationNumber(st->ksp,&its);CHKERRQ(ierr);
|
st->lineariterations += its;
|
st->lineariterations += its;
|
PetscInfo1(st,"Linear solve iterations=%d\n",its);
|
PetscInfo1(st,"Linear solve iterations=%d\n",its);
|
PetscFunctionReturn(0);
|
PetscFunctionReturn(0);
|
}
|
}
|
| Line 78... |
Line 78... |
|
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
PetscValidHeaderSpecific(st,ST_CLASSID,1);
|
PetscValidHeaderSpecific(st,ST_CLASSID,1);
|
PetscValidHeaderSpecific(b,VEC_CLASSID,2);
|
PetscValidHeaderSpecific(b,VEC_CLASSID,2);
|
PetscValidHeaderSpecific(x,VEC_CLASSID,3);
|
PetscValidHeaderSpecific(x,VEC_CLASSID,3);
|
if (!st->ksp) { SETERRQ(PETSC_ERR_SUP,"ST has no associated KSP"); }
|
if (!st->ksp) { SETERRQ(((PetscObject)st)->comm,PETSC_ERR_SUP,"ST has no associated KSP"); }
|
ierr = KSPSolveTranspose(st->ksp,b,x);CHKERRQ(ierr);
|
ierr = KSPSolveTranspose(st->ksp,b,x);CHKERRQ(ierr);
|
ierr = KSPGetConvergedReason(st->ksp,&reason);CHKERRQ(ierr);
|
ierr = KSPGetConvergedReason(st->ksp,&reason);CHKERRQ(ierr);
|
if (reason<0) { SETERRQ1(0,"Warning: KSP did not converge (%d)",reason); }
|
if (reason<0) { SETERRQ1(((PetscObject)st)->comm,0,"Warning: KSP did not converge (%d)",reason); }
|
ierr = KSPGetIterationNumber(st->ksp,&its);CHKERRQ(ierr);
|
ierr = KSPGetIterationNumber(st->ksp,&its);CHKERRQ(ierr);
|
st->lineariterations += its;
|
st->lineariterations += its;
|
PetscInfo1(st,"Linear solve iterations=%d\n",its);
|
PetscInfo1(st,"Linear solve iterations=%d\n",its);
|
PetscFunctionReturn(0);
|
PetscFunctionReturn(0);
|
}
|
}
|
| Line 145... |
Line 145... |
@*/
|
@*/
|
PetscErrorCode STGetKSP(ST st,KSP* ksp)
|
PetscErrorCode STGetKSP(ST st,KSP* ksp)
|
{
|
{
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
PetscValidHeaderSpecific(st,ST_CLASSID,1);
|
PetscValidHeaderSpecific(st,ST_CLASSID,1);
|
if (!((PetscObject)st)->type_name) { SETERRQ(PETSC_ERR_ARG_WRONGSTATE,"Must call STSetType first"); }
|
if (!((PetscObject)st)->type_name) { SETERRQ(((PetscObject)st)->comm,PETSC_ERR_ARG_WRONGSTATE,"Must call STSetType first"); }
|
if (ksp) *ksp = st->ksp;
|
if (ksp) *ksp = st->ksp;
|
PetscFunctionReturn(0);
|
PetscFunctionReturn(0);
|
}
|
}
|
|
|
#undef __FUNCT__
|
#undef __FUNCT__
|