diff --git a/docs/source/configure.rst b/docs/source/configure.rst index 284297459d..4b1409fcdd 100644 --- a/docs/source/configure.rst +++ b/docs/source/configure.rst @@ -48,9 +48,6 @@ The global-workflow configs contain switches that change how the system runs. Ma | QUILTING | Use I/O quilting | .true. | NO | If .true. choose OUTPUT_GRID as cubed_sphere_grid | | | | | | in netcdf or gaussian_grid | +----------------+------------------------------+---------------+-------------+---------------------------------------------------+ -| RETRO | Use retrospective parallel | NO | NO | Default of NO will tell getic job to pull from | -| | for ICs | | | production tapes. | -+----------------+------------------------------+---------------+-------------+---------------------------------------------------+ | WAFSF | Run jobs to produce WAFS | NO | YES | downstream processing, ops only | | | products | | | | +----------------+------------------------------+---------------+-------------+---------------------------------------------------+ diff --git a/docs/source/init.rst b/docs/source/init.rst index 558f2a0fa2..5c9c811052 100644 --- a/docs/source/init.rst +++ b/docs/source/init.rst @@ -261,9 +261,7 @@ Coupled initial conditions are currently only generated offline and copied prior Forecast-only mode (atm-only) ----------------------------- -Forecast-only mode in global workflow includes ``getic`` and ``init`` jobs for the gfs suite. The ``getic`` job pulls inputs for ``chgres_cube`` (init job) or warm start ICs into your ``ROTDIR/COMROT``. The ``init`` job then ingests those files to produce initial conditions for your experiment. - -Users on machines without HPSS access (e.g. Orion) need to perform the ``getic`` step manually and stage inputs for the ``init`` job. The table below lists the needed files for ``init`` and where to place them in your ``ROTDIR``. +The table below lists the needed initial condition files from past GFS versions to be used by the UFS_UTILS gdas_init utility. The utility will pull these files for you. See the next section (Manual Generation) for how to run the UFS_UTILS gdas_init utility and create initial conditions for your experiment. Note for table: yyyy=year; mm=month; dd=day; hh=cycle diff --git a/env/HERA.env b/env/HERA.env index d2d4223455..4c11ad3fc3 100755 --- a/env/HERA.env +++ b/env/HERA.env @@ -261,10 +261,6 @@ elif [[ "${step}" = "epos" ]]; then [[ ${NTHREADS_EPOS} -gt ${nth_max} ]] && export NTHREADS_EPOS=${nth_max} export APRUN_EPOS="${launcher} -n ${npe_epos}" -elif [[ "${step}" = "init" ]]; then - - export APRUN="${launcher} -n ${npe_init}" - elif [[ "${step}" = "postsnd" ]]; then export CFP_MP="YES" diff --git a/env/JET.env b/env/JET.env index 11533cb787..8c296d315a 100755 --- a/env/JET.env +++ b/env/JET.env @@ -231,10 +231,6 @@ elif [[ "${step}" = "epos" ]]; then [[ ${NTHREADS_EPOS} -gt ${nth_max} ]] && export NTHREADS_EPOS=${nth_max} export APRUN_EPOS="${launcher} -n ${npe_epos}" -elif [[ "${step}" = "init" ]]; then - - export APRUN="${launcher} -n ${npe_init}" - elif [[ "${step}" = "postsnd" ]]; then export CFP_MP="YES" diff --git a/env/ORION.env b/env/ORION.env index 466a115b90..332b1ca42b 100755 --- a/env/ORION.env +++ b/env/ORION.env @@ -260,10 +260,6 @@ elif [[ "${step}" = "epos" ]]; then [[ ${NTHREADS_EPOS} -gt ${nth_max} ]] && export NTHREADS_EPOS=${nth_max} export APRUN_EPOS="${launcher} -n ${npe_epos}" -elif [[ "${step}" = "init" ]]; then - - export APRUN="${launcher} -n ${npe_init}" - elif [[ "${step}" = "postsnd" ]]; then export CFP_MP="YES" diff --git a/env/S4.env b/env/S4.env index fef8ac562f..68f4e0c468 100755 --- a/env/S4.env +++ b/env/S4.env @@ -234,10 +234,6 @@ elif [[ "${step}" = "epos" ]]; then [[ ${NTHREADS_EPOS} -gt ${nth_max} ]] && export NTHREADS_EPOS=${nth_max} export APRUN_EPOS="${launcher} -n ${npe_epos}" -elif [[ "${step}" = "init" ]]; then - - export APRUN="${launcher} -n ${npe_init}" - elif [[ "${step}" = "postsnd" ]]; then export CFP_MP="YES" diff --git a/env/WCOSS2.env b/env/WCOSS2.env index 6d4acf5d19..d69f031016 100755 --- a/env/WCOSS2.env +++ b/env/WCOSS2.env @@ -249,10 +249,6 @@ elif [[ "${step}" = "epos" ]]; then [[ ${NTHREADS_EPOS} -gt ${nth_max} ]] && export NTHREADS_EPOS=${nth_max} export APRUN_EPOS="${launcher} -n ${npe_epos} -ppn ${npe_node_epos} --cpu-bind depth --depth ${NTHREADS_EPOS}" -elif [[ "${step}" = "init" ]]; then - - export APRUN="${launcher}" - elif [[ "${step}" = "postsnd" ]]; then export MPICH_MPIIO_HINTS_DISPLAY=1 diff --git a/jobs/rocoto/coupled_ic.sh b/jobs/rocoto/coupled_ic.sh index bedb7e5272..ca2cfc82af 100755 --- a/jobs/rocoto/coupled_ic.sh +++ b/jobs/rocoto/coupled_ic.sh @@ -44,17 +44,14 @@ error_message(){ echo "FATAL ERROR: Unable to copy ${1} to ${2} (Error code ${3})" } -YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_INPUT COM_ICE_RESTART COM_WAVE_RESTART -YMD=${gPDY} HH=${gcyc} generate_com -rx COM_OCEAN_RESTART - ############################################################### # Start staging # Stage the FV3 initial conditions to ROTDIR (cold start) -ATMdir="${COM_ATMOS_INPUT}" -[[ ! -d "${ATMdir}" ]] && mkdir -p "${ATMdir}" +YMD=${PDY} HH=${cyc} generate_com -r COM_ATMOS_INPUT +[[ ! -d "${COM_ATMOS_INPUT}" ]] && mkdir -p "${COM_ATMOS_INPUT}" source="${BASE_CPLIC}/${CPL_ATMIC}/${PDY}${cyc}/${CDUMP}/${CASE}/INPUT/gfs_ctrl.nc" -target="${ATMdir}/gfs_ctrl.nc" +target="${COM_ATMOS_INPUT}/gfs_ctrl.nc" ${NCP} "${source}" "${target}" rc=$? [[ ${rc} -ne 0 ]] && error_message "${source}" "${target}" "${rc}" @@ -62,7 +59,7 @@ err=$((err + rc)) for ftype in gfs_data sfc_data; do for tt in $(seq 1 6); do source="${BASE_CPLIC}/${CPL_ATMIC}/${PDY}${cyc}/${CDUMP}/${CASE}/INPUT/${ftype}.tile${tt}.nc" - target="${ATMdir}/${ftype}.tile${tt}.nc" + target="${COM_ATMOS_INPUT}/${ftype}.tile${tt}.nc" ${NCP} "${source}" "${target}" rc=$? [[ ${rc} -ne 0 ]] && error_message "${source}" "${target}" "${rc}" @@ -71,52 +68,56 @@ for ftype in gfs_data sfc_data; do done # Stage ocean initial conditions to ROTDIR (warm start) -OCNdir="${COM_OCEAN_RESTART}" -[[ ! -d "${OCNdir}" ]] && mkdir -p "${OCNdir}" -source="${BASE_CPLIC}/${CPL_OCNIC}/${PDY}${cyc}/ocn/${OCNRES}/MOM.res.nc" -target="${OCNdir}/${PDY}.${cyc}0000.MOM.res.nc" -${NCP} "${source}" "${target}" -rc=$? -[[ ${rc} -ne 0 ]] && error_message "${source}" "${target}" "${rc}" -err=$((err + rc)) -case $OCNRES in - "025") - for nn in $(seq 1 4); do - source="${BASE_CPLIC}/${CPL_OCNIC}/${PDY}${cyc}/ocn/${OCNRES}/MOM.res_${nn}.nc" - if [[ -f "${source}" ]]; then - target="${OCNdir}/${PDY}.${cyc}0000.MOM.res_${nn}.nc" - ${NCP} "${source}" "${target}" - rc=$? - [[ ${rc} -ne 0 ]] && error_message "${source}" "${target}" "${rc}" - err=$((err + rc)) - fi - done - ;; - *) - echo "FATAL ERROR: Unsupported ocean resolution ${OCNRES}" - rc=1 - err=$((err + rc)) - ;; -esac +if [[ "${DO_OCN:-}" = "YES" ]]; then + YMD=${gPDY} HH=${gcyc} generate_com -r COM_OCEAN_RESTART + [[ ! -d "${COM_OCEAN_RESTART}" ]] && mkdir -p "${COM_OCEAN_RESTART}" + source="${BASE_CPLIC}/${CPL_OCNIC}/${PDY}${cyc}/ocn/${OCNRES}/MOM.res.nc" + target="${COM_OCEAN_RESTART}/${PDY}.${cyc}0000.MOM.res.nc" + ${NCP} "${source}" "${target}" + rc=$? + [[ ${rc} -ne 0 ]] && error_message "${source}" "${target}" "${rc}" + err=$((err + rc)) + case "${OCNRES}" in + "025") + for nn in $(seq 1 4); do + source="${BASE_CPLIC}/${CPL_OCNIC}/${PDY}${cyc}/ocn/${OCNRES}/MOM.res_${nn}.nc" + if [[ -f "${source}" ]]; then + target="${COM_OCEAN_RESTART}/${PDY}.${cyc}0000.MOM.res_${nn}.nc" + ${NCP} "${source}" "${target}" + rc=$? + [[ ${rc} -ne 0 ]] && error_message "${source}" "${target}" "${rc}" + err=$((err + rc)) + fi + done + ;; + *) + echo "FATAL ERROR: Unsupported ocean resolution ${OCNRES}" + rc=1 + err=$((err + rc)) + ;; + esac +fi # Stage ice initial conditions to ROTDIR (cold start as these are SIS2 generated) -ICEdir="${COM_ICE_RESTART}" -[[ ! -d "${ICEdir}" ]] && mkdir -p "${ICEdir}" -ICERESdec=$(echo "${ICERES}" | awk '{printf "%0.2f", $1/100}') -source="${BASE_CPLIC}/${CPL_ICEIC}/${PDY}${cyc}/ice/${ICERES}/cice5_model_${ICERESdec}.res_${PDY}${cyc}.nc" -target="${ICEdir}/${PDY}.${cyc}0000.cice_model.res.nc" -${NCP} "${source}" "${target}" -rc=$? -[[ ${rc} -ne 0 ]] && error_message "${source}" "${target}" "${rc}" -err=$((err + rc)) +if [[ "${DO_ICE:-}" = "YES" ]]; then + YMD=${PDY} HH=${cyc} generate_com -r COM_ICE_RESTART + [[ ! -d "${COM_ICE_RESTART}" ]] && mkdir -p "${COM_ICE_RESTART}" + ICERESdec=$(echo "${ICERES}" | awk '{printf "%0.2f", $1/100}') + source="${BASE_CPLIC}/${CPL_ICEIC}/${PDY}${cyc}/ice/${ICERES}/cice5_model_${ICERESdec}.res_${PDY}${cyc}.nc" + target="${COM_ICE_RESTART}/${PDY}.${cyc}0000.cice_model.res.nc" + ${NCP} "${source}" "${target}" + rc=$? + [[ ${rc} -ne 0 ]] && error_message "${source}" "${target}" "${rc}" + err=$((err + rc)) +fi # Stage the WW3 initial conditions to ROTDIR (warm start; TODO: these should be placed in $RUN.$gPDY/$gcyc) -if [[ "${DO_WAVE}" = "YES" ]]; then - WAVdir="${COM_WAVE_RESTART}" - [[ ! -d "${WAVdir}" ]] && mkdir -p "${WAVdir}" +if [[ "${DO_WAVE:-}" = "YES" ]]; then + YMD=${PDY} HH=${cyc} generate_com -r COM_WAVE_RESTART + [[ ! -d "${COM_WAVE_RESTART}" ]] && mkdir -p "${COM_WAVE_RESTART}" for grdID in ${waveGRD}; do # TODO: check if this is a bash array; if so adjust source="${BASE_CPLIC}/${CPL_WAVIC}/${PDY}${cyc}/wav/${grdID}/${PDY}.${cyc}0000.restart.${grdID}" - target="${WAVdir}/${PDY}.${cyc}0000.restart.${grdID}" + target="${COM_WAVE_RESTART}/${PDY}.${cyc}0000.restart.${grdID}" ${NCP} "${source}" "${target}" rc=$? [[ ${rc} -ne 0 ]] && error_message "${source}" "${target}" "${rc}" diff --git a/jobs/rocoto/getic.sh b/jobs/rocoto/getic.sh deleted file mode 100755 index f7f03f73ca..0000000000 --- a/jobs/rocoto/getic.sh +++ /dev/null @@ -1,169 +0,0 @@ -#! /usr/bin/env bash - -source "${HOMEgfs}/ush/preamble.sh" - -############################################################### -## Abstract: -## Get GFS intitial conditions -## RUN_ENVIR : runtime environment (emc | nco) -## HOMEgfs : /full/path/to/workflow -## EXPDIR : /full/path/to/config/files -## CDATE : current date (YYYYMMDDHH) -## CDUMP : cycle name (gdas / gfs) -## PDY : current date (YYYYMMDD) -## cyc : current cycle (HH) -############################################################### - -############################################################### -# Source FV3GFS workflow modules -. "${HOMEgfs}/ush/load_fv3gfs_modules.sh" -status=$? -[[ ${status} -ne 0 ]] && exit "${status}" - -############################################################### -# Source relevant configs -configs="base getic init" -for config in ${configs}; do - . "${EXPDIR}/config.${config}" - status=$? - [[ ${status} -ne 0 ]] && exit "${status}" -done - -############################################################### -# Source machine runtime environment -. ${BASE_ENV}/${machine}.env getic -status=$? -[[ ${status} -ne 0 ]] && exit "${status}" - -############################################################### -# Set script and dependency variables - -export yy="$(echo ${CDATE} | cut -c1-4)" -export mm="$(echo ${CDATE} | cut -c5-6)" -export dd="$(echo ${CDATE} | cut -c7-8)" -export hh="${cyc:-$(echo ${CDATE} | cut -c9-10)}" -export GDATE="$(${NDATE} -${assim_freq:-"06"} ${CDATE})" -export gyy="$(echo ${GDATE} | cut -c1-4)" -export gmm="$(echo ${GDATE} | cut -c5-6)" -export gdd="$(echo ${GDATE} | cut -c7-8)" -export ghh="$(echo ${GDATE} | cut -c9-10)" - -export DATA=${DATA:-${DATAROOT}/getic} -export EXTRACT_DIR=${DATA:-${EXTRACT_DIR}} -export PRODHPSSDIR=${PRODHPSSDIR:-/NCEPPROD/hpssprod/runhistory} -export COMPONENT="atmos" -export gfs_ver=${gfs_ver:-"v16"} -export OPS_RES=${OPS_RES:-"C768"} -export GETICSH=${GETICSH:-${GDASINIT_DIR}/get_v16.data.sh} - -# Create ROTDIR/EXTRACT_DIR -if [[ ! -d ${ROTDIR} ]]; then mkdir -p "${ROTDIR}" ; fi -if [[ ! -d ${EXTRACT_DIR} ]]; then mkdir -p "${EXTRACT_DIR}" ; fi -cd "${EXTRACT_DIR}" - -# Check version, cold/warm start, and resolution -if [[ ${gfs_ver} = "v16" && ${EXP_WARM_START} = ".true." && ${CASE} = ${OPS_RES} ]]; then # Pull warm start ICs - no chgres - - # Pull RESTART files off HPSS - if [[ ${RETRO:-"NO"} = "YES" ]]; then # Retrospective parallel input - - # Pull prior cycle restart files - htar -xvf ${HPSSDIR}/${GDATE}/gdas_restartb.tar - status=$? - [[ ${status} -ne 0 ]] && exit "${status}" - - # Pull current cycle restart files - htar -xvf ${HPSSDIR}/${CDATE}/gfs_restarta.tar - status=$? - [[ ${status} -ne 0 ]] && exit "${status}" - - # Pull IAU increment files - htar -xvf ${HPSSDIR}/${CDATE}/gfs_netcdfa.tar - status=$? - [[ ${status} -ne 0 ]] && exit "${status}" - - else # Opertional input - warm starts - - cd "${ROTDIR}" - # Pull CDATE gfs restart tarball - htar -xvf ${PRODHPSSDIR}/rh${yy}/${yy}${mm}/${yy}${mm}${dd}/com_gfs_prod_gfs.${yy}${mm}${dd}_${hh}.gfs_restart.tar - # Pull GDATE gdas restart tarball - htar -xvf ${PRODHPSSDIR}/rh${gyy}/${gyy}${gmm}/${gyy}${gmm}${gdd}/com_gfs_prod_gdas.${gyy}${gmm}${gdd}_${ghh}.gdas_restart.tar - fi - -else # Pull chgres cube inputs for cold start IC generation - - # Run UFS_UTILS GETICSH - sh ${GETICSH} ${CDUMP} - status=$? - [[ ${status} -ne 0 ]] && exit "${status}" - -fi - -# Move extracted data to ROTDIR -if [[ -d ${ROTDIR}/${CDUMP}.${yy}${mm}${dd}/${hh}/${COMPONENT} ]]; then - rm -rf "${ROTDIR}/${CDUMP}.${yy}${mm}${dd}/${hh}/${COMPONENT}" -fi -mkdir -p "${ROTDIR}/${CDUMP}.${yy}${mm}${dd}/${hh}/${COMPONENT}" - -if [ ${gfs_ver} = v16 -a ${RETRO} = "YES" ]; then - mv ${EXTRACT_DIR}/${CDUMP}.${yy}${mm}${dd}/${hh}/* ${ROTDIR}/${CDUMP}.${yy}${mm}${dd}/${hh}/${COMPONENT} -else - mv ${EXTRACT_DIR}/${CDUMP}.${yy}${mm}${dd}/${hh}/* ${ROTDIR}/${CDUMP}.${yy}${mm}${dd}/${hh} -fi - -# Pull pgbanl file for verification/archival - v14+ -if [ ${gfs_ver} = v14 -o ${gfs_ver} = v15 -o ${gfs_ver} = v16 ]; then - for grid in 0p25 0p50 1p00 - do - file=gfs.t${hh}z.pgrb2.${grid}.anl - - if [[ ${gfs_ver} = v14 ]]; then # v14 production source - - cd "${ROTDIR}/${CDUMP}.${yy}${mm}${dd}/${hh}/${COMPONENT}" - export tarball="gpfs_hps_nco_ops_com_gfs_prod_gfs.${yy}${mm}${dd}${hh}.pgrb2_${grid}.tar" - htar -xvf ${PRODHPSSDIR}/rh${yy}/${yy}${mm}/${yy}${mm}${dd}/${tarball} ./${file} - - elif [[ ${gfs_ver} = v15 ]]; then # v15 production source - - cd "${EXTRACT_DIR}" - export tarball="com_gfs_prod_gfs.${yy}${mm}${dd}_${hh}.gfs_pgrb2.tar" - htar -xvf ${PRODHPSSDIR}/rh${yy}/${yy}${mm}/${yy}${mm}${dd}/${tarball} ./${CDUMP}.${yy}${mm}${dd}/${hh}/${file} - mv ${EXTRACT_DIR}/${CDUMP}.${yy}${mm}${dd}/${hh}/${file} ${ROTDIR}/${CDUMP}.${yy}${mm}${dd}/${hh}/${COMPONENT}/${file} - - elif [[ ${gfs_ver} = v16 ]]; then # v16 - determine RETRO or production source next - - if [[ ${RETRO} = "YES" ]]; then # Retrospective parallel source - - cd ${EXTRACT_DIR} - if [[ ${grid} = "0p25" ]]; then # anl file spread across multiple tarballs - export tarball="gfsa.tar" - elif [ ${grid} = "0p50" -o ${grid} = "1p00" ]; then - export tarball="gfsb.tar" - fi - htar -xvf ${HPSSDIR}/${yy}${mm}${dd}${hh}/${tarball} ./${CDUMP}.${yy}${mm}${dd}/${hh}/${file} - mv ${EXTRACT_DIR}/${CDUMP}.${yy}${mm}${dd}/${hh}/${file} ${ROTDIR}/${CDUMP}.${yy}${mm}${dd}/${hh}/${COMPONENT}/${file} - - else # Production source - - cd "${ROTDIR}" - export tarball="com_gfs_prod_gfs.${yy}${mm}${dd}_${hh}.gfs_pgrb2.tar" - htar -xvf ${PRODHPSSDIR}/rh${yy}/${yy}${mm}/${yy}${mm}${dd}/${tarball} ./${CDUMP}.${yy}${mm}${dd}/${hh}/atmos/${file} - - fi # RETRO vs production - - fi # Version check - done # grid loop -fi # v14-v16 pgrb anl file pull - -########################################## -# Remove the Temporary working directory -########################################## -cd "${DATAROOT}" -[[ ${KEEPDATA} = "NO" ]] && rm -rf "${DATA}" - -############################################################### -# Exit out cleanly - - -exit 0 diff --git a/jobs/rocoto/init.sh b/jobs/rocoto/init.sh deleted file mode 100755 index 0432750e72..0000000000 --- a/jobs/rocoto/init.sh +++ /dev/null @@ -1,77 +0,0 @@ -#! /usr/bin/env bash - -source "$HOMEgfs/ush/preamble.sh" - -############################################################### -## Abstract: -## Get GFS intitial conditions -## RUN_ENVIR : runtime environment (emc | nco) -## HOMEgfs : /full/path/to/workflow -## EXPDIR : /full/path/to/config/files -## CDATE : current date (YYYYMMDDHH) -## CDUMP : cycle name (gdas / gfs) -## PDY : current date (YYYYMMDD) -## cyc : current cycle (HH) -############################################################### - -############################################################### -# Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh -status=$? -[[ $status -ne 0 ]] && exit $status - -############################################################### -# Source relevant configs -configs="base getic init" -for config in $configs; do - . $EXPDIR/config.${config} - status=$? - [[ $status -ne 0 ]] && exit $status -done - -############################################################### -# Source machine runtime environment -. $BASE_ENV/${machine}.env init -status=$? -[[ $status -ne 0 ]] && exit $status - -############################################################### -# Set script and dependency variables - -export yy=$(echo $CDATE | cut -c1-4) -export mm=$(echo $CDATE | cut -c5-6) -export dd=$(echo $CDATE | cut -c7-8) -export hh=${cyc:-$(echo $CDATE | cut -c9-10)} - -export DATA=${DATA:-${DATAROOT}/init} -export EXTRACT_DIR=${EXTRACT_DIR:-$ROTDIR} -export WORKDIR=${WORKDIR:-$DATA} -export OUTDIR=${OUTDIR:-$ROTDIR} -export COMPONENT="atmos" -export gfs_ver=${gfs_ver:-"v16"} -export OPS_RES=${OPS_RES:-"C768"} -export RUNICSH=${RUNICSH:-${GDASINIT_DIR}/run_v16.chgres.sh} - -# Check if init is needed and run if so -if [[ $gfs_ver = "v16" && $EXP_WARM_START = ".true." && $CASE = $OPS_RES ]]; then - echo "Detected v16 $OPS_RES warm starts, will not run init. Exiting..." - -else - # Run chgres_cube - if [ ! -d $OUTDIR ]; then mkdir -p $OUTDIR ; fi - sh ${RUNICSH} ${CDUMP} - status=$? - [[ $status -ne 0 ]] && exit $status -fi - -########################################## -# Remove the Temporary working directory -########################################## -cd $DATAROOT -[[ $KEEPDATA = "NO" ]] && rm -rf $DATA - -############################################################### -# Exit out cleanly - - -exit 0 diff --git a/parm/config/config.getic b/parm/config/config.getic deleted file mode 100644 index 2771c14058..0000000000 --- a/parm/config/config.getic +++ /dev/null @@ -1,66 +0,0 @@ -#! /usr/bin/env bash - -########## config.getic ########## -# Fetching GFS initial conditions specific - -echo "BEGIN: config.getic" - -# Get task specific resources -. ${EXPDIR}/config.resources getic - -export RETRO="NO" # YES = Pull v16 inputs from retrospective parallels; NO = use operational inputs -export gfs_ver="v16" # Default = v16 -export OPS_RES=${OPS_RES:-"C768"} # Operational resolution - -export UFS_DIR=${HOMEgfs}/sorc/ufs_utils.fd -export GDASINIT_DIR=${UFS_DIR}/util/gdas_init - -export PRODHPSSDIR=/NCEPPROD/hpssprod/runhistory -export GETICSH=${GDASINIT_DIR}/get_v16.data.sh - -if [[ ${RETRO:-"NO"} = "YES" ]]; then # Retrospective parallel input - export GETICSH=${GDASINIT_DIR}/get_v16retro.data.sh - if [[ "${PDY}${cyc}" -lt "2019060106" ]]; then - HPSSDIR=/NCEPDEV/emc-global/5year/emc.glopara/WCOSS_D/gfsv16/v16retro0e - elif [[ "${PDY}${cyc}" -lt "2019090100" ]]; then - HPSSDIR=/NCEPDEV/emc-global/5year/emc.glopara/WCOSS_D/gfsv16/v16retro1e - elif [[ "${PDY}${cyc}" -lt "2019101706" ]]; then - HPSSDIR=/NCEPDEV/emc-global/5year/emc.glopara/WCOSS_D/gfsv16/v16retro2e - elif [[ "${PDY}${cyc}" -lt "2020122200" ]]; then - HPSSDIR=/NCEPDEV/emc-global/5year/emc.glopara/WCOSS_D/gfsv16/v16rt2 - elif [[ "${PDY}${cyc}" -le "2021032506" ]]; then - HPSSDIR=/NCEPDEV/emc-global/5year/emc.glopara/WCOSS_D/gfsv16/v16rt2n - else - set +x - echo NO DATA FOR "${PDY}${cyc}" - exit 3 - fi -elif [[ ${RETRO:-"NO"} = "NO" ]]; then # Operational input - # No ENKF data prior to 2012/05/21/00z - if [[ "${PDY}${cyc}" -lt "2012052100" ]]; then - set +x - echo FATAL ERROR: SCRIPTS DO NOT SUPPORT OLD GFS DATA - elif [[ "${PDY}${cyc}" -lt "2016051000" ]]; then - export gfs_ver=v12 - export GETICSH=${GDASINIT_DIR}/get_pre-v14.data.sh - elif [[ "${PDY}${cyc}" -lt "2017072000" ]]; then - export gfs_ver=v13 - export GETICSH=${GDASINIT_DIR}/get_pre-v14.data.sh - elif [[ "${PDY}${cyc}" -lt "2019061200" ]]; then - export gfs_ver=v14 - export GETICSH=${GDASINIT_DIR}/get_${gfs_ver}.data.sh - elif [[ "${PDY}${cyc}" -lt "2021032100" ]]; then - export gfs_ver=v15 - export GETICSH=${GDASINIT_DIR}/get_${gfs_ver}.data.sh - elif [[ "${PDY}${cyc}" -lt "2021032106" ]]; then - # The way the v16 switch over was done, there is no complete - # set of v16 or v15 data for 2021032100. And although - # v16 was officially implemented 2021032212, the v16 prod - # tarballs were archived starting 2021032106. - set +x - echo FATAL ERROR: NO V15 OR V16 DATA FOR 2021032100 - exit 1 - fi -fi - -echo "END: config.getic" diff --git a/parm/config/config.init b/parm/config/config.init deleted file mode 100644 index 83f65c48d0..0000000000 --- a/parm/config/config.init +++ /dev/null @@ -1,54 +0,0 @@ -#! /usr/bin/env bash - -########## config.init ########## -# Prepare initial conditions - -echo "BEGIN: config.init" - -# Get task specific resources -. $EXPDIR/config.resources init - -# Get task specific resources -. $EXPDIR/config.getic - -export UFS_DIR=${HOMEgfs}/sorc/ufs_utils.fd -export GDASINIT_DIR=${UFS_DIR}/util/gdas_init - -export CRES_HIRES=$CASE -export CRES_ENKF=$CASE_ENKF -export FRAC_ORO="yes" - -export RUNICSH=${GDASINIT_DIR}/run_v16.chgres.sh -if [ "${RETRO:-"NO"}" = "YES" ] || [ "$CDUMP" = "gdas" ]; then - export RUNICSH=${GDASINIT_DIR}/run_v16retro.chgres.sh -fi - -if [[ ${RETRO:-"NO"} = "NO" ]]; then # Operational input - # No ENKF data prior to 2012/05/21/00z - if [[ "${PDY}${cyc}" -lt "2012052100" ]]; then - set +x - echo FATAL ERROR: SCRIPTS DO NOT SUPPORT OLD GFS DATA - elif [[ "${PDY}${cyc}" -lt "2016051000" ]]; then - export gfs_ver=v12 - export RUNICSH=${GDASINIT_DIR}/run_pre-v14.chgres.sh - elif [[ "${PDY}${cyc}" -lt "2017072000" ]]; then - export gfs_ver=v13 - export RUNICSH=${GDASINIT_DIR}/run_pre-v14.chgres.sh - elif [[ "${PDY}${cyc}" -lt "2019061200" ]]; then - export gfs_ver=v14 - export RUNICSH=${GDASINIT_DIR}/run_${gfs_ver}.chgres.sh - elif [[ "${PDY}${cyc}" -lt "2021032100" ]]; then - export gfs_ver=v15 - export RUNICSH=${GDASINIT_DIR}/run_${gfs_ver}.chgres.gfs.sh - elif [[ "${PDY}${cyc}" -lt "2021032106" ]]; then - # The way the v16 switch over was done, there is no complete - # set of v16 or v15 data for 2021032100. And although - # v16 was officially implemented 2021032212, the v16 prod - # tarballs were archived starting 2021032106. - set +x - echo FATAL ERROR: NO V15 OR V16 DATA FOR 2021032100 - exit 1 - fi -fi - -echo "END: config.init" diff --git a/parm/config/config.landanlprep b/parm/config/config.landanlprep old mode 100755 new mode 100644 diff --git a/parm/config/config.resources b/parm/config/config.resources index 3eb9c8535e..35a713e939 100644 --- a/parm/config/config.resources +++ b/parm/config/config.resources @@ -8,7 +8,7 @@ if [[ $# -ne 1 ]]; then echo "Must specify an input task argument to set resource variables!" echo "argument can be any one of the following:" - echo "getic init coupled_ic aerosol_init" + echo "coupled_ic aerosol_init" echo "atmanlinit atmanlrun atmanlfinal" echo "atmensanlinit atmensanlrun atmensanlfinal" echo "landanlprep landanlinit landanlrun landanlfinal" @@ -755,14 +755,6 @@ elif [[ ${step} = "echgres" ]]; then export memory_echgres="200GB" fi -elif [[ ${step} = "init" ]]; then - - export wtime_init="00:30:00" - export npe_init=24 - export nth_init=1 - export npe_node_init=6 - export memory_init="70G" - elif [[ ${step} = "init_chem" ]]; then export wtime_init_chem="00:30:00" @@ -777,7 +769,7 @@ elif [[ ${step} = "mom6ic" ]]; then export npe_node_mom6ic=24 export is_exclusive=True -elif [[ ${step} = "arch" || ${step} = "earc" || ${step} = "getic" ]]; then +elif [[ ${step} = "arch" || ${step} = "earc" ]]; then eval "export wtime_${step}='06:00:00'" eval "export npe_${step}=1" diff --git a/workflow/applications.py b/workflow/applications.py index 2f7a16ecab..0cc6831c0c 100644 --- a/workflow/applications.py +++ b/workflow/applications.py @@ -240,20 +240,11 @@ def _forecast_only_configs(self): Returns the config_files that are involved in the forecast-only app """ - configs = ['fcst'] + configs = ['coupled_ic', 'fcst', 'arch'] if self.do_atm: configs += ['post', 'vrfy'] - configs += ['arch'] - - if self.model_app in ['S2S', 'S2SW', 'S2SWA', 'NG-GODAS']: - configs += ['coupled_ic'] - else: - configs += ['init'] - if self.do_hpssarch: - configs += ['getic'] - if self.do_aero: configs += ['aerosol_init'] @@ -478,14 +469,7 @@ def _get_forecast_only_task_names(self): This is the place where that order is set. """ - tasks = [] - - if self.model_app in ['S2S', 'S2SW', 'S2SWA', 'NG-GODAS']: - tasks += ['coupled_ic'] - else: - if self.do_hpssarch: - tasks += ['getic'] - tasks += ['init'] + tasks = ['coupled_ic'] if self.do_aero: tasks += ['aerosol_init'] diff --git a/workflow/ecflow_build.yml b/workflow/ecflow_build.yml index ff51ef1741..4ca70da9a2 100644 --- a/workflow/ecflow_build.yml +++ b/workflow/ecflow_build.yml @@ -19,16 +19,9 @@ suites: tasks: jgfs_forecast: triggers: - - task: jgfs_getic - task: jgfs_atmos_post_f( 2,1 ) - task: jgfs_forecast suite: fcstplus - jgfs_getic: - template: skip - events: - - test_event - edits: - RUN: 'gfs' post: tasks: jgfs_atmos_post_manager[ 1,2 ]: @@ -66,5 +59,5 @@ suites: tasks: jgfs_forecast: triggers: - - task: jgfs_getic + - task: jgfs_getic # TODO: Not sure about this, leave as is suite: fcstonly diff --git a/workflow/rocoto/workflow_tasks.py b/workflow/rocoto/workflow_tasks.py index 09fcf403fd..d45c13bff7 100644 --- a/workflow/rocoto/workflow_tasks.py +++ b/workflow/rocoto/workflow_tasks.py @@ -10,8 +10,8 @@ class Tasks: - SERVICE_TASKS = ['arch', 'earc', 'getic'] - VALID_TASKS = ['aerosol_init', 'coupled_ic', 'getic', 'init', + SERVICE_TASKS = ['arch', 'earc'] + VALID_TASKS = ['aerosol_init', 'coupled_ic', 'prep', 'anal', 'sfcanl', 'analcalc', 'analdiag', 'gldas', 'arch', 'atmanlinit', 'atmanlrun', 'atmanlfinal', 'ocnanalprep', 'ocnanalbmat', 'ocnanalrun', 'ocnanalchkpt', 'ocnanalpost', 'ocnanalvrfy', @@ -247,45 +247,6 @@ def coupled_ic(self): return task - def getic(self): - - atm_input_path = self._template_to_rocoto_cycstring(self._base['COM_ATMOS_INPUT_TMPL']) - atm_restart_path = self._template_to_rocoto_cycstring(self._base['COM_ATMOS_RESTART_TMPL']) - - deps = [] - dep_dict = {'type': 'data', 'data': f'{atm_input_path}/sfc_data.tile6.nc'} - deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'data', 'data': f'{atm_restart_path}/@Y@m@d.@H0000.sfcanl_data.tile6.nc'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='nor', dep=deps) - - resources = self.get_resource('getic') - task = create_wf_task('getic', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) - - return task - - def init(self): - - atm_anl_path = self._template_to_rocoto_cycstring(self._base["COM_ATMOS_ANALYSIS_TMPL"]) - atm_restart_path = self._template_to_rocoto_cycstring(self._base["COM_ATMOS_RESTART_TMPL"]) - - deps = [] - dep_dict = {'type': 'data', 'data': f'{atm_anl_path}/gfs.t@Hz.atmanl.nc'} - deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'data', 'data': f'{atm_restart_path}/@Y@m@d.@H0000.sfcanl_data.tile6.nc'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='or', dep=deps) - - if self.app_config.do_hpssarch: - dep_dict = {'type': 'task', 'name': f'{self.cdump}getic'} - dependencies.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=dependencies) - - resources = self.get_resource('init') - task = create_wf_task('init', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) - - return task - def prep(self): dump_suffix = self._base["DUMP_SUFFIX"] @@ -737,29 +698,8 @@ def fcst(self): def _fcst_forecast_only(self): dependencies = [] - deps = [] - if self.app_config.do_atm: - atm_input_path = self._template_to_rocoto_cycstring(self._base["COM_ATMOS_INPUT_TMPL"]) - atm_restart_path = self._template_to_rocoto_cycstring(self._base["COM_ATMOS_RESTART_TMPL"]) - data = f'{atm_input_path}/sfc_data.tile6.nc' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = f'{atm_restart_path}/@Y@m@d.@H0000.sfcanl_data.tile6.nc' - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies.append(rocoto.create_dependency(dep_condition='or', dep=deps)) - - else: # data-atmosphere - data = f'&ICSDIR;/@Y@m@d@H/datm/gefs.@Y@m.nc' # GEFS forcing - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = '&ICSDIR;/@Y@m@d@H/ocn/MOM.res.nc' # TODO - replace with actual ocean IC - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = '&ICSDIR;/@Y@m@d@H/ice/cice5_model.res.nc' # TODO - replace with actual ice IC - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies.append(rocoto.create_dependency(dep_condition='and', dep=deps)) + dep_dict = {'type': 'task', 'name': f'{self.cdump}coupled_ic'} + dependencies.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_wave and self.cdump in self.app_config.wave_cdumps: wave_job = 'waveprep' if self.app_config.model_app in ['ATMW'] else 'waveinit' diff --git a/workflow/rocoto/workflow_xml.py b/workflow/rocoto/workflow_xml.py index 856cade2b9..99f1eaa83d 100644 --- a/workflow/rocoto/workflow_xml.py +++ b/workflow/rocoto/workflow_xml.py @@ -144,6 +144,9 @@ def _get_cycledefs_forecast_only(self): if sdate <= edate: strings.append(f'\t{sdate.strftime("%Y%m%d%H%M")} {edate.strftime("%Y%m%d%H%M")} {interval}') + strings.append('') + strings.append('') + return '\n'.join(strings) @staticmethod