Specialization of the CCTpfaForchheimersLaw grids where dim=dimWorld. More...
#include <dumux/flux/cctpfa/forchheimerslaw.hh>
Specialization of the CCTpfaForchheimersLaw grids where dim=dimWorld.
Public Types | |
using | Scalar = ScalarType |
state the scalar type of the law More... | |
using | Cache = TpfaForchheimersLawCache< ThisType, GridGeometry > |
state the type for the corresponding cache More... | |
Static Public Member Functions | |
template<class Problem , class ElementVolumeVariables , class ElementFluxVarsCache > | |
static Scalar | flux (const Problem &problem, const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const SubControlVolumeFace &scvf, int phaseIdx, const ElementFluxVarsCache &elemFluxVarsCache) |
Compute the advective flux using the Forchheimer equation. More... | |
template<class Problem , class ElementVolumeVariables > | |
static Scalar | calculateTransmissibility (const Problem &problem, const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const SubControlVolumeFace &scvf) |
template<class Problem , class ElementVolumeVariables , bool scalarPerm = std::is_same<typename Problem::SpatialParams::PermeabilityType, Scalar>::value, std::enable_if_t< scalarPerm, int > = 0> | |
static DimWorldMatrix | calculateHarmonicMeanSqrtPermeability (const Problem &problem, const ElementVolumeVariables &elemVolVars, const SubControlVolumeFace &scvf) |
Returns the harmonic mean of \sqrt{K_0} and \sqrt{K_1}. More... | |
template<class Problem , class ElementVolumeVariables , bool scalarPerm = std::is_same<typename Problem::SpatialParams::PermeabilityType, Scalar>::value, std::enable_if_t<!scalarPerm, int > = 0> | |
static DimWorldMatrix | calculateHarmonicMeanSqrtPermeability (const Problem &problem, const ElementVolumeVariables &elemVolVars, const SubControlVolumeFace &scvf) |
Returns the harmonic mean of \sqrt{\mathbf{K_0}} and \sqrt{\mathbf{K_1}}. More... | |
Static Public Attributes | |
static const DiscretizationMethod | discMethod = DiscretizationMethod::cctpfa |
state the discretization method this implementation belongs to More... | |
using Dumux::CCTpfaForchheimersLaw< ScalarType, GridGeometry, false >::Cache = TpfaForchheimersLawCache<ThisType, GridGeometry> |
state the type for the corresponding cache
using Dumux::CCTpfaForchheimersLaw< ScalarType, GridGeometry, false >::Scalar = ScalarType |
state the scalar type of the law
|
inlinestatic |
Returns the harmonic mean of \sqrt{K_0} and \sqrt{K_1}.
This is a specialization for scalar-valued permeabilities which returns a tensor with identical diagonal entries.
|
inlinestatic |
Returns the harmonic mean of \sqrt{\mathbf{K_0}} and \sqrt{\mathbf{K_1}}.
This is a specialization for tensor-valued permeabilities.
|
inlinestatic |
The flux variables cache has to be bound to an element prior to flux calculations During the binding, the transmissibility will be computed and stored using the method below.
|
inlinestatic |
Compute the advective flux using the Forchheimer equation.
see e.g. Nield & Bejan: Convection in Porous Media [41]
The relative passability \eta_r is the "Forchheimer-equivalent" to the relative permeability k_r. We use the same function as for k_r (VG, BC, linear) other authors use a simple power law e.g.: \eta_{rw} = S_w^3
Some rearrangements have been made to the original Forchheimer relation:
\mathbf{v_\alpha} + c_F \sqrt{\mathbf{K}} \frac{\rho_\alpha}{\mu_\alpha } |\mathbf{v_\alpha}| \mathbf{v_\alpha} + \frac{k_{r \alpha}}{\mu_\alpha} \mathbf{K} \nabla \left(p_\alpha + \rho_\alpha g z \right)= 0
This already includes the assumption k_r(S_w) = \eta_r(S_w):
This non-linear equations is solved for \mathbf{v_\alpha} using Newton's method and an analytical derivative w.r.t. \mathbf{v_\alpha}.
The gradient of the Forchheimer relations looks as follows (mind that \sqrt{\mathbf{K}} is a tensor):
f\left(\mathbf{v_\alpha}\right) = \left( \begin{array}{ccc} 1 & 0 &0 \\ 0 & 1 &0 \\ 0 & 0 &1 \\ \end{array} \right) + c_F \frac{\rho_\alpha}{\mu_\alpha} |\mathbf{v}_\alpha| \sqrt{\mathbf{K}} + c_F \frac{\rho_\alpha}{\mu_\alpha}\frac{1}{|\mathbf{v}_\alpha|} \sqrt{\mathbf{K}} \left( \begin{array}{ccc} v_x^2 & v_xv_y & v_xv_z \\ v_yv_x & v_{y}^2 & v_yv_z \\ v_zv_x & v_zv_y &v_{z}^2 \\ \end{array} \right)
|
static |
state the discretization method this implementation belongs to