URI:
       tStressBalance_diagnostics.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
       ---
       tStressBalance_diagnostics.hh (6720B)
       ---
            1 // Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 Constantine Khroulev
            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 _PISMSTRESSBALANCE_DIAGNOSTICS_H_
           20 #define _PISMSTRESSBALANCE_DIAGNOSTICS_H_
           21 
           22 #include "StressBalance.hh"
           23 #include "pism/util/Diagnostic.hh"
           24 
           25 namespace pism {
           26 namespace stressbalance {
           27 
           28 //! \brief Computes the vertically-averaged ice velocity.
           29 class PSB_velbar : public Diag<StressBalance>
           30 {
           31 public:
           32   PSB_velbar(const StressBalance *m);
           33 protected:
           34   virtual IceModelVec::Ptr compute_impl() const;
           35 };
           36 
           37 //! \brief Computes velbar_mag, the magnitude of vertically-integrated horizontal
           38 //! velocity of ice and masks out ice-free areas.
           39 class PSB_velbar_mag : public Diag<StressBalance>
           40 {
           41 public:
           42   PSB_velbar_mag(const StressBalance *m);
           43 protected:
           44   virtual IceModelVec::Ptr compute_impl() const;
           45 };
           46 
           47 //! \brief Computes uflux and vflux, components of vertically-integrated horizontal
           48 //! flux of ice.
           49 class PSB_flux : public Diag<StressBalance>
           50 {
           51 public:
           52   PSB_flux(const StressBalance *m);
           53 protected:
           54   virtual IceModelVec::Ptr compute_impl() const;
           55 };
           56 
           57 //! \brief Computes flux_mag, the magnitude of vertically-integrated horizontal
           58 //! flux of ice.
           59 class PSB_flux_mag : public Diag<StressBalance>
           60 {
           61 public:
           62   PSB_flux_mag(const StressBalance *m);
           63 protected:
           64   virtual IceModelVec::Ptr compute_impl() const;
           65 };
           66 
           67 //! \brief Computes velbase_mag, the magnitude of horizontal velocity of ice at base
           68 //! of ice and masks out ice-free areas.
           69 class PSB_velbase_mag : public Diag<StressBalance>
           70 {
           71 public:
           72   PSB_velbase_mag(const StressBalance *m);
           73 protected:
           74   virtual IceModelVec::Ptr compute_impl() const;
           75 };
           76 
           77 //! \brief Computes velsurf_mag, the magnitude of horizontal ice velocity at the
           78 //! surface.
           79 class PSB_velsurf_mag : public Diag<StressBalance>
           80 {
           81 public:
           82   PSB_velsurf_mag(const StressBalance *m);
           83 protected:
           84   virtual IceModelVec::Ptr compute_impl() const;
           85 };
           86 
           87 //! \brief Computes velsurf, the horizontal velocity of ice at ice surface.
           88 class PSB_velsurf : public Diag<StressBalance>
           89 {
           90 public:
           91   PSB_velsurf(const StressBalance *m);
           92 protected:
           93   virtual IceModelVec::Ptr compute_impl() const;
           94 };
           95 
           96 //! Computes vertical ice velocity (relative to the geoid).
           97 /*!
           98   \f[
           99   w(s) = \tilde w(s) + \frac{\partial b}{\partial t} + U(s) \cdot \nabla b
          100   \f]
          101   in grounded areas. In floating shelves
          102   \f[
          103   w(s) = \tilde w(s) - \tilde  w(z_{\text{sea level}}).
          104   \f]
          105 
          106   This ensures that \f$\tilde w(z_{\text{sea level}}) = 0\f$.
          107 */
          108 class PSB_wvel : public Diag<StressBalance>
          109 {
          110 public:
          111   PSB_wvel(const StressBalance *m);
          112   virtual IceModelVec::Ptr compute(bool zero_above_ice) const;
          113 protected:
          114   virtual IceModelVec::Ptr compute_impl() const;
          115 };
          116 
          117 //! Computes wvelsurf, the vertical velocity of ice at ice surface.
          118 class PSB_wvelsurf : public Diag<StressBalance>
          119 {
          120 public:
          121   PSB_wvelsurf(const StressBalance *m);
          122 protected:
          123   virtual IceModelVec::Ptr compute_impl() const;
          124 };
          125 
          126 //! Computes wvelbase, the vertical velocity of ice at the base of ice.
          127 class PSB_wvelbase : public Diag<StressBalance>
          128 {
          129 public:
          130   PSB_wvelbase(const StressBalance *m);
          131 protected:
          132   virtual IceModelVec::Ptr compute_impl() const;
          133 };
          134 
          135 //! \brief Computes horizontal ice velocity at the base of ice.
          136 class PSB_velbase : public Diag<StressBalance>
          137 {
          138 public:
          139   PSB_velbase(const StressBalance *m);
          140 protected:
          141   virtual IceModelVec::Ptr compute_impl() const;
          142 };
          143 
          144 //! \brief Computes basal frictional heating.
          145 class PSB_bfrict : public Diag<StressBalance>
          146 {
          147 public:
          148   PSB_bfrict(const StressBalance *m);
          149 protected:
          150   virtual IceModelVec::Ptr compute_impl() const;
          151 };
          152 
          153 //! \brief Computes the x-component of the horizontal ice velocity.
          154 class PSB_uvel : public Diag<StressBalance>
          155 {
          156 public:
          157   PSB_uvel(const StressBalance *m);
          158 protected:
          159   virtual IceModelVec::Ptr compute_impl() const;
          160 };
          161 
          162 //! \brief Computes the y-component of the horizontal ice velocity.
          163 class PSB_vvel : public Diag<StressBalance>
          164 {
          165 public:
          166   PSB_vvel(const StressBalance *m);
          167 protected:
          168   virtual IceModelVec::Ptr compute_impl() const;
          169 };
          170 
          171 //! \brief Computes vertical velocity of ice, relative to the bed directly
          172 //! below.
          173 class PSB_wvel_rel : public Diag<StressBalance>
          174 {
          175 public:
          176   PSB_wvel_rel(const StressBalance *m);
          177 protected:
          178   virtual IceModelVec::Ptr compute_impl() const;
          179 };
          180 
          181 //! \brief Reports the volumetric strain heating (3D).
          182 class PSB_strainheat : public Diag<StressBalance>
          183 {
          184 public:
          185   PSB_strainheat(const StressBalance *m);
          186 protected:
          187   virtual IceModelVec::Ptr compute_impl() const;
          188 };
          189 
          190 //! \brief Reports the vertically-integrated (2D) principal strain rates.
          191 class PSB_strain_rates : public Diag<StressBalance>
          192 {
          193 public:
          194   PSB_strain_rates(const StressBalance *m);
          195 protected:
          196   virtual IceModelVec::Ptr compute_impl() const;
          197 };
          198 
          199 //! \brief Reports the vertically-integrated (2D) deviatoric stresses.
          200 class PSB_deviatoric_stresses : public Diag<StressBalance>
          201 {
          202 public:
          203   PSB_deviatoric_stresses(const StressBalance *m);
          204 protected:
          205   virtual IceModelVec::Ptr compute_impl() const;
          206 };
          207 
          208 //! \brief Reports the pressure within the ice (3D).
          209 class PSB_pressure : public Diag<StressBalance>
          210 {
          211 public:
          212   PSB_pressure(const StressBalance *m);
          213 protected:
          214   virtual IceModelVec::Ptr compute_impl() const;
          215 };
          216 
          217 //! \brief Reports the xz component of the shear stress within the ice (3D), according to the SIA formula.
          218 class PSB_tauxz : public Diag<StressBalance>
          219 {
          220 public:
          221   PSB_tauxz(const StressBalance *m);
          222 protected:
          223   virtual IceModelVec::Ptr compute_impl() const;
          224 };
          225 
          226 //! \brief Reports the yz component of the shear stress within the ice (3D), according to the SIA formula.
          227 class PSB_tauyz : public Diag<StressBalance>
          228 {
          229 public:
          230   PSB_tauyz(const StressBalance *m);
          231 protected:
          232   virtual IceModelVec::Ptr compute_impl() const;
          233 };
          234 
          235 /*! @brief tensile von Mises stress */
          236 class PSB_vonmises_stress : public Diag<StressBalance>
          237 {
          238 public:
          239   PSB_vonmises_stress(const StressBalance *m);
          240   IceModelVec::Ptr compute_impl() const;
          241 };
          242 
          243 } // end of namespace stressbalance
          244 } // end of namespace pism
          245 
          246 #endif /* _PISMSTRESSBALANCE_DIAGNOSTICS_H_ */