23#include "pism/energy/bootstrapping.hh"
24#include "pism/util/EnthalpyConverter.hh"
30 double H,
double z,
double T_surface,
31 double G,
double ice_k) {
39 beta = (4.0/21.0) * (
G / (2.0 * ice_k * H * H * H)),
40 alpha = (
G / (2.0 * H * ice_k)) - 2.0 * H * H * beta;
42 return std::min(Tpmp, T_surface + alpha * d2 + beta * d2 * d2);
46 double G,
double ice_k,
double K,
double SMB) {
51 return std::min(Tpmp,
G / ice_k * depth + T_surface);
55 const double C0 = (
G * sqrt(M_PI * H * K)) / (ice_k * sqrt(2.0 * SMB)),
56 gamma0 = sqrt(SMB * H / (2.0 * K));
58 return std::min(Tpmp, T_surface + C0 * (erf(gamma0) - erf(gamma0 * z / H)));
double melting_temperature(double P) const
Get melting temperature from pressure p.
double pressure(double depth) const
Get pressure in ice from depth below surface using the hydrostatic assumption.
Converts between specific enthalpy and temperature or liquid content.
double ice_temperature_guess_smb(EnthalpyConverter &EC, double H, double z, double T_surface, double G, double ice_k, double K, double SMB)
double ice_temperature_guess(EnthalpyConverter &EC, double H, double z, double T_surface, double G, double ice_k)