diff --git a/parm/config/config.base.emc.dyn b/parm/config/config.base.emc.dyn index fc02127106..9c6b1171b2 100755 --- a/parm/config/config.base.emc.dyn +++ b/parm/config/config.base.emc.dyn @@ -329,6 +329,7 @@ if [ $DOHYBVAR = "YES" ]; then export FHMIN_ENKF=3 export FHMAX_ENKF=9 export FHMAX_ENKF_GFS=120 + export FHOUT_ENKF_GFS=3 if [ $l4densvar = ".true." ]; then export FHOUT=1 export FHOUT_ENKF=1 diff --git a/parm/config/config.resources b/parm/config/config.resources index c1d4286697..431cfd4137 100755 --- a/parm/config/config.resources +++ b/parm/config/config.resources @@ -737,7 +737,7 @@ elif [ ${step} = "esfc" ]; then elif [ ${step} = "efcs" ]; then if [ ${CASE} = "C768" ]; then - export wtime_efcs="01:20:00" + export wtime_efcs="06:00:00" else export wtime_efcs="00:40:00" fi diff --git a/scripts/exgdas_enkf_fcst.sh b/scripts/exgdas_enkf_fcst.sh index d75678a552..32221f96ec 100755 --- a/scripts/exgdas_enkf_fcst.sh +++ b/scripts/exgdas_enkf_fcst.sh @@ -108,7 +108,9 @@ export LEVS=${LEVS_ENKF:-${LEVS:-64}} # nggps_diag_nml export FHOUT=${FHOUT_ENKF:-3} - +if [[ ${CDUMP} == "gfs" ]]; then + export FHOUT=${FHOUT_ENKF_GFS:-${FHOUT_ENKF:${FHOUT:-3}}} +fi # model_configure export DELTIM=${DELTIM_ENKF:-${DELTIM:-225}} export FHMAX=${FHMAX_ENKF:-9} diff --git a/scripts/exglobal_forecast.sh b/scripts/exglobal_forecast.sh index 3f2ad87caf..5130b6602e 100755 --- a/scripts/exglobal_forecast.sh +++ b/scripts/exglobal_forecast.sh @@ -123,18 +123,14 @@ common_predet echo $RUN case $RUN in 'data') DATM_predet;; - 'gfs') FV3_GFS_predet;; - 'gdas') FV3_GFS_predet;; - 'gefs') FV3_GEFS_predet;; + 'gfs' | 'gdas' | 'gefs') FV3_GFS_predet;; esac [[ $cplflx = .true. ]] && MOM6_predet [[ $cplwav = .true. ]] && WW3_predet [[ $cplice = .true. ]] && CICE_predet case $RUN in - 'gfs') FV3_GFS_det;; - 'gdas') FV3_GFS_det;; - 'gefs') FV3_GEFS_det;; + 'gfs' | 'gdas' | 'gefs') FV3_GFS_det;; esac #no run type determination for data atmosphere [[ $cplflx = .true. ]] && MOM6_det [[ $cplwav = .true. ]] && WW3_det @@ -146,9 +142,7 @@ echo "MAIN: Post-determination set up of run type" echo $RUN case $RUN in 'data') DATM_postdet;; - 'gfs') FV3_GFS_postdet;; - 'gdas') FV3_GFS_postdet;; - 'gefs') FV3_GEFS_postdet;; + 'gfs' | 'gdas' | 'gefs') FV3_GFS_postdet;; esac #no post determination set up for data atmosphere [[ $cplflx = .true. ]] && MOM6_postdet [[ $cplwav = .true. ]] && WW3_postdet @@ -159,9 +153,7 @@ echo "MAIN: Post-determination set up of run type finished" echo "MAIN: Writing name lists and model configuration" case $RUN in 'data') DATM_nml;; - 'gfs') FV3_GFS_nml;; - 'gdas') FV3_GFS_nml;; - 'gefs') FV3_GEFS_nml;; + 'gfs' | 'gdas' | 'gefs') FV3_GFS_nml;; esac #no namelist for data atmosphere [[ $cplflx = .true. ]] && MOM6_nml [[ $cplwav = .true. ]] && WW3_nml @@ -170,9 +162,7 @@ esac #no namelist for data atmosphere case $RUN in 'data') DATM_model_configure;; - 'gfs') FV3_model_configure;; - 'gdas') FV3_model_configure;; - 'gefs') FV3_model_configure;; + 'gfs' | 'gdas' | 'gefs') FV3_model_configure;; esac echo "MAIN: Name lists and model configuration written" @@ -202,9 +192,7 @@ fi if [ $machine != 'sandbox' ]; then case $RUN in 'data') data_out_Data_ATM;; - 'gfs') data_out_GFS;; - 'gdas') data_out_GFS;; - 'gefs') data_out_GEFS;; + 'gfs' | 'gdas' | 'gefs') data_out_GFS;; esac [[ $cplflx = .true. ]] && MOM6_out [[ $cplwav = .true. ]] && WW3_out diff --git a/ush/forecast_det.sh b/ush/forecast_det.sh index f27bb3c260..575f35696a 100755 --- a/ush/forecast_det.sh +++ b/ush/forecast_det.sh @@ -39,9 +39,9 @@ FV3_GFS_det(){ #------------------------------------------------------- # determine if restart IC exists to continue from a previous forecast - RERUN="NO" + RERUN=${RERUN:-"NO"} filecount=$(find "${RSTDIR_ATM:-/dev/null}" -type f | wc -l) - if [ ${CDUMP} = "gfs" -a ${rst_invt1} -gt 0 -a ${FHMAX} -gt ${rst_invt1} -a ${filecount} -gt 10 ]; then + if [[ ( ${CDUMP} = "gfs" || ( ${RUN} = "gefs" && ${CDATE_RST} = "" )) && ${rst_invt1} -gt 0 && ${FHMAX} -gt ${rst_invt1} && ${filecount} -gt 10 ]]; then reverse=$(echo "${restart_interval[@]} " | tac -s ' ') for xfh in ${reverse} ; do yfh=$((xfh-(IAU_OFFSET/2))) @@ -74,10 +74,6 @@ FV3_GFS_det(){ #------------------------------------------------------- } -FV3_GEFS_det(){ - echo "SUB ${FUNCNAME[0]}: Defining variables for FV3GEFS" -} - WW3_det(){ echo "SUB ${FUNCNAME[0]}: Run type determination for WW3" } diff --git a/ush/forecast_postdet.sh b/ush/forecast_postdet.sh index 4d26146e21..824a0946ce 100755 --- a/ush/forecast_postdet.sh +++ b/ush/forecast_postdet.sh @@ -11,11 +11,6 @@ ## for execution. ##### -FV3_GEFS_postdet(){ - echo SUB ${FUNCNAME[0]}: Linking input data for FV3 $RUN - # soft link commands insert here -} - DATM_postdet(){ ###################################################################### # Link DATM inputs (ie forcing files) # @@ -134,7 +129,7 @@ EOF #............................. else ## cold start - for file in $(ls $memdir/INPUT/*.nc); do + 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 @@ -307,9 +302,9 @@ EOF # 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 + $NLN ${FLTFILEGFS:-$PARM_POST/postxconfig-NT-GFS-TWO.txt} $DATA/postxconfig-NT.txt + $NLN ${FLTFILEGFSF00:-$PARM_POST/postxconfig-NT-GFS-F00-TWO.txt} $DATA/postxconfig-NT_FH00.txt + $NLN ${POSTGRB2TBL:-$PARM_POST/params_grib2_tbl_new} $DATA/params_grib2_tbl_new fi #------------------------------------------------------------------ @@ -594,13 +589,14 @@ data_out_GFS() { done fi elif [ $CDUMP = "gfs" ]; then - $NCP $DATA/input.nml $ROTDIR/${CDUMP}.${PDY}/${cyc}/atmos/ + $NCP $DATA/input.nml ${ROTDIR}/${RUN}.${PDY}/${cyc}/atmos/ fi fi echo "SUB ${FUNCNAME[0]}: Output data for FV3 copied" } + WW3_postdet() { echo "SUB ${FUNCNAME[0]}: Linking input data for WW3" COMPONENTwave=${COMPONENTwave:-${RUN}wave} diff --git a/ush/forecast_predet.sh b/ush/forecast_predet.sh index 9ce8ebfcc6..bcf93992e2 100755 --- a/ush/forecast_predet.sh +++ b/ush/forecast_predet.sh @@ -207,31 +207,33 @@ FV3_GFS_predet(){ print_freq=${print_freq:-6} #------------------------------------------------------- - if [ $CDUMP = "gfs" ] && [ $rst_invt1 -gt 0 ] && [ $MEMBER -lt 0 ]; then - RSTDIR_ATM=${RSTDIR:-$ROTDIR}/${CDUMP}.${PDY}/${cyc}/atmos/RERUN_RESTART + if [[ ${CDUMP} = "gfs" || ${RUN} = "gefs" ]] && [ ${rst_invt1} -gt 0 ]; then + RSTDIR_ATM=${RSTDIR_ATM:-${ROTDIR}/${CDUMP}.${PDY}/${cyc}/atmos/RERUN_RESTART} if [ ! -d $RSTDIR_ATM ]; then mkdir -p $RSTDIR_ATM ; fi $NLN $RSTDIR_ATM RESTART - # The final restart written at the end doesn't include the valid date - # Create links that keep the same name pattern for these files - VDATE=$($NDATE +$FHMAX_GFS $CDATE) - vPDY=$(echo $VDATE | cut -c1-8) - vcyc=$(echo $VDATE | cut -c9-10) - files="coupler.res fv_core.res.nc" - for tile in {1..6}; do - for base in ca_data fv_core.res fv_srf_wnd.res fv_tracer.res phy_data sfc_data; do - files="${files} ${base}.tile${tile}.nc" + if [[ $(( ${FHMAX_GFS} % ${restart_interval_gfs} )) == 0 ]]; then + # The final restart written at the end doesn't include the valid date + # Create links that keep the same name pattern for these files + VDATE=$($NDATE +$FHMAX_GFS $CDATE) + vPDY=$(echo $VDATE | cut -c1-8) + vcyc=$(echo $VDATE | cut -c9-10) + files="coupler.res fv_core.res.nc" + for tile in {1..6}; do + for base in ca_data fv_core.res fv_srf_wnd.res fv_tracer.res phy_data sfc_data; do + files="${files} ${base}.tile${tile}.nc" + done done - done - for file in $files; do - $NLN $RSTDIR_ATM/$file $RSTDIR_ATM/${vPDY}.${vcyc}0000.$file - done + for file in $files; do + $NLN $RSTDIR_ATM/$file $RSTDIR_ATM/${vPDY}.${vcyc}0000.$file + done + fi else mkdir -p $DATA/RESTART fi #------------------------------------------------------- # member directory - if [ $MEMBER -lt 0 ]; then + if [[ ${MEMBER} -lt 0 || ${RUN} = "gefs" ]]; then prefix=$CDUMP rprefix=$rCDUMP memchar="" @@ -240,13 +242,13 @@ FV3_GFS_predet(){ rprefix=enkf$rCDUMP memchar=mem$(printf %03i $MEMBER) fi - memdir=$ROTDIR/${prefix}.$PDY/$cyc/$memchar/atmos + memdir=${memdir:-${ROTDIR}/${prefix}.${PDY}/${cyc}/${memchar}/atmos} 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/$memchar/atmos + gmemdir=${gmemdir:-${ROTDIR}/${rprefix}.${gPDY}/${gcyc}/${memchar}/atmos} if [[ "$DOIAU" = "YES" ]]; then sCDATE=$($NDATE -3 $CDATE) diff --git a/workflow/rocoto/workflow_tasks.py b/workflow/rocoto/workflow_tasks.py index c31397dd26..83850e44c1 100644 --- a/workflow/rocoto/workflow_tasks.py +++ b/workflow/rocoto/workflow_tasks.py @@ -1259,9 +1259,10 @@ def epos(self): def _get_eposgroups(epos): fhmin = epos['FHMIN_ENKF'] fhmax = epos['FHMAX_ENKF'] + fhout = epos['FHOUT_ENKF'] if self.cdump == "gfs": fhmax = epos['FHMAX_ENKF_GFS'] - fhout = epos['FHOUT_ENKF'] + fhout = epos['FHOUT_ENKF_GFS'] fhrs = range(fhmin, fhmax + fhout, fhout) neposgrp = epos['NEPOSGRP']