From d73aa120320717a56a07e9aa1c434e9bd13c95ae Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Wed, 8 May 2024 17:20:44 -0600 Subject: [PATCH 01/38] Add Anomaly.Forcing.cmip5.rcp45. --- datm/cime_config/namelist_definition_datm.xml | 2 +- datm/cime_config/stream_definition_datm.xml | 38 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/datm/cime_config/namelist_definition_datm.xml b/datm/cime_config/namelist_definition_datm.xml index 3c2be3995..c3efa072b 100644 --- a/datm/cime_config/namelist_definition_datm.xml +++ b/datm/cime_config/namelist_definition_datm.xml @@ -221,7 +221,7 @@ char(10) datm datm_nml - Anomaly.Forcing.Precip,Anomaly.Forcing.Temperature,Anomaly.Forcing.Pressure,Anomaly.Forcing.Humidity,Anomaly.Forcing.Uwind,Anomaly.Forcing.Vwind,Anomaly.Forcing.Shortwave,Anomaly.Forcing.Longwave + Anomaly.Forcing.cmip5.rcp45,Anomaly.Forcing.Precip,Anomaly.Forcing.Temperature,Anomaly.Forcing.Pressure,Anomaly.Forcing.Humidity,Anomaly.Forcing.Uwind,Anomaly.Forcing.Vwind,Anomaly.Forcing.Shortwave,Anomaly.Forcing.Longwave If set, include anomaly forcing streams in namelist. diff --git a/datm/cime_config/stream_definition_datm.xml b/datm/cime_config/stream_definition_datm.xml index bfe6fc4a0..d9ea4705d 100644 --- a/datm/cime_config/stream_definition_datm.xml +++ b/datm/cime_config/stream_definition_datm.xml @@ -1172,6 +1172,44 @@ + + + + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc + + + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.allvars.ccsm4.rcp45.2006-2300.nc + + + huss Sa_shum_af + pr Faxa_prec_af + ps Sa_pbot_af + rlds Faxa_lwdn_af + rsds Faxa_swdn_af + tas Sa_tbot_af + uas Sa_u_af + vas Sa_v_af + + null + + bilinear + + null + 2006 + 2006 + 2300 + 0 + + nearest + + + cycle + + + 1.5 + + single + From 2be33389562f0fbc681cf620109037f544744261 Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Thu, 9 May 2024 13:40:29 -0600 Subject: [PATCH 02/38] Fix 'anomoly_forcing' typo. --- datm/cime_config/stream_definition_datm.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datm/cime_config/stream_definition_datm.xml b/datm/cime_config/stream_definition_datm.xml index d9ea4705d..e98a397f0 100644 --- a/datm/cime_config/stream_definition_datm.xml +++ b/datm/cime_config/stream_definition_datm.xml @@ -208,7 +208,7 @@ topo.cplhist ======================== - optional streams anonomly forcing (turned on and set my datm_nml variable anomoly_forcing + optional streams anonomly forcing (turned on and set my datm_nml variable anomaly_forcing ======================== Anomaly.Forcing.Humidity Anomaly.Forcing.Longwave From a4d87b341237e4cd54db7f611b00a750239fdd05 Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Thu, 8 Aug 2024 16:12:03 -0600 Subject: [PATCH 03/38] Update meshfile used for Anomaly.Forcing.*. --- datm/cime_config/stream_definition_datm.xml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/datm/cime_config/stream_definition_datm.xml b/datm/cime_config/stream_definition_datm.xml index e98a397f0..e916b5607 100644 --- a/datm/cime_config/stream_definition_datm.xml +++ b/datm/cime_config/stream_definition_datm.xml @@ -1175,7 +1175,7 @@ - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.allvars.ccsm4.rcp45.2006-2300.nc @@ -1213,7 +1213,7 @@ - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.pr.ccsm4.rcp45.2006-2300.nc @@ -1244,7 +1244,7 @@ - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.tas.ccsm4.rcp45.2006-2300.nc @@ -1275,7 +1275,7 @@ - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.ps.ccsm4.rcp45.2006-2300.nc @@ -1306,7 +1306,7 @@ - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.huss.ccsm4.rcp45.2006-2300.nc @@ -1337,7 +1337,7 @@ - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.uas.ccsm4.rcp45.2006-2300.nc @@ -1368,7 +1368,7 @@ - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.vas.ccsm4.rcp45.2006-2300.nc @@ -1399,7 +1399,7 @@ - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.rsds.ccsm4.rcp45.2006-2300.nc @@ -1430,7 +1430,7 @@ - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.rlds.ccsm4.rcp45.2006-2300.nc From 5323a11531d6b266eedcc70c313d01a1e8d0d119 Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Thu, 8 Aug 2024 16:21:45 -0600 Subject: [PATCH 04/38] Fix more typos of "anomaly." --- datm/cime_config/stream_definition_datm.xml | 2 +- datm/datm_datamode_clmncep_mod.F90 | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/datm/cime_config/stream_definition_datm.xml b/datm/cime_config/stream_definition_datm.xml index e916b5607..1ac68790c 100644 --- a/datm/cime_config/stream_definition_datm.xml +++ b/datm/cime_config/stream_definition_datm.xml @@ -1170,7 +1170,7 @@ - + diff --git a/datm/datm_datamode_clmncep_mod.F90 b/datm/datm_datamode_clmncep_mod.F90 index 41a9725c0..b892bc9e8 100644 --- a/datm/datm_datamode_clmncep_mod.F90 +++ b/datm/datm_datamode_clmncep_mod.F90 @@ -76,15 +76,15 @@ module datm_datamode_clmncep_mod ! stream data bias correction real(r8), pointer :: strm_precsf(:) => null() - ! stream data anomonly forcing - real(r8), pointer :: strm_u_af(:) => null() ! anomoly forcing - real(r8), pointer :: strm_v_af(:) => null() ! anomoly forcing - real(r8), pointer :: strm_prec_af(:) => null() ! anomoly forcing - real(r8), pointer :: strm_tbot_af(:) => null() ! anomoly forcing - real(r8), pointer :: strm_pbot_af(:) => null() ! anomoly forcing - real(r8), pointer :: strm_shum_af(:) => null() ! anomoly forcing - real(r8), pointer :: strm_swdn_af(:) => null() ! anomoly forcing - real(r8), pointer :: strm_lwdn_af(:) => null() ! anomoly forcing + ! stream data anomaly forcing + real(r8), pointer :: strm_u_af(:) => null() ! anomaly forcing + real(r8), pointer :: strm_v_af(:) => null() ! anomaly forcing + real(r8), pointer :: strm_prec_af(:) => null() ! anomaly forcing + real(r8), pointer :: strm_tbot_af(:) => null() ! anomaly forcing + real(r8), pointer :: strm_pbot_af(:) => null() ! anomaly forcing + real(r8), pointer :: strm_shum_af(:) => null() ! anomaly forcing + real(r8), pointer :: strm_swdn_af(:) => null() ! anomaly forcing + real(r8), pointer :: strm_lwdn_af(:) => null() ! anomaly forcing ! import state data real(r8), pointer :: Sx_avsdr(:) => null() @@ -249,7 +249,7 @@ subroutine datm_datamode_clmncep_init_pointers(importState, exportState, sdat, r call shr_strdata_get_stream_pointer( sdat, 'Faxa_precsf' , strm_precsf , rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - ! initialize pointers for module level stream arrays for anomonly forcing + ! initialize pointers for module level stream arrays for anomaly forcing call shr_strdata_get_stream_pointer( sdat, 'Sa_u_af' , strm_u_af , rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call shr_strdata_get_stream_pointer( sdat, 'Sa_v_af' , strm_v_af , rc) From ba85ec4ea74820a797317121a4aa0984bf33f09c Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Thu, 8 Aug 2024 17:31:59 -0600 Subject: [PATCH 05/38] Add Anomaly.Forcing.cmip6.ssp126. --- datm/cime_config/namelist_definition_datm.xml | 2 +- datm/cime_config/stream_definition_datm.xml | 38 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/datm/cime_config/namelist_definition_datm.xml b/datm/cime_config/namelist_definition_datm.xml index c3efa072b..6ab571803 100644 --- a/datm/cime_config/namelist_definition_datm.xml +++ b/datm/cime_config/namelist_definition_datm.xml @@ -221,7 +221,7 @@ char(10) datm datm_nml - Anomaly.Forcing.cmip5.rcp45,Anomaly.Forcing.Precip,Anomaly.Forcing.Temperature,Anomaly.Forcing.Pressure,Anomaly.Forcing.Humidity,Anomaly.Forcing.Uwind,Anomaly.Forcing.Vwind,Anomaly.Forcing.Shortwave,Anomaly.Forcing.Longwave + Anomaly.Forcing.cmip5.rcp45,Anomaly.Forcing.cmip6.ssp126,Anomaly.Forcing.Precip,Anomaly.Forcing.Temperature,Anomaly.Forcing.Pressure,Anomaly.Forcing.Humidity,Anomaly.Forcing.Uwind,Anomaly.Forcing.Vwind,Anomaly.Forcing.Shortwave,Anomaly.Forcing.Longwave If set, include anomaly forcing streams in namelist. diff --git a/datm/cime_config/stream_definition_datm.xml b/datm/cime_config/stream_definition_datm.xml index 1ac68790c..5a9e4fc42 100644 --- a/datm/cime_config/stream_definition_datm.xml +++ b/datm/cime_config/stream_definition_datm.xml @@ -1211,6 +1211,44 @@ single + + + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + + + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/CMIP6-SSP1-2.6/af.allvars.CESM.SSP1-2.6.2015-2100_c20220628.nc + + + huss Sa_shum_af + pr Faxa_prec_af + ps Sa_pbot_af + rlds Faxa_lwdn_af + rsds Faxa_swdn_af + tas Sa_tbot_af + uas Sa_u_af + vas Sa_v_af + + null + + bilinear + + null + 2015 + 2015 + 2100 + 0 + + nearest + + + cycle + + + 1.5 + + single + + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc From 9b0f71424517a817c8581d2350bc66299ce3bc9a Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Thu, 8 Aug 2024 18:25:07 -0600 Subject: [PATCH 06/38] Add Anomaly.Forcing.cmip6.245, 370, 585. --- datm/cime_config/namelist_definition_datm.xml | 2 +- datm/cime_config/stream_definition_datm.xml | 114 ++++++++++++++++++ 2 files changed, 115 insertions(+), 1 deletion(-) diff --git a/datm/cime_config/namelist_definition_datm.xml b/datm/cime_config/namelist_definition_datm.xml index 6ab571803..54e2bc0b1 100644 --- a/datm/cime_config/namelist_definition_datm.xml +++ b/datm/cime_config/namelist_definition_datm.xml @@ -221,7 +221,7 @@ char(10) datm datm_nml - Anomaly.Forcing.cmip5.rcp45,Anomaly.Forcing.cmip6.ssp126,Anomaly.Forcing.Precip,Anomaly.Forcing.Temperature,Anomaly.Forcing.Pressure,Anomaly.Forcing.Humidity,Anomaly.Forcing.Uwind,Anomaly.Forcing.Vwind,Anomaly.Forcing.Shortwave,Anomaly.Forcing.Longwave + Anomaly.Forcing.cmip5.rcp45,Anomaly.Forcing.cmip6.ssp126,Anomaly.Forcing.cmip6.ssp245,Anomaly.Forcing.cmip6.ssp370,Anomaly.Forcing.cmip6.ssp585,Anomaly.Forcing.Precip,Anomaly.Forcing.Temperature,Anomaly.Forcing.Pressure,Anomaly.Forcing.Humidity,Anomaly.Forcing.Uwind,Anomaly.Forcing.Vwind,Anomaly.Forcing.Shortwave,Anomaly.Forcing.Longwave If set, include anomaly forcing streams in namelist. diff --git a/datm/cime_config/stream_definition_datm.xml b/datm/cime_config/stream_definition_datm.xml index 5a9e4fc42..232b2ec02 100644 --- a/datm/cime_config/stream_definition_datm.xml +++ b/datm/cime_config/stream_definition_datm.xml @@ -1249,6 +1249,120 @@ single + + + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + + + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/CMIP6-SSP2-4.5/af.allvars.CESM.SSP2-4.5.2015-2100_c20220628.nc + + + huss Sa_shum_af + pr Faxa_prec_af + ps Sa_pbot_af + rlds Faxa_lwdn_af + rsds Faxa_swdn_af + tas Sa_tbot_af + uas Sa_u_af + vas Sa_v_af + + null + + bilinear + + null + 2015 + 2015 + 2100 + 0 + + nearest + + + cycle + + + 1.5 + + single + + + + + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + + + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/CMIP6-SSP3-7.0/af.allvars.CESM.SSP3-7.0.2015-2100_c20220628.nc + + + huss Sa_shum_af + pr Faxa_prec_af + ps Sa_pbot_af + rlds Faxa_lwdn_af + rsds Faxa_swdn_af + tas Sa_tbot_af + uas Sa_u_af + vas Sa_v_af + + null + + bilinear + + null + 2015 + 2015 + 2100 + 0 + + nearest + + + cycle + + + 1.5 + + single + + + + + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + + + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/CMIP6-SSP5-8.5/af.allvars.CESM.SSP5-8.5.2015-2100_c20220628.nc + + + huss Sa_shum_af + pr Faxa_prec_af + ps Sa_pbot_af + rlds Faxa_lwdn_af + rsds Faxa_swdn_af + tas Sa_tbot_af + uas Sa_u_af + vas Sa_v_af + + null + + bilinear + + null + 2015 + 2015 + 2100 + 0 + + nearest + + + cycle + + + 1.5 + + single + + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc From d92193146f9dd5202d68b1db799500152d803470 Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Wed, 4 Sep 2024 16:50:16 -0600 Subject: [PATCH 07/38] anomaly_forcing now automatically set based on compset (ISSP*). --- datm/cime_config/namelist_definition_datm.xml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/datm/cime_config/namelist_definition_datm.xml b/datm/cime_config/namelist_definition_datm.xml index 54e2bc0b1..dc5aa5270 100644 --- a/datm/cime_config/namelist_definition_datm.xml +++ b/datm/cime_config/namelist_definition_datm.xml @@ -226,7 +226,11 @@ If set, include anomaly forcing streams in namelist. - + null + Anomaly.Forcing.cmip6.ssp126 + Anomaly.Forcing.cmip6.ssp245 + Anomaly.Forcing.cmip6.ssp370 + Anomaly.Forcing.cmip6.ssp585 From 0389799db274a0e793ebb049a4118ad87577ebdd Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Thu, 5 Sep 2024 08:56:27 -0600 Subject: [PATCH 08/38] Now actually sets anomaly_forcing based on compset. This reverts commit 3f36622b3bd6358d324f1aca5e90009db306963e, which tried to do this in namelist_definition_datm.xml, and instead does it in datm/cime_config/buildnml. Only looks at compset if anomaly_forcing not specified in namelist. --- datm/cime_config/buildnml | 11 +++++++++++ datm/cime_config/namelist_definition_datm.xml | 6 +----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/datm/cime_config/buildnml b/datm/cime_config/buildnml index 28e341c02..560bc86d2 100755 --- a/datm/cime_config/buildnml +++ b/datm/cime_config/buildnml @@ -10,6 +10,7 @@ # pylint: disable=wildcard-import,unused-wildcard-import,wrong-import-position import os, sys +import re _CDEPS_CONFIG = os.path.join(os.path.dirname(os.path.abspath(__file__)), os.pardir,os.pardir,"cime_config") _CIMEROOT = os.environ.get("CIMEROOT") @@ -115,6 +116,7 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path atm_grid = case.get_value("ATM_GRID") model_grid = case.get_value("GRID") comp_lnd = case.get_value("COMP_LND") + compset = case.get_value("COMPSET") # Check for incompatible options. if "CLM" in datm_mode and comp_lnd == "clm": @@ -135,6 +137,7 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path logger.debug("DATM preso3 mode is {}".format(datm_preso3)) logger.debug("DATM topo mode is {}".format(datm_topo)) logger.debug("CLM_USRDAT_NAME is {}".format(clm_usrdat_name)) + logger.debug("COMPSET is {}".format(compset)) # Initialize namelist defaults config = {} @@ -205,9 +208,17 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path bias_correct = nmlgen.get_value("bias_correct") if bias_correct is not None: streamlist.append(bias_correct) + + # Set anomaly forcing anomaly_forcing = nmlgen.get_value("anomaly_forcing") + ssp = re.search(r"^SSP\d+", compset).group() + # First by looking in namelist if anomaly_forcing[0] is not None: streamlist += anomaly_forcing + # If not in namelist, look at compset + elif ssp: + anomaly_forcing = "Anomaly.Forcing.cmip6." + ssp.lower() + streamlist += [anomaly_forcing] # Generate datm.streams.xml outfile = os.path.join(confdir, "datm.streams"+inst_string+".xml" ) diff --git a/datm/cime_config/namelist_definition_datm.xml b/datm/cime_config/namelist_definition_datm.xml index dc5aa5270..54e2bc0b1 100644 --- a/datm/cime_config/namelist_definition_datm.xml +++ b/datm/cime_config/namelist_definition_datm.xml @@ -226,11 +226,7 @@ If set, include anomaly forcing streams in namelist. - null - Anomaly.Forcing.cmip6.ssp126 - Anomaly.Forcing.cmip6.ssp245 - Anomaly.Forcing.cmip6.ssp370 - Anomaly.Forcing.cmip6.ssp585 + From c191e5eaf967db0db66e1a89b5cb78839987f2e3 Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Thu, 5 Sep 2024 10:46:13 -0600 Subject: [PATCH 09/38] SSP compsets now automatically get anomaly_forcing in datm_in. --- datm/cime_config/buildnml | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/datm/cime_config/buildnml b/datm/cime_config/buildnml index 560bc86d2..8b90a73a3 100755 --- a/datm/cime_config/buildnml +++ b/datm/cime_config/buildnml @@ -180,6 +180,16 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path nmlgen.init_defaults(infile, config) + # Get anomaly forcing + # First, look in namelist + anomaly_forcing = nmlgen.get_value("anomaly_forcing") + if anomaly_forcing[0] is None: + # If not in namelist, check whether it's an SSP compset + ssp = re.search(r"^SSP\d+", compset).group() + if ssp: + anomaly_forcing = ["Anomaly.Forcing.cmip6." + ssp.lower()] + nmlgen.set_value("anomaly_forcing", anomaly_forcing) + # Generate datm_in namelist_file = os.path.join(confdir, "datm_in") nmlgen.write_output_file(namelist_file, data_list_path, groups=['datm_nml','const_forcing_nml']) @@ -209,16 +219,10 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path if bias_correct is not None: streamlist.append(bias_correct) - # Set anomaly forcing + # Set anomaly forcing in datm.streams.xml anomaly_forcing = nmlgen.get_value("anomaly_forcing") - ssp = re.search(r"^SSP\d+", compset).group() - # First by looking in namelist if anomaly_forcing[0] is not None: streamlist += anomaly_forcing - # If not in namelist, look at compset - elif ssp: - anomaly_forcing = "Anomaly.Forcing.cmip6." + ssp.lower() - streamlist += [anomaly_forcing] # Generate datm.streams.xml outfile = os.path.join(confdir, "datm.streams"+inst_string+".xml" ) From b02f0cddd7672c34b1044d3b843f930861c9f0af Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Thu, 5 Sep 2024 11:26:06 -0600 Subject: [PATCH 10/38] Remove Anomaly.Forcing.Precip, Anomaly.Forcing.Temperature, etc. --- datm/cime_config/namelist_definition_datm.xml | 2 +- datm/cime_config/stream_definition_datm.xml | 260 +----------------- 2 files changed, 6 insertions(+), 256 deletions(-) diff --git a/datm/cime_config/namelist_definition_datm.xml b/datm/cime_config/namelist_definition_datm.xml index 54e2bc0b1..dde528f78 100644 --- a/datm/cime_config/namelist_definition_datm.xml +++ b/datm/cime_config/namelist_definition_datm.xml @@ -221,7 +221,7 @@ char(10) datm datm_nml - Anomaly.Forcing.cmip5.rcp45,Anomaly.Forcing.cmip6.ssp126,Anomaly.Forcing.cmip6.ssp245,Anomaly.Forcing.cmip6.ssp370,Anomaly.Forcing.cmip6.ssp585,Anomaly.Forcing.Precip,Anomaly.Forcing.Temperature,Anomaly.Forcing.Pressure,Anomaly.Forcing.Humidity,Anomaly.Forcing.Uwind,Anomaly.Forcing.Vwind,Anomaly.Forcing.Shortwave,Anomaly.Forcing.Longwave + Anomaly.Forcing.cmip5.rcp45,Anomaly.Forcing.cmip6.ssp126,Anomaly.Forcing.cmip6.ssp245,Anomaly.Forcing.cmip6.ssp370,Anomaly.Forcing.cmip6.ssp585 If set, include anomaly forcing streams in namelist. diff --git a/datm/cime_config/stream_definition_datm.xml b/datm/cime_config/stream_definition_datm.xml index 232b2ec02..db473195c 100644 --- a/datm/cime_config/stream_definition_datm.xml +++ b/datm/cime_config/stream_definition_datm.xml @@ -210,14 +210,11 @@ ======================== optional streams anonomly forcing (turned on and set my datm_nml variable anomaly_forcing ======================== - Anomaly.Forcing.Humidity - Anomaly.Forcing.Longwave - Anomaly.Forcing.Precip - Anomaly.Forcing.Pressure - Anomaly.Forcing.Shortwave - Anomaly.Forcing.Temperature - Anomaly.Forcing.Uwind - Anomaly.Forcing.Vwind + Anomaly.Forcing.cmip5.rcp45 + Anomaly.Forcing.cmip6.ssp126 + Anomaly.Forcing.cmip6.ssp245 + Anomaly.Forcing.cmip6.ssp370 + Anomaly.Forcing.cmip6.ssp585 ======================== optional streams bias correction (turned on and set my datm_nml variable bias_correct) @@ -1363,253 +1360,6 @@ single - - - $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc - - - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.pr.ccsm4.rcp45.2006-2300.nc - - - pr Faxa_prec_af - - null - - bilinear - - null - 2006 - 2006 - 2300 - 0 - - nearest - - - cycle - - - 1.5 - - single - - - - - $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc - - - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.tas.ccsm4.rcp45.2006-2300.nc - - - tas Sa_tbot_af - - null - - bilinear - - null - 2006 - 2006 - 2300 - 0 - - nearest - - - cycle - - - 1.5 - - single - - - - - $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc - - - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.ps.ccsm4.rcp45.2006-2300.nc - - - ps Sa_pbot_af - - null - - bilinear - - null - 2006 - 2006 - 2300 - 0 - - nearest - - - cycle - - - 1.5 - - single - - - - - $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc - - - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.huss.ccsm4.rcp45.2006-2300.nc - - - huss Sa_shum_af - - null - - bilinear - - null - 2006 - 2300 - 2300 - 0 - - nearest - - - cycle - - - 1.5 - - single - - - - - $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc - - - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.uas.ccsm4.rcp45.2006-2300.nc - - - uas Sa_u_af - - null - - bilinear - - null - 2006 - 2006 - 2300 - 0 - - nearest - - - cycle - - - 1.5 - - single - - - - - $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc - - - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.vas.ccsm4.rcp45.2006-2300.nc - - - vas Sa_v_af - - null - - bilinear - - null - 2006 - 2006 - 2300 - 0 - - nearest - - - cycle - - - 1.5 - - single - - - - - $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc - - - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.rsds.ccsm4.rcp45.2006-2300.nc - - - rsds Faxa_swdn_af - - null - - bilinear - - null - 2006 - 2006 - 2300 - 0 - - nearest - - - cycle - - - 1.5 - - single - - - - - $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc - - - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.rlds.ccsm4.rcp45.2006-2300.nc - - - rlds Faxa_lwdn_af - - null - - bilinear - - null - 2006 - 2006 - 2300 - 0 - - nearest - - - cycle - - - 1.5 - - single - From 074d90d76c5e951acbc6dea98ea29b8e867d7319 Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Thu, 5 Sep 2024 12:15:40 -0600 Subject: [PATCH 11/38] Set anomaly_forcing = 'none' to not use anomalies in an SSP compset. --- datm/cime_config/buildnml | 2 +- datm/cime_config/namelist_definition_datm.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/datm/cime_config/buildnml b/datm/cime_config/buildnml index 8b90a73a3..d8c9a2f28 100755 --- a/datm/cime_config/buildnml +++ b/datm/cime_config/buildnml @@ -221,7 +221,7 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path # Set anomaly forcing in datm.streams.xml anomaly_forcing = nmlgen.get_value("anomaly_forcing") - if anomaly_forcing[0] is not None: + if anomaly_forcing[0] is not None and anomaly_forcing[0] != "none": streamlist += anomaly_forcing # Generate datm.streams.xml diff --git a/datm/cime_config/namelist_definition_datm.xml b/datm/cime_config/namelist_definition_datm.xml index dde528f78..6d4f676db 100644 --- a/datm/cime_config/namelist_definition_datm.xml +++ b/datm/cime_config/namelist_definition_datm.xml @@ -221,7 +221,7 @@ char(10) datm datm_nml - Anomaly.Forcing.cmip5.rcp45,Anomaly.Forcing.cmip6.ssp126,Anomaly.Forcing.cmip6.ssp245,Anomaly.Forcing.cmip6.ssp370,Anomaly.Forcing.cmip6.ssp585 + none,Anomaly.Forcing.cmip5.rcp45,Anomaly.Forcing.cmip6.ssp126,Anomaly.Forcing.cmip6.ssp245,Anomaly.Forcing.cmip6.ssp370,Anomaly.Forcing.cmip6.ssp585 If set, include anomaly forcing streams in namelist. From 0a6142225ebde0a80060e06a85f9d44d3f5453b6 Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Thu, 5 Sep 2024 13:00:09 -0600 Subject: [PATCH 12/38] Only set anomaly_forcing for DATM SSP compsets. --- datm/cime_config/buildnml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/datm/cime_config/buildnml b/datm/cime_config/buildnml index d8c9a2f28..c374440fd 100755 --- a/datm/cime_config/buildnml +++ b/datm/cime_config/buildnml @@ -185,8 +185,9 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path anomaly_forcing = nmlgen.get_value("anomaly_forcing") if anomaly_forcing[0] is None: # If not in namelist, check whether it's an SSP compset - ssp = re.search(r"^SSP\d+", compset).group() + ssp = re.search(r"^SSP\d+_DATM", compset).group() if ssp: + ssp = ssp.replace("_DATM", "") anomaly_forcing = ["Anomaly.Forcing.cmip6." + ssp.lower()] nmlgen.set_value("anomaly_forcing", anomaly_forcing) From 4715267bcff8b46f228722cccc4d6b445c89ed8b Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Thu, 5 Sep 2024 13:43:43 -0600 Subject: [PATCH 13/38] Provide hint in error message if namelist variable invalid due to surrounding quote marks. --- cime_config/stream_cdeps.py | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/cime_config/stream_cdeps.py b/cime_config/stream_cdeps.py index b7af2f28c..325ec2c16 100644 --- a/cime_config/stream_cdeps.py +++ b/cime_config/stream_cdeps.py @@ -333,14 +333,30 @@ def create_stream_xml( ), ) if var_key in valid_values: + + # # Handle, e.g., 'bilinear' in namelist instead of bilinear (no quotes) + mod_dict_var_key = mod_dict[var_key] + + # Check that key is valid + is_valid = mod_dict_var_key in valid_values[var_key] + msg = "{} can only have values of {} for stream {} in file {}, not {}".format( + var_key, + valid_values[var_key], + stream_name, + user_mods_file, + mod_dict[var_key], + ) + if not is_valid: + # Check for surrounding quote marks + has_surrounding_quotes = ( + (mod_dict_var_key[0] == mod_dict_var_key[-1] == "'") or + (mod_dict_var_key[0] == mod_dict_var_key[-1] == '"') + ) + if has_surrounding_quotes and mod_dict_var_key[1:-1] in valid_values[var_key]: + msg += " (try removing surrounding quotes)" expect( - mod_dict[var_key] in valid_values[var_key], - "{} can only have values of {} for stream {} in file {}".format( - var_key, - valid_values[var_key], - stream_name, - user_mods_file, - ), + is_valid, + msg, ) stream_vars["stream_" + var_key] = mod_dict[var_key] if var_key == "datafiles": From a11abf756bac4ce5621600ae372cd5c63650753a Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Thu, 5 Sep 2024 15:15:11 -0600 Subject: [PATCH 14/38] Make datm buildnml more robust. --- datm/cime_config/buildnml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/datm/cime_config/buildnml b/datm/cime_config/buildnml index c374440fd..93be5d981 100755 --- a/datm/cime_config/buildnml +++ b/datm/cime_config/buildnml @@ -183,11 +183,11 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path # Get anomaly forcing # First, look in namelist anomaly_forcing = nmlgen.get_value("anomaly_forcing") - if anomaly_forcing[0] is None: + if anomaly_forcing and anomaly_forcing[0] is None: # If not in namelist, check whether it's an SSP compset - ssp = re.search(r"^SSP\d+_DATM", compset).group() + ssp = re.search(r"^SSP\d+_DATM", compset) if ssp: - ssp = ssp.replace("_DATM", "") + ssp = ssp.group().replace("_DATM", "") anomaly_forcing = ["Anomaly.Forcing.cmip6." + ssp.lower()] nmlgen.set_value("anomaly_forcing", anomaly_forcing) From cd97deac4caa6b133930aaf3fb8f4802cdd21a2e Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Thu, 5 Sep 2024 15:47:54 -0600 Subject: [PATCH 15/38] Bugfix to future-proofing of datm buildnml. --- datm/cime_config/buildnml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datm/cime_config/buildnml b/datm/cime_config/buildnml index 93be5d981..17e24b8cc 100755 --- a/datm/cime_config/buildnml +++ b/datm/cime_config/buildnml @@ -183,7 +183,7 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path # Get anomaly forcing # First, look in namelist anomaly_forcing = nmlgen.get_value("anomaly_forcing") - if anomaly_forcing and anomaly_forcing[0] is None: + if not anomaly_forcing or anomaly_forcing[0] is None: # If not in namelist, check whether it's an SSP compset ssp = re.search(r"^SSP\d+_DATM", compset) if ssp: From 94dcdb04a9e0be1c8eeed0f18bbaca321e8b0f19 Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Fri, 6 Sep 2024 09:52:17 -0600 Subject: [PATCH 16/38] Add aux_cdeps tests for SSPs other than 585. Resolves ESCOMP/CDEPS#310. --- datm/cime_config/testdefs/testlist_datm.xml | 27 +++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/datm/cime_config/testdefs/testlist_datm.xml b/datm/cime_config/testdefs/testlist_datm.xml index 34bbe3fcf..788e6f555 100644 --- a/datm/cime_config/testdefs/testlist_datm.xml +++ b/datm/cime_config/testdefs/testlist_datm.xml @@ -52,6 +52,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + From a911685d37b7276ecfbbb55c7c946ca10429d505 Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Wed, 19 Feb 2025 13:06:08 -0700 Subject: [PATCH 17/38] Simplify removal of quotes. --- cime_config/stream_cdeps.py | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/cime_config/stream_cdeps.py b/cime_config/stream_cdeps.py index 325ec2c16..efbbba4cd 100644 --- a/cime_config/stream_cdeps.py +++ b/cime_config/stream_cdeps.py @@ -335,28 +335,17 @@ def create_stream_xml( if var_key in valid_values: # # Handle, e.g., 'bilinear' in namelist instead of bilinear (no quotes) - mod_dict_var_key = mod_dict[var_key] + mod_dict[var_key] = re.sub(r"[\"\']", "", mod_dict[var_key]) # Check that key is valid - is_valid = mod_dict_var_key in valid_values[var_key] - msg = "{} can only have values of {} for stream {} in file {}, not {}".format( - var_key, - valid_values[var_key], - stream_name, - user_mods_file, - mod_dict[var_key], - ) - if not is_valid: - # Check for surrounding quote marks - has_surrounding_quotes = ( - (mod_dict_var_key[0] == mod_dict_var_key[-1] == "'") or - (mod_dict_var_key[0] == mod_dict_var_key[-1] == '"') - ) - if has_surrounding_quotes and mod_dict_var_key[1:-1] in valid_values[var_key]: - msg += " (try removing surrounding quotes)" expect( - is_valid, - msg, + mod_dict[var_key] in valid_values[var_key], + "{} can only have values of {} for stream {} in file {}".format( + var_key, + valid_values[var_key], + stream_name, + user_mods_file, + ), ) stream_vars["stream_" + var_key] = mod_dict[var_key] if var_key == "datafiles": From 93e59c0f19110d2ace7a94c6906b19ca3bfa98f0 Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Wed, 19 Feb 2025 13:08:58 -0700 Subject: [PATCH 18/38] Fix indentation. --- datm/cime_config/stream_definition_datm.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/datm/cime_config/stream_definition_datm.xml b/datm/cime_config/stream_definition_datm.xml index db473195c..b198b1e76 100644 --- a/datm/cime_config/stream_definition_datm.xml +++ b/datm/cime_config/stream_definition_datm.xml @@ -1169,8 +1169,8 @@ - - + + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc From 196957fce5b9604d723efbd643fe9aa72b98477f Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Fri, 14 Mar 2025 14:49:56 -0600 Subject: [PATCH 19/38] buildnml now errors on mismatch between anomaly forcing and DATM_MODE. cmip5 and cmip6 anomalies were generated only with GSWP3, so buildnml now errors if DATM_MODE isn't CLMGSWP3v1. However, the user can override this by setting the XML variable DATM_MODE_ANOMALY_FORCING_MISMATCH to TRUE. --- datm/cime_config/buildnml | 15 +++++++++++++++ datm/cime_config/config_component.xml | 11 +++++++++++ 2 files changed, 26 insertions(+) diff --git a/datm/cime_config/buildnml b/datm/cime_config/buildnml index 17e24b8cc..31d45d5e8 100755 --- a/datm/cime_config/buildnml +++ b/datm/cime_config/buildnml @@ -89,6 +89,18 @@ def _get_neon_data_availability(case, neonsite): expect(newestdate, "No tower data found on server for NEON site {}".format(neonsite)) return None +#################################################################################### +def _check_datm_af_mismatch(anomaly_forcing, datm_mode): +#################################################################################### + + # CMIP5 and CMIP6 anomalies were only generated relative to GSWP3v1 + is_cmip5_or_6 = any(x in anomaly_forcing for x in ["cmip5", "cmip6"]) + if is_cmip5_or_6 and datm_mode != "CLMGSWP3v1": + raise SystemExit( + "CMIP5 and CMIP6 anomalies were only generated relative for DATM_MODE='CLMGSWP3v1'" + ) + + # pylint: disable=too-many-arguments,too-many-locals,too-many-branches,too-many-statements #################################################################################### def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path): @@ -107,6 +119,7 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path caseroot = case.get_value("CASEROOT") datm_mode = case.get_value("DATM_MODE") + mismatch_ok = case.get_value("DATM_MODE_ANOMALY_FORCING_MISMATCH") datm_topo = case.get_value("DATM_TOPO") datm_presaero = case.get_value("DATM_PRESAERO") datm_presndep = case.get_value("DATM_PRESNDEP") @@ -223,6 +236,8 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path # Set anomaly forcing in datm.streams.xml anomaly_forcing = nmlgen.get_value("anomaly_forcing") if anomaly_forcing[0] is not None and anomaly_forcing[0] != "none": + if not mismatch_ok: + _check_datm_af_mismatch(anomaly_forcing[0], datm_mode) streamlist += anomaly_forcing # Generate datm.streams.xml diff --git a/datm/cime_config/config_component.xml b/datm/cime_config/config_component.xml index f2698e9d4..8b5eab641 100644 --- a/datm/cime_config/config_component.xml +++ b/datm/cime_config/config_component.xml @@ -39,6 +39,17 @@ Name of atmospheric component + + logical + TRUE,FALSE + FALSE + run_component_datm + env_run.xml + If set to true, then user will be allowed to specify an anomaly forcing that was based + on a different climate forcing than what's given in DATM_MODE + + + char CORE2_NYF,CORE2_IAF,CLM_QIAN,CLM_QIAN_WISO,1PT,CLMCRUNCEP,CLMCRUNCEPv7,CLMGSWP3v1,CLMNLDAS2,CPLHIST,CORE_IAF_JRA,CORE_IAF_JRA_1p4_2018,ERA5,SIMPLE From b56f0b7ab2ff78bedce0660e66c6c58e191a3b58 Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Tue, 18 Mar 2025 12:46:29 -0600 Subject: [PATCH 20/38] Add comments about new tests in testlist_datm.xml. --- datm/cime_config/testdefs/testlist_datm.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/datm/cime_config/testdefs/testlist_datm.xml b/datm/cime_config/testdefs/testlist_datm.xml index 788e6f555..a94bf694f 100644 --- a/datm/cime_config/testdefs/testlist_datm.xml +++ b/datm/cime_config/testdefs/testlist_datm.xml @@ -59,6 +59,7 @@ + @@ -68,6 +69,7 @@ + @@ -77,6 +79,7 @@ + From 8aab1aeb9afc7fbb4e4d212f8c57d0178bc9b905 Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Wed, 19 Mar 2025 11:53:05 -0600 Subject: [PATCH 21/38] Remove DATM_MODE_ANOMALY_FORCING_MISMATCH option. --- datm/cime_config/buildnml | 7 +++---- datm/cime_config/config_component.xml | 11 ----------- 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/datm/cime_config/buildnml b/datm/cime_config/buildnml index 31d45d5e8..cebd9b86c 100755 --- a/datm/cime_config/buildnml +++ b/datm/cime_config/buildnml @@ -97,7 +97,8 @@ def _check_datm_af_mismatch(anomaly_forcing, datm_mode): is_cmip5_or_6 = any(x in anomaly_forcing for x in ["cmip5", "cmip6"]) if is_cmip5_or_6 and datm_mode != "CLMGSWP3v1": raise SystemExit( - "CMIP5 and CMIP6 anomalies were only generated relative for DATM_MODE='CLMGSWP3v1'" + "CMIP5 and CMIP6 anomalies were only generated relative for DATM_MODE CLMGSWP3v1." + " To fix this error, do: ./xmlchange DATM_MODE=CLMGSWP3v1" ) @@ -119,7 +120,6 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path caseroot = case.get_value("CASEROOT") datm_mode = case.get_value("DATM_MODE") - mismatch_ok = case.get_value("DATM_MODE_ANOMALY_FORCING_MISMATCH") datm_topo = case.get_value("DATM_TOPO") datm_presaero = case.get_value("DATM_PRESAERO") datm_presndep = case.get_value("DATM_PRESNDEP") @@ -236,8 +236,7 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path # Set anomaly forcing in datm.streams.xml anomaly_forcing = nmlgen.get_value("anomaly_forcing") if anomaly_forcing[0] is not None and anomaly_forcing[0] != "none": - if not mismatch_ok: - _check_datm_af_mismatch(anomaly_forcing[0], datm_mode) + _check_datm_af_mismatch(anomaly_forcing[0], datm_mode) streamlist += anomaly_forcing # Generate datm.streams.xml diff --git a/datm/cime_config/config_component.xml b/datm/cime_config/config_component.xml index c4c886d32..107929616 100644 --- a/datm/cime_config/config_component.xml +++ b/datm/cime_config/config_component.xml @@ -40,17 +40,6 @@ Name of atmospheric component - - logical - TRUE,FALSE - FALSE - run_component_datm - env_run.xml - If set to true, then user will be allowed to specify an anomaly forcing that was based - on a different climate forcing than what's given in DATM_MODE - - - char CORE2_NYF,CORE2_IAF,CLM_QIAN,CLM_QIAN_WISO,1PT,CLMCRUNCEP,CLMCRUNCEPv7,CLMGSWP3v1,CLMNLDAS2,CPLHIST,CORE_IAF_JRA,CORE_IAF_JRA_1p4_2018,CORE_IAF_JRA_1p5_2023,ERA5,SIMPLE From 877024eaec4f645cd0c3ec2700d8cebb61a0951a Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 21 Mar 2025 07:32:04 -0600 Subject: [PATCH 22/38] needed to be added to CMakeLists.txt --- share/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/share/CMakeLists.txt b/share/CMakeLists.txt index 3a821304b..cee2936d4 100644 --- a/share/CMakeLists.txt +++ b/share/CMakeLists.txt @@ -19,6 +19,7 @@ add_library(cdeps_share ${GenF90_SRCS} shr_strconvert_mod.F90 shr_precip_mod.F90 shr_string_mod.F90 + shr_is_restart_fh_mod.F90 nuopc_shr_methods.F90) target_include_directories (cdeps_share PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${ESMF_F90COMPILEPATHS} ${PIO_Fortran_INCLUDE_DIRS}) From 48691af4b174551ca9c6d6cc9399ec5e944fd386 Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Fri, 28 Mar 2025 10:51:48 -0600 Subject: [PATCH 23/38] Fix 3 paths in stream_definition_datm.xml. --- datm/cime_config/stream_definition_datm.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/datm/cime_config/stream_definition_datm.xml b/datm/cime_config/stream_definition_datm.xml index f8523203d..364b4a895 100644 --- a/datm/cime_config/stream_definition_datm.xml +++ b/datm/cime_config/stream_definition_datm.xml @@ -506,7 +506,7 @@ $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.CRUJRA.0.5d.c20241231/three_stream/mesh_0.5x0.5_CRUJRAv2.5mask_cdf5_c20240916.nc - $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.CRUJRA.0.5d.c20241231/three_stream/clmforc.CRUJRAv2.5_0.5x0.5.Solr.%y.nc + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.CRUJRA.0.5d.c20241231/three_stream/clmforc.CRUJRAv2.5_0.5x0.5.Solr.%y.nc FSDS Faxa_swdn @@ -537,7 +537,7 @@ $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.CRUJRA.0.5d.c20241231/three_stream/mesh_0.5x0.5_CRUJRAv2.5mask_cdf5_c20240916.nc - $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.CRUJRA.0.5d.c20241231/three_stream/clmforc.CRUJRAv2.5_0.5x0.5.Prec.%y.nc + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.CRUJRA.0.5d.c20241231/three_stream/clmforc.CRUJRAv2.5_0.5x0.5.Prec.%y.nc PRECTmms Faxa_precn @@ -568,7 +568,7 @@ $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.CRUJRA.0.5d.c20241231/three_stream/mesh_0.5x0.5_CRUJRAv2.5mask_cdf5_c20240916.nc - $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.CRUJRA.0.5d.c20241231/three_stream/clmforc.CRUJRAv2.5_0.5x0.5.TPQWL.%y.nc + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.CRUJRA.0.5d.c20241231/three_stream/clmforc.CRUJRAv2.5_0.5x0.5.TPQWL.%y.nc TBOT Sa_tbot From 65289cb175a509708ee094297be6aaeb3f6b547a Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Mon, 14 Apr 2025 15:17:35 -0600 Subject: [PATCH 24/38] fix st_archive of rpointer files --- datm/cime_config/config_archive.xml | 2 +- dglc/cime_config/config_archive.xml | 2 +- dice/cime_config/config_archive.xml | 8 +++++--- dlnd/cime_config/config_archive.xml | 2 +- docn/cime_config/config_archive.xml | 2 +- drof/cime_config/config_archive.xml | 2 +- dwav/cime_config/config_archive.xml | 2 +- 7 files changed, 11 insertions(+), 9 deletions(-) diff --git a/datm/cime_config/config_archive.xml b/datm/cime_config/config_archive.xml index e4c0c87bd..35e0b34fb 100644 --- a/datm/cime_config/config_archive.xml +++ b/datm/cime_config/config_archive.xml @@ -4,7 +4,7 @@ rs1 unset - rpointer.atm$NINST_STRING + rpointer.atm$NINST_STRING.$DATENAME $CASE.datm$NINST_STRING.r.$DATENAME.nc,$CASE.datm$NINST_STRING.rs1.$DATENAME.bin diff --git a/dglc/cime_config/config_archive.xml b/dglc/cime_config/config_archive.xml index f61daec79..67b45c308 100644 --- a/dglc/cime_config/config_archive.xml +++ b/dglc/cime_config/config_archive.xml @@ -4,7 +4,7 @@ rs1 unset - rpointer.glc$NINST_STRING + rpointer.glc$NINST_STRING.$DATENAME $CASE.dglc$NINST_STRING.r.$DATENAME.nc,$CASE.dglc$NINST_STRING.rs1.$DATENAME.bin diff --git a/dice/cime_config/config_archive.xml b/dice/cime_config/config_archive.xml index 893bd4481..2db09e3f5 100644 --- a/dice/cime_config/config_archive.xml +++ b/dice/cime_config/config_archive.xml @@ -4,13 +4,15 @@ rs1 unset - rpointer.ice$NINST_STRING + rpointer.ice$NINST_STRING.$DATENAME $CASE.dice$NINST_STRING.r.$DATENAME.nc,$CASE.dice$NINST_STRING.rs1.$DATENAME.bin casename.dice.r.1976-01-01-00000.nc - rpointer.ice_0001 - rpointer.ice + rpointer.ice_0001.1976-01-01-00000 + rpointer.ice.1976-01-01-00000 + rpointer.ice_0001.1976-01-02-00000 + rpointer.ice.1976-01-01-00480 diff --git a/dlnd/cime_config/config_archive.xml b/dlnd/cime_config/config_archive.xml index 6f86569be..fa948d571 100644 --- a/dlnd/cime_config/config_archive.xml +++ b/dlnd/cime_config/config_archive.xml @@ -4,7 +4,7 @@ rs1 unset - rpointer.lnd$NINST_STRING + rpointer.lnd$NINST_STRING.$DATENAME $CASE.dlnd$NINST_STRING.r.$DATENAME.nc,$CASE.dlnd$NINST_STRING.rs1.$DATENAME.bin diff --git a/docn/cime_config/config_archive.xml b/docn/cime_config/config_archive.xml index 225475572..6c384b098 100644 --- a/docn/cime_config/config_archive.xml +++ b/docn/cime_config/config_archive.xml @@ -4,7 +4,7 @@ rs1 unset - rpointer.ocn$NINST_STRING + rpointer.ocn$NINST_STRING.$DATENAME $CASE.docn$NINST_STRING.r.$DATENAME.nc,$CASE.docn$NINST_STRING.rs1.$DATENAME.bin diff --git a/drof/cime_config/config_archive.xml b/drof/cime_config/config_archive.xml index 3d5b7447d..2206c041c 100644 --- a/drof/cime_config/config_archive.xml +++ b/drof/cime_config/config_archive.xml @@ -4,7 +4,7 @@ rs1 unset - rpointer.rof$NINST_STRING + rpointer.rof$NINST_STRING.$DATENAME $CASE.drof$NINST_STRING.r.$DATENAME.nc,$CASE.drof$NINST_STRING.rs1.$DATENAME.bin diff --git a/dwav/cime_config/config_archive.xml b/dwav/cime_config/config_archive.xml index f722b862c..398584462 100644 --- a/dwav/cime_config/config_archive.xml +++ b/dwav/cime_config/config_archive.xml @@ -4,7 +4,7 @@ rs1 unset - rpointer.wav$NINST_STRING + rpointer.wav$NINST_STRING.$DATENAME $CASE.dwav$NINST_STRING.r.$DATENAME.nc,$CASE.dwav$NINST_STRING.rs1.$DATENAME.bin From 69f9f3ba75e6b5393e3673ce034ec2077244d6b9 Mon Sep 17 00:00:00 2001 From: mvdebolskiy Date: Tue, 20 May 2025 15:20:20 +0200 Subject: [PATCH 25/38] make 1st timestep same as cam7 (cherry picked from commit feb289049efc4f23eb0f995bc2d86b04874022d3) --- datm/atm_comp_nuopc.F90 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/datm/atm_comp_nuopc.F90 b/datm/atm_comp_nuopc.F90 index cdb0f2343..be3469e6b 100644 --- a/datm/atm_comp_nuopc.F90 +++ b/datm/atm_comp_nuopc.F90 @@ -877,6 +877,8 @@ real(R8) function getNextRadCDay( julday, tod, stepno, dtime, iradsw ) ! or later. if (mod(tod,delta_radsw) == 0 .and. stepno > 0) then nextsw_cday = julday + 1*dtime/shr_const_cday + elseif (stepno == 0) then + nextsw_cday = julday + (1+liradsw)*dtime/shr_const_cday else nextsw_cday = -1._r8 end if From 0a59658973f1d9d1155f884df3a578fd59a2fd60 Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Sun, 1 Jun 2025 16:48:18 -0600 Subject: [PATCH 26/38] Allow anomaly forcings w/ any DATM. Add CRUJRA2024 test. --- datm/cime_config/buildnml | 13 ------------- datm/cime_config/testdefs/testlist_datm.xml | 10 ++++++++++ 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/datm/cime_config/buildnml b/datm/cime_config/buildnml index cebd9b86c..3653c81c9 100755 --- a/datm/cime_config/buildnml +++ b/datm/cime_config/buildnml @@ -89,18 +89,6 @@ def _get_neon_data_availability(case, neonsite): expect(newestdate, "No tower data found on server for NEON site {}".format(neonsite)) return None -#################################################################################### -def _check_datm_af_mismatch(anomaly_forcing, datm_mode): -#################################################################################### - - # CMIP5 and CMIP6 anomalies were only generated relative to GSWP3v1 - is_cmip5_or_6 = any(x in anomaly_forcing for x in ["cmip5", "cmip6"]) - if is_cmip5_or_6 and datm_mode != "CLMGSWP3v1": - raise SystemExit( - "CMIP5 and CMIP6 anomalies were only generated relative for DATM_MODE CLMGSWP3v1." - " To fix this error, do: ./xmlchange DATM_MODE=CLMGSWP3v1" - ) - # pylint: disable=too-many-arguments,too-many-locals,too-many-branches,too-many-statements #################################################################################### @@ -236,7 +224,6 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path # Set anomaly forcing in datm.streams.xml anomaly_forcing = nmlgen.get_value("anomaly_forcing") if anomaly_forcing[0] is not None and anomaly_forcing[0] != "none": - _check_datm_af_mismatch(anomaly_forcing[0], datm_mode) streamlist += anomaly_forcing # Generate datm.streams.xml diff --git a/datm/cime_config/testdefs/testlist_datm.xml b/datm/cime_config/testdefs/testlist_datm.xml index 25bbba519..8821baf84 100644 --- a/datm/cime_config/testdefs/testlist_datm.xml +++ b/datm/cime_config/testdefs/testlist_datm.xml @@ -62,6 +62,16 @@ + + + + + + + + + + From fb4909b82f736e1cdf72a2fdc9c6c29b3c58b022 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Mon, 23 Jun 2025 07:59:27 -0600 Subject: [PATCH 27/38] update fox external --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 4e98d1b69..5a9172c5e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,7 +4,7 @@ [submodule "fox"] path = fox url = https://github.com/ESMCI/fox.git -fxtag = 4.1.2.1 +fxtag = 4.1.2.2 fxrequired = AlwaysRequired fxDONOTUSEurl = https://github.com/ESMCI/fox.git From debc5453e75195fac8bc418318322a1a63402d16 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 27 Jun 2025 07:01:30 -0600 Subject: [PATCH 28/38] update fox external --- fox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fox b/fox index 4ff17b4a1..2e6d1f253 160000 --- a/fox +++ b/fox @@ -1 +1 @@ -Subproject commit 4ff17b4a1a66b4ae0fbe9a2067503cb4b4c292c0 +Subproject commit 2e6d1f2535ff2424ad8cb49dfe2c35032e0e284b From 772409097978b5d140c828a5c1297908972e8bab Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Tue, 1 Jul 2025 14:27:15 -0600 Subject: [PATCH 29/38] lnd_comp_nuopc.F90: Use CX-length filenames. --- dlnd/lnd_comp_nuopc.F90 | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/dlnd/lnd_comp_nuopc.F90 b/dlnd/lnd_comp_nuopc.F90 index 3ad783862..df4c37941 100644 --- a/dlnd/lnd_comp_nuopc.F90 +++ b/dlnd/lnd_comp_nuopc.F90 @@ -23,6 +23,7 @@ module cdeps_dlnd_comp use NUOPC_Model , only : model_label_Finalize => label_Finalize use NUOPC_Model , only : NUOPC_ModelGet, SetVM use shr_kind_mod , only : r8=>shr_kind_r8, i8=>shr_kind_i8, cl=>shr_kind_cl, cs=>shr_kind_cs + use shr_kind_mod , only : cx=>shr_kind_cx use shr_cal_mod , only : shr_cal_ymd2date use shr_log_mod , only : shr_log_setLogUnit, shr_log_error use dshr_methods_mod , only : dshr_state_getfldptr, dshr_state_diagnose, chkerr, memcheck @@ -71,13 +72,13 @@ module cdeps_dlnd_comp ! dlnd_in namelist input character(CL) :: dataMode = nullstr ! flags physics options wrt input data - character(CL) :: model_meshfile = nullstr ! full pathname to model meshfile - character(CL) :: model_maskfile = nullstr ! full pathname to obtain mask from - character(CL) :: streamfilename ! filename to obtain stream info from - character(CL) :: nlfilename = nullstr ! filename to obtain namelist info from + character(CX) :: model_meshfile = nullstr ! full pathname to model meshfile + character(CX) :: model_maskfile = nullstr ! full pathname to obtain mask from + character(CX) :: streamfilename ! filename to obtain stream info from + character(CX) :: nlfilename = nullstr ! filename to obtain namelist info from ! not currently used ! logical :: force_prognostic_true = .false. ! if true set prognostic true - character(CL) :: restfilm = nullstr ! model restart file namelist + character(CX) :: restfilm = nullstr ! model restart file namelist integer :: nx_global ! global nx dimension of model mesh integer :: ny_global ! global ny dimension of model mesh logical :: skip_restart_read = .false. ! true => skip restart read in continuation @@ -219,11 +220,11 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) call ESMF_VMBroadcast(vm, datamode, CL, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call ESMF_VMBroadcast(vm, model_meshfile, CL, main_task, rc=rc) + call ESMF_VMBroadcast(vm, model_meshfile, CX, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call ESMF_VMBroadcast(vm, model_maskfile, CL, main_task, rc=rc) + call ESMF_VMBroadcast(vm, model_maskfile, CX, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call ESMF_VMBroadcast(vm, restfilm, CL, main_task, rc=rc) + call ESMF_VMBroadcast(vm, restfilm, CX, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call ESMF_VMBroadcast(vm, bcasttmp, 3, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return From 304d112e23019579013d08e57a463334ac8cac8f Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Tue, 1 Jul 2025 15:06:31 -0600 Subject: [PATCH 30/38] Use CX-length filenames for all *_comp_nuopc.F90. --- datm/atm_comp_nuopc.F90 | 11 ++++++----- dglc/glc_comp_nuopc.F90 | 9 +++++---- dice/ice_comp_nuopc.F90 | 13 +++++++------ docn/ocn_comp_nuopc.F90 | 13 +++++++------ drof/rof_comp_nuopc.F90 | 13 +++++++------ dwav/wav_comp_nuopc.F90 | 13 +++++++------ 6 files changed, 39 insertions(+), 33 deletions(-) diff --git a/datm/atm_comp_nuopc.F90 b/datm/atm_comp_nuopc.F90 index be3469e6b..df0385750 100644 --- a/datm/atm_comp_nuopc.F90 +++ b/datm/atm_comp_nuopc.F90 @@ -26,6 +26,7 @@ module cdeps_datm_comp use NUOPC_Model , only : model_label_Finalize => label_Finalize use NUOPC_Model , only : NUOPC_ModelGet, setVM use shr_kind_mod , only : r8=>shr_kind_r8, i8=>shr_kind_i8, cl=>shr_kind_cl, cs=>shr_kind_cs + use shr_kind_mod , only : cx=>shr_kind_cx use shr_const_mod , only : shr_const_cday use shr_cal_mod , only : shr_cal_ymd2date use shr_log_mod , only : shr_log_setLogUnit, shr_log_error @@ -103,8 +104,8 @@ module cdeps_datm_comp character(CL) :: nlfilename = nullstr ! filename to obtain namelist info from character(CL) :: streamfilename = nullstr ! filename to obtain stream info from character(CL) :: dataMode = nullstr ! flags physics options wrt input data - character(CL) :: model_meshfile = nullstr ! full pathname to model meshfile - character(CL) :: model_maskfile = nullstr ! full pathname to obtain mask from + character(CX) :: model_meshfile = nullstr ! full pathname to model meshfile + character(CX) :: model_maskfile = nullstr ! full pathname to obtain mask from integer :: iradsw = 0 ! radiation interval (input namelist) logical :: nextsw_cday_calc_cam7 ! true => use logic appropriate to cam7 (and later) for calculating nextsw_cday character(CL) :: factorFn_mesh = 'null' ! file containing correction factors mesh @@ -294,15 +295,15 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call ESMF_VMBroadcast(vm, anomaly_forcing, CL*8, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call ESMF_VMBroadcast(vm, model_meshfile, CL, main_task, rc=rc) + call ESMF_VMBroadcast(vm, model_meshfile, CX, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call ESMF_VMBroadcast(vm, model_maskfile, CL, main_task, rc=rc) + call ESMF_VMBroadcast(vm, model_maskfile, CX, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call ESMF_VMBroadcast(vm, factorFn_data, CL, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call ESMF_VMBroadcast(vm, factorFn_mesh, CL, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call ESMF_VMBroadcast(vm, restfilm, CL, main_task, rc=rc) + call ESMF_VMBroadcast(vm, restfilm, CX, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call ESMF_VMBroadcast(vm, nextsw_cday_calc, CL, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return diff --git a/dglc/glc_comp_nuopc.F90 b/dglc/glc_comp_nuopc.F90 index 8cde1db1a..4d87b606e 100644 --- a/dglc/glc_comp_nuopc.F90 +++ b/dglc/glc_comp_nuopc.F90 @@ -28,6 +28,7 @@ module cdeps_dglc_comp use NUOPC_Model , only : model_label_Finalize => label_Finalize use NUOPC_Model , only : NUOPC_ModelGet, SetVM use shr_kind_mod , only : r8=>shr_kind_r8, i8=>shr_kind_i8, cl=>shr_kind_cl, cs=>shr_kind_cs + use shr_kind_mod , only : cx=>shr_kind_cx use shr_cal_mod , only : shr_cal_ymd2date use shr_log_mod , only : shr_log_setLogUnit, shr_log_error use shr_string_mod , only : shr_string_listGetNum, shr_string_listGetName @@ -95,10 +96,10 @@ module cdeps_dglc_comp character(CL) :: case_name ! dglc_in namelist input - character(CL) :: streamfilename = nullstr ! filename to obtain stream info from - character(CL) :: nlfilename = nullstr ! filename to obtain namelist info from + character(CX) :: streamfilename = nullstr ! filename to obtain stream info from + character(CX) :: nlfilename = nullstr ! filename to obtain namelist info from character(CL) :: datamode = nullstr ! flags physics options wrt input data - character(CL) :: restfilm = nullstr ! model restart file namelist + character(CX) :: restfilm = nullstr ! model restart file namelist logical :: skip_restart_read = .false. ! true => skip restart read in continuation run logical :: export_all = .false. ! true => export all fields, do not check connected or not @@ -262,7 +263,7 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call ESMF_VMBroadcast(vm, datamode, CL, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call ESMF_VMBroadcast(vm, restfilm, CL, main_task, rc=rc) + call ESMF_VMBroadcast(vm, restfilm, CX, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call ESMF_VMBroadcast(vm, model_meshfiles, CL*max_icesheets, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return diff --git a/dice/ice_comp_nuopc.F90 b/dice/ice_comp_nuopc.F90 index 35a25ab15..bb6669378 100644 --- a/dice/ice_comp_nuopc.F90 +++ b/dice/ice_comp_nuopc.F90 @@ -25,6 +25,7 @@ module cdeps_dice_comp use NUOPC_Model , only : model_label_Finalize => label_Finalize use NUOPC_Model , only : NUOPC_ModelGet, SetVM use shr_kind_mod , only : r8=>shr_kind_r8, cxx=>shr_kind_cxx, cl=>shr_kind_cl, cs=>shr_kind_cs + use shr_kind_mod , only : cx=>shr_kind_cx use shr_const_mod , only : shr_const_pi use shr_log_mod , only : shr_log_setLogUnit, shr_log_error use shr_cal_mod , only : shr_cal_ymd2date, shr_cal_ymd2julian @@ -81,13 +82,13 @@ module cdeps_dice_comp character(CL) :: streamfilename = nullstr ! filename to obtain stream info from character(CL) :: nlfilename = nullstr ! filename to obtain namelist info from character(CL) :: dataMode ! flags physics options wrt input data - character(CL) :: model_meshfile = nullstr ! full pathname to model meshfile - character(CL) :: model_maskfile = nullstr ! full pathname to obtain mask from + character(CX) :: model_meshfile = nullstr ! full pathname to model meshfile + character(CX) :: model_maskfile = nullstr ! full pathname to obtain mask from real(R8) :: flux_swpf ! short-wave penatration factor real(R8) :: flux_Qmin ! bound on melt rate logical :: flux_Qacc ! activates water accumulation/melt wrt Q real(R8) :: flux_Qacc0 ! initial water accumulation value - character(CL) :: restfilm = nullstr ! model restart file namelist + character(CX) :: restfilm = nullstr ! model restart file namelist integer :: nx_global integer :: ny_global logical :: export_all = .false. ! true => export all fields, do not check connected or not @@ -250,11 +251,11 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) call ESMF_VMBroadcast(vm, datamode, CL, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call ESMF_VMBroadcast(vm, model_meshfile, CL, main_task, rc=rc) + call ESMF_VMBroadcast(vm, model_meshfile, CX, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call ESMF_VMBroadcast(vm, model_maskfile, CL, main_task, rc=rc) + call ESMF_VMBroadcast(vm, model_maskfile, CX, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call ESMF_VMBroadcast(vm, restfilm, CL, main_task, rc=rc) + call ESMF_VMBroadcast(vm, restfilm, CX, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call ESMF_VMBroadcast(vm, bcasttmp, 3, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return diff --git a/docn/ocn_comp_nuopc.F90 b/docn/ocn_comp_nuopc.F90 index da612f278..c4b37c475 100644 --- a/docn/ocn_comp_nuopc.F90 +++ b/docn/ocn_comp_nuopc.F90 @@ -24,6 +24,7 @@ module cdeps_docn_comp use NUOPC_Model , only : model_label_Finalize => label_Finalize use NUOPC_Model , only : NUOPC_ModelGet, SetVM use shr_kind_mod , only : r8=>shr_kind_r8, i8=>shr_kind_i8, cl=>shr_kind_cl, cs=>shr_kind_cs + use shr_kind_mod , only : cx=>shr_kind_cx use shr_cal_mod , only : shr_cal_ymd2date use shr_log_mod , only : shr_log_setLogUnit, shr_log_error use dshr_methods_mod , only : dshr_state_diagnose, chkerr, memcheck @@ -96,11 +97,11 @@ module cdeps_docn_comp character(CL) :: streamfilename = nullstr ! filename to obtain stream info from character(CL) :: nlfilename = nullstr ! filename to obtain namelist info from character(CL) :: datamode = nullstr ! flags physics options wrt input data - character(CL) :: model_meshfile = nullstr ! full pathname to model meshfile - character(CL) :: model_maskfile = nullstr ! full pathname to obtain mask from + character(CX) :: model_meshfile = nullstr ! full pathname to model meshfile + character(CX) :: model_maskfile = nullstr ! full pathname to obtain mask from real(R8) :: sst_constant_value ! sst constant value integer :: aquap_option ! if aqua-planet mode, option to use - character(CL) :: restfilm = nullstr ! model restart file namelist + character(CX) :: restfilm = nullstr ! model restart file namelist integer :: nx_global integer :: ny_global logical :: skip_restart_read = .false. ! true => skip restart read in continuation run @@ -262,11 +263,11 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) call ESMF_VMBroadcast(vm, datamode, CL, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call ESMF_VMBroadcast(vm, model_meshfile, CL, main_task, rc=rc) + call ESMF_VMBroadcast(vm, model_meshfile, CX, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call ESMF_VMBroadcast(vm, model_maskfile, CL, main_task, rc=rc) + call ESMF_VMBroadcast(vm, model_maskfile, CX, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call ESMF_VMBroadcast(vm, restfilm, CL, main_task, rc=rc) + call ESMF_VMBroadcast(vm, restfilm, CX, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call ESMF_VMBroadcast(vm, import_data_fields, CL, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return diff --git a/drof/rof_comp_nuopc.F90 b/drof/rof_comp_nuopc.F90 index 739bc1490..95914613d 100644 --- a/drof/rof_comp_nuopc.F90 +++ b/drof/rof_comp_nuopc.F90 @@ -24,6 +24,7 @@ module cdeps_drof_comp use NUOPC_Model , only : model_label_Finalize => label_Finalize use NUOPC_Model , only : NUOPC_ModelGet, SetVM use shr_kind_mod , only : r8=>shr_kind_r8, i8=>shr_kind_i8, cl=>shr_kind_cl, cs=>shr_kind_cs + use shr_kind_mod , only : cx=>shr_kind_cx use shr_const_mod , only : SHR_CONST_SPVAL use shr_cal_mod , only : shr_cal_ymd2date use shr_log_mod , only : shr_log_setLogUnit, shr_log_error @@ -70,9 +71,9 @@ module cdeps_drof_comp character(CL) :: streamfilename = nullstr ! filename to obtain stream info from character(CL) :: nlfilename = nullstr ! filename to obtain namelist info from character(CL) :: dataMode = nullstr ! flags physics options wrt input data - character(CL) :: model_meshfile = nullstr ! full pathname to model meshfile - character(CL) :: model_maskfile = nullstr ! full pathname to obtain mask from - character(CL) :: restfilm = nullstr ! model restart file namelist + character(CX) :: model_meshfile = nullstr ! full pathname to model meshfile + character(CX) :: model_maskfile = nullstr ! full pathname to obtain mask from + character(CX) :: restfilm = nullstr ! model restart file namelist integer :: nx_global integer :: ny_global logical :: skip_restart_read = .false. ! true => skip restart read @@ -225,11 +226,11 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) call ESMF_VMBroadcast(vm, datamode, CL, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call ESMF_VMBroadcast(vm, model_meshfile, CL, main_task, rc=rc) + call ESMF_VMBroadcast(vm, model_meshfile, CX, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call ESMF_VMBroadcast(vm, model_maskfile, CL, main_task, rc=rc) + call ESMF_VMBroadcast(vm, model_maskfile, CX, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call ESMF_VMBroadcast(vm, restfilm, CL, main_task, rc=rc) + call ESMF_VMBroadcast(vm, restfilm, CX, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call ESMF_VMBroadcast(vm, bcasttmp, 3, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return diff --git a/dwav/wav_comp_nuopc.F90 b/dwav/wav_comp_nuopc.F90 index 07e6dc50e..8a58e572e 100644 --- a/dwav/wav_comp_nuopc.F90 +++ b/dwav/wav_comp_nuopc.F90 @@ -23,6 +23,7 @@ module cdeps_dwav_comp use NUOPC_Model , only : model_label_Finalize => label_Finalize use NUOPC_Model , only : NUOPC_ModelGet, SetVM use shr_kind_mod , only : r8=>shr_kind_r8, i8=>shr_kind_i8, cl=>shr_kind_cl, cs=>shr_kind_cs + use shr_kind_mod , only : cx=>shr_kind_cx use shr_cal_mod , only : shr_cal_ymd2date use shr_log_mod , only : shr_log_setLogUnit, shr_log_error use dshr_methods_mod , only : dshr_state_getfldptr, chkerr, memcheck, dshr_state_diagnose @@ -71,9 +72,9 @@ module cdeps_dwav_comp character(CL) :: streamfilename = nullstr ! filename to obtain stream info from character(CL) :: nlfilename = nullstr ! filename to obtain namelist info from character(CL) :: dataMode = nullstr ! flags physics options wrt input data - character(CL) :: model_meshfile = nullstr ! full pathname to model meshfile - character(CL) :: model_maskfile = nullstr ! full pathname to obtain mask from - character(CL) :: restfilm = nullstr ! model restart file namelist + character(CX) :: model_meshfile = nullstr ! full pathname to model meshfile + character(CX) :: model_maskfile = nullstr ! full pathname to obtain mask from + character(CX) :: restfilm = nullstr ! model restart file namelist integer :: nx_global integer :: ny_global logical :: skip_restart_read = .false. ! true => skip restart read @@ -223,11 +224,11 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) call ESMF_VMBroadcast(vm, datamode, CL, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call ESMF_VMBroadcast(vm, model_meshfile, CL, main_task, rc=rc) + call ESMF_VMBroadcast(vm, model_meshfile, CX, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call ESMF_VMBroadcast(vm, model_maskfile, CL, main_task, rc=rc) + call ESMF_VMBroadcast(vm, model_maskfile, CX, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call ESMF_VMBroadcast(vm, restfilm, CL, main_task, rc=rc) + call ESMF_VMBroadcast(vm, restfilm, CX, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call ESMF_VMBroadcast(vm, bcasttmp, 3, main_task, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return From 786ccc3a14cfb5730aff1086251c039b438eb8be Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Mon, 7 Jul 2025 12:14:41 -0600 Subject: [PATCH 31/38] Delete DATAMODELTEST test. Resolves ESCOMP/CDEPS#344 --- dglc/cime_config/testdefs/testlist_dglc.xml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/dglc/cime_config/testdefs/testlist_dglc.xml b/dglc/cime_config/testdefs/testlist_dglc.xml index f87182fba..f39fbba2e 100644 --- a/dglc/cime_config/testdefs/testlist_dglc.xml +++ b/dglc/cime_config/testdefs/testlist_dglc.xml @@ -29,14 +29,4 @@ - - - - - - - - - - From 3baaa5c5af8193e77140d6f60c28755ba09faf23 Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Mon, 7 Jul 2025 13:02:07 -0600 Subject: [PATCH 32/38] Actually change restfilm to CX in datm/atm_comp_nuopc.F90. --- datm/atm_comp_nuopc.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datm/atm_comp_nuopc.F90 b/datm/atm_comp_nuopc.F90 index df0385750..b475e108f 100644 --- a/datm/atm_comp_nuopc.F90 +++ b/datm/atm_comp_nuopc.F90 @@ -119,7 +119,7 @@ module cdeps_datm_comp character(CL) :: bias_correct = nullstr ! send bias correction fields to coupler character(CL) :: anomaly_forcing(8) = nullstr ! send anomaly forcing fields to coupler - character(CL) :: restfilm = nullstr ! model restart file namelist + character(CX) :: restfilm = nullstr ! model restart file namelist integer :: nx_global ! global nx integer :: ny_global ! global ny logical :: skip_restart_read = .false. ! true => skip restart read in continuation run From 0595593400cae8dd65f50a13d9167fb248be9dfb Mon Sep 17 00:00:00 2001 From: Sam Rabin Date: Mon, 7 Jul 2025 13:03:06 -0600 Subject: [PATCH 33/38] More CX-length nlfilename and streamfilename. --- datm/atm_comp_nuopc.F90 | 4 ++-- dice/ice_comp_nuopc.F90 | 4 ++-- docn/ocn_comp_nuopc.F90 | 4 ++-- drof/rof_comp_nuopc.F90 | 4 ++-- dwav/wav_comp_nuopc.F90 | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/datm/atm_comp_nuopc.F90 b/datm/atm_comp_nuopc.F90 index b475e108f..8e19799c2 100644 --- a/datm/atm_comp_nuopc.F90 +++ b/datm/atm_comp_nuopc.F90 @@ -101,8 +101,8 @@ module cdeps_datm_comp character(len=*) , parameter :: nullstr = 'null' ! datm_in namelist input - character(CL) :: nlfilename = nullstr ! filename to obtain namelist info from - character(CL) :: streamfilename = nullstr ! filename to obtain stream info from + character(CX) :: nlfilename = nullstr ! filename to obtain namelist info from + character(CX) :: streamfilename = nullstr ! filename to obtain stream info from character(CL) :: dataMode = nullstr ! flags physics options wrt input data character(CX) :: model_meshfile = nullstr ! full pathname to model meshfile character(CX) :: model_maskfile = nullstr ! full pathname to obtain mask from diff --git a/dice/ice_comp_nuopc.F90 b/dice/ice_comp_nuopc.F90 index bb6669378..22f3658ce 100644 --- a/dice/ice_comp_nuopc.F90 +++ b/dice/ice_comp_nuopc.F90 @@ -79,8 +79,8 @@ module cdeps_dice_comp character(*) , parameter :: nullstr = 'null' ! dice_in namelist input - character(CL) :: streamfilename = nullstr ! filename to obtain stream info from - character(CL) :: nlfilename = nullstr ! filename to obtain namelist info from + character(CX) :: streamfilename = nullstr ! filename to obtain stream info from + character(CX) :: nlfilename = nullstr ! filename to obtain namelist info from character(CL) :: dataMode ! flags physics options wrt input data character(CX) :: model_meshfile = nullstr ! full pathname to model meshfile character(CX) :: model_maskfile = nullstr ! full pathname to obtain mask from diff --git a/docn/ocn_comp_nuopc.F90 b/docn/ocn_comp_nuopc.F90 index c4b37c475..accd9ac15 100644 --- a/docn/ocn_comp_nuopc.F90 +++ b/docn/ocn_comp_nuopc.F90 @@ -94,8 +94,8 @@ module cdeps_docn_comp character(*) , parameter :: nullstr = 'null' ! docn_in namelist input - character(CL) :: streamfilename = nullstr ! filename to obtain stream info from - character(CL) :: nlfilename = nullstr ! filename to obtain namelist info from + character(CX) :: streamfilename = nullstr ! filename to obtain stream info from + character(CX) :: nlfilename = nullstr ! filename to obtain namelist info from character(CL) :: datamode = nullstr ! flags physics options wrt input data character(CX) :: model_meshfile = nullstr ! full pathname to model meshfile character(CX) :: model_maskfile = nullstr ! full pathname to obtain mask from diff --git a/drof/rof_comp_nuopc.F90 b/drof/rof_comp_nuopc.F90 index 95914613d..1a1cc6669 100644 --- a/drof/rof_comp_nuopc.F90 +++ b/drof/rof_comp_nuopc.F90 @@ -68,8 +68,8 @@ module cdeps_drof_comp character(CL) :: case_name ! case name character(*) , parameter :: nullstr = 'null' ! drof_in namelist input - character(CL) :: streamfilename = nullstr ! filename to obtain stream info from - character(CL) :: nlfilename = nullstr ! filename to obtain namelist info from + character(CX) :: streamfilename = nullstr ! filename to obtain stream info from + character(CX) :: nlfilename = nullstr ! filename to obtain namelist info from character(CL) :: dataMode = nullstr ! flags physics options wrt input data character(CX) :: model_meshfile = nullstr ! full pathname to model meshfile character(CX) :: model_maskfile = nullstr ! full pathname to obtain mask from diff --git a/dwav/wav_comp_nuopc.F90 b/dwav/wav_comp_nuopc.F90 index 8a58e572e..b002c5fbc 100644 --- a/dwav/wav_comp_nuopc.F90 +++ b/dwav/wav_comp_nuopc.F90 @@ -69,8 +69,8 @@ module cdeps_dwav_comp character(*) , parameter :: nullstr = 'null' ! dwav_in namelist input - character(CL) :: streamfilename = nullstr ! filename to obtain stream info from - character(CL) :: nlfilename = nullstr ! filename to obtain namelist info from + character(CX) :: streamfilename = nullstr ! filename to obtain stream info from + character(CX) :: nlfilename = nullstr ! filename to obtain namelist info from character(CL) :: dataMode = nullstr ! flags physics options wrt input data character(CX) :: model_meshfile = nullstr ! full pathname to model meshfile character(CX) :: model_maskfile = nullstr ! full pathname to obtain mask from From 2400bd594803f4359df74022a2807d75cf5eed10 Mon Sep 17 00:00:00 2001 From: Denise Worthen Date: Tue, 12 Aug 2025 14:20:06 -0400 Subject: [PATCH 34/38] add log feature for restart_fh --- share/shr_is_restart_fh_mod.F90 | 58 +++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/share/shr_is_restart_fh_mod.F90 b/share/shr_is_restart_fh_mod.F90 index 42739bbe8..71a305f7f 100644 --- a/share/shr_is_restart_fh_mod.F90 +++ b/share/shr_is_restart_fh_mod.F90 @@ -19,6 +19,7 @@ module shr_is_restart_fh_mod end type is_restart_fh_type public :: init_is_restart_fh, is_restart_fh, finalize_restart_fh, is_restart_fh_type + public :: log_restart_fh contains @@ -81,7 +82,7 @@ subroutine init_is_restart_fh(currentTime, dtime, lLog, restartfh_info) call ESMF_ConfigDestroy(CF_mc, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return end if !model_configure - + end subroutine init_is_restart_fh subroutine is_restart_fh(clock, restartfh_info, lWrite) @@ -91,7 +92,7 @@ subroutine is_restart_fh(clock, restartfh_info, lWrite) ! ! !USES: use ESMF, only : ESMF_ClockGetNextTime - + ! ! !ARGUMENTS: type(ESMF_Clock), intent(in) :: clock @@ -114,8 +115,59 @@ subroutine is_restart_fh(clock, restartfh_info, lWrite) end if lWrite = restartfh_info%write_restartfh - + end subroutine is_restart_fh + !=============================================================================== + !> Write a log file + !! + !> @details Write a log file for a named component when a restart file is written + !! + !! @param[in] nextTime the ESMF time at the end of a ModelAdvance + !! @param[in] startTime the ESMF time at the Model Start + !! @param[in] complog the named component + !! @param[out] rc return code + !! + !> @authorDenise.Worthen@noaa.gov + !> @date 04-14-2025 + subroutine log_restart_fh(nextTime, startTime, complog, rc) + + use ESMF, only : ESMF_SUCCESS, ESMF_MAXSTR, ESMF_Time, ESMF_TimeInterval + use ESMF, only : ESMF_TimeGet, ESMF_TimeIntervalGet + use ESMF, only : operator(==), operator(-) + + type(ESMF_Time), intent(in) :: nextTime, startTime + character(len=*), intent(in) :: complog + integer, intent(out) :: rc + + ! local variables + type(ESMF_TimeInterval) :: elapsedTime + real(ESMF_KIND_R8) :: fhour + character(ESMF_MAXSTR) :: filename + character(ESMF_MAXSTR) :: nexttimestring + integer :: fh_logunit + integer :: yr,mon,day,hour,minute,sec ! time units + character(len=*), parameter :: subname='(log_restart_fh)' + !----------------------------------------------------------------------- + + call ESMF_LogWrite(trim(subname)//": called", ESMF_LOGMSG_INFO) + rc = ESMF_SUCCESS + + elapsedTime = nextTime - startTime + call ESMF_TimeIntervalGet(elapsedTime, h_r8=fhour,rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + + call ESMF_TimeGet(nexttime, yy=yr, mm=mon, dd=day, h=hour, m=minute, s=sec, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + write(nexttimestring,'(6i8)')yr,mon,day,hour,minute,sec + + write(filename,'(a,i4.4)')'log.'//trim(complog)//'.f',int(fhour) + open(newunit=fh_logunit,file=trim(filename)) + write(fh_logunit,'(a)')'completed: '//trim(complog) + write(fh_logunit,'(a,f10.3)')'forecast hour:',fhour + write(fh_logunit,'(a)')'valid time: '//trim(nexttimestring) + close(fh_logunit) + + end subroutine log_restart_fh subroutine finalize_restart_fh(restartfh_info) ! From 45b1e84c54eb876eeccf4f40accf81cb01090ce4 Mon Sep 17 00:00:00 2001 From: Andrew Kiss <31054815+aekiss@users.noreply.github.com> Date: Mon, 15 Sep 2025 16:03:21 +1000 Subject: [PATCH 35/38] Fix rDateIn >= rDategvd error messages in dshr_stream_mod.F90 Fix typos in error messages to match rDateIn >= rDategvd in if test clause --- streams/dshr_stream_mod.F90 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/streams/dshr_stream_mod.F90 b/streams/dshr_stream_mod.F90 index 64c7f542b..0d181085d 100644 --- a/streams/dshr_stream_mod.F90 +++ b/streams/dshr_stream_mod.F90 @@ -1035,8 +1035,8 @@ subroutine shr_stream_findBounds(strm, mDateIn, secIn, isroot_task, & else if (strm%found_gvd .and. rDateIn >= rDategvd) then if (limit) then - write(strm%logunit,*) trim(subName)," ERROR: limit on and rDateIn gt rDategvd",rDateIn,rDategvd - call shr_sys_abort(trim(subName)//" ERROR: rDateIn gt rDategvd limit true") + write(strm%logunit,*) trim(subName)," ERROR: limit on and rDateIn ge rDategvd",rDateIn,rDategvd + call shr_sys_abort(trim(subName)//" ERROR: rDateIn ge rDategvd limit true") endif if (.not.cycle) then @@ -1135,8 +1135,8 @@ subroutine shr_stream_findBounds(strm, mDateIn, secIn, isroot_task, & if (strm%found_gvd .and. rDateIn >= rDategvd) then if (limit) then - write(strm%logunit,*) trim(subName)," ERROR: limit on and rDateIn gt rDategvd",rDateIn,rDategvd - call shr_sys_abort(trim(subName)//" ERROR: rDateIn gt rDategvd limit true") + write(strm%logunit,*) trim(subName)," ERROR: limit on and rDateIn ge rDategvd",rDateIn,rDategvd + call shr_sys_abort(trim(subName)//" ERROR: rDateIn ge rDategvd limit true") endif if (.not.cycle) then From 0e5c95588678fe813da249def51920ad3b4fa33b Mon Sep 17 00:00:00 2001 From: Bill Sacks Date: Fri, 19 Sep 2025 16:31:36 -0600 Subject: [PATCH 36/38] Use '>=' rather than 'ge' --- streams/dshr_stream_mod.F90 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/streams/dshr_stream_mod.F90 b/streams/dshr_stream_mod.F90 index 0d181085d..0b5026169 100644 --- a/streams/dshr_stream_mod.F90 +++ b/streams/dshr_stream_mod.F90 @@ -1035,8 +1035,8 @@ subroutine shr_stream_findBounds(strm, mDateIn, secIn, isroot_task, & else if (strm%found_gvd .and. rDateIn >= rDategvd) then if (limit) then - write(strm%logunit,*) trim(subName)," ERROR: limit on and rDateIn ge rDategvd",rDateIn,rDategvd - call shr_sys_abort(trim(subName)//" ERROR: rDateIn ge rDategvd limit true") + write(strm%logunit,*) trim(subName)," ERROR: limit on and rDateIn >= rDategvd",rDateIn,rDategvd + call shr_sys_abort(trim(subName)//" ERROR: rDateIn >= rDategvd limit true") endif if (.not.cycle) then @@ -1135,8 +1135,8 @@ subroutine shr_stream_findBounds(strm, mDateIn, secIn, isroot_task, & if (strm%found_gvd .and. rDateIn >= rDategvd) then if (limit) then - write(strm%logunit,*) trim(subName)," ERROR: limit on and rDateIn ge rDategvd",rDateIn,rDategvd - call shr_sys_abort(trim(subName)//" ERROR: rDateIn ge rDategvd limit true") + write(strm%logunit,*) trim(subName)," ERROR: limit on and rDateIn >= rDategvd",rDateIn,rDategvd + call shr_sys_abort(trim(subName)//" ERROR: rDateIn >= rDategvd limit true") endif if (.not.cycle) then From d55ac35ea0748f397df5bdda64a3c244e15ac144 Mon Sep 17 00:00:00 2001 From: Katetc Date: Wed, 15 Oct 2025 16:52:54 -0600 Subject: [PATCH 37/38] DGLC grid updates for new gris4 mesh --- dglc/cime_config/namelist_definition_dglc.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dglc/cime_config/namelist_definition_dglc.xml b/dglc/cime_config/namelist_definition_dglc.xml index 8bc4e0c0e..2de7f7143 100644 --- a/dglc/cime_config/namelist_definition_dglc.xml +++ b/dglc/cime_config/namelist_definition_dglc.xml @@ -41,8 +41,8 @@ abs dglc_nml - $DIN_LOC_ROOT/glc/cism/Antarctica/ISMIP6_Antarctica_8km.init.c210908.nc:$DIN_LOC_ROOT/glc/cism/Greenland/greenland_4km_epsg3413_c171126.nc - $DIN_LOC_ROOT/glc/cism/Greenland/greenland_4km_epsg3413_c171126.nc + $DIN_LOC_ROOT/glc/cism/Antarctica/ISMIP6_Antarctica_8km.init.c210908.nc:$DIN_LOC_ROOT/glc/cism/Greenland/greenland_4km_epsg3413_c251001.nc + $DIN_LOC_ROOT/glc/cism/Greenland/greenland_4km_epsg3413_c251001.nc $DIN_LOC_ROOT/glc/cism/Antarctica/ISMIP6_Antarctica_8km.init.c210908.nc @@ -85,9 +85,9 @@ streams dglc_nml - 704,416 + 704,421 704 - 416 + 421 76 @@ -101,9 +101,9 @@ streams dglc_nml - 576,704 + 576,721 576 - 704 + 721 141 From d2c211f85047b1e727c94e372c602a6f95f9d923 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Mon, 3 Nov 2025 15:31:49 -0700 Subject: [PATCH 38/38] update fox external --- .gitmodules | 2 +- fox | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 5a9172c5e..e5e608420 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,7 +4,7 @@ [submodule "fox"] path = fox url = https://github.com/ESMCI/fox.git -fxtag = 4.1.2.2 +fxtag = 4.1.2.4 fxrequired = AlwaysRequired fxDONOTUSEurl = https://github.com/ESMCI/fox.git diff --git a/fox b/fox index 2e6d1f253..7775cc392 160000 --- a/fox +++ b/fox @@ -1 +1 @@ -Subproject commit 2e6d1f2535ff2424ad8cb49dfe2c35032e0e284b +Subproject commit 7775cc392d13f405f13b4a7411d80aad6c49e3d6