49 using Base::verbosity;
56 std::unique_ptr<BlockedMatrix> LUmat =
nullptr;
58 std::unique_ptr<BlockedMatrix> Lmat =
nullptr, Umat =
nullptr;
60 std::vector<double> invDiagVals;
61 std::vector<int> diagIndex;
62 std::vector<int> rowsPerColor;
63 std::vector<int> rowsPerColorPrefix;
64 std::vector<int> toOrder, fromOrder;
66 std::once_flag pattern_uploaded;
68 bool opencl_ilu_parallel;
71 cl::Buffer invDiagVals;
73 cl::Buffer rowsPerColor;
74 cl::Buffer rowIndices;
78 cl::Buffer Lvals, Lcols, Lrows;
79 cl::Buffer Uvals, Ucols, Urows;
81 cl::Buffer LUvals, LUcols, LUrows;
88 ChowPatelIlu<block_size> chowPatelIlu;
93 BILU0(
bool opencl_ilu_parallel,
int verbosity);
106 void apply(
const cl::Buffer& y, cl::Buffer& x)
override;
108 std::tuple<std::vector<int>, std::vector<int>, std::vector<int>> get_preconditioner_structure()
110 return {{LUmat->rowPointers, LUmat->rowPointers + (Nb + 1)}, {LUmat->colIndices, LUmat->colIndices + nnzb}, diagIndex};
113 std::pair<cl::Buffer, cl::Buffer> get_preconditioner_data()
116 return std::make_pair(s.Lvals, s.invDiagVals);
118 return std::make_pair(s.LUvals, s.invDiagVals);