| Line 33... |
Line 33... |
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(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;
|
PetscVerboseInfo((st,"ST: linear solve iterations=%d\n",its));
|
PetscInfo1(st,"ST: linear solve iterations=%d\n",its);
|
PetscFunctionReturn(0);
|
PetscFunctionReturn(0);
|
}
|
}
|
|
|
#undef __FUNCT__
|
#undef __FUNCT__
|
#define __FUNCT__ "STAssociatedKSPSolveTranspose"
|
#define __FUNCT__ "STAssociatedKSPSolveTranspose"
|
| Line 66... |
Line 66... |
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(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;
|
PetscVerboseInfo((st,"ST: linear solve iterations=%d\n",its));
|
PetscInfo1(st,"ST: linear solve iterations=%d\n",its);
|
PetscFunctionReturn(0);
|
PetscFunctionReturn(0);
|
}
|
}
|
|
|
#undef __FUNCT__
|
#undef __FUNCT__
|
#define __FUNCT__ "STSetKSP"
|
#define __FUNCT__ "STSetKSP"
|
| Line 204... |
Line 204... |
c = 0;
|
c = 0;
|
for (i=0;i<n;i++) {
|
for (i=0;i<n;i++) {
|
ierr = MatMult(A,V[i],w);CHKERRQ(ierr);
|
ierr = MatMult(A,V[i],w);CHKERRQ(ierr);
|
ierr = VecNorm(w,NORM_2,&norm);CHKERRQ(ierr);
|
ierr = VecNorm(w,NORM_2,&norm);CHKERRQ(ierr);
|
if (norm < 1e-8) {
|
if (norm < 1e-8) {
|
PetscVerboseInfo((st,"STCheckNullSpace: vector %i norm=%g\n",i,norm));
|
PetscInfo2(st,"STCheckNullSpace: vector %i norm=%g\n",i,norm);
|
T[c] = V[i];
|
T[c] = V[i];
|
c++;
|
c++;
|
}
|
}
|
}
|
}
|
ierr = VecDestroy(w);CHKERRQ(ierr);
|
ierr = VecDestroy(w);CHKERRQ(ierr);
|