初始/邊界/氣象檔案之檢核
Table of contents
背景
- 基本上有幾個理由必須進行CMAQ輸入檔案的檢核
- 為降低硬碟儲存負荷,初始/邊界/氣象此3類檔案的檔名都設成一樣,每天覆蓋。因此需要進行檢核。
- 前述3類檔案的產生過程都在背景(或其他工作站)執行,那些程序是否已經完成、正確運作,是否產生正確的檔案,需要檢核。
- 由於這3個檔案缺一不可,因此循序進行檢核。
- 如果檢核不通過,則以不同秒數之停等來標示,如此就可以知道在哪裡出錯,以利偵錯修改。
檔案類別 | 停等秒數 | 可能錯誤原因 |
---|
氣象 | 59 | 磁碟機滿、wrf未順利完成、mcip未完成 |
初始 | 58 | 未正確下載CAMS預報、前1日未正確完成cmaq模擬 |
邊界 | 57 | 上層網格未正確執行、檔案內容時間不足以執行cmaq |
程式分段說明
io
- 引數:domain number,
i=0,1,2
- 氣象檔:
nc=$fcst/${GRD[$i]}/mcip/SOI_CRO.nc
- 初始檔:
nc=$fcst/${GRD[$i]}/icon/ICON_yesterday_${DOM[$i]}
- CAMS處理紀錄檔:
lg=/u01/ecmwf/CAMS/CAMS_global_atmospheric_composition_forecasts/2022/get_all.log
- 邊界檔:
nc=$fcst/${GRD[$i]}/bcon/BCON_yesterday_${DOM[$i]}
基本設定
kuang@dev2 /home/GFS
$ cat /home/GFS/chk_IBM.cs
if [[ ${#} -eq 0 ]];then
echo 'input domain #';exit 0;fi
if [[ $BEGD == "" ]];then
today=$(date -d -0day +%Y%m%d)
export BEGD=$(date -d "$today -0days" +%Y-%m-%d)
HR=10#$(date +%H)
if [[ $HR -ge 7 && $HR -lt 16 ]];then export BEGD=$(date -d "$today -1days" +%Y-%m-%d);fi
fi
BEGJ=$(date -d $BEGD +%Y%j)
dates=();datep=()
for id in {0..11};do
dates=( ${dates[@]} $(date -d "$BEGD +${id}days" +%Y-%m-%d) )
datep=( ${datep[@]} $(date -d "$BEGD +${id}days" +%Y%m%d) )
done
fcst=/u01/cmaqruns/2022fcst
DOM=( 'CWBWRF_45k' 'SECN_9k' 'TWEPA_3k' 'tw_CWBWRF_45k' 'nests3')
RES=( 45 09 03 )
GRD=( 'grid45' 'grid09' 'grid03' )
i=$1
pr_tflag.py之應用
- 為了有效了解檔案的時間標籤是否正確。如果使用ncdump還需要轉換Julian day,直接用pr_tflag.py有其必要性。
- 詳見列印m3.nc的時間標籤
氣象檔案之檢核
nc=$fcst/${GRD[$i]}/mcip/SOI_CRO.nc
echo 'MCIP ck'
while true;do
if [[ -e $nc ]];then
n1=$(~/bin/pr_tflag.py $nc|grep ${dates[0]}|wc -l)
n2=$(~/bin/pr_tflag.py $nc|grep ${dates[10]}|wc -l)
jj=$(/usr/bin/ncdump -h $nc|grep SDATE|cut -d' ' -f3)
if [[ $n1 -eq 24 && $n2 -ge 1 && $jj -eq $BEGJ ]];then
break
fi
fi
sleep 59
done
echo 'MCIP ok'
初始檔案之檢核
nc=$fcst/${GRD[$i]}/icon/ICON_yesterday_${DOM[$i]}
lg=/u01/ecmwf/CAMS/CAMS_global_atmospheric_composition_forecasts/2022/get_all.log
echo 'ICON ck'
first=1
while true;do
test $first -ne 1 && sleep 58
first=0
if [[ -e $nc && -e $lg ]];then
d=$(ls -lh --time-style=long-iso $nc|~/bin/awkk 6)
echo $d ${BEGD}
# test $d != ${BEGD} && continue
n=$(grep aermr20 $lg|wc -l)
echo $n
test $n -ne 2 && continue
jj=$(/usr/bin/ncdump -h $nc|grep SDATE|cut -d' ' -f3)
echo $jj $BEGJ
if [[ $jj -eq $BEGJ ]];then
break
fi
fi
done
echo 'ICON ok'
邊界檔案之檢核
- 邊界檔的時間可能很長,只要涵蓋模擬期間就好了,不必完全一樣也沒關係。
nc=$fcst/${GRD[$i]}/bcon/BCON_yesterday_${DOM[$i]}
nt=24
test $i -eq 0 && nt=4
echo 'BCON ck'
while true;do
if [[ -e $nc ]];then
n1=$(~/bin/pr_tflag.py $nc|grep ${dates[0]}|wc -l)
n2=$(~/bin/pr_tflag.py $nc|grep ${dates[10]}|wc -l)
jj=$(/usr/bin/ncdump -h $nc|grep SDATE|cut -d' ' -f3)
echo $n1 $n2 $jj $BEGJ
if [[ $n1 -eq $nt && $n2 -ge 1 && $jj -le $BEGJ ]];then
break
fi
fi
sleep 57
done
echo 'BCON ok'
簡單版本chk_Mcip.cs
- 為前述chk_IBM.cs的氣象部分。
- fcst_devp.cs為逐日模擬,其中的IC與BC皆為grid45逐日結果,並沒有對時間整併,因此比較不容易出錯,因此只需檢核氣象檔案即可。
kuang@DEVP /home/GFS
$ cat $fcst1/chk_Mcip.cs
today=$(date -d -0day +%Y%m%d)
BEGD=$(date -d "$today -0days" +%Y-%m-%d)
test $(date +%H) -lt 16 && BEGD=$(date -d "$today -1days" +%Y-%m-%d)
BEGJ=$(date -d $BEGD +%Y%j)
dates=();datep=()
for id in {0..11};do
dates=( ${dates[@]} $(date -d "$BEGD +${id}days" +%Y-%m-%d) )
datep=( ${datep[@]} $(date -d "$BEGD +${id}days" +%Y%m%d) )
done
fcst=/nas3/cmaqruns/2022fcst
DOM=( 'CWBWRF_45k' 'SECN_9k' 'TWEPA_3k' 'tw_CWBWRF_45k' 'nests3')
RES=( 45 09 03 )
GRD=( 'grid45' 'grid09' 'grid03' )
i=$1
nc=$fcst/${GRD[$i]}/mcip/SOI_CRO.nc
while true;do
if [[ -e $nc ]];then
n1=$(~/bin/pr_tflag.py $nc|grep ${dates[0]}|wc -l)
n2=$(~/bin/pr_tflag.py $nc|grep ${dates[10]}|wc -l)
jj=$(/usr/bin/ncdump -h $nc|grep SDATE|cut -d' ' -f3)
if [[ $n1 -eq 24 && $n2 -ge 1 && $jj -eq $BEGJ ]];then
break
fi
fi
sleep 59
done
程式下載