Back to home page

MITgcm

 
 

    


Warning, /doc/phys_pkgs/streamice.rst is written in an unsupported language. File is not indexed.

view on githubraw file Latest commit 0bad585a on 2022-02-16 18:55:09 UTC
07e785229e dngo*0001 .. _sub_phys_pkg_streamice:
                0002 
                0003 STREAMICE Package
                0004 -----------------
                0005 
                0006 
                0007 Author: Daniel Goldberg
                0008 
                0009 .. _ssub_phys_pkg_streamice_intro:
                0010 
                0011 Introduction
                0012 ~~~~~~~~~~~~
                0013 
                0014 Package :filelink:`STREAMICE <pkg/streamice>` provides a dynamic land ice model for MITgcm.
                0015 It was created primarily to develop a TAF- and OpenAD-generated ice model adjoint
                0016 and to provide synchronous ice-ocean coupling through the :filelink:`SHELFICE <pkg/shelfice>` package.
                0017 It solves a set of dynamic equations appropriate for floating ice-shelf
                0018 flow as well as ice-stream and slower ice-sheet flow. It has been tested
                0019 at the scale of one or several ice streams, but has not been tested at the continental scale.
                0020 
                0021 
                0022 .. _ssub_phys_pkg_streamice_config:
                0023   
                0024 STREAMICE configuration
                0025 ~~~~~~~~~~~~~~~~~~~~~~~
                0026 
                0027 Compile-time options
                0028 ^^^^^^^^^^^^^^^^^^^^
                0029 
                0030 :filelink:`pkg/streamice` can be included on at compile
                0031 time in the ``packages.conf`` file by adding a line ``streamice``  (see :numref:`using_packages`).
                0032 
                0033 Parts of the :filelink:`pkg/streamice`  code can be enabled or disabled at compile time via
                0034 CPP flags. These options are set in :filelink:`STREAMICE_OPTIONS.h <pkg/streamice/STREAMICE_OPTIONS.h>`. 
                0035 
                0036 
                0037 .. tabularcolumns:: |\Y{.475}|\Y{.1}|\Y{.45}|
                0038 .. table:: CPP flags used by :filelink:`pkg/streamice`.
                0039    :name: tab_phys_pkg_streamice_cpp
                0040 
                0041    +-----------------------------------------------+---------+----------------------------------------------------------------------------------------------------------------------+
                0042    | CPP Flag Name                                 | Default | Description                                                                                                          |
                0043    +===============================================+=========+======================================================================================================================+
                0044    | :varlink:`STREAMICE_CONSTRUCT_MATRIX`         | #define | explicit construction of matrix for Picard iteration for velocity                                                    |
                0045    +-----------------------------------------------+---------+----------------------------------------------------------------------------------------------------------------------+
                0046    | :varlink:`STREAMICE_HYBRID_STRESS`            | #undef  | use L1L2 formulation for stress balance (default shallow shelf approx.)                                              |
                0047    +-----------------------------------------------+---------+----------------------------------------------------------------------------------------------------------------------+
                0048    | :varlink:`USE_ALT_RLOW`                       | #undef  | use package array for rLow rather than model                                                                         |
                0049    +-----------------------------------------------+---------+----------------------------------------------------------------------------------------------------------------------+
                0050    | :varlink:`STREAMICE_GEOM_FILE_SETUP`          | #undef  | use files rather than parameters in :varlink:`STREAMICE_PARM03` to configure boundaries                              |
                0051    +-----------------------------------------------+---------+----------------------------------------------------------------------------------------------------------------------+
                0052    | :varlink:`ALLOW_PETSC`                        | #undef  | enable interface to PETSc for velocity solver matrix solve                                                           |
                0053    +-----------------------------------------------+---------+----------------------------------------------------------------------------------------------------------------------+
                0054    | :varlink:`STREAMICE_COULOMB_SLIDING`          | #undef  | enable basal sliding of the form :eq:`coul_eqn`                                                                      |
                0055    +-----------------------------------------------+---------+----------------------------------------------------------------------------------------------------------------------+
                0056 
                0057 .. | :varlink:`STREAMICE_SMOOTH_FLOATATION`        | #undef  | subgrid parameterization of transition across the grounding line                                                     |
                0058 .. +-----------------------------------------------+---------+----------------------------------------------------------------------------------------------------------------------+
                0059   
                0060 
                0061 .. _ssub_phys_pkg_streamice_runtime:
                0062 
                0063 Enabling the package
                0064 ^^^^^^^^^^^^^^^^^^^^
                0065 
                0066 Once it has been compiled, :filelink:`pkg/streamice` is switched on/off at run-time by setting :varlink:`useSTREAMICE` to ``.TRUE.`` in file ``data.pkg``.
                0067 
                0068 Runtime parmeters: general flags and parameters
                0069 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                0070 
                0071 Run-time parameters are set in file ``data.streamice`` (read in :filelink:`streamice_readparms.F <pkg/streamice/streamice_readparms.F>`).
                0072 General :filelink:`pkg/streamice` parameters are set under :varlink:`STREAMICE_PARM01` as described in :numref:`tab_phys_pkg_streamice_runtimeparms`.
                0073 
                0074 
                0075 .. tabularcolumns:: |\Y{.3}|\Y{.125}|\Y{.6}|
                0076 .. table:: Run-time parameters and default values (defined under :varlink:`STREAMICE_PARM01` namelist)
                0077    :name: tab_phys_pkg_streamice_runtimeparms
                0078 
                0079    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0080    | Parameter                                 | Default                      | Description                                                                                                        |
                0081    +===========================================+==============================+====================================================================================================================+
                0082    | :varlink:`streamice_density`              |     910                      | the (uniform) density of land ice (kg/m\ :sup:`3`)                                                                 |
                0083    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0084    | :varlink:`streamice_density_ocean_avg`    |     1024                     | the (uniform) density of ocean (kg/m\ :sup:`3`)                                                                    |
                0085    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0086    | :varlink:`n_glen`                         |     3                        | Glen's Flow Law exponent (non-dim.)                                                                                |
                0087    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0088    | :varlink:`eps_glen_min`                   |     1e-12                    | minimum strain rate in Glen's Law (:math:`\varepsilon_0`, yr\ :sup:`-1`)                                           |
                0089    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0090    | :varlink:`eps_u_min`                      |     1e-6                     | minimum speed in nonlinear sliding law (:math:`u_0`, m/yr)                                                         |
                0091    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0092    | :varlink:`n_basal_friction`               |     0                        | exponent in nonlinear sliding law (non-dim.)                                                                       |
                0093    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0094    | :varlink:`streamice_cg_tol`               |     1e-6                     | tolerance of conjugate gradient of linear solve of Picard iteration for velocity                                   |
                0095    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0096    | :varlink:`streamice_lower_cg_tol`         |     TRUE                     | lower CG tolerance when nonlinear residual decreases by fixed factor                                               |
                0097    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0098    | :varlink:`streamice_max_cg_iter`          |     2000                     | maximum iterations in linear solve                                                                                 |
                0099    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0100    | :varlink:`streamice_maxcgiter_cpl`        |     0                        | as above when coupled with :filelink:`pkg/shelfice`                                                                |
                0101    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0102    | :varlink:`streamice_nonlin_tol`           |     1e-6                     | tolerance of nonlinear residual for velocity (relative to initial)                                                 |
                0103    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0104    | :varlink:`streamice_max_nl_iter`          |     100                      | maximum Picard iterations in solve for velocity                                                                    |
                0105    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0106    | :varlink:`streamice_maxnliter_cpl`        |     0                        | as above when coupled with :filelink:`pkg/shelfice`                                                                |
                0107    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0108    | :varlink:`streamice_nonlin_tol_fp`        |     1e-6                     | tolerance of relative change for velocity iteration (relative to magnitude)                                        |
                0109    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0110    | :varlink:`streamice_err_norm`             |    0                         | type of norm evaluated for error (:math:`p` in :math:`p`-norm; 0 is :math:`\infty`)                                |
                0111    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0112    | :varlink:`streamice_chkfixedptconvergence`|    FALSE                     | terminate velocity iteration based on relative change per iteration                                                |
                0113    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0114    | :varlink:`streamice_chkresidconvergence`  |    TRUE                      | terminate velocity iteration based on residual                                                                     |
                0115    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0116    | :varlink:`streamicethickInit`             |    FILE                      | method by which to initialize thickness (``FILE`` or ``PARAM``)                                                    |
                0117    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0118    | :varlink:`streamicethickFile`             |    :kbd:`' '`                | thickness initialization file, in meters (rather than parameters in :varlink:`STREAMICE_PARM03`)                   |
                0119    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0120    | :varlink:`streamice_move_front`           |    FALSE                     | allow ice shelf front to advance                                                                                   |
                0121    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0122    | :varlink:`streamice_calve_to_mask`        |    FALSE                     | if :varlink:`streamice_move_front` TRUE do not allow to advance beyond :varlink:`streamice_calve_mask`             |
                0123    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
