公版模式台中電廠燃煤機組排放量統計
背景
- 公版模式以高空面原來模擬點源的排放,統計特定3維位置CMAQ排放量,是一個重要的查核確認程序。
- 統計過程中,排放檔案雖然是一個月一個檔,但因為也含有前月7天的日期,必將其去除。
程式總體說明
這個 Python 腳本(sum_cmaq.py)的主要目的是計算 CMAQ 模型輸出中指定區域的總和。以下是腳本的主要步驟:
- 定義變數和路徑:
- 定義了需要計算的化學物種(SO2、NO2、NO、CO)。
- 指定了模型輸出文件的根目錄
root
。
- 迴圈遍歷每個月份:
- 對每個月份(1 到 12)的模型輸出文件進行處理。
- 讀取 netCDF 文件:
- 讀取每個月份的 CMAQ 模型輸出文件。
- 獲取文件中變數的維度信息。
- 提取指定區域的數據:
- 根據指定的區域範圍,提取相應的數據。
- 計算指定區域中每個變數的總和。
- 計算總和和打印結果:
- 計算指定區域中所有化學物種的總和。
- 使用指定的換算因子
fac
,將數據轉換為適當的單位。 - 打印每個化學物種的總和。
總的來說,該腳本是為了對 CMAQ 模型輸出中的指定區域進行總和統計,並以適當的單位顯示結果。它將每個月份的數據合併到總和中,最終打印每種化學物種的總和數值。
重要關鍵說明
日期的計算
- 此處使用
dtconvert
的小工具,快速將TFLAG
轉成datetime
的序列 - 再使用
np.where
將當月的時間標籤予以定位,因此只需一次加總即可。
dt=[jul2dt(nc.variables['TFLAG'][t,0,:]) for t in range(nt)]
dtm=np.array([i.month for i in dt])
idx=np.where(dtm==(m+1))[0]
for v in spec:
exec(v+'+=np.sum(nc.variables["'+v+'"][idx[:],4,86:88,39])')
粒狀物的計算
- 以
P
開頭,但不是水滴、也不是paraffin、PRPA - 在物種迴圈內累積該月份的粒狀物
V=[list(filter(lambda x:nc[x].ndim==j, [i for i in nc.variables])) for j in [1,2,3,4]]
vv=[i for i in V[3] if i[0]=='P' and i not in ['PH2O','PAR','PRPA']]
p=0
for v in vv:
p+=np.sum(nc.variables[v][idx[:],4,86:88,39])
pm+=p