diff --git a/dumux/porousmediumflow/implicit/darcyfluxvariables.hh b/dumux/porousmediumflow/implicit/darcyfluxvariables.hh index 405eee464a80ee8bd9434cacf898d87bbb8496cf..1456395d4351371481a9fe16e4deed3d5f88fb20 100644 --- a/dumux/porousmediumflow/implicit/darcyfluxvariables.hh +++ b/dumux/porousmediumflow/implicit/darcyfluxvariables.hh @@ -360,6 +360,10 @@ protected: }// loop all phases } + // set const reference to the fvGeometry + const void setFVGeometryPtr_(const FVElementGeometry& fvGeometry) + { fvGeometryPtr_ = &fvGeometry; } + // return const reference to the fvGeometry const FVElementGeometry& fvGeometry_() const { return *fvGeometryPtr_; } diff --git a/dumux/porousmediumflow/implicit/forchheimerfluxvariables.hh b/dumux/porousmediumflow/implicit/forchheimerfluxvariables.hh index 812ed0895395c1914466224644b6116e6ce6e6a3..0561b2d091fe9efd462eecb9d874afc1e1360d19 100644 --- a/dumux/porousmediumflow/implicit/forchheimerfluxvariables.hh +++ b/dumux/porousmediumflow/implicit/forchheimerfluxvariables.hh @@ -82,6 +82,7 @@ class ImplicitForchheimerFluxVariables { friend class ImplicitDarcyFluxVariables<TypeTag>; // be friends with parent typedef ImplicitDarcyFluxVariables<TypeTag> ParentType; + typedef typename GET_PROP_TYPE(TypeTag, FluxVariables) Implementation; typedef typename GET_PROP_TYPE(TypeTag, Problem) Problem; typedef typename GET_PROP_TYPE(TypeTag, SpatialParams) SpatialParams; typedef typename GET_PROP_TYPE(TypeTag, ElementVolumeVariables) ElementVolumeVariables; @@ -126,6 +127,32 @@ public: */ ImplicitForchheimerFluxVariables() = default; + /*! \copydoc ParentType::update() */ + void update(const Problem &problem, + const Element &element, + const FVElementGeometry &fvGeometry, + const int fIdx, + const ElementVolumeVariables &elemVolVars, + const bool onBoundary = false) + { + ParentType::setFVGeometryPtr_(fvGeometry); + ParentType::onBoundary_ = onBoundary; + ParentType::faceIdx_ = fIdx; + + ParentType::mobilityUpwindWeight_ = GET_PARAM_FROM_GROUP(TypeTag, Scalar, Implicit, MobilityUpwindWeight); + asImp_().calculateGradients_(problem, element, elemVolVars); + asImp_().calculateNormalVelocity_(problem, element, elemVolVars); + } + +private: + //! Returns the implementation of the flux variables (i.e. static polymorphism) + Implementation &asImp_() + { return *static_cast<Implementation *>(this); } + + //! \copydoc asImp_() + const Implementation &asImp_() const + { return *static_cast<const Implementation *>(this); } + protected: /*! * \brief Function for calculation of velocities.