362 lines
12 KiB
Bash
362 lines
12 KiB
Bash
#!/bin/bash
|
|
|
|
# Last Modified: 10/15/2015
|
|
# By: Pablo Santos and Joseph Maloney
|
|
# Version: AWIPS 2 Version 16.2.1
|
|
|
|
NWPSLOCAL="/awips2/GFESuite/nwps"
|
|
umask 002
|
|
|
|
#
|
|
PATH="/awips2/GFESuite/bin:/bin:/usr/bin:/usr/local/bin"
|
|
siteid=$(hostname -s|cut -c 5-)
|
|
source ${NWPSLOCAL}/etc/sitevars.${siteid} ${siteid}
|
|
#
|
|
SSHARGS="-x -o stricthostkeychecking=no"
|
|
SCPARGS="-o stricthostkeychecking=no"
|
|
#
|
|
Program="/awips2/GFESuite/bin/ifpnetCDF"
|
|
GFESERVER="ev"
|
|
RUNSERVER="pv"
|
|
|
|
# FUNCTIONS
|
|
|
|
function logit () {
|
|
echo "$@" | tee -a $logfile
|
|
}
|
|
|
|
GFEDomainname=${1}
|
|
logit "Processing $GFEDomainname"
|
|
gfedomainname=$(echo ${GFEDomainname} | tr [:upper:] [:lower:])
|
|
|
|
cd ${NWPSLOCAL}
|
|
|
|
if [ ! -e ${NWPSLOCAL}/${GFEDomainname} ]
|
|
then
|
|
mkdir ${NWPSLOCAL}/${GFEDomainname}
|
|
chmod 777 ${NWPSLOCAL}/${GFEDomainname}
|
|
fi
|
|
|
|
if [ ! -e ${NWPSLOCAL}/input/${GFEDomainname} ]
|
|
then
|
|
mkdir -p ${NWPSLOCAL}/input/${GFEDomainname}
|
|
chmod -R 777 ${NWPSLOCAL}/input
|
|
fi
|
|
|
|
if [ ! -e ${NWPSLOCAL}/wcoss/${GFEDomainname} ]
|
|
then
|
|
mkdir -p ${NWPSLOCAL}/wcoss/${GFEDomainname}
|
|
chmod -R 777 ${NWPSLOCAL}/wcoss
|
|
fi
|
|
|
|
if [ ! -e ${NWPSLOCAL}/logs ]
|
|
then
|
|
mkdir ${NWPSLOCAL}/logs
|
|
chmod 777 ${NWPSLOCAL}/logs
|
|
fi
|
|
|
|
logfile=${NWPSLOCAL}/logs/${GFEDomainname}_nwps_runManual_Outside_AWIPS.log
|
|
##################################################################
|
|
### START A CLEAN LOG FILE:
|
|
#
|
|
rm -f $logfile
|
|
echo " " > $logfile
|
|
STARTED=$(date)
|
|
logit "STARTED FOR ${GFEDomainname}: $STARTED"
|
|
|
|
DB="${GFEDomainname}_GRID__Fcst_00000000_0000"
|
|
|
|
if [ ${MULTISITE} == "Yes" ]
|
|
then
|
|
Output_Dir="${NWPSLOCAL}/input/${GFEDomainname}"
|
|
else
|
|
Output_Dir="${NWPSLOCAL}/input"
|
|
fi
|
|
|
|
WRKSWN="${NWPSLOCAL}/${GFEDomainname}/SUAWRKNWP.dat"
|
|
date=$(date "+%D %H:%M:%S")
|
|
Output_File="${Output_Dir}/Wind_File"
|
|
textfile="${Output_Dir}/$(date +%Y%m%d%H%M)_WIND.txt"
|
|
wcoss_textfile="${gfedomainname}_$(date +%Y%m%d%H%M)_WIND.txt"
|
|
flagfile="${Output_Dir}/SWANflag"
|
|
|
|
### LOCK FILE STUFF:
|
|
|
|
source ${NWPSLOCAL}/bin/process_lock.sh
|
|
PROGRAMname="$0"
|
|
LOCKfile="${NWPSLOCAL}/logs/runManual_Outside_AWIPS_${GFEDomainname}.lck"
|
|
MINold="300"
|
|
LockFileCheck $MINold
|
|
CreateLockFile
|
|
|
|
### CHECK THAT THIS IS THE pv2 (or pv1 if failed over) HOST MACHINE:
|
|
|
|
HOST=$(hostname|cut -c1-2)
|
|
if [[ $HOST != $RUNSERVER ]]
|
|
then
|
|
logit "YOU ARE RUNNING FROM $HOST. THIS SCRIPT SHOULD ONLY BE RAN FROM $RUNSERVER."
|
|
logit "Exiting ... "
|
|
RemoveLockFile
|
|
exit 1
|
|
fi
|
|
|
|
### RUN OPTIONS:
|
|
|
|
if [ -e ${NWPSLOCAL}/${GFEDomainname}_var/inp_args ]
|
|
|
|
then
|
|
|
|
inp_args=`cat ${NWPSLOCAL}/${GFEDomainname}_var/inp_args`
|
|
IFS=':' read -a inp <<< "${inp_args}"
|
|
|
|
RUNLEN=${inp[0]}
|
|
WNA=${inp[1]}
|
|
NEST=${inp[2]}
|
|
GS=${inp[3]}
|
|
WINDS=${inp[4]}
|
|
WEB=${inp[5]}
|
|
PLOT=${inp[6]}
|
|
DELTAC=${inp[7]}
|
|
HOTSTART=${inp[8]}
|
|
WATERLEVELS=${inp[9]}
|
|
CORE=${inp[10]}
|
|
EXCD=${inp[11]}
|
|
WHERETORUN=${inp[12]}
|
|
|
|
logit " "
|
|
logit "Arguments are: $RUNLEN $WNA $NEST $GS $WINDS $WEB $PLOT $DELTAC $HOTSTART $WATERLEVELS $CORE $EXCD $WHERETORUN"
|
|
logit " "
|
|
|
|
rm -f ${NWPSLOCAL}/${GFEDomainname}_var/inp_args
|
|
rm -f ${NWPSLOCAL}/wcoss/${GFEDomainname}/* | tee -a $logfile
|
|
rm -f ${Output_Dir}/* | tee -a $logfile
|
|
cp ${NWPSLOCAL}/domains/${GFEDomainname} ${NWPSLOCAL}/wcoss/${GFEDomainname}/${gfedomainname}_domain_setup.cfg
|
|
chmod 666 ${NWPSLOCAL}/wcoss/${GFEDomainname}/${gfedomainname}_domain_setup.cfg
|
|
|
|
else
|
|
|
|
logit "No arguments or arguments file provided. No run to process. Exiting ${GFEDomainname}."
|
|
RemoveLockFile
|
|
continue
|
|
fi
|
|
|
|
logit " "
|
|
##################################################################
|
|
logit "### Setting Up SWAN Input Model Forcing Time Range"
|
|
logit " "
|
|
##################################################################
|
|
|
|
logit " "
|
|
logit "scp ${SCPARGS} $WRKSWN ldad@ls1:/data/Incoming/"
|
|
logit " "
|
|
|
|
echo "" > $WRKSWN
|
|
echo "____________________NWPS RUN REQUEST DETAILS__________" >> $WRKSWN
|
|
echo "" >> $WRKSWN
|
|
echo "Run for ${GFEDomainname} initiated at: ${date}" >> $WRKSWN
|
|
echo "" >> $WRKSWN
|
|
echo "Runlength: ${RUNLEN}" >> $WRKSWN
|
|
echo "Boundary Conditions: ${WNA}" >> $WRKSWN
|
|
echo "Nest: ${NEST}" >> $WRKSWN
|
|
echo "Current: ${GS}" >> $WRKSWN
|
|
echo "Winds: ${WINDS}" >> $WRKSWN
|
|
echo "Timestep: ${DELTAC}" >> $WRKSWN
|
|
echo "Hotstart: ${HOTSTART}" >> $WRKSWN
|
|
echo "WATERLEVELS: ${WATERLEVELS}" >> $WRKSWN
|
|
echo "Model Core: ${CORE}" >> $WRKSWN
|
|
echo "Psurge % Exceedance: ${EXCD}" >> $WRKSWN
|
|
echo "Running model in: ${WHERETORUN}" >> $WRKSWN
|
|
echo "" >> $WRKSWN
|
|
echo "______________________________________________________" >> $WRKSWN
|
|
|
|
#scp ${SCPARGS} $WRKSWN ldad@ls1:/data/Incoming/
|
|
|
|
##################################################################
|
|
logit "### CREATE THE WIND NETCDF FILE AND SEND OVER TO SWAN BOX FOR PROCESSING:"
|
|
|
|
logit "$Program -o $Output_File -d $DB -h $GFESERVER -g -p NWPSwind"
|
|
$Program -o $Output_File -d $DB -h $GFESERVER -g -p NWPSwind | tee -a $logfile
|
|
|
|
/usr/local/netcdf/bin/ncdump $Output_File > $textfile
|
|
sed -i "s/NWPSwind/Wind/g" $textfile
|
|
cp $textfile ${NWPSLOCAL}/wcoss/${GFEDomainname}/${wcoss_textfile}
|
|
chmod 666 ${NWPSLOCAL}/wcoss/${GFEDomainname}/${wcoss_textfile}
|
|
|
|
gzip $textfile
|
|
touch $flagfile
|
|
|
|
chmod 666 $textfile.gz
|
|
chmod 666 $flagfile
|
|
|
|
|
|
echo "$RUNLEN:$WNA:$NEST:$GS:$WINDS:$WEB:$PLOT:$DELTAC:$HOTSTART:$WATERLEVELS:$CORE:$EXCD" > ${NWPSLOCAL}/wcoss/${GFEDomainname}/${gfedomainname}_inp_args.ctl
|
|
chmod 666 ${NWPSLOCAL}/wcoss/${GFEDomainname}/${gfedomainname}_inp_args.ctl
|
|
cd ${NWPSLOCAL}/wcoss/${GFEDomainname}
|
|
NWPSWINDGRID="NWPSWINDGRID_${gfedomainname}_$(date +%Y%m%d%H%M)_$$.tar.gz"
|
|
tar cvfz ${NWPSWINDGRID} ${gfedomainname}_inp_args.ctl ${gfedomainname}_domain_setup.cfg ${wcoss_textfile}
|
|
scp ${NWPSWINDGRID} ldad@ls1:/tmp/
|
|
|
|
function WCOSSUpload {
|
|
logit " "
|
|
logit "RUNNING IN NCEP"
|
|
logit " "
|
|
|
|
logit "Running ldmsend to ${REGION} LDM servers for WCOSS run"
|
|
|
|
if [ "${LDMSEND}" == "/usr/local/ldm/util/ldmsend_nws" ]
|
|
then
|
|
status1=$(ssh ldad@ls1 "cd /tmp; ${LDMSEND} -vxnl- -h ${LDMSERVER1} -f EXP -o 3600 -r 1 -R 100 -T 25 -p '^NWPSWINDGRID_.*' ${NWPSWINDGRID}" 2>> ${logfile})
|
|
status2=$(ssh ldad@ls1 "cd /tmp; ${LDMSEND} -vxnl- -h ${LDMSERVER2} -f EXP -o 3600 -r 1 -R 100 -T 25 -p '^NWPSWINDGRID_.*' ${NWPSWINDGRID}" 2>> ${logfile})
|
|
|
|
if [ "${status1}" == "PASS" ] && [ "${status2}" == "PASS" ]
|
|
then
|
|
echo "" >> $WRKSWN
|
|
echo "____________________NWPS WIND GRID UPLOAD PASSED__________" >> $WRKSWN
|
|
echo "" >> $WRKSWN
|
|
echo "INFO - Wind grid upload run for ${GFEDomainname} passed: ${date}" >> $WRKSWN
|
|
echo "" >> $WRKSWN
|
|
echo "INFO - Uploaded to ${REGION} LDM servers" >> $WRKSWN
|
|
echo "" >> $WRKSWN
|
|
echo "INFO - Model run was initiated" >> $WRKSWN
|
|
echo "" >> $WRKSWN
|
|
echo "______________________________________________________" >> $WRKSWN
|
|
scp ${SCPARGS} $WRKSWN ldad@ls1:/data/Incoming/
|
|
fi
|
|
|
|
if [ "${status1}" != "PASS" ] && [ "${status2}" != "PASS" ]
|
|
then
|
|
echo "" >> $WRKSWN
|
|
echo "____________________NWPS WIND GRID UPLOAD FAILED__________" >> $WRKSWN
|
|
echo "" >> $WRKSWN
|
|
echo "ERROR - Wind grid upload run for ${GFEDomainname} failed: ${date}" >> $WRKSWN
|
|
echo "" >> $WRKSWN
|
|
echo "ERROR - Could not upload to any ${REGION} LDM server" >> $WRKSWN
|
|
echo "ERROR - Upload failed to ${LDMSERVER1} and ${LDMSERVER2}" >> $WRKSWN
|
|
echo "" >> $WRKSWN
|
|
echo "ERROR - No model run was initiated" >> $WRKSWN
|
|
echo "" >> $WRKSWN
|
|
echo "______________________________________________________" >> $WRKSWN
|
|
scp ${SCPARGS} $WRKSWN ldad@ls1:/data/Incoming/
|
|
else
|
|
if [ "${status1}" != "PASS" ]
|
|
then
|
|
echo "" >> $WRKSWN
|
|
echo "____________________NWPS WIND GRID UPLOAD WARNING__________" >> $WRKSWN
|
|
echo "" >> $WRKSWN
|
|
echo "" >> $WRKSWN
|
|
echo "WARN - Could not upload to ${REGION} LDM server #1" >> $WRKSWN
|
|
echo "WRAN - Upload failed to ${LDMSERVER1}" >> $WRKSWN
|
|
echo "" >> $WRKSWN
|
|
echo "INFO - Model run was initiated from ${LDMSERVER2}" >> $WRKSWN
|
|
echo "" >> $WRKSWN
|
|
echo "______________________________________________________" >> $WRKSWN
|
|
scp ${SCPARGS} $WRKSWN ldad@ls1:/data/Incoming/
|
|
fi
|
|
if [ "${status2}" != "PASS" ]
|
|
then
|
|
echo "" >> $WRKSWN
|
|
echo "____________________NWPS WIND GRID UPLOAD WARNING__________" >> $WRKSWN
|
|
echo "" >> $WRKSWN
|
|
echo "" >> $WRKSWN
|
|
echo "WARN - Could not upload to ${REGION} LDM server #2" >> $WRKSWN
|
|
echo "WRAN - Upload failed to ${LDMSERVER2}" >> $WRKSWN
|
|
echo "" >> $WRKSWN
|
|
echo "INFO - Model run was initiated from ${LDMSERVER1}" >> $WRKSWN
|
|
echo "" >> $WRKSWN
|
|
echo "______________________________________________________" >> $WRKSWN
|
|
scp ${SCPARGS} $WRKSWN ldad@ls1:/data/Incoming/
|
|
fi
|
|
fi
|
|
|
|
else
|
|
ssh ldad@ls1 "cd /tmp; /usr/local/ldm/bin/ldmsend -v -h ${LDMSERVER1} -f EXP ${NWPSWINDGRID}" 2>&1 | tee -a ${logfile}
|
|
ssh ldad@ls1 "cd /tmp; /usr/local/ldm/bin/ldmsend -v -h ${LDMSERVER2} -f EXP ${NWPSWINDGRID}" 2>&1 | tee -a ${logfile}
|
|
scp ${SCPARGS} $WRKSWN ldad@ls1:/data/Incoming/
|
|
fi
|
|
ssh ldad@ls1 rm -fv /tmp/${NWPSWINDGRID}
|
|
}
|
|
|
|
if [ $WHERETORUN == "Both" ]
|
|
then
|
|
|
|
logit " "
|
|
logit "RUNNING IN WORKSTATION"
|
|
logit " "
|
|
logit "### ROUTING 3 WIND FILES NEEDED BY SWAN THROUGH LDAD TO LOCAL WORKSTATION:"
|
|
|
|
if [ $MULTISITE == "Yes" ]
|
|
then
|
|
|
|
logit "Running ldmsend to workstation"
|
|
ssh ldad@ls1 "cd /tmp; /usr/local/ldm/bin/ldmsend -v -h ${WORKSTATION} -f EXP ${NWPSWINDGRID}" 2>&1 | tee -a $logfile
|
|
|
|
else
|
|
|
|
logit "ssh ldad@ls1 mkdir -p ${DIR}"
|
|
logit "scp ${SCPARGS} $Output_File ldad@ls1:${DIR}"
|
|
logit "scp ${SCPARGS} $textfile.gz ldad@ls1:${DIR}"
|
|
logit "scp ${SCPARGS} $flagfile ldad@ls1:${DIR}"
|
|
|
|
ssh ldad@ls1 mkdir -p ${DIR}
|
|
scp ${SCPARGS} $Output_File ldad@ls1:${DIR} | tee -a $logfile
|
|
scp ${SCPARGS} $textfile.gz ldad@ls1:${DIR} | tee -a $logfile
|
|
scp ${SCPARGS} $flagfile ldad@ls1:${DIR} | tee -a $logfile
|
|
|
|
logit "Runtime Parameters are: $RUNLEN:$WNA:$NEST:$GS:$WINDS:$WEB:$PLOT:$DELTAC:$HOTSTART:$WATERLEVELS:$CORE:$EXCD"
|
|
ssh ${SSHARGS} ldad@ls1 echo "$RUNLEN:$WNA:$NEST:$GS:$WINDS:$WEB:$PLOT:$DELTAC:$HOTSTART:$WATERLEVELS:$CORE:$EXCD > ${DIR}/inp_args" 2>&1 | tee -a $logfile
|
|
|
|
fi
|
|
|
|
WCOSSUpload
|
|
|
|
elif [ $WHERETORUN == "Local" ]
|
|
then
|
|
|
|
logit " "
|
|
logit "RUNNING IN WORKSTATION"
|
|
logit " "
|
|
logit "### ROUTING 3 WIND FILES NEEDED BY SWAN THROUGH LDAD TO LOCAL WORKSTATION:"
|
|
|
|
if [ $MULTISITE == "Yes" ]
|
|
then
|
|
|
|
logit "Running ldmsend to workstation"
|
|
ssh ldad@ls1 "cd /tmp; /usr/local/ldm/bin/ldmsend -v -h ${WORKSTATION} -f EXP ${NWPSWINDGRID}" 2>&1 | tee -a $logfile
|
|
|
|
else
|
|
|
|
logit "ssh ldad@ls1 mkdir -p ${DIR}"
|
|
logit "scp ${SCPARGS} $Output_File ldad@ls1:${DIR}"
|
|
logit "scp ${SCPARGS} $textfile.gz ldad@ls1:${DIR}"
|
|
logit "scp ${SCPARGS} $flagfile ldad@ls1:${DIR}"
|
|
|
|
ssh ldad@ls1 mkdir -p ${DIR}
|
|
scp ${SCPARGS} $Output_File ldad@ls1:${DIR} | tee -a $logfile
|
|
scp ${SCPARGS} $textfile.gz ldad@ls1:${DIR} | tee -a $logfile
|
|
scp ${SCPARGS} $flagfile ldad@ls1:${DIR} | tee -a $logfile
|
|
|
|
logit "Runtime Parameters are: $RUNLEN:$WNA:$NEST:$GS:$WINDS:$WEB:$PLOT:$DELTAC:$HOTSTART:$WATERLEVELS:$CORE:$EXCD"
|
|
ssh ${SSHARGS} ldad@ls1 echo "$RUNLEN:$WNA:$NEST:$GS:$WINDS:$WEB:$PLOT:$DELTAC:$HOTSTART:$WATERLEVELS:$CORE:$EXCD > ${DIR}/inp_args" 2>&1 | tee -a $logfile
|
|
|
|
fi
|
|
ssh ldad@ls1 rm -fv /tmp/${NWPSWINDGRID}
|
|
scp ${SCPARGS} $WRKSWN ldad@ls1:/data/Incoming/
|
|
|
|
else
|
|
|
|
WCOSSUpload
|
|
|
|
fi
|
|
|
|
logit " "
|
|
##################################################################
|
|
logit " "
|
|
RemoveLockFile
|
|
|
|
##################################################################
|
|
logit " "
|
|
date
|
|
logit "FINISHED ${GFEDomainname}: $(date)"
|
|
logit " "
|
|
|
|
exit 0
|