MOM6
|
Implements the thermodynamic aspects of ocean / ice-shelf interactions,.
This module implements the thermodynamic aspects of ocean/ice-shelf inter-actions, along with a crude placeholder for a later implementation of full ice shelf dynamics, all using the MOM framework and coding style.
Derived from code by Chris Little, early 2010.
NOTE: THERE ARE A NUMBER OF SUBROUTINES WITH "TRIANGLE" IN THE NAME; THESE HAVE NOT BEEN TESTED AND SHOULD PROBABLY BE PHASED OUT
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.
DNG 4/09/11 : due to a misunderstanding (i confused a SYMMETRIC GRID a SOUTHWEST GRID there is a variable called "isym" that appears throughout in array loops. i am leaving it in for now, though uniformly setting it to zero
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 | |
real function | slope_limiter (num, denom) |
used for flux limiting in advective subroutines Van Leer limiter (source: Wikipedia) More... | |
real function | quad_area (X, Y) |
Calculate area of quadrilateral. More... | |
subroutine, public | shelf_calc_flux (state, fluxes, Time, time_step, CS) |
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 (CS, G, time_step, fluxes) |
Changes the thickness (mass) of the ice shelf based on sub-ice-shelf melting. More... | |
subroutine, public | add_shelf_flux (G, CS, state, fluxes) |
Updates suface fluxes that are influenced by sub-ice-shelf melting. More... | |
subroutine, public | initialize_ice_shelf (param_file, ocn_grid, Time, CS, diag, fluxes, Time_in, solo_ice_sheet_in) |
Initializes shelf model data, parameters and diagnostics. More... | |
subroutine | initialize_shelf_mass (G, param_file, CS, new_sim) |
Initializes shelf mass based on three options (file, zero and user) More... | |
subroutine | update_shelf_mass (G, CS, Time, fluxes) |
Updates the ice shelf mass using data from a file. More... | |
subroutine | initialize_diagnostic_fields (CS, FE, Time) |
subroutine, public | ice_shelf_save_restart (CS, Time, directory, time_stamped, filename_suffix) |
Save the ice shelf restart file. More... | |
subroutine | ice_shelf_advect (CS, time_step, melt_rate, Time) |
subroutine | ice_shelf_solve_outer (CS, u, v, FE, iters, time) |
subroutine | ice_shelf_solve_inner (CS, u, v, taudx, taudy, H_node, float_cond, FE, conv_flag, iters, time, Phi, Phisub) |
subroutine | ice_shelf_advect_thickness_x (CS, time_step, h0, h_after_uflux, flux_enter) |
subroutine | ice_shelf_advect_thickness_y (CS, time_step, h_after_uflux, h_after_vflux, flux_enter) |
subroutine | shelf_advance_front (CS, flux_enter) |
subroutine | ice_shelf_min_thickness_calve (CS, h_shelf, area_shelf_h, hmask) |
Apply a very simple calving law using a minimum thickness rule. More... | |
subroutine | calve_to_mask (CS, h_shelf, area_shelf_h, hmask, calve_mask) |
subroutine | calc_shelf_driving_stress (CS, TAUD_X, TAUD_Y, OD, FE) |
subroutine | init_boundary_values (CS, time, input_flux, input_thick, new_sim) |
subroutine | cg_action_triangular (uret, vret, u, v, umask, vmask, hmask, nu_upper, nu_lower, beta_upper, beta_lower, dxh, dyh, dxdyh, is, ie, js, je, isym) |
subroutine | cg_action_bilinear (uret, vret, u, v, Phi, Phisub, umask, vmask, hmask, H_node, nu, float_cond, D, beta, dxdyh, is, ie, js, je, dens_ratio) |
subroutine | cg_action_subgrid_basal_bilinear (Phisub, H, U, V, DXDYH, D, dens_ratio, Ucontr, Vcontr, iin, jin) |
subroutine | matrix_diagonal_triangle (CS, u_diagonal, v_diagonal) |
subroutine | matrix_diagonal_bilinear (CS, float_cond, H_node, dens_ratio, Phisub, u_diagonal, v_diagonal) |
subroutine | cg_diagonal_subgrid_basal_bilinear (Phisub, H, DXDYH, D, dens_ratio, Ucontr, Vcontr) |
subroutine | apply_boundary_values_triangle (CS, time, u_boundary_contr, v_boundary_contr) |
subroutine | apply_boundary_values_bilinear (CS, time, Phisub, H_node, float_cond, dens_ratio, u_boundary_contr, v_boundary_contr) |
subroutine | calc_shelf_visc_triangular (CS, u, v) |
subroutine | calc_shelf_visc_bilinear (CS, u, v) |
subroutine | update_od_ffrac (CS, ocean_mass, counter, nstep_velocity, time_step, velocity_update_time_step) |
subroutine | update_od_ffrac_uncoupled (CS) |
subroutine | bilinear_shape_functions (X, Y, Phi, area) |
subroutine | bilinear_shape_functions_subgrid (Phisub, nsub) |
subroutine | update_velocity_masks (CS) |
subroutine | interpolate_h_to_b (CS, h_shelf, hmask, H_node) |
subroutine, public | ice_shelf_end (CS) |
Deallocates all memory associated with this module. More... | |
subroutine | savearray2 (fname, A, flag) |
subroutine, public | solo_time_step (CS, time_step, n, Time, min_time_step_in) |
subroutine | ice_shelf_temp (CS, time_step, melt_rate, Time) |
subroutine | ice_shelf_advect_temp_x (CS, time_step, h0, h_after_uflux, flux_enter) |
subroutine | ice_shelf_advect_temp_y (CS, time_step, h_after_uflux, h_after_vflux, flux_enter) |
Variables | |
integer | id_clock_shelf |
integer | id_clock_pass |
Clock for group pass calls. More... | |
subroutine, public mom_ice_shelf::add_shelf_flux | ( | type(ocean_grid_type), intent(inout) | G, |
type(ice_shelf_cs), pointer | CS, | ||
type(surface), intent(inout) | state, | ||
type(forcing), intent(inout) | fluxes | ||
) |
Updates suface fluxes that are influenced by sub-ice-shelf melting.
[in,out] | g | The ocean's grid structure. |
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 924 of file MOM_ice_shelf.F90.
References ice_shelf_min_thickness_calve(), and mom_domains::to_all.
Referenced by shelf_calc_flux().
|
private |
Definition at line 5043 of file MOM_ice_shelf.F90.
References bilinear_shape_functions(), and cg_action_subgrid_basal_bilinear().
Referenced by ice_shelf_solve_inner(), and ice_shelf_solve_outer().
|
private |
Definition at line 4866 of file MOM_ice_shelf.F90.
Referenced by ice_shelf_solve_inner(), and ice_shelf_solve_outer().
|
private |
Definition at line 5457 of file MOM_ice_shelf.F90.
References quad_area().
Referenced by apply_boundary_values_bilinear(), ice_shelf_solve_outer(), and matrix_diagonal_bilinear().
|
private |
Definition at line 5520 of file MOM_ice_shelf.F90.
Referenced by ice_shelf_solve_outer().
|
private |
Definition at line 3813 of file MOM_ice_shelf.F90.
References savearray2().
Referenced by ice_shelf_solve_outer().
|
private |
Definition at line 5305 of file MOM_ice_shelf.F90.
Referenced by ice_shelf_solve_outer().
|
private |
Definition at line 5222 of file MOM_ice_shelf.F90.
Referenced by ice_shelf_solve_outer().
|
private |
Definition at line 3790 of file MOM_ice_shelf.F90.
Referenced by ice_shelf_advect().
|
private |
Definition at line 4286 of file MOM_ice_shelf.F90.
References cg_action_subgrid_basal_bilinear().
Referenced by ice_shelf_solve_inner(), and ice_shelf_solve_outer().
|
private |
Definition at line 4460 of file MOM_ice_shelf.F90.
Referenced by apply_boundary_values_bilinear(), and cg_action_bilinear().
|
private |
Definition at line 4140 of file MOM_ice_shelf.F90.
Referenced by ice_shelf_solve_inner(), and ice_shelf_solve_outer().
|
private |
Definition at line 4826 of file MOM_ice_shelf.F90.
Referenced by matrix_diagonal_bilinear().
|
private |
Changes the thickness (mass) of the ice shelf based on sub-ice-shelf melting.
Definition at line 865 of file MOM_ice_shelf.F90.
Referenced by shelf_calc_flux().
|
private |
Definition at line 2202 of file MOM_ice_shelf.F90.
References calve_to_mask(), ice_shelf_advect_thickness_x(), ice_shelf_advect_thickness_y(), ice_shelf_min_thickness_calve(), shelf_advance_front(), and update_velocity_masks().
Referenced by shelf_calc_flux(), and solo_time_step().
|
private |
Definition at line 6195 of file MOM_ice_shelf.F90.
References slope_limiter().
Referenced by ice_shelf_temp().
|
private |
Definition at line 6448 of file MOM_ice_shelf.F90.
References slope_limiter().
Referenced by ice_shelf_temp().
|
private |
Definition at line 3123 of file MOM_ice_shelf.F90.
References slope_limiter().
Referenced by ice_shelf_advect().
|
private |
Definition at line 3362 of file MOM_ice_shelf.F90.
References slope_limiter().
Referenced by ice_shelf_advect().
subroutine, public mom_ice_shelf::ice_shelf_end | ( | type(ice_shelf_cs), pointer | CS | ) |
Deallocates all memory associated with this module.
Definition at line 5792 of file MOM_ice_shelf.F90.
Referenced by mom_main(), and ocean_model_mod::ocean_model_end().
|
private |
Apply a very simple calving law using a minimum thickness rule.
Definition at line 3768 of file MOM_ice_shelf.F90.
Referenced by add_shelf_flux(), ice_shelf_advect(), initialize_ice_shelf(), and update_shelf_mass().
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 2167 of file MOM_ice_shelf.F90.
Referenced by mom_main(), ocean_model_mod::ocean_model_restart(), and ocean_model_mod::ocean_model_save_restart().
|
private |
Definition at line 2677 of file MOM_ice_shelf.F90.
References apply_boundary_values_bilinear(), apply_boundary_values_triangle(), cg_action_bilinear(), cg_action_triangular(), matrix_diagonal_bilinear(), and matrix_diagonal_triangle().
Referenced by ice_shelf_solve_outer().
|
private |
Definition at line 2319 of file MOM_ice_shelf.F90.
References apply_boundary_values_bilinear(), apply_boundary_values_triangle(), bilinear_shape_functions(), bilinear_shape_functions_subgrid(), calc_shelf_driving_stress(), calc_shelf_visc_bilinear(), calc_shelf_visc_triangular(), cg_action_bilinear(), cg_action_triangular(), ice_shelf_solve_inner(), interpolate_h_to_b(), and savearray2().
Referenced by initialize_diagnostic_fields(), initialize_ice_shelf(), shelf_calc_flux(), and solo_time_step().
|
private |
Definition at line 6044 of file MOM_ice_shelf.F90.
References ice_shelf_advect_temp_x(), and ice_shelf_advect_temp_y().
Referenced by solo_time_step().
|
private |
Definition at line 4052 of file MOM_ice_shelf.F90.
|
private |
Definition at line 2128 of file MOM_ice_shelf.F90.
References ice_shelf_solve_outer().
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(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 |
Definition at line 1191 of file MOM_ice_shelf.F90.
References ice_shelf_min_thickness_calve(), ice_shelf_solve_outer(), id_clock_pass, id_clock_shelf, initialize_shelf_mass(), update_od_ffrac_uncoupled(), and update_velocity_masks().
Referenced by mom_main().
|
private |
Initializes shelf mass based on three options (file, zero and user)
[in] | param_file | A structure to parse for run-time parameters |
Definition at line 1976 of file MOM_ice_shelf.F90.
Referenced by initialize_ice_shelf().
|
private |
Definition at line 5752 of file MOM_ice_shelf.F90.
Referenced by ice_shelf_solve_outer().
|
private |
Definition at line 4686 of file MOM_ice_shelf.F90.
References bilinear_shape_functions(), and cg_diagonal_subgrid_basal_bilinear().
Referenced by ice_shelf_solve_inner().
|
private |
Definition at line 4526 of file MOM_ice_shelf.F90.
Referenced by ice_shelf_solve_inner().
|
private |
Calculate area of quadrilateral.
Definition at line 326 of file MOM_ice_shelf.F90.
Referenced by bilinear_shape_functions().
|
private |
Definition at line 5828 of file MOM_ice_shelf.F90.
Referenced by calc_shelf_driving_stress(), ice_shelf_solve_outer(), and solo_time_step().
|
private |
Definition at line 3575 of file MOM_ice_shelf.F90.
Referenced by ice_shelf_advect().
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 | ||
) |
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 | structure containing fields that describe the surface state of the ocean |
[in,out] | fluxes | structure containing pointers to any possible forcing fields. Unused fields have NULL ptrs. |
[in] | time | Start time of the fluxes. |
[in] | time_step | Length of time over which these fluxes will be applied, in s. |
cs | A pointer to the control structure returned by a previous call to initialize_ice_shelf. |
Definition at line 346 of file MOM_ice_shelf.F90.
References add_shelf_flux(), change_thickness_using_melt(), mom_diag_mediator::disable_averaging(), mom_diag_mediator::enable_averaging(), ice_shelf_advect(), ice_shelf_solve_outer(), id_clock_pass, id_clock_shelf, mom_error_handler::is_root_pe(), mom_error_handler::mom_error(), mom_forcing_type::mom_forcing_chksum(), update_od_ffrac(), update_od_ffrac_uncoupled(), and update_shelf_mass().
Referenced by mom_main().
|
private |
used for flux limiting in advective subroutines Van Leer limiter (source: Wikipedia)
Definition at line 308 of file MOM_ice_shelf.F90.
Referenced by ice_shelf_advect_temp_x(), ice_shelf_advect_temp_y(), ice_shelf_advect_thickness_x(), and ice_shelf_advect_thickness_y().
subroutine, public mom_ice_shelf::solo_time_step | ( | type(ice_shelf_cs), pointer | CS, |
real, intent(in) | time_step, | ||
integer, intent(inout) | n, | ||
type(time_type) | Time, | ||
real, intent(in), optional | min_time_step_in | ||
) |
Definition at line 5910 of file MOM_ice_shelf.F90.
References ice_shelf_advect(), ice_shelf_solve_outer(), ice_shelf_temp(), savearray2(), update_od_ffrac_uncoupled(), and update_velocity_masks().
|
private |
Definition at line 5368 of file MOM_ice_shelf.F90.
Referenced by shelf_calc_flux().
|
private |
Definition at line 5419 of file MOM_ice_shelf.F90.
Referenced by initialize_ice_shelf(), shelf_calc_flux(), and solo_time_step().
|
private |
Updates the ice shelf mass using data from a file.
Definition at line 2066 of file MOM_ice_shelf.F90.
References ice_shelf_min_thickness_calve().
Referenced by shelf_calc_flux().
|
private |
Definition at line 5590 of file MOM_ice_shelf.F90.
Referenced by ice_shelf_advect(), initialize_ice_shelf(), and solo_time_step().
|
private |
Clock for group pass calls.
Definition at line 302 of file MOM_ice_shelf.F90.
Referenced by initialize_ice_shelf(), and shelf_calc_flux().
integer mom_ice_shelf::id_clock_shelf |
Definition at line 302 of file MOM_ice_shelf.F90.
Referenced by initialize_ice_shelf(), and shelf_calc_flux().