From 75121352485a7e336129df579baba2550db99fe7 Mon Sep 17 00:00:00 2001 From: Mathis Kelm <mathis.kelm@iws.uni-stuttgart.de> Date: Wed, 13 Dec 2023 14:25:18 +0100 Subject: [PATCH] [multidomain] remove corner storage from box scvf --- .../facet/box/fvelementgeometry.hh | 67 ++++++++++++++----- .../facet/box/subcontrolvolumeface.hh | 38 +++++------ 2 files changed, 64 insertions(+), 41 deletions(-) diff --git a/dumux/multidomain/facet/box/fvelementgeometry.hh b/dumux/multidomain/facet/box/fvelementgeometry.hh index e802017844..17d8bf724e 100644 --- a/dumux/multidomain/facet/box/fvelementgeometry.hh +++ b/dumux/multidomain/facet/box/fvelementgeometry.hh @@ -46,6 +46,8 @@ class BoxFacetCouplingFVElementGeometry<GG, true> using LocalIndexType = typename IndexTraits<GridView>::LocalIndex; using CoordScalar = typename GridView::ctype; using FeLocalBasis = typename GG::FeCache::FiniteElementType::Traits::LocalBasisType; + + using GeometryHelper = typename GG::GeometryHelper; public: //! export type of the element using Element = typename GridView::template Codim<0>::Entity; @@ -158,20 +160,33 @@ public: const Element& element() const { return *element_; } - // suppress warnings due to current implementation - // these interfaces should be used! - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wdeprecated-declarations" - //! Create the geometry of a given sub control volume typename SubControlVolume::Traits::Geometry geometry(const SubControlVolume& scv) const - { return scv.geometry(); } + { + assert(isBound()); + const auto geo = element().geometry(); + return { Dune::GeometryTypes::cube(dim), GeometryHelper(geo).getScvCorners(scv.indexInElement()) }; + } //! Create the geometry of a given sub control volume face typename SubControlVolumeFace::Traits::Geometry geometry(const SubControlVolumeFace& scvf) const - { return scvf.geometry(); } - - #pragma GCC diagnostic pop + { + assert(isBound()); + using ScvfGeometry = typename SubControlVolumeFace::Traits::Geometry; + const GeometryHelper geometryHelper(element().geometry()); + typename SubControlVolumeFace::Traits::CornerStorage corners; + if (scvf.boundary() || scvf.interiorBoundary()) + { + corners = geometryHelper.getBoundaryScvfCorners(scvf.facetIndexInElement(), + scvf.indexInElementFacet()); + return { Dune::GeometryTypes::cube(ScvfGeometry::mydimension), corners }; + } + else + { + corners = geometryHelper.getScvfCorners(scvf.index()); + return { Dune::GeometryTypes::cube(ScvfGeometry::mydimension), corners }; + } + } private: const GridGeometry* gridGeometryPtr_; @@ -306,20 +321,36 @@ public: const Element& element() const { return *element_; } - // suppress warnings due to current implementation - // these interfaces should be used! - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wdeprecated-declarations" - //! Create the geometry of a given sub control volume typename SubControlVolume::Traits::Geometry geometry(const SubControlVolume& scv) const - { return scv.geometry(); } + { + assert(isBound()); + const auto geo = element().geometry(); + return { Dune::GeometryTypes::cube(dim), GeometryHelper(geo).getScvCorners(scv.indexInElement()) }; + } //! Create the geometry of a given sub control volume face typename SubControlVolumeFace::Traits::Geometry geometry(const SubControlVolumeFace& scvf) const - { return scvf.geometry(); } - - #pragma GCC diagnostic pop + { + assert(isBound()); + using ScvfGeometry = typename SubControlVolumeFace::Traits::Geometry; + GeometryHelper geometryHelper(element().geometry()); + + if (scvf.boundary() || scvf.interiorBoundary()) + return { + Dune::GeometryTypes::cube(ScvfGeometry::mydimension), + geometryHelper.getBoundaryScvfCorners( + scvf.facetIndexInElement(), + scvf.indexInElementFacet() + ) + }; + + else + return { + Dune::GeometryTypes::cube(ScvfGeometry::mydimension), + geometryHelper.getScvfCorners(scvf.index()) + }; + } private: diff --git a/dumux/multidomain/facet/box/subcontrolvolumeface.hh b/dumux/multidomain/facet/box/subcontrolvolumeface.hh index 6f33bb60f3..a48a2f8ee2 100644 --- a/dumux/multidomain/facet/box/subcontrolvolumeface.hh +++ b/dumux/multidomain/facet/box/subcontrolvolumeface.hh @@ -62,13 +62,7 @@ public: const typename Element::Geometry& elemGeometry, unsigned int scvfIndex, std::vector<LocalIndexType>&& scvIndices) - : corners_(geometryHelper.getScvfCorners(scvfIndex)) - , center_(0.0) - , unitOuterNormal_(geometryHelper.normal(corners_, scvIndices)) - , area_(Dumux::convexPolytopeVolume<T::dim-1>( - Dune::GeometryTypes::cube(T::dim-1), - [&](unsigned int i){ return corners_[i]; }) - ) + : center_(0.0) , scvfIndex_(scvfIndex) , scvIndices_(std::move(scvIndices)) , facetIndex_(/*undefined*/) @@ -77,9 +71,14 @@ public: , interiorBoundary_(false) , boundaryFlag_{} { - for (const auto& corner : corners_) + auto corners = geometryHelper.getScvfCorners(scvfIndex); + unitOuterNormal_ = geometryHelper.normal(corners, scvIndices_); + area_ = Dumux::convexPolytopeVolume<T::dim-1>( + Dune::GeometryTypes::cube(T::dim-1), + [&](unsigned int i){ return corners[i]; }); + for (const auto& corner : corners) center_ += corner; - center_ /= corners_.size(); + center_ /= corners.size(); } //! Constructor for domain or interior boundary scvfs @@ -92,13 +91,8 @@ public: std::vector<LocalIndexType>&& scvIndices, bool boundary, bool interiorBoundary) - : corners_(geometryHelper.getBoundaryScvfCorners(intersection.indexInInside(), indexInIntersection)) - , center_(0.0) + : center_(0.0) , unitOuterNormal_(intersection.centerUnitOuterNormal()) - , area_(Dumux::convexPolytopeVolume<T::dim-1>( - Dune::GeometryTypes::cube(T::dim-1), - [&](unsigned int i){ return corners_[i]; }) - ) , scvfIndex_(scvfIndex) , scvIndices_(std::move(scvIndices)) , facetIndex_(intersection.indexInInside()) @@ -107,9 +101,13 @@ public: , interiorBoundary_(interiorBoundary) , boundaryFlag_{intersection} { - for (const auto& corner : corners_) + auto corners = geometryHelper.getBoundaryScvfCorners(intersection.indexInInside(), indexInIntersection); + area_ = Dumux::convexPolytopeVolume<T::dim-1>( + Dune::GeometryTypes::cube(T::dim-1), + [&](unsigned int i){ return corners[i]; }); + for (const auto& corner : corners) center_ += corner; - center_ /= corners_.size(); + center_ /= corners.size(); } //! The center of the sub control volume face @@ -175,18 +173,12 @@ public: return indexInFacet_; } - //! The geometry of the sub control volume face - [[deprecated("Will be removed after 3.7. Use fvGeometry.geometry(scvf).")]] - Geometry geometry() const - { return Geometry(Dune::GeometryTypes::cube(Geometry::mydimension), corners_); } - //! Return the boundary flag typename BoundaryFlag::value_type boundaryFlag() const { return boundaryFlag_.get(); } private: // geometrical information - CornerStorage corners_; GlobalPosition center_; GlobalPosition unitOuterNormal_; Scalar area_; -- GitLab