diff --git a/dumux/linear/linearsolvertraits.hh b/dumux/linear/linearsolvertraits.hh index 638d080c9d29c96ce414e365b50dad4dc54604d8..894fcf1f913d6063fc1910ba259be20a237f956c 100644 --- a/dumux/linear/linearsolvertraits.hh +++ b/dumux/linear/linearsolvertraits.hh @@ -151,9 +151,6 @@ struct LinearSolverTraitsImpl<GridGeometry, DiscretizationMethods::FCStaggered> DofMapper(const typename GridGeometry::GridView& gridView) : gridView_(gridView) {} - auto index(const typename GridGeometry::GridView::Intersection& intersection) const - { return gridView_.indexSet().index(intersection); } - template<class Entity> auto index(const Entity& e) const { return gridView_.indexSet().index(e); } @@ -165,6 +162,9 @@ struct LinearSolverTraitsImpl<GridGeometry, DiscretizationMethods::FCStaggered> typename GridGeometry::GridView gridView_; }; + static DofMapper dofMapper(const GridGeometry& gg) + { return { gg.gridView() }; } + using Grid = typename GridGeometry::GridView::Traits::Grid; static constexpr int dofCodim = 1; @@ -181,6 +181,24 @@ struct LinearSolverTraitsImpl<GridGeometry, DiscretizationMethods::FCStaggered> } }; +//! Face-centered diamond scheme: use overlapping or non-overlapping model depending on the grid +template<class GridGeometry> +struct LinearSolverTraitsImpl<GridGeometry, DiscretizationMethods::FCDiamond> +: public LinearSolverTraitsBase<GridGeometry> +{ + using DofMapper = typename GridGeometry::DofMapper; + using Grid = typename GridGeometry::GridView::Traits::Grid; + static constexpr int dofCodim = 1; + static constexpr bool canCommunicate = Dumux::Detail::canCommunicate<Grid, dofCodim>; + + static const DofMapper& dofMapper(const GridGeometry& gg) + { return { gg.dofMapper() }; } + + template<class GridView> + static bool isNonOverlapping(const GridView& gridView) + { return gridView.overlapSize(0) == 0; } +}; + //! Cell-centered mpfa: use overlapping model template<class GridGeometry> struct LinearSolverTraitsImpl<GridGeometry, DiscretizationMethods::CCMpfa>