0fbff46b46 dngo*0124    | :varlink:`STREAMICE_use_log_ctrl`         |    FALSE                     | specify :math:`C` and :math:`B` via their logarithm rather than square root                                        | 
                0125    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
07e785229e dngo*0126    | :varlink:`streamicecalveMaskFile`         |    :kbd:`' '`                | file to initialize :varlink:`streamice_calve_mask`                                                                 |
                0127    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0128    | :varlink:`streamice_diagnostic_only`      |    FALSE                     | do not update ice thickness (velocity solve only)                                                                  |
                0129    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0130    | :varlink:`streamice_CFL_factor`           |    0.5                       | CFL factor which determine maximum time step for thickness sub-cycling                                             |
                0131    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0132    | :varlink:`streamice_adjDump`              |    0.0                       | frequency (s) of writing of adjoint fields to file (TAF only)                                                      |
                0133    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0134    | :varlink:`streamicebasalTracConfig`       |    UNIFORM                   | method by which to initialize basal traction (``FILE`` or ``UNIFORM``)                                             |
                0135    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0136    | :varlink:`streamicebasalTracFile`         |    :kbd:`' '`                | basal trac initialization file (see :ref:`ssub_phys_pkg_streamice_units` for units)                                |
                0137    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0138    | :varlink:`C_basal_fric_const`             |    31.71                     | uniform basal traction value (see :ref:`ssub_phys_pkg_streamice_units` for units)                                  |
                0139    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0140    | :varlink:`streamiceGlenConstConfig`       |    UNIFORM                   | method by which to initialize Glen's constant (``FILE`` or ``UNIFORM``)                                            |
                0141    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0142    | :varlink:`streamiceGlenConstFile`         |    :kbd:`' '`                | Glen's constant initialization file (see :ref:`ssub_phys_pkg_streamice_units` for units)                           |
                0143    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0144    | :varlink:`B_glen_isothermal`              |    9.461e-18                 | uniform Glen's constant value (see :ref:`ssub_phys_pkg_streamice_units` for units)                                 |
                0145    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0146    | :varlink:`streamiceBdotFile`              |    :kbd:`' '`                | file to initialize time-indep melt rate (m/yr)                                                                     |
                0147    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0148    | :varlink:`streamiceBdotTimeDepFile`       |   :kbd:`' '`                 | file to initialize time-varying melt rate (m/yr), based on :varlink:`streamice_forcing_period`                     |
                0149    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0150    | :varlink:`streamiceTopogFile`             |    :kbd:`' '`                | topography initialization file (m); requires #define :varlink:`USE_ALT_RLOW`                                       |
                0151    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0152    | :varlink:`streamiceHmaskFile`             |   :kbd:`' '`                 | :varlink:`streamice_hmask` initialization file; requires #define :varlink:`STREAMICE_GEOM_FILE_SETUP`              |
                0153    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
