Skip to content

CAMx(UAM)的檔案格式

Yungchuan Kuang edited this page Mar 19, 2022 · 3 revisions

(本文主要參考CAMx使用者手冊3.4節)

Fortran的二進制輸入/輸出文件

什麼是Fortran二進制文件?

由於一般空氣品質/氣象模式所需的輸入檔以及和輸出檔,都包含了許多物理量場,龐大的數據檔案通常以“非格式化”(二進制)文件格式進行存取。這意味著,輸入該等數據時,不像一般文字檔ASCII字符集,必須先轉換為二進制數據,才能載入程式記憶體中,同樣在輸出時,也不必給定資料格式,直接從記憶體就可以將數據直接倒入磁碟機檔案中。二進制文件檔案較小,大幅改善程式讀取/寫入的速度,然而缺點是使用者無法像一般ASCII檔案一樣直接查看,或手動編輯它們。

端序(尾序)的差異

同樣是二進制文件檔案,在存儲器或記體上的格式還分成兩種方式:“小端序”與“大端序”,它們之間的區別基本上在於各bit在一個字內的排列順序,其順序取決於計算機芯片組。從電腦發展的歷史上看,大端序的檔案格式主要在許多Unix工作站(SUN,SGI,HP和IBM)上使用,而在個人電腦平台上的x86處理器(如英特爾和AMD)則使用小端序法,而PowerPC的處理器芯片則是大端。
當然計算芯片與檔案格式如果一致是最好,檔案到CPU計算之間不必再經轉換,但如果程式I/O次數若不是很頻繁,在必須I/O時再予以轉變,應不至於會造成太嚴重的效率問題。最主要的問題,出現在不同機器上執行程式,其I/O檔案之間的銜接及約定。
CAMx可以選擇編譯成使用大或小端序的二進制檔案格式,以便適應不同機器對尾序的基本內部設定,除此之外,模式所有前後處理程序也必須保持一致,都編譯成可以在同一類型的平台上運行,就能保證計算的正確性。如果模式系統的任何部件使用相反的二進制表示,編譯為不同的平台,那麼I / O文件將無法正確讀取,將會導致程式崩潰。嘗試讀取錯誤的二進制格式檔案的典型fortran錯誤訊息是,“輸入記錄太長了!input record too long”。所以,如果電腦出現此錯誤訊息,請檢查該二進制文件格式和Fortran編譯器選項之間的一致性。

CAMx的默認方式

對於小端序機器編譯過程,CAMx提供了編譯時的臨時開關,以便進行大端序二進制文件讀取和寫入,在“Makefile文件”編譯腳本內,將編譯器標誌一直設定成使用大端序,以將平台可移植性維持最大化狀態。因此,若無更動,CAMX Makefile中將會默認會模式讀寫大端序二進制文件。

CAMX二進制文件表頭內容

CAMx所有二進制 I / O文件的格式,乃是遵循早期UAM(城市空氣流域模型EPA,1990年)建立的慣例。 該二進制文件包含4筆不隨時間改變的表頭記錄,其後則為時間序列的數據記錄,若為一段時間之平均值,則僅有一組。CAMx大多數輸入檔,包括地面網格排放、模式初始條件、氣象條件包括土地使用類別檔、以及所有的輸出濃度和沉積檔案,這些文件都共享相同的基本格式。
輸入側邊界條件和點源排放的文件類似,但在表頭中還包括他們個別數據結構的附加記錄。
輸入三維氣象文件,使用者按其氣象前處理模式的設定,可以選擇交錯或非交錯網格配置提供風場。三維氣象文件第二頭記錄中,包含了用以指示交錯情形之設定標誌,可用做讀出之檢查。

表頭變數與格式

前述4筆不隨時間改變的表頭紀錄,所包含的變數與格式說明如下:

name,note,itzon,nvar,ibdate,btime,iedate,etime
plon,plat,iutm,xorg,yorg,delx,dely,nx,ny,nz,iproj,istag,tlat1,tlat2,rdum
ione,ione,nx,ny
(namvar(l),l=1,nvar)

第1筆紀錄:執行名稱及起迄時間

name: character*4(10) array檔案內容屬性之特定名稱,name必須是下列六者之一:

  • AIRQUALITY 初始及頂層空氣品質條件
  • BOUNDARY 空氣品質邊界條件
  • EMISSIONS 地面網格排放
  • PTSOURCE 高空點源排放
  • AVERAGE 輸出平均濃度和沉積量、氣象條件
  • INSTANT 瞬間濃度值(存供RESTART使用)

note: character*4(60) array有關此次模擬的敘述
itzon: Integer時區 (0=UTC, 5=EST, etc.)
nvar: Integer 檔案內的變數個數
ibdate: Integer 模擬開始日期,yyjjj 2碼年與太陽日
btime: Real模擬開始小時(2碼:00)
iedate: Integer 模擬結束日期(yyjjj)
etime: Real模擬結束小時(2碼:00)

第2筆紀錄:模擬範圍之座標系統相關設定

plon,plat: Real 投影地極之經、緯度(deg)
iutm: Integer UTM分區
xorg,yorg: Real 原點座標(m)
delx,dely: Real 網格間距(m)
nx,ny,nz: Integer 東西向、南北向與垂直向之網格點數。
iproj: Integer 投影方式0~3,選項如下:

  • 0 = geodetic (lat/lon)
  • 1 = Universal Transverse Mercator (UTM)
  • 2 = Lambert Conic Conformal (LCP)
  • 3 = Polar Stereographic (PSP)

istag: Integer 風場交錯與否(1/0)
tlat1,tlat2, 蘭伯特座標系統之第一與第二true緯度(deg)
rdum: Real (未用)

第3筆紀錄:水平模擬範圍之網格點

ione,ione: Integer 1
nx,ny:東西向、南北向網格點數

第4筆紀錄:變數名稱

namvar: character*4(10,nvar) array變數名稱

時間相關之數據

前述不隨時間改變的檔頭與設定之後,則為資料檔本身,包括隨時間重複的2組數據,第1組只有1筆,為資料之日期時間,第2組有nvar X nz筆,為檔頭所定義的5維數據陣列。

Loop from it = 1 to number of time frame

ibdate,btime,iedate,etime
Loop from l = 1 to nvar variables:

Loop from k = 1 to nz layers:

ione,namvar(l),((var(i,j,k,l,it),i=1,nx),j=1,ny)

第1組(筆)紀錄:特定時間框架下4維數據陣列平均時間的起迄時間

ibdate Integer 開始日期 (YYJJJ)
btime Real 開始時間 (e.g., 1:30 PM = 13.5)
iedate Integer 結束日期(YYJJJ)
etime Real 結束時間 (e.g., 1:30 PM = 13.5)

第2組紀錄:前述時間框架下之4維數據陣列,共重覆nvar x nz筆

ione: Integer =1(格式確認用) namvar: character*4(10,nvar) array變數名稱
var: Real, 數據陣列

適用CAMx(UAM)格式之小工具