The Richards Flow Process solves the Richards equation for variably saturated flow in porous media. This is a nonlinear partial differential equation that models water flow in unsaturated soils, combining Darcy’s law with mass conservation. The process is applicable to phenomena such as:
The Richards Flow process is nonlinear due to the dependence of hydraulic conductivity and water content on pressure (or suction). It accounts for gravity effects and can handle both saturated and unsaturated flow conditions. Secondary variables include saturation and Darcy velocity, which can be output for visualization and analysis. The process can include mass lumping for improved numerical stability in certain scenarios.
The Richards Flow Process solves the Richards equation in strong form:
$$ \left( s_p S^l + \phi S^l \frac{1}{\rho^l} \frac{\partial \rho^l}{\partial p} + \phi \frac{\partial S^l}{\partial p} \right) \frac{\partial p}{\partial t} = \nabla \cdot \left[ \frac{\mathbf{k} k_{rel}}{\mu} (\nabla p - \rho^l \mathbf{g}) \right] + Q, $$where:
The liquid velocity $\mathbf{v}^l$ [L·T⁻¹] is described by Darcy’s law as:
$$ \mathbf{v}^l = -\frac{\mathbf{k} k_{rel}}{\mu} (\nabla p - \rho^l \mathbf{g}). $$Note, that a part of the Laplace term is neglected, see Note on the Laplace term with non-constant density.
The Richards equation is discretized using the finite element method, resulting in a system of nonlinear equations. The discrete system takes the form:
$$ \mathbf{M}_e \frac{d\mathbf{p}_e}{dt} + \mathbf{K}_e \mathbf{p}_e = \mathbf{b}_e $$where the element matrices are defined as follows.
The element mass matrix $\mathbf{M}_e$ [L⁴·T²·M⁻¹] accounts for storage effects:
$$ \mathbf{M}_e = \int_{\Omega^e} \mathbf{N}^T \left( s_p \cdot S^l + \phi S^l \frac{1}{\rho^l} \frac{\partial \rho^l}{\partial p} - \phi \frac{\partial S^l}{\partial p_c} \right) \mathbf{N} d\Omega, $$where $p_c = -p$ is the capillary pressure.
The element stiffness matrix $\mathbf{K}_e$ [L⁴·M⁻¹] represents the flow terms:
$$ \mathbf{K}_e = \int_{\Omega^e} (\nabla \mathbf{N})^T \frac{\mathbf{k} k_{rel}}{\mu} (\nabla \mathbf{N}) d\Omega. $$The load vector $\mathbf{b}_e$ [L³·T⁻¹] includes gravity terms:
$$ \mathbf{b}_e = \int_{\Omega^e} (\nabla \mathbf{N})^T \frac{\mathbf{k} k_{rel}}{\mu} \rho^l \mathbf{g} d\Omega $$Richards Flow process has to be declared in the project file in the processes block. For example in following way:
<process>
<name>RichardsFlow</name>
<type>RICHARDS_FLOW</type>
<integration_order>2</integration_order>
<specific_body_force>0 -9.81</specific_body_force>
<mass_lumping>true</mass_lumping>
<process_variables>
<process_variable>pressure</process_variable>
</process_variables>
<secondary_variables>
<secondary_variable name="saturation"/>
<secondary_variable name="darcy_velocity"/>
</secondary_variables>
</process>For more detailed description of tags used in this snippet, please see Processes.
The Richards Flow process requires single scalar process variable pressure in the configuration above.
For more details, see Process variables.
Richards Flow requires properties for the aqueous liquid phase and for the medium.
Required medium properties for each medium. See medium properties for more details on defining them.
| Property name | Units | SI | Notes |
|---|---|---|---|
permeability |
L² | m² | - |
porosity |
- | - | - |
reference_temperature |
Θ | K | - |
relative_permeability |
- | - | RelPermBrooksCorey, RelativePermeabilityVanGenuchten etc. |
saturation |
- | - | SaturationBrooksCorey, SaturationVanGenuchten, etc. |
storage |
L T²/M | m·s²·kg⁻¹ | - |
Required liquid properties for each medium. See phase properties for more details on defining them.
| Property name | Units | SI | Notes |
|---|---|---|---|
density |
M·L⁻³ | kg·m⁻³ | $\frac{\partial \rho^l}{\partial p}$ is part of storage term. |
viscosity |
M·L⁻¹·T⁻¹ | Pa·s | - |
The specific body force vector can be specified to account for gravity effects.
The diagonal lumping of the mass matrix can be enabled by adding the following tag to the <process> </process> block:
<mass_lumping>true</mass_lumping>If $\rho^l$ is not constant, the Laplace term for the density scaled volume balance equation is
$$ \frac{1}{\rho^l}\nabla\left(\rho^l\frac{{\mathbf k}k_{rel}}{\mu}(\nabla p-\rho^l\mathbf g)\right) $$and its corresponding weak form is
$$ \int\frac{1}{\rho^l}\nabla\left(\rho^l\frac{{\mathbf k}k_{rel}}{\mu}(\nabla p-\rho^l\mathbf g)\right)\psi\mathrm{d}\Omega, $$where $\psi$ the test function. Denoting $-\left(\frac{{\mathbf k}k_{rel}}{\mu}(\nabla p-\rho^l\mathbf g)\right)$ as $\mathbf v$, that weak term can be expanded as
$$ \int\nabla(\mathbf{v}\psi)-\nabla(\frac{\psi}{\rho^l})\mathbf{v}\mathrm{d}\Omega = \int(\mathbf{v}\cdot\mathbf{n}\psi)\mathrm{d}\Gamma-\int\nabla\psi\cdot\mathbf{v}\mathrm{d}\Omega -\int\psi\nabla(\frac{1}{\rho^l})\mathbf{v}\mathrm{d}\Omega. $$We see that the third term above is an extra one to be computed if the volume balance equation and non constant density are considered. The quantity of the extra term is usually tiny $\nabla(\frac{1}{\rho^l})=-\frac{1}{(\rho^l)^2}\frac{\partial \rho^l}{\partial p}\nabla p$ and it is neglected in the implementation.
To gain more insight into Richards Flow process, you can investigate Richards Flow benchmarks.
This article was written by Dmitri Naumov. If you are missing something or you find an error please let us know.
Generated with Hugo 0.147.9
in CI job 683680
|
Last revision: December 20, 2025
Commit: chore: fix spelling mistakes fbc5f730
| Edit this page on