12#ifndef DUMUX_DISCRETIZATION_FACECENTERED_DIAMOND_FV_ELEMENT_GEOMETRY_HH 
   13#define DUMUX_DISCRETIZATION_FACECENTERED_DIAMOND_FV_ELEMENT_GEOMETRY_HH 
   18#include <dune/common/reservedvector.hh> 
   19#include <dune/common/iteratorrange.hh> 
   31template<
class GG, 
bool cachingEnabled>
 
   42    using GridView = 
typename GG::GridView;
 
   45    using FeLocalBasis = 
typename GG::FeCache::FiniteElementType::Traits::LocalBasisType;
 
   46    using GGCache = 
typename GG::Cache;
 
   47    using GeometryHelper = 
typename GGCache::GeometryHelper;
 
   51    using SubControlVolume = 
typename GG::SubControlVolume;
 
   52    using SubControlVolumeFace = 
typename GG::SubControlVolumeFace;
 
   53    using Element = 
typename GridView::template Codim<0>::Entity;
 
   54    using GridGeometry = GG;
 
   57    static constexpr std::size_t maxNumElementScvs = 2*GridView::dimension;
 
   64    const SubControlVolume& scv(LocalIndexType scvIdx)
 const 
   65    { 
return ggCache_->scvs(eIdx_)[scvIdx]; }
 
   68    const SubControlVolumeFace& scvf(LocalIndexType scvfIdx)
 const 
   69    { 
return ggCache_->scvf(eIdx_)[scvfIdx]; }
 
   77    scvs(
const FaceCenteredDiamondFVElementGeometry& fvGeometry)
 
   79        using Iter = 
typename std::vector<SubControlVolume>::const_iterator;
 
   80        const auto& s = fvGeometry.ggCache_->scvs(fvGeometry.eIdx_);
 
   81        return Dune::IteratorRange<Iter>(s.begin(), s.end());
 
   90    scvfs(
const FaceCenteredDiamondFVElementGeometry& fvGeometry)
 
   92        using Iter = 
typename std::vector<SubControlVolumeFace>::const_iterator;
 
   93        const auto& s = fvGeometry.ggCache_->scvfs(fvGeometry.eIdx_);
 
   94        return Dune::IteratorRange<Iter>(s.begin(), s.end());
 
   98    const FeLocalBasis& feLocalBasis()
 const 
  100        return gridGeometry().feCache().get(
element().type()).localBasis();
 
  104    std::size_t numScv()
 const 
  106        return ggCache_->scvs(eIdx_).size();
 
  110    std::size_t numScvf()
 const 
  112        return ggCache_->scvfs(eIdx_).size();
 
  116    bool hasBoundaryScvf()
 const 
  117    { 
return ggCache_->hasBoundaryScvf(eIdx_); }
 
  124    FaceCenteredDiamondFVElementGeometry bind(
const Element& element) &&
 
  126        this->bindElement(element);
 
  127        return std::move(*
this);
 
  130    void bind(
const Element& element) &
 
  132        this->bindElement(element);
 
  140    FaceCenteredDiamondFVElementGeometry bindElement(
const Element& element) &&
 
  142        this->bindElement(element);
 
  143        return std::move(*
this);
 
  147    void bindElement(
const Element& element) &
 
  150        eIdx_ = gridGeometry().elementMapper().index(element);
 
  155    { 
return static_cast<bool>(element_); }
 
  159    { 
return *element_; }
 
  162    const GridGeometry& gridGeometry()
 const 
  163    { 
return ggCache_->gridGeometry(); }
 
  166    std::size_t elementIndex()
 const 
  170    typename SubControlVolume::Traits::Geometry geometry(
const SubControlVolume& scv)
 const 
  173        const auto geo = 
element().geometry();
 
  175            SubControlVolume::Traits::geometryType(geo.type()),
 
  176            GeometryHelper(geo).getScvCorners(scv.indexInElement())
 
  181    typename SubControlVolumeFace::Traits::Geometry geometry(
const SubControlVolumeFace& scvf)
 const 
  184        const auto geo = 
element().geometry();
 
  188            const auto localFacetIndex = scvf.insideScvIdx();
 
  190                referenceElement(geo).type(localFacetIndex, 1),
 
  191                GeometryHelper(geo).getBoundaryScvfCorners(localFacetIndex)
 
  197                SubControlVolumeFace::Traits::interiorGeometryType(geo.type()),
 
  198                GeometryHelper(geo).getScvfCorners(scvf.index())
 
  204    std::optional<Element> element_;
 
  206    const GGCache* ggCache_;
 
Element-wise grid geometry (local view)
Definition discretization/facecentered/diamond/fvelementgeometry.hh:32
Helper class to construct SCVs and SCVFs for the diamond scheme.
Class providing iterators over sub control volumes and sub control volume faces of an element.
typename GridView::IndexSet::IndexType GridIndex
Definition indextraits.hh:27
std::uint_least8_t SmallLocalIndex
Definition indextraits.hh:29