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());
159 static constexpr std::bitset<Grid::dimension+1>
dofCodims{
160 (1UL << Grid::dimension)
161 + (1UL << (Grid::dimension-1))
169 = Dune::Capabilities::canCommunicate<Grid, Grid::dimension>::v
170 && Dune::Capabilities::canCommunicate<
Grid, Grid::dimension-1>::v
171 && (!
hasFaceDofs || Dune::Capabilities::canCommunicate<Grid, 1>::v);
173 template<
class Gr
idView>
175 {
return gridView.overlapSize(0) == 0; }
178 {
return { gg.dofMapper() }; }
181template<
class Gr
idGeometry>
186 using Grid =
typename GridGeometry::GridView::Traits::Grid;
191 static constexpr std::bitset<Grid::dimension+1>
dofCodims{
192 (1UL << (Grid::dimension+1)) - 1UL
196 = Dune::Capabilities::canCommunicate<Grid, Grid::dimension>::v
197 && Dune::Capabilities::canCommunicate<
Grid, Grid::dimension-1>::v
198 && (Grid::dimension < 3 || Dune::Capabilities::canCommunicate<Grid, 1>::v)
199 && Dune::Capabilities::canCommunicate<Grid, 0>::v;
201 template<
class Gr
idView>
203 {
return gridView.overlapSize(0) == 0; }
206 {
return gg.dofMapper(); }
210template<
class Gr
idGeometry>
215 using Grid =
typename GridGeometry::GridView::Traits::Grid;
217 static constexpr bool canCommunicate = Dune::Capabilities::canCommunicate<Grid, dofCodim>::v;
220 {
return gg.elementMapper(); }
222 template<
class Gr
idView>
228template<
class Gr
idGeometry>
232 using DofMapper = Dune::MultipleCodimMultipleGeomTypeMapper<typename GridGeometry::GridView>;
236 return DofMapper(gg.gridView(), Dune::mcmgLayout(Dune::Codim<1>{}));
239 using Grid =
typename GridGeometry::GridView::Traits::Grid;
243 Dune::Capabilities::canCommunicate<Grid, dofCodim>::v;
245 template<
class Gr
idView>
248 assert(gridView.overlapSize(0) > 0);
254template<
class Gr
idGeometry>
259 using Grid =
typename GridGeometry::GridView::Traits::Grid;
261 static constexpr bool canCommunicate = Dune::Capabilities::canCommunicate<Grid, dofCodim>::v;
264 {
return { gg.dofMapper() }; }
266 template<
class Gr
idView>
268 {
return gridView.overlapSize(0) == 0; }
272template<
class Gr
idGeometry>
277template<
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:216
typename GridGeometry::ElementMapper DofMapper
Definition linearsolvertraits.hh:214
typename GridGeometry::GridView::Traits::Grid Grid
Definition linearsolvertraits.hh:215
static const DofMapper & dofMapper(const GridGeometry &gg)
Definition linearsolvertraits.hh:219
static bool isNonOverlapping(const GridView &gridView)
Definition linearsolvertraits.hh:223
static constexpr bool canCommunicate
Definition linearsolvertraits.hh:217
static constexpr int dofCodim
Definition linearsolvertraits.hh:260
typename GridGeometry::DofMapper DofMapper
Definition linearsolvertraits.hh:258
static bool isNonOverlapping(const GridView &gridView)
Definition linearsolvertraits.hh:267
static constexpr bool canCommunicate
Definition linearsolvertraits.hh:261
typename GridGeometry::GridView::Traits::Grid Grid
Definition linearsolvertraits.hh:259
static const DofMapper & dofMapper(const GridGeometry &gg)
Definition linearsolvertraits.hh:263
static constexpr int dofCodim
Definition linearsolvertraits.hh:240
static bool isNonOverlapping(const GridView &gridView)
Definition linearsolvertraits.hh:246
static DofMapper dofMapper(const GridGeometry &gg)
Definition linearsolvertraits.hh:234
Dune::MultipleCodimMultipleGeomTypeMapper< typename GridGeometry::GridView > DofMapper
Definition linearsolvertraits.hh:232
static constexpr bool canCommunicate
Definition linearsolvertraits.hh:242
typename GridGeometry::GridView::Traits::Grid Grid
Definition linearsolvertraits.hh:239
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:177
static constexpr bool hasFaceDofs
Definition linearsolvertraits.hh:157
typename GridGeometry::DofMapper DofMapper
Definition linearsolvertraits.hh:147
static constexpr bool canCommunicate
Definition linearsolvertraits.hh:169
static constexpr std::bitset< Grid::dimension+1 > dofCodims
Definition linearsolvertraits.hh:159
static bool isNonOverlapping(const GridView &gridView)
Definition linearsolvertraits.hh:174
typename GridGeometry::GridView::Traits::Grid Grid
Definition linearsolvertraits.hh:148
static constexpr bool canCommunicate
Definition linearsolvertraits.hh:196
typename GridGeometry::GridView::Traits::Grid Grid
Definition linearsolvertraits.hh:186
static const DofMapper & dofMapper(const GridGeometry &gg)
Definition linearsolvertraits.hh:205
static bool isNonOverlapping(const GridView &gridView)
Definition linearsolvertraits.hh:202
typename GridGeometry::DofMapper DofMapper
Definition linearsolvertraits.hh:185
static constexpr std::bitset< Grid::dimension+1 > dofCodims
Definition linearsolvertraits.hh:191
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