CMAQ點源常數檔案之準備

 

前言

顧名思義,這支程式就是為了產生CMAQ所需的點源排放量中常數、不隨時間變化的部分。

因為是常數,沒有必要切割成(複製)成逐日檔。但至少在執行批次範圍內所有日期的變數檔可以共用此常數檔。簡言之,就是執行批次範圍內的煙囪個數、順序、必須保持一致,這使得很多未操作的污染源及煙道,必須仍然保留在排放檔中。

執行變數檔案轉換之前,必須先執行常數檔案之轉換,主要是REAS點源排放量的處理是在這一階段執行。

緣起

  • 在CAMx(與傳統的UAM)中,點源檔案與其他檔案最大的不同就是有常數部分的檔頭,其他檔案可能只有4筆header,點源因有煙囪位置、排放條件等,這些不會隨著時間有所改變,因此放在檔頭。
    • 即使CAMx 6/7等最新版nc格式,仍然採取此一策略。煙囪參數是1維變數,是沒有時間維度的。
  • CMAQ基本上也照此劃分原則。同時為要保持檔案可以符合ioapi的協定,CMAQ乃將常數項、變數項予以分開成2個檔案,檔案結構較為單純。

點源nc檔案煙囪參數之版本差異

項目 CAMx6 CAMx7 CMAQ tim_const 說明
煙囪參數 [v+'STK' for v in 'XYHDTV'] xcoor, ycoor, stkheight, stkdiam, stktemp, stkspeed XLOCA, YLOCA, STKHT, STKDM, STKTK, STKVE -
煙囪參數維度 NSTK COL TSTEP, LAY, ROW, COL CAMx皆為1維。CMAQ為符合ioapi協定,NTSTEP, NLAYS, NCOLS皆為1
特殊參數 (FLOW, PLMHT, IONE, ITWO, KCELL)1, (NSTK)2 pigflag, saoverride LATITUDE, LONGITUDE, STKFLW, COL, ROW, ISTACK, IFIP, LMAJOR, LPING, STKCNT CAMx6前2項與CMAQ前3項為實數,其餘皆整數
特殊參數維度 1(TSTEP, NSTK), 2(TSTEP) COL TSTEP, LAY, ROW, COL CMAQ符合ioapi協定
模擬期間煙囪個數、順序一致性 不需要 必須 必須 CAMx6也可以使用隨時間改變的氣流量與煙流高
  • 在新版的CMAQ中,也取消了隨時間變化的煙囪上升高度項,另外在模式內計算。這一點算是引進CAMx的優勢強項。
  • CMAQ/CAMx排放量檔案的演進、格式與單位的差異、轉換、等等,可以參考CMAQ/CAMx排放量檔案之轉換

思路策略

如前述此二模式檔案有此背景,因此在準備時就不需猶豫該採取什麼策略,先將原始數據先整理成CAMx檔案的格式,再將其發展程常數及變數2個檔案,就會是最精簡、省工的方向。考慮因素:

  • CAMx檔案同時有常數及變數項,不會出現檔案配對的困擾(CMAQ必須在run_cctm.csh中才能確認其關係)。
  • 就常數項而言,CAMx檔案會在全月範圍內保持一致,這對該月內所有的批次而言,都可以適用、不必擔心煙囪筆數順序的錯誤。
  • REAS、TEDS如果直接轉成這個常數檔就不容易處理了,因為每一天CEMS展開之後,煙囪的筆數與順序應該是都不一樣,還是要定義一段較長的時間來匯總(聯集)所有煙囪,這就是CAMx檔案的邏輯。

程式設計

分段說明

詳見pt_const程式說明的內容([[2022-07-08-pt_const.py]])。

CAMx 6版與7版的差異

既然是從CAMx點源檔案開始讀起,CAMx改版就會對本程式造成衝擊。

  • 早期ptsource格式,必須以pnc來讀取,6版以後可以接受nc格式,但內容還是有差異,見CMAQ/CAMx排放量檔案之轉換詳細說明。
  kuang@114-32-164-198 /Users/cmaqruns/2019base/data/ptse/REAS
