mom_ice_shelf module reference

Implements the thermodynamic aspects of ocean / ice-shelf interactions, along with a crude placeholder for a later implementation of full ice shelf dynamics, all using the MOM framework and coding style.

More…

Data Types

ice_shelf_cs

Control structure that contains ice shelf parameters and diagnostics handles.

Functions/Subroutines

shelf_calc_flux()

Calculates fluxes between the ocean and ice-shelf using the three-equations formulation (optional to use just two equations).

change_thickness_using_melt()

Changes the thickness (mass) of the ice shelf based on sub-ice-shelf melting.

add_shelf_forces()

This subroutine adds the mechanical forcing fields and perhaps shelf areas, based on the ice state in ice_shelf_CS.

add_shelf_pressure()

This subroutine adds the ice shelf pressure to the fluxes type.

add_shelf_flux()

Updates surface fluxes that are influenced by sub-ice-shelf melting.

initialize_ice_shelf()

Initializes shelf model data, parameters and diagnostics.

initialize_ice_shelf_fluxes()

initialize_ice_shelf_forces()

initialize_shelf_mass()

Initializes shelf mass based on three options (file, zero and user)

change_thickness_using_precip()

This subroutine applies net accumulation/ablation at the top surface to the dynamic ice shelf.

update_shelf_mass()

Updates the ice shelf mass using data from a file.

ice_shelf_query()

Save the ice shelf restart file.

ice_shelf_save_restart()

Save the ice shelf restart file.

ice_shelf_end()

Deallocates all memory associated with this module.

solo_step_ice_shelf()

This routine is for stepping a stand-alone ice shelf model without an ocean.

Detailed Description

section_ICE_SHELF

This module implements the thermodynamic aspects of ocean/ice-shelf inter-actions using the MOM framework and coding style.

Derived from code by Chris Little, early 2010.

The ice-sheet dynamics subroutines do the following: initialize_shelf_mass - Initializes the ice shelf mass distribution. * Initializes h_shelf, h_mask, area_shelf_h

  • CURRENTLY: initializes mass_shelf as well, but this is unnecessary, as mass_shelf is initialized based on h_shelf and density_ice immediately afterwards. Possibly subroutine should be renamed update_shelf_mass - updates ice shelf mass via netCDF file USER_update_shelf_mass (TODO). solo_step_ice_shelf - called only in ice-only mode. shelf_calc_flux - after melt rate & fluxes are calculated, ice dynamics are done. Currently mass_shelf is updated immediately after ice_shelf_advect in fully dynamic mode.

NOTES: be aware that hmask(:,:) has a number of functions; it is used for front advancement, for subroutines in the velocity solve, and for thickness boundary conditions (this last one may be removed). in other words, interfering with its updates will have implications you might not expect.

Overall issues: Many variables need better documentation and units and the subgrid on which they are discretized.

ICE_SHELF equations

The three fundamental equations are: Heat flux

\[\qquad \rho_w C_{pw} \gamma_T (T_w - T_b) = \rho_i \dot{m} L_f\]

Salt flux

\[\qquad \rho_w \gamma_s (S_w - S_b) = \rho_i \dot{m} S_b\]

Freezing temperature

\[\qquad T_b = a S_b + b + c P\]

where ….

References

Asay-Davis, Xylar S., Stephen L. Cornford, Benjamin K. Galton-Fenzi, Rupert M. Gladstone, G. Hilmar Gudmundsson, David M. Holland, Paul R. Holland, and Daniel F. Martin. Experimental design for three interrelated marine ice sheet and ocean model intercomparison projects: MISMIP v. 3 (MISMIP+), ISOMIP v. 2 (ISOMIP+) and MISOMIP v. 1 (MISOMIP1). Geoscientific Model Development 9, no. 7 (2016): 2471.

Goldberg, D. N., et al. Investigation of land ice-ocean interaction with a fully coupled ice-ocean model: 1. Model description and behavior. Journal of Geophysical Research: Earth Surface 117.F2 (2012).

Goldberg, D. N., et al. Investigation of land ice-ocean interaction with a fully coupled ice-ocean model: 2. Sensitivity to external forcings. Journal of Geophysical Research: Earth Surface 117.F2 (2012).

