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) {
36 Tpmp = EC->melting_temperature(EC->pressure(depth));
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;
46 double G,
double ice_k,
double K,
double SMB) {
47 const double depth = H - z, Tpmp = EC->melting_temperature(EC->pressure(depth));
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)));
std::shared_ptr< EnthalpyConverter > Ptr
double min(const array::Scalar &input)
Finds minimum over all the values in an array::Scalar object. Ignores ghosts.
double ice_temperature_guess(EnthalpyConverter::Ptr EC, double H, double z, double T_surface, double G, double ice_k)
double ice_temperature_guess_smb(EnthalpyConverter::Ptr EC, double H, double z, double T_surface, double G, double ice_k, double K, double SMB)
static double K(double psi_x, double psi_y, double speed, double epsilon)