From 7013e6db64ef72a0e1e1aea182ffd9d93a26f309 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Mon, 16 Nov 2020 15:21:02 +0000 Subject: [PATCH 001/103] Liaofan Lin's readme for EFSOI --- readme_efsoi.txt | 74 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 readme_efsoi.txt diff --git a/readme_efsoi.txt b/readme_efsoi.txt new file mode 100644 index 00000000000..84f7accc6a6 --- /dev/null +++ b/readme_efsoi.txt @@ -0,0 +1,74 @@ +========================================================== +Note for EFSOI +========================================================== + +2020.06.05 (Liaofan Lin) + +There are the following types of files: + 1) exists and is updated for general purposes and then git-pushed; + 2) is added for EFSOI and then git-pushed; and + 3) exists and is updated for EFSOI and then git pushed + 4) exists and is updated but not git-pushed + 5) to bo pushed + +(1) Files that exist and are updated for general run setup and then git-pushed + + * parm/config/config.base.emc.dyn + * parm/config/config.efcs + * parm/config/config.eobs + +(2) Files that are added for EFSOI and then git-pushed + + for gdaseupdfsoi: + * jobs/JGLOBAL_EFSOI_UPDATE + * jobs/rocoto/eupdfsoi.sh + * scripts/exglobal_efsoi_update_fv3gfs.sh.ecf + * parm/config/config.eupdfsoi + + for gdasesfcfsoi: + * jobs/rocoto/esfcfsoi.sh + * jobs/JGDAS_EFSOI_SURFACE + * scripts/exglobal_efsoi_surface_fv3gfs.sh.ecf + * parm/config/config.esfcfsoi + + for gdasecenfsoi + * jobs/rocoto/ecenfsoi.sh + * jobs/JGDAS_EFSOI_RECENTER + * scripts/exglobal_efsoi_recenter_fv3gfs.sh.ecf + * parm/config/config.ecenfsoi + + for gdasefcsfsoi + * jobs/rocoto/efcsfsoi.sh + * jobs/JGDAS_EFSOI_FCST + * scripts/exglobal_efsoi_fcst_fv3gfs.sh.ecf + * parm/config/config.efcsfsoi + + for gdaseposfsoi + * jobs/rocoto/eposfsoi.sh + * jobs/JGDAS_EFSOI_POST + * scripts/exglobal_efsoi_post_fv3gfs.sh.ecf + * parm/config/config.eposfsoi + +(3) Files that exist and are updated for EFSOI and then git-pushed + + for all EFSOI tasks + * env/HERA.env + * parm/config/config.resources + * ush/rocoto/setup_workflow.py + + for gdasefcsfsoi only + * scripts/exglobal_fcst_nemsfv3gfs.sh + +(4) Files that exist and are updated but not git-pushed: + + * scripts/exglobal_enkf_update_fv3gfs.sh.ecf + * scripts/exglobal_enkf_surface_fv3gfs.sh.ecf + * scripts/exglobal_enkf_recenter_fv3gfs.sh.ecf + * scripts/exglobal_enkf_fcst_fv3gfs.sh.ecf + +(5) Note, to be pushed + + + + + From bcfaa3fc1a993f0a169fe450e56c0e306d406baf Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Mon, 16 Nov 2020 15:37:02 +0000 Subject: [PATCH 002/103] Adding new files from Liaofan Lin's fork and EFSOI branch --- jobs/JGDAS_EFSOI_FCST | 156 +++++++ jobs/JGDAS_EFSOI_POST | 128 +++++ jobs/JGDAS_EFSOI_RECENTER | 168 +++++++ jobs/JGDAS_EFSOI_SURFACE | 170 +++++++ jobs/JGLOBAL_EFSOI_UPDATE | 167 +++++++ jobs/rocoto/ecenfsoi.sh | 30 ++ jobs/rocoto/efcsfsoi.sh | 16 + jobs/rocoto/eposfsoi.sh | 31 ++ jobs/rocoto/esfcfsoi.sh | 13 + jobs/rocoto/eupdfsoi.sh | 16 + parm/config/config.ecenfsoi | 30 ++ parm/config/config.efcsfsoi | 111 +++++ parm/config/config.eposfsoi | 29 ++ parm/config/config.esfcfsoi | 24 + parm/config/config.eupdfsoi | 39 ++ scripts/exglobal_efsoi_fcst_fv3gfs.sh.ecf | 270 +++++++++++ scripts/exglobal_efsoi_post_fv3gfs.sh.ecf | 211 +++++++++ scripts/exglobal_efsoi_recenter_fv3gfs.sh.ecf | 437 ++++++++++++++++++ scripts/exglobal_efsoi_surface_fv3gfs.sh.ecf | 241 ++++++++++ scripts/exglobal_efsoi_update_fv3gfs.sh.ecf | 437 ++++++++++++++++++ 20 files changed, 2724 insertions(+) create mode 100755 jobs/JGDAS_EFSOI_FCST create mode 100755 jobs/JGDAS_EFSOI_POST create mode 100755 jobs/JGDAS_EFSOI_RECENTER create mode 100755 jobs/JGDAS_EFSOI_SURFACE create mode 100755 jobs/JGLOBAL_EFSOI_UPDATE create mode 100755 jobs/rocoto/ecenfsoi.sh create mode 100755 jobs/rocoto/efcsfsoi.sh create mode 100755 jobs/rocoto/eposfsoi.sh create mode 100755 jobs/rocoto/esfcfsoi.sh create mode 100755 jobs/rocoto/eupdfsoi.sh create mode 100755 parm/config/config.ecenfsoi create mode 100755 parm/config/config.efcsfsoi create mode 100755 parm/config/config.eposfsoi create mode 100755 parm/config/config.esfcfsoi create mode 100755 parm/config/config.eupdfsoi create mode 100755 scripts/exglobal_efsoi_fcst_fv3gfs.sh.ecf create mode 100755 scripts/exglobal_efsoi_post_fv3gfs.sh.ecf create mode 100755 scripts/exglobal_efsoi_recenter_fv3gfs.sh.ecf create mode 100755 scripts/exglobal_efsoi_surface_fv3gfs.sh.ecf create mode 100755 scripts/exglobal_efsoi_update_fv3gfs.sh.ecf diff --git a/jobs/JGDAS_EFSOI_FCST b/jobs/JGDAS_EFSOI_FCST new file mode 100755 index 00000000000..487fdb731ba --- /dev/null +++ b/jobs/JGDAS_EFSOI_FCST @@ -0,0 +1,156 @@ +#!/bin/ksh +set -x + +export RUN_ENVIR=${RUN_ENVIR:-"nco"} +export PS4='$SECONDS + ' +date + + +############################# +# Source relevant config files +############################# +export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} +config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} + +# Edited by liaofan on 2020.05.26 +#configs="base fcst efcs" +configs="base fcst efcsfsoi" + +for config in $configs; do + . $config_path/config.$config + status=$? + [[ $status -ne 0 ]] && exit $status +done + + +########################################## +# Source machine runtime environment +########################################## +# Edited by liaofan on 2020.05.26 +#. $HOMEgfs/env/${machine}.env efcs +. $HOMEgfs/env/${machine}.env efcsfsoi + +status=$? +[[ $status -ne 0 ]] && exit $status + + +############################################## +# Obtain unique process id (pid) and make temp directory +############################################## +export pid=${pid:-$$} +export outid=${outid:-"LL$job"} +export DATA=${DATA:-${DATAROOT}/${jobid:?}} +mkdir -p $DATA +cd $DATA + + +############################################## +# Run setpdy and initialize PDY variables +############################################## +export cycle="t${cyc}z" +setpdy.sh +. ./PDY + + +############################################## +# Determine Job Output Name on System +############################################## +export pgmout="OUTPUT.${pid}" +export pgmerr=errfile + + +############################################## +# Set variables used in the exglobal script +############################################## +export CDATE=${CDATE:-${PDY}${cyc}} +export CDUMP=${CDUMP:-${RUN:-"gdas"}} +if [ $RUN_ENVIR = "nco" ]; then + export ROTDIR=${COMROOT:?}/$NET/$envir +fi + + +############################################## +# Begin JOB SPECIFIC work +############################################## + +export CASE=$CASE_ENKF + +# COMOUT is used in exglobal script +# TO DO: Map NCO's directory into these variables +# Edited by liaofan on 2020.05.26 +#export COMOUT="$ROTDIR/enkf$CDUMP.$PDY/$cyc" +export COMOUT="$ROTDIR/fsoi$CDUMP.$PDY/$cyc" + +# Forecast length for EnKF forecast +export FHMIN=$FHMIN_ENKF +export FHOUT=$FHOUT_ENKF +export FHMAX=$FHMAX_ENKF + + +# Get ENSBEG/ENSEND from ENSGRP and NMEM_EFCSGRP +export ENSEND=$((NMEM_EFCSGRP * ENSGRP)) +export ENSBEG=$((ENSEND - NMEM_EFCSGRP + 1)) + + +############################################################### +# Run relevant exglobal script +env +msg="HAS BEGUN on `hostname`" +postmsg "$jlogfile" "$msg" +$LOGSCRIPT + +# Edited by liaofan on 2020.05.26 +#${ENKFFCSTSH:-$SCRgsi/exglobal_enkf_fcst_fv3gfs.sh.ecf} +${ENKFFCSTSH:-$SCRgfs/exglobal_efsoi_fcst_fv3gfs.sh.ecf} + + +status=$? +[[ $status -ne 0 ]] && exit $status + + +# Double check the status of members in ENSGRP +EFCSGRP=$COMOUT/efcs.grp${ENSGRP} +npass=0 +if [ -f $EFCSGRP ]; then + npass=$(grep "PASS" $EFCSGRP | wc -l) +fi +echo "$npass/$NMEM_EFCSGRP members successfull in efcs.grp$ENSGRP" +if [ $npass -ne $NMEM_EFCSGRP ]; then + echo "FATAL ERROR: Failed members in group $ENSGRP, ABORT!" + cat $EFCSGRP + exit 99 +fi + + +############################################## +# Send Alerts +############################################## +if [ $SENDDBN = YES ] ; then + $DBNROOT/bin/dbn_alert MODEL ENKF1_MSC_fcsstat $job $EFCSGRP +fi + + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [ -e "$pgmout" ] ; then + cat $pgmout +fi + + +msg="ENDED NORMALLY." +postmsg "$jlogfile" "$msg" + + +########################################## +# Remove the Temporary working directory +########################################## +cd $DATAROOT +[[ $KEEPDATA = "NO" ]] && rm -rf $DATA + +date +exit 0 diff --git a/jobs/JGDAS_EFSOI_POST b/jobs/JGDAS_EFSOI_POST new file mode 100755 index 00000000000..d49569bc9f7 --- /dev/null +++ b/jobs/JGDAS_EFSOI_POST @@ -0,0 +1,128 @@ +#!/bin/ksh +set -x + +export RUN_ENVIR=${RUN_ENVIR:-"nco"} +export PS4='$SECONDS + ' +date + + +############################# +# Source relevant config files +############################# +export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} + +# edited by liaofan on 2020.06.03 +#configs="base epos" +configs="base eposfsoi" + +config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} +for config in $configs; do + . $config_path/config.$config + status=$? + [[ $status -ne 0 ]] && exit $status +done + + +########################################## +# Source machine runtime environment +########################################## +# Edited by liaofan on 2020.06.03 +#. $HOMEgfs/env/${machine}.env epos +. $HOMEgfs/env/${machine}.env eposfsoi + +status=$? +[[ $status -ne 0 ]] && exit $status + + +############################################## +# Obtain unique process id (pid) and make temp directory +############################################## +export pid=${pid:-$$} +export outid=${outid:-"LL$job"} +export DATA=${DATA:-${DATAROOT}/${jobid:?}} +mkdir -p $DATA +cd $DATA + + +############################################## +# Run setpdy and initialize PDY variables +############################################## +export cycle="t${cyc}z" +setpdy.sh +. ./PDY + + +############################################## +# Determine Job Output Name on System +############################################## +export pgmout="OUTPUT.${pid}" +export pgmerr=errfile + + +############################################## +# Set variables used in the exglobal script +############################################## +export CDATE=${CDATE:-${PDY}${cyc}} +export CDUMP=${CDUMP:-${RUN:-"gdas"}} +if [ $RUN_ENVIR = "nco" ]; then + export ROTDIR=${COMROOT:?}/$NET/$envir +fi + + +############################################## +# Begin JOB SPECIFIC work +############################################## +export GFS_NCIO=${GFS_NCIO:-"YES"} + +export PREFIX="${CDUMP}.t${cyc}z." + +# COMIN, COMOUT are used in exglobal script +# TO DO: Map NCO's directory into these variables +# Edited by liaofan on 2020.06.03 +#export COMIN="$ROTDIR/enkf$CDUMP.$PDY/$cyc" +#export COMOUT="$ROTDIR/enkf$CDUMP.$PDY/$cyc" +export COMIN="$ROTDIR/fsoi$CDUMP.$PDY/$cyc" +export COMOUT="$ROTDIR/fsoi$CDUMP.$PDY/$cyc" + +export LEVS=$((LEVS-1)) + + +############################################################### +# Run relevant exglobal script +env +msg="HAS BEGUN on `hostname`" +postmsg "$jlogfile" "$msg" +$LOGSCRIPT + +# edited by liaofan on 2020.06.03 +#${ENKFPOSTSH:-$SCRgsi/exglobal_enkf_post_fv3gfs.sh.ecf} +${ENKFPOSTSH:-$SCRgfs/exglobal_efsoi_post_fv3gfs.sh.ecf} + +status=$? +[[ $status -ne 0 ]] && exit $status + + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [ -e "$pgmout" ] ; then + cat $pgmout +fi + + +msg="ENDED NORMALLY." +postmsg "$jlogfile" "$msg" + + +########################################## +# Remove the Temporary working directory +########################################## +cd $DATAROOT +[[ $KEEPDATA = "NO" ]] && rm -rf $DATA + +date +exit 0 diff --git a/jobs/JGDAS_EFSOI_RECENTER b/jobs/JGDAS_EFSOI_RECENTER new file mode 100755 index 00000000000..0c3b807a5ac --- /dev/null +++ b/jobs/JGDAS_EFSOI_RECENTER @@ -0,0 +1,168 @@ +#!/bin/ksh +set -x + +export RUN_ENVIR=${RUN_ENVIR:-"nco"} +export PS4='$SECONDS + ' +date + + +############################# +# Source relevant config files +############################# +export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} + +# Edited by liaofan on 2020.05.20 +#configs="base ecen" +configs="base ecenfsoi" + +config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} +for config in $configs; do + . $config_path/config.$config + status=$? + [[ $status -ne 0 ]] && exit $status +done + + +########################################## +# Source machine runtime environment +########################################## +# edited by liaofan on 2020.05.20 +#. $HOMEgfs/env/${machine}.env ecen +. $HOMEgfs/env/${machine}.env ecenfsoi + +status=$? +[[ $status -ne 0 ]] && exit $status + + +############################################## +# Obtain unique process id (pid) and make temp directory +############################################## +export pid=${pid:-$$} +export outid=${outid:-"LL$job"} +export DATA=${DATA:-${DATAROOT}/${jobid:?}} +mkdir -p $DATA +cd $DATA + + +############################################## +# Run setpdy and initialize PDY variables +############################################## +export cycle="t${cyc}z" +setpdy.sh +. ./PDY + + +############################################## +# Determine Job Output Name on System +############################################## +export pgmout="OUTPUT.${pid}" +export pgmerr=errfile + + +############################################## +# Set variables used in the exglobal script +############################################## +export CDATE=${CDATE:-${PDY}${cyc}} +export CDUMP=${CDUMP:-${RUN:-"gdas"}} +if [ $RUN_ENVIR = "nco" ]; then + export ROTDIR=${COMROOT:?}/$NET/$envir +fi + + +############################################## +# Begin JOB SPECIFIC work +############################################## + +GDATE=$($NDATE -$assim_freq $CDATE) +gPDY=$(echo $GDATE | cut -c1-8) +gcyc=$(echo $GDATE | cut -c9-10) +GDUMP=${GDUMP:-"gdas"} + +export CASE=$CASE_ENKF + + +EUPD_CYC=$(echo ${EUPD_CYC:-"gdas"} | tr a-z A-Z) +if [ $EUPD_CYC = "GFS" ]; then + CDUMP_ENKF="gfs" +else + CDUMP_ENKF=$CDUMP +fi + +export OPREFIX="${CDUMP}.t${cyc}z." +export APREFIX="${CDUMP}.t${cyc}z." +export APREFIX_ENKF="${CDUMP_ENKF}.t${cyc}z." +export GPREFIX="${CDUMP}.t${gcyc}z." +export GSUFFIX=${GSUFFIX:-$SUFFIX} +export ASUFFIX=${ASUFFIX:-$SUFFIX} + +if [ $RUN_ENVIR = "nco" -o ${ROTDIR_DUMP:-NO} = "YES" ]; then + export COMIN_OBS=${COMIN_OBS:-$ROTDIR/$RUN.$PDY/$cyc} + export COMIN_GES_OBS=${COMIN_GES_OBS:-$ROTDIR/$GDUMP.$gPDY/$gcyc} +else + export COMIN_OBS="$DMPDIR/$CDATE/$CDUMP" + export COMIN_GES_OBS="$DMPDIR/$GDATE/$GDUMP" +fi + +# COMIN, COMIN_ENS and COMIN_GES_ENS are used in exglobal script +# TO DO: Map NCO's directory into these variables +# # ======================================================= +# edited by liaofan on 2020.05.18 +export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc" +export COMIN_ENS="$ROTDIR/enkf$CDUMP_ENKF.$PDY/$cyc" +export COMOUT_ENS="$ROTDIR/enkf$CDUMP.$PDY/$cyc" +export COMIN_GES_ENS="$ROTDIR/enkf$CDUMP.$gPDY/$gcyc" + +# Current GDAS comrot folder +export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc" + +# Current ENKF (EFSOI) comrot folder +export COMIN_ENS="$ROTDIR/fsoi$CDUMP_ENKF.$PDY/$cyc" + +# Current ENKF (EFSOI) comrot folder +export COMOUT_ENS="$ROTDIR/fsoi$CDUMP.$PDY/$cyc" + +# Previous ENKF comrot folder +export COMIN_GES_ENS="$ROTDIR/enkf$CDUMP.$gPDY/$gcyc" +# ======================================================= + + + +############################################################### +# Run relevant exglobal script +env +msg="HAS BEGUN on `hostname`" +postmsg "$jlogfile" "$msg" +$LOGSCRIPT + +# Edited by liaofan on 2020.05.20 +#${ENKFRECENSH:-$SCRgsi/exglobal_enkf_recenter_fv3gfs.sh.ecf} +${ENKFRECENSH:-$SCRgsi/exglobal_efsoi_recenter_fv3gfs.sh.ecf} + +status=$? +[[ $status -ne 0 ]] && exit $status + + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [ -e "$pgmout" ] ; then + cat $pgmout +fi + + +msg="ENDED NORMALLY." +postmsg "$jlogfile" "$msg" + + +########################################## +# Remove the Temporary working directory +########################################## +cd $DATAROOT +[[ $KEEPDATA = "NO" ]] && rm -rf $DATA + +date +exit 0 diff --git a/jobs/JGDAS_EFSOI_SURFACE b/jobs/JGDAS_EFSOI_SURFACE new file mode 100755 index 00000000000..165545a040d --- /dev/null +++ b/jobs/JGDAS_EFSOI_SURFACE @@ -0,0 +1,170 @@ +#!/bin/ksh +set -x + +export RUN_ENVIR=${RUN_ENVIR:-"nco"} +export PS4='$SECONDS + ' +date + + +############################# +# Source relevant config files +############################# +export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} +# Edite by liaofan on 2020.05.18 +#configs="base esfc" +configs="base esfcfsoi" +config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} +for config in $configs; do + . $config_path/config.$config + status=$? + [[ $status -ne 0 ]] && exit $status +done + + +########################################## +# Source machine runtime environment +########################################## +# edited by liaofan on 2020.05.18 +#. $HOMEgfs/env/${machine}.env esfc +. $HOMEgfs/env/${machine}.env esfcfsoi + + +status=$? +[[ $status -ne 0 ]] && exit $status + + +############################################## +# Obtain unique process id (pid) and make temp directory +############################################## +export pid=${pid:-$$} +export outid=${outid:-"LL$job"} +export DATA=${DATA:-${DATAROOT}/${jobid:?}} +mkdir -p $DATA +cd $DATA + + +############################################## +# Run setpdy and initialize PDY variables +############################################## +export cycle="t${cyc}z" +setpdy.sh +. ./PDY + + +############################################## +# Determine Job Output Name on System +############################################## +export pgmout="OUTPUT.${pid}" +export pgmerr=errfile + + +############################################## +# Set variables used in the exglobal script +############################################## +export CDATE=${CDATE:-${PDY}${cyc}} +export CDUMP=${CDUMP:-${RUN:-"gdas"}} +if [ $RUN_ENVIR = "nco" ]; then + export ROTDIR=${COMROOT:?}/$NET/$envir +fi + + +############################################## +# Begin JOB SPECIFIC work +############################################## + +GDATE=$($NDATE -$assim_freq $CDATE) +gPDY=$(echo $GDATE | cut -c1-8) +gcyc=$(echo $GDATE | cut -c9-10) +GDUMP=${GDUMP:-"gdas"} + +export CASE=$CASE_ENKF + + +EUPD_CYC=$(echo ${EUPD_CYC:-"gdas"} | tr a-z A-Z) +if [ $EUPD_CYC = "GFS" ]; then + CDUMP_ENKF="gfs" +else + CDUMP_ENKF=$CDUMP +fi + +export OPREFIX="${CDUMP}.t${cyc}z." +export APREFIX="${CDUMP}.t${cyc}z." +export APREFIX_ENKF="${CDUMP_ENKF}.t${cyc}z." +export GPREFIX="${CDUMP}.t${gcyc}z." +export GSUFFIX=${GSUFFIX:-$SUFFIX} +export ASUFFIX=${ASUFFIX:-$SUFFIX} + +if [ $RUN_ENVIR = "nco" -o ${ROTDIR_DUMP:-NO} = "YES" ]; then + export COMIN_OBS=${COMIN_OBS:-$ROTDIR/$RUN.$PDY/$cyc} + export COMIN_GES_OBS=${COMIN_GES_OBS:-$ROTDIR/$GDUMP.$gPDY/$gcyc} +else + export COMIN_OBS="$DMPDIR/$CDATE/$CDUMP" + export COMIN_GES_OBS="$DMPDIR/$GDATE/$GDUMP" +fi + +# COMIN, COMIN_ENS and COMIN_GES_ENS are used in exglobal script +# TO DO: Map NCO's directory into these variables +# ======================================================= +# edited by liaofan on 2020.05.18 +#export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc" +#export COMIN_ENS="$ROTDIR/enkf$CDUMP_ENKF.$PDY/$cyc" +#export COMOUT_ENS="$ROTDIR/enkf$CDUMP.$PDY/$cyc" +#export COMIN_GES_ENS="$ROTDIR/enkf$CDUMP.$gPDY/$gcyc" + +# Current GDAS comrot folder +export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc" + +# Current ENKF (EFSOI) comrot folder +export COMIN_ENS="$ROTDIR/fsoi$CDUMP_ENKF.$PDY/$cyc" + +# Current ENKF (EFSOI) comrot folder +export COMOUT_ENS="$ROTDIR/fsoi$CDUMP.$PDY/$cyc" + +# Previous ENKF comrot folder +export COMIN_GES_ENS="$ROTDIR/enkf$CDUMP.$gPDY/$gcyc" +# ======================================================= + + + + +# +# +############################################################### +# Run relevant exglobal script +env +msg="HAS BEGUN on `hostname`" +postmsg "$jlogfile" "$msg" +$LOGSCRIPT + +# Edited by liaofan on 2020.05.18 +#${ENKFRESFCSH:-$SCRgsi/exglobal_enkf_surface_fv3gfs.sh.ecf} +${ENKFRESFCSH:-$SCRgfs/exglobal_efsoi_surface_fv3gfs.sh.ecf} + +status=$? +[[ $status -ne 0 ]] && exit $status + + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [ -e "$pgmout" ] ; then + cat $pgmout +fi + + +msg="ENDED NORMALLY." +postmsg "$jlogfile" "$msg" + + +########################################## +# Remove the Temporary working directory +########################################## +cd $DATAROOT +[[ $KEEPDATA = "NO" ]] && rm -rf $DATA + +date +exit 0 diff --git a/jobs/JGLOBAL_EFSOI_UPDATE b/jobs/JGLOBAL_EFSOI_UPDATE new file mode 100755 index 00000000000..323ab4d840b --- /dev/null +++ b/jobs/JGLOBAL_EFSOI_UPDATE @@ -0,0 +1,167 @@ +#!/bin/ksh +set -x + +export RUN_ENVIR=${RUN_ENVIR:-"nco"} +export PS4='$SECONDS + ' +date + + +############################# +# Source relevant config files +############################# +export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} + +# edited by liaofan on 2020.05.06 +#configs="base anal eupd" +configs="base anal eupdfsoi" +config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} +for config in $configs; do + . $config_path/config.$config + status=$? + [[ $status -ne 0 ]] && exit $status +done + + +########################################## +# Source machine runtime environment +########################################## +# edited by liaofan on 2020.05.06 +#. $HOMEgfs/env/${machine}.env eupd +. $HOMEgfs/env/${machine}.env eupdfsoi + + +status=$? +[[ $status -ne 0 ]] && exit $status + + +############################################## +# Obtain unique process id (pid) and make temp directory +############################################## +export pid=${pid:-$$} +export outid=${outid:-"LL$job"} +export DATA=${DATA:-${DATAROOT}/${jobid:?}} +mkdir -p $DATA +cd $DATA + + +############################################## +# Run setpdy and initialize PDY variables +############################################## +export cycle="t${cyc}z" +setpdy.sh +. ./PDY + + +############################################## +# Determine Job Output Name on System +############################################## +export pgmout="OUTPUT.${pid}" +export pgmerr=errfile + + +############################################## +# Set variables used in the exglobal script +############################################## +export CDATE=${CDATE:-${PDY}${cyc}} +export CDUMP=${CDUMP:-${RUN:-"gdas"}} +if [ $RUN_ENVIR = "nco" ]; then + export ROTDIR=${COMROOT:?}/$NET/$envir +fi + + +############################################## +# Begin JOB SPECIFIC work +############################################## + +GDATE=$($NDATE -$assim_freq $CDATE) +gPDY=$(echo $GDATE | cut -c1-8) +gcyc=$(echo $GDATE | cut -c9-10) + +export APREFIX="${CDUMP}.t${cyc}z." +export GPREFIX="gdas.t${gcyc}z." +export ASUFFIX=${ASUFFIX:-$SUFFIX} +export GSUFFIX=${GSUFFIX:-$SUFFIX} + + +# COMIN_GES_ENS and COMOUT_ANL_ENS are used in exglobal script +# TO DO: Map NCO's directory into these variables + +# ======= Edited by liaofan on 2020.05.06 ============== +#export COMIN_GES_ENS="$ROTDIR/enkfgdas.$gPDY/$gcyc" +#export COMOUT_ANL_ENS="$ROTDIR/enkf$CDUMP.$PDY/$cyc" + +# Copy enkfgdas data on the current cycle to fsoigdas folder! +# - see rn200502 +# - Do not copy the folders of each member, which were created in eupd +# - Copy only files created before gdaseupd +mkdir -p $ROTDIR/fsoigdas.$PDY/$cyc +cp -u -ir $ROTDIR/enkfgdas.$PDY/$cyc/gdas.*.radstat.* $ROTDIR/fsoigdas.$PDY/$cyc/ +cp -u -ir $ROTDIR/enkfgdas.$PDY/$cyc/gdas.*.cnvstat.* $ROTDIR/fsoigdas.$PDY/$cyc/ +cp -u -ir $ROTDIR/enkfgdas.$PDY/$cyc/gdas.*.oznstat.* $ROTDIR/fsoigdas.$PDY/$cyc/ +cp -u -ir $ROTDIR/enkfgdas.$PDY/$cyc/gdas.*.loginc.txt $ROTDIR/fsoigdas.$PDY/$cyc/ +cp -u -ir $ROTDIR/enkfgdas.$PDY/$cyc/gdas.*.obsinput.* $ROTDIR/fsoigdas.$PDY/$cyc/ +cp -u -ir $ROTDIR/enkfgdas.$PDY/$cyc/gdas.*.gsistat.* $ROTDIR/fsoigdas.$PDY/$cyc/ +cp -u -ir $ROTDIR/enkfgdas.$PDY/$cyc/gdas.*.abias* $ROTDIR/fsoigdas.$PDY/$cyc/ +cp -u -ir $ROTDIR/enkfgdas.$PDY/$cyc/gdas.*.gsidiags $ROTDIR/fsoigdas.$PDY/$cyc/ + +# The first guess from enkfgdas +export COMIN_GES_ENS="$ROTDIR/enkfgdas.$gPDY/$gcyc" + +# The output analysis to efsoi +export COMOUT_ANL_ENS="$ROTDIR/fsoi$CDUMP.$PDY/$cyc" + +# ======================================================== + +############################################################### +# Run relevant exglobal script +env +msg="HAS BEGUN on `hostname`" +postmsg "$jlogfile" "$msg" +$LOGSCRIPT + +# Edited by liaofan on 2020.05.06 +#${ENKFUPDSH:-$SCRgsi/exglobal_enkf_update_fv3gfs.sh.ecf} +${ENKFUPDSH:-$SCRgsi/exglobal_efsoi_update_fv3gfs.sh.ecf} + +status=$? +[[ $status -ne 0 ]] && exit $status + + +############################################## +# Send Alerts +############################################## +if [ $SENDDBN = YES ] ; then + $DBNROOT/bin/dbn_alert MODEL ENKF1_MSC_enkfstat $job $COMOUT_ANL_ENS/${APREFIX}enkfstat +fi + + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [ -e "$pgmout" ] ; then + cat $pgmout +fi + + +msg="ENDED NORMALLY." +postmsg "$jlogfile" "$msg" + + +########################################## +# Remove the Temporary working directory +########################################## +cd $DATAROOT + +echo " ====== (JGLOBAL_EFSOI_UPDATE) liaofan on 2020.05.07 === " +echo "DATAROOT="$DATAROOT +echo "DATA="$DATA +echo " ======================================================= " + +[[ $KEEPDATA = "NO" ]] && rm -rf $DATA + +date +exit 0 diff --git a/jobs/rocoto/ecenfsoi.sh b/jobs/rocoto/ecenfsoi.sh new file mode 100755 index 00000000000..006bff60407 --- /dev/null +++ b/jobs/rocoto/ecenfsoi.sh @@ -0,0 +1,30 @@ +#!/bin/ksh -x + +############################################################### +# Source FV3GFS workflow modules +. $HOMEgfs/ush/load_fv3gfs_modules.sh +status=$? +[[ $status -ne 0 ]] && exit $status + +############################################################### +# Loop over groups to Execute the JJOB +fhrlst=$(echo $FHRLST | sed -e 's/_/ /g; s/f/ /g; s/,/ /g') +for fhr in $fhrlst; do + + export FHMIN_ECEN=$fhr + export FHMAX_ECEN=$fhr + export FHOUT_ECEN=$fhr + export job=ecen${fhr} + + # edited by liaofan on 2020.05.20 + #$HOMEgfs/jobs/JGDAS_ENKF_RECENTER + $HOMEgfs/jobs/JGDAS_EFSOI_RECENTER + + status=$? + [[ $status -ne 0 ]] && exit $status + +done + +############################################################### +# Exit out cleanly +exit 0 diff --git a/jobs/rocoto/efcsfsoi.sh b/jobs/rocoto/efcsfsoi.sh new file mode 100755 index 00000000000..9a22ea677ab --- /dev/null +++ b/jobs/rocoto/efcsfsoi.sh @@ -0,0 +1,16 @@ +#!/bin/ksh -x + +############################################################### +# Source FV3GFS workflow modules +. $HOMEgfs/ush/load_fv3gfs_modules.sh +status=$? +[[ $status -ne 0 ]] && exit $status + +############################################################### +# Execute the JJOB +# Edited by liaofan on 2020.05.26 +#$HOMEgfs/jobs/JGDAS_ENKF_FCST +$HOMEgfs/jobs/JGDAS_EFSOI_FCST + +status=$? +exit $status diff --git a/jobs/rocoto/eposfsoi.sh b/jobs/rocoto/eposfsoi.sh new file mode 100755 index 00000000000..1f4dbfbadb3 --- /dev/null +++ b/jobs/rocoto/eposfsoi.sh @@ -0,0 +1,31 @@ +#!/bin/ksh -x + +############################################################### +# Source FV3GFS workflow modules +. $HOMEgfs/ush/load_fv3gfs_modules.sh +status=$? +[[ $status -ne 0 ]] && exit $status + +############################################################### +# Loop over groups to Execute the JJOB +fhrlst=$(echo $FHRLST | sed -e 's/_/ /g; s/f/ /g; s/,/ /g') + +for fhr in $fhrlst; do + + export FHMIN_EPOS=$fhr + export FHMAX_EPOS=$fhr + export FHOUT_EPOS=$fhr + export job=epos${fhr} + + # Edited by liaofan on 2020.06.03 + #$HOMEgfs/jobs/JGDAS_ENKF_POST + $HOMEgfs/jobs/JGDAS_EFSOI_POST + + status=$? + [[ $status -ne 0 ]] && exit $status + +done + +############################################################### +# Exit out cleanly +exit 0 diff --git a/jobs/rocoto/esfcfsoi.sh b/jobs/rocoto/esfcfsoi.sh new file mode 100755 index 00000000000..0ac0448960a --- /dev/null +++ b/jobs/rocoto/esfcfsoi.sh @@ -0,0 +1,13 @@ +#!/bin/ksh -x + +############################################################### +# Source FV3GFS workflow modules +. $HOMEgfs/ush/load_fv3gfs_modules.sh +status=$? +[[ $status -ne 0 ]] && exit $status + +############################################################### +# Execute the JJOB +$HOMEgfs/jobs/JGDAS_EFSOI_SURFACE +status=$? +exit $status diff --git a/jobs/rocoto/eupdfsoi.sh b/jobs/rocoto/eupdfsoi.sh new file mode 100755 index 00000000000..67727c2c81b --- /dev/null +++ b/jobs/rocoto/eupdfsoi.sh @@ -0,0 +1,16 @@ +#!/bin/ksh -x + +############################################################### +# Source FV3GFS workflow modules +. $HOMEgfs/ush/load_fv3gfs_modules.sh +status=$? +[[ $status -ne 0 ]] && exit $status + +############################################################### +# Execute the JJOB +# Updated by liaofan on 2020.05.07 +#$HOMEgfs/jobs/JGLOBAL_ENKF_UPDATE +$HOMEgfs/jobs/JGLOBAL_EFSOI_UPDATE + +status=$? +exit $status diff --git a/parm/config/config.ecenfsoi b/parm/config/config.ecenfsoi new file mode 100755 index 00000000000..ee0736fd428 --- /dev/null +++ b/parm/config/config.ecenfsoi @@ -0,0 +1,30 @@ +#!/bin/ksh -x + +########## config.ecenfsoi ########## +# Ensemble recentering specific + +echo "BEGIN: config.ecenfsoi" + +# Get task specific resources + +# Edited by liaofan on 2020.05.20 +#. $EXPDIR/config.resources ecen +. $EXPDIR/config.resources ecenfsoi + +# Edited by liaofan on 2020.05.20 +#export ENKFRECENSH="$HOMEgsi/scripts/exglobal_enkf_recenter_fv3gfs.sh.ecf" +export ENKFRECENSH="$HOMEgfs/scripts/exglobal_efsoi_recenter_fv3gfs.sh.ecf" + +export CHGRESEXEC="$HOMEgfs/exec/chgres_recenter.exe" + +# Number of concurrent ecen jobs [1 implies sequential] +# Usually IAUFHRS_ENKF=3,6,9, so NECENGRP=3. Scripting +# below queries IAUFHRS_ENKF to determine NECENGRP +export NECENGRP=1 +if [ $DOIAU_ENKF = "YES" ]; then + ngrps=$(grep -o ',' <<<"$IAUFHRS_ENKF" | grep -c .) + ((ngrps++)) + export NECENGRP=$ngrps +fi + +echo "END: config.ecenfsoi" diff --git a/parm/config/config.efcsfsoi b/parm/config/config.efcsfsoi new file mode 100755 index 00000000000..16cc2805b27 --- /dev/null +++ b/parm/config/config.efcsfsoi @@ -0,0 +1,111 @@ +#!/bin/ksh -x + +########## config.efcsfsoi ########## +# Ensemble forecast specific, dependency: config.fcstfsoi + +echo "BEGIN: config.efcsfsoi" + +# Source model specific information that is resolution dependent +. $EXPDIR/config.fv3 $CASE_ENKF + +# Get task specific resources +# === Edited by liaofan on 2020.05.26 ==== +#. $EXPDIR/config.resources efcs +. $EXPDIR/config.resources efcsfsoi + +#export npe_fv3=$npe_efcs +export npe_fv3=$npe_efcsfsoi +# ======================================== + +if [ $QUILTING = ".true." ]; then + export npe_fv3=$(echo " $npe_fv3 + $WRITE_GROUP * $WRTTASK_PER_GROUP" | bc) + export npe_efcs=$npe_fv3 + + # Edited by liaofan + export npe_efcsfsoi=$npe_fv3 +fi + +# === Edited by liaofan on 2020.05.26 ==== +#export ENKFFCSTSH="$HOMEgsi/scripts/exglobal_enkf_fcst_fv3gfs.sh.ecf" +export ENKFFCSTSH="$HOMEgsi/scripts/exglobal_efsoi_fcst_fv3gfs.sh.ecf" +# ======================================== + + +# === Edited by liaofan on 2020.05.26 === +#export NMEM_EFCSGRP=2 +export NMEM_EFCSGRP=4 + +# newly added below +export NMEM_EFSOIGRP=$NMEM_EFCSGRP +export EFSOI_STR_FCST="YES" +# ======================================= + + +export RERUN_EFCSGRP="NO" + +# Turn off inline UPP for EnKF forecast +export WRITE_DOPOST=".false." + +# Stochastic physics parameters (only for ensemble forecasts) +export DO_SKEB="YES" +export SKEB=0.3 +export SKEB_TAU=21600. +export SKEB_LSCALE=250000. +export SKEBNORM=0 +export SKEB_NPASS=30 +export SKEB_VDOF=5 +export DO_SHUM="YES" +export SHUM=0.005 +export SHUM_TAU=21600. +export SHUM_LSCALE=500000. +export DO_SPPT="YES" +export SPPT=0.5 +export SPPT_TAU=21600. +export SPPT_LSCALE=500000. +export SPPT_LOGIT=".true." +export SPPT_SFCLIMIT=".true." + +if [ $QUILTING = ".true." -a $OUTPUT_GRID = "gaussian_grid" ]; then + export DIAG_TABLE="$HOMEgfs/parm/parm_fv3diag/diag_table_da" +else + export DIAG_TABLE="$HOMEgfs/parm/parm_fv3diag/diag_table_da_orig" +fi + +# FV3 model namelist parameters to over-ride +export restart_interval=${restart_interval:-6} + +# For IAU, write restarts at beginning of window also +if [ $DOIAU_ENKF = "YES" ]; then + export restart_interval="6 -1" + if [[ "$SDATE" = "$CDATE" ]]; then export restart_interval="3 -1"; fi +fi + +export OUTPUT_FILETYPES="$OUTPUT_FILE" +if [[ "$OUTPUT_FILE" == "netcdf" ]]; then + export ichunk2d=0; export jchunk2d=0 + export ichunk3d=0; export jchunk3d=0; export kchunk3d=0 + RESTILE=`echo $CASE_ENKF |cut -c 2-` + if [[ "$machine" == "WCOSS_DELL_P3" ]]; then + if [ $RESTILE -ge 384 ]; then + export OUTPUT_FILETYPES=" 'netcdf_parallel' 'netcdf' " + export ichunk2d=$((4*RESTILE)) + export jchunk2d=$((2*RESTILE)) + export ichunk3d=$((4*RESTILE)) + export jchunk3d=$((2*RESTILE)) + export kchunk3d=1 + else + export OUTPUT_FILETYPES=" 'netcdf_parallel' 'netcdf' " + fi + fi + if [[ "$machine" == "HERA" ]]; then + export OUTPUT_FILETYPES=" 'netcdf_parallel' 'netcdf_parallel' " + if [ $RESTILE -le 192 ]; then + export OUTPUT_FILETYPES=" 'netcdf_parallel' 'netcdf' " + fi + fi +fi + +# wave model +export cplwav=.false. + +echo "END: config.efcsfsoi" diff --git a/parm/config/config.eposfsoi b/parm/config/config.eposfsoi new file mode 100755 index 00000000000..a2a37247b64 --- /dev/null +++ b/parm/config/config.eposfsoi @@ -0,0 +1,29 @@ +#!/bin/ksh -x + +########## config.eposfsoi ########## +# Ensemble post processing specific + +echo "BEGIN: config.eposfsoi" + +# Get task specific resources +# Edited by liaofan on 2020.06.03 +#. $EXPDIR/config.resources epos +. $EXPDIR/config.resources eposfsoi + +#export ENKFPOSTSH="$HOMEgsi/scripts/exglobal_enkf_post_fv3gfs.sh.ecf" +export ENKFPOSTSH="$HOMEgsi/scripts/exglobal_efsoi_post_fv3gfs.sh.ecf" + +# No. of concurrent epos jobs [1 implies sequential] +export NEPOSGRP=7 + +if [ $l4densvar = ".false." ]; then + # Edited by liaofan on 2020.06.03 + # for 6 groups: the lead times of 0, 6, 12, 18, 24, & 30 hours + #export NEPOSGRP=3 + export NEPOSGRP=6 +fi + +# Generate ensemble spread files +export ENKF_SPREAD="YES" + +echo "END: config.eposfsoi" diff --git a/parm/config/config.esfcfsoi b/parm/config/config.esfcfsoi new file mode 100755 index 00000000000..11fd50622a6 --- /dev/null +++ b/parm/config/config.esfcfsoi @@ -0,0 +1,24 @@ +#!/bin/ksh -x + +########## config.esfcfsoi ########## +# Ensemble surface specific + +echo "BEGIN: config.esfcfsoi" + +# Get task specific resources + +# edited by liaofan on 2020.05.18 +. $EXPDIR/config.resources esfcfsoi + +# Edited by liaofan on 2020.05.18 +export ENKFRESFCSH="$HOMEgfs/scripts/exglobal_efsoi_surface_fv3gfs.sh.ecf" + +# With IAU only need surface analysis at start of IAU window. +# Set DOSFCANL_ENKF=NO to prevent creation of sfcanl at +# center of analysis window. + +if [ $DOIAU_ENKF = "YES" ]; then + export DOSFCANL_ENKF="NO" +fi + +echo "END: config.esfcfsoi" diff --git a/parm/config/config.eupdfsoi b/parm/config/config.eupdfsoi new file mode 100755 index 00000000000..4a5235b49ac --- /dev/null +++ b/parm/config/config.eupdfsoi @@ -0,0 +1,39 @@ +#!/bin/ksh -x + +########## config.eupdfsoi ########## +# Ensemble update specific, dependency config.anal + +echo "BEGIN: config.eupdfsoi" + +# edited by liaofan on 2020.05.06 ======== +# Get task specific resources +. $EXPDIR/config.resources eupdfsoi + +export ENKFUPDSH="$HOMEgfs/scripts/exglobal_efsoi_update_fv3gfs.sh.ecf" +export npe_enkf=$npe_eupd + +echo "ENKFUPDSH="$ENKFUPDSH +# ============================================ + +# Use NAM_ENKF below for serial EnKF +##export NAM_ENKF="analpertwtnh=0.9,analpertwtsh=0.9,analpertwttr=0.9" + +# LETKF specific settings with model space localization +export modelspace_vloc=".true." # model space localization +export letkf_flag=".true." # use LETKF instead of serial filter +export getkf=".true." # Gain form of LETKF (needed for model-space localization) +export denkf=".true." # EnKF approximation (beneficial since less spread removed by analysis) +export nobsl_max=10000 # max number of obs in each LETKF volume (uses closest nobsl_max). can + # be reduced to speed up execution time. +export analpertwt=0.85 # relaxation to prior spread inflation factor +export readin_localization_enkf=".false." # Don’t read in localization scales from file (doesn’t make + # sense for LETKF if model space localization on and nobsl_max>0) +export corrlength=1250 # Horizontal localization scale (max horizontal distance to search for nobsl_max local obs) +export lnsigcutoff=2.75 # ignored if modelspace_vloc=.true. + +export lobsdiag_forenkf=".true." # use jacobian. must be .true. if modelspace_vloc=".true." + # need to specify .true. setting since config.anal sets to .false. + +export NAM_ENKF="smoothparm=35," + +echo "END: config.eupdfsoi" diff --git a/scripts/exglobal_efsoi_fcst_fv3gfs.sh.ecf b/scripts/exglobal_efsoi_fcst_fv3gfs.sh.ecf new file mode 100755 index 00000000000..4f6e9a56ce6 --- /dev/null +++ b/scripts/exglobal_efsoi_fcst_fv3gfs.sh.ecf @@ -0,0 +1,270 @@ +#!/bin/ksh +################################################################################ +#### UNIX Script Documentation Block +# . . +# Script name: exglobal_enkf_fcst_fv3gfs.sh.ecf +# Script description: Run ensemble forecasts +# +# Author: Rahul Mahajan Org: NCEP/EMC Date: 2017-03-02 +# +# Abstract: This script runs ensemble forecasts serially one-after-another +# +# $Id$ +# +# Attributes: +# Language: POSIX shell +# Machine: WCOSS-Cray/Theia +# +#### +################################################################################ + +# Set environment. +export VERBOSE=${VERBOSE:-"YES"} +if [ $VERBOSE = "YES" ] ; then + echo $(date) EXECUTING $0 $* >&2 + set -x +fi + +# Directories. +pwd=$(pwd) +export NWPROD=${NWPROD:-$pwd} +export HOMEgfs=${HOMEgfs:-$NWPROD} +export FIX_DIR=${FIX_DIR:-$HOMEgfs/fix} +export FIX_AM=${FIX_AM:-$FIX_DIR/fix_am} +export DATA=${DATA:-$pwd/enkf_fcst.$$} +export COMIN=${COMIN:-$pwd} +export COMOUT=${COMOUT:-$COMIN} + +GSUFFIX=${GSUFFIX:-$SUFFIX} + +# Utilities +export NCP=${NCP:-"/bin/cp -p"} +export NMV=${NMV:-"/bin/mv"} +export NLN=${NLN:-"/bin/ln -sf"} +export ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} +export NDATE=${NDATE:-/$NWPROD/util/exec/ndate} + +# Scripts. +FORECASTSH=${FORECASTSH:-$HOMEgfs/scripts/exglobal_fcst_nemsfv3gfs.sh.ecf} + +# Enemble group, begin and end +ENSGRP=${ENSGRP:-1} +ENSBEG=${ENSBEG:-1} +ENSEND=${ENSEND:-1} + +# Model builds +export FCSTEXECDIR=${FCSTEXECDIR:-$HOMEgfs/sorc/fv3gfs.fd/BUILD/bin} +export FCSTEXEC=${FCSTEXEC:-fv3gfs.x} + +# Get DA specific diag table. +export PARM_FV3DIAG=${PARM_FV3DIAG:-$HOMEgfs/parm/parm_fv3diag} +export DIAG_TABLE=${DIAG_TABLE_ENKF:-${DIAG_TABLE:-$PARM_FV3DIAG/diag_table_da}} + +# Cycling and forecast hour specific parameters +export CDATE=${CDATE:-"2001010100"} +export CDUMP=${CDUMP:-"gdas"} + +# Re-run failed members, or entire group +RERUN_EFCSGRP=${RERUN_EFCSGRP:-"YES"} + +# Recenter flag and increment file prefix +RECENTER_ENKF=${RECENTER_ENKF:-"YES"} +export PREFIX_ATMINC=${PREFIX_ATMINC:-""} + +# Ops related stuff +SENDECF=${SENDECF:-"NO"} +SENDDBN=${SENDDBN:-"NO"} + +################################################################################ +# Preprocessing +mkdata=NO +if [ ! -d $DATA ]; then + mkdata=YES + mkdir -p $DATA +fi +cd $DATA || exit 99 +DATATOP=$DATA + +################################################################################ +# Set output data +cymd=$(echo $CDATE | cut -c1-8) +chh=$(echo $CDATE | cut -c9-10) +EFCSGRP=$COMOUT/efcs.grp${ENSGRP} +if [ -f $EFCSGRP ]; then + if [ $RERUN_EFCSGRP = "YES" ]; then + rm -f $EFCSGRP + else + echo "RERUN_EFCSGRP = $RERUN_EFCSGRP, will re-run FAILED members only!" + $NMV $EFCSGRP ${EFCSGRP}.fail + fi +fi + +################################################################################ +# Set namelist/model config options common to all members once + +# There are many many model namelist options +# Some are resolution (CASE) dependent, some depend on the model configuration +# and will need to be added here before $FORECASTSH is called +# For now assume that +# 1. the ensemble and the deterministic are same resolution +# 2. the ensemble runs with the same configuration as the deterministic + +# Model config option for Ensemble +export TYPE=${TYPE_ENKF:-${TYPE:-nh}} # choices: nh, hydro +export MONO=${MONO_ENKF:-${MONO:-non-mono}} # choices: mono, non-mono + +# fv_core_nml +export CASE=${CASE_ENKF:-${CASE:-C768}} +export layout_x=${layout_x_ENKF:-${layout_x:-8}} +export layout_y=${layout_y_ENKF:-${layout_y:-16}} +export LEVS=${LEVS_ENKF:-${LEVS:-64}} + +# nggps_diag_nml +# -------------- +# Edited by liaofan on 2020.06.01 +# Force EFSOI to run output the forecast with the lead times of 0, 6, 12, 18, 24, & 30 +#export FHOUT=${FHOUT_ENKF:-3} +export FHOUT=${FHOUT_EFSOI:-6} +export FHMIN=0 + +# model_configure +# --------------- +export DELTIM=${DELTIM_ENKF:-${DELTIM:-225}} + +# Edited by liaofan on 2020.06.01 +#export FHMAX=${FHMAX_ENKF:-9} +export FHMAX=${FHMAX_EFSOI:-30} + +export restart_interval=${restart_interval_ENKF:-${restart_interval:-6}} + +# gfs_physics_nml +export FHSWR=${FHSWR_ENKF:-${FHSWR:-3600.}} +export FHLWR=${FHLWR_ENKF:-${FHLWR:-3600.}} +export IEMS=${IEMS_ENKF:-${IEMS:-1}} +export ISOL=${ISOL_ENKF:-${ISOL:-2}} +export IAER=${IAER_ENKF:-${IAER:-111}} +export ICO2=${ICO2_ENKF:-${ICO2:-2}} +export cdmbgwd=${cdmbgwd_ENKF:-${cdmbgwd:-"3.5,0.25"}} +export dspheat=${dspheat_ENKF:-${dspheat:-".true."}} + +# Edited by liaofan on 2020.06.01 +#export shal_cnv=${shal_cnv_ENKF:-${shal_cnv:-".true."}} +export shal_cnv=${shal_cnv_ENKF:-${shal_cnv:-".false."}} + +export FHZER=${FHZER_ENKF:-${FHZER:-6}} +export FHCYC=${FHCYC_ENKF:-${FHCYC:-6}} + +# Set PREFIX_ATMINC to r when recentering on +if [ $RECENTER_ENKF = "YES" ]; then + export PREFIX_ATMINC="r" +fi + +# APRUN for different executables +export APRUN_FV3=${APRUN_FV3:-${APRUN:-""}} +export NTHREADS_FV3=${NTHREADS_FV3:-${NTHREADS:-1}} + +################################################################################ +# Run forecast for ensemble member +rc=0 +for imem in $(seq $ENSBEG $ENSEND); do + + cd $DATATOP + + cmem=$(printf %03i $imem) + memchar="mem$cmem" + + echo "Processing MEMBER: $cmem" + + ra=0 + + skip_mem="NO" + if [ -f ${EFCSGRP}.fail ]; then + memstat=$(cat ${EFCSGRP}.fail | grep "MEMBER $cmem" | grep "PASS" | wc -l) + [[ $memstat -eq 1 ]] && skip_mem="YES" + fi + + # Running FV3GFS (liaofan on 2020.06.01) + if [ $skip_mem = "NO" ]; then + + ra=0 + + export MEMBER=$imem + export DATA=$DATATOP/$memchar + if [ -d $DATA ]; then rm -rf $DATA; fi + $FORECASTSH + ra=$? + + # Notify a member forecast failed, freeze epos, but continue on to next member + if [ $ra -ne 0 ]; then + msg="forecast of member $cmem FAILED" + print $msg + [[ $SENDECF = "YES" ]] && ecflow_client --abort=$msg + fi + + ((rc+=ra)) + + fi + + + if [ $SENDDBN = YES ]; then + fhr=$FHOUT + while [ $fhr -le $FHMAX ]; do + FH3=$(printf %03i $fhr) + if [ $(expr $fhr % 3) -eq 0 ]; then + $DBNROOT/bin/dbn_alert MODEL GFS_ENKF $job $COMOUT/$memchar/${CDUMP}.t${cyc}z.sfcf${FH3}.${GSUFFIX} + fi + fhr=$((fhr+FHOUT)) + done + fi + + cd $DATATOP + + $NCP $EFCSGRP log_old + rm log log_new + if [ $ra -ne 0 ]; then + echo "MEMBER $cmem : FAIL" > log + else + echo "MEMBER $cmem : PASS" > log + fi + cat log_old log > log_new + $NCP log_new $EFCSGRP + +done + +################################################################################ +# Echo status of ensemble group +cd $DATATOP +echo "Status of ensemble members in group $ENSGRP:" +cat $EFCSGRP +rm ${EFCSGRP}.fail + +################################################################################ +# If any members failed, error out +export ERR=$rc +export err=$ERR +$ERRSCRIPT || exit 2 + +################################################################################ +# Postprocessing +cd $pwd + +# +echo " ====== added by liaofan on 2020.04.27 ======" +echo $pwd + +cd $DATATOP +cd ../../.. +mkdir -p ${CDATE}_liaofan +mkdir -p ${CDATE}_liaofan/${CDUMP} +cp -ir $DATATOP ${DATATOP}_liaofan_from_exglobal_efsoi_fcst_fv3gfs_sh_ecf +cp -u -ir ${CDATE}/gdas/*_liaofan_from_exglobal_efsoi_fcst_fv3gfs_sh_ecf ${CDATE}_liaofan/gdas/ +echo " ============================================" + + +# +[[ $mkdata = "YES" ]] && rm -rf $DATATOP +set +x +if [ $VERBOSE = "YES" ] ; then + echo $(date) EXITING $0 with return code $err >&2 +fi +exit $err diff --git a/scripts/exglobal_efsoi_post_fv3gfs.sh.ecf b/scripts/exglobal_efsoi_post_fv3gfs.sh.ecf new file mode 100755 index 00000000000..a664a95ca38 --- /dev/null +++ b/scripts/exglobal_efsoi_post_fv3gfs.sh.ecf @@ -0,0 +1,211 @@ +#!/bin/ksh +################################################################################ +#### UNIX Script Documentation Block +# . . +# Script name: exglobal_enkf_post_fv3gfs.sh.ecf +# Script description: Global ensemble forecast post processing +# +# Author: Rahul Mahajan Org: NCEP/EMC Date: 2017-03-02 +# +# Abstract: This script post-processes global ensemble forecast output +# +# $Id$ +# +# Attributes: +# Language: POSIX shell +# Machine: WCOSS-Cray/Theia +# +################################################################################ + +# Set environment. +VERBOSE=${VERBOSE:-"YES"} +if [ $VERBOSE = "YES" ]; then + echo $(date) EXECUTING $0 $* >&2 + set -x +fi + +# Directories. +pwd=$(pwd) +NWPROD=${NWPROD:-$pwd} +HOMEgsi=${HOMEgsi:-$NWPROD} +FIXgsi=${FIXgsi:-$HOMEgsi/fix} +DATA=${DATA:-$pwd} +COMIN=${COMIN:-$pwd} +COMOUT=${COMOUT:-$COMIN} + +# Utilities +ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} +NCP=${NCP:-"/bin/cp"} +NLN=${NLN:-"/bin/ln -sf"} + +APRUN_EPOS=${APRUN_EPOS:-${APRUN:-""}} +NTHREADS_EPOS=${NTHREADS_EPOS:-1} + +# Ops stuff +SENDDBN=${SENDDBN:-"NO"} + +# Fix files +LEVS=${LEVS:-64} +HYBENSMOOTH=${HYBENSMOOTH:-$FIXgsi/global_hybens_smoothinfo.l${LEVS}.txt} + +# Executables. +GETATMENSMEANEXEC=${GETATMENSMEANEXEC:-$HOMEgsi/exec/getsigensmeanp_smooth.x} +GETSFCENSMEANEXEC=${GETSFCENSMEANEXEC:-$HOMEgsi/exec/getsfcensmeanp.x} + +# Other variables. +PREFIX=${PREFIX:-""} +SUFFIX=${SUFFIX:-""} + +# Edited by liaofan on 2020.06.03 +#FHMIN=${FHMIN_EPOS:-3} +#FHMAX=${FHMAX_EPOS:-9} +#FHOUT=${FHOUT_EPOS:-3} +FHMIN=${FHMIN_EPOS:-0} +FHMAX=${FHMAX_EPOS:-30} +FHOUT=${FHOUT_EPOS:-6} + +# === added by liaofan on 2020.06.04 === +# Thwere will be a bug "seq 0 0 0". Thus, I force FHOUT=1 for f000. +if [[ $FHOUT -eq 0 ]]; then + FHOUT=1 +fi +# ====================================== + +NMEM_ENKF=${NMEM_ENKF:-80} +SMOOTH_ENKF=${SMOOTH_ENKF:-"NO"} +ENKF_SPREAD=${ENKF_SPREAD:-"NO"} + +################################################################################ +# Preprocessing +mkdata=NO +if [ ! -d $DATA ]; then + mkdata=YES + mkdir -p $DATA +fi +cd $DATA || exit 99 + +ENKF_SUFFIX="s" +[[ $SMOOTH_ENKF = "NO" ]] && ENKF_SUFFIX="" + +################################################################################ +# Copy executables to working directory +$NCP $GETSFCENSMEANEXEC $DATA +$NCP $GETATMENSMEANEXEC $DATA + +export OMP_NUM_THREADS=$NTHREADS_EPOS + +################################################################################ +# Forecast ensemble member files +for imem in $(seq 1 $NMEM_ENKF); do + memchar="mem"$(printf %03i $imem) + + for fhr in $(seq $FHMIN $FHOUT $FHMAX); do + fhrchar=$(printf %03i $fhr) + $NLN $COMIN/$memchar/${PREFIX}sfcf$fhrchar${SUFFIX} sfcf${fhrchar}_$memchar + $NLN $COMIN/$memchar/${PREFIX}atmf$fhrchar${SUFFIX} atmf${fhrchar}_$memchar + done +done + +# Forecast ensemble mean and smoothed files +for fhr in $(seq $FHMIN $FHOUT $FHMAX); do + fhrchar=$(printf %03i $fhr) + $NLN $COMOUT/${PREFIX}sfcf${fhrchar}.ensmean${SUFFIX} sfcf${fhrchar}.ensmean + $NLN $COMOUT/${PREFIX}atmf${fhrchar}.ensmean${SUFFIX} atmf${fhrchar}.ensmean + if [ $SMOOTH_ENKF = "YES" ]; then + for imem in $(seq 1 $NMEM_ENKF); do + memchar="mem"$(printf %03i $imem) + $NLN $COMOUT/$memchar/${PREFIX}atmf${fhrchar}${ENKF_SUFFIX}${SUFFIX} atmf${fhrchar}${ENKF_SUFFIX}_$memchar + done + fi + [[ $ENKF_SPREAD = "YES" ]] && $NLN $COMOUT/${PREFIX}atmf${fhrchar}.ensspread${SUFFIX} atmf${fhrchar}.ensspread +done + +################################################################################ +# Generate ensemble mean surface and atmospheric files + +rm ./hybens_smoothinfo +[[ $SMOOTH_ENKF = "YES" ]] && $NCP $HYBENSMOOTH ./hybens_smoothinfo + +rc=0 +for fhr in $(seq $FHMIN $FHOUT $FHMAX); do + fhrchar=$(printf %03i $fhr) + $APRUN_EPOS ${DATA}/$(basename $GETSFCENSMEANEXEC) ./ sfcf${fhrchar}.ensmean sfcf${fhrchar} $NMEM_ENKF + ra=$? + ((rc+=ra)) + if [ $ENKF_SPREAD = "YES" ]; then + $APRUN_EPOS ${DATA}/$(basename $GETATMENSMEANEXEC) ./ atmf${fhrchar}.ensmean atmf${fhrchar} $NMEM_ENKF atmf${fhrchar}.ensspread + else + $APRUN_EPOS ${DATA}/$(basename $GETATMENSMEANEXEC) ./ atmf${fhrchar}.ensmean atmf${fhrchar} $NMEM_ENKF + fi + ra=$? + ((rc+=ra)) +done + +export ERR=$rc +export err=$ERR +$ERRSCRIPT || exit 2 + +################################################################################ +# If smoothing on but no smoothing output, copy smoothed ensemble atmospheric files +if [ $SMOOTH_ENKF = "YES" ]; then + for fhr in $(seq $FHMIN $FHOUT $FHMAX); do + fhrchar=$(printf %03i $fhr) + if [ ! -s atmf${fhrchar}${ENKF_SUFFIX}_mem001 ]; then + echo WARNING! no smoothed ensemble member for fhour = $fhrchar >&2 + for imem in $(seq 1 $NMEM_ENKF); do + memchar="mem"$(printf %03i $imem) + $NCP atmf${fhrchar}_$memchar atmf${fhrchar}${ENKF_SUFFIX}_$memchar + done + fi + done +fi + +################################################################################ +# Send DBN alerts +if [ $SENDDBN = "YES" ]; then + + for fhr in $(seq $FHMIN $FHOUT $FHMAX); do + fhrchar=$(printf %03i $fhr) + if [ $(expr $fhr % 3) -eq 0 ]; then + if [ -s ./sfcf${fhrchar}.ensmean ]; then + $DBNROOT/bin/dbn_alert MODEL GFS_ENKF $job $COMOUT/${PREFIX}sfcf${fhrchar}.ensmean${SUFFIX} + fi + fi + done + +# Maintain gfs.v14 dbn_alerts of 6 and 9 hour EnKF forecasts + if [ $FHMIN -eq 6 -o $FHMIN -eq 9 ]; then + fhrchar=$(printf %03i $FHMIN) + for imem in $(seq 1 $NMEM_ENKF); do + memchar="mem"$(printf %03i $imem) + $DBNROOT/bin/dbn_alert MODEL GFS_ENKF $job $COMOUT/$memchar/${PREFIX}atmf${fhrchar}${ENKF_SUFFIX}${SUFFIX} + done + fi + +fi + +################################################################################ +# Postprocessing +cd $pwd + +# +echo " ====== added by liaofan on 2020.05.26 ======" +echo $pwd + +echo "date="$date + +cd $DATA +cd ../../.. +mkdir -p ${date}_liaofan +mkdir -p ${date}_liaofan/gdas +cp -ir $DATA ${DATA}_liaofan_from_exglobal_efsoi_post_fv3gfs_sh_ecf +cp -u -ir ${date}/gdas/*_liaofan_from_exglobal_efsoi_post_fv3gfs_sh_ecf ${date}_liaofan/gdas/ +echo " ============================================" + + +[[ $mkdata = "YES" ]] && rm -rf $DATA +set +x +if [ $VERBOSE = "YES" ]; then + echo $(date) EXITING $0 with return code $err >&2 +fi +exit $err diff --git a/scripts/exglobal_efsoi_recenter_fv3gfs.sh.ecf b/scripts/exglobal_efsoi_recenter_fv3gfs.sh.ecf new file mode 100755 index 00000000000..35a72d048e1 --- /dev/null +++ b/scripts/exglobal_efsoi_recenter_fv3gfs.sh.ecf @@ -0,0 +1,437 @@ +#!/bin/ksh +################################################################################ +#### UNIX Script Documentation Block +# . . +# Script name: exglobal_enkf_recenter_fv3gfs.sh.ecf +# Script description: recenter ensemble around hi-res deterministic analysis +# +# Author: Rahul Mahajan Org: NCEP/EMC Date: 2017-03-02 +# +# Abstract: This script recenters ensemble around hi-res deterministic analysis +# +# $Id$ +# +# Attributes: +# Language: POSIX shell +# Machine: WCOSS-Cray/Theia +# +################################################################################ + +# Set environment. +VERBOSE=${VERBOSE:-"YES"} +if [ $VERBOSE = "YES" ]; then + echo $(date) EXECUTING $0 $* >&2 + set -x +fi + +# Directories. +pwd=$(pwd) +export NWPROD=${NWPROD:-$pwd} +export HOMEgfs=${HOMEgfs:-$NWPROD} +HOMEgsi=${HOMEgsi:-$NWPROD} +export DATA=${DATA:-$pwd} +COMIN=${COMIN:-$pwd} +COMIN_ENS=${COMIN_ENS:-$COMIN} +COMIN_OBS=${COMIN_OBS:-$COMIN} +COMIN_GES=${COMIN_GES:-$COMIN} +COMIN_GES_ENS=${COMIN_GES_ENS:-$COMIN_ENS} +COMIN_GES_OBS=${COMIN_GES_OBS:-$COMIN_GES} +COMOUT=${COMOUT:-$COMIN} +COMOUT_ENS=${COMOUT_ENS:-$COMIN_ENS} + +CDATE=${CDATE:-"2010010100"} +DONST=${DONST:-"NO"} + +export CASE=${CASE:-384} +ntiles=${ntiles:-6} + +# Utilities +ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} +NCP=${NCP:-"/bin/cp -p"} +NLN=${NLN:-"/bin/ln -sf"} +NEMSIOGET=${NEMSIOGET:-${NWPROD}/exec/nemsio_get} +NCLEN=${NCLEN:-$HOMEgfs/ush/getncdimlen} + +# Scripts + +# Executables. +GETATMENSMEANEXEC=${GETATMENSMEANEXEC:-$HOMEgsi/exec/getsigensmeanp_smooth.x} +GETSFCENSMEANEXEC=${GETSFCENSMEANEXEC:-$HOMEgsi/exec/getsfcensmeanp.x} +RECENATMEXEC=${RECENATMEXEC:-$HOMEgsi/exec/recentersigp.x} +CALCINCNEMSEXEC=${CALCINCNEMSEXEC:-$HOMEgsi/exec/calc_increment_ens.x} +CALCINCNCEXEC=${CALCINCEXEC:-$HOMEgsi/exec/calc_increment_ens_ncio.x} + +# Files. +OPREFIX=${OPREFIX:-""} +OSUFFIX=${OSUFFIX:-""} +APREFIX=${APREFIX:-""} +APREFIX_ENKF=${APREFIX_ENKF:-$APREFIX} +ASUFFIX=${ASUFFIX:-$SUFFIX} +GPREFIX=${GPREFIX:-""} +GSUFFIX=${GSUFFIX:-$SUFFIX} + +# Variables +NMEM_ENKF=${NMEM_ENKF:-80} +imp_physics=${imp_physics:-99} +INCREMENTS_TO_ZERO=${INCREMENTS_TO_ZERO:-"'NONE'"} +DOIAU=${DOIAU_ENKF:-"NO"} +FHMIN=${FHMIN_ECEN:-3} +FHMAX=${FHMAX_ECEN:-9} +FHOUT=${FHOUT_ECEN:-3} +FHSFC=${FHSFC_ECEN:-$FHMIN} +DO_CALC_INCREMENT=${DO_CALC_INCREMENT:-"NO"} + + +# global_chgres stuff +CHGRESNEMS=${CHGRESNEMS:-$HOMEgfs/exec/chgres_recenter.exe} +CHGRESNC=${CHGRESNC:-$HOMEgfs/exec/chgres_recenter_ncio.exe} +NTHREADS_CHGRES=${NTHREADS_CHGRES:-24} +APRUN_CHGRES=${APRUN_CHGRES:-""} + +# global_cycle stuff +CYCLESH=${CYCLESH:-$HOMEgfs/ush/global_cycle.sh} +export CYCLEXEC=${CYCLEXEC:-$HOMEgfs/exec/global_cycle} +APRUN_CYCLE=${APRUN_CYCLE:-${APRUN:-""}} +NTHREADS_CYCLE=${NTHREADS_CYCLE:-${NTHREADS:-1}} +export FIXfv3=${FIXfv3:-$HOMEgfs/fix/fix_fv3_gmted2010} +export FIXgsm=${FIXgsm:-$HOMEgfs/fix/fix_am} +export CYCLVARS=${CYCLVARS:-"FSNOL=-2.,FSNOS=99999.,"} +export FHOUR=${FHOUR:-0} +export DELTSFC=${DELTSFC:-6} + + +RECENTER_ENKF=${RECENTER_ENKF:-"YES"} +SMOOTH_ENKF=${SMOOTH_ENKF:-"YES"} + +APRUN_ECEN=${APRUN_ECEN:-${APRUN:-""}} +NTHREADS_ECEN=${NTHREADS_ECEN:-${NTHREADS:-1}} +APRUN_CALCINC=${APRUN_CALCINC:-${APRUN:-""}} +NTHREADS_CALCINC=${NTHREADS_CALCINC:-${NTHREADS:-1}} + +################################################################################ +# Preprocessing +mkdata=NO +if [ ! -d $DATA ]; then + mkdata=YES + mkdir -p $DATA +fi +cd $DATA || exit 99 + +ENKF_SUFFIX="s" +[[ $SMOOTH_ENKF = "NO" ]] && ENKF_SUFFIX="" + +################################################################################ +# Link ensemble member guess, analysis and increment files +for FHR in $(seq $FHMIN $FHOUT $FHMAX); do + +for imem in $(seq 1 $NMEM_ENKF); do + memchar="mem"$(printf %03i $imem) + $NLN $COMIN_GES_ENS/$memchar/${GPREFIX}atmf00${FHR}${ENKF_SUFFIX}$GSUFFIX ./atmges_$memchar + if [ $DO_CALC_INCREMENT = "YES" ]; then + if [ $FHR -eq 6 ]; then + $NLN $COMIN_ENS/$memchar/${APREFIX_ENKF}atmanl$ASUFFIX ./atmanl_$memchar + else + $NLN $COMIN_ENS/$memchar/${APREFIX_ENKF}atma00${FHR}$ASUFFIX ./atmanl_$memchar + fi + fi + mkdir -p $COMOUT_ENS/$memchar + if [ $FHR -eq 6 ]; then + $NLN $COMOUT_ENS/$memchar/${APREFIX}atminc.nc ./atminc_$memchar + else + $NLN $COMOUT_ENS/$memchar/${APREFIX}atmi00${FHR}.nc ./atminc_$memchar + fi + if [[ $RECENTER_ENKF = "YES" ]]; then + if [ $DO_CALC_INCREMENT = "YES" ]; then + if [ $FHR -eq 6 ]; then + $NLN $COMOUT_ENS/$memchar/${APREFIX}ratmanl$ASUFFIX ./ratmanl_$memchar + else + $NLN $COMOUT_ENS/$memchar/${APREFIX}ratma00${FHR}$ASUFFIX ./ratmanl_$memchar + fi + else + if [ $FHR -eq 6 ]; then + $NLN $COMOUT_ENS/$memchar/${APREFIX}ratminc$ASUFFIX ./ratminc_$memchar + else + $NLN $COMOUT_ENS/$memchar/${APREFIX}ratmi00${FHR}$ASUFFIX ./ratminc_$memchar + fi + fi + fi +done + +if [ $DO_CALC_INCREMENT = "YES" ]; then + # Link ensemble mean analysis + if [ $FHR -eq 6 ]; then + $NLN $COMIN_ENS/${APREFIX_ENKF}atmanl.ensmean$ASUFFIX ./atmanl_ensmean + else + $NLN $COMIN_ENS/${APREFIX_ENKF}atma00${FHR}.ensmean$ASUFFIX ./atmanl_ensmean + fi + + # Compute ensemble mean analysis + DATAPATH="./" + ATMANLNAME="atmanl" + ATMANLMEANNAME="atmanl_ensmean" + + export OMP_NUM_THREADS=$NTHREADS_ECEN + + $NCP $GETATMENSMEANEXEC $DATA + $APRUN_ECEN ${DATA}/$(basename $GETATMENSMEANEXEC) $DATAPATH $ATMANLMEANNAME $ATMANLNAME $NMEM_ENKF + rc=$? + + export ERR=$rc + export err=$ERR + $ERRSCRIPT || exit 2 +else + # Link ensemble mean increment + if [ $FHR -eq 6 ]; then + $NLN $COMIN_ENS/${APREFIX_ENKF}atminc.ensmean$ASUFFIX ./atminc_ensmean + else + $NLN $COMIN_ENS/${APREFIX_ENKF}atmi00${FHR}.ensmean$ASUFFIX ./atminc_ensmean + fi + + # Compute ensemble mean increment + DATAPATH="./" + ATMINCNAME="atminc" + ATMINCMEANNAME="atminc_ensmean" + + export OMP_NUM_THREADS=$NTHREADS_ECEN + + $NCP $GETATMENSMEANEXEC $DATA + $APRUN_ECEN ${DATA}/$(basename $GETATMENSMEANEXEC) $DATAPATH $ATMINCMEANNAME $ATMINCNAME $NMEM_ENKF + rc=$? + + export ERR=$rc + export err=$ERR + $ERRSCRIPT || exit 2 + + # If available, link to ensemble mean guess. Otherwise, compute ensemble mean guess + if [ -s $COMIN_GES_ENS/${GPREFIX}atmf00${FHR}.ensmean$GSUFFIX ]; then + $NLN $COMIN_GES_ENS/${GPREFIX}atmf00${FHR}.ensmean$GSUFFIX ./atmges_ensmean + else + DATAPATH="./" + ATMGESNAME="atmges" + ATMGESMEANNAME="atmges_ensmean" + + export OMP_NUM_THREADS=$NTHREADS_ECEN + + $NCP $GETATMENSMEANEXEC $DATA + $APRUN_ECEN ${DATA}/$(basename $GETATMENSMEANEXEC) $DATAPATH $ATMGESMEANNAME $ATMGESNAME $NMEM_ENKF + rc=$? + + export ERR=$rc + export err=$ERR + $ERRSCRIPT || exit 2 + fi +fi + +if [ ${SUFFIX} = ".nc" ]; then + if [ $DO_CALC_INCREMENT = "YES" ]; then + LONB_ENKF=${LONB_ENKF:-$($NCLEN atmanl_ensmean grid_xt)} # get LONB + LATB_ENKF=${LATB_ENKF:-$($NCLEN atmanl_ensmean grid_yt)} # get LATB + LEVS_ENKF=${LEVS_ENKF:-$($NCLEN atmanl_ensmean pfull)} # get LEVS + else + LONB_ENKF=${LONB_ENKF:-$($NCLEN atminc_ensmean lon)} # get LONB + LATB_ENKF=${LATB_ENKF:-$($NCLEN atminc_ensmean lat)} # get LATB + LEVS_ENKF=${LEVS_ENKF:-$($NCLEN atminc_ensmean lev)} # get LEVS + fi + JCAP_ENKF=${JCAP_ENKF:--9999} # there is no jcap in these files +else + LONB_ENKF=${LONB_ENKF:-$($NEMSIOGET atmanl_ensmean dimx | awk '{print $2}')} + LATB_ENKF=${LATB_ENKF:-$($NEMSIOGET atmanl_ensmean dimy | awk '{print $2}')} + LEVS_ENKF=${LEVS_ENKF:-$($NEMSIOGET atmanl_ensmean dimz | awk '{print $2}')} + JCAP_ENKF=${JCAP_ENKF:-$($NEMSIOGET atmanl_ensmean jcap | awk '{print $2}')} +fi +[ $JCAP_ENKF -eq -9999 -a $LATB_ENKF -ne -9999 ] && JCAP_ENKF=$((LATB_ENKF-2)) +[ $LONB_ENKF -eq -9999 -o $LATB_ENKF -eq -9999 -o $LEVS_ENKF -eq -9999 -o $JCAP_ENKF -eq -9999 ] && exit -9999 + +################################################################################ +# This is to give the user the option to recenter, default is YES +if [ $RECENTER_ENKF = "YES" ]; then + + # GSI EnVar analysis + if [ $FHR -eq 6 ]; then + ATMANL_GSI=$COMIN/${APREFIX}atmanl$ASUFFIX + ATMANL_GSI_ENSRES=$COMIN/${APREFIX}atmanl.ensres$ASUFFIX + else + ATMANL_GSI=$COMIN/${APREFIX}atma00${FHR}$ASUFFIX + ATMANL_GSI_ENSRES=$COMIN/${APREFIX}atma00${FHR}.ensres$ASUFFIX + fi + + # if we already have a ensemble resolution GSI analysis then just link to it + if [ -f $ATMANL_GSI_ENSRES ]; then + + $NLN $ATMANL_GSI_ENSRES atmanl_gsi_ensres + + else + + $NLN $ATMANL_GSI atmanl_gsi + $NLN $ATMANL_GSI_ENSRES atmanl_gsi_ensres + SIGLEVEL=${SIGLEVEL:-${FIXgsm}/global_hyblev.l${LEVS}.txt} + if [ ${SUFFIX} = ".nc" ]; then + $NLN $CHGRESNC chgres.x + chgresnml=chgres_nc_gauss.nml + nmltitle=chgres + else + $NLN $CHGRESNEMS chgres.x + chgresnml=fort.43 + nmltitle=nam + fi + + export OMP_NUM_THREADS=$NTHREADS_CHGRES + + rm -f $chgresnml + cat > $chgresnml << EOF +&${nmltitle}_setup + i_output=$LONB_ENKF + j_output=$LATB_ENKF + input_file="atmanl_gsi" + output_file="atmanl_gsi_ensres" + terrain_file="atmanl_ensmean" + vcoord_file="$SIGLEVEL" +/ +EOF + cat $chgresnml + $APRUN_CHGRES ./chgres.x + rc=$? + + export ERR=$rc + export err=$ERR + $ERRSCRIPT || exit 3 + + fi + + if [ $DO_CALC_INCREMENT = "YES" ]; then + ################################################################################ + # Recenter ensemble member atmospheric analyses about hires analysis + + FILENAMEIN="atmanl" + FILENAME_MEANIN="atmanl_ensmean" # EnKF ensemble mean analysis + FILENAME_MEANOUT="atmanl_gsi_ensres" # recenter around GSI analysis at ensemble resolution + FILENAMEOUT="ratmanl" + + export OMP_NUM_THREADS=$NTHREADS_ECEN + + $NCP $RECENATMEXEC $DATA + $APRUN_ECEN ${DATA}/$(basename $RECENATMEXEC) $FILENAMEIN $FILENAME_MEANIN $FILENAME_MEANOUT $FILENAMEOUT $NMEM_ENKF + rc=$? + + export ERR=$rc + export err=$ERR + $ERRSCRIPT || exit 2 + + # Optionally alert recentered files + if [ ${SENDDBN:-"NO"} = "YES" ]; then + for imem in $(seq 1 $NMEM_ENKF); do + memchar="mem"$(printf %03i $imem) + $DBNROOT/bin/dbn_alert MODEL GFS_ENKF $job $COMOUT_ENS/$memchar/${APREFIX}ratmanl$ASUFFIX + done + fi + else + ################################################################################ + # Recenter ensemble member atmospheric increments about hires analysis + + FILENAMEIN="atminc" + FILENAME_INCMEANIN="atminc_ensmean" # EnKF ensemble mean increment + FILENAME_GESMEANIN="atmges_ensmean" # EnKF ensemble mean guess + FILENAME_GSIDET="atmanl_gsi_ensres" # recenter around GSI analysis at ensemble resolution + FILENAMEOUT="ratminc" + + export OMP_NUM_THREADS=$NTHREADS_ECEN + + # make the small namelist file for incvars_to_zero + + rm recenter.nml + cat > recenter.nml << EOF +&recenter + incvars_to_zero = $INCREMENTS_TO_ZERO +/ +EOF +cat recenter.nml + + $NCP $RECENATMEXEC $DATA + $APRUN_ECEN ${DATA}/$(basename $RECENATMEXEC) $FILENAMEIN $FILENAME_INCMEANIN $FILENAME_GSIDET $FILENAMEOUT $NMEM_ENKF $FILENAME_GESMEANIN + rc=$? + + export ERR=$rc + export err=$ERR + $ERRSCRIPT || exit 2 + + # Optionally alert recentered files + if [ ${SENDDBN:-"NO"} = "YES" ]; then + for imem in $(seq 1 $NMEM_ENKF); do + memchar="mem"$(printf %03i $imem) + $DBNROOT/bin/dbn_alert MODEL GFS_ENKF $job $COMOUT_ENS/$memchar/${APREFIX}ratminc$ASUFFIX + done + fi + fi +fi + +################################################################################ +# Calculate ensemble analysis increment +if [ $DO_CALC_INCREMENT = "YES" ]; then + if [ $RECENTER_ENKF = "YES" ]; then + ATMANLNAME='ratmanl' + else + ATMANLNAME='atmanl' + fi + + export OMP_NUM_THREADS=$NTHREADS_CALCINC + if [ ${SUFFIX} = ".nc" ]; then + + CALCINCEXEC=$CALCINCNCEXEC + else + CALCINCEXEC=$CALCINCNEMSEXEC + fi + $NCP $CALCINCEXEC $DATA + + rm calc_increment.nml + cat > calc_increment.nml << EOF +&setup + datapath = './' + analysis_filename = '$ATMANLNAME' + firstguess_filename = 'atmges' + increment_filename = 'atminc' + debug = .false. + nens = $NMEM_ENKF + imp_physics = $imp_physics +/ +&zeroinc + incvars_to_zero = $INCREMENTS_TO_ZERO +/ +EOF +cat calc_increment.nml + + $APRUN_CALCINC ${DATA}/$(basename $CALCINCEXEC) + rc=$? + + export ERR=$rc + export err=$rc + $ERRSCRIPT || exit 4 +fi +done # loop over analysis times in window + +################################################################################ + +################################################################################ +# Postprocessing +cd $pwd + +# ========================================= +echo "=== edited by liaofan (2020.05.18) =======" +pwd + +cd $DATA +cd ../../.. +mkdir -p ${CDATE}_liaofan +mkdir -p ${CDATE}_liaofan/gdas +cp -ir $DATA ${DATA}_liaofan_from_exglobal_efsoi_recenter_fv3gfs_sh_ecf +cp -u -ir ${CDATE}/gdas/*_liaofan_from_exglobal_efsoi_recenter_fv3gfs_sh_ecf ${CDATE}_liaofan/gdas/ +echo "=========================================" +# ========================================== +# +# +# +[[ $mkdata = "YES" ]] && rm -rf $DATA +set +x +if [ $VERBOSE = "YES" ]; then + echo $(date) EXITING $0 with return code $err >&2 +fi +exit $err diff --git a/scripts/exglobal_efsoi_surface_fv3gfs.sh.ecf b/scripts/exglobal_efsoi_surface_fv3gfs.sh.ecf new file mode 100755 index 00000000000..beb1781f8ba --- /dev/null +++ b/scripts/exglobal_efsoi_surface_fv3gfs.sh.ecf @@ -0,0 +1,241 @@ +#!/bin/ksh +################################################################################ +#### UNIX Script Documentation Block +# . . +# Script name: exglobal_enkf_surface_fv3gfs.sh.ecf +# Script description: generate ensemble surface analyses on tiles +# +# Author: Rahul Mahajan Org: NCEP/EMC Date: 2017-03-02 +# +# Abstract: This script generates ensemble surface analyses on tiles +# +# $Id$ +# +# Attributes: +# Language: POSIX shell +# Machine: WCOSS-Cray/Theia +# +################################################################################ + +# Set environment. +VERBOSE=${VERBOSE:-"YES"} +if [ $VERBOSE = "YES" ]; then + echo $(date) EXECUTING $0 $* >&2 + set -x +fi + +# Directories. +pwd=$(pwd) +export NWPROD=${NWPROD:-$pwd} +export HOMEgfs=${HOMEgfs:-$NWPROD} +HOMEgsi=${HOMEgsi:-$NWPROD} +export DATA=${DATA:-$pwd} +COMIN=${COMIN:-$pwd} +COMIN_ENS=${COMIN_ENS:-$COMIN} +COMIN_OBS=${COMIN_OBS:-$COMIN} +COMIN_GES=${COMIN_GES:-$COMIN} +COMIN_GES_ENS=${COMIN_GES_ENS:-$COMIN_ENS} +COMIN_GES_OBS=${COMIN_GES_OBS:-$COMIN_GES} +COMOUT=${COMOUT:-$COMIN} +COMOUT_ENS=${COMOUT_ENS:-$COMIN_ENS} + +CDATE=${CDATE:-"2010010100"} +DONST=${DONST:-"NO"} +DOSFCANL_ENKF=${DOSFCANL_ENKF:-"YES"} + +export CASE=${CASE:-384} +ntiles=${ntiles:-6} + +# Utilities +ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} +NCP=${NCP:-"/bin/cp -p"} +NLN=${NLN:-"/bin/ln -sf"} +NEMSIOGET=${NEMSIOGET:-${NWPROD}/exec/nemsio_get} +NCLEN=${NCLEN:-$HOMEgfs/ush/getncdimlen} + +# Scripts + +# Executables. + +# Files. +OPREFIX=${OPREFIX:-""} +OSUFFIX=${OSUFFIX:-""} +APREFIX=${APREFIX:-""} +APREFIX_ENKF=${APREFIX_ENKF:-$APREFIX} +ASUFFIX=${ASUFFIX:-$SUFFIX} +GPREFIX=${GPREFIX:-""} +GSUFFIX=${GSUFFIX:-$SUFFIX} + +# Variables +NMEM_ENKF=${NMEM_ENKF:-80} +DOIAU=${DOIAU_ENKF:-"NO"} + +# Global_cycle stuff +CYCLESH=${CYCLESH:-$HOMEgfs/ush/global_cycle.sh} +export CYCLEXEC=${CYCLEXEC:-$HOMEgfs/exec/global_cycle} +APRUN_CYCLE=${APRUN_CYCLE:-${APRUN:-""}} +NTHREADS_CYCLE=${NTHREADS_CYCLE:-${NTHREADS:-1}} +export FIXfv3=${FIXfv3:-$HOMEgfs/fix/fix_fv3_gmted2010} +export FIXgsm=${FIXgsm:-$HOMEgfs/fix/fix_am} +export CYCLVARS=${CYCLVARS:-"FSNOL=-2.,FSNOS=99999.,"} +export FHOUR=${FHOUR:-0} +export DELTSFC=${DELTSFC:-6} + +APRUN_ESFC=${APRUN_ESFC:-${APRUN:-""}} +NTHREADS_ESFC=${NTHREADS_ESFC:-${NTHREADS:-1}} + + +################################################################################ +# Preprocessing +mkdata=NO +if [ ! -d $DATA ]; then + mkdata=YES + mkdir -p $DATA +fi +cd $DATA || exit 99 + + +################################################################################ +# Update surface fields in the FV3 restart's using global_cycle. + +PDY=$(echo $CDATE | cut -c1-8) +cyc=$(echo $CDATE | cut -c9-10) + +GDATE=$($NDATE -$assim_freq $CDATE) +gPDY=$(echo $GDATE | cut -c1-8) +gcyc=$(echo $GDATE | cut -c9-10) +GDUMP=${GDUMP:-"gdas"} + +BDATE=$($NDATE -3 $CDATE) +bPDY=$(echo $BDATE | cut -c1-8) +bcyc=$(echo $BDATE | cut -c9-10) + +# Get dimension information based on CASE +res=$(echo $CASE | cut -c2-) +JCAP_CASE=$((res*2-2)) +LATB_CASE=$((res*2)) +LONB_CASE=$((res*4)) + +# Global cycle requires these files +export FNTSFA=${FNTSFA:-' '} +export FNACNA=${FNACNA:-$COMIN_OBS/${OPREFIX}seaice.5min.blend.grb} +export FNSNOA=${FNSNOA:-$COMIN_OBS/${OPREFIX}snogrb_t${JCAP_CASE}.${LONB_CASE}.${LATB_CASE}} +[[ ! -f $FNSNOA ]] && export FNSNOA="$COMIN_OBS/${OPREFIX}snogrb_t1534.3072.1536" +FNSNOG=${FNSNOG:-$COMIN_GES_OBS/${GPREFIX}snogrb_t${JCAP_CASE}.${LONB_CASE}.${LATB_CASE}} +[[ ! -f $FNSNOG ]] && FNSNOG="$COMIN_GES_OBS/${GPREFIX}snogrb_t1534.3072.1536" + +# Set CYCLVARS by checking grib date of current snogrb vs that of prev cycle +if [ ${RUN_GETGES:-"NO"} = "YES" ]; then + snoprv=$($GETGESSH -q -t snogrb_$JCAP_CASE -e $gesenvir -n $GDUMP -v $GDATE) +else + snoprv=${snoprv:-$FNSNOG} +fi + +if [ $($WGRIB -4yr $FNSNOA 2>/dev/null | grep -i snowc | awk -F: '{print $3}' | awk -F= '{print $2}') -le \ + $($WGRIB -4yr $snoprv 2>/dev/null | grep -i snowc | awk -F: '{print $3}' | awk -F= '{print $2}') ] ; then + export FNSNOA=" " + export CYCLVARS="FSNOL=99999.,FSNOS=99999.," +else + export SNOW_NUDGE_COEFF=${SNOW_NUDGE_COEFF:-0.} + export CYCLVARS="FSNOL=${SNOW_NUDGE_COEFF},$CYCLVARS" +fi + +if [ $DONST = "YES" ]; then + export NST_ANL=".true." + export GSI_FILE=${GSI_FILE:-$COMIN/${APREFIX}dtfanl.nc} +else + export NST_ANL=".false." + export GSI_FILE="NULL" +fi + +export APRUNCY=${APRUN_CYCLE:-$APRUN_ESFC} +export OMP_NUM_THREADS_CY=${NTHREADS_CYCLE:-$NTHREADS_ESFC} +export MAX_TASKS_CY=$NMEM_ENKF + +if [ $DOIAU = "YES" ]; then + # Update surface restarts at beginning of window when IAU is ON + # For now assume/hold dtfanl.nc is valid at beginning of window. + + for n in $(seq 1 $ntiles); do + + export TILE_NUM=$n + + for imem in $(seq 1 $NMEM_ENKF); do + + cmem=$(printf %03i $imem) + memchar="mem$cmem" + + [[ $TILE_NUM -eq 1 ]] && mkdir -p $COMOUT_ENS/$memchar/RESTART + + $NLN $COMIN_GES_ENS/$memchar/RESTART/$bPDY.${bcyc}0000.sfc_data.tile${n}.nc $DATA/fnbgsi.$cmem + $NLN $COMOUT_ENS/$memchar/RESTART/$bPDY.${bcyc}0000.sfcanl_data.tile${n}.nc $DATA/fnbgso.$cmem + $NLN $FIXfv3/$CASE/${CASE}_grid.tile${n}.nc $DATA/fngrid.$cmem + $NLN $FIXfv3/$CASE/${CASE}_oro_data.tile${n}.nc $DATA/fnorog.$cmem + + done + + $CYCLESH + rc=$? + export ERR=$rc + export err=$ERR + $ERRSCRIPT || exit 11 + + done + +fi + +if [ $DOSFCANL_ENKF = "YES" ]; then + for n in $(seq 1 $ntiles); do + + export TILE_NUM=$n + + for imem in $(seq 1 $NMEM_ENKF); do + + cmem=$(printf %03i $imem) + memchar="mem$cmem" + + [[ $TILE_NUM -eq 1 ]] && mkdir -p $COMOUT_ENS/$memchar/RESTART + + $NLN $COMIN_GES_ENS/$memchar/RESTART/$PDY.${cyc}0000.sfc_data.tile${n}.nc $DATA/fnbgsi.$cmem + $NLN $COMOUT_ENS/$memchar/RESTART/$PDY.${cyc}0000.sfcanl_data.tile${n}.nc $DATA/fnbgso.$cmem + $NLN $FIXfv3/$CASE/${CASE}_grid.tile${n}.nc $DATA/fngrid.$cmem + $NLN $FIXfv3/$CASE/${CASE}_oro_data.tile${n}.nc $DATA/fnorog.$cmem + + done + + $CYCLESH + rc=$? + export ERR=$rc + export err=$ERR + $ERRSCRIPT || exit 11 + + done +fi + +################################################################################ + +################################################################################ +# Postprocessing +cd $pwd + +# ========================================= +echo "=== edited by liaofan (2020.05.18) =======" +pwd + +cd $DATA +cd ../../.. +mkdir -p ${CDATE}_liaofan +mkdir -p ${CDATE}_liaofan/${GDUMP} +cp -ir $DATA ${DATA}_liaofan_from_exglobal_efsoi_surface_fv3gfs_sh_ecf +cp -u -ir ${CDATE}/gdas/*_liaofan_from_exglobal_efsoi_surface_fv3gfs_sh_ecf ${CDATE}_liaofan/gdas/ +echo "=========================================" +# ========================================== + + + +[[ $mkdata = "YES" ]] && rm -rf $DATA +set +x +if [ $VERBOSE = "YES" ]; then + echo $(date) EXITING $0 with return code $err >&2 +fi +exit $err diff --git a/scripts/exglobal_efsoi_update_fv3gfs.sh.ecf b/scripts/exglobal_efsoi_update_fv3gfs.sh.ecf new file mode 100755 index 00000000000..01dd1c65df9 --- /dev/null +++ b/scripts/exglobal_efsoi_update_fv3gfs.sh.ecf @@ -0,0 +1,437 @@ +#!/bin/ksh +################################################################################ +#### UNIX Script Documentation Block +# . +# . +# Script name: exglobal_efsoi_update_fv3gfs.sh.ecf +# Script description: modified from exglobal_enkf_update_fv3gfs.sh.ecf +# +# Author: Rahul Mahajan Org: NCEP/EMC Date: 2017-03-02 +# +# Abstract: This script runs the global_efsoi update +# +# $Id$ +# +# Attributes: +# Language: POSIX shell +# Machine: WCOSS-Cray/Theia +# +################################################################################ + +# Set environment. +VERBOSE=${VERBOSE:-"YES"} +if [ $VERBOSE = "YES" ] ; then + echo $(date) EXECUTING $0 $* >&2 + set -x +fi + +# Directories. +pwd=$(pwd) +NWPROD=${NWPROD:-$pwd} +HOMEgsi=${HOMEgsi:-$NWPROD} +FIXgsi=${FIXgsi:-$HOMEgsi/fix} +DATA=${DATA:-$pwd/enkf_update.$$} +COMIN=${COMIN:-$pwd} +COMIN_GES_ENS=${COMIN_GES_ENS:-$COMIN} +COMOUT=${COMOUT:-$COMIN} +COMOUT_ANL_ENS=${COMOUT_ANL_ENS:-$COMOUT} + +# Utilities +NCP=${NCP:-"/bin/cp -p"} +NLN=${NLN:-"/bin/ln -sf"} +ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} +NEMSIOGET=${NEMSIOGET:-$NWPROD/utils/exec/nemsio_get} +NCLEN=${NCLEN:-$HOMEgfs/ush/getncdimlen} +USE_CFP=${USE_CFP:-"NO"} +APRUNCFP=${APRUNCFP:-""} +APRUN_ENKF=${APRUN_ENKF:-${APRUN:-""}} +NTHREADS_ENKF=${NTHREADS_ENKF:-${NTHREADS:-1}} + +# Executables +ENKFEXEC=${ENKFEXEC:-$HOMEgsi/exec/global_enkf.x} + +# Cycling and forecast hour specific parameters +CDATE=${CDATE:-"2001010100"} + +# Filenames. +GPREFIX=${GPREFIX:-""} +GSUFFIX=${GSUFFIX:-$SUFFIX} +APREFIX=${APREFIX:-""} +ASUFFIX=${ASUFFIX:-$SUFFIX} + +SMOOTH_ENKF=${SMOOTH_ENKF:-"YES"} + +GBIASe=${GBIASe:-${APREFIX}abias_int.ensmean} +CNVSTAT=${CNVSTAT:-${APREFIX}cnvstat} +OZNSTAT=${OZNSTAT:-${APREFIX}oznstat} +RADSTAT=${RADSTAT:-${APREFIX}radstat} +ENKFSTAT=${ENKFSTAT:-${APREFIX}enkfstat} + +# Namelist parameters +USE_CORRELATED_OBERRS=${USE_CORRELATED_OBERRS:-"NO"} +NMEM_ENKF=${NMEM_ENKF:-80} +NAM_ENKF=${NAM_ENKF:-""} +SATOBS_ENKF=${SATOBS_ENKF:-""} +OZOBS_ENKF=${OZOBS_ENKF:-""} +use_correlated_oberrs=${use_correlated_oberrs:-".false."} +if [ $USE_CORRELATED_OBERRS == "YES" ]; then + use_correlated_oberrs=".true." +fi +imp_physics=${imp_physics:-"99"} +lupp=${lupp:-".true."} +corrlength=${corrlength:-1250} +lnsigcutoff=${lnsigcutoff:-2.5} +analpertwt=${analpertwt:-0.85} +readin_localization_enkf=${readin_localization_enkf:-".true."} +reducedgrid=${reducedgrid:-".true."} +letkf_flag=${letkf_flag:-".false."} +getkf=${getkf:-".false."} +denkf=${denkf:-".false."} +nobsl_max=${nobsl_max:-10000} +lobsdiag_forenkf=${lobsdiag_forenkf:-".false."} +write_spread_diag=${write_spread_diag:-".false."} +cnvw_option=${cnvw_option:-".false."} +netcdf_diag=${netcdf_diag:-".true."} +modelspace_vloc=${modelspace_vloc:-".false."} # if true, 'vlocal_eig.dat' is needed +IAUFHRS_ENKF=${IAUFHRS_ENKF:-6} +DO_CALC_INCREMENT=${DO_CALC_INCREMENT:-"NO"} +INCREMENTS_TO_ZERO=${INCREMENTS_TO_ZERO:-"'NONE'"} + +################################################################################ +ATMGES_ENSMEAN=$COMIN_GES_ENS/${GPREFIX}atmf006.ensmean${GSUFFIX} +if [ $SUFFIX = ".nc" ]; then + LONB_ENKF=${LONB_ENKF:-$($NCLEN $ATMGES_ENSMEAN grid_xt)} # get LONB_ENKF + LATB_ENKF=${LATB_ENKF:-$($NCLEN $ATMGES_ENSMEAN grid_yt)} # get LATB_ENFK + LEVS_ENKF=${LEVS_ENKF:-$($NCLEN $ATMGES_ENSMEAN pfull)} # get LEVS_ENFK + use_gfs_ncio=".true." + use_gfs_nemsio=".false." + paranc=${paranc:-".true."} + if [ $DO_CALC_INCREMENT = "YES" ]; then + write_fv3_incr=".false." + else + write_fv3_incr=".true." + WRITE_INCR_ZERO="incvars_to_zero= $INCREMENTS_TO_ZERO," + fi +else + LEVS_ENKF=${LEVS_ENKF:-$($NEMSIOGET $ATMGES_ENSMEAN dimz | awk '{print $2}')} + LATB_ENKF=${LATB_ENKF:-$($NEMSIOGET $ATMGES_ENSMEAN dimy | awk '{print $2}')} + LONB_ENKF=${LONB_ENKF:-$($NEMSIOGET $ATMGES_ENSMEAN dimx | awk '{print $2}')} + use_gfs_ncio=".false." + use_gfs_nemsio=".true." + paranc=${paranc:-".false."} +fi +LATA_ENKF=${LATA_ENKF:-$LATB_ENKF} +LONA_ENKF=${LONA_ENKF:-$LONB_ENKF} + +SATANGL=${SATANGL:-${FIXgsi}/global_satangbias.txt} +SATINFO=${SATINFO:-${FIXgsi}/global_satinfo.txt} +CONVINFO=${CONVINFO:-${FIXgsi}/global_convinfo.txt} +OZINFO=${OZINFO:-${FIXgsi}/global_ozinfo.txt} +SCANINFO=${SCANINFO:-${FIXgsi}/global_scaninfo.txt} +HYBENSINFO=${HYBENSINFO:-${FIXgsi}/global_hybens_info.l${LEVS_ENKF}.txt} +ANAVINFO=${ANAVINFO:-${FIXgsi}/global_anavinfo.l${LEVS_ENKF}.txt} +VLOCALEIG=${VLOCALEIG:-${FIXgsi}/vlocal_eig_l${LEVS_ENKF}.dat} + +ENKF_SUFFIX="s" +[[ $SMOOTH_ENKF = "NO" ]] && ENKF_SUFFIX="" + +################################################################################ +# Preprocessing +mkdata=NO +if [ ! -d $DATA ]; then + mkdata=YES + mkdir -p $DATA +fi +cd $DATA || exit 99 + +################################################################################ +# Clean up the run directory +rm convinfo satinfo ozinfo hybens_info anavinfo +rm satbias_angle satbias_in +rm enkf.nml +rm sanl* + +################################################################################ +# Fixed files +$NLN $SATANGL satbias_angle +$NLN $SATINFO satinfo +$NLN $SCANINFO scaninfo +$NLN $CONVINFO convinfo +$NLN $OZINFO ozinfo +$NLN $HYBENSINFO hybens_info +$NLN $ANAVINFO anavinfo +$NLN $VLOCALEIG vlocal_eig.dat + +# Bias correction coefficients based on the ensemble mean +$NLN $COMOUT_ANL_ENS/$GBIASe satbias_in + +################################################################################ + +if [ $USE_CFP = "YES" ]; then + rm $DATA/untar.sh $DATA/mp_untar.sh + set +x + cat > $DATA/untar.sh << EOFuntar +#!/bin/sh +memchar=\$1 +flist="$CNVSTAT $OZNSTAT $RADSTAT" +for ftype in \$flist; do + if [ \$memchar = "ensmean" ]; then + fname=$COMOUT_ANL_ENS/\${ftype}.ensmean + else + fname=$COMOUT_ANL_ENS/\$memchar/\$ftype + fi + tar -xvf \$fname +done +EOFuntar + set -x + chmod 755 $DATA/untar.sh +fi + +################################################################################ +# Ensemble guess, observational data and analyses/increments + +flist="$CNVSTAT $OZNSTAT $RADSTAT" +if [ $USE_CFP = "YES" ]; then + echo "$DATA/untar.sh ensmean" | tee -a $DATA/mp_untar.sh +else + for ftype in $flist; do + fname=$COMOUT_ANL_ENS/${ftype}.ensmean + tar -xvf $fname + done +fi + +nfhrs=`echo $IAUFHRS_ENKF | sed 's/,/ /g'` +for imem in $(seq 1 $NMEM_ENKF); do + memchar="mem"$(printf %03i $imem) + if [ $lobsdiag_forenkf = ".false." ]; then + if [ $USE_CFP = "YES" ]; then + echo "$DATA/untar.sh $memchar" | tee -a $DATA/mp_untar.sh + else + for ftype in $flist; do + fname=$COMOUT_ANL_ENS/$memchar/$ftype + tar -xvf $fname + done + fi + fi + mkdir -p $COMOUT_ANL_ENS/$memchar + for FHR in $nfhrs; do + $NLN $COMIN_GES_ENS/$memchar/${GPREFIX}atmf00${FHR}${ENKF_SUFFIX}${GSUFFIX} sfg_${CDATE}_fhr0${FHR}_${memchar} + if [ $cnvw_option = ".true." ]; then + $NLN $COMIN_GES_ENS/$memchar/${GPREFIX}sfcf00${FHR}${GSUFFIX} sfgsfc_${CDATE}_fhr0${FHR}_${memchar} + fi + + # ==== Edited by liaofan on 2020.05.08 ====== + if [ $FHR -eq 6 ]; then + if [ $DO_CALC_INCREMENT = "YES" ]; then + #$NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atmanl${ASUFFIX} sanl_${CDATE}_fhr0${FHR}_${memchar} + $NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atmanl${ASUFFIX} sanl_${CDATE}_fhr0${FHR}_ni${memchar} + else + #$NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atminc${ASUFFIX} incr_${CDATE}_fhr0${FHR}_${memchar} + $NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atminc${ASUFFIX} incr_${CDATE}_fhr0${FHR}_ni${memchar} + fi + else + if [ $DO_CALC_INCREMENT = "YES" ]; then + #$NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atma00${FHR}${ASUFFIX} sanl_${CDATE}_fhr0${FHR}_${memchar} + $NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atma00${FHR}${ASUFFIX} sanl_${CDATE}_fhr0${FHR}_ni${memchar} + else + #$NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atmi00${FHR}${ASUFFIX} incr_${CDATE}_fhr0${FHR}_${memchar} + $NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atmi00${FHR}${ASUFFIX} incr_${CDATE}_fhr0${FHR}_ni${memchar} + fi + fi + # ============================================= + + done +done + +# Ensemble mean guess +for FHR in $nfhrs; do + $NLN $COMIN_GES_ENS/${GPREFIX}atmf00${FHR}.ensmean${GSUFFIX} sfg_${CDATE}_fhr0${FHR}_ensmean + if [ $cnvw_option = ".true." ]; then + $NLN $COMIN_GES_ENS/${GPREFIX}sfcf00${FHR}.ensmean${GSUFFIX} sfgsfc_${CDATE}_fhr0${FHR}_ensmean + fi +done + +if [ $USE_CFP = "YES" ]; then + chmod 755 $DATA/mp_untar.sh + ncmd=$(cat $DATA/mp_untar.sh | wc -l) + if [ $ncmd -gt 0 ]; then + ncmd_max=$((ncmd < npe_node_max ? ncmd : npe_node_max)) + APRUNCFP=$(eval echo $APRUNCFP) + $APRUNCFP $DATA/mp_untar.sh + rc=$? + export ERR=$rc + export err=$ERR + $ERRSCRIPT || exit 2 + fi +fi + +# ===== liaofan on 2020.05.15 ================================ +# Keep osense data in comrot +$NLN $COMOUT_ANL_ENS/osense_${CDATE}.dat osense_${CDATE}.dat +# ============================================================ + + + +################################################################################ +# liaofan on 2020.05.06 +# - add "fso_cycling=.true.," in the name list +# +# Create global_enkf namelist +cat > enkf.nml << EOFnml +&nam_enkf + datestring="$CDATE",datapath="$DATA/", + analpertwtnh=${analpertwt},analpertwtsh=${analpertwt},analpertwttr=${analpertwt}, + covinflatemax=1.e2,covinflatemin=1,pseudo_rh=.true.,iassim_order=0, + corrlengthnh=${corrlength},corrlengthsh=${corrlength},corrlengthtr=${corrlength}, + lnsigcutoffnh=${lnsigcutoff},lnsigcutoffsh=${lnsigcutoff},lnsigcutofftr=${lnsigcutoff}, + lnsigcutoffpsnh=${lnsigcutoff},lnsigcutoffpssh=${lnsigcutoff},lnsigcutoffpstr=${lnsigcutoff}, + lnsigcutoffsatnh=${lnsigcutoff},lnsigcutoffsatsh=${lnsigcutoff},lnsigcutoffsattr=${lnsigcutoff}, + obtimelnh=1.e30,obtimelsh=1.e30,obtimeltr=1.e30, + saterrfact=1.0,numiter=0, + sprd_tol=1.e30,paoverpb_thresh=0.98, + nlons=$LONA_ENKF,nlats=$LATA_ENKF,nlevs=$LEVS_ENKF,nanals=$NMEM_ENKF, + deterministic=.true.,sortinc=.true.,lupd_satbiasc=.false., + reducedgrid=${reducedgrid},readin_localization=${readin_localization_enkf}., + use_gfs_nemsio=${use_gfs_nemsio},use_gfs_ncio=${use_gfs_ncio},imp_physics=$imp_physics,lupp=$lupp, + univaroz=.false.,adp_anglebc=.true.,angord=4,use_edges=.false.,emiss_bc=.true., + letkf_flag=${letkf_flag},nobsl_max=${nobsl_max},denkf=${denkf},getkf=${getkf}., + nhr_anal=${IAUFHRS_ENKF},nhr_state=${IAUFHRS_ENKF},use_qsatensmean=.true., + lobsdiag_forenkf=$lobsdiag_forenkf, + write_spread_diag=$write_spread_diag, + modelspace_vloc=$modelspace_vloc, + use_correlated_oberrs=${use_correlated_oberrs}, + netcdf_diag=$netcdf_diag,cnvw_option=$cnvw_option, + paranc=$paranc,write_fv3_incr=$write_fv3_incr, + $WRITE_INCR_ZERO + $NAM_ENKF + fso_cycling=.true., +/ +&satobs_enkf + sattypes_rad(1) = 'amsua_n15', dsis(1) = 'amsua_n15', + sattypes_rad(2) = 'amsua_n18', dsis(2) = 'amsua_n18', + sattypes_rad(3) = 'amsua_n19', dsis(3) = 'amsua_n19', + sattypes_rad(4) = 'amsub_n16', dsis(4) = 'amsub_n16', + sattypes_rad(5) = 'amsub_n17', dsis(5) = 'amsub_n17', + sattypes_rad(6) = 'amsua_aqua', dsis(6) = 'amsua_aqua', + sattypes_rad(7) = 'amsua_metop-a', dsis(7) = 'amsua_metop-a', + sattypes_rad(8) = 'airs_aqua', dsis(8) = 'airs_aqua', + sattypes_rad(9) = 'hirs3_n17', dsis(9) = 'hirs3_n17', + sattypes_rad(10)= 'hirs4_n19', dsis(10)= 'hirs4_n19', + sattypes_rad(11)= 'hirs4_metop-a', dsis(11)= 'hirs4_metop-a', + sattypes_rad(12)= 'mhs_n18', dsis(12)= 'mhs_n18', + sattypes_rad(13)= 'mhs_n19', dsis(13)= 'mhs_n19', + sattypes_rad(14)= 'mhs_metop-a', dsis(14)= 'mhs_metop-a', + sattypes_rad(15)= 'goes_img_g11', dsis(15)= 'imgr_g11', + sattypes_rad(16)= 'goes_img_g12', dsis(16)= 'imgr_g12', + sattypes_rad(17)= 'goes_img_g13', dsis(17)= 'imgr_g13', + sattypes_rad(18)= 'goes_img_g14', dsis(18)= 'imgr_g14', + sattypes_rad(19)= 'goes_img_g15', dsis(19)= 'imgr_g15', + sattypes_rad(20)= 'avhrr_n18', dsis(20)= 'avhrr3_n18', + sattypes_rad(21)= 'avhrr_metop-a', dsis(21)= 'avhrr3_metop-a', + sattypes_rad(22)= 'avhrr_n19', dsis(22)= 'avhrr3_n19', + sattypes_rad(23)= 'amsre_aqua', dsis(23)= 'amsre_aqua', + sattypes_rad(24)= 'ssmis_f16', dsis(24)= 'ssmis_f16', + sattypes_rad(25)= 'ssmis_f17', dsis(25)= 'ssmis_f17', + sattypes_rad(26)= 'ssmis_f18', dsis(26)= 'ssmis_f18', + sattypes_rad(27)= 'ssmis_f19', dsis(27)= 'ssmis_f19', + sattypes_rad(28)= 'ssmis_f20', dsis(28)= 'ssmis_f20', + sattypes_rad(29)= 'sndrd1_g11', dsis(29)= 'sndrD1_g11', + sattypes_rad(30)= 'sndrd2_g11', dsis(30)= 'sndrD2_g11', + sattypes_rad(31)= 'sndrd3_g11', dsis(31)= 'sndrD3_g11', + sattypes_rad(32)= 'sndrd4_g11', dsis(32)= 'sndrD4_g11', + sattypes_rad(33)= 'sndrd1_g12', dsis(33)= 'sndrD1_g12', + sattypes_rad(34)= 'sndrd2_g12', dsis(34)= 'sndrD2_g12', + sattypes_rad(35)= 'sndrd3_g12', dsis(35)= 'sndrD3_g12', + sattypes_rad(36)= 'sndrd4_g12', dsis(36)= 'sndrD4_g12', + sattypes_rad(37)= 'sndrd1_g13', dsis(37)= 'sndrD1_g13', + sattypes_rad(38)= 'sndrd2_g13', dsis(38)= 'sndrD2_g13', + sattypes_rad(39)= 'sndrd3_g13', dsis(39)= 'sndrD3_g13', + sattypes_rad(40)= 'sndrd4_g13', dsis(40)= 'sndrD4_g13', + sattypes_rad(41)= 'sndrd1_g14', dsis(41)= 'sndrD1_g14', + sattypes_rad(42)= 'sndrd2_g14', dsis(42)= 'sndrD2_g14', + sattypes_rad(43)= 'sndrd3_g14', dsis(43)= 'sndrD3_g14', + sattypes_rad(44)= 'sndrd4_g14', dsis(44)= 'sndrD4_g14', + sattypes_rad(45)= 'sndrd1_g15', dsis(45)= 'sndrD1_g15', + sattypes_rad(46)= 'sndrd2_g15', dsis(46)= 'sndrD2_g15', + sattypes_rad(47)= 'sndrd3_g15', dsis(47)= 'sndrD3_g15', + sattypes_rad(48)= 'sndrd4_g15', dsis(48)= 'sndrD4_g15', + sattypes_rad(49)= 'iasi_metop-a', dsis(49)= 'iasi_metop-a', + sattypes_rad(50)= 'seviri_m08', dsis(50)= 'seviri_m08', + sattypes_rad(51)= 'seviri_m09', dsis(51)= 'seviri_m09', + sattypes_rad(52)= 'seviri_m10', dsis(52)= 'seviri_m10', + sattypes_rad(53)= 'seviri_m11', dsis(53)= 'seviri_m11', + sattypes_rad(54)= 'amsua_metop-b', dsis(54)= 'amsua_metop-b', + sattypes_rad(55)= 'hirs4_metop-b', dsis(55)= 'hirs4_metop-b', + sattypes_rad(56)= 'mhs_metop-b', dsis(56)= 'mhs_metop-b', + sattypes_rad(57)= 'iasi_metop-b', dsis(57)= 'iasi_metop-b', + sattypes_rad(58)= 'avhrr_metop-b', dsis(58)= 'avhrr3_metop-b', + sattypes_rad(59)= 'atms_npp', dsis(59)= 'atms_npp', + sattypes_rad(60)= 'atms_n20', dsis(60)= 'atms_n20', + sattypes_rad(61)= 'cris_npp', dsis(61)= 'cris_npp', + sattypes_rad(62)= 'cris-fsr_npp', dsis(62)= 'cris-fsr_npp', + sattypes_rad(63)= 'cris-fsr_n20', dsis(63)= 'cris-fsr_n20', + sattypes_rad(64)= 'gmi_gpm', dsis(64)= 'gmi_gpm', + sattypes_rad(65)= 'saphir_meghat', dsis(65)= 'saphir_meghat', + sattypes_rad(66)= 'amsua_metop-c', dsis(66)= 'amsua_metop-c', + sattypes_rad(67)= 'mhs_metop-c', dsis(67)= 'mhs_metop-c', + sattypes_rad(68)= 'ahi_himawari8', dsis(68)= 'ahi_himawari8', + sattypes_rad(69)= 'abi_g16', dsis(69)= 'abi_g16', + sattypes_rad(70)= 'abi_g17', dsis(70)= 'abi_g17', + $SATOBS_ENKF +/ +&ozobs_enkf + sattypes_oz(1) = 'sbuv2_n16', + sattypes_oz(2) = 'sbuv2_n17', + sattypes_oz(3) = 'sbuv2_n18', + sattypes_oz(4) = 'sbuv2_n19', + sattypes_oz(5) = 'omi_aura', + sattypes_oz(6) = 'gome_metop-a', + sattypes_oz(7) = 'gome_metop-b', + sattypes_oz(8) = 'mls30_aura', + sattypes_oz(9) = 'ompsnp_npp', + sattypes_oz(10) = 'ompstc8_npp', + $OZOBS_ENKF +/ +EOFnml + +################################################################################ +# Run enkf update +export OMP_NUM_THREADS=$NTHREADS_ENKF + +PGM=$DATA/enkf.x +$NCP $ENKFEXEC $PGM + +# Execute EnKF using same number of mpi tasks on all nodes +$APRUN_ENKF $PGM 1>stdout 2>stderr +rc=$? + +export ERR=$rc +export err=$ERR +$ERRSCRIPT || exit 2 + +# Cat runtime output files. +cat stdout stderr > $COMOUT_ANL_ENS/$ENKFSTAT + +################################################################################ +# Postprocessing +cd $pwd + +# ========================================= +echo "=== edited by liaofan (2020.04.12) =======" +pwd + +cd $DATA +cd ../../.. +mkdir -p ${CDATE}_liaofan +mkdir -p ${CDATE}_liaofan/${CDUMP} +cp -ir $DATA ${DATA}_liaofan_from_exglobal_efsoi_update_fv3gfs_sh_ecf +cp -u -ir ${CDATE}/gdas/*_liaofan_from_exglobal_efsoi_update_fv3gfs_sh_ecf ${CDATE}_liaofan/gdas/ +echo "=========================================" +# ========================================== + +[[ $mkdata = "YES" ]] && rm -rf $DATA +set +x +if [ $VERBOSE = "YES" ]; then + echo $(date) EXITING $0 with return code $err >&2 +fi +exit $err From d4e7090f7e8cf2b8212da5e83ff2d6275fa45c5c Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Mon, 16 Nov 2020 16:50:45 +0000 Subject: [PATCH 003/103] added notes on merge --- readme_efsoi.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/readme_efsoi.txt b/readme_efsoi.txt index 84f7accc6a6..c2eec3a4d42 100644 --- a/readme_efsoi.txt +++ b/readme_efsoi.txt @@ -12,12 +12,17 @@ There are the following types of files: 5) to bo pushed (1) Files that exist and are updated for general run setup and then git-pushed +[AFE 2020-11-16: these are user- and EFSOI-run-specific changes to +config files - for now will be not set to repo. Have to ask somebody preferred +way to handle this regarding repo.] * parm/config/config.base.emc.dyn * parm/config/config.efcs * parm/config/config.eobs +[AFE 2020-11-16 also config.resources!] (2) Files that are added for EFSOI and then git-pushed +[AFE 2020-11-16: these have been added and committed] for gdaseupdfsoi: * jobs/JGLOBAL_EFSOI_UPDATE From 3c743796feb23a62ed0bee94a530d3bb48e3ab68 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Mon, 16 Nov 2020 21:01:31 +0000 Subject: [PATCH 004/103] Added EFSOI entries to parm/config/config.resources --- parm/config/config.resources | 75 ++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/parm/config/config.resources b/parm/config/config.resources index 4c707cff88d..fd8d107b26b 100755 --- a/parm/config/config.resources +++ b/parm/config/config.resources @@ -333,6 +333,43 @@ elif [ $step = "eupd" ]; then export memory_eupd="3072M" fi +elif [ $step = "eupdfsoi" ]; then + + export wtime_eupdfsoi="00:30:00" + if [ $CASE = "C768" ]; then + export npe_eupdfsoi=960 + export nth_eupdfsoi=6 + if [[ "$machine" = "WCOSS_DELL_P3" ]]; then + export nth_eupdfsoi=7 + fi + if [[ "$machine" = "HERA" ]]; then + export npe_eupdfsoi=150 + export nth_eupdfsoi=40 + fi + elif [ $CASE = "C384" ]; then + export npe_eupdfsoi=270 + export nth_eupdfsoi=2 + if [[ "$machine" = "WCOSS_DELL_P3" ]]; then + export nth_eupdfsoi=9 + fi + if [[ "$machine" = "HERA" ]]; then + export npe_eupdfsoi=100 + export nth_eupdfsoi=40 + fi + elif [ $CASE = "C192" -o $CASE = "C96" -o $CASE = "C48" ]; then + export npe_eupdfsoi=42 + export nth_eupdfsoi=2 + if [[ "$machine" = "HERA" ]]; then + export npe_eupdfsoi=40 + export nth_eupdfsoi=40 + fi + fi + export npe_node_eupdfsoi=$(echo "$npe_node_max / $nth_eupdfsoi" | bc) + if [[ "$machine" == "WCOSS_C" ]]; then + export memory_eupdfsoi="3072M" + fi + + elif [ $step = "ecen" ]; then export wtime_ecen="00:10:00" @@ -344,6 +381,17 @@ elif [ $step = "ecen" ]; then export nth_cycle=$nth_ecen if [[ "$machine" == "WCOSS_C" ]]; then export memory_ecen="3072M"; fi +elif [ $step = "ecenfsoi" ]; then + + export wtime_ecenfsoi="00:10:00" + export npe_ecenfsoi=80 + export nth_ecenfsoi=6 + if [[ "$machine" = "WCOSS_DELL_P3" ]]; then export nth_ecenfsoi=7; fi + if [ $CASE = "C384" -o $CASE = "C192" -o $CASE = "C96" -o $CASE = "C48" ]; then export nth_ecenfsoi=2; fi + export npe_node_ecenfsoi=$(echo "$npe_node_max / $nth_ecenfsoi" | bc) + export nth_cycle=$nth_ecenfsoi + if [[ "$machine" == "WCOSS_C" ]]; then export memory_ecenfsoi="3072M"; fi + elif [ $step = "esfc" ]; then export wtime_esfc="00:06:00" @@ -353,6 +401,15 @@ elif [ $step = "esfc" ]; then export nth_cycle=$nth_esfc if [[ "$machine" == "WCOSS_C" ]]; then export memory_esfc="3072M"; fi +elif [ $step = "esfcfsoi" ]; then + + export wtime_esfcfsoi="00:06:00" + export npe_esfcfsoi=80 + export npe_node_esfcfsoi=$npe_node_max + export nth_esfcfsoi=1 + export nth_cycle=$nth_esfcfsoi + if [[ "$machine" == "WCOSS_C" ]]; then export memory_esfcfsoi="3072M"; fi + elif [ $step = "efcs" ]; then export wtime_efcs="00:40:00" @@ -361,6 +418,15 @@ elif [ $step = "efcs" ]; then export npe_node_efcs=$(echo "$npe_node_max / $nth_efcs" | bc) if [[ "$machine" == "WCOSS_C" ]]; then export memory_efcs="254M"; fi +elif [ $step = "efcsfsoi" ]; then + + export wtime_efcsfsoi="00:40:00" + export npe_efcsfsoi=$(echo "$layout_x * $layout_y * 6" | bc) + export nth_efcsfsoi=${nth_fv3:-2} + export npe_node_efcsfsoi=$(echo "$npe_node_max / $nth_efcsfsoi" | bc) + if [[ "$machine" == "WCOSS_C" ]]; then export memory_efcsfsoi="254M"; fi + + elif [ $step = "epos" ]; then export wtime_epos="00:15:00" @@ -370,6 +436,15 @@ elif [ $step = "epos" ]; then export npe_node_epos=$(echo "$npe_node_max / $nth_epos" | bc) if [[ "$machine" == "WCOSS_C" ]]; then export memory_epos="254M"; fi +elif [ $step = "eposfsoi" ]; then + + export wtime_eposfsoi="00:15:00" + export npe_eposfsoi=80 + export nth_eposfsoi=6 + if [[ "$machine" = "WCOSS_DELL_P3" ]]; then export nth_eposfsoi=7; fi + export npe_node_eposfsoi=$(echo "$npe_node_max / $nth_eposfsoi" | bc) + if [[ "$machine" == "WCOSS_C" ]]; then export memory_epos="254M"; fi + elif [ $step = "postsnd" ]; then export wtime_postsnd="02:00:00" From 05630dcf8ff756a479dff4c6c1b342673aa37c19 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Mon, 16 Nov 2020 21:25:29 +0000 Subject: [PATCH 005/103] added EFSOI entries to env/HERA.env --- env/HERA.env | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/env/HERA.env b/env/HERA.env index 156873e891e..7b843b8a800 100755 --- a/env/HERA.env +++ b/env/HERA.env @@ -128,6 +128,18 @@ elif [ $step = "eupd" ]; then export USE_CFP=${USE_CFP:-"YES"} export APRUNCFP="$launcher -n \$ncmd --multi-prog" +elif [ $step = "eupdfsoi" ]; then + + nth_max=$(($npe_node_max / $npe_node_eupdfsoi)) + + export NTHREADS_ENKF=${nth_eupdfsoi:-$nth_max} + [[ $NTHREADS_ENKF -gt $nth_max ]] && export NTHREADS_ENKF=$nth_max + export APRUN_ENKF="$launcher" + + export CFP_MP=${CFP_MP:-"YES"} + export USE_CFP=${USE_CFP:-"YES"} + export APRUNCFP="$launcher -n \$ncmd --multi-prog" + elif [ $step = "fcst" ]; then nth_max=$(($npe_node_max / $npe_node_fcst)) @@ -158,6 +170,20 @@ elif [ $step = "efcs" ]; then [[ $NTHREADS_REGRID_NEMSIO -gt $nth_max ]] && export NTHREADS_REGRID_NEMSIO=$nth_max export APRUN_REGRID_NEMSIO="$launcher $LEVS" +elif [ $step = "efcsfsoi" ]; then + + nth_max=$(($npe_node_max / $npe_node_efcsfsoi)) + + export NTHREADS_FV3=${nth_efcsfsoi:-$nth_max} + [[ $NTHREADS_FV3 -gt $nth_max ]] && export NTHREADS_FV3=$nth_max + export cores_per_node=$npe_node_max + export APRUN_FV3="$launcher" + + export NTHREADS_REGRID_NEMSIO=${nth_regrid_nemsio:-1} + [[ $NTHREADS_REGRID_NEMSIO -gt $nth_max ]] && export NTHREADS_REGRID_NEMSIO=$nth_max + export APRUN_REGRID_NEMSIO="$launcher $LEVS" + + elif [ $step = "post" ]; then nth_max=$(($npe_node_max / $npe_node_post)) @@ -186,6 +212,22 @@ elif [ $step = "ecen" ]; then [[ $NTHREADS_CALCINC -gt $nth_max ]] && export NTHREADS_CALCINC=$nth_max export APRUN_CALCINC="$launcher" +elif [ $step = "ecenfsoi" ]; then + + nth_max=$(($npe_node_max / $npe_node_ecenfsoi)) + + export NTHREADS_ECEN=${nth_ecenfsoi:-$nth_max} + [[ $NTHREADS_ECEN -gt $nth_max ]] && export NTHREADS_ECEN=$nth_max + export APRUN_ECEN="$launcher" + + export NTHREADS_CHGRES=${nth_chgres:-12} + [[ $NTHREADS_CHGRES -gt $npe_node_max ]] && export NTHREADS_CHGRES=$npe_node_max + export APRUN_CHGRES="time" + + export NTHREADS_CALCINC=${nth_calcinc:-1} + [[ $NTHREADS_CALCINC -gt $nth_max ]] && export NTHREADS_CALCINC=$nth_max + export APRUN_CALCINC="$launcher" + elif [ $step = "esfc" ]; then nth_max=$(($npe_node_max / $npe_node_esfc)) @@ -198,6 +240,18 @@ elif [ $step = "esfc" ]; then [[ $NTHREADS_CYCLE -gt $npe_node_max ]] && export NTHREADS_CYCLE=$npe_node_max export APRUN_CYCLE="$launcher -n $npe_esfc" +elif [ $step = "esfcfsoi" ]; then + + nth_max=$(($npe_node_max / $npe_node_esfcfsoi)) + + export NTHREADS_ESFC=${nth_esfcfsoi:-$nth_max} + [[ $NTHREADS_ESFC -gt $nth_max ]] && export NTHREADS_ESFC=$nth_max + export APRUN_ESFC="$launcher -n $npe_esfcfsoi" + + export NTHREADS_CYCLE=${nth_cycle:-14} + [[ $NTHREADS_CYCLE -gt $npe_node_max ]] && export NTHREADS_CYCLE=$npe_node_max + export APRUN_CYCLE="$launcher -n $npe_esfcfsoi" + elif [ $step = "epos" ]; then nth_max=$(($npe_node_max / $npe_node_epos)) @@ -206,6 +260,14 @@ elif [ $step = "epos" ]; then [[ $NTHREADS_EPOS -gt $nth_max ]] && export NTHREADS_EPOS=$nth_max export APRUN_EPOS="$launcher" +elif [ $step = "eposfsoi" ]; then + + nth_max=$(($npe_node_max / $npe_node_eposfsoi)) + + export NTHREADS_EPOS=${nth_eposfsoi:-$nth_max} + [[ $NTHREADS_EPOS -gt $nth_max ]] && export NTHREADS_EPOS=$nth_max + export APRUN_EPOS="$launcher" + elif [ $step = "fv3ic" ]; then export NTHREADS_CHGRES=${nth_chgres:-$npe_node_max} From ce2d8476a35066ce27eaa5fc0f4d6a6a43a2fd82 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Tue, 17 Nov 2020 20:21:05 +0000 Subject: [PATCH 006/103] merged liaofan's modifications for efsoi in ush/rocoto/setup_workflow.py --- ush/rocoto/setup_workflow.py | 185 ++++++++++++++++++++++++++++++++--- 1 file changed, 172 insertions(+), 13 deletions(-) diff --git a/ush/rocoto/setup_workflow.py b/ush/rocoto/setup_workflow.py index f41d88d7d49..1da274b9e4f 100755 --- a/ush/rocoto/setup_workflow.py +++ b/ush/rocoto/setup_workflow.py @@ -65,6 +65,10 @@ def main(): steps = steps + wav_steps_gempak if _base.get('DO_GEMPAK', 'NO') == 'YES' else steps steps = steps + wav_steps_awips if _base.get('DO_AWIPS', 'NO') == 'YES' else steps +# for EFSOI + efsoi_steps = ['eupdfsoi', 'esfcfsoi', 'ecenfsoi', 'efcsfsoi', 'eposfsoi'] + steps = steps + efsoi_steps if _base.get('DO_EFSOI','NO') == 'YES' else steps + dict_configs = wfu.source_configs(configs, steps) # Check and set gfs_cyc specific variables @@ -314,11 +318,21 @@ def get_hyb_resources(dict_configs): dict_resources = OrderedDict() + do_efsoi = base.get('DO_EFSOI', 'NO').upper() + # These tasks can be run in either or both cycles if lobsdiag_forenkf in ['.T.', '.TRUE.']: - tasks1 = ['eobs', 'ediag', 'eupd', 'echgres'] + + if do_efsoi in ['Y', 'YES']: + tasks1 = ['eobs', 'ediag', 'eupd', 'echgres', 'eupdfsoi'] + else: + tasks1 = ['eobs', 'ediag', 'eupd', 'echgres'] + else: - tasks1 = ['eobs', 'eomg', 'eupd', 'echgres'] + if do_efsoi in ['Y', 'YES']: + tasks1 = ['eobs', 'eomg', 'eupd', 'echgres', 'eupdfsoi'] + else: + tasks1 = ['eobs', 'eomg', 'eupd', 'echgres'] if eupd_cyc in ['BOTH']: cdumps = ['gfs', 'gdas'] @@ -350,7 +364,13 @@ def get_hyb_resources(dict_configs): # These tasks are always run as part of the GDAS cycle cdump = 'gdas' - tasks2 = ['ecen', 'esfc', 'efcs', 'epos', 'earc'] + + do_efsoi = base.get('DO_EFSOI', 'NO').upper() + + if do_efsoi in ['Y', 'YES']: + tasks2 = ['ecen', 'ecenfsoi', 'esfc', 'esfcfsoi', 'efcs', 'efcsfsoi', 'epos', 'eposfsoi', 'earc'] + else: + tasks2 = ['ecen', 'esfc', 'efcs', 'epos', 'earc'] for task in tasks2: cfg = dict_configs[task] @@ -408,6 +428,8 @@ def get_gdasgfs_tasks(dict_configs, cdump='gdas'): dumpsuffix = base.get('DUMP_SUFFIX', '') gridsuffix = base.get('SUFFIX', '') + do_efsoi = base.get('DO_EFSOI', 'NO').upper() + dict_tasks = OrderedDict() # prep @@ -1021,6 +1043,22 @@ def get_hyb_tasks(dict_configs, cycledef='enkf'): dict_tasks['%seupd' % cdump] = task + # # eupdfsoi + do_efsoi = base.get('DO_EFSOI', 'NO').upper() + + if do_efsoi in ['Y', 'YES']: + + deps = [] + if lobsdiag_forenkf in ['.F.', '.FALSE.']: + dep_dict = {'type': 'metatask', 'name': '%seomn' % cdump} + else: + dep_dict = {'type': 'task', 'name': '%sediag' % cdump} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + task = wfu.create_wf_task('eupdfsoi', cdump=cdump, envar=envars1, dependency=dependencies, cycledef=cycledef) + + dict_tasks['%seupdfsoi' % cdump] = task + # All hybrid tasks beyond this point are always executed in the GDAS cycle cdump = 'gdas' envar_cdump = rocoto.create_envar(name='CDUMP', value='%s' % cdump) @@ -1053,6 +1091,32 @@ def get_hyb_tasks(dict_configs, cycledef='enkf'): dict_tasks['%secmn' % cdump] = task + # ecmnfsoi, ecenfsoi + deps1 = [] + data = '&ROTDIR;/%s.@Y@m@d/@H/%s.t@Hz.loganl.txt' % (cdump, cdump) + dep_dict = {'type': 'data', 'data': data} + deps1.append(rocoto.add_dependency(dep_dict)) + dep_dict = {'type': 'task', 'name': '%sanalcalc' % cdump} + deps1.append(rocoto.add_dependency(dep_dict)) + dependencies1 = rocoto.create_dependency(dep_condition='or', dep=deps1) + + deps2 = [] + deps2 = dependencies1 + dep_dict = {'type': 'task', 'name': '%seupdfsoi' % cdump_eupd} + deps2.append(rocoto.add_dependency(dep_dict)) + dependencies2 = rocoto.create_dependency(dep_condition='and', dep=deps2) + + fhrgrp = rocoto.create_envar(name='FHRGRP', value='#grp#') + fhrlst = rocoto.create_envar(name='FHRLST', value='#lst#') + ecenenvars = envars1 + [fhrgrp] + [fhrlst] + varname1, varname2, varname3 = 'grp', 'dep', 'lst' + varval1, varval2, varval3 = get_ecengroups(dict_configs, dict_configs['ecenfsoi'], cdump=cdump) + vardict = {varname2: varval2, varname3: varval3} + task = wfu.create_wf_task('ecenfsoi', cdump=cdump, envar=ecenenvars, dependency=dependencies2, + metatask='ecmnfsoi', varname=varname1, varval=varval1, vardict=vardict) + + dict_tasks['%secmnfsoi' % cdump] = task + # esfc deps1 = [] data = '&ROTDIR;/%s.@Y@m@d/@H/atmos/%s.t@Hz.loganl.txt' % (cdump, cdump) @@ -1071,6 +1135,24 @@ def get_hyb_tasks(dict_configs, cycledef='enkf'): dict_tasks['%sesfc' % cdump] = task + # esfcfsoi + deps1 = [] + data = '&ROTDIR;/%s.@Y@m@d/@H/%s.t@Hz.loganl.txt' % (cdump, cdump) + dep_dict = {'type': 'data', 'data': data} + deps1.append(rocoto.add_dependency(dep_dict)) + dep_dict = {'type': 'task', 'name': '%sanalcalc' % cdump} + deps1.append(rocoto.add_dependency(dep_dict)) + dependencies1 = rocoto.create_dependency(dep_condition='or', dep=deps1) + + deps2 = [] + deps2 = dependencies1 + dep_dict = {'type': 'task', 'name': '%seupdfsoi' % cdump_eupd} + deps2.append(rocoto.add_dependency(dep_dict)) + dependencies2 = rocoto.create_dependency(dep_condition='and', dep=deps2) + task = wfu.create_wf_task('esfcfsoi', cdump=cdump, envar=envars1, dependency=dependencies2, cycledef=cycledef) + + dict_tasks['%sesfcfsoi' % cdump] = task + # efmn, efcs deps1 = [] dep_dict = {'type': 'metatask', 'name': '%secmn' % cdump} @@ -1102,6 +1184,28 @@ def get_hyb_tasks(dict_configs, cycledef='enkf'): dict_tasks['%sechgres' % cdump] = task + # efmnfsoi, efcsfsoi + deps1 = [] + dep_dict = {'type': 'metatask', 'name': '%secmnfsoi' % cdump} + deps1.append(rocoto.add_dependency(dep_dict)) + dep_dict = {'type': 'task', 'name': '%sesfcfsoi' % cdump} + deps1.append(rocoto.add_dependency(dep_dict)) + dependencies1 = rocoto.create_dependency(dep_condition='and', dep=deps1) + + deps2 = [] + deps2 = dependencies1 + + # liaofan: remove the option to run efcsfsoi in the cold start (2020.05.26) + #dep_dict = {'type': 'cycleexist', 'condition': 'not', 'offset': '-06:00:00'} + #deps2.append(rocoto.add_dependency(dep_dict)) + dependencies2 = rocoto.create_dependency(dep_condition='and', dep=deps2) + + efcsenvars = envars1 + [ensgrp] + task = wfu.create_wf_task('efcsfsoi', cdump=cdump, envar=efcsenvars, dependency=dependencies2, + metatask='efmnfsoi', varname='grp', varval=EFCSGROUPS, cycledef=cycledef) + + dict_tasks['%sefmnfsoi' % cdump] = task + # epmn, epos deps = [] dep_dict = {'type': 'metatask', 'name': '%sefmn' % cdump} @@ -1118,6 +1222,22 @@ def get_hyb_tasks(dict_configs, cycledef='enkf'): dict_tasks['%sepmn' % cdump] = task + # epmnfsoi, eposfsoi + deps = [] + dep_dict = {'type': 'metatask', 'name': '%sefmnfsoi' % cdump} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + fhrgrp = rocoto.create_envar(name='FHRGRP', value='#grp#') + fhrlst = rocoto.create_envar(name='FHRLST', value='#lst#') + eposenvars = envars1 + [fhrgrp] + [fhrlst] + varname1, varname2, varname3 = 'grp', 'dep', 'lst' + varval1, varval2, varval3 = get_eposfsoigroups(dict_configs['eposfsoi'], cdump=cdump) + vardict = {varname2: varval2, varname3: varval3} + task = wfu.create_wf_task('eposfsoi', cdump=cdump, envar=eposenvars, dependency=dependencies, + metatask='epmnfsoi', varname=varname1, varval=varval1, vardict=vardict) + + dict_tasks['%sepmnfsoi' % cdump] = task + # eamn, earc deps = [] dep_dict = {'type': 'metatask', 'name': '%sepmn' % cdump} @@ -1293,6 +1413,26 @@ def dict_to_strings(dict_in): return ''.join(strings) +def get_eposfsoigroups(epos, cdump='gdas'): + + fhmin = 0 + fhmax = 30 + fhout = 6 + + fhrs = range(fhmin, fhmax+fhout, fhout) + + neposgrp = epos['NEPOSGRP'] + ngrps = neposgrp if len(fhrs) > neposgrp else len(fhrs) + + fhrs = ['f%03d' % f for f in fhrs] + fhrs = np.array_split(fhrs, ngrps) + fhrs = [f.tolist() for f in fhrs] + + fhrgrp = ' '.join(['%03d' % x for x in range(0, ngrps)]) + fhrdep = ' '.join([f[-1] for f in fhrs]) + fhrlst = ' '.join(['_'.join(f) for f in fhrs]) + + return fhrgrp, fhrdep, fhrlst def create_xml(dict_configs): ''' @@ -1324,16 +1464,35 @@ def create_xml(dict_configs): dict_hyb_tasks = get_hyb_tasks(dict_configs) # Removes &MEMORY_JOB_DUMP post mortem from hyb tasks - hyp_tasks = {'gdaseobs':'gdaseobs', - 'gdasediag':'gdasediag', - 'gdaseomg':'gdaseomn', - 'gdaseupd':'gdaseupd', - 'gdasecen':'gdasecmn', - 'gdasesfc':'gdasesfc', - 'gdasefcs':'gdasefmn', - 'gdasepos':'gdasepmn', - 'gdasearc':'gdaseamn', - 'gdasechgres':'gdasechgres'} + do_efsoi = base.get('DO_EFSOI', 'NO').upper() + + if do_efsoi in ['Y', 'YES']: + hyp_tasks = {'gdaseobs':'gdaseobs', + 'gdasediag':'gdasediag', + 'gdaseomg':'gdaseomn', + 'gdaseupd':'gdaseupd', + 'gdaseupdfsoi':'gdaseupdfsoi', + 'gdasecen':'gdasecmn', + 'gdasecenfsoi':'gdasecmnfsoi', + 'gdasesfc':'gdasesfc', + 'gdasesfcfsoi':'gdasesfcfsoi', + 'gdasefcs':'gdasefmn', + 'gdasefcsfsoi':'gdasefmnfsoi', + 'gdasepos':'gdasepmn', + 'gdaseposfsoi':'gdasepmnfsoi', + 'gdasearc':'gdaseamn'} + + else: + hyp_tasks = {'gdaseobs':'gdaseobs', + 'gdasediag':'gdasediag', + 'gdaseomg':'gdaseomn', + 'gdaseupd':'gdaseupd', + 'gdasecen':'gdasecmn', + 'gdasesfc':'gdasesfc', + 'gdasefcs':'gdasefmn', + 'gdasepos':'gdasepmn', + 'gdasearc':'gdaseamn', + 'gdasechgres':'gdasechgres'} for each_task, each_resource_string in dict_hyb_resources.iteritems(): #print each_task,hyp_tasks[each_task] #print dict_hyb_tasks[hyp_tasks[each_task]] From e621ea54563c9f5b18d5eb6a4f5264183afdf72c Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Fri, 4 Dec 2020 18:09:55 +0000 Subject: [PATCH 007/103] Fixed eupdfsoi task --- ...GLOBAL_EFSOI_UPDATE => JGDAS_EFSOI_UPDATE} | 55 +++++++++++-------- jobs/rocoto/eupdfsoi.sh | 4 +- parm/config/config.eupdfsoi | 4 -- readme_efsoi.txt | 13 +++-- ...e_fv3gfs.sh.ecf => exgdas_efsoi_update.sh} | 0 5 files changed, 41 insertions(+), 35 deletions(-) rename jobs/{JGLOBAL_EFSOI_UPDATE => JGDAS_EFSOI_UPDATE} (73%) rename scripts/{exglobal_efsoi_update_fv3gfs.sh.ecf => exgdas_efsoi_update.sh} (100%) diff --git a/jobs/JGLOBAL_EFSOI_UPDATE b/jobs/JGDAS_EFSOI_UPDATE similarity index 73% rename from jobs/JGLOBAL_EFSOI_UPDATE rename to jobs/JGDAS_EFSOI_UPDATE index 323ab4d840b..211ef3e5c47 100755 --- a/jobs/JGLOBAL_EFSOI_UPDATE +++ b/jobs/JGDAS_EFSOI_UPDATE @@ -11,8 +11,6 @@ date ############################# export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -# edited by liaofan on 2020.05.06 -#configs="base anal eupd" configs="base anal eupdfsoi" config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} for config in $configs; do @@ -25,8 +23,6 @@ done ########################################## # Source machine runtime environment ########################################## -# edited by liaofan on 2020.05.06 -#. $HOMEgfs/env/${machine}.env eupd . $HOMEgfs/env/${machine}.env eupdfsoi @@ -64,6 +60,7 @@ export pgmerr=errfile ############################################## export CDATE=${CDATE:-${PDY}${cyc}} export CDUMP=${CDUMP:-${RUN:-"gdas"}} +export COMPONENT=${COMPONENT:-atmos} if [ $RUN_ENVIR = "nco" ]; then export ROTDIR=${COMROOT:?}/$NET/$envir fi @@ -83,8 +80,13 @@ export ASUFFIX=${ASUFFIX:-$SUFFIX} export GSUFFIX=${GSUFFIX:-$SUFFIX} -# COMIN_GES_ENS and COMOUT_ANL_ENS are used in exglobal script -# TO DO: Map NCO's directory into these variables + +# COMIN_GES_ENS and COMOUT_ANL_ENS are used in script +export COMIN_GES_ENS="$ROTDIR/enkfgdas.$gPDY/$gcyc/$COMPONENT" +export COMOUT_ANL_ENS="$ROTDIR/enkf$CDUMP.$PDY/$cyc/$COMPONENT" +export COMOUT_ANL_ENSFSOI="$ROTDIR/efsoi$CDUMP.$PDY/$cyc/$COMPONENT" + + # ======= Edited by liaofan on 2020.05.06 ============== #export COMIN_GES_ENS="$ROTDIR/enkfgdas.$gPDY/$gcyc" @@ -94,21 +96,31 @@ export GSUFFIX=${GSUFFIX:-$SUFFIX} # - see rn200502 # - Do not copy the folders of each member, which were created in eupd # - Copy only files created before gdaseupd -mkdir -p $ROTDIR/fsoigdas.$PDY/$cyc -cp -u -ir $ROTDIR/enkfgdas.$PDY/$cyc/gdas.*.radstat.* $ROTDIR/fsoigdas.$PDY/$cyc/ -cp -u -ir $ROTDIR/enkfgdas.$PDY/$cyc/gdas.*.cnvstat.* $ROTDIR/fsoigdas.$PDY/$cyc/ -cp -u -ir $ROTDIR/enkfgdas.$PDY/$cyc/gdas.*.oznstat.* $ROTDIR/fsoigdas.$PDY/$cyc/ -cp -u -ir $ROTDIR/enkfgdas.$PDY/$cyc/gdas.*.loginc.txt $ROTDIR/fsoigdas.$PDY/$cyc/ -cp -u -ir $ROTDIR/enkfgdas.$PDY/$cyc/gdas.*.obsinput.* $ROTDIR/fsoigdas.$PDY/$cyc/ -cp -u -ir $ROTDIR/enkfgdas.$PDY/$cyc/gdas.*.gsistat.* $ROTDIR/fsoigdas.$PDY/$cyc/ -cp -u -ir $ROTDIR/enkfgdas.$PDY/$cyc/gdas.*.abias* $ROTDIR/fsoigdas.$PDY/$cyc/ -cp -u -ir $ROTDIR/enkfgdas.$PDY/$cyc/gdas.*.gsidiags $ROTDIR/fsoigdas.$PDY/$cyc/ + + + +# AFE some of these might be superfluous for EFSOI, unless changed for v16 +# AFE also cping should probably be done in script + # The first guess from enkfgdas -export COMIN_GES_ENS="$ROTDIR/enkfgdas.$gPDY/$gcyc" +#export COMIN_GES_ENS="$ROTDIR/enkfgdas.$gPDY/$gcyc/$COMPONENT" # The output analysis to efsoi -export COMOUT_ANL_ENS="$ROTDIR/fsoi$CDUMP.$PDY/$cyc" +#export COMOUT_ANL_ENS="$ROTDIR/fsoi$CDUMP.$PDY/$cyc/$COMPONENT" + + + +mkdir -p $COMOUT_ANL_ENSFSOI +#cp -u -ir $COMOUT_ANL_ENS/gdas.*.radstat.* $COMOUT_ANL_ENSFSOI +#cp -u -ir $COMOUT_ANL_ENS/gdas.*.cnvstat.* $COMOUT_ANL_ENSFSOI +#cp -u -ir $COMOUT_ANL_ENS/gdas.*.oznstat.* $COMOUT_ANL_ENSFSOI +#cp -u -ir $COMOUT_ANL_ENS/gdas.*.loginc.txt $COMOUT_ANL_ENSFSOI +#cp -u -ir $COMOUT_ANL_ENS/gdas.*.obsinput.* $COMOUT_ANL_ENSFSOI +#cp -u -ir $COMOUT_ANL_ENS/gdas.*.gsistat.* $COMOUT_ANL_ENSFSOI +#cp -u -ir $COMOUT_ANL_ENS/gdas.*.abias* $COMOUT_ANL_ENSFSOI +#cp -u -ir $COMOUT_ANL_ENS/gdas.*.gsidiags $COMOUT_ANL_ENSFSOI + # ======================================================== @@ -119,10 +131,7 @@ msg="HAS BEGUN on `hostname`" postmsg "$jlogfile" "$msg" $LOGSCRIPT -# Edited by liaofan on 2020.05.06 -#${ENKFUPDSH:-$SCRgsi/exglobal_enkf_update_fv3gfs.sh.ecf} -${ENKFUPDSH:-$SCRgsi/exglobal_efsoi_update_fv3gfs.sh.ecf} - +${EFSOIUPDSH:-$SCRgfs/exgdas_efsoi_update.sh} status=$? [[ $status -ne 0 ]] && exit $status @@ -131,7 +140,7 @@ status=$? # Send Alerts ############################################## if [ $SENDDBN = YES ] ; then - $DBNROOT/bin/dbn_alert MODEL ENKF1_MSC_enkfstat $job $COMOUT_ANL_ENS/${APREFIX}enkfstat + $DBNROOT/bin/dbn_alert MODEL ENKF1_MSC_enkfstat $job $COMOUT_ANL_ENSFSOI/${APREFIX}enkfstat fi @@ -156,7 +165,7 @@ postmsg "$jlogfile" "$msg" ########################################## cd $DATAROOT -echo " ====== (JGLOBAL_EFSOI_UPDATE) liaofan on 2020.05.07 === " +echo " ====== (JDAS_EFSOI_UPDATE) liaofan on 2020.05.07 === " echo "DATAROOT="$DATAROOT echo "DATA="$DATA echo " ======================================================= " diff --git a/jobs/rocoto/eupdfsoi.sh b/jobs/rocoto/eupdfsoi.sh index 67727c2c81b..cbd9e604b8b 100755 --- a/jobs/rocoto/eupdfsoi.sh +++ b/jobs/rocoto/eupdfsoi.sh @@ -8,9 +8,7 @@ status=$? ############################################################### # Execute the JJOB -# Updated by liaofan on 2020.05.07 -#$HOMEgfs/jobs/JGLOBAL_ENKF_UPDATE -$HOMEgfs/jobs/JGLOBAL_EFSOI_UPDATE +$HOMEgfs/jobs/JGDAS_EFSOI_UPDATE status=$? exit $status diff --git a/parm/config/config.eupdfsoi b/parm/config/config.eupdfsoi index 4a5235b49ac..c1417b5b41f 100755 --- a/parm/config/config.eupdfsoi +++ b/parm/config/config.eupdfsoi @@ -5,15 +5,11 @@ echo "BEGIN: config.eupdfsoi" -# edited by liaofan on 2020.05.06 ======== # Get task specific resources . $EXPDIR/config.resources eupdfsoi -export ENKFUPDSH="$HOMEgfs/scripts/exglobal_efsoi_update_fv3gfs.sh.ecf" export npe_enkf=$npe_eupd -echo "ENKFUPDSH="$ENKFUPDSH -# ============================================ # Use NAM_ENKF below for serial EnKF ##export NAM_ENKF="analpertwtnh=0.9,analpertwtsh=0.9,analpertwttr=0.9" diff --git a/readme_efsoi.txt b/readme_efsoi.txt index c2eec3a4d42..47e141b1e61 100644 --- a/readme_efsoi.txt +++ b/readme_efsoi.txt @@ -19,15 +19,17 @@ way to handle this regarding repo.] * parm/config/config.base.emc.dyn * parm/config/config.efcs * parm/config/config.eobs -[AFE 2020-11-16 also config.resources!] +[AFE 2020-11-16 also config.resources! committed because it should be pretty static] (2) Files that are added for EFSOI and then git-pushed [AFE 2020-11-16: these have been added and committed] for gdaseupdfsoi: * jobs/JGLOBAL_EFSOI_UPDATE +[AFE 2020-12-03 renamed jobs/JGDAS_EFSOI_UPDATE ] * jobs/rocoto/eupdfsoi.sh * scripts/exglobal_efsoi_update_fv3gfs.sh.ecf +[AFE 2020-12-03 renamed scrpts/exgdas_efsoi_update.sh ] * parm/config/config.eupdfsoi for gdasesfcfsoi: @@ -57,15 +59,16 @@ way to handle this regarding repo.] (3) Files that exist and are updated for EFSOI and then git-pushed for all EFSOI tasks - * env/HERA.env - * parm/config/config.resources - * ush/rocoto/setup_workflow.py + * env/HERA.env [ merged and committed ] + * parm/config/config.resources [ committed, see above] + * ush/rocoto/setup_workflow.py [ merged and committed ] + for gdasefcsfsoi only * scripts/exglobal_fcst_nemsfv3gfs.sh (4) Files that exist and are updated but not git-pushed: - +[these are in the gsi repository * scripts/exglobal_enkf_update_fv3gfs.sh.ecf * scripts/exglobal_enkf_surface_fv3gfs.sh.ecf * scripts/exglobal_enkf_recenter_fv3gfs.sh.ecf diff --git a/scripts/exglobal_efsoi_update_fv3gfs.sh.ecf b/scripts/exgdas_efsoi_update.sh similarity index 100% rename from scripts/exglobal_efsoi_update_fv3gfs.sh.ecf rename to scripts/exgdas_efsoi_update.sh From a34f9c9523c595d91b76ffdf1082f04eb7a2429f Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Fri, 4 Dec 2020 20:03:29 +0000 Subject: [PATCH 008/103] Adapted recentering task to EFSOI --- ...{JGDAS_EFSOI_RECENTER => JGDAS_EFSOI_ECEN} | 47 +++-------- jobs/rocoto/ecenfsoi.sh | 5 +- readme_efsoi.txt | 2 + ...ter_fv3gfs.sh.ecf => exgdas_efsoi_ecen.sh} | 83 +++++++------------ 4 files changed, 42 insertions(+), 95 deletions(-) rename jobs/{JGDAS_EFSOI_RECENTER => JGDAS_EFSOI_ECEN} (71%) rename scripts/{exglobal_efsoi_recenter_fv3gfs.sh.ecf => exgdas_efsoi_ecen.sh} (85%) diff --git a/jobs/JGDAS_EFSOI_RECENTER b/jobs/JGDAS_EFSOI_ECEN similarity index 71% rename from jobs/JGDAS_EFSOI_RECENTER rename to jobs/JGDAS_EFSOI_ECEN index 0c3b807a5ac..6ac43e41f82 100755 --- a/jobs/JGDAS_EFSOI_RECENTER +++ b/jobs/JGDAS_EFSOI_ECEN @@ -10,11 +10,7 @@ date # Source relevant config files ############################# export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} - -# Edited by liaofan on 2020.05.20 -#configs="base ecen" configs="base ecenfsoi" - config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} for config in $configs; do . $config_path/config.$config @@ -26,10 +22,7 @@ done ########################################## # Source machine runtime environment ########################################## -# edited by liaofan on 2020.05.20 -#. $HOMEgfs/env/${machine}.env ecen . $HOMEgfs/env/${machine}.env ecenfsoi - status=$? [[ $status -ne 0 ]] && exit $status @@ -60,10 +53,11 @@ export pgmerr=errfile ############################################## -# Set variables used in the exglobal script +# Set variables used in the script ############################################## export CDATE=${CDATE:-${PDY}${cyc}} export CDUMP=${CDUMP:-${RUN:-"gdas"}} +export COMPONENT=${COMPONENT:-atmos} if [ $RUN_ENVIR = "nco" ]; then export ROTDIR=${COMROOT:?}/$NET/$envir fi @@ -96,48 +90,29 @@ export GSUFFIX=${GSUFFIX:-$SUFFIX} export ASUFFIX=${ASUFFIX:-$SUFFIX} if [ $RUN_ENVIR = "nco" -o ${ROTDIR_DUMP:-NO} = "YES" ]; then - export COMIN_OBS=${COMIN_OBS:-$ROTDIR/$RUN.$PDY/$cyc} - export COMIN_GES_OBS=${COMIN_GES_OBS:-$ROTDIR/$GDUMP.$gPDY/$gcyc} + export COMIN_OBS=${COMIN_OBS:-$ROTDIR/$RUN.$PDY/$cyc/$COMPONENT} + export COMIN_GES_OBS=${COMIN_GES_OBS:-$ROTDIR/$GDUMP.$gPDY/$gcyc/$COMPONENT} else export COMIN_OBS="$DMPDIR/$CDATE/$CDUMP" export COMIN_GES_OBS="$DMPDIR/$GDATE/$GDUMP" fi -# COMIN, COMIN_ENS and COMIN_GES_ENS are used in exglobal script -# TO DO: Map NCO's directory into these variables -# # ======================================================= -# edited by liaofan on 2020.05.18 -export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc" -export COMIN_ENS="$ROTDIR/enkf$CDUMP_ENKF.$PDY/$cyc" -export COMOUT_ENS="$ROTDIR/enkf$CDUMP.$PDY/$cyc" -export COMIN_GES_ENS="$ROTDIR/enkf$CDUMP.$gPDY/$gcyc" - -# Current GDAS comrot folder -export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc" - -# Current ENKF (EFSOI) comrot folder -export COMIN_ENS="$ROTDIR/fsoi$CDUMP_ENKF.$PDY/$cyc" - -# Current ENKF (EFSOI) comrot folder -export COMOUT_ENS="$ROTDIR/fsoi$CDUMP.$PDY/$cyc" - -# Previous ENKF comrot folder -export COMIN_GES_ENS="$ROTDIR/enkf$CDUMP.$gPDY/$gcyc" -# ======================================================= - +# COMIN, COMIN_ENS and COMIN_GES_ENS are used in script +export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" +export COMIN_ENS="$ROTDIR/efsoi$CDUMP_ENKF.$PDY/$cyc/$COMPONENT" +export COMOUT_ENS="$ROTDIR/efsoi$CDUMP.$PDY/$cyc/$COMPONENT" +export COMIN_GES_ENS="$ROTDIR/enkf$CDUMP.$gPDY/$gcyc/$COMPONENT" ############################################################### -# Run relevant exglobal script +# Run relevant script env msg="HAS BEGUN on `hostname`" postmsg "$jlogfile" "$msg" $LOGSCRIPT -# Edited by liaofan on 2020.05.20 -#${ENKFRECENSH:-$SCRgsi/exglobal_enkf_recenter_fv3gfs.sh.ecf} -${ENKFRECENSH:-$SCRgsi/exglobal_efsoi_recenter_fv3gfs.sh.ecf} +${ENKFRECENSH:-$SCRgfs/exgdas_efsoi_ecen.sh} status=$? [[ $status -ne 0 ]] && exit $status diff --git a/jobs/rocoto/ecenfsoi.sh b/jobs/rocoto/ecenfsoi.sh index 006bff60407..f57c621937e 100755 --- a/jobs/rocoto/ecenfsoi.sh +++ b/jobs/rocoto/ecenfsoi.sh @@ -16,10 +16,7 @@ for fhr in $fhrlst; do export FHOUT_ECEN=$fhr export job=ecen${fhr} - # edited by liaofan on 2020.05.20 - #$HOMEgfs/jobs/JGDAS_ENKF_RECENTER - $HOMEgfs/jobs/JGDAS_EFSOI_RECENTER - + $HOMEgfs/jobs/JGDAS_EFSOI_ECEN status=$? [[ $status -ne 0 ]] && exit $status diff --git a/readme_efsoi.txt b/readme_efsoi.txt index 47e141b1e61..dc7780f57ac 100644 --- a/readme_efsoi.txt +++ b/readme_efsoi.txt @@ -41,7 +41,9 @@ way to handle this regarding repo.] for gdasecenfsoi * jobs/rocoto/ecenfsoi.sh * jobs/JGDAS_EFSOI_RECENTER +[AFE 2020-12-04 renamed jobs/JGDAS_EFSOI_ECEN ] * scripts/exglobal_efsoi_recenter_fv3gfs.sh.ecf +[AFE 2020-12-04 renamed scripts/exgdas_efsoi_ecen.sh, may be superfluous ] * parm/config/config.ecenfsoi for gdasefcsfsoi diff --git a/scripts/exglobal_efsoi_recenter_fv3gfs.sh.ecf b/scripts/exgdas_efsoi_ecen.sh similarity index 85% rename from scripts/exglobal_efsoi_recenter_fv3gfs.sh.ecf rename to scripts/exgdas_efsoi_ecen.sh index 35a72d048e1..6fd31574083 100755 --- a/scripts/exglobal_efsoi_recenter_fv3gfs.sh.ecf +++ b/scripts/exgdas_efsoi_ecen.sh @@ -2,8 +2,9 @@ ################################################################################ #### UNIX Script Documentation Block # . . -# Script name: exglobal_enkf_recenter_fv3gfs.sh.ecf -# Script description: recenter ensemble around hi-res deterministic analysis +# Script name: exgdas_efsoi_ecen.sh +# Script description: recenter ensemble around hi-res deterministic analysis, +# for EFSOI # # Author: Rahul Mahajan Org: NCEP/EMC Date: 2017-03-02 # @@ -26,22 +27,10 @@ fi # Directories. pwd=$(pwd) -export NWPROD=${NWPROD:-$pwd} -export HOMEgfs=${HOMEgfs:-$NWPROD} -HOMEgsi=${HOMEgsi:-$NWPROD} -export DATA=${DATA:-$pwd} -COMIN=${COMIN:-$pwd} -COMIN_ENS=${COMIN_ENS:-$COMIN} -COMIN_OBS=${COMIN_OBS:-$COMIN} -COMIN_GES=${COMIN_GES:-$COMIN} -COMIN_GES_ENS=${COMIN_GES_ENS:-$COMIN_ENS} -COMIN_GES_OBS=${COMIN_GES_OBS:-$COMIN_GES} -COMOUT=${COMOUT:-$COMIN} -COMOUT_ENS=${COMOUT_ENS:-$COMIN_ENS} +# Base variables CDATE=${CDATE:-"2010010100"} DONST=${DONST:-"NO"} - export CASE=${CASE:-384} ntiles=${ntiles:-6} @@ -55,11 +44,11 @@ NCLEN=${NCLEN:-$HOMEgfs/ush/getncdimlen} # Scripts # Executables. -GETATMENSMEANEXEC=${GETATMENSMEANEXEC:-$HOMEgsi/exec/getsigensmeanp_smooth.x} -GETSFCENSMEANEXEC=${GETSFCENSMEANEXEC:-$HOMEgsi/exec/getsfcensmeanp.x} -RECENATMEXEC=${RECENATMEXEC:-$HOMEgsi/exec/recentersigp.x} -CALCINCNEMSEXEC=${CALCINCNEMSEXEC:-$HOMEgsi/exec/calc_increment_ens.x} -CALCINCNCEXEC=${CALCINCEXEC:-$HOMEgsi/exec/calc_increment_ens_ncio.x} +GETATMENSMEANEXEC=${GETATMENSMEANEXEC:-$HOMEgfs/exec/getsigensmeanp_smooth.x} +GETSFCENSMEANEXEC=${GETSFCENSMEANEXEC:-$HOMEgfs/exec/getsfcensmeanp.x} +RECENATMEXEC=${RECENATMEXEC:-$HOMEgfs/exec/recentersigp.x} +CALCINCNEMSEXEC=${CALCINCNEMSEXEC:-$HOMEgfs/exec/calc_increment_ens.x} +CALCINCNCEXEC=${CALCINCEXEC:-$HOMEgfs/exec/calc_increment_ens_ncio.x} # Files. OPREFIX=${OPREFIX:-""} @@ -83,8 +72,8 @@ DO_CALC_INCREMENT=${DO_CALC_INCREMENT:-"NO"} # global_chgres stuff -CHGRESNEMS=${CHGRESNEMS:-$HOMEgfs/exec/chgres_recenter.exe} -CHGRESNC=${CHGRESNC:-$HOMEgfs/exec/chgres_recenter_ncio.exe} +CHGRESNEMS=${CHGRESNEMS:-$HOMEgfs/exec/enkf_chgres_recenter.x} +CHGRESNC=${CHGRESNC:-$HOMEgfs/exec/enkf_chgres_recenter_nc.x} NTHREADS_CHGRES=${NTHREADS_CHGRES:-24} APRUN_CHGRES=${APRUN_CHGRES:-""} @@ -171,6 +160,8 @@ if [ $DO_CALC_INCREMENT = "YES" ]; then ATMANLMEANNAME="atmanl_ensmean" export OMP_NUM_THREADS=$NTHREADS_ECEN + export pgm=$GETATMENSMEANEXEC + . prep_step $NCP $GETATMENSMEANEXEC $DATA $APRUN_ECEN ${DATA}/$(basename $GETATMENSMEANEXEC) $DATAPATH $ATMANLMEANNAME $ATMANLNAME $NMEM_ENKF @@ -193,6 +184,8 @@ else ATMINCMEANNAME="atminc_ensmean" export OMP_NUM_THREADS=$NTHREADS_ECEN + export pgm=$GETATMENSMEANEXEC + . prep_step $NCP $GETATMENSMEANEXEC $DATA $APRUN_ECEN ${DATA}/$(basename $GETATMENSMEANEXEC) $DATAPATH $ATMINCMEANNAME $ATMINCNAME $NMEM_ENKF @@ -211,6 +204,8 @@ else ATMGESMEANNAME="atmges_ensmean" export OMP_NUM_THREADS=$NTHREADS_ECEN + export pgm=$GETATMENSMEANEXEC + . prep_step $NCP $GETATMENSMEANEXEC $DATA $APRUN_ECEN ${DATA}/$(basename $GETATMENSMEANEXEC) $DATAPATH $ATMGESMEANNAME $ATMGESNAME $NMEM_ENKF @@ -277,7 +272,7 @@ if [ $RECENTER_ENKF = "YES" ]; then export OMP_NUM_THREADS=$NTHREADS_CHGRES - rm -f $chgresnml + [[ -f $chgresnml ]] && rm -f $chgresnml cat > $chgresnml << EOF &${nmltitle}_setup i_output=$LONB_ENKF @@ -308,6 +303,8 @@ EOF FILENAMEOUT="ratmanl" export OMP_NUM_THREADS=$NTHREADS_ECEN + export pgm=$RECENATMEXEC + . prep_step $NCP $RECENATMEXEC $DATA $APRUN_ECEN ${DATA}/$(basename $RECENATMEXEC) $FILENAMEIN $FILENAME_MEANIN $FILENAME_MEANOUT $FILENAMEOUT $NMEM_ENKF @@ -317,13 +314,6 @@ EOF export err=$ERR $ERRSCRIPT || exit 2 - # Optionally alert recentered files - if [ ${SENDDBN:-"NO"} = "YES" ]; then - for imem in $(seq 1 $NMEM_ENKF); do - memchar="mem"$(printf %03i $imem) - $DBNROOT/bin/dbn_alert MODEL GFS_ENKF $job $COMOUT_ENS/$memchar/${APREFIX}ratmanl$ASUFFIX - done - fi else ################################################################################ # Recenter ensemble member atmospheric increments about hires analysis @@ -338,7 +328,7 @@ EOF # make the small namelist file for incvars_to_zero - rm recenter.nml + [[ -f recenter.nml ]] && rm recenter.nml cat > recenter.nml << EOF &recenter incvars_to_zero = $INCREMENTS_TO_ZERO @@ -346,6 +336,9 @@ EOF EOF cat recenter.nml + export pgm=$RECENATMEXEC + . prep_step + $NCP $RECENATMEXEC $DATA $APRUN_ECEN ${DATA}/$(basename $RECENATMEXEC) $FILENAMEIN $FILENAME_INCMEANIN $FILENAME_GSIDET $FILENAMEOUT $NMEM_ENKF $FILENAME_GESMEANIN rc=$? @@ -354,13 +347,6 @@ cat recenter.nml export err=$ERR $ERRSCRIPT || exit 2 - # Optionally alert recentered files - if [ ${SENDDBN:-"NO"} = "YES" ]; then - for imem in $(seq 1 $NMEM_ENKF); do - memchar="mem"$(printf %03i $imem) - $DBNROOT/bin/dbn_alert MODEL GFS_ENKF $job $COMOUT_ENS/$memchar/${APREFIX}ratminc$ASUFFIX - done - fi fi fi @@ -375,11 +361,14 @@ if [ $DO_CALC_INCREMENT = "YES" ]; then export OMP_NUM_THREADS=$NTHREADS_CALCINC if [ ${SUFFIX} = ".nc" ]; then - CALCINCEXEC=$CALCINCNCEXEC else CALCINCEXEC=$CALCINCNEMSEXEC fi + + export pgm=$CALCINCEXEC + . prep_step + $NCP $CALCINCEXEC $DATA rm calc_increment.nml @@ -413,22 +402,6 @@ done # loop over analysis times in window ################################################################################ # Postprocessing cd $pwd - -# ========================================= -echo "=== edited by liaofan (2020.05.18) =======" -pwd - -cd $DATA -cd ../../.. -mkdir -p ${CDATE}_liaofan -mkdir -p ${CDATE}_liaofan/gdas -cp -ir $DATA ${DATA}_liaofan_from_exglobal_efsoi_recenter_fv3gfs_sh_ecf -cp -u -ir ${CDATE}/gdas/*_liaofan_from_exglobal_efsoi_recenter_fv3gfs_sh_ecf ${CDATE}_liaofan/gdas/ -echo "=========================================" -# ========================================== -# -# -# [[ $mkdata = "YES" ]] && rm -rf $DATA set +x if [ $VERBOSE = "YES" ]; then From 461fbaee3e73845268a32b1ed92c56d2a8ac5a1f Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Sat, 12 Dec 2020 14:31:03 +0000 Subject: [PATCH 009/103] changes to EFSOI surface and forecast tasks --- jobs/JGDAS_EFSOI_FCST | 30 +- jobs/JGDAS_EFSOI_SFC | 143 +++ jobs/rocoto/efcsfsoi.sh | 2 - jobs/rocoto/esfcfsoi.sh | 2 +- scripts/exgdas_efsoi_fcst.sh | 241 +++++ scripts/exgdas_efsoi_sfc.sh | 213 +++++ scripts/exglobal_efsoi_forecast.sh | 1361 ++++++++++++++++++++++++++++ 7 files changed, 1971 insertions(+), 21 deletions(-) create mode 100755 jobs/JGDAS_EFSOI_SFC create mode 100755 scripts/exgdas_efsoi_fcst.sh create mode 100755 scripts/exgdas_efsoi_sfc.sh create mode 100755 scripts/exglobal_efsoi_forecast.sh diff --git a/jobs/JGDAS_EFSOI_FCST b/jobs/JGDAS_EFSOI_FCST index 487fdb731ba..5601eb4aac3 100755 --- a/jobs/JGDAS_EFSOI_FCST +++ b/jobs/JGDAS_EFSOI_FCST @@ -11,11 +11,7 @@ date ############################# export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} - -# Edited by liaofan on 2020.05.26 -#configs="base fcst efcs" configs="base fcst efcsfsoi" - for config in $configs; do . $config_path/config.$config status=$? @@ -26,10 +22,7 @@ done ########################################## # Source machine runtime environment ########################################## -# Edited by liaofan on 2020.05.26 -#. $HOMEgfs/env/${machine}.env efcs . $HOMEgfs/env/${machine}.env efcsfsoi - status=$? [[ $status -ne 0 ]] && exit $status @@ -60,10 +53,11 @@ export pgmerr=errfile ############################################## -# Set variables used in the exglobal script +# Set variables used in the script ############################################## export CDATE=${CDATE:-${PDY}${cyc}} export CDUMP=${CDUMP:-${RUN:-"gdas"}} +export COMPONENT=${COMPONENT:-atmos} if [ $RUN_ENVIR = "nco" ]; then export ROTDIR=${COMROOT:?}/$NET/$envir fi @@ -75,17 +69,19 @@ fi export CASE=$CASE_ENKF -# COMOUT is used in exglobal script -# TO DO: Map NCO's directory into these variables -# Edited by liaofan on 2020.05.26 -#export COMOUT="$ROTDIR/enkf$CDUMP.$PDY/$cyc" -export COMOUT="$ROTDIR/fsoi$CDUMP.$PDY/$cyc" +# COMOUT is used in script +export COMOUT="$ROTDIR/efsoi$CDUMP.$PDY/$cyc/$COMPONENT" + # Forecast length for EnKF forecast +export FHMIN_ENKF=${FHMIN_EFSOI:-0} +export FHOUT_ENKF=${FHOUT_EFSOI:-6} +export FHMAX_ENKF=${FHMAX_EFSOI:-30} export FHMIN=$FHMIN_ENKF export FHOUT=$FHOUT_ENKF export FHMAX=$FHMAX_ENKF +export FORECASTSH=$HOMEgfs/scripts/exglobal_efsoi_forecast.sh # Get ENSBEG/ENSEND from ENSGRP and NMEM_EFCSGRP export ENSEND=$((NMEM_EFCSGRP * ENSGRP)) @@ -93,17 +89,15 @@ export ENSBEG=$((ENSEND - NMEM_EFCSGRP + 1)) ############################################################### -# Run relevant exglobal script +# Run relevant script env msg="HAS BEGUN on `hostname`" postmsg "$jlogfile" "$msg" $LOGSCRIPT -# Edited by liaofan on 2020.05.26 -#${ENKFFCSTSH:-$SCRgsi/exglobal_enkf_fcst_fv3gfs.sh.ecf} -${ENKFFCSTSH:-$SCRgfs/exglobal_efsoi_fcst_fv3gfs.sh.ecf} - +${ENKFFCSTSH:-$SCRgfs/exgdas_enkf_fcst.sh} +#${ENKFFCSTSH:-$SCRgfs/exgdas_efsoi_fcst.sh} status=$? [[ $status -ne 0 ]] && exit $status diff --git a/jobs/JGDAS_EFSOI_SFC b/jobs/JGDAS_EFSOI_SFC new file mode 100755 index 00000000000..0fd50f0bb29 --- /dev/null +++ b/jobs/JGDAS_EFSOI_SFC @@ -0,0 +1,143 @@ +#!/bin/ksh +set -x + +export RUN_ENVIR=${RUN_ENVIR:-"nco"} +export PS4='$SECONDS + ' +date + + +############################# +# Source relevant config files +############################# +export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} +configs="base esfcfsoi" +config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} +for config in $configs; do + . $config_path/config.$config + status=$? + [[ $status -ne 0 ]] && exit $status +done + + +########################################## +# Source machine runtime environment +########################################## +. $HOMEgfs/env/${machine}.env esfcfsoi +status=$? +[[ $status -ne 0 ]] && exit $status + + +############################################## +# Obtain unique process id (pid) and make temp directory +############################################## +export pid=${pid:-$$} +export outid=${outid:-"LL$job"} +export DATA=${DATA:-${DATAROOT}/${jobid:?}} +mkdir -p $DATA +cd $DATA + + +############################################## +# Run setpdy and initialize PDY variables +############################################## +export cycle="t${cyc}z" +setpdy.sh +. ./PDY + + +############################################## +# Determine Job Output Name on System +############################################## +export pgmout="OUTPUT.${pid}" +export pgmerr=errfile + + +############################################## +# Set variables used in the script +############################################## +export CDATE=${CDATE:-${PDY}${cyc}} +export CDUMP=${CDUMP:-${RUN:-"gdas"}} +export COMPONENT=${COMPONENT:-atmos} +if [ $RUN_ENVIR = "nco" ]; then + export ROTDIR=${COMROOT:?}/$NET/$envir +fi + + +############################################## +# Begin JOB SPECIFIC work +############################################## + +GDATE=$($NDATE -$assim_freq $CDATE) +gPDY=$(echo $GDATE | cut -c1-8) +gcyc=$(echo $GDATE | cut -c9-10) +GDUMP=${GDUMP:-"gdas"} + +export CASE=$CASE_ENKF + + +EUPD_CYC=$(echo ${EUPD_CYC:-"gdas"} | tr a-z A-Z) +if [ $EUPD_CYC = "GFS" ]; then + CDUMP_ENKF="gfs" +else + CDUMP_ENKF=$CDUMP +fi + +export OPREFIX="${CDUMP}.t${cyc}z." +export APREFIX="${CDUMP}.t${cyc}z." +export APREFIX_ENKF="${CDUMP_ENKF}.t${cyc}z." +export GPREFIX="${CDUMP}.t${gcyc}z." +export GSUFFIX=${GSUFFIX:-$SUFFIX} +export ASUFFIX=${ASUFFIX:-$SUFFIX} + +if [ $RUN_ENVIR = "nco" -o ${ROTDIR_DUMP:-NO} = "YES" ]; then + export COMIN_OBS=${COMIN_OBS:-$ROTDIR/$RUN.$PDY/$cyc/$COMPONENT} + export COMIN_GES_OBS=${COMIN_GES_OBS:-$ROTDIR/$GDUMP.$gPDY/$gcyc/$COMPONENT} +else + export COMIN_OBS="$DMPDIR/$CDATE/$CDUMP" + export COMIN_GES_OBS="$DMPDIR/$GDATE/$GDUMP" +fi + +# COMIN, COMIN_ENS and COMIN_GES_ENS are used in script +export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" +export COMIN_ENS="$ROTDIR/efsoi$CDUMP_ENKF.$PDY/$cyc/$COMPONENT" +export COMOUT_ENS="$ROTDIR/efsoi$CDUMP.$PDY/$cyc/$COMPONENT" +export COMIN_GES_ENS="$ROTDIR/enkf$CDUMP.$gPDY/$gcyc/$COMPONENT" + + +############################################################### +# Run relevant script +env +msg="HAS BEGUN on `hostname`" +postmsg "$jlogfile" "$msg" +$LOGSCRIPT + + +${ENKFRESFCSH:-$SCRgfs/exgdas_efsoi_sfc.sh} +status=$? +[[ $status -ne 0 ]] && exit $status + + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [ -e "$pgmout" ] ; then + cat $pgmout +fi + + +msg="ENDED NORMALLY." +postmsg "$jlogfile" "$msg" + + +########################################## +# Remove the Temporary working directory +########################################## +cd $DATAROOT +[[ $KEEPDATA = "NO" ]] && rm -rf $DATA + +date +exit 0 diff --git a/jobs/rocoto/efcsfsoi.sh b/jobs/rocoto/efcsfsoi.sh index 9a22ea677ab..534eee1b2c3 100755 --- a/jobs/rocoto/efcsfsoi.sh +++ b/jobs/rocoto/efcsfsoi.sh @@ -8,8 +8,6 @@ status=$? ############################################################### # Execute the JJOB -# Edited by liaofan on 2020.05.26 -#$HOMEgfs/jobs/JGDAS_ENKF_FCST $HOMEgfs/jobs/JGDAS_EFSOI_FCST status=$? diff --git a/jobs/rocoto/esfcfsoi.sh b/jobs/rocoto/esfcfsoi.sh index 0ac0448960a..3e47f2b3aa3 100755 --- a/jobs/rocoto/esfcfsoi.sh +++ b/jobs/rocoto/esfcfsoi.sh @@ -8,6 +8,6 @@ status=$? ############################################################### # Execute the JJOB -$HOMEgfs/jobs/JGDAS_EFSOI_SURFACE +$HOMEgfs/jobs/JGDAS_EFSOI_SFC status=$? exit $status diff --git a/scripts/exgdas_efsoi_fcst.sh b/scripts/exgdas_efsoi_fcst.sh new file mode 100755 index 00000000000..45da2d4e78a --- /dev/null +++ b/scripts/exgdas_efsoi_fcst.sh @@ -0,0 +1,241 @@ +#!/bin/ksh +################################################################################ +#### UNIX Script Documentation Block +# . . +# Script name: exgdas_enkf_fcst.sh +# Script description: Run ensemble forecasts +# +# Author: Rahul Mahajan Org: NCEP/EMC Date: 2017-03-02 +# +# Abstract: This script runs ensemble forecasts serially one-after-another +# +# $Id$ +# +# Attributes: +# Language: POSIX shell +# Machine: WCOSS-Cray/Theia +# +#### +################################################################################ + +# Set environment. +export VERBOSE=${VERBOSE:-"YES"} +if [ $VERBOSE = "YES" ] ; then + echo $(date) EXECUTING $0 $* >&2 + set -x +fi + +# Directories. +pwd=$(pwd) +export FIX_DIR=${FIX_DIR:-$HOMEgfs/fix} +export FIX_AM=${FIX_AM:-$FIX_DIR/fix_am} + +# Utilities +export NCP=${NCP:-"/bin/cp -p"} +export NMV=${NMV:-"/bin/mv"} +export NLN=${NLN:-"/bin/ln -sf"} +export ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} +export NDATE=${NDATE:-/$NWPROD/util/exec/ndate} + +# Scripts. +FORECASTSH=${FORECASTSH:-$HOMEgfs/scripts/exglobal_forecast.sh} + +# Enemble group, begin and end +ENSGRP=${ENSGRP:-1} +ENSBEG=${ENSBEG:-1} +ENSEND=${ENSEND:-1} + +# Model builds +export FCSTEXECDIR=${FCSTEXECDIR:-$HOMEgfs/sorc/fv3gfs.fd/BUILD/bin} +export FCSTEXEC=${FCSTEXEC:-fv3gfs.x} + +# Get DA specific diag table. +export PARM_FV3DIAG=${PARM_FV3DIAG:-$HOMEgfs/parm/parm_fv3diag} +export DIAG_TABLE=${DIAG_TABLE_ENKF:-${DIAG_TABLE:-$PARM_FV3DIAG/diag_table_da}} + +# Cycling and forecast hour specific parameters +export CDATE=${CDATE:-"2001010100"} +export CDUMP=${CDUMP:-"gdas"} + +# Re-run failed members, or entire group +RERUN_EFCSGRP=${RERUN_EFCSGRP:-"YES"} + +# Recenter flag and increment file prefix +RECENTER_ENKF=${RECENTER_ENKF:-"YES"} +export PREFIX_ATMINC=${PREFIX_ATMINC:-""} + +# Ops related stuff +SENDECF=${SENDECF:-"NO"} +SENDDBN=${SENDDBN:-"NO"} +GSUFFIX=${GSUFFIX:-$SUFFIX} + +################################################################################ +# Preprocessing +mkdata=NO +if [ ! -d $DATA ]; then + mkdata=YES + mkdir -p $DATA +fi +cd $DATA || exit 99 +DATATOP=$DATA + +################################################################################ +# Set output data +cymd=$(echo $CDATE | cut -c1-8) +chh=$(echo $CDATE | cut -c9-10) +EFCSGRP=$COMOUT/efcs.grp${ENSGRP} +if [ -f $EFCSGRP ]; then + if [ $RERUN_EFCSGRP = "YES" ]; then + rm -f $EFCSGRP + else + echo "RERUN_EFCSGRP = $RERUN_EFCSGRP, will re-run FAILED members only!" + $NMV $EFCSGRP ${EFCSGRP}.fail + fi +fi + +################################################################################ +# Set namelist/model config options common to all members once + +# There are many many model namelist options +# Some are resolution (CASE) dependent, some depend on the model configuration +# and will need to be added here before $FORECASTSH is called +# For now assume that +# 1. the ensemble and the deterministic are same resolution +# 2. the ensemble runs with the same configuration as the deterministic + +# Model config option for Ensemble +export TYPE=${TYPE_ENKF:-${TYPE:-nh}} # choices: nh, hydro +export MONO=${MONO_ENKF:-${MONO:-non-mono}} # choices: mono, non-mono + +# fv_core_nml +export CASE=${CASE_ENKF:-${CASE:-C768}} +export layout_x=${layout_x_ENKF:-${layout_x:-8}} +export layout_y=${layout_y_ENKF:-${layout_y:-16}} +export LEVS=${LEVS_ENKF:-${LEVS:-64}} + +# nggps_diag_nml +export FHOUT=${FHOUT_ENKF:-3} + +# model_configure +export DELTIM=${DELTIM_ENKF:-${DELTIM:-225}} +export FHMAX=${FHMAX_ENKF:-9} +export restart_interval=${restart_interval_ENKF:-${restart_interval:-6}} + +# gfs_physics_nml +export FHSWR=${FHSWR_ENKF:-${FHSWR:-3600.}} +export FHLWR=${FHLWR_ENKF:-${FHLWR:-3600.}} +export IEMS=${IEMS_ENKF:-${IEMS:-1}} +export ISOL=${ISOL_ENKF:-${ISOL:-2}} +export IAER=${IAER_ENKF:-${IAER:-111}} +export ICO2=${ICO2_ENKF:-${ICO2:-2}} +export cdmbgwd=${cdmbgwd_ENKF:-${cdmbgwd:-"3.5,0.25"}} +export dspheat=${dspheat_ENKF:-${dspheat:-".true."}} +export shal_cnv=${shal_cnv_ENKF:-${shal_cnv:-".true."}} +export FHZER=${FHZER_ENKF:-${FHZER:-6}} +export FHCYC=${FHCYC_ENKF:-${FHCYC:-6}} + +# Set PREFIX_ATMINC to r when recentering on +if [ $RECENTER_ENKF = "YES" ]; then + export PREFIX_ATMINC="r" +fi + +# APRUN for different executables +export APRUN_FV3=${APRUN_FV3:-${APRUN:-""}} +export NTHREADS_FV3=${NTHREADS_FV3:-${NTHREADS:-1}} + +################################################################################ +# Run forecast for ensemble member +rc=0 +for imem in $(seq $ENSBEG $ENSEND); do + + cd $DATATOP + + cmem=$(printf %03i $imem) + memchar="mem$cmem" + + echo "Processing MEMBER: $cmem" + + ra=0 + + skip_mem="NO" + if [ -f ${EFCSGRP}.fail ]; then + memstat=$(cat ${EFCSGRP}.fail | grep "MEMBER $cmem" | grep "PASS" | wc -l) + [[ $memstat -eq 1 ]] && skip_mem="YES" + fi + + if [ $skip_mem = "NO" ]; then + + ra=0 + + export MEMBER=$imem + export DATA=$DATATOP/$memchar + if [ -d $DATA ]; then rm -rf $DATA; fi + $FORECASTSH + ra=$? + + # Notify a member forecast failed and abort + if [ $ra -ne 0 ]; then + msg="FATAL ERROR: forecast of member $cmem FAILED. Aborting job" + print $msg + export err=$ra + $ERRSCRIPT || exit 2 + fi + + ((rc+=ra)) + + fi + + if [ $SENDDBN = YES ]; then + fhr=$FHOUT + while [ $fhr -le $FHMAX ]; do + FH3=$(printf %03i $fhr) + if [ $(expr $fhr % 3) -eq 0 ]; then + $DBNROOT/bin/dbn_alert MODEL GFS_ENKF $job $COMOUT/$memchar/${CDUMP}.t${cyc}z.sfcf${FH3}${GSUFFIX} + fi + fhr=$((fhr+FHOUT)) + done + fi + + cd $DATATOP + + if [ -s $EFCSGRP ]; then + $NCP $EFCSGRP log_old + fi + [[ -f log ]] && rm log + [[ -f log_new ]] && rm log_new + if [ $ra -ne 0 ]; then + echo "MEMBER $cmem : FAIL" > log + else + echo "MEMBER $cmem : PASS" > log + fi + if [ -s log_old ] ; then + cat log_old log > log_new + else + cat log > log_new + fi + $NCP log_new $EFCSGRP + +done + +################################################################################ +# Echo status of ensemble group +cd $DATATOP +echo "Status of ensemble members in group $ENSGRP:" +cat $EFCSGRP +[[ -f ${EFCSGRP}.fail ]] && rm ${EFCSGRP}.fail + +################################################################################ +# If any members failed, error out +export ERR=$rc +export err=$ERR +$ERRSCRIPT || exit 2 + +################################################################################ +# Postprocessing +cd $pwd +[[ $mkdata = "YES" ]] && rm -rf $DATATOP +set +x +if [ $VERBOSE = "YES" ] ; then + echo $(date) EXITING $0 with return code $err >&2 +fi +exit $err diff --git a/scripts/exgdas_efsoi_sfc.sh b/scripts/exgdas_efsoi_sfc.sh new file mode 100755 index 00000000000..f5ff74a8245 --- /dev/null +++ b/scripts/exgdas_efsoi_sfc.sh @@ -0,0 +1,213 @@ +#!/bin/ksh +################################################################################ +#### UNIX Script Documentation Block +# . . +# Script name: exgdas_enkf_sfc.sh +# Script description: generate ensemble surface analyses on tiles +# +# Author: Rahul Mahajan Org: NCEP/EMC Date: 2017-03-02 +# +# Abstract: This script generates ensemble surface analyses on tiles +# +# $Id$ +# +# Attributes: +# Language: POSIX shell +# Machine: WCOSS-Cray/Theia +# +################################################################################ + +# Set environment. +VERBOSE=${VERBOSE:-"YES"} +if [ $VERBOSE = "YES" ]; then + echo $(date) EXECUTING $0 $* >&2 + set -x +fi + +# Directories. +pwd=$(pwd) + +# Base variables +CDATE=${CDATE:-"2010010100"} +DONST=${DONST:-"NO"} +DOSFCANL_ENKF=${DOSFCANL_ENKF:-"YES"} +export CASE=${CASE:-384} +ntiles=${ntiles:-6} + +# Utilities +ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} +NCP=${NCP:-"/bin/cp -p"} +NLN=${NLN:-"/bin/ln -sf"} +NEMSIOGET=${NEMSIOGET:-${NWPROD}/exec/nemsio_get} +NCLEN=${NCLEN:-$HOMEgfs/ush/getncdimlen} + +# Scripts + +# Executables. + +# Files. +OPREFIX=${OPREFIX:-""} +OSUFFIX=${OSUFFIX:-""} +APREFIX=${APREFIX:-""} +APREFIX_ENKF=${APREFIX_ENKF:-$APREFIX} +ASUFFIX=${ASUFFIX:-$SUFFIX} +GPREFIX=${GPREFIX:-""} +GSUFFIX=${GSUFFIX:-$SUFFIX} + +# Variables +NMEM_ENKF=${NMEM_ENKF:-80} +DOIAU=${DOIAU_ENKF:-"NO"} + +# Global_cycle stuff +CYCLESH=${CYCLESH:-$HOMEgfs/ush/global_cycle.sh} +export CYCLEXEC=${CYCLEXEC:-$HOMEgfs/exec/global_cycle} +APRUN_CYCLE=${APRUN_CYCLE:-${APRUN:-""}} +NTHREADS_CYCLE=${NTHREADS_CYCLE:-${NTHREADS:-1}} +export FIXfv3=${FIXfv3:-$HOMEgfs/fix/fix_fv3_gmted2010} +export FIXgsm=${FIXgsm:-$HOMEgfs/fix/fix_am} +export CYCLVARS=${CYCLVARS:-"FSNOL=-2.,FSNOS=99999.,"} +export FHOUR=${FHOUR:-0} +export DELTSFC=${DELTSFC:-6} + +APRUN_ESFC=${APRUN_ESFC:-${APRUN:-""}} +NTHREADS_ESFC=${NTHREADS_ESFC:-${NTHREADS:-1}} + + +################################################################################ +# Preprocessing +mkdata=NO +if [ ! -d $DATA ]; then + mkdata=YES + mkdir -p $DATA +fi +cd $DATA || exit 99 + + +################################################################################ +# Update surface fields in the FV3 restart's using global_cycle. + +PDY=$(echo $CDATE | cut -c1-8) +cyc=$(echo $CDATE | cut -c9-10) + +GDATE=$($NDATE -$assim_freq $CDATE) +gPDY=$(echo $GDATE | cut -c1-8) +gcyc=$(echo $GDATE | cut -c9-10) +GDUMP=${GDUMP:-"gdas"} + +BDATE=$($NDATE -3 $CDATE) +bPDY=$(echo $BDATE | cut -c1-8) +bcyc=$(echo $BDATE | cut -c9-10) + +# Get dimension information based on CASE +res=$(echo $CASE | cut -c2-) +JCAP_CASE=$((res*2-2)) +LATB_CASE=$((res*2)) +LONB_CASE=$((res*4)) + +# Global cycle requires these files +export FNTSFA=${FNTSFA:-' '} +export FNACNA=${FNACNA:-$COMIN_OBS/${OPREFIX}seaice.5min.blend.grb} +export FNSNOA=${FNSNOA:-$COMIN_OBS/${OPREFIX}snogrb_t${JCAP_CASE}.${LONB_CASE}.${LATB_CASE}} +[[ ! -f $FNSNOA ]] && export FNSNOA="$COMIN_OBS/${OPREFIX}snogrb_t1534.3072.1536" +FNSNOG=${FNSNOG:-$COMIN_GES_OBS/${GPREFIX}snogrb_t${JCAP_CASE}.${LONB_CASE}.${LATB_CASE}} +[[ ! -f $FNSNOG ]] && FNSNOG="$COMIN_GES_OBS/${GPREFIX}snogrb_t1534.3072.1536" + +# Set CYCLVARS by checking grib date of current snogrb vs that of prev cycle +if [ ${RUN_GETGES:-"NO"} = "YES" ]; then + snoprv=$($GETGESSH -q -t snogrb_$JCAP_CASE -e $gesenvir -n $GDUMP -v $GDATE) +else + snoprv=${snoprv:-$FNSNOG} +fi + +if [ $($WGRIB -4yr $FNSNOA 2>/dev/null | grep -i snowc | awk -F: '{print $3}' | awk -F= '{print $2}') -le \ + $($WGRIB -4yr $snoprv 2>/dev/null | grep -i snowc | awk -F: '{print $3}' | awk -F= '{print $2}') ] ; then + export FNSNOA=" " + export CYCLVARS="FSNOL=99999.,FSNOS=99999.," +else + export SNOW_NUDGE_COEFF=${SNOW_NUDGE_COEFF:-0.} + export CYCLVARS="FSNOL=${SNOW_NUDGE_COEFF},$CYCLVARS" +fi + +if [ $DONST = "YES" ]; then + export NST_ANL=".true." + export GSI_FILE=${GSI_FILE:-$COMIN/${APREFIX}dtfanl.nc} +else + export NST_ANL=".false." + export GSI_FILE="NULL" +fi + +export APRUNCY=${APRUN_CYCLE:-$APRUN_ESFC} +export OMP_NUM_THREADS_CY=${NTHREADS_CYCLE:-$NTHREADS_ESFC} +export MAX_TASKS_CY=$NMEM_ENKF + +if [ $DOIAU = "YES" ]; then + # Update surface restarts at beginning of window when IAU is ON + # For now assume/hold dtfanl.nc is valid at beginning of window. + + for n in $(seq 1 $ntiles); do + + export TILE_NUM=$n + + for imem in $(seq 1 $NMEM_ENKF); do + + cmem=$(printf %03i $imem) + memchar="mem$cmem" + + [[ $TILE_NUM -eq 1 ]] && mkdir -p $COMOUT_ENS/$memchar/RESTART + + $NLN $COMIN_GES_ENS/$memchar/RESTART/$bPDY.${bcyc}0000.sfc_data.tile${n}.nc $DATA/fnbgsi.$cmem + $NLN $COMOUT_ENS/$memchar/RESTART/$bPDY.${bcyc}0000.sfcanl_data.tile${n}.nc $DATA/fnbgso.$cmem + $NLN $FIXfv3/$CASE/${CASE}_grid.tile${n}.nc $DATA/fngrid.$cmem + $NLN $FIXfv3/$CASE/${CASE}_oro_data.tile${n}.nc $DATA/fnorog.$cmem + + done + + $CYCLESH + rc=$? + export ERR=$rc + export err=$ERR + $ERRSCRIPT || exit 11 + + done + +fi + +if [ $DOSFCANL_ENKF = "YES" ]; then + for n in $(seq 1 $ntiles); do + + export TILE_NUM=$n + + for imem in $(seq 1 $NMEM_ENKF); do + + cmem=$(printf %03i $imem) + memchar="mem$cmem" + + [[ $TILE_NUM -eq 1 ]] && mkdir -p $COMOUT_ENS/$memchar/RESTART + + $NLN $COMIN_GES_ENS/$memchar/RESTART/$PDY.${cyc}0000.sfc_data.tile${n}.nc $DATA/fnbgsi.$cmem + $NLN $COMOUT_ENS/$memchar/RESTART/$PDY.${cyc}0000.sfcanl_data.tile${n}.nc $DATA/fnbgso.$cmem + $NLN $FIXfv3/$CASE/${CASE}_grid.tile${n}.nc $DATA/fngrid.$cmem + $NLN $FIXfv3/$CASE/${CASE}_oro_data.tile${n}.nc $DATA/fnorog.$cmem + + done + + $CYCLESH + rc=$? + export ERR=$rc + export err=$ERR + $ERRSCRIPT || exit 11 + + done +fi + +################################################################################ + +################################################################################ +# Postprocessing +cd $pwd +[[ $mkdata = "YES" ]] && rm -rf $DATA +set +x +if [ $VERBOSE = "YES" ]; then + echo $(date) EXITING $0 with return code $err >&2 +fi +exit $err diff --git a/scripts/exglobal_efsoi_forecast.sh b/scripts/exglobal_efsoi_forecast.sh new file mode 100755 index 00000000000..3740962fb81 --- /dev/null +++ b/scripts/exglobal_efsoi_forecast.sh @@ -0,0 +1,1361 @@ +#!/bin/ksh +################################################################################ +# UNIX Script Documentation Block +# Script name: exglobal_forecast.sh +# Script description: Runs a global FV3GFS model forecast +# +# Author: Fanglin Yang Org: NCEP/EMC Date: 2016-11-15 +# Abstract: This script runs a single GFS forecast with FV3 dynamical core. +# This script is created based on a C-shell script that GFDL wrote +# for the NGGPS Phase-II Dycore Comparison Project. +# +# Script history log: +# 2016-11-15 Fanglin Yang First Version. +# 2017-02-09 Rahul Mahajan Added warm start and restructured the code. +# 2017-03-10 Fanglin Yang Updated for running forecast on Cray. +# 2017-03-24 Fanglin Yang Updated to use NEMS FV3GFS with IPD4 +# 2017-05-24 Rahul Mahajan Updated for cycling with NEMS FV3GFS +# 2017-09-13 Fanglin Yang Updated for using GFDL MP and Write Component +# 2019-03-05 Rahul Mahajan Implemented IAU +# 2019-03-21 Fanglin Yang Add restart capability for running gfs fcst from a break point. +# 2019-12-12 Henrique Alves Added wave model blocks for coupled run +# 2020-01-31 Henrique Alves Added IAU capability for wave component +# 2020-06-02 Fanglin Yang restore restart capability when IAU is turned on. +# +# $Id$ +# +# Attributes: +# Language: Portable Operating System Interface (POSIX) Shell +# Machine: WCOSS-CRAY, Theia +################################################################################ + +# Set environment. +VERBOSE=${VERBOSE:-"YES"} +if [ $VERBOSE = "YES" ] ; then + echo $(date) EXECUTING $0 $* >&2 + set -x +fi + +machine=${machine:-"WCOSS_C"} +machine=$(echo $machine | tr '[a-z]' '[A-Z]') + +# Cycling and forecast hour specific parameters +CDUMPwave="${CDUMP}wave" +CASE=${CASE:-C768} +CDATE=${CDATE:-2017032500} +CDUMP=${CDUMP:-gdas} +FHMIN=${FHMIN:-0} +FHMAX=${FHMAX:-9} +FHOUT=${FHOUT:-3} +FHZER=${FHZER:-6} +FHCYC=${FHCYC:-24} +FHMAX_HF=${FHMAX_HF:-0} +FHOUT_HF=${FHOUT_HF:-1} +NSOUT=${NSOUT:-"-1"} +FDIAG=$FHOUT +if [ $FHMAX_HF -gt 0 -a $FHOUT_HF -gt 0 ]; then FDIAG=$FHOUT_HF; fi +WRITE_DOPOST=${WRITE_DOPOST:-".false."} +restart_interval=${restart_interval:-0} +rst_invt1=`echo $restart_interval |cut -d " " -f 1` + +PDY=$(echo $CDATE | cut -c1-8) +cyc=$(echo $CDATE | cut -c9-10) + +# Directories. +pwd=$(pwd) +NWPROD=${NWPROD:-${NWROOT:-$pwd}} +HOMEgfs=${HOMEgfs:-$NWPROD} +FIX_DIR=${FIX_DIR:-$HOMEgfs/fix} +FIX_AM=${FIX_AM:-$FIX_DIR/fix_am} +FIXfv3=${FIXfv3:-$FIX_DIR/fix_fv3_gmted2010} +DATA=${DATA:-$pwd/fv3tmp$$} # temporary running directory +ROTDIR=${ROTDIR:-$pwd} # rotating archive directory +ICSDIR=${ICSDIR:-$pwd} # cold start initial conditions +DMPDIR=${DMPDIR:-$pwd} # global dumps for seaice, snow and sst analysis + +# Model resolution specific parameters +DELTIM=${DELTIM:-225} +layout_x=${layout_x:-8} +layout_y=${layout_y:-16} +LEVS=${LEVS:-65} + +# Utilities +NCP=${NCP:-"/bin/cp -p"} +NLN=${NLN:-"/bin/ln -sf"} +NMV=${NMV:-"/bin/mv"} +SEND=${SEND:-"YES"} #move final result to rotating directory +ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} +KEEPDATA=${KEEPDATA:-"NO"} + +# Other options +MEMBER=${MEMBER:-"-1"} # -1: control, 0: ensemble mean, >0: ensemble member $MEMBER +ENS_NUM=${ENS_NUM:-1} # Single executable runs multiple members (e.g. GEFS) +PREFIX_ATMINC=${PREFIX_ATMINC:-""} # allow ensemble to use recentered increment + +# IAU options +DOIAU=${DOIAU:-"NO"} +IAUFHRS=${IAUFHRS:-0} +IAU_DELTHRS=${IAU_DELTHRS:-0} +IAU_OFFSET=${IAU_OFFSET:-0} + +# Model specific stuff +FCSTEXECDIR=${FCSTEXECDIR:-$HOMEgfs/sorc/fv3gfs.fd/NEMS/exe} +FCSTEXEC=${FCSTEXEC:-fv3_gfs.x} +PARM_FV3DIAG=${PARM_FV3DIAG:-$HOMEgfs/parm/parm_fv3diag} +PARM_POST=${PARM_POST:-$HOMEgfs/parm/post} + +# Wave coupling parameter defaults to false +cplwav=${cplwav:-.false.} + +# Model config options +APRUN_FV3=${APRUN_FV3:-${APRUN_FCST:-${APRUN:-""}}} +NTHREADS_FV3=${NTHREADS_FV3:-${NTHREADS_FCST:-${nth_fv3:-1}}} +cores_per_node=${cores_per_node:-${npe_node_max:-24}} +ntiles=${ntiles:-6} +NTASKS_FV3=${NTASKS_FV3:-$npe_fv3} + +TYPE=${TYPE:-"nh"} # choices: nh, hydro +MONO=${MONO:-"non-mono"} # choices: mono, non-mono + +QUILTING=${QUILTING:-".true."} +OUTPUT_GRID=${OUTPUT_GRID:-"gaussian_grid"} +OUTPUT_FILE=${OUTPUT_FILE:-"nemsio"} +WRITE_NEMSIOFLIP=${WRITE_NEMSIOFLIP:-".true."} +WRITE_FSYNCFLAG=${WRITE_FSYNCFLAG:-".true."} +affix="nemsio" +[[ "$OUTPUT_FILE" = "netcdf" ]] && affix="nc" + +rCDUMP=${rCDUMP:-$CDUMP} + +#------------------------------------------------------------------ +# setup the runtime environment +if [ $machine = "WCOSS_C" ] ; then + HUGEPAGES=${HUGEPAGES:-hugepages4M} + . $MODULESHOME/init/sh 2>/dev/null + module load iobuf craype-$HUGEPAGES 2>/dev/null + export MPICH_GNI_COLL_OPT_OFF=${MPICH_GNI_COLL_OPT_OFF:-MPI_Alltoallv} + export MKL_CBWR=AVX2 + export WRTIOBUF=${WRTIOBUF:-"4M"} + export NC_BLKSZ=${NC_BLKSZ:-"4M"} + export IOBUF_PARAMS="*nemsio:verbose:size=${WRTIOBUF},*:verbose:size=${NC_BLKSZ}" +fi + +#------------------------------------------------------- +if [ ! -d $ROTDIR ]; then mkdir -p $ROTDIR; fi +mkdata=NO +if [ ! -d $DATA ]; then + mkdata=YES + mkdir -p $DATA +fi +cd $DATA || exit 8 +mkdir -p $DATA/INPUT + +if [ $cplwav = ".true." ]; then + if [ $CDUMP = "gdas" ]; then + RSTDIR_WAVE=$ROTDIR/${CDUMP}.${PDY}/${cyc}/wave/restart + else + RSTDIR_WAVE=${RSTDIR_WAVE:-$ROTDIR/${CDUMP}.${PDY}/${cyc}/wave/restart} + fi + if [ ! -d $RSTDIR_WAVE ]; then mkdir -p $RSTDIR_WAVE ; fi + $NLN $RSTDIR_WAVE restart_wave +fi + +if [ $CDUMP = "gfs" -a $rst_invt1 -gt 0 ]; then + RSTDIR_ATM=${RSTDIR:-$ROTDIR}/${CDUMP}.${PDY}/${cyc}/atmos/RERUN_RESTART + if [ ! -d $RSTDIR_ATM ]; then mkdir -p $RSTDIR_ATM ; fi + $NLN $RSTDIR_ATM RESTART +else + mkdir -p $DATA/RESTART +fi + +#------------------------------------------------------- +# determine if restart IC exists to continue from a previous forecast +RERUN="NO" +filecount=$(find $RSTDIR_ATM -type f | wc -l) +if [ $CDUMP = "gfs" -a $rst_invt1 -gt 0 -a $FHMAX -gt $rst_invt1 -a $filecount -gt 10 ]; then + reverse=$(echo "${restart_interval[@]} " | tac -s ' ') + for xfh in $reverse ; do + yfh=$((xfh-(IAU_OFFSET/2))) + SDATE=$($NDATE +$yfh $CDATE) + PDYS=$(echo $SDATE | cut -c1-8) + cycs=$(echo $SDATE | cut -c9-10) + flag1=$RSTDIR_ATM/${PDYS}.${cycs}0000.coupler.res + flag2=$RSTDIR_ATM/coupler.res + if [ -s $flag1 ]; then + CDATE_RST=$SDATE + [[ $RERUN = "YES" ]] && break + mv $flag1 ${flag1}.old + if [ -s $flag2 ]; then mv $flag2 ${flag2}.old ;fi + RERUN="YES" + [[ $xfh = $rst_invt1 ]] && RERUN="NO" + fi + done +fi + +#------------------------------------------------------- +# member directory +if [ $MEMBER -lt 0 ]; then + prefix=$CDUMP + rprefix=$rCDUMP + memchar="" +else + prefix=efsoi$CDUMP + rprefix=enkf$rCDUMP + memchar=mem$(printf %03i $MEMBER) +fi +memdir=$ROTDIR/${prefix}.$PDY/$cyc/atmos/$memchar +if [ ! -d $memdir ]; then mkdir -p $memdir; fi + +GDATE=$($NDATE -$assim_freq $CDATE) +gPDY=$(echo $GDATE | cut -c1-8) +gcyc=$(echo $GDATE | cut -c9-10) +gmemdir=$ROTDIR/${rprefix}.$gPDY/$gcyc/atmos/$memchar +sCDATE=$($NDATE -3 $CDATE) + +if [[ "$DOIAU" = "YES" ]]; then + sCDATE=$($NDATE -3 $CDATE) + sPDY=$(echo $sCDATE | cut -c1-8) + scyc=$(echo $sCDATE | cut -c9-10) + tPDY=$gPDY + tcyc=$gcyc +else + sCDATE=$CDATE + sPDY=$PDY + scyc=$cyc + tPDY=$sPDY + tcyc=$cyc +fi + +#------------------------------------------------------- +# initial conditions +warm_start=${warm_start:-".false."} +read_increment=${read_increment:-".false."} +res_latlon_dynamics="''" + +# Determine if this is a warm start or cold start +if [ -f $gmemdir/RESTART/${sPDY}.${scyc}0000.coupler.res ]; then + export warm_start=".true." +fi + +# turn IAU off for cold start +DOIAU_coldstart=${DOIAU_coldstart:-"NO"} +if [ $DOIAU = "YES" -a $warm_start = ".false." ] || [ $DOIAU_coldstart = "YES" -a $warm_start = ".true." ]; then + export DOIAU="NO" + echo "turning off IAU" + DOIAU_coldstart="YES" + IAU_OFFSET=0 + sCDATE=$CDATE + sPDY=$PDY + scyc=$cyc + tPDY=$sPDY + tcyc=$cyc +fi + +#------------------------------------------------------- +if [ $warm_start = ".true." -o $RERUN = "YES" ]; then +#------------------------------------------------------- +#............................. + if [ $RERUN = "NO" ]; then +#............................. + + # Link all (except sfc_data) restart files from $gmemdir + for file in $(ls $gmemdir/RESTART/${sPDY}.${scyc}0000.*.nc); do + file2=$(echo $(basename $file)) + file2=$(echo $file2 | cut -d. -f3-) # remove the date from file + fsuf=$(echo $file2 | cut -d. -f1) + if [ $fsuf != "sfc_data" ]; then + $NLN $file $DATA/INPUT/$file2 + fi + done + + # Link sfcanl_data restart files from $memdir + for file in $(ls $memdir/RESTART/${sPDY}.${scyc}0000.*.nc); do + file2=$(echo $(basename $file)) + file2=$(echo $file2 | cut -d. -f3-) # remove the date from file + fsufanl=$(echo $file2 | cut -d. -f1) + if [ $fsufanl = "sfcanl_data" ]; then + file2=$(echo $file2 | sed -e "s/sfcanl_data/sfc_data/g") + $NLN $file $DATA/INPUT/$file2 + fi + done + + # Need a coupler.res when doing IAU + if [ $DOIAU = "YES" ]; then + rm -f $DATA/INPUT/coupler.res + cat >> $DATA/INPUT/coupler.res << EOF + 2 (Calendar: no_calendar=0, thirty_day_months=1, julian=2, gregorian=3, noleap=4) + ${gPDY:0:4} ${gPDY:4:2} ${gPDY:6:2} ${gcyc} 0 0 Model start time: year, month, day, hour, minute, second + ${sPDY:0:4} ${sPDY:4:2} ${sPDY:6:2} ${scyc} 0 0 Current model time: year, month, day, hour, minute, second +EOF + fi + + # Link increments + if [ $DOIAU = "YES" ]; then + for i in $(echo $IAUFHRS | sed "s/,/ /g" | rev); do + incfhr=$(printf %03i $i) + if [ $incfhr = "006" ]; then + increment_file=$memdir/${CDUMP}.t${cyc}z.${PREFIX_ATMINC}atminc.nc + else + increment_file=$memdir/${CDUMP}.t${cyc}z.${PREFIX_ATMINC}atmi${incfhr}.nc + fi + if [ ! -f $increment_file ]; then + echo "ERROR: DOIAU = $DOIAU, but missing increment file for fhr $incfhr at $increment_file" + echo "Abort!" + exit 1 + fi + $NLN $increment_file $DATA/INPUT/fv_increment$i.nc + IAU_INC_FILES="'fv_increment$i.nc',$IAU_INC_FILES" + done + read_increment=".false." + res_latlon_dynamics="" + else + increment_file=$memdir/${CDUMP}.t${cyc}z.${PREFIX_INC}atminc.nc + if [ -f $increment_file ]; then + $NLN $increment_file $DATA/INPUT/fv_increment.nc + read_increment=".true." + res_latlon_dynamics="fv_increment.nc" + fi + fi + +#............................. + else ##RERUN + + export warm_start=".true." + PDYT=$(echo $CDATE_RST | cut -c1-8) + cyct=$(echo $CDATE_RST | cut -c9-10) + for file in $(ls $RSTDIR_ATM/${PDYT}.${cyct}0000.*); do + file2=$(echo $(basename $file)) + file2=$(echo $file2 | cut -d. -f3-) + $NLN $file $DATA/INPUT/$file2 + done + + hour_rst=`$NHOUR $CDATE_RST $CDATE` + IAU_FHROT=$((IAU_OFFSET+hour_rst)) + if [ $DOIAU = "YES" ]; then + IAUFHRS=-1 + IAU_DELTHRS=0 + IAU_INC_FILES="''" + fi + + + fi +#............................. + +else ## cold start + + for file in $(ls $memdir/INPUT/*.nc); do + file2=$(echo $(basename $file)) + fsuf=$(echo $file2 | cut -c1-3) + if [ $fsuf = "gfs" -o $fsuf = "sfc" ]; then + $NLN $file $DATA/INPUT/$file2 + fi + done + +#------------------------------------------------------- +fi +#------------------------------------------------------- + +nfiles=$(ls -1 $DATA/INPUT/* | wc -l) +if [ $nfiles -le 0 ]; then + echo "Initial conditions must exist in $DATA/INPUT, ABORT!" + msg="Initial conditions must exist in $DATA/INPUT, ABORT!" + postmsg "$jlogfile" "$msg" + exit 1 +fi + +# If doing IAU, change forecast hours +if [[ "$DOIAU" = "YES" ]]; then + FHMAX=$((FHMAX+6)) + if [ $FHMAX_HF -gt 0 ]; then + FHMAX_HF=$((FHMAX_HF+6)) + fi +fi + +#-------------------------------------------------------------------------- +# Grid and orography data +for n in $(seq 1 $ntiles); do + $NLN $FIXfv3/$CASE/${CASE}_grid.tile${n}.nc $DATA/INPUT/${CASE}_grid.tile${n}.nc + $NLN $FIXfv3/$CASE/${CASE}_oro_data.tile${n}.nc $DATA/INPUT/oro_data.tile${n}.nc +done +$NLN $FIXfv3/$CASE/${CASE}_mosaic.nc $DATA/INPUT/grid_spec.nc + +# GFS standard input data +IAER=${IAER:-111} +ICO2=${ICO2:-2} + +if [ ${new_o3forc:-YES} = YES ]; then + O3FORC=ozprdlos_2015_new_sbuvO3_tclm15_nuchem.f77 +else + O3FORC=global_o3prdlos.f77 +fi +H2OFORC=${H2OFORC:-"global_h2o_pltc.f77"} +$NLN $FIX_AM/${O3FORC} $DATA/global_o3prdlos.f77 +$NLN $FIX_AM/${H2OFORC} $DATA/global_h2oprdlos.f77 +$NLN $FIX_AM/global_solarconstant_noaa_an.txt $DATA/solarconstant_noaa_an.txt +$NLN $FIX_AM/global_sfc_emissivity_idx.txt $DATA/sfc_emissivity_idx.txt + +$NLN $FIX_AM/global_co2historicaldata_glob.txt $DATA/co2historicaldata_glob.txt +$NLN $FIX_AM/co2monthlycyc.txt $DATA/co2monthlycyc.txt +if [ $ICO2 -gt 0 ]; then + for file in $(ls $FIX_AM/fix_co2_proj/global_co2historicaldata*) ; do + $NLN $file $DATA/$(echo $(basename $file) | sed -e "s/global_//g") + done +fi + +$NLN $FIX_AM/global_climaeropac_global.txt $DATA/aerosol.dat +if [ $IAER -gt 0 ] ; then + for file in $(ls $FIX_AM/global_volcanic_aerosols*) ; do + $NLN $file $DATA/$(echo $(basename $file) | sed -e "s/global_//g") + done +fi + +#-------------wavewave---------------------- +if [ $cplwav = ".true." ]; then + + for file in $(ls $COMINwave/rundata/rmp_src_to_dst_conserv_*) ; do + $NLN $file $DATA/ + done + $NLN $COMINwave/rundata/ww3_multi.${CDUMPwave}${WAV_MEMBER}.${cycle}.inp $DATA/ww3_multi.inp + + array=($WAVECUR_FID $WAVEICE_FID $WAVEWND_FID $waveuoutpGRD $waveGRD $waveesmfGRD $wavesbsGRD $wavepostGRD $waveinterpGRD) + grdALL=`printf "%s\n" "${array[@]}" | sort -u | tr '\n' ' '` + + for wavGRD in ${grdALL}; do + $NLN $COMINwave/rundata/${CDUMPwave}.mod_def.$wavGRD $DATA/mod_def.$wavGRD + done + + export WAVHCYC=${WAVHCYC:-6} + export WRDATE=`$NDATE -${WAVHCYC} $CDATE` + export WRPDY=`echo $WRDATE | cut -c1-8` + export WRcyc=`echo $WRDATE | cut -c9-10` + export WRDIR=${ROTDIR}/${CDUMPRSTwave}.${WRPDY}/${WRcyc}/wave/restart + export datwave=$COMOUTwave/rundata + export wavprfx=${CDUMPwave}${WAV_MEMBER} + + for wavGRD in $waveGRD ; do + if [ $RERUN = "NO" ]; then + if [ ! -f ${WRDIR}/${sPDY}.${scyc}0000.restart.${wavGRD} ]; then + echo "WARNING: NON-FATAL ERROR wave IC is missing, will start from rest" + fi + $NLN ${WRDIR}/${sPDY}.${scyc}0000.restart.${wavGRD} $DATA/restart.${wavGRD} + else + if [ ! -f ${RSTDIR_WAVE}/${PDYT}.${cyct}0000.restart.${wavGRD} ]; then + echo "WARNING: NON-FATAL ERROR wave IC is missing, will start from rest" + fi + $NLN ${RSTDIR_WAVE}/${PDYT}.${cyct}0000.restart.${wavGRD} $DATA/restart.${wavGRD} + fi + eval $NLN $datwave/${wavprfx}.log.${wavGRD}.${PDY}${cyc} log.${wavGRD} + done + + if [ "$WW3ICEINP" = "YES" ]; then + wavicefile=$COMINwave/rundata/${CDUMPwave}.${WAVEICE_FID}.${cycle}.ice + if [ ! -f $wavicefile ]; then + echo "ERROR: WW3ICEINP = ${WW3ICEINP}, but missing ice file" + echo "Abort!" + exit 1 + fi + $NLN ${wavicefile} $DATA/ice.${WAVEICE_FID} + fi + + if [ "$WW3CURINP" = "YES" ]; then + wavcurfile=$COMINwave/rundata/${CDUMPwave}.${WAVECUR_FID}.${cycle}.cur + if [ ! -f $wavcurfile ]; then + echo "ERROR: WW3CURINP = ${WW3CURINP}, but missing current file" + echo "Abort!" + exit 1 + fi + $NLN $wavcurfile $DATA/current.${WAVECUR_FID} + fi + + # Link output files + cd $DATA + eval $NLN $datwave/${wavprfx}.log.mww3.${PDY}${cyc} log.mww3 + + # Loop for gridded output (uses FHINC) + fhr=$FHMIN_WAV + while [ $fhr -le $FHMAX_WAV ]; do + YMDH=`$NDATE $fhr $CDATE` + YMD=$(echo $YMDH | cut -c1-8) + HMS="$(echo $YMDH | cut -c9-10)0000" + for wavGRD in ${waveGRD} ; do + eval $NLN $datwave/${wavprfx}.out_grd.${wavGRD}.${YMD}.${HMS} ${YMD}.${HMS}.out_grd.${wavGRD} + done + FHINC=$FHOUT_WAV + if [ $FHMAX_HF_WAV -gt 0 -a $FHOUT_HF_WAV -gt 0 -a $fhr -lt $FHMAX_HF_WAV ]; then + FHINC=$FHOUT_HF_WAV + fi + fhr=$((fhr+FHINC)) + done + + # Loop for point output (uses DTPNT) + fhr=$FHMIN_WAV + while [ $fhr -le $FHMAX_WAV ]; do + YMDH=`$NDATE $fhr $CDATE` + YMD=$(echo $YMDH | cut -c1-8) + HMS="$(echo $YMDH | cut -c9-10)0000" + eval $NLN $datwave/${wavprfx}.out_pnt.${waveuoutpGRD}.${YMD}.${HMS} ${YMD}.${HMS}.out_pnt.${waveuoutpGRD} + FHINC=$FHINCP_WAV + fhr=$((fhr+FHINC)) + done + +fi #cplwav=true +#-------------wavewave---------------------- + +# inline post fix files +if [ $WRITE_DOPOST = ".true." ]; then + $NLN $PARM_POST/post_tag_gfs${LEVS} $DATA/itag + $NLN $PARM_POST/postxconfig-NT-GFS-TWO.txt $DATA/postxconfig-NT.txt + $NLN $PARM_POST/postxconfig-NT-GFS-F00-TWO.txt $DATA/postxconfig-NT_FH00.txt + $NLN $PARM_POST/params_grib2_tbl_new $DATA/params_grib2_tbl_new +fi +#------------------------------------------------------------------ + +# changeable parameters +# dycore definitions +res=$(echo $CASE |cut -c2-5) +resp=$((res+1)) +npx=$resp +npy=$resp +npz=$((LEVS-1)) +io_layout=${io_layout:-"1,1"} +#ncols=$(( (${npx}-1)*(${npy}-1)*3/2 )) + +# spectral truncation and regular grid resolution based on FV3 resolution +JCAP_CASE=$((2*res-2)) +LONB_CASE=$((4*res)) +LATB_CASE=$((2*res)) + +JCAP=${JCAP:-$JCAP_CASE} +LONB=${LONB:-$LONB_CASE} +LATB=${LATB:-$LATB_CASE} + +LONB_IMO=${LONB_IMO:-$LONB_CASE} +LATB_JMO=${LATB_JMO:-$LATB_CASE} + +# Fix files +FNGLAC=${FNGLAC:-"$FIX_AM/global_glacier.2x2.grb"} +FNMXIC=${FNMXIC:-"$FIX_AM/global_maxice.2x2.grb"} +FNTSFC=${FNTSFC:-"$FIX_AM/RTGSST.1982.2012.monthly.clim.grb"} +FNSNOC=${FNSNOC:-"$FIX_AM/global_snoclim.1.875.grb"} +FNZORC=${FNZORC:-"igbp"} +FNALBC2=${FNALBC2:-"$FIX_AM/global_albedo4.1x1.grb"} +FNAISC=${FNAISC:-"$FIX_AM/CFSR.SEAICE.1982.2012.monthly.clim.grb"} +FNTG3C=${FNTG3C:-"$FIX_AM/global_tg3clim.2.6x1.5.grb"} +FNVEGC=${FNVEGC:-"$FIX_AM/global_vegfrac.0.144.decpercent.grb"} +FNMSKH=${FNMSKH:-"$FIX_AM/global_slmask.t1534.3072.1536.grb"} +FNVMNC=${FNVMNC:-"$FIX_AM/global_shdmin.0.144x0.144.grb"} +FNVMXC=${FNVMXC:-"$FIX_AM/global_shdmax.0.144x0.144.grb"} +FNSLPC=${FNSLPC:-"$FIX_AM/global_slope.1x1.grb"} +FNALBC=${FNALBC:-"$FIX_AM/global_snowfree_albedo.bosu.t${JCAP}.${LONB}.${LATB}.rg.grb"} +FNVETC=${FNVETC:-"$FIX_AM/global_vegtype.igbp.t${JCAP}.${LONB}.${LATB}.rg.grb"} +FNSOTC=${FNSOTC:-"$FIX_AM/global_soiltype.statsgo.t${JCAP}.${LONB}.${LATB}.rg.grb"} +FNABSC=${FNABSC:-"$FIX_AM/global_mxsnoalb.uariz.t${JCAP}.${LONB}.${LATB}.rg.grb"} +FNSMCC=${FNSMCC:-"$FIX_AM/global_soilmgldas.statsgo.t${JCAP}.${LONB}.${LATB}.grb"} + +# If the appropriate resolution fix file is not present, use the highest resolution available (T1534) +[[ ! -f $FNALBC ]] && FNALBC="$FIX_AM/global_snowfree_albedo.bosu.t1534.3072.1536.rg.grb" +[[ ! -f $FNVETC ]] && FNVETC="$FIX_AM/global_vegtype.igbp.t1534.3072.1536.rg.grb" +[[ ! -f $FNSOTC ]] && FNSOTC="$FIX_AM/global_soiltype.statsgo.t1534.3072.1536.rg.grb" +[[ ! -f $FNABSC ]] && FNABSC="$FIX_AM/global_mxsnoalb.uariz.t1534.3072.1536.rg.grb" +[[ ! -f $FNSMCC ]] && FNSMCC="$FIX_AM/global_soilmgldas.statsgo.t1534.3072.1536.grb" + +# NSST Options +# nstf_name contains the NSST related parameters +# nstf_name(1) : NST_MODEL (NSST Model) : 0 = OFF, 1 = ON but uncoupled, 2 = ON and coupled +# nstf_name(2) : NST_SPINUP : 0 = OFF, 1 = ON, +# nstf_name(3) : NST_RESV (Reserved, NSST Analysis) : 0 = OFF, 1 = ON +# nstf_name(4) : ZSEA1 (in mm) : 0 +# nstf_name(5) : ZSEA2 (in mm) : 0 +# nst_anl : .true. or .false., NSST analysis over lake +NST_MODEL=${NST_MODEL:-0} +NST_SPINUP=${NST_SPINUP:-0} +NST_RESV=${NST_RESV-0} +ZSEA1=${ZSEA1:-0} +ZSEA2=${ZSEA2:-0} +nstf_name=${nstf_name:-"$NST_MODEL,$NST_SPINUP,$NST_RESV,$ZSEA1,$ZSEA2"} +nst_anl=${nst_anl:-".false."} + + +# blocking factor used for threading and general physics performance +#nyblocks=`expr \( $npy - 1 \) \/ $layout_y ` +#nxblocks=`expr \( $npx - 1 \) \/ $layout_x \/ 32` +#if [ $nxblocks -le 0 ]; then nxblocks=1 ; fi +blocksize=${blocksize:-32} + +# the pre-conditioning of the solution +# =0 implies no pre-conditioning +# >0 means new adiabatic pre-conditioning +# <0 means older adiabatic pre-conditioning +na_init=${na_init:-1} +[[ $warm_start = ".true." ]] && na_init=0 + +# variables for controlling initialization of NCEP/NGGPS ICs +filtered_terrain=${filtered_terrain:-".true."} +gfs_dwinds=${gfs_dwinds:-".true."} + +# various debug options +no_dycore=${no_dycore:-".false."} +dycore_only=${adiabatic:-".false."} +chksum_debug=${chksum_debug:-".false."} +print_freq=${print_freq:-6} + +if [ ${TYPE} = "nh" ]; then # non-hydrostatic options + + hydrostatic=".false." + phys_hydrostatic=".false." # enable heating in hydrostatic balance in non-hydrostatic simulation + use_hydro_pressure=".false." # use hydrostatic pressure for physics + if [ $warm_start = ".true." ]; then + make_nh=".false." # restarts contain non-hydrostatic state + else + make_nh=".true." # re-initialize non-hydrostatic state + fi + +else # hydrostatic options + + hydrostatic=".true." + phys_hydrostatic=".false." # ignored when hydrostatic = T + use_hydro_pressure=".false." # ignored when hydrostatic = T + make_nh=".false." # running in hydrostatic mode + +fi + +# Conserve total energy as heat globally +consv_te=${consv_te:-1.} # range 0.-1., 1. will restore energy to orig. val. before physics + +# time step parameters in FV3 +k_split=${k_split:-2} +n_split=${n_split:-6} + +if [ $(echo $MONO | cut -c-4) = "mono" ]; then # monotonic options + + d_con=${d_con_mono:-"0."} + do_vort_damp=".false." + if [ ${TYPE} = "nh" ]; then # non-hydrostatic + hord_mt=${hord_mt_nh_mono:-"10"} + hord_xx=${hord_xx_nh_mono:-"10"} + else # hydrostatic + hord_mt=${hord_mt_hydro_mono:-"10"} + hord_xx=${hord_xx_hydro_mono:-"10"} + fi + +else # non-monotonic options + + d_con=${d_con_nonmono:-"1."} + do_vort_damp=".true." + if [ ${TYPE} = "nh" ]; then # non-hydrostatic + hord_mt=${hord_mt_nh_nonmono:-"5"} + hord_xx=${hord_xx_nh_nonmono:-"5"} + else # hydrostatic + hord_mt=${hord_mt_hydro_nonmono:-"10"} + hord_xx=${hord_xx_hydro_nonmono:-"10"} + fi + +fi + +if [ $(echo $MONO | cut -c-4) != "mono" -a $TYPE = "nh" ]; then + vtdm4=${vtdm4_nh_nonmono:-"0.06"} +else + vtdm4=${vtdm4:-"0.05"} +fi + +if [ $warm_start = ".true." ]; then # warm start from restart file + + nggps_ic=".false." + ncep_ic=".false." + external_ic=".false." + mountain=".true." + if [ $read_increment = ".true." ]; then # add increment on the fly to the restarts + res_latlon_dynamics="fv_increment.nc" + else + res_latlon_dynamics='""' + fi + +else # CHGRES'd GFS analyses + + nggps_ic=${nggps_ic:-".true."} + ncep_ic=${ncep_ic:-".false."} + external_ic=".true." + mountain=".false." + read_increment=".false." + res_latlon_dynamics='""' + +fi + +# Stochastic Physics Options +if [ ${SET_STP_SEED:-"YES"} = "YES" ]; then + ISEED_SKEB=$((CDATE*1000 + MEMBER*10 + 1)) + ISEED_SHUM=$((CDATE*1000 + MEMBER*10 + 2)) + ISEED_SPPT=$((CDATE*1000 + MEMBER*10 + 3)) +else + ISEED=${ISEED:-0} +fi +DO_SKEB=${DO_SKEB:-"NO"} +DO_SPPT=${DO_SPPT:-"NO"} +DO_SHUM=${DO_SHUM:-"NO"} + +if [ $DO_SKEB = "YES" ]; then + do_skeb=".true." +fi +if [ $DO_SHUM = "YES" ]; then + do_shum=".true." +fi +if [ $DO_SPPT = "YES" ]; then + do_sppt=".true." +fi + +# copy over the tables +DIAG_TABLE=${DIAG_TABLE:-$PARM_FV3DIAG/diag_table} +DATA_TABLE=${DATA_TABLE:-$PARM_FV3DIAG/data_table} +FIELD_TABLE=${FIELD_TABLE:-$PARM_FV3DIAG/field_table} + +# build the diag_table with the experiment name and date stamp +if [ $DOIAU = "YES" ]; then +cat > diag_table << EOF +FV3 Forecast +${gPDY:0:4} ${gPDY:4:2} ${gPDY:6:2} ${gcyc} 0 0 +EOF +cat $DIAG_TABLE >> diag_table +else +cat > diag_table << EOF +FV3 Forecast +${sPDY:0:4} ${sPDY:4:2} ${sPDY:6:2} ${scyc} 0 0 +EOF +cat $DIAG_TABLE >> diag_table +fi + +$NCP $DATA_TABLE data_table +$NCP $FIELD_TABLE field_table + +#------------------------------------------------------------------ +rm -f nems.configure + +if [ $cplwav = ".true." ]; then +#### ww3 version of nems.configure + +# Switch on cpl flag + cpl=.true. + +NTASKS_FV3m1=$((NTASKS_FV3-1)) +atm_petlist_bounds=" 0 $((NTASKS_FV3-1))" +wav_petlist_bounds=" $((NTASKS_FV3)) $((NTASKS_FV3m1+npe_wav))" +### atm_petlist_bounds=" 0 1511" +### atm_petlist_bounds=$atm_petlist_bounds +### wav_petlist_bounds="1512 1691" +### wav_petlist_bounds=$wav_petlist_bounds + coupling_interval_sec=${coupling_interval_sec:-1800} + rm -f nems.configure +cat > nems.configure < WAV :SrcTermProcessing=0:TermOrder=SrcSeq + WAV + @ +:: +EOF +else +#### fv3 standalone version of nems.configure +cat > nems.configure < model_configure < input.nml <> input.nml << EOF + iaufhrs = ${IAUFHRS} + iau_delthrs = ${IAU_DELTHRS} + iau_inc_files= ${IAU_INC_FILES} + iau_drymassfixer = .false. +EOF +fi + +cat >> input.nml <> input.nml + +cat >> input.nml <> input.nml +if [ $MEMBER -gt 0 ]; then + + cat >> input.nml << EOF +&nam_stochy +EOF + + if [ $DO_SKEB = "YES" ]; then + cat >> input.nml << EOF + skeb = $SKEB + iseed_skeb = ${ISEED_SKEB:-$ISEED} + skeb_tau = ${SKEB_TAU:-"-999."} + skeb_lscale = ${SKEB_LSCALE:-"-999."} + skebnorm = ${SKEBNORM:-"1"} + skeb_npass = ${SKEB_nPASS:-"30"} + skeb_vdof = ${SKEB_VDOF:-"5"} +EOF + fi + + if [ $DO_SHUM = "YES" ]; then + cat >> input.nml << EOF + shum = $SHUM + iseed_shum = ${ISEED_SHUM:-$ISEED} + shum_tau = ${SHUM_TAU:-"-999."} + shum_lscale = ${SHUM_LSCALE:-"-999."} +EOF + fi + + if [ $DO_SPPT = "YES" ]; then + cat >> input.nml << EOF + sppt = $SPPT + iseed_sppt = ${ISEED_SPPT:-$ISEED} + sppt_tau = ${SPPT_TAU:-"-999."} + sppt_lscale = ${SPPT_LSCALE:-"-999."} + sppt_logit = ${SPPT_LOGIT:-".true."} + sppt_sfclimit = ${SPPT_SFCLIMIT:-".true."} + use_zmtnblck = ${use_zmtnblck:-".true."} +EOF + fi + + cat >> input.nml << EOF + $nam_stochy_nml +/ +EOF + + + cat >> input.nml << EOF +&nam_sfcperts + $nam_sfcperts_nml +/ +EOF + +else + + cat >> input.nml << EOF +&nam_stochy +/ +&nam_sfcperts +/ +EOF + +fi + + +#------------------------------------------------------------------ +# make symbolic links to write forecast files directly in memdir +cd $DATA +if [ $QUILTING = ".true." -a $OUTPUT_GRID = "gaussian_grid" ]; then + fhr=$FHMIN + while [ $fhr -le $FHMAX ]; do + FH3=$(printf %03i $fhr) + FH2=$(printf %02i $fhr) + atmi=atmf${FH3}.$affix + sfci=sfcf${FH3}.$affix + logi=logf${FH3} + pgbi=GFSPRS.GrbF${FH2} + flxi=GFSFLX.GrbF${FH2} + atmo=$memdir/${CDUMP}.t${cyc}z.atmf${FH3}.$affix + sfco=$memdir/${CDUMP}.t${cyc}z.sfcf${FH3}.$affix + logo=$memdir/${CDUMP}.t${cyc}z.logf${FH3}.txt + pgbo=$memdir/${CDUMP}.t${cyc}z.master.grb2f${FH3} + flxo=$memdir/${CDUMP}.t${cyc}z.sfluxgrbf${FH3}.grib2 + eval $NLN $atmo $atmi + eval $NLN $sfco $sfci + eval $NLN $logo $logi + if [ $WRITE_DOPOST = ".true." ]; then + eval $NLN $pgbo $pgbi + eval $NLN $flxo $flxi + fi + FHINC=$FHOUT + if [ $FHMAX_HF -gt 0 -a $FHOUT_HF -gt 0 -a $fhr -lt $FHMAX_HF ]; then + FHINC=$FHOUT_HF + fi + fhr=$((fhr+FHINC)) + done +else + for n in $(seq 1 $ntiles); do + eval $NLN nggps2d.tile${n}.nc $memdir/nggps2d.tile${n}.nc + eval $NLN nggps3d.tile${n}.nc $memdir/nggps3d.tile${n}.nc + eval $NLN grid_spec.tile${n}.nc $memdir/grid_spec.tile${n}.nc + eval $NLN atmos_static.tile${n}.nc $memdir/atmos_static.tile${n}.nc + eval $NLN atmos_4xdaily.tile${n}.nc $memdir/atmos_4xdaily.tile${n}.nc + done +fi + +#------------------------------------------------------------------ +# run the executable + +$NCP $FCSTEXECDIR/$FCSTEXEC $DATA/. +export OMP_NUM_THREADS=$NTHREADS_FV3 +$APRUN_FV3 $DATA/$FCSTEXEC 1>&1 2>&2 +export ERR=$? +export err=$ERR +$ERRSCRIPT || exit $err + +#------------------------------------------------------------------ +if [ $SEND = "YES" ]; then + + # Copy gdas and enkf member restart files + if [ $CDUMP = "gdas" -a $rst_invt1 -gt 0 ]; then + cd $DATA/RESTART + mkdir -p $memdir/RESTART + for rst_int in $restart_interval ; do + if [ $rst_int -ge 0 ]; then + RDATE=$($NDATE +$rst_int $CDATE) + rPDY=$(echo $RDATE | cut -c1-8) + rcyc=$(echo $RDATE | cut -c9-10) + for file in $(ls ${rPDY}.${rcyc}0000.*) ; do + $NCP $file $memdir/RESTART/$file + done + fi + done + if [ $DOIAU = "YES" ] || [ $DOIAU_coldstart = "YES" ]; then + # if IAU is on, save restart at start of IAU window + rst_iau=$(( ${IAU_OFFSET} - (${IAU_DELTHRS}/2) )) + if [ $rst_iau -lt 0 ];then + rst_iau=$(( (${IAU_DELTHRS}) - ${IAU_OFFSET} )) + fi + RDATE=$($NDATE +$rst_iau $CDATE) + rPDY=$(echo $RDATE | cut -c1-8) + rcyc=$(echo $RDATE | cut -c9-10) + for file in $(ls ${rPDY}.${rcyc}0000.*) ; do + $NCP $file $memdir/RESTART/$file + done + fi + fi +fi + +#------------------------------------------------------------------ +# Clean up before leaving +if [ $mkdata = "YES" ]; then rm -rf $DATA; fi + +#------------------------------------------------------------------ +set +x +if [ $VERBOSE = "YES" ] ; then + echo $(date) EXITING $0 with return code $err >&2 +fi +exit 0 From a0d7f7e654df07e82ee5f8da138cf56667176675 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Tue, 15 Dec 2020 14:56:23 +0000 Subject: [PATCH 010/103] last of changes before fresh build test --- env/HERA.env | 5 +- jobs/JGDAS_EFSOI_POST | 31 +++----- jobs/rocoto/eposfsoi.sh | 2 - parm/config/config.base.emc.dyn | 31 ++++++-- parm/config/config.efcs | 4 +- parm/config/config.eobs | 4 +- scripts/exgdas_efsoi_update.sh | 120 ++++++++++++----------------- scripts/exglobal_efsoi_forecast.sh | 4 +- ush/rocoto/setup_workflow.py | 6 +- 9 files changed, 100 insertions(+), 107 deletions(-) diff --git a/env/HERA.env b/env/HERA.env index 7b843b8a800..b125d590901 100755 --- a/env/HERA.env +++ b/env/HERA.env @@ -262,9 +262,10 @@ elif [ $step = "epos" ]; then elif [ $step = "eposfsoi" ]; then - nth_max=$(($npe_node_max / $npe_node_eposfsoi)) + #nth_max=$(($npe_node_max / $npe_node_eposfsoi)) + nth_max=$(($npe_node_max / $npe_node_epos)) - export NTHREADS_EPOS=${nth_eposfsoi:-$nth_max} + export NTHREADS_EPOS=${nth_epos:-$nth_max} [[ $NTHREADS_EPOS -gt $nth_max ]] && export NTHREADS_EPOS=$nth_max export APRUN_EPOS="$launcher" diff --git a/jobs/JGDAS_EFSOI_POST b/jobs/JGDAS_EFSOI_POST index d49569bc9f7..f71f865b7e4 100755 --- a/jobs/JGDAS_EFSOI_POST +++ b/jobs/JGDAS_EFSOI_POST @@ -10,11 +10,7 @@ date # Source relevant config files ############################# export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} - -# edited by liaofan on 2020.06.03 -#configs="base epos" configs="base eposfsoi" - config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} for config in $configs; do . $config_path/config.$config @@ -26,10 +22,7 @@ done ########################################## # Source machine runtime environment ########################################## -# Edited by liaofan on 2020.06.03 -#. $HOMEgfs/env/${machine}.env epos . $HOMEgfs/env/${machine}.env eposfsoi - status=$? [[ $status -ne 0 ]] && exit $status @@ -60,10 +53,11 @@ export pgmerr=errfile ############################################## -# Set variables used in the exglobal script +# Set variables used in the script ############################################## export CDATE=${CDATE:-${PDY}${cyc}} export CDUMP=${CDUMP:-${RUN:-"gdas"}} +export COMPONENT=${COMPONENT:-atmos} if [ $RUN_ENVIR = "nco" ]; then export ROTDIR=${COMROOT:?}/$NET/$envir fi @@ -76,28 +70,27 @@ export GFS_NCIO=${GFS_NCIO:-"YES"} export PREFIX="${CDUMP}.t${cyc}z." -# COMIN, COMOUT are used in exglobal script -# TO DO: Map NCO's directory into these variables -# Edited by liaofan on 2020.06.03 -#export COMIN="$ROTDIR/enkf$CDUMP.$PDY/$cyc" -#export COMOUT="$ROTDIR/enkf$CDUMP.$PDY/$cyc" -export COMIN="$ROTDIR/fsoi$CDUMP.$PDY/$cyc" -export COMOUT="$ROTDIR/fsoi$CDUMP.$PDY/$cyc" +# COMIN, COMOUT are used in script +export COMIN="$ROTDIR/efsoi$CDUMP.$PDY/$cyc/$COMPONENT" +export COMOUT="$ROTDIR/efsoi$CDUMP.$PDY/$cyc/$COMPONENT" + export LEVS=$((LEVS-1)) +#export FHMIN_EPOS=6 +#export FHMAX_EPOS=30 +#export FHOUT_EPOS=6 + ############################################################### -# Run relevant exglobal script +# Run relevant script env msg="HAS BEGUN on `hostname`" postmsg "$jlogfile" "$msg" $LOGSCRIPT -# edited by liaofan on 2020.06.03 -#${ENKFPOSTSH:-$SCRgsi/exglobal_enkf_post_fv3gfs.sh.ecf} -${ENKFPOSTSH:-$SCRgfs/exglobal_efsoi_post_fv3gfs.sh.ecf} +${ENKFPOSTSH:-$SCRgfs/exgdas_enkf_post.sh} status=$? [[ $status -ne 0 ]] && exit $status diff --git a/jobs/rocoto/eposfsoi.sh b/jobs/rocoto/eposfsoi.sh index 1f4dbfbadb3..c9cc8b3c13f 100755 --- a/jobs/rocoto/eposfsoi.sh +++ b/jobs/rocoto/eposfsoi.sh @@ -17,8 +17,6 @@ for fhr in $fhrlst; do export FHOUT_EPOS=$fhr export job=epos${fhr} - # Edited by liaofan on 2020.06.03 - #$HOMEgfs/jobs/JGDAS_ENKF_POST $HOMEgfs/jobs/JGDAS_EFSOI_POST status=$? diff --git a/parm/config/config.base.emc.dyn b/parm/config/config.base.emc.dyn index c5d6295cfef..7b6598304a3 100755 --- a/parm/config/config.base.emc.dyn +++ b/parm/config/config.base.emc.dyn @@ -12,7 +12,9 @@ export machine="@MACHINE@" export RUN_ENVIR="emc" # Account, queue, etc. -export ACCOUNT="@ACCOUNT@" +# AFE 2020-11-16 changed for me, shouldn't be committed but probably will be +#export ACCOUNT="@ACCOUNT@" +export ACCOUNT="da-cpu" export QUEUE="@QUEUE@" export QUEUE_SERVICE="@QUEUE_SERVICE@" export PARTITION_BATCH="@PARTITION_BATCH@" @@ -47,7 +49,10 @@ export NOSCRUB="@NOSCRUB@" export BASE_GIT="@BASE_GIT@" # Toggle to turn on/off GFS downstream processing. -export DO_BUFRSND="YES" # BUFR sounding products +# AFE 2020-11-16 copied from LL's EFSOI configs, note +# says it was suggested by Kate. New config file? +#export DO_BUFRSND="YES" # BUFR sounding products +export DO_BUFRSND="NO" # BUFR sounding products export DO_GEMPAK="NO" # GEMPAK products export DO_AWIPS="NO" # AWIPS products export WAFSF="NO" # WAFS products @@ -161,10 +166,16 @@ export gfs_cyc=@gfs_cyc@ # 0: no GFS cycle, 1: 00Z only, 2: 00Z and 12Z only, 4: # GFS output and frequency export FHMIN_GFS=0 -export FHMAX_GFS_00=384 -export FHMAX_GFS_06=384 -export FHMAX_GFS_12=384 -export FHMAX_GFS_18=384 +# AFE 2020-11-16 This is copied from LL's EFSOI config - probably should +# go in a new config file +#export FHMAX_GFS_00=384 +#export FHMAX_GFS_06=384 +#export FHMAX_GFS_12=384 +#export FHMAX_GFS_18=384 +export FHMAX_GFS_00=72 +export FHMAX_GFS_06=72 +export FHMAX_GFS_12=72 +export FHMAX_GFS_18=72 export FHMAX_GFS=$(eval echo \${FHMAX_GFS_$cyc}) export FHOUT_GFS=3 @@ -218,9 +229,15 @@ export DO_GLDAS="YES" export gldas_cyc=00 # run wave component -export DO_WAVE="YES" +# AFE 2020-11-16 copied from LL's EFSOI configs, note +# says it was suggested by Kate. New config file? +#export DO_WAVE="YES" +export DO_WAVE="NO" export WAVE_CDUMP="both" +# AFE 2020-11-16 copied from LL's EFSOI configs +export DO_EFSOI=YES + # Microphysics Options: 99-ZhaoCarr, 8-Thompson; 6-WSM6, 10-MG, 11-GFDL export imp_physics=11 diff --git a/parm/config/config.efcs b/parm/config/config.efcs index 94b9df1840b..fa13b7d74b5 100755 --- a/parm/config/config.efcs +++ b/parm/config/config.efcs @@ -19,7 +19,9 @@ if [ $QUILTING = ".true." ]; then fi # Number of enkf members per fcst job -export NMEM_EFCSGRP=2 +#AFE 2020-11-16 changing to LL's EFSOI config +#export NMEM_EFCSGRP=2 +export NMEM_EFCSGRP=4 export RERUN_EFCSGRP="NO" # Turn off inline UPP for EnKF forecast diff --git a/parm/config/config.eobs b/parm/config/config.eobs index 8fa99c10fb1..8b06a3bc56d 100755 --- a/parm/config/config.eobs +++ b/parm/config/config.eobs @@ -9,7 +9,9 @@ echo "BEGIN: config.eobs" . $EXPDIR/config.resources eobs # Number of enkf members per innovation job -export NMEM_EOMGGRP=8 +# AFE 2020-11-16 changed to LL's EFSOI configuration +#export NMEM_EOMGGRP=8 +export NMEM_EOMGGRP=6 export RERUN_EOMGGRP="YES" export npe_gsi=$npe_eobs diff --git a/scripts/exgdas_efsoi_update.sh b/scripts/exgdas_efsoi_update.sh index 01dd1c65df9..b8d6319249d 100755 --- a/scripts/exgdas_efsoi_update.sh +++ b/scripts/exgdas_efsoi_update.sh @@ -1,14 +1,14 @@ #!/bin/ksh ################################################################################ #### UNIX Script Documentation Block -# . -# . -# Script name: exglobal_efsoi_update_fv3gfs.sh.ecf -# Script description: modified from exglobal_enkf_update_fv3gfs.sh.ecf +# . . +# Script name: exgdas_efsoi_update.sh +# Script description: Make global_enkf update for efsoi # # Author: Rahul Mahajan Org: NCEP/EMC Date: 2017-03-02 -# -# Abstract: This script runs the global_efsoi update +# Author: Liaofan Lin/Andrew Eichmann Date: 2020-12-03 +# +# Abstract: This script runs the global_enkf update for efsoi # # $Id$ # @@ -27,14 +27,6 @@ fi # Directories. pwd=$(pwd) -NWPROD=${NWPROD:-$pwd} -HOMEgsi=${HOMEgsi:-$NWPROD} -FIXgsi=${FIXgsi:-$HOMEgsi/fix} -DATA=${DATA:-$pwd/enkf_update.$$} -COMIN=${COMIN:-$pwd} -COMIN_GES_ENS=${COMIN_GES_ENS:-$COMIN} -COMOUT=${COMOUT:-$COMIN} -COMOUT_ANL_ENS=${COMOUT_ANL_ENS:-$COMOUT} # Utilities NCP=${NCP:-"/bin/cp -p"} @@ -43,12 +35,17 @@ ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} NEMSIOGET=${NEMSIOGET:-$NWPROD/utils/exec/nemsio_get} NCLEN=${NCLEN:-$HOMEgfs/ush/getncdimlen} USE_CFP=${USE_CFP:-"NO"} +CFP_MP=${CFP_MP:-"NO"} +nm="" +if [ $CFP_MP = "YES" ]; then + nm=0 +fi APRUNCFP=${APRUNCFP:-""} APRUN_ENKF=${APRUN_ENKF:-${APRUN:-""}} NTHREADS_ENKF=${NTHREADS_ENKF:-${NTHREADS:-1}} # Executables -ENKFEXEC=${ENKFEXEC:-$HOMEgsi/exec/global_enkf.x} +ENKFEXEC=${ENKFEXEC:-$HOMEgfs/exec/global_enkf.x} # Cycling and forecast hour specific parameters CDATE=${CDATE:-"2001010100"} @@ -144,13 +141,6 @@ if [ ! -d $DATA ]; then fi cd $DATA || exit 99 -################################################################################ -# Clean up the run directory -rm convinfo satinfo ozinfo hybens_info anavinfo -rm satbias_angle satbias_in -rm enkf.nml -rm sanl* - ################################################################################ # Fixed files $NLN $SATANGL satbias_angle @@ -168,7 +158,8 @@ $NLN $COMOUT_ANL_ENS/$GBIASe satbias_in ################################################################################ if [ $USE_CFP = "YES" ]; then - rm $DATA/untar.sh $DATA/mp_untar.sh + [[ -f $DATA/untar.sh ]] && rm $DATA/untar.sh + [[ -f $DATA/mp_untar.sh ]] && rm $DATA/mp_untar.sh set +x cat > $DATA/untar.sh << EOFuntar #!/bin/sh @@ -192,20 +183,25 @@ fi flist="$CNVSTAT $OZNSTAT $RADSTAT" if [ $USE_CFP = "YES" ]; then - echo "$DATA/untar.sh ensmean" | tee -a $DATA/mp_untar.sh + echo "$nm $DATA/untar.sh ensmean" | tee -a $DATA/mp_untar.sh + if [ ${CFP_MP:-"NO"} = "YES" ]; then + nm=$((nm+1)) + fi else for ftype in $flist; do fname=$COMOUT_ANL_ENS/${ftype}.ensmean tar -xvf $fname done fi - nfhrs=`echo $IAUFHRS_ENKF | sed 's/,/ /g'` for imem in $(seq 1 $NMEM_ENKF); do memchar="mem"$(printf %03i $imem) if [ $lobsdiag_forenkf = ".false." ]; then if [ $USE_CFP = "YES" ]; then - echo "$DATA/untar.sh $memchar" | tee -a $DATA/mp_untar.sh + echo "$nm $DATA/untar.sh $memchar" | tee -a $DATA/mp_untar.sh + if [ ${CFP_MP:-"NO"} = "YES" ]; then + nm=$((nm+1)) + fi else for ftype in $flist; do fname=$COMOUT_ANL_ENS/$memchar/$ftype @@ -213,33 +209,29 @@ for imem in $(seq 1 $NMEM_ENKF); do done fi fi - mkdir -p $COMOUT_ANL_ENS/$memchar + mkdir -p $COMOUT_ANL_ENSFSOI/$memchar for FHR in $nfhrs; do $NLN $COMIN_GES_ENS/$memchar/${GPREFIX}atmf00${FHR}${ENKF_SUFFIX}${GSUFFIX} sfg_${CDATE}_fhr0${FHR}_${memchar} if [ $cnvw_option = ".true." ]; then $NLN $COMIN_GES_ENS/$memchar/${GPREFIX}sfcf00${FHR}${GSUFFIX} sfgsfc_${CDATE}_fhr0${FHR}_${memchar} fi - - # ==== Edited by liaofan on 2020.05.08 ====== if [ $FHR -eq 6 ]; then if [ $DO_CALC_INCREMENT = "YES" ]; then - #$NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atmanl${ASUFFIX} sanl_${CDATE}_fhr0${FHR}_${memchar} - $NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atmanl${ASUFFIX} sanl_${CDATE}_fhr0${FHR}_ni${memchar} + #$NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atmanl${ASUFFIX} sanl_${CDATE}_fhr0${FHR}_${memchar} + $NLN $COMOUT_ANL_ENSFSOI/$memchar/${APREFIX}atmanl${ASUFFIX} sanl_${CDATE}_fhr0${FHR}_ni${memchar} else - #$NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atminc${ASUFFIX} incr_${CDATE}_fhr0${FHR}_${memchar} - $NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atminc${ASUFFIX} incr_${CDATE}_fhr0${FHR}_ni${memchar} + #$NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atminc${ASUFFIX} incr_${CDATE}_fhr0${FHR}_${memchar} + $NLN $COMOUT_ANL_ENSFSOI/$memchar/${APREFIX}atminc${ASUFFIX} incr_${CDATE}_fhr0${FHR}_ni${memchar} fi else if [ $DO_CALC_INCREMENT = "YES" ]; then - #$NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atma00${FHR}${ASUFFIX} sanl_${CDATE}_fhr0${FHR}_${memchar} - $NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atma00${FHR}${ASUFFIX} sanl_${CDATE}_fhr0${FHR}_ni${memchar} + #$NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atma00${FHR}${ASUFFIX} sanl_${CDATE}_fhr0${FHR}_${memchar} + $NLN $COMOUT_ANL_ENSFSOI/$memchar/${APREFIX}atma00${FHR}${ASUFFIX} sanl_${CDATE}_fhr0${FHR}_ni${memchar} else - #$NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atmi00${FHR}${ASUFFIX} incr_${CDATE}_fhr0${FHR}_${memchar} - $NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atmi00${FHR}${ASUFFIX} incr_${CDATE}_fhr0${FHR}_ni${memchar} + #$NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atmi00${FHR}${ASUFFIX} incr_${CDATE}_fhr0${FHR}_${memchar} + $NLN $COMOUT_ANL_ENSFSOI/$memchar/${APREFIX}atmi00${FHR}${ASUFFIX} incr_${CDATE}_fhr0${FHR}_ni${memchar} fi fi - # ============================================= - done done @@ -258,24 +250,16 @@ if [ $USE_CFP = "YES" ]; then ncmd_max=$((ncmd < npe_node_max ? ncmd : npe_node_max)) APRUNCFP=$(eval echo $APRUNCFP) $APRUNCFP $DATA/mp_untar.sh - rc=$? - export ERR=$rc + export ERR=$? export err=$ERR - $ERRSCRIPT || exit 2 + $ERRSCRIPT || exit 3 fi fi -# ===== liaofan on 2020.05.15 ================================ # Keep osense data in comrot -$NLN $COMOUT_ANL_ENS/osense_${CDATE}.dat osense_${CDATE}.dat -# ============================================================ - - +$NLN $COMOUT_ANL_ENSFSOI/osense_${CDATE}_init.dat osense_${CDATE}.dat ################################################################################ -# liaofan on 2020.05.06 -# - add "fso_cycling=.true.," in the name list -# # Create global_enkf namelist cat > enkf.nml << EOFnml &nam_enkf @@ -302,9 +286,9 @@ cat > enkf.nml << EOFnml use_correlated_oberrs=${use_correlated_oberrs}, netcdf_diag=$netcdf_diag,cnvw_option=$cnvw_option, paranc=$paranc,write_fv3_incr=$write_fv3_incr, - $WRITE_INCR_ZERO - $NAM_ENKF fso_cycling=.true., + $WRITE_INCR_ZERO + $NAM_ENKF / &satobs_enkf sattypes_rad(1) = 'amsua_n15', dsis(1) = 'amsua_n15', @@ -396,39 +380,31 @@ EOFnml ################################################################################ # Run enkf update -export OMP_NUM_THREADS=$NTHREADS_ENKF -PGM=$DATA/enkf.x -$NCP $ENKFEXEC $PGM +export OMP_NUM_THREADS=$NTHREADS_ENKF +export pgm=$ENKFEXEC +. prep_step -# Execute EnKF using same number of mpi tasks on all nodes -$APRUN_ENKF $PGM 1>stdout 2>stderr +$NCP $ENKFEXEC $DATA +$APRUN_ENKF ${DATA}/$(basename $ENKFEXEC) 1>stdout 2>stderr rc=$? export ERR=$rc export err=$ERR $ERRSCRIPT || exit 2 +# save for EFSOI task (still needed?) +$NCP $COMIN_ANL_ENS/$GBIASe $COMOUT_ANL_ENSFSOI + # Cat runtime output files. -cat stdout stderr > $COMOUT_ANL_ENS/$ENKFSTAT +cat stdout stderr > $COMOUT_ANL_ENSFSOI/$ENKFSTAT ################################################################################ # Postprocessing +######## AFE remove after testing +cp -r $DATA /scratch1/NCEPDEV/stmp4/Andrew.Eichmann/efsoi +######## AFE cd $pwd - -# ========================================= -echo "=== edited by liaofan (2020.04.12) =======" -pwd - -cd $DATA -cd ../../.. -mkdir -p ${CDATE}_liaofan -mkdir -p ${CDATE}_liaofan/${CDUMP} -cp -ir $DATA ${DATA}_liaofan_from_exglobal_efsoi_update_fv3gfs_sh_ecf -cp -u -ir ${CDATE}/gdas/*_liaofan_from_exglobal_efsoi_update_fv3gfs_sh_ecf ${CDATE}_liaofan/gdas/ -echo "=========================================" -# ========================================== - [[ $mkdata = "YES" ]] && rm -rf $DATA set +x if [ $VERBOSE = "YES" ]; then diff --git a/scripts/exglobal_efsoi_forecast.sh b/scripts/exglobal_efsoi_forecast.sh index 3740962fb81..fcf83ddd7c8 100755 --- a/scripts/exglobal_efsoi_forecast.sh +++ b/scripts/exglobal_efsoi_forecast.sh @@ -199,8 +199,10 @@ if [ $MEMBER -lt 0 ]; then rprefix=$rCDUMP memchar="" else + # needs a previous ens forecast to do a warm start prefix=efsoi$CDUMP - rprefix=enkf$rCDUMP + #rprefix=enkf$rCDUMP + rprefix=efsoi$rCDUMP memchar=mem$(printf %03i $MEMBER) fi memdir=$ROTDIR/${prefix}.$PDY/$cyc/atmos/$memchar diff --git a/ush/rocoto/setup_workflow.py b/ush/rocoto/setup_workflow.py index 1da274b9e4f..9cb2fca24b0 100755 --- a/ush/rocoto/setup_workflow.py +++ b/ush/rocoto/setup_workflow.py @@ -1415,7 +1415,8 @@ def dict_to_strings(dict_in): def get_eposfsoigroups(epos, cdump='gdas'): - fhmin = 0 + # fhmin = 0 + fhmin = 6 fhmax = 30 fhout = 6 @@ -1480,7 +1481,8 @@ def create_xml(dict_configs): 'gdasefcsfsoi':'gdasefmnfsoi', 'gdasepos':'gdasepmn', 'gdaseposfsoi':'gdasepmnfsoi', - 'gdasearc':'gdaseamn'} + 'gdasearc':'gdaseamn', + 'gdasechgres':'gdasechgres'} else: hyp_tasks = {'gdaseobs':'gdaseobs', From 0bc979202874d9f97509a7ba80f011dc2e90dcb8 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Tue, 15 Dec 2020 16:27:12 +0000 Subject: [PATCH 011/103] tweaks to ecenfsoi task --- env/HERA.env | 7 +++++-- parm/config/config.ecenfsoi | 13 ++----------- scripts/exglobal_efsoi_forecast.sh | 4 ++-- 3 files changed, 9 insertions(+), 15 deletions(-) diff --git a/env/HERA.env b/env/HERA.env index b125d590901..cb0feccd7fa 100755 --- a/env/HERA.env +++ b/env/HERA.env @@ -214,9 +214,12 @@ elif [ $step = "ecen" ]; then elif [ $step = "ecenfsoi" ]; then - nth_max=$(($npe_node_max / $npe_node_ecenfsoi)) + # AFE need to trace back to see where these are expected to be set + #nth_max=$(($npe_node_max / $npe_node_ecenfsoi)) + nth_max=$(($npe_node_max / $npe_node_ecen)) - export NTHREADS_ECEN=${nth_ecenfsoi:-$nth_max} + #export NTHREADS_ECEN=${nth_ecenfsoi:-$nth_max} + export NTHREADS_ECEN=${nth_ecen:-$nth_max} [[ $NTHREADS_ECEN -gt $nth_max ]] && export NTHREADS_ECEN=$nth_max export APRUN_ECEN="$launcher" diff --git a/parm/config/config.ecenfsoi b/parm/config/config.ecenfsoi index ee0736fd428..2fdab4ac3a0 100755 --- a/parm/config/config.ecenfsoi +++ b/parm/config/config.ecenfsoi @@ -1,21 +1,12 @@ #!/bin/ksh -x -########## config.ecenfsoi ########## +########## config.ecen ########## # Ensemble recentering specific echo "BEGIN: config.ecenfsoi" # Get task specific resources - -# Edited by liaofan on 2020.05.20 -#. $EXPDIR/config.resources ecen -. $EXPDIR/config.resources ecenfsoi - -# Edited by liaofan on 2020.05.20 -#export ENKFRECENSH="$HOMEgsi/scripts/exglobal_enkf_recenter_fv3gfs.sh.ecf" -export ENKFRECENSH="$HOMEgfs/scripts/exglobal_efsoi_recenter_fv3gfs.sh.ecf" - -export CHGRESEXEC="$HOMEgfs/exec/chgres_recenter.exe" +. $EXPDIR/config.resources ecen # Number of concurrent ecen jobs [1 implies sequential] # Usually IAUFHRS_ENKF=3,6,9, so NECENGRP=3. Scripting diff --git a/scripts/exglobal_efsoi_forecast.sh b/scripts/exglobal_efsoi_forecast.sh index fcf83ddd7c8..053732a88fc 100755 --- a/scripts/exglobal_efsoi_forecast.sh +++ b/scripts/exglobal_efsoi_forecast.sh @@ -201,8 +201,8 @@ if [ $MEMBER -lt 0 ]; then else # needs a previous ens forecast to do a warm start prefix=efsoi$CDUMP - #rprefix=enkf$rCDUMP - rprefix=efsoi$rCDUMP + rprefix=enkf$rCDUMP + #rprefix=efsoi$rCDUMP memchar=mem$(printf %03i $MEMBER) fi memdir=$ROTDIR/${prefix}.$PDY/$cyc/atmos/$memchar From c049a0c306fe9b0b42e975f230ad0e197393c6ae Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Tue, 15 Dec 2020 19:02:54 +0000 Subject: [PATCH 012/103] merged repository's efcsfsoi config --- parm/config/config.efcsfsoi | 35 +++++++---------------------------- 1 file changed, 7 insertions(+), 28 deletions(-) diff --git a/parm/config/config.efcsfsoi b/parm/config/config.efcsfsoi index 16cc2805b27..924e4225baf 100755 --- a/parm/config/config.efcsfsoi +++ b/parm/config/config.efcsfsoi @@ -1,7 +1,7 @@ #!/bin/ksh -x -########## config.efcsfsoi ########## -# Ensemble forecast specific, dependency: config.fcstfsoi +########## config.efcs ########## +# Ensemble forecast specific, dependency: config.fcst echo "BEGIN: config.efcsfsoi" @@ -9,38 +9,20 @@ echo "BEGIN: config.efcsfsoi" . $EXPDIR/config.fv3 $CASE_ENKF # Get task specific resources -# === Edited by liaofan on 2020.05.26 ==== -#. $EXPDIR/config.resources efcs . $EXPDIR/config.resources efcsfsoi -#export npe_fv3=$npe_efcs export npe_fv3=$npe_efcsfsoi -# ======================================== if [ $QUILTING = ".true." ]; then export npe_fv3=$(echo " $npe_fv3 + $WRITE_GROUP * $WRTTASK_PER_GROUP" | bc) export npe_efcs=$npe_fv3 - - # Edited by liaofan - export npe_efcsfsoi=$npe_fv3 + export npe_efcsfsoi=$npe_fv3 fi -# === Edited by liaofan on 2020.05.26 ==== -#export ENKFFCSTSH="$HOMEgsi/scripts/exglobal_enkf_fcst_fv3gfs.sh.ecf" -export ENKFFCSTSH="$HOMEgsi/scripts/exglobal_efsoi_fcst_fv3gfs.sh.ecf" -# ======================================== - - -# === Edited by liaofan on 2020.05.26 === +# Number of enkf members per fcst job +#AFE 2020-11-16 changing to LL's EFSOI config #export NMEM_EFCSGRP=2 export NMEM_EFCSGRP=4 - -# newly added below -export NMEM_EFSOIGRP=$NMEM_EFCSGRP -export EFSOI_STR_FCST="YES" -# ======================================= - - export RERUN_EFCSGRP="NO" # Turn off inline UPP for EnKF forecast @@ -77,7 +59,7 @@ export restart_interval=${restart_interval:-6} # For IAU, write restarts at beginning of window also if [ $DOIAU_ENKF = "YES" ]; then export restart_interval="6 -1" - if [[ "$SDATE" = "$CDATE" ]]; then export restart_interval="3 -1"; fi + if [[ "$SDATE" = "$CDATE" && $EXP_WARM_START = ".false." ]]; then export restart_interval="3 -1"; fi # Cold starting fi export OUTPUT_FILETYPES="$OUTPUT_FILE" @@ -98,10 +80,7 @@ if [[ "$OUTPUT_FILE" == "netcdf" ]]; then fi fi if [[ "$machine" == "HERA" ]]; then - export OUTPUT_FILETYPES=" 'netcdf_parallel' 'netcdf_parallel' " - if [ $RESTILE -le 192 ]; then - export OUTPUT_FILETYPES=" 'netcdf_parallel' 'netcdf' " - fi + export OUTPUT_FILETYPES=" 'netcdf' 'netcdf' " fi fi From 6ecbbf11e6d18c25b472d15e81b3138ef1c48ae1 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Tue, 15 Dec 2020 21:14:30 +0000 Subject: [PATCH 013/103] minor changes to make everything work together --- env/HERA.env | 4 ++-- parm/config/config.ecenfsoi | 2 +- parm/config/config.eposfsoi | 11 +---------- 3 files changed, 4 insertions(+), 13 deletions(-) diff --git a/env/HERA.env b/env/HERA.env index cb0feccd7fa..02736d2ca8e 100755 --- a/env/HERA.env +++ b/env/HERA.env @@ -265,8 +265,8 @@ elif [ $step = "epos" ]; then elif [ $step = "eposfsoi" ]; then - #nth_max=$(($npe_node_max / $npe_node_eposfsoi)) - nth_max=$(($npe_node_max / $npe_node_epos)) + nth_max=$(($npe_node_max / $npe_node_eposfsoi)) + #nth_max=$(($npe_node_max / $npe_node_epos)) export NTHREADS_EPOS=${nth_epos:-$nth_max} [[ $NTHREADS_EPOS -gt $nth_max ]] && export NTHREADS_EPOS=$nth_max diff --git a/parm/config/config.ecenfsoi b/parm/config/config.ecenfsoi index 2fdab4ac3a0..2260b8f78b7 100755 --- a/parm/config/config.ecenfsoi +++ b/parm/config/config.ecenfsoi @@ -6,7 +6,7 @@ echo "BEGIN: config.ecenfsoi" # Get task specific resources -. $EXPDIR/config.resources ecen +. $EXPDIR/config.resources ecenfsoi # Number of concurrent ecen jobs [1 implies sequential] # Usually IAUFHRS_ENKF=3,6,9, so NECENGRP=3. Scripting diff --git a/parm/config/config.eposfsoi b/parm/config/config.eposfsoi index a2a37247b64..68dea65182e 100755 --- a/parm/config/config.eposfsoi +++ b/parm/config/config.eposfsoi @@ -6,21 +6,12 @@ echo "BEGIN: config.eposfsoi" # Get task specific resources -# Edited by liaofan on 2020.06.03 -#. $EXPDIR/config.resources epos . $EXPDIR/config.resources eposfsoi -#export ENKFPOSTSH="$HOMEgsi/scripts/exglobal_enkf_post_fv3gfs.sh.ecf" -export ENKFPOSTSH="$HOMEgsi/scripts/exglobal_efsoi_post_fv3gfs.sh.ecf" - # No. of concurrent epos jobs [1 implies sequential] export NEPOSGRP=7 - if [ $l4densvar = ".false." ]; then - # Edited by liaofan on 2020.06.03 - # for 6 groups: the lead times of 0, 6, 12, 18, 24, & 30 hours - #export NEPOSGRP=3 - export NEPOSGRP=6 + export NEPOSGRP=3 fi # Generate ensemble spread files From 225ca0f466f26f13fcd5d4aeba915dbaebcbcc8c Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Wed, 16 Dec 2020 19:41:29 +0000 Subject: [PATCH 014/103] fixed config/environment interaction --- env/HERA.env | 7 ++----- parm/config/config.esfcfsoi | 5 ----- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/env/HERA.env b/env/HERA.env index 02736d2ca8e..8adb95a8dee 100755 --- a/env/HERA.env +++ b/env/HERA.env @@ -214,12 +214,9 @@ elif [ $step = "ecen" ]; then elif [ $step = "ecenfsoi" ]; then - # AFE need to trace back to see where these are expected to be set - #nth_max=$(($npe_node_max / $npe_node_ecenfsoi)) - nth_max=$(($npe_node_max / $npe_node_ecen)) + nth_max=$(($npe_node_max / $npe_node_ecenfsoi)) - #export NTHREADS_ECEN=${nth_ecenfsoi:-$nth_max} - export NTHREADS_ECEN=${nth_ecen:-$nth_max} + export NTHREADS_ECEN=${nth_ecenfsoi:-$nth_max} [[ $NTHREADS_ECEN -gt $nth_max ]] && export NTHREADS_ECEN=$nth_max export APRUN_ECEN="$launcher" diff --git a/parm/config/config.esfcfsoi b/parm/config/config.esfcfsoi index 11fd50622a6..6c156aeb62b 100755 --- a/parm/config/config.esfcfsoi +++ b/parm/config/config.esfcfsoi @@ -6,13 +6,8 @@ echo "BEGIN: config.esfcfsoi" # Get task specific resources - -# edited by liaofan on 2020.05.18 . $EXPDIR/config.resources esfcfsoi -# Edited by liaofan on 2020.05.18 -export ENKFRESFCSH="$HOMEgfs/scripts/exglobal_efsoi_surface_fv3gfs.sh.ecf" - # With IAU only need surface analysis at start of IAU window. # Set DOSFCANL_ENKF=NO to prevent creation of sfcanl at # center of analysis window. From 4e22e0e347a62f206bee0cca657622cc2c87f345 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Wed, 16 Dec 2020 20:04:40 +0000 Subject: [PATCH 015/103] adding stumps for EFSOI calculation --- jobs/JGDAS_EFSOI | 141 +++++++++++++++++++++++++++++++++++++++++++ jobs/rocoto/efsoi.sh | 15 +++++ 2 files changed, 156 insertions(+) create mode 100755 jobs/JGDAS_EFSOI create mode 100755 jobs/rocoto/efsoi.sh diff --git a/jobs/JGDAS_EFSOI b/jobs/JGDAS_EFSOI new file mode 100755 index 00000000000..12afbd87766 --- /dev/null +++ b/jobs/JGDAS_EFSOI @@ -0,0 +1,141 @@ +#!/bin/ksh +set -x + +export RUN_ENVIR=${RUN_ENVIR:-"nco"} +export PS4='$SECONDS + ' +date + + +############################# +# Source relevant config files +############################# +export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} + +configs="base anal eupdfsoi" +config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} +for config in $configs; do + . $config_path/config.$config + status=$? + [[ $status -ne 0 ]] && exit $status +done + + +########################################## +# Source machine runtime environment +########################################## +. $HOMEgfs/env/${machine}.env efsoi + + +status=$? +[[ $status -ne 0 ]] && exit $status + + +############################################## +# Obtain unique process id (pid) and make temp directory +############################################## +export pid=${pid:-$$} +export outid=${outid:-"LL$job"} +export DATA=${DATA:-${DATAROOT}/${jobid:?}} +mkdir -p $DATA +cd $DATA + + +############################################## +# Run setpdy and initialize PDY variables +############################################## +export cycle="t${cyc}z" +setpdy.sh +. ./PDY + + +############################################## +# Determine Job Output Name on System +############################################## +export pgmout="OUTPUT.${pid}" +export pgmerr=errfile + + +############################################## +# Set variables used in the exglobal script +############################################## +export CDATE=${CDATE:-${PDY}${cyc}} +export CDUMP=${CDUMP:-${RUN:-"gdas"}} +export COMPONENT=${COMPONENT:-atmos} +if [ $RUN_ENVIR = "nco" ]; then + export ROTDIR=${COMROOT:?}/$NET/$envir +fi + + +############################################## +# Begin JOB SPECIFIC work +############################################## + +GDATE=$($NDATE -$assim_freq $CDATE) +gPDY=$(echo $GDATE | cut -c1-8) +gcyc=$(echo $GDATE | cut -c9-10) + +export APREFIX="${CDUMP}.t${cyc}z." +export GPREFIX="gdas.t${gcyc}z." +export ASUFFIX=${ASUFFIX:-$SUFFIX} +export GSUFFIX=${GSUFFIX:-$SUFFIX} + + + +# COMIN_GES_ENS and COMOUT_ANL_ENS are used in script +export COMIN_GES_ENS="$ROTDIR/enkfgdas.$gPDY/$gcyc/$COMPONENT" +export COMOUT_ANL_ENS="$ROTDIR/enkf$CDUMP.$PDY/$cyc/$COMPONENT" +export COMOUT_ANL_ENSFSOI="$ROTDIR/efsoi$CDUMP.$PDY/$cyc/$COMPONENT" + +# ======================================================== + +############################################################### +# Run relevant exglobal script +env +msg="HAS BEGUN on `hostname`" +postmsg "$jlogfile" "$msg" +$LOGSCRIPT + +#${EFSOIUPDSH:-$SCRgfs/exgdas_efsoi_update.sh} +echo 'run efsoi script here' +status=$? +[[ $status -ne 0 ]] && exit $status + + +############################################## +# Send Alerts +############################################## +if [ $SENDDBN = YES ] ; then + $DBNROOT/bin/dbn_alert MODEL ENKF1_MSC_enkfstat $job $COMOUT_ANL_ENSFSOI/${APREFIX}enkfstat +fi + + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [ -e "$pgmout" ] ; then + cat $pgmout +fi + + +msg="ENDED NORMALLY." +postmsg "$jlogfile" "$msg" + + +########################################## +# Remove the Temporary working directory +########################################## +cd $DATAROOT + +echo " ====== (JDAS_EFSOI_UPDATE) liaofan on 2020.05.07 === " +echo "DATAROOT="$DATAROOT +echo "DATA="$DATA +echo " ======================================================= " + +[[ $KEEPDATA = "NO" ]] && rm -rf $DATA + +date +exit 0 diff --git a/jobs/rocoto/efsoi.sh b/jobs/rocoto/efsoi.sh new file mode 100755 index 00000000000..a6c89751ea8 --- /dev/null +++ b/jobs/rocoto/efsoi.sh @@ -0,0 +1,15 @@ +#!/bin/ksh -x + +############################################################### +# Source FV3GFS workflow modules +. $HOMEgfs/ush/load_fv3gfs_modules.sh +status=$? +[[ $status -ne 0 ]] && exit $status + +############################################################### +# Execute the JJOB +#$HOMEgfs/jobs/JGDAS_EFSOI +echo 'run efsoi job here' + +status=$? +exit $status From e008aa92f41afcc74255a18bb88e4f08554a3541 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Wed, 16 Dec 2020 20:44:03 +0000 Subject: [PATCH 016/103] cleanup of unused scripts --- scripts/exglobal_efsoi_fcst_fv3gfs.sh.ecf | 270 ---------------------- scripts/exglobal_efsoi_post_fv3gfs.sh.ecf | 211 ----------------- 2 files changed, 481 deletions(-) delete mode 100755 scripts/exglobal_efsoi_fcst_fv3gfs.sh.ecf delete mode 100755 scripts/exglobal_efsoi_post_fv3gfs.sh.ecf diff --git a/scripts/exglobal_efsoi_fcst_fv3gfs.sh.ecf b/scripts/exglobal_efsoi_fcst_fv3gfs.sh.ecf deleted file mode 100755 index 4f6e9a56ce6..00000000000 --- a/scripts/exglobal_efsoi_fcst_fv3gfs.sh.ecf +++ /dev/null @@ -1,270 +0,0 @@ -#!/bin/ksh -################################################################################ -#### UNIX Script Documentation Block -# . . -# Script name: exglobal_enkf_fcst_fv3gfs.sh.ecf -# Script description: Run ensemble forecasts -# -# Author: Rahul Mahajan Org: NCEP/EMC Date: 2017-03-02 -# -# Abstract: This script runs ensemble forecasts serially one-after-another -# -# $Id$ -# -# Attributes: -# Language: POSIX shell -# Machine: WCOSS-Cray/Theia -# -#### -################################################################################ - -# Set environment. -export VERBOSE=${VERBOSE:-"YES"} -if [ $VERBOSE = "YES" ] ; then - echo $(date) EXECUTING $0 $* >&2 - set -x -fi - -# Directories. -pwd=$(pwd) -export NWPROD=${NWPROD:-$pwd} -export HOMEgfs=${HOMEgfs:-$NWPROD} -export FIX_DIR=${FIX_DIR:-$HOMEgfs/fix} -export FIX_AM=${FIX_AM:-$FIX_DIR/fix_am} -export DATA=${DATA:-$pwd/enkf_fcst.$$} -export COMIN=${COMIN:-$pwd} -export COMOUT=${COMOUT:-$COMIN} - -GSUFFIX=${GSUFFIX:-$SUFFIX} - -# Utilities -export NCP=${NCP:-"/bin/cp -p"} -export NMV=${NMV:-"/bin/mv"} -export NLN=${NLN:-"/bin/ln -sf"} -export ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} -export NDATE=${NDATE:-/$NWPROD/util/exec/ndate} - -# Scripts. -FORECASTSH=${FORECASTSH:-$HOMEgfs/scripts/exglobal_fcst_nemsfv3gfs.sh.ecf} - -# Enemble group, begin and end -ENSGRP=${ENSGRP:-1} -ENSBEG=${ENSBEG:-1} -ENSEND=${ENSEND:-1} - -# Model builds -export FCSTEXECDIR=${FCSTEXECDIR:-$HOMEgfs/sorc/fv3gfs.fd/BUILD/bin} -export FCSTEXEC=${FCSTEXEC:-fv3gfs.x} - -# Get DA specific diag table. -export PARM_FV3DIAG=${PARM_FV3DIAG:-$HOMEgfs/parm/parm_fv3diag} -export DIAG_TABLE=${DIAG_TABLE_ENKF:-${DIAG_TABLE:-$PARM_FV3DIAG/diag_table_da}} - -# Cycling and forecast hour specific parameters -export CDATE=${CDATE:-"2001010100"} -export CDUMP=${CDUMP:-"gdas"} - -# Re-run failed members, or entire group -RERUN_EFCSGRP=${RERUN_EFCSGRP:-"YES"} - -# Recenter flag and increment file prefix -RECENTER_ENKF=${RECENTER_ENKF:-"YES"} -export PREFIX_ATMINC=${PREFIX_ATMINC:-""} - -# Ops related stuff -SENDECF=${SENDECF:-"NO"} -SENDDBN=${SENDDBN:-"NO"} - -################################################################################ -# Preprocessing -mkdata=NO -if [ ! -d $DATA ]; then - mkdata=YES - mkdir -p $DATA -fi -cd $DATA || exit 99 -DATATOP=$DATA - -################################################################################ -# Set output data -cymd=$(echo $CDATE | cut -c1-8) -chh=$(echo $CDATE | cut -c9-10) -EFCSGRP=$COMOUT/efcs.grp${ENSGRP} -if [ -f $EFCSGRP ]; then - if [ $RERUN_EFCSGRP = "YES" ]; then - rm -f $EFCSGRP - else - echo "RERUN_EFCSGRP = $RERUN_EFCSGRP, will re-run FAILED members only!" - $NMV $EFCSGRP ${EFCSGRP}.fail - fi -fi - -################################################################################ -# Set namelist/model config options common to all members once - -# There are many many model namelist options -# Some are resolution (CASE) dependent, some depend on the model configuration -# and will need to be added here before $FORECASTSH is called -# For now assume that -# 1. the ensemble and the deterministic are same resolution -# 2. the ensemble runs with the same configuration as the deterministic - -# Model config option for Ensemble -export TYPE=${TYPE_ENKF:-${TYPE:-nh}} # choices: nh, hydro -export MONO=${MONO_ENKF:-${MONO:-non-mono}} # choices: mono, non-mono - -# fv_core_nml -export CASE=${CASE_ENKF:-${CASE:-C768}} -export layout_x=${layout_x_ENKF:-${layout_x:-8}} -export layout_y=${layout_y_ENKF:-${layout_y:-16}} -export LEVS=${LEVS_ENKF:-${LEVS:-64}} - -# nggps_diag_nml -# -------------- -# Edited by liaofan on 2020.06.01 -# Force EFSOI to run output the forecast with the lead times of 0, 6, 12, 18, 24, & 30 -#export FHOUT=${FHOUT_ENKF:-3} -export FHOUT=${FHOUT_EFSOI:-6} -export FHMIN=0 - -# model_configure -# --------------- -export DELTIM=${DELTIM_ENKF:-${DELTIM:-225}} - -# Edited by liaofan on 2020.06.01 -#export FHMAX=${FHMAX_ENKF:-9} -export FHMAX=${FHMAX_EFSOI:-30} - -export restart_interval=${restart_interval_ENKF:-${restart_interval:-6}} - -# gfs_physics_nml -export FHSWR=${FHSWR_ENKF:-${FHSWR:-3600.}} -export FHLWR=${FHLWR_ENKF:-${FHLWR:-3600.}} -export IEMS=${IEMS_ENKF:-${IEMS:-1}} -export ISOL=${ISOL_ENKF:-${ISOL:-2}} -export IAER=${IAER_ENKF:-${IAER:-111}} -export ICO2=${ICO2_ENKF:-${ICO2:-2}} -export cdmbgwd=${cdmbgwd_ENKF:-${cdmbgwd:-"3.5,0.25"}} -export dspheat=${dspheat_ENKF:-${dspheat:-".true."}} - -# Edited by liaofan on 2020.06.01 -#export shal_cnv=${shal_cnv_ENKF:-${shal_cnv:-".true."}} -export shal_cnv=${shal_cnv_ENKF:-${shal_cnv:-".false."}} - -export FHZER=${FHZER_ENKF:-${FHZER:-6}} -export FHCYC=${FHCYC_ENKF:-${FHCYC:-6}} - -# Set PREFIX_ATMINC to r when recentering on -if [ $RECENTER_ENKF = "YES" ]; then - export PREFIX_ATMINC="r" -fi - -# APRUN for different executables -export APRUN_FV3=${APRUN_FV3:-${APRUN:-""}} -export NTHREADS_FV3=${NTHREADS_FV3:-${NTHREADS:-1}} - -################################################################################ -# Run forecast for ensemble member -rc=0 -for imem in $(seq $ENSBEG $ENSEND); do - - cd $DATATOP - - cmem=$(printf %03i $imem) - memchar="mem$cmem" - - echo "Processing MEMBER: $cmem" - - ra=0 - - skip_mem="NO" - if [ -f ${EFCSGRP}.fail ]; then - memstat=$(cat ${EFCSGRP}.fail | grep "MEMBER $cmem" | grep "PASS" | wc -l) - [[ $memstat -eq 1 ]] && skip_mem="YES" - fi - - # Running FV3GFS (liaofan on 2020.06.01) - if [ $skip_mem = "NO" ]; then - - ra=0 - - export MEMBER=$imem - export DATA=$DATATOP/$memchar - if [ -d $DATA ]; then rm -rf $DATA; fi - $FORECASTSH - ra=$? - - # Notify a member forecast failed, freeze epos, but continue on to next member - if [ $ra -ne 0 ]; then - msg="forecast of member $cmem FAILED" - print $msg - [[ $SENDECF = "YES" ]] && ecflow_client --abort=$msg - fi - - ((rc+=ra)) - - fi - - - if [ $SENDDBN = YES ]; then - fhr=$FHOUT - while [ $fhr -le $FHMAX ]; do - FH3=$(printf %03i $fhr) - if [ $(expr $fhr % 3) -eq 0 ]; then - $DBNROOT/bin/dbn_alert MODEL GFS_ENKF $job $COMOUT/$memchar/${CDUMP}.t${cyc}z.sfcf${FH3}.${GSUFFIX} - fi - fhr=$((fhr+FHOUT)) - done - fi - - cd $DATATOP - - $NCP $EFCSGRP log_old - rm log log_new - if [ $ra -ne 0 ]; then - echo "MEMBER $cmem : FAIL" > log - else - echo "MEMBER $cmem : PASS" > log - fi - cat log_old log > log_new - $NCP log_new $EFCSGRP - -done - -################################################################################ -# Echo status of ensemble group -cd $DATATOP -echo "Status of ensemble members in group $ENSGRP:" -cat $EFCSGRP -rm ${EFCSGRP}.fail - -################################################################################ -# If any members failed, error out -export ERR=$rc -export err=$ERR -$ERRSCRIPT || exit 2 - -################################################################################ -# Postprocessing -cd $pwd - -# -echo " ====== added by liaofan on 2020.04.27 ======" -echo $pwd - -cd $DATATOP -cd ../../.. -mkdir -p ${CDATE}_liaofan -mkdir -p ${CDATE}_liaofan/${CDUMP} -cp -ir $DATATOP ${DATATOP}_liaofan_from_exglobal_efsoi_fcst_fv3gfs_sh_ecf -cp -u -ir ${CDATE}/gdas/*_liaofan_from_exglobal_efsoi_fcst_fv3gfs_sh_ecf ${CDATE}_liaofan/gdas/ -echo " ============================================" - - -# -[[ $mkdata = "YES" ]] && rm -rf $DATATOP -set +x -if [ $VERBOSE = "YES" ] ; then - echo $(date) EXITING $0 with return code $err >&2 -fi -exit $err diff --git a/scripts/exglobal_efsoi_post_fv3gfs.sh.ecf b/scripts/exglobal_efsoi_post_fv3gfs.sh.ecf deleted file mode 100755 index a664a95ca38..00000000000 --- a/scripts/exglobal_efsoi_post_fv3gfs.sh.ecf +++ /dev/null @@ -1,211 +0,0 @@ -#!/bin/ksh -################################################################################ -#### UNIX Script Documentation Block -# . . -# Script name: exglobal_enkf_post_fv3gfs.sh.ecf -# Script description: Global ensemble forecast post processing -# -# Author: Rahul Mahajan Org: NCEP/EMC Date: 2017-03-02 -# -# Abstract: This script post-processes global ensemble forecast output -# -# $Id$ -# -# Attributes: -# Language: POSIX shell -# Machine: WCOSS-Cray/Theia -# -################################################################################ - -# Set environment. -VERBOSE=${VERBOSE:-"YES"} -if [ $VERBOSE = "YES" ]; then - echo $(date) EXECUTING $0 $* >&2 - set -x -fi - -# Directories. -pwd=$(pwd) -NWPROD=${NWPROD:-$pwd} -HOMEgsi=${HOMEgsi:-$NWPROD} -FIXgsi=${FIXgsi:-$HOMEgsi/fix} -DATA=${DATA:-$pwd} -COMIN=${COMIN:-$pwd} -COMOUT=${COMOUT:-$COMIN} - -# Utilities -ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} -NCP=${NCP:-"/bin/cp"} -NLN=${NLN:-"/bin/ln -sf"} - -APRUN_EPOS=${APRUN_EPOS:-${APRUN:-""}} -NTHREADS_EPOS=${NTHREADS_EPOS:-1} - -# Ops stuff -SENDDBN=${SENDDBN:-"NO"} - -# Fix files -LEVS=${LEVS:-64} -HYBENSMOOTH=${HYBENSMOOTH:-$FIXgsi/global_hybens_smoothinfo.l${LEVS}.txt} - -# Executables. -GETATMENSMEANEXEC=${GETATMENSMEANEXEC:-$HOMEgsi/exec/getsigensmeanp_smooth.x} -GETSFCENSMEANEXEC=${GETSFCENSMEANEXEC:-$HOMEgsi/exec/getsfcensmeanp.x} - -# Other variables. -PREFIX=${PREFIX:-""} -SUFFIX=${SUFFIX:-""} - -# Edited by liaofan on 2020.06.03 -#FHMIN=${FHMIN_EPOS:-3} -#FHMAX=${FHMAX_EPOS:-9} -#FHOUT=${FHOUT_EPOS:-3} -FHMIN=${FHMIN_EPOS:-0} -FHMAX=${FHMAX_EPOS:-30} -FHOUT=${FHOUT_EPOS:-6} - -# === added by liaofan on 2020.06.04 === -# Thwere will be a bug "seq 0 0 0". Thus, I force FHOUT=1 for f000. -if [[ $FHOUT -eq 0 ]]; then - FHOUT=1 -fi -# ====================================== - -NMEM_ENKF=${NMEM_ENKF:-80} -SMOOTH_ENKF=${SMOOTH_ENKF:-"NO"} -ENKF_SPREAD=${ENKF_SPREAD:-"NO"} - -################################################################################ -# Preprocessing -mkdata=NO -if [ ! -d $DATA ]; then - mkdata=YES - mkdir -p $DATA -fi -cd $DATA || exit 99 - -ENKF_SUFFIX="s" -[[ $SMOOTH_ENKF = "NO" ]] && ENKF_SUFFIX="" - -################################################################################ -# Copy executables to working directory -$NCP $GETSFCENSMEANEXEC $DATA -$NCP $GETATMENSMEANEXEC $DATA - -export OMP_NUM_THREADS=$NTHREADS_EPOS - -################################################################################ -# Forecast ensemble member files -for imem in $(seq 1 $NMEM_ENKF); do - memchar="mem"$(printf %03i $imem) - - for fhr in $(seq $FHMIN $FHOUT $FHMAX); do - fhrchar=$(printf %03i $fhr) - $NLN $COMIN/$memchar/${PREFIX}sfcf$fhrchar${SUFFIX} sfcf${fhrchar}_$memchar - $NLN $COMIN/$memchar/${PREFIX}atmf$fhrchar${SUFFIX} atmf${fhrchar}_$memchar - done -done - -# Forecast ensemble mean and smoothed files -for fhr in $(seq $FHMIN $FHOUT $FHMAX); do - fhrchar=$(printf %03i $fhr) - $NLN $COMOUT/${PREFIX}sfcf${fhrchar}.ensmean${SUFFIX} sfcf${fhrchar}.ensmean - $NLN $COMOUT/${PREFIX}atmf${fhrchar}.ensmean${SUFFIX} atmf${fhrchar}.ensmean - if [ $SMOOTH_ENKF = "YES" ]; then - for imem in $(seq 1 $NMEM_ENKF); do - memchar="mem"$(printf %03i $imem) - $NLN $COMOUT/$memchar/${PREFIX}atmf${fhrchar}${ENKF_SUFFIX}${SUFFIX} atmf${fhrchar}${ENKF_SUFFIX}_$memchar - done - fi - [[ $ENKF_SPREAD = "YES" ]] && $NLN $COMOUT/${PREFIX}atmf${fhrchar}.ensspread${SUFFIX} atmf${fhrchar}.ensspread -done - -################################################################################ -# Generate ensemble mean surface and atmospheric files - -rm ./hybens_smoothinfo -[[ $SMOOTH_ENKF = "YES" ]] && $NCP $HYBENSMOOTH ./hybens_smoothinfo - -rc=0 -for fhr in $(seq $FHMIN $FHOUT $FHMAX); do - fhrchar=$(printf %03i $fhr) - $APRUN_EPOS ${DATA}/$(basename $GETSFCENSMEANEXEC) ./ sfcf${fhrchar}.ensmean sfcf${fhrchar} $NMEM_ENKF - ra=$? - ((rc+=ra)) - if [ $ENKF_SPREAD = "YES" ]; then - $APRUN_EPOS ${DATA}/$(basename $GETATMENSMEANEXEC) ./ atmf${fhrchar}.ensmean atmf${fhrchar} $NMEM_ENKF atmf${fhrchar}.ensspread - else - $APRUN_EPOS ${DATA}/$(basename $GETATMENSMEANEXEC) ./ atmf${fhrchar}.ensmean atmf${fhrchar} $NMEM_ENKF - fi - ra=$? - ((rc+=ra)) -done - -export ERR=$rc -export err=$ERR -$ERRSCRIPT || exit 2 - -################################################################################ -# If smoothing on but no smoothing output, copy smoothed ensemble atmospheric files -if [ $SMOOTH_ENKF = "YES" ]; then - for fhr in $(seq $FHMIN $FHOUT $FHMAX); do - fhrchar=$(printf %03i $fhr) - if [ ! -s atmf${fhrchar}${ENKF_SUFFIX}_mem001 ]; then - echo WARNING! no smoothed ensemble member for fhour = $fhrchar >&2 - for imem in $(seq 1 $NMEM_ENKF); do - memchar="mem"$(printf %03i $imem) - $NCP atmf${fhrchar}_$memchar atmf${fhrchar}${ENKF_SUFFIX}_$memchar - done - fi - done -fi - -################################################################################ -# Send DBN alerts -if [ $SENDDBN = "YES" ]; then - - for fhr in $(seq $FHMIN $FHOUT $FHMAX); do - fhrchar=$(printf %03i $fhr) - if [ $(expr $fhr % 3) -eq 0 ]; then - if [ -s ./sfcf${fhrchar}.ensmean ]; then - $DBNROOT/bin/dbn_alert MODEL GFS_ENKF $job $COMOUT/${PREFIX}sfcf${fhrchar}.ensmean${SUFFIX} - fi - fi - done - -# Maintain gfs.v14 dbn_alerts of 6 and 9 hour EnKF forecasts - if [ $FHMIN -eq 6 -o $FHMIN -eq 9 ]; then - fhrchar=$(printf %03i $FHMIN) - for imem in $(seq 1 $NMEM_ENKF); do - memchar="mem"$(printf %03i $imem) - $DBNROOT/bin/dbn_alert MODEL GFS_ENKF $job $COMOUT/$memchar/${PREFIX}atmf${fhrchar}${ENKF_SUFFIX}${SUFFIX} - done - fi - -fi - -################################################################################ -# Postprocessing -cd $pwd - -# -echo " ====== added by liaofan on 2020.05.26 ======" -echo $pwd - -echo "date="$date - -cd $DATA -cd ../../.. -mkdir -p ${date}_liaofan -mkdir -p ${date}_liaofan/gdas -cp -ir $DATA ${DATA}_liaofan_from_exglobal_efsoi_post_fv3gfs_sh_ecf -cp -u -ir ${date}/gdas/*_liaofan_from_exglobal_efsoi_post_fv3gfs_sh_ecf ${date}_liaofan/gdas/ -echo " ============================================" - - -[[ $mkdata = "YES" ]] && rm -rf $DATA -set +x -if [ $VERBOSE = "YES" ]; then - echo $(date) EXITING $0 with return code $err >&2 -fi -exit $err From b921e13b230a6b801db3eb9f4fd60ce1623268f6 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Thu, 17 Dec 2020 01:26:41 +0000 Subject: [PATCH 017/103] cleanup of some call stacks for efsoi tasks --- jobs/JGDAS_EFSOI_ECEN | 3 +- jobs/JGDAS_EFSOI_FCST | 1 - jobs/JGDAS_EFSOI_SFC | 14 +- jobs/JGDAS_EFSOI_SURFACE | 170 -------- scripts/exgdas_efsoi_ecen.sh | 410 ------------------- scripts/exgdas_efsoi_sfc.sh | 213 ---------- scripts/exglobal_efsoi_surface_fv3gfs.sh.ecf | 241 ----------- 7 files changed, 15 insertions(+), 1037 deletions(-) delete mode 100755 jobs/JGDAS_EFSOI_SURFACE delete mode 100755 scripts/exgdas_efsoi_ecen.sh delete mode 100755 scripts/exgdas_efsoi_sfc.sh delete mode 100755 scripts/exglobal_efsoi_surface_fv3gfs.sh.ecf diff --git a/jobs/JGDAS_EFSOI_ECEN b/jobs/JGDAS_EFSOI_ECEN index 6ac43e41f82..fdadf4b7246 100755 --- a/jobs/JGDAS_EFSOI_ECEN +++ b/jobs/JGDAS_EFSOI_ECEN @@ -112,7 +112,8 @@ postmsg "$jlogfile" "$msg" $LOGSCRIPT -${ENKFRECENSH:-$SCRgfs/exgdas_efsoi_ecen.sh} +#${ENKFRECENSH:-$SCRgfs/exgdas_efsoi_ecen.sh} +${ENKFRECENSH:-$SCRgfs/exgdas_enkf_ecen.sh} status=$? [[ $status -ne 0 ]] && exit $status diff --git a/jobs/JGDAS_EFSOI_FCST b/jobs/JGDAS_EFSOI_FCST index 5601eb4aac3..73f11f479dd 100755 --- a/jobs/JGDAS_EFSOI_FCST +++ b/jobs/JGDAS_EFSOI_FCST @@ -97,7 +97,6 @@ $LOGSCRIPT ${ENKFFCSTSH:-$SCRgfs/exgdas_enkf_fcst.sh} -#${ENKFFCSTSH:-$SCRgfs/exgdas_efsoi_fcst.sh} status=$? [[ $status -ne 0 ]] && exit $status diff --git a/jobs/JGDAS_EFSOI_SFC b/jobs/JGDAS_EFSOI_SFC index 0fd50f0bb29..5924393c33d 100755 --- a/jobs/JGDAS_EFSOI_SFC +++ b/jobs/JGDAS_EFSOI_SFC @@ -98,11 +98,23 @@ else fi # COMIN, COMIN_ENS and COMIN_GES_ENS are used in script +# Current GDAS comrot folder export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" + +# Current ENKF (EFSOI) comrot folder export COMIN_ENS="$ROTDIR/efsoi$CDUMP_ENKF.$PDY/$cyc/$COMPONENT" + +# Current ENKF (EFSOI) comrot folder export COMOUT_ENS="$ROTDIR/efsoi$CDUMP.$PDY/$cyc/$COMPONENT" + +# Previous ENKF comrot folder export COMIN_GES_ENS="$ROTDIR/enkf$CDUMP.$gPDY/$gcyc/$COMPONENT" +#export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" +#export COMIN_ENS="$ROTDIR/enkf$CDUMP_ENKF.$PDY/$cyc/$COMPONENT" +#export COMOUT_ENS="$ROTDIR/enkf$CDUMP.$PDY/$cyc/$COMPONENT" +#export COMIN_GES_ENS="$ROTDIR/enkf$CDUMP.$gPDY/$gcyc/$COMPONENT" + ############################################################### # Run relevant script @@ -112,7 +124,7 @@ postmsg "$jlogfile" "$msg" $LOGSCRIPT -${ENKFRESFCSH:-$SCRgfs/exgdas_efsoi_sfc.sh} +${ENKFRESFCSH:-$SCRgfs/exgdas_enkf_sfc.sh} status=$? [[ $status -ne 0 ]] && exit $status diff --git a/jobs/JGDAS_EFSOI_SURFACE b/jobs/JGDAS_EFSOI_SURFACE deleted file mode 100755 index 165545a040d..00000000000 --- a/jobs/JGDAS_EFSOI_SURFACE +++ /dev/null @@ -1,170 +0,0 @@ -#!/bin/ksh -set -x - -export RUN_ENVIR=${RUN_ENVIR:-"nco"} -export PS4='$SECONDS + ' -date - - -############################# -# Source relevant config files -############################# -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -# Edite by liaofan on 2020.05.18 -#configs="base esfc" -configs="base esfcfsoi" -config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} -for config in $configs; do - . $config_path/config.$config - status=$? - [[ $status -ne 0 ]] && exit $status -done - - -########################################## -# Source machine runtime environment -########################################## -# edited by liaofan on 2020.05.18 -#. $HOMEgfs/env/${machine}.env esfc -. $HOMEgfs/env/${machine}.env esfcfsoi - - -status=$? -[[ $status -ne 0 ]] && exit $status - - -############################################## -# Obtain unique process id (pid) and make temp directory -############################################## -export pid=${pid:-$$} -export outid=${outid:-"LL$job"} -export DATA=${DATA:-${DATAROOT}/${jobid:?}} -mkdir -p $DATA -cd $DATA - - -############################################## -# Run setpdy and initialize PDY variables -############################################## -export cycle="t${cyc}z" -setpdy.sh -. ./PDY - - -############################################## -# Determine Job Output Name on System -############################################## -export pgmout="OUTPUT.${pid}" -export pgmerr=errfile - - -############################################## -# Set variables used in the exglobal script -############################################## -export CDATE=${CDATE:-${PDY}${cyc}} -export CDUMP=${CDUMP:-${RUN:-"gdas"}} -if [ $RUN_ENVIR = "nco" ]; then - export ROTDIR=${COMROOT:?}/$NET/$envir -fi - - -############################################## -# Begin JOB SPECIFIC work -############################################## - -GDATE=$($NDATE -$assim_freq $CDATE) -gPDY=$(echo $GDATE | cut -c1-8) -gcyc=$(echo $GDATE | cut -c9-10) -GDUMP=${GDUMP:-"gdas"} - -export CASE=$CASE_ENKF - - -EUPD_CYC=$(echo ${EUPD_CYC:-"gdas"} | tr a-z A-Z) -if [ $EUPD_CYC = "GFS" ]; then - CDUMP_ENKF="gfs" -else - CDUMP_ENKF=$CDUMP -fi - -export OPREFIX="${CDUMP}.t${cyc}z." -export APREFIX="${CDUMP}.t${cyc}z." -export APREFIX_ENKF="${CDUMP_ENKF}.t${cyc}z." -export GPREFIX="${CDUMP}.t${gcyc}z." -export GSUFFIX=${GSUFFIX:-$SUFFIX} -export ASUFFIX=${ASUFFIX:-$SUFFIX} - -if [ $RUN_ENVIR = "nco" -o ${ROTDIR_DUMP:-NO} = "YES" ]; then - export COMIN_OBS=${COMIN_OBS:-$ROTDIR/$RUN.$PDY/$cyc} - export COMIN_GES_OBS=${COMIN_GES_OBS:-$ROTDIR/$GDUMP.$gPDY/$gcyc} -else - export COMIN_OBS="$DMPDIR/$CDATE/$CDUMP" - export COMIN_GES_OBS="$DMPDIR/$GDATE/$GDUMP" -fi - -# COMIN, COMIN_ENS and COMIN_GES_ENS are used in exglobal script -# TO DO: Map NCO's directory into these variables -# ======================================================= -# edited by liaofan on 2020.05.18 -#export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc" -#export COMIN_ENS="$ROTDIR/enkf$CDUMP_ENKF.$PDY/$cyc" -#export COMOUT_ENS="$ROTDIR/enkf$CDUMP.$PDY/$cyc" -#export COMIN_GES_ENS="$ROTDIR/enkf$CDUMP.$gPDY/$gcyc" - -# Current GDAS comrot folder -export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc" - -# Current ENKF (EFSOI) comrot folder -export COMIN_ENS="$ROTDIR/fsoi$CDUMP_ENKF.$PDY/$cyc" - -# Current ENKF (EFSOI) comrot folder -export COMOUT_ENS="$ROTDIR/fsoi$CDUMP.$PDY/$cyc" - -# Previous ENKF comrot folder -export COMIN_GES_ENS="$ROTDIR/enkf$CDUMP.$gPDY/$gcyc" -# ======================================================= - - - - -# -# -############################################################### -# Run relevant exglobal script -env -msg="HAS BEGUN on `hostname`" -postmsg "$jlogfile" "$msg" -$LOGSCRIPT - -# Edited by liaofan on 2020.05.18 -#${ENKFRESFCSH:-$SCRgsi/exglobal_enkf_surface_fv3gfs.sh.ecf} -${ENKFRESFCSH:-$SCRgfs/exglobal_efsoi_surface_fv3gfs.sh.ecf} - -status=$? -[[ $status -ne 0 ]] && exit $status - - -############################################## -# End JOB SPECIFIC work -############################################## - -############################################## -# Final processing -############################################## -if [ -e "$pgmout" ] ; then - cat $pgmout -fi - - -msg="ENDED NORMALLY." -postmsg "$jlogfile" "$msg" - - -########################################## -# Remove the Temporary working directory -########################################## -cd $DATAROOT -[[ $KEEPDATA = "NO" ]] && rm -rf $DATA - -date -exit 0 diff --git a/scripts/exgdas_efsoi_ecen.sh b/scripts/exgdas_efsoi_ecen.sh deleted file mode 100755 index 6fd31574083..00000000000 --- a/scripts/exgdas_efsoi_ecen.sh +++ /dev/null @@ -1,410 +0,0 @@ -#!/bin/ksh -################################################################################ -#### UNIX Script Documentation Block -# . . -# Script name: exgdas_efsoi_ecen.sh -# Script description: recenter ensemble around hi-res deterministic analysis, -# for EFSOI -# -# Author: Rahul Mahajan Org: NCEP/EMC Date: 2017-03-02 -# -# Abstract: This script recenters ensemble around hi-res deterministic analysis -# -# $Id$ -# -# Attributes: -# Language: POSIX shell -# Machine: WCOSS-Cray/Theia -# -################################################################################ - -# Set environment. -VERBOSE=${VERBOSE:-"YES"} -if [ $VERBOSE = "YES" ]; then - echo $(date) EXECUTING $0 $* >&2 - set -x -fi - -# Directories. -pwd=$(pwd) - -# Base variables -CDATE=${CDATE:-"2010010100"} -DONST=${DONST:-"NO"} -export CASE=${CASE:-384} -ntiles=${ntiles:-6} - -# Utilities -ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} -NCP=${NCP:-"/bin/cp -p"} -NLN=${NLN:-"/bin/ln -sf"} -NEMSIOGET=${NEMSIOGET:-${NWPROD}/exec/nemsio_get} -NCLEN=${NCLEN:-$HOMEgfs/ush/getncdimlen} - -# Scripts - -# Executables. -GETATMENSMEANEXEC=${GETATMENSMEANEXEC:-$HOMEgfs/exec/getsigensmeanp_smooth.x} -GETSFCENSMEANEXEC=${GETSFCENSMEANEXEC:-$HOMEgfs/exec/getsfcensmeanp.x} -RECENATMEXEC=${RECENATMEXEC:-$HOMEgfs/exec/recentersigp.x} -CALCINCNEMSEXEC=${CALCINCNEMSEXEC:-$HOMEgfs/exec/calc_increment_ens.x} -CALCINCNCEXEC=${CALCINCEXEC:-$HOMEgfs/exec/calc_increment_ens_ncio.x} - -# Files. -OPREFIX=${OPREFIX:-""} -OSUFFIX=${OSUFFIX:-""} -APREFIX=${APREFIX:-""} -APREFIX_ENKF=${APREFIX_ENKF:-$APREFIX} -ASUFFIX=${ASUFFIX:-$SUFFIX} -GPREFIX=${GPREFIX:-""} -GSUFFIX=${GSUFFIX:-$SUFFIX} - -# Variables -NMEM_ENKF=${NMEM_ENKF:-80} -imp_physics=${imp_physics:-99} -INCREMENTS_TO_ZERO=${INCREMENTS_TO_ZERO:-"'NONE'"} -DOIAU=${DOIAU_ENKF:-"NO"} -FHMIN=${FHMIN_ECEN:-3} -FHMAX=${FHMAX_ECEN:-9} -FHOUT=${FHOUT_ECEN:-3} -FHSFC=${FHSFC_ECEN:-$FHMIN} -DO_CALC_INCREMENT=${DO_CALC_INCREMENT:-"NO"} - - -# global_chgres stuff -CHGRESNEMS=${CHGRESNEMS:-$HOMEgfs/exec/enkf_chgres_recenter.x} -CHGRESNC=${CHGRESNC:-$HOMEgfs/exec/enkf_chgres_recenter_nc.x} -NTHREADS_CHGRES=${NTHREADS_CHGRES:-24} -APRUN_CHGRES=${APRUN_CHGRES:-""} - -# global_cycle stuff -CYCLESH=${CYCLESH:-$HOMEgfs/ush/global_cycle.sh} -export CYCLEXEC=${CYCLEXEC:-$HOMEgfs/exec/global_cycle} -APRUN_CYCLE=${APRUN_CYCLE:-${APRUN:-""}} -NTHREADS_CYCLE=${NTHREADS_CYCLE:-${NTHREADS:-1}} -export FIXfv3=${FIXfv3:-$HOMEgfs/fix/fix_fv3_gmted2010} -export FIXgsm=${FIXgsm:-$HOMEgfs/fix/fix_am} -export CYCLVARS=${CYCLVARS:-"FSNOL=-2.,FSNOS=99999.,"} -export FHOUR=${FHOUR:-0} -export DELTSFC=${DELTSFC:-6} - - -RECENTER_ENKF=${RECENTER_ENKF:-"YES"} -SMOOTH_ENKF=${SMOOTH_ENKF:-"YES"} - -APRUN_ECEN=${APRUN_ECEN:-${APRUN:-""}} -NTHREADS_ECEN=${NTHREADS_ECEN:-${NTHREADS:-1}} -APRUN_CALCINC=${APRUN_CALCINC:-${APRUN:-""}} -NTHREADS_CALCINC=${NTHREADS_CALCINC:-${NTHREADS:-1}} - -################################################################################ -# Preprocessing -mkdata=NO -if [ ! -d $DATA ]; then - mkdata=YES - mkdir -p $DATA -fi -cd $DATA || exit 99 - -ENKF_SUFFIX="s" -[[ $SMOOTH_ENKF = "NO" ]] && ENKF_SUFFIX="" - -################################################################################ -# Link ensemble member guess, analysis and increment files -for FHR in $(seq $FHMIN $FHOUT $FHMAX); do - -for imem in $(seq 1 $NMEM_ENKF); do - memchar="mem"$(printf %03i $imem) - $NLN $COMIN_GES_ENS/$memchar/${GPREFIX}atmf00${FHR}${ENKF_SUFFIX}$GSUFFIX ./atmges_$memchar - if [ $DO_CALC_INCREMENT = "YES" ]; then - if [ $FHR -eq 6 ]; then - $NLN $COMIN_ENS/$memchar/${APREFIX_ENKF}atmanl$ASUFFIX ./atmanl_$memchar - else - $NLN $COMIN_ENS/$memchar/${APREFIX_ENKF}atma00${FHR}$ASUFFIX ./atmanl_$memchar - fi - fi - mkdir -p $COMOUT_ENS/$memchar - if [ $FHR -eq 6 ]; then - $NLN $COMOUT_ENS/$memchar/${APREFIX}atminc.nc ./atminc_$memchar - else - $NLN $COMOUT_ENS/$memchar/${APREFIX}atmi00${FHR}.nc ./atminc_$memchar - fi - if [[ $RECENTER_ENKF = "YES" ]]; then - if [ $DO_CALC_INCREMENT = "YES" ]; then - if [ $FHR -eq 6 ]; then - $NLN $COMOUT_ENS/$memchar/${APREFIX}ratmanl$ASUFFIX ./ratmanl_$memchar - else - $NLN $COMOUT_ENS/$memchar/${APREFIX}ratma00${FHR}$ASUFFIX ./ratmanl_$memchar - fi - else - if [ $FHR -eq 6 ]; then - $NLN $COMOUT_ENS/$memchar/${APREFIX}ratminc$ASUFFIX ./ratminc_$memchar - else - $NLN $COMOUT_ENS/$memchar/${APREFIX}ratmi00${FHR}$ASUFFIX ./ratminc_$memchar - fi - fi - fi -done - -if [ $DO_CALC_INCREMENT = "YES" ]; then - # Link ensemble mean analysis - if [ $FHR -eq 6 ]; then - $NLN $COMIN_ENS/${APREFIX_ENKF}atmanl.ensmean$ASUFFIX ./atmanl_ensmean - else - $NLN $COMIN_ENS/${APREFIX_ENKF}atma00${FHR}.ensmean$ASUFFIX ./atmanl_ensmean - fi - - # Compute ensemble mean analysis - DATAPATH="./" - ATMANLNAME="atmanl" - ATMANLMEANNAME="atmanl_ensmean" - - export OMP_NUM_THREADS=$NTHREADS_ECEN - export pgm=$GETATMENSMEANEXEC - . prep_step - - $NCP $GETATMENSMEANEXEC $DATA - $APRUN_ECEN ${DATA}/$(basename $GETATMENSMEANEXEC) $DATAPATH $ATMANLMEANNAME $ATMANLNAME $NMEM_ENKF - rc=$? - - export ERR=$rc - export err=$ERR - $ERRSCRIPT || exit 2 -else - # Link ensemble mean increment - if [ $FHR -eq 6 ]; then - $NLN $COMIN_ENS/${APREFIX_ENKF}atminc.ensmean$ASUFFIX ./atminc_ensmean - else - $NLN $COMIN_ENS/${APREFIX_ENKF}atmi00${FHR}.ensmean$ASUFFIX ./atminc_ensmean - fi - - # Compute ensemble mean increment - DATAPATH="./" - ATMINCNAME="atminc" - ATMINCMEANNAME="atminc_ensmean" - - export OMP_NUM_THREADS=$NTHREADS_ECEN - export pgm=$GETATMENSMEANEXEC - . prep_step - - $NCP $GETATMENSMEANEXEC $DATA - $APRUN_ECEN ${DATA}/$(basename $GETATMENSMEANEXEC) $DATAPATH $ATMINCMEANNAME $ATMINCNAME $NMEM_ENKF - rc=$? - - export ERR=$rc - export err=$ERR - $ERRSCRIPT || exit 2 - - # If available, link to ensemble mean guess. Otherwise, compute ensemble mean guess - if [ -s $COMIN_GES_ENS/${GPREFIX}atmf00${FHR}.ensmean$GSUFFIX ]; then - $NLN $COMIN_GES_ENS/${GPREFIX}atmf00${FHR}.ensmean$GSUFFIX ./atmges_ensmean - else - DATAPATH="./" - ATMGESNAME="atmges" - ATMGESMEANNAME="atmges_ensmean" - - export OMP_NUM_THREADS=$NTHREADS_ECEN - export pgm=$GETATMENSMEANEXEC - . prep_step - - $NCP $GETATMENSMEANEXEC $DATA - $APRUN_ECEN ${DATA}/$(basename $GETATMENSMEANEXEC) $DATAPATH $ATMGESMEANNAME $ATMGESNAME $NMEM_ENKF - rc=$? - - export ERR=$rc - export err=$ERR - $ERRSCRIPT || exit 2 - fi -fi - -if [ ${SUFFIX} = ".nc" ]; then - if [ $DO_CALC_INCREMENT = "YES" ]; then - LONB_ENKF=${LONB_ENKF:-$($NCLEN atmanl_ensmean grid_xt)} # get LONB - LATB_ENKF=${LATB_ENKF:-$($NCLEN atmanl_ensmean grid_yt)} # get LATB - LEVS_ENKF=${LEVS_ENKF:-$($NCLEN atmanl_ensmean pfull)} # get LEVS - else - LONB_ENKF=${LONB_ENKF:-$($NCLEN atminc_ensmean lon)} # get LONB - LATB_ENKF=${LATB_ENKF:-$($NCLEN atminc_ensmean lat)} # get LATB - LEVS_ENKF=${LEVS_ENKF:-$($NCLEN atminc_ensmean lev)} # get LEVS - fi - JCAP_ENKF=${JCAP_ENKF:--9999} # there is no jcap in these files -else - LONB_ENKF=${LONB_ENKF:-$($NEMSIOGET atmanl_ensmean dimx | awk '{print $2}')} - LATB_ENKF=${LATB_ENKF:-$($NEMSIOGET atmanl_ensmean dimy | awk '{print $2}')} - LEVS_ENKF=${LEVS_ENKF:-$($NEMSIOGET atmanl_ensmean dimz | awk '{print $2}')} - JCAP_ENKF=${JCAP_ENKF:-$($NEMSIOGET atmanl_ensmean jcap | awk '{print $2}')} -fi -[ $JCAP_ENKF -eq -9999 -a $LATB_ENKF -ne -9999 ] && JCAP_ENKF=$((LATB_ENKF-2)) -[ $LONB_ENKF -eq -9999 -o $LATB_ENKF -eq -9999 -o $LEVS_ENKF -eq -9999 -o $JCAP_ENKF -eq -9999 ] && exit -9999 - -################################################################################ -# This is to give the user the option to recenter, default is YES -if [ $RECENTER_ENKF = "YES" ]; then - - # GSI EnVar analysis - if [ $FHR -eq 6 ]; then - ATMANL_GSI=$COMIN/${APREFIX}atmanl$ASUFFIX - ATMANL_GSI_ENSRES=$COMIN/${APREFIX}atmanl.ensres$ASUFFIX - else - ATMANL_GSI=$COMIN/${APREFIX}atma00${FHR}$ASUFFIX - ATMANL_GSI_ENSRES=$COMIN/${APREFIX}atma00${FHR}.ensres$ASUFFIX - fi - - # if we already have a ensemble resolution GSI analysis then just link to it - if [ -f $ATMANL_GSI_ENSRES ]; then - - $NLN $ATMANL_GSI_ENSRES atmanl_gsi_ensres - - else - - $NLN $ATMANL_GSI atmanl_gsi - $NLN $ATMANL_GSI_ENSRES atmanl_gsi_ensres - SIGLEVEL=${SIGLEVEL:-${FIXgsm}/global_hyblev.l${LEVS}.txt} - if [ ${SUFFIX} = ".nc" ]; then - $NLN $CHGRESNC chgres.x - chgresnml=chgres_nc_gauss.nml - nmltitle=chgres - else - $NLN $CHGRESNEMS chgres.x - chgresnml=fort.43 - nmltitle=nam - fi - - export OMP_NUM_THREADS=$NTHREADS_CHGRES - - [[ -f $chgresnml ]] && rm -f $chgresnml - cat > $chgresnml << EOF -&${nmltitle}_setup - i_output=$LONB_ENKF - j_output=$LATB_ENKF - input_file="atmanl_gsi" - output_file="atmanl_gsi_ensres" - terrain_file="atmanl_ensmean" - vcoord_file="$SIGLEVEL" -/ -EOF - cat $chgresnml - $APRUN_CHGRES ./chgres.x - rc=$? - - export ERR=$rc - export err=$ERR - $ERRSCRIPT || exit 3 - - fi - - if [ $DO_CALC_INCREMENT = "YES" ]; then - ################################################################################ - # Recenter ensemble member atmospheric analyses about hires analysis - - FILENAMEIN="atmanl" - FILENAME_MEANIN="atmanl_ensmean" # EnKF ensemble mean analysis - FILENAME_MEANOUT="atmanl_gsi_ensres" # recenter around GSI analysis at ensemble resolution - FILENAMEOUT="ratmanl" - - export OMP_NUM_THREADS=$NTHREADS_ECEN - export pgm=$RECENATMEXEC - . prep_step - - $NCP $RECENATMEXEC $DATA - $APRUN_ECEN ${DATA}/$(basename $RECENATMEXEC) $FILENAMEIN $FILENAME_MEANIN $FILENAME_MEANOUT $FILENAMEOUT $NMEM_ENKF - rc=$? - - export ERR=$rc - export err=$ERR - $ERRSCRIPT || exit 2 - - else - ################################################################################ - # Recenter ensemble member atmospheric increments about hires analysis - - FILENAMEIN="atminc" - FILENAME_INCMEANIN="atminc_ensmean" # EnKF ensemble mean increment - FILENAME_GESMEANIN="atmges_ensmean" # EnKF ensemble mean guess - FILENAME_GSIDET="atmanl_gsi_ensres" # recenter around GSI analysis at ensemble resolution - FILENAMEOUT="ratminc" - - export OMP_NUM_THREADS=$NTHREADS_ECEN - - # make the small namelist file for incvars_to_zero - - [[ -f recenter.nml ]] && rm recenter.nml - cat > recenter.nml << EOF -&recenter - incvars_to_zero = $INCREMENTS_TO_ZERO -/ -EOF -cat recenter.nml - - export pgm=$RECENATMEXEC - . prep_step - - $NCP $RECENATMEXEC $DATA - $APRUN_ECEN ${DATA}/$(basename $RECENATMEXEC) $FILENAMEIN $FILENAME_INCMEANIN $FILENAME_GSIDET $FILENAMEOUT $NMEM_ENKF $FILENAME_GESMEANIN - rc=$? - - export ERR=$rc - export err=$ERR - $ERRSCRIPT || exit 2 - - fi -fi - -################################################################################ -# Calculate ensemble analysis increment -if [ $DO_CALC_INCREMENT = "YES" ]; then - if [ $RECENTER_ENKF = "YES" ]; then - ATMANLNAME='ratmanl' - else - ATMANLNAME='atmanl' - fi - - export OMP_NUM_THREADS=$NTHREADS_CALCINC - if [ ${SUFFIX} = ".nc" ]; then - CALCINCEXEC=$CALCINCNCEXEC - else - CALCINCEXEC=$CALCINCNEMSEXEC - fi - - export pgm=$CALCINCEXEC - . prep_step - - $NCP $CALCINCEXEC $DATA - - rm calc_increment.nml - cat > calc_increment.nml << EOF -&setup - datapath = './' - analysis_filename = '$ATMANLNAME' - firstguess_filename = 'atmges' - increment_filename = 'atminc' - debug = .false. - nens = $NMEM_ENKF - imp_physics = $imp_physics -/ -&zeroinc - incvars_to_zero = $INCREMENTS_TO_ZERO -/ -EOF -cat calc_increment.nml - - $APRUN_CALCINC ${DATA}/$(basename $CALCINCEXEC) - rc=$? - - export ERR=$rc - export err=$rc - $ERRSCRIPT || exit 4 -fi -done # loop over analysis times in window - -################################################################################ - -################################################################################ -# Postprocessing -cd $pwd -[[ $mkdata = "YES" ]] && rm -rf $DATA -set +x -if [ $VERBOSE = "YES" ]; then - echo $(date) EXITING $0 with return code $err >&2 -fi -exit $err diff --git a/scripts/exgdas_efsoi_sfc.sh b/scripts/exgdas_efsoi_sfc.sh deleted file mode 100755 index f5ff74a8245..00000000000 --- a/scripts/exgdas_efsoi_sfc.sh +++ /dev/null @@ -1,213 +0,0 @@ -#!/bin/ksh -################################################################################ -#### UNIX Script Documentation Block -# . . -# Script name: exgdas_enkf_sfc.sh -# Script description: generate ensemble surface analyses on tiles -# -# Author: Rahul Mahajan Org: NCEP/EMC Date: 2017-03-02 -# -# Abstract: This script generates ensemble surface analyses on tiles -# -# $Id$ -# -# Attributes: -# Language: POSIX shell -# Machine: WCOSS-Cray/Theia -# -################################################################################ - -# Set environment. -VERBOSE=${VERBOSE:-"YES"} -if [ $VERBOSE = "YES" ]; then - echo $(date) EXECUTING $0 $* >&2 - set -x -fi - -# Directories. -pwd=$(pwd) - -# Base variables -CDATE=${CDATE:-"2010010100"} -DONST=${DONST:-"NO"} -DOSFCANL_ENKF=${DOSFCANL_ENKF:-"YES"} -export CASE=${CASE:-384} -ntiles=${ntiles:-6} - -# Utilities -ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} -NCP=${NCP:-"/bin/cp -p"} -NLN=${NLN:-"/bin/ln -sf"} -NEMSIOGET=${NEMSIOGET:-${NWPROD}/exec/nemsio_get} -NCLEN=${NCLEN:-$HOMEgfs/ush/getncdimlen} - -# Scripts - -# Executables. - -# Files. -OPREFIX=${OPREFIX:-""} -OSUFFIX=${OSUFFIX:-""} -APREFIX=${APREFIX:-""} -APREFIX_ENKF=${APREFIX_ENKF:-$APREFIX} -ASUFFIX=${ASUFFIX:-$SUFFIX} -GPREFIX=${GPREFIX:-""} -GSUFFIX=${GSUFFIX:-$SUFFIX} - -# Variables -NMEM_ENKF=${NMEM_ENKF:-80} -DOIAU=${DOIAU_ENKF:-"NO"} - -# Global_cycle stuff -CYCLESH=${CYCLESH:-$HOMEgfs/ush/global_cycle.sh} -export CYCLEXEC=${CYCLEXEC:-$HOMEgfs/exec/global_cycle} -APRUN_CYCLE=${APRUN_CYCLE:-${APRUN:-""}} -NTHREADS_CYCLE=${NTHREADS_CYCLE:-${NTHREADS:-1}} -export FIXfv3=${FIXfv3:-$HOMEgfs/fix/fix_fv3_gmted2010} -export FIXgsm=${FIXgsm:-$HOMEgfs/fix/fix_am} -export CYCLVARS=${CYCLVARS:-"FSNOL=-2.,FSNOS=99999.,"} -export FHOUR=${FHOUR:-0} -export DELTSFC=${DELTSFC:-6} - -APRUN_ESFC=${APRUN_ESFC:-${APRUN:-""}} -NTHREADS_ESFC=${NTHREADS_ESFC:-${NTHREADS:-1}} - - -################################################################################ -# Preprocessing -mkdata=NO -if [ ! -d $DATA ]; then - mkdata=YES - mkdir -p $DATA -fi -cd $DATA || exit 99 - - -################################################################################ -# Update surface fields in the FV3 restart's using global_cycle. - -PDY=$(echo $CDATE | cut -c1-8) -cyc=$(echo $CDATE | cut -c9-10) - -GDATE=$($NDATE -$assim_freq $CDATE) -gPDY=$(echo $GDATE | cut -c1-8) -gcyc=$(echo $GDATE | cut -c9-10) -GDUMP=${GDUMP:-"gdas"} - -BDATE=$($NDATE -3 $CDATE) -bPDY=$(echo $BDATE | cut -c1-8) -bcyc=$(echo $BDATE | cut -c9-10) - -# Get dimension information based on CASE -res=$(echo $CASE | cut -c2-) -JCAP_CASE=$((res*2-2)) -LATB_CASE=$((res*2)) -LONB_CASE=$((res*4)) - -# Global cycle requires these files -export FNTSFA=${FNTSFA:-' '} -export FNACNA=${FNACNA:-$COMIN_OBS/${OPREFIX}seaice.5min.blend.grb} -export FNSNOA=${FNSNOA:-$COMIN_OBS/${OPREFIX}snogrb_t${JCAP_CASE}.${LONB_CASE}.${LATB_CASE}} -[[ ! -f $FNSNOA ]] && export FNSNOA="$COMIN_OBS/${OPREFIX}snogrb_t1534.3072.1536" -FNSNOG=${FNSNOG:-$COMIN_GES_OBS/${GPREFIX}snogrb_t${JCAP_CASE}.${LONB_CASE}.${LATB_CASE}} -[[ ! -f $FNSNOG ]] && FNSNOG="$COMIN_GES_OBS/${GPREFIX}snogrb_t1534.3072.1536" - -# Set CYCLVARS by checking grib date of current snogrb vs that of prev cycle -if [ ${RUN_GETGES:-"NO"} = "YES" ]; then - snoprv=$($GETGESSH -q -t snogrb_$JCAP_CASE -e $gesenvir -n $GDUMP -v $GDATE) -else - snoprv=${snoprv:-$FNSNOG} -fi - -if [ $($WGRIB -4yr $FNSNOA 2>/dev/null | grep -i snowc | awk -F: '{print $3}' | awk -F= '{print $2}') -le \ - $($WGRIB -4yr $snoprv 2>/dev/null | grep -i snowc | awk -F: '{print $3}' | awk -F= '{print $2}') ] ; then - export FNSNOA=" " - export CYCLVARS="FSNOL=99999.,FSNOS=99999.," -else - export SNOW_NUDGE_COEFF=${SNOW_NUDGE_COEFF:-0.} - export CYCLVARS="FSNOL=${SNOW_NUDGE_COEFF},$CYCLVARS" -fi - -if [ $DONST = "YES" ]; then - export NST_ANL=".true." - export GSI_FILE=${GSI_FILE:-$COMIN/${APREFIX}dtfanl.nc} -else - export NST_ANL=".false." - export GSI_FILE="NULL" -fi - -export APRUNCY=${APRUN_CYCLE:-$APRUN_ESFC} -export OMP_NUM_THREADS_CY=${NTHREADS_CYCLE:-$NTHREADS_ESFC} -export MAX_TASKS_CY=$NMEM_ENKF - -if [ $DOIAU = "YES" ]; then - # Update surface restarts at beginning of window when IAU is ON - # For now assume/hold dtfanl.nc is valid at beginning of window. - - for n in $(seq 1 $ntiles); do - - export TILE_NUM=$n - - for imem in $(seq 1 $NMEM_ENKF); do - - cmem=$(printf %03i $imem) - memchar="mem$cmem" - - [[ $TILE_NUM -eq 1 ]] && mkdir -p $COMOUT_ENS/$memchar/RESTART - - $NLN $COMIN_GES_ENS/$memchar/RESTART/$bPDY.${bcyc}0000.sfc_data.tile${n}.nc $DATA/fnbgsi.$cmem - $NLN $COMOUT_ENS/$memchar/RESTART/$bPDY.${bcyc}0000.sfcanl_data.tile${n}.nc $DATA/fnbgso.$cmem - $NLN $FIXfv3/$CASE/${CASE}_grid.tile${n}.nc $DATA/fngrid.$cmem - $NLN $FIXfv3/$CASE/${CASE}_oro_data.tile${n}.nc $DATA/fnorog.$cmem - - done - - $CYCLESH - rc=$? - export ERR=$rc - export err=$ERR - $ERRSCRIPT || exit 11 - - done - -fi - -if [ $DOSFCANL_ENKF = "YES" ]; then - for n in $(seq 1 $ntiles); do - - export TILE_NUM=$n - - for imem in $(seq 1 $NMEM_ENKF); do - - cmem=$(printf %03i $imem) - memchar="mem$cmem" - - [[ $TILE_NUM -eq 1 ]] && mkdir -p $COMOUT_ENS/$memchar/RESTART - - $NLN $COMIN_GES_ENS/$memchar/RESTART/$PDY.${cyc}0000.sfc_data.tile${n}.nc $DATA/fnbgsi.$cmem - $NLN $COMOUT_ENS/$memchar/RESTART/$PDY.${cyc}0000.sfcanl_data.tile${n}.nc $DATA/fnbgso.$cmem - $NLN $FIXfv3/$CASE/${CASE}_grid.tile${n}.nc $DATA/fngrid.$cmem - $NLN $FIXfv3/$CASE/${CASE}_oro_data.tile${n}.nc $DATA/fnorog.$cmem - - done - - $CYCLESH - rc=$? - export ERR=$rc - export err=$ERR - $ERRSCRIPT || exit 11 - - done -fi - -################################################################################ - -################################################################################ -# Postprocessing -cd $pwd -[[ $mkdata = "YES" ]] && rm -rf $DATA -set +x -if [ $VERBOSE = "YES" ]; then - echo $(date) EXITING $0 with return code $err >&2 -fi -exit $err diff --git a/scripts/exglobal_efsoi_surface_fv3gfs.sh.ecf b/scripts/exglobal_efsoi_surface_fv3gfs.sh.ecf deleted file mode 100755 index beb1781f8ba..00000000000 --- a/scripts/exglobal_efsoi_surface_fv3gfs.sh.ecf +++ /dev/null @@ -1,241 +0,0 @@ -#!/bin/ksh -################################################################################ -#### UNIX Script Documentation Block -# . . -# Script name: exglobal_enkf_surface_fv3gfs.sh.ecf -# Script description: generate ensemble surface analyses on tiles -# -# Author: Rahul Mahajan Org: NCEP/EMC Date: 2017-03-02 -# -# Abstract: This script generates ensemble surface analyses on tiles -# -# $Id$ -# -# Attributes: -# Language: POSIX shell -# Machine: WCOSS-Cray/Theia -# -################################################################################ - -# Set environment. -VERBOSE=${VERBOSE:-"YES"} -if [ $VERBOSE = "YES" ]; then - echo $(date) EXECUTING $0 $* >&2 - set -x -fi - -# Directories. -pwd=$(pwd) -export NWPROD=${NWPROD:-$pwd} -export HOMEgfs=${HOMEgfs:-$NWPROD} -HOMEgsi=${HOMEgsi:-$NWPROD} -export DATA=${DATA:-$pwd} -COMIN=${COMIN:-$pwd} -COMIN_ENS=${COMIN_ENS:-$COMIN} -COMIN_OBS=${COMIN_OBS:-$COMIN} -COMIN_GES=${COMIN_GES:-$COMIN} -COMIN_GES_ENS=${COMIN_GES_ENS:-$COMIN_ENS} -COMIN_GES_OBS=${COMIN_GES_OBS:-$COMIN_GES} -COMOUT=${COMOUT:-$COMIN} -COMOUT_ENS=${COMOUT_ENS:-$COMIN_ENS} - -CDATE=${CDATE:-"2010010100"} -DONST=${DONST:-"NO"} -DOSFCANL_ENKF=${DOSFCANL_ENKF:-"YES"} - -export CASE=${CASE:-384} -ntiles=${ntiles:-6} - -# Utilities -ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} -NCP=${NCP:-"/bin/cp -p"} -NLN=${NLN:-"/bin/ln -sf"} -NEMSIOGET=${NEMSIOGET:-${NWPROD}/exec/nemsio_get} -NCLEN=${NCLEN:-$HOMEgfs/ush/getncdimlen} - -# Scripts - -# Executables. - -# Files. -OPREFIX=${OPREFIX:-""} -OSUFFIX=${OSUFFIX:-""} -APREFIX=${APREFIX:-""} -APREFIX_ENKF=${APREFIX_ENKF:-$APREFIX} -ASUFFIX=${ASUFFIX:-$SUFFIX} -GPREFIX=${GPREFIX:-""} -GSUFFIX=${GSUFFIX:-$SUFFIX} - -# Variables -NMEM_ENKF=${NMEM_ENKF:-80} -DOIAU=${DOIAU_ENKF:-"NO"} - -# Global_cycle stuff -CYCLESH=${CYCLESH:-$HOMEgfs/ush/global_cycle.sh} -export CYCLEXEC=${CYCLEXEC:-$HOMEgfs/exec/global_cycle} -APRUN_CYCLE=${APRUN_CYCLE:-${APRUN:-""}} -NTHREADS_CYCLE=${NTHREADS_CYCLE:-${NTHREADS:-1}} -export FIXfv3=${FIXfv3:-$HOMEgfs/fix/fix_fv3_gmted2010} -export FIXgsm=${FIXgsm:-$HOMEgfs/fix/fix_am} -export CYCLVARS=${CYCLVARS:-"FSNOL=-2.,FSNOS=99999.,"} -export FHOUR=${FHOUR:-0} -export DELTSFC=${DELTSFC:-6} - -APRUN_ESFC=${APRUN_ESFC:-${APRUN:-""}} -NTHREADS_ESFC=${NTHREADS_ESFC:-${NTHREADS:-1}} - - -################################################################################ -# Preprocessing -mkdata=NO -if [ ! -d $DATA ]; then - mkdata=YES - mkdir -p $DATA -fi -cd $DATA || exit 99 - - -################################################################################ -# Update surface fields in the FV3 restart's using global_cycle. - -PDY=$(echo $CDATE | cut -c1-8) -cyc=$(echo $CDATE | cut -c9-10) - -GDATE=$($NDATE -$assim_freq $CDATE) -gPDY=$(echo $GDATE | cut -c1-8) -gcyc=$(echo $GDATE | cut -c9-10) -GDUMP=${GDUMP:-"gdas"} - -BDATE=$($NDATE -3 $CDATE) -bPDY=$(echo $BDATE | cut -c1-8) -bcyc=$(echo $BDATE | cut -c9-10) - -# Get dimension information based on CASE -res=$(echo $CASE | cut -c2-) -JCAP_CASE=$((res*2-2)) -LATB_CASE=$((res*2)) -LONB_CASE=$((res*4)) - -# Global cycle requires these files -export FNTSFA=${FNTSFA:-' '} -export FNACNA=${FNACNA:-$COMIN_OBS/${OPREFIX}seaice.5min.blend.grb} -export FNSNOA=${FNSNOA:-$COMIN_OBS/${OPREFIX}snogrb_t${JCAP_CASE}.${LONB_CASE}.${LATB_CASE}} -[[ ! -f $FNSNOA ]] && export FNSNOA="$COMIN_OBS/${OPREFIX}snogrb_t1534.3072.1536" -FNSNOG=${FNSNOG:-$COMIN_GES_OBS/${GPREFIX}snogrb_t${JCAP_CASE}.${LONB_CASE}.${LATB_CASE}} -[[ ! -f $FNSNOG ]] && FNSNOG="$COMIN_GES_OBS/${GPREFIX}snogrb_t1534.3072.1536" - -# Set CYCLVARS by checking grib date of current snogrb vs that of prev cycle -if [ ${RUN_GETGES:-"NO"} = "YES" ]; then - snoprv=$($GETGESSH -q -t snogrb_$JCAP_CASE -e $gesenvir -n $GDUMP -v $GDATE) -else - snoprv=${snoprv:-$FNSNOG} -fi - -if [ $($WGRIB -4yr $FNSNOA 2>/dev/null | grep -i snowc | awk -F: '{print $3}' | awk -F= '{print $2}') -le \ - $($WGRIB -4yr $snoprv 2>/dev/null | grep -i snowc | awk -F: '{print $3}' | awk -F= '{print $2}') ] ; then - export FNSNOA=" " - export CYCLVARS="FSNOL=99999.,FSNOS=99999.," -else - export SNOW_NUDGE_COEFF=${SNOW_NUDGE_COEFF:-0.} - export CYCLVARS="FSNOL=${SNOW_NUDGE_COEFF},$CYCLVARS" -fi - -if [ $DONST = "YES" ]; then - export NST_ANL=".true." - export GSI_FILE=${GSI_FILE:-$COMIN/${APREFIX}dtfanl.nc} -else - export NST_ANL=".false." - export GSI_FILE="NULL" -fi - -export APRUNCY=${APRUN_CYCLE:-$APRUN_ESFC} -export OMP_NUM_THREADS_CY=${NTHREADS_CYCLE:-$NTHREADS_ESFC} -export MAX_TASKS_CY=$NMEM_ENKF - -if [ $DOIAU = "YES" ]; then - # Update surface restarts at beginning of window when IAU is ON - # For now assume/hold dtfanl.nc is valid at beginning of window. - - for n in $(seq 1 $ntiles); do - - export TILE_NUM=$n - - for imem in $(seq 1 $NMEM_ENKF); do - - cmem=$(printf %03i $imem) - memchar="mem$cmem" - - [[ $TILE_NUM -eq 1 ]] && mkdir -p $COMOUT_ENS/$memchar/RESTART - - $NLN $COMIN_GES_ENS/$memchar/RESTART/$bPDY.${bcyc}0000.sfc_data.tile${n}.nc $DATA/fnbgsi.$cmem - $NLN $COMOUT_ENS/$memchar/RESTART/$bPDY.${bcyc}0000.sfcanl_data.tile${n}.nc $DATA/fnbgso.$cmem - $NLN $FIXfv3/$CASE/${CASE}_grid.tile${n}.nc $DATA/fngrid.$cmem - $NLN $FIXfv3/$CASE/${CASE}_oro_data.tile${n}.nc $DATA/fnorog.$cmem - - done - - $CYCLESH - rc=$? - export ERR=$rc - export err=$ERR - $ERRSCRIPT || exit 11 - - done - -fi - -if [ $DOSFCANL_ENKF = "YES" ]; then - for n in $(seq 1 $ntiles); do - - export TILE_NUM=$n - - for imem in $(seq 1 $NMEM_ENKF); do - - cmem=$(printf %03i $imem) - memchar="mem$cmem" - - [[ $TILE_NUM -eq 1 ]] && mkdir -p $COMOUT_ENS/$memchar/RESTART - - $NLN $COMIN_GES_ENS/$memchar/RESTART/$PDY.${cyc}0000.sfc_data.tile${n}.nc $DATA/fnbgsi.$cmem - $NLN $COMOUT_ENS/$memchar/RESTART/$PDY.${cyc}0000.sfcanl_data.tile${n}.nc $DATA/fnbgso.$cmem - $NLN $FIXfv3/$CASE/${CASE}_grid.tile${n}.nc $DATA/fngrid.$cmem - $NLN $FIXfv3/$CASE/${CASE}_oro_data.tile${n}.nc $DATA/fnorog.$cmem - - done - - $CYCLESH - rc=$? - export ERR=$rc - export err=$ERR - $ERRSCRIPT || exit 11 - - done -fi - -################################################################################ - -################################################################################ -# Postprocessing -cd $pwd - -# ========================================= -echo "=== edited by liaofan (2020.05.18) =======" -pwd - -cd $DATA -cd ../../.. -mkdir -p ${CDATE}_liaofan -mkdir -p ${CDATE}_liaofan/${GDUMP} -cp -ir $DATA ${DATA}_liaofan_from_exglobal_efsoi_surface_fv3gfs_sh_ecf -cp -u -ir ${CDATE}/gdas/*_liaofan_from_exglobal_efsoi_surface_fv3gfs_sh_ecf ${CDATE}_liaofan/gdas/ -echo "=========================================" -# ========================================== - - - -[[ $mkdata = "YES" ]] && rm -rf $DATA -set +x -if [ $VERBOSE = "YES" ]; then - echo $(date) EXITING $0 with return code $err >&2 -fi -exit $err From 8e2af5ce235414c57fea2caf5d26f8364b5a76a3 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Mon, 21 Dec 2020 20:17:44 +0000 Subject: [PATCH 018/103] fixed saving of abias_int file --- scripts/exgdas_efsoi_update.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/exgdas_efsoi_update.sh b/scripts/exgdas_efsoi_update.sh index b8d6319249d..62f60f95e61 100755 --- a/scripts/exgdas_efsoi_update.sh +++ b/scripts/exgdas_efsoi_update.sh @@ -394,7 +394,7 @@ export err=$ERR $ERRSCRIPT || exit 2 # save for EFSOI task (still needed?) -$NCP $COMIN_ANL_ENS/$GBIASe $COMOUT_ANL_ENSFSOI +$NCP $COMOUT_ANL_ENS/$GBIASe $COMOUT_ANL_ENSFSOI # Cat runtime output files. cat stdout stderr > $COMOUT_ANL_ENSFSOI/$ENKFSTAT From 9913ceb13af328360483129fb2577cb6f20e70a7 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Tue, 22 Dec 2020 20:33:47 +0000 Subject: [PATCH 019/103] added EFSOI to archiving --- jobs/rocoto/earc.sh | 52 ++++++++++++++ ush/hpssarch_gen.sh | 172 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 224 insertions(+) diff --git a/jobs/rocoto/earc.sh b/jobs/rocoto/earc.sh index 54dc87e3cb5..205083db4a6 100755 --- a/jobs/rocoto/earc.sh +++ b/jobs/rocoto/earc.sh @@ -54,6 +54,14 @@ if [ $status -ne 0 ]; then exit $status fi +$HOMEgfs/ush/hpssarch_gen.sh efsoigdas +status=$? +if [ $status -ne 0 ]; then + echo "$HOMEgfs/ush/hpssarch_gen_EFSOI.sh enkf${CDUMP} failed, ABORT!" + exit $status +fi + + cd $ROTDIR @@ -109,6 +117,32 @@ if [[ $ENSGRP -gt 0 ]] && [[ $HPSSARCH = "YES" ]]; then fi fi + htar -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}_grp${ENSGRP}.tar `cat $ARCH_LIST/efsoi${CDUMP}_grp${n}.txt` + status=$? + if [ $status -ne 0 -a $CDATE -ge $firstday ]; then + echo "HTAR $CDATE efsoi${CDUMP}_grp${ENSGRP}.tar failed" + exit $status + fi + + if [ $SAVEWARMICA = "YES" -a $cyc -eq $EARCINC_CYC ]; then + htar -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}_restarta_grp${ENSGRP}.tar `cat $ARCH_LIST/efsoi${CDUMP}_restarta_grp${n}.txt` + status=$? + if [ $status -ne 0 ]; then + echo "HTAR $CDATE efsoi${CDUMP}_restarta_grp${ENSGRP}.tar failed" + exit $status + fi + fi + + if [ $SAVEWARMICB = "YES" -a $cyc -eq $EARCICS_CYC ]; then + htar -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}_restartb_grp${ENSGRP}.tar `cat $ARCH_LIST/efsoi${CDUMP}_restartb_grp${n}.txt` + status=$? + if [ $status -ne 0 ]; then + echo "HTAR $CDATE efsoi${CDUMP}_restartb_grp${ENSGRP}.tar failed" + exit $status + fi + fi + + fi # CDATE>SDATE fi @@ -126,6 +160,14 @@ if [ $ENSGRP -eq 0 ]; then echo "HTAR $CDATE enkf${CDUMP}.tar failed" exit $status fi + + htar -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}.tar `cat $ARCH_LIST/efsoi${CDUMP}.txt` + status=$? + if [ $status -ne 0 -a $CDATE -ge $firstday ]; then + echo "HTAR $CDATE efsoi${CDUMP}.tar failed" + exit $status + fi + fi #-- Archive online for verification and diagnostics @@ -140,6 +182,16 @@ if [ $ENSGRP -eq 0 ]; then $NCP $ROTDIR/enkfgfs.$PDY/$cyc/$COMPONENT/${CDUMP}.t${cyc}z.gsistat.ensmean gsistat.gfs.${CDATE}.ensmean fi + + $NCP $ROTDIR/efsoi${CDUMP}.$PDY/$cyc/$COMPONENT/${CDUMP}.t${cyc}z.enkfstat efsoistat.${CDUMP}.$CDATE + $NCP $ROTDIR/efsoi${CDUMP}.$PDY/$cyc/$COMPONENT/${CDUMP}.t${cyc}z.gsistat.ensmean efsoigsistat.${CDUMP}.${CDATE}.ensmean + + if [ $CDUMP_ENKF != "GDAS" ]; then + $NCP $ROTDIR/efsoigfs.$PDY/$cyc/$COMPONENT/${CDUMP}.t${cyc}z.enkfstat efsoistat.gfs.$CDATE + $NCP $ROTDIR/efsoigfs.$PDY/$cyc/$COMPONENT/${CDUMP}.t${cyc}z.gsistat.ensmean efsoigsistat.gfs.${CDATE}.ensmean + fi + + fi diff --git a/ush/hpssarch_gen.sh b/ush/hpssarch_gen.sh index 1f4c8ed542b..349c7df6cd6 100755 --- a/ush/hpssarch_gen.sh +++ b/ush/hpssarch_gen.sh @@ -486,5 +486,177 @@ if [ $type = "enkfgdas" -o $type = "enkfgfs" ]; then fi ##end of enkfgdas or enkfgfs #----------------------------------------------------- +#----------------------------------------------------- +if [ $type = "efsoigdas" ]; then +#----------------------------------------------------- + + #IAUFHRS_ENKF=${IAUFHRS_ENKF:-6} + IAUFHRS_ENKF="6,12,18,24,30" + lobsdiag_forenkf=${lobsdiag_forenkf:-".false."} + nfhrs=`echo $IAUFHRS_ENKF | sed 's/,/ /g'` + NMEM_ENKF=${NMEM_ENKF:-80} + NMEM_EARCGRP=${NMEM_EARCGRP:-10} ##number of ens memebers included in each tarball + NTARS=$((NMEM_ENKF/NMEM_EARCGRP)) + [[ $NTARS -eq 0 ]] && NTARS=1 + [[ $((NTARS*NMEM_EARCGRP)) -lt $NMEM_ENKF ]] && NTARS=$((NTARS+1)) +##NTARS2=$((NTARS/2)) # number of earc groups to include analysis/increments + NTARS2=$NTARS + + dirpath="efsoi${CDUMP}.${PDY}/${cyc}/atmos/" + dirname="./${dirpath}" + head="${CDUMP}.t${cyc}z." + + #.................. + rm -f efsoi${CDUMP}.txt + touch efsoi${CDUMP}.txt + + echo "${dirname}${head}enkfstat " >>efsoi${CDUMP}.txt +# echo "${dirname}${head}gsistat.ensmean " >>efsoi${CDUMP}.txt + echo "${dirname}osense_${PDY}${cyc}_init.dat " >>efsoi${CDUMP}.txt + echo "${dirname}${head}abias_int.ensmean " >>efsoi${CDUMP}.txt + if [ -s $ROTDIR/${dirpath}${head}cnvstat.ensmean ]; then + echo "${dirname}${head}cnvstat.ensmean " >>efsoi${CDUMP}.txt + fi + if [ -s $ROTDIR/${dirpath}${head}oznstat.ensmean ]; then + echo "${dirname}${head}oznstat.ensmean " >>efsoi${CDUMP}.txt + fi + if [ -s $ROTDIR/${dirpath}${head}radstat.ensmean ]; then + echo "${dirname}${head}radstat.ensmean " >>efsoi${CDUMP}.txt + fi + for FH in $nfhrs; do # loop over analysis times in window + FHR=$(printf %03i $FH) + if [ $FHR -eq 6 ]; then + if [ -s $ROTDIR/${dirpath}${head}atmanl.ensmean${SUFFIX} ]; then + echo "${dirname}${head}atmanl.ensmean${SUFFIX} " >>efsoi${CDUMP}.txt + fi + if [ -s $ROTDIR/${dirpath}${head}atminc.ensmean${SUFFIX} ]; then + echo "${dirname}${head}atminc.ensmean${SUFFIX} " >>efsoi${CDUMP}.txt + fi + else + if [ -s $ROTDIR/${dirpath}${head}atma${FHR}.ensmean${SUFFIX} ]; then + echo "${dirname}${head}atma00${FHR}.ensmean${SUFFIX} " >>efsoi${CDUMP}.txt + fi + if [ -s $ROTDIR/${dirpath}${head}atmi${FHR}.ensmean${SUFFIX} ]; then + echo "${dirname}${head}atmi00${FHR}.ensmean${SUFFIX} " >>efsoi${CDUMP}.txt + fi + fi + done # loop over FHR + for fstep in ecenfsoi esfcfsoi eupdfsoi efcsfsoi eposfsoi ; do + echo "logs/${CDATE}/${CDUMP}${fstep}*.log " >>efsoi${CDUMP}.txt + done + + +# Ensemble spread file only available with netcdf output + fh=6 + while [ $fh -le 30 ]; do + fhr=$(printf %03i $fh) + echo "${dirname}${head}atmf${fhr}.ensmean${SUFFIX} " >>efsoi${CDUMP}.txt + echo "${dirname}${head}sfcf${fhr}.ensmean${SUFFIX} " >>efsoi${CDUMP}.txt + if [ $OUTPUT_FILE = "netcdf" ]; then + if [ -s $ROTDIR/${dirpath}${head}atmf${fhr}.ensspread${SUFFIX} ]; then + echo "${dirname}${head}atmf${fhr}.ensspread${SUFFIX} " >>efsoi${CDUMP}.txt + fi + fi + fh=$((fh+6)) + done + + #........................... + n=1 + while [ $n -le $NTARS ]; do + #........................... + + rm -f efsoi${CDUMP}_grp${n}.txt + rm -f efsoi${CDUMP}_restarta_grp${n}.txt + rm -f efsoi${CDUMP}_restartb_grp${n}.txt + touch efsoi${CDUMP}_grp${n}.txt + touch efsoi${CDUMP}_restarta_grp${n}.txt + touch efsoi${CDUMP}_restartb_grp${n}.txt + + m=1 + while [ $m -le $NMEM_EARCGRP ]; do + nm=$(((n-1)*NMEM_EARCGRP+m)) + mem=$(printf %03i $nm) + dirpath="efsoi${CDUMP}.${PDY}/${cyc}/atmos/mem${mem}/" + dirname="./${dirpath}" + head="${CDUMP}.t${cyc}z." + + #--- + for FH in $nfhrs; do # loop over analysis times in window + FHR=$(printf %03i $FH) + if [ $FHR -eq 6 ]; then + if [ $n -le $NTARS2 ]; then + if [ -s $ROTDIR/${dirpath}${head}atmanl${SUFFIX} ] ; then + echo "${dirname}${head}atmanl${SUFFIX} " >>efsoi${CDUMP}_grp${n}.txt + fi + if [ -s $ROTDIR/${dirpath}${head}ratminc${SUFFIX} ] ; then + echo "${dirname}${head}ratminc${SUFFIX} " >>efsoi${CDUMP}_grp${n}.txt + fi + fi + if [ -s $ROTDIR/${dirpath}${head}ratminc${SUFFIX} ] ; then + echo "${dirname}${head}ratminc${SUFFIX} " >>efsoi${CDUMP}_restarta_grp${n}.txt + fi + + else + if [ $n -le $NTARS2 ]; then + if [ -s $ROTDIR/${dirpath}${head}atma${FHR}${SUFFIX} ] ; then + echo "${dirname}${head}atma${FHR}${SUFFIX} " >>efsoi${CDUMP}_grp${n}.txt + fi + if [ -s $ROTDIR/${dirpath}${head}ratmi${FHR}${SUFFIX} ] ; then + echo "${dirname}${head}ratmi${FHR}${SUFFIX} " >>efsoi${CDUMP}_grp${n}.txt + fi + fi + if [ -s $ROTDIR/${dirpath}${head}ratmi${FHR}${SUFFIX} ] ; then + echo "${dirname}${head}ratmi${FHR}${SUFFIX} " >>efsoi${CDUMP}_restarta_grp${n}.txt + fi + + fi + echo "${dirname}${head}atmf${FHR}${SUFFIX} " >>efsoi${CDUMP}_grp${n}.txt + if [ $FHR -eq 6 ]; then + echo "${dirname}${head}sfcf${FHR}${SUFFIX} " >>efsoi${CDUMP}_grp${n}.txt + fi + done # loop over FHR + + if [[ lobsdiag_forenkf = ".false." ]] ; then + echo "${dirname}${head}gsistat " >>efsoi${CDUMP}_grp${n}.txt + if [ -s $ROTDIR/${dirpath}${head}cnvstat ] ; then + echo "${dirname}${head}cnvstat " >>efsoi${CDUMP}_grp${n}.txt + fi + if [ -s $ROTDIR/${dirpath}${head}radstat ]; then + echo "${dirname}${head}radstat " >>efsoi${CDUMP}_restarta_grp${n}.txt + fi + if [ -s $ROTDIR/${dirpath}${head}cnvstat ]; then + echo "${dirname}${head}cnvstat " >>efsoi${CDUMP}_restarta_grp${n}.txt + fi + echo "${dirname}${head}abias " >>efsoi${CDUMP}_restarta_grp${n}.txt + echo "${dirname}${head}abias_air " >>efsoi${CDUMP}_restarta_grp${n}.txt + echo "${dirname}${head}abias_int " >>efsoi${CDUMP}_restarta_grp${n}.txt + echo "${dirname}${head}abias_pc " >>efsoi${CDUMP}_restarta_grp${n}.txt + fi + #--- + echo "${dirname}RESTART/*0000.sfcanl_data.tile1.nc " >>efsoi${CDUMP}_restarta_grp${n}.txt + echo "${dirname}RESTART/*0000.sfcanl_data.tile2.nc " >>efsoi${CDUMP}_restarta_grp${n}.txt + echo "${dirname}RESTART/*0000.sfcanl_data.tile3.nc " >>efsoi${CDUMP}_restarta_grp${n}.txt + echo "${dirname}RESTART/*0000.sfcanl_data.tile4.nc " >>efsoi${CDUMP}_restarta_grp${n}.txt + echo "${dirname}RESTART/*0000.sfcanl_data.tile5.nc " >>efsoi${CDUMP}_restarta_grp${n}.txt + echo "${dirname}RESTART/*0000.sfcanl_data.tile6.nc " >>efsoi${CDUMP}_restarta_grp${n}.txt + + #--- + echo "${dirname}RESTART " >>efsoi${CDUMP}_restartb_grp${n}.txt + + m=$((m+1)) + done + + + #........................... + n=$((n+1)) + done + #........................... + + +#----------------------------------------------------- +fi ##end of efsoigdas +#----------------------------------------------------- + + exit 0 From 7c0f3f5ed6aa29912e67125e427beffa843111ad Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Fri, 8 Jan 2021 15:55:26 +0000 Subject: [PATCH 020/103] added deletion of efsoigdas directories, in the manner of enkfgdas --- jobs/rocoto/earc.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/jobs/rocoto/earc.sh b/jobs/rocoto/earc.sh index 205083db4a6..51a1a87f63e 100755 --- a/jobs/rocoto/earc.sh +++ b/jobs/rocoto/earc.sh @@ -216,6 +216,8 @@ if [ $ENSGRP -eq 0 ]; then [[ -d $COMIN_ENS ]] && rm -rf $COMIN_ENS COMIN_ENS="$ROTDIR/enkfgfs.$gPDY/$gcyc/$COMPONENT" [[ -d $COMIN_ENS ]] && rm -rf $COMIN_ENS + COMIN_ENS="$ROTDIR/efsoigdas.$gPDY/$gcyc/$COMPONENT" + [[ -d $COMIN_ENS ]] && rm -rf $COMIN_ENS # Remove any empty directories COMIN_ENS="$ROTDIR/enkfgdas.$gPDY/$COMPONENT" @@ -226,7 +228,11 @@ if [ $ENSGRP -eq 0 ]; then if [ -d $COMIN_ENS ] ; then [[ ! "$(ls -A $COMIN_ENS)" ]] && rm -rf $COMIN_ENS fi - + COMIN_ENS="$ROTDIR/efsoigdas.$gPDY/$COMPONENT" + if [ -d $COMIN_ENS ] ; then + [[ ! "$(ls -A $COMIN_ENS)" ]] && rm -rf $COMIN_ENS + fi + # Advance to next cycle GDATE=$($NDATE +$assim_freq $GDATE) From ff8824b8a82af160e94ca0df56c56a7feab71c38 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Mon, 11 Jan 2021 21:39:01 +0000 Subject: [PATCH 021/103] Added EFSOI task to workflow --- jobs/rocoto/efsoi.sh | 3 +-- parm/config/config.efsoi | 35 +++++++++++++++++++++++++++++++++++ parm/config/config.resources | 36 ++++++++++++++++++++++++++++++++++++ ush/rocoto/setup_workflow.py | 28 +++++++++++++++++++++++++--- 4 files changed, 97 insertions(+), 5 deletions(-) create mode 100755 parm/config/config.efsoi diff --git a/jobs/rocoto/efsoi.sh b/jobs/rocoto/efsoi.sh index a6c89751ea8..2cfa7e6ebf8 100755 --- a/jobs/rocoto/efsoi.sh +++ b/jobs/rocoto/efsoi.sh @@ -8,8 +8,7 @@ status=$? ############################################################### # Execute the JJOB -#$HOMEgfs/jobs/JGDAS_EFSOI -echo 'run efsoi job here' +$HOMEgfs/jobs/JGDAS_EFSOI status=$? exit $status diff --git a/parm/config/config.efsoi b/parm/config/config.efsoi new file mode 100755 index 00000000000..98ae692043d --- /dev/null +++ b/parm/config/config.efsoi @@ -0,0 +1,35 @@ +#!/bin/ksh -x + +########## config.efsoi ########## +# Ensemble update specific, dependency config.anal + +echo "BEGIN: config.efsoi" + +# Get task specific resources +. $EXPDIR/config.resources efsoi + +export npe_enkf=$npe_eupd + + +# Use NAM_ENKF below for serial EnKF +##export NAM_ENKF="analpertwtnh=0.9,analpertwtsh=0.9,analpertwttr=0.9" + +# LETKF specific settings with model space localization +export modelspace_vloc=".true." # model space localization +export letkf_flag=".true." # use LETKF instead of serial filter +export getkf=".true." # Gain form of LETKF (needed for model-space localization) +export denkf=".true." # EnKF approximation (beneficial since less spread removed by analysis) +export nobsl_max=10000 # max number of obs in each LETKF volume (uses closest nobsl_max). can + # be reduced to speed up execution time. +export analpertwt=0.85 # relaxation to prior spread inflation factor +export readin_localization_enkf=".false." # Don’t read in localization scales from file (doesn’t make + # sense for LETKF if model space localization on and nobsl_max>0) +export corrlength=1250 # Horizontal localization scale (max horizontal distance to search for nobsl_max local obs) +export lnsigcutoff=2.75 # ignored if modelspace_vloc=.true. + +export lobsdiag_forenkf=".true." # use jacobian. must be .true. if modelspace_vloc=".true." + # need to specify .true. setting since config.anal sets to .false. + +export NAM_ENKF="smoothparm=35," + +echo "END: config.efsoi" diff --git a/parm/config/config.resources b/parm/config/config.resources index fd8d107b26b..5f9f65d5b33 100755 --- a/parm/config/config.resources +++ b/parm/config/config.resources @@ -369,6 +369,42 @@ elif [ $step = "eupdfsoi" ]; then export memory_eupdfsoi="3072M" fi +elif [ $step = "efsoi" ]; then + + export wtime_efsoi="00:30:00" + if [ $CASE = "C768" ]; then + export npe_efsoi=960 + export nth_efsoi=6 + if [[ "$machine" = "WCOSS_DELL_P3" ]]; then + export nth_efsoi=7 + fi + if [[ "$machine" = "HERA" ]]; then + export npe_efsoi=150 + export nth_efsoi=40 + fi + elif [ $CASE = "C384" ]; then + export npe_efsoi=270 + export nth_efsoi=2 + if [[ "$machine" = "WCOSS_DELL_P3" ]]; then + export nth_efsoi=9 + fi + if [[ "$machine" = "HERA" ]]; then + export npe_efsoi=100 + export nth_efsoi=40 + fi + elif [ $CASE = "C192" -o $CASE = "C96" -o $CASE = "C48" ]; then + export npe_efsoi=42 + export nth_efsoi=2 + if [[ "$machine" = "HERA" ]]; then + export npe_efsoi=40 + export nth_efsoi=40 + fi + fi + export npe_node_efsoi=$(echo "$npe_node_max / $nth_efsoi" | bc) + if [[ "$machine" == "WCOSS_C" ]]; then + export memory_efsoi="3072M" + fi + elif [ $step = "ecen" ]; then diff --git a/ush/rocoto/setup_workflow.py b/ush/rocoto/setup_workflow.py index 9cb2fca24b0..15394030553 100755 --- a/ush/rocoto/setup_workflow.py +++ b/ush/rocoto/setup_workflow.py @@ -66,7 +66,7 @@ def main(): steps = steps + wav_steps_awips if _base.get('DO_AWIPS', 'NO') == 'YES' else steps # for EFSOI - efsoi_steps = ['eupdfsoi', 'esfcfsoi', 'ecenfsoi', 'efcsfsoi', 'eposfsoi'] + efsoi_steps = ['eupdfsoi', 'esfcfsoi', 'ecenfsoi', 'efcsfsoi', 'eposfsoi','efsoi'] steps = steps + efsoi_steps if _base.get('DO_EFSOI','NO') == 'YES' else steps dict_configs = wfu.source_configs(configs, steps) @@ -368,7 +368,7 @@ def get_hyb_resources(dict_configs): do_efsoi = base.get('DO_EFSOI', 'NO').upper() if do_efsoi in ['Y', 'YES']: - tasks2 = ['ecen', 'ecenfsoi', 'esfc', 'esfcfsoi', 'efcs', 'efcsfsoi', 'epos', 'eposfsoi', 'earc'] + tasks2 = ['ecen', 'ecenfsoi', 'esfc', 'esfcfsoi', 'efcs', 'efcsfsoi', 'epos', 'eposfsoi', 'earc', 'efsoi'] else: tasks2 = ['ecen', 'esfc', 'efcs', 'epos', 'earc'] for task in tasks2: @@ -1238,10 +1238,31 @@ def get_hyb_tasks(dict_configs, cycledef='enkf'): dict_tasks['%sepmnfsoi' % cdump] = task - # eamn, earc + # efsoi + deps = [] + dep_dict = {'type': 'metatask', 'name': '%sepmnfsoi' % cdump} + deps.append(rocoto.add_dependency(dep_dict)) + dep_dict = {'type': 'metatask', 'name': '%sepmnsfsoi' % cdump, 'offset': '-6:00:00'} + deps.append(rocoto.add_dependency(dep_dict)) + data = '&ROTDIR;/enkfgdas.@Y@m@d/@H/gdas.t@Hz.atmanl.ensmean.nemsio' + dep_dict = {'type': 'data', 'data': data, 'offset': '24:00:00'} + deps.append(rocoto.add_dependency(dep_dict)) + + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + task = wfu.create_wf_task('efsoi', cdump=cdump, envar=envars1, dependency=dependencies, cycledef=cycledef) + + dict_tasks['%sefsoi' % cdump] = task + + # eamn, earc deps = [] dep_dict = {'type': 'metatask', 'name': '%sepmn' % cdump} deps.append(rocoto.add_dependency(dep_dict)) + dep_dict = {'type': 'metatask', 'name': '%sepmnfsoi' % cdump} + deps.append(rocoto.add_dependency(dep_dict)) + data = '&ROTDIR;/enkfgdas.@Y@m@d/@H/gdas.t@Hz.atmanl.ensmean.nemsio' + dep_dict = {'type': 'data', 'data': data, 'offset': '24:00:00'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) earcenvars = envars1 + [ensgrp] task = wfu.create_wf_task('earc', cdump=cdump, envar=earcenvars, dependency=dependencies, @@ -1481,6 +1502,7 @@ def create_xml(dict_configs): 'gdasefcsfsoi':'gdasefmnfsoi', 'gdasepos':'gdasepmn', 'gdaseposfsoi':'gdasepmnfsoi', + 'gdasefsoi':'gdasefsoi', 'gdasearc':'gdaseamn', 'gdasechgres':'gdasechgres'} From d519a437d91fb5a3e2e720a0b85f635ca6af4f35 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Sat, 23 Jan 2021 15:03:14 +0000 Subject: [PATCH 022/103] modified jobs/rocoto/earc.sh to give efsoi directories 8 cycles before cleaning --- jobs/rocoto/earc.sh | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/jobs/rocoto/earc.sh b/jobs/rocoto/earc.sh index 51a1a87f63e..2e4e968879b 100755 --- a/jobs/rocoto/earc.sh +++ b/jobs/rocoto/earc.sh @@ -216,8 +216,6 @@ if [ $ENSGRP -eq 0 ]; then [[ -d $COMIN_ENS ]] && rm -rf $COMIN_ENS COMIN_ENS="$ROTDIR/enkfgfs.$gPDY/$gcyc/$COMPONENT" [[ -d $COMIN_ENS ]] && rm -rf $COMIN_ENS - COMIN_ENS="$ROTDIR/efsoigdas.$gPDY/$gcyc/$COMPONENT" - [[ -d $COMIN_ENS ]] && rm -rf $COMIN_ENS # Remove any empty directories COMIN_ENS="$ROTDIR/enkfgdas.$gPDY/$COMPONENT" @@ -228,6 +226,25 @@ if [ $ENSGRP -eq 0 ]; then if [ -d $COMIN_ENS ] ; then [[ ! "$(ls -A $COMIN_ENS)" ]] && rm -rf $COMIN_ENS fi + + # Advance to next cycle + GDATE=$($NDATE +$assim_freq $GDATE) + + done + + # Now do EFSOI - needs to be kept around longer + # Start start and end dates to remove + GDATEEND=$($NDATE -${RMOLDEND_ENKF:-48} $CDATE) + GDATE=$($NDATE -${RMOLDSTD_ENKF:-120} $CDATE) + while [ $GDATE -le $GDATEEND ]; do + + gPDY=$(echo $GDATE | cut -c1-8) + gcyc=$(echo $GDATE | cut -c9-10) + + COMIN_ENS="$ROTDIR/efsoigdas.$gPDY/$gcyc/$COMPONENT" + [[ -d $COMIN_ENS ]] && rm -rf $COMIN_ENS + + # Remove any empty directories COMIN_ENS="$ROTDIR/efsoigdas.$gPDY/$COMPONENT" if [ -d $COMIN_ENS ] ; then [[ ! "$(ls -A $COMIN_ENS)" ]] && rm -rf $COMIN_ENS @@ -238,6 +255,7 @@ if [ $ENSGRP -eq 0 ]; then done + fi ############################################################### From ff52fa90fcafab72240eadd15ef04119378fffdf Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Sat, 23 Jan 2021 15:04:01 +0000 Subject: [PATCH 023/103] debugged setup_workflow.py --- ush/rocoto/setup_workflow.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/ush/rocoto/setup_workflow.py b/ush/rocoto/setup_workflow.py index 15394030553..e92a7fc57b4 100755 --- a/ush/rocoto/setup_workflow.py +++ b/ush/rocoto/setup_workflow.py @@ -1242,9 +1242,9 @@ def get_hyb_tasks(dict_configs, cycledef='enkf'): deps = [] dep_dict = {'type': 'metatask', 'name': '%sepmnfsoi' % cdump} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'metatask', 'name': '%sepmnsfsoi' % cdump, 'offset': '-6:00:00'} - deps.append(rocoto.add_dependency(dep_dict)) - data = '&ROTDIR;/enkfgdas.@Y@m@d/@H/gdas.t@Hz.atmanl.ensmean.nemsio' +# dep_dict = {'type': 'metatask', 'name': '%sepmnsfsoi' % cdump, 'offset': '-6:00:00'} +# deps.append(rocoto.add_dependency(dep_dict)) + data = '&ROTDIR;/gdas.@Y@m@d/@H/atmos/gdas.t@Hz.atmanl.ensres.nc' dep_dict = {'type': 'data', 'data': data, 'offset': '24:00:00'} deps.append(rocoto.add_dependency(dep_dict)) @@ -1259,11 +1259,7 @@ def get_hyb_tasks(dict_configs, cycledef='enkf'): deps.append(rocoto.add_dependency(dep_dict)) dep_dict = {'type': 'metatask', 'name': '%sepmnfsoi' % cdump} deps.append(rocoto.add_dependency(dep_dict)) - data = '&ROTDIR;/enkfgdas.@Y@m@d/@H/gdas.t@Hz.atmanl.ensmean.nemsio' - dep_dict = {'type': 'data', 'data': data, 'offset': '24:00:00'} - deps.append(rocoto.add_dependency(dep_dict)) - - dependencies = rocoto.create_dependency(dep=deps) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) earcenvars = envars1 + [ensgrp] task = wfu.create_wf_task('earc', cdump=cdump, envar=earcenvars, dependency=dependencies, metatask='eamn', varname='grp', varval=EARCGROUPS, cycledef=cycledef) From 815f44136e99d0ccf647dc0c28879963a6bdad95 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Sun, 24 Jan 2021 19:30:52 +0000 Subject: [PATCH 024/103] make stump error out --- jobs/JGDAS_EFSOI | 1 + 1 file changed, 1 insertion(+) diff --git a/jobs/JGDAS_EFSOI b/jobs/JGDAS_EFSOI index 12afbd87766..f834bdf191b 100755 --- a/jobs/JGDAS_EFSOI +++ b/jobs/JGDAS_EFSOI @@ -97,6 +97,7 @@ $LOGSCRIPT #${EFSOIUPDSH:-$SCRgfs/exgdas_efsoi_update.sh} echo 'run efsoi script here' +error_out status=$? [[ $status -ne 0 ]] && exit $status From 0acbd0c264a761bebce00b3d03794469a63cb323 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Fri, 12 Feb 2021 15:31:45 +0000 Subject: [PATCH 025/103] added and debugged efsoi task --- env/HERA.env | 12 + jobs/JGDAS_EFSOI | 19 +- jobs/rocoto/earc.sh | 2 +- parm/config/config.efsoi | 5 + scripts/exgdas_efsoi.sh | 472 +++++++++++++++++++++++++++++++++ scripts/exgdas_efsoi_update.sh | 2 +- 6 files changed, 503 insertions(+), 9 deletions(-) create mode 100755 scripts/exgdas_efsoi.sh diff --git a/env/HERA.env b/env/HERA.env index db752c43b6c..536a637649e 100755 --- a/env/HERA.env +++ b/env/HERA.env @@ -140,6 +140,18 @@ elif [ $step = "eupdfsoi" ]; then export USE_CFP=${USE_CFP:-"YES"} export APRUNCFP="$launcher -n \$ncmd --multi-prog" +elif [ $step = "efsoi" ]; then + + nth_max=$(($npe_node_max / $npe_node_efsoi)) + + export NTHREADS_ENKF=${nth_efsoi:-$nth_max} + [[ $NTHREADS_ENKF -gt $nth_max ]] && export NTHREADS_ENKF=$nth_max + export APRUN_ENKF="$launcher" + + export CFP_MP=${CFP_MP:-"YES"} + export USE_CFP=${USE_CFP:-"YES"} + export APRUNCFP="$launcher -n \$ncmd --multi-prog" + elif [ $step = "fcst" ]; then nth_max=$(($npe_node_max / $npe_node_fcst)) diff --git a/jobs/JGDAS_EFSOI b/jobs/JGDAS_EFSOI index f834bdf191b..a8566de0019 100755 --- a/jobs/JGDAS_EFSOI +++ b/jobs/JGDAS_EFSOI @@ -11,7 +11,7 @@ date ############################# export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -configs="base anal eupdfsoi" +configs="base anal efsoi" config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} for config in $configs; do . $config_path/config.$config @@ -72,7 +72,11 @@ fi GDATE=$($NDATE -$assim_freq $CDATE) gPDY=$(echo $GDATE | cut -c1-8) -gcyc=$(echo $GDATE | cut -c9-10) +export gcyc=$(echo $GDATE | cut -c9-10) # needed in namelist + +VDATE=$($NDATE 24 $CDATE) +vPDY=$(echo $VDATE | cut -c1-8) +vcyc=$(echo $VDATE | cut -c9-10) export APREFIX="${CDUMP}.t${cyc}z." export GPREFIX="gdas.t${gcyc}z." @@ -82,10 +86,12 @@ export GSUFFIX=${GSUFFIX:-$SUFFIX} # COMIN_GES_ENS and COMOUT_ANL_ENS are used in script -export COMIN_GES_ENS="$ROTDIR/enkfgdas.$gPDY/$gcyc/$COMPONENT" +export COMIN_GES_ENS="$ROTDIR/efsoigdas.$gPDY/$gcyc/$COMPONENT" export COMOUT_ANL_ENS="$ROTDIR/enkf$CDUMP.$PDY/$cyc/$COMPONENT" +export COMIN_ANL="$ROTDIR/$CDUMP.$vPDY/$vcyc/$COMPONENT" export COMOUT_ANL_ENSFSOI="$ROTDIR/efsoi$CDUMP.$PDY/$cyc/$COMPONENT" - +export OSENSE_SAVE_DIR="$ROTDIR/osense" +mkdir -p $OSENSE_SAVE_DIR # ======================================================== ############################################################### @@ -95,13 +101,12 @@ msg="HAS BEGUN on `hostname`" postmsg "$jlogfile" "$msg" $LOGSCRIPT -#${EFSOIUPDSH:-$SCRgfs/exgdas_efsoi_update.sh} -echo 'run efsoi script here' -error_out +${EFSOIUPDSH:-$SCRgfs/exgdas_efsoi.sh} status=$? [[ $status -ne 0 ]] && exit $status + ############################################## # Send Alerts ############################################## diff --git a/jobs/rocoto/earc.sh b/jobs/rocoto/earc.sh index 2e4e968879b..7fef2274b33 100755 --- a/jobs/rocoto/earc.sh +++ b/jobs/rocoto/earc.sh @@ -234,7 +234,7 @@ if [ $ENSGRP -eq 0 ]; then # Now do EFSOI - needs to be kept around longer # Start start and end dates to remove - GDATEEND=$($NDATE -${RMOLDEND_ENKF:-48} $CDATE) + GDATEEND=$($NDATE -${RMOLDEND_EFSOI:-48} $CDATE) GDATE=$($NDATE -${RMOLDSTD_ENKF:-120} $CDATE) while [ $GDATE -le $GDATEEND ]; do diff --git a/parm/config/config.efsoi b/parm/config/config.efsoi index 98ae692043d..8a4efd7a729 100755 --- a/parm/config/config.efsoi +++ b/parm/config/config.efsoi @@ -30,6 +30,11 @@ export lnsigcutoff=2.75 # ignored if modelspace_vloc=.true. export lobsdiag_forenkf=".true." # use jacobian. must be .true. if modelspace_vloc=".true." # need to specify .true. setting since config.anal sets to .false. +#export EFSOIEXEC="/scratch1/NCEPDEV/da/Andrew.Eichmann/GSI_07_09/exec/global_efsoi.x" +#export EFSOIEXEC="/scratch1/NCEPDEV/da/Andrew.Eichmann/200601_EFSOI_03/GSI_07_08/exec/global_efsoi.x" +export EFSOIEXEC="/scratch1/NCEPDEV/da/Andrew.Eichmann/gsidev/ll-gsi/GSI/build_efsoi/bin/global_efsoi.x" +export ANAVINFO="/scratch1/NCEPDEV/da/Andrew.Eichmann/para_gfs/nutria/global_anavinfo_efsoi.l127.txt" + export NAM_ENKF="smoothparm=35," echo "END: config.efsoi" diff --git a/scripts/exgdas_efsoi.sh b/scripts/exgdas_efsoi.sh new file mode 100755 index 00000000000..6e41a27a847 --- /dev/null +++ b/scripts/exgdas_efsoi.sh @@ -0,0 +1,472 @@ +#!/bin/ksh +################################################################################ +#### UNIX Script Documentation Block +# . . +# Script name: exgdas_efsoi.sh +# Script description: Make global_enkf update for efsoi +# +# Author: Rahul Mahajan Org: NCEP/EMC Date: 2017-03-02 +# Author: Liaofan Lin/Andrew Eichmann Date: 2020-12-03 +# +# Abstract: This script runs the efsoi executable +# +# $Id$ +# +# Attributes: +# Language: POSIX shell +# Machine: WCOSS-Cray/Theia +# +################################################################################ + +# Set environment. +VERBOSE=${VERBOSE:-"YES"} +if [ $VERBOSE = "YES" ] ; then + echo $(date) EXECUTING $0 $* >&2 + set -x +fi + +# Directories. +pwd=$(pwd) + +# Utilities +NCP=${NCP:-"/bin/cp -p"} +NLN=${NLN:-"/bin/ln -sf"} +ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} +NEMSIOGET=${NEMSIOGET:-$NWPROD/utils/exec/nemsio_get} +NCLEN=${NCLEN:-$HOMEgfs/ush/getncdimlen} +USE_CFP=${USE_CFP:-"NO"} +CFP_MP=${CFP_MP:-"NO"} +nm="" +if [ $CFP_MP = "YES" ]; then + nm=0 +fi +APRUNCFP=${APRUNCFP:-""} +APRUN_ENKF=${APRUN_ENKF:-${APRUN:-""}} +NTHREADS_ENKF=${NTHREADS_ENKF:-${NTHREADS:-1}} + +# Executables +#ENKFEXEC=${ENKFEXEC:-$HOMEgfs/exec/global_enkf.x} +EFSOIEXEC=${EFSOIEXEC:-$HOMEgfs/exec/efsoi.x} + +# Cycling and forecast hour specific parameters +CDATE=${CDATE:-"2001010100"} + +# Filenames. +GPREFIX=${GPREFIX:-""} +GSUFFIX=${GSUFFIX:-$SUFFIX} +APREFIX=${APREFIX:-""} +ASUFFIX=${ASUFFIX:-$SUFFIX} + +SMOOTH_ENKF=${SMOOTH_ENKF:-"YES"} + +GBIASe=${GBIASe:-${APREFIX}abias_int.ensmean} +CNVSTAT=${CNVSTAT:-${APREFIX}cnvstat} # AFE not needed? +OZNSTAT=${OZNSTAT:-${APREFIX}oznstat} # AFE not needed? +RADSTAT=${RADSTAT:-${APREFIX}radstat} # AFE not needed? +#ENKFSTAT=${ENKFSTAT:-${APREFIX}enkfstat} +EFSOISTAT=${EFSOISTAT:-${APREFIX}efsoistat} + +#AFE for EFSOI +#VERFANL=${VERFANL:-${APREFIX}atmanl.nemsio} +VERFANL=${VERFANL:-${APREFIX}atmanl.ensres.nc} +FCSTLONG=${GPREFIX}atmf030.ensmean.nc +FCSTSHORT=${APREFIX}atmf024.ensmean.nc +FCST6HRS=${PPREFIX}atmf006.ensmean.nc +OSENSEIN=osense_${CDATE}_init.dat +OSENSEOUT=osense_${CDATE}_final.dat + + + + + +# Namelist parameters +USE_CORRELATED_OBERRS=${USE_CORRELATED_OBERRS:-"NO"} +NMEM_ENKF=${NMEM_ENKF:-80} +NAM_ENKF=${NAM_ENKF:-""} +SATOBS_ENKF=${SATOBS_ENKF:-""} +OZOBS_ENKF=${OZOBS_ENKF:-""} +use_correlated_oberrs=${use_correlated_oberrs:-".false."} +if [ $USE_CORRELATED_OBERRS == "YES" ]; then + use_correlated_oberrs=".true." +fi +imp_physics=${imp_physics:-"99"} +#lupp=${lupp:-".true."} +lupp=${lupp:-".false."} # AFE to match old EFSOI +corrlength=${corrlength:-1250} +lnsigcutoff=${lnsigcutoff:-2.5} +analpertwt=${analpertwt:-0.85} +#readin_localization_enkf=${readin_localization_enkf:-".true."} +readin_localization_enkf=${readin_localization_enkf:-".false."} # AFE +reducedgrid=${reducedgrid:-".true."} +letkf_flag=${letkf_flag:-".false."} +getkf=${getkf:-".false."} +denkf=${denkf:-".false."} +nobsl_max=${nobsl_max:-10000} +lobsdiag_forenkf=${lobsdiag_forenkf:-".false."} +write_spread_diag=${write_spread_diag:-".false."} +cnvw_option=${cnvw_option:-".false."} +netcdf_diag=${netcdf_diag:-".true."} +modelspace_vloc=${modelspace_vloc:-".false."} # if true, 'vlocal_eig.dat' is needed +IAUFHRS_ENKF=${IAUFHRS_ENKF:-6} +DO_CALC_INCREMENT=${DO_CALC_INCREMENT:-"NO"} +INCREMENTS_TO_ZERO=${INCREMENTS_TO_ZERO:-"'NONE'"} + +################################################################################ +#ATMGES_ENSMEAN=$COMIN_GES_ENS/${GPREFIX}atmf006.ensmean${GSUFFIX} +ATMGES_ENSMEAN=$COMIN_ANL/$VERFANL +if [ $SUFFIX = ".nc" ]; then + LONB_ENKF=${LONB_ENKF:-$($NCLEN $ATMGES_ENSMEAN grid_xt)} # get LONB_ENKF + LATB_ENKF=${LATB_ENKF:-$($NCLEN $ATMGES_ENSMEAN grid_yt)} # get LATB_ENFK + LEVS_ENKF=${LEVS_ENKF:-$($NCLEN $ATMGES_ENSMEAN pfull)} # get LEVS_ENFK + use_gfs_ncio=".true." + use_gfs_nemsio=".false." + paranc=${paranc:-".true."} + if [ $DO_CALC_INCREMENT = "YES" ]; then + write_fv3_incr=".false." + else + write_fv3_incr=".true." + WRITE_INCR_ZERO="incvars_to_zero= $INCREMENTS_TO_ZERO," + fi +else + LEVS_ENKF=${LEVS_ENKF:-$($NEMSIOGET $ATMGES_ENSMEAN dimz | awk '{print $2}')} + LATB_ENKF=${LATB_ENKF:-$($NEMSIOGET $ATMGES_ENSMEAN dimy | awk '{print $2}')} + LONB_ENKF=${LONB_ENKF:-$($NEMSIOGET $ATMGES_ENSMEAN dimx | awk '{print $2}')} + use_gfs_ncio=".false." + use_gfs_nemsio=".true." + paranc=${paranc:-".false."} +fi +LATA_ENKF=${LATA_ENKF:-$LATB_ENKF} +LONA_ENKF=${LONA_ENKF:-$LONB_ENKF} + +SATANGL=${SATANGL:-${FIXgsi}/global_satangbias.txt} +SATINFO=${SATINFO:-${FIXgsi}/global_satinfo.txt} +CONVINFO=${CONVINFO:-${FIXgsi}/global_convinfo.txt} +OZINFO=${OZINFO:-${FIXgsi}/global_ozinfo.txt} +SCANINFO=${SCANINFO:-${FIXgsi}/global_scaninfo.txt} +HYBENSINFO=${HYBENSINFO:-${FIXgsi}/global_hybens_info.l${LEVS_ENKF}.txt} +ANAVINFO=${ANAVINFO:-${FIXgsi}/global_anavinfo.l${LEVS_ENKF}.txt} +VLOCALEIG=${VLOCALEIG:-${FIXgsi}/vlocal_eig_l${LEVS_ENKF}.dat} + +ENKF_SUFFIX="s" +[[ $SMOOTH_ENKF = "NO" ]] && ENKF_SUFFIX="" + +################################################################################ +# Preprocessing +mkdata=NO +if [ ! -d $DATA ]; then + mkdata=YES + mkdir -p $DATA +fi +cd $DATA || exit 99 + +################################################################################ +# Fixed files +$NLN $SATANGL satbias_angle +$NLN $SATINFO satinfo +$NLN $SCANINFO scaninfo +$NLN $CONVINFO convinfo +$NLN $OZINFO ozinfo +$NLN $HYBENSINFO hybens_info +$NLN $ANAVINFO anavinfo +$NLN $VLOCALEIG vlocal_eig.dat + +# Bias correction coefficients based on the ensemble mean +$NLN $COMOUT_ANL_ENSFSOI/$GBIASe satbias_in + +################################################################################ + +#if [ $USE_CFP = "YES" ]; then +# [[ -f $DATA/untar.sh ]] && rm $DATA/untar.sh +# [[ -f $DATA/mp_untar.sh ]] && rm $DATA/mp_untar.sh +# set +x +# cat > $DATA/untar.sh << EOFuntar +##!/bin/sh +#memchar=\$1 +#flist="$CNVSTAT $OZNSTAT $RADSTAT" +#for ftype in \$flist; do +# if [ \$memchar = "ensmean" ]; then +# fname=$COMOUT_ANL_ENS/\${ftype}.ensmean +# else +# fname=$COMOUT_ANL_ENS/\$memchar/\$ftype +# fi +# tar -xvf \$fname +#done +#EOFuntar +# set -x +# chmod 755 $DATA/untar.sh +#fi + +################################################################################ +# Ensemble guess, observational data and analyses/increments + +#flist="$CNVSTAT $OZNSTAT $RADSTAT" +#if [ $USE_CFP = "YES" ]; then +# echo "$nm $DATA/untar.sh ensmean" | tee -a $DATA/mp_untar.sh +# if [ ${CFP_MP:-"NO"} = "YES" ]; then +# nm=$((nm+1)) +# fi +#else +# for ftype in $flist; do +# fname=$COMOUT_ANL_ENS/${ftype}.ensmean +# tar -xvf $fname +# done +#fi +nfhrs=`echo $IAUFHRS_ENKF | sed 's/,/ /g'` +for imem in $(seq 1 $NMEM_ENKF); do + memchar="mem"$(printf %03i $imem) + mkdir ${memchar} + $NLN $COMOUT_ANL_ENSFSOI/$memchar/${APREFIX}atmf024.nc ${memchar} +# if [ $lobsdiag_forenkf = ".false." ]; then +# if [ $USE_CFP = "YES" ]; then +# echo "$nm $DATA/untar.sh $memchar" | tee -a $DATA/mp_untar.sh +# if [ ${CFP_MP:-"NO"} = "YES" ]; then +# nm=$((nm+1)) +# fi +# else +# for ftype in $flist; do +# fname=$COMOUT_ANL_ENS/$memchar/$ftype +# tar -xvf $fname +# done +# fi +# fi +##### mkdir -p $COMOUT_ANL_ENSFSOI/$memchar +# for FHR in $nfhrs; do +# $NLN $COMIN_GES_ENS/$memchar/${GPREFIX}atmf00${FHR}${ENKF_SUFFIX}${GSUFFIX} sfg_${CDATE}_fhr0${FHR}_${memchar} +# if [ $cnvw_option = ".true." ]; then +# $NLN $COMIN_GES_ENS/$memchar/${GPREFIX}sfcf00${FHR}${GSUFFIX} sfgsfc_${CDATE}_fhr0${FHR}_${memchar} +# fi +# if [ $FHR -eq 6 ]; then +# if [ $DO_CALC_INCREMENT = "YES" ]; then +# #$NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atmanl${ASUFFIX} sanl_${CDATE}_fhr0${FHR}_${memchar} +# $NLN $COMOUT_ANL_ENSFSOI/$memchar/${APREFIX}atmanl${ASUFFIX} sanl_${CDATE}_fhr0${FHR}_ni${memchar} +# else +# #$NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atminc${ASUFFIX} incr_${CDATE}_fhr0${FHR}_${memchar} +# $NLN $COMOUT_ANL_ENSFSOI/$memchar/${APREFIX}atminc${ASUFFIX} incr_${CDATE}_fhr0${FHR}_ni${memchar} +# fi +# else +# if [ $DO_CALC_INCREMENT = "YES" ]; then +# #$NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atma00${FHR}${ASUFFIX} sanl_${CDATE}_fhr0${FHR}_${memchar} +# $NLN $COMOUT_ANL_ENSFSOI/$memchar/${APREFIX}atma00${FHR}${ASUFFIX} sanl_${CDATE}_fhr0${FHR}_ni${memchar} +# else +# #$NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atmi00${FHR}${ASUFFIX} incr_${CDATE}_fhr0${FHR}_${memchar} +# $NLN $COMOUT_ANL_ENSFSOI/$memchar/${APREFIX}atmi00${FHR}${ASUFFIX} incr_${CDATE}_fhr0${FHR}_ni${memchar} +# fi +# fi +# done +done + +# Ensemble mean guess +#for FHR in $nfhrs; do +# $NLN $COMIN_GES_ENS/${GPREFIX}atmf00${FHR}.ensmean${GSUFFIX} sfg_${CDATE}_fhr0${FHR}_ensmean +# if [ $cnvw_option = ".true." ]; then +# $NLN $COMIN_GES_ENS/${GPREFIX}sfcf00${FHR}.ensmean${GSUFFIX} sfgsfc_${CDATE}_fhr0${FHR}_ensmean +# fi +#done + +$NLN $COMIN_GES_ENS/${GPREFIX}atmf006.ensmean${GSUFFIX} sfg_${CDATE}_fhr06_ensmean +$NLN $COMIN_GES_ENS/${GPREFIX}atmf006.ensmean${GSUFFIX} sfg_${CDATE}_fhr03_ensmean + +# verifying analysis +$NLN ${COMIN_ANL}/${VERFANL} . +# the above way is the proper one, but this bit of subterfuge +# is necessary because ensmean is hard coded into GSI - needs +# to changed +$NLN ${COMIN_ANL}/${VERFANL} ${APREFIX}atmanl.ensmean.nc + +# forecasts +$NLN $COMIN_GES_ENS/$FCSTLONG . +$NLN $COMOUT_ANL_ENSFSOI/$FCSTSHORT . + +# inital osense file +# efsoi.x will read then clobber this +$NCP $COMOUT_ANL_ENSFSOI/$OSENSEIN osense_${CDATE}.dat + + + + +if [ $USE_CFP = "YES" ]; then + chmod 755 $DATA/mp_untar.sh + ncmd=$(cat $DATA/mp_untar.sh | wc -l) + if [ $ncmd -gt 0 ]; then + ncmd_max=$((ncmd < npe_node_max ? ncmd : npe_node_max)) + APRUNCFP=$(eval echo $APRUNCFP) + $APRUNCFP $DATA/mp_untar.sh + export ERR=$? + export err=$ERR + $ERRSCRIPT || exit 3 + fi +fi + +################################################################################ +# Create global_enkf namelist +# AFE changed from original: +# gdatehr, datehr, andataname added +# analpertwt and lnsigcutoff changed upstream +# numiter from 0 to 1 +# fso_cycling=.true., +# efsoi_flag=.true., +# wmoist=1.0,adrate=0.75 + + + +cat > enkf.nml << EOFnml +&nam_enkf + datestring="$CDATE",datapath="$DATA/", + gdatehr=$gcyc, + datehr=$cyc, + andataname="$VERFANL", + analpertwtnh=${analpertwt},analpertwtsh=${analpertwt},analpertwttr=${analpertwt}, + covinflatemax=1.e2,covinflatemin=1,pseudo_rh=.true.,iassim_order=0, + corrlengthnh=${corrlength},corrlengthsh=${corrlength},corrlengthtr=${corrlength}, + lnsigcutoffnh=${lnsigcutoff},lnsigcutoffsh=${lnsigcutoff},lnsigcutofftr=${lnsigcutoff}, + lnsigcutoffpsnh=${lnsigcutoff},lnsigcutoffpssh=${lnsigcutoff},lnsigcutoffpstr=${lnsigcutoff}, + lnsigcutoffsatnh=${lnsigcutoff},lnsigcutoffsatsh=${lnsigcutoff},lnsigcutoffsattr=${lnsigcutoff}, + obtimelnh=1.e30,obtimelsh=1.e30,obtimeltr=1.e30, + saterrfact=1.0,numiter=1, + sprd_tol=1.e30,paoverpb_thresh=0.98, + nlons=$LONA_ENKF,nlats=$LATA_ENKF,nlevs=$LEVS_ENKF,nanals=$NMEM_ENKF, + deterministic=.true.,sortinc=.true.,lupd_satbiasc=.false., + reducedgrid=${reducedgrid},readin_localization=${readin_localization_enkf}., + use_gfs_nemsio=${use_gfs_nemsio},use_gfs_ncio=${use_gfs_ncio},imp_physics=$imp_physics,lupp=$lupp, + univaroz=.false.,adp_anglebc=.true.,angord=4,use_edges=.false.,emiss_bc=.true., + letkf_flag=${letkf_flag},nobsl_max=${nobsl_max},denkf=${denkf},getkf=${getkf}., + nhr_anal=${IAUFHRS_ENKF},nhr_state=${IAUFHRS_ENKF},use_qsatensmean=.true., + lobsdiag_forenkf=$lobsdiag_forenkf, + write_spread_diag=$write_spread_diag, + modelspace_vloc=$modelspace_vloc, + use_correlated_oberrs=${use_correlated_oberrs}, + netcdf_diag=$netcdf_diag,cnvw_option=$cnvw_option, + paranc=$paranc,write_fv3_incr=$write_fv3_incr, + efsoi_cycling=.true., + efsoi_flag=.true., + wmoist=1.0,adrate=0.75 + $WRITE_INCR_ZERO + $NAM_ENKF +/ +&satobs_enkf + sattypes_rad(1) = 'amsua_n15', dsis(1) = 'amsua_n15', + sattypes_rad(2) = 'amsua_n18', dsis(2) = 'amsua_n18', + sattypes_rad(3) = 'amsua_n19', dsis(3) = 'amsua_n19', + sattypes_rad(4) = 'amsub_n16', dsis(4) = 'amsub_n16', + sattypes_rad(5) = 'amsub_n17', dsis(5) = 'amsub_n17', + sattypes_rad(6) = 'amsua_aqua', dsis(6) = 'amsua_aqua', + sattypes_rad(7) = 'amsua_metop-a', dsis(7) = 'amsua_metop-a', + sattypes_rad(8) = 'airs_aqua', dsis(8) = 'airs_aqua', + sattypes_rad(9) = 'hirs3_n17', dsis(9) = 'hirs3_n17', + sattypes_rad(10)= 'hirs4_n19', dsis(10)= 'hirs4_n19', + sattypes_rad(11)= 'hirs4_metop-a', dsis(11)= 'hirs4_metop-a', + sattypes_rad(12)= 'mhs_n18', dsis(12)= 'mhs_n18', + sattypes_rad(13)= 'mhs_n19', dsis(13)= 'mhs_n19', + sattypes_rad(14)= 'mhs_metop-a', dsis(14)= 'mhs_metop-a', + sattypes_rad(15)= 'goes_img_g11', dsis(15)= 'imgr_g11', + sattypes_rad(16)= 'goes_img_g12', dsis(16)= 'imgr_g12', + sattypes_rad(17)= 'goes_img_g13', dsis(17)= 'imgr_g13', + sattypes_rad(18)= 'goes_img_g14', dsis(18)= 'imgr_g14', + sattypes_rad(19)= 'goes_img_g15', dsis(19)= 'imgr_g15', + sattypes_rad(20)= 'avhrr_n18', dsis(20)= 'avhrr3_n18', + sattypes_rad(21)= 'avhrr_metop-a', dsis(21)= 'avhrr3_metop-a', + sattypes_rad(22)= 'avhrr_n19', dsis(22)= 'avhrr3_n19', + sattypes_rad(23)= 'amsre_aqua', dsis(23)= 'amsre_aqua', + sattypes_rad(24)= 'ssmis_f16', dsis(24)= 'ssmis_f16', + sattypes_rad(25)= 'ssmis_f17', dsis(25)= 'ssmis_f17', + sattypes_rad(26)= 'ssmis_f18', dsis(26)= 'ssmis_f18', + sattypes_rad(27)= 'ssmis_f19', dsis(27)= 'ssmis_f19', + sattypes_rad(28)= 'ssmis_f20', dsis(28)= 'ssmis_f20', + sattypes_rad(29)= 'sndrd1_g11', dsis(29)= 'sndrD1_g11', + sattypes_rad(30)= 'sndrd2_g11', dsis(30)= 'sndrD2_g11', + sattypes_rad(31)= 'sndrd3_g11', dsis(31)= 'sndrD3_g11', + sattypes_rad(32)= 'sndrd4_g11', dsis(32)= 'sndrD4_g11', + sattypes_rad(33)= 'sndrd1_g12', dsis(33)= 'sndrD1_g12', + sattypes_rad(34)= 'sndrd2_g12', dsis(34)= 'sndrD2_g12', + sattypes_rad(35)= 'sndrd3_g12', dsis(35)= 'sndrD3_g12', + sattypes_rad(36)= 'sndrd4_g12', dsis(36)= 'sndrD4_g12', + sattypes_rad(37)= 'sndrd1_g13', dsis(37)= 'sndrD1_g13', + sattypes_rad(38)= 'sndrd2_g13', dsis(38)= 'sndrD2_g13', + sattypes_rad(39)= 'sndrd3_g13', dsis(39)= 'sndrD3_g13', + sattypes_rad(40)= 'sndrd4_g13', dsis(40)= 'sndrD4_g13', + sattypes_rad(41)= 'sndrd1_g14', dsis(41)= 'sndrD1_g14', + sattypes_rad(42)= 'sndrd2_g14', dsis(42)= 'sndrD2_g14', + sattypes_rad(43)= 'sndrd3_g14', dsis(43)= 'sndrD3_g14', + sattypes_rad(44)= 'sndrd4_g14', dsis(44)= 'sndrD4_g14', + sattypes_rad(45)= 'sndrd1_g15', dsis(45)= 'sndrD1_g15', + sattypes_rad(46)= 'sndrd2_g15', dsis(46)= 'sndrD2_g15', + sattypes_rad(47)= 'sndrd3_g15', dsis(47)= 'sndrD3_g15', + sattypes_rad(48)= 'sndrd4_g15', dsis(48)= 'sndrD4_g15', + sattypes_rad(49)= 'iasi_metop-a', dsis(49)= 'iasi_metop-a', + sattypes_rad(50)= 'seviri_m08', dsis(50)= 'seviri_m08', + sattypes_rad(51)= 'seviri_m09', dsis(51)= 'seviri_m09', + sattypes_rad(52)= 'seviri_m10', dsis(52)= 'seviri_m10', + sattypes_rad(53)= 'seviri_m11', dsis(53)= 'seviri_m11', + sattypes_rad(54)= 'amsua_metop-b', dsis(54)= 'amsua_metop-b', + sattypes_rad(55)= 'hirs4_metop-b', dsis(55)= 'hirs4_metop-b', + sattypes_rad(56)= 'mhs_metop-b', dsis(56)= 'mhs_metop-b', + sattypes_rad(57)= 'iasi_metop-b', dsis(57)= 'iasi_metop-b', + sattypes_rad(58)= 'avhrr_metop-b', dsis(58)= 'avhrr3_metop-b', + sattypes_rad(59)= 'atms_npp', dsis(59)= 'atms_npp', + sattypes_rad(60)= 'atms_n20', dsis(60)= 'atms_n20', + sattypes_rad(61)= 'cris_npp', dsis(61)= 'cris_npp', + sattypes_rad(62)= 'cris-fsr_npp', dsis(62)= 'cris-fsr_npp', + sattypes_rad(63)= 'cris-fsr_n20', dsis(63)= 'cris-fsr_n20', + sattypes_rad(64)= 'gmi_gpm', dsis(64)= 'gmi_gpm', + sattypes_rad(65)= 'saphir_meghat', dsis(65)= 'saphir_meghat', + sattypes_rad(66)= 'amsua_metop-c', dsis(66)= 'amsua_metop-c', + sattypes_rad(67)= 'mhs_metop-c', dsis(67)= 'mhs_metop-c', + sattypes_rad(68)= 'ahi_himawari8', dsis(68)= 'ahi_himawari8', + sattypes_rad(69)= 'abi_g16', dsis(69)= 'abi_g16', + sattypes_rad(70)= 'abi_g17', dsis(70)= 'abi_g17', + $SATOBS_ENKF +/ +&ozobs_enkf + sattypes_oz(1) = 'sbuv2_n16', + sattypes_oz(2) = 'sbuv2_n17', + sattypes_oz(3) = 'sbuv2_n18', + sattypes_oz(4) = 'sbuv2_n19', + sattypes_oz(5) = 'omi_aura', + sattypes_oz(6) = 'gome_metop-a', + sattypes_oz(7) = 'gome_metop-b', + sattypes_oz(8) = 'mls30_aura', + sattypes_oz(9) = 'ompsnp_npp', + sattypes_oz(10) = 'ompstc8_npp', + $OZOBS_ENKF +/ +EOFnml + +################################################################################ +# Run enkf update + +export OMP_NUM_THREADS=$NTHREADS_ENKF +#export pgm=$ENKFEXEC AFE +export pgm=$EFSOIEXEC +. prep_step + +#$NCP $ENKFEXEC $DATA AFE +#$APRUN_ENKF ${DATA}/$(basename $ENKFEXEC) 1>stdout 2>stderr AFE +$NCP $EFSOIEXEC $DATA +$APRUN_ENKF ${DATA}/$(basename $EFSOIEXEC) 1>stdout 2>stderr +rc=$? + +export ERR=$rc +export err=$ERR +$ERRSCRIPT || exit 2 + +## save for EFSOI task (still needed?) +#$NCP $COMOUT_ANL_ENS/$GBIASe $COMOUT_ANL_ENSFSOI + +# Cat runtime output files. +cat stdout stderr > $COMOUT_ANL_ENSFSOI/$EFSOISTAT + +$NCP osense_${CDATE}.dat $COMOUT_ANL_ENSFSOI/$OSENSEOUT +$NCP osense_${CDATE}.dat $OSENSE_SAVE_DIR/$OSENSEOUT + +################################################################################ +# Postprocessing +######## AFE remove after testing +cp -r $DATA /scratch1/NCEPDEV/stmp4/Andrew.Eichmann/efsoi +######## AFE +cd $pwd +[[ $mkdata = "YES" ]] && rm -rf $DATA +set +x +if [ $VERBOSE = "YES" ]; then + echo $(date) EXITING $0 with return code $err >&2 +fi +exit $err diff --git a/scripts/exgdas_efsoi_update.sh b/scripts/exgdas_efsoi_update.sh index 62f60f95e61..d198a0ac352 100755 --- a/scripts/exgdas_efsoi_update.sh +++ b/scripts/exgdas_efsoi_update.sh @@ -402,7 +402,7 @@ cat stdout stderr > $COMOUT_ANL_ENSFSOI/$ENKFSTAT ################################################################################ # Postprocessing ######## AFE remove after testing -cp -r $DATA /scratch1/NCEPDEV/stmp4/Andrew.Eichmann/efsoi +#cp -r $DATA /scratch1/NCEPDEV/stmp4/Andrew.Eichmann/efsoi ######## AFE cd $pwd [[ $mkdata = "YES" ]] && rm -rf $DATA From 517117bdba7ec0ed753f6acab902784c36f9a941 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Fri, 12 Feb 2021 15:38:33 +0000 Subject: [PATCH 026/103] added EFSOI-specific variable to govern file cleanup --- parm/config/config.earc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/parm/config/config.earc b/parm/config/config.earc index 7cb1de235f0..eada7a8db3f 100755 --- a/parm/config/config.earc +++ b/parm/config/config.earc @@ -14,4 +14,6 @@ export NMEM_EARCGRP=10 export RMOLDSTD_ENKF=144 export RMOLDEND_ENKF=24 +export RMOLDEND_EFSOI=48 + echo "END: config.earc" From 70cdb5dfdad5734798dabbf70a3565edec058556 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Fri, 19 Feb 2021 13:30:10 +0000 Subject: [PATCH 027/103] changes to coordinate with GSI code --- scripts/exgdas_efsoi.sh | 5 ++++- scripts/exgdas_efsoi_update.sh | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/scripts/exgdas_efsoi.sh b/scripts/exgdas_efsoi.sh index 6e41a27a847..506bba099a8 100755 --- a/scripts/exgdas_efsoi.sh +++ b/scripts/exgdas_efsoi.sh @@ -75,11 +75,13 @@ FCST6HRS=${PPREFIX}atmf006.ensmean.nc OSENSEIN=osense_${CDATE}_init.dat OSENSEOUT=osense_${CDATE}_final.dat +# this needs to be set manually because params in enkf will default to fhr03 +fgfileprefixes=sfg_${CDATE}_fhr06_ -# Namelist parameters +#analysise Namelst parameters USE_CORRELATED_OBERRS=${USE_CORRELATED_OBERRS:-"NO"} NMEM_ENKF=${NMEM_ENKF:-80} NAM_ENKF=${NAM_ENKF:-""} @@ -314,6 +316,7 @@ cat > enkf.nml << EOFnml datestring="$CDATE",datapath="$DATA/", gdatehr=$gcyc, datehr=$cyc, + fgfileprefixes=$fgfileprefixes andataname="$VERFANL", analpertwtnh=${analpertwt},analpertwtsh=${analpertwt},analpertwttr=${analpertwt}, covinflatemax=1.e2,covinflatemin=1,pseudo_rh=.true.,iassim_order=0, diff --git a/scripts/exgdas_efsoi_update.sh b/scripts/exgdas_efsoi_update.sh index d198a0ac352..3ad322d3c83 100755 --- a/scripts/exgdas_efsoi_update.sh +++ b/scripts/exgdas_efsoi_update.sh @@ -286,7 +286,7 @@ cat > enkf.nml << EOFnml use_correlated_oberrs=${use_correlated_oberrs}, netcdf_diag=$netcdf_diag,cnvw_option=$cnvw_option, paranc=$paranc,write_fv3_incr=$write_fv3_incr, - fso_cycling=.true., + efsoi_cycling=.true., $WRITE_INCR_ZERO $NAM_ENKF / From cb1e7df94112e62552ae4602540a934ec0dd6d54 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Fri, 19 Feb 2021 14:38:14 +0000 Subject: [PATCH 028/103] cleanup, harmonization of config files --- parm/config/config.baseSAVE | 301 ++++++++++++++++++++++++++++++++++++ parm/config/config.efcs | 4 +- parm/config/config.efsoi | 4 +- parm/config/config.eobs | 4 +- parm/config/config.eupdfsoi | 2 + readme_efsoi.txt | 84 ---------- 6 files changed, 306 insertions(+), 93 deletions(-) create mode 100755 parm/config/config.baseSAVE delete mode 100644 readme_efsoi.txt diff --git a/parm/config/config.baseSAVE b/parm/config/config.baseSAVE new file mode 100755 index 00000000000..7b6598304a3 --- /dev/null +++ b/parm/config/config.baseSAVE @@ -0,0 +1,301 @@ +#!/bin/ksh -x + +########## config.base ########## +# Common to all steps + +echo "BEGIN: config.base" + +# Machine environment +export machine="@MACHINE@" + +# EMC parallel or NCO production +export RUN_ENVIR="emc" + +# Account, queue, etc. +# AFE 2020-11-16 changed for me, shouldn't be committed but probably will be +#export ACCOUNT="@ACCOUNT@" +export ACCOUNT="da-cpu" +export QUEUE="@QUEUE@" +export QUEUE_SERVICE="@QUEUE_SERVICE@" +export PARTITION_BATCH="@PARTITION_BATCH@" + +# Project to use in mass store: +HPSS_PROJECT=emc-global + +# Directories relative to installation areas: +export HOMEgfs=@HOMEgfs@ +export PARMgfs=$HOMEgfs/parm +export FIXgfs=$HOMEgfs/fix +export USHgfs=$HOMEgfs/ush +export UTILgfs=$HOMEgfs/util +export EXECgfs=$HOMEgfs/exec +export SCRgfs=$HOMEgfs/scripts + +######################################################################## + +# GLOBAL static environment parameters +export NWPROD="@NWPROD@" +export COMROOT="@COMROOT@" +export DMPDIR="@DMPDIR@" +export RTMFIX=$CRTM_FIX + +# USER specific paths +export HOMEDIR="@HOMEDIR@" +export STMP="@STMP@" +export PTMP="@PTMP@" +export NOSCRUB="@NOSCRUB@" + +# Base directories for various builds +export BASE_GIT="@BASE_GIT@" + +# Toggle to turn on/off GFS downstream processing. +# AFE 2020-11-16 copied from LL's EFSOI configs, note +# says it was suggested by Kate. New config file? +#export DO_BUFRSND="YES" # BUFR sounding products +export DO_BUFRSND="NO" # BUFR sounding products +export DO_GEMPAK="NO" # GEMPAK products +export DO_AWIPS="NO" # AWIPS products +export WAFSF="NO" # WAFS products + +# NO for retrospective parallel; YES for real-time parallel +# arch.sh uses REALTIME for MOS. Need to set REALTIME=YES +# if want MOS written to HPSS. Should update arch.sh to +# use RUNMOS flag (currently in config.vrfy) +export REALTIME="YES" + + +#################################################### +# DO NOT ADD MACHINE DEPENDENT STUFF BELOW THIS LINE +# IF YOU HAVE TO MAKE MACHINE SPECIFIC CHANGES BELOW +# FEEL FREE TO MOVE THEM ABOVE THIS LINE TO KEEP IT +# CLEAR +#################################################### +# Build paths relative to $HOMEgfs +export FIXgsi="$HOMEgfs/fix/fix_gsi" +export HOMEfv3gfs="$HOMEgfs/sorc/fv3gfs.fd" +export HOMEpost="$HOMEgfs" +export HOMEobsproc_prep="$BASE_GIT/obsproc/gfsv16b/obsproc_prep_RB-5.4.0" +export HOMEobsproc_network="$BASE_GIT/obsproc/gfsv16b/obsproc_global_RB-3.4.0" +export HOMEobsproc_global=$HOMEobsproc_network +export BASE_VERIF="$BASE_GIT/verif/global/tags/vsdb" + +# CONVENIENT utility scripts and other environment parameters +export NCP="/bin/cp -p" +export NMV="/bin/mv" +export NLN="/bin/ln -sf" +export VERBOSE="YES" +export KEEPDATA="NO" +export CHGRP_RSTPROD="@CHGRP_RSTPROD@" +export CHGRP_CMD="@CHGRP_CMD@" +export NEMSIOGET="$HOMEgfs/exec/nemsio_get" +export NCDUMP="$NETCDF/bin/ncdump" +export NCLEN="$HOMEgfs/ush/getncdimlen" + +# Machine environment, jobs, and other utility scripts +export BASE_ENV="$HOMEgfs/env" +export BASE_JOB="$HOMEgfs/jobs/rocoto" + +# EXPERIMENT specific environment parameters +export SDATE=@SDATE@ +export FDATE=@FDATE@ +export EDATE=@EDATE@ +export EXP_WARM_START="@EXP_WARM_START@" +export assim_freq=6 +export PSLOT="@PSLOT@" +export EXPDIR="@EXPDIR@/$PSLOT" +export ROTDIR="@ROTDIR@/$PSLOT" +export ROTDIR_DUMP="YES" #Note: A value of "NO" does not currently work +export DUMP_SUFFIX="" +if [[ "$CDATE" -ge "2019092100" && "$CDATE" -le "2019110700" ]]; then + export DUMP_SUFFIX="p" # Use dumps from NCO GFS v15.3 parallel +fi +export RUNDIR="$STMP/RUNDIRS/$PSLOT" +export DATAROOT="$RUNDIR/$CDATE/$CDUMP" +export ARCDIR="$NOSCRUB/archive/$PSLOT" +export ICSDIR="@ICSDIR@" +export ATARDIR="/NCEPDEV/$HPSS_PROJECT/1year/$USER/$machine/scratch/$PSLOT" + +# Commonly defined parameters in JJOBS +export envir=${envir:-"prod"} +export NET="gfs" +export RUN=${RUN:-${CDUMP:-"gfs"}} +export COMINatmos=${ROTDIR}/${CDUMP}.${PDY}/${cyc}/atmos +export COMOUTatmos=${ROTDIR}/${CDUMP}.${PDY}/${cyc}/atmos +export COMINwave=${ROTDIR}/${CDUMP}.${PDY}/${cyc}/wave +export COMOUTwave=${ROTDIR}/${CDUMP}.${PDY}/${cyc}/wave + +export jlogfile="${EXPDIR}/logs/jlogfile" +export ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} +export LOGSCRIPT=${LOGSCRIPT:-""} +#export ERRSCRIPT=${ERRSCRIPT:-"err_chk"} +#export LOGSCRIPT=${LOGSCRIPT:-"startmsg"} +export REDOUT="1>" +export REDERR="2>" + +export SENDECF=${SENDECF:-"NO"} +export SENDCOM=${SENDCOM:-"NO"} +export SENDSDM=${SENDSDM:-"NO"} +export SENDDBN_NTC=${SENDDBN_NTC:-"NO"} +export SENDDBN=${SENDDBN:-"NO"} +export DBNROOT=${DBNROOT:-${UTILROOT}/fakedbn} + +# Resolution specific parameters +export LEVS=128 +export CASE="@CASECTL@" +export CASE_ENKF="@CASEENS@" + +# Surface cycle update frequency +if [[ "$CDUMP" == "gdas" ]] ; then + export FHCYC=1 + export FTSFS=10 +elif [[ "$CDUMP" == "gfs" ]] ; then + export FHCYC=24 +fi + +# Output frequency of the forecast model (for cycling) +export FHMIN=0 +export FHMAX=9 +export FHOUT=3 + +# Cycle to run EnKF (set to BOTH for both gfs and gdas) +export EUPD_CYC="gdas" + +# GFS cycle info +export gfs_cyc=@gfs_cyc@ # 0: no GFS cycle, 1: 00Z only, 2: 00Z and 12Z only, 4: all 4 cycles. + +# GFS output and frequency +export FHMIN_GFS=0 + +# AFE 2020-11-16 This is copied from LL's EFSOI config - probably should +# go in a new config file +#export FHMAX_GFS_00=384 +#export FHMAX_GFS_06=384 +#export FHMAX_GFS_12=384 +#export FHMAX_GFS_18=384 +export FHMAX_GFS_00=72 +export FHMAX_GFS_06=72 +export FHMAX_GFS_12=72 +export FHMAX_GFS_18=72 +export FHMAX_GFS=$(eval echo \${FHMAX_GFS_$cyc}) + +export FHOUT_GFS=3 +export FHMAX_HF_GFS=0 +export FHOUT_HF_GFS=1 +export ILPOST=1 # gempak output frequency up to F120 + +# GFS restart interval in hours +export restart_interval_gfs=0 + + +# I/O QUILTING, true--use Write Component; false--use GFDL FMS +# if quilting=true, choose OUTPUT_GRID as cubed_sphere_grid in netcdf or gaussian_grid +# if gaussian_grid, set OUTPUT_FILE for nemsio or netcdf +# WRITE_DOPOST=true, use inline POST +export QUILTING=".true." +export OUTPUT_GRID="gaussian_grid" +export OUTPUT_FILE="netcdf" +export WRITE_DOPOST=".true." + +# suffix options depending on file format +if [ $OUTPUT_FILE = "netcdf" ]; then + export SUFFIX=".nc" + export NEMSIO_IN=".false." + export NETCDF_IN=".true." +else + export SUFFIX=".nemsio" + export NEMSIO_IN=".true." + export NETCDF_IN=".false." +fi + +# IAU related parameters +export DOIAU="YES" # Enable 4DIAU for control with 3 increments +export IAUFHRS="3,6,9" +export IAU_FHROT=`echo $IAUFHRS | cut -c1` +export IAU_DELTHRS=6 +export IAU_OFFSET=6 +export DOIAU_ENKF=${DOIAU:-"YES"} # Enable 4DIAU for EnKF ensemble +export IAUFHRS_ENKF="3,6,9" +export IAU_DELTHRS_ENKF=6 +if [[ "$SDATE" = "$CDATE" && $EXP_WARM_START = ".false." ]] || [[ "$DOIAU" = "NO" ]] ; then # Cold starting or IAU off + export IAU_OFFSET=0 + export IAU_FHROT=0 +fi + +# Use Jacobians in eupd and thereby remove need to run eomg +export lobsdiag_forenkf=".true." + +# run GLDAS to spin up land ICs +export DO_GLDAS="YES" +export gldas_cyc=00 + +# run wave component +# AFE 2020-11-16 copied from LL's EFSOI configs, note +# says it was suggested by Kate. New config file? +#export DO_WAVE="YES" +export DO_WAVE="NO" +export WAVE_CDUMP="both" + +# AFE 2020-11-16 copied from LL's EFSOI configs +export DO_EFSOI=YES + +# Microphysics Options: 99-ZhaoCarr, 8-Thompson; 6-WSM6, 10-MG, 11-GFDL +export imp_physics=11 + +# Shared parameters +# Hybrid related +export DOHYBVAR="YES" +export NMEM_ENKF=@NMEM_ENKF@ +export SMOOTH_ENKF="NO" +export l4densvar=".true." +export lwrite4danl=".true." + +# EnKF output frequency +if [ $DOHYBVAR = "YES" ]; then + export FHMIN_ENKF=3 + export FHMAX_ENKF=9 + if [ $l4densvar = ".true." ]; then + export FHOUT=1 + export FHOUT_ENKF=1 + else + export FHOUT_ENKF=3 + fi +fi + +# turned on nsst in anal and/or fcst steps, and turn off rtgsst +export DONST="YES" +if [ $DONST = "YES" ]; then export FNTSFA=" "; fi + +# The switch to apply SST elevation correction or not +export nst_anl=.true. + +# Analysis increments to zero in CALCINCEXEC +export INCREMENTS_TO_ZERO="'liq_wat_inc','icmr_inc'" + +if [ $OUTPUT_FILE = "nemsio" ]; then + export DO_CALC_INCREMENT="YES" + export DO_CALC_ANALYSIS="NO" +fi + +# Stratospheric increments to zero +export INCVARS_ZERO_STRAT="'sphum_inc','liq_wat_inc','icmr_inc'" +export INCVARS_EFOLD="5" + +# Swith to generate netcdf or binary diagnostic files. If not specified, +# script default to binary diagnostic files. Set diagnostic file +# variables here since used in both DA and vrfy jobs +export netcdf_diag=".true." +export binary_diag=".false." + +# Verification options +export DO_METP="YES" # Run METPLUS jobs - set METPLUS settings in config.metp +export DO_VSDB="YES" # Run VSDB package - set VSDB settings in config.vrfy + +# Archiving options +export HPSSARCH="@HPSSARCH@" # save data to HPSS archive +export ARCH_CYC=00 # Archive data at this cycle for warm_start capability +export ARCH_WARMICFREQ=4 # Archive frequency in days for warm_start capability +export ARCH_FCSTICFREQ=1 # Archive frequency in days for gdas and gfs forecast-only capability + +export DELETE_COM_IN_ARCHIVE_JOB="YES" # NO=retain ROTDIR. YES default in arch.sh and earc.sh. + +echo "END: config.base" diff --git a/parm/config/config.efcs b/parm/config/config.efcs index fa13b7d74b5..94b9df1840b 100755 --- a/parm/config/config.efcs +++ b/parm/config/config.efcs @@ -19,9 +19,7 @@ if [ $QUILTING = ".true." ]; then fi # Number of enkf members per fcst job -#AFE 2020-11-16 changing to LL's EFSOI config -#export NMEM_EFCSGRP=2 -export NMEM_EFCSGRP=4 +export NMEM_EFCSGRP=2 export RERUN_EFCSGRP="NO" # Turn off inline UPP for EnKF forecast diff --git a/parm/config/config.efsoi b/parm/config/config.efsoi index 8a4efd7a729..f9b238d9062 100755 --- a/parm/config/config.efsoi +++ b/parm/config/config.efsoi @@ -30,9 +30,7 @@ export lnsigcutoff=2.75 # ignored if modelspace_vloc=.true. export lobsdiag_forenkf=".true." # use jacobian. must be .true. if modelspace_vloc=".true." # need to specify .true. setting since config.anal sets to .false. -#export EFSOIEXEC="/scratch1/NCEPDEV/da/Andrew.Eichmann/GSI_07_09/exec/global_efsoi.x" -#export EFSOIEXEC="/scratch1/NCEPDEV/da/Andrew.Eichmann/200601_EFSOI_03/GSI_07_08/exec/global_efsoi.x" -export EFSOIEXEC="/scratch1/NCEPDEV/da/Andrew.Eichmann/gsidev/ll-gsi/GSI/build_efsoi/bin/global_efsoi.x" +export EFSOIEXEC="/scratch1/NCEPDEV/da/Andrew.Eichmann/gsidev/afe-efsoi/GSI/build/bin/global_efsoi.x" export ANAVINFO="/scratch1/NCEPDEV/da/Andrew.Eichmann/para_gfs/nutria/global_anavinfo_efsoi.l127.txt" export NAM_ENKF="smoothparm=35," diff --git a/parm/config/config.eobs b/parm/config/config.eobs index 8b06a3bc56d..8fa99c10fb1 100755 --- a/parm/config/config.eobs +++ b/parm/config/config.eobs @@ -9,9 +9,7 @@ echo "BEGIN: config.eobs" . $EXPDIR/config.resources eobs # Number of enkf members per innovation job -# AFE 2020-11-16 changed to LL's EFSOI configuration -#export NMEM_EOMGGRP=8 -export NMEM_EOMGGRP=6 +export NMEM_EOMGGRP=8 export RERUN_EOMGGRP="YES" export npe_gsi=$npe_eobs diff --git a/parm/config/config.eupdfsoi b/parm/config/config.eupdfsoi index c1417b5b41f..fab4ae7535d 100755 --- a/parm/config/config.eupdfsoi +++ b/parm/config/config.eupdfsoi @@ -32,4 +32,6 @@ export lobsdiag_forenkf=".true." # use jacobian. must be .true. if modelspace_v export NAM_ENKF="smoothparm=35," +export ENKFEXEC=/scratch1/NCEPDEV/da/Andrew.Eichmann/gsidev/afe-efsoi/GSI/build/bin/enkf_gfs.x + echo "END: config.eupdfsoi" diff --git a/readme_efsoi.txt b/readme_efsoi.txt deleted file mode 100644 index dc7780f57ac..00000000000 --- a/readme_efsoi.txt +++ /dev/null @@ -1,84 +0,0 @@ -========================================================== -Note for EFSOI -========================================================== - -2020.06.05 (Liaofan Lin) - -There are the following types of files: - 1) exists and is updated for general purposes and then git-pushed; - 2) is added for EFSOI and then git-pushed; and - 3) exists and is updated for EFSOI and then git pushed - 4) exists and is updated but not git-pushed - 5) to bo pushed - -(1) Files that exist and are updated for general run setup and then git-pushed -[AFE 2020-11-16: these are user- and EFSOI-run-specific changes to -config files - for now will be not set to repo. Have to ask somebody preferred -way to handle this regarding repo.] - - * parm/config/config.base.emc.dyn - * parm/config/config.efcs - * parm/config/config.eobs -[AFE 2020-11-16 also config.resources! committed because it should be pretty static] - -(2) Files that are added for EFSOI and then git-pushed -[AFE 2020-11-16: these have been added and committed] - - for gdaseupdfsoi: - * jobs/JGLOBAL_EFSOI_UPDATE -[AFE 2020-12-03 renamed jobs/JGDAS_EFSOI_UPDATE ] - * jobs/rocoto/eupdfsoi.sh - * scripts/exglobal_efsoi_update_fv3gfs.sh.ecf -[AFE 2020-12-03 renamed scrpts/exgdas_efsoi_update.sh ] - * parm/config/config.eupdfsoi - - for gdasesfcfsoi: - * jobs/rocoto/esfcfsoi.sh - * jobs/JGDAS_EFSOI_SURFACE - * scripts/exglobal_efsoi_surface_fv3gfs.sh.ecf - * parm/config/config.esfcfsoi - - for gdasecenfsoi - * jobs/rocoto/ecenfsoi.sh - * jobs/JGDAS_EFSOI_RECENTER -[AFE 2020-12-04 renamed jobs/JGDAS_EFSOI_ECEN ] - * scripts/exglobal_efsoi_recenter_fv3gfs.sh.ecf -[AFE 2020-12-04 renamed scripts/exgdas_efsoi_ecen.sh, may be superfluous ] - * parm/config/config.ecenfsoi - - for gdasefcsfsoi - * jobs/rocoto/efcsfsoi.sh - * jobs/JGDAS_EFSOI_FCST - * scripts/exglobal_efsoi_fcst_fv3gfs.sh.ecf - * parm/config/config.efcsfsoi - - for gdaseposfsoi - * jobs/rocoto/eposfsoi.sh - * jobs/JGDAS_EFSOI_POST - * scripts/exglobal_efsoi_post_fv3gfs.sh.ecf - * parm/config/config.eposfsoi - -(3) Files that exist and are updated for EFSOI and then git-pushed - - for all EFSOI tasks - * env/HERA.env [ merged and committed ] - * parm/config/config.resources [ committed, see above] - * ush/rocoto/setup_workflow.py [ merged and committed ] - - - for gdasefcsfsoi only - * scripts/exglobal_fcst_nemsfv3gfs.sh - -(4) Files that exist and are updated but not git-pushed: -[these are in the gsi repository - * scripts/exglobal_enkf_update_fv3gfs.sh.ecf - * scripts/exglobal_enkf_surface_fv3gfs.sh.ecf - * scripts/exglobal_enkf_recenter_fv3gfs.sh.ecf - * scripts/exglobal_enkf_fcst_fv3gfs.sh.ecf - -(5) Note, to be pushed - - - - - From 487911c8041a2c69f36af3ea8f82d56d73658198 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Fri, 19 Feb 2021 15:48:38 +0000 Subject: [PATCH 029/103] config cleanup --- parm/config/config.base.emc.dyn | 31 +++++++------------------------ 1 file changed, 7 insertions(+), 24 deletions(-) diff --git a/parm/config/config.base.emc.dyn b/parm/config/config.base.emc.dyn index 5cefc13a46f..37669926eed 100755 --- a/parm/config/config.base.emc.dyn +++ b/parm/config/config.base.emc.dyn @@ -12,9 +12,7 @@ export machine="@MACHINE@" export RUN_ENVIR="emc" # Account, queue, etc. -# AFE 2020-11-16 changed for me, shouldn't be committed but probably will be -#export ACCOUNT="@ACCOUNT@" -export ACCOUNT="da-cpu" +export ACCOUNT="@ACCOUNT@" export QUEUE="@QUEUE@" export QUEUE_SERVICE="@QUEUE_SERVICE@" export PARTITION_BATCH="@PARTITION_BATCH@" @@ -49,10 +47,7 @@ export NOSCRUB="@NOSCRUB@" export BASE_GIT="@BASE_GIT@" # Toggle to turn on/off GFS downstream processing. -# AFE 2020-11-16 copied from LL's EFSOI configs, note -# says it was suggested by Kate. New config file? -#export DO_BUFRSND="YES" # BUFR sounding products -export DO_BUFRSND="NO" # BUFR sounding products +export DO_BUFRSND="YES" # BUFR sounding products export DO_GEMPAK="NO" # GEMPAK products export DO_AWIPS="NO" # AWIPS products export WAFSF="NO" # WAFS products @@ -170,16 +165,10 @@ export gfs_cyc=@gfs_cyc@ # 0: no GFS cycle, 1: 00Z only, 2: 00Z and 12Z only, 4: # GFS output and frequency export FHMIN_GFS=0 -# AFE 2020-11-16 This is copied from LL's EFSOI config - probably should -# go in a new config file -#export FHMAX_GFS_00=384 -#export FHMAX_GFS_06=384 -#export FHMAX_GFS_12=384 -#export FHMAX_GFS_18=384 -export FHMAX_GFS_00=72 -export FHMAX_GFS_06=72 -export FHMAX_GFS_12=72 -export FHMAX_GFS_18=72 +export FHMAX_GFS_00=384 +export FHMAX_GFS_06=384 +export FHMAX_GFS_12=384 +export FHMAX_GFS_18=384 export FHMAX_GFS=$(eval echo \${FHMAX_GFS_$cyc}) export FHOUT_GFS=3 @@ -233,15 +222,9 @@ export DO_GLDAS="YES" export gldas_cyc=00 # run wave component -# AFE 2020-11-16 copied from LL's EFSOI configs, note -# says it was suggested by Kate. New config file? -#export DO_WAVE="YES" -export DO_WAVE="NO" +export DO_WAVE="YES" export WAVE_CDUMP="both" -# AFE 2020-11-16 copied from LL's EFSOI configs -export DO_EFSOI=YES - # Microphysics Options: 99-ZhaoCarr, 8-Thompson; 6-WSM6, 10-MG, 11-GFDL export imp_physics=11 From 10999207a7a5e839d5262d1e78e9a9f543c74bf1 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Fri, 19 Feb 2021 20:08:56 +0000 Subject: [PATCH 030/103] reverted EFSOI efcst env value to release --- parm/config/config.efcsfsoi | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/parm/config/config.efcsfsoi b/parm/config/config.efcsfsoi index 924e4225baf..69ed6648b98 100755 --- a/parm/config/config.efcsfsoi +++ b/parm/config/config.efcsfsoi @@ -20,9 +20,7 @@ if [ $QUILTING = ".true." ]; then fi # Number of enkf members per fcst job -#AFE 2020-11-16 changing to LL's EFSOI config -#export NMEM_EFCSGRP=2 -export NMEM_EFCSGRP=4 +export NMEM_EFCSGRP=2 export RERUN_EFCSGRP="NO" # Turn off inline UPP for EnKF forecast From 1ba46c58bd795f8ad1adb3ca3aca0fe2c7f05ed5 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Thu, 25 Feb 2021 16:01:37 +0000 Subject: [PATCH 031/103] update documentation header --- scripts/exgdas_efsoi_fcst.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/exgdas_efsoi_fcst.sh b/scripts/exgdas_efsoi_fcst.sh index 45da2d4e78a..13f75cd625b 100755 --- a/scripts/exgdas_efsoi_fcst.sh +++ b/scripts/exgdas_efsoi_fcst.sh @@ -2,12 +2,14 @@ ################################################################################ #### UNIX Script Documentation Block # . . -# Script name: exgdas_enkf_fcst.sh +# Script name: exgdas_efsoi_fcst.sh # Script description: Run ensemble forecasts # # Author: Rahul Mahajan Org: NCEP/EMC Date: 2017-03-02 +# Author: Andrew Eichmann Org: NCEP/EMC Date: 2021-02-25 # # Abstract: This script runs ensemble forecasts serially one-after-another +# for EFSOI. Based on exgdas_enkf_fcst.sh # # $Id$ # From 644a1f34374435f92a05f6e40f8064515a1de797 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Thu, 25 Feb 2021 16:07:26 +0000 Subject: [PATCH 032/103] cleanup --- jobs/JGDAS_EFSOI_ECEN | 1 - 1 file changed, 1 deletion(-) diff --git a/jobs/JGDAS_EFSOI_ECEN b/jobs/JGDAS_EFSOI_ECEN index fdadf4b7246..28d04b9f5cf 100755 --- a/jobs/JGDAS_EFSOI_ECEN +++ b/jobs/JGDAS_EFSOI_ECEN @@ -112,7 +112,6 @@ postmsg "$jlogfile" "$msg" $LOGSCRIPT -#${ENKFRECENSH:-$SCRgfs/exgdas_efsoi_ecen.sh} ${ENKFRECENSH:-$SCRgfs/exgdas_enkf_ecen.sh} status=$? [[ $status -ne 0 ]] && exit $status From 4c8a1e87d603695d0ed0eea953a81fa447e704f7 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Fri, 26 Feb 2021 15:33:28 +0000 Subject: [PATCH 033/103] cleanup of messages and comments --- jobs/JGDAS_EFSOI | 5 ----- jobs/JGDAS_EFSOI_UPDATE | 39 --------------------------------------- 2 files changed, 44 deletions(-) diff --git a/jobs/JGDAS_EFSOI b/jobs/JGDAS_EFSOI index a8566de0019..dbd8ab86f8a 100755 --- a/jobs/JGDAS_EFSOI +++ b/jobs/JGDAS_EFSOI @@ -136,11 +136,6 @@ postmsg "$jlogfile" "$msg" ########################################## cd $DATAROOT -echo " ====== (JDAS_EFSOI_UPDATE) liaofan on 2020.05.07 === " -echo "DATAROOT="$DATAROOT -echo "DATA="$DATA -echo " ======================================================= " - [[ $KEEPDATA = "NO" ]] && rm -rf $DATA date diff --git a/jobs/JGDAS_EFSOI_UPDATE b/jobs/JGDAS_EFSOI_UPDATE index 211ef3e5c47..3d730eab7e5 100755 --- a/jobs/JGDAS_EFSOI_UPDATE +++ b/jobs/JGDAS_EFSOI_UPDATE @@ -88,41 +88,7 @@ export COMOUT_ANL_ENSFSOI="$ROTDIR/efsoi$CDUMP.$PDY/$cyc/$COMPONENT" -# ======= Edited by liaofan on 2020.05.06 ============== -#export COMIN_GES_ENS="$ROTDIR/enkfgdas.$gPDY/$gcyc" -#export COMOUT_ANL_ENS="$ROTDIR/enkf$CDUMP.$PDY/$cyc" - -# Copy enkfgdas data on the current cycle to fsoigdas folder! -# - see rn200502 -# - Do not copy the folders of each member, which were created in eupd -# - Copy only files created before gdaseupd - - - -# AFE some of these might be superfluous for EFSOI, unless changed for v16 -# AFE also cping should probably be done in script - - -# The first guess from enkfgdas -#export COMIN_GES_ENS="$ROTDIR/enkfgdas.$gPDY/$gcyc/$COMPONENT" - -# The output analysis to efsoi -#export COMOUT_ANL_ENS="$ROTDIR/fsoi$CDUMP.$PDY/$cyc/$COMPONENT" - - - mkdir -p $COMOUT_ANL_ENSFSOI -#cp -u -ir $COMOUT_ANL_ENS/gdas.*.radstat.* $COMOUT_ANL_ENSFSOI -#cp -u -ir $COMOUT_ANL_ENS/gdas.*.cnvstat.* $COMOUT_ANL_ENSFSOI -#cp -u -ir $COMOUT_ANL_ENS/gdas.*.oznstat.* $COMOUT_ANL_ENSFSOI -#cp -u -ir $COMOUT_ANL_ENS/gdas.*.loginc.txt $COMOUT_ANL_ENSFSOI -#cp -u -ir $COMOUT_ANL_ENS/gdas.*.obsinput.* $COMOUT_ANL_ENSFSOI -#cp -u -ir $COMOUT_ANL_ENS/gdas.*.gsistat.* $COMOUT_ANL_ENSFSOI -#cp -u -ir $COMOUT_ANL_ENS/gdas.*.abias* $COMOUT_ANL_ENSFSOI -#cp -u -ir $COMOUT_ANL_ENS/gdas.*.gsidiags $COMOUT_ANL_ENSFSOI - - -# ======================================================== ############################################################### # Run relevant exglobal script @@ -165,11 +131,6 @@ postmsg "$jlogfile" "$msg" ########################################## cd $DATAROOT -echo " ====== (JDAS_EFSOI_UPDATE) liaofan on 2020.05.07 === " -echo "DATAROOT="$DATAROOT -echo "DATA="$DATA -echo " ======================================================= " - [[ $KEEPDATA = "NO" ]] && rm -rf $DATA date From eed978fa6e04894a32f120f6d1c9ad67f89e3973 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Thu, 11 Mar 2021 16:17:51 +0000 Subject: [PATCH 034/103] fixed bug where first gdaseupdfsoi task expects to run - this should maybe be revisited --- ush/rocoto/setup_workflow.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/ush/rocoto/setup_workflow.py b/ush/rocoto/setup_workflow.py index e92a7fc57b4..bdb649a2afd 100755 --- a/ush/rocoto/setup_workflow.py +++ b/ush/rocoto/setup_workflow.py @@ -1240,10 +1240,16 @@ def get_hyb_tasks(dict_configs, cycledef='enkf'): # efsoi deps = [] - dep_dict = {'type': 'metatask', 'name': '%sepmnfsoi' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) +# dep_dict = {'type': 'metatask', 'name': '%sepmnfsoi' % cdump} +# deps.append(rocoto.add_dependency(dep_dict)) # dep_dict = {'type': 'metatask', 'name': '%sepmnsfsoi' % cdump, 'offset': '-6:00:00'} # deps.append(rocoto.add_dependency(dep_dict)) + data = '&ROTDIR;/efsoigdas.@Y@m@d/@H/atmos/gdas.t@Hz.atmf030.ensmean.nc' + dep_dict = {'type': 'data', 'data': data, 'offset': '-6:00:00'} + deps.append(rocoto.add_dependency(dep_dict)) + data = '&ROTDIR;/efsoigdas.@Y@m@d/@H/atmos/gdas.t@Hz.atmf024.ensmean.nc' + dep_dict = {'type': 'data', 'data': data} + deps.append(rocoto.add_dependency(dep_dict)) data = '&ROTDIR;/gdas.@Y@m@d/@H/atmos/gdas.t@Hz.atmanl.ensres.nc' dep_dict = {'type': 'data', 'data': data, 'offset': '24:00:00'} deps.append(rocoto.add_dependency(dep_dict)) From 39482cc62f9caeb649c691c59ac0adc471a61b8d Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Fri, 16 Apr 2021 18:29:17 +0000 Subject: [PATCH 035/103] refinement of efsoi archiving/cleanup, removal of commented lines --- jobs/rocoto/earc.sh | 14 ++++++- scripts/exgdas_efsoi.sh | 93 ++--------------------------------------- 2 files changed, 16 insertions(+), 91 deletions(-) diff --git a/jobs/rocoto/earc.sh b/jobs/rocoto/earc.sh index 7fef2274b33..265a727f2ef 100755 --- a/jobs/rocoto/earc.sh +++ b/jobs/rocoto/earc.sh @@ -227,6 +227,18 @@ if [ $ENSGRP -eq 0 ]; then [[ ! "$(ls -A $COMIN_ENS)" ]] && rm -rf $COMIN_ENS fi + COMIN_ENS="$ROTDIR/efsoigdas.$gPDY/$gcyc/$COMPONENT" + if [ -d $COMIN_ENS ] ; then + rm -rf $COMIN_ENS/*f012*nc + rm -rf $COMIN_ENS/*f018*nc + for imem in $(seq 1 $NMEM_ENKF); do + memchar="mem"$(printf %03i $imem) + for file in `ls $COMIN_ENS/$memchar |grep -v atmf024`; do + rm -rf $COMIN_ENS/$memchar/$file + done + done + fi + # Advance to next cycle GDATE=$($NDATE +$assim_freq $GDATE) @@ -234,7 +246,7 @@ if [ $ENSGRP -eq 0 ]; then # Now do EFSOI - needs to be kept around longer # Start start and end dates to remove - GDATEEND=$($NDATE -${RMOLDEND_EFSOI:-48} $CDATE) + GDATEEND=$($NDATE -${RMOLDEND_EFSOI:-36} $CDATE) GDATE=$($NDATE -${RMOLDSTD_ENKF:-120} $CDATE) while [ $GDATE -le $GDATEEND ]; do diff --git a/scripts/exgdas_efsoi.sh b/scripts/exgdas_efsoi.sh index 506bba099a8..f2763ff311c 100755 --- a/scripts/exgdas_efsoi.sh +++ b/scripts/exgdas_efsoi.sh @@ -3,9 +3,8 @@ #### UNIX Script Documentation Block # . . # Script name: exgdas_efsoi.sh -# Script description: Make global_enkf update for efsoi +# Script description: Runs efsoi to make observation sensitivities # -# Author: Rahul Mahajan Org: NCEP/EMC Date: 2017-03-02 # Author: Liaofan Lin/Andrew Eichmann Date: 2020-12-03 # # Abstract: This script runs the efsoi executable @@ -14,7 +13,7 @@ # # Attributes: # Language: POSIX shell -# Machine: WCOSS-Cray/Theia +# Machine: Hera # ################################################################################ @@ -45,7 +44,6 @@ APRUN_ENKF=${APRUN_ENKF:-${APRUN:-""}} NTHREADS_ENKF=${NTHREADS_ENKF:-${NTHREADS:-1}} # Executables -#ENKFEXEC=${ENKFEXEC:-$HOMEgfs/exec/global_enkf.x} EFSOIEXEC=${EFSOIEXEC:-$HOMEgfs/exec/efsoi.x} # Cycling and forecast hour specific parameters @@ -175,96 +173,16 @@ $NLN $VLOCALEIG vlocal_eig.dat # Bias correction coefficients based on the ensemble mean $NLN $COMOUT_ANL_ENSFSOI/$GBIASe satbias_in -################################################################################ - -#if [ $USE_CFP = "YES" ]; then -# [[ -f $DATA/untar.sh ]] && rm $DATA/untar.sh -# [[ -f $DATA/mp_untar.sh ]] && rm $DATA/mp_untar.sh -# set +x -# cat > $DATA/untar.sh << EOFuntar -##!/bin/sh -#memchar=\$1 -#flist="$CNVSTAT $OZNSTAT $RADSTAT" -#for ftype in \$flist; do -# if [ \$memchar = "ensmean" ]; then -# fname=$COMOUT_ANL_ENS/\${ftype}.ensmean -# else -# fname=$COMOUT_ANL_ENS/\$memchar/\$ftype -# fi -# tar -xvf \$fname -#done -#EOFuntar -# set -x -# chmod 755 $DATA/untar.sh -#fi - ################################################################################ # Ensemble guess, observational data and analyses/increments -#flist="$CNVSTAT $OZNSTAT $RADSTAT" -#if [ $USE_CFP = "YES" ]; then -# echo "$nm $DATA/untar.sh ensmean" | tee -a $DATA/mp_untar.sh -# if [ ${CFP_MP:-"NO"} = "YES" ]; then -# nm=$((nm+1)) -# fi -#else -# for ftype in $flist; do -# fname=$COMOUT_ANL_ENS/${ftype}.ensmean -# tar -xvf $fname -# done -#fi nfhrs=`echo $IAUFHRS_ENKF | sed 's/,/ /g'` for imem in $(seq 1 $NMEM_ENKF); do memchar="mem"$(printf %03i $imem) mkdir ${memchar} $NLN $COMOUT_ANL_ENSFSOI/$memchar/${APREFIX}atmf024.nc ${memchar} -# if [ $lobsdiag_forenkf = ".false." ]; then -# if [ $USE_CFP = "YES" ]; then -# echo "$nm $DATA/untar.sh $memchar" | tee -a $DATA/mp_untar.sh -# if [ ${CFP_MP:-"NO"} = "YES" ]; then -# nm=$((nm+1)) -# fi -# else -# for ftype in $flist; do -# fname=$COMOUT_ANL_ENS/$memchar/$ftype -# tar -xvf $fname -# done -# fi -# fi -##### mkdir -p $COMOUT_ANL_ENSFSOI/$memchar -# for FHR in $nfhrs; do -# $NLN $COMIN_GES_ENS/$memchar/${GPREFIX}atmf00${FHR}${ENKF_SUFFIX}${GSUFFIX} sfg_${CDATE}_fhr0${FHR}_${memchar} -# if [ $cnvw_option = ".true." ]; then -# $NLN $COMIN_GES_ENS/$memchar/${GPREFIX}sfcf00${FHR}${GSUFFIX} sfgsfc_${CDATE}_fhr0${FHR}_${memchar} -# fi -# if [ $FHR -eq 6 ]; then -# if [ $DO_CALC_INCREMENT = "YES" ]; then -# #$NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atmanl${ASUFFIX} sanl_${CDATE}_fhr0${FHR}_${memchar} -# $NLN $COMOUT_ANL_ENSFSOI/$memchar/${APREFIX}atmanl${ASUFFIX} sanl_${CDATE}_fhr0${FHR}_ni${memchar} -# else -# #$NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atminc${ASUFFIX} incr_${CDATE}_fhr0${FHR}_${memchar} -# $NLN $COMOUT_ANL_ENSFSOI/$memchar/${APREFIX}atminc${ASUFFIX} incr_${CDATE}_fhr0${FHR}_ni${memchar} -# fi -# else -# if [ $DO_CALC_INCREMENT = "YES" ]; then -# #$NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atma00${FHR}${ASUFFIX} sanl_${CDATE}_fhr0${FHR}_${memchar} -# $NLN $COMOUT_ANL_ENSFSOI/$memchar/${APREFIX}atma00${FHR}${ASUFFIX} sanl_${CDATE}_fhr0${FHR}_ni${memchar} -# else -# #$NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atmi00${FHR}${ASUFFIX} incr_${CDATE}_fhr0${FHR}_${memchar} -# $NLN $COMOUT_ANL_ENSFSOI/$memchar/${APREFIX}atmi00${FHR}${ASUFFIX} incr_${CDATE}_fhr0${FHR}_ni${memchar} -# fi -# fi -# done done -# Ensemble mean guess -#for FHR in $nfhrs; do -# $NLN $COMIN_GES_ENS/${GPREFIX}atmf00${FHR}.ensmean${GSUFFIX} sfg_${CDATE}_fhr0${FHR}_ensmean -# if [ $cnvw_option = ".true." ]; then -# $NLN $COMIN_GES_ENS/${GPREFIX}sfcf00${FHR}.ensmean${GSUFFIX} sfgsfc_${CDATE}_fhr0${FHR}_ensmean -# fi -#done - $NLN $COMIN_GES_ENS/${GPREFIX}atmf006.ensmean${GSUFFIX} sfg_${CDATE}_fhr06_ensmean $NLN $COMIN_GES_ENS/${GPREFIX}atmf006.ensmean${GSUFFIX} sfg_${CDATE}_fhr03_ensmean @@ -452,9 +370,6 @@ export ERR=$rc export err=$ERR $ERRSCRIPT || exit 2 -## save for EFSOI task (still needed?) -#$NCP $COMOUT_ANL_ENS/$GBIASe $COMOUT_ANL_ENSFSOI - # Cat runtime output files. cat stdout stderr > $COMOUT_ANL_ENSFSOI/$EFSOISTAT @@ -463,9 +378,7 @@ $NCP osense_${CDATE}.dat $OSENSE_SAVE_DIR/$OSENSEOUT ################################################################################ # Postprocessing -######## AFE remove after testing -cp -r $DATA /scratch1/NCEPDEV/stmp4/Andrew.Eichmann/efsoi -######## AFE + cd $pwd [[ $mkdata = "YES" ]] && rm -rf $DATA set +x From 55dee930f01d1f1c4a6ac882fe9657282f9e6ef6 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Tue, 11 May 2021 21:08:12 +0000 Subject: [PATCH 036/103] shifted changes from GSI forked EFSOI repo --- scripts/exgdas_efsoi_update.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/scripts/exgdas_efsoi_update.sh b/scripts/exgdas_efsoi_update.sh index 3ad322d3c83..73ece19b261 100755 --- a/scripts/exgdas_efsoi_update.sh +++ b/scripts/exgdas_efsoi_update.sh @@ -401,9 +401,7 @@ cat stdout stderr > $COMOUT_ANL_ENSFSOI/$ENKFSTAT ################################################################################ # Postprocessing -######## AFE remove after testing -#cp -r $DATA /scratch1/NCEPDEV/stmp4/Andrew.Eichmann/efsoi -######## AFE + cd $pwd [[ $mkdata = "YES" ]] && rm -rf $DATA set +x From a892d3db398fc465d11433d6fa4b0fec9630c3ca Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Mon, 17 May 2021 16:11:18 +0000 Subject: [PATCH 037/103] making localization advection work with CDATE ensres analysis --- jobs/JGDAS_EFSOI | 1 + scripts/exgdas_efsoi.sh | 27 +++++++++++++++++++-------- scripts/exgdas_efsoi_update.sh | 5 ++++- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/jobs/JGDAS_EFSOI b/jobs/JGDAS_EFSOI index dbd8ab86f8a..f10f51502cc 100755 --- a/jobs/JGDAS_EFSOI +++ b/jobs/JGDAS_EFSOI @@ -79,6 +79,7 @@ vPDY=$(echo $VDATE | cut -c1-8) vcyc=$(echo $VDATE | cut -c9-10) export APREFIX="${CDUMP}.t${cyc}z." +export VPREFIX="${CDUMP}.t${vcyc}z." export GPREFIX="gdas.t${gcyc}z." export ASUFFIX=${ASUFFIX:-$SUFFIX} export GSUFFIX=${GSUFFIX:-$SUFFIX} diff --git a/scripts/exgdas_efsoi.sh b/scripts/exgdas_efsoi.sh index f2763ff311c..7aacf6f9891 100755 --- a/scripts/exgdas_efsoi.sh +++ b/scripts/exgdas_efsoi.sh @@ -54,6 +54,8 @@ GPREFIX=${GPREFIX:-""} GSUFFIX=${GSUFFIX:-$SUFFIX} APREFIX=${APREFIX:-""} ASUFFIX=${ASUFFIX:-$SUFFIX} +VPREFIX=${VPREFIX:-""} +VSUFFIX=${VSUFFIX:-$SUFFIX} SMOOTH_ENKF=${SMOOTH_ENKF:-"YES"} @@ -65,11 +67,11 @@ RADSTAT=${RADSTAT:-${APREFIX}radstat} # AFE not needed? EFSOISTAT=${EFSOISTAT:-${APREFIX}efsoistat} #AFE for EFSOI -#VERFANL=${VERFANL:-${APREFIX}atmanl.nemsio} -VERFANL=${VERFANL:-${APREFIX}atmanl.ensres.nc} +VERFANL=${VERFANL:-${VPREFIX}atmanl.ensres.nc} +INITANL=${INITANL:-${APREFIX}atmanl.ensres.nc} FCSTLONG=${GPREFIX}atmf030.ensmean.nc FCSTSHORT=${APREFIX}atmf024.ensmean.nc -FCST6HRS=${PPREFIX}atmf006.ensmean.nc +#FCST6HRS=${PPREFIX}atmf006.ensmean.nc OSENSEIN=osense_${CDATE}_init.dat OSENSEOUT=osense_${CDATE}_final.dat @@ -186,12 +188,21 @@ done $NLN $COMIN_GES_ENS/${GPREFIX}atmf006.ensmean${GSUFFIX} sfg_${CDATE}_fhr06_ensmean $NLN $COMIN_GES_ENS/${GPREFIX}atmf006.ensmean${GSUFFIX} sfg_${CDATE}_fhr03_ensmean +# The following deals with different files with the same local name (assuming +# a 24hr EFSOI forecast): +# both are hybrid analyses from gdas - one from CDATE saved during the +# corresponding GDAS cycle in the efsoigdas tree to be used in +# the localization advection in EFSOI, the other from VDATE to be used +# for verification. + +# saved analysis to be used for localization advection +#$NLN ${COMIN_ANL}/${VERFANL} ${APREFIX}atmanl.ensmean.nc +$NLN $COMOUT_ANL_ENSFSOI/${INITANL} ${APREFIX}atmanl.ensmean.nc + # verifying analysis -$NLN ${COMIN_ANL}/${VERFANL} . -# the above way is the proper one, but this bit of subterfuge -# is necessary because ensmean is hard coded into GSI - needs -# to changed -$NLN ${COMIN_ANL}/${VERFANL} ${APREFIX}atmanl.ensmean.nc +#$NLN ${COMIN_ANL}/${VERFANL} . +$NLN $ATMGES_ENSMEAN . + # forecasts $NLN $COMIN_GES_ENS/$FCSTLONG . diff --git a/scripts/exgdas_efsoi_update.sh b/scripts/exgdas_efsoi_update.sh index 73ece19b261..cf39bde10e7 100755 --- a/scripts/exgdas_efsoi_update.sh +++ b/scripts/exgdas_efsoi_update.sh @@ -59,6 +59,7 @@ ASUFFIX=${ASUFFIX:-$SUFFIX} SMOOTH_ENKF=${SMOOTH_ENKF:-"YES"} GBIASe=${GBIASe:-${APREFIX}abias_int.ensmean} +ATMANL_GSI_ENSRES=$COMINatmos/${APREFIX}atmanl.ensres$ASUFFIX CNVSTAT=${CNVSTAT:-${APREFIX}cnvstat} OZNSTAT=${OZNSTAT:-${APREFIX}oznstat} RADSTAT=${RADSTAT:-${APREFIX}radstat} @@ -393,8 +394,10 @@ export ERR=$rc export err=$ERR $ERRSCRIPT || exit 2 -# save for EFSOI task (still needed?) +# save for EFSOI task $NCP $COMOUT_ANL_ENS/$GBIASe $COMOUT_ANL_ENSFSOI +# save for EFSOI localization advection +$NCP $ATMANL_GSI_ENSRES $COMOUT_ANL_ENSFSOI # Cat runtime output files. cat stdout stderr > $COMOUT_ANL_ENSFSOI/$ENKFSTAT From 9f2cac140f9f7a3153919ef1fa2a6422b184fc74 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Fri, 11 Jun 2021 15:21:04 +0000 Subject: [PATCH 038/103] tweaks to EFSOI --- parm/config/config.efsoi | 2 +- parm/config/config.eupdfsoi | 2 +- ush/rocoto/setup_workflow.py | 5 ++++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/parm/config/config.efsoi b/parm/config/config.efsoi index f9b238d9062..914498b0cc3 100755 --- a/parm/config/config.efsoi +++ b/parm/config/config.efsoi @@ -30,7 +30,7 @@ export lnsigcutoff=2.75 # ignored if modelspace_vloc=.true. export lobsdiag_forenkf=".true." # use jacobian. must be .true. if modelspace_vloc=".true." # need to specify .true. setting since config.anal sets to .false. -export EFSOIEXEC="/scratch1/NCEPDEV/da/Andrew.Eichmann/gsidev/afe-efsoi/GSI/build/bin/global_efsoi.x" +export EFSOIEXEC="/scratch1/NCEPDEV/da/Andrew.Eichmann/gsidev/afe-efsoi/GSI/exec/global_efsoi.x" export ANAVINFO="/scratch1/NCEPDEV/da/Andrew.Eichmann/para_gfs/nutria/global_anavinfo_efsoi.l127.txt" export NAM_ENKF="smoothparm=35," diff --git a/parm/config/config.eupdfsoi b/parm/config/config.eupdfsoi index fab4ae7535d..6042af311c7 100755 --- a/parm/config/config.eupdfsoi +++ b/parm/config/config.eupdfsoi @@ -32,6 +32,6 @@ export lobsdiag_forenkf=".true." # use jacobian. must be .true. if modelspace_v export NAM_ENKF="smoothparm=35," -export ENKFEXEC=/scratch1/NCEPDEV/da/Andrew.Eichmann/gsidev/afe-efsoi/GSI/build/bin/enkf_gfs.x +export ENKFEXEC=/scratch1/NCEPDEV/da/Andrew.Eichmann/gsidev/afe-efsoi/GSI/exec/enkf_gfs.x echo "END: config.eupdfsoi" diff --git a/ush/rocoto/setup_workflow.py b/ush/rocoto/setup_workflow.py index bdb649a2afd..149af69fabf 100755 --- a/ush/rocoto/setup_workflow.py +++ b/ush/rocoto/setup_workflow.py @@ -1054,7 +1054,10 @@ def get_hyb_tasks(dict_configs, cycledef='enkf'): else: dep_dict = {'type': 'task', 'name': '%sediag' % cdump} deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) + data = '&ROTDIR;/gdas.@Y@m@d/@H/atmos/gdas.t@Hz.atmanl.ensres.nc' + dep_dict = {'type': 'data', 'data': data } + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and',dep=deps) task = wfu.create_wf_task('eupdfsoi', cdump=cdump, envar=envars1, dependency=dependencies, cycledef=cycledef) dict_tasks['%seupdfsoi' % cdump] = task From 1f086761db1a4254e68982950701e2e48e179e4d Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Wed, 16 Jun 2021 13:52:12 +0000 Subject: [PATCH 039/103] completed merge by folding changes in exglobal forecast script into exglobal_efsoi_forecast.sh --- scripts/exglobal_efsoi_forecast.sh | 67 ++++++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 3 deletions(-) diff --git a/scripts/exglobal_efsoi_forecast.sh b/scripts/exglobal_efsoi_forecast.sh index 053732a88fc..a17ef281a85 100755 --- a/scripts/exglobal_efsoi_forecast.sh +++ b/scripts/exglobal_efsoi_forecast.sh @@ -67,6 +67,8 @@ NWPROD=${NWPROD:-${NWROOT:-$pwd}} HOMEgfs=${HOMEgfs:-$NWPROD} FIX_DIR=${FIX_DIR:-$HOMEgfs/fix} FIX_AM=${FIX_AM:-$FIX_DIR/fix_am} +export FIX_AER=${FIX_AER:-$FIX_DIR/fix_aer} +export FIX_LUT=${FIX_LUT:-$FIX_DIR/fix_lut} FIXfv3=${FIXfv3:-$FIX_DIR/fix_fv3_gmted2010} DATA=${DATA:-$pwd/fv3tmp$$} # temporary running directory ROTDIR=${ROTDIR:-$pwd} # rotating archive directory @@ -116,6 +118,7 @@ NTASKS_FV3=${NTASKS_FV3:-$npe_fv3} TYPE=${TYPE:-"nh"} # choices: nh, hydro MONO=${MONO:-"non-mono"} # choices: mono, non-mono +RUN_CCPP=${RUN_CCPP:-"NO"} QUILTING=${QUILTING:-".true."} OUTPUT_GRID=${OUTPUT_GRID:-"gaussian_grid"} @@ -201,8 +204,8 @@ if [ $MEMBER -lt 0 ]; then else # needs a previous ens forecast to do a warm start prefix=efsoi$CDUMP + #prefix=enkf$CDUMP rprefix=enkf$rCDUMP - #rprefix=efsoi$rCDUMP memchar=mem$(printf %03i $MEMBER) fi memdir=$ROTDIR/${prefix}.$PDY/$cyc/atmos/$memchar @@ -339,6 +342,13 @@ EOF IAU_INC_FILES="''" fi + rst_list_rerun="" + xfh=$restart_interval_gfs + while [ $xfh -le $FHMAX_GFS ]; do + rst_list_rerun="$rst_list_rerun $xfh" + xfh=$((xfh+restart_interval_gfs)) + done + restart_interval="$rst_list_rerun" fi #............................. @@ -396,6 +406,16 @@ $NLN $FIX_AM/${H2OFORC} $DATA/global_h2oprdlos.f77 $NLN $FIX_AM/global_solarconstant_noaa_an.txt $DATA/solarconstant_noaa_an.txt $NLN $FIX_AM/global_sfc_emissivity_idx.txt $DATA/sfc_emissivity_idx.txt +## merra2 aerosol climo +for n in 01 02 03 04 05 06 07 08 09 10 11 12; do +$NLN $FIX_AER/merra2.aerclim.2003-2014.m${n}.nc $DATA/aeroclim.m${n}.nc +done +$NLN $FIX_LUT/optics_BC.v1_3.dat $DATA/optics_BC.dat +$NLN $FIX_LUT/optics_OC.v1_3.dat $DATA/optics_OC.dat +$NLN $FIX_LUT/optics_DU.v15_3.dat $DATA/optics_DU.dat +$NLN $FIX_LUT/optics_SS.v3_3.dat $DATA/optics_SS.dat +$NLN $FIX_LUT/optics_SU.v1_3.dat $DATA/optics_SU.dat + $NLN $FIX_AM/global_co2historicaldata_glob.txt $DATA/co2historicaldata_glob.txt $NLN $FIX_AM/co2monthlycyc.txt $DATA/co2monthlycyc.txt if [ $ICO2 -gt 0 ]; then @@ -728,6 +748,16 @@ fi $NCP $DATA_TABLE data_table $NCP $FIELD_TABLE field_table +# copy CCN_ACTIVATE.BIN for Thompson microphysics +if [ $RUN_CCPP = "YES" ]; then +if [ "$CCPP_SUITE" = 'FV3_GSD_v0' -o "$CCPP_SUITE" = 'FV3_GSD_noah' ]; then + $NLN $FIX_AM/CCN_ACTIVATE.BIN CCN_ACTIVATE.BIN + $NLN $FIX_AM/freezeH2O.dat freezeH2O.dat + $NLN $FIX_AM/qr_acr_qg.dat qr_acr_qg.dat + $NLN $FIX_AM/qr_acr_qs.dat qr_acr_qs.dat +fi +fi + #------------------------------------------------------------------ rm -f nems.configure @@ -861,6 +891,11 @@ EOF # $coupler_nml #/ +atmos_model_nml="" +if [ $RUN_CCPP = "YES" ]; then + atmos_model_nml="ccpp_suite = $CCPP_SUITE" +fi + cat > input.nml <> input.nml << EOF + iovr = ${iovr:-"3"} + ltaerosol = ${ltaerosol:-".false."} + lradar = ${lradar:-".false."} + ttendlim = ${ttendlim:-"0.005"} + oz_phys = ${oz_phys:-".false."} + oz_phys_2015 = ${oz_phys_2015:-".true."} + lsoil_lsm = ${lsoil_lsm:-"4"} + do_mynnedmf = ${do_mynnedmf:-".false."} + do_mynnsfclay = ${do_mynnsfclay:-".false."} + icloud_bl = ${icloud_bl:-"1"} + bl_mynn_edmf = ${bl_mynn_edmf:-"1"} + bl_mynn_tkeadvect = ${bl_mynn_tkeadvect:-".true."} + bl_mynn_edmf_mom = ${bl_mynn_edmf_mom:-"1"} + min_lakeice = ${min_lakeice:-"0.15"} + min_seaice = ${min_seaice:-"0.15"} +EOF +else + cat >> input.nml << EOF + iovr_lw = ${iovr_lw:-"3"} + iovr_sw = ${iovr_sw:-"3"} +EOF +fi + # Add namelist for IAU if [ $DOIAU = "YES" ]; then cat >> input.nml << EOF @@ -1308,6 +1366,9 @@ else done fi +# Copy namelist file +$NCP input.nml $memdir + #------------------------------------------------------------------ # run the executable From 49078983299b1546e5acb43be9518ca081f4a7e2 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Wed, 23 Jun 2021 13:35:04 +0000 Subject: [PATCH 040/103] removing efsoi-specific fcst scripts, LETKF semi-fix --- jobs/JGDAS_EFSOI_FCST | 5 +- scripts/exgdas_efsoi_fcst.sh | 243 ----- scripts/exgdas_efsoi_update.sh | 1 + scripts/exglobal_efsoi_forecast.sh | 1424 ---------------------------- scripts/exglobal_forecast.sh | 7 +- 5 files changed, 11 insertions(+), 1669 deletions(-) delete mode 100755 scripts/exgdas_efsoi_fcst.sh delete mode 100755 scripts/exglobal_efsoi_forecast.sh diff --git a/jobs/JGDAS_EFSOI_FCST b/jobs/JGDAS_EFSOI_FCST index 73f11f479dd..6c1e08eeb36 100755 --- a/jobs/JGDAS_EFSOI_FCST +++ b/jobs/JGDAS_EFSOI_FCST @@ -62,6 +62,8 @@ if [ $RUN_ENVIR = "nco" ]; then export ROTDIR=${COMROOT:?}/$NET/$envir fi +# tells the forecast script to use efsoi ensemble +export EFSOI_TASK="YES" ############################################## # Begin JOB SPECIFIC work @@ -81,7 +83,8 @@ export FHMIN=$FHMIN_ENKF export FHOUT=$FHOUT_ENKF export FHMAX=$FHMAX_ENKF -export FORECASTSH=$HOMEgfs/scripts/exglobal_efsoi_forecast.sh +export FORECASTSH=$HOMEgfs/scripts/exglobal_forecast.sh + # Get ENSBEG/ENSEND from ENSGRP and NMEM_EFCSGRP export ENSEND=$((NMEM_EFCSGRP * ENSGRP)) diff --git a/scripts/exgdas_efsoi_fcst.sh b/scripts/exgdas_efsoi_fcst.sh deleted file mode 100755 index 13f75cd625b..00000000000 --- a/scripts/exgdas_efsoi_fcst.sh +++ /dev/null @@ -1,243 +0,0 @@ -#!/bin/ksh -################################################################################ -#### UNIX Script Documentation Block -# . . -# Script name: exgdas_efsoi_fcst.sh -# Script description: Run ensemble forecasts -# -# Author: Rahul Mahajan Org: NCEP/EMC Date: 2017-03-02 -# Author: Andrew Eichmann Org: NCEP/EMC Date: 2021-02-25 -# -# Abstract: This script runs ensemble forecasts serially one-after-another -# for EFSOI. Based on exgdas_enkf_fcst.sh -# -# $Id$ -# -# Attributes: -# Language: POSIX shell -# Machine: WCOSS-Cray/Theia -# -#### -################################################################################ - -# Set environment. -export VERBOSE=${VERBOSE:-"YES"} -if [ $VERBOSE = "YES" ] ; then - echo $(date) EXECUTING $0 $* >&2 - set -x -fi - -# Directories. -pwd=$(pwd) -export FIX_DIR=${FIX_DIR:-$HOMEgfs/fix} -export FIX_AM=${FIX_AM:-$FIX_DIR/fix_am} - -# Utilities -export NCP=${NCP:-"/bin/cp -p"} -export NMV=${NMV:-"/bin/mv"} -export NLN=${NLN:-"/bin/ln -sf"} -export ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} -export NDATE=${NDATE:-/$NWPROD/util/exec/ndate} - -# Scripts. -FORECASTSH=${FORECASTSH:-$HOMEgfs/scripts/exglobal_forecast.sh} - -# Enemble group, begin and end -ENSGRP=${ENSGRP:-1} -ENSBEG=${ENSBEG:-1} -ENSEND=${ENSEND:-1} - -# Model builds -export FCSTEXECDIR=${FCSTEXECDIR:-$HOMEgfs/sorc/fv3gfs.fd/BUILD/bin} -export FCSTEXEC=${FCSTEXEC:-fv3gfs.x} - -# Get DA specific diag table. -export PARM_FV3DIAG=${PARM_FV3DIAG:-$HOMEgfs/parm/parm_fv3diag} -export DIAG_TABLE=${DIAG_TABLE_ENKF:-${DIAG_TABLE:-$PARM_FV3DIAG/diag_table_da}} - -# Cycling and forecast hour specific parameters -export CDATE=${CDATE:-"2001010100"} -export CDUMP=${CDUMP:-"gdas"} - -# Re-run failed members, or entire group -RERUN_EFCSGRP=${RERUN_EFCSGRP:-"YES"} - -# Recenter flag and increment file prefix -RECENTER_ENKF=${RECENTER_ENKF:-"YES"} -export PREFIX_ATMINC=${PREFIX_ATMINC:-""} - -# Ops related stuff -SENDECF=${SENDECF:-"NO"} -SENDDBN=${SENDDBN:-"NO"} -GSUFFIX=${GSUFFIX:-$SUFFIX} - -################################################################################ -# Preprocessing -mkdata=NO -if [ ! -d $DATA ]; then - mkdata=YES - mkdir -p $DATA -fi -cd $DATA || exit 99 -DATATOP=$DATA - -################################################################################ -# Set output data -cymd=$(echo $CDATE | cut -c1-8) -chh=$(echo $CDATE | cut -c9-10) -EFCSGRP=$COMOUT/efcs.grp${ENSGRP} -if [ -f $EFCSGRP ]; then - if [ $RERUN_EFCSGRP = "YES" ]; then - rm -f $EFCSGRP - else - echo "RERUN_EFCSGRP = $RERUN_EFCSGRP, will re-run FAILED members only!" - $NMV $EFCSGRP ${EFCSGRP}.fail - fi -fi - -################################################################################ -# Set namelist/model config options common to all members once - -# There are many many model namelist options -# Some are resolution (CASE) dependent, some depend on the model configuration -# and will need to be added here before $FORECASTSH is called -# For now assume that -# 1. the ensemble and the deterministic are same resolution -# 2. the ensemble runs with the same configuration as the deterministic - -# Model config option for Ensemble -export TYPE=${TYPE_ENKF:-${TYPE:-nh}} # choices: nh, hydro -export MONO=${MONO_ENKF:-${MONO:-non-mono}} # choices: mono, non-mono - -# fv_core_nml -export CASE=${CASE_ENKF:-${CASE:-C768}} -export layout_x=${layout_x_ENKF:-${layout_x:-8}} -export layout_y=${layout_y_ENKF:-${layout_y:-16}} -export LEVS=${LEVS_ENKF:-${LEVS:-64}} - -# nggps_diag_nml -export FHOUT=${FHOUT_ENKF:-3} - -# model_configure -export DELTIM=${DELTIM_ENKF:-${DELTIM:-225}} -export FHMAX=${FHMAX_ENKF:-9} -export restart_interval=${restart_interval_ENKF:-${restart_interval:-6}} - -# gfs_physics_nml -export FHSWR=${FHSWR_ENKF:-${FHSWR:-3600.}} -export FHLWR=${FHLWR_ENKF:-${FHLWR:-3600.}} -export IEMS=${IEMS_ENKF:-${IEMS:-1}} -export ISOL=${ISOL_ENKF:-${ISOL:-2}} -export IAER=${IAER_ENKF:-${IAER:-111}} -export ICO2=${ICO2_ENKF:-${ICO2:-2}} -export cdmbgwd=${cdmbgwd_ENKF:-${cdmbgwd:-"3.5,0.25"}} -export dspheat=${dspheat_ENKF:-${dspheat:-".true."}} -export shal_cnv=${shal_cnv_ENKF:-${shal_cnv:-".true."}} -export FHZER=${FHZER_ENKF:-${FHZER:-6}} -export FHCYC=${FHCYC_ENKF:-${FHCYC:-6}} - -# Set PREFIX_ATMINC to r when recentering on -if [ $RECENTER_ENKF = "YES" ]; then - export PREFIX_ATMINC="r" -fi - -# APRUN for different executables -export APRUN_FV3=${APRUN_FV3:-${APRUN:-""}} -export NTHREADS_FV3=${NTHREADS_FV3:-${NTHREADS:-1}} - -################################################################################ -# Run forecast for ensemble member -rc=0 -for imem in $(seq $ENSBEG $ENSEND); do - - cd $DATATOP - - cmem=$(printf %03i $imem) - memchar="mem$cmem" - - echo "Processing MEMBER: $cmem" - - ra=0 - - skip_mem="NO" - if [ -f ${EFCSGRP}.fail ]; then - memstat=$(cat ${EFCSGRP}.fail | grep "MEMBER $cmem" | grep "PASS" | wc -l) - [[ $memstat -eq 1 ]] && skip_mem="YES" - fi - - if [ $skip_mem = "NO" ]; then - - ra=0 - - export MEMBER=$imem - export DATA=$DATATOP/$memchar - if [ -d $DATA ]; then rm -rf $DATA; fi - $FORECASTSH - ra=$? - - # Notify a member forecast failed and abort - if [ $ra -ne 0 ]; then - msg="FATAL ERROR: forecast of member $cmem FAILED. Aborting job" - print $msg - export err=$ra - $ERRSCRIPT || exit 2 - fi - - ((rc+=ra)) - - fi - - if [ $SENDDBN = YES ]; then - fhr=$FHOUT - while [ $fhr -le $FHMAX ]; do - FH3=$(printf %03i $fhr) - if [ $(expr $fhr % 3) -eq 0 ]; then - $DBNROOT/bin/dbn_alert MODEL GFS_ENKF $job $COMOUT/$memchar/${CDUMP}.t${cyc}z.sfcf${FH3}${GSUFFIX} - fi - fhr=$((fhr+FHOUT)) - done - fi - - cd $DATATOP - - if [ -s $EFCSGRP ]; then - $NCP $EFCSGRP log_old - fi - [[ -f log ]] && rm log - [[ -f log_new ]] && rm log_new - if [ $ra -ne 0 ]; then - echo "MEMBER $cmem : FAIL" > log - else - echo "MEMBER $cmem : PASS" > log - fi - if [ -s log_old ] ; then - cat log_old log > log_new - else - cat log > log_new - fi - $NCP log_new $EFCSGRP - -done - -################################################################################ -# Echo status of ensemble group -cd $DATATOP -echo "Status of ensemble members in group $ENSGRP:" -cat $EFCSGRP -[[ -f ${EFCSGRP}.fail ]] && rm ${EFCSGRP}.fail - -################################################################################ -# If any members failed, error out -export ERR=$rc -export err=$ERR -$ERRSCRIPT || exit 2 - -################################################################################ -# Postprocessing -cd $pwd -[[ $mkdata = "YES" ]] && rm -rf $DATATOP -set +x -if [ $VERBOSE = "YES" ] ; then - echo $(date) EXITING $0 with return code $err >&2 -fi -exit $err diff --git a/scripts/exgdas_efsoi_update.sh b/scripts/exgdas_efsoi_update.sh index cf39bde10e7..94c61c64588 100755 --- a/scripts/exgdas_efsoi_update.sh +++ b/scripts/exgdas_efsoi_update.sh @@ -288,6 +288,7 @@ cat > enkf.nml << EOFnml netcdf_diag=$netcdf_diag,cnvw_option=$cnvw_option, paranc=$paranc,write_fv3_incr=$write_fv3_incr, efsoi_cycling=.true., + lupd_obspace_serial=.true., $WRITE_INCR_ZERO $NAM_ENKF / diff --git a/scripts/exglobal_efsoi_forecast.sh b/scripts/exglobal_efsoi_forecast.sh deleted file mode 100755 index a17ef281a85..00000000000 --- a/scripts/exglobal_efsoi_forecast.sh +++ /dev/null @@ -1,1424 +0,0 @@ -#!/bin/ksh -################################################################################ -# UNIX Script Documentation Block -# Script name: exglobal_forecast.sh -# Script description: Runs a global FV3GFS model forecast -# -# Author: Fanglin Yang Org: NCEP/EMC Date: 2016-11-15 -# Abstract: This script runs a single GFS forecast with FV3 dynamical core. -# This script is created based on a C-shell script that GFDL wrote -# for the NGGPS Phase-II Dycore Comparison Project. -# -# Script history log: -# 2016-11-15 Fanglin Yang First Version. -# 2017-02-09 Rahul Mahajan Added warm start and restructured the code. -# 2017-03-10 Fanglin Yang Updated for running forecast on Cray. -# 2017-03-24 Fanglin Yang Updated to use NEMS FV3GFS with IPD4 -# 2017-05-24 Rahul Mahajan Updated for cycling with NEMS FV3GFS -# 2017-09-13 Fanglin Yang Updated for using GFDL MP and Write Component -# 2019-03-05 Rahul Mahajan Implemented IAU -# 2019-03-21 Fanglin Yang Add restart capability for running gfs fcst from a break point. -# 2019-12-12 Henrique Alves Added wave model blocks for coupled run -# 2020-01-31 Henrique Alves Added IAU capability for wave component -# 2020-06-02 Fanglin Yang restore restart capability when IAU is turned on. -# -# $Id$ -# -# Attributes: -# Language: Portable Operating System Interface (POSIX) Shell -# Machine: WCOSS-CRAY, Theia -################################################################################ - -# Set environment. -VERBOSE=${VERBOSE:-"YES"} -if [ $VERBOSE = "YES" ] ; then - echo $(date) EXECUTING $0 $* >&2 - set -x -fi - -machine=${machine:-"WCOSS_C"} -machine=$(echo $machine | tr '[a-z]' '[A-Z]') - -# Cycling and forecast hour specific parameters -CDUMPwave="${CDUMP}wave" -CASE=${CASE:-C768} -CDATE=${CDATE:-2017032500} -CDUMP=${CDUMP:-gdas} -FHMIN=${FHMIN:-0} -FHMAX=${FHMAX:-9} -FHOUT=${FHOUT:-3} -FHZER=${FHZER:-6} -FHCYC=${FHCYC:-24} -FHMAX_HF=${FHMAX_HF:-0} -FHOUT_HF=${FHOUT_HF:-1} -NSOUT=${NSOUT:-"-1"} -FDIAG=$FHOUT -if [ $FHMAX_HF -gt 0 -a $FHOUT_HF -gt 0 ]; then FDIAG=$FHOUT_HF; fi -WRITE_DOPOST=${WRITE_DOPOST:-".false."} -restart_interval=${restart_interval:-0} -rst_invt1=`echo $restart_interval |cut -d " " -f 1` - -PDY=$(echo $CDATE | cut -c1-8) -cyc=$(echo $CDATE | cut -c9-10) - -# Directories. -pwd=$(pwd) -NWPROD=${NWPROD:-${NWROOT:-$pwd}} -HOMEgfs=${HOMEgfs:-$NWPROD} -FIX_DIR=${FIX_DIR:-$HOMEgfs/fix} -FIX_AM=${FIX_AM:-$FIX_DIR/fix_am} -export FIX_AER=${FIX_AER:-$FIX_DIR/fix_aer} -export FIX_LUT=${FIX_LUT:-$FIX_DIR/fix_lut} -FIXfv3=${FIXfv3:-$FIX_DIR/fix_fv3_gmted2010} -DATA=${DATA:-$pwd/fv3tmp$$} # temporary running directory -ROTDIR=${ROTDIR:-$pwd} # rotating archive directory -ICSDIR=${ICSDIR:-$pwd} # cold start initial conditions -DMPDIR=${DMPDIR:-$pwd} # global dumps for seaice, snow and sst analysis - -# Model resolution specific parameters -DELTIM=${DELTIM:-225} -layout_x=${layout_x:-8} -layout_y=${layout_y:-16} -LEVS=${LEVS:-65} - -# Utilities -NCP=${NCP:-"/bin/cp -p"} -NLN=${NLN:-"/bin/ln -sf"} -NMV=${NMV:-"/bin/mv"} -SEND=${SEND:-"YES"} #move final result to rotating directory -ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} -KEEPDATA=${KEEPDATA:-"NO"} - -# Other options -MEMBER=${MEMBER:-"-1"} # -1: control, 0: ensemble mean, >0: ensemble member $MEMBER -ENS_NUM=${ENS_NUM:-1} # Single executable runs multiple members (e.g. GEFS) -PREFIX_ATMINC=${PREFIX_ATMINC:-""} # allow ensemble to use recentered increment - -# IAU options -DOIAU=${DOIAU:-"NO"} -IAUFHRS=${IAUFHRS:-0} -IAU_DELTHRS=${IAU_DELTHRS:-0} -IAU_OFFSET=${IAU_OFFSET:-0} - -# Model specific stuff -FCSTEXECDIR=${FCSTEXECDIR:-$HOMEgfs/sorc/fv3gfs.fd/NEMS/exe} -FCSTEXEC=${FCSTEXEC:-fv3_gfs.x} -PARM_FV3DIAG=${PARM_FV3DIAG:-$HOMEgfs/parm/parm_fv3diag} -PARM_POST=${PARM_POST:-$HOMEgfs/parm/post} - -# Wave coupling parameter defaults to false -cplwav=${cplwav:-.false.} - -# Model config options -APRUN_FV3=${APRUN_FV3:-${APRUN_FCST:-${APRUN:-""}}} -NTHREADS_FV3=${NTHREADS_FV3:-${NTHREADS_FCST:-${nth_fv3:-1}}} -cores_per_node=${cores_per_node:-${npe_node_max:-24}} -ntiles=${ntiles:-6} -NTASKS_FV3=${NTASKS_FV3:-$npe_fv3} - -TYPE=${TYPE:-"nh"} # choices: nh, hydro -MONO=${MONO:-"non-mono"} # choices: mono, non-mono -RUN_CCPP=${RUN_CCPP:-"NO"} - -QUILTING=${QUILTING:-".true."} -OUTPUT_GRID=${OUTPUT_GRID:-"gaussian_grid"} -OUTPUT_FILE=${OUTPUT_FILE:-"nemsio"} -WRITE_NEMSIOFLIP=${WRITE_NEMSIOFLIP:-".true."} -WRITE_FSYNCFLAG=${WRITE_FSYNCFLAG:-".true."} -affix="nemsio" -[[ "$OUTPUT_FILE" = "netcdf" ]] && affix="nc" - -rCDUMP=${rCDUMP:-$CDUMP} - -#------------------------------------------------------------------ -# setup the runtime environment -if [ $machine = "WCOSS_C" ] ; then - HUGEPAGES=${HUGEPAGES:-hugepages4M} - . $MODULESHOME/init/sh 2>/dev/null - module load iobuf craype-$HUGEPAGES 2>/dev/null - export MPICH_GNI_COLL_OPT_OFF=${MPICH_GNI_COLL_OPT_OFF:-MPI_Alltoallv} - export MKL_CBWR=AVX2 - export WRTIOBUF=${WRTIOBUF:-"4M"} - export NC_BLKSZ=${NC_BLKSZ:-"4M"} - export IOBUF_PARAMS="*nemsio:verbose:size=${WRTIOBUF},*:verbose:size=${NC_BLKSZ}" -fi - -#------------------------------------------------------- -if [ ! -d $ROTDIR ]; then mkdir -p $ROTDIR; fi -mkdata=NO -if [ ! -d $DATA ]; then - mkdata=YES - mkdir -p $DATA -fi -cd $DATA || exit 8 -mkdir -p $DATA/INPUT - -if [ $cplwav = ".true." ]; then - if [ $CDUMP = "gdas" ]; then - RSTDIR_WAVE=$ROTDIR/${CDUMP}.${PDY}/${cyc}/wave/restart - else - RSTDIR_WAVE=${RSTDIR_WAVE:-$ROTDIR/${CDUMP}.${PDY}/${cyc}/wave/restart} - fi - if [ ! -d $RSTDIR_WAVE ]; then mkdir -p $RSTDIR_WAVE ; fi - $NLN $RSTDIR_WAVE restart_wave -fi - -if [ $CDUMP = "gfs" -a $rst_invt1 -gt 0 ]; then - RSTDIR_ATM=${RSTDIR:-$ROTDIR}/${CDUMP}.${PDY}/${cyc}/atmos/RERUN_RESTART - if [ ! -d $RSTDIR_ATM ]; then mkdir -p $RSTDIR_ATM ; fi - $NLN $RSTDIR_ATM RESTART -else - mkdir -p $DATA/RESTART -fi - -#------------------------------------------------------- -# determine if restart IC exists to continue from a previous forecast -RERUN="NO" -filecount=$(find $RSTDIR_ATM -type f | wc -l) -if [ $CDUMP = "gfs" -a $rst_invt1 -gt 0 -a $FHMAX -gt $rst_invt1 -a $filecount -gt 10 ]; then - reverse=$(echo "${restart_interval[@]} " | tac -s ' ') - for xfh in $reverse ; do - yfh=$((xfh-(IAU_OFFSET/2))) - SDATE=$($NDATE +$yfh $CDATE) - PDYS=$(echo $SDATE | cut -c1-8) - cycs=$(echo $SDATE | cut -c9-10) - flag1=$RSTDIR_ATM/${PDYS}.${cycs}0000.coupler.res - flag2=$RSTDIR_ATM/coupler.res - if [ -s $flag1 ]; then - CDATE_RST=$SDATE - [[ $RERUN = "YES" ]] && break - mv $flag1 ${flag1}.old - if [ -s $flag2 ]; then mv $flag2 ${flag2}.old ;fi - RERUN="YES" - [[ $xfh = $rst_invt1 ]] && RERUN="NO" - fi - done -fi - -#------------------------------------------------------- -# member directory -if [ $MEMBER -lt 0 ]; then - prefix=$CDUMP - rprefix=$rCDUMP - memchar="" -else - # needs a previous ens forecast to do a warm start - prefix=efsoi$CDUMP - #prefix=enkf$CDUMP - rprefix=enkf$rCDUMP - memchar=mem$(printf %03i $MEMBER) -fi -memdir=$ROTDIR/${prefix}.$PDY/$cyc/atmos/$memchar -if [ ! -d $memdir ]; then mkdir -p $memdir; fi - -GDATE=$($NDATE -$assim_freq $CDATE) -gPDY=$(echo $GDATE | cut -c1-8) -gcyc=$(echo $GDATE | cut -c9-10) -gmemdir=$ROTDIR/${rprefix}.$gPDY/$gcyc/atmos/$memchar -sCDATE=$($NDATE -3 $CDATE) - -if [[ "$DOIAU" = "YES" ]]; then - sCDATE=$($NDATE -3 $CDATE) - sPDY=$(echo $sCDATE | cut -c1-8) - scyc=$(echo $sCDATE | cut -c9-10) - tPDY=$gPDY - tcyc=$gcyc -else - sCDATE=$CDATE - sPDY=$PDY - scyc=$cyc - tPDY=$sPDY - tcyc=$cyc -fi - -#------------------------------------------------------- -# initial conditions -warm_start=${warm_start:-".false."} -read_increment=${read_increment:-".false."} -res_latlon_dynamics="''" - -# Determine if this is a warm start or cold start -if [ -f $gmemdir/RESTART/${sPDY}.${scyc}0000.coupler.res ]; then - export warm_start=".true." -fi - -# turn IAU off for cold start -DOIAU_coldstart=${DOIAU_coldstart:-"NO"} -if [ $DOIAU = "YES" -a $warm_start = ".false." ] || [ $DOIAU_coldstart = "YES" -a $warm_start = ".true." ]; then - export DOIAU="NO" - echo "turning off IAU" - DOIAU_coldstart="YES" - IAU_OFFSET=0 - sCDATE=$CDATE - sPDY=$PDY - scyc=$cyc - tPDY=$sPDY - tcyc=$cyc -fi - -#------------------------------------------------------- -if [ $warm_start = ".true." -o $RERUN = "YES" ]; then -#------------------------------------------------------- -#............................. - if [ $RERUN = "NO" ]; then -#............................. - - # Link all (except sfc_data) restart files from $gmemdir - for file in $(ls $gmemdir/RESTART/${sPDY}.${scyc}0000.*.nc); do - file2=$(echo $(basename $file)) - file2=$(echo $file2 | cut -d. -f3-) # remove the date from file - fsuf=$(echo $file2 | cut -d. -f1) - if [ $fsuf != "sfc_data" ]; then - $NLN $file $DATA/INPUT/$file2 - fi - done - - # Link sfcanl_data restart files from $memdir - for file in $(ls $memdir/RESTART/${sPDY}.${scyc}0000.*.nc); do - file2=$(echo $(basename $file)) - file2=$(echo $file2 | cut -d. -f3-) # remove the date from file - fsufanl=$(echo $file2 | cut -d. -f1) - if [ $fsufanl = "sfcanl_data" ]; then - file2=$(echo $file2 | sed -e "s/sfcanl_data/sfc_data/g") - $NLN $file $DATA/INPUT/$file2 - fi - done - - # Need a coupler.res when doing IAU - if [ $DOIAU = "YES" ]; then - rm -f $DATA/INPUT/coupler.res - cat >> $DATA/INPUT/coupler.res << EOF - 2 (Calendar: no_calendar=0, thirty_day_months=1, julian=2, gregorian=3, noleap=4) - ${gPDY:0:4} ${gPDY:4:2} ${gPDY:6:2} ${gcyc} 0 0 Model start time: year, month, day, hour, minute, second - ${sPDY:0:4} ${sPDY:4:2} ${sPDY:6:2} ${scyc} 0 0 Current model time: year, month, day, hour, minute, second -EOF - fi - - # Link increments - if [ $DOIAU = "YES" ]; then - for i in $(echo $IAUFHRS | sed "s/,/ /g" | rev); do - incfhr=$(printf %03i $i) - if [ $incfhr = "006" ]; then - increment_file=$memdir/${CDUMP}.t${cyc}z.${PREFIX_ATMINC}atminc.nc - else - increment_file=$memdir/${CDUMP}.t${cyc}z.${PREFIX_ATMINC}atmi${incfhr}.nc - fi - if [ ! -f $increment_file ]; then - echo "ERROR: DOIAU = $DOIAU, but missing increment file for fhr $incfhr at $increment_file" - echo "Abort!" - exit 1 - fi - $NLN $increment_file $DATA/INPUT/fv_increment$i.nc - IAU_INC_FILES="'fv_increment$i.nc',$IAU_INC_FILES" - done - read_increment=".false." - res_latlon_dynamics="" - else - increment_file=$memdir/${CDUMP}.t${cyc}z.${PREFIX_INC}atminc.nc - if [ -f $increment_file ]; then - $NLN $increment_file $DATA/INPUT/fv_increment.nc - read_increment=".true." - res_latlon_dynamics="fv_increment.nc" - fi - fi - -#............................. - else ##RERUN - - export warm_start=".true." - PDYT=$(echo $CDATE_RST | cut -c1-8) - cyct=$(echo $CDATE_RST | cut -c9-10) - for file in $(ls $RSTDIR_ATM/${PDYT}.${cyct}0000.*); do - file2=$(echo $(basename $file)) - file2=$(echo $file2 | cut -d. -f3-) - $NLN $file $DATA/INPUT/$file2 - done - - hour_rst=`$NHOUR $CDATE_RST $CDATE` - IAU_FHROT=$((IAU_OFFSET+hour_rst)) - if [ $DOIAU = "YES" ]; then - IAUFHRS=-1 - IAU_DELTHRS=0 - IAU_INC_FILES="''" - fi - - rst_list_rerun="" - xfh=$restart_interval_gfs - while [ $xfh -le $FHMAX_GFS ]; do - rst_list_rerun="$rst_list_rerun $xfh" - xfh=$((xfh+restart_interval_gfs)) - done - restart_interval="$rst_list_rerun" - - fi -#............................. - -else ## cold start - - for file in $(ls $memdir/INPUT/*.nc); do - file2=$(echo $(basename $file)) - fsuf=$(echo $file2 | cut -c1-3) - if [ $fsuf = "gfs" -o $fsuf = "sfc" ]; then - $NLN $file $DATA/INPUT/$file2 - fi - done - -#------------------------------------------------------- -fi -#------------------------------------------------------- - -nfiles=$(ls -1 $DATA/INPUT/* | wc -l) -if [ $nfiles -le 0 ]; then - echo "Initial conditions must exist in $DATA/INPUT, ABORT!" - msg="Initial conditions must exist in $DATA/INPUT, ABORT!" - postmsg "$jlogfile" "$msg" - exit 1 -fi - -# If doing IAU, change forecast hours -if [[ "$DOIAU" = "YES" ]]; then - FHMAX=$((FHMAX+6)) - if [ $FHMAX_HF -gt 0 ]; then - FHMAX_HF=$((FHMAX_HF+6)) - fi -fi - -#-------------------------------------------------------------------------- -# Grid and orography data -for n in $(seq 1 $ntiles); do - $NLN $FIXfv3/$CASE/${CASE}_grid.tile${n}.nc $DATA/INPUT/${CASE}_grid.tile${n}.nc - $NLN $FIXfv3/$CASE/${CASE}_oro_data.tile${n}.nc $DATA/INPUT/oro_data.tile${n}.nc -done -$NLN $FIXfv3/$CASE/${CASE}_mosaic.nc $DATA/INPUT/grid_spec.nc - -# GFS standard input data -IAER=${IAER:-111} -ICO2=${ICO2:-2} - -if [ ${new_o3forc:-YES} = YES ]; then - O3FORC=ozprdlos_2015_new_sbuvO3_tclm15_nuchem.f77 -else - O3FORC=global_o3prdlos.f77 -fi -H2OFORC=${H2OFORC:-"global_h2o_pltc.f77"} -$NLN $FIX_AM/${O3FORC} $DATA/global_o3prdlos.f77 -$NLN $FIX_AM/${H2OFORC} $DATA/global_h2oprdlos.f77 -$NLN $FIX_AM/global_solarconstant_noaa_an.txt $DATA/solarconstant_noaa_an.txt -$NLN $FIX_AM/global_sfc_emissivity_idx.txt $DATA/sfc_emissivity_idx.txt - -## merra2 aerosol climo -for n in 01 02 03 04 05 06 07 08 09 10 11 12; do -$NLN $FIX_AER/merra2.aerclim.2003-2014.m${n}.nc $DATA/aeroclim.m${n}.nc -done -$NLN $FIX_LUT/optics_BC.v1_3.dat $DATA/optics_BC.dat -$NLN $FIX_LUT/optics_OC.v1_3.dat $DATA/optics_OC.dat -$NLN $FIX_LUT/optics_DU.v15_3.dat $DATA/optics_DU.dat -$NLN $FIX_LUT/optics_SS.v3_3.dat $DATA/optics_SS.dat -$NLN $FIX_LUT/optics_SU.v1_3.dat $DATA/optics_SU.dat - -$NLN $FIX_AM/global_co2historicaldata_glob.txt $DATA/co2historicaldata_glob.txt -$NLN $FIX_AM/co2monthlycyc.txt $DATA/co2monthlycyc.txt -if [ $ICO2 -gt 0 ]; then - for file in $(ls $FIX_AM/fix_co2_proj/global_co2historicaldata*) ; do - $NLN $file $DATA/$(echo $(basename $file) | sed -e "s/global_//g") - done -fi - -$NLN $FIX_AM/global_climaeropac_global.txt $DATA/aerosol.dat -if [ $IAER -gt 0 ] ; then - for file in $(ls $FIX_AM/global_volcanic_aerosols*) ; do - $NLN $file $DATA/$(echo $(basename $file) | sed -e "s/global_//g") - done -fi - -#-------------wavewave---------------------- -if [ $cplwav = ".true." ]; then - - for file in $(ls $COMINwave/rundata/rmp_src_to_dst_conserv_*) ; do - $NLN $file $DATA/ - done - $NLN $COMINwave/rundata/ww3_multi.${CDUMPwave}${WAV_MEMBER}.${cycle}.inp $DATA/ww3_multi.inp - - array=($WAVECUR_FID $WAVEICE_FID $WAVEWND_FID $waveuoutpGRD $waveGRD $waveesmfGRD $wavesbsGRD $wavepostGRD $waveinterpGRD) - grdALL=`printf "%s\n" "${array[@]}" | sort -u | tr '\n' ' '` - - for wavGRD in ${grdALL}; do - $NLN $COMINwave/rundata/${CDUMPwave}.mod_def.$wavGRD $DATA/mod_def.$wavGRD - done - - export WAVHCYC=${WAVHCYC:-6} - export WRDATE=`$NDATE -${WAVHCYC} $CDATE` - export WRPDY=`echo $WRDATE | cut -c1-8` - export WRcyc=`echo $WRDATE | cut -c9-10` - export WRDIR=${ROTDIR}/${CDUMPRSTwave}.${WRPDY}/${WRcyc}/wave/restart - export datwave=$COMOUTwave/rundata - export wavprfx=${CDUMPwave}${WAV_MEMBER} - - for wavGRD in $waveGRD ; do - if [ $RERUN = "NO" ]; then - if [ ! -f ${WRDIR}/${sPDY}.${scyc}0000.restart.${wavGRD} ]; then - echo "WARNING: NON-FATAL ERROR wave IC is missing, will start from rest" - fi - $NLN ${WRDIR}/${sPDY}.${scyc}0000.restart.${wavGRD} $DATA/restart.${wavGRD} - else - if [ ! -f ${RSTDIR_WAVE}/${PDYT}.${cyct}0000.restart.${wavGRD} ]; then - echo "WARNING: NON-FATAL ERROR wave IC is missing, will start from rest" - fi - $NLN ${RSTDIR_WAVE}/${PDYT}.${cyct}0000.restart.${wavGRD} $DATA/restart.${wavGRD} - fi - eval $NLN $datwave/${wavprfx}.log.${wavGRD}.${PDY}${cyc} log.${wavGRD} - done - - if [ "$WW3ICEINP" = "YES" ]; then - wavicefile=$COMINwave/rundata/${CDUMPwave}.${WAVEICE_FID}.${cycle}.ice - if [ ! -f $wavicefile ]; then - echo "ERROR: WW3ICEINP = ${WW3ICEINP}, but missing ice file" - echo "Abort!" - exit 1 - fi - $NLN ${wavicefile} $DATA/ice.${WAVEICE_FID} - fi - - if [ "$WW3CURINP" = "YES" ]; then - wavcurfile=$COMINwave/rundata/${CDUMPwave}.${WAVECUR_FID}.${cycle}.cur - if [ ! -f $wavcurfile ]; then - echo "ERROR: WW3CURINP = ${WW3CURINP}, but missing current file" - echo "Abort!" - exit 1 - fi - $NLN $wavcurfile $DATA/current.${WAVECUR_FID} - fi - - # Link output files - cd $DATA - eval $NLN $datwave/${wavprfx}.log.mww3.${PDY}${cyc} log.mww3 - - # Loop for gridded output (uses FHINC) - fhr=$FHMIN_WAV - while [ $fhr -le $FHMAX_WAV ]; do - YMDH=`$NDATE $fhr $CDATE` - YMD=$(echo $YMDH | cut -c1-8) - HMS="$(echo $YMDH | cut -c9-10)0000" - for wavGRD in ${waveGRD} ; do - eval $NLN $datwave/${wavprfx}.out_grd.${wavGRD}.${YMD}.${HMS} ${YMD}.${HMS}.out_grd.${wavGRD} - done - FHINC=$FHOUT_WAV - if [ $FHMAX_HF_WAV -gt 0 -a $FHOUT_HF_WAV -gt 0 -a $fhr -lt $FHMAX_HF_WAV ]; then - FHINC=$FHOUT_HF_WAV - fi - fhr=$((fhr+FHINC)) - done - - # Loop for point output (uses DTPNT) - fhr=$FHMIN_WAV - while [ $fhr -le $FHMAX_WAV ]; do - YMDH=`$NDATE $fhr $CDATE` - YMD=$(echo $YMDH | cut -c1-8) - HMS="$(echo $YMDH | cut -c9-10)0000" - eval $NLN $datwave/${wavprfx}.out_pnt.${waveuoutpGRD}.${YMD}.${HMS} ${YMD}.${HMS}.out_pnt.${waveuoutpGRD} - FHINC=$FHINCP_WAV - fhr=$((fhr+FHINC)) - done - -fi #cplwav=true -#-------------wavewave---------------------- - -# inline post fix files -if [ $WRITE_DOPOST = ".true." ]; then - $NLN $PARM_POST/post_tag_gfs${LEVS} $DATA/itag - $NLN $PARM_POST/postxconfig-NT-GFS-TWO.txt $DATA/postxconfig-NT.txt - $NLN $PARM_POST/postxconfig-NT-GFS-F00-TWO.txt $DATA/postxconfig-NT_FH00.txt - $NLN $PARM_POST/params_grib2_tbl_new $DATA/params_grib2_tbl_new -fi -#------------------------------------------------------------------ - -# changeable parameters -# dycore definitions -res=$(echo $CASE |cut -c2-5) -resp=$((res+1)) -npx=$resp -npy=$resp -npz=$((LEVS-1)) -io_layout=${io_layout:-"1,1"} -#ncols=$(( (${npx}-1)*(${npy}-1)*3/2 )) - -# spectral truncation and regular grid resolution based on FV3 resolution -JCAP_CASE=$((2*res-2)) -LONB_CASE=$((4*res)) -LATB_CASE=$((2*res)) - -JCAP=${JCAP:-$JCAP_CASE} -LONB=${LONB:-$LONB_CASE} -LATB=${LATB:-$LATB_CASE} - -LONB_IMO=${LONB_IMO:-$LONB_CASE} -LATB_JMO=${LATB_JMO:-$LATB_CASE} - -# Fix files -FNGLAC=${FNGLAC:-"$FIX_AM/global_glacier.2x2.grb"} -FNMXIC=${FNMXIC:-"$FIX_AM/global_maxice.2x2.grb"} -FNTSFC=${FNTSFC:-"$FIX_AM/RTGSST.1982.2012.monthly.clim.grb"} -FNSNOC=${FNSNOC:-"$FIX_AM/global_snoclim.1.875.grb"} -FNZORC=${FNZORC:-"igbp"} -FNALBC2=${FNALBC2:-"$FIX_AM/global_albedo4.1x1.grb"} -FNAISC=${FNAISC:-"$FIX_AM/CFSR.SEAICE.1982.2012.monthly.clim.grb"} -FNTG3C=${FNTG3C:-"$FIX_AM/global_tg3clim.2.6x1.5.grb"} -FNVEGC=${FNVEGC:-"$FIX_AM/global_vegfrac.0.144.decpercent.grb"} -FNMSKH=${FNMSKH:-"$FIX_AM/global_slmask.t1534.3072.1536.grb"} -FNVMNC=${FNVMNC:-"$FIX_AM/global_shdmin.0.144x0.144.grb"} -FNVMXC=${FNVMXC:-"$FIX_AM/global_shdmax.0.144x0.144.grb"} -FNSLPC=${FNSLPC:-"$FIX_AM/global_slope.1x1.grb"} -FNALBC=${FNALBC:-"$FIX_AM/global_snowfree_albedo.bosu.t${JCAP}.${LONB}.${LATB}.rg.grb"} -FNVETC=${FNVETC:-"$FIX_AM/global_vegtype.igbp.t${JCAP}.${LONB}.${LATB}.rg.grb"} -FNSOTC=${FNSOTC:-"$FIX_AM/global_soiltype.statsgo.t${JCAP}.${LONB}.${LATB}.rg.grb"} -FNABSC=${FNABSC:-"$FIX_AM/global_mxsnoalb.uariz.t${JCAP}.${LONB}.${LATB}.rg.grb"} -FNSMCC=${FNSMCC:-"$FIX_AM/global_soilmgldas.statsgo.t${JCAP}.${LONB}.${LATB}.grb"} - -# If the appropriate resolution fix file is not present, use the highest resolution available (T1534) -[[ ! -f $FNALBC ]] && FNALBC="$FIX_AM/global_snowfree_albedo.bosu.t1534.3072.1536.rg.grb" -[[ ! -f $FNVETC ]] && FNVETC="$FIX_AM/global_vegtype.igbp.t1534.3072.1536.rg.grb" -[[ ! -f $FNSOTC ]] && FNSOTC="$FIX_AM/global_soiltype.statsgo.t1534.3072.1536.rg.grb" -[[ ! -f $FNABSC ]] && FNABSC="$FIX_AM/global_mxsnoalb.uariz.t1534.3072.1536.rg.grb" -[[ ! -f $FNSMCC ]] && FNSMCC="$FIX_AM/global_soilmgldas.statsgo.t1534.3072.1536.grb" - -# NSST Options -# nstf_name contains the NSST related parameters -# nstf_name(1) : NST_MODEL (NSST Model) : 0 = OFF, 1 = ON but uncoupled, 2 = ON and coupled -# nstf_name(2) : NST_SPINUP : 0 = OFF, 1 = ON, -# nstf_name(3) : NST_RESV (Reserved, NSST Analysis) : 0 = OFF, 1 = ON -# nstf_name(4) : ZSEA1 (in mm) : 0 -# nstf_name(5) : ZSEA2 (in mm) : 0 -# nst_anl : .true. or .false., NSST analysis over lake -NST_MODEL=${NST_MODEL:-0} -NST_SPINUP=${NST_SPINUP:-0} -NST_RESV=${NST_RESV-0} -ZSEA1=${ZSEA1:-0} -ZSEA2=${ZSEA2:-0} -nstf_name=${nstf_name:-"$NST_MODEL,$NST_SPINUP,$NST_RESV,$ZSEA1,$ZSEA2"} -nst_anl=${nst_anl:-".false."} - - -# blocking factor used for threading and general physics performance -#nyblocks=`expr \( $npy - 1 \) \/ $layout_y ` -#nxblocks=`expr \( $npx - 1 \) \/ $layout_x \/ 32` -#if [ $nxblocks -le 0 ]; then nxblocks=1 ; fi -blocksize=${blocksize:-32} - -# the pre-conditioning of the solution -# =0 implies no pre-conditioning -# >0 means new adiabatic pre-conditioning -# <0 means older adiabatic pre-conditioning -na_init=${na_init:-1} -[[ $warm_start = ".true." ]] && na_init=0 - -# variables for controlling initialization of NCEP/NGGPS ICs -filtered_terrain=${filtered_terrain:-".true."} -gfs_dwinds=${gfs_dwinds:-".true."} - -# various debug options -no_dycore=${no_dycore:-".false."} -dycore_only=${adiabatic:-".false."} -chksum_debug=${chksum_debug:-".false."} -print_freq=${print_freq:-6} - -if [ ${TYPE} = "nh" ]; then # non-hydrostatic options - - hydrostatic=".false." - phys_hydrostatic=".false." # enable heating in hydrostatic balance in non-hydrostatic simulation - use_hydro_pressure=".false." # use hydrostatic pressure for physics - if [ $warm_start = ".true." ]; then - make_nh=".false." # restarts contain non-hydrostatic state - else - make_nh=".true." # re-initialize non-hydrostatic state - fi - -else # hydrostatic options - - hydrostatic=".true." - phys_hydrostatic=".false." # ignored when hydrostatic = T - use_hydro_pressure=".false." # ignored when hydrostatic = T - make_nh=".false." # running in hydrostatic mode - -fi - -# Conserve total energy as heat globally -consv_te=${consv_te:-1.} # range 0.-1., 1. will restore energy to orig. val. before physics - -# time step parameters in FV3 -k_split=${k_split:-2} -n_split=${n_split:-6} - -if [ $(echo $MONO | cut -c-4) = "mono" ]; then # monotonic options - - d_con=${d_con_mono:-"0."} - do_vort_damp=".false." - if [ ${TYPE} = "nh" ]; then # non-hydrostatic - hord_mt=${hord_mt_nh_mono:-"10"} - hord_xx=${hord_xx_nh_mono:-"10"} - else # hydrostatic - hord_mt=${hord_mt_hydro_mono:-"10"} - hord_xx=${hord_xx_hydro_mono:-"10"} - fi - -else # non-monotonic options - - d_con=${d_con_nonmono:-"1."} - do_vort_damp=".true." - if [ ${TYPE} = "nh" ]; then # non-hydrostatic - hord_mt=${hord_mt_nh_nonmono:-"5"} - hord_xx=${hord_xx_nh_nonmono:-"5"} - else # hydrostatic - hord_mt=${hord_mt_hydro_nonmono:-"10"} - hord_xx=${hord_xx_hydro_nonmono:-"10"} - fi - -fi - -if [ $(echo $MONO | cut -c-4) != "mono" -a $TYPE = "nh" ]; then - vtdm4=${vtdm4_nh_nonmono:-"0.06"} -else - vtdm4=${vtdm4:-"0.05"} -fi - -if [ $warm_start = ".true." ]; then # warm start from restart file - - nggps_ic=".false." - ncep_ic=".false." - external_ic=".false." - mountain=".true." - if [ $read_increment = ".true." ]; then # add increment on the fly to the restarts - res_latlon_dynamics="fv_increment.nc" - else - res_latlon_dynamics='""' - fi - -else # CHGRES'd GFS analyses - - nggps_ic=${nggps_ic:-".true."} - ncep_ic=${ncep_ic:-".false."} - external_ic=".true." - mountain=".false." - read_increment=".false." - res_latlon_dynamics='""' - -fi - -# Stochastic Physics Options -if [ ${SET_STP_SEED:-"YES"} = "YES" ]; then - ISEED_SKEB=$((CDATE*1000 + MEMBER*10 + 1)) - ISEED_SHUM=$((CDATE*1000 + MEMBER*10 + 2)) - ISEED_SPPT=$((CDATE*1000 + MEMBER*10 + 3)) -else - ISEED=${ISEED:-0} -fi -DO_SKEB=${DO_SKEB:-"NO"} -DO_SPPT=${DO_SPPT:-"NO"} -DO_SHUM=${DO_SHUM:-"NO"} - -if [ $DO_SKEB = "YES" ]; then - do_skeb=".true." -fi -if [ $DO_SHUM = "YES" ]; then - do_shum=".true." -fi -if [ $DO_SPPT = "YES" ]; then - do_sppt=".true." -fi - -# copy over the tables -DIAG_TABLE=${DIAG_TABLE:-$PARM_FV3DIAG/diag_table} -DATA_TABLE=${DATA_TABLE:-$PARM_FV3DIAG/data_table} -FIELD_TABLE=${FIELD_TABLE:-$PARM_FV3DIAG/field_table} - -# build the diag_table with the experiment name and date stamp -if [ $DOIAU = "YES" ]; then -cat > diag_table << EOF -FV3 Forecast -${gPDY:0:4} ${gPDY:4:2} ${gPDY:6:2} ${gcyc} 0 0 -EOF -cat $DIAG_TABLE >> diag_table -else -cat > diag_table << EOF -FV3 Forecast -${sPDY:0:4} ${sPDY:4:2} ${sPDY:6:2} ${scyc} 0 0 -EOF -cat $DIAG_TABLE >> diag_table -fi - -$NCP $DATA_TABLE data_table -$NCP $FIELD_TABLE field_table - -# copy CCN_ACTIVATE.BIN for Thompson microphysics -if [ $RUN_CCPP = "YES" ]; then -if [ "$CCPP_SUITE" = 'FV3_GSD_v0' -o "$CCPP_SUITE" = 'FV3_GSD_noah' ]; then - $NLN $FIX_AM/CCN_ACTIVATE.BIN CCN_ACTIVATE.BIN - $NLN $FIX_AM/freezeH2O.dat freezeH2O.dat - $NLN $FIX_AM/qr_acr_qg.dat qr_acr_qg.dat - $NLN $FIX_AM/qr_acr_qs.dat qr_acr_qs.dat -fi -fi - -#------------------------------------------------------------------ -rm -f nems.configure - -if [ $cplwav = ".true." ]; then -#### ww3 version of nems.configure - -# Switch on cpl flag - cpl=.true. - -NTASKS_FV3m1=$((NTASKS_FV3-1)) -atm_petlist_bounds=" 0 $((NTASKS_FV3-1))" -wav_petlist_bounds=" $((NTASKS_FV3)) $((NTASKS_FV3m1+npe_wav))" -### atm_petlist_bounds=" 0 1511" -### atm_petlist_bounds=$atm_petlist_bounds -### wav_petlist_bounds="1512 1691" -### wav_petlist_bounds=$wav_petlist_bounds - coupling_interval_sec=${coupling_interval_sec:-1800} - rm -f nems.configure -cat > nems.configure < WAV :SrcTermProcessing=0:TermOrder=SrcSeq - WAV - @ -:: -EOF -else -#### fv3 standalone version of nems.configure -cat > nems.configure < model_configure < input.nml <> input.nml << EOF - iovr = ${iovr:-"3"} - ltaerosol = ${ltaerosol:-".false."} - lradar = ${lradar:-".false."} - ttendlim = ${ttendlim:-"0.005"} - oz_phys = ${oz_phys:-".false."} - oz_phys_2015 = ${oz_phys_2015:-".true."} - lsoil_lsm = ${lsoil_lsm:-"4"} - do_mynnedmf = ${do_mynnedmf:-".false."} - do_mynnsfclay = ${do_mynnsfclay:-".false."} - icloud_bl = ${icloud_bl:-"1"} - bl_mynn_edmf = ${bl_mynn_edmf:-"1"} - bl_mynn_tkeadvect = ${bl_mynn_tkeadvect:-".true."} - bl_mynn_edmf_mom = ${bl_mynn_edmf_mom:-"1"} - min_lakeice = ${min_lakeice:-"0.15"} - min_seaice = ${min_seaice:-"0.15"} -EOF -else - cat >> input.nml << EOF - iovr_lw = ${iovr_lw:-"3"} - iovr_sw = ${iovr_sw:-"3"} -EOF -fi - -# Add namelist for IAU -if [ $DOIAU = "YES" ]; then - cat >> input.nml << EOF - iaufhrs = ${IAUFHRS} - iau_delthrs = ${IAU_DELTHRS} - iau_inc_files= ${IAU_INC_FILES} - iau_drymassfixer = .false. -EOF -fi - -cat >> input.nml <> input.nml - -cat >> input.nml <> input.nml -if [ $MEMBER -gt 0 ]; then - - cat >> input.nml << EOF -&nam_stochy -EOF - - if [ $DO_SKEB = "YES" ]; then - cat >> input.nml << EOF - skeb = $SKEB - iseed_skeb = ${ISEED_SKEB:-$ISEED} - skeb_tau = ${SKEB_TAU:-"-999."} - skeb_lscale = ${SKEB_LSCALE:-"-999."} - skebnorm = ${SKEBNORM:-"1"} - skeb_npass = ${SKEB_nPASS:-"30"} - skeb_vdof = ${SKEB_VDOF:-"5"} -EOF - fi - - if [ $DO_SHUM = "YES" ]; then - cat >> input.nml << EOF - shum = $SHUM - iseed_shum = ${ISEED_SHUM:-$ISEED} - shum_tau = ${SHUM_TAU:-"-999."} - shum_lscale = ${SHUM_LSCALE:-"-999."} -EOF - fi - - if [ $DO_SPPT = "YES" ]; then - cat >> input.nml << EOF - sppt = $SPPT - iseed_sppt = ${ISEED_SPPT:-$ISEED} - sppt_tau = ${SPPT_TAU:-"-999."} - sppt_lscale = ${SPPT_LSCALE:-"-999."} - sppt_logit = ${SPPT_LOGIT:-".true."} - sppt_sfclimit = ${SPPT_SFCLIMIT:-".true."} - use_zmtnblck = ${use_zmtnblck:-".true."} -EOF - fi - - cat >> input.nml << EOF - $nam_stochy_nml -/ -EOF - - - cat >> input.nml << EOF -&nam_sfcperts - $nam_sfcperts_nml -/ -EOF - -else - - cat >> input.nml << EOF -&nam_stochy -/ -&nam_sfcperts -/ -EOF - -fi - - -#------------------------------------------------------------------ -# make symbolic links to write forecast files directly in memdir -cd $DATA -if [ $QUILTING = ".true." -a $OUTPUT_GRID = "gaussian_grid" ]; then - fhr=$FHMIN - while [ $fhr -le $FHMAX ]; do - FH3=$(printf %03i $fhr) - FH2=$(printf %02i $fhr) - atmi=atmf${FH3}.$affix - sfci=sfcf${FH3}.$affix - logi=logf${FH3} - pgbi=GFSPRS.GrbF${FH2} - flxi=GFSFLX.GrbF${FH2} - atmo=$memdir/${CDUMP}.t${cyc}z.atmf${FH3}.$affix - sfco=$memdir/${CDUMP}.t${cyc}z.sfcf${FH3}.$affix - logo=$memdir/${CDUMP}.t${cyc}z.logf${FH3}.txt - pgbo=$memdir/${CDUMP}.t${cyc}z.master.grb2f${FH3} - flxo=$memdir/${CDUMP}.t${cyc}z.sfluxgrbf${FH3}.grib2 - eval $NLN $atmo $atmi - eval $NLN $sfco $sfci - eval $NLN $logo $logi - if [ $WRITE_DOPOST = ".true." ]; then - eval $NLN $pgbo $pgbi - eval $NLN $flxo $flxi - fi - FHINC=$FHOUT - if [ $FHMAX_HF -gt 0 -a $FHOUT_HF -gt 0 -a $fhr -lt $FHMAX_HF ]; then - FHINC=$FHOUT_HF - fi - fhr=$((fhr+FHINC)) - done -else - for n in $(seq 1 $ntiles); do - eval $NLN nggps2d.tile${n}.nc $memdir/nggps2d.tile${n}.nc - eval $NLN nggps3d.tile${n}.nc $memdir/nggps3d.tile${n}.nc - eval $NLN grid_spec.tile${n}.nc $memdir/grid_spec.tile${n}.nc - eval $NLN atmos_static.tile${n}.nc $memdir/atmos_static.tile${n}.nc - eval $NLN atmos_4xdaily.tile${n}.nc $memdir/atmos_4xdaily.tile${n}.nc - done -fi - -# Copy namelist file -$NCP input.nml $memdir - -#------------------------------------------------------------------ -# run the executable - -$NCP $FCSTEXECDIR/$FCSTEXEC $DATA/. -export OMP_NUM_THREADS=$NTHREADS_FV3 -$APRUN_FV3 $DATA/$FCSTEXEC 1>&1 2>&2 -export ERR=$? -export err=$ERR -$ERRSCRIPT || exit $err - -#------------------------------------------------------------------ -if [ $SEND = "YES" ]; then - - # Copy gdas and enkf member restart files - if [ $CDUMP = "gdas" -a $rst_invt1 -gt 0 ]; then - cd $DATA/RESTART - mkdir -p $memdir/RESTART - for rst_int in $restart_interval ; do - if [ $rst_int -ge 0 ]; then - RDATE=$($NDATE +$rst_int $CDATE) - rPDY=$(echo $RDATE | cut -c1-8) - rcyc=$(echo $RDATE | cut -c9-10) - for file in $(ls ${rPDY}.${rcyc}0000.*) ; do - $NCP $file $memdir/RESTART/$file - done - fi - done - if [ $DOIAU = "YES" ] || [ $DOIAU_coldstart = "YES" ]; then - # if IAU is on, save restart at start of IAU window - rst_iau=$(( ${IAU_OFFSET} - (${IAU_DELTHRS}/2) )) - if [ $rst_iau -lt 0 ];then - rst_iau=$(( (${IAU_DELTHRS}) - ${IAU_OFFSET} )) - fi - RDATE=$($NDATE +$rst_iau $CDATE) - rPDY=$(echo $RDATE | cut -c1-8) - rcyc=$(echo $RDATE | cut -c9-10) - for file in $(ls ${rPDY}.${rcyc}0000.*) ; do - $NCP $file $memdir/RESTART/$file - done - fi - fi -fi - -#------------------------------------------------------------------ -# Clean up before leaving -if [ $mkdata = "YES" ]; then rm -rf $DATA; fi - -#------------------------------------------------------------------ -set +x -if [ $VERBOSE = "YES" ] ; then - echo $(date) EXITING $0 with return code $err >&2 -fi -exit 0 diff --git a/scripts/exglobal_forecast.sh b/scripts/exglobal_forecast.sh index 564c0c798a3..a262db36aad 100755 --- a/scripts/exglobal_forecast.sh +++ b/scripts/exglobal_forecast.sh @@ -202,7 +202,12 @@ if [ $MEMBER -lt 0 ]; then rprefix=$rCDUMP memchar="" else - prefix=enkf$CDUMP + # needs a previous ens forecast to do a warm start + if [[ "$EFSOI_TASK" = "YES" ]]; then + prefix=efsoi$CDUMP + else + prefix=enkf$CDUMP + fi rprefix=enkf$rCDUMP memchar=mem$(printf %03i $MEMBER) fi From 6da992433f051d1bdc4547b7d565cccee05fb328 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Mon, 28 Jun 2021 13:05:41 +0000 Subject: [PATCH 041/103] integration of EFSOI branches of global-workflow and GSI --- jobs/JGDAS_EFSOI | 143 ------------ jobs/JGDAS_EFSOI_ECEN | 143 ------------ jobs/JGDAS_EFSOI_FCST | 152 ------------ jobs/JGDAS_EFSOI_POST | 121 ---------- jobs/JGDAS_EFSOI_SFC | 155 ------------ jobs/JGDAS_EFSOI_UPDATE | 137 ----------- parm/config/config.baseSAVE | 301 ------------------------ parm/config/config.efsoi | 5 +- parm/config/config.eupdfsoi | 2 +- parm/config/config.vrfy | 4 +- scripts/exgdas_efsoi.sh | 399 ------------------------------- scripts/exgdas_efsoi_update.sh | 415 --------------------------------- sorc/checkout.sh | 6 +- sorc/link_fv3gfs.sh | 10 +- 14 files changed, 19 insertions(+), 1974 deletions(-) delete mode 100755 jobs/JGDAS_EFSOI delete mode 100755 jobs/JGDAS_EFSOI_ECEN delete mode 100755 jobs/JGDAS_EFSOI_FCST delete mode 100755 jobs/JGDAS_EFSOI_POST delete mode 100755 jobs/JGDAS_EFSOI_SFC delete mode 100755 jobs/JGDAS_EFSOI_UPDATE delete mode 100755 parm/config/config.baseSAVE delete mode 100755 scripts/exgdas_efsoi.sh delete mode 100755 scripts/exgdas_efsoi_update.sh diff --git a/jobs/JGDAS_EFSOI b/jobs/JGDAS_EFSOI deleted file mode 100755 index f10f51502cc..00000000000 --- a/jobs/JGDAS_EFSOI +++ /dev/null @@ -1,143 +0,0 @@ -#!/bin/ksh -set -x - -export RUN_ENVIR=${RUN_ENVIR:-"nco"} -export PS4='$SECONDS + ' -date - - -############################# -# Source relevant config files -############################# -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} - -configs="base anal efsoi" -config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} -for config in $configs; do - . $config_path/config.$config - status=$? - [[ $status -ne 0 ]] && exit $status -done - - -########################################## -# Source machine runtime environment -########################################## -. $HOMEgfs/env/${machine}.env efsoi - - -status=$? -[[ $status -ne 0 ]] && exit $status - - -############################################## -# Obtain unique process id (pid) and make temp directory -############################################## -export pid=${pid:-$$} -export outid=${outid:-"LL$job"} -export DATA=${DATA:-${DATAROOT}/${jobid:?}} -mkdir -p $DATA -cd $DATA - - -############################################## -# Run setpdy and initialize PDY variables -############################################## -export cycle="t${cyc}z" -setpdy.sh -. ./PDY - - -############################################## -# Determine Job Output Name on System -############################################## -export pgmout="OUTPUT.${pid}" -export pgmerr=errfile - - -############################################## -# Set variables used in the exglobal script -############################################## -export CDATE=${CDATE:-${PDY}${cyc}} -export CDUMP=${CDUMP:-${RUN:-"gdas"}} -export COMPONENT=${COMPONENT:-atmos} -if [ $RUN_ENVIR = "nco" ]; then - export ROTDIR=${COMROOT:?}/$NET/$envir -fi - - -############################################## -# Begin JOB SPECIFIC work -############################################## - -GDATE=$($NDATE -$assim_freq $CDATE) -gPDY=$(echo $GDATE | cut -c1-8) -export gcyc=$(echo $GDATE | cut -c9-10) # needed in namelist - -VDATE=$($NDATE 24 $CDATE) -vPDY=$(echo $VDATE | cut -c1-8) -vcyc=$(echo $VDATE | cut -c9-10) - -export APREFIX="${CDUMP}.t${cyc}z." -export VPREFIX="${CDUMP}.t${vcyc}z." -export GPREFIX="gdas.t${gcyc}z." -export ASUFFIX=${ASUFFIX:-$SUFFIX} -export GSUFFIX=${GSUFFIX:-$SUFFIX} - - - -# COMIN_GES_ENS and COMOUT_ANL_ENS are used in script -export COMIN_GES_ENS="$ROTDIR/efsoigdas.$gPDY/$gcyc/$COMPONENT" -export COMOUT_ANL_ENS="$ROTDIR/enkf$CDUMP.$PDY/$cyc/$COMPONENT" -export COMIN_ANL="$ROTDIR/$CDUMP.$vPDY/$vcyc/$COMPONENT" -export COMOUT_ANL_ENSFSOI="$ROTDIR/efsoi$CDUMP.$PDY/$cyc/$COMPONENT" -export OSENSE_SAVE_DIR="$ROTDIR/osense" -mkdir -p $OSENSE_SAVE_DIR -# ======================================================== - -############################################################### -# Run relevant exglobal script -env -msg="HAS BEGUN on `hostname`" -postmsg "$jlogfile" "$msg" -$LOGSCRIPT - -${EFSOIUPDSH:-$SCRgfs/exgdas_efsoi.sh} -status=$? -[[ $status -ne 0 ]] && exit $status - - - -############################################## -# Send Alerts -############################################## -if [ $SENDDBN = YES ] ; then - $DBNROOT/bin/dbn_alert MODEL ENKF1_MSC_enkfstat $job $COMOUT_ANL_ENSFSOI/${APREFIX}enkfstat -fi - - -############################################## -# End JOB SPECIFIC work -############################################## - -############################################## -# Final processing -############################################## -if [ -e "$pgmout" ] ; then - cat $pgmout -fi - - -msg="ENDED NORMALLY." -postmsg "$jlogfile" "$msg" - - -########################################## -# Remove the Temporary working directory -########################################## -cd $DATAROOT - -[[ $KEEPDATA = "NO" ]] && rm -rf $DATA - -date -exit 0 diff --git a/jobs/JGDAS_EFSOI_ECEN b/jobs/JGDAS_EFSOI_ECEN deleted file mode 100755 index 28d04b9f5cf..00000000000 --- a/jobs/JGDAS_EFSOI_ECEN +++ /dev/null @@ -1,143 +0,0 @@ -#!/bin/ksh -set -x - -export RUN_ENVIR=${RUN_ENVIR:-"nco"} -export PS4='$SECONDS + ' -date - - -############################# -# Source relevant config files -############################# -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -configs="base ecenfsoi" -config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} -for config in $configs; do - . $config_path/config.$config - status=$? - [[ $status -ne 0 ]] && exit $status -done - - -########################################## -# Source machine runtime environment -########################################## -. $HOMEgfs/env/${machine}.env ecenfsoi -status=$? -[[ $status -ne 0 ]] && exit $status - - -############################################## -# Obtain unique process id (pid) and make temp directory -############################################## -export pid=${pid:-$$} -export outid=${outid:-"LL$job"} -export DATA=${DATA:-${DATAROOT}/${jobid:?}} -mkdir -p $DATA -cd $DATA - - -############################################## -# Run setpdy and initialize PDY variables -############################################## -export cycle="t${cyc}z" -setpdy.sh -. ./PDY - - -############################################## -# Determine Job Output Name on System -############################################## -export pgmout="OUTPUT.${pid}" -export pgmerr=errfile - - -############################################## -# Set variables used in the script -############################################## -export CDATE=${CDATE:-${PDY}${cyc}} -export CDUMP=${CDUMP:-${RUN:-"gdas"}} -export COMPONENT=${COMPONENT:-atmos} -if [ $RUN_ENVIR = "nco" ]; then - export ROTDIR=${COMROOT:?}/$NET/$envir -fi - - -############################################## -# Begin JOB SPECIFIC work -############################################## - -GDATE=$($NDATE -$assim_freq $CDATE) -gPDY=$(echo $GDATE | cut -c1-8) -gcyc=$(echo $GDATE | cut -c9-10) -GDUMP=${GDUMP:-"gdas"} - -export CASE=$CASE_ENKF - - -EUPD_CYC=$(echo ${EUPD_CYC:-"gdas"} | tr a-z A-Z) -if [ $EUPD_CYC = "GFS" ]; then - CDUMP_ENKF="gfs" -else - CDUMP_ENKF=$CDUMP -fi - -export OPREFIX="${CDUMP}.t${cyc}z." -export APREFIX="${CDUMP}.t${cyc}z." -export APREFIX_ENKF="${CDUMP_ENKF}.t${cyc}z." -export GPREFIX="${CDUMP}.t${gcyc}z." -export GSUFFIX=${GSUFFIX:-$SUFFIX} -export ASUFFIX=${ASUFFIX:-$SUFFIX} - -if [ $RUN_ENVIR = "nco" -o ${ROTDIR_DUMP:-NO} = "YES" ]; then - export COMIN_OBS=${COMIN_OBS:-$ROTDIR/$RUN.$PDY/$cyc/$COMPONENT} - export COMIN_GES_OBS=${COMIN_GES_OBS:-$ROTDIR/$GDUMP.$gPDY/$gcyc/$COMPONENT} -else - export COMIN_OBS="$DMPDIR/$CDATE/$CDUMP" - export COMIN_GES_OBS="$DMPDIR/$GDATE/$GDUMP" -fi - -# COMIN, COMIN_ENS and COMIN_GES_ENS are used in script -export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" -export COMIN_ENS="$ROTDIR/efsoi$CDUMP_ENKF.$PDY/$cyc/$COMPONENT" -export COMOUT_ENS="$ROTDIR/efsoi$CDUMP.$PDY/$cyc/$COMPONENT" -export COMIN_GES_ENS="$ROTDIR/enkf$CDUMP.$gPDY/$gcyc/$COMPONENT" - - -############################################################### -# Run relevant script -env -msg="HAS BEGUN on `hostname`" -postmsg "$jlogfile" "$msg" -$LOGSCRIPT - - -${ENKFRECENSH:-$SCRgfs/exgdas_enkf_ecen.sh} -status=$? -[[ $status -ne 0 ]] && exit $status - - -############################################## -# End JOB SPECIFIC work -############################################## - -############################################## -# Final processing -############################################## -if [ -e "$pgmout" ] ; then - cat $pgmout -fi - - -msg="ENDED NORMALLY." -postmsg "$jlogfile" "$msg" - - -########################################## -# Remove the Temporary working directory -########################################## -cd $DATAROOT -[[ $KEEPDATA = "NO" ]] && rm -rf $DATA - -date -exit 0 diff --git a/jobs/JGDAS_EFSOI_FCST b/jobs/JGDAS_EFSOI_FCST deleted file mode 100755 index 6c1e08eeb36..00000000000 --- a/jobs/JGDAS_EFSOI_FCST +++ /dev/null @@ -1,152 +0,0 @@ -#!/bin/ksh -set -x - -export RUN_ENVIR=${RUN_ENVIR:-"nco"} -export PS4='$SECONDS + ' -date - - -############################# -# Source relevant config files -############################# -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} -configs="base fcst efcsfsoi" -for config in $configs; do - . $config_path/config.$config - status=$? - [[ $status -ne 0 ]] && exit $status -done - - -########################################## -# Source machine runtime environment -########################################## -. $HOMEgfs/env/${machine}.env efcsfsoi -status=$? -[[ $status -ne 0 ]] && exit $status - - -############################################## -# Obtain unique process id (pid) and make temp directory -############################################## -export pid=${pid:-$$} -export outid=${outid:-"LL$job"} -export DATA=${DATA:-${DATAROOT}/${jobid:?}} -mkdir -p $DATA -cd $DATA - - -############################################## -# Run setpdy and initialize PDY variables -############################################## -export cycle="t${cyc}z" -setpdy.sh -. ./PDY - - -############################################## -# Determine Job Output Name on System -############################################## -export pgmout="OUTPUT.${pid}" -export pgmerr=errfile - - -############################################## -# Set variables used in the script -############################################## -export CDATE=${CDATE:-${PDY}${cyc}} -export CDUMP=${CDUMP:-${RUN:-"gdas"}} -export COMPONENT=${COMPONENT:-atmos} -if [ $RUN_ENVIR = "nco" ]; then - export ROTDIR=${COMROOT:?}/$NET/$envir -fi - -# tells the forecast script to use efsoi ensemble -export EFSOI_TASK="YES" - -############################################## -# Begin JOB SPECIFIC work -############################################## - -export CASE=$CASE_ENKF - -# COMOUT is used in script -export COMOUT="$ROTDIR/efsoi$CDUMP.$PDY/$cyc/$COMPONENT" - - -# Forecast length for EnKF forecast -export FHMIN_ENKF=${FHMIN_EFSOI:-0} -export FHOUT_ENKF=${FHOUT_EFSOI:-6} -export FHMAX_ENKF=${FHMAX_EFSOI:-30} -export FHMIN=$FHMIN_ENKF -export FHOUT=$FHOUT_ENKF -export FHMAX=$FHMAX_ENKF - -export FORECASTSH=$HOMEgfs/scripts/exglobal_forecast.sh - - -# Get ENSBEG/ENSEND from ENSGRP and NMEM_EFCSGRP -export ENSEND=$((NMEM_EFCSGRP * ENSGRP)) -export ENSBEG=$((ENSEND - NMEM_EFCSGRP + 1)) - - -############################################################### -# Run relevant script -env -msg="HAS BEGUN on `hostname`" -postmsg "$jlogfile" "$msg" -$LOGSCRIPT - - -${ENKFFCSTSH:-$SCRgfs/exgdas_enkf_fcst.sh} -status=$? -[[ $status -ne 0 ]] && exit $status - - -# Double check the status of members in ENSGRP -EFCSGRP=$COMOUT/efcs.grp${ENSGRP} -npass=0 -if [ -f $EFCSGRP ]; then - npass=$(grep "PASS" $EFCSGRP | wc -l) -fi -echo "$npass/$NMEM_EFCSGRP members successfull in efcs.grp$ENSGRP" -if [ $npass -ne $NMEM_EFCSGRP ]; then - echo "FATAL ERROR: Failed members in group $ENSGRP, ABORT!" - cat $EFCSGRP - exit 99 -fi - - -############################################## -# Send Alerts -############################################## -if [ $SENDDBN = YES ] ; then - $DBNROOT/bin/dbn_alert MODEL ENKF1_MSC_fcsstat $job $EFCSGRP -fi - - -############################################## -# End JOB SPECIFIC work -############################################## - -############################################## -# Final processing -############################################## -if [ -e "$pgmout" ] ; then - cat $pgmout -fi - - -msg="ENDED NORMALLY." -postmsg "$jlogfile" "$msg" - - -########################################## -# Remove the Temporary working directory -########################################## -cd $DATAROOT -[[ $KEEPDATA = "NO" ]] && rm -rf $DATA - -date -exit 0 diff --git a/jobs/JGDAS_EFSOI_POST b/jobs/JGDAS_EFSOI_POST deleted file mode 100755 index f71f865b7e4..00000000000 --- a/jobs/JGDAS_EFSOI_POST +++ /dev/null @@ -1,121 +0,0 @@ -#!/bin/ksh -set -x - -export RUN_ENVIR=${RUN_ENVIR:-"nco"} -export PS4='$SECONDS + ' -date - - -############################# -# Source relevant config files -############################# -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -configs="base eposfsoi" -config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} -for config in $configs; do - . $config_path/config.$config - status=$? - [[ $status -ne 0 ]] && exit $status -done - - -########################################## -# Source machine runtime environment -########################################## -. $HOMEgfs/env/${machine}.env eposfsoi -status=$? -[[ $status -ne 0 ]] && exit $status - - -############################################## -# Obtain unique process id (pid) and make temp directory -############################################## -export pid=${pid:-$$} -export outid=${outid:-"LL$job"} -export DATA=${DATA:-${DATAROOT}/${jobid:?}} -mkdir -p $DATA -cd $DATA - - -############################################## -# Run setpdy and initialize PDY variables -############################################## -export cycle="t${cyc}z" -setpdy.sh -. ./PDY - - -############################################## -# Determine Job Output Name on System -############################################## -export pgmout="OUTPUT.${pid}" -export pgmerr=errfile - - -############################################## -# Set variables used in the script -############################################## -export CDATE=${CDATE:-${PDY}${cyc}} -export CDUMP=${CDUMP:-${RUN:-"gdas"}} -export COMPONENT=${COMPONENT:-atmos} -if [ $RUN_ENVIR = "nco" ]; then - export ROTDIR=${COMROOT:?}/$NET/$envir -fi - - -############################################## -# Begin JOB SPECIFIC work -############################################## -export GFS_NCIO=${GFS_NCIO:-"YES"} - -export PREFIX="${CDUMP}.t${cyc}z." - -# COMIN, COMOUT are used in script -export COMIN="$ROTDIR/efsoi$CDUMP.$PDY/$cyc/$COMPONENT" -export COMOUT="$ROTDIR/efsoi$CDUMP.$PDY/$cyc/$COMPONENT" - - -export LEVS=$((LEVS-1)) - -#export FHMIN_EPOS=6 -#export FHMAX_EPOS=30 -#export FHOUT_EPOS=6 - - -############################################################### -# Run relevant script -env -msg="HAS BEGUN on `hostname`" -postmsg "$jlogfile" "$msg" -$LOGSCRIPT - - -${ENKFPOSTSH:-$SCRgfs/exgdas_enkf_post.sh} -status=$? -[[ $status -ne 0 ]] && exit $status - - -############################################## -# End JOB SPECIFIC work -############################################## - -############################################## -# Final processing -############################################## -if [ -e "$pgmout" ] ; then - cat $pgmout -fi - - -msg="ENDED NORMALLY." -postmsg "$jlogfile" "$msg" - - -########################################## -# Remove the Temporary working directory -########################################## -cd $DATAROOT -[[ $KEEPDATA = "NO" ]] && rm -rf $DATA - -date -exit 0 diff --git a/jobs/JGDAS_EFSOI_SFC b/jobs/JGDAS_EFSOI_SFC deleted file mode 100755 index 5924393c33d..00000000000 --- a/jobs/JGDAS_EFSOI_SFC +++ /dev/null @@ -1,155 +0,0 @@ -#!/bin/ksh -set -x - -export RUN_ENVIR=${RUN_ENVIR:-"nco"} -export PS4='$SECONDS + ' -date - - -############################# -# Source relevant config files -############################# -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -configs="base esfcfsoi" -config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} -for config in $configs; do - . $config_path/config.$config - status=$? - [[ $status -ne 0 ]] && exit $status -done - - -########################################## -# Source machine runtime environment -########################################## -. $HOMEgfs/env/${machine}.env esfcfsoi -status=$? -[[ $status -ne 0 ]] && exit $status - - -############################################## -# Obtain unique process id (pid) and make temp directory -############################################## -export pid=${pid:-$$} -export outid=${outid:-"LL$job"} -export DATA=${DATA:-${DATAROOT}/${jobid:?}} -mkdir -p $DATA -cd $DATA - - -############################################## -# Run setpdy and initialize PDY variables -############################################## -export cycle="t${cyc}z" -setpdy.sh -. ./PDY - - -############################################## -# Determine Job Output Name on System -############################################## -export pgmout="OUTPUT.${pid}" -export pgmerr=errfile - - -############################################## -# Set variables used in the script -############################################## -export CDATE=${CDATE:-${PDY}${cyc}} -export CDUMP=${CDUMP:-${RUN:-"gdas"}} -export COMPONENT=${COMPONENT:-atmos} -if [ $RUN_ENVIR = "nco" ]; then - export ROTDIR=${COMROOT:?}/$NET/$envir -fi - - -############################################## -# Begin JOB SPECIFIC work -############################################## - -GDATE=$($NDATE -$assim_freq $CDATE) -gPDY=$(echo $GDATE | cut -c1-8) -gcyc=$(echo $GDATE | cut -c9-10) -GDUMP=${GDUMP:-"gdas"} - -export CASE=$CASE_ENKF - - -EUPD_CYC=$(echo ${EUPD_CYC:-"gdas"} | tr a-z A-Z) -if [ $EUPD_CYC = "GFS" ]; then - CDUMP_ENKF="gfs" -else - CDUMP_ENKF=$CDUMP -fi - -export OPREFIX="${CDUMP}.t${cyc}z." -export APREFIX="${CDUMP}.t${cyc}z." -export APREFIX_ENKF="${CDUMP_ENKF}.t${cyc}z." -export GPREFIX="${CDUMP}.t${gcyc}z." -export GSUFFIX=${GSUFFIX:-$SUFFIX} -export ASUFFIX=${ASUFFIX:-$SUFFIX} - -if [ $RUN_ENVIR = "nco" -o ${ROTDIR_DUMP:-NO} = "YES" ]; then - export COMIN_OBS=${COMIN_OBS:-$ROTDIR/$RUN.$PDY/$cyc/$COMPONENT} - export COMIN_GES_OBS=${COMIN_GES_OBS:-$ROTDIR/$GDUMP.$gPDY/$gcyc/$COMPONENT} -else - export COMIN_OBS="$DMPDIR/$CDATE/$CDUMP" - export COMIN_GES_OBS="$DMPDIR/$GDATE/$GDUMP" -fi - -# COMIN, COMIN_ENS and COMIN_GES_ENS are used in script -# Current GDAS comrot folder -export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" - -# Current ENKF (EFSOI) comrot folder -export COMIN_ENS="$ROTDIR/efsoi$CDUMP_ENKF.$PDY/$cyc/$COMPONENT" - -# Current ENKF (EFSOI) comrot folder -export COMOUT_ENS="$ROTDIR/efsoi$CDUMP.$PDY/$cyc/$COMPONENT" - -# Previous ENKF comrot folder -export COMIN_GES_ENS="$ROTDIR/enkf$CDUMP.$gPDY/$gcyc/$COMPONENT" - -#export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" -#export COMIN_ENS="$ROTDIR/enkf$CDUMP_ENKF.$PDY/$cyc/$COMPONENT" -#export COMOUT_ENS="$ROTDIR/enkf$CDUMP.$PDY/$cyc/$COMPONENT" -#export COMIN_GES_ENS="$ROTDIR/enkf$CDUMP.$gPDY/$gcyc/$COMPONENT" - - -############################################################### -# Run relevant script -env -msg="HAS BEGUN on `hostname`" -postmsg "$jlogfile" "$msg" -$LOGSCRIPT - - -${ENKFRESFCSH:-$SCRgfs/exgdas_enkf_sfc.sh} -status=$? -[[ $status -ne 0 ]] && exit $status - - -############################################## -# End JOB SPECIFIC work -############################################## - -############################################## -# Final processing -############################################## -if [ -e "$pgmout" ] ; then - cat $pgmout -fi - - -msg="ENDED NORMALLY." -postmsg "$jlogfile" "$msg" - - -########################################## -# Remove the Temporary working directory -########################################## -cd $DATAROOT -[[ $KEEPDATA = "NO" ]] && rm -rf $DATA - -date -exit 0 diff --git a/jobs/JGDAS_EFSOI_UPDATE b/jobs/JGDAS_EFSOI_UPDATE deleted file mode 100755 index 3d730eab7e5..00000000000 --- a/jobs/JGDAS_EFSOI_UPDATE +++ /dev/null @@ -1,137 +0,0 @@ -#!/bin/ksh -set -x - -export RUN_ENVIR=${RUN_ENVIR:-"nco"} -export PS4='$SECONDS + ' -date - - -############################# -# Source relevant config files -############################# -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} - -configs="base anal eupdfsoi" -config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} -for config in $configs; do - . $config_path/config.$config - status=$? - [[ $status -ne 0 ]] && exit $status -done - - -########################################## -# Source machine runtime environment -########################################## -. $HOMEgfs/env/${machine}.env eupdfsoi - - -status=$? -[[ $status -ne 0 ]] && exit $status - - -############################################## -# Obtain unique process id (pid) and make temp directory -############################################## -export pid=${pid:-$$} -export outid=${outid:-"LL$job"} -export DATA=${DATA:-${DATAROOT}/${jobid:?}} -mkdir -p $DATA -cd $DATA - - -############################################## -# Run setpdy and initialize PDY variables -############################################## -export cycle="t${cyc}z" -setpdy.sh -. ./PDY - - -############################################## -# Determine Job Output Name on System -############################################## -export pgmout="OUTPUT.${pid}" -export pgmerr=errfile - - -############################################## -# Set variables used in the exglobal script -############################################## -export CDATE=${CDATE:-${PDY}${cyc}} -export CDUMP=${CDUMP:-${RUN:-"gdas"}} -export COMPONENT=${COMPONENT:-atmos} -if [ $RUN_ENVIR = "nco" ]; then - export ROTDIR=${COMROOT:?}/$NET/$envir -fi - - -############################################## -# Begin JOB SPECIFIC work -############################################## - -GDATE=$($NDATE -$assim_freq $CDATE) -gPDY=$(echo $GDATE | cut -c1-8) -gcyc=$(echo $GDATE | cut -c9-10) - -export APREFIX="${CDUMP}.t${cyc}z." -export GPREFIX="gdas.t${gcyc}z." -export ASUFFIX=${ASUFFIX:-$SUFFIX} -export GSUFFIX=${GSUFFIX:-$SUFFIX} - - - -# COMIN_GES_ENS and COMOUT_ANL_ENS are used in script -export COMIN_GES_ENS="$ROTDIR/enkfgdas.$gPDY/$gcyc/$COMPONENT" -export COMOUT_ANL_ENS="$ROTDIR/enkf$CDUMP.$PDY/$cyc/$COMPONENT" -export COMOUT_ANL_ENSFSOI="$ROTDIR/efsoi$CDUMP.$PDY/$cyc/$COMPONENT" - - - -mkdir -p $COMOUT_ANL_ENSFSOI - -############################################################### -# Run relevant exglobal script -env -msg="HAS BEGUN on `hostname`" -postmsg "$jlogfile" "$msg" -$LOGSCRIPT - -${EFSOIUPDSH:-$SCRgfs/exgdas_efsoi_update.sh} -status=$? -[[ $status -ne 0 ]] && exit $status - - -############################################## -# Send Alerts -############################################## -if [ $SENDDBN = YES ] ; then - $DBNROOT/bin/dbn_alert MODEL ENKF1_MSC_enkfstat $job $COMOUT_ANL_ENSFSOI/${APREFIX}enkfstat -fi - - -############################################## -# End JOB SPECIFIC work -############################################## - -############################################## -# Final processing -############################################## -if [ -e "$pgmout" ] ; then - cat $pgmout -fi - - -msg="ENDED NORMALLY." -postmsg "$jlogfile" "$msg" - - -########################################## -# Remove the Temporary working directory -########################################## -cd $DATAROOT - -[[ $KEEPDATA = "NO" ]] && rm -rf $DATA - -date -exit 0 diff --git a/parm/config/config.baseSAVE b/parm/config/config.baseSAVE deleted file mode 100755 index 7b6598304a3..00000000000 --- a/parm/config/config.baseSAVE +++ /dev/null @@ -1,301 +0,0 @@ -#!/bin/ksh -x - -########## config.base ########## -# Common to all steps - -echo "BEGIN: config.base" - -# Machine environment -export machine="@MACHINE@" - -# EMC parallel or NCO production -export RUN_ENVIR="emc" - -# Account, queue, etc. -# AFE 2020-11-16 changed for me, shouldn't be committed but probably will be -#export ACCOUNT="@ACCOUNT@" -export ACCOUNT="da-cpu" -export QUEUE="@QUEUE@" -export QUEUE_SERVICE="@QUEUE_SERVICE@" -export PARTITION_BATCH="@PARTITION_BATCH@" - -# Project to use in mass store: -HPSS_PROJECT=emc-global - -# Directories relative to installation areas: -export HOMEgfs=@HOMEgfs@ -export PARMgfs=$HOMEgfs/parm -export FIXgfs=$HOMEgfs/fix -export USHgfs=$HOMEgfs/ush -export UTILgfs=$HOMEgfs/util -export EXECgfs=$HOMEgfs/exec -export SCRgfs=$HOMEgfs/scripts - -######################################################################## - -# GLOBAL static environment parameters -export NWPROD="@NWPROD@" -export COMROOT="@COMROOT@" -export DMPDIR="@DMPDIR@" -export RTMFIX=$CRTM_FIX - -# USER specific paths -export HOMEDIR="@HOMEDIR@" -export STMP="@STMP@" -export PTMP="@PTMP@" -export NOSCRUB="@NOSCRUB@" - -# Base directories for various builds -export BASE_GIT="@BASE_GIT@" - -# Toggle to turn on/off GFS downstream processing. -# AFE 2020-11-16 copied from LL's EFSOI configs, note -# says it was suggested by Kate. New config file? -#export DO_BUFRSND="YES" # BUFR sounding products -export DO_BUFRSND="NO" # BUFR sounding products -export DO_GEMPAK="NO" # GEMPAK products -export DO_AWIPS="NO" # AWIPS products -export WAFSF="NO" # WAFS products - -# NO for retrospective parallel; YES for real-time parallel -# arch.sh uses REALTIME for MOS. Need to set REALTIME=YES -# if want MOS written to HPSS. Should update arch.sh to -# use RUNMOS flag (currently in config.vrfy) -export REALTIME="YES" - - -#################################################### -# DO NOT ADD MACHINE DEPENDENT STUFF BELOW THIS LINE -# IF YOU HAVE TO MAKE MACHINE SPECIFIC CHANGES BELOW -# FEEL FREE TO MOVE THEM ABOVE THIS LINE TO KEEP IT -# CLEAR -#################################################### -# Build paths relative to $HOMEgfs -export FIXgsi="$HOMEgfs/fix/fix_gsi" -export HOMEfv3gfs="$HOMEgfs/sorc/fv3gfs.fd" -export HOMEpost="$HOMEgfs" -export HOMEobsproc_prep="$BASE_GIT/obsproc/gfsv16b/obsproc_prep_RB-5.4.0" -export HOMEobsproc_network="$BASE_GIT/obsproc/gfsv16b/obsproc_global_RB-3.4.0" -export HOMEobsproc_global=$HOMEobsproc_network -export BASE_VERIF="$BASE_GIT/verif/global/tags/vsdb" - -# CONVENIENT utility scripts and other environment parameters -export NCP="/bin/cp -p" -export NMV="/bin/mv" -export NLN="/bin/ln -sf" -export VERBOSE="YES" -export KEEPDATA="NO" -export CHGRP_RSTPROD="@CHGRP_RSTPROD@" -export CHGRP_CMD="@CHGRP_CMD@" -export NEMSIOGET="$HOMEgfs/exec/nemsio_get" -export NCDUMP="$NETCDF/bin/ncdump" -export NCLEN="$HOMEgfs/ush/getncdimlen" - -# Machine environment, jobs, and other utility scripts -export BASE_ENV="$HOMEgfs/env" -export BASE_JOB="$HOMEgfs/jobs/rocoto" - -# EXPERIMENT specific environment parameters -export SDATE=@SDATE@ -export FDATE=@FDATE@ -export EDATE=@EDATE@ -export EXP_WARM_START="@EXP_WARM_START@" -export assim_freq=6 -export PSLOT="@PSLOT@" -export EXPDIR="@EXPDIR@/$PSLOT" -export ROTDIR="@ROTDIR@/$PSLOT" -export ROTDIR_DUMP="YES" #Note: A value of "NO" does not currently work -export DUMP_SUFFIX="" -if [[ "$CDATE" -ge "2019092100" && "$CDATE" -le "2019110700" ]]; then - export DUMP_SUFFIX="p" # Use dumps from NCO GFS v15.3 parallel -fi -export RUNDIR="$STMP/RUNDIRS/$PSLOT" -export DATAROOT="$RUNDIR/$CDATE/$CDUMP" -export ARCDIR="$NOSCRUB/archive/$PSLOT" -export ICSDIR="@ICSDIR@" -export ATARDIR="/NCEPDEV/$HPSS_PROJECT/1year/$USER/$machine/scratch/$PSLOT" - -# Commonly defined parameters in JJOBS -export envir=${envir:-"prod"} -export NET="gfs" -export RUN=${RUN:-${CDUMP:-"gfs"}} -export COMINatmos=${ROTDIR}/${CDUMP}.${PDY}/${cyc}/atmos -export COMOUTatmos=${ROTDIR}/${CDUMP}.${PDY}/${cyc}/atmos -export COMINwave=${ROTDIR}/${CDUMP}.${PDY}/${cyc}/wave -export COMOUTwave=${ROTDIR}/${CDUMP}.${PDY}/${cyc}/wave - -export jlogfile="${EXPDIR}/logs/jlogfile" -export ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} -export LOGSCRIPT=${LOGSCRIPT:-""} -#export ERRSCRIPT=${ERRSCRIPT:-"err_chk"} -#export LOGSCRIPT=${LOGSCRIPT:-"startmsg"} -export REDOUT="1>" -export REDERR="2>" - -export SENDECF=${SENDECF:-"NO"} -export SENDCOM=${SENDCOM:-"NO"} -export SENDSDM=${SENDSDM:-"NO"} -export SENDDBN_NTC=${SENDDBN_NTC:-"NO"} -export SENDDBN=${SENDDBN:-"NO"} -export DBNROOT=${DBNROOT:-${UTILROOT}/fakedbn} - -# Resolution specific parameters -export LEVS=128 -export CASE="@CASECTL@" -export CASE_ENKF="@CASEENS@" - -# Surface cycle update frequency -if [[ "$CDUMP" == "gdas" ]] ; then - export FHCYC=1 - export FTSFS=10 -elif [[ "$CDUMP" == "gfs" ]] ; then - export FHCYC=24 -fi - -# Output frequency of the forecast model (for cycling) -export FHMIN=0 -export FHMAX=9 -export FHOUT=3 - -# Cycle to run EnKF (set to BOTH for both gfs and gdas) -export EUPD_CYC="gdas" - -# GFS cycle info -export gfs_cyc=@gfs_cyc@ # 0: no GFS cycle, 1: 00Z only, 2: 00Z and 12Z only, 4: all 4 cycles. - -# GFS output and frequency -export FHMIN_GFS=0 - -# AFE 2020-11-16 This is copied from LL's EFSOI config - probably should -# go in a new config file -#export FHMAX_GFS_00=384 -#export FHMAX_GFS_06=384 -#export FHMAX_GFS_12=384 -#export FHMAX_GFS_18=384 -export FHMAX_GFS_00=72 -export FHMAX_GFS_06=72 -export FHMAX_GFS_12=72 -export FHMAX_GFS_18=72 -export FHMAX_GFS=$(eval echo \${FHMAX_GFS_$cyc}) - -export FHOUT_GFS=3 -export FHMAX_HF_GFS=0 -export FHOUT_HF_GFS=1 -export ILPOST=1 # gempak output frequency up to F120 - -# GFS restart interval in hours -export restart_interval_gfs=0 - - -# I/O QUILTING, true--use Write Component; false--use GFDL FMS -# if quilting=true, choose OUTPUT_GRID as cubed_sphere_grid in netcdf or gaussian_grid -# if gaussian_grid, set OUTPUT_FILE for nemsio or netcdf -# WRITE_DOPOST=true, use inline POST -export QUILTING=".true." -export OUTPUT_GRID="gaussian_grid" -export OUTPUT_FILE="netcdf" -export WRITE_DOPOST=".true." - -# suffix options depending on file format -if [ $OUTPUT_FILE = "netcdf" ]; then - export SUFFIX=".nc" - export NEMSIO_IN=".false." - export NETCDF_IN=".true." -else - export SUFFIX=".nemsio" - export NEMSIO_IN=".true." - export NETCDF_IN=".false." -fi - -# IAU related parameters -export DOIAU="YES" # Enable 4DIAU for control with 3 increments -export IAUFHRS="3,6,9" -export IAU_FHROT=`echo $IAUFHRS | cut -c1` -export IAU_DELTHRS=6 -export IAU_OFFSET=6 -export DOIAU_ENKF=${DOIAU:-"YES"} # Enable 4DIAU for EnKF ensemble -export IAUFHRS_ENKF="3,6,9" -export IAU_DELTHRS_ENKF=6 -if [[ "$SDATE" = "$CDATE" && $EXP_WARM_START = ".false." ]] || [[ "$DOIAU" = "NO" ]] ; then # Cold starting or IAU off - export IAU_OFFSET=0 - export IAU_FHROT=0 -fi - -# Use Jacobians in eupd and thereby remove need to run eomg -export lobsdiag_forenkf=".true." - -# run GLDAS to spin up land ICs -export DO_GLDAS="YES" -export gldas_cyc=00 - -# run wave component -# AFE 2020-11-16 copied from LL's EFSOI configs, note -# says it was suggested by Kate. New config file? -#export DO_WAVE="YES" -export DO_WAVE="NO" -export WAVE_CDUMP="both" - -# AFE 2020-11-16 copied from LL's EFSOI configs -export DO_EFSOI=YES - -# Microphysics Options: 99-ZhaoCarr, 8-Thompson; 6-WSM6, 10-MG, 11-GFDL -export imp_physics=11 - -# Shared parameters -# Hybrid related -export DOHYBVAR="YES" -export NMEM_ENKF=@NMEM_ENKF@ -export SMOOTH_ENKF="NO" -export l4densvar=".true." -export lwrite4danl=".true." - -# EnKF output frequency -if [ $DOHYBVAR = "YES" ]; then - export FHMIN_ENKF=3 - export FHMAX_ENKF=9 - if [ $l4densvar = ".true." ]; then - export FHOUT=1 - export FHOUT_ENKF=1 - else - export FHOUT_ENKF=3 - fi -fi - -# turned on nsst in anal and/or fcst steps, and turn off rtgsst -export DONST="YES" -if [ $DONST = "YES" ]; then export FNTSFA=" "; fi - -# The switch to apply SST elevation correction or not -export nst_anl=.true. - -# Analysis increments to zero in CALCINCEXEC -export INCREMENTS_TO_ZERO="'liq_wat_inc','icmr_inc'" - -if [ $OUTPUT_FILE = "nemsio" ]; then - export DO_CALC_INCREMENT="YES" - export DO_CALC_ANALYSIS="NO" -fi - -# Stratospheric increments to zero -export INCVARS_ZERO_STRAT="'sphum_inc','liq_wat_inc','icmr_inc'" -export INCVARS_EFOLD="5" - -# Swith to generate netcdf or binary diagnostic files. If not specified, -# script default to binary diagnostic files. Set diagnostic file -# variables here since used in both DA and vrfy jobs -export netcdf_diag=".true." -export binary_diag=".false." - -# Verification options -export DO_METP="YES" # Run METPLUS jobs - set METPLUS settings in config.metp -export DO_VSDB="YES" # Run VSDB package - set VSDB settings in config.vrfy - -# Archiving options -export HPSSARCH="@HPSSARCH@" # save data to HPSS archive -export ARCH_CYC=00 # Archive data at this cycle for warm_start capability -export ARCH_WARMICFREQ=4 # Archive frequency in days for warm_start capability -export ARCH_FCSTICFREQ=1 # Archive frequency in days for gdas and gfs forecast-only capability - -export DELETE_COM_IN_ARCHIVE_JOB="YES" # NO=retain ROTDIR. YES default in arch.sh and earc.sh. - -echo "END: config.base" diff --git a/parm/config/config.efsoi b/parm/config/config.efsoi index 914498b0cc3..4e8f2c04bec 100755 --- a/parm/config/config.efsoi +++ b/parm/config/config.efsoi @@ -30,8 +30,9 @@ export lnsigcutoff=2.75 # ignored if modelspace_vloc=.true. export lobsdiag_forenkf=".true." # use jacobian. must be .true. if modelspace_vloc=".true." # need to specify .true. setting since config.anal sets to .false. -export EFSOIEXEC="/scratch1/NCEPDEV/da/Andrew.Eichmann/gsidev/afe-efsoi/GSI/exec/global_efsoi.x" -export ANAVINFO="/scratch1/NCEPDEV/da/Andrew.Eichmann/para_gfs/nutria/global_anavinfo_efsoi.l127.txt" +#export EFSOIEXEC="/scratch1/NCEPDEV/da/Andrew.Eichmann/gsidev/afe-efsoi/GSI/exec/global_efsoi.x" +#export ANAVINFO="/scratch1/NCEPDEV/da/Andrew.Eichmann/para_gfs/nutria/global_anavinfo_efsoi.l127.txt" +export ANAVINFO=${HOMEgfs}"/sorc/gsi.fd/util/EFSOI_Utilities/fix/global_anavinfo_efsoi.l127.txt" export NAM_ENKF="smoothparm=35," diff --git a/parm/config/config.eupdfsoi b/parm/config/config.eupdfsoi index 6042af311c7..fe7975d6cee 100755 --- a/parm/config/config.eupdfsoi +++ b/parm/config/config.eupdfsoi @@ -32,6 +32,6 @@ export lobsdiag_forenkf=".true." # use jacobian. must be .true. if modelspace_v export NAM_ENKF="smoothparm=35," -export ENKFEXEC=/scratch1/NCEPDEV/da/Andrew.Eichmann/gsidev/afe-efsoi/GSI/exec/enkf_gfs.x +#export ENKFEXEC=/scratch1/NCEPDEV/da/Andrew.Eichmann/gsidev/afe-efsoi/GSI/exec/enkf_gfs.x echo "END: config.eupdfsoi" diff --git a/parm/config/config.vrfy b/parm/config/config.vrfy index ea79d76d948..dcd5e68c607 100755 --- a/parm/config/config.vrfy +++ b/parm/config/config.vrfy @@ -20,8 +20,8 @@ export VSDB_STEP1="YES" # Populate VSDB database export VSDB_STEP2="NO" export VRFYG2OBS="YES" # Grid to observations, see note below if turning ON export VRFYPRCP="YES" # Precip threat scores -export VRFYRAD="YES" # Radiance data assimilation monitoring -export VRFYOZN="YES" # Ozone data assimilation monitoring +export VRFYRAD="NO" # Radiance data assimilation monitoring +export VRFYOZN="NO" # Ozone data assimilation monitoring export VRFYMINMON="YES" # GSI minimization monitoring export VRFYTRAK="YES" # Hurricane track verification export VRFYGENESIS="YES" # Cyclone genesis verification diff --git a/scripts/exgdas_efsoi.sh b/scripts/exgdas_efsoi.sh deleted file mode 100755 index 7aacf6f9891..00000000000 --- a/scripts/exgdas_efsoi.sh +++ /dev/null @@ -1,399 +0,0 @@ -#!/bin/ksh -################################################################################ -#### UNIX Script Documentation Block -# . . -# Script name: exgdas_efsoi.sh -# Script description: Runs efsoi to make observation sensitivities -# -# Author: Liaofan Lin/Andrew Eichmann Date: 2020-12-03 -# -# Abstract: This script runs the efsoi executable -# -# $Id$ -# -# Attributes: -# Language: POSIX shell -# Machine: Hera -# -################################################################################ - -# Set environment. -VERBOSE=${VERBOSE:-"YES"} -if [ $VERBOSE = "YES" ] ; then - echo $(date) EXECUTING $0 $* >&2 - set -x -fi - -# Directories. -pwd=$(pwd) - -# Utilities -NCP=${NCP:-"/bin/cp -p"} -NLN=${NLN:-"/bin/ln -sf"} -ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} -NEMSIOGET=${NEMSIOGET:-$NWPROD/utils/exec/nemsio_get} -NCLEN=${NCLEN:-$HOMEgfs/ush/getncdimlen} -USE_CFP=${USE_CFP:-"NO"} -CFP_MP=${CFP_MP:-"NO"} -nm="" -if [ $CFP_MP = "YES" ]; then - nm=0 -fi -APRUNCFP=${APRUNCFP:-""} -APRUN_ENKF=${APRUN_ENKF:-${APRUN:-""}} -NTHREADS_ENKF=${NTHREADS_ENKF:-${NTHREADS:-1}} - -# Executables -EFSOIEXEC=${EFSOIEXEC:-$HOMEgfs/exec/efsoi.x} - -# Cycling and forecast hour specific parameters -CDATE=${CDATE:-"2001010100"} - -# Filenames. -GPREFIX=${GPREFIX:-""} -GSUFFIX=${GSUFFIX:-$SUFFIX} -APREFIX=${APREFIX:-""} -ASUFFIX=${ASUFFIX:-$SUFFIX} -VPREFIX=${VPREFIX:-""} -VSUFFIX=${VSUFFIX:-$SUFFIX} - -SMOOTH_ENKF=${SMOOTH_ENKF:-"YES"} - -GBIASe=${GBIASe:-${APREFIX}abias_int.ensmean} -CNVSTAT=${CNVSTAT:-${APREFIX}cnvstat} # AFE not needed? -OZNSTAT=${OZNSTAT:-${APREFIX}oznstat} # AFE not needed? -RADSTAT=${RADSTAT:-${APREFIX}radstat} # AFE not needed? -#ENKFSTAT=${ENKFSTAT:-${APREFIX}enkfstat} -EFSOISTAT=${EFSOISTAT:-${APREFIX}efsoistat} - -#AFE for EFSOI -VERFANL=${VERFANL:-${VPREFIX}atmanl.ensres.nc} -INITANL=${INITANL:-${APREFIX}atmanl.ensres.nc} -FCSTLONG=${GPREFIX}atmf030.ensmean.nc -FCSTSHORT=${APREFIX}atmf024.ensmean.nc -#FCST6HRS=${PPREFIX}atmf006.ensmean.nc -OSENSEIN=osense_${CDATE}_init.dat -OSENSEOUT=osense_${CDATE}_final.dat - -# this needs to be set manually because params in enkf will default to fhr03 -fgfileprefixes=sfg_${CDATE}_fhr06_ - - - - -#analysise Namelst parameters -USE_CORRELATED_OBERRS=${USE_CORRELATED_OBERRS:-"NO"} -NMEM_ENKF=${NMEM_ENKF:-80} -NAM_ENKF=${NAM_ENKF:-""} -SATOBS_ENKF=${SATOBS_ENKF:-""} -OZOBS_ENKF=${OZOBS_ENKF:-""} -use_correlated_oberrs=${use_correlated_oberrs:-".false."} -if [ $USE_CORRELATED_OBERRS == "YES" ]; then - use_correlated_oberrs=".true." -fi -imp_physics=${imp_physics:-"99"} -#lupp=${lupp:-".true."} -lupp=${lupp:-".false."} # AFE to match old EFSOI -corrlength=${corrlength:-1250} -lnsigcutoff=${lnsigcutoff:-2.5} -analpertwt=${analpertwt:-0.85} -#readin_localization_enkf=${readin_localization_enkf:-".true."} -readin_localization_enkf=${readin_localization_enkf:-".false."} # AFE -reducedgrid=${reducedgrid:-".true."} -letkf_flag=${letkf_flag:-".false."} -getkf=${getkf:-".false."} -denkf=${denkf:-".false."} -nobsl_max=${nobsl_max:-10000} -lobsdiag_forenkf=${lobsdiag_forenkf:-".false."} -write_spread_diag=${write_spread_diag:-".false."} -cnvw_option=${cnvw_option:-".false."} -netcdf_diag=${netcdf_diag:-".true."} -modelspace_vloc=${modelspace_vloc:-".false."} # if true, 'vlocal_eig.dat' is needed -IAUFHRS_ENKF=${IAUFHRS_ENKF:-6} -DO_CALC_INCREMENT=${DO_CALC_INCREMENT:-"NO"} -INCREMENTS_TO_ZERO=${INCREMENTS_TO_ZERO:-"'NONE'"} - -################################################################################ -#ATMGES_ENSMEAN=$COMIN_GES_ENS/${GPREFIX}atmf006.ensmean${GSUFFIX} -ATMGES_ENSMEAN=$COMIN_ANL/$VERFANL -if [ $SUFFIX = ".nc" ]; then - LONB_ENKF=${LONB_ENKF:-$($NCLEN $ATMGES_ENSMEAN grid_xt)} # get LONB_ENKF - LATB_ENKF=${LATB_ENKF:-$($NCLEN $ATMGES_ENSMEAN grid_yt)} # get LATB_ENFK - LEVS_ENKF=${LEVS_ENKF:-$($NCLEN $ATMGES_ENSMEAN pfull)} # get LEVS_ENFK - use_gfs_ncio=".true." - use_gfs_nemsio=".false." - paranc=${paranc:-".true."} - if [ $DO_CALC_INCREMENT = "YES" ]; then - write_fv3_incr=".false." - else - write_fv3_incr=".true." - WRITE_INCR_ZERO="incvars_to_zero= $INCREMENTS_TO_ZERO," - fi -else - LEVS_ENKF=${LEVS_ENKF:-$($NEMSIOGET $ATMGES_ENSMEAN dimz | awk '{print $2}')} - LATB_ENKF=${LATB_ENKF:-$($NEMSIOGET $ATMGES_ENSMEAN dimy | awk '{print $2}')} - LONB_ENKF=${LONB_ENKF:-$($NEMSIOGET $ATMGES_ENSMEAN dimx | awk '{print $2}')} - use_gfs_ncio=".false." - use_gfs_nemsio=".true." - paranc=${paranc:-".false."} -fi -LATA_ENKF=${LATA_ENKF:-$LATB_ENKF} -LONA_ENKF=${LONA_ENKF:-$LONB_ENKF} - -SATANGL=${SATANGL:-${FIXgsi}/global_satangbias.txt} -SATINFO=${SATINFO:-${FIXgsi}/global_satinfo.txt} -CONVINFO=${CONVINFO:-${FIXgsi}/global_convinfo.txt} -OZINFO=${OZINFO:-${FIXgsi}/global_ozinfo.txt} -SCANINFO=${SCANINFO:-${FIXgsi}/global_scaninfo.txt} -HYBENSINFO=${HYBENSINFO:-${FIXgsi}/global_hybens_info.l${LEVS_ENKF}.txt} -ANAVINFO=${ANAVINFO:-${FIXgsi}/global_anavinfo.l${LEVS_ENKF}.txt} -VLOCALEIG=${VLOCALEIG:-${FIXgsi}/vlocal_eig_l${LEVS_ENKF}.dat} - -ENKF_SUFFIX="s" -[[ $SMOOTH_ENKF = "NO" ]] && ENKF_SUFFIX="" - -################################################################################ -# Preprocessing -mkdata=NO -if [ ! -d $DATA ]; then - mkdata=YES - mkdir -p $DATA -fi -cd $DATA || exit 99 - -################################################################################ -# Fixed files -$NLN $SATANGL satbias_angle -$NLN $SATINFO satinfo -$NLN $SCANINFO scaninfo -$NLN $CONVINFO convinfo -$NLN $OZINFO ozinfo -$NLN $HYBENSINFO hybens_info -$NLN $ANAVINFO anavinfo -$NLN $VLOCALEIG vlocal_eig.dat - -# Bias correction coefficients based on the ensemble mean -$NLN $COMOUT_ANL_ENSFSOI/$GBIASe satbias_in - -################################################################################ -# Ensemble guess, observational data and analyses/increments - -nfhrs=`echo $IAUFHRS_ENKF | sed 's/,/ /g'` -for imem in $(seq 1 $NMEM_ENKF); do - memchar="mem"$(printf %03i $imem) - mkdir ${memchar} - $NLN $COMOUT_ANL_ENSFSOI/$memchar/${APREFIX}atmf024.nc ${memchar} -done - -$NLN $COMIN_GES_ENS/${GPREFIX}atmf006.ensmean${GSUFFIX} sfg_${CDATE}_fhr06_ensmean -$NLN $COMIN_GES_ENS/${GPREFIX}atmf006.ensmean${GSUFFIX} sfg_${CDATE}_fhr03_ensmean - -# The following deals with different files with the same local name (assuming -# a 24hr EFSOI forecast): -# both are hybrid analyses from gdas - one from CDATE saved during the -# corresponding GDAS cycle in the efsoigdas tree to be used in -# the localization advection in EFSOI, the other from VDATE to be used -# for verification. - -# saved analysis to be used for localization advection -#$NLN ${COMIN_ANL}/${VERFANL} ${APREFIX}atmanl.ensmean.nc -$NLN $COMOUT_ANL_ENSFSOI/${INITANL} ${APREFIX}atmanl.ensmean.nc - -# verifying analysis -#$NLN ${COMIN_ANL}/${VERFANL} . -$NLN $ATMGES_ENSMEAN . - - -# forecasts -$NLN $COMIN_GES_ENS/$FCSTLONG . -$NLN $COMOUT_ANL_ENSFSOI/$FCSTSHORT . - -# inital osense file -# efsoi.x will read then clobber this -$NCP $COMOUT_ANL_ENSFSOI/$OSENSEIN osense_${CDATE}.dat - - - - -if [ $USE_CFP = "YES" ]; then - chmod 755 $DATA/mp_untar.sh - ncmd=$(cat $DATA/mp_untar.sh | wc -l) - if [ $ncmd -gt 0 ]; then - ncmd_max=$((ncmd < npe_node_max ? ncmd : npe_node_max)) - APRUNCFP=$(eval echo $APRUNCFP) - $APRUNCFP $DATA/mp_untar.sh - export ERR=$? - export err=$ERR - $ERRSCRIPT || exit 3 - fi -fi - -################################################################################ -# Create global_enkf namelist -# AFE changed from original: -# gdatehr, datehr, andataname added -# analpertwt and lnsigcutoff changed upstream -# numiter from 0 to 1 -# fso_cycling=.true., -# efsoi_flag=.true., -# wmoist=1.0,adrate=0.75 - - - -cat > enkf.nml << EOFnml -&nam_enkf - datestring="$CDATE",datapath="$DATA/", - gdatehr=$gcyc, - datehr=$cyc, - fgfileprefixes=$fgfileprefixes - andataname="$VERFANL", - analpertwtnh=${analpertwt},analpertwtsh=${analpertwt},analpertwttr=${analpertwt}, - covinflatemax=1.e2,covinflatemin=1,pseudo_rh=.true.,iassim_order=0, - corrlengthnh=${corrlength},corrlengthsh=${corrlength},corrlengthtr=${corrlength}, - lnsigcutoffnh=${lnsigcutoff},lnsigcutoffsh=${lnsigcutoff},lnsigcutofftr=${lnsigcutoff}, - lnsigcutoffpsnh=${lnsigcutoff},lnsigcutoffpssh=${lnsigcutoff},lnsigcutoffpstr=${lnsigcutoff}, - lnsigcutoffsatnh=${lnsigcutoff},lnsigcutoffsatsh=${lnsigcutoff},lnsigcutoffsattr=${lnsigcutoff}, - obtimelnh=1.e30,obtimelsh=1.e30,obtimeltr=1.e30, - saterrfact=1.0,numiter=1, - sprd_tol=1.e30,paoverpb_thresh=0.98, - nlons=$LONA_ENKF,nlats=$LATA_ENKF,nlevs=$LEVS_ENKF,nanals=$NMEM_ENKF, - deterministic=.true.,sortinc=.true.,lupd_satbiasc=.false., - reducedgrid=${reducedgrid},readin_localization=${readin_localization_enkf}., - use_gfs_nemsio=${use_gfs_nemsio},use_gfs_ncio=${use_gfs_ncio},imp_physics=$imp_physics,lupp=$lupp, - univaroz=.false.,adp_anglebc=.true.,angord=4,use_edges=.false.,emiss_bc=.true., - letkf_flag=${letkf_flag},nobsl_max=${nobsl_max},denkf=${denkf},getkf=${getkf}., - nhr_anal=${IAUFHRS_ENKF},nhr_state=${IAUFHRS_ENKF},use_qsatensmean=.true., - lobsdiag_forenkf=$lobsdiag_forenkf, - write_spread_diag=$write_spread_diag, - modelspace_vloc=$modelspace_vloc, - use_correlated_oberrs=${use_correlated_oberrs}, - netcdf_diag=$netcdf_diag,cnvw_option=$cnvw_option, - paranc=$paranc,write_fv3_incr=$write_fv3_incr, - efsoi_cycling=.true., - efsoi_flag=.true., - wmoist=1.0,adrate=0.75 - $WRITE_INCR_ZERO - $NAM_ENKF -/ -&satobs_enkf - sattypes_rad(1) = 'amsua_n15', dsis(1) = 'amsua_n15', - sattypes_rad(2) = 'amsua_n18', dsis(2) = 'amsua_n18', - sattypes_rad(3) = 'amsua_n19', dsis(3) = 'amsua_n19', - sattypes_rad(4) = 'amsub_n16', dsis(4) = 'amsub_n16', - sattypes_rad(5) = 'amsub_n17', dsis(5) = 'amsub_n17', - sattypes_rad(6) = 'amsua_aqua', dsis(6) = 'amsua_aqua', - sattypes_rad(7) = 'amsua_metop-a', dsis(7) = 'amsua_metop-a', - sattypes_rad(8) = 'airs_aqua', dsis(8) = 'airs_aqua', - sattypes_rad(9) = 'hirs3_n17', dsis(9) = 'hirs3_n17', - sattypes_rad(10)= 'hirs4_n19', dsis(10)= 'hirs4_n19', - sattypes_rad(11)= 'hirs4_metop-a', dsis(11)= 'hirs4_metop-a', - sattypes_rad(12)= 'mhs_n18', dsis(12)= 'mhs_n18', - sattypes_rad(13)= 'mhs_n19', dsis(13)= 'mhs_n19', - sattypes_rad(14)= 'mhs_metop-a', dsis(14)= 'mhs_metop-a', - sattypes_rad(15)= 'goes_img_g11', dsis(15)= 'imgr_g11', - sattypes_rad(16)= 'goes_img_g12', dsis(16)= 'imgr_g12', - sattypes_rad(17)= 'goes_img_g13', dsis(17)= 'imgr_g13', - sattypes_rad(18)= 'goes_img_g14', dsis(18)= 'imgr_g14', - sattypes_rad(19)= 'goes_img_g15', dsis(19)= 'imgr_g15', - sattypes_rad(20)= 'avhrr_n18', dsis(20)= 'avhrr3_n18', - sattypes_rad(21)= 'avhrr_metop-a', dsis(21)= 'avhrr3_metop-a', - sattypes_rad(22)= 'avhrr_n19', dsis(22)= 'avhrr3_n19', - sattypes_rad(23)= 'amsre_aqua', dsis(23)= 'amsre_aqua', - sattypes_rad(24)= 'ssmis_f16', dsis(24)= 'ssmis_f16', - sattypes_rad(25)= 'ssmis_f17', dsis(25)= 'ssmis_f17', - sattypes_rad(26)= 'ssmis_f18', dsis(26)= 'ssmis_f18', - sattypes_rad(27)= 'ssmis_f19', dsis(27)= 'ssmis_f19', - sattypes_rad(28)= 'ssmis_f20', dsis(28)= 'ssmis_f20', - sattypes_rad(29)= 'sndrd1_g11', dsis(29)= 'sndrD1_g11', - sattypes_rad(30)= 'sndrd2_g11', dsis(30)= 'sndrD2_g11', - sattypes_rad(31)= 'sndrd3_g11', dsis(31)= 'sndrD3_g11', - sattypes_rad(32)= 'sndrd4_g11', dsis(32)= 'sndrD4_g11', - sattypes_rad(33)= 'sndrd1_g12', dsis(33)= 'sndrD1_g12', - sattypes_rad(34)= 'sndrd2_g12', dsis(34)= 'sndrD2_g12', - sattypes_rad(35)= 'sndrd3_g12', dsis(35)= 'sndrD3_g12', - sattypes_rad(36)= 'sndrd4_g12', dsis(36)= 'sndrD4_g12', - sattypes_rad(37)= 'sndrd1_g13', dsis(37)= 'sndrD1_g13', - sattypes_rad(38)= 'sndrd2_g13', dsis(38)= 'sndrD2_g13', - sattypes_rad(39)= 'sndrd3_g13', dsis(39)= 'sndrD3_g13', - sattypes_rad(40)= 'sndrd4_g13', dsis(40)= 'sndrD4_g13', - sattypes_rad(41)= 'sndrd1_g14', dsis(41)= 'sndrD1_g14', - sattypes_rad(42)= 'sndrd2_g14', dsis(42)= 'sndrD2_g14', - sattypes_rad(43)= 'sndrd3_g14', dsis(43)= 'sndrD3_g14', - sattypes_rad(44)= 'sndrd4_g14', dsis(44)= 'sndrD4_g14', - sattypes_rad(45)= 'sndrd1_g15', dsis(45)= 'sndrD1_g15', - sattypes_rad(46)= 'sndrd2_g15', dsis(46)= 'sndrD2_g15', - sattypes_rad(47)= 'sndrd3_g15', dsis(47)= 'sndrD3_g15', - sattypes_rad(48)= 'sndrd4_g15', dsis(48)= 'sndrD4_g15', - sattypes_rad(49)= 'iasi_metop-a', dsis(49)= 'iasi_metop-a', - sattypes_rad(50)= 'seviri_m08', dsis(50)= 'seviri_m08', - sattypes_rad(51)= 'seviri_m09', dsis(51)= 'seviri_m09', - sattypes_rad(52)= 'seviri_m10', dsis(52)= 'seviri_m10', - sattypes_rad(53)= 'seviri_m11', dsis(53)= 'seviri_m11', - sattypes_rad(54)= 'amsua_metop-b', dsis(54)= 'amsua_metop-b', - sattypes_rad(55)= 'hirs4_metop-b', dsis(55)= 'hirs4_metop-b', - sattypes_rad(56)= 'mhs_metop-b', dsis(56)= 'mhs_metop-b', - sattypes_rad(57)= 'iasi_metop-b', dsis(57)= 'iasi_metop-b', - sattypes_rad(58)= 'avhrr_metop-b', dsis(58)= 'avhrr3_metop-b', - sattypes_rad(59)= 'atms_npp', dsis(59)= 'atms_npp', - sattypes_rad(60)= 'atms_n20', dsis(60)= 'atms_n20', - sattypes_rad(61)= 'cris_npp', dsis(61)= 'cris_npp', - sattypes_rad(62)= 'cris-fsr_npp', dsis(62)= 'cris-fsr_npp', - sattypes_rad(63)= 'cris-fsr_n20', dsis(63)= 'cris-fsr_n20', - sattypes_rad(64)= 'gmi_gpm', dsis(64)= 'gmi_gpm', - sattypes_rad(65)= 'saphir_meghat', dsis(65)= 'saphir_meghat', - sattypes_rad(66)= 'amsua_metop-c', dsis(66)= 'amsua_metop-c', - sattypes_rad(67)= 'mhs_metop-c', dsis(67)= 'mhs_metop-c', - sattypes_rad(68)= 'ahi_himawari8', dsis(68)= 'ahi_himawari8', - sattypes_rad(69)= 'abi_g16', dsis(69)= 'abi_g16', - sattypes_rad(70)= 'abi_g17', dsis(70)= 'abi_g17', - $SATOBS_ENKF -/ -&ozobs_enkf - sattypes_oz(1) = 'sbuv2_n16', - sattypes_oz(2) = 'sbuv2_n17', - sattypes_oz(3) = 'sbuv2_n18', - sattypes_oz(4) = 'sbuv2_n19', - sattypes_oz(5) = 'omi_aura', - sattypes_oz(6) = 'gome_metop-a', - sattypes_oz(7) = 'gome_metop-b', - sattypes_oz(8) = 'mls30_aura', - sattypes_oz(9) = 'ompsnp_npp', - sattypes_oz(10) = 'ompstc8_npp', - $OZOBS_ENKF -/ -EOFnml - -################################################################################ -# Run enkf update - -export OMP_NUM_THREADS=$NTHREADS_ENKF -#export pgm=$ENKFEXEC AFE -export pgm=$EFSOIEXEC -. prep_step - -#$NCP $ENKFEXEC $DATA AFE -#$APRUN_ENKF ${DATA}/$(basename $ENKFEXEC) 1>stdout 2>stderr AFE -$NCP $EFSOIEXEC $DATA -$APRUN_ENKF ${DATA}/$(basename $EFSOIEXEC) 1>stdout 2>stderr -rc=$? - -export ERR=$rc -export err=$ERR -$ERRSCRIPT || exit 2 - -# Cat runtime output files. -cat stdout stderr > $COMOUT_ANL_ENSFSOI/$EFSOISTAT - -$NCP osense_${CDATE}.dat $COMOUT_ANL_ENSFSOI/$OSENSEOUT -$NCP osense_${CDATE}.dat $OSENSE_SAVE_DIR/$OSENSEOUT - -################################################################################ -# Postprocessing - -cd $pwd -[[ $mkdata = "YES" ]] && rm -rf $DATA -set +x -if [ $VERBOSE = "YES" ]; then - echo $(date) EXITING $0 with return code $err >&2 -fi -exit $err diff --git a/scripts/exgdas_efsoi_update.sh b/scripts/exgdas_efsoi_update.sh deleted file mode 100755 index 94c61c64588..00000000000 --- a/scripts/exgdas_efsoi_update.sh +++ /dev/null @@ -1,415 +0,0 @@ -#!/bin/ksh -################################################################################ -#### UNIX Script Documentation Block -# . . -# Script name: exgdas_efsoi_update.sh -# Script description: Make global_enkf update for efsoi -# -# Author: Rahul Mahajan Org: NCEP/EMC Date: 2017-03-02 -# Author: Liaofan Lin/Andrew Eichmann Date: 2020-12-03 -# -# Abstract: This script runs the global_enkf update for efsoi -# -# $Id$ -# -# Attributes: -# Language: POSIX shell -# Machine: WCOSS-Cray/Theia -# -################################################################################ - -# Set environment. -VERBOSE=${VERBOSE:-"YES"} -if [ $VERBOSE = "YES" ] ; then - echo $(date) EXECUTING $0 $* >&2 - set -x -fi - -# Directories. -pwd=$(pwd) - -# Utilities -NCP=${NCP:-"/bin/cp -p"} -NLN=${NLN:-"/bin/ln -sf"} -ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} -NEMSIOGET=${NEMSIOGET:-$NWPROD/utils/exec/nemsio_get} -NCLEN=${NCLEN:-$HOMEgfs/ush/getncdimlen} -USE_CFP=${USE_CFP:-"NO"} -CFP_MP=${CFP_MP:-"NO"} -nm="" -if [ $CFP_MP = "YES" ]; then - nm=0 -fi -APRUNCFP=${APRUNCFP:-""} -APRUN_ENKF=${APRUN_ENKF:-${APRUN:-""}} -NTHREADS_ENKF=${NTHREADS_ENKF:-${NTHREADS:-1}} - -# Executables -ENKFEXEC=${ENKFEXEC:-$HOMEgfs/exec/global_enkf.x} - -# Cycling and forecast hour specific parameters -CDATE=${CDATE:-"2001010100"} - -# Filenames. -GPREFIX=${GPREFIX:-""} -GSUFFIX=${GSUFFIX:-$SUFFIX} -APREFIX=${APREFIX:-""} -ASUFFIX=${ASUFFIX:-$SUFFIX} - -SMOOTH_ENKF=${SMOOTH_ENKF:-"YES"} - -GBIASe=${GBIASe:-${APREFIX}abias_int.ensmean} -ATMANL_GSI_ENSRES=$COMINatmos/${APREFIX}atmanl.ensres$ASUFFIX -CNVSTAT=${CNVSTAT:-${APREFIX}cnvstat} -OZNSTAT=${OZNSTAT:-${APREFIX}oznstat} -RADSTAT=${RADSTAT:-${APREFIX}radstat} -ENKFSTAT=${ENKFSTAT:-${APREFIX}enkfstat} - -# Namelist parameters -USE_CORRELATED_OBERRS=${USE_CORRELATED_OBERRS:-"NO"} -NMEM_ENKF=${NMEM_ENKF:-80} -NAM_ENKF=${NAM_ENKF:-""} -SATOBS_ENKF=${SATOBS_ENKF:-""} -OZOBS_ENKF=${OZOBS_ENKF:-""} -use_correlated_oberrs=${use_correlated_oberrs:-".false."} -if [ $USE_CORRELATED_OBERRS == "YES" ]; then - use_correlated_oberrs=".true." -fi -imp_physics=${imp_physics:-"99"} -lupp=${lupp:-".true."} -corrlength=${corrlength:-1250} -lnsigcutoff=${lnsigcutoff:-2.5} -analpertwt=${analpertwt:-0.85} -readin_localization_enkf=${readin_localization_enkf:-".true."} -reducedgrid=${reducedgrid:-".true."} -letkf_flag=${letkf_flag:-".false."} -getkf=${getkf:-".false."} -denkf=${denkf:-".false."} -nobsl_max=${nobsl_max:-10000} -lobsdiag_forenkf=${lobsdiag_forenkf:-".false."} -write_spread_diag=${write_spread_diag:-".false."} -cnvw_option=${cnvw_option:-".false."} -netcdf_diag=${netcdf_diag:-".true."} -modelspace_vloc=${modelspace_vloc:-".false."} # if true, 'vlocal_eig.dat' is needed -IAUFHRS_ENKF=${IAUFHRS_ENKF:-6} -DO_CALC_INCREMENT=${DO_CALC_INCREMENT:-"NO"} -INCREMENTS_TO_ZERO=${INCREMENTS_TO_ZERO:-"'NONE'"} - -################################################################################ -ATMGES_ENSMEAN=$COMIN_GES_ENS/${GPREFIX}atmf006.ensmean${GSUFFIX} -if [ $SUFFIX = ".nc" ]; then - LONB_ENKF=${LONB_ENKF:-$($NCLEN $ATMGES_ENSMEAN grid_xt)} # get LONB_ENKF - LATB_ENKF=${LATB_ENKF:-$($NCLEN $ATMGES_ENSMEAN grid_yt)} # get LATB_ENFK - LEVS_ENKF=${LEVS_ENKF:-$($NCLEN $ATMGES_ENSMEAN pfull)} # get LEVS_ENFK - use_gfs_ncio=".true." - use_gfs_nemsio=".false." - paranc=${paranc:-".true."} - if [ $DO_CALC_INCREMENT = "YES" ]; then - write_fv3_incr=".false." - else - write_fv3_incr=".true." - WRITE_INCR_ZERO="incvars_to_zero= $INCREMENTS_TO_ZERO," - fi -else - LEVS_ENKF=${LEVS_ENKF:-$($NEMSIOGET $ATMGES_ENSMEAN dimz | awk '{print $2}')} - LATB_ENKF=${LATB_ENKF:-$($NEMSIOGET $ATMGES_ENSMEAN dimy | awk '{print $2}')} - LONB_ENKF=${LONB_ENKF:-$($NEMSIOGET $ATMGES_ENSMEAN dimx | awk '{print $2}')} - use_gfs_ncio=".false." - use_gfs_nemsio=".true." - paranc=${paranc:-".false."} -fi -LATA_ENKF=${LATA_ENKF:-$LATB_ENKF} -LONA_ENKF=${LONA_ENKF:-$LONB_ENKF} - -SATANGL=${SATANGL:-${FIXgsi}/global_satangbias.txt} -SATINFO=${SATINFO:-${FIXgsi}/global_satinfo.txt} -CONVINFO=${CONVINFO:-${FIXgsi}/global_convinfo.txt} -OZINFO=${OZINFO:-${FIXgsi}/global_ozinfo.txt} -SCANINFO=${SCANINFO:-${FIXgsi}/global_scaninfo.txt} -HYBENSINFO=${HYBENSINFO:-${FIXgsi}/global_hybens_info.l${LEVS_ENKF}.txt} -ANAVINFO=${ANAVINFO:-${FIXgsi}/global_anavinfo.l${LEVS_ENKF}.txt} -VLOCALEIG=${VLOCALEIG:-${FIXgsi}/vlocal_eig_l${LEVS_ENKF}.dat} - -ENKF_SUFFIX="s" -[[ $SMOOTH_ENKF = "NO" ]] && ENKF_SUFFIX="" - -################################################################################ -# Preprocessing -mkdata=NO -if [ ! -d $DATA ]; then - mkdata=YES - mkdir -p $DATA -fi -cd $DATA || exit 99 - -################################################################################ -# Fixed files -$NLN $SATANGL satbias_angle -$NLN $SATINFO satinfo -$NLN $SCANINFO scaninfo -$NLN $CONVINFO convinfo -$NLN $OZINFO ozinfo -$NLN $HYBENSINFO hybens_info -$NLN $ANAVINFO anavinfo -$NLN $VLOCALEIG vlocal_eig.dat - -# Bias correction coefficients based on the ensemble mean -$NLN $COMOUT_ANL_ENS/$GBIASe satbias_in - -################################################################################ - -if [ $USE_CFP = "YES" ]; then - [[ -f $DATA/untar.sh ]] && rm $DATA/untar.sh - [[ -f $DATA/mp_untar.sh ]] && rm $DATA/mp_untar.sh - set +x - cat > $DATA/untar.sh << EOFuntar -#!/bin/sh -memchar=\$1 -flist="$CNVSTAT $OZNSTAT $RADSTAT" -for ftype in \$flist; do - if [ \$memchar = "ensmean" ]; then - fname=$COMOUT_ANL_ENS/\${ftype}.ensmean - else - fname=$COMOUT_ANL_ENS/\$memchar/\$ftype - fi - tar -xvf \$fname -done -EOFuntar - set -x - chmod 755 $DATA/untar.sh -fi - -################################################################################ -# Ensemble guess, observational data and analyses/increments - -flist="$CNVSTAT $OZNSTAT $RADSTAT" -if [ $USE_CFP = "YES" ]; then - echo "$nm $DATA/untar.sh ensmean" | tee -a $DATA/mp_untar.sh - if [ ${CFP_MP:-"NO"} = "YES" ]; then - nm=$((nm+1)) - fi -else - for ftype in $flist; do - fname=$COMOUT_ANL_ENS/${ftype}.ensmean - tar -xvf $fname - done -fi -nfhrs=`echo $IAUFHRS_ENKF | sed 's/,/ /g'` -for imem in $(seq 1 $NMEM_ENKF); do - memchar="mem"$(printf %03i $imem) - if [ $lobsdiag_forenkf = ".false." ]; then - if [ $USE_CFP = "YES" ]; then - echo "$nm $DATA/untar.sh $memchar" | tee -a $DATA/mp_untar.sh - if [ ${CFP_MP:-"NO"} = "YES" ]; then - nm=$((nm+1)) - fi - else - for ftype in $flist; do - fname=$COMOUT_ANL_ENS/$memchar/$ftype - tar -xvf $fname - done - fi - fi - mkdir -p $COMOUT_ANL_ENSFSOI/$memchar - for FHR in $nfhrs; do - $NLN $COMIN_GES_ENS/$memchar/${GPREFIX}atmf00${FHR}${ENKF_SUFFIX}${GSUFFIX} sfg_${CDATE}_fhr0${FHR}_${memchar} - if [ $cnvw_option = ".true." ]; then - $NLN $COMIN_GES_ENS/$memchar/${GPREFIX}sfcf00${FHR}${GSUFFIX} sfgsfc_${CDATE}_fhr0${FHR}_${memchar} - fi - if [ $FHR -eq 6 ]; then - if [ $DO_CALC_INCREMENT = "YES" ]; then - #$NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atmanl${ASUFFIX} sanl_${CDATE}_fhr0${FHR}_${memchar} - $NLN $COMOUT_ANL_ENSFSOI/$memchar/${APREFIX}atmanl${ASUFFIX} sanl_${CDATE}_fhr0${FHR}_ni${memchar} - else - #$NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atminc${ASUFFIX} incr_${CDATE}_fhr0${FHR}_${memchar} - $NLN $COMOUT_ANL_ENSFSOI/$memchar/${APREFIX}atminc${ASUFFIX} incr_${CDATE}_fhr0${FHR}_ni${memchar} - fi - else - if [ $DO_CALC_INCREMENT = "YES" ]; then - #$NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atma00${FHR}${ASUFFIX} sanl_${CDATE}_fhr0${FHR}_${memchar} - $NLN $COMOUT_ANL_ENSFSOI/$memchar/${APREFIX}atma00${FHR}${ASUFFIX} sanl_${CDATE}_fhr0${FHR}_ni${memchar} - else - #$NLN $COMOUT_ANL_ENS/$memchar/${APREFIX}atmi00${FHR}${ASUFFIX} incr_${CDATE}_fhr0${FHR}_${memchar} - $NLN $COMOUT_ANL_ENSFSOI/$memchar/${APREFIX}atmi00${FHR}${ASUFFIX} incr_${CDATE}_fhr0${FHR}_ni${memchar} - fi - fi - done -done - -# Ensemble mean guess -for FHR in $nfhrs; do - $NLN $COMIN_GES_ENS/${GPREFIX}atmf00${FHR}.ensmean${GSUFFIX} sfg_${CDATE}_fhr0${FHR}_ensmean - if [ $cnvw_option = ".true." ]; then - $NLN $COMIN_GES_ENS/${GPREFIX}sfcf00${FHR}.ensmean${GSUFFIX} sfgsfc_${CDATE}_fhr0${FHR}_ensmean - fi -done - -if [ $USE_CFP = "YES" ]; then - chmod 755 $DATA/mp_untar.sh - ncmd=$(cat $DATA/mp_untar.sh | wc -l) - if [ $ncmd -gt 0 ]; then - ncmd_max=$((ncmd < npe_node_max ? ncmd : npe_node_max)) - APRUNCFP=$(eval echo $APRUNCFP) - $APRUNCFP $DATA/mp_untar.sh - export ERR=$? - export err=$ERR - $ERRSCRIPT || exit 3 - fi -fi - -# Keep osense data in comrot -$NLN $COMOUT_ANL_ENSFSOI/osense_${CDATE}_init.dat osense_${CDATE}.dat - -################################################################################ -# Create global_enkf namelist -cat > enkf.nml << EOFnml -&nam_enkf - datestring="$CDATE",datapath="$DATA/", - analpertwtnh=${analpertwt},analpertwtsh=${analpertwt},analpertwttr=${analpertwt}, - covinflatemax=1.e2,covinflatemin=1,pseudo_rh=.true.,iassim_order=0, - corrlengthnh=${corrlength},corrlengthsh=${corrlength},corrlengthtr=${corrlength}, - lnsigcutoffnh=${lnsigcutoff},lnsigcutoffsh=${lnsigcutoff},lnsigcutofftr=${lnsigcutoff}, - lnsigcutoffpsnh=${lnsigcutoff},lnsigcutoffpssh=${lnsigcutoff},lnsigcutoffpstr=${lnsigcutoff}, - lnsigcutoffsatnh=${lnsigcutoff},lnsigcutoffsatsh=${lnsigcutoff},lnsigcutoffsattr=${lnsigcutoff}, - obtimelnh=1.e30,obtimelsh=1.e30,obtimeltr=1.e30, - saterrfact=1.0,numiter=0, - sprd_tol=1.e30,paoverpb_thresh=0.98, - nlons=$LONA_ENKF,nlats=$LATA_ENKF,nlevs=$LEVS_ENKF,nanals=$NMEM_ENKF, - deterministic=.true.,sortinc=.true.,lupd_satbiasc=.false., - reducedgrid=${reducedgrid},readin_localization=${readin_localization_enkf}., - use_gfs_nemsio=${use_gfs_nemsio},use_gfs_ncio=${use_gfs_ncio},imp_physics=$imp_physics,lupp=$lupp, - univaroz=.false.,adp_anglebc=.true.,angord=4,use_edges=.false.,emiss_bc=.true., - letkf_flag=${letkf_flag},nobsl_max=${nobsl_max},denkf=${denkf},getkf=${getkf}., - nhr_anal=${IAUFHRS_ENKF},nhr_state=${IAUFHRS_ENKF},use_qsatensmean=.true., - lobsdiag_forenkf=$lobsdiag_forenkf, - write_spread_diag=$write_spread_diag, - modelspace_vloc=$modelspace_vloc, - use_correlated_oberrs=${use_correlated_oberrs}, - netcdf_diag=$netcdf_diag,cnvw_option=$cnvw_option, - paranc=$paranc,write_fv3_incr=$write_fv3_incr, - efsoi_cycling=.true., - lupd_obspace_serial=.true., - $WRITE_INCR_ZERO - $NAM_ENKF -/ -&satobs_enkf - sattypes_rad(1) = 'amsua_n15', dsis(1) = 'amsua_n15', - sattypes_rad(2) = 'amsua_n18', dsis(2) = 'amsua_n18', - sattypes_rad(3) = 'amsua_n19', dsis(3) = 'amsua_n19', - sattypes_rad(4) = 'amsub_n16', dsis(4) = 'amsub_n16', - sattypes_rad(5) = 'amsub_n17', dsis(5) = 'amsub_n17', - sattypes_rad(6) = 'amsua_aqua', dsis(6) = 'amsua_aqua', - sattypes_rad(7) = 'amsua_metop-a', dsis(7) = 'amsua_metop-a', - sattypes_rad(8) = 'airs_aqua', dsis(8) = 'airs_aqua', - sattypes_rad(9) = 'hirs3_n17', dsis(9) = 'hirs3_n17', - sattypes_rad(10)= 'hirs4_n19', dsis(10)= 'hirs4_n19', - sattypes_rad(11)= 'hirs4_metop-a', dsis(11)= 'hirs4_metop-a', - sattypes_rad(12)= 'mhs_n18', dsis(12)= 'mhs_n18', - sattypes_rad(13)= 'mhs_n19', dsis(13)= 'mhs_n19', - sattypes_rad(14)= 'mhs_metop-a', dsis(14)= 'mhs_metop-a', - sattypes_rad(15)= 'goes_img_g11', dsis(15)= 'imgr_g11', - sattypes_rad(16)= 'goes_img_g12', dsis(16)= 'imgr_g12', - sattypes_rad(17)= 'goes_img_g13', dsis(17)= 'imgr_g13', - sattypes_rad(18)= 'goes_img_g14', dsis(18)= 'imgr_g14', - sattypes_rad(19)= 'goes_img_g15', dsis(19)= 'imgr_g15', - sattypes_rad(20)= 'avhrr_n18', dsis(20)= 'avhrr3_n18', - sattypes_rad(21)= 'avhrr_metop-a', dsis(21)= 'avhrr3_metop-a', - sattypes_rad(22)= 'avhrr_n19', dsis(22)= 'avhrr3_n19', - sattypes_rad(23)= 'amsre_aqua', dsis(23)= 'amsre_aqua', - sattypes_rad(24)= 'ssmis_f16', dsis(24)= 'ssmis_f16', - sattypes_rad(25)= 'ssmis_f17', dsis(25)= 'ssmis_f17', - sattypes_rad(26)= 'ssmis_f18', dsis(26)= 'ssmis_f18', - sattypes_rad(27)= 'ssmis_f19', dsis(27)= 'ssmis_f19', - sattypes_rad(28)= 'ssmis_f20', dsis(28)= 'ssmis_f20', - sattypes_rad(29)= 'sndrd1_g11', dsis(29)= 'sndrD1_g11', - sattypes_rad(30)= 'sndrd2_g11', dsis(30)= 'sndrD2_g11', - sattypes_rad(31)= 'sndrd3_g11', dsis(31)= 'sndrD3_g11', - sattypes_rad(32)= 'sndrd4_g11', dsis(32)= 'sndrD4_g11', - sattypes_rad(33)= 'sndrd1_g12', dsis(33)= 'sndrD1_g12', - sattypes_rad(34)= 'sndrd2_g12', dsis(34)= 'sndrD2_g12', - sattypes_rad(35)= 'sndrd3_g12', dsis(35)= 'sndrD3_g12', - sattypes_rad(36)= 'sndrd4_g12', dsis(36)= 'sndrD4_g12', - sattypes_rad(37)= 'sndrd1_g13', dsis(37)= 'sndrD1_g13', - sattypes_rad(38)= 'sndrd2_g13', dsis(38)= 'sndrD2_g13', - sattypes_rad(39)= 'sndrd3_g13', dsis(39)= 'sndrD3_g13', - sattypes_rad(40)= 'sndrd4_g13', dsis(40)= 'sndrD4_g13', - sattypes_rad(41)= 'sndrd1_g14', dsis(41)= 'sndrD1_g14', - sattypes_rad(42)= 'sndrd2_g14', dsis(42)= 'sndrD2_g14', - sattypes_rad(43)= 'sndrd3_g14', dsis(43)= 'sndrD3_g14', - sattypes_rad(44)= 'sndrd4_g14', dsis(44)= 'sndrD4_g14', - sattypes_rad(45)= 'sndrd1_g15', dsis(45)= 'sndrD1_g15', - sattypes_rad(46)= 'sndrd2_g15', dsis(46)= 'sndrD2_g15', - sattypes_rad(47)= 'sndrd3_g15', dsis(47)= 'sndrD3_g15', - sattypes_rad(48)= 'sndrd4_g15', dsis(48)= 'sndrD4_g15', - sattypes_rad(49)= 'iasi_metop-a', dsis(49)= 'iasi_metop-a', - sattypes_rad(50)= 'seviri_m08', dsis(50)= 'seviri_m08', - sattypes_rad(51)= 'seviri_m09', dsis(51)= 'seviri_m09', - sattypes_rad(52)= 'seviri_m10', dsis(52)= 'seviri_m10', - sattypes_rad(53)= 'seviri_m11', dsis(53)= 'seviri_m11', - sattypes_rad(54)= 'amsua_metop-b', dsis(54)= 'amsua_metop-b', - sattypes_rad(55)= 'hirs4_metop-b', dsis(55)= 'hirs4_metop-b', - sattypes_rad(56)= 'mhs_metop-b', dsis(56)= 'mhs_metop-b', - sattypes_rad(57)= 'iasi_metop-b', dsis(57)= 'iasi_metop-b', - sattypes_rad(58)= 'avhrr_metop-b', dsis(58)= 'avhrr3_metop-b', - sattypes_rad(59)= 'atms_npp', dsis(59)= 'atms_npp', - sattypes_rad(60)= 'atms_n20', dsis(60)= 'atms_n20', - sattypes_rad(61)= 'cris_npp', dsis(61)= 'cris_npp', - sattypes_rad(62)= 'cris-fsr_npp', dsis(62)= 'cris-fsr_npp', - sattypes_rad(63)= 'cris-fsr_n20', dsis(63)= 'cris-fsr_n20', - sattypes_rad(64)= 'gmi_gpm', dsis(64)= 'gmi_gpm', - sattypes_rad(65)= 'saphir_meghat', dsis(65)= 'saphir_meghat', - sattypes_rad(66)= 'amsua_metop-c', dsis(66)= 'amsua_metop-c', - sattypes_rad(67)= 'mhs_metop-c', dsis(67)= 'mhs_metop-c', - sattypes_rad(68)= 'ahi_himawari8', dsis(68)= 'ahi_himawari8', - sattypes_rad(69)= 'abi_g16', dsis(69)= 'abi_g16', - sattypes_rad(70)= 'abi_g17', dsis(70)= 'abi_g17', - $SATOBS_ENKF -/ -&ozobs_enkf - sattypes_oz(1) = 'sbuv2_n16', - sattypes_oz(2) = 'sbuv2_n17', - sattypes_oz(3) = 'sbuv2_n18', - sattypes_oz(4) = 'sbuv2_n19', - sattypes_oz(5) = 'omi_aura', - sattypes_oz(6) = 'gome_metop-a', - sattypes_oz(7) = 'gome_metop-b', - sattypes_oz(8) = 'mls30_aura', - sattypes_oz(9) = 'ompsnp_npp', - sattypes_oz(10) = 'ompstc8_npp', - $OZOBS_ENKF -/ -EOFnml - -################################################################################ -# Run enkf update - -export OMP_NUM_THREADS=$NTHREADS_ENKF -export pgm=$ENKFEXEC -. prep_step - -$NCP $ENKFEXEC $DATA -$APRUN_ENKF ${DATA}/$(basename $ENKFEXEC) 1>stdout 2>stderr -rc=$? - -export ERR=$rc -export err=$ERR -$ERRSCRIPT || exit 2 - -# save for EFSOI task -$NCP $COMOUT_ANL_ENS/$GBIASe $COMOUT_ANL_ENSFSOI -# save for EFSOI localization advection -$NCP $ATMANL_GSI_ENSRES $COMOUT_ANL_ENSFSOI - -# Cat runtime output files. -cat stdout stderr > $COMOUT_ANL_ENSFSOI/$ENKFSTAT - -################################################################################ -# Postprocessing - -cd $pwd -[[ $mkdata = "YES" ]] && rm -rf $DATA -set +x -if [ $VERBOSE = "YES" ]; then - echo $(date) EXITING $0 with return code $err >&2 -fi -exit $err diff --git a/sorc/checkout.sh b/sorc/checkout.sh index 32daff82a94..4b68303e9c4 100755 --- a/sorc/checkout.sh +++ b/sorc/checkout.sh @@ -45,9 +45,11 @@ fi echo gsi checkout ... if [[ ! -d gsi.fd ]] ; then rm -f ${topdir}/checkout-gsi.log - git clone --recursive https://github.com/NOAA-EMC/GSI.git gsi.fd >> ${topdir}/checkout-gsi.log 2>&1 +# git clone --recursive https://github.com/NOAA-EMC/GSI.git gsi.fd >> ${topdir}/checkout-gsi.log 2>&1 + git clone --recursive git@github.com:AndrewEichmann-NOAA/GSI.git gsi.fd >> ${topdir}/checkout-gsi.log 2>&1 cd gsi.fd - git checkout gfsda.v16.1.0 +# git checkout gfsda.v16.1.0 + git checkout EXP-efso_fv3 git submodule update cd ${topdir} else diff --git a/sorc/link_fv3gfs.sh b/sorc/link_fv3gfs.sh index ae4494d83ef..06cd78a0fb3 100755 --- a/sorc/link_fv3gfs.sh +++ b/sorc/link_fv3gfs.sh @@ -124,6 +124,12 @@ cd ${pwd}/../jobs ||exit 8 $LINK ../sorc/gsi.fd/jobs/JGDAS_ENKF_FCST . $LINK ../sorc/gsi.fd/jobs/JGDAS_ENKF_POST . $LINK ../sorc/gsi.fd/jobs/JGDAS_ATMOS_CHGRES_FORENKF . + $LINK ../sorc/gsi.fd/jobs/JGDAS_EFSOI_UPDATE . + $LINK ../sorc/gsi.fd/jobs/JGDAS_EFSOI_ECEN . + $LINK ../sorc/gsi.fd/jobs/JGDAS_EFSOI_SFC . + $LINK ../sorc/gsi.fd/jobs/JGDAS_EFSOI_FCST . + $LINK ../sorc/gsi.fd/jobs/JGDAS_EFSOI_POST . + $LINK ../sorc/gsi.fd/jobs/JGDAS_EFSOI . cd ${pwd}/../scripts ||exit 8 $LINK ../sorc/gsi.fd/scripts/exglobal_atmos_analysis.sh . $LINK ../sorc/gsi.fd/scripts/exglobal_atmos_analysis_calc.sh . @@ -135,6 +141,8 @@ cd ${pwd}/../scripts ||exit 8 $LINK ../sorc/gsi.fd/scripts/exgdas_enkf_fcst.sh . $LINK ../sorc/gsi.fd/scripts/exgdas_enkf_post.sh . $LINK ../sorc/gsi.fd/scripts/exgdas_atmos_chgres_forenkf.sh . + $LINK ../sorc/gsi.fd/scripts/exgdas_efsoi_update.sh . + $LINK ../sorc/gsi.fd/scripts/exgdas_efsoi.sh . cd ${pwd}/../fix ||exit 8 [[ -d fix_gsi ]] && rm -rf fix_gsi $LINK ../sorc/gsi.fd/fix fix_gsi @@ -241,7 +249,7 @@ done for gsiexe in calc_analysis.x calc_increment_ens_ncio.x calc_increment_ens.x \ getsfcensmeanp.x getsigensmeanp_smooth.x getsigensstatp.x global_enkf.x global_gsi.x \ - interp_inc.x ncdiag_cat.x oznmon_horiz.x oznmon_time.x radmon_angle.x \ + interp_inc.x ncdiag_cat.x oznmon_horiz.x oznmon_time.x radmon_angle.x global_efsoi.x \ radmon_bcoef.x radmon_bcor.x radmon_time.x recentersigp.x;do [[ -s $gsiexe ]] && rm -f $gsiexe $LINK ../sorc/gsi.fd/exec/$gsiexe . From fd837ca5ffd870f4511984eb0b17e5c27daf7f9d Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Thu, 1 Jul 2021 20:14:06 +0000 Subject: [PATCH 042/103] further integration of EFSOI branches, fixing problems with setup_workflow --- .gitignore | 8 ++ parm/config/config.base.emc.dyn | 3 + ush/rocoto/setup_workflow.py | 210 +++++++++++++++++--------------- 3 files changed, 123 insertions(+), 98 deletions(-) diff --git a/.gitignore b/.gitignore index b8a4ffcbba7..bd4636ffe7d 100644 --- a/.gitignore +++ b/.gitignore @@ -97,6 +97,12 @@ jobs/JGDAS_ATMOS_GLDAS jobs/JGDAS_ATMOS_VERFOZN jobs/JGDAS_ATMOS_VERFRAD jobs/JGDAS_ATMOS_VMINMON +jobs/JGDAS_EFSOI +jobs/JGDAS_EFSOI_ECEN +jobs/JGDAS_EFSOI_FCST +jobs/JGDAS_EFSOI_POST +jobs/JGDAS_EFSOI_SFC +jobs/JGDAS_EFSOI_UPDATE jobs/JGDAS_ENKF_DIAG jobs/JGDAS_ENKF_ECEN jobs/JGDAS_ENKF_FCST @@ -123,6 +129,8 @@ scripts/exgdas_atmos_nceppost.sh scripts/exgdas_atmos_verfozn.sh scripts/exgdas_atmos_verfrad.sh scripts/exgdas_atmos_vminmon.sh +scripts/exgdas_efsoi.sh +scripts/exgdas_efsoi_update.sh scripts/exgdas_enkf_ecen.sh scripts/exgdas_enkf_fcst.sh scripts/exgdas_enkf_post.sh diff --git a/parm/config/config.base.emc.dyn b/parm/config/config.base.emc.dyn index 1a164b1e867..3eff9027d28 100755 --- a/parm/config/config.base.emc.dyn +++ b/parm/config/config.base.emc.dyn @@ -11,6 +11,7 @@ export machine="@MACHINE@" # EMC parallel or NCO production export RUN_ENVIR="emc" + # Account, queue, etc. export ACCOUNT="@ACCOUNT@" export QUEUE="@QUEUE@" @@ -58,6 +59,8 @@ export WAFSF="NO" # WAFS products # use RUNMOS flag (currently in config.vrfy) export REALTIME="YES" +#only on HERA +#export DO_EFSOI="YES" #################################################### # DO NOT ADD MACHINE DEPENDENT STUFF BELOW THIS LINE diff --git a/ush/rocoto/setup_workflow.py b/ush/rocoto/setup_workflow.py index ee68c7e7e68..3618d855506 100755 --- a/ush/rocoto/setup_workflow.py +++ b/ush/rocoto/setup_workflow.py @@ -165,7 +165,9 @@ def get_definitions(base): machine = base.get('machine', wfu.detectMachine()) scheduler = wfu.get_scheduler(machine) + do_efsoi = base.get('DO_EFSOI', 'NO').upper() + strings = [] strings.append('\n') @@ -205,7 +207,10 @@ def get_definitions(base): strings.append('\t\n') strings.append('\n') strings.append('\t\n') - strings.append('\t\n') + if do_efsoi in ['Y', 'YES']: + strings.append('\t\n') + else: + strings.append('\t\n') strings.append('\t\n') strings.append('\t\n') strings.append('\n') @@ -368,7 +373,8 @@ def get_hyb_resources(dict_configs): do_efsoi = base.get('DO_EFSOI', 'NO').upper() if do_efsoi in ['Y', 'YES']: - tasks2 = ['ecen', 'ecenfsoi', 'esfc', 'esfcfsoi', 'efcs', 'efcsfsoi', 'epos', 'eposfsoi', 'earc', 'efsoi'] + #tasks2 = ['ecen', 'ecenfsoi', 'esfc', 'esfcfsoi', 'efcs', 'efcsfsoi', 'epos', 'eposfsoi', 'earc', 'efsoi'] + tasks2 = ['ecenfsoi', 'esfcfsoi', 'efcsfsoi', 'eposfsoi', 'efsoi', 'ecen', 'esfc', 'efcs', 'epos', 'earc' ] else: tasks2 = ['ecen', 'esfc', 'efcs', 'epos', 'earc'] for task in tasks2: @@ -1107,31 +1113,32 @@ def get_hyb_tasks(dict_configs, cycledef='enkf'): dict_tasks['%secmn' % cdump] = task + if do_efsoi in ['Y', 'YES']: # ecmnfsoi, ecenfsoi - deps1 = [] - data = '&ROTDIR;/%s.@Y@m@d/@H/%s.t@Hz.loganl.txt' % (cdump, cdump) - dep_dict = {'type': 'data', 'data': data} - deps1.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': '%sanalcalc' % cdump} - deps1.append(rocoto.add_dependency(dep_dict)) - dependencies1 = rocoto.create_dependency(dep_condition='or', dep=deps1) + deps1 = [] + data = '&ROTDIR;/%s.@Y@m@d/@H/%s.t@Hz.loganl.txt' % (cdump, cdump) + dep_dict = {'type': 'data', 'data': data} + deps1.append(rocoto.add_dependency(dep_dict)) + dep_dict = {'type': 'task', 'name': '%sanalcalc' % cdump} + deps1.append(rocoto.add_dependency(dep_dict)) + dependencies1 = rocoto.create_dependency(dep_condition='or', dep=deps1) - deps2 = [] - deps2 = dependencies1 - dep_dict = {'type': 'task', 'name': '%seupdfsoi' % cdump_eupd} - deps2.append(rocoto.add_dependency(dep_dict)) - dependencies2 = rocoto.create_dependency(dep_condition='and', dep=deps2) + deps2 = [] + deps2 = dependencies1 + dep_dict = {'type': 'task', 'name': '%seupdfsoi' % cdump_eupd} + deps2.append(rocoto.add_dependency(dep_dict)) + dependencies2 = rocoto.create_dependency(dep_condition='and', dep=deps2) - fhrgrp = rocoto.create_envar(name='FHRGRP', value='#grp#') - fhrlst = rocoto.create_envar(name='FHRLST', value='#lst#') - ecenenvars = envars1 + [fhrgrp] + [fhrlst] - varname1, varname2, varname3 = 'grp', 'dep', 'lst' - varval1, varval2, varval3 = get_ecengroups(dict_configs, dict_configs['ecenfsoi'], cdump=cdump) - vardict = {varname2: varval2, varname3: varval3} - task = wfu.create_wf_task('ecenfsoi', cdump=cdump, envar=ecenenvars, dependency=dependencies2, + fhrgrp = rocoto.create_envar(name='FHRGRP', value='#grp#') + fhrlst = rocoto.create_envar(name='FHRLST', value='#lst#') + ecenenvars = envars1 + [fhrgrp] + [fhrlst] + varname1, varname2, varname3 = 'grp', 'dep', 'lst' + varval1, varval2, varval3 = get_ecengroups(dict_configs, dict_configs['ecenfsoi'], cdump=cdump) + vardict = {varname2: varval2, varname3: varval3} + task = wfu.create_wf_task('ecenfsoi', cdump=cdump, envar=ecenenvars, dependency=dependencies2, metatask='ecmnfsoi', varname=varname1, varval=varval1, vardict=vardict) - dict_tasks['%secmnfsoi' % cdump] = task + dict_tasks['%secmnfsoi' % cdump] = task # esfc deps1 = [] @@ -1151,23 +1158,25 @@ def get_hyb_tasks(dict_configs, cycledef='enkf'): dict_tasks['%sesfc' % cdump] = task - # esfcfsoi - deps1 = [] - data = '&ROTDIR;/%s.@Y@m@d/@H/%s.t@Hz.loganl.txt' % (cdump, cdump) - dep_dict = {'type': 'data', 'data': data} - deps1.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': '%sanalcalc' % cdump} - deps1.append(rocoto.add_dependency(dep_dict)) - dependencies1 = rocoto.create_dependency(dep_condition='or', dep=deps1) - deps2 = [] - deps2 = dependencies1 - dep_dict = {'type': 'task', 'name': '%seupdfsoi' % cdump_eupd} - deps2.append(rocoto.add_dependency(dep_dict)) - dependencies2 = rocoto.create_dependency(dep_condition='and', dep=deps2) - task = wfu.create_wf_task('esfcfsoi', cdump=cdump, envar=envars1, dependency=dependencies2, cycledef=cycledef) - - dict_tasks['%sesfcfsoi' % cdump] = task + if do_efsoi in ['Y', 'YES']: + # esfcfsoi + deps1 = [] + data = '&ROTDIR;/%s.@Y@m@d/@H/%s.t@Hz.loganl.txt' % (cdump, cdump) + dep_dict = {'type': 'data', 'data': data} + deps1.append(rocoto.add_dependency(dep_dict)) + dep_dict = {'type': 'task', 'name': '%sanalcalc' % cdump} + deps1.append(rocoto.add_dependency(dep_dict)) + dependencies1 = rocoto.create_dependency(dep_condition='or', dep=deps1) + + deps2 = [] + deps2 = dependencies1 + dep_dict = {'type': 'task', 'name': '%seupdfsoi' % cdump_eupd} + deps2.append(rocoto.add_dependency(dep_dict)) + dependencies2 = rocoto.create_dependency(dep_condition='and', dep=deps2) + task = wfu.create_wf_task('esfcfsoi', cdump=cdump, envar=envars1, dependency=dependencies2, cycledef=cycledef) + + dict_tasks['%sesfcfsoi' % cdump] = task # efmn, efcs deps1 = [] @@ -1200,27 +1209,28 @@ def get_hyb_tasks(dict_configs, cycledef='enkf'): dict_tasks['%sechgres' % cdump] = task - # efmnfsoi, efcsfsoi - deps1 = [] - dep_dict = {'type': 'metatask', 'name': '%secmnfsoi' % cdump} - deps1.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': '%sesfcfsoi' % cdump} - deps1.append(rocoto.add_dependency(dep_dict)) - dependencies1 = rocoto.create_dependency(dep_condition='and', dep=deps1) + if do_efsoi in ['Y', 'YES']: + # efmnfsoi, efcsfsoi + deps1 = [] + dep_dict = {'type': 'metatask', 'name': '%secmnfsoi' % cdump} + deps1.append(rocoto.add_dependency(dep_dict)) + dep_dict = {'type': 'task', 'name': '%sesfcfsoi' % cdump} + deps1.append(rocoto.add_dependency(dep_dict)) + dependencies1 = rocoto.create_dependency(dep_condition='and', dep=deps1) - deps2 = [] - deps2 = dependencies1 + deps2 = [] + deps2 = dependencies1 - # liaofan: remove the option to run efcsfsoi in the cold start (2020.05.26) - #dep_dict = {'type': 'cycleexist', 'condition': 'not', 'offset': '-06:00:00'} - #deps2.append(rocoto.add_dependency(dep_dict)) - dependencies2 = rocoto.create_dependency(dep_condition='and', dep=deps2) + # liaofan: remove the option to run efcsfsoi in the cold start (2020.05.26) + #dep_dict = {'type': 'cycleexist', 'condition': 'not', 'offset': '-06:00:00'} + #deps2.append(rocoto.add_dependency(dep_dict)) + dependencies2 = rocoto.create_dependency(dep_condition='and', dep=deps2) - efcsenvars = envars1 + [ensgrp] - task = wfu.create_wf_task('efcsfsoi', cdump=cdump, envar=efcsenvars, dependency=dependencies2, - metatask='efmnfsoi', varname='grp', varval=EFCSGROUPS, cycledef=cycledef) + efcsenvars = envars1 + [ensgrp] + task = wfu.create_wf_task('efcsfsoi', cdump=cdump, envar=efcsenvars, dependency=dependencies2, + metatask='efmnfsoi', varname='grp', varval=EFCSGROUPS, cycledef=cycledef) - dict_tasks['%sefmnfsoi' % cdump] = task + dict_tasks['%sefmnfsoi' % cdump] = task # epmn, epos deps = [] @@ -1238,50 +1248,54 @@ def get_hyb_tasks(dict_configs, cycledef='enkf'): dict_tasks['%sepmn' % cdump] = task - # epmnfsoi, eposfsoi - deps = [] - dep_dict = {'type': 'metatask', 'name': '%sefmnfsoi' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - fhrgrp = rocoto.create_envar(name='FHRGRP', value='#grp#') - fhrlst = rocoto.create_envar(name='FHRLST', value='#lst#') - eposenvars = envars1 + [fhrgrp] + [fhrlst] - varname1, varname2, varname3 = 'grp', 'dep', 'lst' - varval1, varval2, varval3 = get_eposfsoigroups(dict_configs['eposfsoi'], cdump=cdump) - vardict = {varname2: varval2, varname3: varval3} - task = wfu.create_wf_task('eposfsoi', cdump=cdump, envar=eposenvars, dependency=dependencies, - metatask='epmnfsoi', varname=varname1, varval=varval1, vardict=vardict) - - dict_tasks['%sepmnfsoi' % cdump] = task - - # efsoi - deps = [] -# dep_dict = {'type': 'metatask', 'name': '%sepmnfsoi' % cdump} -# deps.append(rocoto.add_dependency(dep_dict)) -# dep_dict = {'type': 'metatask', 'name': '%sepmnsfsoi' % cdump, 'offset': '-6:00:00'} -# deps.append(rocoto.add_dependency(dep_dict)) - data = '&ROTDIR;/efsoigdas.@Y@m@d/@H/atmos/gdas.t@Hz.atmf030.ensmean.nc' - dep_dict = {'type': 'data', 'data': data, 'offset': '-6:00:00'} - deps.append(rocoto.add_dependency(dep_dict)) - data = '&ROTDIR;/efsoigdas.@Y@m@d/@H/atmos/gdas.t@Hz.atmf024.ensmean.nc' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = '&ROTDIR;/gdas.@Y@m@d/@H/atmos/gdas.t@Hz.atmanl.ensres.nc' - dep_dict = {'type': 'data', 'data': data, 'offset': '24:00:00'} - deps.append(rocoto.add_dependency(dep_dict)) - - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - task = wfu.create_wf_task('efsoi', cdump=cdump, envar=envars1, dependency=dependencies, cycledef=cycledef) - - dict_tasks['%sefsoi' % cdump] = task + if do_efsoi in ['Y', 'YES']: + # epmnfsoi, eposfsoi + deps = [] + dep_dict = {'type': 'metatask', 'name': '%sefmnfsoi' % cdump} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + fhrgrp = rocoto.create_envar(name='FHRGRP', value='#grp#') + fhrlst = rocoto.create_envar(name='FHRLST', value='#lst#') + eposenvars = envars1 + [fhrgrp] + [fhrlst] + varname1, varname2, varname3 = 'grp', 'dep', 'lst' + varval1, varval2, varval3 = get_eposfsoigroups(dict_configs['eposfsoi'], cdump=cdump) + vardict = {varname2: varval2, varname3: varval3} + task = wfu.create_wf_task('eposfsoi', cdump=cdump, envar=eposenvars, dependency=dependencies, + metatask='epmnfsoi', varname=varname1, varval=varval1, vardict=vardict) + + dict_tasks['%sepmnfsoi' % cdump] = task + + # efsoi + deps = [] + # dep_dict = {'type': 'metatask', 'name': '%sepmnfsoi' % cdump} + # deps.append(rocoto.add_dependency(dep_dict)) + # dep_dict = {'type': 'metatask', 'name': '%sepmnsfsoi' % cdump, 'offset': '-6:00:00'} + # deps.append(rocoto.add_dependency(dep_dict)) + data = '&ROTDIR;/efsoigdas.@Y@m@d/@H/atmos/gdas.t@Hz.atmf030.ensmean.nc' + dep_dict = {'type': 'data', 'data': data, 'offset': '-6:00:00'} + deps.append(rocoto.add_dependency(dep_dict)) + data = '&ROTDIR;/efsoigdas.@Y@m@d/@H/atmos/gdas.t@Hz.atmf024.ensmean.nc' + dep_dict = {'type': 'data', 'data': data} + deps.append(rocoto.add_dependency(dep_dict)) + data = '&ROTDIR;/gdas.@Y@m@d/@H/atmos/gdas.t@Hz.atmanl.ensres.nc' + dep_dict = {'type': 'data', 'data': data, 'offset': '24:00:00'} + deps.append(rocoto.add_dependency(dep_dict)) + + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + task = wfu.create_wf_task('efsoi', cdump=cdump, envar=envars1, dependency=dependencies, cycledef=cycledef) + + dict_tasks['%sefsoi' % cdump] = task # eamn, earc deps = [] dep_dict = {'type': 'metatask', 'name': '%sepmn' % cdump} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'metatask', 'name': '%sepmnfsoi' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + if do_efsoi in ['Y', 'YES']: + dep_dict = {'type': 'metatask', 'name': '%sepmnfsoi' % cdump} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + else: + dependencies = rocoto.create_dependency(dep=deps) earcenvars = envars1 + [ensgrp] task = wfu.create_wf_task('earc', cdump=cdump, envar=earcenvars, dependency=dependencies, metatask='eamn', varname='grp', varval=EARCGROUPS, cycledef=cycledef) @@ -1511,14 +1525,14 @@ def create_xml(dict_configs): 'gdasediag':'gdasediag', 'gdaseomg':'gdaseomn', 'gdaseupd':'gdaseupd', - 'gdaseupdfsoi':'gdaseupdfsoi', 'gdasecen':'gdasecmn', - 'gdasecenfsoi':'gdasecmnfsoi', 'gdasesfc':'gdasesfc', - 'gdasesfcfsoi':'gdasesfcfsoi', 'gdasefcs':'gdasefmn', - 'gdasefcsfsoi':'gdasefmnfsoi', 'gdasepos':'gdasepmn', + 'gdaseupdfsoi':'gdaseupdfsoi', + 'gdasecenfsoi':'gdasecmnfsoi', + 'gdasesfcfsoi':'gdasesfcfsoi', + 'gdasefcsfsoi':'gdasefmnfsoi', 'gdaseposfsoi':'gdasepmnfsoi', 'gdasefsoi':'gdasefsoi', 'gdasearc':'gdaseamn', From 495e972c14f78ccae21687a9cf1b4936a2b00f44 Mon Sep 17 00:00:00 2001 From: Andrew Eichmann Date: Wed, 4 Aug 2021 16:22:40 -0500 Subject: [PATCH 043/103] added EFSOI to Orion environment --- env/HERA.env | 1 - env/ORION.env | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 1 deletion(-) diff --git a/env/HERA.env b/env/HERA.env index 8a0612eea68..050c317cae4 100755 --- a/env/HERA.env +++ b/env/HERA.env @@ -275,7 +275,6 @@ elif [ $step = "epos" ]; then elif [ $step = "eposfsoi" ]; then nth_max=$(($npe_node_max / $npe_node_eposfsoi)) - #nth_max=$(($npe_node_max / $npe_node_epos)) export NTHREADS_EPOS=${nth_epos:-$nth_max} [[ $NTHREADS_EPOS -gt $nth_max ]] && export NTHREADS_EPOS=$nth_max diff --git a/env/ORION.env b/env/ORION.env index 69721c21edc..60b92abeda5 100755 --- a/env/ORION.env +++ b/env/ORION.env @@ -124,6 +124,30 @@ elif [ $step = "eupd" ]; then [[ $NTHREADS_ENKF -gt $nth_max ]] && export NTHREADS_ENKF=$nth_max export APRUN_ENKF="$launcher" +elif [ $step = "eupdfsoi" ]; then + + export CFP_MP=${CFP_MP:-"YES"} + export USE_CFP=${USE_CFP:-"YES"} + export APRUNCFP="$launcher -n \$ncmd --multi-prog" + + nth_max=$(($npe_node_max / $npe_node_eupdfsoi)) + + export NTHREADS_ENKF=${nth_eupdfsoi:-$nth_max} + [[ $NTHREADS_ENKF -gt $nth_max ]] && export NTHREADS_ENKF=$nth_max + export APRUN_ENKF="$launcher" + +elif [ $step = "efsoi" ]; then + + export CFP_MP=${CFP_MP:-"YES"} + export USE_CFP=${USE_CFP:-"YES"} + export APRUNCFP="$launcher -n \$ncmd --multi-prog" + + nth_max=$(($npe_node_max / $npe_node_efsoi)) + + export NTHREADS_ENKF=${nth_efsoi:-$nth_max} + [[ $NTHREADS_ENKF -gt $nth_max ]] && export NTHREADS_ENKF=$nth_max + export APRUN_ENKF="$launcher" + elif [ $step = "fcst" ]; then nth_max=$(($npe_node_max / $npe_node_fcst)) @@ -154,6 +178,20 @@ elif [ $step = "efcs" ]; then [[ $NTHREADS_REGRID_NEMSIO -gt $nth_max ]] && export NTHREADS_REGRID_NEMSIO=$nth_max export APRUN_REGRID_NEMSIO="$launcher $LEVS" +elif [ $step = "efcsfsoi" ]; then + + nth_max=$(($npe_node_max / $npe_node_efcsfsoi)) + + export NTHREADS_FV3=${nth_efcfsois:-$nth_max} + [[ $NTHREADS_FV3 -gt $nth_max ]] && export NTHREADS_FV3=$nth_max + export cores_per_node=$npe_node_max + export APRUN_FV3="$launcher" + + export NTHREADS_REGRID_NEMSIO=${nth_regrid_nemsio:-1} + [[ $NTHREADS_REGRID_NEMSIO -gt $nth_max ]] && export NTHREADS_REGRID_NEMSIO=$nth_max + export APRUN_REGRID_NEMSIO="$launcher $LEVS" + + elif [ $step = "post" ]; then nth_max=$(($npe_node_max / $npe_node_post)) @@ -182,6 +220,22 @@ elif [ $step = "ecen" ]; then [[ $NTHREADS_CALCINC -gt $nth_max ]] && export NTHREADS_CALCINC=$nth_max export APRUN_CALCINC="$launcher" +elif [ $step = "ecenfsoi" ]; then + + nth_max=$(($npe_node_max / $npe_node_ecenfsoi)) + + export NTHREADS_ECEN=${nth_ecenfsoi:-$nth_max} + [[ $NTHREADS_ECEN -gt $nth_max ]] && export NTHREADS_ECEN=$nth_max + export APRUN_ECEN="$launcher" + + export NTHREADS_CHGRES=${nth_chgres:-12} + [[ $NTHREADS_CHGRES -gt $npe_node_max ]] && export NTHREADS_CHGRES=$npe_node_max + export APRUN_CHGRES="time" + + export NTHREADS_CALCINC=${nth_calcinc:-1} + [[ $NTHREADS_CALCINC -gt $nth_max ]] && export NTHREADS_CALCINC=$nth_max + export APRUN_CALCINC="$launcher" + elif [ $step = "esfc" ]; then nth_max=$(($npe_node_max / $npe_node_esfc)) @@ -194,6 +248,18 @@ elif [ $step = "esfc" ]; then [[ $NTHREADS_CYCLE -gt $npe_node_max ]] && export NTHREADS_CYCLE=$npe_node_max export APRUN_CYCLE="$launcher -n $npe_esfc" +elif [ $step = "esfcfsoi" ]; then + + nth_max=$(($npe_node_max / $npe_node_esfcfsoi)) + + export NTHREADS_ESFC=${nth_esfcfsoi:-$nth_max} + [[ $NTHREADS_ESFC -gt $nth_max ]] && export NTHREADS_ESFC=$nth_max + export APRUN_ESFC="$launcher -n $npe_esfcfsoi" + + export NTHREADS_CYCLE=${nth_cycle:-14} + [[ $NTHREADS_CYCLE -gt $npe_node_max ]] && export NTHREADS_CYCLE=$npe_node_max + export APRUN_CYCLE="$launcher -n $npe_esfcfsoi" + elif [ $step = "epos" ]; then nth_max=$(($npe_node_max / $npe_node_epos)) @@ -202,6 +268,14 @@ elif [ $step = "epos" ]; then [[ $NTHREADS_EPOS -gt $nth_max ]] && export NTHREADS_EPOS=$nth_max export APRUN_EPOS="$launcher" +elif [ $step = "eposfsoi" ]; then + + nth_max=$(($npe_node_max / $npe_node_eposfsoi)) + + export NTHREADS_EPOS=${nth_eposfsoi:-$nth_max} + [[ $NTHREADS_EPOS -gt $nth_max ]] && export NTHREADS_EPOS=$nth_max + export APRUN_EPOS="$launcher" + elif [ $step = "init" ]; then export APRUN="$launcher" From 51182cdc88d3035f5b02c731fedf6ad9feb9aba6 Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Thu, 28 Oct 2021 14:35:41 +0000 Subject: [PATCH 044/103] bugfix: earc failing with non-EFSOI experiment do to lack of EFSOI files --- jobs/rocoto/earc.sh | 169 ++++++++++++++++++++++---------------------- 1 file changed, 85 insertions(+), 84 deletions(-) diff --git a/jobs/rocoto/earc.sh b/jobs/rocoto/earc.sh index bc4157bb262..cd939d1f61b 100755 --- a/jobs/rocoto/earc.sh +++ b/jobs/rocoto/earc.sh @@ -54,14 +54,15 @@ if [ $status -ne 0 ]; then exit $status fi -$HOMEgfs/ush/hpssarch_gen.sh efsoigdas -status=$? -if [ $status -ne 0 ]; then - echo "$HOMEgfs/ush/hpssarch_gen_EFSOI.sh enkf${CDUMP} failed, ABORT!" - exit $status +if [ $DO_EFSOI = "YES" ]; then + $HOMEgfs/ush/hpssarch_gen.sh efsoigdas + status=$? + if [ $status -ne 0 ]; then + echo "$HOMEgfs/ush/hpssarch_gen_EFSOI.sh enkf${CDUMP} failed, ABORT!" + exit $status + fi fi - cd $ROTDIR @@ -117,31 +118,32 @@ if [[ $ENSGRP -gt 0 ]] && [[ $HPSSARCH = "YES" ]]; then fi fi - htar -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}_grp${ENSGRP}.tar `cat $ARCH_LIST/efsoi${CDUMP}_grp${n}.txt` - status=$? - if [ $status -ne 0 -a $CDATE -ge $firstday ]; then - echo "HTAR $CDATE efsoi${CDUMP}_grp${ENSGRP}.tar failed" - exit $status - fi - - if [ $SAVEWARMICA = "YES" -a $cyc -eq $EARCINC_CYC ]; then - htar -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}_restarta_grp${ENSGRP}.tar `cat $ARCH_LIST/efsoi${CDUMP}_restarta_grp${n}.txt` + if [ $DO_EFSOI = "YES" ]; then + htar -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}_grp${ENSGRP}.tar `cat $ARCH_LIST/efsoi${CDUMP}_grp${n}.txt` status=$? - if [ $status -ne 0 ]; then - echo "HTAR $CDATE efsoi${CDUMP}_restarta_grp${ENSGRP}.tar failed" + if [ $status -ne 0 -a $CDATE -ge $firstday ]; then + echo "HTAR $CDATE efsoi${CDUMP}_grp${ENSGRP}.tar failed" exit $status fi - fi - - if [ $SAVEWARMICB = "YES" -a $cyc -eq $EARCICS_CYC ]; then - htar -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}_restartb_grp${ENSGRP}.tar `cat $ARCH_LIST/efsoi${CDUMP}_restartb_grp${n}.txt` - status=$? - if [ $status -ne 0 ]; then - echo "HTAR $CDATE efsoi${CDUMP}_restartb_grp${ENSGRP}.tar failed" - exit $status + + if [ $SAVEWARMICA = "YES" -a $cyc -eq $EARCINC_CYC ]; then + htar -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}_restarta_grp${ENSGRP}.tar `cat $ARCH_LIST/efsoi${CDUMP}_restarta_grp${n}.txt` + status=$? + if [ $status -ne 0 ]; then + echo "HTAR $CDATE efsoi${CDUMP}_restarta_grp${ENSGRP}.tar failed" + exit $status + fi fi - fi - + + if [ $SAVEWARMICB = "YES" -a $cyc -eq $EARCICS_CYC ]; then + htar -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}_restartb_grp${ENSGRP}.tar `cat $ARCH_LIST/efsoi${CDUMP}_restartb_grp${n}.txt` + status=$? + if [ $status -ne 0 ]; then + echo "HTAR $CDATE efsoi${CDUMP}_restartb_grp${ENSGRP}.tar failed" + exit $status + fi + fi + fi # $DO_EFSOI = "YES" fi # CDATE>SDATE @@ -161,12 +163,14 @@ if [ $ENSGRP -eq 0 ]; then exit $status fi - htar -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}.tar `cat $ARCH_LIST/efsoi${CDUMP}.txt` - status=$? - if [ $status -ne 0 -a $CDATE -ge $firstday ]; then - echo "HTAR $CDATE efsoi${CDUMP}.tar failed" - exit $status - fi + if [ $DO_EFSOI = "YES" ]; then + htar -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}.tar `cat $ARCH_LIST/efsoi${CDUMP}.txt` + status=$? + if [ $status -ne 0 -a $CDATE -ge $firstday ]; then + echo "HTAR $CDATE efsoi${CDUMP}.tar failed" + exit $status + fi + fi # $DO_EFSOI = "YES" fi @@ -178,19 +182,13 @@ if [ $ENSGRP -eq 0 ]; then $NCP $ROTDIR/enkf${CDUMP}.$PDY/$cyc/$COMPONENT/${CDUMP}.t${cyc}z.gsistat.ensmean gsistat.${CDUMP}.${CDATE}.ensmean if [ $CDUMP_ENKF != "GDAS" ]; then - $NCP $ROTDIR/enkfgfs.$PDY/$cyc/$COMPONENT/${CDUMP}.t${cyc}z.enkfstat enkfstat.gfs.$CDATE - $NCP $ROTDIR/enkfgfs.$PDY/$cyc/$COMPONENT/${CDUMP}.t${cyc}z.gsistat.ensmean gsistat.gfs.${CDATE}.ensmean - fi - - - $NCP $ROTDIR/efsoi${CDUMP}.$PDY/$cyc/$COMPONENT/${CDUMP}.t${cyc}z.enkfstat efsoistat.${CDUMP}.$CDATE - $NCP $ROTDIR/efsoi${CDUMP}.$PDY/$cyc/$COMPONENT/${CDUMP}.t${cyc}z.gsistat.ensmean efsoigsistat.${CDUMP}.${CDATE}.ensmean - - if [ $CDUMP_ENKF != "GDAS" ]; then - $NCP $ROTDIR/efsoigfs.$PDY/$cyc/$COMPONENT/${CDUMP}.t${cyc}z.enkfstat efsoistat.gfs.$CDATE - $NCP $ROTDIR/efsoigfs.$PDY/$cyc/$COMPONENT/${CDUMP}.t${cyc}z.gsistat.ensmean efsoigsistat.gfs.${CDATE}.ensmean - fi + $NCP $ROTDIR/enkfgfs.$PDY/$cyc/$COMPONENT/${CDUMP}.t${cyc}z.enkfstat enkfstat.gfs.$CDATE + $NCP $ROTDIR/enkfgfs.$PDY/$cyc/$COMPONENT/${CDUMP}.t${cyc}z.gsistat.ensmean gsistat.gfs.${CDATE}.ensmean + fi + if [ $DO_EFSOI = "YES" ]; then + $NCP $ROTDIR/efsoi${CDUMP}.$PDY/$cyc/$COMPONENT/${CDUMP}.t${cyc}z.enkfstat efsoistat.${CDUMP}.$CDATE + fi fi @@ -236,46 +234,49 @@ if [ $ENSGRP -eq 0 ]; then fi done - COMIN_ENS="$ROTDIR/efsoigdas.$gPDY/$gcyc/$COMPONENT" - if [ -d $COMIN_ENS ] ; then - rm -rf $COMIN_ENS/*f012*nc - rm -rf $COMIN_ENS/*f018*nc - for imem in $(seq 1 $NMEM_ENKF); do - memchar="mem"$(printf %03i $imem) - for file in `ls $COMIN_ENS/$memchar |grep -v atmf024`; do - rm -rf $COMIN_ENS/$memchar/$file + if [ $DO_EFSOI = "YES" ]; then + COMIN_ENS="$ROTDIR/efsoigdas.$gPDY/$gcyc/$COMPONENT" + if [ -d $COMIN_ENS ] ; then + rm -rf $COMIN_ENS/*f012*nc + rm -rf $COMIN_ENS/*f018*nc + for imem in $(seq 1 $NMEM_ENKF); do + memchar="mem"$(printf %03i $imem) + for file in `ls $COMIN_ENS/$memchar |grep -v atmf024`; do + rm -rf $COMIN_ENS/$memchar/$file + done done - done - fi - - # Advance to next cycle - GDATE=$($NDATE +$assim_freq $GDATE) - - done - - # Now do EFSOI - needs to be kept around longer - # Start start and end dates to remove - GDATEEND=$($NDATE -${RMOLDEND_EFSOI:-36} $CDATE) - GDATE=$($NDATE -${RMOLDSTD_ENKF:-120} $CDATE) - while [ $GDATE -le $GDATEEND ]; do - - gPDY=$(echo $GDATE | cut -c1-8) - gcyc=$(echo $GDATE | cut -c9-10) - - COMIN_ENS="$ROTDIR/efsoigdas.$gPDY/$gcyc/$COMPONENT" - [[ -d $COMIN_ENS ]] && rm -rf $COMIN_ENS - - # Remove any empty directories - COMIN_ENS="$ROTDIR/efsoigdas.$gPDY/$COMPONENT" - if [ -d $COMIN_ENS ] ; then - [[ ! "$(ls -A $COMIN_ENS)" ]] && rm -rf $COMIN_ENS - fi - - # Advance to next cycle - GDATE=$($NDATE +$assim_freq $GDATE) - - done - + fi + fi # $DO_EFSOI = "YES" + + # Advance to next cycle + GDATE=$($NDATE +$assim_freq $GDATE) + + done + + if [ $DO_EFSOI = "YES" ]; then + # Now do EFSOI - needs to be kept around longer + # Start start and end dates to remove + GDATEEND=$($NDATE -${RMOLDEND_EFSOI:-36} $CDATE) + GDATE=$($NDATE -${RMOLDSTD_ENKF:-120} $CDATE) + while [ $GDATE -le $GDATEEND ]; do + + gPDY=$(echo $GDATE | cut -c1-8) + gcyc=$(echo $GDATE | cut -c9-10) + + COMIN_ENS="$ROTDIR/efsoigdas.$gPDY/$gcyc/$COMPONENT" + [[ -d $COMIN_ENS ]] && rm -rf $COMIN_ENS + + # Remove any empty directories + COMIN_ENS="$ROTDIR/efsoigdas.$gPDY/$COMPONENT" + if [ -d $COMIN_ENS ] ; then + [[ ! "$(ls -A $COMIN_ENS)" ]] && rm -rf $COMIN_ENS + fi + + # Advance to next cycle + GDATE=$($NDATE +$assim_freq $GDATE) + + done + fi # $DO_EFSOI = "YES" fi From 246a45f8a9efb3fcf9eaef50ab2f354a9478e908 Mon Sep 17 00:00:00 2001 From: Andrew Eichmann Date: Tue, 23 Nov 2021 08:06:11 -0600 Subject: [PATCH 045/103] tweaks for smooth running --- parm/config/config.eupdfsoi | 2 +- parm/config/config.resources | 8 +++++--- ush/rocoto/setup_workflow.py | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/parm/config/config.eupdfsoi b/parm/config/config.eupdfsoi index fe7975d6cee..45d0abcd53c 100755 --- a/parm/config/config.eupdfsoi +++ b/parm/config/config.eupdfsoi @@ -16,7 +16,7 @@ export npe_enkf=$npe_eupd # LETKF specific settings with model space localization export modelspace_vloc=".true." # model space localization -export letkf_flag=".true." # use LETKF instead of serial filter +export letkf_flag=".false" # use LETKF instead of serial filter export getkf=".true." # Gain form of LETKF (needed for model-space localization) export denkf=".true." # EnKF approximation (beneficial since less spread removed by analysis) export nobsl_max=10000 # max number of obs in each LETKF volume (uses closest nobsl_max). can diff --git a/parm/config/config.resources b/parm/config/config.resources index e47b8505f83..e23fd3d690f 100755 --- a/parm/config/config.resources +++ b/parm/config/config.resources @@ -357,7 +357,7 @@ elif [ $step = "eupd" ]; then elif [ $step = "eupdfsoi" ]; then - export wtime_eupdfsoi="00:30:00" + export wtime_eupdfsoi="03:00:00" if [ $CASE = "C768" ]; then export npe_eupdfsoi=960 export nth_eupdfsoi=6 @@ -369,8 +369,10 @@ elif [ $step = "eupdfsoi" ]; then export nth_eupdfsoi=40 fi elif [ $CASE = "C384" ]; then - export npe_eupdfsoi=270 - export nth_eupdfsoi=2 + #export npe_eupdfsoi=270 + #export nth_eupdfsoi=2 + export npe_eupdfsoi=400 + export nth_eupdfsoi=5 if [[ "$machine" = "WCOSS_DELL_P3" ]]; then export nth_eupdfsoi=9 fi diff --git a/ush/rocoto/setup_workflow.py b/ush/rocoto/setup_workflow.py index 82519ca002f..0664d869e2d 100755 --- a/ush/rocoto/setup_workflow.py +++ b/ush/rocoto/setup_workflow.py @@ -209,7 +209,7 @@ def get_definitions(base): strings.append('\n') strings.append('\t\n') if do_efsoi in ['Y', 'YES']: - strings.append('\t\n') + strings.append('\t\n') else: strings.append('\t\n') strings.append('\t\n') From 840af57d2b61e6066d62128683a1a00dd9a0c8c5 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Fri, 11 Feb 2022 07:48:00 -0600 Subject: [PATCH 046/103] conflict resolutions from last merge --- env/ORION.env | 3 ++- parm/config/config.efcsfsoi | 18 +++++++++++++----- scripts/exglobal_forecast.sh | 1 - ush/forecast_predet.sh | 6 +++++- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/env/ORION.env b/env/ORION.env index 2f12599f4a5..070aa98f72a 100755 --- a/env/ORION.env +++ b/env/ORION.env @@ -188,7 +188,8 @@ elif [ $step = "efcsfsoi" ]; then export NTHREADS_FV3=${nth_efcfsois:-$nth_max} [[ $NTHREADS_FV3 -gt $nth_max ]] && export NTHREADS_FV3=$nth_max export cores_per_node=$npe_node_max - export APRUN_FV3="$launcher" + #export APRUN_FV3="$launcher" + export APRUN_FV3="$launcher -n $npe_efcsfsoi" export NTHREADS_REGRID_NEMSIO=${nth_regrid_nemsio:-1} [[ $NTHREADS_REGRID_NEMSIO -gt $nth_max ]] && export NTHREADS_REGRID_NEMSIO=$nth_max diff --git a/parm/config/config.efcsfsoi b/parm/config/config.efcsfsoi index 69ed6648b98..6f9fb77c78a 100755 --- a/parm/config/config.efcsfsoi +++ b/parm/config/config.efcsfsoi @@ -1,6 +1,6 @@ #!/bin/ksh -x -########## config.efcs ########## +########## config.efcsfsoi ########## # Ensemble forecast specific, dependency: config.fcst echo "BEGIN: config.efcsfsoi" @@ -15,7 +15,6 @@ export npe_fv3=$npe_efcsfsoi if [ $QUILTING = ".true." ]; then export npe_fv3=$(echo " $npe_fv3 + $WRITE_GROUP * $WRTTASK_PER_GROUP" | bc) - export npe_efcs=$npe_fv3 export npe_efcsfsoi=$npe_fv3 fi @@ -56,15 +55,14 @@ export restart_interval=${restart_interval:-6} # For IAU, write restarts at beginning of window also if [ $DOIAU_ENKF = "YES" ]; then - export restart_interval="6 -1" - if [[ "$SDATE" = "$CDATE" && $EXP_WARM_START = ".false." ]]; then export restart_interval="3 -1"; fi # Cold starting + export restart_interval="3 -1" fi export OUTPUT_FILETYPES="$OUTPUT_FILE" if [[ "$OUTPUT_FILE" == "netcdf" ]]; then export ichunk2d=0; export jchunk2d=0 export ichunk3d=0; export jchunk3d=0; export kchunk3d=0 - RESTILE=`echo $CASE_ENKF |cut -c 2-` + RESTILE=$(echo $CASE_ENKF |cut -c 2-) if [[ "$machine" == "WCOSS_DELL_P3" ]]; then if [ $RESTILE -ge 384 ]; then export OUTPUT_FILETYPES=" 'netcdf_parallel' 'netcdf' " @@ -85,4 +83,14 @@ fi # wave model export cplwav=.false. +# ocean model resolution +case "$CASE_ENKF" in + "C48") export OCNRES=100;; + "C96") export OCNRES=100;; + "C192") export OCNRES=050;; + "C384") export OCNRES=025;; + "C768") export OCNRES=025;; + *) export OCNRES=025;; +esac + echo "END: config.efcsfsoi" diff --git a/scripts/exglobal_forecast.sh b/scripts/exglobal_forecast.sh index fdecba1f5be..1de88e1cc12 100755 --- a/scripts/exglobal_forecast.sh +++ b/scripts/exglobal_forecast.sh @@ -181,7 +181,6 @@ echo "MAIN: Name lists and model configuration written" echo "MAIN: Writing NEMS Configure file" writing_nems_configure echo "MAIN: NEMS configured" ->>>>>>> develop #------------------------------------------------------------------ # run the executable diff --git a/ush/forecast_predet.sh b/ush/forecast_predet.sh index 786b759d4b0..df68af55f88 100755 --- a/ush/forecast_predet.sh +++ b/ush/forecast_predet.sh @@ -239,7 +239,11 @@ FV3_GFS_predet(){ rprefix=$rCDUMP memchar="" else - prefix=enkf$CDUMP + if [[ "$EFSOI_TASK" = "YES" ]]; then + prefix=efsoi$CDUMP + else + prefix=enkf$CDUMP + fi rprefix=enkf$rCDUMP memchar=mem$(printf %03i $MEMBER) fi From 719ab0cf268b6d04ec829b3b63fb34d58df2060a Mon Sep 17 00:00:00 2001 From: "Andrew.Eichmann" Date: Wed, 16 Mar 2022 19:44:04 +0000 Subject: [PATCH 047/103] slimmed down efsoi config files --- parm/config/config.ecenfsoi | 13 +-- parm/config/config.efcsfsoi | 154 ++++++++++++++++++------------------ parm/config/config.eposfsoi | 21 ++--- parm/config/config.esfcfsoi | 19 +++-- parm/config/config.eupdfsoi | 43 +++++----- 5 files changed, 125 insertions(+), 125 deletions(-) diff --git a/parm/config/config.ecenfsoi b/parm/config/config.ecenfsoi index 2260b8f78b7..1777bb40e0b 100755 --- a/parm/config/config.ecenfsoi +++ b/parm/config/config.ecenfsoi @@ -5,17 +5,10 @@ echo "BEGIN: config.ecenfsoi" +# get regular ecen configs +. $EXPDIR/config.ecen + # Get task specific resources . $EXPDIR/config.resources ecenfsoi -# Number of concurrent ecen jobs [1 implies sequential] -# Usually IAUFHRS_ENKF=3,6,9, so NECENGRP=3. Scripting -# below queries IAUFHRS_ENKF to determine NECENGRP -export NECENGRP=1 -if [ $DOIAU_ENKF = "YES" ]; then - ngrps=$(grep -o ',' <<<"$IAUFHRS_ENKF" | grep -c .) - ((ngrps++)) - export NECENGRP=$ngrps -fi - echo "END: config.ecenfsoi" diff --git a/parm/config/config.efcsfsoi b/parm/config/config.efcsfsoi index 6f9fb77c78a..07062cdc094 100755 --- a/parm/config/config.efcsfsoi +++ b/parm/config/config.efcsfsoi @@ -5,8 +5,8 @@ echo "BEGIN: config.efcsfsoi" -# Source model specific information that is resolution dependent -. $EXPDIR/config.fv3 $CASE_ENKF +# Get regular efcs configs +. $EXPDIR/config.efcs # Get task specific resources . $EXPDIR/config.resources efcsfsoi @@ -18,79 +18,79 @@ if [ $QUILTING = ".true." ]; then export npe_efcsfsoi=$npe_fv3 fi -# Number of enkf members per fcst job -export NMEM_EFCSGRP=2 -export RERUN_EFCSGRP="NO" - -# Turn off inline UPP for EnKF forecast -export WRITE_DOPOST=".false." - -# Stochastic physics parameters (only for ensemble forecasts) -export DO_SKEB="YES" -export SKEB=0.3 -export SKEB_TAU=21600. -export SKEB_LSCALE=250000. -export SKEBNORM=0 -export SKEB_NPASS=30 -export SKEB_VDOF=5 -export DO_SHUM="YES" -export SHUM=0.005 -export SHUM_TAU=21600. -export SHUM_LSCALE=500000. -export DO_SPPT="YES" -export SPPT=0.5 -export SPPT_TAU=21600. -export SPPT_LSCALE=500000. -export SPPT_LOGIT=".true." -export SPPT_SFCLIMIT=".true." - -if [ $QUILTING = ".true." -a $OUTPUT_GRID = "gaussian_grid" ]; then - export DIAG_TABLE="$HOMEgfs/parm/parm_fv3diag/diag_table_da" -else - export DIAG_TABLE="$HOMEgfs/parm/parm_fv3diag/diag_table_da_orig" -fi - -# FV3 model namelist parameters to over-ride -export restart_interval=${restart_interval:-6} - -# For IAU, write restarts at beginning of window also -if [ $DOIAU_ENKF = "YES" ]; then - export restart_interval="3 -1" -fi - -export OUTPUT_FILETYPES="$OUTPUT_FILE" -if [[ "$OUTPUT_FILE" == "netcdf" ]]; then - export ichunk2d=0; export jchunk2d=0 - export ichunk3d=0; export jchunk3d=0; export kchunk3d=0 - RESTILE=$(echo $CASE_ENKF |cut -c 2-) - if [[ "$machine" == "WCOSS_DELL_P3" ]]; then - if [ $RESTILE -ge 384 ]; then - export OUTPUT_FILETYPES=" 'netcdf_parallel' 'netcdf' " - export ichunk2d=$((4*RESTILE)) - export jchunk2d=$((2*RESTILE)) - export ichunk3d=$((4*RESTILE)) - export jchunk3d=$((2*RESTILE)) - export kchunk3d=1 - else - export OUTPUT_FILETYPES=" 'netcdf_parallel' 'netcdf' " - fi - fi - if [[ "$machine" == "HERA" ]]; then - export OUTPUT_FILETYPES=" 'netcdf' 'netcdf' " - fi -fi - -# wave model -export cplwav=.false. - -# ocean model resolution -case "$CASE_ENKF" in - "C48") export OCNRES=100;; - "C96") export OCNRES=100;; - "C192") export OCNRES=050;; - "C384") export OCNRES=025;; - "C768") export OCNRES=025;; - *) export OCNRES=025;; -esac - +### Number of enkf members per fcst job +#export NMEM_EFCSGRP=2 +#export RERUN_EFCSGRP="NO" +# +## Turn off inline UPP for EnKF forecast +#export WRITE_DOPOST=".false." +# +## Stochastic physics parameters (only for ensemble forecasts) +#export DO_SKEB="YES" +#export SKEB=0.3 +#export SKEB_TAU=21600. +#export SKEB_LSCALE=250000. +#export SKEBNORM=0 +#export SKEB_NPASS=30 +#export SKEB_VDOF=5 +#export DO_SHUM="YES" +#export SHUM=0.005 +#export SHUM_TAU=21600. +#export SHUM_LSCALE=500000. +#export DO_SPPT="YES" +#export SPPT=0.5 +#export SPPT_TAU=21600. +#export SPPT_LSCALE=500000. +#export SPPT_LOGIT=".true." +#export SPPT_SFCLIMIT=".true." +# +#if [ $QUILTING = ".true." -a $OUTPUT_GRID = "gaussian_grid" ]; then +# export DIAG_TABLE="$HOMEgfs/parm/parm_fv3diag/diag_table_da" +#else +# export DIAG_TABLE="$HOMEgfs/parm/parm_fv3diag/diag_table_da_orig" +#fi +# +## FV3 model namelist parameters to over-ride +#export restart_interval=${restart_interval:-6} +# +## For IAU, write restarts at beginning of window also +#if [ $DOIAU_ENKF = "YES" ]; then +# export restart_interval="3 -1" +#fi +# +#export OUTPUT_FILETYPES="$OUTPUT_FILE" +#if [[ "$OUTPUT_FILE" == "netcdf" ]]; then +# export ichunk2d=0; export jchunk2d=0 +# export ichunk3d=0; export jchunk3d=0; export kchunk3d=0 +# RESTILE=$(echo $CASE_ENKF |cut -c 2-) +# if [[ "$machine" == "WCOSS_DELL_P3" ]]; then +# if [ $RESTILE -ge 384 ]; then +# export OUTPUT_FILETYPES=" 'netcdf_parallel' 'netcdf' " +# export ichunk2d=$((4*RESTILE)) +# export jchunk2d=$((2*RESTILE)) +# export ichunk3d=$((4*RESTILE)) +# export jchunk3d=$((2*RESTILE)) +# export kchunk3d=1 +# else +# export OUTPUT_FILETYPES=" 'netcdf_parallel' 'netcdf' " +# fi +# fi +# if [[ "$machine" == "HERA" ]]; then +# export OUTPUT_FILETYPES=" 'netcdf' 'netcdf' " +# fi +#fi +# +## wave model +#export cplwav=.false. +# +## ocean model resolution +#case "$CASE_ENKF" in +# "C48") export OCNRES=100;; +# "C96") export OCNRES=100;; +# "C192") export OCNRES=050;; +# "C384") export OCNRES=025;; +# "C768") export OCNRES=025;; +# *) export OCNRES=025;; +#esac +# echo "END: config.efcsfsoi" diff --git a/parm/config/config.eposfsoi b/parm/config/config.eposfsoi index 68dea65182e..ac430d38bc2 100755 --- a/parm/config/config.eposfsoi +++ b/parm/config/config.eposfsoi @@ -5,16 +5,19 @@ echo "BEGIN: config.eposfsoi" +# Get regular epos configs +. $EXPDIR/config.epos + # Get task specific resources . $EXPDIR/config.resources eposfsoi -# No. of concurrent epos jobs [1 implies sequential] -export NEPOSGRP=7 -if [ $l4densvar = ".false." ]; then - export NEPOSGRP=3 -fi - -# Generate ensemble spread files -export ENKF_SPREAD="YES" - +## No. of concurrent epos jobs [1 implies sequential] +#export NEPOSGRP=7 +#if [ $l4densvar = ".false." ]; then +# export NEPOSGRP=3 +#fi +# +## Generate ensemble spread files +#export ENKF_SPREAD="YES" +# echo "END: config.eposfsoi" diff --git a/parm/config/config.esfcfsoi b/parm/config/config.esfcfsoi index 6c156aeb62b..1ae88045349 100755 --- a/parm/config/config.esfcfsoi +++ b/parm/config/config.esfcfsoi @@ -5,15 +5,18 @@ echo "BEGIN: config.esfcfsoi" +# Get regular esfc configs +. $EXPDIR/config.esfc + # Get task specific resources . $EXPDIR/config.resources esfcfsoi -# With IAU only need surface analysis at start of IAU window. -# Set DOSFCANL_ENKF=NO to prevent creation of sfcanl at -# center of analysis window. - -if [ $DOIAU_ENKF = "YES" ]; then - export DOSFCANL_ENKF="NO" -fi - +## With IAU only need surface analysis at start of IAU window. +## Set DOSFCANL_ENKF=NO to prevent creation of sfcanl at +## center of analysis window. +# +#if [ $DOIAU_ENKF = "YES" ]; then +# export DOSFCANL_ENKF="NO" +#fi +# echo "END: config.esfcfsoi" diff --git a/parm/config/config.eupdfsoi b/parm/config/config.eupdfsoi index 45d0abcd53c..f01e59a648c 100755 --- a/parm/config/config.eupdfsoi +++ b/parm/config/config.eupdfsoi @@ -5,6 +5,9 @@ echo "BEGIN: config.eupdfsoi" +# Get task specific resources +. $EXPDIR/config.eupd + # Get task specific resources . $EXPDIR/config.resources eupdfsoi @@ -12,26 +15,24 @@ export npe_enkf=$npe_eupd # Use NAM_ENKF below for serial EnKF -##export NAM_ENKF="analpertwtnh=0.9,analpertwtsh=0.9,analpertwttr=0.9" - -# LETKF specific settings with model space localization -export modelspace_vloc=".true." # model space localization -export letkf_flag=".false" # use LETKF instead of serial filter -export getkf=".true." # Gain form of LETKF (needed for model-space localization) -export denkf=".true." # EnKF approximation (beneficial since less spread removed by analysis) -export nobsl_max=10000 # max number of obs in each LETKF volume (uses closest nobsl_max). can - # be reduced to speed up execution time. -export analpertwt=0.85 # relaxation to prior spread inflation factor -export readin_localization_enkf=".false." # Don’t read in localization scales from file (doesn’t make - # sense for LETKF if model space localization on and nobsl_max>0) -export corrlength=1250 # Horizontal localization scale (max horizontal distance to search for nobsl_max local obs) -export lnsigcutoff=2.75 # ignored if modelspace_vloc=.true. - -export lobsdiag_forenkf=".true." # use jacobian. must be .true. if modelspace_vloc=".true." - # need to specify .true. setting since config.anal sets to .false. - -export NAM_ENKF="smoothparm=35," - -#export ENKFEXEC=/scratch1/NCEPDEV/da/Andrew.Eichmann/gsidev/afe-efsoi/GSI/exec/enkf_gfs.x +export NAM_ENKF="analpertwtnh=0.9,analpertwtsh=0.9,analpertwttr=0.9" + +## LETKF specific settings with model space localization +#export modelspace_vloc=".true." # model space localization +export letkf_flag=".false." # use LETKF instead of serial filter +#export getkf=".true." # Gain form of LETKF (needed for model-space localization) +#export denkf=".true." # EnKF approximation (beneficial since less spread removed by analysis) +#export nobsl_max=10000 # max number of obs in each LETKF volume (uses closest nobsl_max). can +# # be reduced to speed up execution time. +#export analpertwt=0.85 # relaxation to prior spread inflation factor +#export readin_localization_enkf=".false." # Don’t read in localization scales from file (doesn’t make +# # sense for LETKF if model space localization on and nobsl_max>0) +#export corrlength=1250 # Horizontal localization scale (max horizontal distance to search for nobsl_max local obs) +#export lnsigcutoff=2.75 # ignored if modelspace_vloc=.true. +# +#export lobsdiag_forenkf=".true." # use jacobian. must be .true. if modelspace_vloc=".true." +# # need to specify .true. setting since config.anal sets to .false. +# +#export NAM_ENKF="smoothparm=35," echo "END: config.eupdfsoi" From 15a509b4275249a32037914ac8dd429a400b05e2 Mon Sep 17 00:00:00 2001 From: "Andrew.Eichmann" Date: Mon, 21 Mar 2022 15:11:05 +0000 Subject: [PATCH 048/103] EFSOI task entries for WCOSS dell environment --- env/WCOSS_DELL_P3.env | 77 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/env/WCOSS_DELL_P3.env b/env/WCOSS_DELL_P3.env index 680549c4b2c..f0f54b0cb44 100755 --- a/env/WCOSS_DELL_P3.env +++ b/env/WCOSS_DELL_P3.env @@ -118,6 +118,30 @@ elif [ $step = "eupd" ]; then export USE_CFP=${USE_CFP:-"YES"} export APRUNCFP="$launcher \$ncmd $mpmd" +elif [ $step = "eupdfsoi" ]; then + + nth_max=$(($npe_node_max / $npe_node_eupdfsoi)) + + export NTHREADS_ENKF=${nth_eupdfsoi:-$nth_max} + [[ $NTHREADS_ENKF -gt $nth_max ]] && export NTHREADS_ENKF=$nth_max + export APRUN_ENKF="$launcher ${npe_enkf:-${npe_eupdfsoi:-$PBS_NP}}" + + export CFP_MP=${CFP_MP:-"NO"} + export USE_CFP=${USE_CFP:-"YES"} + export APRUNCFP="$launcher \$ncmd $mpmd" + +elif [ $step = "efsoi" ]; then + + nth_max=$(($npe_node_max / $npe_node_efsoi)) + + export NTHREADS_ENKF=${nth_efsoi:-$nth_max} + [[ $NTHREADS_ENKF -gt $nth_max ]] && export NTHREADS_ENKF=$nth_max + export APRUN_ENKF="$launcher ${npe_enkf:-${npe_efsoi:-$PBS_NP}}" + + export CFP_MP=${CFP_MP:-"NO"} + export USE_CFP=${USE_CFP:-"YES"} + export APRUNCFP="$launcher \$ncmd $mpmd" + elif [ $step = "fcst" ]; then #PEs and PEs/node can differ for GFS and GDAS forecasts if threading differs @@ -156,6 +180,19 @@ elif [ $step = "efcs" ]; then [[ $NTHREADS_REGRID_NEMSIO -gt $nth_max ]] && export NTHREADS_REGRID_NEMSIO=$nth_max export APRUN_REGRID_NEMSIO="$launcher $LEVS" +elif [ $step = "efcsfsoi" ]; then + + nth_max=$(($npe_node_max / $npe_node_efcsfsoi)) + + export NTHREADS_FV3=${nth_efcsfsoi:-$nth_max} + [[ $NTHREADS_FV3 -gt $nth_max ]] && export NTHREADS_FV3=$nth_max + export cores_per_node=$npe_node_max + export APRUN_FV3="$launcher ${npe_fv3:-${npe_efcsfsoi:-$PBS_NP}}" + + export NTHREADS_REGRID_NEMSIO=${nth_regrid_nemsio:-1} + [[ $NTHREADS_REGRID_NEMSIO -gt $nth_max ]] && export NTHREADS_REGRID_NEMSIO=$nth_max + export APRUN_REGRID_NEMSIO="$launcher $LEVS" + elif [ $step = "post" ]; then nth_max=$(($npe_node_max / $npe_node_post)) @@ -188,6 +225,26 @@ elif [ $step = "ecen" ]; then [[ $NTHREADS_CYCLE -gt $npe_node_max ]] && export NTHREADS_CYCLE=$npe_node_max export APRUN_CYCLE="$launcher $npe_ecen" +elif [ $step = "ecenfsoi" ]; then + + nth_max=$(($npe_node_max / $npe_node_ecenfsoi)) + + export NTHREADS_ECEN=${nth_ecenfsoi:-$nth_max} + [[ $NTHREADS_ECEN -gt $nth_max ]] && export NTHREADS_ECEN=$nth_max + export APRUN_ECEN="$launcher ${npe_ecenfsoi:-$PBS_NP}" + + export NTHREADS_CHGRES=${nth_chgres:-14} + [[ $NTHREADS_CHGRES -gt $npe_node_max ]] && export NTHREADS_CHGRES=$npe_node_max + export APRUN_CHGRES="time" + + export NTHREADS_CALCINC=${nth_calcinc:-1} + [[ $NTHREADS_CALCINC -gt $nth_max ]] && export NTHREADS_CALCINC=$nth_max + export APRUN_CALCINC="$launcher ${npe_ecenfsoi:-$PBS_NP}" + + export NTHREADS_CYCLE=${nth_cycle:-14} + [[ $NTHREADS_CYCLE -gt $npe_node_max ]] && export NTHREADS_CYCLE=$npe_node_max + export APRUN_CYCLE="$launcher $npe_ecenfsoi" + elif [ $step = "esfc" ]; then nth_max=$(($npe_node_max / $npe_node_esfc)) @@ -200,6 +257,18 @@ elif [ $step = "esfc" ]; then [[ $NTHREADS_CYCLE -gt $npe_node_max ]] && export NTHREADS_CYCLE=$npe_node_max export APRUN_CYCLE="$launcher $npe_esfc" +elif [ $step = "esfcfsoi" ]; then + + nth_max=$(($npe_node_max / $npe_node_esfcfsoi)) + + export NTHREADS_ESFC=${nth_esfcfsoi:-$nth_max} + [[ $NTHREADS_ESFC -gt $nth_max ]] && export NTHREADS_ESFC=$nth_max + export APRUN_ESFC="$launcher ${npe_esfcfsoi:-$PBS_NP}" + + export NTHREADS_CYCLE=${nth_cycle:-14} + [[ $NTHREADS_CYCLE -gt $npe_node_max ]] && export NTHREADS_CYCLE=$npe_node_max + export APRUN_CYCLE="$launcher $npe_esfcfsoi" + elif [ $step = "epos" ]; then nth_max=$(($npe_node_max / $npe_node_epos)) @@ -208,6 +277,14 @@ elif [ $step = "epos" ]; then [[ $NTHREADS_EPOS -gt $nth_max ]] && export NTHREADS_EPOS=$nth_max export APRUN_EPOS="$launcher ${npe_epos:-$PBS_NP}" +elif [ $step = "eposfsoi" ]; then + + nth_max=$(($npe_node_max / $npe_node_eposfsoi)) + + export NTHREADS_EPOS=${nth_eposfsoi:-$nth_max} + [[ $NTHREADS_EPOS -gt $nth_max ]] && export NTHREADS_EPOS=$nth_max + export APRUN_EPOS="$launcher ${npe_eposfsoi:-$PBS_NP}" + elif [ $step = "init" ]; then export APRUN="mpirun" From a189bfe3baa1394962bda5742e87b74f7ee26259 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Mon, 21 Mar 2022 13:02:35 -0500 Subject: [PATCH 049/103] modifications after code review for global-workflow PR 673 --- parm/config/config.base.emc.dyn | 2 -- parm/config/config.efsoi | 2 -- parm/config/config.resources | 11 ----------- parm/config/config.vrfy | 4 ++-- 4 files changed, 2 insertions(+), 17 deletions(-) diff --git a/parm/config/config.base.emc.dyn b/parm/config/config.base.emc.dyn index c20dc3e8c88..915108725f8 100755 --- a/parm/config/config.base.emc.dyn +++ b/parm/config/config.base.emc.dyn @@ -11,7 +11,6 @@ export machine="@MACHINE@" # EMC parallel or NCO production export RUN_ENVIR="emc" - # Account, queue, etc. export ACCOUNT="@ACCOUNT@" export QUEUE="@QUEUE@" @@ -64,7 +63,6 @@ export DO_VRFY="YES" # VRFY step # use RUNMOS flag (currently in config.vrfy) export REALTIME="YES" -#only on HERA #export DO_EFSOI="YES" # Experiment mode (cycled or free-forecast) diff --git a/parm/config/config.efsoi b/parm/config/config.efsoi index 4e8f2c04bec..ea4ac973d26 100755 --- a/parm/config/config.efsoi +++ b/parm/config/config.efsoi @@ -30,8 +30,6 @@ export lnsigcutoff=2.75 # ignored if modelspace_vloc=.true. export lobsdiag_forenkf=".true." # use jacobian. must be .true. if modelspace_vloc=".true." # need to specify .true. setting since config.anal sets to .false. -#export EFSOIEXEC="/scratch1/NCEPDEV/da/Andrew.Eichmann/gsidev/afe-efsoi/GSI/exec/global_efsoi.x" -#export ANAVINFO="/scratch1/NCEPDEV/da/Andrew.Eichmann/para_gfs/nutria/global_anavinfo_efsoi.l127.txt" export ANAVINFO=${HOMEgfs}"/sorc/gsi.fd/util/EFSOI_Utilities/fix/global_anavinfo_efsoi.l127.txt" export NAM_ENKF="smoothparm=35," diff --git a/parm/config/config.resources b/parm/config/config.resources index 47964742379..2e3903e8745 100755 --- a/parm/config/config.resources +++ b/parm/config/config.resources @@ -502,9 +502,6 @@ elif [ $step = "eupdfsoi" ]; then fi fi export npe_node_eupdfsoi=$(echo "$npe_node_max / $nth_eupdfsoi" | bc) - if [[ "$machine" == "WCOSS_C" ]]; then - export memory_eupdfsoi="3072M" - fi elif [ $step = "efsoi" ]; then @@ -538,9 +535,6 @@ elif [ $step = "efsoi" ]; then fi fi export npe_node_efsoi=$(echo "$npe_node_max / $nth_efsoi" | bc) - if [[ "$machine" == "WCOSS_C" ]]; then - export memory_efsoi="3072M" - fi elif [ $step = "ecen" ]; then @@ -563,7 +557,6 @@ elif [ $step = "ecenfsoi" ]; then if [ $CASE = "C384" -o $CASE = "C192" -o $CASE = "C96" -o $CASE = "C48" ]; then export nth_ecenfsoi=2; fi export npe_node_ecenfsoi=$(echo "$npe_node_max / $nth_ecenfsoi" | bc) export nth_cycle=$nth_ecenfsoi - if [[ "$machine" == "WCOSS_C" ]]; then export memory_ecenfsoi="3072M"; fi elif [ $step = "esfc" ]; then @@ -581,7 +574,6 @@ elif [ $step = "esfcfsoi" ]; then export npe_node_esfcfsoi=$npe_node_max export nth_esfcfsoi=1 export nth_cycle=$nth_esfcfsoi - if [[ "$machine" == "WCOSS_C" ]]; then export memory_esfcfsoi="3072M"; fi elif [ $step = "efcs" ]; then @@ -601,8 +593,6 @@ elif [ $step = "efcsfsoi" ]; then export npe_efcsfsoi=$(echo "$layout_x * $layout_y * 6" | bc) export nth_efcsfsoi=${nth_fv3:-2} export npe_node_efcsfsoi=$(echo "$npe_node_max / $nth_efcsfsoi" | bc) - if [[ "$machine" == "WCOSS_C" ]]; then export memory_efcsfsoi="254M"; fi - elif [ $step = "epos" ]; then @@ -620,7 +610,6 @@ elif [ $step = "eposfsoi" ]; then export nth_eposfsoi=6 if [[ "$machine" = "WCOSS_DELL_P3" ]]; then export nth_eposfsoi=7; fi export npe_node_eposfsoi=$(echo "$npe_node_max / $nth_eposfsoi" | bc) - if [[ "$machine" == "WCOSS_C" ]]; then export memory_epos="254M"; fi elif [ $step = "postsnd" ]; then diff --git a/parm/config/config.vrfy b/parm/config/config.vrfy index 61034a72d0f..c2bba1ca8f9 100755 --- a/parm/config/config.vrfy +++ b/parm/config/config.vrfy @@ -20,8 +20,8 @@ export VSDB_STEP1="YES" # Populate VSDB database export VSDB_STEP2="NO" export VRFYG2OBS="YES" # Grid to observations, see note below if turning ON export VRFYPRCP="YES" # Precip threat scores -export VRFYRAD="NO" # Radiance data assimilation monitoring -export VRFYOZN="NO" # Ozone data assimilation monitoring +export VRFYRAD="YES" # Radiance data assimilation monitoring +export VRFYOZN="YES" # Ozone data assimilation monitoring export VRFYMINMON="YES" # GSI minimization monitoring export VRFYTRAK="YES" # Hurricane track verification export VRFYGENESIS="YES" # Cyclone genesis verification From b5f26f6f27ac473fe0ab9ba6f79beea80d0a4972 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Wed, 4 May 2022 14:45:03 -0500 Subject: [PATCH 050/103] modifications suggested by Walter for the PR --- parm/config/config.base.emc.dyn | 2 +- parm/config/config.efcsfsoi | 75 -------------- parm/config/config.efsoi | 4 - parm/config/config.eposfsoi | 9 -- parm/config/config.eupdfsoi | 17 +-- parm/config/config.resources | 2 - ush/hpssarch_gen.sh | 178 ++++++++++++++++---------------- ush/rocoto/setup_workflow.py | 58 ++++------- 8 files changed, 111 insertions(+), 234 deletions(-) diff --git a/parm/config/config.base.emc.dyn b/parm/config/config.base.emc.dyn index 915108725f8..c4bcd5ff4ab 100755 --- a/parm/config/config.base.emc.dyn +++ b/parm/config/config.base.emc.dyn @@ -63,7 +63,7 @@ export DO_VRFY="YES" # VRFY step # use RUNMOS flag (currently in config.vrfy) export REALTIME="YES" -#export DO_EFSOI="YES" +export DO_EFSOI="NO" # Experiment mode (cycled or free-forecast) export MODE="@MODE@" # cycled/free diff --git a/parm/config/config.efcsfsoi b/parm/config/config.efcsfsoi index 07062cdc094..2bdf10f9875 100755 --- a/parm/config/config.efcsfsoi +++ b/parm/config/config.efcsfsoi @@ -18,79 +18,4 @@ if [ $QUILTING = ".true." ]; then export npe_efcsfsoi=$npe_fv3 fi -### Number of enkf members per fcst job -#export NMEM_EFCSGRP=2 -#export RERUN_EFCSGRP="NO" -# -## Turn off inline UPP for EnKF forecast -#export WRITE_DOPOST=".false." -# -## Stochastic physics parameters (only for ensemble forecasts) -#export DO_SKEB="YES" -#export SKEB=0.3 -#export SKEB_TAU=21600. -#export SKEB_LSCALE=250000. -#export SKEBNORM=0 -#export SKEB_NPASS=30 -#export SKEB_VDOF=5 -#export DO_SHUM="YES" -#export SHUM=0.005 -#export SHUM_TAU=21600. -#export SHUM_LSCALE=500000. -#export DO_SPPT="YES" -#export SPPT=0.5 -#export SPPT_TAU=21600. -#export SPPT_LSCALE=500000. -#export SPPT_LOGIT=".true." -#export SPPT_SFCLIMIT=".true." -# -#if [ $QUILTING = ".true." -a $OUTPUT_GRID = "gaussian_grid" ]; then -# export DIAG_TABLE="$HOMEgfs/parm/parm_fv3diag/diag_table_da" -#else -# export DIAG_TABLE="$HOMEgfs/parm/parm_fv3diag/diag_table_da_orig" -#fi -# -## FV3 model namelist parameters to over-ride -#export restart_interval=${restart_interval:-6} -# -## For IAU, write restarts at beginning of window also -#if [ $DOIAU_ENKF = "YES" ]; then -# export restart_interval="3 -1" -#fi -# -#export OUTPUT_FILETYPES="$OUTPUT_FILE" -#if [[ "$OUTPUT_FILE" == "netcdf" ]]; then -# export ichunk2d=0; export jchunk2d=0 -# export ichunk3d=0; export jchunk3d=0; export kchunk3d=0 -# RESTILE=$(echo $CASE_ENKF |cut -c 2-) -# if [[ "$machine" == "WCOSS_DELL_P3" ]]; then -# if [ $RESTILE -ge 384 ]; then -# export OUTPUT_FILETYPES=" 'netcdf_parallel' 'netcdf' " -# export ichunk2d=$((4*RESTILE)) -# export jchunk2d=$((2*RESTILE)) -# export ichunk3d=$((4*RESTILE)) -# export jchunk3d=$((2*RESTILE)) -# export kchunk3d=1 -# else -# export OUTPUT_FILETYPES=" 'netcdf_parallel' 'netcdf' " -# fi -# fi -# if [[ "$machine" == "HERA" ]]; then -# export OUTPUT_FILETYPES=" 'netcdf' 'netcdf' " -# fi -#fi -# -## wave model -#export cplwav=.false. -# -## ocean model resolution -#case "$CASE_ENKF" in -# "C48") export OCNRES=100;; -# "C96") export OCNRES=100;; -# "C192") export OCNRES=050;; -# "C384") export OCNRES=025;; -# "C768") export OCNRES=025;; -# *) export OCNRES=025;; -#esac -# echo "END: config.efcsfsoi" diff --git a/parm/config/config.efsoi b/parm/config/config.efsoi index ea4ac973d26..2dfe1ed8e3d 100755 --- a/parm/config/config.efsoi +++ b/parm/config/config.efsoi @@ -10,10 +10,6 @@ echo "BEGIN: config.efsoi" export npe_enkf=$npe_eupd - -# Use NAM_ENKF below for serial EnKF -##export NAM_ENKF="analpertwtnh=0.9,analpertwtsh=0.9,analpertwttr=0.9" - # LETKF specific settings with model space localization export modelspace_vloc=".true." # model space localization export letkf_flag=".true." # use LETKF instead of serial filter diff --git a/parm/config/config.eposfsoi b/parm/config/config.eposfsoi index ac430d38bc2..61a0b6a52ff 100755 --- a/parm/config/config.eposfsoi +++ b/parm/config/config.eposfsoi @@ -11,13 +11,4 @@ echo "BEGIN: config.eposfsoi" # Get task specific resources . $EXPDIR/config.resources eposfsoi -## No. of concurrent epos jobs [1 implies sequential] -#export NEPOSGRP=7 -#if [ $l4densvar = ".false." ]; then -# export NEPOSGRP=3 -#fi -# -## Generate ensemble spread files -#export ENKF_SPREAD="YES" -# echo "END: config.eposfsoi" diff --git a/parm/config/config.eupdfsoi b/parm/config/config.eupdfsoi index f01e59a648c..a9844e594d8 100755 --- a/parm/config/config.eupdfsoi +++ b/parm/config/config.eupdfsoi @@ -17,22 +17,7 @@ export npe_enkf=$npe_eupd # Use NAM_ENKF below for serial EnKF export NAM_ENKF="analpertwtnh=0.9,analpertwtsh=0.9,analpertwttr=0.9" -## LETKF specific settings with model space localization -#export modelspace_vloc=".true." # model space localization +# EFSOI works only with the serial filter export letkf_flag=".false." # use LETKF instead of serial filter -#export getkf=".true." # Gain form of LETKF (needed for model-space localization) -#export denkf=".true." # EnKF approximation (beneficial since less spread removed by analysis) -#export nobsl_max=10000 # max number of obs in each LETKF volume (uses closest nobsl_max). can -# # be reduced to speed up execution time. -#export analpertwt=0.85 # relaxation to prior spread inflation factor -#export readin_localization_enkf=".false." # Don’t read in localization scales from file (doesn’t make -# # sense for LETKF if model space localization on and nobsl_max>0) -#export corrlength=1250 # Horizontal localization scale (max horizontal distance to search for nobsl_max local obs) -#export lnsigcutoff=2.75 # ignored if modelspace_vloc=.true. -# -#export lobsdiag_forenkf=".true." # use jacobian. must be .true. if modelspace_vloc=".true." -# # need to specify .true. setting since config.anal sets to .false. -# -#export NAM_ENKF="smoothparm=35," echo "END: config.eupdfsoi" diff --git a/parm/config/config.resources b/parm/config/config.resources index 2e3903e8745..5cba156a25f 100755 --- a/parm/config/config.resources +++ b/parm/config/config.resources @@ -482,8 +482,6 @@ elif [ $step = "eupdfsoi" ]; then export nth_eupdfsoi=40 fi elif [ $CASE = "C384" ]; then - #export npe_eupdfsoi=270 - #export nth_eupdfsoi=2 export npe_eupdfsoi=400 export nth_eupdfsoi=5 if [[ "$machine" = "WCOSS_DELL_P3" ]]; then diff --git a/ush/hpssarch_gen.sh b/ush/hpssarch_gen.sh index e54997c4c99..9976713ef03 100755 --- a/ush/hpssarch_gen.sh +++ b/ush/hpssarch_gen.sh @@ -594,10 +594,9 @@ fi ##end of enkfgdas or enkfgfs if [ $type = "efsoigdas" ]; then #----------------------------------------------------- - #IAUFHRS_ENKF=${IAUFHRS_ENKF:-6} IAUFHRS_ENKF="6,12,18,24,30" lobsdiag_forenkf=${lobsdiag_forenkf:-".false."} - nfhrs=`echo $IAUFHRS_ENKF | sed 's/,/ /g'` + nfhrs=$(echo $IAUFHRS_ENKF | sed 's/,/ /g') NMEM_ENKF=${NMEM_ENKF:-80} NMEM_EARCGRP=${NMEM_EARCGRP:-10} ##number of ens memebers included in each tarball NTARS=$((NMEM_ENKF/NMEM_EARCGRP)) @@ -615,7 +614,6 @@ if [ $type = "efsoigdas" ]; then touch efsoi${CDUMP}.txt echo "${dirname}${head}enkfstat " >>efsoi${CDUMP}.txt -# echo "${dirname}${head}gsistat.ensmean " >>efsoi${CDUMP}.txt echo "${dirname}osense_${PDY}${cyc}_init.dat " >>efsoi${CDUMP}.txt echo "${dirname}${head}abias_int.ensmean " >>efsoi${CDUMP}.txt if [ -s $ROTDIR/${dirpath}${head}cnvstat.ensmean ]; then @@ -646,7 +644,7 @@ if [ $type = "efsoigdas" ]; then fi done # loop over FHR for fstep in ecenfsoi esfcfsoi eupdfsoi efcsfsoi eposfsoi ; do - echo "logs/${CDATE}/${CDUMP}${fstep}*.log " >>efsoi${CDUMP}.txt + echo "logs/${CDATE}/${CDUMP}${fstep}*.log " >>efsoi${CDUMP}.txt done @@ -667,92 +665,92 @@ if [ $type = "efsoigdas" ]; then #........................... n=1 while [ $n -le $NTARS ]; do - #........................... - - rm -f efsoi${CDUMP}_grp${n}.txt - rm -f efsoi${CDUMP}_restarta_grp${n}.txt - rm -f efsoi${CDUMP}_restartb_grp${n}.txt - touch efsoi${CDUMP}_grp${n}.txt - touch efsoi${CDUMP}_restarta_grp${n}.txt - touch efsoi${CDUMP}_restartb_grp${n}.txt - - m=1 - while [ $m -le $NMEM_EARCGRP ]; do - nm=$(((n-1)*NMEM_EARCGRP+m)) - mem=$(printf %03i $nm) - dirpath="efsoi${CDUMP}.${PDY}/${cyc}/atmos/mem${mem}/" - dirname="./${dirpath}" - head="${CDUMP}.t${cyc}z." - - #--- - for FH in $nfhrs; do # loop over analysis times in window - FHR=$(printf %03i $FH) - if [ $FHR -eq 6 ]; then - if [ $n -le $NTARS2 ]; then - if [ -s $ROTDIR/${dirpath}${head}atmanl${SUFFIX} ] ; then - echo "${dirname}${head}atmanl${SUFFIX} " >>efsoi${CDUMP}_grp${n}.txt - fi - if [ -s $ROTDIR/${dirpath}${head}ratminc${SUFFIX} ] ; then - echo "${dirname}${head}ratminc${SUFFIX} " >>efsoi${CDUMP}_grp${n}.txt - fi - fi - if [ -s $ROTDIR/${dirpath}${head}ratminc${SUFFIX} ] ; then - echo "${dirname}${head}ratminc${SUFFIX} " >>efsoi${CDUMP}_restarta_grp${n}.txt - fi - - else - if [ $n -le $NTARS2 ]; then - if [ -s $ROTDIR/${dirpath}${head}atma${FHR}${SUFFIX} ] ; then - echo "${dirname}${head}atma${FHR}${SUFFIX} " >>efsoi${CDUMP}_grp${n}.txt - fi - if [ -s $ROTDIR/${dirpath}${head}ratmi${FHR}${SUFFIX} ] ; then - echo "${dirname}${head}ratmi${FHR}${SUFFIX} " >>efsoi${CDUMP}_grp${n}.txt - fi - fi - if [ -s $ROTDIR/${dirpath}${head}ratmi${FHR}${SUFFIX} ] ; then - echo "${dirname}${head}ratmi${FHR}${SUFFIX} " >>efsoi${CDUMP}_restarta_grp${n}.txt - fi - - fi - echo "${dirname}${head}atmf${FHR}${SUFFIX} " >>efsoi${CDUMP}_grp${n}.txt - if [ $FHR -eq 6 ]; then - echo "${dirname}${head}sfcf${FHR}${SUFFIX} " >>efsoi${CDUMP}_grp${n}.txt - fi - done # loop over FHR - - if [[ lobsdiag_forenkf = ".false." ]] ; then - echo "${dirname}${head}gsistat " >>efsoi${CDUMP}_grp${n}.txt - if [ -s $ROTDIR/${dirpath}${head}cnvstat ] ; then - echo "${dirname}${head}cnvstat " >>efsoi${CDUMP}_grp${n}.txt - fi - if [ -s $ROTDIR/${dirpath}${head}radstat ]; then - echo "${dirname}${head}radstat " >>efsoi${CDUMP}_restarta_grp${n}.txt - fi - if [ -s $ROTDIR/${dirpath}${head}cnvstat ]; then - echo "${dirname}${head}cnvstat " >>efsoi${CDUMP}_restarta_grp${n}.txt - fi - echo "${dirname}${head}abias " >>efsoi${CDUMP}_restarta_grp${n}.txt - echo "${dirname}${head}abias_air " >>efsoi${CDUMP}_restarta_grp${n}.txt - echo "${dirname}${head}abias_int " >>efsoi${CDUMP}_restarta_grp${n}.txt - echo "${dirname}${head}abias_pc " >>efsoi${CDUMP}_restarta_grp${n}.txt - fi - #--- - echo "${dirname}RESTART/*0000.sfcanl_data.tile1.nc " >>efsoi${CDUMP}_restarta_grp${n}.txt - echo "${dirname}RESTART/*0000.sfcanl_data.tile2.nc " >>efsoi${CDUMP}_restarta_grp${n}.txt - echo "${dirname}RESTART/*0000.sfcanl_data.tile3.nc " >>efsoi${CDUMP}_restarta_grp${n}.txt - echo "${dirname}RESTART/*0000.sfcanl_data.tile4.nc " >>efsoi${CDUMP}_restarta_grp${n}.txt - echo "${dirname}RESTART/*0000.sfcanl_data.tile5.nc " >>efsoi${CDUMP}_restarta_grp${n}.txt - echo "${dirname}RESTART/*0000.sfcanl_data.tile6.nc " >>efsoi${CDUMP}_restarta_grp${n}.txt - - #--- - echo "${dirname}RESTART " >>efsoi${CDUMP}_restartb_grp${n}.txt - - m=$((m+1)) - done - - - #........................... - n=$((n+1)) + #........................... + + rm -f efsoi${CDUMP}_grp${n}.txt + rm -f efsoi${CDUMP}_restarta_grp${n}.txt + rm -f efsoi${CDUMP}_restartb_grp${n}.txt + touch efsoi${CDUMP}_grp${n}.txt + touch efsoi${CDUMP}_restarta_grp${n}.txt + touch efsoi${CDUMP}_restartb_grp${n}.txt + + m=1 + while [ $m -le $NMEM_EARCGRP ]; do + nm=$(((n-1)*NMEM_EARCGRP+m)) + mem=$(printf %03i $nm) + dirpath="efsoi${CDUMP}.${PDY}/${cyc}/atmos/mem${mem}/" + dirname="./${dirpath}" + head="${CDUMP}.t${cyc}z." + + #--- + for FH in $nfhrs; do # loop over analysis times in window + FHR=$(printf %03i $FH) + if [ $FHR -eq 6 ]; then + if [ $n -le $NTARS2 ]; then + if [ -s $ROTDIR/${dirpath}${head}atmanl${SUFFIX} ] ; then + echo "${dirname}${head}atmanl${SUFFIX} " >>efsoi${CDUMP}_grp${n}.txt + fi + if [ -s $ROTDIR/${dirpath}${head}ratminc${SUFFIX} ] ; then + echo "${dirname}${head}ratminc${SUFFIX} " >>efsoi${CDUMP}_grp${n}.txt + fi + fi + if [ -s $ROTDIR/${dirpath}${head}ratminc${SUFFIX} ] ; then + echo "${dirname}${head}ratminc${SUFFIX} " >>efsoi${CDUMP}_restarta_grp${n}.txt + fi + + else + if [ $n -le $NTARS2 ]; then + if [ -s $ROTDIR/${dirpath}${head}atma${FHR}${SUFFIX} ] ; then + echo "${dirname}${head}atma${FHR}${SUFFIX} " >>efsoi${CDUMP}_grp${n}.txt + fi + if [ -s $ROTDIR/${dirpath}${head}ratmi${FHR}${SUFFIX} ] ; then + echo "${dirname}${head}ratmi${FHR}${SUFFIX} " >>efsoi${CDUMP}_grp${n}.txt + fi + fi + if [ -s $ROTDIR/${dirpath}${head}ratmi${FHR}${SUFFIX} ] ; then + echo "${dirname}${head}ratmi${FHR}${SUFFIX} " >>efsoi${CDUMP}_restarta_grp${n}.txt + fi + + fi + echo "${dirname}${head}atmf${FHR}${SUFFIX} " >>efsoi${CDUMP}_grp${n}.txt + if [ $FHR -eq 6 ]; then + echo "${dirname}${head}sfcf${FHR}${SUFFIX} " >>efsoi${CDUMP}_grp${n}.txt + fi + done # loop over FHR + + if [[ lobsdiag_forenkf = ".false." ]] ; then + echo "${dirname}${head}gsistat " >>efsoi${CDUMP}_grp${n}.txt + if [ -s $ROTDIR/${dirpath}${head}cnvstat ] ; then + echo "${dirname}${head}cnvstat " >>efsoi${CDUMP}_grp${n}.txt + fi + if [ -s $ROTDIR/${dirpath}${head}radstat ]; then + echo "${dirname}${head}radstat " >>efsoi${CDUMP}_restarta_grp${n}.txt + fi + if [ -s $ROTDIR/${dirpath}${head}cnvstat ]; then + echo "${dirname}${head}cnvstat " >>efsoi${CDUMP}_restarta_grp${n}.txt + fi + echo "${dirname}${head}abias " >>efsoi${CDUMP}_restarta_grp${n}.txt + echo "${dirname}${head}abias_air " >>efsoi${CDUMP}_restarta_grp${n}.txt + echo "${dirname}${head}abias_int " >>efsoi${CDUMP}_restarta_grp${n}.txt + echo "${dirname}${head}abias_pc " >>efsoi${CDUMP}_restarta_grp${n}.txt + fi + #--- + echo "${dirname}RESTART/*0000.sfcanl_data.tile1.nc " >>efsoi${CDUMP}_restarta_grp${n}.txt + echo "${dirname}RESTART/*0000.sfcanl_data.tile2.nc " >>efsoi${CDUMP}_restarta_grp${n}.txt + echo "${dirname}RESTART/*0000.sfcanl_data.tile3.nc " >>efsoi${CDUMP}_restarta_grp${n}.txt + echo "${dirname}RESTART/*0000.sfcanl_data.tile4.nc " >>efsoi${CDUMP}_restarta_grp${n}.txt + echo "${dirname}RESTART/*0000.sfcanl_data.tile5.nc " >>efsoi${CDUMP}_restarta_grp${n}.txt + echo "${dirname}RESTART/*0000.sfcanl_data.tile6.nc " >>efsoi${CDUMP}_restarta_grp${n}.txt + + #--- + echo "${dirname}RESTART " >>efsoi${CDUMP}_restartb_grp${n}.txt + + m=$((m+1)) + done + + + #........................... + n=$((n+1)) done #........................... diff --git a/ush/rocoto/setup_workflow.py b/ush/rocoto/setup_workflow.py index 8dc583547ad..a029b934484 100755 --- a/ush/rocoto/setup_workflow.py +++ b/ush/rocoto/setup_workflow.py @@ -66,7 +66,7 @@ def main(): steps = steps + wav_steps_awips if _base.get('DO_AWIPS', 'NO') == 'YES' else steps # for EFSOI - efsoi_steps = ['eupdfsoi', 'esfcfsoi', 'ecenfsoi', 'efcsfsoi', 'eposfsoi','efsoi'] + efsoi_steps = ['eupdfsoi', 'esfcfsoi', 'ecenfsoi', 'efcsfsoi', 'eposfsoi', 'efsoi'] steps = steps + efsoi_steps if _base.get('DO_EFSOI','NO') == 'YES' else steps dict_configs = wfu.source_configs(configs, steps) @@ -168,7 +168,6 @@ def get_definitions(base): do_efsoi = base.get('DO_EFSOI', 'NO').upper() hpssarch = base.get('HPSSARCH', 'NO').upper() - strings = [] strings.append('\n') @@ -334,7 +333,6 @@ def get_hyb_resources(dict_configs): tasks1 = ['eobs', 'ediag', 'eupd', 'echgres', 'eupdfsoi'] else: tasks1 = ['eobs', 'ediag', 'eupd', 'echgres'] - else: if do_efsoi in ['Y', 'YES']: tasks1 = ['eobs', 'eomg', 'eupd', 'echgres', 'eupdfsoi'] @@ -377,8 +375,7 @@ def get_hyb_resources(dict_configs): do_efsoi = base.get('DO_EFSOI', 'NO').upper() if do_efsoi in ['Y', 'YES']: - #tasks2 = ['ecen', 'ecenfsoi', 'esfc', 'esfcfsoi', 'efcs', 'efcsfsoi', 'epos', 'eposfsoi', 'earc', 'efsoi'] - tasks2 = ['ecenfsoi', 'esfcfsoi', 'efcsfsoi', 'eposfsoi', 'efsoi', 'ecen', 'esfc', 'efcs', 'epos', 'earc' ] + tasks2 = ['ecenfsoi', 'esfcfsoi', 'efcsfsoi', 'eposfsoi', 'efsoi', 'ecen', 'esfc', 'efcs', 'epos', 'earc'] else: tasks2 = ['ecen', 'esfc', 'efcs', 'epos', 'earc'] for task in tasks2: @@ -1058,24 +1055,23 @@ def get_hyb_tasks(dict_configs, cycledef='enkf'): dict_tasks[f'{cdump}eupd'] = task - # # eupdfsoi + # eupdfsoi do_efsoi = base.get('DO_EFSOI', 'NO').upper() if do_efsoi in ['Y', 'YES']: - deps = [] if lobsdiag_forenkf in ['.F.', '.FALSE.']: - dep_dict = {'type': 'metatask', 'name': '%seomn' % cdump} + dep_dict = {'type': 'metatask', 'name': f'{cdump}eomn'} else: - dep_dict = {'type': 'task', 'name': '%sediag' % cdump} + dep_dict = {'type': 'task', 'name': f'{cdump}ediag'} deps.append(rocoto.add_dependency(dep_dict)) data = '&ROTDIR;/gdas.@Y@m@d/@H/atmos/gdas.t@Hz.atmanl.ensres.nc' dep_dict = {'type': 'data', 'data': data } deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and',dep=deps) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) task = wfu.create_wf_task('eupdfsoi', cdump=cdump, envar=envars1, dependency=dependencies, cycledef=cycledef) - dict_tasks['%seupdfsoi' % cdump] = task + dict_tasks[f'{cdump}eupdfsoi'] = task # All hybrid tasks beyond this point are always executed in the GDAS cycle cdump = 'gdas' @@ -1112,17 +1108,16 @@ def get_hyb_tasks(dict_configs, cycledef='enkf'): if do_efsoi in ['Y', 'YES']: # ecmnfsoi, ecenfsoi deps1 = [] - #data = '&ROTDIR;/%s.@Y@m@d/@H/%s.t@Hz.loganl.txt' % (cdump, cdump) data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/{cdump}.t@Hz.loganl.txt' dep_dict = {'type': 'data', 'data': data} deps1.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': '%sanalcalc' % cdump} + dep_dict = {'type': 'task', 'name': f'{cdump}analcalc'} deps1.append(rocoto.add_dependency(dep_dict)) dependencies1 = rocoto.create_dependency(dep_condition='or', dep=deps1) deps2 = [] deps2 = dependencies1 - dep_dict = {'type': 'task', 'name': '%seupdfsoi' % cdump_eupd} + dep_dict = {'type': 'task', 'name': f'{cdump_eupd}eupdfsoi'} deps2.append(rocoto.add_dependency(dep_dict)) dependencies2 = rocoto.create_dependency(dep_condition='and', dep=deps2) @@ -1135,7 +1130,7 @@ def get_hyb_tasks(dict_configs, cycledef='enkf'): task = wfu.create_wf_task('ecenfsoi', cdump=cdump, envar=ecenenvars, dependency=dependencies2, metatask='ecmnfsoi', varname=varname1, varval=varval1, vardict=vardict) - dict_tasks['%secmnfsoi' % cdump] = task + dict_tasks[f'{cdump}ecmnfsoi'] = task # esfc deps1 = [] @@ -1159,21 +1154,21 @@ def get_hyb_tasks(dict_configs, cycledef='enkf'): if do_efsoi in ['Y', 'YES']: # esfcfsoi deps1 = [] - data = '&ROTDIR;/%s.@Y@m@d/@H/%s.t@Hz.loganl.txt' % (cdump, cdump) + data = '&ROTDIR;/{cdump}.@Y@m@d/@H/{cdump}.t@Hz.loganl.txt' dep_dict = {'type': 'data', 'data': data} deps1.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': '%sanalcalc' % cdump} + dep_dict = {'type': 'task', 'name': f'{cdump}analcalc'} deps1.append(rocoto.add_dependency(dep_dict)) dependencies1 = rocoto.create_dependency(dep_condition='or', dep=deps1) deps2 = [] deps2 = dependencies1 - dep_dict = {'type': 'task', 'name': '%seupdfsoi' % cdump_eupd} + dep_dict = {'type': 'task', 'name': f'{cdump_eupd}eupdfsoi'} deps2.append(rocoto.add_dependency(dep_dict)) dependencies2 = rocoto.create_dependency(dep_condition='and', dep=deps2) task = wfu.create_wf_task('esfcfsoi', cdump=cdump, envar=envars1, dependency=dependencies2, cycledef=cycledef) - dict_tasks['%sesfcfsoi' % cdump] = task + dict_tasks[f'{cdump}esfcfsoi'] = task # efmn, efcs deps1 = [] @@ -1209,25 +1204,22 @@ def get_hyb_tasks(dict_configs, cycledef='enkf'): if do_efsoi in ['Y', 'YES']: # efmnfsoi, efcsfsoi deps1 = [] - dep_dict = {'type': 'metatask', 'name': '%secmnfsoi' % cdump} + dep_dict = {'type': 'metatask', 'name': f'{cdump}ecmnfsoi'} deps1.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': '%sesfcfsoi' % cdump} + dep_dict = {'type': 'task', 'name': f'{cdump}esfcfsoi'} deps1.append(rocoto.add_dependency(dep_dict)) dependencies1 = rocoto.create_dependency(dep_condition='and', dep=deps1) deps2 = [] deps2 = dependencies1 - # liaofan: remove the option to run efcsfsoi in the cold start (2020.05.26) - #dep_dict = {'type': 'cycleexist', 'condition': 'not', 'offset': '-06:00:00'} - #deps2.append(rocoto.add_dependency(dep_dict)) dependencies2 = rocoto.create_dependency(dep_condition='and', dep=deps2) efcsenvars = envars1 + [ensgrp] task = wfu.create_wf_task('efcsfsoi', cdump=cdump, envar=efcsenvars, dependency=dependencies2, metatask='efmnfsoi', varname='grp', varval=EFCSGROUPS, cycledef=cycledef) - dict_tasks['%sefmnfsoi' % cdump] = task + dict_tasks[f'{cdump}efmnfsoi' ] = task # epmn, epos deps = [] @@ -1248,7 +1240,7 @@ def get_hyb_tasks(dict_configs, cycledef='enkf'): if do_efsoi in ['Y', 'YES']: # epmnfsoi, eposfsoi deps = [] - dep_dict = {'type': 'metatask', 'name': '%sefmnfsoi' % cdump} + dep_dict = {'type': 'metatask', 'name': f'{cdump}efmnfsoi'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) fhrgrp = rocoto.create_envar(name='FHRGRP', value='#grp#') @@ -1260,14 +1252,10 @@ def get_hyb_tasks(dict_configs, cycledef='enkf'): task = wfu.create_wf_task('eposfsoi', cdump=cdump, envar=eposenvars, dependency=dependencies, metatask='epmnfsoi', varname=varname1, varval=varval1, vardict=vardict) - dict_tasks['%sepmnfsoi' % cdump] = task + dict_tasks[f'{cdump}epmnfsoi'] = task # efsoi deps = [] - # dep_dict = {'type': 'metatask', 'name': '%sepmnfsoi' % cdump} - # deps.append(rocoto.add_dependency(dep_dict)) - # dep_dict = {'type': 'metatask', 'name': '%sepmnsfsoi' % cdump, 'offset': '-6:00:00'} - # deps.append(rocoto.add_dependency(dep_dict)) data = '&ROTDIR;/efsoigdas.@Y@m@d/@H/atmos/gdas.t@Hz.atmf030.ensmean.nc' dep_dict = {'type': 'data', 'data': data, 'offset': '-6:00:00'} deps.append(rocoto.add_dependency(dep_dict)) @@ -1281,14 +1269,14 @@ def get_hyb_tasks(dict_configs, cycledef='enkf'): dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) task = wfu.create_wf_task('efsoi', cdump=cdump, envar=envars1, dependency=dependencies, cycledef=cycledef) - dict_tasks['%sefsoi' % cdump] = task + dict_tasks[f'{cdump}efsoi'] = task # eamn, earc deps = [] dep_dict = {'type': 'metatask', 'name': f'{cdump}epmn'} deps.append(rocoto.add_dependency(dep_dict)) if do_efsoi in ['Y', 'YES']: - dep_dict = {'type': 'metatask', 'name': '%sepmnfsoi' % cdump} + dep_dict = {'type': 'metatask', 'name': f'{cdump}epmnfsoi'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) else: @@ -1465,7 +1453,6 @@ def dict_to_strings(dict_in): def get_eposfsoigroups(epos, cdump='gdas'): - # fhmin = 0 fhmin = 6 fhmax = 30 fhout = 6 @@ -1547,10 +1534,7 @@ def create_xml(dict_configs): 'gdasepos':'gdasepmn', 'gdasearc':'gdaseamn', 'gdasechgres':'gdasechgres'} - #for each_task, each_resource_string in dict_hyb_resources.iteritems(): for each_task, each_resource_string in dict_hyb_resources.items(): - #print each_task,hyp_tasks[each_task] - #print dict_hyb_tasks[hyp_tasks[each_task]] if 'MEMORY' not in each_resource_string: if each_task in dict_hyb_tasks: temp_task_string = [] From 8609ac339864f32f195bf1af179d40288ced2e99 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Fri, 6 May 2022 13:27:17 -0500 Subject: [PATCH 051/103] corrected typo dependency specification --- ush/rocoto/setup_workflow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ush/rocoto/setup_workflow.py b/ush/rocoto/setup_workflow.py index a029b934484..2d3867510c1 100755 --- a/ush/rocoto/setup_workflow.py +++ b/ush/rocoto/setup_workflow.py @@ -1154,7 +1154,7 @@ def get_hyb_tasks(dict_configs, cycledef='enkf'): if do_efsoi in ['Y', 'YES']: # esfcfsoi deps1 = [] - data = '&ROTDIR;/{cdump}.@Y@m@d/@H/{cdump}.t@Hz.loganl.txt' + data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/{cdump}.t@Hz.loganl.txt' dep_dict = {'type': 'data', 'data': data} deps1.append(rocoto.add_dependency(dep_dict)) dep_dict = {'type': 'task', 'name': f'{cdump}analcalc'} From b37d624ba7c37c3d122b55e16a3474b0129c6e51 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Tue, 7 Jun 2022 10:44:36 -0500 Subject: [PATCH 052/103] attempt to get old global-workflow to work with new gsi --- sorc/build_gsi.sh | 3 ++- sorc/checkout.sh | 6 +++--- sorc/link_workflow.sh | 3 ++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/sorc/build_gsi.sh b/sorc/build_gsi.sh index b912f6c8d7c..f0301da7cfe 100755 --- a/sorc/build_gsi.sh +++ b/sorc/build_gsi.sh @@ -20,7 +20,8 @@ if [ ! -d "../exec" ]; then fi cd gsi.fd/ush/ -./build_all_cmake.sh "PRODUCTION" "$cwd/gsi.fd" +#./build_all_cmake.sh "PRODUCTION" "$cwd/gsi.fd" +./build.sh "Release" "$cwd/gsi.fd" ##./build_all_cmake.sh "PRODUCTION" "$cwd/gsi.fd" "NCO" # use this line for pruned NCO install exit diff --git a/sorc/checkout.sh b/sorc/checkout.sh index fa05503d61b..cf95f4f34a5 100755 --- a/sorc/checkout.sh +++ b/sorc/checkout.sh @@ -41,10 +41,10 @@ fi echo gsi checkout ... if [[ ! -d gsi.fd ]] ; then rm -f ${topdir}/checkout-gsi.log -# git clone --recursive https://github.com/NOAA-EMC/GSI.git gsi.fd >> ${logdir}/checkout-gsi.log 2>&1 - git clone --recursive git@github.com:AndrewEichmann-NOAA/GSI.git gsi.fd >> ${logdir}/checkout-gsi.log 2>&1 + git clone --recursive https://github.com/NOAA-EMC/GSI.git gsi.fd >> ${logdir}/checkout-gsi.log 2>&1 +# git clone --recursive git@github.com:AndrewEichmann-NOAA/GSI.git gsi.fd >> ${logdir}/checkout-gsi.log 2>&1 cd gsi.fd - git checkout EXP-efso_fv3 +# git checkout EXP-efso_fv3 # git checkout a62dec6 git submodule update cd ${topdir} diff --git a/sorc/link_workflow.sh b/sorc/link_workflow.sh index 899752dc4fe..a48be72d788 100755 --- a/sorc/link_workflow.sh +++ b/sorc/link_workflow.sh @@ -284,7 +284,8 @@ for gsiexe in calc_analysis.x calc_increment_ens_ncio.x calc_increment_ens.x \ interp_inc.x ncdiag_cat.x oznmon_horiz.x oznmon_time.x radmon_angle.x global_efsoi.x \ radmon_bcoef.x radmon_bcor.x radmon_time.x recentersigp.x;do [[ -s $gsiexe ]] && rm -f $gsiexe - $LINK ../sorc/gsi.fd/exec/$gsiexe . + #$LINK ../sorc/gsi.fd/exec/$gsiexe . + $LINK ../sorc/gsi.fd/install/bin/$gsiexe . done for gldasexe in gdas2gldas gldas2gdas gldas_forcing gldas_model gldas_post gldas_rst; do From 980298a06afefb301b3c3a1ce4ec118ac15075cf Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 14 Jul 2022 07:58:03 -0500 Subject: [PATCH 053/103] added efsoi to linked gsi executables --- sorc/link_workflow.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorc/link_workflow.sh b/sorc/link_workflow.sh index c9f8c829362..353a000904c 100755 --- a/sorc/link_workflow.sh +++ b/sorc/link_workflow.sh @@ -265,7 +265,7 @@ for ufs_utilsexe in \ done for gsiexe in calc_analysis.x calc_increment_ens_ncio.x calc_increment_ens.x \ - getsfcensmeanp.x getsigensmeanp_smooth.x getsigensstatp.x enkf.x gsi.x \ + getsfcensmeanp.x getsigensmeanp_smooth.x getsigensstatp.x efsoi.x enkf.x gsi.x \ interp_inc.x ncdiag_cat_serial.x recentersigp.x;do [[ -s $gsiexe ]] && rm -f $gsiexe $LINK ../sorc/gsi.fd/install/bin/$gsiexe . From 261e91d1e26e1b3cdcd157e5783426c63fd3ccc0 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 14 Jul 2022 10:04:27 -0500 Subject: [PATCH 054/103] cleaned up leftovers from merge --- sorc/link_workflow.sh | 34 ---------------------------------- 1 file changed, 34 deletions(-) diff --git a/sorc/link_workflow.sh b/sorc/link_workflow.sh index ffae11b1682..0373f84f2f1 100755 --- a/sorc/link_workflow.sh +++ b/sorc/link_workflow.sh @@ -136,40 +136,6 @@ fi #------------------------------ #--add GSI fix directory #------------------------------ -<<<<<<< HEAD -cd ${pwd}/../jobs ||exit 8 - $LINK ../sorc/gsi.fd/jobs/JGLOBAL_ATMOS_ANALYSIS . - $LINK ../sorc/gsi.fd/jobs/JGLOBAL_ATMOS_ANALYSIS_CALC . - $LINK ../sorc/gsi.fd/jobs/JGDAS_ATMOS_ANALYSIS_DIAG . - $LINK ../sorc/gsi.fd/jobs/JGDAS_ENKF_SELECT_OBS . - $LINK ../sorc/gsi.fd/jobs/JGDAS_ENKF_DIAG . - $LINK ../sorc/gsi.fd/jobs/JGDAS_ENKF_UPDATE . - $LINK ../sorc/gsi.fd/jobs/JGDAS_ENKF_ECEN . - $LINK ../sorc/gsi.fd/jobs/JGDAS_ENKF_SFC . - $LINK ../sorc/gsi.fd/jobs/JGDAS_ENKF_FCST . - $LINK ../sorc/gsi.fd/jobs/JGDAS_ENKF_POST . - $LINK ../sorc/gsi.fd/jobs/JGDAS_ATMOS_CHGRES_FORENKF . - $LINK ../sorc/gsi.fd/jobs/JGDAS_EFSOI_UPDATE . - $LINK ../sorc/gsi.fd/jobs/JGDAS_EFSOI_ECEN . - $LINK ../sorc/gsi.fd/jobs/JGDAS_EFSOI_SFC . - $LINK ../sorc/gsi.fd/jobs/JGDAS_EFSOI_FCST . - $LINK ../sorc/gsi.fd/jobs/JGDAS_EFSOI_POST . - $LINK ../sorc/gsi.fd/jobs/JGDAS_EFSOI . -cd ${pwd}/../scripts ||exit 8 - $LINK ../sorc/gsi.fd/scripts/exglobal_atmos_analysis.sh . - $LINK ../sorc/gsi.fd/scripts/exglobal_atmos_analysis_calc.sh . - $LINK ../sorc/gsi.fd/scripts/exglobal_diag.sh . - $LINK ../sorc/gsi.fd/scripts/exgdas_enkf_select_obs.sh . - $LINK ../sorc/gsi.fd/scripts/exgdas_enkf_update.sh . - $LINK ../sorc/gsi.fd/scripts/exgdas_enkf_ecen.sh . - $LINK ../sorc/gsi.fd/scripts/exgdas_enkf_sfc.sh . - $LINK ../sorc/gsi.fd/scripts/exgdas_enkf_fcst.sh . - $LINK ../sorc/gsi.fd/scripts/exgdas_enkf_post.sh . - $LINK ../sorc/gsi.fd/scripts/exgdas_atmos_chgres_forenkf.sh . - $LINK ../sorc/gsi.fd/scripts/exgdas_efsoi_update.sh . - $LINK ../sorc/gsi.fd/scripts/exgdas_efsoi.sh . -======= ->>>>>>> develop cd ${pwd}/../fix ||exit 8 [[ -d fix_gsi ]] && rm -rf fix_gsi $LINK ../sorc/gsi.fd/fix fix_gsi From d8d33c1f43d328803a4755f32204ed4e217b420e Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Wed, 20 Jul 2022 10:23:44 -0500 Subject: [PATCH 055/103] builds EFSOI and incorporates CRTM fix --- sorc/build_gsi_utils.sh | 10 +++++++++- sorc/checkout.sh | 3 ++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/sorc/build_gsi_utils.sh b/sorc/build_gsi_utils.sh index bc579300d1d..f8e81044068 100755 --- a/sorc/build_gsi_utils.sh +++ b/sorc/build_gsi_utils.sh @@ -21,9 +21,17 @@ while getopts ":dov" option; do done shift $((OPTIND-1)) +UTIL_OPTS="-DBUILD_UTIL_ENKF_GFS=ON -DBUILD_UTIL_NCIO=ON" +GSIENKF_INSTALL_PREFIX="${cwd}/gsi_enkf.fd/install" +if [[ -d "${GSIENKF_INSTALL_PREFIX}" ]]; then + CMAKE_OPTS="-Dgsi_ROOT=${GSIENKF_INSTALL_PREFIX} -Denkf_ROOT=${GSIENKF_INSTALL_PREFIX}" + UTIL_OPTS+=" -DBUILD_UTIL_EFSOI=ON" +fi + BUILD_TYPE=${BUILD_TYPE:-"Release"} \ BUILD_VERBOSE=${BUILD_VERBOSE:-"NO"} \ -UTIL_OPTS="-DBUILD_UTIL_ENKF_GFS=ON -DBUILD_UTIL_NCIO=ON" \ +CMAKE_OPTS="${CMAKE_OPTS:-}" \ +UTIL_OPTS="${UTIL_OPTS:-}" \ ${cwd}/gsi_utils.fd/ush/build.sh exit diff --git a/sorc/checkout.sh b/sorc/checkout.sh index 978d932ba70..90b64db8043 100755 --- a/sorc/checkout.sh +++ b/sorc/checkout.sh @@ -132,7 +132,8 @@ mkdir -p ${logdir} errs=0 checkout "ufs_model.fd" "https://github.com/ufs-community/ufs-weather-model" "${ufs_model_hash:-b97375c}" ; errs=$((errs + $?)) checkout "gsi_enkf.fd" "https://github.com/NOAA-EMC/GSI.git" "67f5ab4" ; errs=$((errs + $?)) -checkout "gsi_utils.fd" "https://github.com/NOAA-EMC/GSI-Utils.git" "322cc7b" ; errs=$((errs + $?)) +#checkout "gsi_utils.fd" "https://github.com/NOAA-EMC/GSI-Utils.git" "322cc7b" ; errs=$((errs + $?)) +checkout "gsi_utils.fd" "https://github.com/NOAA-EMC/GSI-Utils.git" "14890af" ; errs=$((errs + $?)) checkout "gsi_monitor.fd" "https://github.com/NOAA-EMC/GSI-Monitor.git" "acf8870" ; errs=$((errs + $?)) checkout "gldas.fd" "https://github.com/NOAA-EMC/GLDAS.git" "fd8ba62" ; errs=$((errs + $?)) checkout "ufs_utils.fd" "https://github.com/ufs-community/UFS_UTILS.git" "a2b0817" ; errs=$((errs + $?)) From 593367260b7e125f9b7a42c7746d0b59541a5539 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 21 Jul 2022 12:02:35 -0500 Subject: [PATCH 056/103] first stab at getting efsoi into new xml generator --- workflow/applications.py | 10 ++ workflow/rocoto/workflow_tasks.py | 167 ++++++++++++++++++++++++++++++ 2 files changed, 177 insertions(+) diff --git a/workflow/applications.py b/workflow/applications.py index e91475e36f9..be9da443319 100644 --- a/workflow/applications.py +++ b/workflow/applications.py @@ -105,6 +105,7 @@ def __init__(self, configuration: Configuration) -> None: self.do_wafs = _base.get('DO_WAFS', False) self.do_vrfy = _base.get('DO_VRFY', True) self.do_metp = _base.get('DO_METP', False) + self.do_efsoi = _base.get('DO_EFSOI', False) self.do_hpssarch = _base.get('HPSSARCH', False) @@ -180,6 +181,9 @@ def _cycled_configs(self): if self.do_hybvar: configs += ['eobs', 'eomg', 'ediag', 'eupd', 'ecen', 'esfc', 'efcs', 'echgres', 'epos', 'earc'] + if self.do_efsoi: + configs += ['eupdfsoi','ecenfsoi','esfcfsoi','efcsfsoi','eposfsoi','efsoi'] + if self.do_metp: configs += ['metp'] @@ -285,6 +289,8 @@ def _source_configs(self, configuration: Configuration) -> Dict[str, Any]: files += ['config.anal', 'config.eupd'] elif config in ['efcs']: files += ['config.fcst', 'config.efcs'] + elif config in ['efcsfsoi']: + files += ['config.fcst', 'config.efcsfsoi'] elif 'wave' in config: files += ['config.wave', f'config.{config}'] else: @@ -321,6 +327,7 @@ def _get_cycled_task_names(self): gdas_gfs_common_cleanup_tasks = ['arch'] gldas_tasks = ['gldas'] + efsoi_tasks = ['eupdfsoi','ecenfsoi','esfcfsoi','efcsfsoi','eposfsoi','efsoi'] wave_prep_tasks = ['waveinit', 'waveprep'] wave_bndpnt_tasks = ['wavepostbndpnt', 'wavepostbndpntbll'] wave_post_tasks = ['wavepostsbs', 'wavepostpnt'] @@ -338,6 +345,9 @@ def _get_cycled_task_names(self): if self.do_gldas: gdas_tasks += gldas_tasks + if self.do_efsoi: + gdas_tasks += efsoi_tasks + if self.do_wave and 'gdas' in self.wave_cdumps: gdas_tasks += wave_prep_tasks diff --git a/workflow/rocoto/workflow_tasks.py b/workflow/rocoto/workflow_tasks.py index 8e356a2a528..0fd8caf3d3a 100644 --- a/workflow/rocoto/workflow_tasks.py +++ b/workflow/rocoto/workflow_tasks.py @@ -14,6 +14,7 @@ class Tasks: 'prep', 'anal', 'sfcanl', 'analcalc', 'analdiag', 'gldas', 'arch', 'earc', 'ecen', 'echgres', 'ediag', 'efcs', 'eobs', 'eomg', 'epos', 'esfc', 'eupd', + 'eupdfsoi','ecenfsoi','esfcfsoi','efcsfsoi','eposfsoi','efsoi' 'fcst', 'post', 'ocnpost', 'vrfy', 'metp', 'postsnd', 'awips', 'gempak', 'wafs', 'wafsblending', 'wafsblending0p25', @@ -880,6 +881,32 @@ def eupd(self): return task + def eupdfsoi(self): + deps = [] + if self.app_config.lobsdiag_forenkf: + dep_dict = {'type': 'task', 'name': f'{self.cdump}ediag'} + else: + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}eomn'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('eupdfsoi') + task = create_wf_task('eupdfsoi', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def efsoi(self): + deps = [] + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}epmnfsoi'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('efsoi') + task = create_wf_task('efsoi', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def ecen(self): self._is_this_a_gdas_task(self.cdump, 'ecen') @@ -931,6 +958,57 @@ def _get_ecengroups(): metatask='ecmn', varname=varname1, varval=varval1, vardict=vardict) return task + def ecenfsoi(self): + + self._is_this_a_gdas_task(self.cdump, 'ecenfsoi') + + def _get_ecenfsoigroups(): + + if self._base.get('DOIAU_ENKF', False): + fhrs = list(self._base.get('IAUFHRS', '6').split(',')) + + necenfsoigrp = self._configs['ecen']['NECENGRP'] + ngrps = necenfsoigrp if len(fhrs) > necenfsoigrp else len(fhrs) + + fhrs = [f'{int(fhr):03d}' for fhr in fhrs] + fhrs = np.array_split(fhrs, ngrps) + fhrs = [fhr.tolist() for fhr in fhrs] + + grp = ' '.join([f'{x:03d}' for x in range(0, ngrps)]) + dep = ' '.join([f[-1] for f in fhrs]) + lst = ' '.join(['_'.join(f) for f in fhrs]) + + else: + grp = '000' + dep = 'f006' + lst = 'f006' + + return grp, dep, lst + + eupdfsoi_cdump = 'gdas' if 'gdas' in self.app_config.eupd_cdumps else 'gfs' + + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}analcalc'} + deps.append(rocoto.add_dependency(dep_dict)) + dep_dict = {'type': 'task', 'name': f'{eupdfsoi_cdump}eupdfsoi'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + ecenfsoienvars = self.envars.copy() + ecenfsoienvar_dict = {'FHRGRP': '#grp#', + 'FHRLST': '#lst#'} + for key, value in ecenfsoienvar_dict.items(): + ecenfsoienvars.append(rocoto.create_envar(name=key, value=str(value))) + + varname1, varname2, varname3 = 'grp', 'dep', 'lst' + varval1, varval2, varval3 = _get_ecenfsoigroups() + vardict = {varname2: varval2, varname3: varval3} + + resources = self.get_resource('ecenfsoi') + task = create_wf_task('ecenfsoi', resources, cdump=self.cdump, envar=ecenfsoienvars, dependency=dependencies, + metatask='ecmnfsoi', varname=varname1, varval=varval1, vardict=vardict) + return task + def esfc(self): self._is_this_a_gdas_task(self.cdump, 'esfc') @@ -949,6 +1027,25 @@ def esfc(self): return task + def esfcfsoi(self): + + self._is_this_a_gdas_task(self.cdump, 'esfcfsoi') + + eupd_cdump = 'gdas' if 'gdas' in self.app_config.eupd_cdumps else 'gfs' + + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}analcalc'} + deps.append(rocoto.add_dependency(dep_dict)) + dep_dict = {'type': 'task', 'name': f'{eupd_cdump}eupdfsoi'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + resources = self.get_resource('esfcfsoi') + task = create_wf_task('esfcfsoi', resources, cdump='gdas', envar=self.envars, dependency=dependencies) + + return task + + def efcs(self): self._is_this_a_gdas_task(self.cdump, 'efcs') @@ -974,6 +1071,32 @@ def efcs(self): return task + def efcsfsoi(self): + + self._is_this_a_gdas_task(self.cdump, 'efcsfsoi') + + deps = [] + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}ecmn'} + deps.append(rocoto.add_dependency(dep_dict)) + dep_dict = {'type': 'task', 'name': f'{self.cdump}esfc'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + dep_dict = {'type': 'cycleexist', 'condition': 'not', 'offset': '-06:00:00'} + dependencies.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='or', dep=dependencies) + + efcsfsoienvars = self.envars.copy() + efcsfsoienvars.append(rocoto.create_envar(name='ENSGRP', value='#grp#')) + + groups = self._get_hybgroups(self._base['NMEM_ENKF'], self._configs['efcs']['NMEM_EFCSGRP']) + + resources = self.get_resource('efcsfsoi') + task = create_wf_task('efcsfsoi', resources, cdump=self.cdump, envar=efcsfsoienvars, dependency=dependencies, + metatask='efmnfsoi', varname='grp', varval=groups) + + return task + + def echgres(self): self._is_this_a_gdas_task(self.cdump, 'echgres') @@ -1034,6 +1157,50 @@ def _get_eposgroups(epos): return task + def eposfsoi(self): + + self._is_this_a_gdas_task(self.cdump, 'eposfsoi') + + def _get_eposfsoigroups(eposfsoi): + fhmin = eposfsoi['FHMIN_ENKF'] + fhmax = eposfsoi['FHMAX_ENKF'] + fhout = eposfsoi['FHOUT_ENKF'] + fhrs = range(fhmin, fhmax + fhout, fhout) + + neposfsoigrp = eposfsoi['NEPOSGRP'] + ngrps = neposfsoigrp if len(fhrs) > neposfsoigrp else len(fhrs) + + fhrs = [f'f{fhr:03d}' for fhr in fhrs] + fhrs = np.array_split(fhrs, ngrps) + fhrs = [f.tolist() for f in fhrs] + + grp = ' '.join([f'{x:03d}' for x in range(0, ngrps)]) + dep = ' '.join([f[-1] for f in fhrs]) + lst = ' '.join(['_'.join(f) for f in fhrs]) + + return grp, dep, lst + + deps = [] + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}efmnfsoi'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + eposfsoienvars = self.envars.copy() + eposfsoienvar_dict = {'FHRGRP': '#grp#', + 'FHRLST': '#lst#'} + for key, value in eposfsoienvar_dict.items(): + eposfsoienvars.append(rocoto.create_envar(name=key, value=str(value))) + + varname1, varname2, varname3 = 'grp', 'dep', 'lst' + varval1, varval2, varval3 = _get_eposfsoigroups(self._configs['eposfsoi']) + vardict = {varname2: varval2, varname3: varval3} + + resources = self.get_resource('eposfsoi') + task = create_wf_task('eposfsoi', resources, cdump=self.cdump, envar=eposfsoienvars, dependency=dependencies, + metatask='epmnfsoi', varname=varname1, varval=varval1, vardict=vardict) + + return task + def earc(self): self._is_this_a_gdas_task(self.cdump, 'earc') From 01c850e1e1217ea39a0b900304dc13d45cd38d6e Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 21 Jul 2022 13:24:49 -0500 Subject: [PATCH 057/103] removing spurious task dependencies for efcsfsoi tasks --- workflow/rocoto/workflow_tasks.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/workflow/rocoto/workflow_tasks.py b/workflow/rocoto/workflow_tasks.py index 0fd8caf3d3a..81e19ef6643 100644 --- a/workflow/rocoto/workflow_tasks.py +++ b/workflow/rocoto/workflow_tasks.py @@ -1076,14 +1076,14 @@ def efcsfsoi(self): self._is_this_a_gdas_task(self.cdump, 'efcsfsoi') deps = [] - dep_dict = {'type': 'metatask', 'name': f'{self.cdump}ecmn'} + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}ecmnfsoi'} deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': f'{self.cdump}esfc'} + dep_dict = {'type': 'task', 'name': f'{self.cdump}esfcfsoi'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - dep_dict = {'type': 'cycleexist', 'condition': 'not', 'offset': '-06:00:00'} - dependencies.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='or', dep=dependencies) +# dep_dict = {'type': 'cycleexist', 'condition': 'not', 'offset': '-06:00:00'} +# dependencies.append(rocoto.add_dependency(dep_dict)) +# dependencies = rocoto.create_dependency(dep_condition='or', dep=dependencies) efcsfsoienvars = self.envars.copy() efcsfsoienvars.append(rocoto.create_envar(name='ENSGRP', value='#grp#')) From c8dde0216d8a815ecb1b4b0d295acc30d3a31155 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 21 Jul 2022 14:21:30 -0500 Subject: [PATCH 058/103] replanced ksh with bash --- jobs/rocoto/ecenfsoi.sh | 2 +- jobs/rocoto/efcsfsoi.sh | 2 +- jobs/rocoto/efsoi.sh | 2 +- jobs/rocoto/eposfsoi.sh | 2 +- jobs/rocoto/esfcfsoi.sh | 2 +- jobs/rocoto/eupdfsoi.sh | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/jobs/rocoto/ecenfsoi.sh b/jobs/rocoto/ecenfsoi.sh index f57c621937e..ea95706791f 100755 --- a/jobs/rocoto/ecenfsoi.sh +++ b/jobs/rocoto/ecenfsoi.sh @@ -1,4 +1,4 @@ -#!/bin/ksh -x +#!/bin/bash -x ############################################################### # Source FV3GFS workflow modules diff --git a/jobs/rocoto/efcsfsoi.sh b/jobs/rocoto/efcsfsoi.sh index 534eee1b2c3..3de99fc95a7 100755 --- a/jobs/rocoto/efcsfsoi.sh +++ b/jobs/rocoto/efcsfsoi.sh @@ -1,4 +1,4 @@ -#!/bin/ksh -x +#!/bin/bash -x ############################################################### # Source FV3GFS workflow modules diff --git a/jobs/rocoto/efsoi.sh b/jobs/rocoto/efsoi.sh index 2cfa7e6ebf8..b4116753603 100755 --- a/jobs/rocoto/efsoi.sh +++ b/jobs/rocoto/efsoi.sh @@ -1,4 +1,4 @@ -#!/bin/ksh -x +#!/bin/bash -x ############################################################### # Source FV3GFS workflow modules diff --git a/jobs/rocoto/eposfsoi.sh b/jobs/rocoto/eposfsoi.sh index c9cc8b3c13f..a84537c8438 100755 --- a/jobs/rocoto/eposfsoi.sh +++ b/jobs/rocoto/eposfsoi.sh @@ -1,4 +1,4 @@ -#!/bin/ksh -x +#!/bin/bash -x ############################################################### # Source FV3GFS workflow modules diff --git a/jobs/rocoto/esfcfsoi.sh b/jobs/rocoto/esfcfsoi.sh index 3e47f2b3aa3..c0737a9f316 100755 --- a/jobs/rocoto/esfcfsoi.sh +++ b/jobs/rocoto/esfcfsoi.sh @@ -1,4 +1,4 @@ -#!/bin/ksh -x +#!/bin/bash -x ############################################################### # Source FV3GFS workflow modules diff --git a/jobs/rocoto/eupdfsoi.sh b/jobs/rocoto/eupdfsoi.sh index cbd9e604b8b..7c2e064a73c 100755 --- a/jobs/rocoto/eupdfsoi.sh +++ b/jobs/rocoto/eupdfsoi.sh @@ -1,4 +1,4 @@ -#!/bin/ksh -x +#!/bin/bash -x ############################################################### # Source FV3GFS workflow modules From d1e250f9e90a549848998e3fd7a3c1cb7e09e66e Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 21 Jul 2022 15:15:15 -0500 Subject: [PATCH 059/103] updated executable names --- scripts/exgdas_efsoi.sh | 2 +- scripts/exgdas_efsoi_update.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/exgdas_efsoi.sh b/scripts/exgdas_efsoi.sh index 3ca5d05eb9d..a0326ad6288 100755 --- a/scripts/exgdas_efsoi.sh +++ b/scripts/exgdas_efsoi.sh @@ -44,7 +44,7 @@ APRUN_ENKF=${APRUN_ENKF:-${APRUN:-""}} NTHREADS_ENKF=${NTHREADS_ENKF:-${NTHREADS:-1}} # Executables -EFSOIEXEC=${EFSOIEXEC:-$HOMEgfs/exec/global_efsoi.x} +EFSOIEXEC=${EFSOIEXEC:-$HOMEgfs/exec/efsoi.x} # Cycling and forecast hour specific parameters CDATE=${CDATE:-"2001010100"} diff --git a/scripts/exgdas_efsoi_update.sh b/scripts/exgdas_efsoi_update.sh index ca1ca5917fb..22d60295a66 100755 --- a/scripts/exgdas_efsoi_update.sh +++ b/scripts/exgdas_efsoi_update.sh @@ -45,7 +45,7 @@ APRUN_ENKF=${APRUN_ENKF:-${APRUN:-""}} NTHREADS_ENKF=${NTHREADS_ENKF:-${NTHREADS:-1}} # Executables -ENKFEXEC=${ENKFEXEC:-$HOMEgfs/exec/global_enkf.x} +ENKFEXEC=${ENKFEXEC:-$HOMEgfs/exec/enkf.x} # Cycling and forecast hour specific parameters CDATE=${CDATE:-"2001010100"} From b732eb66050673f21bb34f720eaa7f41de87440e Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Fri, 22 Jul 2022 13:26:24 -0500 Subject: [PATCH 060/103] fixed eposfsoi to handle forecasts every 6 hours --- parm/config/config.efcsfsoi | 4 ++++ parm/config/config.eposfsoi | 5 ++++- workflow/rocoto/workflow_tasks.py | 6 +++--- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/parm/config/config.efcsfsoi b/parm/config/config.efcsfsoi index 2bdf10f9875..e6f77079cb7 100755 --- a/parm/config/config.efcsfsoi +++ b/parm/config/config.efcsfsoi @@ -18,4 +18,8 @@ if [ $QUILTING = ".true." ]; then export npe_efcsfsoi=$npe_fv3 fi +export FHMIN_EFSOI=6 +export FHOUT_EFSOI=6 +export FHMAX_EFSOI=30 + echo "END: config.efcsfsoi" diff --git a/parm/config/config.eposfsoi b/parm/config/config.eposfsoi index 61a0b6a52ff..22e0bbf4614 100755 --- a/parm/config/config.eposfsoi +++ b/parm/config/config.eposfsoi @@ -6,7 +6,10 @@ echo "BEGIN: config.eposfsoi" # Get regular epos configs -. $EXPDIR/config.epos +. $EXPDIR/config.epos + +# Get efcsfsoi configs for FH settings +. $EXPDIR/config.efcsfsoi # Get task specific resources . $EXPDIR/config.resources eposfsoi diff --git a/workflow/rocoto/workflow_tasks.py b/workflow/rocoto/workflow_tasks.py index 81e19ef6643..262667cb78a 100644 --- a/workflow/rocoto/workflow_tasks.py +++ b/workflow/rocoto/workflow_tasks.py @@ -1162,9 +1162,9 @@ def eposfsoi(self): self._is_this_a_gdas_task(self.cdump, 'eposfsoi') def _get_eposfsoigroups(eposfsoi): - fhmin = eposfsoi['FHMIN_ENKF'] - fhmax = eposfsoi['FHMAX_ENKF'] - fhout = eposfsoi['FHOUT_ENKF'] + fhmin = eposfsoi['FHMIN_EFSOI'] + fhmax = eposfsoi['FHMAX_EFSOI'] + fhout = eposfsoi['FHOUT_EFSOI'] fhrs = range(fhmin, fhmax + fhout, fhout) neposfsoigrp = eposfsoi['NEPOSGRP'] From 859fbf3f53a6aef56ced61dccfa2e024dbf5310a Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Fri, 22 Jul 2022 14:05:11 -0500 Subject: [PATCH 061/103] attempt to fix efsoi task dependencies --- workflow/rocoto/workflow_tasks.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/workflow/rocoto/workflow_tasks.py b/workflow/rocoto/workflow_tasks.py index 262667cb78a..e8734ad80ff 100644 --- a/workflow/rocoto/workflow_tasks.py +++ b/workflow/rocoto/workflow_tasks.py @@ -897,9 +897,18 @@ def eupdfsoi(self): def efsoi(self): deps = [] - dep_dict = {'type': 'metatask', 'name': f'{self.cdump}epmnfsoi'} + #dep_dict = {'type': 'metatask', 'name': f'{self.cdump}epmnfsoi'} + #deps.append(rocoto.add_dependency(dep_dict)) + data = '&ROTDIR;/efsoigdas.@Y@m@d/@H/atmos/gdas.t@Hz.atmf030.ensmean.nc' + dep_dict = {'type': 'data', 'data': data, 'offset': '-6:00:00'} deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) + data = '&ROTDIR;/efsoigdas.@Y@m@d/@H/atmos/gdas.t@Hz.atmf024.ensmean.nc' + dep_dict = {'type': 'data', 'data': data} + deps.append(rocoto.add_dependency(dep_dict)) + data = '&ROTDIR;/gdas.@Y@m@d/@H/atmos/gdas.t@Hz.atmanl.ensres.nc' + dep_dict = {'type': 'data', 'data': data, 'offset': '24:00:00'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) resources = self.get_resource('efsoi') task = create_wf_task('efsoi', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) From 08c4950ec9e7e87f7d2d54fc0ac4e422420e7d75 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Mon, 25 Jul 2022 09:30:21 -0500 Subject: [PATCH 062/103] tweaks to get efsoi running in new global-workflow configuration --- parm/config/config.efsoi | 2 +- scripts/exgdas_efsoi.sh | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/parm/config/config.efsoi b/parm/config/config.efsoi index 2dfe1ed8e3d..5718b426c73 100755 --- a/parm/config/config.efsoi +++ b/parm/config/config.efsoi @@ -26,7 +26,7 @@ export lnsigcutoff=2.75 # ignored if modelspace_vloc=.true. export lobsdiag_forenkf=".true." # use jacobian. must be .true. if modelspace_vloc=".true." # need to specify .true. setting since config.anal sets to .false. -export ANAVINFO=${HOMEgfs}"/sorc/gsi.fd/util/EFSOI_Utilities/fix/global_anavinfo_efsoi.l127.txt" +export ANAVINFO=${HOMEgfs}"/sorc/gsi_utils.fd/src/EFSOI_Utilities/fix/global_anavinfo.l127.txt" export NAM_ENKF="smoothparm=35," diff --git a/scripts/exgdas_efsoi.sh b/scripts/exgdas_efsoi.sh index a0326ad6288..3d6315abcd1 100755 --- a/scripts/exgdas_efsoi.sh +++ b/scripts/exgdas_efsoi.sh @@ -60,7 +60,7 @@ VSUFFIX=${VSUFFIX:-$SUFFIX} SMOOTH_ENKF=${SMOOTH_ENKF:-"YES"} EFSOISTAT=${EFSOISTAT:-${APREFIX}efsoistat} - +GBIASe=${GBIASe:-${APREFIX}abias_int.ensmean} VERFANL=${VERFANL:-${VPREFIX}atmanl.ensres.nc} INITANL=${INITANL:-${APREFIX}atmanl.ensres.nc} FCSTLONG=${GPREFIX}atmf030.ensmean.nc @@ -138,6 +138,9 @@ $NLN $HYBENSINFO hybens_info $NLN $ANAVINFO anavinfo $NLN $VLOCALEIG vlocal_eig.dat +# Bias correction coefficients based on the ensemble mean +$NLN $COMOUT_ANL_ENSFSOI/$GBIASe satbias_in + ################################################################################ # Ensemble guess, observational data and analyses/increments From af7ad17d460845605104ed71f6c4ca04ff3842ed Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Mon, 25 Jul 2022 09:49:33 -0500 Subject: [PATCH 063/103] add necessary task throttling for EFSOI --- workflow/rocoto/workflow_xml.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/workflow/rocoto/workflow_xml.py b/workflow/rocoto/workflow_xml.py index e0786964f99..48466e30c6c 100644 --- a/workflow/rocoto/workflow_xml.py +++ b/workflow/rocoto/workflow_xml.py @@ -77,7 +77,10 @@ def _get_workflow_header(self): """ scheduler = self._app_config.scheduler - cyclethrottle = self._base.get('ROCOTO_CYCLETHROTTLE', 3) + if self._app_config.do_efsoi: + cyclethrottle = self._base.get('ROCOTO_CYCLETHROTTLE', 7) + else: + cyclethrottle = self._base.get('ROCOTO_CYCLETHROTTLE', 3) taskthrottle = self._base.get('ROCOTO_TASKTHROTTLE', 25) verbosity = self._base.get('ROCOTO_VERBOSITY', 10) From e62b4da2941f2c3610149956c3d490f9ca6d44a6 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Mon, 25 Jul 2022 10:21:09 -0500 Subject: [PATCH 064/103] check out fork of GSI-utils --- sorc/checkout.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sorc/checkout.sh b/sorc/checkout.sh index 90b64db8043..742c1a7477b 100755 --- a/sorc/checkout.sh +++ b/sorc/checkout.sh @@ -132,8 +132,9 @@ mkdir -p ${logdir} errs=0 checkout "ufs_model.fd" "https://github.com/ufs-community/ufs-weather-model" "${ufs_model_hash:-b97375c}" ; errs=$((errs + $?)) checkout "gsi_enkf.fd" "https://github.com/NOAA-EMC/GSI.git" "67f5ab4" ; errs=$((errs + $?)) +# EFSOI still needs fork of gsi-utils #checkout "gsi_utils.fd" "https://github.com/NOAA-EMC/GSI-Utils.git" "322cc7b" ; errs=$((errs + $?)) -checkout "gsi_utils.fd" "https://github.com/NOAA-EMC/GSI-Utils.git" "14890af" ; errs=$((errs + $?)) +checkout "gsi_utils.fd" "https://github.com/AndrewEichmann-NOAA/GSI-Utils.git" "f9fd8a5" ; errs=$((errs + $?)) checkout "gsi_monitor.fd" "https://github.com/NOAA-EMC/GSI-Monitor.git" "acf8870" ; errs=$((errs + $?)) checkout "gldas.fd" "https://github.com/NOAA-EMC/GLDAS.git" "fd8ba62" ; errs=$((errs + $?)) checkout "ufs_utils.fd" "https://github.com/ufs-community/UFS_UTILS.git" "a2b0817" ; errs=$((errs + $?)) From 92a4489b20abe301e249db8e0389c23d086b45b1 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Mon, 25 Jul 2022 14:08:31 -0500 Subject: [PATCH 065/103] removing old workflow setup --- ush/rocoto/setup_workflow.py | 1620 ---------------------------------- 1 file changed, 1620 deletions(-) delete mode 100755 ush/rocoto/setup_workflow.py diff --git a/ush/rocoto/setup_workflow.py b/ush/rocoto/setup_workflow.py deleted file mode 100755 index e03007d3bcd..00000000000 --- a/ush/rocoto/setup_workflow.py +++ /dev/null @@ -1,1620 +0,0 @@ -#!/usr/bin/env python3 - -''' - PROGRAM: - Create the ROCOTO workflow given the configuration of the GFS parallel - - AUTHOR: - Rahul.Mahajan - rahul.mahajan@noaa.gov - - FILE DEPENDENCIES: - 1. config files for the parallel; e.g. config.base, config.fcst[.gfs], etc. - Without these dependencies, the script will fail - - OUTPUT: - 1. PSLOT.xml: XML workflow - 2. PSLOT.crontab: crontab for ROCOTO run command -''' - -import os -import sys -import re -import numpy as np -from datetime import datetime, timedelta -from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter -from collections import OrderedDict -import rocoto -import workflow_utils as wfu - -def main(): - parser = ArgumentParser(description='Setup XML workflow and CRONTAB for a GFS parallel.', formatter_class=ArgumentDefaultsHelpFormatter) - parser.add_argument('--expdir', help='full path to experiment directory containing config files', type=str, required=False, default=os.environ['PWD']) - args = parser.parse_args() - - configs = wfu.get_configs(args.expdir) - - _base = wfu.config_parser([wfu.find_config('config.base', configs)]) - - if not os.path.samefile(args.expdir, _base['EXPDIR']): - print('MISMATCH in experiment directories!') - print(f'config.base: EXPDIR = {repr(_base["EXPDIR"])}') - print(f'input arg: --expdir = {repr(args.expdir)}') - sys.exit(1) - - gfs_steps = ['prep', 'anal', 'analdiag', 'analcalc', 'gldas', 'fcst', 'postsnd', 'post', 'vrfy', 'arch'] - gfs_steps_gempak = ['gempak'] - gfs_steps_awips = ['awips'] - gfs_steps_wafs = ['wafs', 'wafsgrib2', 'wafsblending', 'wafsgcip', 'wafsgrib20p25', 'wafsblending0p25'] - #hyb_steps = ['eobs', 'eomg', 'eupd', 'ecen', 'efcs', 'epos', 'earc'] - metp_steps = ['metp'] - wav_steps = ['waveinit', 'waveprep', 'wavepostsbs', 'wavepostbndpnt', 'wavepostbndpntbll', 'wavepostpnt'] - #Implement additional wave jobs at later date - wav_steps_gempak = ['wavegempak'] - wav_steps_awips = ['waveawipsbulls', 'waveawipsgridded'] -# From gfsv16b latest -# gfs_steps = ['prep', 'anal', 'gldas', 'fcst', 'postsnd', 'post', 'awips', 'gempak', 'vrfy', 'metp', 'arch'] - hyb_steps = ['eobs', 'ediag', 'eomg', 'eupd', 'ecen', 'esfc', 'efcs', 'echgres', 'epos', 'earc'] - - steps = gfs_steps + hyb_steps if _base.get('DOHYBVAR', 'NO') == 'YES' else gfs_steps - steps = steps + metp_steps if _base.get('DO_METP', 'NO') == 'YES' else steps - steps = steps + gfs_steps_gempak if _base.get('DO_GEMPAK', 'NO') == 'YES' else steps - steps = steps + gfs_steps_awips if _base.get('DO_AWIPS', 'NO') == 'YES' else steps - steps = steps + gfs_steps_wafs if _base.get('WAFSF', 'NO') == 'YES' else steps - steps = steps + wav_steps if _base.get('DO_WAVE', 'NO') == 'YES' else steps - steps = steps + wav_steps_gempak if _base.get('DO_GEMPAK', 'NO') == 'YES' else steps - steps = steps + wav_steps_awips if _base.get('DO_AWIPS', 'NO') == 'YES' else steps - -# for EFSOI - efsoi_steps = ['eupdfsoi', 'esfcfsoi', 'ecenfsoi', 'efcsfsoi', 'eposfsoi', 'efsoi'] - steps = steps + efsoi_steps if _base.get('DO_EFSOI','NO') == 'YES' else steps - - dict_configs = wfu.source_configs(configs, steps) - - # Check and set gfs_cyc specific variables - if dict_configs['base']['gfs_cyc'] != 0: - dict_configs['base'] = get_gfs_cyc_dates(dict_configs['base']) - - # First create workflow XML - create_xml(dict_configs) - - # Next create the crontab - wfu.create_crontab(dict_configs['base']) - - return - - -def get_gfs_cyc_dates(base): - ''' - Generate GFS dates from experiment dates and gfs_cyc choice - ''' - - base_out = base.copy() - - gfs_cyc = base['gfs_cyc'] - sdate = base['SDATE'] - edate = base['EDATE'] - - interval_gfs = wfu.get_gfs_interval(gfs_cyc) - - # Set GFS cycling dates - hrdet = 0 - if gfs_cyc == 1: - hrinc = 24 - sdate.hour - hrdet = edate.hour - elif gfs_cyc == 2: - if sdate.hour in [0, 12]: - hrinc = 12 - elif sdate.hour in [6, 18]: - hrinc = 6 - if edate.hour in [6, 18]: - hrdet = 6 - elif gfs_cyc == 4: - hrinc = 6 - sdate_gfs = sdate + timedelta(hours=hrinc) - edate_gfs = edate - timedelta(hours=hrdet) - if sdate_gfs > edate: - print('W A R N I N G!') - print('Starting date for GFS cycles is after Ending date of experiment') - print(f'SDATE = {sdate.strftime("%Y%m%d%H")}, EDATE = {edate.strftime("%Y%m%d%H")}') - print(f'SDATE_GFS = {sdate_gfs.strftime("%Y%m%d%H")}, EDATE_GFS = {edate_gfs.strftime("%Y%m%d%H")}') - gfs_cyc = 0 - - base_out['gfs_cyc'] = gfs_cyc - base_out['SDATE_GFS'] = sdate_gfs - base_out['EDATE_GFS'] = edate_gfs - base_out['INTERVAL_GFS'] = interval_gfs - - fhmax_gfs = {} - for hh in ['00', '06', '12', '18']: - fhmax_gfs[hh] = base.get(f'FHMAX_GFS_{hh}', 'FHMAX_GFS_00') - base_out['FHMAX_GFS'] = fhmax_gfs - - return base_out - - -def get_preamble(): - ''' - Generate preamble for XML - ''' - - strings = [] - - strings.append('\n') - strings.append('\n') - - return ''.join(strings) - - -def get_definitions(base): - ''' - Create entities related to the experiment - ''' - - machine = base.get('machine', wfu.detectMachine()) - scheduler = wfu.get_scheduler(machine) - do_efsoi = base.get('DO_EFSOI', 'NO').upper() - hpssarch = base.get('HPSSARCH', 'NO').upper() - - strings = [] - - strings.append('\n') - strings.append('\t\n') - strings.append(f'''\t\n''') - strings.append(f'''\t\n''') - strings.append(f'''\t\n''') - - if base['gfs_cyc'] != 0: - strings.append(get_gfs_dates(base)) - strings.append('\n') - - strings.append('\t\n') - strings.append(f'''\t\n''') - strings.append('\n') - strings.append('\t\n') - strings.append(f'''\t\n''') - strings.append(f'''\t\n''') - strings.append('\n') - strings.append('\t\n') - strings.append(f'''\t\n''') - strings.append(f'''\t\n''') - strings.append(f'''\t\n''') - strings.append('\n') - strings.append('\t\n') - strings.append(f'''\t\n''') - - strings.append(f'''\t\n''') - strings.append(f'''\t\n''') - if scheduler in ['slurm']: - strings.append(f'''\t\n''') - strings.append(f'''\t\n''') - strings.append(f'\t\n') - strings.append('\n') - strings.append('\t\n') - strings.append(f'''\t\n''') - strings.append('\n') - strings.append('\t\n') - if do_efsoi in ['Y', 'YES']: - strings.append('\t\n') - else: - strings.append('\t\n') - strings.append('\t\n') - strings.append('\t\n') - strings.append('\n') - - return ''.join(strings) - - -def get_gfs_dates(base): - ''' - Generate GFS dates entities - ''' - - strings = [] - - strings.append('\n') - strings.append('\t\n') - strings.append(f'''\t\n''') - strings.append(f'''\t\n''') - strings.append(f'''\t\n''') - - return ''.join(strings) - - -def get_gdasgfs_resources(dict_configs, cdump='gdas'): - ''' - Create GDAS or GFS resource entities - ''' - - base = dict_configs['base'] - machine = base.get('machine', wfu.detectMachine()) - scheduler = wfu.get_scheduler(machine) - do_bufrsnd = base.get('DO_BUFRSND', 'NO').upper() - do_gempak = base.get('DO_GEMPAK', 'NO').upper() - do_awips = base.get('DO_AWIPS', 'NO').upper() - do_wafs = base.get('WAFSF', 'NO').upper() - do_metp = base.get('DO_METP', 'NO').upper() - do_gldas = base.get('DO_GLDAS', 'NO').upper() - do_wave = base.get('DO_WAVE', 'NO').upper() - do_wave_cdump = base.get('WAVE_CDUMP', 'BOTH').upper() - reservation = base.get('RESERVATION', 'NONE').upper() - - #tasks = ['prep', 'anal', 'fcst', 'post', 'vrfy', 'arch'] - tasks = ['prep', 'anal', 'analcalc'] - - if cdump in ['gdas']: - tasks += ['analdiag'] - if cdump in ['gdas'] and do_gldas in ['Y', 'YES']: - tasks += ['gldas'] - if cdump in ['gdas'] and do_wave in ['Y', 'YES'] and do_wave_cdump in ['GDAS', 'BOTH']: - #tasks += ['waveinit', 'waveprep', 'wavepostsbs', 'wavepostbndpnt', 'wavepostpnt', 'wavestat'] - tasks += ['waveinit', 'waveprep', 'wavepostsbs', 'wavepostbndpnt', 'wavepostbndpntbll', 'wavepostpnt'] - - tasks += ['fcst', 'post', 'vrfy', 'arch'] - - if cdump in ['gfs'] and do_wave in ['Y', 'YES'] and do_wave_cdump in ['GFS', 'BOTH']: - #tasks += ['waveinit', 'waveprep', 'wavepostsbs', 'wavepostbndpnt', 'wavepostpnt', 'wavestat'] - tasks += ['waveinit', 'waveprep', 'wavepostsbs', 'wavepostbndpnt', 'wavepostbndpntbll', 'wavepostpnt'] - if cdump in ['gfs'] and do_bufrsnd in ['Y', 'YES']: - tasks += ['postsnd'] - if cdump in ['gfs'] and do_gempak in ['Y', 'YES']: - tasks += ['gempak'] - if cdump in ['gfs'] and do_wave in ['Y', 'YES'] and do_gempak in ['Y', 'YES']: - tasks += ['wavegempak'] - if cdump in ['gfs'] and do_awips in ['Y', 'YES']: - tasks += ['awips'] - if cdump in ['gfs'] and do_wafs in ['Y', 'YES']: - tasks += ['wafs', 'wafsgrib2', 'wafsblending', 'wafsgcip', 'wafsgrib20p25', 'wafsblending0p25'] - if cdump in ['gfs'] and do_metp in ['Y', 'YES']: - tasks += ['metp'] - if cdump in ['gfs'] and do_wave in ['Y', 'YES'] and do_awips in ['Y', 'YES']: - tasks += ['waveawipsbulls', 'waveawipsgridded'] - - dict_resources = OrderedDict() - - for task in tasks: - - cfg = dict_configs[task] - - wtimestr, resstr, queuestr, memstr, natstr = wfu.get_resources(machine, cfg, task, reservation, cdump=cdump) - taskstr = f'{task.upper()}_{cdump.upper()}' - - strings = [] - strings.append(f'\t\n') - if scheduler in ['slurm']: - if task in ['arch']: - strings.append(f'\t\n') - else: - strings.append(f'\t\n') - - strings.append(f'\t\n') - strings.append(f'\t\n') - if len(memstr) != 0: - strings.append(f'\t\n') - strings.append(f'\t\n') - - dict_resources[f'{cdump}{task}'] = ''.join(strings) - - return dict_resources - - -def get_hyb_resources(dict_configs): - ''' - Create hybrid resource entities - ''' - - base = dict_configs['base'] - machine = base.get('machine', wfu.detectMachine()) - scheduler = wfu.get_scheduler(machine) - lobsdiag_forenkf = base.get('lobsdiag_forenkf', '.false.').upper() - eupd_cyc= base.get('EUPD_CYC', 'gdas').upper() - reservation = base.get('RESERVATION', 'NONE').upper() - - dict_resources = OrderedDict() - - do_efsoi = base.get('DO_EFSOI', 'NO').upper() - - # These tasks can be run in either or both cycles - if lobsdiag_forenkf in ['.T.', '.TRUE.']: - - if do_efsoi in ['Y', 'YES']: - tasks1 = ['eobs', 'ediag', 'eupd', 'echgres', 'eupdfsoi'] - else: - tasks1 = ['eobs', 'ediag', 'eupd', 'echgres'] - else: - if do_efsoi in ['Y', 'YES']: - tasks1 = ['eobs', 'eomg', 'eupd', 'echgres', 'eupdfsoi'] - else: - tasks1 = ['eobs', 'eomg', 'eupd', 'echgres'] - - if eupd_cyc in ['BOTH']: - cdumps = ['gfs', 'gdas'] - elif eupd_cyc in ['GFS']: - cdumps = ['gfs'] - elif eupd_cyc in ['GDAS']: - cdumps = ['gdas'] - - for cdump in cdumps: - for task in tasks1: - - cfg = dict_configs['eobs'] if task in ['eomg'] else dict_configs[task] - - wtimestr, resstr, queuestr, memstr, natstr = wfu.get_resources(machine, cfg, task, reservation, cdump=cdump) - - taskstr = f'{task.upper()}_{cdump.upper()}' - - strings = [] - - strings.append(f'\t\n') - if scheduler in ['slurm']: - strings.append(f'\t\n') - strings.append(f'\t\n') - strings.append(f'\t\n') - if len(memstr) != 0: - strings.appendf(f'\t\n') - strings.append(f'\t\n') - - dict_resources[f'{cdump}{task}'] = ''.join(strings) - - - # These tasks are always run as part of the GDAS cycle - cdump = 'gdas' - - do_efsoi = base.get('DO_EFSOI', 'NO').upper() - - if do_efsoi in ['Y', 'YES']: - tasks2 = ['ecenfsoi', 'esfcfsoi', 'efcsfsoi', 'eposfsoi', 'efsoi', 'ecen', 'esfc', 'efcs', 'epos', 'earc'] - else: - tasks2 = ['ecen', 'esfc', 'efcs', 'epos', 'earc'] - for task in tasks2: - - cfg = dict_configs[task] - - wtimestr, resstr, queuestr, memstr, natstr = wfu.get_resources(machine, cfg, task, reservation, cdump=cdump) - - taskstr = f'{task.upper()}_{cdump.upper()}' - - strings = [] - strings.append(f'\t\n') - if scheduler in ['slurm']: - if task in ['earc']: - strings.append(f'\t\n') - else: - strings.append(f'\t\n') - - strings.append(f'\t\n') - strings.append(f'\t\n') - if len(memstr) != 0: - strings.append(f'\t\n') - strings.append(f'\t\n') - - dict_resources[f'{cdump}{task}'] = ''.join(strings) - - return dict_resources - - -def get_gdasgfs_tasks(dict_configs, cdump='gdas'): - ''' - Create GDAS or GFS tasks - ''' - - envars = [] - if wfu.get_scheduler(wfu.detectMachine()) in ['slurm']: - envars.append(rocoto.create_envar(name='SLURM_SET', value='YES')) - envars.append(rocoto.create_envar(name='RUN_ENVIR', value='&RUN_ENVIR;')) - envars.append(rocoto.create_envar(name='HOMEgfs', value='&HOMEgfs;')) - envars.append(rocoto.create_envar(name='EXPDIR', value='&EXPDIR;')) - envars.append(rocoto.create_envar(name='CDATE', value='@Y@m@d@H')) - envars.append(rocoto.create_envar(name='CDUMP', value=f'{cdump}')) - envars.append(rocoto.create_envar(name='PDY', value='@Y@m@d')) - envars.append(rocoto.create_envar(name='cyc', value='@H')) - - base = dict_configs['base'] - gfs_cyc = base.get('gfs_cyc', 0) - gldas_cyc = base.get('gldas_cyc', 0) - dohybvar = base.get('DOHYBVAR', 'NO').upper() - eupd_cyc = base.get('EUPD_CYC', 'gdas').upper() - do_bufrsnd = base.get('DO_BUFRSND', 'NO').upper() - do_gempak = base.get('DO_GEMPAK', 'NO').upper() - do_awips = base.get('DO_AWIPS', 'NO').upper() - do_wafs = base.get('WAFSF', 'NO').upper() - do_metp = base.get('DO_METP', 'NO').upper() - do_gldas = base.get('DO_GLDAS', 'NO').upper() - do_wave = base.get('DO_WAVE', 'NO').upper() - if do_wave in ['YES']: - do_wave_bnd = dict_configs['wavepostsbs'].get('DOBNDPNT_WAVE', "YES").upper() - do_wave_cdump = base.get('WAVE_CDUMP', 'BOTH').upper() - dumpsuffix = base.get('DUMP_SUFFIX', '') - gridsuffix = base.get('SUFFIX', '') - - do_efsoi = base.get('DO_EFSOI', 'NO').upper() - - dict_tasks = OrderedDict() - - # prep - deps = [] - dep_dict = {'type': 'metatask', 'name': f'{"gdas"}post', 'offset': '-06:00:00'} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/gdas.@Y@m@d/@H/atmos/gdas.t@Hz.atmf009{gridsuffix}' - dep_dict = {'type': 'data', 'data': data, 'offset': '-06:00:00'} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&DMPDIR;/{cdump}{dumpsuffix}.@Y@m@d/@H/atmos/{cdump}.t@Hz.updated.status.tm00.bufr_d' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - - gfs_enkf = True if eupd_cyc in ['BOTH', 'GFS'] and dohybvar in ['Y', 'YES'] else False - - if gfs_enkf and cdump in ['gfs']: - if gfs_cyc == 4: - task = wfu.create_wf_task('prep', cdump=cdump, envar=envars, dependency=dependencies) - else: - task = wfu.create_wf_task('prep', cdump=cdump, envar=envars, dependency=dependencies, cycledef='gdas') - - else: - task = wfu.create_wf_task('prep', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks[f'{cdump}prep'] = task - - # wave tasks in gdas or gfs or both - if do_wave_cdump in ['BOTH']: - cdumps = ['gfs', 'gdas'] - elif do_wave_cdump in ['GFS']: - cdumps = ['gfs'] - elif do_wave_cdump in ['GDAS']: - cdumps = ['gdas'] - - # waveinit - if do_wave in ['Y', 'YES'] and cdump in cdumps: - deps = [] - dep_dict = {'type': 'task', 'name': '{cdump}prep'} - deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'cycleexist', 'condition': 'not', 'offset': '-06:00:00'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='or', dep=deps) - task = wfu.create_wf_task('waveinit', cdump=cdump, envar=envars, dependency=dependencies) - dict_tasks['{cdump}waveinit'] = task - - # waveprep - if do_wave in ['Y', 'YES'] and cdump in cdumps: - deps = [] - dep_dict = {'type': 'task', 'name': '{cdump}waveinit'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('waveprep', cdump=cdump, envar=envars, dependency=dependencies) - dict_tasks['{cdump}waveprep'] = task - - # anal - deps = [] - dep_dict = {'type': 'task', 'name': f'{cdump}prep'} - deps.append(rocoto.add_dependency(dep_dict)) - if dohybvar in ['y', 'Y', 'yes', 'YES']: - dep_dict = {'type': 'metatask', 'name': f'{"gdas"}epmn', 'offset': '-06:00:00'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - else: - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('anal', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks[f'{cdump}anal'] = task - - # analcalc - deps1 = [] - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.loginc.txt' - dep_dict = {'type': 'data', 'data': data} - deps1.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': f'{cdump}anal'} - deps.append(rocoto.add_dependency(dep_dict)) - if dohybvar in ['y', 'Y', 'yes', 'YES'] and cdump == 'gdas': - dep_dict = {'type': 'task', 'name': f'{"gdas"}echgres', 'offset': '-06:00:00'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - else: - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - task = wfu.create_wf_task('analcalc', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks[f'{cdump}analcalc'] = task - - # analdiag - if cdump in ['gdas']: - deps1 = [] - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.loginc.txt' - dep_dict = {'type': 'data', 'data': data} - deps1.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': f'{cdump}anal'} - deps1.append(rocoto.add_dependency(dep_dict)) - dependencies1 = rocoto.create_dependency(dep_condition='or', dep=deps1) - - deps2 = [] - deps2 = dependencies1 - dep_dict = {'type': 'cycleexist', 'offset': '-06:00:00'} - deps2.append(rocoto.add_dependency(dep_dict)) - dependencies2 = rocoto.create_dependency(dep_condition='and', dep=deps2) - - task = wfu.create_wf_task('analdiag', cdump=cdump, envar=envars, dependency=dependencies2) - - dict_tasks[f'{cdump}analdiag'] = task - - # gldas - if cdump in ['gdas'] and do_gldas in ['Y', 'YES']: - deps1 = [] - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.loginc.txt' - dep_dict = {'type': 'data', 'data': data} - deps1.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': f'{cdump}anal'} - deps1.append(rocoto.add_dependency(dep_dict)) - dependencies1 = rocoto.create_dependency(dep_condition='or', dep=deps1) - - deps2 = [] - deps2 = dependencies1 - dep_dict = {'type': 'cycleexist', 'offset': '-06:00:00'} - deps2.append(rocoto.add_dependency(dep_dict)) - dependencies2 = rocoto.create_dependency(dep_condition='and', dep=deps2) - - task = wfu.create_wf_task('gldas', cdump=cdump, envar=envars, dependency=dependencies2) - dict_tasks[f'{cdump}gldas'] = task - - # fcst - deps1 = [] - #data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.loginc.txt' - #dep_dict = {'type': 'data', 'data': data} - #deps1.append(rocoto.add_dependency(dep_dict)) - if cdump in ['gdas']: - dep_dict = {'type': 'cycleexist', 'condition': 'not', 'offset': '-06:00:00'} - deps1.append(rocoto.add_dependency(dep_dict)) - if do_gldas in ['Y', 'YES']: - dep_dict = {'type': 'task', 'name': f'{cdump}gldas'} - deps1.append(rocoto.add_dependency(dep_dict)) - else: - dep_dict = {'type': 'task', 'name': f'{cdump}analcalc'} - deps1.append(rocoto.add_dependency(dep_dict)) - elif cdump in ['gfs']: - dep_dict = {'type': 'task', 'name': f'{cdump}anal'} - deps1.append(rocoto.add_dependency(dep_dict)) - dependencies1 = rocoto.create_dependency(dep_condition='or', dep=deps1) - - if do_wave in ['Y', 'YES'] and cdump in cdumps: - deps2 = [] - deps2 = dependencies1 - dep_dict = {'type': 'task', 'name': f'{cdump}waveprep'} - deps2.append(rocoto.add_dependency(dep_dict)) - dependencies2 = rocoto.create_dependency(dep_condition='and', dep=deps2) - task = wfu.create_wf_task('fcst', cdump=cdump, envar=envars, dependency=dependencies2) - else: - task = wfu.create_wf_task('fcst', cdump=cdump, envar=envars, dependency=dependencies1) - - dict_tasks[f'{cdump}fcst'] = task - - # post - deps = [] - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.log#dep#.txt' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': f'{cdump}fcst'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='or', dep=deps) - fhrgrp = rocoto.create_envar(name='FHRGRP', value='#grp#') - fhrlst = rocoto.create_envar(name='FHRLST', value='#lst#') - ROTDIR = rocoto.create_envar(name='ROTDIR', value='&ROTDIR;') - postenvars = envars + [fhrgrp] + [fhrlst] + [ROTDIR] - varname1, varname2, varname3 = 'grp', 'dep', 'lst' - varval1, varval2, varval3 = get_postgroups(dict_configs['post'], cdump=cdump) - vardict = {varname2: varval2, varname3: varval3} - task = wfu.create_wf_task('post', cdump=cdump, envar=postenvars, dependency=dependencies, - metatask='post', varname=varname1, varval=varval1, vardict=vardict) - - dict_tasks[f'{cdump}post'] = task - - # wavepostsbs - if do_wave in ['Y', 'YES'] and cdump in cdumps: - deps = [] - for wave_grid in dict_configs['wavepostsbs']['waveGRD'].split(): - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/wave/rundata/{cdump}wave.out_grd.{wave_grid}.@Y@m@d.@H0000' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - task = wfu.create_wf_task('wavepostsbs', cdump=cdump, envar=envars, dependency=dependencies) - dict_tasks[f'{cdump}wavepostsbs'] = task - - # wavepostbndpnt - if do_wave in ['Y', 'YES'] and do_wave_bnd in ['YES'] and cdump in ['gfs']: - deps = [] - dep_dict = {'type': 'task', 'name': f'{cdump}fcst'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('wavepostbndpnt', cdump=cdump, envar=envars, dependency=dependencies) - dict_tasks[f'{cdump}wavepostbndpnt'] = task - - # wavepostbndpntbll - if do_wave in ['Y', 'YES'] and do_wave_bnd in ['YES'] and cdump in ['gfs']: - deps = [] - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.logf180.txt' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': f'{cdump}wavepostbndpnt'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - task = wfu.create_wf_task('wavepostbndpntbll', cdump=cdump, envar=envars, dependency=dependencies) - dict_tasks[f'{cdump}wavepostbndpntbll'] = task - - # wavepostpnt - if do_wave in ['Y', 'YES'] and cdump in ['gdas', 'gfs']: - deps = [] - dep_dict = {'type': 'task', 'name': f'{cdump}fcst'} - deps.append(rocoto.add_dependency(dep_dict)) - if do_wave_bnd in ['YES'] and cdump in ['gfs']: - dep_dict = {'type': 'task', 'name': f'{cdump}wavepostbndpntbll'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - task = wfu.create_wf_task('wavepostpnt', cdump=cdump, envar=envars, dependency=dependencies) - dict_tasks[f'{cdump}wavepostpnt'] = task - - # wavegempak - if do_wave in ['Y', 'YES'] and do_gempak in ['Y', 'YES'] and cdump in ['gfs']: - deps = [] - dep_dict = {'type':'task', 'name':f'{cdump}wavepostsbs'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('wavegempak', cdump=cdump, envar=envars, dependency=dependencies) - dict_tasks[f'{cdump}wavegempak'] = task - - # waveawipsgridded - if do_wave in ['Y', 'YES'] and do_awips in ['Y', 'YES'] and cdump in ['gfs']: - deps = [] - dep_dict = {'type':'task', 'name':f'{cdump}wavepostsbs'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('waveawipsgridded', cdump=cdump, envar=envars, dependency=dependencies) - dict_tasks[f'{cdump}waveawipsgridded'] = task - - # waveawipsbulls - if do_wave in ['Y', 'YES'] and do_awips in ['Y', 'YES'] and cdump in ['gfs']: - deps = [] - dep_dict = {'type':'task', 'name':f'{cdump}wavepostsbs'} - deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type':'task', 'name':f'{cdump}wavepostpnt'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - task = wfu.create_wf_task('waveawipsbulls', cdump=cdump, envar=envars, dependency=dependencies) - dict_tasks[f'{cdump}waveawipsbulls'] = task - - # wavestat - #if do_wave in ['Y', 'YES'] and cdump in cdumps: - # deps = [] - # dep_dict = {'type':'task', 'name':'%swavepost' % cdump} - # deps.append(rocoto.add_dependency(dep_dict)) - # dependencies = rocoto.create_dependency(dep=deps) - # task = wfu.create_wf_task('wavestat', cdump=cdump, envar=envars, dependency=dependencies) - # dict_tasks['%swavestat' % cdump] = task - - # vrfy - deps = [] - dep_dict = {'type': 'metatask', 'name': f'{cdump}post'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('vrfy', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks[f'{cdump}vrfy'] = task - - # metp - if cdump in ['gfs'] and do_metp in ['Y', 'YES']: - deps = [] - dep_dict = {'type':'metatask', 'name':f'{cdump}post'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - sdate_gfs = rocoto.create_envar(name='SDATE_GFS', value='&SDATE_GFS;') - metpcase = rocoto.create_envar(name='METPCASE', value='#metpcase#') - metpenvars = envars + [sdate_gfs] + [metpcase] - varname1 = 'metpcase' - varval1 = 'g2g1 g2o1 pcp1' - task = wfu.create_wf_task('metp', cdump=cdump, envar=metpenvars, dependency=dependencies, - metatask='metp', varname=varname1, varval=varval1) - dict_tasks[f'{cdump}metp'] = task - - #postsnd - if cdump in ['gfs'] and do_bufrsnd in ['Y', 'YES']: - deps = [] - dep_dict = {'type': 'task', 'name': f'{cdump}fcst'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('postsnd', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks[f'{cdump}postsnd'] = task - - # awips - if cdump in ['gfs'] and do_awips in ['Y', 'YES']: - deps = [] - dep_dict = {'type': 'metatask', 'name': f'{cdump}post'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - fhrgrp = rocoto.create_envar(name='FHRGRP', value='#grp#') - fhrlst = rocoto.create_envar(name='FHRLST', value='#lst#') - ROTDIR = rocoto.create_envar(name='ROTDIR', value='&ROTDIR;') - awipsenvars = envars + [fhrgrp] + [fhrlst] + [ROTDIR] - varname1, varname2, varname3 = 'grp', 'dep', 'lst' - varval1, varval2, varval3 = get_awipsgroups(dict_configs['awips'], cdump=cdump) - vardict = {varname2: varval2, varname3: varval3} - task = wfu.create_wf_task('awips', cdump=cdump, envar=awipsenvars, dependency=dependencies, - metatask='awips', varname=varname1, varval=varval1, vardict=vardict) - - dict_tasks[f'{cdump}awips'] = task - - # gempak - if cdump in ['gfs'] and do_gempak in ['Y', 'YES']: - deps = [] - dep_dict = {'type': 'metatask', 'name': f'{cdump}post'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('gempak', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks[f'{cdump}gempak'] = task - - # wafs - if cdump in ['gfs'] and do_wafs in ['Y', 'YES']: - deps = [] - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if006' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if012' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if015' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if018' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if021' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if024' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if027' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if030' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if033' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if036' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - task = wfu.create_wf_task('wafs', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks[f'{cdump}wafs'] = task - - # wafsgcip - if cdump in ['gfs'] and do_wafs in ['Y', 'YES']: - deps = [] - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if006' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if012' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if015' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if018' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if021' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if024' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if027' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if030' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if033' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if036' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - task = wfu.create_wf_task('wafsgcip', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks[f'{cdump}wafsgcip'] = task - - # wafsgrib2 - if cdump in ['gfs'] and do_wafs in ['Y', 'YES']: - deps = [] - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if006' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if012' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if015' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if018' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if021' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if024' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if027' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if030' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if033' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if036' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - task = wfu.create_wf_task('wafsgrib2', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks[f'{cdump}wafsgrib2'] = task - - # wafsgrib20p25 - if cdump in ['gfs'] and do_wafs in ['Y', 'YES']: - deps = [] - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if006' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if012' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if015' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if018' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if021' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if024' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if027' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if030' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if033' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.wafs.grb2if036' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - task = wfu.create_wf_task('wafsgrib20p25', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks[f'{cdump}wafsgrib20p25'] = task - - # wafsblending - if cdump in ['gfs'] and do_wafs in ['Y', 'YES']: - deps = [] - dep_dict = {'type': 'task', 'name': f'{cdump}wafsgrib2'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('wafsblending', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks[f'{cdump}wafsblending'] = task - - # wafsblending0p25 - if cdump in ['gfs'] and do_wafs in ['Y', 'YES']: - deps = [] - dep_dict = {'type': 'task', 'name': f'{cdump}wafsgrib20p25'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('wafsblending0p25', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks[f'{cdump}wafsblending0p25'] = task - - # arch - deps = [] - dep_dict = {'type': 'task', 'name': f'{cdump}vrfy'} - deps.append(rocoto.add_dependency(dep_dict)) - if cdump in ['gfs'] and do_metp in ['Y', 'YES']: - dep_dict = {'type':'metatask', 'name':f'{cdump}metp'} - deps.append(rocoto.add_dependency(dep_dict)) - if do_wave in ['Y', 'YES']: - dep_dict = {'type': 'task', 'name': f'{cdump}wavepostsbs'} - deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': f'{cdump}wavepostpnt'} - deps.append(rocoto.add_dependency(dep_dict)) - if do_wave_bnd in ['YES'] and cdump in ['gfs']: - dep_dict = {'type': 'task', 'name': f'{cdump}wavepostbndpnt'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - task = wfu.create_wf_task('arch', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks[f'{cdump}arch'] = task - - return dict_tasks - - -def get_hyb_tasks(dict_configs, cycledef='enkf'): - ''' - Create Hybrid tasks - ''' - - # Determine groups based on ensemble size and grouping - base = dict_configs['base'] - nens = base['NMEM_ENKF'] - lobsdiag_forenkf = base.get('lobsdiag_forenkf', '.false.').upper() - eupd_cyc = base.get('EUPD_CYC', 'gdas').upper() - - eobs = dict_configs['eobs'] - nens_eomg = eobs['NMEM_EOMGGRP'] - neomg_grps = nens / nens_eomg - EOMGGROUPS = ' '.join([f'{x:02d}' for x in range(1, int(neomg_grps) + 1)]) - - efcs = dict_configs['efcs'] - nens_efcs = efcs['NMEM_EFCSGRP'] - nefcs_grps = nens / nens_efcs - EFCSGROUPS = ' '.join([f'{x:02d}' for x in range(1, int(nefcs_grps) + 1)]) - - earc = dict_configs['earc'] - nens_earc = earc['NMEM_EARCGRP'] - nearc_grps = nens / nens_earc - EARCGROUPS = ' '.join([f'{x:02d}' for x in range(0, int(nearc_grps) + 1)]) - - envars = [] - if wfu.get_scheduler(wfu.detectMachine()) in ['slurm']: - envars.append(rocoto.create_envar(name='SLURM_SET', value='YES')) - envars.append(rocoto.create_envar(name='RUN_ENVIR', value='&RUN_ENVIR;')) - envars.append(rocoto.create_envar(name='HOMEgfs', value='&HOMEgfs;')) - envars.append(rocoto.create_envar(name='EXPDIR', value='&EXPDIR;')) - envars.append(rocoto.create_envar(name='CDATE', value='@Y@m@d@H')) - #envars.append(rocoto.create_envar(name='CDUMP', value=f'{cdump}')) - envars.append(rocoto.create_envar(name='PDY', value='@Y@m@d')) - envars.append(rocoto.create_envar(name='cyc', value='@H')) - - ensgrp = rocoto.create_envar(name='ENSGRP', value='#grp#') - - dict_tasks = OrderedDict() - - if eupd_cyc in ['BOTH']: - cdumps = ['gfs', 'gdas'] - elif eupd_cyc in ['GFS']: - cdumps = ['gfs'] - elif eupd_cyc in ['GDAS']: - cdumps = ['gdas'] - - for cdump in cdumps: - - envar_cdump = rocoto.create_envar(name='CDUMP', value=f'{cdump}') - envars1 = envars + [envar_cdump] - - # eobs - deps = [] - dep_dict = {'type': 'task', 'name': f'{cdump}prep'} - deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'metatask', 'name': f'{"gdas"}epmn', 'offset': '-06:00:00'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - task = wfu.create_wf_task('eobs', cdump=cdump, envar=envars1, dependency=dependencies, cycledef=cycledef) - - dict_tasks[f'{cdump}eobs'] = task - - # eomn, eomg - if lobsdiag_forenkf in ['.F.', '.FALSE.']: - deps = [] - dep_dict = {'type': 'task', 'name': f'{cdump}eobs'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - eomgenvars= envars1 + [ensgrp] - task = wfu.create_wf_task('eomg', cdump=cdump, envar=eomgenvars, dependency=dependencies, - metatask='eomn', varname='grp', varval=EOMGGROUPS, cycledef=cycledef) - - dict_tasks[f'{cdump}eomn'] = task - - # ediag - else: - deps = [] - dep_dict = {'type': 'task', 'name': f'{cdump}eobs'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('ediag', cdump=cdump, envar=envars1, dependency=dependencies, cycledef=cycledef) - - dict_tasks[f'{cdump}ediag'] = task - - # eupd - deps = [] - if lobsdiag_forenkf in ['.F.', '.FALSE.']: - dep_dict = {'type': 'metatask', 'name': f'{cdump}eomn'} - else: - dep_dict = {'type': 'task', 'name': f'{cdump}ediag'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('eupd', cdump=cdump, envar=envars1, dependency=dependencies, cycledef=cycledef) - - dict_tasks[f'{cdump}eupd'] = task - - # eupdfsoi - do_efsoi = base.get('DO_EFSOI', 'NO').upper() - - if do_efsoi in ['Y', 'YES']: - deps = [] - if lobsdiag_forenkf in ['.F.', '.FALSE.']: - dep_dict = {'type': 'metatask', 'name': f'{cdump}eomn'} - else: - dep_dict = {'type': 'task', 'name': f'{cdump}ediag'} - deps.append(rocoto.add_dependency(dep_dict)) - data = '&ROTDIR;/gdas.@Y@m@d/@H/atmos/gdas.t@Hz.atmanl.ensres.nc' - dep_dict = {'type': 'data', 'data': data } - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - task = wfu.create_wf_task('eupdfsoi', cdump=cdump, envar=envars1, dependency=dependencies, cycledef=cycledef) - - dict_tasks[f'{cdump}eupdfsoi'] = task - - # All hybrid tasks beyond this point are always executed in the GDAS cycle - cdump = 'gdas' - envar_cdump = rocoto.create_envar(name='CDUMP', value=f'{cdump}') - envars1 = envars + [envar_cdump] - cdump_eupd = 'gfs' if eupd_cyc in ['GFS'] else 'gdas' - - # ecmn, ecen - deps1 = [] - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.loganl.txt' - dep_dict = {'type': 'data', 'data': data} - deps1.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': f'{cdump}analcalc'} - deps1.append(rocoto.add_dependency(dep_dict)) - dependencies1 = rocoto.create_dependency(dep_condition='or', dep=deps1) - - deps2 = [] - deps2 = dependencies1 - dep_dict = {'type': 'task', 'name': f'{cdump_eupd}eupd'} - deps2.append(rocoto.add_dependency(dep_dict)) - dependencies2 = rocoto.create_dependency(dep_condition='and', dep=deps2) - - fhrgrp = rocoto.create_envar(name='FHRGRP', value='#grp#') - fhrlst = rocoto.create_envar(name='FHRLST', value='#lst#') - ecenenvars = envars1 + [fhrgrp] + [fhrlst] - varname1, varname2, varname3 = 'grp', 'dep', 'lst' - varval1, varval2, varval3 = get_ecengroups(dict_configs, dict_configs['ecen'], cdump=cdump) - vardict = {varname2: varval2, varname3: varval3} - task = wfu.create_wf_task('ecen', cdump=cdump, envar=ecenenvars, dependency=dependencies2, - metatask='ecmn', varname=varname1, varval=varval1, vardict=vardict) - - dict_tasks[f'{cdump}ecmn'] = task - - if do_efsoi in ['Y', 'YES']: - # ecmnfsoi, ecenfsoi - deps1 = [] - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/{cdump}.t@Hz.loganl.txt' - dep_dict = {'type': 'data', 'data': data} - deps1.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': f'{cdump}analcalc'} - deps1.append(rocoto.add_dependency(dep_dict)) - dependencies1 = rocoto.create_dependency(dep_condition='or', dep=deps1) - - deps2 = [] - deps2 = dependencies1 - dep_dict = {'type': 'task', 'name': f'{cdump_eupd}eupdfsoi'} - deps2.append(rocoto.add_dependency(dep_dict)) - dependencies2 = rocoto.create_dependency(dep_condition='and', dep=deps2) - - fhrgrp = rocoto.create_envar(name='FHRGRP', value='#grp#') - fhrlst = rocoto.create_envar(name='FHRLST', value='#lst#') - ecenenvars = envars1 + [fhrgrp] + [fhrlst] - varname1, varname2, varname3 = 'grp', 'dep', 'lst' - varval1, varval2, varval3 = get_ecengroups(dict_configs, dict_configs['ecenfsoi'], cdump=cdump) - vardict = {varname2: varval2, varname3: varval3} - task = wfu.create_wf_task('ecenfsoi', cdump=cdump, envar=ecenenvars, dependency=dependencies2, - metatask='ecmnfsoi', varname=varname1, varval=varval1, vardict=vardict) - - dict_tasks[f'{cdump}ecmnfsoi'] = task - - # esfc - deps1 = [] - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/atmos/{cdump}.t@Hz.loganl.txt' - dep_dict = {'type': 'data', 'data': data} - deps1.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': f'{cdump}analcalc'} - deps1.append(rocoto.add_dependency(dep_dict)) - dependencies1 = rocoto.create_dependency(dep_condition='or', dep=deps1) - - deps2 = [] - deps2 = dependencies1 - dep_dict = {'type': 'task', 'name': f'{cdump_eupd}eupd'} - deps2.append(rocoto.add_dependency(dep_dict)) - dependencies2 = rocoto.create_dependency(dep_condition='and', dep=deps2) - task = wfu.create_wf_task('esfc', cdump=cdump, envar=envars1, dependency=dependencies2, cycledef=cycledef) - - dict_tasks[f'{cdump}esfc'] = task - - - if do_efsoi in ['Y', 'YES']: - # esfcfsoi - deps1 = [] - data = f'&ROTDIR;/{cdump}.@Y@m@d/@H/{cdump}.t@Hz.loganl.txt' - dep_dict = {'type': 'data', 'data': data} - deps1.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': f'{cdump}analcalc'} - deps1.append(rocoto.add_dependency(dep_dict)) - dependencies1 = rocoto.create_dependency(dep_condition='or', dep=deps1) - - deps2 = [] - deps2 = dependencies1 - dep_dict = {'type': 'task', 'name': f'{cdump_eupd}eupdfsoi'} - deps2.append(rocoto.add_dependency(dep_dict)) - dependencies2 = rocoto.create_dependency(dep_condition='and', dep=deps2) - task = wfu.create_wf_task('esfcfsoi', cdump=cdump, envar=envars1, dependency=dependencies2, cycledef=cycledef) - - dict_tasks[f'{cdump}esfcfsoi'] = task - - # efmn, efcs - deps1 = [] - dep_dict = {'type': 'metatask', 'name': f'{cdump}ecmn'} - deps1.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': f'{cdump}esfc'} - deps1.append(rocoto.add_dependency(dep_dict)) - dependencies1 = rocoto.create_dependency(dep_condition='and', dep=deps1) - - deps2 = [] - deps2 = dependencies1 - dep_dict = {'type': 'cycleexist', 'condition': 'not', 'offset': '-06:00:00'} - deps2.append(rocoto.add_dependency(dep_dict)) - dependencies2 = rocoto.create_dependency(dep_condition='or', dep=deps2) - - efcsenvars = envars1 + [ensgrp] - task = wfu.create_wf_task('efcs', cdump=cdump, envar=efcsenvars, dependency=dependencies2, - metatask='efmn', varname='grp', varval=EFCSGROUPS, cycledef=cycledef) - - dict_tasks[f'{cdump}efmn'] = task - - # echgres - deps1 = [] - dep_dict = {'type': 'task', 'name': f'{cdump}fcst'} - deps1.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'metatask', 'name': f'{cdump}efmn'} - deps1.append(rocoto.add_dependency(dep_dict)) - dependencies1 = rocoto.create_dependency(dep_condition='and', dep=deps1) - task = wfu.create_wf_task('echgres', cdump=cdump, envar=envars1, dependency=dependencies1, cycledef=cycledef) - - dict_tasks[f'{cdump}echgres'] = task - - if do_efsoi in ['Y', 'YES']: - # efmnfsoi, efcsfsoi - deps1 = [] - dep_dict = {'type': 'metatask', 'name': f'{cdump}ecmnfsoi'} - deps1.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': f'{cdump}esfcfsoi'} - deps1.append(rocoto.add_dependency(dep_dict)) - dependencies1 = rocoto.create_dependency(dep_condition='and', dep=deps1) - - deps2 = [] - deps2 = dependencies1 - - dependencies2 = rocoto.create_dependency(dep_condition='and', dep=deps2) - - efcsenvars = envars1 + [ensgrp] - task = wfu.create_wf_task('efcsfsoi', cdump=cdump, envar=efcsenvars, dependency=dependencies2, - metatask='efmnfsoi', varname='grp', varval=EFCSGROUPS, cycledef=cycledef) - - dict_tasks[f'{cdump}efmnfsoi' ] = task - - # epmn, epos - deps = [] - dep_dict = {'type': 'metatask', 'name': f'{cdump}efmn'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - fhrgrp = rocoto.create_envar(name='FHRGRP', value='#grp#') - fhrlst = rocoto.create_envar(name='FHRLST', value='#lst#') - eposenvars = envars1 + [fhrgrp] + [fhrlst] - varname1, varname2, varname3 = 'grp', 'dep', 'lst' - varval1, varval2, varval3 = get_eposgroups(dict_configs['epos'], cdump=cdump) - vardict = {varname2: varval2, varname3: varval3} - task = wfu.create_wf_task('epos', cdump=cdump, envar=eposenvars, dependency=dependencies, - metatask='epmn', varname=varname1, varval=varval1, vardict=vardict) - - dict_tasks[f'{cdump}epmn'] = task - - if do_efsoi in ['Y', 'YES']: - # epmnfsoi, eposfsoi - deps = [] - dep_dict = {'type': 'metatask', 'name': f'{cdump}efmnfsoi'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - fhrgrp = rocoto.create_envar(name='FHRGRP', value='#grp#') - fhrlst = rocoto.create_envar(name='FHRLST', value='#lst#') - eposenvars = envars1 + [fhrgrp] + [fhrlst] - varname1, varname2, varname3 = 'grp', 'dep', 'lst' - varval1, varval2, varval3 = get_eposfsoigroups(dict_configs['eposfsoi'], cdump=cdump) - vardict = {varname2: varval2, varname3: varval3} - task = wfu.create_wf_task('eposfsoi', cdump=cdump, envar=eposenvars, dependency=dependencies, - metatask='epmnfsoi', varname=varname1, varval=varval1, vardict=vardict) - - dict_tasks[f'{cdump}epmnfsoi'] = task - - # efsoi - deps = [] - data = '&ROTDIR;/efsoigdas.@Y@m@d/@H/atmos/gdas.t@Hz.atmf030.ensmean.nc' - dep_dict = {'type': 'data', 'data': data, 'offset': '-6:00:00'} - deps.append(rocoto.add_dependency(dep_dict)) - data = '&ROTDIR;/efsoigdas.@Y@m@d/@H/atmos/gdas.t@Hz.atmf024.ensmean.nc' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = '&ROTDIR;/gdas.@Y@m@d/@H/atmos/gdas.t@Hz.atmanl.ensres.nc' - dep_dict = {'type': 'data', 'data': data, 'offset': '24:00:00'} - deps.append(rocoto.add_dependency(dep_dict)) - - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - task = wfu.create_wf_task('efsoi', cdump=cdump, envar=envars1, dependency=dependencies, cycledef=cycledef) - - dict_tasks[f'{cdump}efsoi'] = task - - # eamn, earc - deps = [] - dep_dict = {'type': 'metatask', 'name': f'{cdump}epmn'} - deps.append(rocoto.add_dependency(dep_dict)) - if do_efsoi in ['Y', 'YES']: - dep_dict = {'type': 'metatask', 'name': f'{cdump}epmnfsoi'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - else: - dependencies = rocoto.create_dependency(dep=deps) - earcenvars = envars1 + [ensgrp] - task = wfu.create_wf_task('earc', cdump=cdump, envar=earcenvars, dependency=dependencies, - metatask='eamn', varname='grp', varval=EARCGROUPS, cycledef=cycledef) - - dict_tasks[f'{cdump}eamn'] = task - - return dict_tasks - - -def get_workflow_header(base): - ''' - Create the workflow header block - ''' - - strings = [] - - strings.append('\n') - strings.append(']>\n') - strings.append('\n') - strings.append('\n') - strings.append('\n') - strings.append('\t&EXPDIR;/logs/@Y@m@d@H.log\n') - strings.append('\n') - strings.append('\t\n') - strings.append('\t&SDATE; &SDATE; 06:00:00\n') - strings.append('\t&SDATE; &EDATE; 06:00:00\n') - strings.append('\t&SDATE; &EDATE; 06:00:00\n') - if base['gfs_cyc'] != 0: - strings.append('\t&SDATE_GFS; &EDATE_GFS; &INTERVAL_GFS;\n') - - strings.append('\n') - - return ''.join(strings) - - -def get_workflow_footer(): - ''' - Generate workflow footer - ''' - - strings = [] - strings.append('\n\n') - - return ''.join(strings) - - -def get_postgroups(post, cdump='gdas'): - - fhmin = post['FHMIN'] - fhmax = post['FHMAX'] - fhout = post['FHOUT'] - - # Get a list of all forecast hours - if cdump in ['gdas']: - fhrs = range(fhmin, fhmax+fhout, fhout) - elif cdump in ['gfs']: - fhmax = np.max([post['FHMAX_GFS_00'],post['FHMAX_GFS_06'],post['FHMAX_GFS_12'],post['FHMAX_GFS_18']]) - fhout = post['FHOUT_GFS'] - fhmax_hf = post['FHMAX_HF_GFS'] - fhout_hf = post['FHOUT_HF_GFS'] - fhrs_hf = range(fhmin, fhmax_hf+fhout_hf, fhout_hf) - fhrs = list(fhrs_hf) + list(range(fhrs_hf[-1]+fhout, fhmax+fhout, fhout)) - - npostgrp = post['NPOSTGRP'] - ngrps = npostgrp if len(fhrs) > npostgrp else len(fhrs) - - fhrs = [f'f{f:03d}' for f in fhrs] - fhrs = np.array_split(fhrs, ngrps) - fhrs = [f.tolist() for f in fhrs] - - fhrgrp = ' '.join(['anl'] + [f'_{f[0]}-{f[-1]}' for f in fhrs]) - fhrdep = ' '.join(['anl'] + [f[-1] for f in fhrs]) - fhrlst = ' '.join(['anl'] + ['_'.join(f) for f in fhrs]) - - return fhrgrp, fhrdep, fhrlst - -def get_awipsgroups(awips, cdump='gdas'): - - fhmin = awips['FHMIN'] - fhmax = awips['FHMAX'] - fhout = awips['FHOUT'] - - # Get a list of all forecast hours - if cdump in ['gdas']: - fhrs = range(fhmin, fhmax+fhout, fhout) - elif cdump in ['gfs']: - fhmax = np.max([awips['FHMAX_GFS_00'],awips['FHMAX_GFS_06'],awips['FHMAX_GFS_12'],awips['FHMAX_GFS_18']]) - fhout = awips['FHOUT_GFS'] - fhmax_hf = awips['FHMAX_HF_GFS'] - fhout_hf = awips['FHOUT_HF_GFS'] - if fhmax > 240: - fhmax = 240 - if fhmax_hf > 240: - fhmax_hf = 240 - fhrs_hf = range(fhmin, fhmax_hf+fhout_hf, fhout_hf) - fhrs = fhrs_hf + range(fhrs_hf[-1]+fhout, fhmax+fhout, fhout) - - nawipsgrp = awips['NAWIPSGRP'] - ngrps = nawipsgrp if len(fhrs) > nawipsgrp else len(fhrs) - - fhrs = [f'f{f:03d}' for f in fhrs] - fhrs = np.array_split(fhrs, ngrps) - fhrs = [f.tolist() for f in fhrs] - - fhrgrp = ' '.join([f'{x:03d}' for x in range(0, ngrps)]) - fhrdep = ' '.join([f[-1] for f in fhrs]) - fhrlst = ' '.join(['_'.join(f) for f in fhrs]) - - return fhrgrp, fhrdep, fhrlst - -def get_ecengroups(dict_configs, ecen, cdump='gdas'): - - base = dict_configs['base'] - - if base.get('DOIAU_ENKF', 'NO') == 'YES' : - fhrs = list(base.get('IAUFHRS','6').split(',')) - ifhrs = [f'f00{ff}' for ff in fhrs] - ifhrs0 = ifhrs[0] - nfhrs = len(fhrs) - - ifhrs = [f'f00{ff}' for ff in fhrs] - ifhrs0 = ifhrs[0] - nfhrs = len(fhrs) - - necengrp = ecen['NECENGRP'] - ngrps = necengrp if len(fhrs) > necengrp else len(fhrs) - - ifhrs = np.array_split(ifhrs, ngrps) - - fhrgrp = ' '.join([f'{x:03d}' for x in range(0, ngrps)]) - fhrdep = ' '.join([f[-1] for f in ifhrs]) - fhrlst = ' '.join(['_'.join(f) for f in ifhrs]) - - else: - fhrgrp='000' - fhrdep='f006' - fhrlst='f006' - - return fhrgrp, fhrdep, fhrlst - -def get_eposgroups(epos, cdump='gdas'): - - fhmin = epos['FHMIN_ENKF'] - fhmax = epos['FHMAX_ENKF'] - fhout = epos['FHOUT_ENKF'] - fhrs = range(fhmin, fhmax+fhout, fhout) - - neposgrp = epos['NEPOSGRP'] - ngrps = neposgrp if len(fhrs) > neposgrp else len(fhrs) - - fhrs = [f'f{f:03d}' for f in fhrs] - fhrs = np.array_split(fhrs, ngrps) - fhrs = [f.tolist() for f in fhrs] - - fhrgrp = ' '.join([f'{x:03d}' for x in range(0, ngrps)]) - fhrdep = ' '.join([f[-1] for f in fhrs]) - fhrlst = ' '.join(['_'.join(f) for f in fhrs]) - - return fhrgrp, fhrdep, fhrlst - - -def dict_to_strings(dict_in): - - strings = [] - for key in dict_in.keys(): - strings.append(dict_in[key]) - strings.append('\n') - - return ''.join(strings) - -def get_eposfsoigroups(epos, cdump='gdas'): - - fhmin = 6 - fhmax = 30 - fhout = 6 - - fhrs = range(fhmin, fhmax+fhout, fhout) - - neposgrp = epos['NEPOSGRP'] - ngrps = neposgrp if len(fhrs) > neposgrp else len(fhrs) - - fhrs = ['f%03d' % f for f in fhrs] - fhrs = np.array_split(fhrs, ngrps) - fhrs = [f.tolist() for f in fhrs] - - fhrgrp = ' '.join(['%03d' % x for x in range(0, ngrps)]) - fhrdep = ' '.join([f[-1] for f in fhrs]) - fhrlst = ' '.join(['_'.join(f) for f in fhrs]) - - return fhrgrp, fhrdep, fhrlst - -def create_xml(dict_configs): - ''' - Given an dictionary of sourced config files, - create the workflow XML - ''' - - from builtins import any as b_any - #from __builtin__ import any as b_any - - base = dict_configs['base'] - dohybvar = base.get('DOHYBVAR', 'NO').upper() - gfs_cyc = base.get('gfs_cyc', 0) - eupd_cyc = base.get('EUPD_CYC', 'gdas').upper() - - # Start collecting workflow pieces - preamble = get_preamble() - definitions = get_definitions(base) - workflow_header = get_workflow_header(base) - workflow_footer = get_workflow_footer() - - # Get GDAS related entities, resources, workflow - dict_gdas_resources = get_gdasgfs_resources(dict_configs) - dict_gdas_tasks = get_gdasgfs_tasks(dict_configs) - - # Get hybrid related entities, resources, workflow - if dohybvar in ['Y', 'YES']: - - dict_hyb_resources = get_hyb_resources(dict_configs) - dict_hyb_tasks = get_hyb_tasks(dict_configs) - - # Removes &MEMORY_JOB_DUMP post mortem from hyb tasks - do_efsoi = base.get('DO_EFSOI', 'NO').upper() - - if do_efsoi in ['Y', 'YES']: - hyp_tasks = {'gdaseobs':'gdaseobs', - 'gdasediag':'gdasediag', - 'gdaseomg':'gdaseomn', - 'gdaseupd':'gdaseupd', - 'gdasecen':'gdasecmn', - 'gdasesfc':'gdasesfc', - 'gdasefcs':'gdasefmn', - 'gdasepos':'gdasepmn', - 'gdaseupdfsoi':'gdaseupdfsoi', - 'gdasecenfsoi':'gdasecmnfsoi', - 'gdasesfcfsoi':'gdasesfcfsoi', - 'gdasefcsfsoi':'gdasefmnfsoi', - 'gdaseposfsoi':'gdasepmnfsoi', - 'gdasefsoi':'gdasefsoi', - 'gdasearc':'gdaseamn', - 'gdasechgres':'gdasechgres'} - - else: - hyp_tasks = {'gdaseobs':'gdaseobs', - 'gdasediag':'gdasediag', - 'gdaseomg':'gdaseomn', - 'gdaseupd':'gdaseupd', - 'gdasecen':'gdasecmn', - 'gdasesfc':'gdasesfc', - 'gdasefcs':'gdasefmn', - 'gdasepos':'gdasepmn', - 'gdasearc':'gdaseamn', - 'gdasechgres':'gdasechgres'} - for each_task, each_resource_string in dict_hyb_resources.items(): - if 'MEMORY' not in each_resource_string: - if each_task in dict_hyb_tasks: - temp_task_string = [] - for each_line in re.split(r'(\s+)', dict_hyb_tasks[each_task]): - if 'memory' not in each_line: - temp_task_string.append(each_line) - dict_hyb_tasks[each_task] = ''.join(temp_task_string) - if hyp_tasks[each_task] in dict_hyb_tasks: - temp_task_string = [] - for each_line in re.split(r'(\s+)', dict_hyb_tasks[hyp_tasks[each_task]]): - if 'memory' not in each_line: - temp_task_string.append(each_line) - dict_hyb_tasks[hyp_tasks[each_task]] = ''.join(temp_task_string) - - # Get GFS cycle related entities, resources, workflow - dict_gfs_resources = get_gdasgfs_resources(dict_configs, cdump='gfs') - dict_gfs_tasks = get_gdasgfs_tasks(dict_configs, cdump='gfs') - - # Removes &MEMORY_JOB_DUMP post mortem from gdas tasks - for each_task, each_resource_string in dict_gdas_resources.items(): - if each_task not in dict_gdas_tasks: - continue - if 'MEMORY' not in each_resource_string: - temp_task_string = [] - for each_line in re.split(r'(\s+)', dict_gdas_tasks[each_task]): - if 'memory' not in each_line: - temp_task_string.append(each_line) - dict_gdas_tasks[each_task] = ''.join(temp_task_string) - - # Removes &MEMORY_JOB_DUMP post mortem from gfs tasks - for each_task, each_resource_string in dict_gfs_resources.items(): - if each_task not in dict_gfs_tasks: - continue - if 'MEMORY' not in each_resource_string: - temp_task_string = [] - for each_line in re.split(r'(\s+)', dict_gfs_tasks[each_task]): - if 'memory' not in each_line: - temp_task_string.append(each_line) - dict_gfs_tasks[each_task] = ''.join(temp_task_string) - - # Put together the XML file - xmlfile = [] - - xmlfile.append(preamble) - - xmlfile.append(definitions) - - xmlfile.append(dict_to_strings(dict_gdas_resources)) - - if dohybvar in ['Y', 'YES']: - xmlfile.append(dict_to_strings(dict_hyb_resources)) - - if gfs_cyc != 0: - xmlfile.append(dict_to_strings(dict_gfs_resources)) - elif gfs_cyc == 0 and dohybvar in ['Y', 'YES'] and eupd_cyc in ['BOTH', 'GFS']: - xmlfile.append(dict_gfs_resources['gfsprep']) - - xmlfile.append(workflow_header) - - xmlfile.append(dict_to_strings(dict_gdas_tasks)) - - if dohybvar in ['Y', 'YES']: - xmlfile.append(dict_to_strings(dict_hyb_tasks)) - - if gfs_cyc != 0: - xmlfile.append(dict_to_strings(dict_gfs_tasks)) - elif gfs_cyc == 0 and dohybvar in ['Y', 'YES'] and eupd_cyc in ['BOTH', 'GFS']: - xmlfile.append(dict_gfs_tasks['gfsprep']) - xmlfile.append('\n') - - xmlfile.append(workflow_footer) - - # Write the XML file - fh = open(f'{base["EXPDIR"]}/{base["PSLOT"]}.xml', 'w') - fh.write(''.join(xmlfile)) - fh.close() - - return - - -if __name__ == '__main__': - main() - sys.exit(0) From 908ebd5f752d1f80bc3e02a8845fe70a51732e1a Mon Sep 17 00:00:00 2001 From: "andrew.eichmann" Date: Thu, 28 Jul 2022 14:55:57 +0000 Subject: [PATCH 066/103] removing hopefully superfluous config files --- jobs/JGDAS_EFSOI_ECEN | 5 +++-- jobs/JGDAS_EFSOI_FCST | 5 ++++- jobs/JGDAS_EFSOI_POST | 4 +++- jobs/JGDAS_EFSOI_SFC | 5 +++-- parm/config/config.ecen | 6 +++++- parm/config/config.ecenfsoi | 14 -------------- parm/config/config.efcs | 18 ++++++++++++++++++ parm/config/config.efcsfsoi | 25 ------------------------- parm/config/config.epos | 10 ++++++++++ parm/config/config.eposfsoi | 17 ----------------- parm/config/config.esfc | 6 +++++- parm/config/config.esfcfsoi | 22 ---------------------- 12 files changed, 51 insertions(+), 86 deletions(-) delete mode 100755 parm/config/config.ecenfsoi delete mode 100755 parm/config/config.efcsfsoi delete mode 100755 parm/config/config.eposfsoi delete mode 100755 parm/config/config.esfcfsoi diff --git a/jobs/JGDAS_EFSOI_ECEN b/jobs/JGDAS_EFSOI_ECEN index 28d04b9f5cf..f2b67e1f070 100755 --- a/jobs/JGDAS_EFSOI_ECEN +++ b/jobs/JGDAS_EFSOI_ECEN @@ -5,12 +5,14 @@ export RUN_ENVIR=${RUN_ENVIR:-"nco"} export PS4='$SECONDS + ' date +# tells the ecen config to use efsoi resources +export EFSOI_TASK="YES" ############################# # Source relevant config files ############################# export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -configs="base ecenfsoi" +configs="base ecen" config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} for config in $configs; do . $config_path/config.$config @@ -62,7 +64,6 @@ if [ $RUN_ENVIR = "nco" ]; then export ROTDIR=${COMROOT:?}/$NET/$envir fi - ############################################## # Begin JOB SPECIFIC work ############################################## diff --git a/jobs/JGDAS_EFSOI_FCST b/jobs/JGDAS_EFSOI_FCST index a9e4fc78f1c..340694282df 100755 --- a/jobs/JGDAS_EFSOI_FCST +++ b/jobs/JGDAS_EFSOI_FCST @@ -5,13 +5,16 @@ export RUN_ENVIR=${RUN_ENVIR:-"nco"} export PS4='$SECONDS + ' date +# tells the world this is an EFSOI task +export EFSOI_TASK="YES" + ############################# # Source relevant config files ############################# export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} -configs="base fcst efcsfsoi" +configs="base fcst efcs" for config in $configs; do . $config_path/config.$config status=$? diff --git a/jobs/JGDAS_EFSOI_POST b/jobs/JGDAS_EFSOI_POST index f71f865b7e4..9160bb20409 100755 --- a/jobs/JGDAS_EFSOI_POST +++ b/jobs/JGDAS_EFSOI_POST @@ -5,12 +5,14 @@ export RUN_ENVIR=${RUN_ENVIR:-"nco"} export PS4='$SECONDS + ' date +# tells the configs this is an EFSOI task +export EFSOI_TASK="YES" ############################# # Source relevant config files ############################# export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -configs="base eposfsoi" +configs="base epos" config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} for config in $configs; do . $config_path/config.$config diff --git a/jobs/JGDAS_EFSOI_SFC b/jobs/JGDAS_EFSOI_SFC index 5924393c33d..9ebc38371b0 100755 --- a/jobs/JGDAS_EFSOI_SFC +++ b/jobs/JGDAS_EFSOI_SFC @@ -5,12 +5,14 @@ export RUN_ENVIR=${RUN_ENVIR:-"nco"} export PS4='$SECONDS + ' date +# tells the configs this is an EFSOI task +export EFSOI_TASK="YES" ############################# # Source relevant config files ############################# export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -configs="base esfcfsoi" +configs="base esfc" config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} for config in $configs; do . $config_path/config.$config @@ -62,7 +64,6 @@ if [ $RUN_ENVIR = "nco" ]; then export ROTDIR=${COMROOT:?}/$NET/$envir fi - ############################################## # Begin JOB SPECIFIC work ############################################## diff --git a/parm/config/config.ecen b/parm/config/config.ecen index c9609e3ff89..f9536a78a5d 100755 --- a/parm/config/config.ecen +++ b/parm/config/config.ecen @@ -6,7 +6,11 @@ echo "BEGIN: config.ecen" # Get task specific resources -. $EXPDIR/config.resources ecen +if [ $EFSOI_TASK = "YES" ]; then + . $EXPDIR/config.resources ecenfsoi +else + . $EXPDIR/config.resources ecen +fi # Number of concurrent ecen jobs [1 implies sequential] # Usually IAUFHRS_ENKF=3,6,9, so NECENGRP=3. Scripting diff --git a/parm/config/config.ecenfsoi b/parm/config/config.ecenfsoi deleted file mode 100755 index 1777bb40e0b..00000000000 --- a/parm/config/config.ecenfsoi +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/ksh -x - -########## config.ecen ########## -# Ensemble recentering specific - -echo "BEGIN: config.ecenfsoi" - -# get regular ecen configs -. $EXPDIR/config.ecen - -# Get task specific resources -. $EXPDIR/config.resources ecenfsoi - -echo "END: config.ecenfsoi" diff --git a/parm/config/config.efcs b/parm/config/config.efcs index af84dc730fb..969435861ae 100755 --- a/parm/config/config.efcs +++ b/parm/config/config.efcs @@ -80,4 +80,22 @@ case "$CASE_ENKF" in esac export ICERES=$OCNRES +if [ $EFSOI_TASK = "YES" ]; then + + # Get task specific resources + . $EXPDIR/config.resources efcsfsoi + + export npe_fv3=$npe_efcsfsoi + + if [ $QUILTING = ".true." ]; then + export npe_fv3=$(echo " $npe_fv3 + $WRITE_GROUP * $WRTTASK_PER_GROUP" | bc) + export npe_efcsfsoi=$npe_fv3 + fi + + export FHMIN_EFSOI=6 + export FHOUT_EFSOI=6 + export FHMAX_EFSOI=30 + +fi + echo "END: config.efcs" diff --git a/parm/config/config.efcsfsoi b/parm/config/config.efcsfsoi deleted file mode 100755 index e6f77079cb7..00000000000 --- a/parm/config/config.efcsfsoi +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/ksh -x - -########## config.efcsfsoi ########## -# Ensemble forecast specific, dependency: config.fcst - -echo "BEGIN: config.efcsfsoi" - -# Get regular efcs configs -. $EXPDIR/config.efcs - -# Get task specific resources -. $EXPDIR/config.resources efcsfsoi - -export npe_fv3=$npe_efcsfsoi - -if [ $QUILTING = ".true." ]; then - export npe_fv3=$(echo " $npe_fv3 + $WRITE_GROUP * $WRTTASK_PER_GROUP" | bc) - export npe_efcsfsoi=$npe_fv3 -fi - -export FHMIN_EFSOI=6 -export FHOUT_EFSOI=6 -export FHMAX_EFSOI=30 - -echo "END: config.efcsfsoi" diff --git a/parm/config/config.epos b/parm/config/config.epos index 441a1ff995e..b3e2f0695c1 100755 --- a/parm/config/config.epos +++ b/parm/config/config.epos @@ -17,4 +17,14 @@ fi # Generate ensemble spread files export ENKF_SPREAD="YES" +if [ $EFSOI_TASK = "YES" ]; then + + # Get efcsfsoi configs for FH settings + . $EXPDIR/config.efcs + + # Get task specific resources + . $EXPDIR/config.resources eposfsoi +fi + + echo "END: config.epos" diff --git a/parm/config/config.eposfsoi b/parm/config/config.eposfsoi deleted file mode 100755 index 22e0bbf4614..00000000000 --- a/parm/config/config.eposfsoi +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/ksh -x - -########## config.eposfsoi ########## -# Ensemble post processing specific - -echo "BEGIN: config.eposfsoi" - -# Get regular epos configs -. $EXPDIR/config.epos - -# Get efcsfsoi configs for FH settings -. $EXPDIR/config.efcsfsoi - -# Get task specific resources -. $EXPDIR/config.resources eposfsoi - -echo "END: config.eposfsoi" diff --git a/parm/config/config.esfc b/parm/config/config.esfc index 53cbb091757..b0e689f0003 100755 --- a/parm/config/config.esfc +++ b/parm/config/config.esfc @@ -6,7 +6,11 @@ echo "BEGIN: config.esfc" # Get task specific resources -. $EXPDIR/config.resources esfc +if [ $EFSOI_TASK = "YES" ]; then + . $EXPDIR/config.resources esfcfsoi +else + . $EXPDIR/config.resources esfc +fi # With IAU only need surface analysis at start of IAU window. # Set DOSFCANL_ENKF=NO to prevent creation of sfcanl at diff --git a/parm/config/config.esfcfsoi b/parm/config/config.esfcfsoi deleted file mode 100755 index 1ae88045349..00000000000 --- a/parm/config/config.esfcfsoi +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/ksh -x - -########## config.esfcfsoi ########## -# Ensemble surface specific - -echo "BEGIN: config.esfcfsoi" - -# Get regular esfc configs -. $EXPDIR/config.esfc - -# Get task specific resources -. $EXPDIR/config.resources esfcfsoi - -## With IAU only need surface analysis at start of IAU window. -## Set DOSFCANL_ENKF=NO to prevent creation of sfcanl at -## center of analysis window. -# -#if [ $DOIAU_ENKF = "YES" ]; then -# export DOSFCANL_ENKF="NO" -#fi -# -echo "END: config.esfcfsoi" From c0844e633277c5461e0d2a8cc40bb636ce042a3c Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 28 Jul 2022 22:24:53 -0500 Subject: [PATCH 067/103] Revert "removing hopefully superfluous config files" This reverts commit 908ebd5f752d1f80bc3e02a8845fe70a51732e1a. --- jobs/JGDAS_EFSOI_ECEN | 5 ++--- jobs/JGDAS_EFSOI_FCST | 5 +---- jobs/JGDAS_EFSOI_POST | 4 +--- jobs/JGDAS_EFSOI_SFC | 5 ++--- parm/config/config.ecen | 6 +----- parm/config/config.ecenfsoi | 14 ++++++++++++++ parm/config/config.efcs | 18 ------------------ parm/config/config.efcsfsoi | 25 +++++++++++++++++++++++++ parm/config/config.epos | 10 ---------- parm/config/config.eposfsoi | 17 +++++++++++++++++ parm/config/config.esfc | 6 +----- parm/config/config.esfcfsoi | 22 ++++++++++++++++++++++ 12 files changed, 86 insertions(+), 51 deletions(-) create mode 100755 parm/config/config.ecenfsoi create mode 100755 parm/config/config.efcsfsoi create mode 100755 parm/config/config.eposfsoi create mode 100755 parm/config/config.esfcfsoi diff --git a/jobs/JGDAS_EFSOI_ECEN b/jobs/JGDAS_EFSOI_ECEN index f2b67e1f070..28d04b9f5cf 100755 --- a/jobs/JGDAS_EFSOI_ECEN +++ b/jobs/JGDAS_EFSOI_ECEN @@ -5,14 +5,12 @@ export RUN_ENVIR=${RUN_ENVIR:-"nco"} export PS4='$SECONDS + ' date -# tells the ecen config to use efsoi resources -export EFSOI_TASK="YES" ############################# # Source relevant config files ############################# export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -configs="base ecen" +configs="base ecenfsoi" config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} for config in $configs; do . $config_path/config.$config @@ -64,6 +62,7 @@ if [ $RUN_ENVIR = "nco" ]; then export ROTDIR=${COMROOT:?}/$NET/$envir fi + ############################################## # Begin JOB SPECIFIC work ############################################## diff --git a/jobs/JGDAS_EFSOI_FCST b/jobs/JGDAS_EFSOI_FCST index 340694282df..a9e4fc78f1c 100755 --- a/jobs/JGDAS_EFSOI_FCST +++ b/jobs/JGDAS_EFSOI_FCST @@ -5,16 +5,13 @@ export RUN_ENVIR=${RUN_ENVIR:-"nco"} export PS4='$SECONDS + ' date -# tells the world this is an EFSOI task -export EFSOI_TASK="YES" - ############################# # Source relevant config files ############################# export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} -configs="base fcst efcs" +configs="base fcst efcsfsoi" for config in $configs; do . $config_path/config.$config status=$? diff --git a/jobs/JGDAS_EFSOI_POST b/jobs/JGDAS_EFSOI_POST index 9160bb20409..f71f865b7e4 100755 --- a/jobs/JGDAS_EFSOI_POST +++ b/jobs/JGDAS_EFSOI_POST @@ -5,14 +5,12 @@ export RUN_ENVIR=${RUN_ENVIR:-"nco"} export PS4='$SECONDS + ' date -# tells the configs this is an EFSOI task -export EFSOI_TASK="YES" ############################# # Source relevant config files ############################# export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -configs="base epos" +configs="base eposfsoi" config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} for config in $configs; do . $config_path/config.$config diff --git a/jobs/JGDAS_EFSOI_SFC b/jobs/JGDAS_EFSOI_SFC index 9ebc38371b0..5924393c33d 100755 --- a/jobs/JGDAS_EFSOI_SFC +++ b/jobs/JGDAS_EFSOI_SFC @@ -5,14 +5,12 @@ export RUN_ENVIR=${RUN_ENVIR:-"nco"} export PS4='$SECONDS + ' date -# tells the configs this is an EFSOI task -export EFSOI_TASK="YES" ############################# # Source relevant config files ############################# export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -configs="base esfc" +configs="base esfcfsoi" config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} for config in $configs; do . $config_path/config.$config @@ -64,6 +62,7 @@ if [ $RUN_ENVIR = "nco" ]; then export ROTDIR=${COMROOT:?}/$NET/$envir fi + ############################################## # Begin JOB SPECIFIC work ############################################## diff --git a/parm/config/config.ecen b/parm/config/config.ecen index f9536a78a5d..c9609e3ff89 100755 --- a/parm/config/config.ecen +++ b/parm/config/config.ecen @@ -6,11 +6,7 @@ echo "BEGIN: config.ecen" # Get task specific resources -if [ $EFSOI_TASK = "YES" ]; then - . $EXPDIR/config.resources ecenfsoi -else - . $EXPDIR/config.resources ecen -fi +. $EXPDIR/config.resources ecen # Number of concurrent ecen jobs [1 implies sequential] # Usually IAUFHRS_ENKF=3,6,9, so NECENGRP=3. Scripting diff --git a/parm/config/config.ecenfsoi b/parm/config/config.ecenfsoi new file mode 100755 index 00000000000..1777bb40e0b --- /dev/null +++ b/parm/config/config.ecenfsoi @@ -0,0 +1,14 @@ +#!/bin/ksh -x + +########## config.ecen ########## +# Ensemble recentering specific + +echo "BEGIN: config.ecenfsoi" + +# get regular ecen configs +. $EXPDIR/config.ecen + +# Get task specific resources +. $EXPDIR/config.resources ecenfsoi + +echo "END: config.ecenfsoi" diff --git a/parm/config/config.efcs b/parm/config/config.efcs index 969435861ae..af84dc730fb 100755 --- a/parm/config/config.efcs +++ b/parm/config/config.efcs @@ -80,22 +80,4 @@ case "$CASE_ENKF" in esac export ICERES=$OCNRES -if [ $EFSOI_TASK = "YES" ]; then - - # Get task specific resources - . $EXPDIR/config.resources efcsfsoi - - export npe_fv3=$npe_efcsfsoi - - if [ $QUILTING = ".true." ]; then - export npe_fv3=$(echo " $npe_fv3 + $WRITE_GROUP * $WRTTASK_PER_GROUP" | bc) - export npe_efcsfsoi=$npe_fv3 - fi - - export FHMIN_EFSOI=6 - export FHOUT_EFSOI=6 - export FHMAX_EFSOI=30 - -fi - echo "END: config.efcs" diff --git a/parm/config/config.efcsfsoi b/parm/config/config.efcsfsoi new file mode 100755 index 00000000000..e6f77079cb7 --- /dev/null +++ b/parm/config/config.efcsfsoi @@ -0,0 +1,25 @@ +#!/bin/ksh -x + +########## config.efcsfsoi ########## +# Ensemble forecast specific, dependency: config.fcst + +echo "BEGIN: config.efcsfsoi" + +# Get regular efcs configs +. $EXPDIR/config.efcs + +# Get task specific resources +. $EXPDIR/config.resources efcsfsoi + +export npe_fv3=$npe_efcsfsoi + +if [ $QUILTING = ".true." ]; then + export npe_fv3=$(echo " $npe_fv3 + $WRITE_GROUP * $WRTTASK_PER_GROUP" | bc) + export npe_efcsfsoi=$npe_fv3 +fi + +export FHMIN_EFSOI=6 +export FHOUT_EFSOI=6 +export FHMAX_EFSOI=30 + +echo "END: config.efcsfsoi" diff --git a/parm/config/config.epos b/parm/config/config.epos index b3e2f0695c1..441a1ff995e 100755 --- a/parm/config/config.epos +++ b/parm/config/config.epos @@ -17,14 +17,4 @@ fi # Generate ensemble spread files export ENKF_SPREAD="YES" -if [ $EFSOI_TASK = "YES" ]; then - - # Get efcsfsoi configs for FH settings - . $EXPDIR/config.efcs - - # Get task specific resources - . $EXPDIR/config.resources eposfsoi -fi - - echo "END: config.epos" diff --git a/parm/config/config.eposfsoi b/parm/config/config.eposfsoi new file mode 100755 index 00000000000..22e0bbf4614 --- /dev/null +++ b/parm/config/config.eposfsoi @@ -0,0 +1,17 @@ +#!/bin/ksh -x + +########## config.eposfsoi ########## +# Ensemble post processing specific + +echo "BEGIN: config.eposfsoi" + +# Get regular epos configs +. $EXPDIR/config.epos + +# Get efcsfsoi configs for FH settings +. $EXPDIR/config.efcsfsoi + +# Get task specific resources +. $EXPDIR/config.resources eposfsoi + +echo "END: config.eposfsoi" diff --git a/parm/config/config.esfc b/parm/config/config.esfc index b0e689f0003..53cbb091757 100755 --- a/parm/config/config.esfc +++ b/parm/config/config.esfc @@ -6,11 +6,7 @@ echo "BEGIN: config.esfc" # Get task specific resources -if [ $EFSOI_TASK = "YES" ]; then - . $EXPDIR/config.resources esfcfsoi -else - . $EXPDIR/config.resources esfc -fi +. $EXPDIR/config.resources esfc # With IAU only need surface analysis at start of IAU window. # Set DOSFCANL_ENKF=NO to prevent creation of sfcanl at diff --git a/parm/config/config.esfcfsoi b/parm/config/config.esfcfsoi new file mode 100755 index 00000000000..1ae88045349 --- /dev/null +++ b/parm/config/config.esfcfsoi @@ -0,0 +1,22 @@ +#!/bin/ksh -x + +########## config.esfcfsoi ########## +# Ensemble surface specific + +echo "BEGIN: config.esfcfsoi" + +# Get regular esfc configs +. $EXPDIR/config.esfc + +# Get task specific resources +. $EXPDIR/config.resources esfcfsoi + +## With IAU only need surface analysis at start of IAU window. +## Set DOSFCANL_ENKF=NO to prevent creation of sfcanl at +## center of analysis window. +# +#if [ $DOIAU_ENKF = "YES" ]; then +# export DOSFCANL_ENKF="NO" +#fi +# +echo "END: config.esfcfsoi" From b959d176c35ae2c858c08de6f36e1edb9866296f Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Wed, 24 Aug 2022 10:42:13 -0500 Subject: [PATCH 068/103] addressing review by Walter --- jobs/rocoto/earc.sh | 10 +++++----- jobs/rocoto/ecenfsoi.sh | 4 +++- jobs/rocoto/efcsfsoi.sh | 4 +++- jobs/rocoto/efsoi.sh | 4 +++- jobs/rocoto/eposfsoi.sh | 4 +++- jobs/rocoto/esfcfsoi.sh | 4 +++- jobs/rocoto/eupdfsoi.sh | 4 +++- parm/config/config.ecenfsoi | 2 +- parm/config/config.efcsfsoi | 2 +- parm/config/config.efsoi | 2 +- parm/config/config.eposfsoi | 2 +- parm/config/config.esfcfsoi | 10 +--------- parm/config/config.eupdfsoi | 2 +- 13 files changed, 29 insertions(+), 25 deletions(-) diff --git a/jobs/rocoto/earc.sh b/jobs/rocoto/earc.sh index f39bd9f2170..2e5c9a570f3 100755 --- a/jobs/rocoto/earc.sh +++ b/jobs/rocoto/earc.sh @@ -129,7 +129,7 @@ if [[ $ENSGRP -gt 0 ]] && [[ $HPSSARCH = "YES" || $LOCALARCH = "YES" ]]; then fi if [ $DO_EFSOI = "YES" ]; then - htar -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}_grp${ENSGRP}.tar `cat $ARCH_LIST/efsoi${CDUMP}_grp${n}.txt` + $TARCMD -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}_grp${ENSGRP}.tar $(cat $ARCH_LIST/efsoi${CDUMP}_grp${n}.txt) status=$? if [ $status -ne 0 -a $CDATE -ge $firstday ]; then echo "HTAR $CDATE efsoi${CDUMP}_grp${ENSGRP}.tar failed" @@ -137,7 +137,7 @@ if [[ $ENSGRP -gt 0 ]] && [[ $HPSSARCH = "YES" || $LOCALARCH = "YES" ]]; then fi if [ $SAVEWARMICA = "YES" -a $cyc -eq $EARCINC_CYC ]; then - htar -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}_restarta_grp${ENSGRP}.tar `cat $ARCH_LIST/efsoi${CDUMP}_restarta_grp${n}.txt` + $TARCMD -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}_restarta_grp${ENSGRP}.tar $(cat $ARCH_LIST/efsoi${CDUMP}_restarta_grp${n}.txt) status=$? if [ $status -ne 0 ]; then echo "HTAR $CDATE efsoi${CDUMP}_restarta_grp${ENSGRP}.tar failed" @@ -146,7 +146,7 @@ if [[ $ENSGRP -gt 0 ]] && [[ $HPSSARCH = "YES" || $LOCALARCH = "YES" ]]; then fi if [ $SAVEWARMICB = "YES" -a $cyc -eq $EARCICS_CYC ]; then - htar -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}_restartb_grp${ENSGRP}.tar `cat $ARCH_LIST/efsoi${CDUMP}_restartb_grp${n}.txt` + $TARCMD -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}_restartb_grp${ENSGRP}.tar $(cat $ARCH_LIST/efsoi${CDUMP}_restartb_grp${n}.txt) status=$? if [ $status -ne 0 ]; then echo "HTAR $CDATE efsoi${CDUMP}_restartb_grp${ENSGRP}.tar failed" @@ -182,7 +182,7 @@ if [ $ENSGRP -eq 0 ]; then fi if [ $DO_EFSOI = "YES" ]; then - htar -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}.tar `cat $ARCH_LIST/efsoi${CDUMP}.txt` + $TARCMD -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}.tar $(cat $ARCH_LIST/efsoi${CDUMP}.txt) status=$? if [ $status -ne 0 -a $CDATE -ge $firstday ]; then echo "HTAR $CDATE efsoi${CDUMP}.tar failed" @@ -260,7 +260,7 @@ if [ $ENSGRP -eq 0 ]; then rm -rf $COMIN_ENS/*f018*nc for imem in $(seq 1 $NMEM_ENKF); do memchar="mem"$(printf %03i $imem) - for file in `ls $COMIN_ENS/$memchar |grep -v atmf024`; do + for file in $(ls $COMIN_ENS/$memchar |grep -v atmf024); do rm -rf $COMIN_ENS/$memchar/$file done done diff --git a/jobs/rocoto/ecenfsoi.sh b/jobs/rocoto/ecenfsoi.sh index ea95706791f..863cd8218cb 100755 --- a/jobs/rocoto/ecenfsoi.sh +++ b/jobs/rocoto/ecenfsoi.sh @@ -1,4 +1,6 @@ -#!/bin/bash -x +#! /usr/bin/env bash + +source "$HOMEgfs/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules diff --git a/jobs/rocoto/efcsfsoi.sh b/jobs/rocoto/efcsfsoi.sh index 3de99fc95a7..6044a8460cc 100755 --- a/jobs/rocoto/efcsfsoi.sh +++ b/jobs/rocoto/efcsfsoi.sh @@ -1,4 +1,6 @@ -#!/bin/bash -x +#! /usr/bin/env bash + +source "$HOMEgfs/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules diff --git a/jobs/rocoto/efsoi.sh b/jobs/rocoto/efsoi.sh index b4116753603..036870b664b 100755 --- a/jobs/rocoto/efsoi.sh +++ b/jobs/rocoto/efsoi.sh @@ -1,4 +1,6 @@ -#!/bin/bash -x +#! /usr/bin/env bash + +source "$HOMEgfs/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules diff --git a/jobs/rocoto/eposfsoi.sh b/jobs/rocoto/eposfsoi.sh index a84537c8438..ddd1d8191d9 100755 --- a/jobs/rocoto/eposfsoi.sh +++ b/jobs/rocoto/eposfsoi.sh @@ -1,4 +1,6 @@ -#!/bin/bash -x +#! /usr/bin/env bash + +source "$HOMEgfs/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules diff --git a/jobs/rocoto/esfcfsoi.sh b/jobs/rocoto/esfcfsoi.sh index c0737a9f316..d7db3bdd694 100755 --- a/jobs/rocoto/esfcfsoi.sh +++ b/jobs/rocoto/esfcfsoi.sh @@ -1,4 +1,6 @@ -#!/bin/bash -x +#! /usr/bin/env bash + +source "$HOMEgfs/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules diff --git a/jobs/rocoto/eupdfsoi.sh b/jobs/rocoto/eupdfsoi.sh index 7c2e064a73c..81813bbf45d 100755 --- a/jobs/rocoto/eupdfsoi.sh +++ b/jobs/rocoto/eupdfsoi.sh @@ -1,4 +1,6 @@ -#!/bin/bash -x +#! /usr/bin/env bash + +source "$HOMEgfs/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules diff --git a/parm/config/config.ecenfsoi b/parm/config/config.ecenfsoi index 1777bb40e0b..e41757341f4 100755 --- a/parm/config/config.ecenfsoi +++ b/parm/config/config.ecenfsoi @@ -1,4 +1,4 @@ -#!/bin/ksh -x +#! /usr/bin/env bash ########## config.ecen ########## # Ensemble recentering specific diff --git a/parm/config/config.efcsfsoi b/parm/config/config.efcsfsoi index e6f77079cb7..e2916fd07d8 100755 --- a/parm/config/config.efcsfsoi +++ b/parm/config/config.efcsfsoi @@ -1,4 +1,4 @@ -#!/bin/ksh -x +#! /usr/bin/env bash ########## config.efcsfsoi ########## # Ensemble forecast specific, dependency: config.fcst diff --git a/parm/config/config.efsoi b/parm/config/config.efsoi index 5718b426c73..f82802a1dc5 100755 --- a/parm/config/config.efsoi +++ b/parm/config/config.efsoi @@ -1,4 +1,4 @@ -#!/bin/ksh -x +#! /usr/bin/env bash ########## config.efsoi ########## # Ensemble update specific, dependency config.anal diff --git a/parm/config/config.eposfsoi b/parm/config/config.eposfsoi index 22e0bbf4614..8a6e3716cff 100755 --- a/parm/config/config.eposfsoi +++ b/parm/config/config.eposfsoi @@ -1,4 +1,4 @@ -#!/bin/ksh -x +#! /usr/bin/env bash ########## config.eposfsoi ########## # Ensemble post processing specific diff --git a/parm/config/config.esfcfsoi b/parm/config/config.esfcfsoi index 1ae88045349..2eb2a7eadf2 100755 --- a/parm/config/config.esfcfsoi +++ b/parm/config/config.esfcfsoi @@ -1,4 +1,4 @@ -#!/bin/ksh -x +#! /usr/bin/env bash ########## config.esfcfsoi ########## # Ensemble surface specific @@ -11,12 +11,4 @@ echo "BEGIN: config.esfcfsoi" # Get task specific resources . $EXPDIR/config.resources esfcfsoi -## With IAU only need surface analysis at start of IAU window. -## Set DOSFCANL_ENKF=NO to prevent creation of sfcanl at -## center of analysis window. -# -#if [ $DOIAU_ENKF = "YES" ]; then -# export DOSFCANL_ENKF="NO" -#fi -# echo "END: config.esfcfsoi" diff --git a/parm/config/config.eupdfsoi b/parm/config/config.eupdfsoi index a9844e594d8..7649c0d3f23 100755 --- a/parm/config/config.eupdfsoi +++ b/parm/config/config.eupdfsoi @@ -1,4 +1,4 @@ -#!/bin/ksh -x +#! /usr/bin/env bash ########## config.eupdfsoi ########## # Ensemble update specific, dependency config.anal From 7ee4b60be6f36965017c7aa27bb1089858799ca0 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Wed, 24 Aug 2022 10:56:00 -0500 Subject: [PATCH 069/103] addressing Walter's review --- ush/hpssarch_gen.sh | 9 +++------ workflow/applications.py | 4 ++-- workflow/rocoto/workflow_tasks.py | 2 +- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/ush/hpssarch_gen.sh b/ush/hpssarch_gen.sh index 21897a964b4..ac27bd39fcd 100755 --- a/ush/hpssarch_gen.sh +++ b/ush/hpssarch_gen.sh @@ -596,7 +596,6 @@ if [ $type = "efsoigdas" ]; then NTARS=$((NMEM_ENKF/NMEM_EARCGRP)) [[ $NTARS -eq 0 ]] && NTARS=1 [[ $((NTARS*NMEM_EARCGRP)) -lt $NMEM_ENKF ]] && NTARS=$((NTARS+1)) -##NTARS2=$((NTARS/2)) # number of earc groups to include analysis/increments NTARS2=$NTARS dirpath="efsoi${CDUMP}.${PDY}/${cyc}/atmos/" @@ -619,8 +618,7 @@ if [ $type = "efsoigdas" ]; then if [ -s $ROTDIR/${dirpath}${head}radstat.ensmean ]; then echo "${dirname}${head}radstat.ensmean " >>efsoi${CDUMP}.txt fi - for FH in $nfhrs; do # loop over analysis times in window - FHR=$(printf %03i $FH) + for FHR in $nfhrs; do # loop over analysis times in window if [ $FHR -eq 6 ]; then if [ -s $ROTDIR/${dirpath}${head}atmanl.ensmean${SUFFIX} ]; then echo "${dirname}${head}atmanl.ensmean${SUFFIX} " >>efsoi${CDUMP}.txt @@ -677,8 +675,7 @@ if [ $type = "efsoigdas" ]; then head="${CDUMP}.t${cyc}z." #--- - for FH in $nfhrs; do # loop over analysis times in window - FHR=$(printf %03i $FH) + for FHR in $nfhrs; do # loop over analysis times in window if [ $FHR -eq 6 ]; then if [ $n -le $NTARS2 ]; then if [ -s $ROTDIR/${dirpath}${head}atmanl${SUFFIX} ] ; then @@ -750,7 +747,7 @@ if [ $type = "efsoigdas" ]; then #----------------------------------------------------- -fi ##end of efsoigdas +fi ##end of e:fsoigdas #----------------------------------------------------- diff --git a/workflow/applications.py b/workflow/applications.py index 62bc468b20f..7941c6b3b88 100644 --- a/workflow/applications.py +++ b/workflow/applications.py @@ -195,7 +195,7 @@ def _cycled_configs(self): configs += ['ecen', 'esfc', 'efcs', 'echgres', 'epos', 'earc'] if self.do_efsoi: - configs += ['eupdfsoi','ecenfsoi','esfcfsoi','efcsfsoi','eposfsoi','efsoi'] + configs += ['eupdfsoi', 'ecenfsoi', 'esfcfsoi', 'efcsfsoi', 'eposfsoi', 'efsoi'] if self.do_metp: configs += ['metp'] @@ -361,7 +361,7 @@ def _get_cycled_task_names(self): gdas_gfs_common_tasks_before_fcst += ['aeroanlinit', 'aeroanlrun', 'aeroanlfinal'] gldas_tasks = ['gldas'] - efsoi_tasks = ['eupdfsoi','ecenfsoi','esfcfsoi','efcsfsoi','eposfsoi','efsoi'] + efsoi_tasks = ['eupdfsoi', 'ecenfsoi', 'esfcfsoi', 'efcsfsoi', 'eposfsoi', 'efsoi'] wave_prep_tasks = ['waveinit', 'waveprep'] wave_bndpnt_tasks = ['wavepostbndpnt', 'wavepostbndpntbll'] wave_post_tasks = ['wavepostsbs', 'wavepostpnt'] diff --git a/workflow/rocoto/workflow_tasks.py b/workflow/rocoto/workflow_tasks.py index d6770a79c4f..d560dff71d6 100644 --- a/workflow/rocoto/workflow_tasks.py +++ b/workflow/rocoto/workflow_tasks.py @@ -15,7 +15,7 @@ class Tasks: 'atmanalprep', 'atmanalrun', 'atmanalpost', 'earc', 'ecen', 'echgres', 'ediag', 'efcs', 'eobs', 'eomg', 'epos', 'esfc', 'eupd', - 'eupdfsoi','ecenfsoi','esfcfsoi','efcsfsoi','eposfsoi','efsoi' + 'eupdfsoi', 'ecenfsoi', 'esfcfsoi', 'efcsfsoi', 'eposfsoi', 'efsoi' 'atmensanalprep', 'atmensanalrun', 'atmensanalpost', 'aeroanlinit', 'aeroanlrun', 'aeroanlfinal', 'fcst', 'post', 'ocnpost', 'vrfy', 'metp', From ed2abcd1a89963548168850f89c5197adaece2db Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Fri, 26 Aug 2022 09:23:57 -0500 Subject: [PATCH 070/103] fixed typo --- env/ORION.env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/env/ORION.env b/env/ORION.env index adc961474a3..b0546a1b54c 100755 --- a/env/ORION.env +++ b/env/ORION.env @@ -232,7 +232,7 @@ elif [ $step = "efcsfsoi" ]; then nth_max=$(($npe_node_max / $npe_node_efcsfsoi)) - export NTHREADS_FV3=${nth_efcfsois:-$nth_max} + export NTHREADS_FV3=${nth_efcsfsoi:-$nth_max} [[ $NTHREADS_FV3 -gt $nth_max ]] && export NTHREADS_FV3=$nth_max export cores_per_node=$npe_node_max #export APRUN_FV3="$launcher" From 8fed15baa1444f1a76c64bc5edd45062f721ea8a Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Fri, 9 Sep 2022 11:04:41 -0500 Subject: [PATCH 071/103] removed reason for large throttle value, and trimmed to g-w conventions --- jobs/JGDAS_EFSOI | 23 +++++++++++++++----- jobs/JGDAS_EFSOI_FCST | 2 +- jobs/JGDAS_EFSOI_SFC | 6 +----- jobs/rocoto/earc.sh | 8 +++---- scripts/exgdas_efsoi.sh | 36 +++++++++---------------------- ush/forecast_predet.sh | 1 + workflow/rocoto/workflow_tasks.py | 17 +++++++-------- workflow/rocoto/workflow_xml.py | 5 +---- 8 files changed, 43 insertions(+), 55 deletions(-) diff --git a/jobs/JGDAS_EFSOI b/jobs/JGDAS_EFSOI index 6c90468989f..55fd09f1d94 100755 --- a/jobs/JGDAS_EFSOI +++ b/jobs/JGDAS_EFSOI @@ -18,6 +18,16 @@ for config in $configs; do done +export EFSOI_FORECAST_LENGTH=24 + +xtime=$(($EFSOI_FORECAST_LENGTH+12)) +if [ $CDATE -lt $($NDATE +$xtime $SDATE) ]; then + echo "EFSOI needs a 30-hour EFSOI forecast to run with an analysis from ${CDATE}," + echo " so needs to run $xtime hours starting from $SDATE. This efsoi cycle is skipped" + exit 0 +fi + + ########################################## # Source machine runtime environment ########################################## @@ -68,15 +78,19 @@ fi # Begin JOB SPECIFIC work ############################################## -GDATE=$($NDATE -$assim_freq $CDATE) +export EFSOIDATE=$($NDATE -24 $CDATE) +efsoiPDY=$(echo $EFSOIDATE | cut -c1-8) +efsoicyc=$(echo $EFSOIDATE | cut -c9-10) + +GDATE=$($NDATE -$assim_freq $EFSOIDATE) gPDY=$(echo $GDATE | cut -c1-8) export gcyc=$(echo $GDATE | cut -c9-10) # needed in namelist -VDATE=$($NDATE 24 $CDATE) +VDATE=${CDATE} vPDY=$(echo $VDATE | cut -c1-8) vcyc=$(echo $VDATE | cut -c9-10) -export APREFIX="${CDUMP}.t${cyc}z." +export APREFIX="${CDUMP}.t${efsoicyc}z." export VPREFIX="${CDUMP}.t${vcyc}z." export GPREFIX="gdas.t${gcyc}z." export ASUFFIX=${ASUFFIX:-$SUFFIX} @@ -86,9 +100,8 @@ export GSUFFIX=${GSUFFIX:-$SUFFIX} # COMIN_GES_ENS and COMOUT_ANL_ENS are used in script export COMIN_GES_ENS="$ROTDIR/efsoigdas.$gPDY/$gcyc/$COMPONENT" -export COMOUT_ANL_ENS="$ROTDIR/enkf$CDUMP.$PDY/$cyc/$COMPONENT" export COMIN_ANL="$ROTDIR/$CDUMP.$vPDY/$vcyc/$COMPONENT" -export COMOUT_ANL_ENSFSOI="$ROTDIR/efsoi$CDUMP.$PDY/$cyc/$COMPONENT" +export COMOUT_ANL_ENSFSOI="$ROTDIR/efsoi$CDUMP.$efsoiPDY/$efsoicyc/$COMPONENT" export OSENSE_SAVE_DIR="$ROTDIR/osense" mkdir -p $OSENSE_SAVE_DIR # ======================================================== diff --git a/jobs/JGDAS_EFSOI_FCST b/jobs/JGDAS_EFSOI_FCST index 2794ee9c93f..f8fd1955f61 100755 --- a/jobs/JGDAS_EFSOI_FCST +++ b/jobs/JGDAS_EFSOI_FCST @@ -85,7 +85,7 @@ export FORECASTSH=$HOMEgfs/scripts/exglobal_forecast.sh # Get ENSBEG/ENSEND from ENSGRP and NMEM_EFCSGRP -export ENSEND=$((NMEM_EFCSGRP * ENSGRP)) +export ENSEND=$((NMEM_EFCSGRP * 10#${ENSGRP})) export ENSBEG=$((ENSEND - NMEM_EFCSGRP + 1)) diff --git a/jobs/JGDAS_EFSOI_SFC b/jobs/JGDAS_EFSOI_SFC index 5ba5fb63939..c3393449eac 100755 --- a/jobs/JGDAS_EFSOI_SFC +++ b/jobs/JGDAS_EFSOI_SFC @@ -108,11 +108,7 @@ export COMOUT_ENS="$ROTDIR/efsoi$CDUMP.$PDY/$cyc/$COMPONENT" # Previous ENKF comrot folder export COMIN_GES_ENS="$ROTDIR/enkf$CDUMP.$gPDY/$gcyc/$COMPONENT" -#export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" -#export COMIN_ENS="$ROTDIR/enkf$CDUMP_ENKF.$PDY/$cyc/$COMPONENT" -#export COMOUT_ENS="$ROTDIR/enkf$CDUMP.$PDY/$cyc/$COMPONENT" -#export COMIN_GES_ENS="$ROTDIR/enkf$CDUMP.$gPDY/$gcyc/$COMPONENT" - +export COMIN_GES="$ROTDIR/$CDUMP.$gPDY/$gcyc/$COMPONENT" ############################################################### # Run relevant script diff --git a/jobs/rocoto/earc.sh b/jobs/rocoto/earc.sh index 2e5c9a570f3..03e7f953946 100755 --- a/jobs/rocoto/earc.sh +++ b/jobs/rocoto/earc.sh @@ -153,6 +153,9 @@ if [[ $ENSGRP -gt 0 ]] && [[ $HPSSARCH = "YES" || $LOCALARCH = "YES" ]]; then exit $status fi fi + + $NCP $ROTDIR/efsoi${CDUMP}.$PDY/$cyc/$COMPONENT/${CDUMP}.t${cyc}z.enkfstat efsoistat.${CDUMP}.$CDATE + fi # $DO_EFSOI = "YES" fi # CDATE>SDATE @@ -204,11 +207,6 @@ if [ $ENSGRP -eq 0 ]; then nb_copy $ROTDIR/enkfgfs.$PDY/$cyc/$COMPONENT/${CDUMP}.t${cyc}z.enkfstat enkfstat.gfs.$CDATE nb_copy $ROTDIR/enkfgfs.$PDY/$cyc/$COMPONENT/${CDUMP}.t${cyc}z.gsistat.ensmean gsistat.gfs.${CDATE}.ensmean fi - - if [ $DO_EFSOI = "YES" ]; then - $NCP $ROTDIR/efsoi${CDUMP}.$PDY/$cyc/$COMPONENT/${CDUMP}.t${cyc}z.enkfstat efsoistat.${CDUMP}.$CDATE - fi - fi diff --git a/scripts/exgdas_efsoi.sh b/scripts/exgdas_efsoi.sh index 65f7379e57c..b8b3bddb192 100755 --- a/scripts/exgdas_efsoi.sh +++ b/scripts/exgdas_efsoi.sh @@ -60,11 +60,11 @@ VERFANL=${VERFANL:-${VPREFIX}atmanl.ensres.nc} INITANL=${INITANL:-${APREFIX}atmanl.ensres.nc} FCSTLONG=${GPREFIX}atmf030.ensmean.nc FCSTSHORT=${APREFIX}atmf024.ensmean.nc -OSENSEIN=osense_${CDATE}_init.dat -OSENSEOUT=osense_${CDATE}_final.dat +OSENSEIN=osense_${EFSOIDATE}_init.dat +OSENSEOUT=osense_${EFSOIDATE}_final.dat # this needs to be set manually because params in enkf will default to fhr03 -fgfileprefixes=sfg_${CDATE}_fhr06_ +fgfileprefixes=sfg_${EFSOIDATE}_fhr06_ #analysise Namelst parameters NMEM_ENKF=${NMEM_ENKF:-80} @@ -146,12 +146,12 @@ for imem in $(seq 1 $NMEM_ENKF); do $NLN $COMOUT_ANL_ENSFSOI/$memchar/${APREFIX}atmf024.nc ${memchar} done -$NLN $COMIN_GES_ENS/${GPREFIX}atmf006.ensmean${GSUFFIX} sfg_${CDATE}_fhr06_ensmean -$NLN $COMIN_GES_ENS/${GPREFIX}atmf006.ensmean${GSUFFIX} sfg_${CDATE}_fhr03_ensmean +$NLN $COMIN_GES_ENS/${GPREFIX}atmf006.ensmean${GSUFFIX} sfg_${EFSOIDATE}_fhr06_ensmean +$NLN $COMIN_GES_ENS/${GPREFIX}atmf006.ensmean${GSUFFIX} sfg_${EFSOIDATE}_fhr03_ensmean # The following deals with different files with the same local name (assuming # a 24hr EFSOI forecast): -# both are hybrid analyses from gdas - one from CDATE saved during the +# both are hybrid analyses from gdas - one from EFSOIDATE saved during the # corresponding GDAS cycle in the efsoigdas tree to be used in # the localization advection in EFSOI, the other from VDATE to be used # for verification. @@ -167,23 +167,7 @@ $NLN $COMOUT_ANL_ENSFSOI/$FCSTSHORT . # inital osense file # efsoi.x will read then clobber this -$NCP $COMOUT_ANL_ENSFSOI/$OSENSEIN osense_${CDATE}.dat - - - - -if [ $USE_CFP = "YES" ]; then - chmod 755 $DATA/mp_untar.sh - ncmd=$(cat $DATA/mp_untar.sh | wc -l) - if [ $ncmd -gt 0 ]; then - ncmd_max=$((ncmd < npe_node_max ? ncmd : npe_node_max)) - APRUNCFP=$(eval echo $APRUNCFP) - $APRUNCFP $DATA/mp_untar.sh - export ERR=$? - export err=$ERR - $ERRSCRIPT || exit 3 - fi -fi +$NCP $COMOUT_ANL_ENSFSOI/$OSENSEIN osense_${EFSOIDATE}.dat ################################################################################ # Create global_enkf namelist @@ -200,7 +184,7 @@ fi cat > enkf.nml << EOFnml &nam_enkf - datestring="$CDATE",datapath="$DATA/", + datestring="$EFSOIDATE",datapath="$DATA/", gdatehr=$gcyc, datehr=$cyc, fgfileprefixes=$fgfileprefixes @@ -248,8 +232,8 @@ $ERRSCRIPT || exit 2 # Cat runtime output files. cat stdout stderr > $COMOUT_ANL_ENSFSOI/$EFSOISTAT -$NCP osense_${CDATE}.dat $COMOUT_ANL_ENSFSOI/$OSENSEOUT -$NCP osense_${CDATE}.dat $OSENSE_SAVE_DIR/$OSENSEOUT +$NCP osense_${EFSOIDATE}.dat $COMOUT_ANL_ENSFSOI/$OSENSEOUT +$NCP osense_${EFSOIDATE}.dat $OSENSE_SAVE_DIR/$OSENSEOUT ################################################################################ # Postprocessing diff --git a/ush/forecast_predet.sh b/ush/forecast_predet.sh index 8267463ebaa..ca23abae076 100755 --- a/ush/forecast_predet.sh +++ b/ush/forecast_predet.sh @@ -101,6 +101,7 @@ FV3_GFS_predet(){ MEMBER=${MEMBER:-"-1"} # -1: control, 0: ensemble mean, >0: ensemble member $MEMBER ENS_NUM=${ENS_NUM:-1} # Single executable runs multiple members (e.g. GEFS) PREFIX_ATMINC=${PREFIX_ATMINC:-""} # allow ensemble to use recentered increment + EFSOI_TASK=${EFSOI_TASK:-"NO"} # is instance of EFSOI ensemble forecast # IAU options DOIAU=${DOIAU:-"NO"} diff --git a/workflow/rocoto/workflow_tasks.py b/workflow/rocoto/workflow_tasks.py index c69da79044d..18d302b5950 100644 --- a/workflow/rocoto/workflow_tasks.py +++ b/workflow/rocoto/workflow_tasks.py @@ -1035,16 +1035,10 @@ def eupdfsoi(self): def efsoi(self): deps = [] - data = '&ROTDIR;/efsoigdas.@Y@m@d/@H/atmos/gdas.t@Hz.atmf030.ensmean.nc' - dep_dict = {'type': 'data', 'data': data, 'offset': '-6:00:00'} - deps.append(rocoto.add_dependency(dep_dict)) - data = '&ROTDIR;/efsoigdas.@Y@m@d/@H/atmos/gdas.t@Hz.atmf024.ensmean.nc' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) data = '&ROTDIR;/gdas.@Y@m@d/@H/atmos/gdas.t@Hz.atmanl.ensres.nc' - dep_dict = {'type': 'data', 'data': data, 'offset': '24:00:00'} + dep_dict = {'type': 'data', 'data': data} deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + dependencies = rocoto.create_dependency(dep=deps) resources = self.get_resource('efsoi') task = create_wf_task('efsoi', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) @@ -1410,7 +1404,12 @@ def earc(self): deps = [] dep_dict = {'type': 'metatask', 'name': f'{self.cdump}epmn'} deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) + if self.app_config.do_efsoi: + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}epmnfsoi'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + else: + dependencies = rocoto.create_dependency(dep=deps) earcenvars = self.envars.copy() earcenvars.append(rocoto.create_envar(name='ENSGRP', value='#grp#')) diff --git a/workflow/rocoto/workflow_xml.py b/workflow/rocoto/workflow_xml.py index cc2eeb0e9c0..440ff93db53 100644 --- a/workflow/rocoto/workflow_xml.py +++ b/workflow/rocoto/workflow_xml.py @@ -77,10 +77,7 @@ def _get_workflow_header(self): """ scheduler = self._app_config.scheduler - if self._app_config.do_efsoi: - cyclethrottle = self._base.get('ROCOTO_CYCLETHROTTLE', 7) - else: - cyclethrottle = self._base.get('ROCOTO_CYCLETHROTTLE', 3) + cyclethrottle = self._base.get('ROCOTO_CYCLETHROTTLE', 3) taskthrottle = self._base.get('ROCOTO_TASKTHROTTLE', 25) verbosity = self._base.get('ROCOTO_VERBOSITY', 10) From 047837c64d8b58e92e0777fb5900f8ca398491a8 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Fri, 9 Sep 2022 15:22:26 -0500 Subject: [PATCH 072/103] removed superfluous assignment --- parm/config/config.efsoi | 2 -- 1 file changed, 2 deletions(-) diff --git a/parm/config/config.efsoi b/parm/config/config.efsoi index f82802a1dc5..5961a1a42df 100755 --- a/parm/config/config.efsoi +++ b/parm/config/config.efsoi @@ -8,8 +8,6 @@ echo "BEGIN: config.efsoi" # Get task specific resources . $EXPDIR/config.resources efsoi -export npe_enkf=$npe_eupd - # LETKF specific settings with model space localization export modelspace_vloc=".true." # model space localization export letkf_flag=".true." # use LETKF instead of serial filter From 28cd405ff4e0c73bbc628f13a647383a5e9655f3 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Tue, 13 Sep 2022 15:35:22 -0500 Subject: [PATCH 073/103] removed efsoi references in hera environment because it's broken there anyway --- env/HERA.env | 74 ---------------------------------------------------- 1 file changed, 74 deletions(-) diff --git a/env/HERA.env b/env/HERA.env index 7ebed204d02..51a7c85a330 100755 --- a/env/HERA.env +++ b/env/HERA.env @@ -168,30 +168,6 @@ elif [ $step = "eupd" ]; then export USE_CFP=${USE_CFP:-"YES"} export APRUNCFP="$launcher -n \$ncmd --multi-prog" -elif [ $step = "eupdfsoi" ]; then - - nth_max=$(($npe_node_max / $npe_node_eupdfsoi)) - - export NTHREADS_ENKF=${nth_eupdfsoi:-$nth_max} - [[ $NTHREADS_ENKF -gt $nth_max ]] && export NTHREADS_ENKF=$nth_max - export APRUN_ENKF="$launcher" - - export CFP_MP=${CFP_MP:-"YES"} - export USE_CFP=${USE_CFP:-"YES"} - export APRUNCFP="$launcher -n \$ncmd --multi-prog" - -elif [ $step = "efsoi" ]; then - - nth_max=$(($npe_node_max / $npe_node_efsoi)) - - export NTHREADS_ENKF=${nth_efsoi:-$nth_max} - [[ $NTHREADS_ENKF -gt $nth_max ]] && export NTHREADS_ENKF=$nth_max - export APRUN_ENKF="$launcher" - - export CFP_MP=${CFP_MP:-"YES"} - export USE_CFP=${USE_CFP:-"YES"} - export APRUNCFP="$launcher -n \$ncmd --multi-prog" - elif [ $step = "fcst" ]; then #PEs and PEs/node can differ for GFS and GDAS forecasts if threading differs @@ -230,20 +206,6 @@ elif [ $step = "efcs" ]; then [[ $NTHREADS_REGRID_NEMSIO -gt $nth_max ]] && export NTHREADS_REGRID_NEMSIO=$nth_max export APRUN_REGRID_NEMSIO="$launcher $LEVS" -elif [ $step = "efcsfsoi" ]; then - - nth_max=$(($npe_node_max / $npe_node_efcsfsoi)) - - export NTHREADS_FV3=${nth_efcsfsoi:-$nth_max} - [[ $NTHREADS_FV3 -gt $nth_max ]] && export NTHREADS_FV3=$nth_max - export cores_per_node=$npe_node_max - export APRUN_FV3="$launcher" - - export NTHREADS_REGRID_NEMSIO=${nth_regrid_nemsio:-1} - [[ $NTHREADS_REGRID_NEMSIO -gt $nth_max ]] && export NTHREADS_REGRID_NEMSIO=$nth_max - export APRUN_REGRID_NEMSIO="$launcher $LEVS" - - elif [ $step = "post" ]; then nth_max=$(($npe_node_max / $npe_node_post)) @@ -272,22 +234,6 @@ elif [ $step = "ecen" ]; then [[ $NTHREADS_CALCINC -gt $nth_max ]] && export NTHREADS_CALCINC=$nth_max export APRUN_CALCINC="$launcher" -elif [ $step = "ecenfsoi" ]; then - - nth_max=$(($npe_node_max / $npe_node_ecenfsoi)) - - export NTHREADS_ECEN=${nth_ecenfsoi:-$nth_max} - [[ $NTHREADS_ECEN -gt $nth_max ]] && export NTHREADS_ECEN=$nth_max - export APRUN_ECEN="$launcher" - - export NTHREADS_CHGRES=${nth_chgres:-12} - [[ $NTHREADS_CHGRES -gt $npe_node_max ]] && export NTHREADS_CHGRES=$npe_node_max - export APRUN_CHGRES="time" - - export NTHREADS_CALCINC=${nth_calcinc:-1} - [[ $NTHREADS_CALCINC -gt $nth_max ]] && export NTHREADS_CALCINC=$nth_max - export APRUN_CALCINC="$launcher" - elif [ $step = "esfc" ]; then nth_max=$(($npe_node_max / $npe_node_esfc)) @@ -300,18 +246,6 @@ elif [ $step = "esfc" ]; then [[ $NTHREADS_CYCLE -gt $npe_node_max ]] && export NTHREADS_CYCLE=$npe_node_max export APRUN_CYCLE="$launcher -n $npe_esfc" -elif [ $step = "esfcfsoi" ]; then - - nth_max=$(($npe_node_max / $npe_node_esfcfsoi)) - - export NTHREADS_ESFC=${nth_esfcfsoi:-$nth_max} - [[ $NTHREADS_ESFC -gt $nth_max ]] && export NTHREADS_ESFC=$nth_max - export APRUN_ESFC="$launcher -n $npe_esfcfsoi" - - export NTHREADS_CYCLE=${nth_cycle:-14} - [[ $NTHREADS_CYCLE -gt $npe_node_max ]] && export NTHREADS_CYCLE=$npe_node_max - export APRUN_CYCLE="$launcher -n $npe_esfcfsoi" - elif [ $step = "epos" ]; then nth_max=$(($npe_node_max / $npe_node_epos)) @@ -320,14 +254,6 @@ elif [ $step = "epos" ]; then [[ $NTHREADS_EPOS -gt $nth_max ]] && export NTHREADS_EPOS=$nth_max export APRUN_EPOS="$launcher" -elif [ $step = "eposfsoi" ]; then - - nth_max=$(($npe_node_max / $npe_node_eposfsoi)) - - export NTHREADS_EPOS=${nth_epos:-$nth_max} - [[ $NTHREADS_EPOS -gt $nth_max ]] && export NTHREADS_EPOS=$nth_max - export APRUN_EPOS="$launcher" - elif [ $step = "init" ]; then export APRUN="$launcher" From f4de4cb2d662932d933ca46e50e87d1651edf47d Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Tue, 13 Sep 2022 16:03:21 -0500 Subject: [PATCH 074/103] little steps --- env/ORION.env | 1 - jobs/JGDAS_EFSOI | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/env/ORION.env b/env/ORION.env index b0546a1b54c..5e0f0c02164 100755 --- a/env/ORION.env +++ b/env/ORION.env @@ -235,7 +235,6 @@ elif [ $step = "efcsfsoi" ]; then export NTHREADS_FV3=${nth_efcsfsoi:-$nth_max} [[ $NTHREADS_FV3 -gt $nth_max ]] && export NTHREADS_FV3=$nth_max export cores_per_node=$npe_node_max - #export APRUN_FV3="$launcher" export APRUN_FV3="$launcher -n $npe_efcsfsoi" export NTHREADS_REGRID_NEMSIO=${nth_regrid_nemsio:-1} diff --git a/jobs/JGDAS_EFSOI b/jobs/JGDAS_EFSOI index 55fd09f1d94..fde6c716a9e 100755 --- a/jobs/JGDAS_EFSOI +++ b/jobs/JGDAS_EFSOI @@ -20,7 +20,7 @@ done export EFSOI_FORECAST_LENGTH=24 -xtime=$(($EFSOI_FORECAST_LENGTH+12)) +xtime=$((EFSOI_FORECAST_LENGTH+12)) if [ $CDATE -lt $($NDATE +$xtime $SDATE) ]; then echo "EFSOI needs a 30-hour EFSOI forecast to run with an analysis from ${CDATE}," echo " so needs to run $xtime hours starting from $SDATE. This efsoi cycle is skipped" From ae2fbfd11c579d09da5e71dabf4e629dcbcaab93 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Tue, 13 Sep 2022 16:26:05 -0500 Subject: [PATCH 075/103] round of linter --- env/ORION.env | 22 +++++++++++----------- jobs/JGDAS_EFSOI | 8 +++++--- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/env/ORION.env b/env/ORION.env index 5e0f0c02164..3f63fda24b2 100755 --- a/env/ORION.env +++ b/env/ORION.env @@ -298,17 +298,17 @@ elif [ $step = "esfc" ]; then [[ $NTHREADS_CYCLE -gt $npe_node_max ]] && export NTHREADS_CYCLE=$npe_node_max export APRUN_CYCLE="$launcher -n $npe_esfc" -elif [ $step = "esfcfsoi" ]; then +elif [ ${step} = "esfcfsoi" ]; then - nth_max=$(($npe_node_max / $npe_node_esfcfsoi)) + nth_max=$((npe_node_max / npe_node_esfcfsoi)) export NTHREADS_ESFC=${nth_esfcfsoi:-$nth_max} - [[ $NTHREADS_ESFC -gt $nth_max ]] && export NTHREADS_ESFC=$nth_max - export APRUN_ESFC="$launcher -n $npe_esfcfsoi" + [[ ${NTHREADS_ESFC} -gt ${nth_max} ]] && export NTHREADS_ESFC=${nth_max} + export APRUN_ESFC="${launcher} -n ${npe_esfcfsoi}" export NTHREADS_CYCLE=${nth_cycle:-14} - [[ $NTHREADS_CYCLE -gt $npe_node_max ]] && export NTHREADS_CYCLE=$npe_node_max - export APRUN_CYCLE="$launcher -n $npe_esfcfsoi" + [[ ${NTHREADS_CYCLE} -gt ${npe_node_max} ]] && export NTHREADS_CYCLE=${npe_node_max} + export APRUN_CYCLE="${launcher} -n ${npe_esfcfsoi}" elif [ $step = "epos" ]; then @@ -318,13 +318,13 @@ elif [ $step = "epos" ]; then [[ $NTHREADS_EPOS -gt $nth_max ]] && export NTHREADS_EPOS=$nth_max export APRUN_EPOS="$launcher" -elif [ $step = "eposfsoi" ]; then +elif [ ${step} = "eposfsoi" ]; then - nth_max=$(($npe_node_max / $npe_node_eposfsoi)) + nth_max=$((npe_node_max / npe_node_eposfsoi)) - export NTHREADS_EPOS=${nth_eposfsoi:-$nth_max} - [[ $NTHREADS_EPOS -gt $nth_max ]] && export NTHREADS_EPOS=$nth_max - export APRUN_EPOS="$launcher" + export NTHREADS_EPOS=${nth_eposfsoi:-${nth_max}} + [[ ${NTHREADS_EPOS} -gt ${nth_max} ]] && export NTHREADS_EPOS=${nth_max} + export APRUN_EPOS="${launcher}" elif [ $step = "init" ]; then diff --git a/jobs/JGDAS_EFSOI b/jobs/JGDAS_EFSOI index fde6c716a9e..5e74a52332c 100755 --- a/jobs/JGDAS_EFSOI +++ b/jobs/JGDAS_EFSOI @@ -21,7 +21,7 @@ done export EFSOI_FORECAST_LENGTH=24 xtime=$((EFSOI_FORECAST_LENGTH+12)) -if [ $CDATE -lt $($NDATE +$xtime $SDATE) ]; then +if [ $CDATE -lt "$($NDATE +$xtime $SDATE)" ]; then echo "EFSOI needs a 30-hour EFSOI forecast to run with an analysis from ${CDATE}," echo " so needs to run $xtime hours starting from $SDATE. This efsoi cycle is skipped" exit 0 @@ -78,13 +78,15 @@ fi # Begin JOB SPECIFIC work ############################################## -export EFSOIDATE=$($NDATE -24 $CDATE) +EFSOIDATE=$($NDATE -24 $CDATE) +export EFSOIDATE efsoiPDY=$(echo $EFSOIDATE | cut -c1-8) efsoicyc=$(echo $EFSOIDATE | cut -c9-10) GDATE=$($NDATE -$assim_freq $EFSOIDATE) gPDY=$(echo $GDATE | cut -c1-8) -export gcyc=$(echo $GDATE | cut -c9-10) # needed in namelist +gcyc=$(echo $GDATE | cut -c9-10) # needed in namelist +export gcyc VDATE=${CDATE} vPDY=$(echo $VDATE | cut -c1-8) From 223948e785c62397a7b503a189be397b5ae2b972 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Wed, 14 Sep 2022 09:12:50 -0500 Subject: [PATCH 076/103] round of linter --- env/ORION.env | 12 ++++++------ jobs/JGDAS_EFSOI | 10 +++++----- jobs/JGDAS_EFSOI_SFC | 8 ++++---- jobs/rocoto/earc.sh | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/env/ORION.env b/env/ORION.env index 3f63fda24b2..5e2a54c0c1e 100755 --- a/env/ORION.env +++ b/env/ORION.env @@ -172,7 +172,7 @@ elif [ $step = "eupdfsoi" ]; then export USE_CFP=${USE_CFP:-"YES"} export APRUNCFP="$launcher -n \$ncmd --multi-prog" - nth_max=$(($npe_node_max / $npe_node_eupdfsoi)) + nth_max=$((npe_node_max / npe_node_eupdfsoi)) export NTHREADS_ENKF=${nth_eupdfsoi:-$nth_max} [[ $NTHREADS_ENKF -gt $nth_max ]] && export NTHREADS_ENKF=$nth_max @@ -184,7 +184,7 @@ elif [ $step = "efsoi" ]; then export USE_CFP=${USE_CFP:-"YES"} export APRUNCFP="$launcher -n \$ncmd --multi-prog" - nth_max=$(($npe_node_max / $npe_node_efsoi)) + nth_max=$((npe_node_max / npe_node_efsoi)) export NTHREADS_ENKF=${nth_efsoi:-$nth_max} [[ $NTHREADS_ENKF -gt $nth_max ]] && export NTHREADS_ENKF=$nth_max @@ -230,12 +230,12 @@ elif [ $step = "efcs" ]; then elif [ $step = "efcsfsoi" ]; then - nth_max=$(($npe_node_max / $npe_node_efcsfsoi)) + nth_max=$((npe_node_max / npe_node_efcsfsoi)) export NTHREADS_FV3=${nth_efcsfsoi:-$nth_max} [[ $NTHREADS_FV3 -gt $nth_max ]] && export NTHREADS_FV3=$nth_max export cores_per_node=$npe_node_max - export APRUN_FV3="$launcher -n $npe_efcsfsoi" + export APRUN_FV3="$launcher -n npe_efcsfsoi" export NTHREADS_REGRID_NEMSIO=${nth_regrid_nemsio:-1} [[ $NTHREADS_REGRID_NEMSIO -gt $nth_max ]] && export NTHREADS_REGRID_NEMSIO=$nth_max @@ -272,7 +272,7 @@ elif [ $step = "ecen" ]; then elif [ $step = "ecenfsoi" ]; then - nth_max=$(($npe_node_max / $npe_node_ecenfsoi)) + nth_max=$((npe_node_max / npe_node_ecenfsoi)) export NTHREADS_ECEN=${nth_ecenfsoi:-$nth_max} [[ $NTHREADS_ECEN -gt $nth_max ]] && export NTHREADS_ECEN=$nth_max @@ -302,7 +302,7 @@ elif [ ${step} = "esfcfsoi" ]; then nth_max=$((npe_node_max / npe_node_esfcfsoi)) - export NTHREADS_ESFC=${nth_esfcfsoi:-$nth_max} + export NTHREADS_ESFC=${nth_esfcfsoi:-${nth_max}} [[ ${NTHREADS_ESFC} -gt ${nth_max} ]] && export NTHREADS_ESFC=${nth_max} export APRUN_ESFC="${launcher} -n ${npe_esfcfsoi}" diff --git a/jobs/JGDAS_EFSOI b/jobs/JGDAS_EFSOI index 5e74a52332c..906ee6f2eca 100755 --- a/jobs/JGDAS_EFSOI +++ b/jobs/JGDAS_EFSOI @@ -105,7 +105,7 @@ export COMIN_GES_ENS="$ROTDIR/efsoigdas.$gPDY/$gcyc/$COMPONENT" export COMIN_ANL="$ROTDIR/$CDUMP.$vPDY/$vcyc/$COMPONENT" export COMOUT_ANL_ENSFSOI="$ROTDIR/efsoi$CDUMP.$efsoiPDY/$efsoicyc/$COMPONENT" export OSENSE_SAVE_DIR="$ROTDIR/osense" -mkdir -p $OSENSE_SAVE_DIR +mkdir -p "$OSENSE_SAVE_DIR" # ======================================================== ############################################################### @@ -113,7 +113,7 @@ mkdir -p $OSENSE_SAVE_DIR ${EFSOIUPDSH:-$SCRgfs/exgdas_efsoi.sh} status=$? -[[ $status -ne 0 ]] && exit $status +[[ "$status" -ne 0 ]] && exit "$status" ############################################## # End JOB SPECIFIC work @@ -123,15 +123,15 @@ status=$? # Final processing ############################################## if [ -e "$pgmout" ] ; then - cat $pgmout + cat "$pgmout" fi ########################################## # Remove the Temporary working directory ########################################## -cd $DATAROOT +cd "${DATAROOT}" -[[ $KEEPDATA = "NO" ]] && rm -rf $DATA +[[ "${KEEPDATA}" = "NO" ]] && rm -rf ${DATA} exit 0 diff --git a/jobs/JGDAS_EFSOI_SFC b/jobs/JGDAS_EFSOI_SFC index c3393449eac..83088fbc9ae 100755 --- a/jobs/JGDAS_EFSOI_SFC +++ b/jobs/JGDAS_EFSOI_SFC @@ -125,15 +125,15 @@ status=$? ############################################## # Final processing ############################################## -if [ -e "$pgmout" ] ; then - cat $pgmout +if [ -e "${pgmout}" ] ; then + cat "${pgmout}" fi ########################################## # Remove the Temporary working directory ########################################## -cd $DATAROOT -[[ $KEEPDATA = "NO" ]] && rm -rf $DATA +cd ${DATAROOT} +[[ ${KEEPDATA} = "NO" ]] && rm -rf ${DATA} exit 0 diff --git a/jobs/rocoto/earc.sh b/jobs/rocoto/earc.sh index 03e7f953946..cde6ab01812 100755 --- a/jobs/rocoto/earc.sh +++ b/jobs/rocoto/earc.sh @@ -133,7 +133,7 @@ if [[ $ENSGRP -gt 0 ]] && [[ $HPSSARCH = "YES" || $LOCALARCH = "YES" ]]; then status=$? if [ $status -ne 0 -a $CDATE -ge $firstday ]; then echo "HTAR $CDATE efsoi${CDUMP}_grp${ENSGRP}.tar failed" - exit $status + exit "${status}" fi if [ $SAVEWARMICA = "YES" -a $cyc -eq $EARCINC_CYC ]; then From f6c52ed8082ac16ddba8ae938ca34aa4833b191c Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Wed, 14 Sep 2022 09:36:48 -0500 Subject: [PATCH 077/103] linter corrections --- env/ORION.env | 46 ++++++++++++++++++++++----------------------- jobs/rocoto/earc.sh | 10 +++++----- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/env/ORION.env b/env/ORION.env index 5e2a54c0c1e..f8c8ea3db57 100755 --- a/env/ORION.env +++ b/env/ORION.env @@ -51,7 +51,7 @@ elif [ $step = "waveinit" -o $step = "waveprep" -o $step = "wavepostsbs" -o $ste export wavempexec=${launcher} export wave_mpmd=${mpmd} -elif [ $step = "atmanalrun" ]; then +elif [ "${step}" = "atmanalrun" ]; then export CFP_MP=${CFP_MP:-"YES"} export USE_CFP=${USE_CFP:-"YES"} @@ -63,7 +63,7 @@ elif [ $step = "atmanalrun" ]; then [[ $NTHREADS_ATMANAL -gt $nth_max ]] && export NTHREADS_ATMANAL=$nth_max export APRUN_ATMANAL="$launcher -n $npe_atmanalrun" -elif [ $step = "atmensanalrun" ]; then +elif [ "${step}" = "atmensanalrun" ]; then export CFP_MP=${CFP_MP:-"YES"} export USE_CFP=${USE_CFP:-"YES"} @@ -75,7 +75,7 @@ elif [ $step = "atmensanalrun" ]; then [[ $NTHREADS_ATMENSANAL -gt $nth_max ]] && export NTHREADS_ATMENSANAL=$nth_max export APRUN_ATMENSANAL="$launcher -n $npe_atmensanalrun" -elif [ $step = "aeroanlrun" ]; then +elif [ "${step}" = "aeroanlrun" ]; then export APRUNCFP="$launcher -n \$ncmd --multi-prog" @@ -85,7 +85,7 @@ elif [ $step = "aeroanlrun" ]; then [[ $NTHREADS_AEROANL -gt $nth_max ]] && export NTHREADS_AEROANL=$nth_max export APRUN_AEROANL="$launcher -n $npe_aeroanlrun" -elif [ $step = "anal" ]; then +elif [ "${step}" = "anal" ]; then export MKL_NUM_THREADS=4 export MKL_CBWR=AUTO @@ -113,7 +113,7 @@ elif [ $step = "anal" ]; then npe_gausfcanl=${npe_gausfcanl:-1} export APRUN_GAUSFCANL="$launcher -n $npe_gausfcanl" -elif [ $step = "sfcanl" ]; then +elif [ "${step}" = "sfcanl" ]; then nth_max=$(($npe_node_max / $npe_node_sfcanl)) export NTHREADS_CYCLE=${nth_sfcanl:-14} @@ -121,7 +121,7 @@ elif [ $step = "sfcanl" ]; then npe_sfcanl=${ntiles:-6} export APRUN_CYCLE="$launcher -n $npe_sfcanl" -elif [ $step = "gldas" ]; then +elif [ "${step}" = "gldas" ]; then nth_max=$(($npe_node_max / $npe_node_gldas)) @@ -139,7 +139,7 @@ elif [ $step = "gldas" ]; then npe_gldas_data_proc=$(($gldas_spinup_hours + 12)) export APRUN_GLDAS_DATA_PROC="$launcher -n $npe_gldas_data_proc --multi-prog" -elif [ $step = "eobs" ]; then +elif [ "${step}" = "eobs" ]; then export MKL_NUM_THREADS=4 export MKL_CBWR=AUTO @@ -154,7 +154,7 @@ elif [ $step = "eobs" ]; then [[ $NTHREADS_GSI -gt $nth_max ]] && export NTHREADS_GSI=$nth_max export APRUN_GSI="$launcher" -elif [ $step = "eupd" ]; then +elif [ "${step}" = "eupd" ]; then export CFP_MP=${CFP_MP:-"YES"} export USE_CFP=${USE_CFP:-"YES"} @@ -166,7 +166,7 @@ elif [ $step = "eupd" ]; then [[ $NTHREADS_ENKF -gt $nth_max ]] && export NTHREADS_ENKF=$nth_max export APRUN_ENKF="$launcher" -elif [ $step = "eupdfsoi" ]; then +elif [ "${step}" = "eupdfsoi" ]; then export CFP_MP=${CFP_MP:-"YES"} export USE_CFP=${USE_CFP:-"YES"} @@ -178,7 +178,7 @@ elif [ $step = "eupdfsoi" ]; then [[ $NTHREADS_ENKF -gt $nth_max ]] && export NTHREADS_ENKF=$nth_max export APRUN_ENKF="$launcher" -elif [ $step = "efsoi" ]; then +elif [ "${step}" = "efsoi" ]; then export CFP_MP=${CFP_MP:-"YES"} export USE_CFP=${USE_CFP:-"YES"} @@ -190,7 +190,7 @@ elif [ $step = "efsoi" ]; then [[ $NTHREADS_ENKF -gt $nth_max ]] && export NTHREADS_ENKF=$nth_max export APRUN_ENKF="$launcher" -elif [ $step = "fcst" ]; then +elif [ "${step}" = "fcst" ]; then #PEs and PEs/node can differ for GFS and GDAS forecasts if threading differs if [[ $CDUMP == "gfs" ]]; then @@ -215,7 +215,7 @@ elif [ $step = "fcst" ]; then export APRUN_REMAP="$launcher" export I_MPI_DAPL_UD="enable" -elif [ $step = "efcs" ]; then +elif [ "${step}" = "efcs" ]; then nth_max=$(($npe_node_max / $npe_node_efcs)) @@ -228,7 +228,7 @@ elif [ $step = "efcs" ]; then [[ $NTHREADS_REGRID_NEMSIO -gt $nth_max ]] && export NTHREADS_REGRID_NEMSIO=$nth_max export APRUN_REGRID_NEMSIO="$launcher $LEVS" -elif [ $step = "efcsfsoi" ]; then +elif [ "${step}" = "efcsfsoi" ]; then nth_max=$((npe_node_max / npe_node_efcsfsoi)) @@ -242,7 +242,7 @@ elif [ $step = "efcsfsoi" ]; then export APRUN_REGRID_NEMSIO="$launcher $LEVS" -elif [ $step = "post" ]; then +elif [ "${step}" = "post" ]; then nth_max=$(($npe_node_max / $npe_node_post)) @@ -254,7 +254,7 @@ elif [ $step = "post" ]; then [[ $NTHREADS_DWN -gt $nth_max ]] && export NTHREADS_DWN=$nth_max export APRUN_DWN="$launcher" -elif [ $step = "ecen" ]; then +elif [ "${step}" = "ecen" ]; then nth_max=$(($npe_node_max / $npe_node_ecen)) @@ -270,7 +270,7 @@ elif [ $step = "ecen" ]; then [[ $NTHREADS_CALCINC -gt $nth_max ]] && export NTHREADS_CALCINC=$nth_max export APRUN_CALCINC="$launcher" -elif [ $step = "ecenfsoi" ]; then +elif [ "${step}" = "ecenfsoi" ]; then nth_max=$((npe_node_max / npe_node_ecenfsoi)) @@ -286,7 +286,7 @@ elif [ $step = "ecenfsoi" ]; then [[ $NTHREADS_CALCINC -gt $nth_max ]] && export NTHREADS_CALCINC=$nth_max export APRUN_CALCINC="$launcher" -elif [ $step = "esfc" ]; then +elif [ "${step}" = "esfc" ]; then nth_max=$(($npe_node_max / $npe_node_esfc)) @@ -310,7 +310,7 @@ elif [ ${step} = "esfcfsoi" ]; then [[ ${NTHREADS_CYCLE} -gt ${npe_node_max} ]] && export NTHREADS_CYCLE=${npe_node_max} export APRUN_CYCLE="${launcher} -n ${npe_esfcfsoi}" -elif [ $step = "epos" ]; then +elif [ "${step}" = "epos" ]; then nth_max=$(($npe_node_max / $npe_node_epos)) @@ -318,7 +318,7 @@ elif [ $step = "epos" ]; then [[ $NTHREADS_EPOS -gt $nth_max ]] && export NTHREADS_EPOS=$nth_max export APRUN_EPOS="$launcher" -elif [ ${step} = "eposfsoi" ]; then +elif [ "${step}" = "eposfsoi" ]; then nth_max=$((npe_node_max / npe_node_eposfsoi)) @@ -326,11 +326,11 @@ elif [ ${step} = "eposfsoi" ]; then [[ ${NTHREADS_EPOS} -gt ${nth_max} ]] && export NTHREADS_EPOS=${nth_max} export APRUN_EPOS="${launcher}" -elif [ $step = "init" ]; then +elif [ "${step}" = "init" ]; then export APRUN="$launcher" -elif [ $step = "postsnd" ]; then +elif [ "${step}" = "postsnd" ]; then nth_max=$(($npe_node_max / $npe_node_postsnd)) @@ -342,7 +342,7 @@ elif [ $step = "postsnd" ]; then [[ $NTHREADS_POSTSNDCFP -gt $nth_max ]] && export NTHREADS_POSTSNDCFP=$nth_max export APRUN_POSTSNDCFP="$launcher" -elif [ $step = "awips" ]; then +elif [ "${step}" = "awips" ]; then nth_max=$(($npe_node_max / $npe_node_awips)) @@ -350,7 +350,7 @@ elif [ $step = "awips" ]; then [[ $NTHREADS_AWIPS -gt $nth_max ]] && export NTHREADS_AWIPS=$nth_max export APRUN_AWIPSCFP="$launcher -n $npe_awips --multi-prog" -elif [ $step = "gempak" ]; then +elif [ "${step}" = "gempak" ]; then nth_max=$(($npe_node_max / $npe_node_gempak)) diff --git a/jobs/rocoto/earc.sh b/jobs/rocoto/earc.sh index cde6ab01812..372c691b6e7 100755 --- a/jobs/rocoto/earc.sh +++ b/jobs/rocoto/earc.sh @@ -136,21 +136,21 @@ if [[ $ENSGRP -gt 0 ]] && [[ $HPSSARCH = "YES" || $LOCALARCH = "YES" ]]; then exit "${status}" fi - if [ $SAVEWARMICA = "YES" -a $cyc -eq $EARCINC_CYC ]; then + if [ [ $SAVEWARMICA = "YES" ] && [ $cyc -eq $EARCINC_CYC ] ]; then $TARCMD -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}_restarta_grp${ENSGRP}.tar $(cat $ARCH_LIST/efsoi${CDUMP}_restarta_grp${n}.txt) status=$? if [ $status -ne 0 ]; then echo "HTAR $CDATE efsoi${CDUMP}_restarta_grp${ENSGRP}.tar failed" - exit $status + exit "${status}" fi fi - if [ $SAVEWARMICB = "YES" -a $cyc -eq $EARCICS_CYC ]; then + if [ [ $SAVEWARMICB = "YES" ] && [ $cyc -eq $EARCICS_CYC ] ]; then $TARCMD -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}_restartb_grp${ENSGRP}.tar $(cat $ARCH_LIST/efsoi${CDUMP}_restartb_grp${n}.txt) status=$? - if [ $status -ne 0 ]; then + if [ "${status}" -ne 0 ]; then echo "HTAR $CDATE efsoi${CDUMP}_restartb_grp${ENSGRP}.tar failed" - exit $status + exit "${status}" fi fi From dc1627fbc94ef2b5df1e70208cf1b2ee62d91128 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Wed, 14 Sep 2022 09:59:40 -0500 Subject: [PATCH 078/103] linter corrections --- env/ORION.env | 64 ++++++++++++++++++++--------------------- jobs/rocoto/ecenfsoi.sh | 20 ++++++------- jobs/rocoto/efcsfsoi.sh | 10 +++---- jobs/rocoto/efsoi.sh | 10 +++---- jobs/rocoto/eposfsoi.sh | 20 ++++++------- jobs/rocoto/esfcfsoi.sh | 10 +++---- 6 files changed, 67 insertions(+), 67 deletions(-) diff --git a/env/ORION.env b/env/ORION.env index f8c8ea3db57..80f03b309f3 100755 --- a/env/ORION.env +++ b/env/ORION.env @@ -60,7 +60,7 @@ elif [ "${step}" = "atmanalrun" ]; then nth_max=$(($npe_node_max / $npe_node_atmanalrun)) export NTHREADS_ATMANAL=${nth_atmanalrun:-$nth_max} - [[ $NTHREADS_ATMANAL -gt $nth_max ]] && export NTHREADS_ATMANAL=$nth_max + [[ $NTHREADS_ATMANAL -gt ${nth_max} ]] && export NTHREADS_ATMANAL=${nth_max} export APRUN_ATMANAL="$launcher -n $npe_atmanalrun" elif [ "${step}" = "atmensanalrun" ]; then @@ -72,7 +72,7 @@ elif [ "${step}" = "atmensanalrun" ]; then nth_max=$(($npe_node_max / $npe_node_atmensanalrun)) export NTHREADS_ATMENSANAL=${nth_atmensanalrun:-$nth_max} - [[ $NTHREADS_ATMENSANAL -gt $nth_max ]] && export NTHREADS_ATMENSANAL=$nth_max + [[ $NTHREADS_ATMENSANAL -gt ${nth_max} ]] && export NTHREADS_ATMENSANAL=${nth_max} export APRUN_ATMENSANAL="$launcher -n $npe_atmensanalrun" elif [ "${step}" = "aeroanlrun" ]; then @@ -82,7 +82,7 @@ elif [ "${step}" = "aeroanlrun" ]; then nth_max=$(($npe_node_max / $npe_node_aeroanlrun)) export NTHREADS_AEROANL=${nth_aeroanlrun:-$nth_max} - [[ $NTHREADS_AEROANL -gt $nth_max ]] && export NTHREADS_AEROANL=$nth_max + [[ $NTHREADS_AEROANL -gt ${nth_max} ]] && export NTHREADS_AEROANL=${nth_max} export APRUN_AEROANL="$launcher -n $npe_aeroanlrun" elif [ "${step}" = "anal" ]; then @@ -97,11 +97,11 @@ elif [ "${step}" = "anal" ]; then nth_max=$(($npe_node_max / $npe_node_anal)) export NTHREADS_GSI=${nth_anal:-$nth_max} - [[ $NTHREADS_GSI -gt $nth_max ]] && export NTHREADS_GSI=$nth_max + [[ $NTHREADS_GSI -gt ${nth_max} ]] && export NTHREADS_GSI=${nth_max} export APRUN_GSI="$launcher" export NTHREADS_CALCINC=${nth_calcinc:-1} - [[ $NTHREADS_CALCINC -gt $nth_max ]] && export NTHREADS_CALCINC=$nth_max + [[ $NTHREADS_CALCINC -gt ${nth_max} ]] && export NTHREADS_CALCINC=${nth_max} export APRUN_CALCINC="$launcher" export NTHREADS_CYCLE=${nth_cycle:-12} @@ -126,11 +126,11 @@ elif [ "${step}" = "gldas" ]; then nth_max=$(($npe_node_max / $npe_node_gldas)) export NTHREADS_GLDAS=${nth_gldas:-$nth_max} - [[ $NTHREADS_GLDAS -gt $nth_max ]] && export NTHREADS_GLDAS=$nth_max + [[ $NTHREADS_GLDAS -gt ${nth_max} ]] && export NTHREADS_GLDAS=${nth_max} export APRUN_GLDAS="$launcher -n $npe_gldas" export NTHREADS_GAUSSIAN=${nth_gaussian:-1} - [[ $NTHREADS_GAUSSIAN -gt $nth_max ]] && export NTHREADS_GAUSSIAN=$nth_max + [[ $NTHREADS_GAUSSIAN -gt ${nth_max} ]] && export NTHREADS_GAUSSIAN=${nth_max} export APRUN_GAUSSIAN="$launcher -n $npe_gaussian" # Must run data processing with exactly the number of tasks as time @@ -151,7 +151,7 @@ elif [ "${step}" = "eobs" ]; then nth_max=$(($npe_node_max / $npe_node_eobs)) export NTHREADS_GSI=${nth_eobs:-$nth_max} - [[ $NTHREADS_GSI -gt $nth_max ]] && export NTHREADS_GSI=$nth_max + [[ $NTHREADS_GSI -gt ${nth_max} ]] && export NTHREADS_GSI=${nth_max} export APRUN_GSI="$launcher" elif [ "${step}" = "eupd" ]; then @@ -163,7 +163,7 @@ elif [ "${step}" = "eupd" ]; then nth_max=$(($npe_node_max / $npe_node_eupd)) export NTHREADS_ENKF=${nth_eupd:-$nth_max} - [[ $NTHREADS_ENKF -gt $nth_max ]] && export NTHREADS_ENKF=$nth_max + [[ $NTHREADS_ENKF -gt ${nth_max} ]] && export NTHREADS_ENKF=${nth_max} export APRUN_ENKF="$launcher" elif [ "${step}" = "eupdfsoi" ]; then @@ -175,7 +175,7 @@ elif [ "${step}" = "eupdfsoi" ]; then nth_max=$((npe_node_max / npe_node_eupdfsoi)) export NTHREADS_ENKF=${nth_eupdfsoi:-$nth_max} - [[ $NTHREADS_ENKF -gt $nth_max ]] && export NTHREADS_ENKF=$nth_max + [[ $NTHREADS_ENKF -gt ${nth_max} ]] && export NTHREADS_ENKF=${nth_max} export APRUN_ENKF="$launcher" elif [ "${step}" = "efsoi" ]; then @@ -187,7 +187,7 @@ elif [ "${step}" = "efsoi" ]; then nth_max=$((npe_node_max / npe_node_efsoi)) export NTHREADS_ENKF=${nth_efsoi:-$nth_max} - [[ $NTHREADS_ENKF -gt $nth_max ]] && export NTHREADS_ENKF=$nth_max + [[ $NTHREADS_ENKF -gt ${nth_max} ]] && export NTHREADS_ENKF=${nth_max} export APRUN_ENKF="$launcher" elif [ "${step}" = "fcst" ]; then @@ -202,16 +202,16 @@ elif [ "${step}" = "fcst" ]; then nth_max=$(($npe_node_max / $npe_node_fcst)) export NTHREADS_FV3=${nth_fv3:-$nth_max} - [[ $NTHREADS_FV3 -gt $nth_max ]] && export NTHREADS_FV3=$nth_max + [[ $NTHREADS_FV3 -gt ${nth_max} ]] && export NTHREADS_FV3=${nth_max} export cores_per_node=$npe_node_max export APRUN_FV3="$launcher -n $npe_fcst" export NTHREADS_REGRID_NEMSIO=${nth_regrid_nemsio:-1} - [[ $NTHREADS_REGRID_NEMSIO -gt $nth_max ]] && export NTHREADS_REGRID_NEMSIO=$nth_max + [[ $NTHREADS_REGRID_NEMSIO -gt ${nth_max} ]] && export NTHREADS_REGRID_NEMSIO=${nth_max} export APRUN_REGRID_NEMSIO="$launcher" export NTHREADS_REMAP=${nth_remap:-2} - [[ $NTHREADS_REMAP -gt $nth_max ]] && export NTHREADS_REMAP=$nth_max + [[ $NTHREADS_REMAP -gt ${nth_max} ]] && export NTHREADS_REMAP=${nth_max} export APRUN_REMAP="$launcher" export I_MPI_DAPL_UD="enable" @@ -219,13 +219,13 @@ elif [ "${step}" = "efcs" ]; then nth_max=$(($npe_node_max / $npe_node_efcs)) - export NTHREADS_FV3=${nth_efcs:-$nth_max} - [[ $NTHREADS_FV3 -gt $nth_max ]] && export NTHREADS_FV3=$nth_max + export NTHREADS_FV3=${nth_efcs:-${nth_max}} + [[ $NTHREADS_FV3 -gt ${nth_max} ]] && export NTHREADS_FV3=${nth_max} export cores_per_node=$npe_node_max export APRUN_FV3="$launcher -n $npe_efcs" export NTHREADS_REGRID_NEMSIO=${nth_regrid_nemsio:-1} - [[ $NTHREADS_REGRID_NEMSIO -gt $nth_max ]] && export NTHREADS_REGRID_NEMSIO=$nth_max + [[ $NTHREADS_REGRID_NEMSIO -gt ${nth_max} ]] && export NTHREADS_REGRID_NEMSIO=${nth_max} export APRUN_REGRID_NEMSIO="$launcher $LEVS" elif [ "${step}" = "efcsfsoi" ]; then @@ -233,12 +233,12 @@ elif [ "${step}" = "efcsfsoi" ]; then nth_max=$((npe_node_max / npe_node_efcsfsoi)) export NTHREADS_FV3=${nth_efcsfsoi:-$nth_max} - [[ $NTHREADS_FV3 -gt $nth_max ]] && export NTHREADS_FV3=$nth_max + [[ $NTHREADS_FV3 -gt ${nth_max} ]] && export NTHREADS_FV3=${nth_max} export cores_per_node=$npe_node_max export APRUN_FV3="$launcher -n npe_efcsfsoi" export NTHREADS_REGRID_NEMSIO=${nth_regrid_nemsio:-1} - [[ $NTHREADS_REGRID_NEMSIO -gt $nth_max ]] && export NTHREADS_REGRID_NEMSIO=$nth_max + [[ $NTHREADS_REGRID_NEMSIO -gt ${nth_max} ]] && export NTHREADS_REGRID_NEMSIO=${nth_max} export APRUN_REGRID_NEMSIO="$launcher $LEVS" @@ -247,11 +247,11 @@ elif [ "${step}" = "post" ]; then nth_max=$(($npe_node_max / $npe_node_post)) export NTHREADS_NP=${nth_np:-1} - [[ $NTHREADS_NP -gt $nth_max ]] && export NTHREADS_NP=$nth_max + [[ $NTHREADS_NP -gt ${nth_max} ]] && export NTHREADS_NP=${nth_max} export APRUN_NP="$launcher" export NTHREADS_DWN=${nth_dwn:-1} - [[ $NTHREADS_DWN -gt $nth_max ]] && export NTHREADS_DWN=$nth_max + [[ $NTHREADS_DWN -gt ${nth_max} ]] && export NTHREADS_DWN=${nth_max} export APRUN_DWN="$launcher" elif [ "${step}" = "ecen" ]; then @@ -259,7 +259,7 @@ elif [ "${step}" = "ecen" ]; then nth_max=$(($npe_node_max / $npe_node_ecen)) export NTHREADS_ECEN=${nth_ecen:-$nth_max} - [[ $NTHREADS_ECEN -gt $nth_max ]] && export NTHREADS_ECEN=$nth_max + [[ $NTHREADS_ECEN -gt ${nth_max} ]] && export NTHREADS_ECEN=${nth_max} export APRUN_ECEN="$launcher" export NTHREADS_CHGRES=${nth_chgres:-12} @@ -267,7 +267,7 @@ elif [ "${step}" = "ecen" ]; then export APRUN_CHGRES="time" export NTHREADS_CALCINC=${nth_calcinc:-1} - [[ $NTHREADS_CALCINC -gt $nth_max ]] && export NTHREADS_CALCINC=$nth_max + [[ $NTHREADS_CALCINC -gt ${nth_max} ]] && export NTHREADS_CALCINC=${nth_max} export APRUN_CALCINC="$launcher" elif [ "${step}" = "ecenfsoi" ]; then @@ -275,7 +275,7 @@ elif [ "${step}" = "ecenfsoi" ]; then nth_max=$((npe_node_max / npe_node_ecenfsoi)) export NTHREADS_ECEN=${nth_ecenfsoi:-$nth_max} - [[ $NTHREADS_ECEN -gt $nth_max ]] && export NTHREADS_ECEN=$nth_max + [[ $NTHREADS_ECEN -gt ${nth_max} ]] && export NTHREADS_ECEN=${nth_max} export APRUN_ECEN="$launcher" export NTHREADS_CHGRES=${nth_chgres:-12} @@ -283,7 +283,7 @@ elif [ "${step}" = "ecenfsoi" ]; then export APRUN_CHGRES="time" export NTHREADS_CALCINC=${nth_calcinc:-1} - [[ $NTHREADS_CALCINC -gt $nth_max ]] && export NTHREADS_CALCINC=$nth_max + [[ $NTHREADS_CALCINC -gt ${nth_max} ]] && export NTHREADS_CALCINC=${nth_max} export APRUN_CALCINC="$launcher" elif [ "${step}" = "esfc" ]; then @@ -291,7 +291,7 @@ elif [ "${step}" = "esfc" ]; then nth_max=$(($npe_node_max / $npe_node_esfc)) export NTHREADS_ESFC=${nth_esfc:-$nth_max} - [[ $NTHREADS_ESFC -gt $nth_max ]] && export NTHREADS_ESFC=$nth_max + [[ $NTHREADS_ESFC -gt ${nth_max} ]] && export NTHREADS_ESFC=${nth_max} export APRUN_ESFC="$launcher -n $npe_esfc" export NTHREADS_CYCLE=${nth_cycle:-14} @@ -314,8 +314,8 @@ elif [ "${step}" = "epos" ]; then nth_max=$(($npe_node_max / $npe_node_epos)) - export NTHREADS_EPOS=${nth_epos:-$nth_max} - [[ $NTHREADS_EPOS -gt $nth_max ]] && export NTHREADS_EPOS=$nth_max + export NTHREADS_EPOS=${nth_epos:-${nth_max}} + [[ $NTHREADS_EPOS -gt ${nth_max} ]] && export NTHREADS_EPOS=${nth_max} export APRUN_EPOS="$launcher" elif [ "${step}" = "eposfsoi" ]; then @@ -335,11 +335,11 @@ elif [ "${step}" = "postsnd" ]; then nth_max=$(($npe_node_max / $npe_node_postsnd)) export NTHREADS_POSTSND=${nth_postsnd:-1} - [[ $NTHREADS_POSTSND -gt $nth_max ]] && export NTHREADS_POSTSND=$nth_max + [[ $NTHREADS_POSTSND -gt ${nth_max} ]] && export NTHREADS_POSTSND=${nth_max} export APRUN_POSTSND="$launcher" export NTHREADS_POSTSNDCFP=${nth_postsndcfp:-1} - [[ $NTHREADS_POSTSNDCFP -gt $nth_max ]] && export NTHREADS_POSTSNDCFP=$nth_max + [[ ${NTHREADS_POSTSNDCFP} -gt ${nth_max} ]] && export NTHREADS_POSTSNDCFP=${nth_max} export APRUN_POSTSNDCFP="$launcher" elif [ "${step}" = "awips" ]; then @@ -347,7 +347,7 @@ elif [ "${step}" = "awips" ]; then nth_max=$(($npe_node_max / $npe_node_awips)) export NTHREADS_AWIPS=${nth_awips:-2} - [[ $NTHREADS_AWIPS -gt $nth_max ]] && export NTHREADS_AWIPS=$nth_max + [[ $NTHREADS_AWIPS -gt ${nth_max} ]] && export NTHREADS_AWIPS=${nth_max} export APRUN_AWIPSCFP="$launcher -n $npe_awips --multi-prog" elif [ "${step}" = "gempak" ]; then @@ -355,6 +355,6 @@ elif [ "${step}" = "gempak" ]; then nth_max=$(($npe_node_max / $npe_node_gempak)) export NTHREADS_GEMPAK=${nth_gempak:-1} - [[ $NTHREADS_GEMPAK -gt $nth_max ]] && export NTHREADS_GEMPAK=$nth_max + [[ $NTHREADS_GEMPAK -gt ${nth_max} ]] && export NTHREADS_GEMPAK=${nth_max} export APRUN="$launcher -n $npe_gempak --multi-prog" fi diff --git a/jobs/rocoto/ecenfsoi.sh b/jobs/rocoto/ecenfsoi.sh index 863cd8218cb..6ff354fa59c 100755 --- a/jobs/rocoto/ecenfsoi.sh +++ b/jobs/rocoto/ecenfsoi.sh @@ -1,26 +1,26 @@ #! /usr/bin/env bash -source "$HOMEgfs/ush/preamble.sh" +source "${HOMEgfs}/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh +. "${HOMEgfs}/ush/load_fv3gfs_modules.sh" status=$? -[[ $status -ne 0 ]] && exit $status +[[ "${status}" -ne 0 ]] && exit "${status}" ############################################################### # Loop over groups to Execute the JJOB -fhrlst=$(echo $FHRLST | sed -e 's/_/ /g; s/f/ /g; s/,/ /g') -for fhr in $fhrlst; do +fhrlst=$(echo ${FHRLST} | sed -e 's/_/ /g; s/f/ /g; s/,/ /g') +for fhr in ${fhrlst}; do - export FHMIN_ECEN=$fhr - export FHMAX_ECEN=$fhr - export FHOUT_ECEN=$fhr + export FHMIN_ECEN=${fhr} + export FHMAX_ECEN=${fhr} + export FHOUT_ECEN=${fhr} export job=ecen${fhr} - $HOMEgfs/jobs/JGDAS_EFSOI_ECEN + "${HOMEgfs}/jobs/JGDAS_EFSOI_ECEN" status=$? - [[ $status -ne 0 ]] && exit $status + [[ ${status} -ne 0 ]] && exit ${status} done diff --git a/jobs/rocoto/efcsfsoi.sh b/jobs/rocoto/efcsfsoi.sh index 6044a8460cc..8b53e5df828 100755 --- a/jobs/rocoto/efcsfsoi.sh +++ b/jobs/rocoto/efcsfsoi.sh @@ -1,16 +1,16 @@ #! /usr/bin/env bash -source "$HOMEgfs/ush/preamble.sh" +source "${HOMEgfs}/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh +. "${HOMEgfs}/ush/load_fv3gfs_modules.sh" status=$? -[[ $status -ne 0 ]] && exit $status +[[ ${status} -ne 0 ]] && exit ${status} ############################################################### # Execute the JJOB -$HOMEgfs/jobs/JGDAS_EFSOI_FCST +"${HOMEgfs}/jobs/JGDAS_EFSOI_FCST" status=$? -exit $status +exit ${status} diff --git a/jobs/rocoto/efsoi.sh b/jobs/rocoto/efsoi.sh index 036870b664b..f596292e0e3 100755 --- a/jobs/rocoto/efsoi.sh +++ b/jobs/rocoto/efsoi.sh @@ -1,16 +1,16 @@ #! /usr/bin/env bash -source "$HOMEgfs/ush/preamble.sh" +source "${HOMEgfs}/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh +. ${HOMEgfs}/ush/load_fv3gfs_modules.sh status=$? -[[ $status -ne 0 ]] && exit $status +[[ ${status} -ne 0 ]] && exit ${status} ############################################################### # Execute the JJOB -$HOMEgfs/jobs/JGDAS_EFSOI +${HOMEgfs}/jobs/JGDAS_EFSOI status=$? -exit $status +exit ${status} diff --git a/jobs/rocoto/eposfsoi.sh b/jobs/rocoto/eposfsoi.sh index ddd1d8191d9..e3fbcc1eea4 100755 --- a/jobs/rocoto/eposfsoi.sh +++ b/jobs/rocoto/eposfsoi.sh @@ -1,28 +1,28 @@ #! /usr/bin/env bash -source "$HOMEgfs/ush/preamble.sh" +source "${HOMEgfs}/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh +. "${HOMEgfs}/ush/load_fv3gfs_modules.sh" status=$? -[[ $status -ne 0 ]] && exit $status +[[ "${status}" -ne 0 ]] && exit "${status}" ############################################################### # Loop over groups to Execute the JJOB -fhrlst=$(echo $FHRLST | sed -e 's/_/ /g; s/f/ /g; s/,/ /g') +fhrlst=$(echo ${FHRLST} | sed -e 's/_/ /g; s/f/ /g; s/,/ /g') -for fhr in $fhrlst; do +for fhr in ${fhrlst}; do - export FHMIN_EPOS=$fhr - export FHMAX_EPOS=$fhr - export FHOUT_EPOS=$fhr + export FHMIN_EPOS=${fhr} + export FHMAX_EPOS=${fhr} + export FHOUT_EPOS=${fhr} export job=epos${fhr} - $HOMEgfs/jobs/JGDAS_EFSOI_POST + "${HOMEgfs}/jobs/JGDAS_EFSOI_POST" status=$? - [[ $status -ne 0 ]] && exit $status + [[ "${status}" -ne 0 ]] && exit "${status}" done diff --git a/jobs/rocoto/esfcfsoi.sh b/jobs/rocoto/esfcfsoi.sh index d7db3bdd694..0790e87e154 100755 --- a/jobs/rocoto/esfcfsoi.sh +++ b/jobs/rocoto/esfcfsoi.sh @@ -1,15 +1,15 @@ #! /usr/bin/env bash -source "$HOMEgfs/ush/preamble.sh" +source "${HOMEgfs}/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh +. "${HOMEgfs}/ush/load_fv3gfs_modules.sh" status=$? -[[ $status -ne 0 ]] && exit $status +[[ "${status}" -ne 0 ]] && exit "${status}" ############################################################### # Execute the JJOB -$HOMEgfs/jobs/JGDAS_EFSOI_SFC +"${HOMEgfs}/jobs/JGDAS_EFSOI_SFC" status=$? -exit $status +exit "${status}" From b2212293d810d818bf070b2bab2b9794a149dfb4 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Wed, 14 Sep 2022 14:33:44 -0500 Subject: [PATCH 079/103] linter corrections --- jobs/rocoto/ecenfsoi.sh | 2 +- jobs/rocoto/efcsfsoi.sh | 4 +- jobs/rocoto/efsoi.sh | 6 +- jobs/rocoto/eposfsoi.sh | 2 +- jobs/rocoto/eupdfsoi.sh | 10 +- parm/config/config.ecenfsoi | 4 +- parm/config/config.efcsfsoi | 13 +- parm/config/config.efsoi | 2 +- parm/config/config.eposfsoi | 6 +- parm/config/config.esfcfsoi | 4 +- parm/config/config.eupdfsoi | 6 +- parm/config/config.resources | 274 +++++++++++++++++------------------ 12 files changed, 167 insertions(+), 166 deletions(-) diff --git a/jobs/rocoto/ecenfsoi.sh b/jobs/rocoto/ecenfsoi.sh index 6ff354fa59c..205004bfd1d 100755 --- a/jobs/rocoto/ecenfsoi.sh +++ b/jobs/rocoto/ecenfsoi.sh @@ -10,7 +10,7 @@ status=$? ############################################################### # Loop over groups to Execute the JJOB -fhrlst=$(echo ${FHRLST} | sed -e 's/_/ /g; s/f/ /g; s/,/ /g') +fhrlst=$(echo "${FHRLST}" | sed -e 's/_/ /g; s/f/ /g; s/,/ /g') for fhr in ${fhrlst}; do export FHMIN_ECEN=${fhr} diff --git a/jobs/rocoto/efcsfsoi.sh b/jobs/rocoto/efcsfsoi.sh index 8b53e5df828..d7e8e700865 100755 --- a/jobs/rocoto/efcsfsoi.sh +++ b/jobs/rocoto/efcsfsoi.sh @@ -6,11 +6,11 @@ source "${HOMEgfs}/ush/preamble.sh" # Source FV3GFS workflow modules . "${HOMEgfs}/ush/load_fv3gfs_modules.sh" status=$? -[[ ${status} -ne 0 ]] && exit ${status} +[[ "${status}" -ne 0 ]] && exit "${status}" ############################################################### # Execute the JJOB "${HOMEgfs}/jobs/JGDAS_EFSOI_FCST" status=$? -exit ${status} +exit "${status}" diff --git a/jobs/rocoto/efsoi.sh b/jobs/rocoto/efsoi.sh index f596292e0e3..699978c055c 100755 --- a/jobs/rocoto/efsoi.sh +++ b/jobs/rocoto/efsoi.sh @@ -4,13 +4,13 @@ source "${HOMEgfs}/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules -. ${HOMEgfs}/ush/load_fv3gfs_modules.sh +. "${HOMEgfs}/ush/load_fv3gfs_modules.sh" status=$? [[ ${status} -ne 0 ]] && exit ${status} ############################################################### # Execute the JJOB -${HOMEgfs}/jobs/JGDAS_EFSOI +"${HOMEgfs}/jobs/JGDAS_EFSOI" status=$? -exit ${status} +exit "${status}" diff --git a/jobs/rocoto/eposfsoi.sh b/jobs/rocoto/eposfsoi.sh index e3fbcc1eea4..8e1eb0148dc 100755 --- a/jobs/rocoto/eposfsoi.sh +++ b/jobs/rocoto/eposfsoi.sh @@ -10,7 +10,7 @@ status=$? ############################################################### # Loop over groups to Execute the JJOB -fhrlst=$(echo ${FHRLST} | sed -e 's/_/ /g; s/f/ /g; s/,/ /g') +fhrlst=$(echo "${FHRLST}" | sed -e 's/_/ /g; s/f/ /g; s/,/ /g') for fhr in ${fhrlst}; do diff --git a/jobs/rocoto/eupdfsoi.sh b/jobs/rocoto/eupdfsoi.sh index 81813bbf45d..620c1b92996 100755 --- a/jobs/rocoto/eupdfsoi.sh +++ b/jobs/rocoto/eupdfsoi.sh @@ -1,16 +1,16 @@ #! /usr/bin/env bash -source "$HOMEgfs/ush/preamble.sh" +source "${HOMEgfs}/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh +. "${HOMEgfs}/ush/load_fv3gfs_modules.sh" status=$? -[[ $status -ne 0 ]] && exit $status +[[ "${status}" -ne 0 ]] && exit "${status}" ############################################################### # Execute the JJOB -$HOMEgfs/jobs/JGDAS_EFSOI_UPDATE +"${HOMEgfs}/jobs/JGDAS_EFSOI_UPDATE" status=$? -exit $status +exit "${status}" diff --git a/parm/config/config.ecenfsoi b/parm/config/config.ecenfsoi index e41757341f4..4f0c905ab8f 100755 --- a/parm/config/config.ecenfsoi +++ b/parm/config/config.ecenfsoi @@ -6,9 +6,9 @@ echo "BEGIN: config.ecenfsoi" # get regular ecen configs -. $EXPDIR/config.ecen +. "${EXPDIR}/config.ecen" # Get task specific resources -. $EXPDIR/config.resources ecenfsoi +. "${EXPDIR}/config.resources ecenfsoi" echo "END: config.ecenfsoi" diff --git a/parm/config/config.efcsfsoi b/parm/config/config.efcsfsoi index e2916fd07d8..970b2914322 100755 --- a/parm/config/config.efcsfsoi +++ b/parm/config/config.efcsfsoi @@ -6,16 +6,17 @@ echo "BEGIN: config.efcsfsoi" # Get regular efcs configs -. $EXPDIR/config.efcs +. "${EXPDIR}/config.efcs" # Get task specific resources -. $EXPDIR/config.resources efcsfsoi +. "${EXPDIR}/config.resources efcsfsoi" -export npe_fv3=$npe_efcsfsoi +export npe_fv3=${npe_efcsfsoi} -if [ $QUILTING = ".true." ]; then - export npe_fv3=$(echo " $npe_fv3 + $WRITE_GROUP * $WRTTASK_PER_GROUP" | bc) - export npe_efcsfsoi=$npe_fv3 +if [ "${QUILTING}" = ".true." ]; then + npe_fv3=$(echo " ${npe_fv3} + ${WRITE_GROUP} * ${WRTTASK_PER_GROUP}" | bc) + export npe_fv3 + export npe_efcsfsoi=${npe_fv3} fi export FHMIN_EFSOI=6 diff --git a/parm/config/config.efsoi b/parm/config/config.efsoi index 5961a1a42df..9838eb4d161 100755 --- a/parm/config/config.efsoi +++ b/parm/config/config.efsoi @@ -6,7 +6,7 @@ echo "BEGIN: config.efsoi" # Get task specific resources -. $EXPDIR/config.resources efsoi +. "${EXPDIR}/config.resources efsoi" # LETKF specific settings with model space localization export modelspace_vloc=".true." # model space localization diff --git a/parm/config/config.eposfsoi b/parm/config/config.eposfsoi index 8a6e3716cff..862de5c165f 100755 --- a/parm/config/config.eposfsoi +++ b/parm/config/config.eposfsoi @@ -6,12 +6,12 @@ echo "BEGIN: config.eposfsoi" # Get regular epos configs -. $EXPDIR/config.epos +. "${EXPDIR}/config.epos" # Get efcsfsoi configs for FH settings -. $EXPDIR/config.efcsfsoi +. "${EXPDIR}/config.efcsfsoi" # Get task specific resources -. $EXPDIR/config.resources eposfsoi +. "${EXPDIR}/config.resources eposfsoi" echo "END: config.eposfsoi" diff --git a/parm/config/config.esfcfsoi b/parm/config/config.esfcfsoi index 2eb2a7eadf2..fa09d626fda 100755 --- a/parm/config/config.esfcfsoi +++ b/parm/config/config.esfcfsoi @@ -6,9 +6,9 @@ echo "BEGIN: config.esfcfsoi" # Get regular esfc configs -. $EXPDIR/config.esfc +. "${EXPDIR}/config.esfc" # Get task specific resources -. $EXPDIR/config.resources esfcfsoi +. "${EXPDIR}/config.resources esfcfsoi" echo "END: config.esfcfsoi" diff --git a/parm/config/config.eupdfsoi b/parm/config/config.eupdfsoi index 7649c0d3f23..b89c6675b24 100755 --- a/parm/config/config.eupdfsoi +++ b/parm/config/config.eupdfsoi @@ -6,12 +6,12 @@ echo "BEGIN: config.eupdfsoi" # Get task specific resources -. $EXPDIR/config.eupd +. "${EXPDIR}/config.eupd" # Get task specific resources -. $EXPDIR/config.resources eupdfsoi +. "${EXPDIR}/config.resources eupdfsoi" -export npe_enkf=$npe_eupd +export npe_enkf="${npe_eupd}" # Use NAM_ENKF below for serial EnKF diff --git a/parm/config/config.resources b/parm/config/config.resources index 06cec06b45d..6980863ee97 100755 --- a/parm/config/config.resources +++ b/parm/config/config.resources @@ -41,102 +41,102 @@ elif [[ "$machine" = "ORION" ]]; then export npe_node_max=40 fi -if [ $step = "prep" -o $step = "prepbufr" ]; then - eval "export wtime_$step='00:45:00'" - eval "export npe_$step=4" - eval "export npe_node_$step=2" - eval "export nth_$step=1" - eval "export memory_$step=40G" - -elif [ $step = "aerosol_init" ]; then +if [ ${step} = "prep" -o ${step} = "prepbufr" ]; then + eval "export wtime_${step}='00:45:00'" + eval "export npe_${step}=4" + eval "export npe_node_${step}=2" + eval "export nth_${step}=1" + eval "export memory_${step}=40G" + +elif [ ${step} = "aerosol_init" ]; then export wtime_aerosol_init="00:05:00" export npe_aerosol_init=1 export nth_aerosol_init=1 - export npe_node_aerosol_init=$(echo "$npe_node_max / $nth_aerosol_init" | bc) + export npe_node_aerosol_init=$(echo "${npe_node_max} / $nth_aerosol_init" | bc) export NTASKS=${npe_aerosol_init} export memory_aerosol_init="6G" -elif [ $step = "waveinit" ]; then +elif [ ${step} = "waveinit" ]; then export wtime_waveinit="00:10:00" export npe_waveinit=12 export nth_waveinit=1 - export npe_node_waveinit=$(echo "$npe_node_max / $nth_waveinit" | bc) + export npe_node_waveinit=$(echo "${npe_node_max} / $nth_waveinit" | bc) export NTASKS=${npe_waveinit} -elif [ $step = "waveprep" ]; then +elif [ ${step} = "waveprep" ]; then export wtime_waveprep="00:30:00" export npe_waveprep=65 export nth_waveprep=1 - export npe_node_waveprep=$(echo "$npe_node_max / $nth_waveprep" | bc) + export npe_node_waveprep=$(echo "${npe_node_max} / $nth_waveprep" | bc) export NTASKS=${npe_waveprep} -elif [ $step = "wavepostsbs" ]; then +elif [ ${step} = "wavepostsbs" ]; then export wtime_wavepostsbs="06:00:00" export npe_wavepostsbs=10 export nth_wavepostsbs=1 - export npe_node_wavepostsbs=$(echo "$npe_node_max / $nth_wavepostsbs" | bc) + export npe_node_wavepostsbs=$(echo "${npe_node_max} / $nth_wavepostsbs" | bc) export NTASKS=${npe_wavepostsbs} -elif [ $step = "wavepostbndpnt" ]; then +elif [ ${step} = "wavepostbndpnt" ]; then export wtime_wavepostbndpnt="02:00:00" export npe_wavepostbndpnt=280 export nth_wavepostbndpnt=1 - export npe_node_wavepostbndpnt=$(echo "$npe_node_max / $nth_wavepostbndpnt" | bc) + export npe_node_wavepostbndpnt=$(echo "${npe_node_max} / $nth_wavepostbndpnt" | bc) export NTASKS=${npe_wavepostbndpnt} -elif [ $step = "wavepostbndpntbll" ]; then +elif [ ${step} = "wavepostbndpntbll" ]; then export wtime_wavepostbndpntbll="01:00:00" export npe_wavepostbndpntbll=280 export nth_wavepostbndpntbll=1 - export npe_node_wavepostbndpntbll=$(echo "$npe_node_max / $nth_wavepostbndpntbll" | bc) + export npe_node_wavepostbndpntbll=$(echo "${npe_node_max} / $nth_wavepostbndpntbll" | bc) export NTASKS=${npe_wavepostbndpntbll} -elif [ $step = "wavepostpnt" ]; then +elif [ ${step} = "wavepostpnt" ]; then export wtime_wavepostpnt="02:00:00" export npe_wavepostpnt=280 export nth_wavepostpnt=1 - export npe_node_wavepostpnt=$(echo "$npe_node_max / $nth_wavepostpnt" | bc) + export npe_node_wavepostpnt=$(echo "${npe_node_max} / $nth_wavepostpnt" | bc) export NTASKS=${npe_wavepostpnt} -elif [ $step = "wavegempak" ]; then +elif [ ${step} = "wavegempak" ]; then export wtime_wavegempak="01:00:00" - export npe_wavegempak=$npe_node_max + export npe_wavegempak=${npe_node_max} export nth_wavegempak=1 - export npe_node_wavegempak=$(echo "$npe_node_max / $nth_wavegempak" | bc) + export npe_node_wavegempak=$(echo "${npe_node_max} / $nth_wavegempak" | bc) export NTASKS=${npe_wavegempak} -elif [ $step = "waveawipsbulls" ]; then +elif [ ${step} = "waveawipsbulls" ]; then export wtime_waveawipsbulls="00:30:00" - export npe_waveawipsbulls=$npe_node_max + export npe_waveawipsbulls=${npe_node_max} export nth_waveawipsbulls=1 - export npe_node_waveawipsbulls=$(echo "$npe_node_max / $nth_waveawipsbulls" | bc) + export npe_node_waveawipsbulls=$(echo "${npe_node_max} / $nth_waveawipsbulls" | bc) export NTASKS=${npe_waveawipsbulls} -elif [ $step = "waveawipsgridded" ]; then +elif [ ${step} = "waveawipsgridded" ]; then export wtime_waveawipsgridded="00:30:00" - export npe_waveawipsgridded=$npe_node_max + export npe_waveawipsgridded=${npe_node_max} export nth_waveawipsgridded=1 - export npe_node_waveawipsgridded=$(echo "$npe_node_max / $nth_waveawipsgridded" | bc) + export npe_node_waveawipsgridded=$(echo "${npe_node_max} / $nth_waveawipsgridded" | bc) export NTASKS=${npe_waveawipsgridded} -elif [ $step = "atmanalprep" ]; then +elif [ ${step} = "atmanalprep" ]; then export wtime_atmanalprep="00:10:00" export npe_atmanalprep=1 export nth_atmanalprep=1 - export npe_node_atmanalprep=$(echo "$npe_node_max / $nth_atmanalprep" | bc) + export npe_node_atmanalprep=$(echo "${npe_node_max} / $nth_atmanalprep" | bc) export memory_atmanalprep="3072M" -elif [ $step = "atmanalrun" ]; then +elif [ ${step} = "atmanalrun" ]; then # make below case dependent later export layout_x=1 @@ -148,26 +148,26 @@ elif [ $step = "atmanalrun" ]; then export nth_atmanalrun=1 export nth_atmanalrun_gfs=$nth_atmanalrun export native_atmanalrun="--exclusive" - export npe_node_atmanalrun=$(echo "$npe_node_max / $nth_atmanalrun" | bc) + export npe_node_atmanalrun=$(echo "${npe_node_max} / $nth_atmanalrun" | bc) -elif [ $step = "atmanalpost" ]; then +elif [ ${step} = "atmanalpost" ]; then export wtime_atmanalpost="00:30:00" - export npe_atmanalpost=$npe_node_max + export npe_atmanalpost=${npe_node_max} export nth_atmanalpost=1 - export npe_node_atmanalpost=$(echo "$npe_node_max / $nth_atmanalpost" | bc) + export npe_node_atmanalpost=$(echo "${npe_node_max} / $nth_atmanalpost" | bc) -elif [ $step = "aeroanlinit" ]; then +elif [ ${step} = "aeroanlinit" ]; then export wtime_aeroanlinit="00:10:00" export npe_aeroanlinit=1 export nth_aeroanlinit=1 - export npe_node_aeroanlinit=$(echo "$npe_node_max / $nth_aeroanlinit" | bc) + export npe_node_aeroanlinit=$(echo "${npe_node_max} / $nth_aeroanlinit" | bc) export memory_aeroanlinit="3072M" -elif [ $step = "aeroanlrun" ]; then +elif [ ${step} = "aeroanlrun" ]; then - case $CASE in + case "${CASE}" in C768) layout_x=6 layout_y=6 @@ -188,71 +188,71 @@ elif [ $step = "aeroanlrun" ]; then export nth_aeroanlrun=1 export nth_aeroanlrun_gfs=1 export native_aeroanlrun="--exclusive" - export npe_node_aeroanlrun=$(echo "$npe_node_max / $nth_aeroanlrun" | bc) + export npe_node_aeroanlrun=$(echo "${npe_node_max} / $nth_aeroanlrun" | bc) -elif [ $step = "aeroanlfinal" ]; then +elif [ ${step} = "aeroanlfinal" ]; then export wtime_aeroanlfinal="00:10:00" export npe_aeroanlfinal=1 export nth_aeroanlfinal=1 - export npe_node_aeroanlfinal=$(echo "$npe_node_max / $nth_aeroanlfinal" | bc) + export npe_node_aeroanlfinal=$(echo "${npe_node_max} / $nth_aeroanlfinal" | bc) export memory_aeroanlfinal="3072M" -elif [ $step = "anal" ]; then +elif [ ${step} = "anal" ]; then export wtime_anal="01:00:00" export npe_anal=1000 export nth_anal=5 export npe_anal_gfs=1000 - if [ $CASE = "C384" ]; then + if [ "${CASE}" = "C384" ]; then export npe_anal=400 export npe_anal_gfs=400 fi - if [ $CASE = "C192" -o $CASE = "C96" -o $CASE = "C48" ]; then + if [ "${CASE}" = "C192" -o "${CASE}" = "C96" -o "${CASE}" = "C48" ]; then export npe_anal=84 export npe_anal_gfs=84 fi export nth_anal_gfs=$nth_anal - export npe_node_anal=$(echo "$npe_node_max / $nth_anal" | bc) + export npe_node_anal=$(echo "${npe_node_max} / $nth_anal" | bc) export nth_cycle=$nth_anal -elif [ $step = "analcalc" ]; then +elif [ ${step} = "analcalc" ]; then export wtime_analcalc="00:10:00" export npe_analcalc=127 export nth_analcalc=1 - export npe_node_analcalc=$npe_node_max + export npe_node_analcalc=${npe_node_max} -elif [ $step = "analdiag" ]; then +elif [ ${step} = "analdiag" ]; then export wtime_analdiag="00:10:00" export npe_analdiag=112 export nth_analdiag=1 - export npe_node_analdiag=$npe_node_max + export npe_node_analdiag=${npe_node_max} -elif [ $step = "sfcanl" ]; then +elif [ ${step} = "sfcanl" ]; then export wtime_sfcanl="00:10:00" export npe_sfcanl=6 export nth_sfcanl=1 - export npe_node_sfcanl=$(echo "$npe_node_max / $nth_sfcanl" | bc) + export npe_node_sfcanl=$(echo "${npe_node_max} / $nth_sfcanl" | bc) -elif [ $step = "gldas" ]; then +elif [ ${step} = "gldas" ]; then export wtime_gldas="00:10:00" export npe_gldas=96 export nth_gldas=1 - export npe_node_gldas=$npe_node_max + export npe_node_gldas=${npe_node_max} export npe_gaussian=96 export nth_gaussian=1 export npe_node_gaussian=24 -elif [ $step = "fcst" ]; then +elif [ ${step} = "fcst" ]; then export wtime_fcst="00:30:00" - if [ $CASE = "C768" ]; then + if [ "${CASE}" = "C768" ]; then export wtime_fcst_gfs="06:00:00" - elif [ $CASE = "C384" ]; then + elif [ "${CASE}" = "C384" ]; then export wtime_fcst_gfs="06:00:00" else export wtime_fcst_gfs="03:00:00" @@ -289,8 +289,8 @@ elif [ $step = "fcst" ]; then export nth_fcst=${nth_fv3:-2} export nth_fcst_gfs=${nth_fv3_gfs:-2} - export npe_node_fcst=$(echo "$npe_node_max / $nth_fcst" | bc) - export npe_node_fcst_gfs=$(echo "$npe_node_max / $nth_fcst_gfs" | bc) + export npe_node_fcst=$(echo "${npe_node_max} / $nth_fcst" | bc) + export npe_node_fcst_gfs=$(echo "${npe_node_max} / $nth_fcst_gfs" | bc) if [[ $DO_WAVE == "YES" ]]; then case $waveGRD in @@ -341,7 +341,7 @@ elif [ $step = "fcst" ]; then fi done -elif [ $step = "ocnpost" ]; then +elif [ ${step} = "ocnpost" ]; then export wtime_ocnpost="00:30:00" export npe_ocnpost=1 @@ -349,58 +349,58 @@ elif [ $step = "ocnpost" ]; then export nth_ocnpost=1 export memory_ocnpost="96G" -elif [ $step = "post" ]; then +elif [ ${step} = "post" ]; then export wtime_post="02:00:00" export wtime_post_gfs="06:00:00" export npe_post=112 export nth_post=1 export npe_node_post=12 - export npe_node_dwn=$npe_node_max + export npe_node_dwn=${npe_node_max} -elif [ $step = "wafs" ]; then +elif [ ${step} = "wafs" ]; then export wtime_wafs="00:30:00" export npe_wafs=1 export npe_node_wafs=1 export nth_wafs=1 -elif [ $step = "wafsgcip" ]; then +elif [ ${step} = "wafsgcip" ]; then export wtime_wafsgcip="00:30:00" export npe_wafsgcip=2 export npe_node_wafsgcip=1 export nth_wafsgcip=1 -elif [ $step = "wafsgrib2" ]; then +elif [ ${step} = "wafsgrib2" ]; then export wtime_wafsgrib2="00:30:00" export npe_wafsgrib2=1 export npe_node_wafsgrib2=1 export nth_wafsgrib2=1 -elif [ $step = "wafsblending" ]; then +elif [ ${step} = "wafsblending" ]; then export wtime_wafsblending="00:30:00" export npe_wafsblending=1 export npe_node_wafsblending=1 export nth_wafsblending=1 -elif [ $step = "wafsgrib20p25" ]; then +elif [ ${step} = "wafsgrib20p25" ]; then export wtime_wafsgrib20p25="00:30:00" export npe_wafsgrib20p25=1 export npe_node_wafsgrib20p25=1 export nth_wafsgrib20p25=1 -elif [ $step = "wafsblending0p25" ]; then +elif [ ${step} = "wafsblending0p25" ]; then export wtime_wafsblending0p25="00:30:00" export npe_wafsblending0p25=1 export npe_node_wafsblending0p25=1 export nth_wafsblending0p25=1 -elif [ $step = "vrfy" ]; then +elif [ ${step} = "vrfy" ]; then export wtime_vrfy="03:00:00" export wtime_vrfy_gfs="06:00:00" @@ -413,7 +413,7 @@ elif [ $step = "vrfy" ]; then export memory_vrfy="16384M" fi -elif [ $step = "metp" ]; then +elif [ ${step} = "metp" ]; then export nth_metp=1 export wtime_metp="03:00:00" @@ -423,14 +423,14 @@ elif [ $step = "metp" ]; then export npe_metp_gfs=4 export npe_node_metp_gfs=4 -elif [ $step = "echgres" ]; then +elif [ ${step} = "echgres" ]; then export wtime_echgres="00:10:00" export npe_echgres=3 - export nth_echgres=$npe_node_max + export nth_echgres=${npe_node_max} export npe_node_echgres=1 -elif [ $step = "init" ]; then +elif [ ${step} = "init" ]; then export wtime_init="00:30:00" export npe_init=24 @@ -438,41 +438,41 @@ elif [ $step = "init" ]; then export npe_node_init=6 export memory_init="70G" -elif [ $step = "init_chem" ]; then +elif [ ${step} = "init_chem" ]; then export wtime_init_chem="00:30:00" export npe_init_chem=1 export npe_node_init_chem=1 -elif [ $step = "mom6ic" ]; then +elif [ ${step} = "mom6ic" ]; then export wtime_mom6ic="00:30:00" export npe_mom6ic=24 export npe_node_mom6ic=24 -elif [ $step = "arch" -o $step = "earc" -o $step = "getic" ]; then +elif [ ${step} = "arch" -o ${step} = "earc" -o ${step} = "getic" ]; then - eval "export wtime_$step='06:00:00'" - eval "export npe_$step=1" - eval "export npe_node_$step=1" - eval "export nth_$step=1" - eval "export memory_$step=2048M" + eval "export wtime_${step}='06:00:00'" + eval "export npe_${step}=1" + eval "export npe_node_${step}=1" + eval "export nth_${step}=1" + eval "export memory_${step}=2048M" -elif [ $step = "coupled_ic" ]; then +elif [ ${step} = "coupled_ic" ]; then export wtime_coupled_ic="00:15:00" export npe_coupled_ic=1 export npe_node_coupled_ic=1 export nth_coupled_ic=1 -elif [ $step = "atmensanalprep" ]; then +elif [ ${step} = "atmensanalprep" ]; then export wtime_atmensanalprep="00:10:00" export npe_atmensanalprep=1 export nth_atmensanalprep=1 - export npe_node_atmensanalprep=$(echo "$npe_node_max / $nth_atmensanalprep" | bc) + export npe_node_atmensanalprep=$(echo "${npe_node_max} / $nth_atmensanalprep" | bc) -elif [ $step = "atmensanalrun" ]; then +elif [ ${step} = "atmensanalrun" ]; then # make below case dependent later export layout_x=2 @@ -484,59 +484,59 @@ elif [ $step = "atmensanalrun" ]; then export nth_atmensanalrun=1 export nth_atmensanalrun_gfs=$nth_atmensanalrun export native_atmensanalrun="--exclusive" - export npe_node_atmensanalrun=$(echo "$npe_node_max / $nth_atmensanalrun" | bc) + export npe_node_atmensanalrun=$(echo "${npe_node_max} / $nth_atmensanalrun" | bc) -elif [ $step = "atmensanalpost" ]; then +elif [ ${step} = "atmensanalpost" ]; then export wtime_atmensanalpost="00:30:00" - export npe_atmensanalpost=$npe_node_max + export npe_atmensanalpost=${npe_node_max} export nth_atmensanalpost=1 - export npe_node_atmensanalpost=$(echo "$npe_node_max / $nth_atmensanalpost" | bc) + export npe_node_atmensanalpost=$(echo "${npe_node_max} / $nth_atmensanalpost" | bc) -elif [ $step = "eobs" -o $step = "eomg" ]; then +elif [ ${step} = "eobs" -o ${step} = "eomg" ]; then export wtime_eobs="00:45:00" export wtime_eomg="01:00:00" - if [ $CASE = "C768" ]; then + if [ "${CASE}" = "C768" ]; then export npe_eobs=200 - elif [ $CASE = "C384" ]; then + elif [ "${CASE}" = "C384" ]; then export npe_eobs=100 - elif [ $CASE = "C192" ]; then + elif [ "${CASE}" = "C192" ]; then export npe_eobs=40 - elif [ $CASE = "C96" -o $CASE = "C48" ]; then + elif [ "${CASE}" = "C96" -o "${CASE}" = "C48" ]; then export npe_eobs=20 fi export npe_eomg=$npe_eobs export nth_eobs=2 export nth_eomg=$nth_eobs - export npe_node_eobs=$(echo "$npe_node_max / $nth_eobs" | bc) + export npe_node_eobs=$(echo "${npe_node_max} / $nth_eobs" | bc) export npe_node_eomg=$npe_node_eobs -elif [ $step = "ediag" ]; then +elif [ ${step} = "ediag" ]; then export wtime_ediag="00:06:00" export npe_ediag=56 export nth_ediag=1 - export npe_node_ediag=$npe_node_max + export npe_node_ediag=${npe_node_max} -elif [ $step = "eupd" ]; then +elif [ ${step} = "eupd" ]; then export wtime_eupd="00:30:00" - if [ $CASE = "C768" ]; then + if [ "${CASE}" = "C768" ]; then export npe_eupd=480 export nth_eupd=6 if [[ "$machine" = "HERA" ]]; then export npe_eupd=150 export nth_eupd=40 fi - elif [ $CASE = "C384" ]; then + elif [ "${CASE}" = "C384" ]; then export npe_eupd=270 export nth_eupd=2 if [[ "$machine" = "HERA" ]]; then export npe_eupd=100 export nth_eupd=40 fi - elif [ $CASE = "C192" -o $CASE = "C96" -o $CASE = "C48" ]; then + elif [ "${CASE}" = "C192" -o "${CASE}" = "C96" -o "${CASE}" = "C48" ]; then export npe_eupd=42 export nth_eupd=2 if [[ "$machine" = "HERA" ]]; then @@ -544,12 +544,12 @@ elif [ $step = "eupd" ]; then export nth_eupd=40 fi fi - export npe_node_eupd=$(echo "$npe_node_max / $nth_eupd" | bc) + export npe_node_eupd=$(echo "${npe_node_max} / $nth_eupd" | bc) -elif [ $step = "eupdfsoi" ]; then +elif [ ${step} = "eupdfsoi" ]; then export wtime_eupdfsoi="03:00:00" - if [ $CASE = "C768" ]; then + if [ "${CASE}" = "C768" ]; then export npe_eupdfsoi=960 export nth_eupdfsoi=6 if [[ "$machine" = "WCOSS_DELL_P3" ]]; then @@ -559,7 +559,7 @@ elif [ $step = "eupdfsoi" ]; then export npe_eupdfsoi=150 export nth_eupdfsoi=40 fi - elif [ $CASE = "C384" ]; then + elif [ "${CASE}" = "C384" ]; then export npe_eupdfsoi=400 export nth_eupdfsoi=5 if [[ "$machine" = "WCOSS_DELL_P3" ]]; then @@ -569,7 +569,7 @@ elif [ $step = "eupdfsoi" ]; then export npe_eupdfsoi=100 export nth_eupdfsoi=40 fi - elif [ $CASE = "C192" -o $CASE = "C96" -o $CASE = "C48" ]; then + elif [ [ "${CASE}" = "C192" ] || [ "${CASE}" = "C96" ] || [ "${CASE}" = "C48" ] ]; then export npe_eupdfsoi=42 export nth_eupdfsoi=2 if [[ "$machine" = "HERA" ]]; then @@ -577,12 +577,12 @@ elif [ $step = "eupdfsoi" ]; then export nth_eupdfsoi=40 fi fi - export npe_node_eupdfsoi=$(echo "$npe_node_max / $nth_eupdfsoi" | bc) + export npe_node_eupdfsoi=$(echo "${npe_node_max} / $nth_eupdfsoi" | bc) -elif [ $step = "efsoi" ]; then +elif [ ${step} = "efsoi" ]; then export wtime_efsoi="00:30:00" - if [ $CASE = "C768" ]; then + if [ "${CASE}" = "C768" ]; then export npe_efsoi=960 export nth_efsoi=6 if [[ "$machine" = "WCOSS_DELL_P3" ]]; then @@ -592,7 +592,7 @@ elif [ $step = "efsoi" ]; then export npe_efsoi=150 export nth_efsoi=40 fi - elif [ $CASE = "C384" ]; then + elif [ "${CASE}" = "C384" ]; then export npe_efsoi=270 export nth_efsoi=2 if [[ "$machine" = "WCOSS_DELL_P3" ]]; then @@ -602,7 +602,7 @@ elif [ $step = "efsoi" ]; then export npe_efsoi=100 export nth_efsoi=40 fi - elif [ $CASE = "C192" -o $CASE = "C96" -o $CASE = "C48" ]; then + elif [ ["${CASE}" = "C192"] || ["${CASE}" = "C96"] || ["${CASE}" = "C48"] ]; then export npe_efsoi=42 export nth_efsoi=2 if [[ "$machine" = "HERA" ]]; then @@ -610,78 +610,78 @@ elif [ $step = "efsoi" ]; then export nth_efsoi=40 fi fi - export npe_node_efsoi=$(echo "$npe_node_max / $nth_efsoi" | bc) + export npe_node_efsoi=$(echo "${npe_node_max} / $nth_efsoi" | bc) -elif [ $step = "ecen" ]; then +elif [ ${step} = "ecen" ]; then export wtime_ecen="00:10:00" export npe_ecen=80 export nth_ecen=6 - if [ $CASE = "C384" -o $CASE = "C192" -o $CASE = "C96" -o $CASE = "C48" ]; then export nth_ecen=2; fi - export npe_node_ecen=$(echo "$npe_node_max / $nth_ecen" | bc) + if [ "${CASE}" = "C384" -o "${CASE}" = "C192" -o "${CASE}" = "C96" -o "${CASE}" = "C48" ]; then export nth_ecen=2; fi + export npe_node_ecen=$(echo "${npe_node_max} / $nth_ecen" | bc) export nth_cycle=$nth_ecen -elif [ $step = "ecenfsoi" ]; then +elif [ ${step} = "ecenfsoi" ]; then export wtime_ecenfsoi="00:10:00" export npe_ecenfsoi=80 export nth_ecenfsoi=6 if [[ "$machine" = "WCOSS_DELL_P3" ]]; then export nth_ecenfsoi=7; fi - if [ $CASE = "C384" -o $CASE = "C192" -o $CASE = "C96" -o $CASE = "C48" ]; then export nth_ecenfsoi=2; fi - export npe_node_ecenfsoi=$(echo "$npe_node_max / $nth_ecenfsoi" | bc) + if [ "${CASE}" = "C384" -o "${CASE}" = "C192" -o "${CASE}" = "C96" -o "${CASE}" = "C48" ]; then export nth_ecenfsoi=2; fi + export npe_node_ecenfsoi=$(echo "${npe_node_max} / $nth_ecenfsoi" | bc) export nth_cycle=$nth_ecenfsoi -elif [ $step = "esfc" ]; then +elif [ ${step} = "esfc" ]; then export wtime_esfc="00:06:00" export npe_esfc=80 - export npe_node_esfc=$npe_node_max + export npe_node_esfc=${npe_node_max} export nth_esfc=1 export nth_cycle=$nth_esfc -elif [ $step = "esfcfsoi" ]; then +elif [ ${step} = "esfcfsoi" ]; then export wtime_esfcfsoi="00:06:00" export npe_esfcfsoi=80 - export npe_node_esfcfsoi=$npe_node_max + export npe_node_esfcfsoi=${npe_node_max} export nth_esfcfsoi=1 export nth_cycle=$nth_esfcfsoi -elif [ $step = "efcs" ]; then +elif [ ${step} = "efcs" ]; then - if [ $CASE = "C768" ]; then + if [ "${CASE}" = "C768" ]; then export wtime_efcs="01:00:00" else export wtime_efcs="00:40:00" fi export npe_efcs=$(echo "$layout_x * $layout_y * 6" | bc) export nth_efcs=${nth_fv3:-2} - export npe_node_efcs=$(echo "$npe_node_max / $nth_efcs" | bc) + export npe_node_efcs=$(echo "${npe_node_max} / $nth_efcs" | bc) -elif [ $step = "efcsfsoi" ]; then +elif [ ${step} = "efcsfsoi" ]; then export wtime_efcsfsoi="00:40:00" export npe_efcsfsoi=$(echo "$layout_x * $layout_y * 6" | bc) export nth_efcsfsoi=${nth_fv3:-2} - export npe_node_efcsfsoi=$(echo "$npe_node_max / $nth_efcsfsoi" | bc) + export npe_node_efcsfsoi=$(echo "${npe_node_max} / $nth_efcsfsoi" | bc) -elif [ $step = "epos" ]; then +elif [ ${step} = "epos" ]; then export wtime_epos="00:15:00" export npe_epos=80 export nth_epos=6 - export npe_node_epos=$(echo "$npe_node_max / $nth_epos" | bc) + export npe_node_epos=$(echo "${npe_node_max} / $nth_epos" | bc) -elif [ $step = "eposfsoi" ]; then +elif [ ${step} = "eposfsoi" ]; then export wtime_eposfsoi="00:15:00" export npe_eposfsoi=80 export nth_eposfsoi=6 if [[ "$machine" = "WCOSS_DELL_P3" ]]; then export nth_eposfsoi=7; fi - export npe_node_eposfsoi=$(echo "$npe_node_max / $nth_eposfsoi" | bc) + export npe_node_eposfsoi=$(echo "${npe_node_max} / $nth_eposfsoi" | bc) -elif [ $step = "postsnd" ]; then +elif [ ${step} = "postsnd" ]; then export wtime_postsnd="02:00:00" export npe_postsnd=40 @@ -695,14 +695,14 @@ elif [ $step = "postsnd" ]; then fi if [[ "$machine" = "HERA" ]]; then export npe_node_postsnd=2; fi -elif [ $step = "awips" ]; then +elif [ ${step} = "awips" ]; then export wtime_awips="03:30:00" export npe_awips=4 export npe_node_awips=4 export nth_awips=2 -elif [ $step = "gempak" ]; then +elif [ ${step} = "gempak" ]; then export wtime_gempak="02:00:00" export npe_gempak=28 @@ -711,7 +711,7 @@ elif [ $step = "gempak" ]; then else - echo "Invalid step = $step, ABORT!" + echo "Invalid step = ${step}, ABORT!" exit 2 fi From 01401d55608e80980074bd9265b6728c25b9e090 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Wed, 14 Sep 2022 14:54:38 -0500 Subject: [PATCH 080/103] linter corrections --- ush/hpssarch_gen.sh | 96 ++++++++++++++++++++++----------------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/ush/hpssarch_gen.sh b/ush/hpssarch_gen.sh index ac27bd39fcd..0aa27728a1e 100755 --- a/ush/hpssarch_gen.sh +++ b/ush/hpssarch_gen.sh @@ -585,17 +585,17 @@ fi ##end of enkfgdas or enkfgfs #----------------------------------------------------- #----------------------------------------------------- -if [ $type = "efsoigdas" ]; then +if [ "${type}" = "efsoigdas" ]; then #----------------------------------------------------- IAUFHRS_ENKF="6,12,18,24,30" lobsdiag_forenkf=${lobsdiag_forenkf:-".false."} - nfhrs=$(echo $IAUFHRS_ENKF | sed 's/,/ /g') + nfhrs=$(echo "${IAUFHRS_ENKF}" | sed 's/,/ /g') NMEM_ENKF=${NMEM_ENKF:-80} NMEM_EARCGRP=${NMEM_EARCGRP:-10} ##number of ens memebers included in each tarball NTARS=$((NMEM_ENKF/NMEM_EARCGRP)) - [[ $NTARS -eq 0 ]] && NTARS=1 - [[ $((NTARS*NMEM_EARCGRP)) -lt $NMEM_ENKF ]] && NTARS=$((NTARS+1)) + [[ "${NTARS}" -eq 0 ]] && NTARS=1 + [[ $((NTARS*NMEM_EARCGRP)) -lt ${NMEM_ENKF} ]] && NTARS=$((NTARS+1)) NTARS2=$NTARS dirpath="efsoi${CDUMP}.${PDY}/${cyc}/atmos/" @@ -603,40 +603,40 @@ if [ $type = "efsoigdas" ]; then head="${CDUMP}.t${cyc}z." #.................. - rm -f efsoi${CDUMP}.txt - touch efsoi${CDUMP}.txt - - echo "${dirname}${head}enkfstat " >>efsoi${CDUMP}.txt - echo "${dirname}osense_${PDY}${cyc}_init.dat " >>efsoi${CDUMP}.txt - echo "${dirname}${head}abias_int.ensmean " >>efsoi${CDUMP}.txt - if [ -s $ROTDIR/${dirpath}${head}cnvstat.ensmean ]; then - echo "${dirname}${head}cnvstat.ensmean " >>efsoi${CDUMP}.txt + rm -f "efsoi${CDUMP}.txt" + touch "efsoi${CDUMP}.txt" + + echo "${dirname}${head}enkfstat " >>"efsoi${CDUMP}.txt" + echo "${dirname}osense_${PDY}${cyc}_init.dat " >>"efsoi${CDUMP}.txt" + echo "${dirname}${head}abias_int.ensmean " >>"efsoi${CDUMP}.txt" + if [ -s "${ROTDIR}/${dirpath}${head}cnvstat.ensmean" ]; then + echo "${dirname}${head}cnvstat.ensmean " >>"efsoi${CDUMP}.txt" fi - if [ -s $ROTDIR/${dirpath}${head}oznstat.ensmean ]; then - echo "${dirname}${head}oznstat.ensmean " >>efsoi${CDUMP}.txt + if [ -s "${ROTDIR}/${dirpath}${head}oznstat.ensmean" ]; then + echo "${dirname}${head}oznstat.ensmean " >>"efsoi${CDUMP}.txt" fi - if [ -s $ROTDIR/${dirpath}${head}radstat.ensmean ]; then - echo "${dirname}${head}radstat.ensmean " >>efsoi${CDUMP}.txt + if [ -s "${ROTDIR}/${dirpath}${head}radstat.ensmean" ]; then + echo "${dirname}${head}radstat.ensmean " >>"efsoi${CDUMP}.txt" fi for FHR in $nfhrs; do # loop over analysis times in window if [ $FHR -eq 6 ]; then - if [ -s $ROTDIR/${dirpath}${head}atmanl.ensmean${SUFFIX} ]; then - echo "${dirname}${head}atmanl.ensmean${SUFFIX} " >>efsoi${CDUMP}.txt + if [ -s ${ROTDIR}/${dirpath}${head}atmanl.ensmean${SUFFIX} ]; then + echo "${dirname}${head}atmanl.ensmean${SUFFIX} " >>"efsoi${CDUMP}.txt" fi - if [ -s $ROTDIR/${dirpath}${head}atminc.ensmean${SUFFIX} ]; then - echo "${dirname}${head}atminc.ensmean${SUFFIX} " >>efsoi${CDUMP}.txt + if [ -s ${ROTDIR}/${dirpath}${head}atminc.ensmean${SUFFIX} ]; then + echo "${dirname}${head}atminc.ensmean${SUFFIX} " >>"efsoi${CDUMP}.txt" fi else - if [ -s $ROTDIR/${dirpath}${head}atma${FHR}.ensmean${SUFFIX} ]; then - echo "${dirname}${head}atma00${FHR}.ensmean${SUFFIX} " >>efsoi${CDUMP}.txt + if [ -s ${ROTDIR}/${dirpath}${head}atma${FHR}.ensmean${SUFFIX} ]; then + echo "${dirname}${head}atma00${FHR}.ensmean${SUFFIX} " >>"efsoi${CDUMP}.txt" fi - if [ -s $ROTDIR/${dirpath}${head}atmi${FHR}.ensmean${SUFFIX} ]; then - echo "${dirname}${head}atmi00${FHR}.ensmean${SUFFIX} " >>efsoi${CDUMP}.txt + if [ -s ${ROTDIR}/${dirpath}${head}atmi${FHR}.ensmean${SUFFIX} ]; then + echo "${dirname}${head}atmi00${FHR}.ensmean${SUFFIX} " >>"efsoi${CDUMP}.txt" fi fi done # loop over FHR for fstep in ecenfsoi esfcfsoi eupdfsoi efcsfsoi eposfsoi ; do - echo "logs/${CDATE}/${CDUMP}${fstep}*.log " >>efsoi${CDUMP}.txt + echo "logs/${CDATE}/${CDUMP}${fstep}*.log " >>"efsoi${CDUMP}.txt" done @@ -644,11 +644,11 @@ if [ $type = "efsoigdas" ]; then fh=6 while [ $fh -le 30 ]; do fhr=$(printf %03i $fh) - echo "${dirname}${head}atmf${fhr}.ensmean${SUFFIX} " >>efsoi${CDUMP}.txt - echo "${dirname}${head}sfcf${fhr}.ensmean${SUFFIX} " >>efsoi${CDUMP}.txt + echo "${dirname}${head}atmf${fhr}.ensmean${SUFFIX} " >>"efsoi${CDUMP}.txt" + echo "${dirname}${head}sfcf${fhr}.ensmean${SUFFIX} " >>"efsoi${CDUMP}.txt" if [ $OUTPUT_FILE = "netcdf" ]; then - if [ -s $ROTDIR/${dirpath}${head}atmf${fhr}.ensspread${SUFFIX} ]; then - echo "${dirname}${head}atmf${fhr}.ensspread${SUFFIX} " >>efsoi${CDUMP}.txt + if [ -s ${ROTDIR}/${dirpath}${head}atmf${fhr}.ensspread${SUFFIX} ]; then + echo "${dirname}${head}atmf${fhr}.ensspread${SUFFIX} " >>"efsoi${CDUMP}.txt" fi fi fh=$((fh+6)) @@ -659,10 +659,10 @@ if [ $type = "efsoigdas" ]; then while [ $n -le $NTARS ]; do #........................... - rm -f efsoi${CDUMP}_grp${n}.txt + rm -f "efsoi${CDUMP}_grp${n}.txt" rm -f efsoi${CDUMP}_restarta_grp${n}.txt rm -f efsoi${CDUMP}_restartb_grp${n}.txt - touch efsoi${CDUMP}_grp${n}.txt + touch "efsoi${CDUMP}_grp${n}.txt" touch efsoi${CDUMP}_restarta_grp${n}.txt touch efsoi${CDUMP}_restartb_grp${n}.txt @@ -678,46 +678,46 @@ if [ $type = "efsoigdas" ]; then for FHR in $nfhrs; do # loop over analysis times in window if [ $FHR -eq 6 ]; then if [ $n -le $NTARS2 ]; then - if [ -s $ROTDIR/${dirpath}${head}atmanl${SUFFIX} ] ; then - echo "${dirname}${head}atmanl${SUFFIX} " >>efsoi${CDUMP}_grp${n}.txt + if [ -s ${ROTDIR}/${dirpath}${head}atmanl${SUFFIX} ] ; then + echo "${dirname}${head}atmanl${SUFFIX} " >>"efsoi${CDUMP}_grp${n}.txt" fi - if [ -s $ROTDIR/${dirpath}${head}ratminc${SUFFIX} ] ; then - echo "${dirname}${head}ratminc${SUFFIX} " >>efsoi${CDUMP}_grp${n}.txt + if [ -s ${ROTDIR}/${dirpath}${head}ratminc${SUFFIX} ] ; then + echo "${dirname}${head}ratminc${SUFFIX} " >>"efsoi${CDUMP}_grp${n}.txt" fi fi - if [ -s $ROTDIR/${dirpath}${head}ratminc${SUFFIX} ] ; then + if [ -s ${ROTDIR}/${dirpath}${head}ratminc${SUFFIX} ] ; then echo "${dirname}${head}ratminc${SUFFIX} " >>efsoi${CDUMP}_restarta_grp${n}.txt fi else if [ $n -le $NTARS2 ]; then - if [ -s $ROTDIR/${dirpath}${head}atma${FHR}${SUFFIX} ] ; then - echo "${dirname}${head}atma${FHR}${SUFFIX} " >>efsoi${CDUMP}_grp${n}.txt + if [ -s ${ROTDIR}/${dirpath}${head}atma${FHR}${SUFFIX} ] ; then + echo "${dirname}${head}atma${FHR}${SUFFIX} " >>"efsoi${CDUMP}_grp${n}.txt" fi - if [ -s $ROTDIR/${dirpath}${head}ratmi${FHR}${SUFFIX} ] ; then - echo "${dirname}${head}ratmi${FHR}${SUFFIX} " >>efsoi${CDUMP}_grp${n}.txt + if [ -s ${ROTDIR}/${dirpath}${head}ratmi${FHR}${SUFFIX} ] ; then + echo "${dirname}${head}ratmi${FHR}${SUFFIX} " >>"efsoi${CDUMP}_grp${n}.txt" fi fi - if [ -s $ROTDIR/${dirpath}${head}ratmi${FHR}${SUFFIX} ] ; then + if [ -s ${ROTDIR}/${dirpath}${head}ratmi${FHR}${SUFFIX} ] ; then echo "${dirname}${head}ratmi${FHR}${SUFFIX} " >>efsoi${CDUMP}_restarta_grp${n}.txt fi fi - echo "${dirname}${head}atmf${FHR}${SUFFIX} " >>efsoi${CDUMP}_grp${n}.txt + echo "${dirname}${head}atmf${FHR}${SUFFIX} " >>"efsoi${CDUMP}_grp${n}.txt" if [ $FHR -eq 6 ]; then - echo "${dirname}${head}sfcf${FHR}${SUFFIX} " >>efsoi${CDUMP}_grp${n}.txt + echo "${dirname}${head}sfcf${FHR}${SUFFIX} " >>"efsoi${CDUMP}_grp${n}.txt" fi done # loop over FHR if [[ lobsdiag_forenkf = ".false." ]] ; then - echo "${dirname}${head}gsistat " >>efsoi${CDUMP}_grp${n}.txt - if [ -s $ROTDIR/${dirpath}${head}cnvstat ] ; then - echo "${dirname}${head}cnvstat " >>efsoi${CDUMP}_grp${n}.txt + echo "${dirname}${head}gsistat " >>"efsoi${CDUMP}_grp${n}.txt" + if [ -s ${ROTDIR}/${dirpath}${head}cnvstat ] ; then + echo "${dirname}${head}cnvstat " >>"efsoi${CDUMP}_grp${n}.txt" fi - if [ -s $ROTDIR/${dirpath}${head}radstat ]; then + if [ -s ${ROTDIR}/${dirpath}${head}radstat ]; then echo "${dirname}${head}radstat " >>efsoi${CDUMP}_restarta_grp${n}.txt fi - if [ -s $ROTDIR/${dirpath}${head}cnvstat ]; then + if [ -s ${ROTDIR}/${dirpath}${head}cnvstat ]; then echo "${dirname}${head}cnvstat " >>efsoi${CDUMP}_restarta_grp${n}.txt fi echo "${dirname}${head}abias " >>efsoi${CDUMP}_restarta_grp${n}.txt From 45df95b7288e18da65d3c413d22d4445ff2c6de0 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Wed, 14 Sep 2022 15:14:14 -0500 Subject: [PATCH 081/103] linter corrections --- ush/hpssarch_gen.sh | 94 ++++++++++++++++++++++----------------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/ush/hpssarch_gen.sh b/ush/hpssarch_gen.sh index 0aa27728a1e..31f1c108014 100755 --- a/ush/hpssarch_gen.sh +++ b/ush/hpssarch_gen.sh @@ -596,7 +596,7 @@ if [ "${type}" = "efsoigdas" ]; then NTARS=$((NMEM_ENKF/NMEM_EARCGRP)) [[ "${NTARS}" -eq 0 ]] && NTARS=1 [[ $((NTARS*NMEM_EARCGRP)) -lt ${NMEM_ENKF} ]] && NTARS=$((NTARS+1)) - NTARS2=$NTARS + NTARS2=${NTARS} dirpath="efsoi${CDUMP}.${PDY}/${cyc}/atmos/" dirname="./${dirpath}" @@ -618,19 +618,19 @@ if [ "${type}" = "efsoigdas" ]; then if [ -s "${ROTDIR}/${dirpath}${head}radstat.ensmean" ]; then echo "${dirname}${head}radstat.ensmean " >>"efsoi${CDUMP}.txt" fi - for FHR in $nfhrs; do # loop over analysis times in window - if [ $FHR -eq 6 ]; then - if [ -s ${ROTDIR}/${dirpath}${head}atmanl.ensmean${SUFFIX} ]; then + for FHR in ${nfhrs}; do # loop over analysis times in window + if [ "${FHR}" -eq 6 ]; then + if [ -s "${ROTDIR}/${dirpath}${head}atmanl.ensmean${SUFFIX}" ]; then echo "${dirname}${head}atmanl.ensmean${SUFFIX} " >>"efsoi${CDUMP}.txt" fi - if [ -s ${ROTDIR}/${dirpath}${head}atminc.ensmean${SUFFIX} ]; then + if [ -s "${ROTDIR}/${dirpath}${head}atminc.ensmean${SUFFIX}" ]; then echo "${dirname}${head}atminc.ensmean${SUFFIX} " >>"efsoi${CDUMP}.txt" fi else - if [ -s ${ROTDIR}/${dirpath}${head}atma${FHR}.ensmean${SUFFIX} ]; then + if [ -s "${ROTDIR}/${dirpath}${head}atma${FHR}.ensmean${SUFFIX}" ]; then echo "${dirname}${head}atma00${FHR}.ensmean${SUFFIX} " >>"efsoi${CDUMP}.txt" fi - if [ -s ${ROTDIR}/${dirpath}${head}atmi${FHR}.ensmean${SUFFIX} ]; then + if [ -s "${ROTDIR}/${dirpath}${head}atmi${FHR}.ensmean${SUFFIX}" ]; then echo "${dirname}${head}atmi00${FHR}.ensmean${SUFFIX} " >>"efsoi${CDUMP}.txt" fi fi @@ -642,12 +642,12 @@ if [ "${type}" = "efsoigdas" ]; then # Ensemble spread file only available with netcdf output fh=6 - while [ $fh -le 30 ]; do - fhr=$(printf %03i $fh) + while [ "${fh}" -le 30 ]; do + fhr=$(printf %03i "${fh}") echo "${dirname}${head}atmf${fhr}.ensmean${SUFFIX} " >>"efsoi${CDUMP}.txt" echo "${dirname}${head}sfcf${fhr}.ensmean${SUFFIX} " >>"efsoi${CDUMP}.txt" - if [ $OUTPUT_FILE = "netcdf" ]; then - if [ -s ${ROTDIR}/${dirpath}${head}atmf${fhr}.ensspread${SUFFIX} ]; then + if [ "${OUTPUT_FILE} = "netcdf" ]; then + if [ -s "${ROTDIR}/${dirpath}${head}atmf${fhr}.ensspread${SUFFIX}" ]; then echo "${dirname}${head}atmf${fhr}.ensspread${SUFFIX} " >>"efsoi${CDUMP}.txt" fi fi @@ -656,85 +656,85 @@ if [ "${type}" = "efsoigdas" ]; then #........................... n=1 - while [ $n -le $NTARS ]; do + while [ "${n}" -le "${NTARS}" ]; do #........................... rm -f "efsoi${CDUMP}_grp${n}.txt" - rm -f efsoi${CDUMP}_restarta_grp${n}.txt - rm -f efsoi${CDUMP}_restartb_grp${n}.txt + rm -f "efsoi${CDUMP}_restarta_grp${n}.txt" + rm -f "efsoi${CDUMP}_restartb_grp${n}.txt" touch "efsoi${CDUMP}_grp${n}.txt" - touch efsoi${CDUMP}_restarta_grp${n}.txt - touch efsoi${CDUMP}_restartb_grp${n}.txt + touch "efsoi${CDUMP}_restarta_grp${n}.txt" + touch "efsoi${CDUMP}_restartb_grp${n}.txt" m=1 - while [ $m -le $NMEM_EARCGRP ]; do + while [ "${m}" -le "${NMEM_EARCGRP}" ]; do nm=$(((n-1)*NMEM_EARCGRP+m)) - mem=$(printf %03i $nm) + mem=$(printf %03i "${nm}") dirpath="efsoi${CDUMP}.${PDY}/${cyc}/atmos/mem${mem}/" dirname="./${dirpath}" head="${CDUMP}.t${cyc}z." #--- - for FHR in $nfhrs; do # loop over analysis times in window - if [ $FHR -eq 6 ]; then - if [ $n -le $NTARS2 ]; then - if [ -s ${ROTDIR}/${dirpath}${head}atmanl${SUFFIX} ] ; then + for FHR in "${nfhrs}; do # loop over analysis times in window + if [ "${FHR}" -eq 6 ]; then + if [ "${n}" -le "${NTARS2} ]; then + if [ -s "${ROTDIR}/${dirpath}${head}atmanl${SUFFIX}" ] ; then echo "${dirname}${head}atmanl${SUFFIX} " >>"efsoi${CDUMP}_grp${n}.txt" fi - if [ -s ${ROTDIR}/${dirpath}${head}ratminc${SUFFIX} ] ; then + if [ -s "${ROTDIR}/${dirpath}${head}ratminc${SUFFIX}" ] ; then echo "${dirname}${head}ratminc${SUFFIX} " >>"efsoi${CDUMP}_grp${n}.txt" fi fi - if [ -s ${ROTDIR}/${dirpath}${head}ratminc${SUFFIX} ] ; then - echo "${dirname}${head}ratminc${SUFFIX} " >>efsoi${CDUMP}_restarta_grp${n}.txt + if [ -s "${ROTDIR}/${dirpath}${head}ratminc${SUFFIX}" ] ; then + echo "${dirname}${head}ratminc${SUFFIX} " >>"efsoi${CDUMP}_restarta_grp${n}.txt" fi else - if [ $n -le $NTARS2 ]; then - if [ -s ${ROTDIR}/${dirpath}${head}atma${FHR}${SUFFIX} ] ; then + if [ "${n} -le "${NTARS2} ]; then + if [ -s "${ROTDIR}/${dirpath}${head}atma${FHR}${SUFFIX}" ] ; then echo "${dirname}${head}atma${FHR}${SUFFIX} " >>"efsoi${CDUMP}_grp${n}.txt" fi - if [ -s ${ROTDIR}/${dirpath}${head}ratmi${FHR}${SUFFIX} ] ; then + if [ -s "${ROTDIR}/${dirpath}${head}ratmi${FHR}${SUFFIX}" ] ; then echo "${dirname}${head}ratmi${FHR}${SUFFIX} " >>"efsoi${CDUMP}_grp${n}.txt" fi fi - if [ -s ${ROTDIR}/${dirpath}${head}ratmi${FHR}${SUFFIX} ] ; then - echo "${dirname}${head}ratmi${FHR}${SUFFIX} " >>efsoi${CDUMP}_restarta_grp${n}.txt + if [ -s "${ROTDIR}/${dirpath}${head}ratmi${FHR}${SUFFIX}" ] ; then + echo "${dirname}${head}ratmi${FHR}${SUFFIX} " >>"efsoi${CDUMP}_restarta_grp${n}.txt" fi fi echo "${dirname}${head}atmf${FHR}${SUFFIX} " >>"efsoi${CDUMP}_grp${n}.txt" - if [ $FHR -eq 6 ]; then + if [ "${FHR}" -eq 6 ]; then echo "${dirname}${head}sfcf${FHR}${SUFFIX} " >>"efsoi${CDUMP}_grp${n}.txt" fi done # loop over FHR if [[ lobsdiag_forenkf = ".false." ]] ; then echo "${dirname}${head}gsistat " >>"efsoi${CDUMP}_grp${n}.txt" - if [ -s ${ROTDIR}/${dirpath}${head}cnvstat ] ; then + if [ -s "${ROTDIR}/${dirpath}${head}cnvstat" ] ; then echo "${dirname}${head}cnvstat " >>"efsoi${CDUMP}_grp${n}.txt" fi - if [ -s ${ROTDIR}/${dirpath}${head}radstat ]; then - echo "${dirname}${head}radstat " >>efsoi${CDUMP}_restarta_grp${n}.txt + if [ -s "${ROTDIR}/${dirpath}${head}radstat" ]; then + echo "${dirname}${head}radstat " >>"efsoi${CDUMP}_restarta_grp${n}.txt" fi - if [ -s ${ROTDIR}/${dirpath}${head}cnvstat ]; then - echo "${dirname}${head}cnvstat " >>efsoi${CDUMP}_restarta_grp${n}.txt + if [ -s "${ROTDIR}/${dirpath}${head}cnvstat" ]; then + echo "${dirname}${head}cnvstat " >>"efsoi${CDUMP}_restarta_grp${n}.txt" fi - echo "${dirname}${head}abias " >>efsoi${CDUMP}_restarta_grp${n}.txt - echo "${dirname}${head}abias_air " >>efsoi${CDUMP}_restarta_grp${n}.txt - echo "${dirname}${head}abias_int " >>efsoi${CDUMP}_restarta_grp${n}.txt - echo "${dirname}${head}abias_pc " >>efsoi${CDUMP}_restarta_grp${n}.txt + echo "${dirname}${head}abias " >>"efsoi${CDUMP}_restarta_grp${n}.txt" + echo "${dirname}${head}abias_air " >>"efsoi${CDUMP}_restarta_grp${n}.txt" + echo "${dirname}${head}abias_int " >>"efsoi${CDUMP}_restarta_grp${n}.txt" + echo "${dirname}${head}abias_pc " >>"efsoi${CDUMP}_restarta_grp${n}.txt" fi #--- - echo "${dirname}RESTART/*0000.sfcanl_data.tile1.nc " >>efsoi${CDUMP}_restarta_grp${n}.txt - echo "${dirname}RESTART/*0000.sfcanl_data.tile2.nc " >>efsoi${CDUMP}_restarta_grp${n}.txt - echo "${dirname}RESTART/*0000.sfcanl_data.tile3.nc " >>efsoi${CDUMP}_restarta_grp${n}.txt - echo "${dirname}RESTART/*0000.sfcanl_data.tile4.nc " >>efsoi${CDUMP}_restarta_grp${n}.txt - echo "${dirname}RESTART/*0000.sfcanl_data.tile5.nc " >>efsoi${CDUMP}_restarta_grp${n}.txt - echo "${dirname}RESTART/*0000.sfcanl_data.tile6.nc " >>efsoi${CDUMP}_restarta_grp${n}.txt + echo "${dirname}RESTART/*0000.sfcanl_data.tile1.nc " >>"efsoi${CDUMP}_restarta_grp${n}.txt" + echo "${dirname}RESTART/*0000.sfcanl_data.tile2.nc " >>"efsoi${CDUMP}_restarta_grp${n}.txt" + echo "${dirname}RESTART/*0000.sfcanl_data.tile3.nc " >>"efsoi${CDUMP}_restarta_grp${n}.txt" + echo "${dirname}RESTART/*0000.sfcanl_data.tile4.nc " >>"efsoi${CDUMP}_restarta_grp${n}.txt" + echo "${dirname}RESTART/*0000.sfcanl_data.tile5.nc " >>"efsoi${CDUMP}_restarta_grp${n}.txt" + echo "${dirname}RESTART/*0000.sfcanl_data.tile6.nc " >>"efsoi${CDUMP}_restarta_grp${n}.txt" #--- - echo "${dirname}RESTART " >>efsoi${CDUMP}_restartb_grp${n}.txt + echo "${dirname}RESTART " >>"efsoi${CDUMP}_restartb_grp${n}.txt" m=$((m+1)) done From ec83d4dc55d98f19d9ce8b034e3b01dbe46ef617 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Wed, 14 Sep 2022 15:26:50 -0500 Subject: [PATCH 082/103] linter corrections --- jobs/JGDAS_EFSOI | 2 +- jobs/rocoto/earc.sh | 2 +- jobs/rocoto/ecenfsoi.sh | 2 +- ush/hpssarch_gen.sh | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/jobs/JGDAS_EFSOI b/jobs/JGDAS_EFSOI index 906ee6f2eca..7c11b0cfd73 100755 --- a/jobs/JGDAS_EFSOI +++ b/jobs/JGDAS_EFSOI @@ -131,7 +131,7 @@ fi ########################################## cd "${DATAROOT}" -[[ "${KEEPDATA}" = "NO" ]] && rm -rf ${DATA} +[[ "${KEEPDATA}" = "NO" ]] && rm -rf "${DATA}" exit 0 diff --git a/jobs/rocoto/earc.sh b/jobs/rocoto/earc.sh index 372c691b6e7..6b130c43d5a 100755 --- a/jobs/rocoto/earc.sh +++ b/jobs/rocoto/earc.sh @@ -136,7 +136,7 @@ if [[ $ENSGRP -gt 0 ]] && [[ $HPSSARCH = "YES" || $LOCALARCH = "YES" ]]; then exit "${status}" fi - if [ [ $SAVEWARMICA = "YES" ] && [ $cyc -eq $EARCINC_CYC ] ]; then + if [ $SAVEWARMICA = "YES" -a $cyc -eq $EARCINC_CYC ]; then $TARCMD -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}_restarta_grp${ENSGRP}.tar $(cat $ARCH_LIST/efsoi${CDUMP}_restarta_grp${n}.txt) status=$? if [ $status -ne 0 ]; then diff --git a/jobs/rocoto/ecenfsoi.sh b/jobs/rocoto/ecenfsoi.sh index 205004bfd1d..a6f92308998 100755 --- a/jobs/rocoto/ecenfsoi.sh +++ b/jobs/rocoto/ecenfsoi.sh @@ -20,7 +20,7 @@ for fhr in ${fhrlst}; do "${HOMEgfs}/jobs/JGDAS_EFSOI_ECEN" status=$? - [[ ${status} -ne 0 ]] && exit ${status} + [[ "${status}" -ne 0 ]] && exit "${status}" done diff --git a/ush/hpssarch_gen.sh b/ush/hpssarch_gen.sh index 31f1c108014..1a3bbcd6629 100755 --- a/ush/hpssarch_gen.sh +++ b/ush/hpssarch_gen.sh @@ -646,7 +646,7 @@ if [ "${type}" = "efsoigdas" ]; then fhr=$(printf %03i "${fh}") echo "${dirname}${head}atmf${fhr}.ensmean${SUFFIX} " >>"efsoi${CDUMP}.txt" echo "${dirname}${head}sfcf${fhr}.ensmean${SUFFIX} " >>"efsoi${CDUMP}.txt" - if [ "${OUTPUT_FILE} = "netcdf" ]; then + if [ "${OUTPUT_FILE}" = "netcdf" ]; then if [ -s "${ROTDIR}/${dirpath}${head}atmf${fhr}.ensspread${SUFFIX}" ]; then echo "${dirname}${head}atmf${fhr}.ensspread${SUFFIX} " >>"efsoi${CDUMP}.txt" fi From 209110d0e22f3dd589d2a39bbe25b6e8193230b6 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Wed, 14 Sep 2022 15:33:55 -0500 Subject: [PATCH 083/103] linter corrections --- jobs/rocoto/earc.sh | 2 +- jobs/rocoto/efsoi.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/jobs/rocoto/earc.sh b/jobs/rocoto/earc.sh index 6b130c43d5a..1a868010837 100755 --- a/jobs/rocoto/earc.sh +++ b/jobs/rocoto/earc.sh @@ -145,7 +145,7 @@ if [[ $ENSGRP -gt 0 ]] && [[ $HPSSARCH = "YES" || $LOCALARCH = "YES" ]]; then fi fi - if [ [ $SAVEWARMICB = "YES" ] && [ $cyc -eq $EARCICS_CYC ] ]; then + if [ $SAVEWARMICB = "YES" -a $cyc -eq $EARCICS_CYC ]; then $TARCMD -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}_restartb_grp${ENSGRP}.tar $(cat $ARCH_LIST/efsoi${CDUMP}_restartb_grp${n}.txt) status=$? if [ "${status}" -ne 0 ]; then diff --git a/jobs/rocoto/efsoi.sh b/jobs/rocoto/efsoi.sh index 699978c055c..076a2a6276e 100755 --- a/jobs/rocoto/efsoi.sh +++ b/jobs/rocoto/efsoi.sh @@ -6,7 +6,7 @@ source "${HOMEgfs}/ush/preamble.sh" # Source FV3GFS workflow modules . "${HOMEgfs}/ush/load_fv3gfs_modules.sh" status=$? -[[ ${status} -ne 0 ]] && exit ${status} +[[ "${status}" -ne 0 ]] && exit "${status}" ############################################################### # Execute the JJOB From 71453d306f79640086a6506cc9e6acae57497ba4 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Wed, 14 Sep 2022 15:46:03 -0500 Subject: [PATCH 084/103] linter corrections --- jobs/rocoto/earc.sh | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/jobs/rocoto/earc.sh b/jobs/rocoto/earc.sh index 1a868010837..0fc620e771d 100755 --- a/jobs/rocoto/earc.sh +++ b/jobs/rocoto/earc.sh @@ -19,7 +19,7 @@ source "$HOMEgfs/ush/preamble.sh" # Source FV3GFS workflow modules . $HOMEgfs/ush/load_fv3gfs_modules.sh status=$? -[[ $status -ne 0 ]] && exit $status +[[ "${status}" -ne 0 ]] && exit "${status}" ############################################################### # Source relevant configs @@ -27,7 +27,7 @@ configs="base earc" for config in $configs; do . $EXPDIR/config.${config} status=$? - [[ $status -ne 0 ]] && exit $status + [[ "${status}" -ne 0 ]] && exit "${status}" done export COMPONENT=${COMPONENT:-atmos} @@ -51,17 +51,17 @@ cd $ARCH_LIST $HOMEgfs/ush/hpssarch_gen.sh enkf${CDUMP} status=$? -if [ $status -ne 0 ]; then +if [ "${status}" -ne 0 ]; then echo "$HOMEgfs/ush/hpssarch_gen.sh enkf${CDUMP} failed, ABORT!" - exit $status + exit "${status}" fi if [ $DO_EFSOI = "YES" ]; then $HOMEgfs/ush/hpssarch_gen.sh efsoigdas status=$? - if [ $status -ne 0 ]; then + if [ "${status}" -ne 0 ]; then echo "$HOMEgfs/ush/hpssarch_gen_EFSOI.sh enkf${CDUMP} failed, ABORT!" - exit $status + exit "${status}" fi fi @@ -105,41 +105,41 @@ if [[ $ENSGRP -gt 0 ]] && [[ $HPSSARCH = "YES" || $LOCALARCH = "YES" ]]; then $TARCMD -P -cvf $ATARDIR/$CDATE/enkf${CDUMP}_grp${ENSGRP}.tar $(cat $ARCH_LIST/enkf${CDUMP}_grp${n}.txt) status=$? - if [ $status -ne 0 -a $CDATE -ge $firstday ]; then + if [ "${status}" -ne 0 -a $CDATE -ge $firstday ]; then echo "$(echo $TARCMD | tr 'a-z' 'A-Z') $CDATE enkf${CDUMP}_grp${ENSGRP}.tar failed" - exit $status + exit "${status}" fi if [ $SAVEWARMICA = "YES" -a $cyc -eq $EARCINC_CYC ]; then $TARCMD -P -cvf $ATARDIR/$CDATE/enkf${CDUMP}_restarta_grp${ENSGRP}.tar $(cat $ARCH_LIST/enkf${CDUMP}_restarta_grp${n}.txt) status=$? - if [ $status -ne 0 ]; then + if [ "${status}" -ne 0 ]; then echo "$(echo $TARCMD | tr 'a-z' 'A-Z') $CDATE enkf${CDUMP}_restarta_grp${ENSGRP}.tar failed" - exit $status + exit "${status}" fi fi if [ $SAVEWARMICB = "YES" -a $cyc -eq $EARCICS_CYC ]; then $TARCMD -P -cvf $ATARDIR/$CDATE/enkf${CDUMP}_restartb_grp${ENSGRP}.tar $(cat $ARCH_LIST/enkf${CDUMP}_restartb_grp${n}.txt) status=$? - if [ $status -ne 0 ]; then + if [ "${status}" -ne 0 ]; then echo "$(echo $TARCMD | tr 'a-z' 'A-Z') $CDATE enkf${CDUMP}_restartb_grp${ENSGRP}.tar failed" - exit $status + exit "${status}" fi fi if [ $DO_EFSOI = "YES" ]; then $TARCMD -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}_grp${ENSGRP}.tar $(cat $ARCH_LIST/efsoi${CDUMP}_grp${n}.txt) status=$? - if [ $status -ne 0 -a $CDATE -ge $firstday ]; then + if [ "${status}" -ne 0 -a $CDATE -ge $firstday ]; then echo "HTAR $CDATE efsoi${CDUMP}_grp${ENSGRP}.tar failed" exit "${status}" fi - if [ $SAVEWARMICA = "YES" -a $cyc -eq $EARCINC_CYC ]; then + if [ $SAVEWARMICA = "YES" ] && [ $cyc -eq $EARCINC_CYC ]; then $TARCMD -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}_restarta_grp${ENSGRP}.tar $(cat $ARCH_LIST/efsoi${CDUMP}_restarta_grp${n}.txt) status=$? - if [ $status -ne 0 ]; then + if [ "${status}" -ne 0 ]; then echo "HTAR $CDATE efsoi${CDUMP}_restarta_grp${ENSGRP}.tar failed" exit "${status}" fi @@ -179,17 +179,17 @@ if [ $ENSGRP -eq 0 ]; then set +e $TARCMD -P -cvf $ATARDIR/$CDATE/enkf${CDUMP}.tar $(cat $ARCH_LIST/enkf${CDUMP}.txt) status=$? - if [ $status -ne 0 -a $CDATE -ge $firstday ]; then + if [ "${status}" -ne 0 -a $CDATE -ge $firstday ]; then echo "$(echo $TARCMD | tr 'a-z' 'A-Z') $CDATE enkf${CDUMP}.tar failed" - exit $status + exit "${status}" fi if [ $DO_EFSOI = "YES" ]; then $TARCMD -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}.tar $(cat $ARCH_LIST/efsoi${CDUMP}.txt) status=$? - if [ $status -ne 0 -a $CDATE -ge $firstday ]; then + if [ "${status}" -ne 0 -a $CDATE -ge $firstday ]; then echo "HTAR $CDATE efsoi${CDUMP}.tar failed" - exit $status + exit "${status}" fi fi # $DO_EFSOI = "YES" From d87ce5bba8c9f79a7d8f25004e6712985984b547 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 15 Sep 2022 08:56:58 -0500 Subject: [PATCH 085/103] linter corrections --- jobs/rocoto/earc.sh | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/jobs/rocoto/earc.sh b/jobs/rocoto/earc.sh index 0fc620e771d..03c1e555daa 100755 --- a/jobs/rocoto/earc.sh +++ b/jobs/rocoto/earc.sh @@ -137,7 +137,7 @@ if [[ $ENSGRP -gt 0 ]] && [[ $HPSSARCH = "YES" || $LOCALARCH = "YES" ]]; then fi if [ $SAVEWARMICA = "YES" ] && [ $cyc -eq $EARCINC_CYC ]; then - $TARCMD -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}_restarta_grp${ENSGRP}.tar $(cat $ARCH_LIST/efsoi${CDUMP}_restarta_grp${n}.txt) + $TARCMD -P -cvf "$ATARDIR/$CDATE/efsoi${CDUMP}_restarta_grp${ENSGRP}.tar" $(cat $ARCH_LIST/efsoi${CDUMP}_restarta_grp${n}.txt) status=$? if [ "${status}" -ne 0 ]; then echo "HTAR $CDATE efsoi${CDUMP}_restarta_grp${ENSGRP}.tar failed" @@ -145,8 +145,8 @@ if [[ $ENSGRP -gt 0 ]] && [[ $HPSSARCH = "YES" || $LOCALARCH = "YES" ]]; then fi fi - if [ $SAVEWARMICB = "YES" -a $cyc -eq $EARCICS_CYC ]; then - $TARCMD -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}_restartb_grp${ENSGRP}.tar $(cat $ARCH_LIST/efsoi${CDUMP}_restartb_grp${n}.txt) + if [ $SAVEWARMICB = "YES" ] && [ $cyc -eq $EARCICS_CYC ]; then + $TARCMD -P -cvf "$ATARDIR/$CDATE/efsoi${CDUMP}_restartb_grp${ENSGRP}.tar" $(cat $ARCH_LIST/efsoi${CDUMP}_restartb_grp${n}.txt) status=$? if [ "${status}" -ne 0 ]; then echo "HTAR $CDATE efsoi${CDUMP}_restartb_grp${ENSGRP}.tar failed" @@ -185,7 +185,7 @@ if [ $ENSGRP -eq 0 ]; then fi if [ $DO_EFSOI = "YES" ]; then - $TARCMD -P -cvf $ATARDIR/$CDATE/efsoi${CDUMP}.tar $(cat $ARCH_LIST/efsoi${CDUMP}.txt) + $TARCMD -P -cvf "$ATARDIR/$CDATE/efsoi${CDUMP}.tar" $(cat $ARCH_LIST/efsoi${CDUMP}.txt) status=$? if [ "${status}" -ne 0 -a $CDATE -ge $firstday ]; then echo "HTAR $CDATE efsoi${CDUMP}.tar failed" @@ -251,26 +251,26 @@ if [ $ENSGRP -eq 0 ]; then fi done - if [ $DO_EFSOI = "YES" ]; then - COMIN_ENS="$ROTDIR/efsoigdas.$gPDY/$gcyc/$COMPONENT" - if [ -d $COMIN_ENS ] ; then - rm -rf $COMIN_ENS/*f012*nc - rm -rf $COMIN_ENS/*f018*nc - for imem in $(seq 1 $NMEM_ENKF); do - memchar="mem"$(printf %03i $imem) - for file in $(ls $COMIN_ENS/$memchar |grep -v atmf024); do - rm -rf $COMIN_ENS/$memchar/$file + if [ "${DO_EFSOI}" = "YES" ]; then + COMIN_ENS="$i{ROTDIR}/efsoigdas.${gPDY}/${gcyc}/${COMPONENT}" + if [ -d "${COMIN_ENS}" ] ; then + rm -rf "${COMIN_ENS}/*f012*nc" + rm -rf "${COMIN_ENS}/*f018*nc" + for imem in $(seq 1 "${NMEM_ENKF}); do + memchar="mem"$(printf %03i "${imem}") + for file in $(ls "${COMIN_ENS}/${memchar}" |grep -v atmf024); do + rm -rf "${COMIN_ENS}/${memchar}/${file}" done done fi fi # $DO_EFSOI = "YES" # Advance to next cycle - GDATE=$($NDATE +$assim_freq $GDATE) + GDATE=$("${NDATE}" +"${assim_freq}" "${GDATE}") done - if [ $DO_EFSOI = "YES" ]; then + if [ "${DO_EFSOI}" = "YES" ]; then # Now do EFSOI - needs to be kept around longer # Start start and end dates to remove GDATEEND=$($NDATE -${RMOLDEND_EFSOI:-36} $CDATE) From dcad09f42301b78f208c51c11675c16b2bed5ebf Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 15 Sep 2022 10:19:50 -0500 Subject: [PATCH 086/103] linter corrections --- jobs/rocoto/earc.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jobs/rocoto/earc.sh b/jobs/rocoto/earc.sh index 03c1e555daa..b439e367d00 100755 --- a/jobs/rocoto/earc.sh +++ b/jobs/rocoto/earc.sh @@ -256,7 +256,7 @@ if [ $ENSGRP -eq 0 ]; then if [ -d "${COMIN_ENS}" ] ; then rm -rf "${COMIN_ENS}/*f012*nc" rm -rf "${COMIN_ENS}/*f018*nc" - for imem in $(seq 1 "${NMEM_ENKF}); do + for imem in $(seq 1 "${NMEM_ENKF}"); do memchar="mem"$(printf %03i "${imem}") for file in $(ls "${COMIN_ENS}/${memchar}" |grep -v atmf024); do rm -rf "${COMIN_ENS}/${memchar}/${file}" From 8f9a4eb96d68d92ed4a43ce02c1fe908928d3ab7 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 15 Sep 2022 10:35:21 -0500 Subject: [PATCH 087/103] linter corrections --- jobs/rocoto/earc.sh | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/jobs/rocoto/earc.sh b/jobs/rocoto/earc.sh index b439e367d00..f0ccdde2267 100755 --- a/jobs/rocoto/earc.sh +++ b/jobs/rocoto/earc.sh @@ -56,11 +56,11 @@ if [ "${status}" -ne 0 ]; then exit "${status}" fi -if [ $DO_EFSOI = "YES" ]; then - $HOMEgfs/ush/hpssarch_gen.sh efsoigdas +if [ "${DO_EFSOI}" = "YES" ]; then + "${HOMEgfs}/ush/hpssarch_gen.sh efsoigdas" status=$? if [ "${status}" -ne 0 ]; then - echo "$HOMEgfs/ush/hpssarch_gen_EFSOI.sh enkf${CDUMP} failed, ABORT!" + echo "${HOMEgfs}/ush/hpssarch_gen_EFSOI.sh enkf${CDUMP} failed, ABORT!" exit "${status}" fi fi @@ -252,14 +252,14 @@ if [ $ENSGRP -eq 0 ]; then done if [ "${DO_EFSOI}" = "YES" ]; then - COMIN_ENS="$i{ROTDIR}/efsoigdas.${gPDY}/${gcyc}/${COMPONENT}" + COMIN_ENS="${ROTDIR}/efsoigdas.${gPDY}/${gcyc}/${COMPONENT}" if [ -d "${COMIN_ENS}" ] ; then rm -rf "${COMIN_ENS}/*f012*nc" rm -rf "${COMIN_ENS}/*f018*nc" for imem in $(seq 1 "${NMEM_ENKF}"); do memchar="mem"$(printf %03i "${imem}") for file in $(ls "${COMIN_ENS}/${memchar}" |grep -v atmf024); do - rm -rf "${COMIN_ENS}/${memchar}/${file}" + rm -rf "${COMIN_ENS:?}/${memchar}/${file}" done done fi @@ -273,24 +273,24 @@ if [ $ENSGRP -eq 0 ]; then if [ "${DO_EFSOI}" = "YES" ]; then # Now do EFSOI - needs to be kept around longer # Start start and end dates to remove - GDATEEND=$($NDATE -${RMOLDEND_EFSOI:-36} $CDATE) - GDATE=$($NDATE -${RMOLDSTD_ENKF:-120} $CDATE) - while [ $GDATE -le $GDATEEND ]; do + GDATEEND=$("${NDATE}" -${RMOLDEND_EFSOI:-36} "${CDATE}") + GDATE=$("${NDATE}" -${RMOLDSTD_ENKF:-120} "${CDATE}") + while [ "${GDATE}" -le "${GDATEEND}" ]; do - gPDY=$(echo $GDATE | cut -c1-8) - gcyc=$(echo $GDATE | cut -c9-10) + gPDY=$(echo "${GDATE}" | cut -c1-8) + gcyc=$(echo "${GDATE}" | cut -c9-10) - COMIN_ENS="$ROTDIR/efsoigdas.$gPDY/$gcyc/$COMPONENT" - [[ -d $COMIN_ENS ]] && rm -rf $COMIN_ENS + COMIN_ENS="${ROTDIR}/efsoigdas.${gPDY}/${gcyc}/${COMPONENT}" + [[ -d "${COMIN_ENS}" ]] && rm -rf "${COMIN_ENS}" # Remove any empty directories - COMIN_ENS="$ROTDIR/efsoigdas.$gPDY/$COMPONENT" - if [ -d $COMIN_ENS ] ; then - [[ ! "$(ls -A $COMIN_ENS)" ]] && rm -rf $COMIN_ENS + COMIN_ENS="${ROTDIR}/efsoigdas.${gPDY}/${COMPONENT}" + if [ -d "${COMIN_ENS} ] ; then + [[ ! "$(ls -A ${COMIN_ENS})" ]] && rm -rf "${COMIN_ENS}" fi # Advance to next cycle - GDATE=$($NDATE +$assim_freq $GDATE) + GDATE=$("${NDATE}" +$assim_freq "${GDATE}") done fi # $DO_EFSOI = "YES" From e466d7bfbc8f73d82bc56b282c3aa3ce7fa4a5f4 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 15 Sep 2022 10:38:38 -0500 Subject: [PATCH 088/103] linter corrections --- jobs/rocoto/earc.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jobs/rocoto/earc.sh b/jobs/rocoto/earc.sh index f0ccdde2267..9f4b55e1246 100755 --- a/jobs/rocoto/earc.sh +++ b/jobs/rocoto/earc.sh @@ -285,7 +285,7 @@ if [ $ENSGRP -eq 0 ]; then # Remove any empty directories COMIN_ENS="${ROTDIR}/efsoigdas.${gPDY}/${COMPONENT}" - if [ -d "${COMIN_ENS} ] ; then + if [ -d "${COMIN_ENS}" ] ; then [[ ! "$(ls -A ${COMIN_ENS})" ]] && rm -rf "${COMIN_ENS}" fi From 786557cf0806f593bbec2dbe88029adaa61ce7d8 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 15 Sep 2022 10:50:16 -0500 Subject: [PATCH 089/103] linter corrections --- jobs/rocoto/earc.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/jobs/rocoto/earc.sh b/jobs/rocoto/earc.sh index 9f4b55e1246..fcdb01986dc 100755 --- a/jobs/rocoto/earc.sh +++ b/jobs/rocoto/earc.sh @@ -273,7 +273,7 @@ if [ $ENSGRP -eq 0 ]; then if [ "${DO_EFSOI}" = "YES" ]; then # Now do EFSOI - needs to be kept around longer # Start start and end dates to remove - GDATEEND=$("${NDATE}" -${RMOLDEND_EFSOI:-36} "${CDATE}") + GDATEEND=$("${NDATE}" "-${RMOLDEND_EFSOI:-36}" "${CDATE}") GDATE=$("${NDATE}" -${RMOLDSTD_ENKF:-120} "${CDATE}") while [ "${GDATE}" -le "${GDATEEND}" ]; do @@ -286,11 +286,11 @@ if [ $ENSGRP -eq 0 ]; then # Remove any empty directories COMIN_ENS="${ROTDIR}/efsoigdas.${gPDY}/${COMPONENT}" if [ -d "${COMIN_ENS}" ] ; then - [[ ! "$(ls -A ${COMIN_ENS})" ]] && rm -rf "${COMIN_ENS}" + [[ ! "$(ls -A "${COMIN_ENS}")" ]] && rm -rf "${COMIN_ENS}" fi # Advance to next cycle - GDATE=$("${NDATE}" +$assim_freq "${GDATE}") + GDATE=$("${NDATE}" "+${assim_freq}" "${GDATE}") done fi # $DO_EFSOI = "YES" From 808649b51ab3d9293e5b2377e58a7c09dab31237 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 15 Sep 2022 11:05:06 -0500 Subject: [PATCH 090/103] linter corrections --- jobs/JGDAS_EFSOI | 2 +- jobs/rocoto/earc.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/jobs/JGDAS_EFSOI b/jobs/JGDAS_EFSOI index 7c11b0cfd73..9b1a7ce0e73 100755 --- a/jobs/JGDAS_EFSOI +++ b/jobs/JGDAS_EFSOI @@ -21,7 +21,7 @@ done export EFSOI_FORECAST_LENGTH=24 xtime=$((EFSOI_FORECAST_LENGTH+12)) -if [ $CDATE -lt "$($NDATE +$xtime $SDATE)" ]; then +if [ "${CDATE}" -lt "$(${NDATE} +$xtime ${SDATE})" ]; then echo "EFSOI needs a 30-hour EFSOI forecast to run with an analysis from ${CDATE}," echo " so needs to run $xtime hours starting from $SDATE. This efsoi cycle is skipped" exit 0 diff --git a/jobs/rocoto/earc.sh b/jobs/rocoto/earc.sh index fcdb01986dc..c7a89d9fd19 100755 --- a/jobs/rocoto/earc.sh +++ b/jobs/rocoto/earc.sh @@ -286,7 +286,7 @@ if [ $ENSGRP -eq 0 ]; then # Remove any empty directories COMIN_ENS="${ROTDIR}/efsoigdas.${gPDY}/${COMPONENT}" if [ -d "${COMIN_ENS}" ] ; then - [[ ! "$(ls -A "${COMIN_ENS}")" ]] && rm -rf "${COMIN_ENS}" + [[ ! -n "$(ls -A "${COMIN_ENS}")" ]] && rm -rf "${COMIN_ENS}" fi # Advance to next cycle From 074978e793488a6083df4fae2282ed3b80e698e7 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 15 Sep 2022 11:12:07 -0500 Subject: [PATCH 091/103] linter corrections --- ush/hpssarch_gen.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ush/hpssarch_gen.sh b/ush/hpssarch_gen.sh index 1a3bbcd6629..5fc7b283601 100755 --- a/ush/hpssarch_gen.sh +++ b/ush/hpssarch_gen.sh @@ -675,7 +675,7 @@ if [ "${type}" = "efsoigdas" ]; then head="${CDUMP}.t${cyc}z." #--- - for FHR in "${nfhrs}; do # loop over analysis times in window + for FHR in "${nfhrs}"; do # loop over analysis times in window if [ "${FHR}" -eq 6 ]; then if [ "${n}" -le "${NTARS2} ]; then if [ -s "${ROTDIR}/${dirpath}${head}atmanl${SUFFIX}" ] ; then From 583f4bd1ac55edc9e9444843c8fe45c46313b17e Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 15 Sep 2022 11:20:27 -0500 Subject: [PATCH 092/103] linter corrections --- ush/hpssarch_gen.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ush/hpssarch_gen.sh b/ush/hpssarch_gen.sh index 5fc7b283601..c62d2e7171e 100755 --- a/ush/hpssarch_gen.sh +++ b/ush/hpssarch_gen.sh @@ -677,7 +677,7 @@ if [ "${type}" = "efsoigdas" ]; then #--- for FHR in "${nfhrs}"; do # loop over analysis times in window if [ "${FHR}" -eq 6 ]; then - if [ "${n}" -le "${NTARS2} ]; then + if [ "${n}" -le "${NTARS2}" ]; then if [ -s "${ROTDIR}/${dirpath}${head}atmanl${SUFFIX}" ] ; then echo "${dirname}${head}atmanl${SUFFIX} " >>"efsoi${CDUMP}_grp${n}.txt" fi From fb763eb357d0a5ed14fa8170b5521b3f11fcd851 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 15 Sep 2022 11:35:23 -0500 Subject: [PATCH 093/103] linter corrections --- jobs/rocoto/earc.sh | 2 +- ush/hpssarch_gen.sh | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/jobs/rocoto/earc.sh b/jobs/rocoto/earc.sh index c7a89d9fd19..b7264caaa73 100755 --- a/jobs/rocoto/earc.sh +++ b/jobs/rocoto/earc.sh @@ -179,7 +179,7 @@ if [ $ENSGRP -eq 0 ]; then set +e $TARCMD -P -cvf $ATARDIR/$CDATE/enkf${CDUMP}.tar $(cat $ARCH_LIST/enkf${CDUMP}.txt) status=$? - if [ "${status}" -ne 0 -a $CDATE -ge $firstday ]; then + if [ "${status}" -ne 0 ] && [ $CDATE -ge $firstday ]; then echo "$(echo $TARCMD | tr 'a-z' 'A-Z') $CDATE enkf${CDUMP}.tar failed" exit "${status}" fi diff --git a/ush/hpssarch_gen.sh b/ush/hpssarch_gen.sh index c62d2e7171e..03c6fc4d3cd 100755 --- a/ush/hpssarch_gen.sh +++ b/ush/hpssarch_gen.sh @@ -590,7 +590,8 @@ if [ "${type}" = "efsoigdas" ]; then IAUFHRS_ENKF="6,12,18,24,30" lobsdiag_forenkf=${lobsdiag_forenkf:-".false."} - nfhrs=$(echo "${IAUFHRS_ENKF}" | sed 's/,/ /g') + #nfhrs=$(echo "${IAUFHRS_ENKF}" | sed 's/,/ /g') + nfhrs=$(echo "${IAUFHRS_ENKF//,/ }" NMEM_ENKF=${NMEM_ENKF:-80} NMEM_EARCGRP=${NMEM_EARCGRP:-10} ##number of ens memebers included in each tarball NTARS=$((NMEM_ENKF/NMEM_EARCGRP)) @@ -709,7 +710,7 @@ if [ "${type}" = "efsoigdas" ]; then fi done # loop over FHR - if [[ lobsdiag_forenkf = ".false." ]] ; then + if [[ "${lobsdiag_forenkf}" = ".false." ]] ; then echo "${dirname}${head}gsistat " >>"efsoi${CDUMP}_grp${n}.txt" if [ -s "${ROTDIR}/${dirpath}${head}cnvstat" ] ; then echo "${dirname}${head}cnvstat " >>"efsoi${CDUMP}_grp${n}.txt" From c12bf7e04925079417c58c5b196fbbe66aabb926 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 15 Sep 2022 11:46:45 -0500 Subject: [PATCH 094/103] linter corrections --- jobs/rocoto/earc.sh | 2 +- ush/hpssarch_gen.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/jobs/rocoto/earc.sh b/jobs/rocoto/earc.sh index b7264caaa73..540bff61bab 100755 --- a/jobs/rocoto/earc.sh +++ b/jobs/rocoto/earc.sh @@ -187,7 +187,7 @@ if [ $ENSGRP -eq 0 ]; then if [ $DO_EFSOI = "YES" ]; then $TARCMD -P -cvf "$ATARDIR/$CDATE/efsoi${CDUMP}.tar" $(cat $ARCH_LIST/efsoi${CDUMP}.txt) status=$? - if [ "${status}" -ne 0 -a $CDATE -ge $firstday ]; then + if [ "${status}" -ne 0 ] && [ $CDATE -ge $firstday ]; then echo "HTAR $CDATE efsoi${CDUMP}.tar failed" exit "${status}" fi diff --git a/ush/hpssarch_gen.sh b/ush/hpssarch_gen.sh index 03c6fc4d3cd..b3e5bdad357 100755 --- a/ush/hpssarch_gen.sh +++ b/ush/hpssarch_gen.sh @@ -591,7 +591,7 @@ if [ "${type}" = "efsoigdas" ]; then IAUFHRS_ENKF="6,12,18,24,30" lobsdiag_forenkf=${lobsdiag_forenkf:-".false."} #nfhrs=$(echo "${IAUFHRS_ENKF}" | sed 's/,/ /g') - nfhrs=$(echo "${IAUFHRS_ENKF//,/ }" + nfhrs=$(echo "${IAUFHRS_ENKF//,/ }") NMEM_ENKF=${NMEM_ENKF:-80} NMEM_EARCGRP=${NMEM_EARCGRP:-10} ##number of ens memebers included in each tarball NTARS=$((NMEM_ENKF/NMEM_EARCGRP)) From bf39edd5f84dbf3a0315c86dd93348eff6b9e383 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 15 Sep 2022 11:54:12 -0500 Subject: [PATCH 095/103] linter corrections --- jobs/rocoto/ecenfsoi.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jobs/rocoto/ecenfsoi.sh b/jobs/rocoto/ecenfsoi.sh index a6f92308998..766f16cce36 100755 --- a/jobs/rocoto/ecenfsoi.sh +++ b/jobs/rocoto/ecenfsoi.sh @@ -1,6 +1,6 @@ #! /usr/bin/env bash -source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}"/ush/preamble.sh ############################################################### # Source FV3GFS workflow modules From c4d91787798fac92a77ecba7cdf6b483eb65a98f Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 15 Sep 2022 11:58:21 -0500 Subject: [PATCH 096/103] linter corrections --- jobs/rocoto/ecenfsoi.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jobs/rocoto/ecenfsoi.sh b/jobs/rocoto/ecenfsoi.sh index 766f16cce36..a6f92308998 100755 --- a/jobs/rocoto/ecenfsoi.sh +++ b/jobs/rocoto/ecenfsoi.sh @@ -1,6 +1,6 @@ #! /usr/bin/env bash -source "${HOMEgfs}"/ush/preamble.sh +source "${HOMEgfs}/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules From 6623b7180f869e057cfa9c12d8d7abcaf363bbe8 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Fri, 16 Sep 2022 10:52:01 -0500 Subject: [PATCH 097/103] linter debuggingwq --- parm/config/config.ecenfsoi | 4 ++-- parm/config/config.efcsfsoi | 4 ++-- parm/config/config.efsoi | 2 +- parm/config/config.eposfsoi | 6 +++--- parm/config/config.esfcfsoi | 4 ++-- parm/config/config.eupdfsoi | 4 ++-- parm/config/config.resources | 4 ++-- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/parm/config/config.ecenfsoi b/parm/config/config.ecenfsoi index 4f0c905ab8f..87ab4284d68 100755 --- a/parm/config/config.ecenfsoi +++ b/parm/config/config.ecenfsoi @@ -6,9 +6,9 @@ echo "BEGIN: config.ecenfsoi" # get regular ecen configs -. "${EXPDIR}/config.ecen" +. "${EXPDIR}"/config.ecen # Get task specific resources -. "${EXPDIR}/config.resources ecenfsoi" +. "${EXPDIR}"/config.resources ecenfsoi echo "END: config.ecenfsoi" diff --git a/parm/config/config.efcsfsoi b/parm/config/config.efcsfsoi index 970b2914322..4c1da1ab64b 100755 --- a/parm/config/config.efcsfsoi +++ b/parm/config/config.efcsfsoi @@ -6,10 +6,10 @@ echo "BEGIN: config.efcsfsoi" # Get regular efcs configs -. "${EXPDIR}/config.efcs" +. "${EXPDIR}"/config.efcs # Get task specific resources -. "${EXPDIR}/config.resources efcsfsoi" +. "${EXPDIR}"/config.resources efcsfsoi export npe_fv3=${npe_efcsfsoi} diff --git a/parm/config/config.efsoi b/parm/config/config.efsoi index 9838eb4d161..a48fc9cc6d6 100755 --- a/parm/config/config.efsoi +++ b/parm/config/config.efsoi @@ -6,7 +6,7 @@ echo "BEGIN: config.efsoi" # Get task specific resources -. "${EXPDIR}/config.resources efsoi" +. "${EXPDIR}"/config.resources efsoi # LETKF specific settings with model space localization export modelspace_vloc=".true." # model space localization diff --git a/parm/config/config.eposfsoi b/parm/config/config.eposfsoi index 862de5c165f..f31c1e3099c 100755 --- a/parm/config/config.eposfsoi +++ b/parm/config/config.eposfsoi @@ -6,12 +6,12 @@ echo "BEGIN: config.eposfsoi" # Get regular epos configs -. "${EXPDIR}/config.epos" +. "${EXPDIR}"/config.epos # Get efcsfsoi configs for FH settings -. "${EXPDIR}/config.efcsfsoi" +. "${EXPDIR}"/config.efcsfsoi # Get task specific resources -. "${EXPDIR}/config.resources eposfsoi" +. ${EXPDIR}/config.resources eposfsoi echo "END: config.eposfsoi" diff --git a/parm/config/config.esfcfsoi b/parm/config/config.esfcfsoi index fa09d626fda..08ec314e1f5 100755 --- a/parm/config/config.esfcfsoi +++ b/parm/config/config.esfcfsoi @@ -6,9 +6,9 @@ echo "BEGIN: config.esfcfsoi" # Get regular esfc configs -. "${EXPDIR}/config.esfc" +. "${EXPDIR}"/config.esfc # Get task specific resources -. "${EXPDIR}/config.resources esfcfsoi" +. "${EXPDIR}"/config.resources esfcfsoi echo "END: config.esfcfsoi" diff --git a/parm/config/config.eupdfsoi b/parm/config/config.eupdfsoi index b89c6675b24..37c34e17202 100755 --- a/parm/config/config.eupdfsoi +++ b/parm/config/config.eupdfsoi @@ -6,10 +6,10 @@ echo "BEGIN: config.eupdfsoi" # Get task specific resources -. "${EXPDIR}/config.eupd" +. "${EXPDIR}"/config.eupd # Get task specific resources -. "${EXPDIR}/config.resources eupdfsoi" +. "${EXPDIR}"/config.resources eupdfsoi export npe_enkf="${npe_eupd}" diff --git a/parm/config/config.resources b/parm/config/config.resources index 6980863ee97..81c18c0f574 100755 --- a/parm/config/config.resources +++ b/parm/config/config.resources @@ -569,7 +569,7 @@ elif [ ${step} = "eupdfsoi" ]; then export npe_eupdfsoi=100 export nth_eupdfsoi=40 fi - elif [ [ "${CASE}" = "C192" ] || [ "${CASE}" = "C96" ] || [ "${CASE}" = "C48" ] ]; then + elif [ "${CASE}" = "C192" ] || [ "${CASE}" = "C96" ] || [ "${CASE}" = "C48" ] ; then export npe_eupdfsoi=42 export nth_eupdfsoi=2 if [[ "$machine" = "HERA" ]]; then @@ -602,7 +602,7 @@ elif [ ${step} = "efsoi" ]; then export npe_efsoi=100 export nth_efsoi=40 fi - elif [ ["${CASE}" = "C192"] || ["${CASE}" = "C96"] || ["${CASE}" = "C48"] ]; then + elif ["${CASE}" = "C192"] || ["${CASE}" = "C96"] || ["${CASE}" = "C48"] ; then export npe_efsoi=42 export nth_efsoi=2 if [[ "$machine" = "HERA" ]]; then From 21b334d21c7fe8b2d064cf728be3233ecf2efb5e Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Fri, 16 Sep 2022 11:20:52 -0500 Subject: [PATCH 098/103] linter debugging --- parm/config/config.resources | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/parm/config/config.resources b/parm/config/config.resources index 81c18c0f574..64c0c85e74c 100755 --- a/parm/config/config.resources +++ b/parm/config/config.resources @@ -602,7 +602,7 @@ elif [ ${step} = "efsoi" ]; then export npe_efsoi=100 export nth_efsoi=40 fi - elif ["${CASE}" = "C192"] || ["${CASE}" = "C96"] || ["${CASE}" = "C48"] ; then + elif [ "${CASE}" = "C192" ] || [ "${CASE}" = "C96" ] || [ "${CASE}" = "C48" ] ; then export npe_efsoi=42 export nth_efsoi=2 if [[ "$machine" = "HERA" ]]; then @@ -657,21 +657,25 @@ elif [ ${step} = "efcs" ]; then fi export npe_efcs=$(echo "$layout_x * $layout_y * 6" | bc) export nth_efcs=${nth_fv3:-2} - export npe_node_efcs=$(echo "${npe_node_max} / $nth_efcs" | bc) + npe_node_efcs=$(echo "${npe_node_max} / $nth_efcs" | bc) + export npe_node_efcs elif [ ${step} = "efcsfsoi" ]; then export wtime_efcsfsoi="00:40:00" - export npe_efcsfsoi=$(echo "$layout_x * $layout_y * 6" | bc) + npe_efcsfsoi=$(echo "$layout_x * $layout_y * 6" | bc) + export npe_efcsfsoi export nth_efcsfsoi=${nth_fv3:-2} - export npe_node_efcsfsoi=$(echo "${npe_node_max} / $nth_efcsfsoi" | bc) + npe_node_efcsfsoi=$(echo "${npe_node_max} / $nth_efcsfsoi" | bc) + export npe_node_efcsfsoi elif [ ${step} = "epos" ]; then export wtime_epos="00:15:00" export npe_epos=80 export nth_epos=6 - export npe_node_epos=$(echo "${npe_node_max} / $nth_epos" | bc) + npe_node_epos=$(echo "${npe_node_max} / $nth_epos" | bc) + export npe_node_epos elif [ ${step} = "eposfsoi" ]; then From e0bc8b6e4a48bb13f7061e3fb55c3638e1afb584 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Fri, 16 Sep 2022 11:28:10 -0500 Subject: [PATCH 099/103] linter debugging --- parm/config/config.resources | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/parm/config/config.resources b/parm/config/config.resources index 64c0c85e74c..1b9b809c288 100755 --- a/parm/config/config.resources +++ b/parm/config/config.resources @@ -683,7 +683,8 @@ elif [ ${step} = "eposfsoi" ]; then export npe_eposfsoi=80 export nth_eposfsoi=6 if [[ "$machine" = "WCOSS_DELL_P3" ]]; then export nth_eposfsoi=7; fi - export npe_node_eposfsoi=$(echo "${npe_node_max} / $nth_eposfsoi" | bc) + npe_node_eposfsoi=$(echo "${npe_node_max} / $nth_eposfsoi" | bc) + export npe_node_eposfsoi elif [ ${step} = "postsnd" ]; then From 42e9d69498f1056a6426b9bd47a31b39c99cc70d Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Fri, 16 Sep 2022 18:17:04 -0500 Subject: [PATCH 100/103] linter debugging --- env/ORION.env | 2 +- jobs/rocoto/earc.sh | 2 +- jobs/rocoto/ecenfsoi.sh | 2 +- parm/config/config.eposfsoi | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/env/ORION.env b/env/ORION.env index 80f03b309f3..213ffff87d0 100755 --- a/env/ORION.env +++ b/env/ORION.env @@ -235,7 +235,7 @@ elif [ "${step}" = "efcsfsoi" ]; then export NTHREADS_FV3=${nth_efcsfsoi:-$nth_max} [[ $NTHREADS_FV3 -gt ${nth_max} ]] && export NTHREADS_FV3=${nth_max} export cores_per_node=$npe_node_max - export APRUN_FV3="$launcher -n npe_efcsfsoi" + export APRUN_FV3="$launcher -n $npe_efcsfsoi" export NTHREADS_REGRID_NEMSIO=${nth_regrid_nemsio:-1} [[ $NTHREADS_REGRID_NEMSIO -gt ${nth_max} ]] && export NTHREADS_REGRID_NEMSIO=${nth_max} diff --git a/jobs/rocoto/earc.sh b/jobs/rocoto/earc.sh index 540bff61bab..43a3dcd8d31 100755 --- a/jobs/rocoto/earc.sh +++ b/jobs/rocoto/earc.sh @@ -57,7 +57,7 @@ if [ "${status}" -ne 0 ]; then fi if [ "${DO_EFSOI}" = "YES" ]; then - "${HOMEgfs}/ush/hpssarch_gen.sh efsoigdas" + ${HOMEgfs}/ush/hpssarch_gen.sh efsoigdas status=$? if [ "${status}" -ne 0 ]; then echo "${HOMEgfs}/ush/hpssarch_gen_EFSOI.sh enkf${CDUMP} failed, ABORT!" diff --git a/jobs/rocoto/ecenfsoi.sh b/jobs/rocoto/ecenfsoi.sh index a6f92308998..766f16cce36 100755 --- a/jobs/rocoto/ecenfsoi.sh +++ b/jobs/rocoto/ecenfsoi.sh @@ -1,6 +1,6 @@ #! /usr/bin/env bash -source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}"/ush/preamble.sh ############################################################### # Source FV3GFS workflow modules diff --git a/parm/config/config.eposfsoi b/parm/config/config.eposfsoi index f31c1e3099c..350f1e76ff9 100755 --- a/parm/config/config.eposfsoi +++ b/parm/config/config.eposfsoi @@ -12,6 +12,6 @@ echo "BEGIN: config.eposfsoi" . "${EXPDIR}"/config.efcsfsoi # Get task specific resources -. ${EXPDIR}/config.resources eposfsoi +. $"{EXPDIR}"/config.resources eposfsoi echo "END: config.eposfsoi" From 039ba80d0ac97f1b76a940dce77c03fe82edd34b Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Mon, 19 Sep 2022 07:53:48 -0500 Subject: [PATCH 101/103] reverting config file handling --- jobs/JGDAS_EFSOI_ECEN | 2 +- jobs/JGDAS_EFSOI_FCST | 2 +- jobs/JGDAS_EFSOI_POST | 2 +- jobs/JGDAS_EFSOI_SFC | 2 +- jobs/JGDAS_EFSOI_UPDATE | 2 +- parm/config/config.ecenfsoi | 3 --- parm/config/config.efcsfsoi | 3 --- parm/config/config.eposfsoi | 5 +---- parm/config/config.esfcfsoi | 3 --- parm/config/config.eupdfsoi | 3 --- 10 files changed, 6 insertions(+), 21 deletions(-) diff --git a/jobs/JGDAS_EFSOI_ECEN b/jobs/JGDAS_EFSOI_ECEN index 864bb1ae4a0..6dc0a078c6c 100755 --- a/jobs/JGDAS_EFSOI_ECEN +++ b/jobs/JGDAS_EFSOI_ECEN @@ -8,7 +8,7 @@ export RUN_ENVIR=${RUN_ENVIR:-"nco"} # Source relevant config files ############################# export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -configs="base ecenfsoi" +configs="base ecen ecenfsoi" config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} for config in $configs; do . $config_path/config.$config diff --git a/jobs/JGDAS_EFSOI_FCST b/jobs/JGDAS_EFSOI_FCST index f8fd1955f61..108e394fe4f 100755 --- a/jobs/JGDAS_EFSOI_FCST +++ b/jobs/JGDAS_EFSOI_FCST @@ -9,7 +9,7 @@ export RUN_ENVIR=${RUN_ENVIR:-"nco"} ############################# export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} -configs="base fcst efcsfsoi" +configs="base fcst efcs efcsfsoi" for config in $configs; do . $config_path/config.$config status=$? diff --git a/jobs/JGDAS_EFSOI_POST b/jobs/JGDAS_EFSOI_POST index aca5bd51ed6..d7b3ece3ffc 100755 --- a/jobs/JGDAS_EFSOI_POST +++ b/jobs/JGDAS_EFSOI_POST @@ -8,7 +8,7 @@ export RUN_ENVIR=${RUN_ENVIR:-"nco"} # Source relevant config files ############################# export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -configs="base eposfsoi" +configs="base epos eposfsoi" config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} for config in $configs; do . $config_path/config.$config diff --git a/jobs/JGDAS_EFSOI_SFC b/jobs/JGDAS_EFSOI_SFC index 83088fbc9ae..4baad980c97 100755 --- a/jobs/JGDAS_EFSOI_SFC +++ b/jobs/JGDAS_EFSOI_SFC @@ -8,7 +8,7 @@ export RUN_ENVIR=${RUN_ENVIR:-"nco"} # Source relevant config files ############################# export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -configs="base esfcfsoi" +configs="base esfc esfcfsoi" config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} for config in $configs; do . $config_path/config.$config diff --git a/jobs/JGDAS_EFSOI_UPDATE b/jobs/JGDAS_EFSOI_UPDATE index e5efd6241a5..49ad9001e5a 100755 --- a/jobs/JGDAS_EFSOI_UPDATE +++ b/jobs/JGDAS_EFSOI_UPDATE @@ -9,7 +9,7 @@ export RUN_ENVIR=${RUN_ENVIR:-"nco"} ############################# export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -configs="base anal eupdfsoi" +configs="base anal eupd eupdfsoi" config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} for config in $configs; do . $config_path/config.$config diff --git a/parm/config/config.ecenfsoi b/parm/config/config.ecenfsoi index 87ab4284d68..667ea467300 100755 --- a/parm/config/config.ecenfsoi +++ b/parm/config/config.ecenfsoi @@ -5,9 +5,6 @@ echo "BEGIN: config.ecenfsoi" -# get regular ecen configs -. "${EXPDIR}"/config.ecen - # Get task specific resources . "${EXPDIR}"/config.resources ecenfsoi diff --git a/parm/config/config.efcsfsoi b/parm/config/config.efcsfsoi index 4c1da1ab64b..e87cd8b79a0 100755 --- a/parm/config/config.efcsfsoi +++ b/parm/config/config.efcsfsoi @@ -5,9 +5,6 @@ echo "BEGIN: config.efcsfsoi" -# Get regular efcs configs -. "${EXPDIR}"/config.efcs - # Get task specific resources . "${EXPDIR}"/config.resources efcsfsoi diff --git a/parm/config/config.eposfsoi b/parm/config/config.eposfsoi index 350f1e76ff9..4623c15e802 100755 --- a/parm/config/config.eposfsoi +++ b/parm/config/config.eposfsoi @@ -5,13 +5,10 @@ echo "BEGIN: config.eposfsoi" -# Get regular epos configs -. "${EXPDIR}"/config.epos - # Get efcsfsoi configs for FH settings . "${EXPDIR}"/config.efcsfsoi # Get task specific resources -. $"{EXPDIR}"/config.resources eposfsoi +. ${EXPDIR}/config.resources eposfsoi echo "END: config.eposfsoi" diff --git a/parm/config/config.esfcfsoi b/parm/config/config.esfcfsoi index 08ec314e1f5..de05db81c21 100755 --- a/parm/config/config.esfcfsoi +++ b/parm/config/config.esfcfsoi @@ -5,9 +5,6 @@ echo "BEGIN: config.esfcfsoi" -# Get regular esfc configs -. "${EXPDIR}"/config.esfc - # Get task specific resources . "${EXPDIR}"/config.resources esfcfsoi diff --git a/parm/config/config.eupdfsoi b/parm/config/config.eupdfsoi index 37c34e17202..042f794cc98 100755 --- a/parm/config/config.eupdfsoi +++ b/parm/config/config.eupdfsoi @@ -5,9 +5,6 @@ echo "BEGIN: config.eupdfsoi" -# Get task specific resources -. "${EXPDIR}"/config.eupd - # Get task specific resources . "${EXPDIR}"/config.resources eupdfsoi From 9aa0acbad9d0ad9cb2a01bb50d704996a9287efd Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Fri, 14 Oct 2022 07:47:42 -0500 Subject: [PATCH 102/103] changes to accomodate recent merge from develop --- parm/config/config.base.emc.dyn | 11 +++++++++-- parm/config/config.efcsfsoi | 4 ---- parm/config/config.eposfsoi | 11 ++++++++--- workflow/rocoto/workflow_tasks.py | 2 +- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/parm/config/config.base.emc.dyn b/parm/config/config.base.emc.dyn index 49ac3bb35c8..55273bce1b2 100755 --- a/parm/config/config.base.emc.dyn +++ b/parm/config/config.base.emc.dyn @@ -65,8 +65,6 @@ export DO_VRFY="YES" # VRFY step # use RUNMOS flag (currently in config.vrfy) export REALTIME="YES" -export DO_EFSOI="NO" - # Experiment mode (cycled or forecast-only) export MODE="@MODE@" # cycled/forecast-only @@ -350,6 +348,15 @@ if [ $DOHYBVAR = "YES" ]; then fi fi +# Running EFSOI +export DO_EFSOI="NO" + +if [ $DO_EFSOI = "YES" ]; then + export FHMIN_EFSOI=6 + export FHOUT_EFSOI=6 + export FHMAX_EFSOI=30 +fi + # turned on nsst in anal and/or fcst steps, and turn off rtgsst export DONST="YES" if [ $DONST = "YES" ]; then export FNTSFA=" "; fi diff --git a/parm/config/config.efcsfsoi b/parm/config/config.efcsfsoi index e87cd8b79a0..1580a67162e 100755 --- a/parm/config/config.efcsfsoi +++ b/parm/config/config.efcsfsoi @@ -16,8 +16,4 @@ if [ "${QUILTING}" = ".true." ]; then export npe_efcsfsoi=${npe_fv3} fi -export FHMIN_EFSOI=6 -export FHOUT_EFSOI=6 -export FHMAX_EFSOI=30 - echo "END: config.efcsfsoi" diff --git a/parm/config/config.eposfsoi b/parm/config/config.eposfsoi index 4623c15e802..bc513d4bb7b 100755 --- a/parm/config/config.eposfsoi +++ b/parm/config/config.eposfsoi @@ -5,10 +5,15 @@ echo "BEGIN: config.eposfsoi" -# Get efcsfsoi configs for FH settings -. "${EXPDIR}"/config.efcsfsoi - # Get task specific resources . ${EXPDIR}/config.resources eposfsoi +# No. of concurrent eposfsoi jobs [1 implies sequential] +# These could be the same as regular epos groups, but +# not necessarily +export NEPOSFSOIGRP=7 +if [ $l4densvar = ".false." ]; then + export NEPOSFSOIGRP=3 +fi + echo "END: config.eposfsoi" diff --git a/workflow/rocoto/workflow_tasks.py b/workflow/rocoto/workflow_tasks.py index cda15ea6076..781ce7cd725 100644 --- a/workflow/rocoto/workflow_tasks.py +++ b/workflow/rocoto/workflow_tasks.py @@ -1367,7 +1367,7 @@ def _get_eposfsoigroups(eposfsoi): fhout = eposfsoi['FHOUT_EFSOI'] fhrs = range(fhmin, fhmax + fhout, fhout) - neposfsoigrp = eposfsoi['NEPOSGRP'] + neposfsoigrp = eposfsoi['NEPOSFSOIGRP'] ngrps = neposfsoigrp if len(fhrs) > neposfsoigrp else len(fhrs) fhrs = [f'f{fhr:03d}' for fhr in fhrs] From c5442f3a63507540c0eb8c0f5002b07b5c9c1c78 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Sun, 16 Oct 2022 18:06:31 -0500 Subject: [PATCH 103/103] added efsoi.x to link script --- sorc/link_workflow.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorc/link_workflow.sh b/sorc/link_workflow.sh index 15c09168d94..73f67765802 100755 --- a/sorc/link_workflow.sh +++ b/sorc/link_workflow.sh @@ -263,7 +263,7 @@ fi # GSI Utils if [ -d "${script_dir}/gsi_utils.fd" ]; then for exe in calc_analysis.x calc_increment_ens_ncio.x calc_increment_ens.x \ - getsfcensmeanp.x getsigensmeanp_smooth.x getsigensstatp.x \ + efsoi.x getsfcensmeanp.x getsigensmeanp_smooth.x getsigensstatp.x \ interp_inc.x recentersigp.x;do [[ -s "${exe}" ]] && rm -f ${exe} ${LINK} "${script_dir}/gsi_utils.fd/install/bin/${exe}" .