20 #ifndef GEOS_PHYSICSSOLVERS_FLUIDFLOW_COMPOSITIONALMULTIPHASEUTILITIES_H_
21 #define GEOS_PHYSICSSOLVERS_FLUIDFLOW_COMPOSITIONALMULTIPHASEUTILITIES_H_
28 namespace compositionalMultiphaseUtilities
74 template<
typename VEC >
81 for(
integer i = 0; i < numBlocks; ++i )
83 integer const ind = i * numRowsInBlock + numRowsToShift - 1;
85 for(
int j = ind - 1; j >= i * numRowsInBlock; --j )
90 v[i*numRowsInBlock] = tmp;
102 template<
typename VEC >
147 template<
typename MATRIX,
typename VEC >
156 for(
integer k = 0; k < numBlocks; ++k )
158 integer const ind = k * numRowsInBlock + numRowsToShift - 1;
159 for(
integer j = 0; j < numColsInBlock; ++j )
161 work[j] = mat[ind][j];
163 for(
integer i = ind - 1; i >= k * numRowsInBlock; --i )
165 for(
integer j = 0; j < numColsInBlock; ++j )
167 mat[i+1][j] = mat[i][j];
168 work[j] += mat[i][j];
171 for(
integer j = 0; j < numColsInBlock; ++j )
173 mat[k*numRowsInBlock][j] = work[j];
190 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...
ScalingType
Solution scaling type, used in CompositionalMultiphaseFVM.
@ Global
Scale the Newton update with a unique scaling factor.
@ Local
Scale the Newton update locally (modifies the Newton direction)
#define GEOS_HOST_DEVICE
Marks a host-device function.
ENUM_STRINGS(LinearSolverParameters::SolverType, "direct", "cg", "gmres", "fgmres", "bicgstab", "preconditioner")
Declare strings associated with enumeration values.
double real64
64-bit floating point type.
std::int32_t integer
Signed integer type.