Overview
Ice sheet coupling with the rest of the model depends on which ice sheet is being modeled, Antarctica or Greenland.
...
Ice-shelf coupling: (ocn_c2_glcshelf, glcshelf_c2_ocn)Fluxes between the bottom of the ice shelf and the ocean underneath it. The ice-shelf coupling will be used for Antarctica (left side of figure). Greenland has some small ice shelves, but they are too small to be resolved sufficiently in MPAS-Ocean, so we do not intend to use the ice-shelf coupling for Greenland cases. glcshelf coupling is unique in doing a lot of calculations inside the coupler. It’s calculating the melt and heat fluxes on the ocean coupling interval (finer than GLC) and the GLC mesh (finer than OCN).
Thermal-forcing coupling: (ocn_c2_glctf) Passes thermal forcing at a prescribed ocean depth (300 m) from MPAS-Ocean to MALI, where MALI uses it to calculate grounded marine melting through an existing 'facemelting' parameterization. The thermal-forcing coupling is primarily intended for Greenland where there are primarily vertical cliffs and little floating ice (right side of figure). In that geometry, MPAS-Ocean is not equipped to calculate melt rates, and even if it could, most of the narrow fjords around Greenland would be unresolved so the ocean domain rarely intercepts the Greenland marine termini. Instead, we make use of marine melting parameterizations that are a function of the thermal forcing (ocean temperature minus in situ freezing temperature). We also make use of a capability we added to MALI to horizontally extrapolate ocean thermal forcing from wherever on the MALI mesh it’s available to the current terminus positions. While the thermal-forcing coupling is primarily developed for Greenland, Antarctica also has vertical marine cliffs without ice shelves in some places (and will likely have more in the future), so we do anticipate eventually using the TF coupling in Antarctica at the same time as the ice-shelf coupling. Implemented in https://github.com/E3SM-Project/E3SM/pull/6632
...
ocean coupling: (glc_c2_ocn): Sg_icemask, Sg_blit, Sg_blis, Sg_lithop, Sg_icemask_grounded
compset | glc_c2_lnd | lnd_c2_glc | ocn_c2_glcshelf | glcshelf_c2_ocn | glcshelf_c2_ice | ocn_c2_glctf | glc_c2_ocn | glc_c2_ice | glcshelf_c2_ice |
---|---|---|---|---|---|---|---|---|---|
MPAS_LISIO_JRA1p | T | ||||||||
IGELM_MLI | T | T | |||||||
BGWCYCL1850 | T | T | T |
There is no ocn_c2_glc, ice_c2_glcshelf., ice_c2_glc
Attribute strings
land to glc adds the following coupling fields
...
Modifications to coupler flow.
Assuming glc_present and glc_prognostic are TRUE so not including.
init
prep_lnd_init (glc_c2_lnd)
if(glc_c2_lnd) init mapper_Sg2l, mapper_Fg2l; derive field lists glc2lnd_non_ec_fields and glc2lnd_ec_extra_fields
prep_ocn_init (glc_c2_ocn, glcshelf_c2_ocn)
if (glc_c2_ocn) init mapper_Rg2o_liq and mapper_Rg2o_ice
...
prep_glc_init( lnd_c2_glc, ocn_c2_glcshelf)
if ( (glc_present .and. lnd_c2_glc) .or. do_hist_l2x1yrg) initialize l2gacc_lx with seq_flds_l2x_fields_to_glc
if ( glc_present .and. lnd_c2_glc) initialize l2x_gx with seq_flds_x2g_fields
if (lnd_c2_glc) init mapper_Sl2g, mapper_Fl2g, mapper_Fg2l; form g2x_lx_fields
if (glc_present .and. ocn_c2_glcshelf) init o2x_gx with seq_flds_o2x_fields; init x2gacc_gx
also init mapper_So2g, mapper_Fo2g and arrays for compute_melt_fluxes
if (glc_c2_ocn) do mapping Rg2o_liq, Rg2o_ice; g2x_gx to g2x_ox; seq_flds_g2o_liq/ice_fluxes,
...
if(glcshelf_c2_ice) do mapping_Sg2i; g2x_gx, g2x_ix, Sg_icemask_coupled_fluxes
if (glc_c2_lnd) do mapping Fg2l, g2x_gx, g2x_lx, glc2lnd_non_ec_fields; do special mapping of elevation class fields with mapper_Fg2l, glc2lnd_ec_extra_fields
in run loop
after land receive
if (glc_present) call cime_run_glc_setup_send
if (lnd_c2_glc OR ocn_c2_glcshelf)
if (glcrun_avg_alarm) accumulate for lnd and ocn
if (lnd_c2_glc) call prep_glc_calc_l2x_gc
...
from seq_flds_x2g_states_from_lnd also call special bilinear mapping one state at a time: prep_glc_map_one_state_field_lnd2glc, map_lnd2glc
else prep_glc_zero_flds
At bottom after running atm and ocn
(if glc_present) run glc (pass in glc_prognostic)
(if glc_present) call cime_run_glc_recv_post
...
call cime_run_ocnglc_coupling()
...
(
...
)
if (glcshelf_to_ocn AND ocn_to_glcshelf)
...