0bad585a21 Navi*0154    | :varlink:`streamiceuFaceBdryFile`         |     :kbd:`' '`               | :varlink:`streamice_ufacemask_bdry` initialization file; requires #define :varlink:`STREAMICE_GEOM_FILE_SETUP`     |
07e785229e dngo*0155    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
0bad585a21 Navi*0156    | :varlink:`streamicevFaceBdryFile`         |     :kbd:`' '`               | :varlink:`streamice_vfacemask_bdry` initialization file; requires #define :varlink:`STREAMICE_GEOM_FILE_SETUP`     |
07e785229e dngo*0157    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0158    | :varlink:`streamiceuMassFluxFile`         |     :kbd:`' '`               | mass flux at :math:`u`-faces init. file (m\ :sup:`2`\ /yr); requires #define :varlink:`STREAMICE_GEOM_FILE_SETUP`  |
                0159    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0160    | :varlink:`streamicevMassFluxFile`         |     :kbd:`' '`               | mass flux at :math:`v`-faces init. file (m\ :sup:`2`\ /yr); requires #define :varlink:`STREAMICE_GEOM_FILE_SETUP`  |
                0161    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0162    | :varlink:`streamiceuFluxTimeDepFile`      |     :kbd:`' '`               | time-depend. mass flux at :math:`u`-faces file (m\ :sup:`2`\ /yr);                                                 |
                0163    |                                           |                              | requires #define :varlink:`STREAMICE_GEOM_FILE_SETUP`                                                              |
                0164    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0165    | :varlink:`streamicevFluxTimeDepFile`      |     :kbd:`' '`               | time-depend. mass flux at :math:`v`-faces file (m\ :sup:`2`\ /yr);                                                 |
                0166    |                                           |                              | requires #define :varlink:`STREAMICE_GEOM_FILE_SETUP`                                                              |
                0167    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0168    | :varlink:`streamiceuNormalStressFile`     |     :kbd:`' '`               | calving front normal stress parm along :math:`u`-faces (non-dim.; see :ref:`ssub_streamice_boundary_stress`)       |
                0169    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0170    | :varlink:`streamicevNormalStressFile`     |     :kbd:`' '`               | calving front normal stress parm along :math:`v`-faces (non-dim.; see :ref:`ssub_streamice_boundary_stress`)       |
                0171    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0172    | :varlink:`streamiceuShearStressFile`      |     :kbd:`' '`               | calving front normal stress parm along :math:`u`-faces (non-dim.; see :ref:`ssub_streamice_boundary_stress`)       |
                0173    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0174    | :varlink:`streamicevShearStressFile`      |     :kbd:`' '`               | calving front normal stress parm along :math:`v`-faces (non-dim.; see :ref:`ssub_streamice_boundary_stress`)       |
                0175    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0176    | :varlink:`streamiceuNormalTimeDepFile`    |     :kbd:`' '`               | time-dependent version of :varlink:`streamiceuNormalStressFile`                                                    |
                0177    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0178    | :varlink:`streamicevNormalTimeDepFile`    |     :kbd:`' '`               | time-dependent version of :varlink:`streamicevNormalStressFile`                                                    |
                0179    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0180    | :varlink:`streamiceuShearTimeDepFile`     |     :kbd:`' '`               | time-dependent version of :varlink:`streamiceuShearStressFile`                                                     |
                0181    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0182    | :varlink:`streamicevShearTimeDepFile`     |     :kbd:`' '`               | time-dependent version of :varlink:`streamicevShearStressFile`                                                     |
                0183    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0184    | :varlink:`streamice_adot_uniform`         |   0                          | time/space uniform surface accumulation rate (m/yr)                                                                |
                0185    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0186    | :varlink:`streamice_forcing_period`       |   0                          | file input frequency for streamice time-dependent forcing fields (s)                                               |
                0187    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0188    | :varlink:`streamice_smooth_gl_width`      |   0                          | thickness range parameter in basal traction smoothing across grounding line  (m)                                   |
                0189    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0190    | :varlink:`streamice_allow_reg_coulomb`    |   FALSE                      | use regularized Coulomb sliding :eq:`coul_eqn`. Requires :varlink:`STREAMICE_COULOMB_SLIDING` CPP option.          |
                0191    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
0fbff46b46 dngo*0192    | :varlink:`STREAMICE_vel_ext`              |   FALSE                      | over-ride velocity calculation with binary file                                                                    |
                0193    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0194    | :varlink:`STREAMICE_vel_ext`              |   FALSE                      | over-ride velocity calculation with binary file, with velocities applied directly to C-grid.                       |
                0195    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0196    | :varlink:`STREAMICE_uvel_ext_file`        |   FALSE                      | file to initialise `x`-velocity component (m/a)                                                                    |
                0197    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0198    | :varlink:`STREAMICE_vvel_ext_file`        |   FALSE                      | file to initialise `y`-velocity component (m/a)                                                                    | 
                0199    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
