PISM, A Parallel Ice Sheet Model 2.2.2-d6b3a29ca committed by Constantine Khrulev on 2025-03-28
|
Converts between specific enthalpy and temperature or liquid content. More...
#include <EnthalpyConverter.hh>
Public Types | |
typedef std::shared_ptr< EnthalpyConverter > | Ptr |
Public Member Functions | |
EnthalpyConverter (const Config &config) | |
virtual | ~EnthalpyConverter ()=default |
bool | is_temperate (double E, double P) const |
bool | is_temperate_relaxed (double E, double P) const |
A relaxed version of is_temperate() . | |
double | temperature (double E, double P) const |
Get absolute (not pressure-adjusted) ice temperature (K) from enthalpy and pressure. | |
double | melting_temperature (double P) const |
Get melting temperature from pressure p. | |
double | pressure_adjusted_temperature (double E, double P) const |
Get pressure-adjusted ice temperature, in kelvin, from enthalpy and pressure. | |
double | water_fraction (double E, double P) const |
Get liquid water fraction from enthalpy and pressure. | |
double | enthalpy (double T, double omega, double P) const |
Compute enthalpy from absolute temperature, liquid water fraction, and pressure. | |
double | enthalpy_cts (double P) const |
Get enthalpy E_s(p) at cold-temperate transition point from pressure p. | |
double | enthalpy_liquid (double P) const |
Compute the maximum allowed value of ice enthalpy (corresponds to \omega = 1 ). | |
double | enthalpy_permissive (double T, double omega, double P) const |
Compute enthalpy more permissively than enthalpy(). | |
double | c () const |
Specific heat capacity of ice. | |
double | L (double T_pm) const |
double | pressure (double depth) const |
Get pressure in ice from depth below surface using the hydrostatic assumption. | |
void | pressure (const std::vector< double > &depth, unsigned int ks, std::vector< double > &result) const |
Compute pressure in a column of ice. Does not check validity of depth . | |
Protected Member Functions | |
double | temperature_cold (double E) const |
Convert enthalpy into temperature (cold case). | |
double | enthalpy_cold (double T) const |
Convert temperature into enthalpy (cold case). | |
Static Protected Member Functions | |
static void | validate_E_P (double E, double P) |
static void | validate_T_omega_P (double T, double omega, double P) |
Protected Attributes | |
double | m_T_melting |
melting temperature of pure water at atmospheric pressure | |
double | m_L |
latent heat of fusion of water at atmospheric pressure | |
double | m_c_i |
specific heat capacity of ice | |
double | m_c_w |
specific heat capacity of pure water | |
double | m_rho_i |
density of ice | |
double | m_g |
acceleration due to gravity | |
double | m_p_air |
atmospheric pressure | |
double | m_beta |
beta in the Clausius-Clapeyron relation ( \diff{T_m}{p} = - \beta ). | |
double | m_T_tolerance |
temperature tolerance used in is_temperate() in cold ice mode | |
double | m_T_0 |
reference temperature in the definition of ice enthalpy | |
bool | m_cold_mode |
if cold ice methods are selected, use is_temperate() check based on temperature, not enthalpy | |
Converts between specific enthalpy and temperature or liquid content.
Use this way, for example within IceModel with Config config member:
The three methods that get the enthalpy from temperatures and liquid fractions, namely enthalpy(), enthalpy_permissive() are more strict about error checking. They throw RuntimeError if their arguments are invalid.
This class is documented by [AschwandenBuelerKhroulevBlatter].
Maps from (H,p) to (T,\omega,p) and back.
Requirements:
Definition at line 51 of file EnthalpyConverter.hh.