12#ifndef DUMUX_LINEAR_SOLVER_TRAITS_HH
13#define DUMUX_LINEAR_SOLVER_TRAITS_HH
17#include <dune/istl/schwarz.hh>
18#include <dune/istl/novlpschwarz.hh>
19#include <dune/istl/owneroverlapcopy.hh>
20#include <dune/istl/paamg/pinfo.hh>
21#include <dune/istl/preconditioners.hh>
22#include <dune/grid/common/capabilities.hh>
23#include <dune/grid/common/mcmgmapper.hh>
24#include <dune/geometry/type.hh>
32template<
class Gr
idGeometry,
class DiscretizationMethod>
38template<
class Gr
idGeometry>
42template<
class MType,
class VType>
50 template<
class SeqPreconditioner>
56 template<
class Matrix,
class Vector>
63template <
class MType,
class VType>
69 using Comm = Dune::OwnerOverlapCopyCommunication<Dune::bigunsignedint<96>,
int>;
70 using LinearOperator = Dune::NonoverlappingSchwarzOperator<MType, VType, VType, Comm>;
71 using ScalarProduct = Dune::NonoverlappingSchwarzScalarProduct<VType, Comm>;
74 template<
class SeqPreconditioner>
75 using Preconditioner = Dune::NonoverlappingBlockPreconditioner<Comm, SeqPreconditioner>;
78template <
class MType,
class VType>
84 using Comm = Dune::OwnerOverlapCopyCommunication<Dune::bigunsignedint<96>,
int>;
85 using LinearOperator = Dune::OverlappingSchwarzOperator<MType, VType, VType, Comm>;
86 using ScalarProduct = Dune::OverlappingSchwarzScalarProduct<VType, Comm>;
89 template<
class SeqPreconditioner>
90 using Preconditioner = Dune::BlockPreconditioner<VType, VType, Comm, SeqPreconditioner>;
94template<
class Gr
idGeometry>
97 using GridView =
typename GridGeometry::GridView;
98 using Grid =
typename GridGeometry::GridView::Traits::Grid;
100 template<
class Matrix,
class Vector>
104 template<
class Matrix,
class Vector>
107 template<
class Matrix,
class Vector>
113template<
class Gr
idGeometry>
118 using Grid =
typename GridGeometry::GridView::Traits::Grid;
120 static constexpr bool canCommunicate = Dune::Capabilities::canCommunicate<Grid, dofCodim>::v;
122 template<
class Gr
idView>
124 {
return gridView.overlapSize(0) == 0; }
127 {
return { gg.dofMapper() }; }
130template<
class Gr
idGeometry>
134 using Grid =
typename GridGeometry::GridView::Traits::Grid;
137 static constexpr std::bitset<Grid::dimension+1>
dofCodims{ (1UL << Grid::dimension) + 1UL };
140 {
return { gg.dofMapper() }; }
143template<
class Gr
idGeometry>
148 using Grid =
typename GridGeometry::GridView::Traits::Grid;
152 Dune::Capabilities::hasSingleGeometryType<Grid>::v &&
153 (Dune::Capabilities::hasSingleGeometryType<Grid>::topologyId ==
154 Dune::GeometryTypes::cube(Grid::dimension).id());
156 static constexpr std::bitset<Grid::dimension+1>
dofCodims{
157 (1UL << Grid::dimension) + (1UL << (Grid::dimension-1)) + (
hasElementDofs ? 1UL : 0UL)
161 = Dune::Capabilities::canCommunicate<Grid, Grid::dimension>::v
162 && Dune::Capabilities::canCommunicate<
Grid, Grid::dimension-1>::v;
164 template<
class Gr
idView>
166 {
return gridView.overlapSize(0) == 0; }
169 {
return { gg.dofMapper() }; }
172template<
class Gr
idGeometry>
177 using Grid =
typename GridGeometry::GridView::Traits::Grid;
182 static constexpr std::bitset<Grid::dimension+1>
dofCodims{
183 (1UL << (Grid::dimension+1)) - 1UL
187 = Dune::Capabilities::canCommunicate<Grid, Grid::dimension>::v
188 && Dune::Capabilities::canCommunicate<
Grid, Grid::dimension-1>::v
189 && (Grid::dimension < 3 || Dune::Capabilities::canCommunicate<Grid, 1>::v)
190 && Dune::Capabilities::canCommunicate<Grid, 0>::v;
192 template<
class Gr
idView>
194 {
return gridView.overlapSize(0) == 0; }
197 {
return gg.dofMapper(); }
201template<
class Gr
idGeometry>
206 using Grid =
typename GridGeometry::GridView::Traits::Grid;
208 static constexpr bool canCommunicate = Dune::Capabilities::canCommunicate<Grid, dofCodim>::v;
210 template<
class Gr
idView>
216template<
class Gr
idGeometry>
220 using DofMapper = Dune::MultipleCodimMultipleGeomTypeMapper<typename GridGeometry::GridView>;
224 return DofMapper(gg.gridView(), Dune::mcmgLayout(Dune::Codim<1>{}));
227 using Grid =
typename GridGeometry::GridView::Traits::Grid;
231 Dune::Capabilities::canCommunicate<Grid, dofCodim>::v;
233 template<
class Gr
idView>
236 assert(gridView.overlapSize(0) > 0);
242template<
class Gr
idGeometry>
247 using Grid =
typename GridGeometry::GridView::Traits::Grid;
249 static constexpr bool canCommunicate = Dune::Capabilities::canCommunicate<Grid, dofCodim>::v;
252 {
return { gg.dofMapper() }; }
254 template<
class Gr
idView>
256 {
return gridView.overlapSize(0) == 0; }
260template<
class Gr
idGeometry>
265template<
class Gr
idGeometry>
dune-grid capabilities compatibility layer
The available discretization methods in Dumux.
Definition cellcentered/mpfa/elementvolumevariables.hh:24
LinearSolverTraitsImpl< GridGeometry, typename GridGeometry::DiscretizationMethod > LinearSolverTraits
The type traits required for using the IstlFactoryBackend.
Definition linearsolvertraits.hh:39
Definition linearsolvertraits.hh:96
NonoverlappingSolverTraits< Matrix, Vector > ParallelNonoverlapping
Definition linearsolvertraits.hh:108
typename GridGeometry::GridView::Traits::Grid Grid
Definition linearsolvertraits.hh:98
typename GridGeometry::GridView GridView
Definition linearsolvertraits.hh:97
OverlappingSolverTraits< Matrix, Vector > ParallelOverlapping
Definition linearsolvertraits.hh:105
SequentialSolverTraits< Matrix, Vector > Sequential
Definition linearsolvertraits.hh:101
static const DofMapper & dofMapper(const GridGeometry &gg)
Definition linearsolvertraits.hh:126
typename GridGeometry::GridView::Traits::Grid Grid
Definition linearsolvertraits.hh:118
static constexpr bool canCommunicate
Definition linearsolvertraits.hh:120
static constexpr int dofCodim
Definition linearsolvertraits.hh:119
static bool isNonOverlapping(const GridView &gridView)
Definition linearsolvertraits.hh:123
typename GridGeometry::VertexMapper DofMapper
Definition linearsolvertraits.hh:117
static constexpr int dofCodim
Definition linearsolvertraits.hh:207
typename GridGeometry::ElementMapper DofMapper
Definition linearsolvertraits.hh:205
typename GridGeometry::GridView::Traits::Grid Grid
Definition linearsolvertraits.hh:206
static bool isNonOverlapping(const GridView &gridView)
Definition linearsolvertraits.hh:211
static constexpr bool canCommunicate
Definition linearsolvertraits.hh:208
static constexpr int dofCodim
Definition linearsolvertraits.hh:248
typename GridGeometry::DofMapper DofMapper
Definition linearsolvertraits.hh:246
static bool isNonOverlapping(const GridView &gridView)
Definition linearsolvertraits.hh:255
static constexpr bool canCommunicate
Definition linearsolvertraits.hh:249
typename GridGeometry::GridView::Traits::Grid Grid
Definition linearsolvertraits.hh:247
static const DofMapper & dofMapper(const GridGeometry &gg)
Definition linearsolvertraits.hh:251
static constexpr int dofCodim
Definition linearsolvertraits.hh:228
static bool isNonOverlapping(const GridView &gridView)
Definition linearsolvertraits.hh:234
static DofMapper dofMapper(const GridGeometry &gg)
Definition linearsolvertraits.hh:222
Dune::MultipleCodimMultipleGeomTypeMapper< typename GridGeometry::GridView > DofMapper
Definition linearsolvertraits.hh:220
static constexpr bool canCommunicate
Definition linearsolvertraits.hh:230
typename GridGeometry::GridView::Traits::Grid Grid
Definition linearsolvertraits.hh:227
typename GridGeometry::GridView::Traits::Grid Grid
Definition linearsolvertraits.hh:134
static const DofMapper & dofMapper(const GridGeometry &gg)
Definition linearsolvertraits.hh:139
typename GridGeometry::DofMapper DofMapper
Definition linearsolvertraits.hh:135
static constexpr std::bitset< Grid::dimension+1 > dofCodims
Definition linearsolvertraits.hh:137
static constexpr bool hasElementDofs
Definition linearsolvertraits.hh:151
static const DofMapper & dofMapper(const GridGeometry &gg)
Definition linearsolvertraits.hh:168
typename GridGeometry::DofMapper DofMapper
Definition linearsolvertraits.hh:147
static constexpr bool canCommunicate
Definition linearsolvertraits.hh:161
static constexpr std::bitset< Grid::dimension+1 > dofCodims
Definition linearsolvertraits.hh:156
static bool isNonOverlapping(const GridView &gridView)
Definition linearsolvertraits.hh:165
typename GridGeometry::GridView::Traits::Grid Grid
Definition linearsolvertraits.hh:148
static constexpr bool canCommunicate
Definition linearsolvertraits.hh:187
typename GridGeometry::GridView::Traits::Grid Grid
Definition linearsolvertraits.hh:177
static const DofMapper & dofMapper(const GridGeometry &gg)
Definition linearsolvertraits.hh:196
static bool isNonOverlapping(const GridView &gridView)
Definition linearsolvertraits.hh:193
typename GridGeometry::DofMapper DofMapper
Definition linearsolvertraits.hh:176
static constexpr std::bitset< Grid::dimension+1 > dofCodims
Definition linearsolvertraits.hh:182
The implementation is specialized for the different discretizations.
Definition linearsolvertraits.hh:33
Definition linearsolvertraits.hh:65
Dune::NonoverlappingSchwarzOperator< MType, VType, VType, Comm > LinearOperator
Definition linearsolvertraits.hh:70
MType Matrix
Definition linearsolvertraits.hh:67
Dune::NonoverlappingBlockPreconditioner< Comm, SeqPreconditioner > Preconditioner
Definition linearsolvertraits.hh:75
Dune::NonoverlappingSchwarzScalarProduct< VType, Comm > ScalarProduct
Definition linearsolvertraits.hh:71
VType Vector
Definition linearsolvertraits.hh:68
Dune::OwnerOverlapCopyCommunication< Dune::bigunsignedint< 96 >, int > Comm
Definition linearsolvertraits.hh:69
static constexpr bool isNonOverlapping
Definition linearsolvertraits.hh:72
Definition linearsolvertraits.hh:80
static constexpr bool isNonOverlapping
Definition linearsolvertraits.hh:87
Dune::OverlappingSchwarzOperator< MType, VType, VType, Comm > LinearOperator
Definition linearsolvertraits.hh:85
MType Matrix
Definition linearsolvertraits.hh:82
Dune::BlockPreconditioner< VType, VType, Comm, SeqPreconditioner > Preconditioner
Definition linearsolvertraits.hh:90
VType Vector
Definition linearsolvertraits.hh:83
Dune::OwnerOverlapCopyCommunication< Dune::bigunsignedint< 96 >, int > Comm
Definition linearsolvertraits.hh:84
Dune::OverlappingSchwarzScalarProduct< VType, Comm > ScalarProduct
Definition linearsolvertraits.hh:86
Definition linearsolvertraits.hh:55
static constexpr bool canCommunicate
Definition linearsolvertraits.hh:59
SequentialSolverTraits< Matrix, Vector > Sequential
Definition linearsolvertraits.hh:57
sequential solver traits
Definition linearsolvertraits.hh:44
MType Matrix
Definition linearsolvertraits.hh:45
VType Vector
Definition linearsolvertraits.hh:46
Dune::MatrixAdapter< MType, VType, VType > LinearOperator
Definition linearsolvertraits.hh:47
SeqPreconditioner Preconditioner
Definition linearsolvertraits.hh:51
Dune::SeqScalarProduct< VType > ScalarProduct
Definition linearsolvertraits.hh:48