07e785229e dngo*0200  
                0201 .. _ssub_phys_pkg_streamice_domain_setup:
                0202 
                0203 Configuring domain through files
                0204 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                0205 
                0206 The :varlink:`STREAMICE_GEOM_FILE_SETUP` CPP option allows versatility in defining the domain.
                0207 With this option, the array :varlink:`streamice_hmask` must be initialized through a file (:varlink:`streamiceHmaskFile`)
                0208 as must :varlink:`streamice_ufacemask_bdry` and :varlink:`streamice_vfacemask_bdry`
                0209 (through :varlink:`streamiceuFaceBdryFile` and :varlink:`streamicevFaceBdryFile`)
                0210 as well as :varlink:`u_flux_bdry_SI` and :varlink:`v_flux_bdry_SI`, volume flux at the boundaries,
                0211 where appropriate (through :varlink:`streamiceuMassFluxFile` and :varlink:`streamicevMassFluxFile`).
                0212 Thickness must be initialized through a file as well (:varlink:`streamicethickFile`); :varlink:`streamice_hmask`
                0213 is set to zero where ice thickness is zero, and boundaries between in-domain and out-of-domain cells
                0214 (according to :varlink:`streamice_hmask`) are no-slip by default.
                0215 
                0216 When using this option, it is important that for all internal boundaries,
                0217 :varlink:`streamice_ufacemask_bdry` and :varlink:`streamice_vfacemask_bdry` are -1
                0218 (this will not be the case if :varlink:`streamiceuFaceBdryFile` and :varlink:`streamicevFaceBdryFile` are undefined). 
                0219 
                0220 In fact, if :varlink:`streamice_hmask` is configured correctly, :varlink:`streamice_ufacemask_bdry`
                0221 and :varlink:`streamice_vfacemask_bdry` can be set uniformly to -1, UNLESS there are no-stress or
                0222 flux-condition boundaries in the domain. Where :varlink:`streamice_ufacemask_bdry` and :varlink:`streamice_vfacemask_bdry`
                0223 are set to -1, they will be overridden at (a) boundaries where :varlink:`streamice_hmask` changes from 1 to -1
                0224 (which become no-slip boundaries), and (b) boundaries where :varlink:`streamice_hmask` changes from 1 to 0 (which become calving front boundaries).
                0225 
                0226 An example of domain configuration through files can be found in :filelink:`verification/halfpipe_streamice`.
                0227 By default, :filelink:`verification/halfpipe_streamice` is compiled with :varlink:`STREAMICE_GEOM_FILE_SETUP` undefined,
                0228 but the user can modify this option. The file :filelink:`verification/halfpipe_streamice/input/data.streamice_geomSetup`
                0229 represents an alternative version of :filelink:`verification/halfpipe_streamice/input/data.streamice`
                0230 in which the appropriate binary files are specified.
                0231 
                0232 Configuring domain through parameters
                0233 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                0234 
                0235 For a very specific type of domain the boundary conditions and initial thickness can be set
                0236 via parameters in ``data.streamice``.
                0237 Such a domain will be rectangular. In order to use this option, the :varlink:`STREAMICE_GEOM_FILE_SETUP` CPP flag should be undefined.
                0238 
                0239 There are different boundary condition types (denoted within the parameter names) that can be set:
                0240 
                0241 -  ``noflow``: :math:`x`- and :math:`y`-velocity will be zero along this boundary.
                0242 
                0243 -  ``nostress``: velocity normal to boundary will be zero; there will be no tangential stress along the boundary.
                0244 
                0245 -  ``fluxbdry``: a mass volume flux is specified along this boundary, which becomes a boundary condition
                0246    for the thickness advection equation (see :ref:`ssub_phys_pkg_streamice_eqns`). Velocities will be zero.
                0247    The corresponding parameters :varlink:`flux_bdry_val_NORTH`, :varlink:`flux_bdry_val_SOUTH`, 
                0248    :varlink:`flux_bdry_val_EAST` and  :varlink:`flux_bdry_val_WEST` then set the values.
                0249 
                0250 -  ``CFBC``: calving front boundary condition, a Neumann condition based on ice thickness and bed depth,
                0251    is imposed at this boundary (see :ref:`ssub_phys_pkg_streamice_eqns`).
                0252   
                0253 Note the above only apply if there is dynamic ice in the cells at the boundary in question.
                0254 The boundary conditions are then set by specifying the above conditions over ranges of each
                0255 (north/south/east/west) boundary. The division of each boundary should be exhaustive and the ranges should not overlap.
                0256 Parameters to initialize boundary conditions (defined under :varlink:`STREAMICE_PARM03` namelist) are listed in :numref:`tab_phys_pkg_streamice_domainparms`.
                0257 
                0258 .. table:: Parameters to initialize boundary conditions (defined under :varlink:`STREAMICE_PARM03` namelist)
                0259    :name: tab_phys_pkg_streamice_domainparms
                0260   
                0261    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0262    | Parameter                                 | Default                      | Description                                                                                                        |
                0263    +===========================================+==============================+====================================================================================================================+
                0264    | :varlink:`min_x_noflow_NORTH`             |   0                          | western limit of no-flow region on northern boundary (m)                                                           | 
                0265    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0266    | :varlink:`max_x_noflow_NORTH`             |   0                          | eastern limit of no-flow region on northern boundary (m)                                                           |
                0267    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0268    | :varlink:`min_x_noflow_SOUTH`             |   0                          | western limit of no-flow region on southern boundary (m)                                                           |
                0269    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0270    | :varlink:`max_x_noflow_SOUTH`             |   0                          | eastern limit of no-flow region on southern boundary (m)                                                           |
                0271    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0272    | :varlink:`min_y_noflow_EAST`              |   0                          | southern limit of no-flow region on eastern boundary (m)                                                           |
                0273    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0274    | :varlink:`max_y_noflow_EAST`              |   0                          | northern limit of no-flow region on eastern boundary (m)                                                           |
                0275    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0276    | :varlink:`min_y_noflow_WEST`              |   0                          | southern limit of no-flow region on western boundary (m)                                                           |
                0277    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0278    | :varlink:`max_y_noflow_WEST`              |   0                          | northern limit of no-flow region on eastern boundary (m)                                                           |
                0279    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0280    | :varlink:`min_x_nostress_NORTH`           |   0                          | western limit of no-stress region on northern boundary (m)                                                         |
                0281    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0282    | :varlink:`max_x_nostress_NORTH`           |   0                          | eastern limit of no-stress region on northern boundary (m)                                                         |
                0283    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0284    | :varlink:`min_x_nostress_SOUTH`           |   0                          | western limit of no-stress region on southern boundary (m)                                                         |
                0285    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0286    | :varlink:`max_x_nostress_SOUTH`           |   0                          | eastern limit of no-stress region on southern boundary (m)                                                         |
                0287    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0288    | :varlink:`min_y_nostress_EAST`            |   0                          | southern limit of no-stress region on eastern boundary (m)                                                         |
                0289    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0290    | :varlink:`max_y_nostress_EAST`            |   0                          | northern limit of no-stress region on eastern boundary (m)                                                         |
                0291    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0292    | :varlink:`min_y_nostress_WEST`            |   0                          | southern limit of no-stress region on western boundary (m)                                                         |
                0293    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0294    | :varlink:`max_y_nostress_WEST`            |   0                          | northern limit of no-stress region on eastern boundary (m)                                                         |
                0295    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0296    | :varlink:`min_x_fluxbdry_NORTH`           |   0                          | western limit of flux-boundary region on northern boundary (m)                                                     |
                0297    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0298    | :varlink:`max_x_fluxbdry_NORTH`           |   0                          | eastern limit of flux-boundary region on northern boundary (m)                                                     |
                0299    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0300    | :varlink:`min_x_fluxbdry_SOUTH`           |   0                          | western limit of flux-boundary region on southern boundary (m)                                                     |
                0301    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0302    | :varlink:`max_x_fluxbdry_SOUTH`           |   0                          | eastern limit of flux-boundary region on southern boundary (m)                                                     |
                0303    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0304    | :varlink:`min_y_fluxbdry_EAST`            |   0                          | southern limit of flux-boundary region on eastern boundary (m)                                                     |
                0305    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0306    | :varlink:`max_y_fluxbdry_EAST`            |   0                          | northern limit of flux-boundary region on eastern boundary (m)                                                     |
                0307    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0308    | :varlink:`min_y_fluxbdry_WEST`            |   0                          | southern limit of flux-boundary region on western boundary (m)                                                     |
                0309    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0310    | :varlink:`max_y_fluxbdry_WEST`            |   0                          | northern limit of flux-boundary region on eastern boundary (m)                                                     |
                0311    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0312    | :varlink:`min_x_CFBC_NORTH`               |   0                          | western limit of calving front condition region on northern boundary (m)                                           |
                0313    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0314    | :varlink:`max_x_CFBC_NORTH`               |   0                          | eastern limit of calving front condition region on northern boundary (m)                                           |
                0315    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0316    | :varlink:`min_x_CFBC_SOUTH`               |   0                          | western limit of calving front condition region on southern boundary (m)                                           |
                0317    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0318    | :varlink:`max_x_CFBC_SOUTH`               |   0                          | eastern limit of calving front condition region on southern boundary (m)                                           |
                0319    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0320    | :varlink:`min_y_CFBC_EAST`                |   0                          | southern limit of calving front condition region on eastern boundary  (m)                                          |
                0321    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0322    | :varlink:`max_y_CFBC_EAST`                |   0                          | northern limit of calving front condition region on eastern boundary (m)                                           |
                0323    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0324    | :varlink:`min_y_CFBC_WEST`                |   0                          | southern limit of calving front condition region on western boundary (m)                                           |
                0325    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0326    | :varlink:`max_y_CFBC_WEST`                |   0                          | northern limit of calving front condition region on eastern boundary (m)                                           |
                0327    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0328    | :varlink:`flux_bdry_val_SOUTH`            |   0                          | volume flux per width entering at flux-boundary on southern boundary (m\ :sup:`2`\ /a)                             |
                0329    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0330    | :varlink:`flux_bdry_val_NORTH`            |   0                          | volume flux per width entering at flux-boundary on southern boundary (m\ :sup:`2`\ /a)                             |
                0331    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0332    | :varlink:`flux_bdry_val_EAST`             |   0                          | volume flux per width entering at flux-boundary on southern boundary (m\ :sup:`2`\ /a)                             |
                0333    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0334    | :varlink:`flux_bdry_val_WEST`             |   0                          | volume flux per width entering at flux-boundary on southern boundary (m\ :sup:`2`\ /a)                             |
                0335    +-------------------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------+
                0336 
                0337   
                0338 .. _ssub_phys_pkg_streamice_descr:
                0339   
                0340 Description
                0341 ~~~~~~~~~~~
                0342 
                0343 .. _ssub_phys_pkg_streamice_eqns:
                0344 
                0345 Equations Solved
                0346 ^^^^^^^^^^^^^^^^
                0347 
                0348 The model solves for 3 dynamic variables: :math:`x`-velocity
                0349 (:math:`u`), :math:`y`-velocity (:math:`v`), and thickness (:math:`h`).
                0350 There is also a variable that tracks coverage of fractional cells,
                0351 discussed in :ref:`ssub_phys_pkg_streamice_advance`.
                0352 
                0353 By default the model solves the "shallow shelf approximation" (SSA) for
                0354 velocity. The SSA is appropriate for floating ice (ice shelf) or ice
                0355 flowing over a low-friction bed (e.g., Macayeal (1989) :cite:`Macayeal:89`). The SSA consists
                0356 of the :math:`x`-momentum balance:
                0357 
                0358 .. math::
                0359    \partial_x(h\nu(4\dot{\varepsilon}_{xx}+2\dot{\varepsilon}_{yy})) +
                0360    \partial_y(2h\nu\dot{\varepsilon}_{xy}) - \tau_{bx} = \rho g h \frac{\partial s}{\partial x}
                0361    :label: mom_x
                0362 
                0363 the :math:`y`-momentum balance:
                0364 
                0365 .. math::
                0366    \partial_x(2h\nu\dot{\varepsilon}_{xy}) +
                0367    \partial_y(h\nu(4\dot{\varepsilon}_{yy}+2\dot{\varepsilon}_{xx})) - \tau_{by} =
                0368    \rho g h \frac{\partial s}{\partial y}
                0369    :label: mom_y
                0370 
                0371 where :math:`\rho` is ice density, :math:`g` is gravitational acceleration, and :math:`s` is surface elevation. :math:`\nu`,
                0372 :math:`\tau_{bi}` and :math:`\dot{\varepsilon}_{ij}` are ice viscosity, basal drag, and the strain rate tensor, respectively, all explained below.
                0373 
                0374 From the velocity field, thickness evolves according to the continuity
                0375 equation:
                0376 
                0377 .. math::
