.. _sub_phys_pkg_shelfice: SHELFICE Package ---------------- Authors: Martin Losch, Jean-Michel Campin Introduction ~~~~~~~~~~~~ :filelink:`pkg/shelfice` provides a thermodynamic model for basal melting underneath floating ice shelves. CPP options enable or disable different aspects of the package (:numref:`shelfice_config`). Run-time options, flags, filenames and field-related dates/times are described in :numref:`shelfice_runtime`. A description of key subroutines is given in :numref:`shelfice_subroutines`. Available diagnostics output is listed in :numref:`shelfice_diagnostics`. .. _shelfice_config: SHELFICE configuration ~~~~~~~~~~~~~~~~~~~~~~   As with all MITgcm packages, :filelink:`pkg/shelfice` can be turned on or off at compile time: - using the ``packages.conf`` file by adding ``shelfice`` to it, - or using :filelink:`genmake2 ` adding ``-enable=shelfice`` or ``disable=shelfice`` switches :filelink:`pkg/shelfice` does not require any additional packages, but it will only work with conventional vertical :math:`z`-coordinates (pressure coordinates are not implemented). If you use it together with vertical mixing schemes, be aware that non-local parameterizations are turned off, e.g., such as :filelink:`pkg/kpp`. Parts of the :filelink:`pkg/shelfice` code can be enabled or disabled at compile time via CPP preprocessor flags. These options are set in :filelink:`SHELFICE_OPTIONS.h `: .. tabularcolumns:: |\Y{.32}|\Y{.1}|\Y{.570}| .. table:: Compile-time parameters :name: tab_phys_pkg_shelfice_compileparms +---------------------------------+---------+----------------------------------------------------------------------------------------------------------------+ | CPP Flag Name | Default | Description | +=================================+=========+================================================================================================================+ | :varlink:`ALLOW_SHELFICE_DEBUG` | #undef | include code for enhanced diagnostics and debug output | +---------------------------------+---------+----------------------------------------------------------------------------------------------------------------+ | :varlink:`ALLOW_ISOMIP_TD` | #define | include code for for simplified ISOMIP thermodynamics | +---------------------------------+---------+----------------------------------------------------------------------------------------------------------------+ | :varlink:`SHI_ALLOW_GAMMAFRICT` | #define | allow friction velocity-dependent transfer coefficient following Holland and Jenkins (1999) :cite:`holland:99` | +---------------------------------+---------+----------------------------------------------------------------------------------------------------------------+ | :varlink:`SHI_SALTBAL_FWFLX` | #undef | use old freshwater balance to diagnose freshwater flux, problematic because allows division by zero | +---------------------------------+---------+----------------------------------------------------------------------------------------------------------------+ .. _shelfice_runtime: SHELFICE run-time parameters ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :filelink:`pkg/shelfice` is switched on/off at run time by setting :varlink:`useSHELFICE` to ``.TRUE.`` in file ``data.pkg``. Run-time parameters are set in file ``data.shelfice`` (read in :filelink:`pkg/shelfice/shelfice_readparms.F`),as listed below. The data file specifying under-ice topography of ice shelves (:varlink:`SHELFICEtopoFile`) is in meters; upwards is positive, and as for the bathymetry files, negative values are required for topography below the sea-level. The data file for the pressure load anomaly at the bottom of the ice shelves :varlink:`SHELFICEloadAnomalyFile` is in pressure units (Pa). This field is absolutely required to avoid large excursions of the free surface during initial adjustment processes, obtained by integrating an approximate density from the surface at :math:`z=0` down to the bottom of the last fully dry cell within the ice shelf, see :eq:`surfacepressure`. Note however the file :varlink:`SHELFICEloadAnomalyFile` must not be :math:`p_{top}`, but :math:`p_{top}-g\sum_{k'=1}^{n-1}\rho_c \Delta{z}_{k'}`, with :math:`\rho_c =` :varlink:`rhoConst`, so that in the absence of a :math:`\rho^{*}` that is different from :math:`\rho_c`, the anomaly is zero. .. tabularcolumns:: |\Y{.275}|\Y{.28}|\Y{.455}| .. table:: Run-time parameters and default values; all parameters are in namelist group ``SHELFICE_PARM01`` :name: tab_phys_pkg_shelfice_runtimeparms :class: longtable +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | Parameter | Default | Description | +========================================+============================================+=========================================================================================================+ | :varlink:`useISOMIPTD` | FALSE | use simplified ISOMIP thermodynamics on/off flag | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHELFICEconserve` | FALSE | use conservative form of temperature boundary conditions on/off flag | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHELFICEboundaryLayer` | FALSE | use simple boundary layer mixing parameterization on/off flag | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHI_withBL_realFWflux` | FALSE | with :varlink:`SHELFICEboundaryLayer`, allow to use real-FW flux | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHI_withBL_uStarTopDz` | FALSE | with :varlink:`SHELFICEboundaryLayer`, compute uStar from uVel,vVel averaged over top Dz thickness | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHELFICEloadAnomalyFile` | :kbd:`' '` | initial geopotential anomaly | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHELFICEtopoFile` | :kbd:`' '` | filename for under-ice topography of ice shelves | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHELFICEmassFile` | :kbd:`' '` | filename for mass of ice shelves | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHELFICEMassDynTendFile` | :kbd:`' '` | filename for mass tendency of ice shelves | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHELFICETransCoeffTFile` | :kbd:`' '` | filename for spatially varying transfer coefficients | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHELFICElatentHeat` | 334.0E+03 | latent heat of fusion (J/kg) | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHELFICEHeatCapacity_Cp` | 2000.0E+00 | specific heat capacity of ice (J/kg/K) | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`rhoShelfIce` | 917.0E+00 | (constant) mean density of ice shelf (kg/m\ :sup:`3`) | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHELFICEsalinity` | 0.0E+00 | (constant) salinity of ice shelf | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHELFICEheatTransCoeff` | 1.0E-04 | transfer coefficient (exchange velocity) for temperature (m/s) | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHELFICEsaltTransCoeff` | :varlink:`SHELFICEsaltToHeatRatio` * | transfer coefficient (exchange velocity) for salinity (m/s) | | | :varlink:`SHELFICEheatTransCoeff` | | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHELFICEsaltToHeatRatio` | 5.05E-03 | ratio of salinity to temperature transfer coefficients (non-dim.) | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHELFICEkappa` | 1.54E-06 | temperature diffusion coefficient of the ice shelf (m\ :sup:`2`\ /s) | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHELFICEthetaSurface` | -20.0E+00 | (constant) surface temperature above the ice shelf (:sup:`o`\ C) | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`no_slip_shelfice` | :varlink:`no_slip_bottom` | slip along bottom of ice shelf on/off flag | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHELFICEDragLinear` | :varlink:`bottomDragLinear` | linear drag coefficient at bottom ice shelf (m/s) | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHELFICEDragQuadratic` | :varlink:`bottomDragQuadratic` | quadratic drag coefficient at bottom ice shelf (non-dim.) | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHELFICEselectDragQuadr` | -1 | select form of quadratic drag coefficient (non-dim.) | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHELFICEMassStepping` | FALSE | recalculate ice shelf mass at every time step | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHELFICEDynMassOnly` | FALSE | if :varlink:`SHELFICEmassStepping` = TRUE, exclude freshwater flux contribution | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHELFICEadvDiffHeatFlux` | FALSE | use advective-diffusive heat flux into ice shelf instead of default diffusive heat flux | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHELFICEuseGammaFrict` | FALSE | use velocity dependent exchange coefficients (Holland and Jenkins 1999 :cite:`holland:99`) | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHELFICE_oldCalcUStar` | FALSE | use old uStar averaging expression | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHELFICEwriteState` | FALSE | write ice shelf state to file on/off flag | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHELFICE_dumpFreq` | :varlink:`dumpFreq` | dump frequency (s) | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ | :varlink:`SHELFICE_dump_mnc` | :varlink:`snapshot_mnc` | write snapshot using MNC on/off flag | +----------------------------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------+ SHELFICE description ~~~~~~~~~~~~~~~~~~~~ In the light of isomorphic equations for pressure and height coordinates, the ice shelf topography on top of the water column has a similar role as (and in the language of Marshall et al. (2004) :cite:`marshall:04`, is isomorphic to) the orography and the pressure boundary conditions at the bottom of the fluid for atmospheric and oceanic models in pressure coordinates. The total pressure :math:`p_{\rm tot}` in the ocean can be divided into the pressure at the top of the water column :math:`p_{\rm top}`, the hydrostatic pressure and the non-hydrostatic pressure contribution :math:`p_{\rm nh}`: .. math:: p_{\rm tot} = p_{\rm top} + \int_z^{\eta-h} g\,\rho\,dz + p_{\rm nh} :label: pressureocean with the gravitational acceleration :math:`g`, the density :math:`\rho`, the vertical coordinate :math:`z` (positive upwards), and the dynamic sea-surface height :math:`\eta`. For the open ocean, :math:`p_{\rm top}=p_{a}` (atmospheric pressure) and :math:`h=0`. Underneath an ice-shelf that is assumed to be floating in isostatic equilibrium, :math:`p_{\rm top}` at the top of the water column is the atmospheric pressure :math:`p_{a}` plus the weight of the ice-shelf. It is this weight of the ice-shelf that has to be provided as a boundary condition at the top of the water column (in run-time parameter :varlink:`SHELFICEloadAnomalyFile`). The weight is conveniently computed by integrating a density profile :math:`\rho^*`, that is constant in time and corresponds to the sea-water replaced by ice, from :math:`z=0` to a “reference” ice-shelf draft at :math:`z=-h` (Beckmann et al. (1999) :cite:`beckmann:99`), so that .. math:: p_{\rm top} = p_{a} + \int_{-h}^{0}g\,\rho^{*}\,dz :label: ptop Underneath the ice shelf, the “sea-surface height” :math:`\eta` is the deviation from the “reference” ice-shelf draft :math:`h`. During a model integration, :math:`\eta` adjusts so that the isostatic equilibrium is maintained for sufficiently slow and large scale motion. In MITgcm, the total pressure anomaly :math:`p'_{\rm tot}` which is used for pressure gradient computations is defined by subtracting a purely depth dependent contribution :math:`-g\rho_c z` using constant reference density :math:`\rho_c` from :math:`p_{\rm tot}`. :eq:`pressureocean` becomes .. math:: p_{\rm tot} = p_{\rm top} - g \rho_c (z+h) + g \rho_c \eta + \, \int_z^{\eta-h}{ g (\rho-\rho_c) \, dz} + \, p_{\rm nh} :label: pressure and after rearranging .. math:: p'_{\rm tot} = p'_{\rm top} + g \rho_c \eta + \, \int_z^{\eta-h}{g (\rho-\rho_c) \, dz} + \, p_{\rm nh} with :math:`p'_{\rm tot} = p_{\rm tot} + g\,\rho_c\,z` and :math:`p'_{\rm top} = p_{\rm top} - g\,\rho_c\,h`. The non-hydrostatic pressure contribution :math:`p_{\rm nh}` is neglected in the following. In practice, the ice shelf contribution to :math:`p_{\rm top}` is computed by integrating :eq:`ptop` from :math:`z=0` to the bottom of the last fully dry cell within the ice shelf: .. math:: p_{\rm top} = g\,\sum_{k'=1}^{n-1}\rho_{k'}^{*}\Delta{z_{k'}} + p_{a} :label: surfacepressure where :math:`n` is the vertical index of the first (at least partially) “wet” cell and :math:`\Delta{z_{k'}}` is the thickness of the :math:`k'`-th layer (counting downwards). The pressure anomaly for evaluating the pressure gradient is computed in the center of the “wet” cell :math:`k` as .. math:: p'_{k} = p'_{\rm top} + g\rho_{n}\eta + g\,\sum_{k'=n}^{k}\left((\rho_{k'}-\rho_c)\Delta{z_{k'}} \frac{1+H(k'-k)}{2}\right) :label: discretizedpressure where :math:`H(k'-k)=1` for :math:`k'`. .. _shelfice_isomip: ISOMIP thermodynamics ^^^^^^^^^^^^^^^^^^^^^ A simpler formulation follows the ISOMIP protocol. The freezing and melting in the boundary layer between ice shelf and ocean is parameterized following Grosfeld et al. (1997) :cite:`grosfeld:97`. In this formulation :eq:`jenkinsheatbudget` reduces to .. math:: c_{p} \, c_{p} \, \gamma_T (T - T_{b}) = -L q :label: isomipheatbalance and the fresh water flux :math:`q` is computed from .. math:: q = - \frac{c_{p} \, \rho_c \, \gamma_T (T - T_{b})}{L} :label: isomipfwflx In order to use this formulation, set runtime parameter :varlink:`useISOMIPTD` ``=.TRUE.`` in ``data.shelfice``. .. _shelfice_exchange_coeff: Exchange coefficients ^^^^^^^^^^^^^^^^^^^^^ The default exchange coefficents :math:`\gamma_{T/S}` are constant and set by the run-time parameters :varlink:`SHELFICEheatTransCoeff` and :varlink:`SHELFICEsaltTransCoeff` (see :numref:`tab_phys_pkg_shelfice_runtimeparms`). If :varlink:`SHELFICEuseGammaFrict` ``=.TRUE.``, exchange coefficients are computed from drag laws and friction velocities estimated from ocean speeds following Holland and Jenkins (1999) :cite:`holland:99`. This computation can be modified using runtime parameters and the user is referred to :filelink:`pkg/shelfice/shelfice_readparms.F` for details. Remark ^^^^^^ The shelfice package and experiments demonstrating its strengths and weaknesses are also described in Losch (2008) :cite:`losch:08`. Unfortunately, the description of the thermodynamics in the appendix of Losch (2008) is wrong. .. _shelfice_subroutines: Key subroutines ~~~~~~~~~~~~~~~ The main routine is :filelink:`shelfice_thermodynamics.F ` but note that :filelink:`/pkg/shelfice` routines are also called when solving the momentum equations. :: C !CALLING SEQUENCE: C ... C |-FORWARD_STEP :: Step forward a time-step ( AT LAST !!! ) C ... C | |-DO_OCEANIC_PHY :: Control oceanic physics and parameterization C ... C | | |-SHELFICE_THERMODYNAMICS :: main routine for thermodynamics C with diagnostics C ... C | |-THERMODYNAMICS :: theta, salt + tracer equations driver. C ... C | | |-EXTERNAL_FORCING_T :: Problem specific forcing for temperature. C | | |-SHELFICE_FORCING_T :: apply heat fluxes from ice shelf model C ... C | | |-EXTERNAL_FORCING_S :: Problem specific forcing for salinity. C | | |-SHELFICE_FORCING_S :: apply fresh water fluxes from ice shelf model C ... C | |-DYNAMICS :: Momentum equations driver. C ... C | | |-MOM_FLUXFORM :: Flux form mom eqn. package ( see C ... C | | | |-SHELFICE_U_DRAG :: apply drag along ice shelf to u-equation C with diagnostics C ... C | | |-MOM_VECINV :: Vector invariant form mom eqn. package ( see C ... C | | | |-SHELFICE_V_DRAG :: apply drag along ice shelf to v-equation C with diagnostics C ... C o .. _shelfice_diagnostics: SHELFICE diagnostics ~~~~~~~~~~~~~~~~~~~~ Diagnostics output is available via the diagnostics package (see :numref:`outp_pack`). Available output fields are summarized as follows: :: ---------+----+----+----------------+----------------- <-Name->|Levs|grid|<-- Units -->|<- Tile (max=80c) ---------+----+----+----------------+----------------- SHIfwFlx| 1 |SM |kg/m^2/s |Ice shelf fresh water flux (positive upward) SHIhtFlx| 1 |SM |W/m^2 |Ice shelf heat flux (positive upward) SHIUDrag| 30 |UU |m/s^2 |U momentum tendency from ice shelf drag SHIVDrag| 30 |VV |m/s^2 |V momentum tendency from ice shelf drag SHIForcT| 1 |SM |W/m^2 |Ice shelf forcing for theta, >0 increases theta SHIForcS| 1 |SM |g/m^2/s |Ice shelf forcing for salt, >0 increases salt Experiments and tutorials that use shelfice ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ See the verification experiment :filelink:`isomip ` for example usage of :filelink:`pkg/shelfice`.