URI:
       tGoldsbyKohlstedt.hh - 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
       ---
       tGoldsbyKohlstedt.hh (3611B)
       ---
            1 /* Copyright (C) 2015, 2016 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 
           20 #ifndef _GOLDSBYKOHLSTEDT_H_
           21 #define _GOLDSBYKOHLSTEDT_H_
           22 
           23 #include "FlowLaw.hh"
           24 
           25 namespace pism {
           26 namespace rheology {
           27 
           28 // Hybrid (Goldsby-Kohlstedt/Glen) ice flow law
           29 
           30 struct GKparts {
           31   double eps_total, eps_diff, eps_disl, eps_basal, eps_gbs;
           32 };
           33 
           34 //! A hybrid of Goldsby-Kohlstedt (2001) ice (constitutive form) and Paterson-Budd (1982)-Glen (viscosity form).
           35 /*!
           36   Each FlowLaw has both a forward flow law in "constitutive law" form ("flow_from_temp()") and an
           37   inverted-and-vertically-integrated flow law ("effective_viscosity()").  Only the
           38   former form of the flow law is known for Goldsby-Kohlstedt.  If one can
           39   invert-and-vertically-integrate the G-K law then one can build a "trueGKIce"
           40   derived class.
           41 */
           42 class GoldsbyKohlstedt : public FlowLaw {
           43 public:
           44   GoldsbyKohlstedt(const std::string &prefix,
           45                    const Config &config,
           46                    EnthalpyConverter::Ptr EC);
           47 protected:
           48   // NB! not virtual
           49   double averaged_hardness_impl(double thickness,
           50                                    int kbelowH,
           51                                    const double *zlevels,
           52                                    const double *enthalpy) const __attribute__((noreturn));
           53 
           54   virtual double flow_impl(double stress, double E,
           55                            double pressure, double grainsize) const;
           56 
           57   // NB! not virtual
           58   double softness_impl(double E, double p) const __attribute__((noreturn));
           59   double hardness_impl(double E, double p) const;
           60   virtual double flow_from_temp(double stress, double temp,
           61                                 double pressure, double gs) const;
           62   GKparts flowParts(double stress, double temp, double pressure) const;
           63 
           64   double  m_V_act_vol,  m_d_grain_size,
           65   //--- diffusional flow ---
           66     m_diff_crit_temp, m_diff_V_m, m_diff_D_0v, m_diff_Q_v, m_diff_D_0b, m_diff_Q_b, m_diff_delta,
           67   //--- dislocation creep ---
           68     m_disl_crit_temp, m_disl_A_cold, m_disl_A_warm, m_disl_n, m_disl_Q_cold, m_disl_Q_warm,
           69   //--- easy slip (basal) ---
           70     m_basal_A, m_basal_n, m_basal_Q,
           71   //--- grain boundary sliding ---
           72     m_gbs_crit_temp, m_gbs_A_cold, m_gbs_A_warm, m_gbs_n, m_gbs_Q_cold,
           73     m_p_grain_sz_exp, m_gbs_Q_warm;
           74 };
           75 
           76 //! Derived class of GoldsbyKohlstedt for testing purposes only.
           77 /*!
           78   GoldsbyKohlstedtStripped is a simplification of Goldsby-Kohlstedt. Compare to that
           79   used in Peltier et al 2000, which is even simpler.
           80 */
           81 class GoldsbyKohlstedtStripped : public GoldsbyKohlstedt {
           82 public:
           83   GoldsbyKohlstedtStripped(const std::string &prefix,
           84                            const Config &config, EnthalpyConverter::Ptr EC);
           85 
           86 protected:
           87   virtual double flow_from_temp(double stress, double temp,
           88                                 double pressure, double gs) const;
           89 
           90   double m_d_grain_size_stripped;
           91 };
           92 
           93 } // end of namespace rheology
           94 } // end of namespace pism
           95 
           96 
           97 #endif /* _GOLDSBYKOHLSTEDT_H_ */