MOM6
|
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.
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.
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.
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 ....
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.
Data Types | |
type | ice_shelf_cs |
Control structure that contains ice shelf parameters and diagnostics handles. More... | |
Functions/Subroutines | |
subroutine, public | shelf_calc_flux (state, fluxes, Time, time_step, CS, forces) |
Calculates fluxes between the ocean and ice-shelf using the three-equations formulation (optional to use just two equations). See ICE_SHELF equations. More... | |
subroutine | change_thickness_using_melt (ISS, G, time_step, fluxes, rho_ice, debug) |
Changes the thickness (mass) of the ice shelf based on sub-ice-shelf melting. More... | |
subroutine, public | add_shelf_forces (G, US, CS, forces, do_shelf_area) |
This subroutine adds the mechanical forcing fields and perhaps shelf areas, based on the ice state in ice_shelf_CS. More... | |
subroutine | add_shelf_pressure (G, US, CS, fluxes) |
This subroutine adds the ice shelf pressure to the fluxes type. More... | |
subroutine, public | add_shelf_flux (G, US, CS, state, fluxes) |
Updates surface fluxes that are influenced by sub-ice-shelf melting. More... | |
subroutine, public | initialize_ice_shelf (param_file, ocn_grid, Time, CS, diag, forces, fluxes, Time_in, solo_ice_sheet_in) |
Initializes shelf model data, parameters and diagnostics. More... | |
subroutine | initialize_shelf_mass (G, param_file, CS, ISS, new_sim) |
Initializes shelf mass based on three options (file, zero and user) More... | |
subroutine | update_shelf_mass (G, CS, ISS, Time) |
Updates the ice shelf mass using data from a file. More... | |
subroutine, public | ice_shelf_save_restart (CS, Time, directory, time_stamped, filename_suffix) |
Save the ice shelf restart file. More... | |
subroutine, public | ice_shelf_end (CS) |
Deallocates all memory associated with this module. More... | |
subroutine, public | solo_time_step (CS, time_step, nsteps, Time, min_time_step_in) |
This routine is for stepping a stand-alone ice shelf model without an ocean. More... | |
Variables | |
integer | id_clock_shelf |
CPU Clock for the ice shelf code. More... | |
integer | id_clock_pass |
CPU Clock for group pass calls. More... | |
subroutine, public mom_ice_shelf::add_shelf_flux | ( | type(ocean_grid_type), intent(inout) | G, |
type(unit_scale_type), intent(in) | US, | ||
type(ice_shelf_cs), pointer | CS, | ||
type(surface), intent(inout) | state, | ||
type(forcing), intent(inout) | fluxes | ||
) |
Updates surface fluxes that are influenced by sub-ice-shelf melting.
[in,out] | g | The ocean's grid structure. |
[in] | us | A dimensional unit scaling type |
cs | This module's control structure. | |
[in,out] | state | Surface ocean state |
[in,out] | fluxes | A structure of surface fluxes that may be used/updated. |
Definition at line 870 of file MOM_ice_shelf.F90.
References add_shelf_pressure(), mom_error_handler::mom_error(), mom_error_handler::mom_mesg(), mom_time_manager::real_to_time(), and mom_domains::to_all.
Referenced by shelf_calc_flux().
subroutine, public mom_ice_shelf::add_shelf_forces | ( | type(ocean_grid_type), intent(inout) | G, |
type(unit_scale_type), intent(in) | US, | ||
type(ice_shelf_cs), pointer | CS, | ||
type(mech_forcing), intent(inout) | forces, | ||
logical, intent(in), optional | do_shelf_area | ||
) |
This subroutine adds the mechanical forcing fields and perhaps shelf areas, based on the ice state in ice_shelf_CS.
[in,out] | g | The ocean's grid structure. |
[in] | us | A dimensional unit scaling type |
cs | This module's control structure. | |
[in,out] | forces | A structure with the driving mechanical forces |
[in] | do_shelf_area | If true find the shelf-covered areas. |
Definition at line 760 of file MOM_ice_shelf.F90.
References mom_error_handler::mom_error(), and mom_domains::to_all.
Referenced by initialize_ice_shelf(), mom_main(), shelf_calc_flux(), mom_ocean_model_mct::update_ocean_model(), and mom_ocean_model_nuopc::update_ocean_model().
|
private |
This subroutine adds the ice shelf pressure to the fluxes type.
[in,out] | g | The ocean's grid structure. |
[in] | us | A dimensional unit scaling type |
[in] | cs | This module's control structure. |
[in,out] | fluxes | A structure of surface fluxes that may be updated. |
Definition at line 841 of file MOM_ice_shelf.F90.
References mom_error_handler::mom_error().
Referenced by add_shelf_flux(), and initialize_ice_shelf().
|
private |
Changes the thickness (mass) of the ice shelf based on sub-ice-shelf melting.
[in,out] | g | The ocean's grid structure. |
[in,out] | iss | A structure with elements that describe the ice-shelf state |
[in] | time_step | The time step for this update [s]. |
[in,out] | fluxes | structure containing pointers to any possible thermodynamic or mass-flux forcing fields. |
[in] | rho_ice | The density of ice-shelf ice [kg m-2 Z-1 ~> kg m-3]. |
[in] | debug | If present and true, write chksums |
Definition at line 707 of file MOM_ice_shelf.F90.
Referenced by shelf_calc_flux().
subroutine, public mom_ice_shelf::ice_shelf_end | ( | type(ice_shelf_cs), pointer | CS | ) |
Deallocates all memory associated with this module.
cs | A pointer to the ice shelf control structure |
Definition at line 1744 of file MOM_ice_shelf.F90.
References mom_ice_shelf_dynamics::ice_shelf_dyn_end(), and mom_ice_shelf_state::ice_shelf_state_end().
Referenced by mom_main(), mom_ocean_model_nuopc::ocean_model_end(), and mom_ocean_model_mct::ocean_model_end().
subroutine, public mom_ice_shelf::ice_shelf_save_restart | ( | type(ice_shelf_cs), pointer | CS, |
type(time_type), intent(in) | Time, | ||
character(len=*), intent(in), optional | directory, | ||
logical, intent(in), optional | time_stamped, | ||
character(len=*), intent(in), optional | filename_suffix | ||
) |
Save the ice shelf restart file.
cs | ice shelf control structure | |
[in] | time | model time at this call |
[in] | directory | An optional directory into which to write these restart files. |
[in] | time_stamped | f true, the restart file names include a unique time stamp. The default is false. |
[in] | filename_suffix | An optional suffix (e.g., a time-stamp) to append to the restart file names. |
Definition at line 1721 of file MOM_ice_shelf.F90.
Referenced by mom_main(), mom_ocean_model_nuopc::ocean_model_restart(), mom_ocean_model_mct::ocean_model_restart(), mom_ocean_model_nuopc::ocean_model_save_restart(), mom_ocean_model_mct::ocean_model_save_restart(), and ocn_comp_mct::ocn_run_mct().
subroutine, public mom_ice_shelf::initialize_ice_shelf | ( | type(param_file_type), intent(in) | param_file, |
type(ocean_grid_type), pointer | ocn_grid, | ||
type(time_type), intent(inout) | Time, | ||
type(ice_shelf_cs), pointer | CS, | ||
type(diag_ctrl), intent(in), target | diag, | ||
type(mech_forcing), intent(inout), optional | forces, | ||
type(forcing), intent(inout), optional | fluxes, | ||
type(time_type), intent(in), optional | Time_in, | ||
logical, intent(in), optional | solo_ice_sheet_in | ||
) |
Initializes shelf model data, parameters and diagnostics.
[in] | param_file | A structure to parse for run-time parameters |
ocn_grid | The calling ocean model's horizontal grid structure | |
[in,out] | time | The clock that that will indicate the model time |
cs | A pointer to the ice shelf control structure | |
[in] | diag | A structure that is used to regulate the diagnostic output. |
[in,out] | fluxes | A structure containing pointers to any possible thermodynamic or mass-flux forcing fields. |
[in,out] | forces | A structure with the driving mechanical forces |
[in] | time_in | The time at initialization. |
[in] | solo_ice_sheet_in | If present, this indicates whether a solo ice-sheet driver. |
Definition at line 1082 of file MOM_ice_shelf.F90.
References add_shelf_forces(), add_shelf_pressure(), mom_transcribe_grid::copy_dyngrid_to_mom_grid(), 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, mom_ice_shelf_initialize::initialize_ice_thickness(), initialize_shelf_mass(), mom_error_handler::is_root_pe(), mom_error_handler::mom_error(), mom_grid::mom_grid_init(), mom_error_handler::mom_mesg(), mom_dyn_horgrid::rescale_dyn_horgrid_bathymetry(), mom_restart::restart_init(), mom_restart::restore_state(), mom_grid_initialize::set_grid_metrics(), and mom_unit_scaling::unit_scaling_init().
Referenced by mom_main().
|
private |
Initializes shelf mass based on three options (file, zero and user)
[in] | g | The ocean's grid structure. |
[in] | param_file | A structure to parse for run-time parameters |
cs | A pointer to the ice shelf control structure | |
[in,out] | iss | The ice shelf state type that is being updated |
[in] | new_sim | If present and false, this run is being restarted |
Definition at line 1602 of file MOM_ice_shelf.F90.
References mom_error_handler::mom_error().
Referenced by initialize_ice_shelf().
subroutine, public mom_ice_shelf::shelf_calc_flux | ( | type(surface), intent(inout) | state, |
type(forcing), intent(inout) | fluxes, | ||
type(time_type), intent(in) | Time, | ||
real, intent(in) | time_step, | ||
type(ice_shelf_cs), pointer | CS, | ||
type(mech_forcing), intent(inout), optional | forces | ||
) |
Calculates fluxes between the ocean and ice-shelf using the three-equations formulation (optional to use just two equations). See ICE_SHELF equations.
[in,out] | state | A structure containing fields that describe the surface state of the ocean. The intent is only inout to allow for halo updates. |
[in,out] | fluxes | structure containing pointers to any possible thermodynamic or mass-flux forcing fields. |
[in] | time | Start time of the fluxes. |
[in] | time_step | Length of time over which these fluxes will be applied [s]. |
cs | A pointer to the control structure returned by a previous call to initialize_ice_shelf. | |
[in,out] | forces | A structure with the driving mechanical forces |
Definition at line 193 of file MOM_ice_shelf.F90.
References add_shelf_flux(), add_shelf_forces(), change_thickness_using_melt(), mom_diag_mediator::disable_averaging(), mom_diag_mediator::enable_averaging(), id_clock_pass, id_clock_shelf, mom_error_handler::mom_error(), and update_shelf_mass().
Referenced by mom_main().
subroutine, public mom_ice_shelf::solo_time_step | ( | type(ice_shelf_cs), pointer | CS, |
real, intent(in) | time_step, | ||
integer, intent(inout) | nsteps, | ||
type(time_type), intent(inout) | Time, | ||
real, intent(in), optional | min_time_step_in | ||
) |
This routine is for stepping a stand-alone ice shelf model without an ocean.
cs | A pointer to the ice shelf control structure | |
[in] | time_step | The time interval for this update [s]. |
[in,out] | nsteps | The running number of ice shelf steps. |
[in,out] | time | The current model time |
[in] | min_time_step_in | The minimum permitted time step [s]. |
Definition at line 1758 of file MOM_ice_shelf.F90.
References mom_diag_mediator::disable_averaging(), mom_diag_mediator::enable_averaging(), mom_ice_shelf_dynamics::ice_time_step_cfl(), mom_error_handler::mom_error(), and mom_error_handler::mom_mesg().
|
private |
Updates the ice shelf mass using data from a file.
[in,out] | g | The ocean's grid structure. |
[in] | cs | A pointer to the ice shelf control structure |
[in,out] | iss | The ice shelf state type that is being updated |
[in] | time | The current model time |
Definition at line 1683 of file MOM_ice_shelf.F90.
Referenced by shelf_calc_flux().
|
private |
CPU Clock for group pass calls.
Definition at line 185 of file MOM_ice_shelf.F90.
Referenced by initialize_ice_shelf(), and shelf_calc_flux().
integer mom_ice_shelf::id_clock_shelf |
CPU Clock for the ice shelf code.
Definition at line 184 of file MOM_ice_shelf.F90.
Referenced by initialize_ice_shelf(), and shelf_calc_flux().