Holland, David M., and Adrian Jenkins. Modeling thermodynamic ice-ocean interactions at the base of an ice shelf. Journal of Physical Oceanography 29.8 (1999): 1787-1800.

Type Documentation

type mom_ice_shelf/ice_shelf_cs

Control structure that contains ice shelf parameters and diagnostics handles.

Type fields:
  • % id_melt [integer] :: Diagnostic handles.

  • % id_exch_vel_s [integer] :: Diagnostic handles.

  • % id_exch_vel_t [integer] :: Diagnostic handles.

  • % id_tfreeze [integer] :: Diagnostic handles.

  • % id_tfl_shelf [integer] :: Diagnostic handles.

  • % id_thermal_driving [integer] :: Diagnostic handles.

  • % id_haline_driving [integer] :: Diagnostic handles.

  • % id_u_ml [integer] :: Diagnostic handles.

  • % id_v_ml [integer] :: Diagnostic handles.

  • % id_sbdry [integer] :: Diagnostic handles.

  • % id_h_shelf [integer] :: Diagnostic handles.

  • % id_dhdt_shelf [integer] :: Diagnostic handles.

  • % id_h_mask [integer] :: Diagnostic handles.

  • % id_surf_elev [integer] :: Diagnostic handles.

  • % id_bathym [integer] :: Diagnostic handles.

  • % id_area_shelf_h [integer] :: Diagnostic handles.

  • % id_ustar_shelf [integer] :: Diagnostic handles.

  • % id_shelf_mass [integer] :: Diagnostic handles.

  • % id_mass_flux [integer] :: Diagnostic handles.

  • % id_shelf_sfc_mass_flux [integer] :: Diagnostic handles.

  • % restart_csp [type( mom_restart_cs ),pointer] :: A pointer to the restart control structure for the ice shelves.

  • % grid_in [type( ocean_grid_type ),pointer] :: un-rotated input grid metric

  • % hi_in [type( hor_index_type ),pointer] :: Pointer to a horizontal indexing structure for incoming data which has not been rotated.

  • % hi [type( hor_index_type ),pointer] :: Pointer to a horizontal indexing structure for incoming data which has not been rotated.

  • % rotate_index [logical] :: True if index map is rotated.

  • % turns [integer] :: The number of quarter turns for rotation testing.

  • % grid [type( ocean_grid_type ),pointer] :: Grid for the ice-shelf model.

  • % us [type( unit_scale_type ),pointer] :: A structure containing various unit conversion factors.

  • % ocn_grid [type( ocean_grid_type ),pointer] :: A pointer to the ocean model grid The rest is private.

  • % flux_factor [real] :: A factor that can be used to turn off ice shelf melting (flux_factor = 0) [nondim].

  • % restart_output_dir [character (len=128)] :: The directory in which to write restart files.

  • % iss [type( ice_shelf_state ),pointer] :: A structure with elements that describe the ice-shelf state.

  • % dcs [type( ice_shelf_dyn_cs ),pointer] :: The control structure for the ice-shelf dynamics.

  • % utide [real(:,:),pointer] :: An unresolved tidal velocity [L T-1 ~> m s-1].

  • % ustar_bg [real] :: A minimum value for ustar under ice shelves [Z T-1 ~> m s-1].

  • % ustar_max [real] :: A maximum value for ustar under ice shelves, or a negative value to have no limit [Z T-1 ~> m s-1].

  • % cdrag [real] :: drag coefficient under ice shelves [nondim].

  • % g_earth [real] :: The gravitational acceleration [L2 Z-1 T-2 ~> m s-2].

  • % cp [real] :: The heat capacity of sea water [Q C-1 ~> J kg-1 degC-1].

  • % rho_ocn [real] :: A reference ocean density [R ~> kg m-3].

  • % cp_ice [real] :: The heat capacity of fresh ice [Q C-1 ~> J kg-1 degC-1].

  • % gamma_t [real] :: The (fixed) turbulent exchange velocity in the 2-equation formulation [Z T-1 ~> m s-1].

  • % salin_ice [real] :: The salinity of shelf ice [S ~> ppt].

  • % temp_ice [real] :: The core temperature of shelf ice [C ~> degC].

  • % kv_ice [real] :: The viscosity of ice [L4 Z-2 T-1 ~> m2 s-1].

  • % density_ice [real] :: A typical density of ice [R ~> kg m-3].

  • % kv_molec [real] :: The molecular kinematic viscosity of sea water [Z2 T-1 ~> m2 s-1].

  • % kd_molec_salt [real] :: The molecular diffusivity of salt [Z2 T-1 ~> m2 s-1].

  • % kd_molec_temp [real] :: The molecular diffusivity of heat [Z2 T-1 ~> m2 s-1].

  • % lat_fusion [real] :: The latent heat of fusion [Q ~> J kg-1].

  • % gamma_t_3eq [real] :: Nondimensional heat-transfer coefficient, used in the 3Eq. formulation.

  • % gamma_s_3eq [real] :: Nondimensional salt-transfer coefficient, used in the 3Eq. formulation This number should be specified by the user.

  • % col_mass_melt_threshold [real] :: An ocean column mass below the iceshelf below which melting does not occur [R Z ~> kg m-2].

  • % mass_from_file [logical] :: Read the ice shelf mass from a file every dt.

  • % ustar_shelf_from_vel [logical] :: If true, use the surface velocities, and not the previous values of the stresses to set ustar.

  • % time_step [real] :: this is the shortest timestep that the ice shelf sees [T ~> s], and is equal to the forcing timestep (it is passed in when the shelf is initialized - so need to reorganize MOM driver. it will be the prognostic timestep … maybe.

  • % solo_ice_sheet [logical] :: whether the ice model is running without being coupled to the ocean

  • % gl_regularize [logical] :: whether to regularize the floatation condition at the grounding line a la Goldberg Holland Schoof 2009

  • % gl_couple [logical] :: whether to let the floatation condition be determined by ocean column thickness means update_OD_ffrac will be called (note: GL_regularize and GL_couple should be exclusive)

  • % calve_to_mask [logical] :: If true, calve any ice that passes outside of a masked area.

  • % min_thickness_simple_calve [real] :: min. ice shelf thickness criteria for calving [Z ~> m].

  • % t0 [real] :: temperature at ocean surface in the restoring region [C ~> degC]

  • % s0 [real] :: Salinity at ocean surface in the restoring region [S ~> ppt].

  • % input_flux [real] :: The vertically integrated inward ice thickness flux per unit face length at an upstream boundary [Z L T-1 ~> m2 s-1].

  • % input_thickness [real] :: Ice thickness at an upstream open boundary [Z ~> m].

  • % time [type(time_type)] :: The component’s time.

  • % eqn_of_state [type( eos_type )] :: Type that indicates the equation of state to use.

  • % active_shelf_dynamics [logical] :: True if the ice shelf mass changes as a result the dynamic ice-shelf model.

  • % shelf_mass_is_dynamic [logical] :: True if ice shelf mass changes over time. If true, ice shelf dynamics will be initialized.

  • % data_override_shelf_fluxes [logical] :: True if the ice shelf surface mass fluxes can be written using the data_override feature (only for MOSAIC grids)

  • % override_shelf_movement [logical] :: If true, user code specifies the shelf movement instead of using the dynamic ice-shelf mode.

  • % isthermo [logical] :: True if the ice shelf can exchange heat and mass with the underlying ocean.

  • % threeeq [logical] :: If true, the 3 equation consistency equations are used to calculate the flux at the ocean-ice interface.

  • % insulator [logical] :: If true, ice shelf is a perfect insulator.

  • % const_gamma [logical] :: If true, gamma_T is specified by the user.

  • % constant_sea_level [logical] :: if true, apply an evaporative, heat and salt fluxes. It will avoid large increase in sea level.

  • % constant_sea_level_misomip [logical] :: If true, constant_sea_level fluxes are applied only over the surface sponge cells from the ISOMIP/MISOMIP configuration.

  • % min_ocean_mass_float [real] :: The minimum ocean mass per unit area before the ice shelf is considered to float when constant_sea_level is used [R Z ~> kg m-2].

  • % cutoff_depth [real] :: Depth above which melt is set to zero (>= 0) [Z ~> m].

  • % find_salt_root [logical] :: If true, if true find Sbdry using a quadratic eq.

  • % tfr_0_0 [real] :: The freezing point at 0 pressure and 0 salinity [C ~> degC].

  • % dtfr_ds [real] :: Partial derivative of freezing temperature with salinity [C S-1 ~> degC ppt-1].

  • % dtfr_dp [real] :: Partial derivative of freezing temperature with pressure [C T2 R-1 L-2 ~> degC Pa-1].

  • % zeta_n [real] :: The stability constant xi_N = 0.052 from Holland & Jenkins ‘99 divided by the von Karman constant VK. Was 1/8.

  • % vk [real] :: Von Karman’s constant - dimensionless.

  • % rc [real] :: critical flux Richardson number.

  • % buoy_flux_itt_bug [logical] :: If true, fixes buoyancy iteration bug.

  • % salt_flux_itt_bug [logical] :: If true, fixes salt iteration bug.

  • % buoy_flux_itt_threshold [real] :: Buoyancy iteration threshold for convergence.

  • % mass_handle [type(external_field)] :: Handle for reading the time interpolated ice shelf mass from a file.

  • % area_handle [type(external_field)] :: Handle for reading the time interpolated ice shelf area from a file.

  • % diag [type( diag_ctrl ),pointer] :: A structure that is used to control diagnostic output.

  • % user_cs [type( user_ice_shelf_cs ),pointer] :: A pointer to the control structure for user-supplied modifications to the ice shelf code.

  • % debug [logical] :: If true, write verbose checksums for debugging purposes and use reproducible sums.

Function/Subroutine Documentation

subroutine mom_ice_shelf/shelf_calc_flux(sfc_state_in, fluxes_in, Time, time_step_in, CS)

Calculates fluxes between the ocean and ice-shelf using the three-equations formulation (optional to use just two equations). See ICE_SHELF equations.

Parameters:
  • sfc_state_in :: [inout] A structure containing fields that describe the surface state of the ocean. The intent is only inout to allow for halo updates.

  • fluxes_in :: [inout] structure containing pointers to any possible thermodynamic or mass-flux forcing fields.

  • time :: [in] Start time of the fluxes.

  • time_step_in :: [in] Length of time over which these fluxes will be applied [T ~> s].

  • cs :: A pointer to the control structure returned by a previous call to initialize_ice_shelf.

Call to:

add_shelf_flux change_thickness_using_melt change_thickness_using_precip id_clock_pass id_clock_shelf mom_error_handler::mom_error mom_forcing_type::rotate_forcing mom_variables::rotate_surface_state update_shelf_mass

Called from:

mom6

subroutine mom_ice_shelf/change_thickness_using_melt(ISS, G, US, time_step, fluxes, density_ice, debug)

Changes the thickness (mass) of the ice shelf based on sub-ice-shelf melting.

Parameters:
  • g :: [inout] The ocean’s grid structure.

  • iss :: [inout] A structure with elements that describe the ice-shelf state

  • us :: [in] A dimensional unit scaling type

  • time_step :: [in] The time step for this update [T ~> s].

  • fluxes :: [inout] structure containing pointers to any possible thermodynamic or mass-flux forcing fields.

  • density_ice :: [in] The density of ice-shelf ice [R ~> kg m-3].

  • debug :: [in] If present and true, write chksums

Called from:

shelf_calc_flux

subroutine mom_ice_shelf/add_shelf_forces(Ocn_grid, US, CS, forces, do_shelf_area, external_call)

This subroutine adds the mechanical forcing fields and perhaps shelf areas, based on the ice state in ice_shelf_CS.

Parameters:
  • ocn_grid :: [in] The ocean’s grid structure.

  • us :: [in] A dimensional unit scaling type

  • cs :: This module’s control structure.

  • forces :: [inout] A structure with the driving mechanical forces

  • do_shelf_area :: [in] If true find the shelf-covered areas.

  • external_call :: [in] If true the incoming forcing type is using the input grid metric and needs to be rotated.

Call to:

mom_error_handler::mom_error

Called from:

initialize_ice_shelf_forces mom6 ocean_model_mod::update_ocean_model

subroutine mom_ice_shelf/add_shelf_pressure(Ocn_grid, US, CS, fluxes)

This subroutine adds the ice shelf pressure to the fluxes type.

Parameters:
  • ocn_grid :: [in] The ocean’s grid structure.

  • us :: [in] A dimensional unit scaling type

  • cs :: [in] This module’s control structure.

  • fluxes :: [inout] A structure of surface fluxes that may be updated.

Call to:

mom_error_handler::mom_error

Called from:

add_shelf_flux initialize_ice_shelf_fluxes

subroutine mom_ice_shelf/add_shelf_flux(G, US, CS, sfc_state, fluxes, time_step)

Updates surface fluxes that are influenced by sub-ice-shelf melting.

Parameters:
  • g :: [inout] The ocean’s grid structure.

  • us :: [in] A dimensional unit scaling type

  • cs :: This module’s control structure.

  • sfc_state :: [inout] Surface ocean state

  • fluxes :: [inout] A structure of surface fluxes that may be used/updated.

  • time_step :: [in] Time step over which fluxes are applied

Call to:

add_shelf_pressure mom_spatial_means::global_area_integral mom_error_handler::mom_error mom_error_handler::mom_mesg

Called from:

shelf_calc_flux

subroutine mom_ice_shelf/initialize_ice_shelf(param_file, ocn_grid, Time, CS, diag, Time_init, directory, forces_in, fluxes_in, sfc_state_in, solo_ice_sheet_in)

Initializes shelf model data, parameters and diagnostics.

Parameters:
  • param_file :: [in] A structure to parse for run-time parameters

  • ocn_grid :: The calling ocean model’s horizontal grid structure

  • time :: [inout] The clock that that will indicate the model time

  • cs :: A pointer to the ice shelf control structure

  • diag :: This is a pointer to the MOM diag CS which will be discarded

  • time_init :: [in] The time at initialization.

  • directory :: [in] The directory where the energy file goes.

  • forces_in :: [inout] A structure with the driving mechanical forces

  • fluxes_in :: [inout] A structure containing pointers to any possible thermodynamic or mass-flux forcing fields.

  • sfc_state_in :: [inout] A structure containing fields that describe the surface state of the ocean. The intent is only inout to allow for halo updates.

  • solo_ice_sheet_in :: [in] If present, this indicates whether a solo ice-sheet driver.

Call to:

mom_dyn_horgrid::create_dyn_horgrid mom_dyn_horgrid::destroy_dyn_horgrid mom_eos::eos_init mom_unit_scaling::fix_restart_unit_scaling mom_get_input::get_mom_input mom_ice_shelf_state::ice_shelf_state_init id_clock_pass id_clock_shelf initialize_ice_shelf_fluxes initialize_ice_shelf_forces mom_ice_shelf_initialize::initialize_ice_thickness initialize_shelf_mass mom_error_handler::mom_error mom_grid::mom_grid_init mom_is_diag_mediator::mom_is_diag_mediator_close_registration mom_error_handler::mom_mesg mom_restart::restart_init mom_restart::restore_state mom_variables::rotate_surface_state mom_grid_initialize::set_grid_metrics mom_unit_scaling::unit_scaling_init

Called from:

mom::initialize_mom mom6

subroutine mom_ice_shelf/initialize_ice_shelf_fluxes(CS, ocn_grid, US, fluxes_in)
Parameters:
  • cs :: A pointer to the ice shelf control structure

  • ocn_grid :: The calling ocean model’s horizontal grid structure

  • us :: [in] A dimensional unit scaling type

  • fluxes_in :: [inout] A structure containing pointers to any possible thermodynamic or mass-flux forcing fields.

Call to:

add_shelf_pressure mom_error_handler::mom_mesg mom_forcing_type::rotate_forcing

Called from:

initialize_ice_shelf mom6

subroutine mom_ice_shelf/initialize_ice_shelf_forces(CS, ocn_grid, US, forces_in)
Parameters:
  • cs :: A pointer to the ice shelf control structure

  • ocn_grid :: The calling ocean model’s horizontal grid structure

  • us :: [in] A dimensional unit scaling type

  • forces_in :: [inout] A structure with the driving mechanical forces

Call to:

add_shelf_forces mom_error_handler::mom_mesg mom_forcing_type::rotate_mech_forcing

Called from:

initialize_ice_shelf mom6

subroutine mom_ice_shelf/initialize_shelf_mass(G, param_file, CS, ISS, new_sim)

Initializes shelf mass based on three options (file, zero and user)

Parameters:
  • g :: [in] The ocean’s grid structure.

  • param_file :: [in] A structure to parse for run-time parameters

  • cs :: A pointer to the ice shelf control structure

  • iss :: [inout] The ice shelf state type that is being updated

  • new_sim :: [in] If present and false, this run is being restarted

Call to:

mom_error_handler::mom_error

Called from:

initialize_ice_shelf

subroutine mom_ice_shelf/change_thickness_using_precip(CS, ISS, G, US, fluxes, time_step, Time)

This subroutine applies net accumulation/ablation at the top surface to the dynamic ice shelf. >acc_rate[m-s]=surf_mass_flux/density_ice is ablation/accumulation rate >positive for accumulation negative for ablation.

Parameters:
  • cs :: [in] A pointer to the ice shelf control structure

  • g :: [inout] The ocean’s grid structure.

  • iss :: [inout] A structure with elements that describe the ice-shelf state

  • fluxes :: [in] A structure of surface fluxes that includes surface mass flux

  • time :: [in] The current model time

  • us :: [in] A dimensional unit scaling type

  • time_step :: [in] The time step for this update [T ~> s].

Called from:

shelf_calc_flux solo_step_ice_shelf

subroutine mom_ice_shelf/update_shelf_mass(G, US, CS, ISS, Time)

Updates the ice shelf mass using data from a file.

Parameters:
  • g :: [inout] The ocean’s grid structure.

  • us :: [in] A dimensional unit scaling type

  • cs :: [in] A pointer to the ice shelf control structure

  • iss :: [inout] The ice shelf state type that is being updated

  • time :: [in] The current model time

Called from:

shelf_calc_flux

subroutine mom_ice_shelf/ice_shelf_query(CS, G, frac_shelf_h, mass_shelf, data_override_shelf_fluxes)

Save the ice shelf restart file.

Parameters:
  • cs :: ice shelf control structure

  • g :: [in] A pointer to an ocean grid control structure.

  • frac_shelf_h :: [out] Ice shelf area fraction [nondim].

  • mass_shelf :: [out] Ice shelf mass [R Z ~> kg m-2]

  • data_override_shelf_fluxes :: If true, shelf fluxes can be written using the data_override capability (only for MOSAIC grids)

Called from:

mom::initialize_mom mom6

subroutine mom_ice_shelf/ice_shelf_save_restart(CS, Time, directory, time_stamped, filename_suffix)

Save the ice shelf restart file.

Parameters:
  • cs :: ice shelf control structure

  • time :: [in] model time at this call

  • directory :: [in] An optional directory into which to write these restart files.

  • time_stamped :: [in] f true, the restart file names include a unique time stamp. The default is false.

  • filename_suffix :: [in] An optional suffix (e.g., a time-stamp) to append to the restart file names.

Called from:

mom6 ocean_model_mod::ocean_model_restart ocean_model_mod::ocean_model_save_restart

subroutine mom_ice_shelf/ice_shelf_end(CS)

Deallocates all memory associated with this module.

Parameters:

cs :: A pointer to the ice shelf control structure

Call to:

mom_ice_shelf_dynamics::ice_shelf_dyn_end mom_ice_shelf_state::ice_shelf_state_end

Called from:

mom6 ocean_model_mod::ocean_model_end

subroutine mom_ice_shelf/solo_step_ice_shelf(CS, time_interval, nsteps, Time, min_time_step_in, fluxes_in)

This routine is for stepping a stand-alone ice shelf model without an ocean.

Parameters:
  • cs :: A pointer to the ice shelf control structure

  • time_interval :: [in] The time interval for this update [s].

  • nsteps :: [inout] The running number of ice shelf steps.

  • time :: [inout] The current model time

  • min_time_step_in :: [in] The minimum permitted time step [T ~> s].

  • fluxes_in :: [inout] A structure containing pointers to any possible thermodynamic or mass-flux forcing fields.

Call to:

change_thickness_using_precip mom_ice_shelf_dynamics::ice_time_step_cfl mom_error_handler::mom_error mom_error_handler::mom_mesg