Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Overview

Ice sheet coupling with the rest of the model depends on which ice sheet is being modeled, Antarctica or Greenland.

...

ocean coupling: (glc_c2_ocn): Sg_icemask, Sg_blit, Sg_blis, Sg_lithop, Sg_icemask_grounded

compset

(how tested)

glc_c2_lnd

lnd_c2_glc

ocn_c2_glcshelf

glcshelf_c2_ocn

glcshelf_c2_ice

ocn_c2_glctf

glc_c2_ocn

glc_c2_ice

MPAS_LISIO_JRA1p (not tested without mod below)

T

MPAS_LISIO_JRA1p with mod mpaso/ocn_glcshelf ais8to30, MALI%SIA

T

T

T

T

IGELM_MLI

gis20 MALI

T

T

BGWCYCL1850

gis20 MALI

T

T

T

...

  • x2l states: Sg_ice_covered00 through Sg_ice_covered10  AND  Sg_topo00 through Sg_topo10

  • x2l states from glc: Sg_ice_covered00 through Sg_ice_covered10 AND Sg_topo00 through Sg_topo10

    • Sg_ice_covered: Fraction of glacier area

    • Sg_topo: surface height of glacier

  • g2x states to lnd: Sg_icemask:Sg_icemask_coupled_fluxes:Sg_ice_covered:Sg_topo

    • Sg_icemask: Ice sheet grid coverage on global grid

    • Sg_icemask_coupled_fluxes: Ice sheet mask where we are potentially sending non-zero fluxes

    • Sg_ice_covered: Fraction of glacier area

    • Sg_topo

  • x2l fluxes:  Flgg_glc2lnd_non_ec_fields: Sg_icemask, Sg_icemask_coupled_fluxes

  • x2l fluxes:  Flgg_hflx00 to Flgg_hflx10

  • x2l fluxes from glc:  Flgg_hflx00 to Flgg_hflx10

    • Flgg_hflx: Downward heat flux from glacier interior.

  • glc2lnd_ec_extra_fields: Flgg_hflx

glc to ocn coupling involves these fields

...

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

if(glcshelf_c2_ocn) init mapper_Sg2o and mapper_Fg2o

prep_ice_init (glc_c2_ice, glcshelf_c2_ice)

if (glc_c2_ice) init mapper_Rg2i

if(glcshelf_c2_ice) init mapper_Sg2i,mapper_Fg2i

prep_glc_init( lnd_c2_glc, ocn_c2_glctf, ocn_c2_glcshelf)

if ( lnd_c2_glc .or. do_hist_l2x1yrg) initialize l2gacc_lx with seq_flds_l2x_fields_to_glc

