邊界濃度條件的系統性建立流程、局部修改作業等等,都是CAMx個案模擬之系統建立與修正過程的重要元素(see [[2022-06-24-CAMx_ICBC]])。這裡介紹傳統Fortran、Python以及[[2022-06-26-pncgen]]作法,以及執行經驗。
邊界濃度檔案之格式
- 以下依序介紹Fortran與Python作業方式的檔案格式差異。
- 因Fortran程式為循序存取,python則透過程式庫直接存取,對於存取順序有不同的要求,程式設計上有很大的差異。
uamiv與lateral_boundary格式內容之比較(Fortran)
- CAMx的邊界濃度檔案格式有別於其他所有格式,除了4筆表頭內容一致外,增加了第5~8筆表頭內容
- 時變部分,因邊界濃度為2維場,與uamiv之3維特性有所差異。CAMx的特性是以邊界序(西東南北)取代uamiv高度位置。而將每筆之2維濃度場設定為高度及水平向。
項目 | uamiv | lateral_boundary] | 說明 |
---|---|---|---|
表頭1檔名標籤與起迄日期時間 | fname, note, NOSEG, NOSPEC, NDATE, TTIME, NDLAST, TTLAST |
(same) | |
表頭2網格系統 | XUTM, YUTM, NZONE, XORG, YORG, DELTAX, DELTAY, NOXG, NOYG, NOZ, idproj,istag,tlat1,tlat2,rdum |
(same) | |
表頭3 4個整數 | (Itmp(j), J=1,4) | (same) | |
表頭4污染物名稱 | ((SPNAME(I,J), I=1,10), J=1,NOSPEC) | (same) | |
表頭5~8 4個邊界的索引指標 | (無) | DO 100 N=1,4 READ(11) NOSEG, NEDG, NCEL(N),((IND(N,J),i,i,i),J=1,NCEL(N)) 100 CONTINUE |
依序為西、東、南、北 |
時變部分逐時之啟迄日期時間 | jjj,btime, jjn,etime | (same) | |
時變部分之濃度場 | DO L=1,NOSPEC DO K=1,NOZ WRITE (12) NOSEG, (SPNAME(I,L),I=1,10), ((C(I,J,K,L),I=1,NOX),J=1,NOY) enddo enddo |
DO L=1,NOSPEC DO NEDG=1,4 nc=NOYG if(NEDG.gt.2)nc=NOXG WRITE (12) NOSEG, (SPNAME(I,L),I=1,10), NDG,((BC(I,K,L), K=1,NOZ2), I=1,NC) enddo enddo |
- Fortran程式碼比較麻煩的是必須逐一給定字串變數的長度、整數、以及實數等等定義。這一方面,最有效的方式還是必須看程式碼範例,此處就不一一列表。
uamiv與lateral_boundary格式內容之比較(Python)
項目 | uamiv | lateral_boundary | ioapi |
---|---|---|---|
時間標籤 | TFLAG, ETFLAG(=TFLAG+1hr) | TFLAG, ETFLAG(=TFLAG+1hr) | TFLAG |
污染物名稱 | NO,NO2...共NVARS項 | 前綴WEST_/EAST_/SOUTH_/NORTH_共NVARS*4項 | 同uamiv |
濃度場維度 | 時間、高度、南北、東西4維 | 時間、南北(或東西)、高度3維 | 同uamiv |
全域屬性NAME | "AIRQUALITY" | "BOUNDARY " | (不允許) |
- 7.10以前舊版的CAMx模式在讀取nc檔案時,會嚴格檢查ETFLAG以及NAME全域屬性,以識別檔案的時間及屬性,需特別留意。
CMAQ BCON與CAMx .bc檔案格式之比較
- 模式間的比較涉及多項因素,如果能將次要因素一一消除,才能顯示出重要的差異。就此,將CMAQ與CAMx所使用的邊界條件予以統一,有其必要性。
- 官網提供了cmaq2camx的fortran版本,使用ioapi的程式庫來解讀cmaq的nc檔,其中格式包括了邊界濃度檔案的轉換。
- camx2cmaq程式似乎曾經確實存在過
- 可以從TCEQ提供的使用手冊(與演講ppt)來瞭解其程式方法流程。據使用手冊內容除了一般uamiv檔案之外,該程式是可以轉換邊界濃度檔的。
- 類似的程式功能,官網提供的是camx2ioapi版本,只能轉換uamiv到CMAQ的ioapi格式。
- pncgen
- pncgen可以讀取lateral_boundary格式,也可以寫成ioapi格式檔案(參範例),不過因涉及2個模式對空品項目名稱的定義、空間(特別是高度的層數)、與時間(時區)的差異,BCON檔案對全域屬性FTYPE的要求等等,pncgen應該無法克竟全功。
- 此處提供2個模式邊界濃度檔案格式的差異(Python平台),以提供未來進一步撰寫CAMx2CMAQ轉換程式之需求。
項目 | CAMx | CMAQ | 說明 |
---|---|---|---|
pncgen格式名稱 | lateral_boundary | 類似ioapi | 只能說類似,因為非典型 |
污染物名稱 | 前綴WEST_/EAST_/SOUTH_/NORTH_共NVARS*4項 | NO,NO2…共NVARS項 | 污染物迴圈時要注意 |
維度順序 | 時間、南北(或東西)、高度 | 時間、高度、反時針周界PERIM | CMAQ的邊界定義為自西南角起始圍繞模擬範圍一圈,詳參大型網格系統切割邊界濃度 |
維度大小 | 東西面(NROWS)、與南北面(NCOLS)不同 | PERIM = 2 × ( NROWS + NCOLS ) + 4 | CMAQ無重疊點、CAMx會重疊4個角落點 |
時間 | 當地時間+時區 | UTC | |
ITZON | -8 | - | CAMx以此計算太陽天頂角 |
FTYPE | - | 2 | CMAQ以此辨識檔案性質 |
NAME | “BOUNDARY” | - | CAMx以此辨識檔案性質 |
IUTM | 0 | - | 早期SIP使用UTM座標系統 |
CPROJ | 2 | - | 投影方式 |
ISTAG | 0 | - | 是否為間隔網格 |
PLON, PLAT, TLAT1, TLAT2 | 120.99, 23.61, 10.0, 40.0 | - | 蘭伯特投影參數 |
- 有關CAMx nc檔案所需的全域屬性、歷史沿革、如何修改等等,可以參考這一篇。
固定值之邊界濃度
- CAMx與CMAQ一樣,在測試階段可以一組單純的空氣品質觀測值作為邊界濃度條件,一方面可以測試檔案格式與操作是否正確,一方面也可以調適化學機制之反應平衡、模式邊界與起始條件的一致性等等課題。
- 這支程式是沿用UAM的邊界條件設定程式,因此習慣上仍然讀取一個格式化的檔案(BNDARY.INP),產生檔案也是以數字編號(
DATA NUBDY /11/
)來命名。
- 輸入檔案:BNDARY.INP
- 輸出檔案:fort.11(lateral_boundary格式)
自空品濃度檔案截取邊界濃度
- 台灣地區的空氣品質受到境外因素干擾非常嚴重,因此正確的邊界條件是提高模擬準確度必要的措施。可行的方法來源比較如下表。
邊界濃度數據來源及比較
數據來源 | 解析度 | 優勢 | 弱點 |
---|---|---|---|
MOZART | 2.5~2.8度、6小時 | 化學機制 | 不再提供下載 |
CAM-chem(see [[2022-06-24-CAMx_ICBC]]) | 1.25 × 0.94度、6小時 | 高解析度 | 低準確度 |
WACCM | 0.9 × 1.25度、6小時 | 高即時性 | 低準確度 |
EAC4 | 0.75 × 0.75°、3小時 | 高準確性 | 項目覆蓋性低 |
NRT | 約9Km、3小時 | 高即時性、高解析度 | 項目覆蓋性低 |
[自行模擬][EAEmis] | 9~81Km、逐時 | 項目完整 | 低準確性 |
截取程式
- CAMx官網提供了截取程式bndextr.f,其使用方法詳見從空品檔案切割邊界濃度 BNDEXTR, [[2022-06-25-bndex.job]]
- 除此之外,筆者亦提供python程式,使用了Scipy的函數,因具有平行化計算的功能,會有較佳的內插速度。
邊界濃度檔案之處理程式
逐日切割邊界濃度
- bndaryM2J.f,其目的在將全月逐時的邊界濃度檔案,按照日期進行切割以進行逐日的CAMx模擬測試與調整。
- 內含文件:見在UAMIV-CMDs@FAQ
- 輸入檔:全月之邊界濃度檔,由BNDEXTR所產生
.bc濃度乘除常數
- 位置:/nas2/camxruns/2017/ICBC/bndextr/multBC.py
- 這支py27的程式會用一個常數來乘上指定高度層數、指定污染物之濃度,另存檔案。
- 引數:
usage: multBC.py [-h] -s SPEC -i INPUT -o OUTPUT -f FACTORS -l LEV
- 早期似乎不必呼叫pncgen也能存檔。
境外PM2.5佔台灣平均值比例之計算
- 境外比例可以從邊界檔平均濃度與島內平均濃度來簡單計算(不過以下要介紹的這支程式並沒有開啟邊界濃度檔,而是從模擬結果濃度檔的四圍來定義邊界)。
- 程式IO、設計與下載詳見Focus-on-Air-Quality
- 位置:/nas2/camxruns/2016_v7/outputs/bc_PMmean.py
- 從這支程式的位置可以知道它是為CAMx寫的,將
uamiv()
改成netCDF4.dataset()
就可以用在CMAQ結果的分析了。
- 從這支程式的位置可以知道它是為CAMx寫的,將
境外O3 8小時值佔比之計算
- 這支程式跟前述bc_PMmean.py目的很像,只是對象是臭氧8小時值。
- 程式IO、設計與下載詳見Focus-on-Air-Quality
- 位置:/nas2/camxruns/2016_v7/outputs/Annual_F2/base/bnd-in.py
40層BCON轉成15層bc檔:slim_bc.py
- 此項作業將CMAQ邊界檔轉成CAMx邊界檔
-
詳見0629部落格說明
- ./2016_v7/ICBC/mod_sdate.py
[2022-06-24-CAMx_ICBC]: https://sinotec2.github.io/FAQ/2022/06/24/CAMx_ICBC.html “CAMx [2022-06-26-pncgen]: https://sinotec2.github.io/FAQ/2022/06/26/pncgen.html “ncgen [2022-06-24-CAMx_ICBC]: https://sinotec2.github.io/FAQ/2022/06/24/CAMx_ICBC.html “CAMx [2022-06-25-bndex.job]: https://sinotec2.github.io/FAQ/2022/06/25/bndex.job.html “從空品檔案切割邊界濃度 [//end]: # “Autogenerated link references” //begin: # “Autogenerated link references for markdown compatibility” [2022-06-24-CAMx_ICBC]: https://sinotec2.github.io/FAQ/2022/06/24/CAMx_ICBC.html “CAMx [2022-06-26-pncgen]: https://sinotec2.github.io/FAQ/2022/06/26/pncgen.html “ncgen [2022-06-24-CAMx_ICBC]: https://sinotec2.github.io/FAQ/2022/06/24/CAMx_ICBC.html “CAMx [2022-06-25-bndex.job]: https://sinotec2.github.io/FAQ/2022/06/25/bndex.job.html “從空品檔案切割邊界濃度 [//end]: # “Autogenerated link references”