diff --git a/driver-mct/cime_config/buildnml b/driver-mct/cime_config/buildnml index 1b2c785a2714..0261a7899903 100755 --- a/driver-mct/cime_config/buildnml +++ b/driver-mct/cime_config/buildnml @@ -201,7 +201,8 @@ def write_seq_maps_file(case, nmlgen, confdir): # The following is only approriate for config_grids.xml version 2.0 or later grid_version = Grids().get_version() if grid_version >= 2.0: - ignore_idmaps = ["rof2ocn_fmapname", "glc2ice_rmapname", "glc2ocn_rmapname"] + ignore_idmaps = ["rof2ocn_fmapname", "glc2ice_rmapname", + "glc2ocn_liq_rmapname", "glc2ocn_ice_rmapname"] group_variables = nmlgen.get_group_variables("seq_maps") for name in group_variables: value = group_variables[name] diff --git a/driver-mct/cime_config/config_component.xml b/driver-mct/cime_config/config_component.xml index 1e784dbecdcf..b1878647dd77 100644 --- a/driver-mct/cime_config/config_component.xml +++ b/driver-mct/cime_config/config_component.xml @@ -1620,21 +1620,38 @@ glc2ice runoff mapping file decomp type - + char idmap run_domain env_run.xml - glc2ocn runoff mapping file + glc2ocn runoff mapping file for liquid runoff - + char X,Y Y run_domain env_run.xml - glc2ocn runoff mapping file decomp type + glc2ocn runoff mapping file decomp type for liquid runoff + + + + char + idmap + run_domain + env_run.xml + glc2ocn runoff mapping file for ice runoff + + + + char + X,Y + Y + run_domain + env_run.xml + glc2ocn runoff mapping file decomp type for ice runoff diff --git a/driver-mct/cime_config/namelist_definition_drv.xml b/driver-mct/cime_config/namelist_definition_drv.xml index 16d067102704..6d28e60c8910 100644 --- a/driver-mct/cime_config/namelist_definition_drv.xml +++ b/driver-mct/cime_config/namelist_definition_drv.xml @@ -3546,20 +3546,20 @@ - + char mapping abs seq_maps - glc to ocn runoff conservative mapping file + glc to ocn runoff conservative mapping file for liquid runoff - $GLC2OCN_RMAPNAME + $GLC2OCN_LIQ_RMAPNAME - + char mapping seq_maps @@ -3571,7 +3571,37 @@ grid. - $GLC2OCN_RMAPTYPE + $GLC2OCN_LIQ_RMAPTYPE + X + + + + + char + mapping + abs + seq_maps + + glc to ocn runoff conservative mapping file for ice runoff + + + $GLC2OCN_ICE_RMAPNAME + + + + + char + mapping + seq_maps + + The type of mapping desired, either "source" or "destination" mapping. + X is associated with rearrangement of the source grid to the + destination grid and then local mapping. Y is associated with mapping + on the source grid and then rearrangement and sum to the destination + grid. + + + $GLC2OCN_ICE_RMAPTYPE X diff --git a/driver-mct/main/prep_ocn_mod.F90 b/driver-mct/main/prep_ocn_mod.F90 index ac90d9a1518a..685024320f0c 100644 --- a/driver-mct/main/prep_ocn_mod.F90 +++ b/driver-mct/main/prep_ocn_mod.F90 @@ -56,7 +56,8 @@ module prep_ocn_mod public :: prep_ocn_get_mapper_Rr2o_liq public :: prep_ocn_get_mapper_Rr2o_ice public :: prep_ocn_get_mapper_SFi2o - public :: prep_ocn_get_mapper_Rg2o + public :: prep_ocn_get_mapper_Rg2o_liq + public :: prep_ocn_get_mapper_Rg2o_ice public :: prep_ocn_get_mapper_Sw2o !-------------------------------------------------------------------------- @@ -77,7 +78,8 @@ module prep_ocn_mod type(seq_map), pointer :: mapper_Rr2o_liq type(seq_map), pointer :: mapper_Rr2o_ice type(seq_map), pointer :: mapper_SFi2o - type(seq_map), pointer :: mapper_Rg2o + type(seq_map), pointer :: mapper_Rg2o_liq + type(seq_map), pointer :: mapper_Rg2o_ice type(seq_map), pointer :: mapper_Sw2o ! attribute vectors @@ -170,7 +172,8 @@ subroutine prep_ocn_init(infodata, atm_c2_ocn, atm_c2_ice, ice_c2_ocn, rof_c2_oc allocate(mapper_Rr2o_liq) allocate(mapper_Rr2o_ice) allocate(mapper_SFi2o) - allocate(mapper_Rg2o) + allocate(mapper_Rg2o_liq) + allocate(mapper_Rg2o_ice) allocate(mapper_Sw2o) if (ocn_present) then @@ -322,11 +325,19 @@ subroutine prep_ocn_init(infodata, atm_c2_ocn, atm_c2_ice, ice_c2_ocn, rof_c2_oc if (glc_c2_ocn) then if (iamroot_CPLID) then write(logunit,*) ' ' - write(logunit,F00) 'Initializing mapper_Rg2o' + write(logunit,F00) 'Initializing mapper_Rg2o_liq' end if - call seq_map_init_rcfile(mapper_Rg2o, glc(1), ocn(1), & - 'seq_maps.rc', 'glc2ocn_rmapname:', 'glc2ocn_rmaptype:',samegrid_og, & - 'mapper_Rg2o initialization',esmf_map_flag) + call seq_map_init_rcfile(mapper_Rg2o_liq, glc(1), ocn(1), & + 'seq_maps.rc', 'glc2ocn_liq_rmapname:', 'glc2ocn_liq_rmaptype:',samegrid_og, & + 'mapper_Rg2o_liq initialization',esmf_map_flag) + + if (iamroot_CPLID) then + write(logunit,*) ' ' + write(logunit,F00) 'Initializing mapper_Rg2o_ice' + end if + call seq_map_init_rcfile(mapper_Rg2o_ice, glc(1), ocn(1), & + 'seq_maps.rc', 'glc2ocn_ice_rmapname:', 'glc2ocn_ice_rmaptype:',samegrid_og, & + 'mapper_Rg2o_ice initialization',esmf_map_flag) endif call shr_sys_flush(logunit) @@ -1234,7 +1245,11 @@ subroutine prep_ocn_calc_g2x_ox(timer) call t_drvstartf (trim(timer),barrier=mpicom_CPLID) do egi = 1,num_inst_glc g2x_gx => component_get_c2x_cx(glc(egi)) - call seq_map_map(mapper_Rg2o, g2x_gx, g2x_ox(egi), norm=.true.) + call seq_map_map(mapper_Rg2o_liq, g2x_gx, g2x_ox(egi), & + fldlist=seq_flds_g2o_liq_fluxes, norm=.false.) + + call seq_map_map(mapper_Rg2o_ice, g2x_gx, g2x_ox(egi), & + fldlist=seq_flds_g2o_ice_fluxes, norm=.false.) enddo call t_drvstopf (trim(timer)) end subroutine prep_ocn_calc_g2x_ox @@ -1335,10 +1350,15 @@ function prep_ocn_get_mapper_SFi2o() prep_ocn_get_mapper_SFi2o => mapper_SFi2o end function prep_ocn_get_mapper_SFi2o - function prep_ocn_get_mapper_Rg2o() - type(seq_map), pointer :: prep_ocn_get_mapper_Rg2o - prep_ocn_get_mapper_Rg2o => mapper_Rg2o - end function prep_ocn_get_mapper_Rg2o + function prep_ocn_get_mapper_Rg2o_liq() + type(seq_map), pointer :: prep_ocn_get_mapper_Rg2o_liq + prep_ocn_get_mapper_Rg2o_liq => mapper_Rg2o_liq + end function prep_ocn_get_mapper_Rg2o_liq + + function prep_ocn_get_mapper_Rg2o_ice() + type(seq_map), pointer :: prep_ocn_get_mapper_Rg2o_ice + prep_ocn_get_mapper_Rg2o_ice => mapper_Rg2o_ice + end function prep_ocn_get_mapper_Rg2o_ice function prep_ocn_get_mapper_Sw2o() type(seq_map), pointer :: prep_ocn_get_mapper_Sw2o diff --git a/driver-mct/shr/seq_flds_mod.F90 b/driver-mct/shr/seq_flds_mod.F90 index d484afcbba34..7885e101903b 100644 --- a/driver-mct/shr/seq_flds_mod.F90 +++ b/driver-mct/shr/seq_flds_mod.F90 @@ -197,6 +197,8 @@ module seq_flds_mod character(CXX) :: seq_flds_g2x_states_to_lnd character(CXX) :: seq_flds_g2x_fluxes character(CXX) :: seq_flds_g2x_fluxes_to_lnd + character(CXX) :: seq_flds_g2o_liq_fluxes + character(CXX) :: seq_flds_g2o_ice_fluxes character(CXX) :: seq_flds_x2g_states character(CXX) :: seq_flds_x2g_fluxes @@ -315,6 +317,8 @@ subroutine seq_flds_set(nmlfile, ID, infodata) character(CXX) :: g2x_states_to_lnd = '' character(CXX) :: g2x_fluxes = '' character(CXX) :: g2x_fluxes_to_lnd = '' + character(CXX) :: g2o_liq_fluxes = '' + character(CXX) :: g2o_ice_fluxes = '' character(CXX) :: x2g_states = '' character(CXX) :: x2g_fluxes = '' character(CXX) :: xao_albedo = '' @@ -2242,6 +2246,9 @@ subroutine seq_flds_set(nmlfile, ID, infodata) name = 'Fogg_rofl' call seq_flds_add(g2x_fluxes,trim(name)) + ! Don't need to add this to x2o_fluxes, because Foxx_rofl is already added in the + ! course of adding Forr_rofl + call seq_flds_add(g2o_liq_fluxes,trim(name)) longname = 'glc liquid runoff flux to ocean' stdname = 'glacier_liquid_runoff_flux_to_ocean' units = 'kg m-2 s-1' @@ -2250,6 +2257,9 @@ subroutine seq_flds_set(nmlfile, ID, infodata) name = 'Fogg_rofi' call seq_flds_add(g2x_fluxes,trim(name)) + ! Don't need to add this to x2o_fluxes, because Foxx_rofi is already added in the + ! course of adding Forr_rofi + call seq_flds_add(g2o_ice_fluxes,trim(name)) longname = 'glc frozen runoff flux to ocean' stdname = 'glacier_frozen_runoff_flux_to_ocean' units = 'kg m-2 s-1' @@ -2258,6 +2268,8 @@ subroutine seq_flds_set(nmlfile, ID, infodata) name = 'Figg_rofi' call seq_flds_add(g2x_fluxes,trim(name)) + ! Don't need to add this to x2i_fluxes, because Fixx_rofi is already added in the + ! course of adding Firr_rofi longname = 'glc frozen runoff_iceberg flux to ice' stdname = 'glacier_frozen_runoff_flux_to_seaice' units = 'kg m-2 s-1' @@ -3217,6 +3229,8 @@ subroutine seq_flds_set(nmlfile, ID, infodata) seq_flds_x2o_fluxes = trim(x2o_fluxes) seq_flds_g2x_fluxes = trim(g2x_fluxes) seq_flds_g2x_fluxes_to_lnd = trim(g2x_fluxes_to_lnd) + seq_flds_g2o_liq_fluxes = trim(g2o_liq_fluxes) + seq_flds_g2o_ice_fluxes = trim(g2o_ice_fluxes) seq_flds_x2g_fluxes = trim(x2g_fluxes) seq_flds_xao_fluxes = trim(xao_fluxes) seq_flds_r2x_fluxes = trim(r2x_fluxes)