全臺點源AERMAP之執行
Table of contents
背景
- 為快速累積複雜地形中煙流模式的執行經驗,建立相應之執行規範,此處針對TEDS中所有點源進行AERMAP之模式模擬。
- 使用之程式即為前述AERMAP之遠端執行之python程式,應用SuperMicron工作站,以bash腳本控制同步計算。
- 計算結果檔案
- 以uMap提供鏈結下載。
- 有關uMap的使用方法,可以詳見鏈結資訊之地圖展現(uMap)
整體執行與同步控制
- 此次作業的特性為多個aermap同時進行,雖然aermap程式並沒有多工性質,然而經由bash腳本可以控制同時運作的aermap作業數,在工作站總核心數上限之下。範例如下
- 類似作業方式亦可以應用在任何沒有多工性質的執行檔
AMAP=aermap
TERR=/nas1/aermruns/terrByC_NO/terrainTXT2.py
python wr_inptxt.py
while read STR; do
n=$(psg $AMAP|wc -l)
while true;do
if [ $n -lt 90 ];then
echo "${STR}">inp.txt
sub $TERR
sleep 1s
break
else
sleep 1s
n=$(psg $AMAP|wc -l)
fi
done
done < a.txt
逐行提供引數的方式
- 由於bash腳本內的環境變數,以命令列伺入python程式時無法正確傳遞其內容(含空格),必須尋求其他方式。
- while read … done <a.txt
- 將a.txt逐行內容利用echo另存成文字檔(固定檔名)inp.txt,由python進行讀取,取代由命令列直接讀入。
- 可參考 How to read file line by line in Bash script
- 雖然此處仍為循序執行方式,在腳本中特別設定2次前後python中間停等1秒,可以確保不會造成多個python讀取同一文字檔的問題。
同步執行的控制方式
- 以
ps -ef|grep aermap|wc -l
($n值)結果來控制- 此值如果小於90(工作站核心數),則開始一項新的aermap作業,結果此次循環(跳到下個aermap作業之準備)。
- 如果大或等於90,則休息1秒、再執行ps指令,再行檢視
記憶體之控管
- 因為aermap作業的記憶體大小差異甚巨、不一而足,但即使同時執行90項作業,尚在工作站能力允許,因此不另行管控。
結果之管理
- 除以批次腳本WAITM=’/nas1/aermruns/terr_results/wait_map.cs’進行時間管控之外,
- 在python程式內自行開設目錄單獨存放aermap的輸入、輸入檔案、後處理結果等等
- 各個aermap作業結果目錄與設定方式,另存在TWN_1X1REC.csv檔案內,其表頭如下:
kuang@master /nas1/aermruns/terrByC_NO
$ head TWN_1X1REC.csv
pathIJ,centIJ,dx,dy,inp,nx,ny,path,x0,y0
190364,190364,1250,1250,290700_40_1250_2746400_40_1250,40,40,xieh1xie,290700,2746400
158346,158346,728,728,268900_40_728_2738900_40_728,40,40,shulinIn,268900,2738900
180237,180237,321,321,299300_40_321_2638100_40_321,40,40,paper1pa,299300,2638100
180352,180352,439,439,296300_40_439_2750300_40_439,40,40,muzhaInc,296300,2750300
66258,66258,1062,1062,169700_40_1062_2643800_40_1062,40,40,twsteel,169700,2643800
69080,69080,1384,1384,165500_40_1384_2458500_40_1384,40,40,kandingI,165500,2458500
199279,199279,100,100,322350_50_100_2684250_50_100,50,50,hep1hp2,322350,2684250
160349,160349,240,240,281100_40_240_2751100_40_240,40,40,shulinIn,281100,2751100
68110,68110,60,60,191120_50_60_2514370_50_60,50,50,S2100741P004,191120,2514370
...
85266,85266,40,40,208860_50_40_2672640_50_40,50,50,B23B1135P101,208860,2672640
48142,48142,20,20,171880_50_20_2547780_50_20,50,50,R14A1497P201,171880,2547780
- 各欄數據分別為
- pathIJ,centIJ:在TWN_3X3(d04)網格系統中的i,j值。
- dx,dy:aermap接受點之格距(m)
- inp:接受點XYINC文字串
- nx,ny:aermap接受點之格數
- path:點源名稱
- x0,y0:西南角TWD97座標值
- 等候所有aermap作業全部完成,另行產生kml檔,以將鏈結位置上載到uMap以供查詢下載。
KML之輸出
- 為利結果之空間檢索,需將aermap作業之輸入、輸出與後處理成果(作業包下載點鏈結網址),賦予經緯度座標,貼在地圖上。
- 此處先將前述結果寫成csv檔案,再使用csv2kml.py將其寫成kml檔案。
- 除了點狀資訊外,為使aermap模擬範圍可以呈現在圖面上,另外產生以點源為中心、模擬範圍的多邊形KML檔,貼在uMap圖層,方便快速掌握資料檔案的範圍。
mk_kml.py
按照模擬範圍邊長反向排序的用意:
- 面積大的作業先出現在uMap圖面,會形成底圖,較容易點選其後(範圍較小)的其他作業。
- 如果面積大的作業在uMap圖面的上層,則會遮蔽較小的結果,致無法點選。
terrTWN_1X1.csv之產生與後處理
- 讓df.desc的內容就是該點aermap作業結果的網址鏈結,這樣在uMap上點選有興趣的點,則會出現該點源周邊aermap作業包的下載點。
- 產出後隨即呼叫csv2kml.py
- 檔案選項-f後輸入csv檔名
- 點狀選項-n,不論選N/H/R/B/D都會一樣,因為這些差異只在Google Map上有作用。uMap上的形狀顏色是另外設定的,不跟著KML內容走。
陪襯4邊形的產生與輸出
- 以模擬範圍(RE XYINC格式順序)的西南角座標開始,畫出模擬範圍的四邊形,輸出格點座標成為csv檔案
- 多邊形在uMap中可以選擇顏色、填滿與否、線條粗細、透明度等等。
- 呼叫csv2kml.py: -n 選項選擇P,輸出多邊形之KML。
uMap結果範例 |