13#ifndef DUMUX_MULTIDOMAIN_TRAITS_HH
14#define DUMUX_MULTIDOMAIN_TRAITS_HH
21#include <dune/common/fmatrix.hh>
22#include <dune/common/indices.hh>
24#include <dune/istl/bcrsmatrix.hh>
25#include <dune/istl/multitypeblockvector.hh>
26#include <dune/istl/multitypeblockmatrix.hh>
39template<
class Scalar,
class... JacobianBlocks>
42 static_assert(std::conjunction_v<isBCRSMatrix<JacobianBlocks>...>,
"Jacobian blocks have to be BCRSMatrices!");
45 using Field = std::common_type_t<Scalar,
typename JacobianBlocks::field_type...>;
47 template<std::
size_t id>
48 using JacobianDiagBlock =
typename std::tuple_element_t<id, std::tuple<JacobianBlocks...>>;
50 template<std::
size_t id>
51 static constexpr decltype(
auto) numEq()
52 {
return JacobianDiagBlock<id>::block_type::rows; }
54 template <std::
size_t id,
class I>
struct makeRow;
56 template <std::size_t id, std::size_t... Is>
57 struct makeRow<id, std::index_sequence<Is...>>
62 template <
class I>
struct makeMatrix;
64 template <std::size_t... Is>
65 struct makeMatrix<std::index_sequence<Is...>>
70 using Indices = std::index_sequence_for<JacobianBlocks...>;
72 using type =
typename makeMatrix<Indices>::type;
76template<
template<std::
size_t>
class T,
class Indices>
79 template<std::
size_t i>
86template<
template<std::
size_t>
class T,
class Indices>
89 template<std::
size_t i>
90 using PtrType = std::shared_ptr<const T<i>>;
96template<
template<std::
size_t>
class SubDomainDiagBlocks,
class Indices,
class Scalar>
99 template<
typename... MatrixBlocks>
135template<
typename... SubDomainTypeTags>
152 template<std::
size_t id>
153 using SubDomainTypeTag =
typename std::tuple_element_t<id, std::tuple<SubDomainTypeTags...>>;
158 using Indices = std::make_index_sequence<numSubDomains>;
161 template<std::
size_t id>
165 template<std::
size_t id>
169 template<std::
size_t id>
173 template<std::
size_t id>
183 template<std::
size_t id>
186 using Index = Dune::index_constant<id>;
225 template<
template<std::
size_t>
class T>
229 template<
template<std::
size_t>
class T>
233 template<
template<std::
size_t>
class T>
a helper class to create a multitype matrix given the diagonal matrix blocks
Definition multidomain/traits.hh:41
typename makeMatrix< Indices >::type type
Definition multidomain/traits.hh:72
Definition common/pdesolver.hh:26
Definition variablesbackend.hh:34
Defines all properties used in Dumux.
Helper to extract native Dune vector types from particular Dumux types.
typename GetProp< TypeTag, Property >::type GetPropType
get the type alias defined in the property
Definition propertysystem.hh:296
Type traits to be used with matrix types.
Definition cvfelocalresidual.hh:25
typename ScalarType< X >::Type Scalar
Definition odesolver.hh:52
helper alias to create the JacobianMatrix type
Definition multidomain/traits.hh:98
typename createMultiTypeBlockMatrixType< Scalar, MatrixBlocks... >::type::type M
Definition multidomain/traits.hh:100
typename makeFromIndexedType< M, SubDomainDiagBlocks, Indices >::type type
Definition multidomain/traits.hh:102
helper alias to create a tuple of shared_ptr<const ...> from an indexed type
Definition multidomain/traits.hh:88
typename makeFromIndexedType< std::tuple, PtrType, Indices >::type type
Definition multidomain/traits.hh:92
std::shared_ptr< const T< i > > PtrType
Definition multidomain/traits.hh:90
helper alias to create a tuple of shared_ptr<...> from an indexed type
Definition multidomain/traits.hh:78
std::shared_ptr< T< i > > PtrType
Definition multidomain/traits.hh:80
typename makeFromIndexedType< std::tuple, PtrType, Indices >::type type
Definition multidomain/traits.hh:82
Definition dunevectors.hh:56
typename NativeDuneVectorTypeImpl< V, Dune::Std::is_detected< Detail::DuneVectors::StateDetector, V >{} >::type type
Definition dunevectors.hh:57
Definition multidomain/traits.hh:185
GetPropType< SubDomainTypeTag< id >, Properties::GridGeometry > GridGeometry
Definition multidomain/traits.hh:189
typename Detail::NativeDuneVectorType< SolutionVector >::type ResidualVector
Definition multidomain/traits.hh:195
SubDomainTypeTag< id > TypeTag
Definition multidomain/traits.hh:187
Dune::index_constant< id > Index
Definition multidomain/traits.hh:186
GetPropType< SubDomainTypeTag< id >, Properties::IOFields > IOFields
Definition multidomain/traits.hh:193
GetPropType< SubDomainTypeTag< id >, Properties::Problem > Problem
Definition multidomain/traits.hh:190
GetPropType< SubDomainTypeTag< id >, Properties::GridVariables > GridVariables
Definition multidomain/traits.hh:191
GetPropType< SubDomainTypeTag< id >, Properties::Grid > Grid
Definition multidomain/traits.hh:188
GetPropType< SubDomainTypeTag< id >, Properties::SolutionVector > SolutionVector
Definition multidomain/traits.hh:194
GetPropType< SubDomainTypeTag< id >, Properties::LocalResidual > LocalResidual
Definition multidomain/traits.hh:192
Definition multidomain/traits.hh:137
static constexpr std::size_t numSubDomains
Definition multidomain/traits.hh:139
typename makeFromIndexedType< std::common_type_t, SubDomainScalar, Indices >::type Scalar
Definition multidomain/traits.hh:206
typename makeFromIndexedType< Dune::MultiTypeBlockVector, SubDomainSolutionVector, Indices >::type SolutionVector
Definition multidomain/traits.hh:209
typename Detail::MultiDomainTupleSharedPtr< T, Indices >::type TupleOfSharedPtr
Definition multidomain/traits.hh:230
typename makeFromIndexedType< Dune::MultiTypeBlockVector, SubDomainResidualVector, Indices >::type ResidualVector
Definition multidomain/traits.hh:212
typename makeFromIndexedType< std::tuple, T, Indices >::type Tuple
Definition multidomain/traits.hh:226
typename Detail::MultiDomainMatrixType< SubDomainJacobianMatrix, Indices, Scalar >::type JacobianMatrix
Definition multidomain/traits.hh:215
typename std::tuple_element_t< id, std::tuple< SubDomainTypeTags... > > SubDomainTypeTag
Definition multidomain/traits.hh:153
typename Detail::MultiDomainTupleSharedPtrConst< T, Indices >::type TupleOfSharedPtrConst
Definition multidomain/traits.hh:234
Utilities for template meta programming.