mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
clang-format ILUKernels.cu
This commit is contained in:
parent
e82a9fa56c
commit
89df54e379
@ -161,8 +161,9 @@ namespace
|
||||
mmOverlap<InputScalar, blocksize>(&srcReorderedLowerMat[ij * scalarsInBlock],
|
||||
&srcDiagonal[j * scalarsInBlock],
|
||||
&srcReorderedLowerMat[ij * scalarsInBlock]);
|
||||
if (copyResultToOtherMatrix){
|
||||
moveBlock<blocksize, InputScalar, OutputScalar>(&srcReorderedLowerMat[ij * scalarsInBlock], &dstReorderedLowerMat[ij * scalarsInBlock]);
|
||||
if (copyResultToOtherMatrix) {
|
||||
moveBlock<blocksize, InputScalar, OutputScalar>(&srcReorderedLowerMat[ij * scalarsInBlock],
|
||||
&dstReorderedLowerMat[ij * scalarsInBlock]);
|
||||
}
|
||||
|
||||
// we have now accounted for an element under the diagonal and the diagonal element above it
|
||||
@ -202,8 +203,9 @@ namespace
|
||||
// A_jk = A_ij * A_jk
|
||||
InputScalar tmp[scalarsInBlock] = {0};
|
||||
|
||||
mmNoOverlap<InputScalar, blocksize>(
|
||||
&srcReorderedLowerMat[ij * scalarsInBlock], &srcReorderedUpperMat[jk * scalarsInBlock], tmp);
|
||||
mmNoOverlap<InputScalar, blocksize>(&srcReorderedLowerMat[ij * scalarsInBlock],
|
||||
&srcReorderedUpperMat[jk * scalarsInBlock],
|
||||
tmp);
|
||||
matrixSubtraction<InputScalar, blocksize>(ikBlockPtr, tmp);
|
||||
incrementAcrossSplitStructure(ik, ikState, endOfRowILower, startOfRowIUpper);
|
||||
++jk;
|
||||
@ -217,12 +219,14 @@ namespace
|
||||
}
|
||||
}
|
||||
invBlockInPlace<InputScalar, blocksize>(&srcDiagonal[reorderedIdx * scalarsInBlock]);
|
||||
if (copyResultToOtherMatrix){
|
||||
moveBlock<blocksize, InputScalar, OutputScalar>(&srcDiagonal[reorderedIdx * scalarsInBlock], &dstDiagonal[reorderedIdx * scalarsInBlock]);
|
||||
if (copyResultToOtherMatrix) {
|
||||
moveBlock<blocksize, InputScalar, OutputScalar>(&srcDiagonal[reorderedIdx * scalarsInBlock],
|
||||
&dstDiagonal[reorderedIdx * scalarsInBlock]);
|
||||
|
||||
// also move all values above the diagonal on this row
|
||||
for (int block = startOfRowIUpper; block < endOfRowIUpper; ++block) {
|
||||
moveBlock<blocksize, InputScalar, OutputScalar>(&srcReorderedUpperMat[block * scalarsInBlock], &dstReorderedUpperMat[block * scalarsInBlock]);
|
||||
moveBlock<blocksize, InputScalar, OutputScalar>(&srcReorderedUpperMat[block * scalarsInBlock],
|
||||
&dstReorderedUpperMat[block * scalarsInBlock]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -340,10 +344,12 @@ namespace
|
||||
|
||||
for (int block = nnzIdx; block < nnzIdxLim; ++block) {
|
||||
const int col = colIndices[block];
|
||||
mmvMixedGeneral<blocksize, MatrixScalar, LinearSolverScalar, LinearSolverScalar, LinearSolverScalar>(&mat[block * blocksize * blocksize], &v[col * blocksize], rhs);
|
||||
mmvMixedGeneral<blocksize, MatrixScalar, LinearSolverScalar, LinearSolverScalar, LinearSolverScalar>(
|
||||
&mat[block * blocksize * blocksize], &v[col * blocksize], rhs);
|
||||
}
|
||||
|
||||
mvMixedGeneral<blocksize, MatrixScalar, LinearSolverScalar, LinearSolverScalar, LinearSolverScalar>(&dInv[reorderedIdx * blocksize * blocksize], rhs, &v[naturalRowIdx * blocksize]);
|
||||
mvMixedGeneral<blocksize, MatrixScalar, LinearSolverScalar, LinearSolverScalar, LinearSolverScalar>(
|
||||
&dInv[reorderedIdx * blocksize * blocksize], rhs, &v[naturalRowIdx * blocksize]);
|
||||
}
|
||||
}
|
||||
} // namespace
|
||||
@ -459,10 +465,11 @@ LUFactorizationSplit(InputScalar* srcReorderedLowerMat,
|
||||
int rowsInLevelSet,
|
||||
int thrBlockSize)
|
||||
{
|
||||
int threadBlockSize
|
||||
= ::Opm::gpuistl::detail::getCudaRecomendedThreadBlockSize(cuLUFactorizationSplit<blocksize, InputScalar, OutputScalar, copyResultToOtherMatrix>, thrBlockSize);
|
||||
int threadBlockSize = ::Opm::gpuistl::detail::getCudaRecomendedThreadBlockSize(
|
||||
cuLUFactorizationSplit<blocksize, InputScalar, OutputScalar, copyResultToOtherMatrix>, thrBlockSize);
|
||||
int nThreadBlocks = ::Opm::gpuistl::detail::getNumberOfBlocks(rowsInLevelSet, threadBlockSize);
|
||||
cuLUFactorizationSplit<blocksize, InputScalar, OutputScalar, copyResultToOtherMatrix><<<nThreadBlocks, threadBlockSize>>>(srcReorderedLowerMat,
|
||||
cuLUFactorizationSplit<blocksize, InputScalar, OutputScalar, copyResultToOtherMatrix>
|
||||
<<<nThreadBlocks, threadBlockSize>>>(srcReorderedLowerMat,
|
||||
lowerRowIndices,
|
||||
lowerColIndices,
|
||||
reorderedUpperMat,
|
||||
@ -505,19 +512,25 @@ INSTANTIATE_KERNEL_WRAPPERS(double, 5);
|
||||
INSTANTIATE_KERNEL_WRAPPERS(double, 6);
|
||||
|
||||
#define INSTANTIATE_MIXED_PRECISION_KERNEL_WRAPPERS(blocksize) \
|
||||
/* double preconditioner */\
|
||||
template void solveLowerLevelSetSplit<blocksize, double, double>(double*, int*, int*, int*, int, int, const double*, double*, int); \
|
||||
/* float matrix, double compute preconditioner */\
|
||||
template void solveLowerLevelSetSplit<blocksize, double, float>(float*, int*, int*, int*, int, int, const double*, double*, int); \
|
||||
/* float preconditioner */\
|
||||
template void solveLowerLevelSetSplit<blocksize, float, float>(float*, int*, int*, int*, int, int, const float*, float*, int); \
|
||||
/* double preconditioner */ \
|
||||
template void solveLowerLevelSetSplit<blocksize, double, double>( \
|
||||
double*, int*, int*, int*, int, int, const double*, double*, int); \
|
||||
/* float matrix, double compute preconditioner */ \
|
||||
template void solveLowerLevelSetSplit<blocksize, double, float>( \
|
||||
float*, int*, int*, int*, int, int, const double*, double*, int); \
|
||||
/* float preconditioner */ \
|
||||
template void solveLowerLevelSetSplit<blocksize, float, float>( \
|
||||
float*, int*, int*, int*, int, int, const float*, float*, int); \
|
||||
\
|
||||
/* double preconditioner */\
|
||||
template void solveUpperLevelSetSplit<blocksize, double, double>(double*, int*, int*, int*, int, int, const double*, double*, int); \
|
||||
/* float matrix, double compute preconditioner */\
|
||||
template void solveUpperLevelSetSplit<blocksize, double, float>(float*, int*, int*, int*, int, int, const float*, double*, int); \
|
||||
/* float preconditioner */\
|
||||
template void solveUpperLevelSetSplit<blocksize, float, float>(float*, int*, int*, int*, int, int, const float*, float*, int); \
|
||||
/* double preconditioner */ \
|
||||
template void solveUpperLevelSetSplit<blocksize, double, double>( \
|
||||
double*, int*, int*, int*, int, int, const double*, double*, int); \
|
||||
/* float matrix, double compute preconditioner */ \
|
||||
template void solveUpperLevelSetSplit<blocksize, double, float>( \
|
||||
float*, int*, int*, int*, int, int, const float*, double*, int); \
|
||||
/* float preconditioner */ \
|
||||
template void solveUpperLevelSetSplit<blocksize, float, float>( \
|
||||
float*, int*, int*, int*, int, int, const float*, float*, int);
|
||||
|
||||
INSTANTIATE_MIXED_PRECISION_KERNEL_WRAPPERS(1);
|
||||
INSTANTIATE_MIXED_PRECISION_KERNEL_WRAPPERS(2);
|
||||
|
Loading…
Reference in New Issue
Block a user