diff --git a/components/mpas-ocean/bld/build-namelist b/components/mpas-ocean/bld/build-namelist
index 76da422dc997..79b527e4f402 100755
--- a/components/mpas-ocean/bld/build-namelist
+++ b/components/mpas-ocean/bld/build-namelist
@@ -782,7 +782,7 @@ if ($OCN_ISMF eq 'coupled') {
} elsif ($OCN_ISMF eq 'internal') {
add_default($nl, 'config_land_ice_flux_mode', 'val'=>"standalone");
} else {
- add_default($nl, 'config_land_ice_flux_mode', 'val'=>"pressure_only");
+ add_default($nl, 'config_land_ice_flux_mode');
}
add_default($nl, 'config_land_ice_flux_formulation');
add_default($nl, 'config_land_ice_flux_useHollandJenkinsAdvDiff');
diff --git a/components/mpas-ocean/bld/namelist_files/namelist_defaults_mpaso.xml b/components/mpas-ocean/bld/namelist_files/namelist_defaults_mpaso.xml
index e2bacaff9779..21ae2bafc47c 100644
--- a/components/mpas-ocean/bld/namelist_files/namelist_defaults_mpaso.xml
+++ b/components/mpas-ocean/bld/namelist_files/namelist_defaults_mpaso.xml
@@ -333,12 +333,12 @@
'off'
-'standalone'
-'standalone'
-'standalone'
-'standalone'
-'standalone'
-'standalone'
+'pressure_only'
+'pressure_only'
+'pressure_only'
+'pressure_only'
+'pressure_only'
+'pressure_only'
'Jenkins'
.false.
10.0
diff --git a/components/mpas-ocean/cime_config/buildnml b/components/mpas-ocean/cime_config/buildnml
index dda7531576ab..0061f4ff75e9 100755
--- a/components/mpas-ocean/cime_config/buildnml
+++ b/components/mpas-ocean/cime_config/buildnml
@@ -90,10 +90,10 @@ def buildnml(case, caseroot, compname):
decomp_prefix = 'mpas-o.graph.info.'
restoring_file = 'sss.monthlyClimatology.PHC2_salx_040803.oEC60to30v3wLI.nc'
analysis_mask_file = 'masks_SingleRegionAtlanticWTransportTransects_EC60to30v3wLI_171116.nc'
- ic_date = '171031'
+ ic_date = '230220'
ic_prefix = 'oEC60to30v3wLI60lev'
if ocn_ic_mode == 'spunup':
- ic_date = '171116'
+ ic_date = '230220'
ic_prefix = 'oEC60to30v3wLI60lev.restart_theta_year26'
elif ocn_grid == 'ECwISC30to60E1r2':
@@ -101,7 +101,7 @@ def buildnml(case, caseroot, compname):
decomp_prefix = 'mpas-o.graph.info.'
restoring_file = 'sss.PHC2_monthlyClimatology.ECwISC30to60E1r02.200408.nc'
analysis_mask_file = 'ECwISC30to60E1r02_transportTransects.nc'
- ic_date = '200408'
+ ic_date = '230220'
ic_prefix = 'ocean.ECwISC30to60E1r2'
if ocn_ic_mode == 'spunup':
logger.warning("WARNING: The specified compset is requesting ocean ICs spunup from a G-case")
@@ -128,7 +128,7 @@ def buildnml(case, caseroot, compname):
elif ocn_grid == 'oQU240wLI':
decomp_date = '160929'
decomp_prefix = 'mpas-o.graph.info.'
- ic_date = '160929'
+ ic_date = '230220'
ic_prefix = 'ocean.QU.240wLI'
if ocn_ic_mode == 'spunup':
logger.warning("WARNING: The specified compset is requesting ocean ICs spunup from a G-case")
@@ -159,7 +159,7 @@ def buildnml(case, caseroot, compname):
decomp_prefix = 'mpas-o.graph.info.'
restoring_file = 'sss.monthlyClimatology.PHC2_salx.2004_08_03.180503.nc'
analysis_mask_file = 'masks_SingleRegionAtlanticWTransportTransects_RRS30to10v3wLI.nc'
- ic_date = '171109'
+ ic_date = '230220'
ic_prefix = 'oRRS30to10v3wLI'
if ocn_ic_mode == 'spunup':
logger.warning("WARNING: The specified compset is requesting ocean ICs spunup from a G-case")
@@ -261,10 +261,10 @@ def buildnml(case, caseroot, compname):
decomp_prefix = 'mpas-o.graph.info.'
restoring_file = 'sss.PHC2_monthlyClimatology.SOwISC12to60E2r4_nomask.210120.nc'
analysis_mask_file = 'SOwISC12to60E2r4_mocBasinsAndTransects20210623.nc'
- ic_date = '210107'
+ ic_date = '230220'
ic_prefix = 'ocean.SOwISC12to60E2r4'
if ocn_ic_mode == 'spunup':
- ic_date = '210203'
+ ic_date = '230220'
ic_prefix = 'mpaso.SOwISC12to60E2r4.rstFromG-anvil'
elif ocn_grid == 'ECwISC30to60E2r1':
@@ -272,10 +272,10 @@ def buildnml(case, caseroot, compname):
decomp_prefix = 'mpas-o.graph.info.'
restoring_file = 'sss.PHC2_monthlyClimatology.ECwISC30to60E2r1_nomask.201221.nc'
analysis_mask_file = 'ECwISC30to60E2r1_mocBasinsAndTransects20210623.nc'
- ic_date = '210413'
+ ic_date = '230220'
ic_prefix = 'ocean.ECwISC30to60E2r1'
if ocn_ic_mode == 'spunup':
- ic_date = '210414'
+ ic_date = '230220'
ic_prefix = 'mpaso.ECwISC30to60E2r1.rstFromG-anvil'
diff --git a/components/mpas-ocean/driver/ocn_comp_mct.F b/components/mpas-ocean/driver/ocn_comp_mct.F
index 9c47dc25715b..71fa9a14d061 100644
--- a/components/mpas-ocean/driver/ocn_comp_mct.F
+++ b/components/mpas-ocean/driver/ocn_comp_mct.F
@@ -790,10 +790,9 @@ end subroutine xml_stream_get_attributes
call t_stopf ('mpaso_mct_init')
call mpas_pool_get_config(domain % configs, 'config_land_ice_flux_mode', config_land_ice_flux_mode)
- if ( trim(config_land_ice_flux_mode) .eq. 'pressure_only' ) then
- call seq_infodata_PutData( infodata, ocn_prognostic=.true., ocnrof_prognostic=.true., &
- ocn_c2_glcshelf=.false.)
- else if ( trim(config_land_ice_flux_mode) .eq. 'standalone' ) then
+ if ( trim(config_land_ice_flux_mode) == 'off' .or. &
+ trim(config_land_ice_flux_mode) == 'pressure_only' .or. &
+ trim(config_land_ice_flux_mode) == 'standalone' ) then
call seq_infodata_PutData( infodata, ocn_prognostic=.true., ocnrof_prognostic=.true., &
ocn_c2_glcshelf=.false.)
else if ( trim(config_land_ice_flux_mode) .eq. 'coupled' ) then
@@ -2784,7 +2783,8 @@ subroutine ocn_export_mct(o2x_o, errorCode) !{{{
!JW o2x_o % rAttr(index_o2x_So_htv, n) = landIceHeatTransferVelocity(i)
!JW o2x_o % rAttr(index_o2x_So_stv, n) = landIceSaltTransferVelocity(i)
- if ( trim(config_land_ice_flux_mode) .ne. 'pressure_only' ) then
+ if ( trim(config_land_ice_flux_mode) .eq. 'standalone' .or. &
+ trim(config_land_ice_flux_mode) .eq. 'coupled' ) then
o2x_o % rAttr(index_o2x_So_blt, n) = landIceBoundaryLayerTracers(indexBLT,i)
o2x_o % rAttr(index_o2x_So_bls, n) = landIceBoundaryLayerTracers(indexBLS,i)
o2x_o % rAttr(index_o2x_So_htv, n) = landIceTracerTransferVelocities(indexHeatTrans,i)
diff --git a/components/mpas-ocean/src/Registry.xml b/components/mpas-ocean/src/Registry.xml
index ec873e494282..99438351fb8e 100644
--- a/components/mpas-ocean/src/Registry.xml
+++ b/components/mpas-ocean/src/Registry.xml
@@ -1640,6 +1640,8 @@
+
+
+
+
+
+
@@ -1990,6 +1996,7 @@
immutable="true">
+
@@ -2106,6 +2113,8 @@
+
+
@@ -3612,6 +3621,14 @@
description="Mask indicating where land-ice is present (1) or absent (0)"
packages="landIcePressurePKG"
/>
+
+
+
= 0.0_RKIND)) cycle
+ if ((landIceFloatingMask(iCell) == 0) .or. (landIceFreshwaterFlux(iCell) >= 0.0_RKIND)) cycle
landIceInterfaceTracers(indexIS,iCell) = freezeInterfaceSalinity(iCell)
landIceInterfaceTracers(indexIT,iCell) = freezeInterfaceTemperature(iCell)
@@ -593,7 +593,7 @@ subroutine ocn_surface_land_ice_fluxes_build_arrays(meshPool, &
end do
else ! not using Holland and Jenkins advection/diffusion
call compute_melt_fluxes( &
- landIceMask, &
+ landIceFloatingMask, &
landIceBoundaryLayerTracers(indexBLT,:), &
landIceBoundaryLayerTracers(indexBLS,:), &
landIceTracerTransferVelocities(indexHeatTrans,:), &
@@ -613,13 +613,13 @@ subroutine ocn_surface_land_ice_fluxes_build_arrays(meshPool, &
end if
end if
- ! modulate the fluxes by the landIceFraction
+ ! modulate the fluxes by the landIceFloatingFraction
do iCell = 1, nCells
- if (landIceMask(iCell) == 0) cycle
+ if (landIceFloatingMask(iCell) == 0) cycle
- landIceFreshwaterFlux(iCell) = landIceFraction(iCell)*landIceFreshwaterFlux(iCell)
- landIceHeatFlux(iCell) = landIceFraction(iCell)*landIceHeatFlux(iCell)
- heatFluxToLandIce(iCell) = landIceFraction(iCell)*heatFluxToLandIce(iCell)
+ landIceFreshwaterFlux(iCell) = landIceFloatingFraction(iCell)*landIceFreshwaterFlux(iCell)
+ landIceHeatFlux(iCell) = landIceFloatingFraction(iCell)*landIceHeatFlux(iCell)
+ heatFluxToLandIce(iCell) = landIceFloatingFraction(iCell)*heatFluxToLandIce(iCell)
end do
endif ! jenkinsOn or hollandJenkinsOn
diff --git a/components/mpas-ocean/src/shared/mpas_ocn_time_varying_forcing.F b/components/mpas-ocean/src/shared/mpas_ocn_time_varying_forcing.F
index 6b1bef26feeb..8e64618a27ad 100644
--- a/components/mpas-ocean/src/shared/mpas_ocn_time_varying_forcing.F
+++ b/components/mpas-ocean/src/shared/mpas_ocn_time_varying_forcing.F
@@ -442,6 +442,10 @@ subroutine init_land_ice_forcing(domain)!{{{
"landIceFraction", "land_ice_forcing", "timeVaryingForcing", "landIceFractionForcing", "linear", &
config_time_varying_land_ice_forcing_reference_time, config_time_varying_land_ice_forcing_interval)
+ call mpas_forcing_init_field(domain % streamManager, forcingGroupHead, "ocn_land_ice_forcing", &
+ "landIceFloatingFraction", "land_ice_forcing", "timeVaryingForcing", "landIceFloatingFractionForcing", "linear", &
+ config_time_varying_land_ice_forcing_reference_time, config_time_varying_land_ice_forcing_interval)
+
call mpas_forcing_init_field(domain % streamManager, forcingGroupHead, "ocn_land_ice_forcing", &
"landIceDraft", "land_ice_forcing", "timeVaryingForcing", "landIceDraftForcing", "linear", &
config_time_varying_land_ice_forcing_reference_time, config_time_varying_land_ice_forcing_interval)
@@ -495,6 +499,8 @@ subroutine land_ice_forcing(streamManager, domain, simulationClock)!{{{
real(kind=RKIND), dimension(:), pointer :: &
landIceFractionForcing, &
landIceFraction, &
+ landIceFloatingFractionForcing, &
+ landIceFloatingFraction, &
landIcePressureForcing, &
landIcePressure, &
landIceDraftForcing, &
@@ -525,15 +531,18 @@ subroutine land_ice_forcing(streamManager, domain, simulationClock)!{{{
call MPAS_pool_get_dimension(mesh, "nCells", nCells)
call MPAS_pool_get_array(timeVaryingForcingPool, "landIceFractionForcing", landIceFractionForcing)
+ call MPAS_pool_get_array(timeVaryingForcingPool, "landIceFloatingFractionForcing", landIceFloatingFractionForcing)
call MPAS_pool_get_array(timeVaryingForcingPool, "landIcePressureForcing", landIcePressureForcing)
call MPAS_pool_get_array(timeVaryingForcingPool, "landIceDraftForcing", landIceDraftForcing)
call MPAS_pool_get_array(forcingPool, "landIceFraction", landIceFraction)
+ call MPAS_pool_get_array(forcingPool, "landIceFloatingFraction", landIceFloatingFraction)
call MPAS_pool_get_array(forcingPool, "landIcePressure", landIcePressure)
call MPAS_pool_get_array(forcingPool, "landIceDraft", landIceDraft)
do iCell = 1, nCells
landIceFraction(iCell) = landIceFractionForcing(iCell)
+ landIceFloatingFraction(iCell) = landIceFloatingFractionForcing(iCell)
landIcePressure(iCell) = landIcePressureForcing(iCell)
landIceDraft(iCell) = landIceDraftForcing(iCell)
diff --git a/components/mpas-ocean/src/shared/mpas_ocn_tracer_ideal_age.F b/components/mpas-ocean/src/shared/mpas_ocn_tracer_ideal_age.F
index 1f8fb440c287..60eb0eb184c8 100644
--- a/components/mpas-ocean/src/shared/mpas_ocn_tracer_ideal_age.F
+++ b/components/mpas-ocean/src/shared/mpas_ocn_tracer_ideal_age.F
@@ -189,7 +189,7 @@ subroutine ocn_tracer_ideal_age_init(domain,err)!{{{
if (config_use_idealAgeTracers_idealAge_forcing) then
! set mask = 0 for open ocean
- ! set mask = 1 under ice shelves
+ ! set mask = 1 under land ice
idealAgeMask = 0.0_RKIND
if (associated(landIceMask)) then
where (landIceMask /= 0) idealAgeMask(1,:) = 1.0_RKIND