19 #ifndef OPM_SYSTEMTYPES_HEADER_INCLUDED 20 #define OPM_SYSTEMTYPES_HEADER_INCLUDED 22 #include <opm/simulators/linalg/matrixblock.hh> 24 #include <dune/istl/bcrsmatrix.hh> 25 #include <dune/istl/bvector.hh> 26 #include <dune/istl/multitypeblockmatrix.hh> 27 #include <dune/istl/multitypeblockvector.hh> 42 inline constexpr
int numResDofs = 3;
43 inline constexpr
int numWellDofs = 4;
45 template<
typename Scalar>
46 using RRMatrix = Dune::BCRSMatrix<Opm::MatrixBlock<Scalar, numResDofs, numResDofs>>;
47 template<
typename Scalar>
48 using RWMatrix = Dune::BCRSMatrix<Dune::FieldMatrix<Scalar, numResDofs, numWellDofs>>;
49 template<
typename Scalar>
50 using WRMatrix = Dune::BCRSMatrix<Dune::FieldMatrix<Scalar, numWellDofs, numResDofs>>;
51 template<
typename Scalar>
52 using WWMatrix = Dune::BCRSMatrix<Dune::FieldMatrix<Scalar, numWellDofs, numWellDofs>>;
54 template<
typename Scalar>
55 using ResVector = Dune::BlockVector<Dune::FieldVector<Scalar, numResDofs>>;
56 template<
typename Scalar>
57 using WellVector = Dune::BlockVector<Dune::FieldVector<Scalar, numWellDofs>>;
58 template<
typename Scalar>
59 using SystemVector = Dune::MultiTypeBlockVector<ResVector<Scalar>, WellVector<Scalar>>;
75 template<
typename Scalar>
79 using size_type = std::size_t;
80 using field_type = Scalar;
82 static constexpr size_type N() {
return 2; }
83 static constexpr size_type M() {
return 2; }
86 const RRMatrix<Scalar>* A =
nullptr;
87 const RWMatrix<Scalar>* C =
nullptr;
88 const WRMatrix<Scalar>* B =
nullptr;
89 const WWMatrix<Scalar>* D =
nullptr;
98 void mv(
const SystemVector<Scalar>& x, SystemVector<Scalar>& y)
const 100 using namespace Dune::Indices;
101 A->mv (x[_0], y[_0]); C->umv(x[_1], y[_0]);
102 B->mv (x[_0], y[_1]); D->umv(x[_1], y[_1]);
106 void umv(
const SystemVector<Scalar>& x, SystemVector<Scalar>& y)
const 108 using namespace Dune::Indices;
109 A->umv(x[_0], y[_0]); C->umv(x[_1], y[_0]);
110 B->umv(x[_0], y[_1]); D->umv(x[_1], y[_1]);
114 void usmv(field_type alpha,
const SystemVector<Scalar>& x, SystemVector<Scalar>& y)
const 116 using namespace Dune::Indices;
117 A->usmv(alpha, x[_0], y[_0]); C->usmv(alpha, x[_1], y[_0]);
118 B->usmv(alpha, x[_0], y[_1]); D->usmv(alpha, x[_1], y[_1]);
123 template<
typename Scalar>
126 const RRMatrix<Scalar>& A;
127 const RWMatrix<Scalar>& C;
128 const RRMatrix<Scalar>& operator[](Dune::index_constant<0>)
const {
return A; }
129 const RWMatrix<Scalar>& operator[](Dune::index_constant<1>)
const {
return C; }
132 template<
typename Scalar>
133 struct SystemMatrixRow1
135 const WRMatrix<Scalar>& B;
136 const WWMatrix<Scalar>& D;
137 const WRMatrix<Scalar>& operator[](Dune::index_constant<0>)
const {
return B; }
138 const WWMatrix<Scalar>& operator[](Dune::index_constant<1>)
const {
return D; }
141 template<
typename Scalar>
142 SystemMatrixRow0<Scalar> SystemMatrix<Scalar>::operator[](Dune::index_constant<0>)
const 145 template<
typename Scalar>
146 SystemMatrixRow1<Scalar> SystemMatrix<Scalar>::operator[](Dune::index_constant<1>)
const 151 #endif // OPM_SYSTEMTYPES_HEADER_INCLUDED Definition: SystemTypes.hpp:76
Definition: SystemTypes.hpp:72
Structs needed for tpfalinearizer and its gpuparams struct extracted to be defined in one place that ...
Definition: blackoilbioeffectsmodules.hh:45
Definition: SystemTypes.hpp:73