20#ifndef OPM_GPUISTL_KERNEL_ENUMS_HPP
21#define OPM_GPUISTL_KERNEL_ENUMS_HPP
23#include <cuda_runtime.h>
29namespace Opm::gpuistl {
31 enum class MatrixStorageMPScheme {
32 DOUBLE_DIAG_DOUBLE_OFFDIAG = 0,
33 FLOAT_DIAG_FLOAT_OFFDIAG = 1,
34 DOUBLE_DIAG_FLOAT_OFFDIAG = 2
38 bool isValidMatrixStorageMPScheme(
int scheme);
41 inline MatrixStorageMPScheme makeMatrixStorageMPScheme(
int scheme) {
42 if (!detail::isValidMatrixStorageMPScheme(
scheme)) {
44 fmt::format(
"Invalid matrix storage mixed precision scheme chosen: {}.\n"
46 "\t0: DOUBLE_DIAG_DOUBLE_OFFDIAG\n"
47 "\t1: FLOAT_DIAG_FLOAT_OFFDIAG\n"
48 "\t2: DOUBLE_DIAG_FLOAT_OFFDIAG",
51 return static_cast<MatrixStorageMPScheme
>(
scheme);
58 case MatrixStorageMPScheme::DOUBLE_DIAG_DOUBLE_OFFDIAG:
60 case MatrixStorageMPScheme::FLOAT_DIAG_FLOAT_OFFDIAG:
62 case MatrixStorageMPScheme::DOUBLE_DIAG_FLOAT_OFFDIAG:
71 case MatrixStorageMPScheme::DOUBLE_DIAG_DOUBLE_OFFDIAG:
73 case MatrixStorageMPScheme::FLOAT_DIAG_FLOAT_OFFDIAG:
75 case MatrixStorageMPScheme::DOUBLE_DIAG_FLOAT_OFFDIAG:
85 case MatrixStorageMPScheme::DOUBLE_DIAG_DOUBLE_OFFDIAG:
87 case MatrixStorageMPScheme::FLOAT_DIAG_FLOAT_OFFDIAG:
89 case MatrixStorageMPScheme::DOUBLE_DIAG_FLOAT_OFFDIAG:
96 inline bool isValidMatrixStorageMPScheme(
int scheme) {
97 switch (
static_cast<MatrixStorageMPScheme
>(
scheme)) {
98 case MatrixStorageMPScheme::DOUBLE_DIAG_DOUBLE_OFFDIAG:
99 case MatrixStorageMPScheme::FLOAT_DIAG_FLOAT_OFFDIAG:
100 case MatrixStorageMPScheme::DOUBLE_DIAG_FLOAT_OFFDIAG:
constexpr auto getPropValue()
get the value data member of a property
Definition propertysystem.hh:242