diff --git a/conjgrad.h b/conjgrad.h index f27d590..d9d9905 100644 --- a/conjgrad.h +++ b/conjgrad.h @@ -13,7 +13,7 @@ template -extern void conjgrad(const Matrix &bigmat, const NRVec &b, NRVec &x, const bool doguess, const double tol, const int itmax, const bool verbose, bool issquare,const bool precondition) +extern bool conjgrad(const Matrix &bigmat, const NRVec &b, NRVec &x, const bool doguess, const double tol, const int itmax, const bool verbose, bool issquare,const bool precondition) { int m=bigmat.nrows(); int n=bigmat.ncols(); @@ -47,7 +47,11 @@ for(int iter=0; iter<= itmax; iter++) if(verbose) cout << "conjgrad: iter= "<=0;i--) c[i] = (d[i]-xdot(k-i,&R(i,i+1),1,&c[i+1],1)) / R(i,i); //x contains ev. initial guess and on return the solution template -void gmres(const Matrix &bigmat, const NRVec &b, NRVec &x, const bool doguess=1, const double eps=1e-7, const int MAXIT=50, const bool verbose=1, bool square=1,const bool precondition=1, int neustart=0, const int incore=1) +bool gmres(const Matrix &bigmat, const NRVec &b, NRVec &x, const bool doguess=1, const double eps=1e-7, const int MAXIT=50, const bool verbose=1, bool square=1,const bool precondition=1, int neustart=0, const int incore=1) { int zeilen=bigmat.nrows(); int spalten=bigmat.ncols(); @@ -232,6 +232,6 @@ myreturn: delete[] v; if(!incore) delete st; -if(flag) laerror("no convergence in GMRES"); +return !flag; }