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_hip/ISTLSolverGPUISTL.hpp>
31#include <opm/simulators/linalg/gpuistl/ISTLSolverGPUISTL.hpp>
34#include <fmt/format.h>
42template <
class TypeTag>
44 GetPropType<TypeTag, Properties::GlobalEqVector>>
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)));
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:71
int numAvailableSolvers() const override
Get the number of available solvers.
Definition ISTLSolverRuntimeOptionProxy.hpp:96
ISTLSolverRuntimeOptionProxy(const Simulator &simulator)
Construct a system solver.
Definition ISTLSolverRuntimeOptionProxy.hpp:80
void setActiveSolver(int num) override
Set the active solver by its index.
Definition ISTLSolverRuntimeOptionProxy.hpp:91
int getSolveCount() const override
Get the count of how many times the solver has been called.
Definition ISTLSolverRuntimeOptionProxy.hpp:141
const CommunicationType * comm() const override
Get the communication object used by the solver.
Definition ISTLSolverRuntimeOptionProxy.hpp:136
int iterations() const override
Get the number of iterations used in the last solve.
Definition ISTLSolverRuntimeOptionProxy.hpp:131
void eraseMatrix() override
Signals that the memory for the matrix internally in the solver could be erased.
Definition ISTLSolverRuntimeOptionProxy.hpp:86
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:45
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