- 积分
- 3197
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-11-9
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
#!/bin/bash
RM=/bin/rm
CP=/bin/cp
MV=/bin/mv
LN=/bin/ln
MKDIR=/bin/mkdir
CAT=/bin/cat
ECHO=/bin/echo
CUT=/bin/cut
MPIRUN=mpirun
WC=/usr/bin/wc
DATE=/bin/date
AWK="/bin/awk --posix"
SED=/bin/sed
##############
export PATH=/gpfsdata/intel/impi/4.1.0.024/intel64/bin:$PATH
export LD_LIBRARY_PATH=/gpfsdata/intel/impi/4.1.0.024/intel64/lib:$LD_LIBRARY_PATH
export WRF_DIR=/gpfshome/yangyi02/wrf_model/wrf_3.5
export DA_advance_time=${WRF_DIR}/WRFDA/var/da/da_advance_time.exe
export WRF_ROOT=${WRF_DIR}/WRFV3/run
#export WRF_NAMELIST=${WRF_DIR}/WRFV3/run/namelist.input
export WRF_NAMELIST=./namelist.input
export REAL_ARW_PROC=1
export WRF_ARW_PROC=6
export WRF_EM_CORE=1
export WRF_NMM_CORE=0
DA_interval=6 ###3(h) or 30min
FCST_LENGTH=1
# Set experiment name and analysis date
START_TIME=201106040000 #201003182100
END_TIME=201106040600 #201003191800
ANAL_TIME=201106040000 #201003191000
END_START=201106301800
# END_START=201105011800
#echo "***main****"
#echo "Init Time :",${ANAL_TIME}
zero=47
runscript=1
while [[ ${runscript} -lt ${zero} ]]; do
#echo "ANALYSIS TIME:",${ANAL_TIME}
if [[ ${ANAL_TIME} -eq ${END_START} ]]; then
runscript=47
fi
#YYYYMMDDHH=`${ECHO} "${ANAL_TIME}"|cut -c1-10`
#${ECHO} $YYYYMMDDHH
#YYYY=`${ECHO} "${ANAL_TIME}"|cut -c1-4`
#MM=`${ECHO} "${ANAL_TIME}"|cut -c5-6`
#DD=`${ECHO} "${ANAL_TIME}"|cut -c7-8`
#HH=`${ECHO} "${ANAL_TIME}"|cut -c9-10`
#MIN=`${ECHO} "${ANAL_TIME}"|cut -c11-12`
#export cycle_Y=${YYYY}
#export cycle_m=${MM}
#export cycle_d=${DD}
#export cycle_H=${HH}
#export cycle_Min=${MIN}
#echo "Analysis yyyymmddhhnn:",${cycle_Y},${cycle_m},${cycle_d},${cycle_H},${cycle_Min}
cd ${WRF_ROOT}
#cd ./
echo $WRF_ROOT >>wrfinput.log
################ begain to run WRF ##############
# Get the start and end time components
start_year=`${ECHO} "${ANAL_TIME}"|cut -c1-4`
start_month=`${ECHO} "${ANAL_TIME}"|cut -c5-6`
start_day=`${ECHO} "${ANAL_TIME}"|cut -c7-8`
start_hour=`${ECHO} "${ANAL_TIME}"|cut -c9-10`
start_minute=`${ECHO} "${ANAL_TIME}"|cut -c11-12`
start_second=0
end_year=`${ECHO} "${END_TIME}"|cut -c1-4`
end_month=`${ECHO} "${END_TIME}"|cut -c5-6`
end_day=`${ECHO} "${END_TIME}"|cut -c7-8`
end_hour=`${ECHO} "${END_TIME}"|cut -c9-10`
end_minute=`${ECHO} "${END_TIME}"|cut -c11-12`
end_second=0
(( run_days = 0 )) #(( run_days = ${FCST_LENGTH} / 24 ))
(( run_hours = 6 )) #(( run_hours = ${FCST_LENGTH} % 24 ))
#echo "start_year"
#echo $start_year
# Create patterns for updating the wrf namelist
run=[Rr][Uu][Nn]
equal=[[:blank:]]*=[[:blank:]]*
start=[Ss][Tt][Aa][Rr][Tt]
end=[Ee][Nn][Dd]
year=[Yy][Ee][Aa][Rr]
month=[Mm][Oo][Nn][Tt][Hh]
day=[Dd][Aa][Yy]
hour=[Hh][Oo][Uu][Rr]
minute=[Mm][Ii][Nn][Uu][Tt][Ee]
second=[Ss][Ee][Cc][Oo][Nn][Dd]
interval=[Ii][Nn][Tt][Ee][Rr][Vv][Aa][Ll]
# Update the run_days in wrf namelist.input
${CAT} ${WRF_NAMELIST} | ${SED} "s/\(${run}_${day}[Ss]\)${equal}[[:digit:]]\{1,\}/\1 = ${run_days}/" \
> ${WRF_NAMELIST}.new
${MV} ${WRF_NAMELIST}.new ${WRF_NAMELIST}
# Update the run_hours in wrf namelist
${CAT} ${WRF_NAMELIST} | ${SED} "s/\(${run}_${hour}[Ss]\)${equal}[[:digit:]]\{1,\}/\1 = ${run_hours}/" \
> ${WRF_NAMELIST}.new
${MV} ${WRF_NAMELIST}.new ${WRF_NAMELIST}
# Update the start time in wrf namelist
${CAT} ${WRF_NAMELIST} | ${SED} "s/\(${start}_${year}\)${equal}[[:digit:]]\{4\}/\1 = ${start_year}/" \
| ${SED} "s/\(${start}_${month}\)${equal}[[:digit:]]\{2\}/\1 = ${start_month}/" \
| ${SED} "s/\(${start}_${day}\)${equal}[[:digit:]]\{2\}/\1 = ${start_day}/" \
| ${SED} "s/\(${start}_${hour}\)${equal}[[:digit:]]\{2\}/\1 = ${start_hour}/" \
| ${SED} "s/\(${start}_${minute}\)${equal}[[:digit:]]\{2\}/\1 = ${start_minute}/" \
| ${SED} "s/\(${start}_${second}\)${equal}[[:digit:]]\{2\}/\1 = ${start_second}/" \
> ${WRF_NAMELIST}.new
${MV} ${WRF_NAMELIST}.new ${WRF_NAMELIST}
# Update end time in namelist
${CAT} ${WRF_NAMELIST} | ${SED} "s/\(${end}_${year}\)${equal}[[:digit:]]\{4\}/\1 = ${end_year}/" \
| ${SED} "s/\(${end}_${month}\)${equal}[[:digit:]]\{2\}/\1 = ${end_month}/" \
| ${SED} "s/\(${end}_${day}\)${equal}[[:digit:]]\{2\}/\1 = ${end_day}/" \
| ${SED} "s/\(${end}_${hour}\)${equal}[[:digit:]]\{2\}/\1 = ${end_hour}/" \
| ${SED} "s/\(${end}_${minute}\)${equal}[[:digit:]]\{2\}/\1 = ${end_minute}/" \
| ${SED} "s/\(${end}_${second}\)${equal}[[:digit:]]\{2\}/\1 = ${end_second}/" \
> ${WRF_NAMELIST}.new
${MV} ${WRF_NAMELIST}.new ${WRF_NAMELIST}
echo "Start_time yyyymmddhhnn:",${ANAL_TIME}>>wrfinput.log
echo "End_time yyyymmddhhnn:",${END_TIME}>>wrfinput.log
############## real.exe #########################
echo "start real.exe">>wrfinput.log
mpirun -n 64 ./real.exe
echo "finish real.exe">>wrfinput.log
############################################
#echo ${ANAL_TIME}
rm rsl.out*
rm rsl.err*
${MV} wrfinput_d01 wrfinput_d01_${ANAL_TIME}
ANAL_TIME=`${DA_advance_time} ${ANAL_TIME} ${DA_interval} -f ccyymmddhhnn`
END_TIME=`${DA_advance_time} ${END_TIME} ${DA_interval} -f ccyymmddhhnn`
echo "Next Starttime yyyymmddhhnn:",${ANAL_TIME}>>wrfinput.log
echo "Next endtime yyyymmddhhnn:",${END_TIME}>>wrfinput.log
echo ${ANAL}>>wrfinput.log
done
exit
|
|