Link Search Menu Expand Document

公版模式台中電廠燃煤機組排放量統計

Table of contents

背景

  • 公版模式以高空面原來模擬點源的排放,統計特定3維位置CMAQ排放量,是一個重要的查核確認程序。
  • 統計過程中,排放檔案雖然是一個月一個檔,但因為也含有前月7天的日期,必將其去除。

程式總體說明

這個 Python 腳本(sum_cmaq.py)的主要目的是計算 CMAQ 模型輸出中指定區域的總和。以下是腳本的主要步驟:

  1. 定義變數和路徑:
    • 定義了需要計算的化學物種(SO2、NO2、NO、CO)。
    • 指定了模型輸出文件的根目錄 root
  2. 迴圈遍歷每個月份:
    • 對每個月份(1 到 12)的模型輸出文件進行處理。
  3. 讀取 netCDF 文件:
    • 讀取每個月份的 CMAQ 模型輸出文件。
    • 獲取文件中變數的維度信息。
  4. 提取指定區域的數據:
    • 根據指定的區域範圍,提取相應的數據。
    • 計算指定區域中每個變數的總和。
  5. 計算總和和打印結果:
    • 計算指定區域中所有化學物種的總和。
    • 使用指定的換算因子 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