0bad585a21 Navi*0378    h_t +  \nabla  \cdot(h\vec{u}) = \dot{a}-\dot{b}
07e785229e dngo*0379    :label: adv_eqn
                0380 
                0381 Where :math:`\dot{b}` is a basal mass balance (e.g., melting due to
                0382 contact with the ocean), positive where there is melting. This is a field that can be specified through a file. At the moment surface mass
                0383 balance :math:`\dot{a}` can only be set as uniform. Where ice is grounded,
                0384 surface elevation is given by
                0385 
                0386 .. math:: s = R + h
                0387 
                0388 where :math:`R(x,y)` is the bathymetry, and the basal elevation
                0389 :math:`b` is equal to :math:`R`. If ice is floating, then the assumption
                0390 of hydrostasy and constant density gives
                0391 
                0392 .. math:: s = (1-\frac{\rho}{\rho_w}) h,
                0393 
                0394 where :math:`\rho_w` is a representative ocean density, and
                0395 :math:`b=-(\rho/\rho_w)h`. Again by hydrostasy, floation is assumed
                0396 wherever
                0397 
                0398 .. math:: h \leq -\frac{\rho_w}{\rho}R
                0399 
                0400 is satisfied. Floatation criteria is stored in :varlink:`float_frac_streamice`,
                0401 equal to 1 where ice is grounded, and equal to 0 where ice is floating.
                0402 
                0403 The strain rates :math:`\varepsilon_{ij}` are generalized to the case of
                0404 orthogonal curvilinear coordinates, to include the "metric" terms that
                0405 arise when casting the equations of motion on a sphere or projection on
                0406 to a sphere (see :ref:`para_phys_pkg_seaice_discretization`).
                0407 Thus
                0408 
                0409 .. math::
                0410    \begin{aligned}
                0411    \dot{\varepsilon}_{xx} = & u_x + k_1 v, \notag \\
                0412    \dot{\varepsilon}_{yy} = & v_y + k_1 u, \notag \\ 
                0413    \dot{\varepsilon}_{xy} = & \frac{1}{2}(u_y+v_x) + k_1 u + k_2 v. \notag \end{aligned}
                0414 
                0415 :math:`\nu` has the form arising from Glen's law
                0416 
                0417 .. math::
                0418    \nu =
                0419    \frac{1}{2}A^{-\frac{1}{n}}\left(\dot{\varepsilon}_{xx}^2+\dot{\varepsilon}_{yy}
                0420    ^2+\dot{\varepsilon}_{xx}\dot{\varepsilon}_{yy}+\dot{\varepsilon}_{xy}^2+\dot{
0bad585a21 Navi*0421    \varepsilon}_{\min}^2\right)^{\frac{1-n}{2n}}
07e785229e dngo*0422    :label: visc_eqn
                0423 
                0424 though the form is slightly different if a hybrid formulation is used. 
                0425 
                0426 Whether :math:`\tau_b` is nonzero depends on whether the floatation
                0427 condition is satisfied. Currently this is determined simply on an
                0428 instantaneous cell-by-cell basis (unless subgrid interpolation is used),
                0429 as is the surface elevation :math:`s`, but possibly this should be
                0430 rethought if the effects of tides are to be considered.
                0431 :math:`\vec{\tau}_b` has the form
                0432 
                0433 .. math::
0bad585a21 Navi*0434    \vec{\tau}_b = C (|\vec{u}|^2+u_{\min}^2)^{\frac{m-1}{2}}\vec{u}.
07e785229e dngo*0435    :label: tau_eqn
                0436  
                0437 Again, the form is slightly different if a hybrid formulation is to be
                0438 used, and the velocity refers to sliding velocity (:math:`u_b`).
                0439 
                0440 An alternative to the above "power law" sliding parameterization can be used by
                0441 defining the :varlink:`STREAMICE_COULOMB_SLIDING` CPP option and setting 
                0442 :varlink:`streamice_allow_reg_coulomb` to ``.TRUE.``:
                0443 
                0444 .. math::
                0445    \vec{\tau}_b = C\frac{|u|^{m}N}{2\left[C^{1/m}|u|+(0.5N)^{1/m}\right]^{m}}u^{-1}\vec{u}
                0446    :label: coul_eqn
                0447 
                0448 where :math:`u` is shorthand for the regularized norm in :eq:`tau_eqn` (or for :math:`u_b` if a hybrid formulation is used). 
                0449 :math:`m` is the same exponent as in :eq:`tau_eqn`. :math:`N` is effective pressure:
                0450 
                0451 .. math::
                0452    N = \rho g (h - h_f),
                0453    :label: eff_press
                0454 
                0455 with :math:`h_f` the floatation thickness 
                0456 
                0457 .. math::
