20 #ifndef OPM_OPENCLCPR_HPP 21 #define OPM_OPENCLCPR_HPP 23 #include <dune/istl/paamg/matrixhierarchy.hh> 24 #include <dune/istl/umfpack.hh> 26 #include <opm/simulators/linalg/gpubridge/opencl/opencl.hpp> 27 #include <opm/simulators/linalg/gpubridge/opencl/openclBILU0.hpp> 28 #include <opm/simulators/linalg/gpubridge/Matrix.hpp> 29 #include <opm/simulators/linalg/gpubridge/CprCreation.hpp> 30 #include <opm/simulators/linalg/gpubridge/opencl/OpenclMatrix.hpp> 31 #include <opm/simulators/linalg/gpubridge/opencl/openclPreconditioner.hpp> 33 #include <opm/simulators/linalg/gpubridge/opencl/openclSolverBackend.hpp> 35 #include <type_traits> 39 template<
class Scalar>
class BlockedMatrix;
42 template<
class Scalar,
unsigned int block_size>
51 using Base::verbosity;
58 std::vector<OpenclMatrix<Scalar>> d_Amatrices, d_Rmatrices;
59 std::vector<cl::Buffer> d_PcolIndices;
60 std::vector<cl::Buffer> d_invDiags;
61 std::vector<cl::Buffer> d_t, d_f, d_u;
62 std::unique_ptr<cl::Buffer> d_rs;
63 std::unique_ptr<cl::Buffer> d_weights;
64 std::unique_ptr<OpenclMatrix<Scalar>> d_mat;
65 std::unique_ptr<cl::Buffer> d_coarse_y, d_coarse_x;
66 std::once_flag opencl_buffers_allocated;
68 std::unique_ptr<openclBILU0<Scalar,block_size>> bilu0;
70 std::unique_ptr<openclSolverBackend<Scalar,1>> coarse_solver;
71 bool opencl_ilu_parallel;
74 void init_opencl_buffers();
80 void apply_amg(
const cl::Buffer& y, cl::Buffer& x);
82 void amg_cycle_gpu(
const int level, cl::Buffer &y, cl::Buffer &x);
85 openclCPR(
bool opencl_ilu_parallel,
int verbosity);
92 void setOpencl(std::shared_ptr<cl::Context>& context,
93 std::shared_ptr<cl::CommandQueue>& queue)
override;
97 void apply(
const cl::Buffer& y,
Definition: openclPreconditioner.hpp:31
Definition: amgclSolverBackend.cpp:49
This class serves to eliminate the need to include the WellContributions into the matrix (with –matr...
Definition: GpuBridge.hpp:30
This class implements a Constrained Pressure Residual (CPR) preconditioner.
Definition: openclCPR.hpp:43
This class implements a Constrained Pressure Residual (CPR) preconditioner.
Definition: CprCreation.hpp:38
This struct resembles a blocked csr matrix, like Dune::BCRSMatrix.
Definition: BlockedMatrix.hpp:28