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