if ( 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 (ocn_c2_glctf OR 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 (ocn_c2_glctf) init mapper_So2g_tf

if(ocn_c2_glcshelf) init mapper_So2g_shelf

if (glc_c2_ocn) do mapping Rg2o_liq, Rg2o_ice; g2x_gx to g2x_ox; seq_flds_g2o_liq/ice_fluxes,

if (glcshelf_c2_ocn) do mapping Sg2o, Fg2o; g2x_gx to g2x_ox MIGHT OVERWRITE ABOVE

if(glc_c2_ice) do mapping Rg2i; g2x_gx to g2x_ix ‘Fixx_rofi’ only

if(glcshelf_c2_ice) do mapping_Sg2i; g2x_gx, g2x_ix, Sg_icemask_coupled_fluxes

if (glc_c2_lnd) prep_lnd_calc_g2x_lx do mapping with Fg2l, from g2x_gx , to g2x_lx, only glc2lnd_non_ec_fields ; do special mapping of elevation class fields with mapper_Fg2l, glc2lnd_ec_extra_(Sg_icemask, Sg_icemask_coupled_fluxes)

call map_glc2lnd_ec do special mapping from glc to lnd elevation classes using mapper_Fg2l, glc2lnd_ec_extra_fields

in run loop

after land receive

call cime_run_glc_setup_send

if (lnd_c2_glc OR ocn_c2_glctf OR ocn_c2_glcshelf)

if (glcrun_avg_alarm) accumulate for lnd and ocn

if (lnd_c2_glc) call prep_glc_calc_l2x_gx

...

call prep_glc_map_one_state_field_lnd2glc: special bilinear mapping one state at a time: also call map_lnd2glc

if (ocn_c2_glctf) call prep_glc_mrg_ocn

else prep_glc_zero_flds

...

call cime_run_ocnglc_coupling()

if (ocn_c2_glctf OR (glcshelf_to_ocn AND ocn_to_glcshelf))

call prep_glc_calc_o2x_gx:

if (ocn_c2_gtctf) call mapper_So2g_tf; o2x_ox to o2x_gx seq_flds_x2g_tf_states_from_ocn

if (ocn_c2_glcshelf) call mapper_So2g_shelf; o2x_ox to o2x_gx seq_flds_x2g_shelf_states_from_ocn

if (ocn_c2_glcshelf AND glcshelf_c2_ocn)

call prep_glc_calculate_subshelf_boundary_fluxes

...

call prep_glc_accum_ocn (accumulate x2g_g fields)

if ( glcshelf_c2_ice) call mapper map_Sg2i; g2x_gx, g2x_ix; Sg_icemask_coupled_fluxes

Special functions in land ice coupling

map_glc2lnd_ec

called by prep_lnd_calc_g2x_lx and prep_glc_renormalize_smb

Code Block
   call map_glc2lnd_ec( &
        g2x_g = g2x_gx, &
        frac_field = glc_frac_field, &
        topo_field = glc_topo_field, &
        icemask_field = glc_icemask_field, &
        extra_fields = glc2lnd_ec_extra_fields, &
        mapper = mapper_Fg2l, &
        g2x_l = g2x_lx(egi)

glc_frac_field = ‘Sg_ice_covered’

glc_topo_field = ‘Sg_topo’

glc_icemask_field = 'Sg_icemask'

glc2lnd_ec_extra_fields = Flgg_hflx

This will map Sg_ice_covered, Sg_topo and Flgg_hflx from glc mesh to land model mesh with elevation classes: Sg_ice_covered00, Sg_ice_covered01, etc. Sg_topo00, Sg_topo01, etc., Flgg_hflx00, Flgg_hflx01, etc. There is a loop over elevations classes.

The call from prep_glc_renormalize_smb does not include extra_fields.

prep_glc_accum_avg

called by cime_run_glc_setup_send

Code Block
         call prep_glc_accum_avg(timer='CPL:glcprep_avg', &
              lnd2glc_averaged_now=lnd2glc_averaged_now)

accumulation Avs: l2gacc_lx and x2gacc_gx are local save private Avs in prep_glc_mod

if (l2gacc_lx_cnt > 1) call mct_avect_avg(l2gacc_lx(eli), l2gacc_lx_cnt)

if (x2gacc_gx_cnt > 1) then

call mct_avect_avg(x2gacc_gx(egi), x2gacc_gx_cnt)

call mct_avect_copy(x2gacc_gx(egi), x2g_gx)

prep_glc_calc_l2x_gx

called by cime_run_glc_setup_send

call prep_glc_calc_l2x_gx(fractions_lx, timer='CPL:glcprep_lnd2glc')

loop over 1, number of fields in(seq_flds_x2g_fluxes_from_lnd) which is 1, Flgl_qice

call prep_glc_map_qice_conservative_lnd2glc

end loop

loop over 1, number of fields in seq_flds_x2g_states_from_lnd which is 1, Sl_tsrf

call prep_glc_map_one_state_field_lnd2gl

end loop

prep_glc_map_qice_conservate_lnd2glc

called by prep_glc_calc_l2x_gx which is caled by cime_run_glc_setup_send

Code Block
    ! Use a bilinear (Sl2g) mapper, as for states.
    ! The Fg2l mapper is needed to map some glc fields to the land grid
    !  for purposes of conservation.
    call prep_glc_map_qice_conservative_lnd2glc(egi=egi, eli=eli, &
              fractions_lx = fractions_lx(efi), &
              mapper_Sl2g = mapper_Sl2g, &
              mapper_Fg2l = mapper_Fg2l)

using the accumulated l2gacc_lx, map only Flgl_qice (the SMB) using map_lnd2glc to l2x_gx

export Flgl_qice from l2x_gx to an array qice_g

multiply qice_g by area_g/aream_g

if (smb_renormalize) call prep_glc_renormalize_smb using g2x_gx. Also modifies qice_g

import qice_g back in to l2x_gx in the Flgl_qice attribute.

map_lnd2glc

called by both prep_glc_map_qice_conservative_lnd2glc and prep_glc_map_one_state_field_lnd2glc

prep_glc_renormalize_smb

called only by prep_glc_map_qice_conservate_lnd2glc