URI:
       tFrontalMeltPhysics.cc - pism - [fork] customized build of PISM, the parallel ice sheet model (tillflux branch)
  HTML git clone git://src.adamsgaard.dk/pism
   DIR Log
   DIR Files
   DIR Refs
   DIR LICENSE
       ---
       tFrontalMeltPhysics.cc (2684B)
       ---
            1 /* Copyright (C) 2018, 2019 PISM Authors
            2  *
            3  * This file is part of PISM.
            4  *
            5  * PISM is free software; you can redistribute it and/or modify it under the
            6  * terms of the GNU General Public License as published by the Free Software
            7  * Foundation; either version 3 of the License, or (at your option) any later
            8  * version.
            9  *
           10  * PISM is distributed in the hope that it will be useful, but WITHOUT ANY
           11  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
           12  * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
           13  * details.
           14  *
           15  * You should have received a copy of the GNU General Public License
           16  * along with PISM; if not, write to the Free Software
           17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
           18  */
           19 #include <cmath> // pow
           20 
           21 #include "FrontalMeltPhysics.hh"
           22 
           23 #include "pism/util/ConfigInterface.hh"
           24 
           25 namespace pism {
           26 namespace frontalmelt {
           27 
           28 FrontalMeltPhysics::FrontalMeltPhysics(const Config &config) {
           29   m_alpha = config.get_number("frontal_melt.routing.power_alpha");
           30   m_beta  = config.get_number("frontal_melt.routing.power_beta");
           31   m_A     = config.get_number("frontal_melt.routing.parameter_a");
           32   m_B     = config.get_number("frontal_melt.routing.parameter_b");
           33 }
           34 
           35 /*!
           36  * Parameterization of the frontal melt rate.
           37  *
           38  * This function implements equation 1 from [@ref Rignotetal2016].
           39  *
           40  * q_m = (A * h * Q_sg ^{\alpha} + B) * TF^{\beta}
           41  *
           42  * where A, B, alpha, beta are tuning parameters. Note that Rignot (2016) is an update on
           43  * Xu 2013 with slightly different parameter values.
           44  *
           45  * @param[in] h water depth, meters
           46  * @param[in] q_sg subglacial water flux, m / day
           47  * @param[in] TF thermal forcing, Celsius
           48  *
           49  * @returns frontal melt rate, m / day.
           50  */
           51 double FrontalMeltPhysics::frontal_melt_from_undercutting(double h, double q_sg, double TF) const {
           52   if (h <= 0.0 or q_sg < 0.0 or TF < 0.0) {
           53     return 0.0;
           54   }
           55 
           56   return (m_A * h * pow(q_sg, m_alpha) + m_B) * pow(TF, m_beta);
           57 }
           58 
           59 /*!
           60  * Parameterization of the frontal melt rate.
           61  *
           62  * This function implements the ISMIP6 equation
           63  *
           64  * q_m = (A * h * Q_sg ^{\alpha} + B) * TF^{\beta}
           65  *
           66  * where A, B, alpha, beta are tuning parameters. Note that Rignot (2016) is an update on
           67  * Xu 2013 with slightly different parameter values.
           68  *
           69  * @param[in] h water depth, meters
           70  * @param[in] q_sg subglacial water flux, m / day
           71  * @param[in] TF thermal forcing, Celsius
           72  *
           73  * @returns frontal melt rate, m / day.
           74  */
           75 double FrontalMeltPhysics::frontal_melt_from_ismip6(double h, double q_sg, double TF) const {
           76   return (m_A * h * pow(q_sg, m_alpha) + m_B) * pow(TF, m_beta);
           77 }
           78 
           79 } // end of namespace frontalmeltmodel
           80 } // end of namespace pism