25 #include <opm/simulators/linalg/bda/BlockedMatrix.hpp>
26 #include <opm/simulators/linalg/bda/ILUReorder.hpp>
28 #include <opm/simulators/linalg/bda/opencl/opencl.hpp>
29 #include <opm/simulators/linalg/bda/opencl/Preconditioner.hpp>
30 #include <opm/simulators/linalg/bda/opencl/ChowPatelIlu.hpp>
40 template <
unsigned int block_size>
49 using Base::verbosity;
56 std::unique_ptr<BlockedMatrix> LUmat =
nullptr;
57 std::shared_ptr<BlockedMatrix> rmat =
nullptr;
58 std::shared_ptr<BlockedMatrix> rJacMat =
nullptr;
60 std::unique_ptr<BlockedMatrix> Lmat =
nullptr, Umat =
nullptr;
62 std::vector<double> invDiagVals;
63 std::vector<int> diagIndex;
64 std::vector<int> rowsPerColor;
65 std::vector<int> rowsPerColorPrefix;
66 std::vector<int> toOrder, fromOrder;
68 std::once_flag pattern_uploaded;
70 ILUReorder opencl_ilu_reorder;
72 std::vector<int> reordermappingNonzeroes;
73 std::vector<int> jacReordermappingNonzeroes;
76 cl::Buffer invDiagVals;
78 cl::Buffer rowsPerColor;
80 cl::Buffer Lvals, Lcols, Lrows;
81 cl::Buffer Uvals, Ucols, Urows;
83 cl::Buffer LUvals, LUcols, LUrows;
90 ChowPatelIlu<block_size> chowPatelIlu;
95 BILU0(ILUReorder opencl_ilu_reorder,
int verbosity);
106 void apply(
const cl::Buffer& y, cl::Buffer& x)
override;
108 int* getToOrder()
override
110 return toOrder.data();
113 int* getFromOrder()
override
115 return fromOrder.data();
125 return rJacMat.get();
128 std::tuple<std::vector<int>, std::vector<int>, std::vector<int>> get_preconditioner_structure()
130 return {{LUmat->rowPointers, LUmat->rowPointers + (Nb + 1)}, {LUmat->colIndices, LUmat->colIndices + nnzb}, diagIndex};
133 std::pair<cl::Buffer, cl::Buffer> get_preconditioner_data()
136 return std::make_pair(s.Lvals, s.invDiagVals);
138 return std::make_pair(s.LUvals, s.invDiagVals);
This class implements a Blocked ILU0 preconditioner The decomposition is done on CPU,...
Definition: BILU0.hpp:42
This struct resembles a blocked csr matrix, like Dune::BCRSMatrix.
Definition: BlockedMatrix.hpp:37
Definition: Preconditioner.hpp:36
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition: BlackoilPhases.hpp:27