46 using Base::verbosity;
53 std::unique_ptr<BlockedMatrix<Scalar>> LUmat{};
55 std::unique_ptr<BlockedMatrix<Scalar>> Lmat{}, Umat{};
57 std::vector<Scalar> invDiagVals;
58 std::vector<int> diagIndex;
59 std::vector<int> rowsPerColor;
60 std::vector<int> rowsPerColorPrefix;
61 std::vector<int> toOrder, fromOrder;
63 std::once_flag pattern_uploaded;
65 bool opencl_ilu_parallel;
68 cl::Buffer invDiagVals;
70 cl::Buffer rowsPerColor;
71 cl::Buffer rowIndices;
75 cl::Buffer Lvals, Lcols, Lrows;
76 cl::Buffer Uvals, Ucols, Urows;
78 cl::Buffer LUvals, LUcols, LUrows;
85 ChowPatelIlu<block_size> chowPatelIlu;
90 openclBILU0(
bool opencl_ilu_parallel,
int verbosity);
105 void apply(
const cl::Buffer& y, cl::Buffer& x)
override;
106 void apply(Scalar&, Scalar&)
override {}
108 std::tuple<std::vector<int>, std::vector<int>, std::vector<int>>
109 get_preconditioner_structure()
111 return {{LUmat->rowPointers, LUmat->rowPointers + (Nb + 1)},
112 {LUmat->colIndices, LUmat->colIndices + nnzb}, diagIndex};
115 std::pair<cl::Buffer, cl::Buffer> get_preconditioner_data()
118 return std::make_pair(s.Lvals, s.invDiagVals);
120 return std::make_pair(s.LUvals, s.invDiagVals);