說到Netcdf格式,做大氣跟海洋的人應該都不陌生吧~~應該是跟我一樣有種又愛又恨的Feel,最近本來想說來把的語法好好學一學,因為未來可能要更改某些default設定,所以想說先來學一學netcdf的讀取等等,一開始直覺就是用fortran直接include netcdf的library(http://www.unidata.ucar.edu/software/netcdf/examples/programs/index.html,可以參考這個網站),基本上是這樣寫啦:
讀檔
include "netcdf.inc"
val = nf_open(file,nf_write,ncid)
val=nf_inq_varid(ncid,'變數名稱',data)
val=nf_get_var_int(ncid,varid,變數的矩陣)
val=nf_close(ncid)
寫檔
include "netcdf.inc"
val=nf_create(file,nf_clobber,ncid)
val=nf_def_dim(ncid,"x",nx,x_dimid)
val=nf_def_dim(ncid,"y",ny,y_dimid)
dx(2)=x_dimid
dy(1)=y_dimid
val=nf_def_var(ncid,"變數名稱",nf_int,ndims,varid)
val=nf_enddef(ncid)
val=nf_put_var_int(ncid,varid,矩陣)
val=nf_close(ncid)
看起來很簡單 ~但是我改寫了一下想說讀讀看wrfout,編譯簡單通過沒問題,但是執行時給我出現大魔王"segement fault",這讓我情何以堪(我猜測應該是wrfout的格式應該是跟一般的netcdf有點出入,所以才會有這種結果產生)。
其實有更簡單的方式就是利用NCL
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
Begin
a = addfile("./met_em.d01.2000-01-24_12:00:00.nc",”w")
b = asciiread("asc1.txt",檔案行數,"float")
sst = a->SST ; read a field
sst = b; change the field
a->SST = sst ; write the field
asciiwrite("file.txt",sst)
end
果然簡單多了,也可以把數值做輸出,當初在學繪圖時貪圖RIP的便利性,所以現在想學NCL真的有點痛苦(雖然我根本沒有認真學啦) ~~
另外在記錄一下一些netcdf的小工具
1. netcdf (ncdump、ncgen)
這個是最基本轉檔工具阿,相信大家都比我還要熟 ~~
安裝應該不用多說 ~~就是一般linux安裝方式(./configure ; make ;make install)
一般來說應該都很簡單,但是如果沒有安裝好的話一般都是忘記安裝gcc和gcc-c++,這時候用yum就可以了。
2. nco tool (ncdiff、ncrcat、ncra、nck)
安裝方法去這個網站(http://nco.sourceforge.net/)下載rpm檔就好了,不然就用yum安裝也是可以啦 ~~不過要加一下更新路徑就對啦。
下載適合你自己電腦OS的RPM之後rpm -ivh *****.rpm就完成了。
其實顧名思義就是跟ascii格式一樣的使用方法
ncdiff (diff)
ncdiff wrfinput1 wrfinput2 -o diffout.nc
把兩個不同的netcdf寫進diffout.nc這檔案裡面
ncrcat -v RAINNC wrfout_d03* -o RAINNC.nc
把wrfout第三槽的RAINNC檔頭的檔案全部都寫進去RAINNC.out裡面,也可以指定時間(-d time,t1,t2)。
ncra -v U wrfout_d03* -o U.nc
把所有d3的東西風做平均 !!
nck -d Time,1,1 wrfout_d03 -o wrfout1.nc 切割檔案啦 ~~
接下來就是簡單的看圖程式(其實這幾個看圖程式只是給大家方便而已,如果是paper要的圖形,千萬不要用這些軟體阿)
1. ncview
這之前就有說明過如何安裝了 ~~目前我更新到了2.1.1版本,不過還是我還不知道地圖要怎樣出來,跑出來大概是這樣:
這是T2的2D的圖形,完完全全只是給大家參考用的。
2. ncBrowse
雖然說wrf是netcdf格式,但是他就是不吃wrfout,我有嘗試過其他的netcdf他都願意讀取,只有WRF格式他寫說:Not a NETCDF file,所以如果是大尺度的人,可以用這成是來畫時序圖等等類似excel或者是sigmaplot的圖形。
因為這個檔案是自己寫入的netcdf file並沒有時間及風速等等相關因子。
安裝方式http://www.epic.noaa.gov/java/ncBrowse/tech.htm#VER14
這個網站寫的非常清楚阿 ~~ 其實重點就是要安裝java啦 ~~
3.Panoply(http://www.giss.nasa.gov/tools/panoply/)
download Panoply.tgz
unzip -d Panoply.tgz
tar xvf Panoply.tar
export PATH=$nowpath:$PATH
裡面有shell-script直接啟動
panoply.sh可以看到這樣的畫面
視窗介面開始點選資料夾(不過要記得把wrfout改名程wrfout.nc),這樣才讀的到阿。
網路上簡單的繪圖大概就是這些吧 ~~ 其實還滿方便的,不過還是不能忘了grads ncl rip 這些軟體阿!!