From 8e7d45cb762f957e2ac61cf740e41a5825980615 Mon Sep 17 00:00:00 2001 From: Gregor Olenik <gregor.olenik@web.de> Date: Mon, 3 Jun 2024 11:31:11 +0200 Subject: [PATCH 1/2] fix ir build --- CMakeLists.txt | 3 +- Solver/IR/GKOIR.H | 76 +++++++++++++++++++++++++---------------------- 2 files changed, 42 insertions(+), 37 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4fb85d091..02ec9640c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -170,7 +170,8 @@ target_sources( HostMatrix/HostMatrixFreeFunctions.C Solver/CG/GKOCG.C Solver/BiCGStab/GKOBiCGStab.C - # Solver / IR / GKOIR.C Solver / Multigrid / GKOMultigrid.C + Solver/IR/GKOIR.C + # Solver / Multigrid / GKOMultigrid.C Solver/GMRES/GKOGMRES.C # LduMatrix / GKOACG / GKOACG.C PUBLIC common/common.H diff --git a/Solver/IR/GKOIR.H b/Solver/IR/GKOIR.H index 94b9d9516..e162a358f 100644 --- a/Solver/IR/GKOIR.H +++ b/Solver/IR/GKOIR.H @@ -74,19 +74,28 @@ public: outerStoppingCriterion_(solverControls), innerStoppingCriterion_(StoppingCriterion(innerSolverControls_)){}; - CREATE_SOLVER_METHODS(ir) + + std::unique_ptr<ir::Factory, std::default_delete<ir::Factory>> + create_dist_solver( + std::shared_ptr<gko::Executor> exec, + std::shared_ptr<gko::LinOp> gkomatrix, std::shared_ptr<dist_vec> x, + std::shared_ptr<dist_vec> b, const label verbose, + const bool export_res, std::shared_ptr<gko::LinOp> precond) const + { + outerStoppingCriterionVec_.push_back( + outerStoppingCriterion_.build_dist_stopping_criterion( + exec, gkomatrix, x, b, verbose, export_res, + get_prev_number_of_iterations(), + get_solve_prev_rel_res_cost())); + + return create_default(exec); + }; + std::unique_ptr<ir::Factory, std::default_delete<gko::solver::Ir<scalar>::Factory>> - create_default(std::shared_ptr<gko::Executor> exec, - std::shared_ptr<mtx> gkomatrix, std::shared_ptr<vec> x, - std::shared_ptr<vec> b, const label verbose) const + create_default(std::shared_ptr<gko::Executor> exec) const { - innerStoppingCriterionVec_.push_back( - innerStoppingCriterion_.build_stopping_criterion( - exec, gkomatrix, x, b, verbose, false, 0)); - - auto inner = gko::share(gko::solver::Cg<scalar>::build() .with_criteria(innerStoppingCriterionVec_) .on(exec)); @@ -99,29 +108,6 @@ public: return ir; }; - std::unique_ptr<gko::solver::Ir<scalar>::Factory, - std::default_delete<gko::solver::Ir<scalar>::Factory>> - create_scalar_jacobi(std::shared_ptr<gko::Executor> exec, - std::shared_ptr<mtx> gkomatrix, std::shared_ptr<vec> x, - std::shared_ptr<vec> b, const label verbose) const - { - using bj = gko::preconditioner::Jacobi<>; - label blockSize = - innerSolverControls_.lookupOrDefault("maxBlockSize", label(1)); - auto bj_factory = bj::build() - .with_max_block_size(blockSize) - .with_skip_sorting(true) - // .with_storage_optimization( - // gko::precision_reduction::autodetect()) - .on(exec); - - auto ir = ir::build() - .with_solver(gko::share(bj_factory)) - .with_criteria(outerStoppingCriterionVec_) - .on(exec); - - return ir; - }; scalar get_init_res_norm() const { @@ -135,7 +121,7 @@ public: scalar get_res_norm_time() const { - return stoppingCriterion_.get_res_norm_time(); + return outerStoppingCriterion_.get_res_norm_time(); } @@ -147,15 +133,33 @@ public: void store_number_of_iterations() const { set_solve_prev_iters(sysMatrixName_, db_, - stoppingCriterion_.get_num_iters(), - stoppingCriterion_.get_is_final()); + outerStoppingCriterion_.get_num_iters(), + outerStoppingCriterion_.get_is_final()); } label get_prev_number_of_iterations() const { return get_solve_prev_iters(sysMatrixName_, db_, - stoppingCriterion_.get_is_final()); + outerStoppingCriterion_.get_is_final()); + } + + label get_number_of_iterations() const + { + return outerStoppingCriterion_.get_num_iters(); + } + + // TODO FIXME add via macro or base class + void set_prev_rel_res_cost(scalar prev_rel_res_cost) const + { + return ::Foam::set_solve_prev_rel_res_cost(sysMatrixName_, db_, + prev_rel_res_cost); + } + + scalar get_solve_prev_rel_res_cost() const + { + return ::Foam::get_solve_prev_rel_res_cost(sysMatrixName_, db_); } + }; /*---------------------------------------------------------------------------*\ From e96c7b75016d519480edf6c5286e7b87c5de05cb Mon Sep 17 00:00:00 2001 From: Gregor Olenik <gregor.olenik@web.de> Date: Mon, 3 Jun 2024 11:31:24 +0200 Subject: [PATCH 2/2] cleanup --- Solver/CG/GKOCG.H | 1 - 1 file changed, 1 deletion(-) diff --git a/Solver/CG/GKOCG.H b/Solver/CG/GKOCG.H index 427a58ca9..a644e4f8f 100644 --- a/Solver/CG/GKOCG.H +++ b/Solver/CG/GKOCG.H @@ -36,7 +36,6 @@ namespace Foam { class GKOCGFactory { private: - using mtx = gko::matrix::Csr<scalar>; using vec = gko::matrix::Dense<scalar>; using cg = gko::solver::Cg<scalar>;