PISM, A Parallel Ice Sheet Model stable 0.4.1779

src/base/stressbalance/SIA_Sliding.hh

Go to the documentation of this file.
00001 // Copyright (C) 2004--2011 Jed Brown, Ed Bueler and Constantine Khroulev
00002 //
00003 // This file is part of PISM.
00004 //
00005 // PISM is free software; you can redistribute it and/or modify it under the
00006 // terms of the GNU General Public License as published by the Free Software
00007 // Foundation; either version 2 of the License, or (at your option) any later
00008 // version.
00009 //
00010 // PISM is distributed in the hope that it will be useful, but WITHOUT ANY
00011 // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
00012 // FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
00013 // details.
00014 //
00015 // You should have received a copy of the GNU General Public License
00016 // along with PISM; if not, write to the Free Software
00017 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
00018 
00019 #ifndef _SIA_SLIDING_H_
00020 #define _SIA_SLIDING_H_
00021 
00022 #include "ShallowStressBalance.hh"
00023 
00030 class SIA_Sliding : public ShallowStressBalance
00031 {
00032 public:
00033   SIA_Sliding(IceGrid &g, IceBasalResistancePlasticLaw &b, IceFlowLaw &i, EnthalpyConverter &e,
00034               const NCConfigVariable &conf)
00035     : ShallowStressBalance(g, b, i, e, conf)
00036   {
00037     verification_mode = false;
00038     eisII_experiment = "";
00039     allocate();
00040   }
00041   virtual ~SIA_Sliding() {}
00042 
00043   virtual PetscErrorCode init(PISMVars &vars);
00044 
00045   virtual PetscErrorCode update(bool fast);
00046 
00047 protected:
00048   virtual PetscErrorCode allocate();
00049 
00050   virtual PetscErrorCode compute_surface_gradient(IceModelVec2Stag &h_x, IceModelVec2Stag &h_y);
00051 
00052   virtual PetscErrorCode surface_gradient_eta(IceModelVec2Stag &h_x, IceModelVec2Stag &h_y);
00053   virtual PetscErrorCode surface_gradient_haseloff(IceModelVec2Stag &h_x, IceModelVec2Stag &h_y);
00054   virtual PetscErrorCode surface_gradient_mahaffy(IceModelVec2Stag &h_x, IceModelVec2Stag &h_y);
00055 
00056   virtual PetscScalar basalVelocitySIA(PetscScalar /*x*/, PetscScalar /*y*/,
00057                                        PetscScalar H, PetscScalar T,
00058                                        PetscScalar /*alpha*/, PetscScalar mu,
00059                                        PetscScalar min_T) const;
00060   IceModelVec2Int *mask;
00061   IceModelVec2S *thickness, *surface, *bed, work_2d;
00062   IceModelVec3 *enthalpy;
00063   IceModelVec2Stag work_2d_stag[2]; // for the surface gradient
00064   double standard_gravity;
00065   
00066   bool verification_mode;
00067   string eisII_experiment;
00068 };
00069 
00070 #endif /* _SIA_SLIDING_H_ */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines