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>
25#include <opm/simulators/linalg/ISTLSolverGpuBridge.hpp>
29#include <opm/simulators/linalg/gpuistl/ISTLSolverGPUISTL.hpp>
38template <
class TypeTag>
45 using Matrix =
typename SparseMatrixAdapter::IstlMatrix;
48 using CommunicationType = Dune::OwnerOverlapCopyCommunication<int, int>;
50 using CommunicationType = Dune::Communication<int>;
54 static void registerParameters()
56 FlowLinearSolverParameters::registerParameters();
68 bool forceSerial =
false)
70 createSolver(simulator, parameters, forceSerial);
77 createSolver(simulator);
83 istlSolver_->eraseMatrix();
88 istlSolver_->setActiveSolver(num);
93 return istlSolver_->numAvailableSolvers();
96 void prepare(
const SparseMatrixAdapter& M, Vector& b)
override
98 istlSolver_->prepare(M, b);
101 void prepare(
const Matrix& M, Vector& b)
override
103 istlSolver_->prepare(M, b);
108 istlSolver_->setResidual(b);
113 istlSolver_->getResidual(b);
118 istlSolver_->setMatrix(M);
123 return istlSolver_->solve(x);
128 return istlSolver_->iterations();
131 const CommunicationType*
comm()
const override
133 return istlSolver_->comm();
138 return istlSolver_->getSolveCount();
142 std::unique_ptr<AbstractISTLSolver<TypeTag>> istlSolver_;
145 template <
class... Args>
146 void createSolver(
const Simulator& simulator, Args&&... args)
148 const auto backend = Parameters::linearSolverAcceleratorTypeFromCLI();
149 if (backend == Parameters::LinearSolverAcceleratorType::CPU) {
151#if COMPILE_GPU_BRIDGE
152 istlSolver_ = std::make_unique<ISTLSolverGpuBridge<TypeTag>>(simulator, std::forward<Args>(args)...);
154 istlSolver_ = std::make_unique<ISTLSolver<TypeTag>>(simulator, std::forward<Args>(args)...);
158 else if (backend == Parameters::LinearSolverAcceleratorType::GPU) {
159 istlSolver_ = std::make_unique<gpuistl::ISTLSolverGPUISTL<TypeTag>>(simulator, std::forward<Args>(args)...);
165 OPM_THROW(std::invalid_argument, fmt::format(
"Unknown backend: {}", Parameters::toString(backend)));
Abstract interface for ISTL solvers.
Definition AbstractISTLSolver.hpp:45
ISTLSolverRuntimeOptionProxy(const Simulator &simulator, const FlowLinearSolverParameters ¶meters, bool forceSerial=false)
Construct a system solver.
Definition ISTLSolverRuntimeOptionProxy.hpp:66
int numAvailableSolvers() const override
Get the number of available solvers.
Definition ISTLSolverRuntimeOptionProxy.hpp:91
void setResidual(Vector &b) override
Set the residual vector.
Definition ISTLSolverRuntimeOptionProxy.hpp:106
void getResidual(Vector &b) const override
Get the residual vector.
Definition ISTLSolverRuntimeOptionProxy.hpp:111
ISTLSolverRuntimeOptionProxy(const Simulator &simulator)
Construct a system solver.
Definition ISTLSolverRuntimeOptionProxy.hpp:75
void setActiveSolver(int num) override
Set the active solver by its index.
Definition ISTLSolverRuntimeOptionProxy.hpp:86
int getSolveCount() const override
Get the count of how many times the solver has been called.
Definition ISTLSolverRuntimeOptionProxy.hpp:136
const CommunicationType * comm() const override
Get the communication object used by the solver.
Definition ISTLSolverRuntimeOptionProxy.hpp:131
bool solve(Vector &x) override
Solve the system of equations Ax = b.
Definition ISTLSolverRuntimeOptionProxy.hpp:121
void setMatrix(const SparseMatrixAdapter &M) override
Set the matrix for the solver.
Definition ISTLSolverRuntimeOptionProxy.hpp:116
void prepare(const SparseMatrixAdapter &M, Vector &b) override
Prepare the solver with the given sparse matrix and right-hand side vector.
Definition ISTLSolverRuntimeOptionProxy.hpp:96
int iterations() const override
Get the number of iterations used in the last solve.
Definition ISTLSolverRuntimeOptionProxy.hpp:126
void eraseMatrix() override
Signals that the memory for the matrix internally in the solver could be erased.
Definition ISTLSolverRuntimeOptionProxy.hpp:81
void prepare(const Matrix &M, Vector &b) override
Prepare the solver with the given matrix and right-hand side vector.
Definition ISTLSolverRuntimeOptionProxy.hpp:101
Manages the initializing and running of time dependent problems.
Definition simulator.hh:84
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition blackoilbioeffectsmodules.hh:43
typename Properties::Detail::GetPropImpl< TypeTag, Property >::type::type GetPropType
get the type alias defined in the property (equivalent to old macro GET_PROP_TYPE(....
Definition propertysystem.hh:233
This class carries all parameters for the NewtonIterationBlackoilInterleaved class.
Definition FlowLinearSolverParameters.hpp:98