Link Search Menu Expand Document

CAMx 模式的BC

Table of contents

邊界濃度條件的系統性建立流程、局部修改作業等等,都是CAMx個案模擬之系統建立與修正過程的重要元素。這裡介紹傳統Fortran、Python以及pncgen作法,以及執行經驗。

邊界濃度檔案之格式

  • 以下依序介紹Fortran與Python作業方式的檔案格式差異。
  • 因Fortran程式為循序存取,python則透過程式庫直接存取,對於存取順序有不同的要求,程式設計上有很大的差異。

uamivlateral_boundary格式內容之比較(Fortran)

  • CAMx的邊界濃度檔案格式有別於其他所有格式,除了4筆表頭內容一致外,增加了第5~8筆表頭內容
  • 時變部分,因邊界濃度為2維場,與uamiv之3維特性有所差異。CAMx的特性是以邊界序(西東南北)取代uamiv高度位置。而將每筆之2維濃度場設定為高度及水平向。
項目uamivlateral_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程式碼比較麻煩的是必須逐一給定字串變數的長度、整數、以及實數等等定義。這一方面,最有效的方式還是必須看程式碼範例,此處就不一一列表。

uamivlateral_boundary格式內容之比較(Python)

項目uamivlateral_boundaryioapi
時間標籤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轉換程式之需求。
項目CAMxCMAQ說明
pncgen格式名稱lateral_boundary類似ioapi只能說類似,因為非典型
污染物名稱前綴WEST_/EAST_/SOUTH_/NORTH_共NVARS*4項NO,NO2…共NVARS項污染物迴圈時要注意
維度順序時間、南北(或東西)、高度時間、高度、反時針周界PERIMCMAQ的邊界定義為自西南角起始圍繞模擬範圍一圈,詳參大型網格系統切割邊界濃度
維度大小東西面(NROWS)、與南北面(NCOLS)不同PERIM = 2 × ( NROWS + NCOLS ) + 4CMAQ無重疊點、CAMx會重疊4個角落點
時間當地時間+時區UTC 
ITZON-8-CAMx以此計算太陽天頂角
FTYPE-2CMAQ以此辨識檔案性質
NAME“BOUNDARY”-CAMx以此辨識檔案性質
IUTM0-早期SIP使用UTM座標系統
CPROJ2-投影方式
ISTAG0-是否為間隔網格
PLON, PLAT, TLAT1, TLAT2120.99, 23.61, 10.0, 40.0-蘭伯特投影參數
  • 有關CAMx nc檔案所需的全域屬性、歷史沿革、如何修改等等,可以參考這一篇

固定值之邊界濃度

  • CAMx與CMAQ一樣,在測試階段可以一組單純的空氣品質觀測值作為邊界濃度條件,一方面可以測試檔案格式與操作是否正確,一方面也可以調適化學機制之反應平衡、模式邊界與起始條件的一致性等等課題。
  • 這支程式是沿用UAM的邊界條件設定程式,因此習慣上仍然讀取一個格式化的檔案(BNDARY.INP),產生檔案也是以數字編號(DATA NUBDY /11/)來命名。

自空品濃度檔案截取邊界濃度

  • 台灣地區的空氣品質受到境外因素干擾非常嚴重,因此正確的邊界條件是提高模擬準確度必要的措施。可行的方法來源比較如下表。

邊界濃度數據來源及比較

數據來源解析度優勢弱點
MOZART2.5~2.8度、6小時化學機制不再提供下載
CAM-chem1.25 × 0.94度、6小時高解析度低準確度
WACCM0.9 × 1.25度、6小時高即時性低準確度
EAC40.75 × 0.75°、3小時高準確性項目覆蓋性低
NRT約9Km、3小時高即時性、高解析度項目覆蓋性低
自行模擬9~81Km、逐時項目完整低準確性

截取程式

邊界濃度檔案之處理程式

逐日切割邊界濃度

  • bndaryM2J.f,其目的在將全月逐時的邊界濃度檔案,按照日期進行切割以進行逐日的CAMx模擬測試與調整。

.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結果的分析了。

境外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