#!/bin/ksh set -ex ############################################# # echo "Usage: $0 fore/hind cfs.config" # exit 1 ############################################# echo $1 echo $2 #export MP_IOAGENT_CNT=all #export MP_IO_BUFFER_SIZE=8M #export MP_SINGLE_THREAD=yes #export MP_USE_BULK_XFER=yes #export MP_COLLECTIVE_OFFLOAD=yes ########################################################################## # Runs CLIMATE FORECAST SYSTEM (CFS) in the Fore(Hind)cast mode # # current authors: Shrinivas Moorthi W/NP2 ; February 2004 # # updated for cfsv2 in March/April 2010 by Shrinivas Moorthi # # and # # This script is based on the original SFM script authored by: # # Hann-Ming Henry Juang W/NP5 : 06/12/01 # ########################################################################## #################################### # Specify NET and RUN Name and model #################################### export NET=cfs export RTYPE=${1:-${RTYPE:-forecast}} export RUN=${RUN:-cfs} export host=${host:-`hostname | cut -c1`} ############################################### # SETUP CLIMATE FOREFCST PROCESSING VARIABLES ############################################### export PS4='$SECONDS + ' date ########################################################## export DATA=${DATA:-${DATAROOT:?}/${jobid:?}} mkdir -p $DATA cd $DATA export ENS_MEM=${ENS_MEM:-1} export ENS_MEM=$((ENS_MEM+0)) if [ $ENS_MEM -lt 10 ] ; then export ENS_MEM=0$ENS_MEM ; fi ####################################################### # Specify the year of the start and end of the hindcast ####################################################### if [ $RTYPE = hindcast ] ; then export START_YEAR=${STARTYEAR:-1981} export END_YEAR=${END_YEAR:-2010} fi #################################### # Determine Job Output Name on System #################################### export pgmout="OUTPUT.$$" export pgmerr=errfile export cycle=t${cyc}z #################################### # SAVEGES - Copy Files From TMPDIR to COMOUT # RERUN - Rerun fcst from beginning (default no) # VERBOSE - Specify Verbose Output #################################### export SAVEGES=${SAVEGES:-YES} export RERUN=${RERUN:-NO} export VERBOSE=${VERBOSE:-YES} export BATCH_POST=${BATCH_POST:-NO} ############################## # Run setpdy and initialize PDY variables ############################## sh setpdy.sh . ./PDY export CDATE=${CDATE:-${PDY}$cyc} ########################################################## # define cfs directories/scripts/executables ########################################################## export EXECcfs=$HOMEcfs/exec export PARMcfs=$HOMEcfs/parm export USHcfs=$HOMEcfs/ush export FIXcfs=$HOMEcfs/fix export FIX_AM=$FIXcfs/cfs_fix_am export FIXDIR=$FIXcfs/cfs_fix_am export FIXGLOBAL=$FIXcfs/cfs_fix_am export PARM_AM=$PARMcfs/cfs_parm_am export FCSTSHDIR=$HOMEcfs/scripts export HOMEgsm=$HOMEcfs/global_shared_cfs export mppnccombine=${mppnccombine:-$EXECcfs/cfs_mppnccombine} export AM_EXEC=${AM_EXEC:-${EXEC_AMD:-$EXECcfs}/cfs_atmos_fcst} export OM_EXEC=${OM_EXEC:-${EXEOMD:-$EXECcfs}/cfs_ocean_mom4ice} export C_EXEC=${C_EXEC:-${EXEC_CD:-$EXECcfs}/cfs_mlc_coupler} export FORECASTSH=${FORECASTSH:-$FCSTSHDIR/excfs_fcst.sh} export CHGRESSH=${CHGRESSH:-$HOMEgsm/ush/global_chgres.sh} export CHGRESEXEC=${CHGRESEXEC:-$HOMEgsm/exec/global_chgres} export CFSPREPAREPOSTSH=${CFSPREPAREPOSTSH:-$USHcfs/cfs_prepare_post.sh} export cfs_pgbscript=${cfs_pgbscript:-$USHcfs/cfs_pgb.sh} export cfs_ocnscript=${cfs_ocnscript:-$USHcfs/cfs_ocn.sh} export cfs_postscript=${cfs_postscript:-$USHcfs/cfs_post.sh} export cfs_glbtsersh=${cfs_glbtsersh:-$USHcfs/cfs_glbtser.sh} export timeavgexec=${timeavgexec:-$EXECcfs/cfs_mpi_timavg_3d} export GENPSICHIEXE=${GENPSICHIEXE:-$EXECcfs/cfs_genpsiandchi} export OVERPARMEXEC=${OVERPARMEXEC:-$EXECcfs/cfs_overparm_grib} export cfs_endfhrs_sh=${cfs_endfhrs_sh:-$USHcfs/cfs_endfhrs.sh} export cfs_timeavgsh=${cfs_timeavgsh:-$USHcfs/cfs_timavg_fcst.sh} export cfs_gribchksh=${cfs_gribchksh:-$USHcfs/cfs_grib_checkf.sh} export SIGHDR=${SIGHDR:-$EXECcfs/cfs_sighdr} export sigavg=${sigavg:-$EXECcfs/cfs_sigavg} export sstavg=${sstavg:-$EXECcfs/cfs_sstavg} export NCP=${NCP:-/bin/cp} ############################################# # Set some variables before thr config script ############################################# export OMP_NUM_THREADS=2 export NTHREADS=2 export DELTIM=600 export dt_ocean=1800 export cnvgwd=.true. export NPROCS_c=1 export NPROCS_o=63 export NPROCS_a=32 ############################################# # Get the variables setup from config script ############################################# export CONFIG_FILE=${CONFIG_FILE:-$PARMcfs/cfs_parm_am/cfs_config} set -a; . $CONFIG_FILE; set +a #export DISK_GLOB=${DISK_GLOB:-/global/save} #export DISK_CLIM=${DISK_CLIM:-/climate/save} #export MP_SHARED_MEMORY=no ############################################ # determine the current day of the forecast ############################################ # export YEAR=` echo $CDATE | cut -c1-4 ` export MONTH=` echo $CDATE | cut -c5-6 ` export DAY=` echo $CDATE | cut -c7-8 ` export HOUR=$cyc # ####################################### # Determine the day for forecast start ####################################### export start_date=${start_date:-$(echo $($NDATE -$GODAS_FREQ $CDATE))} export YYYYSTART=$(echo $start_date | cut -c1-4) export MMSTART=$(echo $start_date | cut -c5-6) export DDSTART=$(echo $start_date | cut -c7-8) export HHSTART=$(echo $start_date | cut -c9-10) # if [[ $RTYPE = forecast ]] ; then export YYYYEND=$YYYYSTART else # This is for hindcast export YYYYSTART=${YYYYSTART:-$START_YEAR} export YYYYEND=$END_YEAR fi export YYYY_NOW=${YYYY_NOW:-$YYYYSTART} export start_date=$YYYYSTART$MMSTART$DDSTART$HHSTART if [ $LENMON -gt 0 ] ; then YYYYSS=$(echo $start_date | cut -c1-4) MMSS=$(echo $start_date | cut -c5-6) YYYYEE=$YYYYSS MMEE=$((MMSS+LENMON+1)) while [[ $MMEE -gt 12 ]] ; do MMEE=$((MMEE-12)) YYYYEE=$((YYYYEE+1)) done if [[ $MMEE -lt 10 ]] ; then MMEE=0$MMEE; fi export end_date=${YYYYEE}${MMEE}0100 elif [ $LENDAY -gt 0 ] ; then export end_date=$($NDATE $((LENDAY*24)) $start_date) elif [ $LENHR -gt 0 ] ; then export end_date=$($NDATE $LENHR $start_date) else echo ' Need to specify propoer forecast length - run terminating' exit fi # ############################################# # Specify the recovery and postjob directries ############################################# export COMROT=$(compath.py -o $RUN/${cfs_ver}) export YYYYMMDD=$(echo $start_date |cut -c1-8) export RECOVERY=$COMROT/$RUN.$YYYYMMDD/recovery/$RUN.recovery/$cyc/cfs_m${ENS_MEM} export POSTDEFS=$COMROT/$RUN.$YYYYMMDD/recovery/$RUN.defines/$cyc/cfs_m${ENS_MEM} mkdir -p $RECOVERY $POSTDEFS if [[ ! -s $RECOVERY/stamp.$RUN ]] ; then export current_date=$start_date echo $start_date $current_date $end_date $YYYYSTART $YYYYEND $cycle > $RECOVERY/stamp.$RUN else read start_date current_date end_date2 YYYYSTART YYYYEND cycle < $RECOVERY/stamp.$RUN export start_date export current_date if [ $CDATE -eq $start_date ] ; then ### This is used for the case when you want to extend the length of the forecast if [ $end_date -ne $end_date2 ] ; then rm $RECOVERY/stamp.$RUN echo $start_date $current_date $end_date $YYYYSTART $YYYYEND $cycle > $RECOVERY/stamp.$RUN fi else end_date=$end_date2 fi export CDATE=$start_date export end_date export YYYYSTART export YYYYEND export cycle export MMSTART=$(echo $start_date | cut -c5-6) export DDSTART=$(echo $start_date | cut -c7-8) export HHSTART=$(echo $start_date | cut -c9-10) fi #if [ -s $RECOVERY/done.flag_released ]; then # ecflow_client --event release_m2m3m4 #fi # Define Ocean Start Date export ocnic_date=${ocnic_date:-$start_date} export MMSS_OCN=$(echo $ocnic_date | cut -c5-6) export DDSS_OCN=$(echo $ocnic_date | cut -c7-8) # export DDSS_OCN=${DDSS_OCN:-$DDSTART} ############################################################ # Specify the whether to get the IC from CCS or HPSS ############################################################ export IC_FROM_HPSS=${IC_FROM_HPSS:-NO} export IC_FROM_DISK=${IC_FROM_DISK:-YES} msg="HAS BEGUN on `hostname`" postmsg "$msg" env ############################################################ # Loop for year (for hindcast); for forecast YYYYSS=YYYYEND ############################################################ if [ $YYYYSTART -le $YYYYEND ] ; then if [ $current_date -ge $start_date -a $current_date -lt $end_date ] ; then ############################################## # Define COM directories ############################################## YYYYMMDD=$(echo $start_date |cut -c1-8) HH=$(echo $start_date |cut -c9-10) export COMIN=$COMROT/$RUN.$YYYYMMDD/$HH export COMOUT=$COMROT/$RUN.$YYYYMMDD/$HH export COMCDAS=$COMROT/cdas.$YYYYMMDD export CLIMCOM=$COMOUT mkdir -m775 -p $COMOUT ############################################## # Define forecast output/post input dirs ############################################## export COM_YMDH=$COMOUT/${start_date}_${ENS_MEM} mkdir -m 775 -p $COM_YMDH export COM_ARCH=$COM_YMDH ####################################### # Define the input IC files ####################################### export SIGI=$COMROT/cdas.${PDY}/cdas1.t${cyc}z.sanl export SFCI=$COMROT/cdas.${PDY}/cdas1.t${cyc}z.sfcanl export OCNI=$COMROT/cdas.${PDY}/cdas1.t${cyc}z.ocnanl.tar ############################################################# # Execute the script ############################################################# SCRIPTDIR=${SCRIPTDIR:-$HOMEcfs/scripts} FCST_SCRIPT_DIR=${FCST_SCRIPT_DIR:-$SCRIPTDIR} FCST_SCRIPT=${FCST_SCRIPT:-$FCST_SCRIPT_DIR/exrun_cfs.sh} $FCST_SCRIPT; export err=$?; err_chk fi else ############################################################# # Hard exit when trying to run a finished forecast ############################################################# exit 99 fi ################################################### # msg end of job and clean up temperary directory ################################################### ###cat $pgmout msg="ENDED NORMALLY." postmsg "$msg" ######################################## # Remove the Temporary working directory ######################################## cd $DATAROOT if [ ${KEEPDATA:-NO} = NO ] ; then rm -rf $DATA ; fi