|
PISM, A Parallel Ice Sheet Model stable 0.4.1779
|
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 __basal_resistance_hh 00020 #define __basal_resistance_hh 00021 00022 #include <petsc.h> 00023 00025 00029 class IceBasalResistancePlasticLaw { 00030 public: 00031 IceBasalResistancePlasticLaw(PetscScalar regularizationConstant, bool pseudoPlastic, 00032 PetscScalar pseudoExponent, PetscScalar pseudoUThreshold); 00033 virtual PetscErrorCode printInfo(int verbthresh, MPI_Comm com); 00034 virtual PetscScalar drag(PetscScalar tauc, 00035 PetscScalar vx, PetscScalar vy); 00036 // Also get the derivative of drag with respect to \f$ alpha=\frac 1 2 \abs{u}^2 \f$. 00037 virtual void dragWithDerivative(PetscReal tauc, PetscScalar vx, PetscScalar vy, 00038 PetscScalar *drag, PetscScalar *ddrag) const; 00039 virtual ~IceBasalResistancePlasticLaw() {} 00040 00041 PetscReal plastic_regularize, pseudo_q, pseudo_u_threshold; 00042 bool pseudo_plastic; 00043 }; 00044 00045 #endif /* __basal_resistance_hh */ 00046
1.7.3