URI:
       texactTestP.hh - pism - [fork] customized build of PISM, the parallel ice sheet model (tillflux branch)
  HTML git clone git://src.adamsgaard.dk/pism
   DIR Log
   DIR Files
   DIR Refs
   DIR LICENSE
       ---
       texactTestP.hh (2968B)
       ---
            1 /*
            2    Copyright (C) 2012-2013, 2016 Ed Bueler
            3 
            4    This file is part of PISM.
            5 
            6    PISM is free software; you can redistribute it and/or modify it under the
            7    terms of the GNU General Public License as published by the Free Software
            8    Foundation; either version 3 of the License, or (at your option) any later
            9    version.
           10 
           11    PISM is distributed in the hope that it will be useful, but WITHOUT ANY
           12    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
           13    FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
           14    details.
           15 
           16    You should have received a copy of the GNU General Public License
           17    along with PISM; if not, write to the Free Software
           18    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
           19 */
           20 
           21 #ifndef __exactTestP_h
           22 #define __exactTestP_h 1
           23 
           24 #include <vector>
           25 #include <string>
           26 
           27 namespace pism {
           28 
           29 /*
           30 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           31 ! exactTestP is a C++ implementation of a nearly-exact solution to the 'distributed'
           32 ! subglacial hydrology model described in the draft manuscript
           33 !
           34 !    Ed Bueler & Ward van Pelt (2013) "A distributed model of subglacial
           35 !    and englacial hydrology in tidewater glaciers and ice sheets"
           36 !
           37 ! This nearly-exact solution requires solving an ODE numerically.
           38 ! Only the steady water thickness solution W(r) is computed here.  The
           39 ! pressure P can be computed by the formula P(W) which applies in steady state.
           40 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           41 */
           42 
           43 /* determines range on which W(r) is valid in Test P */
           44 #define TESTP_R0       25000.0         /* m */
           45 #define TESTP_L        0.9 * TESTP_R0  /* m */
           46 
           47 /* exit status of exactP() could be one of these; return of zero indicates success */
           48 #define TESTP_R_NEGATIVE          78463
           49 #define TESTP_W_EXCEEDS_WR        78464
           50 #define TESTP_W_BELOW_WCRIT       78465
           51 #define TESTP_INVALID_METHOD      78466
           52 #define TESTP_NOT_DONE            78467
           53 #define TESTP_NO_LIST             78482
           54 #define TESTP_LIST_NOT_DECREASING 78483
           55 #define TESTP_OLD_GSL             78484
           56 
           57 struct TestPParameters {
           58   TestPParameters(int N)
           59     : r(N), h(N), magvb(N), Wcrit(N), W(N), P(N) {
           60     error_code = 0;
           61   }
           62 
           63   int error_code;
           64   std::string error_message;
           65   std::vector<double> r, h, magvb, Wcrit, W, P;
           66 };
           67 
           68 
           69 TestPParameters exactP(const std::vector<double> &r,
           70                        double EPS_ABS, double EPS_REL, int ode_method);
           71 /* Input r in meters, assumes that values in are decreasing (r[0] > r[1] > ... > r[N-1] >= 0).
           72    ode_method = 1  : rk8pd is Runge-Kutta Prince-Dormand (8,9) [default]
           73                 2  : rk2   is Runge-Kutta (2,3)
           74                 3  : rkf45 is Runge-Kutta-Felberg (4,5)
           75                 4  : rkck  is Runge-Kutta Cash-Karp (4,5)
           76    None of these are implicit.  The Jacobian has not been implemented.
           77    Returns h (m), magvb (m s-1), W_c (m), W (m), P (Pa). */
           78 
           79 } // end of namespace pism
           80 
           81 #endif  /* __exactTestP_h */