Link Search Menu Expand Document

CAMx2IOAPI檔案之轉換

Table of contents

背景

  • CAMx自UAM模式承傳了uamiv檔案格式,在CAMx6之前檔案IO並沒有nc格式的選項。在PseudoNetCDF程式出台之前,檔案格式間的轉換必須自行撰寫程式。
  • 甚至早期VERDI還不能接受CAMx輸出結果之前(<= CAMx2),沒有適合的顯示軟體,還必須借助專屬付費軟體CAMxDESK才能快速瀏覽模擬結果。
  • CAMx2IOAPI是RAMBOLL公司提供的轉換程式,旨在轉換CAMx之uamiv格式檔案成為ioapi協定之nc檔。何種場合會應用到CAMx2IOAPI
    1. uamiv格式的輸出結果,如濃度或沉降量,或其他檔案轉成nc檔案,以利用nc之後處理軟體。
    2. 將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版本一致。

編譯

  • 編譯器選項
    • 注意ifort選項仍為舊版,新版已改成-q
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
  • 程式庫連結
    • 新版CMAQ需要ioapi3.2版
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新檔案的時區0CMAQ習慣用UTC
UNITS3D_OVERRIDE新檔案的單位moles/sCMAQ會讀變數的屬性單位
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