0bad585a21 Navi*0458    h_f = \max\left(0,-\frac{\rho_w}{\rho}R\right),
07e785229e dngo*0459 
                0460 where :math:`R` is bed elevation. This formulation was used in the MISMIP+ intercomparison tests :cite:`asay-davis:16`.
                0461 :eq:`eff_press` assumes complete hydraulic connectivity to the ocean throughout 
                0462 the domain, which is likely only true within a few tens of kilometers of the 
                0463 grounding line. With this sliding relation, Coulomb sliding is predominant near the grounding line, with 
                0464 the yield strength proportional to height above floatation. Further inland sliding transitions to 
                0465 the power law relation in :eq:`tau_eqn`.
                0466 
                0467 The momentum equations are solved together with appropriate boundary
                0468 conditions, discussed below. In the case of a calving front boundary
                0469 condition (CFBC), the boundary condition has the following form:
                0470 
                0471 .. math::
                0472    (h\nu(4\dot{\varepsilon}_{xx}+2\dot{\varepsilon}_{yy}))n_x +
                0473    (2h\nu\dot{\varepsilon}_{xy})n_y = \frac{1}{2}g \left(\rho h^2 - \rho_w
                0474    b^2\right)n_x   
                0475    :label: cfbc_x
                0476 
                0477 .. math::
                0478    (2h\nu\dot{\varepsilon}_{xy})n_x +
                0479    (h\nu(4\dot{\varepsilon}_{yy}+2\dot{\varepsilon}_{xx}))n_y = \frac{1}{2}g
                0480    \left(\rho h^2 - \rho_w b^2\right)n_y. 
                0481    :label: cfbc_y
                0482  
                0483 Here :math:`\vec{n}` is the normal to the boundary, and :math:`b`
                0484 is ice base.
                0485 
                0486 Hybrid SIA-SSA stress balance
                0487 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                0488 
                0489 The SSA does not take vertical shear stress or strain rates (e.g.,
                0490 :math:`\sigma_{xz}`, :math:`\partial u/\partial z`) into account.
                0491 Although there are other terms in the stress tensor, studies have found
                0492 that in all but a few cases, vertical shear and longitudinal stresses
                0493 (represented by the SSA) are sufficient to represent glaciological flow.
                0494 :filelink:`pkg/streamice` can allow for representation of vertical shear, although the
                0495 approximation is made that longitudinal stresses are depth-independent.
                0496 The stress balance is referred to as "hybrid" because it is a joining of
                0497 the SSA and the "shallow ice approximation" (SIA), which accounts
                0498 only for vertical shear. Such hybrid formulations have been shown to be
                0499 valid over a larger range of conditions than SSA (Goldberg 2011) :cite:`goldberg:2011`.
                0500 
                0501 In the hybrid formulation, :math:`\overline{u}` and
                0502 :math:`\overline{v}`, the depth-averaged :math:`x-` and :math:`y-`
                0503 velocities, replace :math:`u` and :math:`v` in :eq:`mom_x`, :eq:`mom_y`, and :eq:`adv_eqn`, and gradients
                0504 such as :math:`u_x` are replaced by :math:`(\overline{u})_x`. Viscosity
                0505 becomes
                0506 
                0507 .. math::
                0508    \nu =
                0509    \frac{1}{2}A^{-\frac{1}{n}}\left(\dot{\varepsilon}_{xx}^2+\dot{\varepsilon}_{yy}
                0510    ^2+\dot{\varepsilon}_{xx}\dot{\varepsilon}_{yy}+\dot{\varepsilon}_{xy}^2+\frac{1
0bad585a21 Navi*0511    }{4}u_z^2+\frac{1}{4}v_z^2+\dot{\varepsilon}_{\min}^2\right)^{\frac{1-n}{2n}}
07e785229e dngo*0512 
                0513 In the formulation for :math:`\tau_b`, :math:`u_b`, the horizontal
                0514 velocity at :math:`u_b` is used instead. The details are given in Goldberg (2011)
                0515 :cite:`goldberg:2011`.
                0516 
                0517 .. _ssub_phys_pkg_streamice_advance:
                0518 
                0519 Ice front advance
                0520 ^^^^^^^^^^^^^^^^^
                0521 
                0522 By default all mass flux across calving boundaries is considered lost. However, it is possible to account
                0523 for this flux and potential advance of the ice shelf front. If :varlink:`streamice_move_front` is TRUE, then a partial-area formulation is used.
                0524 
                0525 The algorithm is based on Albrecht et al. (2011) :cite:`Albrecht:2011`. In this scheme,
                0526 for empty or partial cells adjacent to a calving front, a **reference** thickness
