PISM, A Parallel Ice Sheet Model stable 0.4.1779

src/verif/tests/exactTestN.c

Go to the documentation of this file.
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 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines