20#ifndef OPM_ROCSPARSECPR_HPP
21#define OPM_ROCSPARSECPR_HPP
25#include <opm/simulators/linalg/bda/rocm/rocsparseBILU0.hpp>
26#include <opm/simulators/linalg/bda/Matrix.hpp>
27#include <opm/simulators/linalg/bda/CprCreation.hpp>
28#include <opm/simulators/linalg/bda/rocm/rocsparseMatrix.hpp>
29#include <opm/simulators/linalg/bda/rocm/rocsparsePreconditioner.hpp>
31#include <opm/simulators/linalg/bda/rocm/rocsparseSolverBackend.hpp>
33namespace Opm::Accelerator {
35template<
class Scalar>
class BlockedMatrix;
38template <
class Scalar,
unsigned int block_size>
47 using Base::verbosity;
50 std::vector<RocmMatrix<Scalar>> d_Amatrices, d_Rmatrices;
52 std::vector<RocmVector<int>> d_PcolIndices;
53 std::vector<RocmVector<Scalar>> d_invDiags;
54 std::vector<RocmVector<Scalar>> d_t, d_f;
55 std::vector<RocmVector<Scalar>> d_u;
56 std::vector<RocmVector<Scalar>> d_rs;
57 std::vector<RocmVector<Scalar>> d_weights;
58 std::unique_ptr<RocmMatrix<Scalar>> d_mat;
59 std::vector<RocmVector<Scalar>> d_coarse_y, d_coarse_x;
60 std::once_flag rocm_buffers_allocated;
62 std::unique_ptr<rocsparseBILU0<Scalar, block_size> > bilu0;
64 std::unique_ptr<rocsparseSolverBackend<Scalar, 1> > coarse_solver;
67 void init_rocm_buffers();
73 void apply_amg(
const Scalar&
y, Scalar& x);
76 void amg_cycle_gpu(
const int level, Scalar &
y, Scalar &x);
121 void apply(
const cl::Buffer&, cl::Buffer&)
override {}
This struct resembles a blocked csr matrix, like Dune::BCRSMatrix.
Definition BlockedMatrix.hpp:29
This class implements a Constrained Pressure Residual (CPR) preconditioner.
Definition CprCreation.hpp:39
This class implements a Constrained Pressure Residual (CPR) preconditioner.
Definition rocsparseCPR.hpp:40
bool analyze_matrix(BlockedMatrix< Scalar > *mat) override
Analysis, extract parallelism if specified.
Definition rocsparseCPR.cpp:84
bool initialize(std::shared_ptr< BlockedMatrix< Scalar > > matrix, std::shared_ptr< BlockedMatrix< Scalar > > jacMatrix, rocsparse_int *d_Arows, rocsparse_int *d_Acols) override
Initialize GPU and allocate memory.
Definition rocsparseCPR.cpp:54
void apply(Scalar &y, Scalar &x) override
Apply preconditioner, x = prec(y) applies blocked ilu0 also applies amg for pressure component.
Definition rocsparseCPR.cpp:309
void copy_system_to_gpu(Scalar *b) override
Copy matrix A values to GPU.
Definition rocsparseCPR.cpp:72
bool create_preconditioner(BlockedMatrix< Scalar > *mat) override
Create AMG preconditioner and perform ILU decomposition.
Definition rocsparseCPR.cpp:146
void update_system_on_gpu(Scalar *b) override
Reassign pointers, in case the addresses of the Dune variables have changed --> TODO: check when/if w...
Definition rocsparseCPR.cpp:78
Definition rocsparsePreconditioner.hpp:33
constexpr auto getPropValue()
get the value data member of a property
Definition propertysystem.hh:242