diff --git a/dumux/porousmediumflow/nonequilibrium/thermal/localresidual.hh b/dumux/porousmediumflow/nonequilibrium/thermal/localresidual.hh index 4047df849d2b7493ca7a5d6bc352052352f65137..2539b3e985aa5dfb26ed035d95e77516633c6683 100644 --- a/dumux/porousmediumflow/nonequilibrium/thermal/localresidual.hh +++ b/dumux/porousmediumflow/nonequilibrium/thermal/localresidual.hh @@ -170,7 +170,7 @@ public: //interfacial area // Shi & Wang, Transport in porous media (2011) - const Scalar as = 6.0 * (1.0-volVars.porosity()) / characteristicLength ; + const Scalar as = volVars.fluidSolidInterfacialArea(); //temperature fluid is the same for both fluids const Scalar TFluid = volVars.temperatureFluid(0); diff --git a/dumux/porousmediumflow/nonequilibrium/volumevariables.hh b/dumux/porousmediumflow/nonequilibrium/volumevariables.hh index ad2b52cc57c45208f5c74be944ca05f3a41ea73d..f07f08c0b0686cd363af9c443df466ac4a5af4a2 100644 --- a/dumux/porousmediumflow/nonequilibrium/volumevariables.hh +++ b/dumux/porousmediumflow/nonequilibrium/volumevariables.hh @@ -296,6 +296,7 @@ public: paramCache.updateAll(this->fluidState()); //only update of DimLessNumbers is necessary here, as interfacial area is easy due to only one fluid with a solid and is directly computed in localresidual updateDimLessNumbers(elemSol, this->fluidState(), paramCache, problem, element, scv); + updateInterfacialArea(elemSol, this->fluidState(), paramCache, problem, element, scv); } /*! @@ -339,10 +340,32 @@ public: prandtlNumber_[phaseIdx], porosity, ModelTraits::nusseltFormulation()); - } } + + /*! + * \brief Updates the volume specific interfacial area [m^2 / m^3] between the solid and the fluid phase. + * + * \param elemSol A vector containing all primary variables connected to the element + * \param fluidState Container for all the secondary variables concerning the fluids + * \param paramCache The parameter cache corresponding to the fluid state + * \param problem The problem to be solved + * \param element An element which contains part of the control volume + * \param scv The sub-control volume + */ + template<class ElemSol, class Problem, class Element, class Scv> + void updateInterfacialArea(const ElemSol& elemSol, + const FluidState& fluidState, + const ParameterCache& paramCache, + const Problem& problem, + const Element& element, + const Scv& scv) + { + using FluidSolidInterfacialAreaFormulation = typename Problem::SpatialParams::FluidSolidInterfacialAreaFormulation; + interfacialArea_ = FluidSolidInterfacialAreaFormulation::fluidSolidInterfacialArea(this->porosity(), characteristicLength()); + } + //! access function Reynolds Number const Scalar reynoldsNumber(const unsigned int phaseIdx) const { return reynoldsNumber_[phaseIdx]; } //! access function Prandtl Number @@ -354,6 +377,8 @@ public: //! access function pre factor energy transfer const Scalar factorEnergyTransfer() const { return factorEnergyTransfer_; } + const Scalar fluidSolidInterfacialArea() const {return interfacialArea_;} + private: //! dimensionless numbers Scalar reynoldsNumber_[ModelTraits::numPhases()]; @@ -362,7 +387,7 @@ private: Scalar characteristicLength_; Scalar factorEnergyTransfer_; - Scalar solidSurface_ ; + Scalar interfacialArea_ ; }; //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/test/porousmediumflow/1pnc/implicit/nonequilibrium/spatialparams.hh b/test/porousmediumflow/1pnc/implicit/nonequilibrium/spatialparams.hh index 721ab24d7fb4189f13cb8bd770fce21af6d1bd6d..abb43103aaf2c82427e6e33afe76bfe01dfbea3c 100644 --- a/test/porousmediumflow/1pnc/implicit/nonequilibrium/spatialparams.hh +++ b/test/porousmediumflow/1pnc/implicit/nonequilibrium/spatialparams.hh @@ -28,6 +28,7 @@ #include <dumux/porousmediumflow/properties.hh> #include <dumux/material/spatialparams/fv1p.hh> #include <dumux/material/spatialparams/fvnonequilibrium.hh> +#include <dumux/material/fluidmatrixinteractions/1pia/fluidsolidinterfacialareashiwang.hh> namespace Dumux { @@ -54,6 +55,7 @@ class OnePNCNonequilibriumTestSpatialParams public: // export permeability type using PermeabilityType = Scalar; + using FluidSolidInterfacialAreaFormulation = FluidSolidInterfacialAreaShiWang<Scalar>; OnePNCNonequilibriumTestSpatialParams(std::shared_ptr<const FVGridGeometry> fvGridGeometry) : ParentType(fvGridGeometry) diff --git a/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/combustionlocalresidual.hh b/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/combustionlocalresidual.hh index 4e2d8ff7028c4ca60b20a4caba050158ad053d68..418c5dd4708fbb5c339d3df7944c9b7c038f61df 100644 --- a/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/combustionlocalresidual.hh +++ b/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/combustionlocalresidual.hh @@ -84,7 +84,7 @@ public: //interfacial area // Shi & Wang, Transport in porous media (2011) - const Scalar as = 6.0 * (1.0-volVars.porosity()) / characteristicLength ; + const Scalar as = volVars.fluidSolidInterfacialArea(); //temperature fluid is the same for both fluids const Scalar TFluid = volVars.temperatureFluid(0); diff --git a/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/spatialparams.hh b/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/spatialparams.hh index dc9276202fa0cb387834a668117b91bc258cf25f..a0427f6411b18847a9fbefd955977a90af8937c5 100644 --- a/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/spatialparams.hh +++ b/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/spatialparams.hh @@ -31,6 +31,7 @@ #include <dumux/material/fluidmatrixinteractions/2p/heatpipelaw.hh> #include <dumux/material/fluidmatrixinteractions/2p/linearmaterial.hh> #include <dumux/material/fluidmatrixinteractions/mp/2padapter.hh> +#include <dumux/material/fluidmatrixinteractions/1pia/fluidsolidinterfacialareashiwang.hh> #include <dumux/porousmediumflow/properties.hh> #include <dumux/material/spatialparams/fv.hh> @@ -65,6 +66,7 @@ public: //! export the material law type used using MaterialLaw = TwoPAdapter<wPhaseIdx, EffToAbsLaw<EffectiveLaw>>; using MaterialLawParams = typename MaterialLaw::Params; + using FluidSolidInterfacialAreaFormulation = FluidSolidInterfacialAreaShiWang<Scalar>; CombustionSpatialParams(std::shared_ptr<const FVGridGeometry> fvGridGeometry) : ParentType(fvGridGeometry) {