CAMx2IOAPI檔案之轉換
Table of contents
背景
- CAMx自UAM模式承傳了uamiv檔案格式,在CAMx6之前檔案IO並沒有nc格式的選項。在PseudoNetCDF程式出台之前,檔案格式間的轉換必須自行撰寫程式。
- 甚至早期VERDI還不能接受CAMx輸出結果之前(<= CAMx2),沒有適合的顯示軟體,還必須借助專屬付費軟體CAMxDESK才能快速瀏覽模擬結果。
- CAMx2IOAPI是RAMBOLL公司提供的轉換程式,旨在轉換CAMx之uamiv格式檔案成為ioapi協定之nc檔。何種場合會應用到CAMx2IOAPI?
- 將uamiv格式的輸出結果,如濃度或沉降量,或其他檔案轉成nc檔案,以利用nc之後處理軟體。
- 將CAMx排放檔案轉到CMAQ模式系統執行
- 雖然PseudoNetCDF系統的pncgen程式也可以讀取uamiv格式檔案,輸出成ioapi協定之nc檔案,畢竟uamiv檔案的內容項目大多已經能夠符合ioapi協定。然而具體來說,CAMx2IOAPI與pncgen之間還是略有差異,二者不能互相完全取代。說明如下表。
- 與這支程式很類似的還有Ramboll公司提供的反向轉檔工具cmaq2camx,特色是除了格式的轉換外,後者還有反應機制間物種的對照。
- 隨著CAMx模式進版到nc檔案的讀寫,使用python可以更輕鬆完成轉換(參考camx2cmaqd4.py筆記),如果python不太熟,平台也正好有現成的ioapi程式庫,CAMx2IOAPI似乎也還能提供一些服務的機會。
CAMx2IOAPI與pncgen之間的差異比較
項目 | CAMx2IOAPI* | pncgen | 說明 |
---|
執行方式 | 用csh腳本控制 | pncgen -f uamiv -O $grd $nc | |
讀取格式 | 只能接受uamiv格式。適用地面排放及空品沉降等輸出檔) | 可以接受所有CAMx IO檔案 | |
垂直層對照 | 會轉換 | 不會轉換 | 如果垂直層定義不同pnc會有困難 |
時間轉換 | 有時區概念 | 沒有時區概念、需修改全域屬性 | CMAQ為UTC、CAMx為LST |
屬性NAME | 消失 | 消失 | < CAMx7.10會需要確認NAME的內容 |
屬性GDNAM | 可指定 | 一律內設為CAMx、需修改全域屬性 | CMAQ會確認檔案中的GDNAM |
單位轉換 | 可 | 無、需逐一修改個別變數屬性 | CAMx6+不會讀取nc檔中變數的單位屬性,CMAQ會讀取並隨之調整 |
* 這個表也適用在Ramboll公司提供的反向轉檔工具cmaq2camx,詳見CMAQ2CAMx筆記
CAMx2IOAPI 版本
- 官網目前公開的是2016年CAMx2IOAPI v6版本。
- 並不會因為IOAPI相依軟體的進版而有差異。只要與CMAQ的ioapi版本一致。
編譯
FC = ifort
OPT = -O3 -unroll -stack_temps -safe_cray_ptr \
-convert big_endian -assume byterecl ${MFLAGS} ${OMPFLAGS}
LIB = -L$(IOAPI_LIB) -lioapi -L$(NETCDF_LIB) -lnetcdf -lnetcdff \
$(OMPLIBS) $(ARCHLIB) $(ARCHLIBS)
INC = -I$(IOAPI_INC)
EXE = camx2ioapi
MFLAGS = -traceback -xHost # this-machine
OMPFLAGS = -openmp -parallel
OMPLIBS = -openmp
ARCHLIB = -Bstatic
###FC = ifort
###OPT = -mcmodel=medium -O2 -align dcommons -extend_source -convert big_endian
###LIB = -L$(IOAPI_LIB) -lioapi -L$(NETCDF_LIB) -lnetcdf
###INC = -I$(IOAPI_INC)
###EXE = camx2ioapi
###FC = gfortran
###OPT = -mcmodel=medium -O2 -fno-align-commons -fconvert=big-endian -frecord-marker=4 -ffixed-line-length-0
###LIB = -L$(IOAPI_LIB) -lioapi -L$(NETCDF_LIB) -lnetcdf
###INC = -I$(IOAPI_INC)
###EXE = camx2ioapi
IOAPI_INC = /cluster/bld/ioapi3.1/ioapi
IOAPI_LIB = /cluster/bld/ioapi3.1/Linux2_x86_64ifort
NETCDF_LIB = /cluster/netcdf/lib
執行
環境變數選項
環境變數 | 內容 | 範例 | 說明 |
---|
MAP_PROJ_OVERRIDE | 新檔案的投影參數 | “2 10.000 40.000 120.990 120.990 23.610” | GTYP, P_A, P_B, P_G, PLON, XCENT, YCENT |
VGTOP3D_OVERRIDE | 頂層高度(pa) | 5000 | |
TIMEZONE_OVERRIDE | 新檔案的時區 | 0 | CMAQ習慣用UTC |
UNITS3D_OVERRIDE | 新檔案的單位 | moles/s | CMAQ會讀變數的屬性單位 |
TSTEP_OVERRIDE | 是否覆蓋時間步階 | F | 保持一樣 |
OUT_LAYER_INDEX | 只輸出特定垂直層 | 1 | 地面排放量 |
GDNAM_OVERRIDE | 網格系統名稱 | sChina_81k | 需與MCIP一致 |
CAMx_IN | 輸入檔名稱 | … | (只用在標準輸入) |
IOAPI_OUT | 輸出檔名稱 | .. | |
標準輸入選項
環境變數 | 內容 | 範例 | 說明 |
---|
Input CAMx filename | 輸入檔名 | $CAMx_IN | |
Data Type | 檔案類型 | EMIS | (只)可以是AVRG, DDEP, WDEP, EMIS四項之一 |
Sigma Levels | 垂直層 | 1 | |
腳本範例
#kuang@master /nas1/cmaqruns/2016base/data/emis
#$ cat camx2cmaqd1_line.job|grep -v ^\#
setenv MAP_PROJ_OVERRIDE "2 10.000 40.000 120.990 120.990 23.610"
setenv VGTOP3D_OVERRIDE 5000.0
setenv TIMEZONE_OVERRIDE 0 # PST
setenv UNITS3D_OVERRIDE "moles/s"
setenv TSTEP_OVERRIDE F
setenv OUT_LAYER_INDEX 1
setenv GDNAM_OVERRIDE "sChina_81k"
setenv CAMx_IN /nas1/TEDS/REAS3.1/join_spec/d1.line
setenv IOAPI_OUT /nas1/cmaqruns/2016base/data/emis/fortBE.013.R3line.base00.nc
rm -f $IOAPI_OUT
/cluster/src/CAMx/camx2ioapi_v6/src/camx2ioapi << EOF
Input CAMx filename|$CAMx_IN
Data Type |EMIS
Sigma Levels |1
EOF