83 unsigned GMRes(
const T& A,
const P& M,
Vector &x,
const Vector& b,
int max_iter,
double tol,
unsigned m) {
91 Vector s(m+1), cs(m+1), sn(m+1), w;
93 double normb = (M(b)).norm();
95 double beta = r.
norm();
100 if ((resid = r.
norm() / normb) <= tol) {
107 while (j <= max_iter) {
108 v[0] = r * (1.0 / beta);
112 for (i = 0; i < m && j <= max_iter; i++, j++) {
114 for (k = 0; k <= i; k++) {
118 H(i+1, i) = w.
norm();
119 v[i+1] = (w / H(i+1, i));
121 for (k = 0; k < i; k++)
128 if ((resid = std::abs(s(i+1)) / normb) < tol) {
137 Update(x, i - 1, H, s, v);
140 if ((resid = beta / normb) < tol) {
unsigned GMRes(const T &A, const P &M, Vector &x, const Vector &b, int max_iter, double tol, unsigned m)