0bad585a21 Navi*0527 :math:`h_{\rm ref}` is found, defined as an average over the thickness
07e785229e dngo*0528 of all neighboring cells that flow into the cell. The total volume input over a time step
                0529 is added to the volume of ice already in the cell, whose partial area coverage is then updated
                0530 based on the volume and reference thickness. If the area coverage reaches 100% in a time step,
                0531 then the additional volume is cascaded into adjacent empty or partial cells.
                0532 
                0533 If :varlink:`streamice_calve_to_mask` is TRUE, this sets a limit to how far the front can
                0534 advance, even if advance is allowed. The front will not advance into
                0535 cells where the array :varlink:`streamice_calve_mask` is not equal to 1. This mask must
                0536 be set through a binary input file to allow the front to advance past its initial position.
                0537 
                0538 No calving parameterization is implemented in :filelink:`pkg/streamice`. However,
                0539 front advancement is a precursor for such a development to be added.
                0540 
                0541 .. _ssub_phys_pkg_streamice_units:
                0542 
                0543 Units of input files
                0544 ^^^^^^^^^^^^^^^^^^^^
                0545 
                0546 The inputs for basal traction (:varlink:`streamicebasalTracFile`, :varlink:`C_basal_fric_const`)
                0547 and ice stiffness (:varlink:`streamiceGlenConstFile`, :varlink:`B_glen_isothermal`) require specific units.
                0548 For ice stiffness (`A` in :eq:`visc_eqn`), :math:`B=A^{-1/n}` is specified; or, more accurately,
                0549 its square root :math:`A^{-1/(2n)}` is specified (this is to ensure positivity of `B` by squaring the input).
                0550 The units of :varlink:`streamiceGlenConstFile` and :varlink:`B_glen_isothermal` are
                0551 :math:`\mathrm{Pa}^{1/2}\ \mathrm{yr}^{1/(2n)}`
                0552 where :math:`n` is :varlink:`n_glen`.
                0553 
                0554 :varlink:`streamicebasalTracFile` and :varlink:`C_basal_fric_const` initialize the basal traction
                0555 (`C` in :eq:`tau_eqn`). Again :math:`C^{1/2}` is directly specified rather than `C` to ensure positivity. The units are
                0556 :math:`\mathrm{Pa}^{1/2} (\mathrm{m }\ \mathrm{yr}^{-1})^{n_b}`
                0557 where :math:`n_b` is :varlink:`n_basal_friction`.
                0558 
                0559 Numerical Details
                0560 ~~~~~~~~~~~~~~~~~
                0561 
                0562 .. figure:: figs/stencil.*
                0563    :width: 50%
                0564    :align: center
                0565    :alt: STREAMICE stencil
                0566    :name: figstencil
                0567 
                0568    Grid locations of thickness (`h`), velocity (`u,v`), area, and various masks.
                0569    
                0570 .. figure:: figs/mask_cover.*
                0571    :width: 50%
                0572    :align: center
                0573    :alt: STREAMICE masks
                0574    :name: figmask_cover
                0575 
                0576    Hypothetical configuration, detailing the meaning of thickness and velocity
                0577    masks and their role in controlling boundary conditions.
                0578 
                0579 The momentum balance is solved via iteration on viscosity (Goldberg 2011 :cite:`goldberg:2011`). At each iteration,
                0580 a linear elliptic differential equation is solved via a finite-element method using bilinear basis functions.
                0581 The velocity solution "lives" on cell corners, while thickness "lives" at cell centers (:numref:`figstencil`).
                0582 The cell-centered thickness is then evolved using a second-order slope-limited finite-volume scheme,
                0583 with the velocity field from the previous solve. To represent the flow of floating ice, basal stress
                0584 terms are multiplied by an array :varlink:`float_frac_streamice`, a cell-centered array which determines
                0585 where ice meets the floation condition.
                0586 
                0587 The computational domain of :filelink:`pkg/streamice` (which may be smaller than the array/grid as
                0588 defined by :filelink:`SIZE.h <model/inc/SIZE.h>` and :filelink:`GRID.h <model/inc/GRID.h>`)
                0589 is determined by a number of mask
                0590 arrays within :filelink:`pkg/streamice`. They are
                0591 
                0592 -  :math:`hmask` (:varlink:`streamice_hmask`): equal to 1 (ice-covered), 0
                0593    (open ocean), 2 (partly-covered), or -1 (out of domain)
                0594 
                0595 -  :math:`umask` (:varlink:`streamice_umask`): equal to 1 (an "active" velocity
                0596    node), 3 (a Dirichlet node), or 0 (zero velocity)
                0597 
                0598 -  :math:`vmask` (:varlink:`streamice_vmask`): similar to umask
                0599 
                0600 -  :math:`ufacemaskbdry` (:varlink:`streamice_ufacemask_bdry`): equal to -1
                0601    (interior face), 0 (no-slip), 1 (no-stress), 2 (calving stress
                0602    front), or 4 (flux input boundary); when 4, then
                0603    :varlink:`u_flux_bdry_SI` must be initialized, through binary or parameter
                0604    file
                0605 
                0606 -  :math:`vfacemaskbdry` (:varlink:`streamice_vfacemask_bdry`): similar to
                0607    :math:`ufacemaskbdry`
                0608 
                0609 :math:`hmask` is defined at cell centers, like :math:`h`. :math:`umask`
                0610 and :math:`vmask` are defined at cell nodes, like velocities.
                0611 :math:`ufacemaskbdry` and :math:`vfacemaskbdry` are defined at cell
