15 #include "Parallel/PupStlCpp17.hpp"
18 namespace TestHelpers::LinearSolver {
24 *result = matrix * operand;
34 if (not inv_matrix_.has_value()) {
35 inv_matrix_ = blaze::inv(linear_operator.matrix);
37 *solution = *inv_matrix_ * source;
40 void reset() noexcept { inv_matrix_.reset(); }
42 void pup(PUP::er& p) noexcept { p | inv_matrix_; }
45 using options = tmpl::list<>;
57 if (not inv_diagonal_.has_value()) {
59 for (
size_t i = 0; i < source.size(); ++i) {
60 (*inv_diagonal_)[i] /= linear_operator.matrix(i, i);
64 for (
size_t i = 0; i < solution->size(); ++i) {
65 (*solution)[i] *= (*inv_diagonal_)[i];
69 void reset() noexcept { inv_diagonal_.reset(); }
71 void pup(PUP::er& p) noexcept { p | inv_diagonal_; }
81 const size_t num_iterations)
82 : relaxation_parameter_(relaxation_parameter),
83 num_iterations_(num_iterations) {}
89 for (
size_t i = 0; i < num_iterations_; ++i) {
91 *initial_guess_in_solution_out);
92 correction_buffer_ *= -1.;
93 correction_buffer_ += source;
94 *initial_guess_in_solution_out +=
95 relaxation_parameter_ * correction_buffer_;
99 static void reset() noexcept {}
101 void pup(PUP::er& p) noexcept {
102 p | relaxation_parameter_;
107 double relaxation_parameter_{};
108 size_t num_iterations_{};