diff --git a/doc/handbook/dumux-handbook.bib b/doc/handbook/dumux-handbook.bib index 5f2292792837d84960f9cd9fddda79976a842e9e..982fc1904083500b42e29f5fbcc00d5ff816f5dc 100644 --- a/doc/handbook/dumux-handbook.bib +++ b/doc/handbook/dumux-handbook.bib @@ -784,6 +784,23 @@ url = {http://www.sciencedirect.com/science/article/pii/S0169772204001160} pages = {255--293} } +@Article{Kunz2016, +author={{Kunz, P. +and Zarikos, I. M. +and Karadimitriou, N. K. +and Huber, M. +and Nieken, U. +and Hassanizadeh, S. M.}}, +title={{Study of Multi-phase Flow in Porous Media: Comparison of SPH Simulations with Micro-model Experiments}}, +journal={{Transport in Porous Media}}, +year={2016}, +volume={114}, +number={2}, +pages={581--600}, +doi={10.1007/s11242-015-0599-1}, +url={http://dx.doi.org/10.1007/s11242-015-0599-1} +} + @BOOK{A3:lancaster:1969, title = {{Theory of Matrices}}, publisher = {Academic Press, Inc.\ (London) Ltd.}, diff --git a/dumux/freeflow/stokes/localresidual.hh b/dumux/freeflow/stokes/localresidual.hh index 7951945fc9ad49b28c10fef6210f5e3faee809a4..2f58393c5cc2d3e394c70d4139c13e96009939b2 100644 --- a/dumux/freeflow/stokes/localresidual.hh +++ b/dumux/freeflow/stokes/localresidual.hh @@ -82,6 +82,7 @@ protected: static const bool enableUnsymmetrizedVelocityGradient = GET_PROP_VALUE(TypeTag, EnableUnsymmetrizedVelocityGradient); static const bool calculateNavierStokes = GET_PROP_VALUE(TypeTag, EnableNavierStokes); static const bool useMoles = GET_PROP_VALUE(TypeTag, UseMoles); + static const bool enablePseudo3dWallFriction = GET_PROP_VALUE(TypeTag, EnablePseudoThreeDWallFriction); public: /*! @@ -171,6 +172,8 @@ protected: * * \param flux The advective flux over the sub-control-volume face for each component * \param fluxVars The flux variables at the current SCV/boundary face + * + * An additional wall friction term can be added to account for a dimensional reduction from 3d to 2d (Kunz et al., 2016) \cite Kunz2016 <BR> */ void computeAdvectiveFlux(PrimaryVariables &flux, const FluxVariables &fluxVars) const @@ -328,6 +331,15 @@ protected: { source[momentumXIdx + dimIdx] -= pressureGradAtSCVCenter[dimIdx]; source[momentumXIdx + dimIdx] += volVars.density()*this->problem_().gravity()[dimIdx]; + + if(enablePseudo3dWallFriction) + { + // add a wall friction term to account for a dimensional reduction from 3d to 2d + const auto pos = this->element_().geometry().corner(scvIdx); + const Scalar height = this->problem_().extrusionFactorAtPos(pos); + const Scalar wallFriction = 12*volVars.velocity()[dimIdx]*volVars.dynamicViscosity()/(height*height); + source[momentumXIdx + dimIdx] -= wallFriction; + } } } diff --git a/dumux/freeflow/stokes/properties.hh b/dumux/freeflow/stokes/properties.hh index 14471f6608abcc25d30d55e521bf2f4ac9a67788..25829a8df5c11b63ea99338d56fadfa517de9205 100644 --- a/dumux/freeflow/stokes/properties.hh +++ b/dumux/freeflow/stokes/properties.hh @@ -57,6 +57,7 @@ NEW_PROP_TAG(StokesStabilizationAlpha); //!< The parameter for the stabilization NEW_PROP_TAG(StokesStabilizationBeta); //!< The parameter for the stabilization at boundaries NEW_PROP_TAG(EnableUnsymmetrizedVelocityGradient); //!< Returns whether unsymmetrized velocity gradient for viscous term is used NEW_PROP_TAG(EnableNavierStokes); //!< Returns whether Navier-Stokes should be solved instead of plain Stokes +NEW_PROP_TAG(EnablePseudoThreeDWallFriction); //!< Returns whether an additional wall friction term should be considered to mimic 3D behavior NEW_PROP_TAG(UseMoles); //!< Defines whether molar (true) or mass (false) density is used NEW_PROP_TAG(PhaseIdx); //!< A phase index in case that a two-phase fluidsystem is used diff --git a/dumux/freeflow/stokes/propertydefaults.hh b/dumux/freeflow/stokes/propertydefaults.hh index 10014fb585a0a54360330a9204e0b9a6429f6cae..0a39ccb5b570c8e165f4d16f7ac99870a22d3d16 100644 --- a/dumux/freeflow/stokes/propertydefaults.hh +++ b/dumux/freeflow/stokes/propertydefaults.hh @@ -135,6 +135,9 @@ SET_INT_PROP(BoxStokes, PhaseIdx, 0); //! Use symmetrizedVelocityGradient by default SET_BOOL_PROP(BoxStokes, EnableUnsymmetrizedVelocityGradient, false); +//! Disbale additional wall friction term by default +SET_BOOL_PROP(BoxStokes, EnablePseudoThreeDWallFriction, false); + //! Set calculation to Stokes, not Navier-Stokes SET_BOOL_PROP(BoxStokes, EnableNavierStokes, false);