0bad585a21 Navi*0612 faces, like velocities in a C-grid - but unless one sets 
07e785229e dngo*0613 ``#define`` :varlink:`STREAMICE_GEOM_FILE_SETUP`  in
                0614 :filelink:`STREAMICE_OPTIONS.h <pkg/streamice/STREAMICE_OPTIONS.h>`,
                0615 the values are only relevant at the boundaries of the grid.
                0616 
                0617 The values of :math:`umask` and :math:`vmask` determine which nodal
                0618 values of :math:`u` and :math:`v` are involved in the solve for
                0619 velocities. These masks are not configured directly by the user, but are re-initialized based
                0620 on :varlink:`streamice_hmask`,   :varlink:`streamice_ufacemask_bdry` and :varlink:`streamice_vfacemask_bdry`
                0621 at each time step.  :numref:`figmask_cover`
                0622 demonstrates how these values are set in various cells.
                0623 
                0624 With :math:`umask` and :math:`vmask` appropriately initialized, subroutine
                0625 :filelink:`streamice_vel_solve.F <pkg/streamice/streamice_vel_solve.F>` can proceed rather generally.
                0626 Contributions are only evaluated if :math:`hmask=1` in a given cell, and a given nodal
                0627 basis function is only considered if :math:`umask=1` or :math:`vmask=1`
                0628 at that node.
                0629 
                0630 
                0631 Additional Features
                0632 ~~~~~~~~~~~~~~~~~~~
                0633 
                0634 .. Grounding line parameterization
                0635 .. ###############################
                0636 
                0637 .. Representing grounding line movement (change of boundary between grounded and floating ice) is problematic in ice sheet models due to the high resolution required. It has been found that sub-grid treatment of the grounding line can partially alleviate this requirement (Gladstone et al, 2011). STREAMICE implements a simple "smoothing" of the floatation condition. By default, ``float_frac_streamice`` is equal to 0 in cells that satisfy the floatation condition, and 1 elsewhere. If the compile option ``STREAMICE_SMOOTH_FLOATATION2`` is defined, then the array varies smoothly between 0 and 1 in cells where :math:`|h-h_f| < w_{smooth}/2`, where
                0638 
                0639 .. .. math::
                0640 
                0641 ..  h_f = -\frac{\rho}{\rho_w}R
                0642 
                0643 .. and :math:`w_{smooth}` is specified by ``streamice_smooth_gl_width``. This modification then smooths the transition from grounded to floating ice with respect to basal stress. It is found that this parameterisation is necessary in order to achieve grounding line reversibility in the MISMIP3D intercomparison experiment (Pattyn et al, 2013).
                0644 
                0645 PETSc
                0646 ^^^^^
                0647 
                0648 There is an option to use PETSc for the matrix solve component of the velocity solve,
                0649 and this has been observed to give a 3- or 4-fold improvement in performance over the
                0650 inbuilt conjugate gradient solver in a number of cases. To use this option, the CPP option :varlink:`ALLOW_PETSC` must be defined,
                0651 and MITgcm must be compiled with the ``-mpi`` flag (see :numref:`build_mpi`).
                0652 However, often a system-specific installation of PETSc is required.
                0653 If you wish to use PETSc with :filelink:`pkg/streamice`, please contact the author.
                0654 
                0655 .. _ssub_streamice_boundary_stress:
                0656 
                0657 Boundary Stresses
                0658 ^^^^^^^^^^^^^^^^^
                0659 
                0660 The calving front boundary conditions :eq:`cfbc_x` and :eq:`cfbc_y` are intended for ice fronts bordering open ocean.
                0661 However, there may be reasons to apply different Neumann conditions at these locations, e.g., one might want to
                0662 represent force associated with ice melange, or to represent parts of the ice shelf that are not resolved,
                0663 as in Goldberg et al. (2015) :cite:`Goldberg:2015`. The user can then modify these boundary conditions in the form
                0664 
                0665 .. math::
                0666    (h\nu(4\dot{\varepsilon}_{xx}+2\dot{\varepsilon}_{yy}))n_x +
                0667    (2h\nu\dot{\varepsilon}_{xy})n_y = \frac{1}{2}g \left(\rho h^2 - \rho_w
                0668    b^2\right)n_x + \sigma n_x + \tau n_y 
                0669 
                0670 .. math::
                0671   (2h\nu\dot{\varepsilon}_{xy})n_x +
                0672    (h\nu(4\dot{\varepsilon}_{yy}+2\dot{\varepsilon}_{xx}))n_y = \frac{1}{2}g
                0673    \left(\rho h^2 - \rho_w b^2\right)n_y + \sigma n_y + \tau n_x 
                0674 
                0675 In these equations, :math:`\sigma` and :math:`\tau` represent normal and shear stresses at the boundaries of cells.
                0676 They are not specified directly, but through coefficients :math:`\gamma_{\sigma}` and :math:`\gamma_{\tau}`:
                0677 
                0678 .. math::
                0679    \sigma = \frac{1}{2}g \left(\rho h^2 - \rho_w
                0680    b^2\right)\gamma_{\sigma}
                0681 
                0682 .. math::
                0683    \tau = \frac{1}{2}g \left(\rho h^2 - \rho_w
                0684    b^2\right)\gamma_{\tau}
                0685 
                0686 :math:`\gamma_{\sigma}` is specified through :varlink:`streamiceuNormalStressFile`,  :varlink:`streamicevNormalStressFile`,
                0687 :varlink:`streamiceuNormalTimeDepFile`, :varlink:`streamicevNormalTimeDepFile` and :math:`\gamma_{\tau}`
                0688 is specified through :varlink:`streamiceuShearStressFile`,  :varlink:`streamicevShearStressFile`,
                0689 :varlink:`streamiceuShearTimeDepFile`, and :varlink:`streamicevShearTimeDepFile`.
                0690 Within the file names, the  ``u`` and ``v`` determine whether the values are specified
                0691 along horizontal (:math:`u`-) faces and vertical (:math:`v`-) faces. The values will only
                0692 have an effect if they are specified along calving front boundaries (see :ref:`ssub_phys_pkg_streamice_domain_setup`).
                0693 
                0694 Adjoint
                0695 ~~~~~~~
                0696 
                0697 The STREAMICE package is adjointable using both TAF (Goldberg et al. 2013 :cite:`goldberg_heimbach:2013`)
                0698 and OpenAD (Goldberg et al. 2016 :cite:`goldberg_openad_fixed:2016`). In OpenAD, the fixed-point method of
                0699 :cite:`christianson:94` is implemented, greatly reducing the memory requirements and also improving performance when PETSc is used.
                0700 
                0701 Verification experiments with both OpenAD and TAF are located in the :filelink:`verification/halfpipe_streamice` (see below).
                0702 
                0703 Key Subroutines
                0704 ~~~~~~~~~~~~~~~
                0705 
                0706 Top-level routine: :filelink:`streamice_timestep.F <pkg/streamice/streamice_timestep.F>` (called from :filelink:`model/src/do_oceanic_phys.F`)
                0707 
                0708 ::
                0709 
                0710     CALLING SEQUENCE
                0711  ...
                0712   streamice_timestep (called from DO_OCEANIC_PHYS)
                0713   |
                0714   |-- #ifdef ALLOW_STREAMICE_TIMEDEP_FORCING
                0715   |    STREAMICE_FIELDS_LOAD
                0716   |   #endif
                0717   |
                0718   |--#if (defined (ALLOW_STREAMICE_OAD_FP))
                0719   |    STREAMICE_VEL_SOLVE_OPENAD
                0720   |  #else
                0721   |    STREAMICE_VEL_SOLVE
                0722   |    |
                0723   |    |-- STREAMICE_DRIVING_STRESS
                0724   |    |
                0725   |    | [ITERATE ON FOLLOWING]
                0726   |    |
                0727   |    |-- STREAMICE_CG_WRAPPER
                0728   |    |   |
                0729   |    |   |-- STREAMICE_CG_SOLVE
                0730   |    |       #ifdef ALLOW_PETSC
                0731   |    |        STREAMICE_CG_SOLVE_PETSC
                0732   |    |       #endif
                0733   |    |
                0734   |    |-- #ifdef STREAMICE_HYBRID_STRESS
                0735   |         STREAMICE_VISC_BETA_HYBRID 
                0736   |        #else
                0737   |         STREAMICE_VISC_BETA 
                0738   |        #endif
                0739   |
                0740   |-- STREAMICE_ADVECT_THICKNESS
                0741   |   |
                0742   |   |-- STREAMICE_ADV_FRONT  
                0743   |
                0744   |-- STREAMICE_UPD_FFRAC_UNCOUPLED
                0745   |
                0746 
                0747 
                0748 STREAMICE diagnostics
                0749 ~~~~~~~~~~~~~~~~~~~~~
                0750 
                0751 Diagnostics output is available via the diagnostics package (:ref:`outp_pack`). Available output fields are summarized in the
                0752 following table:
                0753 
                0754 .. code-block:: text
                0755 
                0756     ----------------------------------------------------------------------------
                0757     <-Name->|Levs|  mate |<- code ->|<--  Units   -->|<- Tile (max=80c)
                0758     ----------------------------------------------------------------------------
                0759     SI_Uvel |  1 |       |UZ      L1|m/a             |Ice stream x-velocity
                0760     SI_Vvel |  1 |       |VZ      L1|m/a             |Ice stream y-velocity
                0761     SI_Thick|  1 |       |SM      L1|m               |Ice stream thickness
                0762     SI_area |  1 |       |SM      L1|m^2             |Ice stream cell area coverage
                0763     SI_float|  1 |       |SM      L1|none            |Ice stream grounding indicator
                0764     SI_hmask|  1 |       |SM      L1|none            |Ice stream thickness mask
                0765     SI_usurf|  1 |       |SM      L1|none            |Ice stream surface x-vel
                0766     SI_vsurf|  1 |       |SM      L1|none            |Ice stream surface y-vel
                0767     SI_ubase|  1 |       |SM      L1|none            |Ice stream basal x-vel
                0768     SI_vbase|  1 |       |SM      L1|none            |Ice stream basal y-vel
                0769     SI_taubx|  1 |       |SM      L1|none            |Ice stream basal x-stress
                0770     SI_tauby|  1 |       |SM      L1|none            |Ice stream basal y-stress
                0771     SI_selev|  1 |       |SM      L1|none            |Ice stream surface elev
                0772 
                0773 Experiments and tutorials that use streamice
                0774 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                0775 
                0776 The :filelink:`verification/halfpipe_streamice` experiment uses :filelink:`pkg/streamice`.
                0777 
                0778 .. other references
                0779 
                0780 .. Gladstone, Payne and Cornford (2010). Parameterising the grounding line in flow-line ice sheet models. The Cryosphere, 4, 605–619.
                0781 
                0782 .. Pattyn, F. and others (2013). Grounding-line migration in plan-view marine ice-sheet models: results of the ice2sea MISMIP3d intercomparison. J of Glaciology, 59 (215), 410-422