From cf064a5c043106ea5ea6c2ce27e036e6d40babf5 Mon Sep 17 00:00:00 2001 From: Walter Kolczynski - NOAA Date: Fri, 5 May 2023 16:32:31 -0400 Subject: [PATCH 1/5] Update documentation for PR standards (#1573) The section on commit message standards is updated to be for pull requests instead. Additional messaging about using the provided template is added, and bullets not relevant to PRs (line-wrapping and leaving a space between subject and body) are removed. --- docs/source/development.rst | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/source/development.rst b/docs/source/development.rst index 6c7711bfe1..e95516bcca 100644 --- a/docs/source/development.rst +++ b/docs/source/development.rst @@ -92,21 +92,21 @@ All new code after 2022 Sep 1 will be required to meet these standards. We will .. _commit-standards: -======================== -Commit message standards -======================== +====================== +Pull request standards +====================== -**ALL** commits must follow best practices for commit messages: https://chris.beams.io/posts/git-commit/ +Pull requests should follow the pre-filled template provided when you open the PR. PR titles and descriptions become the commit message when the PR is squashed and merged, so we ask that they follow best practices for commit messages: - * Separate subject from body with a blank line - * Limit the subject line to 50 characters + * Limit the subject line (PR title) to 50 characters * Capitalize the subject line * Do not end the subject line with a period * Use the `imperative mood `_ in the subject line - * Wrap the body at 72 characters * Use the body to explain what and why vs. how * The final line of the commit message should include tags to relevant issues (e.g. ``Refs: #217, #300``) +This list is a modified version of the one provided at https://chris.beams.io/posts/git-commit/ with a couple removed that are not relevant to GitHub PRs. That source also provides the motivation for making sure we have good commit messages. + Here is the example commit message from the article linked above; it includes descriptions of what would be in each part of the commit message for guidance: :: From 63d5522e98fa65ce62d7ff681ed8923f48f0517e Mon Sep 17 00:00:00 2001 From: Kate Friedman Date: Fri, 5 May 2023 16:35:24 -0400 Subject: [PATCH 2/5] New UFS_UTILS hash for gdas_init COM reorg updates (#1581) This PR updates the UFS_UTILS hash to get `gdas_init` updates for the recent COM reorg. A few additional UFS_UTILS commits are also included but aren't significant changes, as noted by @GeorgeGayno-NOAA: "Updates since that hash have been mostly small things like bug fixes. However, the w3nco library was replaced by the w3emc library at https://github.com/ufs-community/UFS_UTILS/commit/7efbe0fd2dd373ae54d6c2954ebd484e0a3aab48". Updates to improve repo build are also included with this hash (https://github.com/ufs-community/UFS_UTILS/commit/b4900c483bd9cdb274aae6f75c0815a5f86bdaae). New hash from completion of https://github.com/ufs-community/UFS_UTILS/pull/820 Resolves #1527 --- Externals.cfg | 2 +- sorc/checkout.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Externals.cfg b/Externals.cfg index e78cd2838e..371d8a1ecd 100644 --- a/Externals.cfg +++ b/Externals.cfg @@ -15,7 +15,7 @@ protocol = git required = True [UFS-Utils] -hash = 5b67e4d +hash = 72a0471 local_path = sorc/ufs_utils.fd repo_url = https://github.com/ufs-community/UFS_UTILS.git protocol = git diff --git a/sorc/checkout.sh b/sorc/checkout.sh index 2d52c0052d..2dd4929694 100755 --- a/sorc/checkout.sh +++ b/sorc/checkout.sh @@ -156,7 +156,7 @@ mkdir -p "${logdir}" # The checkout version should always be a speciifc commit (hash or tag), not a branch errs=0 checkout "gfs_utils.fd" "https://github.com/NOAA-EMC/gfs-utils" "0b8ff56" ; errs=$((errs + $?)) -checkout "ufs_utils.fd" "https://github.com/ufs-community/UFS_UTILS.git" "4e673bf" ; errs=$((errs + $?)) +checkout "ufs_utils.fd" "https://github.com/ufs-community/UFS_UTILS.git" "72a0471" ; errs=$((errs + $?)) checkout "ufs_model.fd" "https://github.com/ufs-community/ufs-weather-model" "${ufs_model_hash:-2247060}" ; errs=$((errs + $?)) checkout "verif-global.fd" "https://github.com/NOAA-EMC/EMC_verif-global.git" "c267780" ; errs=$((errs + $?)) From dd19f05afa8b80e207de215c3d5f447107924f13 Mon Sep 17 00:00:00 2001 From: Rahul Mahajan Date: Fri, 5 May 2023 16:36:34 -0400 Subject: [PATCH 3/5] Retire `getic.sh` and `init.sh` jobs from global-workflow (#1578) This PR removes: - `getic.sh` - job used to get initial conditions from HPSS from a past experiment/ops - `init.sh` - job used to create experiment resolution specific initial conditions from the ones fetched by `getic.sh`. Both these jobs were primarily used by the atmosphere model component developers in the past. They have since been staging pre-generated ICs making these jobs obsolete. Documentation will point to ufs-utils to generate the initial conditions. The utilities from ufs-utils were used to identify the appropriate HPSS tarball as well as performing interpolation for the atmospheric model component. There is no such utility available for the other model components making these scripts only partially useful. In a future PR, an update to the definition of `BASE_CPLIC` and `coupled_ic` jobs will be made to make use of `--icsdir` to point to pre-staged locations of initial conditions. Fixes #1569 --- docs/source/configure.rst | 3 - docs/source/init.rst | 4 +- env/HERA.env | 4 - env/JET.env | 4 - env/ORION.env | 4 - env/S4.env | 4 - env/WCOSS2.env | 4 - jobs/rocoto/coupled_ic.sh | 95 ++++++++--------- jobs/rocoto/getic.sh | 169 ------------------------------ jobs/rocoto/init.sh | 77 -------------- parm/config/config.getic | 66 ------------ parm/config/config.init | 54 ---------- parm/config/config.landanlprep | 0 parm/config/config.resources | 12 +-- workflow/applications.py | 20 +--- workflow/ecflow_build.yml | 9 +- workflow/rocoto/workflow_tasks.py | 68 +----------- workflow/rocoto/workflow_xml.py | 3 + 18 files changed, 61 insertions(+), 539 deletions(-) delete mode 100755 jobs/rocoto/getic.sh delete mode 100755 jobs/rocoto/init.sh delete mode 100644 parm/config/config.getic delete mode 100644 parm/config/config.init mode change 100755 => 100644 parm/config/config.landanlprep 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 From 6838c0ba5a1dc9033c2e7488ab1a970f70fea506 Mon Sep 17 00:00:00 2001 From: Guillaume Vernieres Date: Fri, 5 May 2023 16:41:36 -0400 Subject: [PATCH 4/5] Fix bugs in the COM refactor of marine DA (#1566) Fixes a couple bugs and does a little cleanup of the COM refactor for marine DA. COM variable definitions are also updated to match the style used in other scripts. --- jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_CHKPT | 5 +++-- jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_POST | 5 ++--- jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_PREP | 9 +++++---- jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_RUN | 5 ++++- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_CHKPT b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_CHKPT index f157488a59..7e4294bd7c 100755 --- a/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_CHKPT +++ b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_CHKPT @@ -23,8 +23,9 @@ export GPREFIX="${GDUMP}.t${gcyc}z." export APREFIX="${CDUMP}.t${cyc}z." # Generate COM variables from templates -RUN=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx COM_ATMOS_HISTORY:COM_ATMOS_HISTORY_TMPL -RUN=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx COM_ATMOS_ANALYSIS:COM_ATMOS_ANALYSIS_TMPL +YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_ANALYSIS + +RUN=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx COM_ATMOS_HISTORY_PREV:COM_ATMOS_HISTORY_TMPL ############################################## diff --git a/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_POST b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_POST index 9b3467feec..eb9607ad21 100755 --- a/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_POST +++ b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_POST @@ -2,7 +2,7 @@ export STRICT="NO" source "${HOMEgfs}/ush/preamble.sh" export WIPE_DATA="NO" -DATA="${DATAROOT}/${RUN}ocnanal_${cyc}" +export DATA="${DATAROOT}/${RUN}ocnanal_${cyc}" source "${HOMEgfs}/ush/jjob_header.sh" -e "ocnanalpost" -c "base ocnanalpost" @@ -14,8 +14,7 @@ export CDATE=${CDATE:-${PDY}${cyc}} export GDUMP=${GDUMP:-"gdas"} # Generate COM variables from templates -RUN=${GDUMP} YMD=${PDY} HH=${cyc} generate_com -rx COM_OCEAN_ANALYSIS:COM_OCEAN_ANALYSIS_TMPL -RUN=${GDUMP} YMD=${PDY} HH=${cyc} generate_com -rx COM_ICE_RESTART +YMD=${PDY} HH=${cyc} generate_com -rx COM_OCEAN_ANALYSIS COM_ICE_RESTART mkdir -p "${COM_OCEAN_ANALYSIS}" mkdir -p "${COM_ICE_RESTART}" diff --git a/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_PREP b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_PREP index c4843c596d..c3fd5b5d65 100755 --- a/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_PREP +++ b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_PREP @@ -22,11 +22,12 @@ export GPREFIX="${GDUMP}.t${gcyc}z." export APREFIX="${CDUMP}.t${cyc}z." # Generate COM variables from templates -RUN=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx COM_OCEAN_HISTORY:COM_OCEAN_HISTORY_TMPL -RUN=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx COM_ICE_HISTORY:COM_ICE_HISTORY_TMPL -RUN=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx COM_ICE_RESTART:COM_ICE_RESTART_TMPL - +YMD=${PDY} HH=${cyc} generate_com -rx COM_OBS +RUN=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx \ + COM_OCEAN_HISTORY_PREV:COM_OCEAN_HISTORY_TMPL \ + COM_ICE_HISTORY_PREV:COM_ICE_HISTORY_TMPL \ + COM_ICE_RESTART_PREV:COM_ICE_RESTART_TMPL ############################################## # Begin JOB SPECIFIC work diff --git a/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_RUN b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_RUN index c89f8b273b..87ca5560c4 100755 --- a/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_RUN +++ b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_RUN @@ -6,11 +6,14 @@ export DATA="${DATAROOT}/${RUN}ocnanal_${cyc}" source "${HOMEgfs}/ush/jjob_header.sh" -e "ocnanalrun" -c "base ocnanal ocnanalrun" +############################################## +# Set variables used in the script +############################################## + ############################################## # Begin JOB SPECIFIC work ############################################## -export COMOUT=${COMOUT:-${ROTDIR}/${CDUMP}.${PDY}/${cyc}/ocean} ############################################################### # Run relevant script From 2fd43d134f9d8479eb37c3800f6bcb715ceb7c3f Mon Sep 17 00:00:00 2001 From: Kate Friedman Date: Mon, 8 May 2023 16:53:21 -0400 Subject: [PATCH 5/5] Redo v16.3 GSI script updates to scripts/exglobal_atmos_analysis.sh (#1535) Updates to scripts/exglobal_atmos_analysis.sh are being put in again after a CRTM issue was resolved. These updates are needed to resolve an issue with the GSI assimilating too low of a number of observations. Also update gsi_ver to 20230112 in fix.ver Refs #1494 #1550 --- parm/config/config.anal | 2 +- parm/config/config.base.emc.dyn | 4 ++-- parm/config/config.base.nco.static | 4 ++-- scripts/exglobal_atmos_analysis.sh | 12 +++++------- versions/fix.ver | 2 +- 5 files changed, 11 insertions(+), 13 deletions(-) diff --git a/parm/config/config.anal b/parm/config/config.anal index f68ec28efe..e3a17f9c6a 100644 --- a/parm/config/config.anal +++ b/parm/config/config.anal @@ -29,7 +29,7 @@ fi # Set parameters specific to L127 if [[ ${LEVS} = "128" ]]; then export GRIDOPTS="nlayers(63)=1,nlayers(64)=1," - export SETUP="gpstop=55,nsig_ext=56,${SETUP:-}" + export SETUP="gpstop=55,nsig_ext=45,${SETUP:-}" fi # Set namelist option for LETKF diff --git a/parm/config/config.base.emc.dyn b/parm/config/config.base.emc.dyn index e5e29d1440..95a071dc9b 100644 --- a/parm/config/config.base.emc.dyn +++ b/parm/config/config.base.emc.dyn @@ -354,13 +354,13 @@ export MAKE_NSSTBUFR="@MAKE_NSSTBUFR@" export MAKE_ACFTBUFR="@MAKE_ACFTBUFR@" # Analysis increments to zero in CALCINCEXEC -export INCREMENTS_TO_ZERO="'liq_wat_inc','icmr_inc'" +export INCREMENTS_TO_ZERO="'liq_wat_inc','icmr_inc','rwmr_inc','snmr_inc','grle_inc'" # Write analysis files for early cycle EnKF export DO_CALC_INCREMENT_ENKF_GFS="YES" # Stratospheric increments to zero -export INCVARS_ZERO_STRAT="'sphum_inc','liq_wat_inc','icmr_inc'" +export INCVARS_ZERO_STRAT="'sphum_inc','liq_wat_inc','icmr_inc','rwmr_inc','snmr_inc','grle_inc'" export INCVARS_EFOLD="5" # Swith to generate netcdf or binary diagnostic files. If not specified, diff --git a/parm/config/config.base.nco.static b/parm/config/config.base.nco.static index e3702852f4..a2620e5ab1 100644 --- a/parm/config/config.base.nco.static +++ b/parm/config/config.base.nco.static @@ -228,10 +228,10 @@ if [ $DONST = "YES" ]; then export FNTSFA=" "; fi export nst_anl=.true. # Analysis increments to zero in CALCINCEXEC -export INCREMENTS_TO_ZERO="'liq_wat_inc','icmr_inc'" +export INCREMENTS_TO_ZERO="'liq_wat_inc','icmr_inc','rwmr_inc','snmr_inc','grle_inc'" # Stratospheric increments to zero -export INCVARS_ZERO_STRAT="'sphum_inc','liq_wat_inc','icmr_inc'" +export INCVARS_ZERO_STRAT="'sphum_inc','liq_wat_inc','icmr_inc','rwmr_inc','snmr_inc','grle_inc'" export INCVARS_EFOLD="5" # Swith to generate netcdf or binary diagnostic files. If not specified, diff --git a/scripts/exglobal_atmos_analysis.sh b/scripts/exglobal_atmos_analysis.sh index ccedbdabda..6ab24523c8 100755 --- a/scripts/exglobal_atmos_analysis.sh +++ b/scripts/exglobal_atmos_analysis.sh @@ -55,8 +55,8 @@ lupp=${lupp:-".true."} cnvw_option=${cnvw_option:-".false."} # Observation usage options -cao_check=${cao_check:-".false."} -ta2tb=${ta2tb:-".false."} +cao_check=${cao_check:-".true."} +ta2tb=${ta2tb:-".true."} # Diagnostic files options lobsdiag_forenkf=${lobsdiag_forenkf:-".false."} @@ -423,9 +423,7 @@ ${NLN} ${RTMFIX}/NPOESS.VISsnow.EmisCoeff.bin ./crtm_coeffs/NPOESS.VISsnow.Emis ${NLN} ${RTMFIX}/NPOESS.VISwater.EmisCoeff.bin ./crtm_coeffs/NPOESS.VISwater.EmisCoeff.bin ${NLN} ${RTMFIX}/FASTEM6.MWwater.EmisCoeff.bin ./crtm_coeffs/FASTEM6.MWwater.EmisCoeff.bin ${NLN} ${RTMFIX}/AerosolCoeff.bin ./crtm_coeffs/AerosolCoeff.bin -${NLN} ${RTMFIX}/CloudCoeff.bin ./crtm_coeffs/CloudCoeff.bin -#$NLN $RTMFIX/CloudCoeff.GFDLFV3.-109z-1.bin ./crtm_coeffs/CloudCoeff.bin - +${NLN} ${RTMFIX}/CloudCoeff.GFDLFV3.-109z-1.bin ./crtm_coeffs/CloudCoeff.bin ############################################################## # Observational data @@ -702,7 +700,7 @@ cat > gsiparm.anl << EOF iguess=-1, tzr_qc=${TZR_QC}, oneobtest=.false.,retrieval=.false.,l_foto=.false., - use_pbl=.false.,use_compress=.true.,nsig_ext=12,gpstop=50.,commgpstop=45.,commgpserrinf=1.0, + use_pbl=.false.,use_compress=.true.,nsig_ext=45,gpstop=50.,commgpstop=45.,commgpserrinf=1.0, use_gfs_nemsio=.false.,use_gfs_ncio=.true.,sfcnst_comb=.true., use_readin_anl_sfcmask=${USE_READIN_ANL_SFCMASK}, lrun_subdirs=${lrun_subdirs}, @@ -755,7 +753,7 @@ cat > gsiparm.anl << EOF ${OBSQC} / &OBS_INPUT - dmesh(1)=145.0,dmesh(2)=150.0,dmesh(3)=100.0,dmesh(4)=25.0,time_window_max=3.0, + dmesh(1)=145.0,dmesh(2)=150.0,dmesh(3)=100.0,dmesh(4)=50.0,time_window_max=3.0, ${OBSINPUT} / OBS_INPUT:: diff --git a/versions/fix.ver b/versions/fix.ver index 0046ed5eb8..02b0953a94 100644 --- a/versions/fix.ver +++ b/versions/fix.ver @@ -12,7 +12,7 @@ export gdas_fv3jedi_ver=20220805 export gdas_gsibec_ver=20221031 export gldas_ver=20220920 export glwu_ver=20220805 -export gsi_ver=20221128 +export gsi_ver=20230112 export lut_ver=20220805 export mom6_ver=20220805 export orog_ver=20220805