|
PISM, A Parallel Ice Sheet Model stable 0.4.1779
|
00001 /* 00002 Copyright (C) 2010 Ed Bueler 00003 00004 This file is part of PISM. 00005 00006 PISM is free software; you can redistribute it and/or modify it under the 00007 terms of the GNU General Public License as published by the Free Software 00008 Foundation; either version 2 of the License, or (at your option) any later 00009 version. 00010 00011 PISM is distributed in the hope that it will be useful, but WITHOUT ANY 00012 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 00013 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 00014 details. 00015 00016 You should have received a copy of the GNU General Public License 00017 along with PISM; if not, write to the Free Software 00018 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 00019 */ 00020 00021 #include <math.h> 00022 #include "exactTestN.h" 00023 00024 #define secpera 31556926.0 /* seconds per year; 365.2422 days */ 00025 #define g 9.81 00026 #define rho 910.0 /* ice density; kg m-3 */ 00027 #define rhow 1028.0 /* sea water density; kg m-3 */ 00028 #define n 3.0 /* Glen power */ 00029 00030 int params_exactN(double *H0, double *L0, double *xc, 00031 double *a, double *Hela, double *k, 00032 double *H_xc, double *T_xc) { 00033 double s; 00034 00035 /* geometry */ 00036 *H0 = 3000.0; 00037 *L0 = 500.0e3; 00038 *xc = 0.9 * (*L0); 00039 00040 /* mass balance */ 00041 *a = 0.003 / secpera; /* s-1; mass balance gradient with elevation */ 00042 *Hela = (*H0) / 1.5; /* m; H0 = 1.5 Hela exactly */ 00043 00044 /* sliding */ 00045 *k = 9.0 * (*Hela) / ((*a) * (*L0) * (*L0)); /* s m-1; choose k so that eqn (24) gives our L0 */ 00046 00047 /* grounded calving front boundary condition, imposed at xc = .9 L0, determines 00048 constant vertically-integrated longitudinal stress T; see (2.12) in Schoof (2006); 00049 treats Hc = H(xc) as exactly at flotation */ 00050 s = (*xc) / (*L0); 00051 *H_xc = (*H0) * (1.0 - s * s); 00052 *T_xc = 0.5 * (1.0 - rho / rhow) * rho * g * (*H_xc) * (*H_xc); 00053 00054 return 0; 00055 } 00056 00057 00058 int exactN(double x, double *H, double *hx, double *u, double *M, double *B, double *beta) { 00059 00060 double H0, L0, xc, a, Hela, k, Hc, Tc; 00061 double q, hxx, ux; 00062 00063 params_exactN(&H0, &L0, &xc, &a, &Hela, &k, &Hc, &Tc); 00064 00065 if (x < 0.0) { return 1; } 00066 if (x > L0) { return 2; } 00067 00068 q = (1.0 / n) - 1.0; /* a useful power */ 00069 hxx = - 2.0 * H0 / (L0 * L0); /* constant concavity of h(x) */ 00070 ux = - hxx / k; /* constant strain rate */ 00071 00072 *H = H0 * (1.0 - (x / L0) * (x / L0)); /* eqn (23) in Bodvardsson */ 00073 00074 *hx = hxx * x; 00075 00076 *u = - (*hx) / k; /* eqn (10) in Bodvardson, once SIA is dropped */ 00077 00078 *M = a * ((*H) - Hela); /* page 6 in Bodvardsson, just before eqn (23) */ 00079 00080 *B = Tc / ( 2.0 * (*H) * pow(fabs(ux),q) * ux ); /* Bueler interpretation */ 00081 00082 *beta = k * rho * g * (*H); 00083 00084 return 0; 00085 } 00086 00087
1.7.3