2015年3月19日

輸出 .nc 檔案格式

NCL內建了許多實用的函數,所以不只單單作圖,很多時候直接使用NCL來分析資料十分的方便迅速。而在做科學分析時,有時是為了增加效率(有些分析非常耗時耗費電腦資源),有時是為了偵錯(有些計算非常繁複),需要把計算的結果存下來(輸出),以便之後的作圖或再計算。

NCL101Day2 中介紹了netCDF檔案格式的優點,在NCL中非常的方便好用,不但讀取方式簡潔,還能一併附帶變數屬性和維度資訊。因此,本篇示範了如何將變數輸出成一個.nc檔案。

範例 NCL_output_ncFile.ncl 計算了 air.2014.nc 中,模式最底層的年平均氣溫,並將之輸出到 MyOwnNC.nc

;===== NCL_output_ncFile.ncl =====
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"

begin
        ncFile                          = addfile("air.2014.nc","r")
        Temp                            = ncFile->air(:,0,:,:)
        meanTemp                        = dim_avg_n_Wrap(Temp,0)
        ; 計算年平均

; write out meanTemp to a .nc file
        ncFileName                      = "MyOwnNC"
        ; 指定檔名
        system("/bin/rm -f "+ncFileName+".nc")
        ; 先強制刪除檔案確保資料無誤
        print("Creating... "+ncFileName+".nc")
        ncdf                            = addfile(ncFileName+".nc","c")
        ; 建立新的.nc檔。"c" 代表 create,前面第五行的 "r" 代表 read。

        ; 和 plot 的 resources 相同概念,可以指定新檔案屬性
        fAtt                            = True
        fAtt@title                      = "first .nc file created by myself"
        fAtt@creation_date              = systemfunc("date")
        fileattdef(ncdf,fAtt)
        ; 執行完這一行才把屬性加到檔案中

        ncdf->mT                        = meanTemp
        ; 和讀檔很類似,等式左邊「->」後面放的是之後會顯示在.nc檔案內的變數名稱
        ; 等式右邊放的是要存入的變數

print("All Done.")
end
;=====

得到.nc檔後,同樣的可以用 ncl_filedump 檢查其內容。

>>$ ncl_filedump MyOwnNC.nc


NCL總共提供兩種方式讓使用者建立.nc檔案。這裏示範的是比較簡單的 Method 1,而 Method 2 的功能較為完整,泛用性較好但步驟較為繁複,有機會以後再介紹...





Take Home Message
ncdf = addfile( FileName , "c" )
fileattdef( ncdf , FileAtt )
ncdf->VarInNC = VarInScript

沒有留言:

張貼留言