My Project
Loading...
Searching...
No Matches
ILU0Kernels.hpp
1/*
2 Copyright 2024 SINTEF AS
3
4 This file is part of the Open Porous Media project (OPM).
5
6 OPM is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10
11 OPM is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with OPM. If not, see <http://www.gnu.org/licenses/>.
18*/
19#ifndef OPM_ILU0_KERNELS_HPP
20#define OPM_ILU0_KERNELS_HPP
21#include <cstddef>
22#include <vector>
23namespace Opm::gpuistl::detail::ILU0
24{
25
40template <class T, int blocksize>
41void solveUpperLevelSet(T* reorderedMat,
42 int* rowIndices,
43 int* colIndices,
44 int* indexConversion,
45 int startIdx,
46 int rowsInLevelSet,
47 T* v,
48 int threadBlockSize);
49
65template <class T, int blocksize>
66void solveLowerLevelSet(T* reorderedMat,
67 int* rowIndices,
68 int* colIndices,
69 int* indexConversion,
70 int startIdx,
71 int rowsInLevelSet,
72 const T* d,
73 T* v,
74 int threadBlockSize);
75
92template <int blocksize, class LinearSolverScalar, class MatrixScalar>
93void solveUpperLevelSetSplit(MatrixScalar* reorderedMat,
94 int* rowIndices,
95 int* colIndices,
96 int* indexConversion,
97 int startIdx,
98 int rowsInLevelSet,
99 const MatrixScalar* dInv,
100 LinearSolverScalar* v,
101 int threadBlockSize);
102
120template <int blocksize, class LinearSolverScalar, class MatrixScalar>
121void solveLowerLevelSetSplit(MatrixScalar* reorderedLowerMat,
122 int* rowIndices,
123 int* colIndices,
124 int* indexConversion,
125 int startIdx,
126 int rowsInLevelSet,
127 const LinearSolverScalar* d,
128 LinearSolverScalar* v,
129 int threadBlockSize);
130
147template <class T, int blocksize>
148void LUFactorization(T* reorderedMat,
149 int* rowIndices,
150 int* columnIndices,
151 int* naturalToReordered,
152 int* reorderedToNatual,
153 size_t rowsInLevelSet,
154 int startIdx,
155 int threadBlockSize);
156
179template <int blocksize, class InputScalar, class OutputScalar, bool copyResultToOtherMatrix>
180void LUFactorizationSplit(InputScalar* srcReorderedLowerMat,
181 int* lowerRowIndices,
182 int* lowerColIndices,
183 InputScalar* srcReorderedUpperMat,
184 int* upperRowIndices,
185 int* upperColIndices,
186 InputScalar* srcDiagonal,
187 OutputScalar* dstReorderedLowerMat,
188 OutputScalar* dstReorderedUpperMat,
189 OutputScalar* dstDiagonal,
190 int* reorderedToNatural,
191 int* naturalToReordered,
192 int startIdx,
193 int rowsInLevelSet,
194 int threadBlockSize);
195
196} // namespace Opm::gpuistl::detail::ILU0
197#endif