PISM, A Parallel Ice Sheet Model stable 0.4.1779

src/verif/tests/exactTestO.c

Go to the documentation of this file.
00001 /*
00002    Copyright (C) 2011 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 "exactTestO.h"
00022 
00023 #define beta_CC        7.9e-8       /* K Pa-1; Clausius-Clapeyron constant [\\ref Luethi2002] */
00024 #define T_triple       273.15       /* K; triple point of pure water */
00025 #define L              3.34e5       /* J kg-1; latent heat of fusion for water [\\ref AschwandenBlatter] */
00026 #define grav           9.81         /* m/s^2; accel of gravity */
00027 
00028 #define rho_ICE        910.0        /* kg/(m^3)  density of ice */
00029 #define k_ICE          2.10         /* J/(m K s) = W/(m K)  thermal conductivity of ice */
00030 
00031 #define k_BEDROCK      3.0          /* J/(m K s) = W/(m K)  thermal conductivity of bedrock */
00032 
00033 #define H0             3000.0       /* m */
00034 #define B0             1000.0       /* m */
00035 #define Ts             223.15       /* K */
00036 #define G              0.042        /* W/(m^2) = J m-2 s-1 */
00037 
00038 
00089 int exactO(const double z, double *TT, double *Tm, double *qice, double *qbed, double *bmelt) {
00090 
00091   double P_base;
00092 
00093   P_base = rho_ICE * grav * H0;     /* Pa; hydrostatic approximation to pressure
00094                                        at base */
00095 
00096   *Tm = T_triple - beta_CC * P_base;/* K; pressure-melting point at base */
00097 
00098   *qice = - k_ICE * (Ts - *Tm) / H0;/* J m-1 K-1 s-1 K m-1 = J m-2 s-1 = W m-2;
00099                                        equilibrium heat flux everywhere in ice */
00100 
00101   *qbed = G;                        /* J m-2 s-1 = W m-2; equilibrium heat flux
00102                                        everywhere in bedrock */
00103 
00104   *bmelt = (G - *qice) / (L * rho_ICE);/* J m-2 s-1 / (J kg-1 kg m-3) = m s-1;
00105                                           ice-equivalent basal melt rate */
00106 
00107   if (z > H0) {
00108     *TT = Ts;                       /* K; in air above ice */
00109   } else if (z >= 0.0) {
00110     *TT = *Tm + (Ts - *Tm) * (z / H0); /* in ice */
00111   } else {
00112     *TT = *Tm - (G / k_BEDROCK) * z;   /* in bedrock */
00113   }
00114   return 0;
00115 }
00116 
00117 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines