diff --git a/dumux/discretization/box/fvgridgeometry.hh b/dumux/discretization/box/fvgridgeometry.hh index 2252cbc41c42cdca879c5d5ddeab3f12ca298023..4e04f43d917ce24f99c2f0ec64dc2eb39331cccd 100644 --- a/dumux/discretization/box/fvgridgeometry.hh +++ b/dumux/discretization/box/fvgridgeometry.hh @@ -88,6 +88,10 @@ public: std::size_t numBoundaryScvf() const { return numBoundaryScvf_; } + //! The total number of degrees of freedom + std::size_t numDofs() + { return this->gridView().size(dim); } + //! update all fvElementGeometries (do this again after grid adaption) void update() { @@ -100,7 +104,7 @@ public: scvs_.resize(numElements); scvfs_.resize(numElements); - boundaryDofIndices_.resize(this->gridView().size(dim), false); + boundaryDofIndices_.resize(numDofs(), false); numScv_ = 0; numScvf_ = 0; @@ -268,12 +272,16 @@ public: std::size_t numBoundaryScvf() const { return numBoundaryScvf_; } + //! The total number of degrees of freedom + std::size_t numDofs() const + { return this->gridView().size(dim); } + //! update all fvElementGeometries (do this again after grid adaption) void update() { ParentType::update(); - boundaryDofIndices_.resize(this->gridView().size(dim), false); + boundaryDofIndices_.resize(numDofs(), false); // save global data on the grid's scvs and scvfs // TODO do we need those information? diff --git a/dumux/discretization/cellcentered/mpfa/fvgridgeometry.hh b/dumux/discretization/cellcentered/mpfa/fvgridgeometry.hh index 1ffaf94b049369e5aa71701e982249866d08f4e7..b02442694634a1ac1a5159dfb91bab07db0babd7 100644 --- a/dumux/discretization/cellcentered/mpfa/fvgridgeometry.hh +++ b/dumux/discretization/cellcentered/mpfa/fvgridgeometry.hh @@ -102,6 +102,13 @@ public: std::size_t numBoundaryScvf() const { return numBoundaryScvf_; } + + /*! + * \brief Returns the total number of degrees of freedom. + */ + std::size_t numDofs() const + { return this->gridView().size(0); } + /*! * \brief Gets an element from a sub control volume contained in it. */ @@ -164,7 +171,7 @@ public: // determine the number of geometric entities const auto numVert = this->gridView().size(dim); - const auto numScvs = this->gridView().size(0); + const auto numScvs = numDofs(); std::size_t numScvf = MpfaHelper::estimateNumScvf(this->gridView()); // resize containers @@ -475,6 +482,12 @@ public: std::size_t numBoundaryScvf() const { return numBoundaryScvf_; } + /*! + * \brief Returns the total number of degrees of freedom. + */ + std::size_t numDofs() const + { return this->gridView().size(0); } + /*! * \brief Gets an element from a sub control volume contained in it. */ @@ -548,7 +561,7 @@ public: elementMap_.clear(); // resize containers - numScvs_ = this->gridView().size(0); + numScvs_ = numDofs(); scvfIndicesOfScv_.resize(numScvs_); neighborVolVarIndices_.resize(numScvs_); elementMap_.resize(numScvs_); diff --git a/dumux/discretization/cellcentered/mpfa/hybridfps/fvgridgeometry.hh b/dumux/discretization/cellcentered/mpfa/hybridfps/fvgridgeometry.hh index 2d3d9dd47465a3368724cd28080d9f5e66a2f8cd..7af24aa15206f8128b38500855fbe9f290083682 100644 --- a/dumux/discretization/cellcentered/mpfa/hybridfps/fvgridgeometry.hh +++ b/dumux/discretization/cellcentered/mpfa/hybridfps/fvgridgeometry.hh @@ -93,6 +93,10 @@ public: std::size_t numBoundaryScvf() const { return numBoundaryScvf_; } + //! The total number of degrees of freedom + std::size_t numDofs() const + { return this->gridView().size(0); } + // Get an element from a sub control volume contained in it Element element(const SubControlVolume& scv) const { return elementMap_.element(scv.elementIndex()); } @@ -120,7 +124,7 @@ public: scvfs_.clear(); // reserve memory - IndexType numScvs = gridView_.size(0); + IndexType numScvs = numDofs(); scvs_.resize(numScvs); scvfs_.reserve(getNumScvf_()); scvfIndicesOfScv_.resize(numScvs); diff --git a/dumux/discretization/cellcentered/tpfa/fvgridgeometry.hh b/dumux/discretization/cellcentered/tpfa/fvgridgeometry.hh index cc3d13771ab116797a8a9e8812b5367466c834c5..6ddb2493f025a5465df8ae44f722f01277b82936 100644 --- a/dumux/discretization/cellcentered/tpfa/fvgridgeometry.hh +++ b/dumux/discretization/cellcentered/tpfa/fvgridgeometry.hh @@ -95,6 +95,10 @@ public: return numBoundaryScvf_; } + //! The total number of degrees of freedom + std::size_t numDofs() const + { return this->gridView().size(0); } + // Get an element from a sub control volume contained in it Element element(const SubControlVolume& scv) const { return elementMap_.element(scv.elementIndex()); } @@ -116,7 +120,7 @@ public: elementMap_.clear(); // determine size of containers - IndexType numScvs = this->gridView().size(0); + IndexType numScvs = numDofs(); IndexType numScvf = 0; for (const auto& element : elements(this->gridView())) numScvf += element.subEntities(1); @@ -343,6 +347,10 @@ public: return numBoundaryScvf_; } + //! The total number of degrees of freedom + std::size_t numDofs() const + { return this->gridView().size(0); } + // Get an element from a sub control volume contained in it Element element(const SubControlVolume& scv) const { return elementMap_.element(scv.elementIndex()); } @@ -362,7 +370,7 @@ public: neighborVolVarIndices_.clear(); // reserve memory or resize the containers - numScvs_ = this->gridView().size(0); + numScvs_ = numDofs(); numScvf_ = 0; numBoundaryScvf_ = 0; elementMap_.resize(numScvs_); diff --git a/test/porousmediumflow/1p/implicit/incompressible/test_1p_box.cc b/test/porousmediumflow/1p/implicit/incompressible/test_1p_box.cc index b29760a00b0b87ca3d298c7f329e5ea506c3387a..beb62a1ab81cc12ea9b1c7e12a67b36196aeb1f3 100644 --- a/test/porousmediumflow/1p/implicit/incompressible/test_1p_box.cc +++ b/test/porousmediumflow/1p/implicit/incompressible/test_1p_box.cc @@ -87,7 +87,7 @@ int main(int argc, char** argv) try // the solution vector using GridView = typename GET_PROP_TYPE(TypeTag, GridView); using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); - SolutionVector x(leafGridView.size(GridView::dimension)); + SolutionVector x(fvGridGeometry->numDofs()); // the grid variables using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVariables); diff --git a/test/porousmediumflow/1p/implicit/incompressible/test_1p_cc.cc b/test/porousmediumflow/1p/implicit/incompressible/test_1p_cc.cc index 2374c7fbca6c7d7e9b894a356ff1ff5afb53cc7c..d3e6eb8119dbd4f2d190c802cf0da7458c73e560 100644 --- a/test/porousmediumflow/1p/implicit/incompressible/test_1p_cc.cc +++ b/test/porousmediumflow/1p/implicit/incompressible/test_1p_cc.cc @@ -86,7 +86,7 @@ int main(int argc, char** argv) try // the solution vector using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); - SolutionVector x(leafGridView.size(0)); + SolutionVector x(fvGridGeometry->numDofs()); // the grid variables using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVariables);