calpuff遠端計算系統之實現
Table of contents
背景
- calpuff執行會需要地形、氣象、臭氧濃度與排放等前處理,雖然目前有calwrf的轉接,可以減省很多整併的工作,但也僅限地形與氣象部分。其他項目還是得一一解決(詳calpuff.inp)。
- 因為calpuff程式並沒有平行計算的設計,執行會需要較長時間,這是遠端計算系統困難的地方。其他困難還包括:
- 氣象檔非常龐大,該如何提供?
- 結果檔案即使以con2nc處理成nc檔案,可以用VERDI開啟,依然不是馬上可以檢視結果。後處理還有待提升。
|
---|
CPUFF721執行進度網頁畫面 |
檔案系統架構
- HTML
- CGI-PY
- EXE
- calpuff主程式:
CPUFF='/Users/cpuff/src/CALPUFF_v7.2.1_L150618/cpuff721 &> /dev/null 2>&1'
- 監看程式:
WAITC=WEB+'/cpuff_results/waitc.cs'
。cpuff執行完之後會接續執行:
- INP
CALPUFF.INP 目前開放功能
監看程式$web/cpuff_results/waitc.cs
執行方式
- 2個引數
- 1.CGI-PY 給定的亂數目錄cpuf_RAND,RAND為6碼亂數文字
- 2.PID cpuff程式的執行緒號
迴圈控制
- 每10秒檢查一次
- 判斷標準:PID是否仍然在執行中
- 是:輸出執行進度之文字到檔案cpuff.out。prog.html會每10秒鐘重讀這個檔案。
- 否:跳脫迴圈,執行calpuff後處理
#$1=pth
#$2=pid
LST=$1/CALPUFF.LST
OUT=$1/cpuff.out
touch $OUT
for ((i=0; i>=0;i+=1));do
if [ -e $LST ];then
grep CONCENTRATIONS CALPUFF.LST |tail -n1 > $OUT
else
echo 'cpuff (pid='$2') has been executed for '${i}'0 seconds' >> $OUT
fi
now=$(ps -ef|grep cpuff721|grep $2 |grep -v grep|wc -l)
echo 'cpuff (pid='$2') has been executed for '${i}'0 seconds' >> $OUT
all=$(ps -ef|grep cpuff721 |grep -v grep|wc -l)
echo 'All '${all}' cpuffs are executing' >> $OUT
if [ $now != 1 ]; then break;fi
sleep 10
done
calpuff 後處理
- calpuff.con轉nc檔案
- 將nc檔案讀出寫成gif檔案,略作調整:
- 減少檔名的長度(控制在10碼以下)
- 將nc檔內變數的單位予以更正
- 複製一份GIF的播放器(LC-GIF-Player),將GIF結果移到正確的位置。
cd $1
cp ../demo/calpost.inp .
export PATH=/opt/anaconda3/envs/pyn_env/bin:$PATH
/Users/cpuff/src/CALPOST_v7.1.0_L141010/con2nc >& con2nc.out
ln -sf calpuff.con.S.grd02.nc cpuff.nc
/opt/local/bin/ncatted -a units,SO2,o,c,'ppbV' -a units,NO2,o,c,'ppbV' -a units,PM10,o,c,'ug/m3' -a units,SO4,o,c,'ug/m3' cpuff.nc
../demo/m3nc2gif.py cpuff.nc >& con2nc.out
cp -r /Library/WebServer/Documents/LC-GIF-Player/* .
mv *.gif example_gifs
產生結束網頁
cp ../demo/done.html prog.html
sed -ie 's/PID/'$2'/g' prog.html
rand=$(echo $1|cut -d'_' -f3)
sed -ie 's/RAND/'$rand'/g' prog.html
mb=$(ls -lh calpuff.con.S.grd02.nc|awk '{print $5}')
sed -ie 's/MB/'$mb'/g' prog.html
結果畫面與連結
檔案連結
pid= 77547(check progress)
Model_results:
calmet.dat
calpuff.con.S.grd02.nc
calpuff.inp
cpuff.out
程式進度畫面
|
---|
CPUFF721執行進度網頁畫面 |
|
---|
CPUFF721最終進度網頁畫面 |
|
---|
CPUFF721最終進度網頁畫面 |
後續發展
- 氣象個案的準備與選擇
- 沉降量之轉檔
- HRA物質的擴散及沉降