MohrCoulombPointwise.hh (2884B)
1 /* Copyright (C) 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 #ifndef MOHRCOULOMBPOINTWISE_H 20 #define MOHRCOULOMBPOINTWISE_H 21 22 #include "pism/util/Config.hh" 23 24 namespace pism { 25 26 /*! 27 * Implementation of the Mohr-Coulomb basal yield stress model *at a point*. 28 */ 29 class MohrCoulombPointwise { 30 public: 31 MohrCoulombPointwise(Config::ConstPtr config); 32 33 /*! 34 * Compute basal yield stress 35 * 36 * @param[in] delta fraction of overburden pressure 37 * @param[in] P_overburden overburden pressure (Pa) 38 * @param[in] water_thickness till water thickness (m) 39 * @param[in] phi till friction angle (degrees) 40 * 41 * returns basal yield stress in Pascal 42 */ 43 double yield_stress(double delta, 44 double P_overburden, 45 double water_thickness, 46 double phi) const; 47 48 /*! 49 * Inverse of `yield_stress()`. 50 * 51 * @param[in] delta fraction of overburden pressure 52 * @param[in] P_overburden overburden pressure (Pa) 53 * @param[in] water_thickness till water thickness 54 * @param[in] yield_stress basal yield stress (Pa) 55 * 56 * returns till friction angle in degrees 57 */ 58 double till_friction_angle(double delta, 59 double P_overburden, 60 double water_thickness, 61 double yield_stress) const; 62 63 /*! 64 * Compute effective pressure on till 65 * 66 * Used in `yield_stress()` and `till_friction_angle()`. 67 * 68 * @param[in] delta fraction of overburden pressure 69 * @param[in] P_overburden overburden pressure (Pa) 70 * @param[in] water_thickness till water thickness 71 */ 72 double effective_pressure(double delta, 73 double P_overburden, 74 double water_thickness) const; 75 private: 76 //! Maximum till water thickness 77 double m_W_till_max; 78 //! Cohesion of till 79 double m_till_cohesion; 80 //! Reference effective pressure 81 double m_reference_effective_pressure; 82 //! Reference void ratio 83 double m_reference_void_ratio; 84 //! Coefficient of compressibility of till 85 double m_compressibility_coefficient; 86 }; 87 88 } // end of namespace pism 89 90 91 #endif /* MOHRCOULOMBPOINTWISE_H */