diff --git a/dumux/assembly/staggeredfvassembler.hh b/dumux/assembly/staggeredfvassembler.hh index 1ab803e6c07cbd7249fb85b3978fe4c4938db16d..da1834dd3ef8a4df2e42a8f3e30a3fbc6958f41a 100644 --- a/dumux/assembly/staggeredfvassembler.hh +++ b/dumux/assembly/staggeredfvassembler.hh @@ -223,8 +223,8 @@ public: Scalar residualNorm(const SolutionVector& curSol) const { ResidualType residual; - residual[cellCenterIdx].resize(numCellCenterDofs()); - residual[faceIdx].resize(numFaceDofs()); + residual[cellCenterIdx].resize(fvGridGeometry().numCellCenterDofs()); + residual[faceIdx].resize(fvGridGeometry().numFaceDofs()); assembleResidual(residual, curSol); // calculate the square norm of the residual @@ -315,8 +315,8 @@ public: void setJacobianPattern() { // resize the jacobian and the residual - const auto numDofsCC = numCellCenterDofs(); - const auto numDofsFace = numFaceDofs(); + const auto numDofsCC = fvGridGeometry().numCellCenterDofs(); + const auto numDofsFace = fvGridGeometry().numFaceDofs(); // convenience references CCToCCMatrixBlock& A11 = (*jacobian_)[cellCenterIdx][cellCenterIdx]; @@ -379,20 +379,10 @@ public: */ void setResidualSize() { - (*residual_)[cellCenterIdx].resize(numCellCenterDofs()); - (*residual_)[faceIdx].resize(numFaceDofs()); + (*residual_)[cellCenterIdx].resize(fvGridGeometry().numCellCenterDofs()); + (*residual_)[faceIdx].resize(fvGridGeometry().numFaceDofs()); } - //! cell-centered schemes have one dof per cell - std::size_t numDofs() const - { return numCellCenterDofs() + numFaceDofs(); } - - std::size_t numCellCenterDofs() const - { return gridView().size(0); } - - std::size_t numFaceDofs() const - { return gridView().size(1); } - const Problem& problem() const { return *problem_; } diff --git a/dumux/discretization/staggered/fvgridgeometry.hh b/dumux/discretization/staggered/fvgridgeometry.hh index 8978074e8aba09b98528c09898c6e42e4ac61364..5dce791e7350f3791322887ed8071b0b15658762 100644 --- a/dumux/discretization/staggered/fvgridgeometry.hh +++ b/dumux/discretization/staggered/fvgridgeometry.hh @@ -97,6 +97,16 @@ public: return intersectionMapper_.numIntersections(); } + //! the total number of dofs + std::size_t numDofs() const + { return numCellCenterDofs() + numFaceDofs(); } + + std::size_t numCellCenterDofs() const + { return this->gridView().size(0); } + + std::size_t numFaceDofs() const + { return this->gridView().size(1); } + // Get an element from a sub control volume contained in it Element element(const SubControlVolume& scv) const { return elementMap_.element(scv.elementIndex()); } diff --git a/test/freeflow/staggered/doneatestproblem.hh b/test/freeflow/staggered/doneatestproblem.hh index 963e87d00aaaaa1fd177d9dc256617b784680147..e9326f4b8f0be172f6dfdede1be48ca6ee6d3dc0 100644 --- a/test/freeflow/staggered/doneatestproblem.hh +++ b/test/freeflow/staggered/doneatestproblem.hh @@ -376,8 +376,8 @@ private: */ void createAnalyticalSolution_() { - analyticalPressure_.resize(this->fvGridGeometry().gridView().size(0)); - analyticalVelocity_.resize(this->fvGridGeometry().gridView().size(0)); + analyticalPressure_.resize(this->fvGridGeometry().numCellCenterDofs())); + analyticalVelocity_.resize(this->fvGridGeometry().numCellCenterDofs()); for (const auto& element : elements(this->fvGridGeometry().gridView())) diff --git a/test/freeflow/staggered/kovasznaytestproblem.hh b/test/freeflow/staggered/kovasznaytestproblem.hh index 30371b3564b6815cb9acfe36a40709f16729c46d..5864b28038f2f82f1cff6f3a5a9a78410afe6ff0 100644 --- a/test/freeflow/staggered/kovasznaytestproblem.hh +++ b/test/freeflow/staggered/kovasznaytestproblem.hh @@ -372,8 +372,8 @@ private: */ void createAnalyticalSolution_() { - analyticalPressure_.resize(this->fvGridGeometry().gridView().size(0)); - analyticalVelocity_.resize(this->fvGridGeometry().gridView().size(0)); + analyticalPressure_.resize(this->fvGridGeometry().numCellCenterDofs()); + analyticalVelocity_.resize(this->fvGridGeometry().numCellCenterDofs()); for (const auto& element : elements(this->fvGridGeometry().gridView()))