From 5e4105c16fbdbf591b0a6f265156797cf4fdae07 Mon Sep 17 00:00:00 2001 From: Tobias Ribizel Date: Tue, 6 Apr 2021 17:54:13 +0200 Subject: [PATCH 1/2] log first residual norm in CGS --- core/solver/cgs.cpp | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/core/solver/cgs.cpp b/core/solver/cgs.cpp index 30ccf643b1f..db90730564b 100644 --- a/core/solver/cgs.cpp +++ b/core/solver/cgs.cpp @@ -162,6 +162,19 @@ void Cgs::apply_dense_impl(const matrix::Dense *dense_b, */ while (true) { r->compute_dot(r_tld.get(), rho.get()); + + ++iter; + this->template log( + this, iter, r.get(), dense_x, nullptr, rho.get()); + if (stop_criterion->update() + .num_iterations(iter) + .residual(r.get()) + .implicit_sq_residual_norm(rho.get()) + .solution(dense_x) + .check(RelativeStoppingId, true, &stop_status, &one_changed)) { + break; + } + // beta = rho / rho_prev // u = r + beta * q // p = u + beta * ( q + beta * p ) @@ -185,18 +198,6 @@ void Cgs::apply_dense_impl(const matrix::Dense *dense_b, exec->run(cgs::make_step_3(t.get(), u_hat.get(), r.get(), dense_x, alpha.get(), &stop_status)); - ++iter; - this->template log( - this, iter, r.get(), dense_x, nullptr, rho.get()); - if (stop_criterion->update() - .num_iterations(iter) - .residual(r.get()) - .implicit_sq_residual_norm(rho.get()) - .solution(dense_x) - .check(RelativeStoppingId, true, &stop_status, &one_changed)) { - break; - } - swap(rho_prev, rho); } } From 0f0f9c7cd68d54e742caa2db841be6421cc80caa Mon Sep 17 00:00:00 2001 From: Tobias Ribizel Date: Wed, 7 Apr 2021 09:28:59 +0200 Subject: [PATCH 2/2] make iteration counter in CGS 0-based again --- core/solver/cgs.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/solver/cgs.cpp b/core/solver/cgs.cpp index db90730564b..d79c9c2518d 100644 --- a/core/solver/cgs.cpp +++ b/core/solver/cgs.cpp @@ -149,7 +149,7 @@ void Cgs::apply_dense_impl(const matrix::Dense *dense_b, r.get()); r_tld->copy_from(r.get()); - int iter = 0; + int iter = -1; /* Memory movement summary: * 28n * values + 2 * matrix/preconditioner storage * 2x SpMV: 4n * values + 2 * storage