36 #ifndef OPM_BCRSMATRIXBLOCKASSEMBLER_HPP_HEADER 37 #define OPM_BCRSMATRIXBLOCKASSEMBLER_HPP_HEADER 42 #include <dune/common/fvector.hh> 43 #include <dune/common/fmatrix.hh> 44 #include <dune/istl/bvector.hh> 45 #include <dune/istl/bcrsmatrix.hh> 47 #include <opm/core/transport/implicit/JacobianSystem.hpp> 50 namespace ImplicitTransportDefault {
51 namespace ISTLTypeDetails {
52 typedef Dune::FieldVector<double, 1> ScalarVectorBlockType;
53 typedef Dune::FieldMatrix<double, 1, 1> ScalarMatrixBlockType;
55 typedef Dune::BlockVector<ScalarVectorBlockType> ScalarBlockVector;
56 typedef Dune::BCRSMatrix <ScalarMatrixBlockType> ScalarBCRSMatrix;
60 class VectorAdder<ISTLTypeDetails::ScalarBlockVector> {
63 add(
const ISTLTypeDetails::ScalarBlockVector& x,
64 ISTLTypeDetails::ScalarBlockVector& y) {
70 class VectorNegater<ISTLTypeDetails::ScalarBlockVector> {
73 negate(ISTLTypeDetails::ScalarBlockVector& x) {
79 class VectorZero<ISTLTypeDetails::ScalarBlockVector> {
82 zero(ISTLTypeDetails::ScalarBlockVector& x) {
88 class VectorBlockAssembler<ISTLTypeDetails::ScalarBlockVector> {
90 template <
class Block>
92 assemble(::std::size_t ndof,
95 ISTLTypeDetails::ScalarBlockVector& vec ) {
96 assert (ndof == 1); (void) ndof;
98 ISTLTypeDetails::ScalarBlockVector::block_type blk(b[0]);
105 class VectorAssign<ISTLTypeDetails::ScalarBlockVector> {
109 assign(
const ISTLTypeDetails::ScalarBlockVector& x,
110 ISTLTypeDetails::ScalarBlockVector& y) {
115 template <
class Scalar>
117 assign(
const Scalar& a,
118 const ISTLTypeDetails::ScalarBlockVector& x,
119 ISTLTypeDetails::ScalarBlockVector& y) {
126 class MatrixZero<ISTLTypeDetails::ScalarBCRSMatrix> {
129 zero(ISTLTypeDetails::ScalarBCRSMatrix& A) {
135 class MatrixBlockAssembler<ISTLTypeDetails::ScalarBCRSMatrix>
138 template <
class Block>
140 assembleBlock(
size_t ndof,
size_t i,
size_t j,
const Block& b) {
141 assert (ndof == 1); (void) ndof;
143 ISTLTypeDetails::ScalarBCRSMatrix::block_type blk(b[0]);
148 template <
class Connections>
150 createBlockRow(
size_t i,
const Connections& conn,
size_t ndof) {
151 assert (ndof == 1); (void) ndof;
152 assert (i == i_prev_ + 1); (void) i ;
154 ISTLTypeDetails::ScalarBCRSMatrix::CreateIterator ci(mat_, i);
156 for (
typename Connections::const_iterator
157 c = conn.begin(), e = conn.end(); c != e; ++c) {
166 finalizeStructure() {}
169 setSize(::std::size_t ndof,
172 ::std::size_t nnz = 0) {
174 assert (ndof == 1); (void) ndof;
177 mat_.setSize (nrow, ncol);
178 mat_.setBuildMode(ISTLTypeDetails::ScalarBCRSMatrix::row_wise);
183 const ISTLTypeDetails::ScalarBCRSMatrix&
184 matrix()
const {
return mat_; }
186 ISTLTypeDetails::ScalarBCRSMatrix&
187 matrix() {
return mat_; }
190 ::std::size_t i_prev_;
191 ISTLTypeDetails::ScalarBCRSMatrix mat_ ;
Class for immiscible dead oil and dry gas.
Definition: applier.hpp:18
void zero(Matrix &A)
Zero-fill a.
Definition: Matrix.hpp:603