#!/bin/sh date export PS4='+ $SECONDS + ' set -x export cycle=${cycle:-t${cyc:?}z} export storm_num=${storm_num:-1} export stormlabel=${stormlabel:-storm$storm_num} export hafs_ver=${hafs_ver:?} export NET=${NET:?} export RUN=${RUN:?} export RUN_ENVIR=${RUN_ENVIR:?} export SENDCOM=${SENDCOM:-YES} export SENDDBN=${SENDDBN:-NO} export SENDECF=${SENDECF:-NO} export EMAIL_SDM=${EMAIL_SDM:-NO} export SCRUBDATA=${SCRUBDATA:-YES} # HAFS workflow jobs use shared working dir, and the CLEANUP or SCRUB job will clean up WORKhafs #export KEEPDATA=${KEEPDATA:-YES} export KEEPDATA=YES export HOMEhafs=${HOMEhafs:-${OPSROOT:?}/hafs.${hafs_ver:?}} export USHhafs=$HOMEhafs/ush export EXEChafs=$HOMEhafs/exec export PARMhafs=$HOMEhafs/parm export FIXhafs=$HOMEhafs/fix export WORKhafs=${WORKhafs:-${DATAROOT:?}/${RUN:?}${storm_num:?}_${cyc:?}_${envir:?}_${hafs_ver:?}} if [ "${RUN_ENVIR^^}" != "NCO" ]; then # Detect platform and load modules if not run by NCO source ${USHhafs}/hafs_pre_job.sh.inc export machine=${WHERE_AM_I:-wcoss2} if [ ${machine} = "wcoss2" ]; then module reset module use $HOMEhafs/sorc/hafs_gsi.fd/modulefiles module load gsi_${machine} module load cray-pals/1.2.2 module load cfp/2.0.4 fi if [ ${machine} = "hera" ]; then module purge module use $HOMEhafs/sorc/hafs_gsi.fd/modulefiles module load gsi_${machine}.intel fi if [[ ${machine} = "jet" ]] || [[ ${machine} = "orion" ]] || [[ ${machine} = "hercules" ]]; then module purge module use $HOMEhafs/sorc/hafs_gsi.fd/modulefiles module load gsi_${machine} fi module list else # Run by NCO on WCOSS2 export machine=${WHERE_AM_I:-wcoss2} # Prepend $USHhafs to python package search path export PYTHONPATH=$USHhafs${PYTHONPATH:+:$PYTHONPATH} # Initialize PDY # setpdy.sh # only needed for the launch job # Get PDY source ${WORKhafs}/PDY fi source ${USHhafs}/hafs_runcmd.sh.inc env export COMhafs=${COMhafs:-$(compath.py ${envir}/${NET}/${hafs_ver})/${RUN}.${PDY}/${cyc}} export CONFhafs=$COMhafs/$stormlabel.conf export HOLDVARS=${HOLDVARS:-$COMhafs/$stormlabel.holdvars.txt} source ${HOLDVARS} export GSI_D01=${GSI_D01:-NO} export GSI_D02=${GSI_D02:-NO} export ENSDA=${ENSDA:-NO} export CDATE=${CDATE:-${YMDH}} yr=$(echo $CDATE | cut -c1-4) mn=$(echo $CDATE | cut -c5-6) dy=$(echo $CDATE | cut -c7-8) if [ ${RUN_ATM_VI_FGAT} = "YES" ]; then RESTARTinp_fgat06=${WORKhafs}/intercom/RESTART_vi_fgat06 elif [ ${RUN_ATM_MERGE_FGAT} = "YES" ]; then RESTARTinp_fgat06=${WORKhafs}/intercom/RESTART_merge_fgat06 elif [ ${RUN_ATM_INIT_FGAT} = "YES" ]; then RESTARTinp_fgat06=${WORKhafs}/intercom/RESTART_init_fgat06 else if [ ${RUN_ATM_VI} = "YES" ]; then RESTARTinp_fgat06=${WORKhafs}/intercom/RESTART_vi elif [ ${RUN_ATM_MERGE} = "YES" ]; then RESTARTinp_fgat06=${WORKhafs}/intercom/RESTART_merge elif [ ${RUN_ATM_INIT} = "YES" ]; then RESTARTinp_fgat06=${WORKhafs}/intercom/RESTART_init else RESTARTinp_fgat06=${COMOLD}/RESTART fi fi RESTARTinp=${RESTARTinp_fgat06} #=============================================================================== # Run analysis for d01 if needed if [ ${GSI_D01} = YES ]; then export gridstr=$(echo ${out_gridnames} | cut -d, -f 1) export neststr=${neststr:-""} export tilestr=${tilestr:-".tile1"} export nesttilestr=${nesttilestr:-""} export DATA=${WORKhafs}/analysis if [ "${SCRUBDATA:-YES}" = YES ]; then rm -rf $DATA fi mkdir -p $DATA cd $DATA # Execute ex-script ${HOMEhafs}/scripts/exhafs_analysis.sh export err=$?; err_chk # Cleanup DATA dir cd ${WORKhafs} if [ "${KEEPDATA:-YES}" != "YES" ]; then rm -rf $DATA fi else # Pass over the need files for downstream jobs export neststr=${neststr:-""} export tilestr=${tilestr:-".tile1"} export nesttilestr=${nesttilestr:-""} export RESTARTanl=${RESTARTanl:-${WORKhafs}/intercom/RESTART_analysis} mkdir -p ${RESTARTanl} if [ -s ${RESTARTinp}/${PDY}.${cyc}0000.fv_core.res${neststr}${tilestr}.nc ]; then ${NCP} ${RESTARTinp}/${PDY}.${cyc}0000.coupler.res ${RESTARTanl}/${PDY}.${cyc}0000.coupler.res ${NCP} ${RESTARTinp}/${PDY}.${cyc}0000.fv_core.res${neststr}.nc ${RESTARTanl}/${PDY}.${cyc}0000.fv_core.res${neststr}.nc ${NCP} ${RESTARTinp}/${PDY}.${cyc}0000.sfc_data${nesttilestr}.nc ${RESTARTanl}/${PDY}.${cyc}0000.sfc_data${nesttilestr}.nc ${NCP} ${RESTARTinp}/${PDY}.${cyc}0000.fv_srf_wnd.res${neststr}${tilestr}.nc ${RESTARTanl}/${PDY}.${cyc}0000.fv_srf_wnd.res${neststr}${tilestr}.nc ${NCP} ${RESTARTinp}/${PDY}.${cyc}0000.fv_core.res${neststr}${tilestr}.nc ${RESTARTanl}/${PDY}.${cyc}0000.fv_core.res${neststr}${tilestr}.nc ${NCP} ${RESTARTinp}/${PDY}.${cyc}0000.fv_tracer.res${neststr}${tilestr}.nc ${RESTARTanl}/${PDY}.${cyc}0000.fv_tracer.res${neststr}${tilestr}.nc ${NCP} ${RESTARTinp}/oro_data${nesttilestr}.nc ${RESTARTanl}/oro_data${nesttilestr}.nc ${NCP} ${RESTARTinp}/atmos_static${nesttilestr}.nc ${RESTARTanl}/atmos_static${nesttilestr}.nc ${NCP} ${RESTARTinp}/grid_spec${nesttilestr}.nc ${RESTARTanl}/grid_spec${nesttilestr}.nc # pass over phy_data as well ${NCP} ${RESTARTinp}/${PDY}.${cyc}0000.phy_data${nesttilestr}.nc ${RESTARTanl}/${PDY}.${cyc}0000.phy_data${nesttilestr}.nc if [[ ! -z "$neststr" ]] && [ -e ${RESTARTinp}/${PDY}.${cyc}0000.fv_BC_ne.res${neststr}.nc ]; then ${NCP} ${RESTARTinp}/${PDY}.${cyc}0000.fv_BC_ne.res${neststr}.nc ${RESTARTanl}/${PDY}.${cyc}0000.fv_BC_ne.res${neststr}.nc ${NCP} ${RESTARTinp}/${PDY}.${cyc}0000.fv_BC_sw.res${neststr}.nc ${RESTARTanl}/${PDY}.${cyc}0000.fv_BC_sw.res${neststr}.nc fi # Pass over the grid_mspec files for moving nest if [[ "${is_moving_nest:-".false."}" = *".true."* ]] || [[ "${is_moving_nest:-".false."}" = *".T."* ]]; then if [[ -z "$neststr" ]] && [[ $tilestr = ".tile1" ]]; then # "grid_mspec_${yr}_${mn}_${dy}_${cyc}.nc" for domain 02 ${NCP} -p ${RESTARTinp}/grid_mspec_${yr}_${mn}_${dy}_${cyc}.nc ${RESTARTanl}/ else # "grid_mspec.nest02_${yr}_${mn}_${dy}_${cyc}.tile2.nc" for domain 02 ${NCP} -p ${RESTARTinp}/grid_mspec${neststr}_${yr}_${mn}_${dy}_${cyc}${tilestr}.nc ${RESTARTanl}/ fi fi fi #end if [ -s ${RESTARTinp}/${PDY}.${cyc}0000.fv_core.res${neststr}${tilestr}.nc ]; then fi #end if [ ${GSI_D01} = YES ]; then #=============================================================================== # Run analysis for d02 if needed if [ ${GSI_D02} = YES ] && [[ $nest_grids -ge 2 ]]; then export gridstr=$(echo ${out_gridnames} | cut -d, -f 2) export neststr=".nest02" export tilestr=".tile2" export nesttilestr=".nest02.tile2" export DATA=${WORKhafs}/analysis_d02 if [ "${SCRUBDATA:-YES}" = YES ]; then rm -rf $DATA fi mkdir -p $DATA cd $DATA # Execute ex-script ${HOMEhafs}/scripts/exhafs_analysis.sh export err=$?; err_chk # Cleanup DATA dir cd ${WORKhafs} if [ "${KEEPDATA:-YES}" != "YES" ]; then rm -rf $DATA fi elif [ ${GSI_D02} != YES ] && [[ $nest_grids -ge 2 ]]; then export neststr=".nest02" export tilestr=".tile2" export nesttilestr=".nest02.tile2" export RESTARTanl=${RESTARTanl:-${WORKhafs}/intercom/RESTART_analysis} mkdir -p ${RESTARTanl} if [ -s ${RESTARTinp}/${PDY}.${cyc}0000.fv_core.res${neststr}${tilestr}.nc ]; then ${NCP} ${RESTARTinp}/${PDY}.${cyc}0000.coupler.res ${RESTARTanl}/${PDY}.${cyc}0000.coupler.res ${NCP} ${RESTARTinp}/${PDY}.${cyc}0000.fv_core.res${neststr}.nc ${RESTARTanl}/${PDY}.${cyc}0000.fv_core.res${neststr}.nc ${NCP} ${RESTARTinp}/${PDY}.${cyc}0000.sfc_data${nesttilestr}.nc ${RESTARTanl}/${PDY}.${cyc}0000.sfc_data${nesttilestr}.nc ${NCP} ${RESTARTinp}/${PDY}.${cyc}0000.fv_srf_wnd.res${neststr}${tilestr}.nc ${RESTARTanl}/${PDY}.${cyc}0000.fv_srf_wnd.res${neststr}${tilestr}.nc ${NCP} ${RESTARTinp}/${PDY}.${cyc}0000.fv_core.res${neststr}${tilestr}.nc ${RESTARTanl}/${PDY}.${cyc}0000.fv_core.res${neststr}${tilestr}.nc ${NCP} ${RESTARTinp}/${PDY}.${cyc}0000.fv_tracer.res${neststr}${tilestr}.nc ${RESTARTanl}/${PDY}.${cyc}0000.fv_tracer.res${neststr}${tilestr}.nc ${NCP} ${RESTARTinp}/oro_data${nesttilestr}.nc ${RESTARTanl}/oro_data${nesttilestr}.nc ${NCP} ${RESTARTinp}/atmos_static${nesttilestr}.nc ${RESTARTanl}/atmos_static${nesttilestr}.nc ${NCP} ${RESTARTinp}/grid_spec${nesttilestr}.nc ${RESTARTanl}/grid_spec${nesttilestr}.nc # pass over phy_data as well ${NCP} ${RESTARTinp}/${PDY}.${cyc}0000.phy_data${nesttilestr}.nc ${RESTARTanl}/${PDY}.${cyc}0000.phy_data${nesttilestr}.nc if [[ ! -z "$neststr" ]] && [ -e ${RESTARTinp}/${PDY}.${cyc}0000.fv_BC_ne.res${neststr}.nc ]; then ${NCP} ${RESTARTinp}/${PDY}.${cyc}0000.fv_BC_ne.res${neststr}.nc ${RESTARTanl}/${PDY}.${cyc}0000.fv_BC_ne.res${neststr}.nc ${NCP} ${RESTARTinp}/${PDY}.${cyc}0000.fv_BC_sw.res${neststr}.nc ${RESTARTanl}/${PDY}.${cyc}0000.fv_BC_sw.res${neststr}.nc fi # Pass over the grid_mspec files for moving nest if [[ "${is_moving_nest:-".false."}" = *".true."* ]] || [[ "${is_moving_nest:-".false."}" = *".T."* ]]; then if [[ -z "$neststr" ]] && [[ $tilestr = ".tile1" ]]; then # "grid_mspec_${yr}_${mn}_${dy}_${cyc}.nc" for domain 02 ${NCP} -p ${RESTARTinp}/grid_mspec_${yr}_${mn}_${dy}_${cyc}.nc ${RESTARTanl}/ else # "grid_mspec.nest02_${yr}_${mn}_${dy}_${cyc}.tile2.nc" for domain 02 ${NCP} -p ${RESTARTinp}/grid_mspec${neststr}_${yr}_${mn}_${dy}_${cyc}${tilestr}.nc ${RESTARTanl}/ fi fi fi #end if [ -s ${RESTARTinp}/${PDY}.${cyc}0000.fv_core.res${neststr}${tilestr}.nc ]; then fi #end if [ ${GSI_D02} = YES ] && [[ $nest_grids -ge 2 ]]; then #=============================================================================== date