diff --git a/dumux/mixeddimension/facet/mpfa/interactionvolume.hh b/dumux/mixeddimension/facet/mpfa/interactionvolume.hh index 92410e3bf1bcbeeabc169e691769553ec05a7165..5a4a58f2b08e51f1a9987bea241e81d444444e1d 100644 --- a/dumux/mixeddimension/facet/mpfa/interactionvolume.hh +++ b/dumux/mixeddimension/facet/mpfa/interactionvolume.hh @@ -42,15 +42,41 @@ using CCMpfaFacetCouplingInteractionVolume = CCMpfaFacetCouplingInteractionVolum // Per default, we inherit from the standard interaction volumes template<class TypeTag, MpfaMethods Method> -class CCMpfaFacetCouplingInteractionVolumeImplementation : public CCMpfaInteractionVolumeImplementation<TypeTag, Method> {}; +class CCMpfaFacetCouplingInteractionVolumeImplementation : public CCMpfaInteractionVolumeImplementation<TypeTag, Method> +{ + using ParentType = CCMpfaInteractionVolumeImplementation<TypeTag, Method>; + + using Problem = typename GET_PROP_TYPE(TypeTag, Problem); + using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVElementGeometry); + using ElementVolumeVariables = typename GET_PROP_TYPE(TypeTag, ElementVolumeVariables); + +public: + using typename ParentType::Seed; + + CCMpfaFacetCouplingInteractionVolumeImplementation(const Seed& seed, + const Problem& problem, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars) + : ParentType(seed, problem, fvGeometry, elemVolVars) + {} +}; + +//! Specialization of the interaction volume traits class for the coupled models +template<class TypeTag> +class CCMpfaFacetCouplingOInteractionVolumeTraits : public CCMpfaOInteractionVolumeTraits<TypeTag> +{ +public: + using BoundaryInteractionVolume = CCMpfaFacetCouplingInteractionVolumeImplementation<TypeTag, MpfaMethods::oMethod>; +}; // the o-method interaction volume is substituted by the one including data on the facet element's // tensorial quantities into the local system to be solved. This has to be used as boundary interaction volume template<class TypeTag> class CCMpfaFacetCouplingInteractionVolumeImplementation<TypeTag, MpfaMethods::oMethod> - : public CCMpfaInteractionVolumeImplementation<TypeTag, MpfaMethods::oMethod> + : public CCMpfaOInteractionVolume<TypeTag, CCMpfaFacetCouplingOInteractionVolumeTraits<TypeTag>> { - using ParentType = CCMpfaInteractionVolumeImplementation<TypeTag, MpfaMethods::oMethod>; + using Traits = CCMpfaFacetCouplingOInteractionVolumeTraits<TypeTag>; + using ParentType = CCMpfaOInteractionVolume<TypeTag, Traits>; using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); using GridView = typename GET_PROP_TYPE(TypeTag, GridView); @@ -63,7 +89,7 @@ class CCMpfaFacetCouplingInteractionVolumeImplementation<TypeTag, MpfaMethods::o using InteriorBoundaryData = typename GET_PROP_TYPE(TypeTag, InteriorBoundaryData); using ElementVolumeVariables = typename GET_PROP_TYPE(TypeTag, ElementVolumeVariables); - using LocalScvfType = typename ParentType::Traits::LocalScvfType; + using LocalScvfType = typename Traits::LocalScvfType; static constexpr bool useTpfaBoundary = GET_PROP_VALUE(TypeTag, UseTpfaBoundary); @@ -113,7 +139,7 @@ public: MpfaHelper::nT_M_v(n, facetTensor, v); } - void assembleNeumannFluxVector_() + void assembleNeumannFluxVector() { // initialize the neumann fluxes vector to zero this->neumannFluxes_.resize(this->fluxFaceIndexSet_.size(), PrimaryVariables(0.0));