From 5cf91e9aebda7fb6de587c5d325568c929065ba4 Mon Sep 17 00:00:00 2001 From: NeilBarton-NOAA Date: Thu, 29 Feb 2024 18:17:59 +0000 Subject: [PATCH 01/15] GEFS stage ICs for C384 and with ocean perturbations --- parm/config/gefs/config.stage_ic | 6 ++++++ scripts/exglobal_stage_ic.sh | 9 +++++++++ 2 files changed, 15 insertions(+) diff --git a/parm/config/gefs/config.stage_ic b/parm/config/gefs/config.stage_ic index e2bb0af2b8..95fa9fcb89 100644 --- a/parm/config/gefs/config.stage_ic +++ b/parm/config/gefs/config.stage_ic @@ -8,6 +8,12 @@ echo "BEGIN: config.stage_ic" source "${EXPDIR}/config.resources" stage_ic case "${CASE}" in + "C348") + export CPL_ATMIC="" + export CPL_ICEIC="" + export CPL_OCNIC="" + export CPL_WAVIC="" + ;; "C48") export CPL_ATMIC="gefs_test" export CPL_ICEIC="gefs_test" diff --git a/scripts/exglobal_stage_ic.sh b/scripts/exglobal_stage_ic.sh index 58b37f3114..7af4bbb45c 100755 --- a/scripts/exglobal_stage_ic.sh +++ b/scripts/exglobal_stage_ic.sh @@ -104,6 +104,15 @@ for MEMDIR in "${MEMDIR_ARRAY[@]}"; do ;; esac + # Ocean Perturbation Files + if [[ "${MEMDIR}" != "mem000" ]]; then + src="${BASE_CPLIC}/${CPL_OCNIC:-}/${PDY}${cyc}/${MEMDIR}/ocean/${PDY}.${cyc}0000.mom6_increment.nc" + tgt="${COM_OCEAN_RESTART_PREV}/${PDY}.${cyc}0000.mom6_increment.nc" + ${NCP} "${src}" "${tgt}" + rc=${?} + ((rc != 0)) && error_message "${src}" "${tgt}" "${rc}" + fi + # TODO: Do mediator restarts exists in a ATMW configuration? # TODO: No mediator is presumably involved in an ATMA configuration if [[ ${EXP_WARM_START:-".false."} = ".true." ]]; then From 1c670b05287f3460bb3cd29f9adf2476c8e4f33f Mon Sep 17 00:00:00 2001 From: NeilBarton-NOAA Date: Thu, 29 Feb 2024 21:34:14 +0000 Subject: [PATCH 02/15] edits for option to stage ocean perturbation files --- parm/config/gefs/config.base.emc.dyn | 4 ++++ parm/config/gefs/config.stage_ic | 2 +- scripts/exglobal_stage_ic.sh | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/parm/config/gefs/config.base.emc.dyn b/parm/config/gefs/config.base.emc.dyn index 0062aed163..5ae47e3948 100644 --- a/parm/config/gefs/config.base.emc.dyn +++ b/parm/config/gefs/config.base.emc.dyn @@ -259,6 +259,10 @@ export NMEM_ENS=@NMEM_ENS@ export ENSMEM=${ENSMEM:-"000"} export MEMDIR="mem${ENSMEM}" +# initialize ocean ensemble members with perturbations +# if true, only occurs for members greater than zero +export OCN_ENS_PERTURB_FILES=false + export DOIAU="NO" # While we are not doing IAU, we may want to warm start w/ IAU in the future # Check if cycle is cold starting if [[ "${EXP_WARM_START}" = ".false." ]]; then diff --git a/parm/config/gefs/config.stage_ic b/parm/config/gefs/config.stage_ic index 95fa9fcb89..b332ee1826 100644 --- a/parm/config/gefs/config.stage_ic +++ b/parm/config/gefs/config.stage_ic @@ -8,7 +8,7 @@ echo "BEGIN: config.stage_ic" source "${EXPDIR}/config.resources" stage_ic case "${CASE}" in - "C348") + "C384") export CPL_ATMIC="" export CPL_ICEIC="" export CPL_OCNIC="" diff --git a/scripts/exglobal_stage_ic.sh b/scripts/exglobal_stage_ic.sh index 7af4bbb45c..dade95314f 100755 --- a/scripts/exglobal_stage_ic.sh +++ b/scripts/exglobal_stage_ic.sh @@ -105,7 +105,7 @@ for MEMDIR in "${MEMDIR_ARRAY[@]}"; do esac # Ocean Perturbation Files - if [[ "${MEMDIR}" != "mem000" ]]; then + if [[ "${MEMDIR}" != "mem000" ]] && [[ "${OCN_ENS_PERTURB_FILES}" == "true" ]]; then src="${BASE_CPLIC}/${CPL_OCNIC:-}/${PDY}${cyc}/${MEMDIR}/ocean/${PDY}.${cyc}0000.mom6_increment.nc" tgt="${COM_OCEAN_RESTART_PREV}/${PDY}.${cyc}0000.mom6_increment.nc" ${NCP} "${src}" "${tgt}" From cb09d614ea12213414e3469fa95770212a8b992a Mon Sep 17 00:00:00 2001 From: Rahul Mahajan Date: Thu, 29 Feb 2024 16:56:12 -0500 Subject: [PATCH 03/15] Update exglobal_stage_ic.sh --- scripts/exglobal_stage_ic.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/exglobal_stage_ic.sh b/scripts/exglobal_stage_ic.sh index dade95314f..e961c4423f 100755 --- a/scripts/exglobal_stage_ic.sh +++ b/scripts/exglobal_stage_ic.sh @@ -105,7 +105,7 @@ for MEMDIR in "${MEMDIR_ARRAY[@]}"; do esac # Ocean Perturbation Files - if [[ "${MEMDIR}" != "mem000" ]] && [[ "${OCN_ENS_PERTURB_FILES}" == "true" ]]; then + if [[ "${MEMDIR}" != "mem000" ]] && [[ "${OCN_ENS_PERTURB_FILES:-}" == "true" ]]; then src="${BASE_CPLIC}/${CPL_OCNIC:-}/${PDY}${cyc}/${MEMDIR}/ocean/${PDY}.${cyc}0000.mom6_increment.nc" tgt="${COM_OCEAN_RESTART_PREV}/${PDY}.${cyc}0000.mom6_increment.nc" ${NCP} "${src}" "${tgt}" From a975e7938fd4136f3632cedee51e3528eb3e770c Mon Sep 17 00:00:00 2001 From: Neil Barton <103681022+NeilBarton-NOAA@users.noreply.github.com> Date: Fri, 1 Mar 2024 11:01:26 -0500 Subject: [PATCH 04/15] Update scripts/exglobal_stage_ic.sh Co-authored-by: Walter Kolczynski - NOAA --- scripts/exglobal_stage_ic.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/exglobal_stage_ic.sh b/scripts/exglobal_stage_ic.sh index e961c4423f..7240d48ed4 100755 --- a/scripts/exglobal_stage_ic.sh +++ b/scripts/exglobal_stage_ic.sh @@ -105,7 +105,8 @@ for MEMDIR in "${MEMDIR_ARRAY[@]}"; do esac # Ocean Perturbation Files - if [[ "${MEMDIR}" != "mem000" ]] && [[ "${OCN_ENS_PERTURB_FILES:-}" == "true" ]]; then + # Extra zero on MEMDIR ensure we have a number even if the string is empty + if (( 0${MEMDIR:3} > 0 )) && [[ "${OCN_ENS_PERTURB_FILES:-false}" == "true" ]]; then src="${BASE_CPLIC}/${CPL_OCNIC:-}/${PDY}${cyc}/${MEMDIR}/ocean/${PDY}.${cyc}0000.mom6_increment.nc" tgt="${COM_OCEAN_RESTART_PREV}/${PDY}.${cyc}0000.mom6_increment.nc" ${NCP} "${src}" "${tgt}" From 03ed0ca643166ce82f9c87f05219efe0159efb9d Mon Sep 17 00:00:00 2001 From: Neil Barton <103681022+NeilBarton-NOAA@users.noreply.github.com> Date: Fri, 1 Mar 2024 11:01:35 -0500 Subject: [PATCH 05/15] Update scripts/exglobal_stage_ic.sh Co-authored-by: Walter Kolczynski - NOAA --- scripts/exglobal_stage_ic.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/exglobal_stage_ic.sh b/scripts/exglobal_stage_ic.sh index 7240d48ed4..c12eaa84e0 100755 --- a/scripts/exglobal_stage_ic.sh +++ b/scripts/exglobal_stage_ic.sh @@ -112,6 +112,7 @@ for MEMDIR in "${MEMDIR_ARRAY[@]}"; do ${NCP} "${src}" "${tgt}" rc=${?} ((rc != 0)) && error_message "${src}" "${tgt}" "${rc}" + err=$((err + rc)) fi # TODO: Do mediator restarts exists in a ATMW configuration? From 267db5ea0833b27afddd50d3e7554b8f0a8cd0f7 Mon Sep 17 00:00:00 2001 From: NeilBarton-NOAA Date: Thu, 7 Mar 2024 19:50:44 +0000 Subject: [PATCH 06/15] Ocean Ensmemble Options --- parm/config/gefs/config.base | 4 ---- parm/config/gefs/config.efcs | 11 +++++++++++ parm/config/gefs/config.stage_ic | 4 ++++ scripts/exglobal_stage_ic.sh | 2 +- ush/forecast_postdet.sh | 23 ++++++++++++++++------- ush/parsing_namelists_FV3.sh | 18 ++++++++++++++++++ ush/parsing_namelists_MOM6.sh | 28 +++++----------------------- 7 files changed, 55 insertions(+), 35 deletions(-) diff --git a/parm/config/gefs/config.base b/parm/config/gefs/config.base index 69d4ed94a4..c5fbd19534 100644 --- a/parm/config/gefs/config.base +++ b/parm/config/gefs/config.base @@ -260,10 +260,6 @@ export NMEM_ENS=@NMEM_ENS@ export ENSMEM=${ENSMEM:-"000"} export MEMDIR="mem${ENSMEM}" -# initialize ocean ensemble members with perturbations -# if true, only occurs for members greater than zero -export OCN_ENS_PERTURB_FILES=false - export DOIAU="NO" # While we are not doing IAU, we may want to warm start w/ IAU in the future # Check if cycle is cold starting if [[ "${EXP_WARM_START}" = ".false." ]]; then diff --git a/parm/config/gefs/config.efcs b/parm/config/gefs/config.efcs index a6f34818d7..275d21ea77 100644 --- a/parm/config/gefs/config.efcs +++ b/parm/config/gefs/config.efcs @@ -60,6 +60,17 @@ export SPPT_TAU=21600. export SPPT_LSCALE=500000. export SPPT_LOGIT=".true." export SPPT_SFCLIMIT=".true." +# OCN options +export DO_OCN_SPPT="YES" +export DO_OCN_PERT_EPBL="YES" +export ODA_INCUPD="True" +export ODA_TEMPINC_VAR='t_pert' +export ODA_SALTINC_VAR='s_pert' +export ODA_THK_VAR='h_anl' +export ODA_UINC_VAR='u_pert' +export ODA_VINC_VAR='v_pert' +export ODA_INCUPD_NHOURS=0.0 + export restart_interval="${restart_interval_gfs}" diff --git a/parm/config/gefs/config.stage_ic b/parm/config/gefs/config.stage_ic index b332ee1826..382404c212 100644 --- a/parm/config/gefs/config.stage_ic +++ b/parm/config/gefs/config.stage_ic @@ -4,6 +4,10 @@ echo "BEGIN: config.stage_ic" +# initialize ocean ensemble members with perturbations +# if true, only occurs for members greater than zero +export STAGE_OCN_PERTURB_FILES=false + # Get task specific resources source "${EXPDIR}/config.resources" stage_ic diff --git a/scripts/exglobal_stage_ic.sh b/scripts/exglobal_stage_ic.sh index c12eaa84e0..a5307b58fb 100755 --- a/scripts/exglobal_stage_ic.sh +++ b/scripts/exglobal_stage_ic.sh @@ -106,7 +106,7 @@ for MEMDIR in "${MEMDIR_ARRAY[@]}"; do # Ocean Perturbation Files # Extra zero on MEMDIR ensure we have a number even if the string is empty - if (( 0${MEMDIR:3} > 0 )) && [[ "${OCN_ENS_PERTURB_FILES:-false}" == "true" ]]; then + if (( 0${MEMDIR:3} > 0 )) && [[ "${STAGE_OCN_PERTURB_FILES:-false}" == "true" ]]; then src="${BASE_CPLIC}/${CPL_OCNIC:-}/${PDY}${cyc}/${MEMDIR}/ocean/${PDY}.${cyc}0000.mom6_increment.nc" tgt="${COM_OCEAN_RESTART_PREV}/${PDY}.${cyc}0000.mom6_increment.nc" ${NCP} "${src}" "${tgt}" diff --git a/ush/forecast_postdet.sh b/ush/forecast_postdet.sh index 644a2180da..e2ed3ce5e7 100755 --- a/ush/forecast_postdet.sh +++ b/ush/forecast_postdet.sh @@ -693,6 +693,11 @@ MOM6_postdet() { ${NLN} "${COM_OCEAN_ANALYSIS}/${RUN}.t${cyc}z.ocninc.nc" "${DATA}/INPUT/mom6_increment.nc" fi + # GEFS perturbations + if (( 0${MEMDIR:3} > 0 )) && [[ "${DO_INCUPD:-False}" == "True" ]]; then + ${NLN} "${COM_OCEAN_RESTART_PREV}/${sPDY}.${scyc}0000.mom6_increment.nc" "${DATA}/INPUT/mom6_increment.nc" + fi + # Copy MOM6 fixed files ${NCP} "${FIXgfs}/mom6/${OCNRES}/"* "${DATA}/INPUT/" # TODO: These need to be explicit @@ -707,13 +712,17 @@ MOM6_postdet() { # If using stochatic parameterizations, create a seed that does not exceed the # largest signed integer - if [[ "${DO_OCN_SPPT}" = "YES" ]] || [[ "${DO_OCN_PERT_EPBL}" = "YES" ]]; then - if [[ ${SET_STP_SEED:-"YES"} = "YES" ]]; then - ISEED_OCNSPPT=$(( (current_cycle*1000 + MEMBER*10 + 6) % 2147483647 )) - ISEED_EPBL=$(( (current_cycle*1000 + MEMBER*10 + 7) % 2147483647 )) - else - ISEED=${ISEED:-0} - fi + if [[ ${DO_OCN_SPPT} = "YES" ]]; then + OCNSPPT=${OCNSPPT:-0.8,0.4,0.2,0.08,0.04} + OCNSPPT_TAU=${OCNSPPT_TAU:-2.16E4,2.592E5,2.592E6,7.776E6,3.1536E7} + OCNSPPT_LSCALE=${OCNSPPT_LSCALE:-500.E3,1000.E3,2000.E3,2000.E3,2000.E3} + ISEED_OCNSPPT=$((CDATE*10000 + ${MEMBER#0}*100 + 8)),$((CDATE*10000 + ${MEMBER#0}*100 + 9)),$((CDATE*10000 + ${MEMBER#0}*100 + 10)),$((CDATE*10000 + ${MEMBER#0}*100 + 11)),$((CDATE*10000 + ${MEMBER#0}*100 + 12)) + fi + if [[ ${DO_OCN_PERT_EPBL} = "YES" ]]; then + EPBL=${EPBL:-0.8,0.4,0.2,0.08,0.04} + EPBL_TAU=${EPBL_TAU:-2.16E4,2.592E5,2.592E6,7.776E6,3.1536E7} + EPBL_LSCALE=${EPBL_LSCALE:-500.E3,1000.E3,2000.E3,2000.E3,2000.E3} + ISEED_EPBL=$((CDATE*10000 + ${MEMBER#0}*100 + 13)),$((CDATE*10000 + ${MEMBER#0}*100 + 14)),$((CDATE*10000 + ${MEMBER#0}*100 + 15)),$((CDATE*10000 + ${MEMBER#0}*100 + 16)),$((CDATE*10000 + ${MEMBER#0}*100 + 17)) fi # Link output files diff --git a/ush/parsing_namelists_FV3.sh b/ush/parsing_namelists_FV3.sh index 88a0065076..7de7ef4879 100755 --- a/ush/parsing_namelists_FV3.sh +++ b/ush/parsing_namelists_FV3.sh @@ -631,6 +631,24 @@ EOF use_zmtnblck = ${use_zmtnblck:-".true."} EOF fi + + if [[ "${DO_OCN_SPPT:-NO}" == "YES" ]]; then + cat >> input.nml <> input.nml <> input.nml << EOF ${nam_stochy_nml:-} diff --git a/ush/parsing_namelists_MOM6.sh b/ush/parsing_namelists_MOM6.sh index ca93edb526..58687ce5b8 100755 --- a/ush/parsing_namelists_MOM6.sh +++ b/ush/parsing_namelists_MOM6.sh @@ -25,24 +25,6 @@ EOF # new_lscale=.true. #EOF -if [[ "${DO_OCN_SPPT}" == "YES" ]]; then - cat >> input.nml <> input.nml <> input.nml < Date: Fri, 8 Mar 2024 17:57:38 +0000 Subject: [PATCH 07/15] add some defaults to YAML --- parm/config/gefs/config.base | 2 +- parm/config/gefs/config.stage_ic | 2 +- parm/config/gefs/yaml/defaults.yaml | 5 +++++ ush/forecast_postdet.sh | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/parm/config/gefs/config.base b/parm/config/gefs/config.base index c5fbd19534..ed175e2de2 100644 --- a/parm/config/gefs/config.base +++ b/parm/config/gefs/config.base @@ -75,7 +75,7 @@ export NCP="/bin/cp -p" export NMV="/bin/mv" export NLN="/bin/ln -sf" export VERBOSE="YES" -export KEEPDATA="NO" +export KEEPDATA="@KEEPDATA@" export CHGRP_RSTPROD="@CHGRP_RSTPROD@" export CHGRP_CMD="@CHGRP_CMD@" export NCDUMP="${NETCDF:-${netcdf_c_ROOT:-}}/bin/ncdump" diff --git a/parm/config/gefs/config.stage_ic b/parm/config/gefs/config.stage_ic index 382404c212..7be8c111fe 100644 --- a/parm/config/gefs/config.stage_ic +++ b/parm/config/gefs/config.stage_ic @@ -6,7 +6,7 @@ echo "BEGIN: config.stage_ic" # initialize ocean ensemble members with perturbations # if true, only occurs for members greater than zero -export STAGE_OCN_PERTURB_FILES=false +export STAGE_OCN_PERTURB_FILES=@STAGE_OCN_PERTURB_FILES@ # Get task specific resources source "${EXPDIR}/config.resources" stage_ic diff --git a/parm/config/gefs/yaml/defaults.yaml b/parm/config/gefs/yaml/defaults.yaml index b19eb57e55..3ea429b51b 100644 --- a/parm/config/gefs/yaml/defaults.yaml +++ b/parm/config/gefs/yaml/defaults.yaml @@ -4,4 +4,9 @@ base: DO_JEDIOCNVAR: "NO" DO_JEDISNOWDA: "NO" DO_MERGENSST: "NO" + KEEPDATA: "NO" FHMAX_GFS: 120 + +stage_ic: + STAGE_OCN_PERTURB_FILES: "false" + diff --git a/ush/forecast_postdet.sh b/ush/forecast_postdet.sh index e2ed3ce5e7..0fc0c3b7c8 100755 --- a/ush/forecast_postdet.sh +++ b/ush/forecast_postdet.sh @@ -694,7 +694,7 @@ MOM6_postdet() { fi # GEFS perturbations - if (( 0${MEMDIR:3} > 0 )) && [[ "${DO_INCUPD:-False}" == "True" ]]; then + if (( 0${MEMDIR:3} > 0 )) && [[ "${ODA_INCUPD:-False}" == "True" ]]; then ${NLN} "${COM_OCEAN_RESTART_PREV}/${sPDY}.${scyc}0000.mom6_increment.nc" "${DATA}/INPUT/mom6_increment.nc" fi From cb537b36fca8d72f80a1895775257207102e4c13 Mon Sep 17 00:00:00 2001 From: Neil Barton <103681022+NeilBarton-NOAA@users.noreply.github.com> Date: Mon, 11 Mar 2024 12:02:56 -0400 Subject: [PATCH 08/15] Update ush/parsing_namelists_FV3.sh Co-authored-by: Rahul Mahajan --- ush/parsing_namelists_FV3.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ush/parsing_namelists_FV3.sh b/ush/parsing_namelists_FV3.sh index 7de7ef4879..01ea11a63d 100755 --- a/ush/parsing_namelists_FV3.sh +++ b/ush/parsing_namelists_FV3.sh @@ -634,9 +634,9 @@ EOF if [[ "${DO_OCN_SPPT:-NO}" == "YES" ]]; then cat >> input.nml < Date: Mon, 11 Mar 2024 12:03:07 -0400 Subject: [PATCH 09/15] Update ush/parsing_namelists_FV3.sh Co-authored-by: Rahul Mahajan --- ush/parsing_namelists_FV3.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ush/parsing_namelists_FV3.sh b/ush/parsing_namelists_FV3.sh index 01ea11a63d..560cc6f0c0 100755 --- a/ush/parsing_namelists_FV3.sh +++ b/ush/parsing_namelists_FV3.sh @@ -643,9 +643,9 @@ EOF if [[ "${DO_OCN_PERT_EPBL:-NO}" == "YES" ]]; then cat >> input.nml < Date: Mon, 11 Mar 2024 18:23:42 +0000 Subject: [PATCH 10/15] moving variables to config files --- parm/config/gefs/config.efcs | 6 ++++++ ush/forecast_postdet.sh | 14 +++++--------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/parm/config/gefs/config.efcs b/parm/config/gefs/config.efcs index 275d21ea77..e73a81f127 100644 --- a/parm/config/gefs/config.efcs +++ b/parm/config/gefs/config.efcs @@ -62,7 +62,13 @@ export SPPT_LOGIT=".true." export SPPT_SFCLIMIT=".true." # OCN options export DO_OCN_SPPT="YES" +export OCNSPPT="0.8,0.4,0.2,0.08,0.04" +export OCNSPPT_TAU="2.16E4,2.592E5,2.592E6,7.776E6,3.1536E7" +export OCNSPPT_LSCALE="500.E3,1000.E3,2000.E3,2000.E3,2000.E3" export DO_OCN_PERT_EPBL="YES" +export EPBL="0.8,0.4,0.2,0.08,0.04" +export EPBL_TAU="2.16E4,2.592E5,2.592E6,7.776E6,3.1536E7" +export EPBL_LSCALE="500.E3,1000.E3,2000.E3,2000.E3,2000.E3" export ODA_INCUPD="True" export ODA_TEMPINC_VAR='t_pert' export ODA_SALTINC_VAR='s_pert' diff --git a/ush/forecast_postdet.sh b/ush/forecast_postdet.sh index 0fc0c3b7c8..e910148376 100755 --- a/ush/forecast_postdet.sh +++ b/ush/forecast_postdet.sh @@ -694,6 +694,8 @@ MOM6_postdet() { fi # GEFS perturbations + # TODO if [[ $RUN} == "gefs" ]] block maybe be needed + # to ensure it does not interfere with the GFS if (( 0${MEMDIR:3} > 0 )) && [[ "${ODA_INCUPD:-False}" == "True" ]]; then ${NLN} "${COM_OCEAN_RESTART_PREV}/${sPDY}.${scyc}0000.mom6_increment.nc" "${DATA}/INPUT/mom6_increment.nc" fi @@ -712,17 +714,11 @@ MOM6_postdet() { # If using stochatic parameterizations, create a seed that does not exceed the # largest signed integer - if [[ ${DO_OCN_SPPT} = "YES" ]]; then - OCNSPPT=${OCNSPPT:-0.8,0.4,0.2,0.08,0.04} - OCNSPPT_TAU=${OCNSPPT_TAU:-2.16E4,2.592E5,2.592E6,7.776E6,3.1536E7} - OCNSPPT_LSCALE=${OCNSPPT_LSCALE:-500.E3,1000.E3,2000.E3,2000.E3,2000.E3} - ISEED_OCNSPPT=$((CDATE*10000 + ${MEMBER#0}*100 + 8)),$((CDATE*10000 + ${MEMBER#0}*100 + 9)),$((CDATE*10000 + ${MEMBER#0}*100 + 10)),$((CDATE*10000 + ${MEMBER#0}*100 + 11)),$((CDATE*10000 + ${MEMBER#0}*100 + 12)) + if [[ ${DO_OCN_SPPT} = "YES" ]]; then + ISEED_OCNSPPT=$((current_cycle*10000 + ${MEMBER#0}*100 + 8)),$((current_cycle*10000 + ${MEMBER#0}*100 + 9)),$((current_cycle*10000 + ${MEMBER#0}*100 + 10)),$((current_cycle*10000 + ${MEMBER#0}*100 + 11)),$((current_cycle*10000 + ${MEMBER#0}*100 + 12)) fi if [[ ${DO_OCN_PERT_EPBL} = "YES" ]]; then - EPBL=${EPBL:-0.8,0.4,0.2,0.08,0.04} - EPBL_TAU=${EPBL_TAU:-2.16E4,2.592E5,2.592E6,7.776E6,3.1536E7} - EPBL_LSCALE=${EPBL_LSCALE:-500.E3,1000.E3,2000.E3,2000.E3,2000.E3} - ISEED_EPBL=$((CDATE*10000 + ${MEMBER#0}*100 + 13)),$((CDATE*10000 + ${MEMBER#0}*100 + 14)),$((CDATE*10000 + ${MEMBER#0}*100 + 15)),$((CDATE*10000 + ${MEMBER#0}*100 + 16)),$((CDATE*10000 + ${MEMBER#0}*100 + 17)) + ISEED_EPBL=$((current_cycle*10000 + ${MEMBER#0}*100 + 13)),$((current_cycle*10000 + ${MEMBER#0}*100 + 14)),$((current_cycle*10000 + ${MEMBER#0}*100 + 15)),$((current_cycle*10000 + ${MEMBER#0}*100 + 16)),$((current_cycle*10000 + ${MEMBER#0}*100 + 17)) fi # Link output files From e2dd1ea00bc40e13f09e72eda57c4388d54ec561 Mon Sep 17 00:00:00 2001 From: Neil Barton <103681022+NeilBarton-NOAA@users.noreply.github.com> Date: Wed, 13 Mar 2024 14:54:19 -0400 Subject: [PATCH 11/15] Update scripts/exglobal_stage_ic.sh Co-authored-by: Rahul Mahajan --- scripts/exglobal_stage_ic.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/exglobal_stage_ic.sh b/scripts/exglobal_stage_ic.sh index 1f45c09032..cee58b1790 100755 --- a/scripts/exglobal_stage_ic.sh +++ b/scripts/exglobal_stage_ic.sh @@ -106,7 +106,7 @@ for MEMDIR in "${MEMDIR_ARRAY[@]}"; do # Ocean Perturbation Files # Extra zero on MEMDIR ensure we have a number even if the string is empty - if (( 0${MEMDIR:3} > 0 )) && [[ "${STAGE_OCN_PERTURB_FILES:-false}" == "true" ]]; then + if (( MEMBER > 0 )) && [[ "${STAGE_OCN_PERTURB_FILES:-false}" == "true" ]]; then src="${BASE_CPLIC}/${CPL_OCNIC:-}/${PDY}${cyc}/${MEMDIR}/ocean/${PDY}.${cyc}0000.mom6_increment.nc" tgt="${COM_OCEAN_RESTART_PREV}/${PDY}.${cyc}0000.mom6_increment.nc" ${NCP} "${src}" "${tgt}" From 8b9084196f01969f91728f9f64fd4ea35236d37e Mon Sep 17 00:00:00 2001 From: Neil Barton <103681022+NeilBarton-NOAA@users.noreply.github.com> Date: Wed, 13 Mar 2024 14:54:26 -0400 Subject: [PATCH 12/15] Update ush/forecast_postdet.sh Co-authored-by: Rahul Mahajan --- ush/forecast_postdet.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ush/forecast_postdet.sh b/ush/forecast_postdet.sh index 047460499d..2909b267d7 100755 --- a/ush/forecast_postdet.sh +++ b/ush/forecast_postdet.sh @@ -698,7 +698,7 @@ MOM6_postdet() { # GEFS perturbations # TODO if [[ $RUN} == "gefs" ]] block maybe be needed # to ensure it does not interfere with the GFS - if (( 0${MEMDIR:3} > 0 )) && [[ "${ODA_INCUPD:-False}" == "True" ]]; then + if (( MEMBER > 0 )) && [[ "${ODA_INCUPD:-False}" == "True" ]]; then ${NLN} "${COM_OCEAN_RESTART_PREV}/${sPDY}.${scyc}0000.mom6_increment.nc" "${DATA}/INPUT/mom6_increment.nc" fi From 1b50a39ee3a64120d5cb19b248f18f26ad0bc31f Mon Sep 17 00:00:00 2001 From: Rahul Mahajan Date: Thu, 14 Mar 2024 11:49:32 -0400 Subject: [PATCH 13/15] Update scripts/exglobal_stage_ic.sh --- scripts/exglobal_stage_ic.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/exglobal_stage_ic.sh b/scripts/exglobal_stage_ic.sh index cee58b1790..1f45c09032 100755 --- a/scripts/exglobal_stage_ic.sh +++ b/scripts/exglobal_stage_ic.sh @@ -106,7 +106,7 @@ for MEMDIR in "${MEMDIR_ARRAY[@]}"; do # Ocean Perturbation Files # Extra zero on MEMDIR ensure we have a number even if the string is empty - if (( MEMBER > 0 )) && [[ "${STAGE_OCN_PERTURB_FILES:-false}" == "true" ]]; then + if (( 0${MEMDIR:3} > 0 )) && [[ "${STAGE_OCN_PERTURB_FILES:-false}" == "true" ]]; then src="${BASE_CPLIC}/${CPL_OCNIC:-}/${PDY}${cyc}/${MEMDIR}/ocean/${PDY}.${cyc}0000.mom6_increment.nc" tgt="${COM_OCEAN_RESTART_PREV}/${PDY}.${cyc}0000.mom6_increment.nc" ${NCP} "${src}" "${tgt}" From 1aa6c1028c6042e8de9864ed4a4aa2233f2322c8 Mon Sep 17 00:00:00 2001 From: NeilBarton-NOAA Date: Fri, 15 Mar 2024 20:16:23 +0000 Subject: [PATCH 14/15] make OCAN ODA usage in GEFS dependent on if the OCN increments are staged --- parm/config/gefs/config.base | 4 ++++ parm/config/gefs/config.efcs | 19 +++++++++++-------- parm/config/gefs/config.stage_ic | 4 ---- parm/config/gefs/yaml/defaults.yaml | 2 +- scripts/exglobal_stage_ic.sh | 2 +- 5 files changed, 17 insertions(+), 14 deletions(-) diff --git a/parm/config/gefs/config.base b/parm/config/gefs/config.base index 84d3cf70ab..7ec3993f5f 100644 --- a/parm/config/gefs/config.base +++ b/parm/config/gefs/config.base @@ -260,6 +260,10 @@ export NMEM_ENS=@NMEM_ENS@ export ENSMEM=${ENSMEM:-"000"} export MEMDIR="mem${ENSMEM}" +# initialize ocean ensemble members with perturbations +# if true, only occurs for members greater than zero +export USE_OCN_PERTURB_FILES=@STAGE_OCN_PERTURB_FILES@ + export DOIAU="NO" # While we are not doing IAU, we may want to warm start w/ IAU in the future # Check if cycle is cold starting if [[ "${EXP_WARM_START}" = ".false." ]]; then diff --git a/parm/config/gefs/config.efcs b/parm/config/gefs/config.efcs index e73a81f127..e57584be17 100644 --- a/parm/config/gefs/config.efcs +++ b/parm/config/gefs/config.efcs @@ -69,15 +69,18 @@ export DO_OCN_PERT_EPBL="YES" export EPBL="0.8,0.4,0.2,0.08,0.04" export EPBL_TAU="2.16E4,2.592E5,2.592E6,7.776E6,3.1536E7" export EPBL_LSCALE="500.E3,1000.E3,2000.E3,2000.E3,2000.E3" -export ODA_INCUPD="True" -export ODA_TEMPINC_VAR='t_pert' -export ODA_SALTINC_VAR='s_pert' -export ODA_THK_VAR='h_anl' -export ODA_UINC_VAR='u_pert' -export ODA_VINC_VAR='v_pert' -export ODA_INCUPD_NHOURS=0.0 - +if [[ "${USE_OCN_PERTURB_FILES:-false}" == "true" ]]; then + export ODA_INCUPD="True" + export ODA_TEMPINC_VAR='t_pert' + export ODA_SALTINC_VAR='s_pert' + export ODA_THK_VAR='h_anl' + export ODA_UINC_VAR='u_pert' + export ODA_VINC_VAR='v_pert' + export ODA_INCUPD_NHOURS=0.0 +else + export ODA_INCUPD="False" +fi export restart_interval="${restart_interval_gfs}" echo "END: config.efcs" diff --git a/parm/config/gefs/config.stage_ic b/parm/config/gefs/config.stage_ic index 7be8c111fe..b332ee1826 100644 --- a/parm/config/gefs/config.stage_ic +++ b/parm/config/gefs/config.stage_ic @@ -4,10 +4,6 @@ echo "BEGIN: config.stage_ic" -# initialize ocean ensemble members with perturbations -# if true, only occurs for members greater than zero -export STAGE_OCN_PERTURB_FILES=@STAGE_OCN_PERTURB_FILES@ - # Get task specific resources source "${EXPDIR}/config.resources" stage_ic diff --git a/parm/config/gefs/yaml/defaults.yaml b/parm/config/gefs/yaml/defaults.yaml index 3ea429b51b..5d5fe5963d 100644 --- a/parm/config/gefs/yaml/defaults.yaml +++ b/parm/config/gefs/yaml/defaults.yaml @@ -8,5 +8,5 @@ base: FHMAX_GFS: 120 stage_ic: - STAGE_OCN_PERTURB_FILES: "false" + USE_OCN_PERTURB_FILES: "false" diff --git a/scripts/exglobal_stage_ic.sh b/scripts/exglobal_stage_ic.sh index 1f45c09032..e7dfc3c495 100755 --- a/scripts/exglobal_stage_ic.sh +++ b/scripts/exglobal_stage_ic.sh @@ -106,7 +106,7 @@ for MEMDIR in "${MEMDIR_ARRAY[@]}"; do # Ocean Perturbation Files # Extra zero on MEMDIR ensure we have a number even if the string is empty - if (( 0${MEMDIR:3} > 0 )) && [[ "${STAGE_OCN_PERTURB_FILES:-false}" == "true" ]]; then + if (( 0${MEMDIR:3} > 0 )) && [[ "${USE_OCN_PERTURB_FILES:-false}" == "true" ]]; then src="${BASE_CPLIC}/${CPL_OCNIC:-}/${PDY}${cyc}/${MEMDIR}/ocean/${PDY}.${cyc}0000.mom6_increment.nc" tgt="${COM_OCEAN_RESTART_PREV}/${PDY}.${cyc}0000.mom6_increment.nc" ${NCP} "${src}" "${tgt}" From ea965a6491d14273d2a07657e8111d5b4e86edb2 Mon Sep 17 00:00:00 2001 From: Rahul Mahajan Date: Tue, 19 Mar 2024 09:45:26 -0400 Subject: [PATCH 15/15] add co2 data location for reforecast case. Issue #2403 --- ush/forecast_postdet.sh | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/ush/forecast_postdet.sh b/ush/forecast_postdet.sh index 2909b267d7..9ef3fa3bdb 100755 --- a/ush/forecast_postdet.sh +++ b/ush/forecast_postdet.sh @@ -251,8 +251,15 @@ EOF ${NLN} "${FIXgfs}/am/global_co2historicaldata_glob.txt" "${DATA}/co2historicaldata_glob.txt" ${NLN} "${FIXgfs}/am/co2monthlycyc.txt" "${DATA}/co2monthlycyc.txt" - if [[ ${ICO2} -gt 0 ]]; then - for file in $(ls "${FIXgfs}/am/fix_co2_proj/global_co2historicaldata"*) ; do + # Set historical CO2 values based on whether this is a reforecast run or not + # Ref. issue 2403 + local co2dir + co2dir="fix_co2_proj" + if [[ ${reforecast:-"NO"} == "YES" ]]; then + co2dir="co2dat_4a" + fi + if (( ICO2 > 0 )); then + for file in $(ls "${FIXgfs}/am/${co2dir}/global_co2historicaldata"*) ; do ${NLN} "${file}" "${DATA}/$(basename "${file//global_}")" done fi @@ -696,12 +703,12 @@ MOM6_postdet() { fi # GEFS perturbations - # TODO if [[ $RUN} == "gefs" ]] block maybe be needed + # TODO if [[ $RUN} == "gefs" ]] block maybe be needed # to ensure it does not interfere with the GFS if (( MEMBER > 0 )) && [[ "${ODA_INCUPD:-False}" == "True" ]]; then ${NLN} "${COM_OCEAN_RESTART_PREV}/${sPDY}.${scyc}0000.mom6_increment.nc" "${DATA}/INPUT/mom6_increment.nc" fi - + # Copy MOM6 fixed files ${NCP} "${FIXgfs}/mom6/${OCNRES}/"* "${DATA}/INPUT/" # TODO: These need to be explicit @@ -716,7 +723,7 @@ MOM6_postdet() { # If using stochatic parameterizations, create a seed that does not exceed the # largest signed integer - if [[ ${DO_OCN_SPPT} = "YES" ]]; then + if [[ ${DO_OCN_SPPT} = "YES" ]]; then ISEED_OCNSPPT=$((current_cycle*10000 + ${MEMBER#0}*100 + 8)),$((current_cycle*10000 + ${MEMBER#0}*100 + 9)),$((current_cycle*10000 + ${MEMBER#0}*100 + 10)),$((current_cycle*10000 + ${MEMBER#0}*100 + 11)),$((current_cycle*10000 + ${MEMBER#0}*100 + 12)) fi if [[ ${DO_OCN_PERT_EPBL} = "YES" ]]; then