20 #ifndef GEOS_PHYSICSSOLVERS_FLUIDFLOW_COMPOSITIONALMULTIPHASEUTILITIES_H_
21 #define GEOS_PHYSICSSOLVERS_FLUIDFLOW_COMPOSITIONALMULTIPHASEUTILITIES_H_
48 namespace compositionalMultiphaseUtilities
81 template<
typename VEC >
88 for(
integer i = 0; i < numBlocks; ++i )
90 integer const ind = i * numRowsInBlock + numRowsToShift - 1;
92 for(
int j = ind - 1; j >= i * numRowsInBlock; --j )
97 v[i*numRowsInBlock] = tmp;
109 template<
typename VEC >
154 template<
typename MATRIX,
typename VEC >
164 for(
integer k = 0; k < numBlocks; ++k )
166 integer const firstRow = k * numRowsInBlock;
167 integer const ind = firstRow + numRowsToShift - 1;
168 for(
integer j = 0; j < numColsInBlock; ++j )
170 work[j] = mat[ind][j];
172 integer const numIters = numRowsToShift - 1;
173 for(
integer step = 0; step < numIters; ++step )
177 for(
integer j = 0; j < numColsInBlock; ++j )
179 mat[i][j] = mat[i-1][j];
180 work[j] += mat[i-1][j];
183 for(
integer j = 0; j < numColsInBlock; ++j )
185 mat[firstRow][j] = work[j];
202 template<
typename MATRIX,
typename VEC >
GEOS_HOST_DEVICE void shiftRowsAheadByOneAndReplaceFirstRowWithColumnSum(integer const numRowsInBlock, integer const numColsInBlock, MATRIX &&mat, VEC &&work)
Shifts all rows one position ahead and replaces the first row with the sum of all rows in the input b...
GEOS_HOST_DEVICE void shiftBlockRowsAheadByOneAndReplaceFirstRowWithColumnSum(integer const numRowsToShift, integer const numRowsInBlock, integer const numColsInBlock, integer const numBlocks, MATRIX &&mat, VEC &&work)
In each block, shift the elements from 0 to numRowsToShift-1, shifts all rows one position ahead and ...
GEOS_HOST_DEVICE void shiftElementsAheadByOneAndReplaceFirstElementWithSum(integer const numRows, VEC &&v)
Shifts all elements one position ahead and replaces the first element with the sum of all elements in...
GEOS_HOST_DEVICE void shiftBlockElementsAheadByOneAndReplaceFirstElementWithSum(integer const numRowsToShift, integer const numRowsInBlock, integer const numBlocks, VEC &&v)
In each block, shift the elements from 0 to numRowsToShift-1 one position ahead and replaces the firs...
#define GEOS_HOST_DEVICE
Marks a host-device function.
double real64
64-bit floating point type.
int integer
Signed integer type.
ENUM_STRINGS(LinearSolverParameters::SolverType, "direct", "cg", "gmres", "fgmres", "bicgstab", "richardson", "preconditioner")
Declare strings associated with enumeration values.
GravityDensityScheme
Options for density treatment in gravity.