Module enthalpy
Brief summary
The enthalpy module determines the thermal profile in the ice. It uses an enthalpy-based approach that solves for both cold and temperate ice regions simultaneously (Aschwanden et al., 2012)1. The enthalpy module requires the iceflow module as it depends on ice velocity. In turn, the enthalpy determines the basal friction coefficient and the Arrhenius factor, which are used for ice-flow computation. The parameters of the module are described here.
New variable names
Some enthalpy variables and parameters have been renamed for clarity. The following state variables have been changed:
| Previous name | New name |
|---|---|
basalMeltRate |
basal_melt_rate |
bheatflx |
basal_heat_flux |
tillwat |
h_water_till |
Tpmp |
T_pmp |
Epmp |
E_pmp |
surftemp |
T_s |
surfenth |
E_s |
See the parameters section for parameter name changes.
The implementation is largely inspired by PISM (Aschwanden et al., 2012)1. Other references have also helped verify the implementation through benchmarks (Kleiner et al., 2015; Wang et al., 2020)2 3. The enthalpy module will be described in further detail in the in-preparation paper for IGM 3 (Jouvet et al., 2026)4.
Physical model
The thermal state of glaciers can be complex, with some regions at the pressure-melting point while others are not. Two ice regimes are typically defined:
- cold ice: \(T < T_\mathrm{pmp}\) and \(\omega = 0\);
- temperate ice: \(T = T_\mathrm{pmp}\) and \(0 < \omega \le 1\).
Here, \(T\) denotes ice temperature and \(\omega\) is the water content. The pressure-melting-point temperature \(T_\mathrm{pmp}\) depends on pressure through the Clausius-Clapeyron relation, so we may write \(T_\mathrm{pmp}=T_\mathrm{pmp}(p)\) with \(p\) the ice pressure. To avoid dealing with two variables \((T, \omega)\), it is convenient to introduce the enthalpy as follows:
where \(c_\mathrm{i}\) and \(L\) are the specific heat capacity and latent heat of ice, respectively. Importantly, each value of \(E\) corresponds to a unique state \((T, \omega)\), so the values of these variables can be inferred once \(E\) is known.
Since enthalpy can be defined up to an additive constant, we can choose the value of \(E_\mathrm{pmp}\); here, we choose it in a such a way that the enthalpy is zero at a reference temperature \(T_\mathrm{ref}\): $$ E_\mathrm{pmp} = c_\mathrm{i}(T_\mathrm{pmp} - T_\mathrm{ref}). $$
Based on energy conservation, the governing equation for enthalpy takes the form of the following partial differential equation:
together with suitable boundary conditions (Aschwanden et al., 2012)1. Here, \(\rho_\mathrm{i}\) is the ice density, \(\rho_\mathrm{w}\) is the liquid water density, \(\mathbf{v}=(u, v, w)\) are the velocity components in the ice along each direction, \(K\) is the effective enthalpy diffusivity, \(\Phi=\Phi(\mathbf{v})\) is the strain heating, and \(D_\mathrm{w}\) is a drainage function. The enthalpy diffusivity depends on the thermal state of the ice; here we follow the usual approach in ice-sheet modeling by writing
where \(k_\mathrm{i}\) is the thermal conductivity of ice and \(\epsilon \ll 1\) denotes the ratio of temperate to cold ice diffusivity.
Numerical solution
At each time step, the enthalpy module performs the following operations:
- Computation of surface conditions \((T_\mathrm{s}, E_\mathrm{s})\).
- Computation of pressure-melting point conditions \((T_\mathrm{pmp}, E_\mathrm{pmp})\).
- Solution of the equation for \(E\).
- Computation of the thermal state \((T, \omega)\).
- Computation of the Arrhenius factor \(A\).
- Computation of till hydrology conditions.
- Computation of till friction conditions.
The computationally intensive step is solving the equation for \(E\). To achieve this efficiently, we use an operator splitting method:
- first, solve the horizontal advection equation with an explicit backward Euler method;
- then, solve the vertical advection-diffusion equation with an implicit solver.
The implicit solver consists of the Thomas algorithm for tridiagonal linear systems, applied simultaneously to each vertical ice column.
Coupling with ice flow
The enthalpy module builds upon the iceflow module. To activate the coupling, set the following option:
To ensure proper functionality, also activate vertical_iceflow, use a relatively fine vertical discretization, and ensure sufficient retraining.
Parameters
The complete default configuration file can be found here: enthalpy.yaml.
Structure of the parameters:
enthalpy
├── numerics
│ └── ...
├── solver
│ └── ...
├── thermal
│ └── ...
├── surface
│ └── ...
├── arrhenius
│ └── ...
├── till
│ └── ...
└── drainage
└── ...
Description of the parameters:
numerics
| Name | Description | Default value | Units |
|---|---|---|---|
numerics.Nz
|
Number of vertical layers for the enthalpy discretization. | 10 | — |
numerics.vert_spacing
|
Parameter controlling the vertical spacing; 1.0 means uniform, larger values concentrate points near the bed. | 4.0 | — |
solver
| Name | Description | Default value | Units |
|---|---|---|---|
solver.allow_basal_refreezing
|
Allow negative basal melt rates (refreezing). | True | — |
solver.correct_w_for_melt
|
Correct vertical velocity for basal melting. | True | — |
solver.override_basal_at_pmp
|
Force basal enthalpy to be at pressure-melting point. | False | — |
thermal
| Name | Description | Default value | Units |
|---|---|---|---|
thermal.T_min
|
Minimum temperature bound for enthalpy solver. | 243.15 | K |
thermal.T_pmp_ref
|
Reference pressure melting point temperature. | 273.15 | K |
thermal.T_ref
|
Reference temperature for enthalpy calculations. | 223.15 | K |
thermal.c_ice
|
Specific heat capacity of ice. | 2009.0 | J kg\( ^{-1} \) K\( ^{-1} \) |
thermal.L_ice
|
Latent heat of fusion for ice. | 334000.0 | J kg\( ^{-1} \) |
thermal.k_ice
|
Thermal conductivity of ice. | 2.1 | W m\( ^{-1} \) K\( ^{-1} \) |
thermal.K_ratio
|
Ratio of temperate to cold ice thermal diffusivity. | 1e-1 | — |
thermal.basal_heat_flux_ref
|
Reference geothermal heat flux (used when not specified in state). | 0.065 | W m\( ^{-2} \) |
thermal.beta
|
Clausius-Clapeyron constant. | 7.9e-08 | K Pa\( ^{-1} \) |
surface
| Name | Description | Default value | Units |
|---|---|---|---|
surface.T_offset
|
Temperature offset for surface conditions. | 0.0 | °C |
arrhenius
| Name | Description | Default value | Units |
|---|---|---|---|
arrhenius.A_cold
|
Pre-exponential factor for cold ice. | 3.985e-13 | Pa\( ^{-n} \) s\( ^{-1} \) |
arrhenius.A_warm
|
Pre-exponential factor for warm ice. | 1916.0 | Pa\( ^{-n} \) s\( ^{-1} \) |
arrhenius.Q_cold
|
Activation energy for cold ice. | 60000.0 | J mol\( ^{-1} \) |
arrhenius.Q_warm
|
Activation energy for warm ice. | 139000.0 | J mol\( ^{-1} \) |
arrhenius.T_threshold
|
Temperature threshold between cold and warm regimes. | 263.15 | K |
arrhenius.omega_coef
|
Water content enhancement coefficient. | 181.25 | — |
arrhenius.omega_max
|
Maximum water content for enhancement. | 0.01 | — |
arrhenius.R
|
Universal gas constant. | 8.314 | J mol\( ^{-1} \) K\( ^{-1} \) |
till
| Name | Description | Default value | Units |
|---|---|---|---|
till.friction.phi
|
Till friction angle (uniform case). | 30.0 | ° |
till.friction.phi_min
|
Friction angle at bed_min. | 15.0 | ° |
till.friction.phi_max
|
Friction angle at bed_max. | 45.0 | ° |
till.friction.bed_min
|
Minimum bed elevation for interpolation. | None | m |
till.friction.bed_max
|
Maximum bed elevation for interpolation. | None | m |
till.friction.tauc_min
|
Minimum yield stress. | 100000.0 | Pa |
till.friction.tauc_max
|
Maximum yield stress. | 10000000000.0 | Pa |
till.friction.tauc_ice_free
|
Yield stress for ice-free areas. | 1000000.0 | Pa |
till.friction.u_ref
|
Reference sliding velocity. | 100.0 | m yr\( ^{-1} \) |
till.hydro.h_water_till_max
|
Maximum till water layer thickness. | 2.0 | m |
till.hydro.N_ref
|
Reference effective pressure. | 1000.0 | Pa |
till.hydro.e_ref
|
Reference void ratio. | 0.69 | — |
till.hydro.C_c
|
Till compressibility coefficient. | 0.12 | — |
till.hydro.delta
|
Minimum effective pressure fraction. | 0.02 | — |
till.hydro.drainage_rate
|
Till drainage rate. | 0.001 | m yr\( ^{-1} \) |
drainage
| Name | Description | Default value | Units |
|---|---|---|---|
drainage.water_density
|
Water density constant. | 1000.0 | kg m\( ^{-3} \) |
drainage.drain_ice_column
|
Enable water drainage through ice column. | True | — |
drainage.omega_target
|
Target water content after drainage. | 0.01 | — |
drainage.omega_threshold_1
|
First water content threshold. | 0.01 | — |
drainage.omega_threshold_2
|
Second water content threshold. | 0.02 | — |
drainage.omega_threshold_3
|
Third water content threshold. | 0.03 | — |
Contributors: G. Jouvet, T. Gregov, L. Bacchin.
-
Aschwanden, A., Bueler, E., Khroulev, C., & Blatter, H. (2012). An enthalpy formulation for glaciers and ice sheets. Journal of Glaciology, 58(209), 441--457. https://doi.org/10.3189/2012jog11j088 ↩↩↩
-
Kleiner, T., Rückamp, M., Bondzio, J. H., & Humbert, A. (2015). Enthalpy benchmark experiments for numerical ice sheet models. The Cryosphere, 9(1), 217--228. https://doi.org/10.5194/tc-9-217-2015 ↩
-
Wang, Y., Zhang, T., Xiao, C., Ren, J., & Wang, Y. (2020). A two-dimensional, higher-order, enthalpy-based thermomechanical ice flow model for mountain glaciers and its benchmark experiments. Computers & Geosciences, 141, 104526. https://doi.org/10.1016/j.cageo.2020.104526 ↩
-
Jouvet, G., Cook, S., Cordonnier, G., Finley, B., Henz, A., Herrmann, O., Maussion, F., Mey, J., Scherler, D., & Welty, E. (2026). Concepts and capabilities of the instructed glacier model. https://doi.org/10.31223/x5t99c ↩