$ diff /Users/cmaqruns/2016base/data/ptse/pt_const.py pt_const.py
3d2
< import PseudoNetCDF as pnc
9,10c8,9
<
< mon=int(sys.argv[1][-2:])
---
> #arvg=../twn/fortBE.413_teds11.ptse02.nc
> mon=int(sys.argv[1][-5:-3])
12c11
< pth='.' #~/mac/cmaqruns/2016base/data/ptse'
---
> pth='/nas1/cmaqruns/2016base/data/ptse'
56c55
< df.set_index('lon').to_csv('point_reas16'+sys.argv[1][-2:]+'.csv')
---
> df.set_index('lon').to_csv('point_reas16'+sys.argv[1][-5:-3]+'.csv')
59c58
< pt=pnc.pncopen(fname1,format='point_source')
---
> pt = netCDF4.Dataset(fname1,'r')
63c62
< nhr,nvar,dt=pt.variables[v3[0]].shape
---
> nhr,nvar,dt=pt.variables['TFLAG'].shape
66,67c65,66
< tb=pt.STIME[0]-8 #UTC
< fname1=fname1.replace('fortBE.14.','').replace('base','16')
---
> tb=pt.STIME - 80000
> fname1=fname1.split('/')[-1].replace('fortBE.413_','').replace('ptse','19').replace('.nc','')
78,79c77,78
< x=list(pt.variables['XSTK'][:nopts])+list(df.x_m)
< y=list(pt.variables['YSTK'][:nopts])+list(df.y_m)
---
> x=list(pt.variables['xcoord'][:nopts])+list(df.x_m)
> y=list(pt.variables['ycoord'][:nopts])+list(df.y_m)
95c94
< nc.SDATE=2000000+pt.SDATE[0]
---
> nc.SDATE=2000000+pt.SDATE
97c96
< mp={'STKDM':'DSTK','STKHT':'HSTK','STKTK':'TSTK','STKVE':'VSTK','XLOCA':'XSTK', 'YLOCA':'YSTK',}
---
> mp={'STKDM':'stkdiam','STKHT':'stkheight','STKTK':'stktemp','STKVE':'stkspeed','XLOCA':'xcoord', 'YLOCA':'ycoord',}
113c112
<     HSTK=pt.variables['HSTK'][i]
---
>     HSTK=pt.variables['stkheight'][i]

後處理

  • CMAQ點源檔案無法檢視單一檢視,需有常數及變數2個檔案同時進行。
  • 為此設計pt2em_d01.py,將離散點之點源排放量,歸併在面源網格中,以便以VERDI進行檢視,如附圖所示。

REAS點源解讀結果(CMAQ格式)之比較

REASptD1.png Pt2em_d1.pySO2.png
3月結果 1月結果

Resources

  • Barron Henderson, pseudonetcdf tutorial, http://www.barronh.com/software/tutorials/pseudonetcdf-tutorial -verdi usage https://www.airqualitymodeling.org/index.php/VERDI_1.5_User_Manual#3.1_Installation_Instructions_for_Linux_and_Mac VERDI使用說明 : http://www.evernote.com/l/AH3leuVQTuBEF7Vrs0D1C8Q-Iff5CpHl7eU pt2emNest:https://github.com/sinotec2/CAMx_utility/blob/master/pt2emNest.f Example https://github.com/sinotec2/cmaq_relatives/blob/master/run_cctmMM_RR_DM.csh Notes CAMx(UAM)的檔案格式, Yungchuan Kuang edited this page on 12 Jul 2016 · 2 revision, shttps://github.com/sinotec2/camxruns/wiki/CAMx(UAM)的檔案格式 Here: pt_const.py Code: pt_constLL.py轉換點源檔之常數部分 Relatives: pt_timvar.py CMAQ/CAMx排放量檔案之轉換 D4範圍地面排放檔案之轉換 CMAQ compilations CMAQ初始及邊界條件設定