17 #ifndef OPM_ISTLSOLVERRUNTIMEOPTIONPROXY_HEADER_INCLUDED 18 #define OPM_ISTLSOLVERRUNTIMEOPTIONPROXY_HEADER_INCLUDED 20 #include "opm/simulators/linalg/FlowLinearSolverParameters.hpp" 21 #include <opm/simulators/linalg/setupPropertyTree.hpp> 22 #include <opm/simulators/linalg/AbstractISTLSolver.hpp> 23 #include <opm/simulators/linalg/ISTLSolver.hpp> 24 #if COMPILE_GPU_BRIDGE 25 #include <opm/simulators/linalg/ISTLSolverGpuBridge.hpp> 29 #include <opm/simulators/linalg/gpuistl_hip/ISTLSolverGPUISTL.hpp> 31 #include <opm/simulators/linalg/gpuistl/ISTLSolverGPUISTL.hpp> 34 #include <fmt/format.h> 42 template <
class TypeTag>
43 class ISTLSolverRuntimeOptionProxy :
public AbstractISTLSolver<GetPropType<TypeTag, Properties::SparseMatrixAdapter>,
44 GetPropType<TypeTag, Properties::GlobalEqVector>>
47 using SparseMatrixAdapter = GetPropType<TypeTag, Properties::SparseMatrixAdapter>;
48 using Vector = GetPropType<TypeTag, Properties::GlobalEqVector>;
49 using Simulator = GetPropType<TypeTag, Properties::Simulator>;
50 using Matrix =
typename SparseMatrixAdapter::IstlMatrix;
53 using CommunicationType = Dune::OwnerOverlapCopyCommunication<int, int>;
55 using CommunicationType = Dune::Communication<int>;
59 static void registerParameters()
61 FlowLinearSolverParameters::registerParameters();
73 bool forceSerial =
false)
75 createSolver(simulator, parameters, forceSerial);
82 createSolver(simulator);
88 istlSolver_->eraseMatrix();
93 istlSolver_->setActiveSolver(num);
98 return istlSolver_->numAvailableSolvers();
101 void prepare(
const SparseMatrixAdapter& M, Vector& b)
override 103 istlSolver_->prepare(M, b);
106 void prepare(
const Matrix& M, Vector& b)
override 108 istlSolver_->prepare(M, b);
111 void setResidual(Vector& b)
override 113 istlSolver_->setResidual(b);
116 void getResidual(Vector& b)
const override 118 istlSolver_->getResidual(b);
121 void setMatrix(
const SparseMatrixAdapter& M)
override 123 istlSolver_->setMatrix(M);
126 bool solve(Vector& x)
override 128 return istlSolver_->solve(x);
133 return istlSolver_->iterations();
136 const CommunicationType*
comm()
const override 138 return istlSolver_->comm();
143 return istlSolver_->getSolveCount();
147 std::unique_ptr<AbstractISTLSolver<SparseMatrixAdapter, Vector>> istlSolver_;
150 template <
class... Args>
151 void createSolver(
const Simulator& simulator, Args&&... args)
153 const auto backend = Parameters::linearSolverAcceleratorTypeFromCLI();
154 if (backend == Parameters::LinearSolverAcceleratorType::CPU) {
156 #if COMPILE_GPU_BRIDGE 157 istlSolver_ = std::make_unique<ISTLSolverGpuBridge<TypeTag>>(simulator, std::forward<Args>(args)...);
159 istlSolver_ = std::make_unique<ISTLSolver<TypeTag>>(simulator, std::forward<Args>(args)...);
163 else if (backend == Parameters::LinearSolverAcceleratorType::GPU) {
164 istlSolver_ = std::make_unique<gpuistl::ISTLSolverGPUISTL<TypeTag>>(simulator, std::forward<Args>(args)...);
170 OPM_THROW(std::invalid_argument, fmt::format(fmt::runtime(
"Unknown backend: {}"), Parameters::toString(backend)));
ISTLSolverRuntimeOptionProxy(const Simulator &simulator, const FlowLinearSolverParameters ¶meters, bool forceSerial=false)
Construct a system solver.
Definition: ISTLSolverRuntimeOptionProxy.hpp:71
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition: blackoilbioeffectsmodules.hh:45
ISTLSolverRuntimeOptionProxy(const Simulator &simulator)
Construct a system solver.
Definition: ISTLSolverRuntimeOptionProxy.hpp:80
const CommunicationType * comm() const override
Get the communication object used by the solver.
Definition: ISTLSolverRuntimeOptionProxy.hpp:136
void eraseMatrix() override
Signals that the memory for the matrix internally in the solver could be erased.
Definition: ISTLSolverRuntimeOptionProxy.hpp:86
This class carries all parameters for the NewtonIterationBlackoilInterleaved class.
Definition: FlowLinearSolverParameters.hpp:97
int numAvailableSolvers() const override
Get the number of available solvers.
Definition: ISTLSolverRuntimeOptionProxy.hpp:96
Manages the initializing and running of time dependent problems.
Definition: simulator.hh:83
int getSolveCount() const override
Get the count of how many times the solver has been called.
Definition: ISTLSolverRuntimeOptionProxy.hpp:141
int iterations() const override
Get the number of iterations used in the last solve.
Definition: ISTLSolverRuntimeOptionProxy.hpp:131
void setActiveSolver(int num) override
Set the active solver by its index.
Definition: ISTLSolverRuntimeOptionProxy.hpp:91