PISM, A Parallel Ice Sheet Model stable 0.4.1779

src/verif/tests/exactTestN.h

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 #ifndef __exactTestN_h
00022 #define __exactTestN_h 1
00023 
00024 #ifdef __cplusplus
00025 extern "C"
00026 {
00027 #endif
00028 
00029 /*
00030 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
00031 ! exactTestN is a C implementation of the parabolic solution in 
00032 ! Bodvardsson (1955), treated here as a manufactured exact solution to
00033 ! a steady-state SSA flow problem, including the mass continuity equation.
00034 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
00035 */
00036 
00037 int params_exactN(double *H0, double *L0, double *xc,
00038                   double *a, double *Hela, double *k,
00039                   double *H_xc, double *T_xc);
00040    /* outputs: H0   = dome thickness (m)
00041                L0   = full flow-line length from dome to margin where H->0 (m)
00042                xc   = in Bueler interpretation, the location of the calving front (m)
00043                a    = surface mass balance lapse rate, with elevation (s-1)
00044                Hela = elevation of equilibrium line (m)
00045                k    = coefficient for sliding
00046                H_xc = thickness at calving front
00047                T_xc = vertically-integrated longitudinal stress at calving front */
00048 
00049 int exactN(double x, double *H, double *hx, double *u, double *M, double *B, double *beta);
00050    /* input    : x                   (m; 0.0 <= x <= L0)
00051 
00052       output   : H = H(x)            (m; ice thickness)
00053                  hx = h_x(x)         (; surface slope)
00054                  u = u(x)            (m s-1; ice horizontal velocity)
00055                  M = M(x)            (m s-1; surface mass balance)
00056                  B = B(x)            (Pa s^(1/3); ice hardness)
00057                  beta = beta(x)      (Pa s m-1; linear sliding coefficient)
00058 
00059       Assumes n = 3.
00060       
00061       In Bueler interpretation, M(x) and A(x) are constructed so that the
00062       solution in Bodvardsson (1955) can be thought of as solving mass continuity
00063       and SSA stress balance simultaneously:
00064 
00065          M(x) - (u H)_x = 0
00066 
00067          ( 2 H B(x) |u_x|^((1/n)-1) u_x )_x - beta(x) u = rho g H h_x
00068          
00069       Here H = H(x) is ice thickness and u = u(x) is ice velocity.  Also
00070       h(x) = H(x), up to a constant the user may choose, because the bed is flat.
00071       Following Bodvardsson, here is the equilibrium line altitude, surface
00072       mass balance, and the sliding coefficient:
00073          
00074          Hela = H0 / 1.5
00075          M(x) = a (h(x) - Hela)
00076          beta(x) = k rho g H(x)
00077       
00078       The boundary conditions are
00079       
00080          H(0) = H0
00081 
00082       and
00083       
00084          T(xc) = 0.5 (1 - rho/rhow) rho g H(xc)^2
00085 
00086       where T(x) is the vertically-integrated viscous stress,
00087       
00088          T(x) = 2 H(x) B(x) |u_x|^((1/n)-1) u_x.
00089 
00090       But B(x) is chosen so that this quantity is constant:  T(x) = T0.
00091 
00092       The boundary condition at x = xc implies that the calving front is
00093       exactly at the location where the ice sheet reaches flotation.
00094 
00095       return value =
00096          0 if successful
00097          1 if x < 0
00098          2 if x > L0
00099       
00100    */
00101 
00102 #ifdef __cplusplus
00103 }
00104 #endif
00105 
00106 #endif  /* __exactTestN_h */
00107 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines