From 256ab1cebadae80adee46a3915b58b1b8046fe28 Mon Sep 17 00:00:00 2001 From: Kilian Weishaupt <kilian.weishaupt@iws.uni-stuttgart.de> Date: Tue, 26 Oct 2021 09:49:11 +0200 Subject: [PATCH] [staggered][gridGeometry] Make scvs(fvGeometry) iterate directly over global vector --- .../facecentered/staggered/fvelementgeometry.hh | 7 +------ .../facecentered/staggered/fvgridgeometry.hh | 9 +++++++++ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/dumux/discretization/facecentered/staggered/fvelementgeometry.hh b/dumux/discretization/facecentered/staggered/fvelementgeometry.hh index 2318b5ee7e..ae93ae36e3 100644 --- a/dumux/discretization/facecentered/staggered/fvelementgeometry.hh +++ b/dumux/discretization/facecentered/staggered/fvelementgeometry.hh @@ -105,12 +105,7 @@ public: //! for (auto&& scv : scvs(fvGeometry)) friend inline auto scvs(const FaceCenteredStaggeredFVElementGeometry& fvGeometry) - { - using IndexContainerType = std::decay_t<decltype(fvGeometry.scvIndices_())>; - using ScvIterator = Dumux::ScvIterator<SubControlVolume, IndexContainerType, ThisType>; - return Dune::IteratorRange<ScvIterator>(ScvIterator(fvGeometry.scvIndices_().begin(), fvGeometry), - ScvIterator(fvGeometry.scvIndices_().end(), fvGeometry)); - } + { return fvGeometry.gridGeometry().scvs(fvGeometry); } //! iterator range for sub control volumes faces. Iterates over //! all scvfs of the bound element. diff --git a/dumux/discretization/facecentered/staggered/fvgridgeometry.hh b/dumux/discretization/facecentered/staggered/fvgridgeometry.hh index 44fffdcd12..e326bd31be 100644 --- a/dumux/discretization/facecentered/staggered/fvgridgeometry.hh +++ b/dumux/discretization/facecentered/staggered/fvgridgeometry.hh @@ -199,6 +199,15 @@ public: const SubControlVolume& scv(GridIndexType scvIdx) const { return scvs_[scvIdx]; } + //! Iterator range for sub control volumes. Iterates over + //! all scvs of the element-local fvGeometry. + auto scvs(const LocalView& fvGeometry) const + { + const auto begin = scvs_.cbegin() + numScvsPerElement*fvGeometry.elementIndex(); + const auto end = begin + numScvsPerElement; + return Dune::IteratorRange<decltype(begin)>(begin, end); + } + //! Get a sub control volume face with a global scvf index const SubControlVolumeFace& scvf(GridIndexType scvfIdx) const { return scvfs_[scvfIdx]; } -- GitLab