| Line 33... |
Line 33... |
PetscFunctionBegin;
|
PetscFunctionBegin;
|
PetscValidHeaderSpecific(st,ST_COOKIE,1);
|
PetscValidHeaderSpecific(st,ST_COOKIE,1);
|
PetscValidHeaderSpecific(b,VEC_COOKIE,2);
|
PetscValidHeaderSpecific(b,VEC_COOKIE,2);
|
PetscValidHeaderSpecific(x,VEC_COOKIE,3);
|
PetscValidHeaderSpecific(x,VEC_COOKIE,3);
|
if (!st->ksp) { SETERRQ(PETSC_ERR_SUP,"ST has no associated KSP"); }
|
if (!st->ksp) { SETERRQ(PETSC_ERR_SUP,"ST has no associated KSP"); }
|
ierr = KSPSetRhs(st->ksp,b);CHKERRQ(ierr);
|
ierr = KSPSolve(st->ksp,b,x);CHKERRQ(ierr);
|
ierr = KSPSetSolution(st->ksp,x);CHKERRQ(ierr);
|
|
ierr = KSPSolve(st->ksp);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(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;
|
PetscLogInfo(st,"ST: linear solve iterations=%d\n",its);
|
PetscLogInfo(st,"ST: linear solve iterations=%d\n",its);
|