說到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版本,不過還是我還不知道地圖要怎樣出來,跑出來大概是這樣:

ncview 

這是T2的2D的圖形,完完全全只是給大家參考用的。

2. ncBrowse

雖然說wrf是netcdf格式,但是他就是不吃wrfout,我有嘗試過其他的netcdf他都願意讀取,只有WRF格式他寫說:Not a NETCDF file,所以如果是大尺度的人,可以用這成是來畫時序圖等等類似excel或者是sigmaplot的圖形。

ncBrowse 

因為這個檔案是自己寫入的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可以看到這樣的畫面

Screenshot 

視窗介面開始點選資料夾(不過要記得把wrfout改名程wrfout.nc),這樣才讀的到阿。

網路上簡單的繪圖大概就是這些吧 ~~ 其實還滿方便的,不過還是不能忘了grads ncl rip 這些軟體阿!!

 

 

 

 

創作者介紹

廖董不懂的部落格

廖董不懂 發表在 痞客邦 留言(0) 人氣()