爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6917|回复: 3

帮忙看一下这个脚本是啥意思,尤其是加粗部分关于时间的那部分

[复制链接]
发表于 2014-12-23 10:34:05 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册

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


密码修改失败请联系微信:mofangbao
发表于 2014-12-23 11:12:32 | 显示全部楼层
run wrf用的
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2014-12-23 11:15:48 | 显示全部楼层

能不能吧时间项的含义说一下
密码修改失败请联系微信:mofangbao
发表于 2014-12-23 13:10:13 | 显示全部楼层
不懂WRF,但基于bash的语法,加粗的部分及以后大概意思是设定 START_TIME, END_TIME, ANAL_TIME, END_START 四个变量然后写入WRF的namelist。

密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表