gribやnetcdf形式のグリッドデータを簡単に処理できるcdoの使い方について。初心者レベルなので、覚えたことをかいていく。
gribやnetcdf形式のグリッドデータを簡単に処理できるcdoの使い方について。初心者レベルなので、覚えたことをかいていく。
なんと!condaでインストールできる。
$ conda install cdo
コマンド1つであら簡単。(参考:http://kodama.fubuki.info/wiki/wiki.cgi/CDO/tips?lang=jp)
$ cdo mergetime sfc.monthlyave.????01.nc out.nc
ただ、上記のコマンドだとエラー(Error (cdf_put_vara_double): NetCDF: Numeric conversion not representable)がでるわ、はじめの2つしかマージされてないわ、で上手くできない。いくつか調べたところ、下のように"-b F64"というオプションをつけるとよいようだ。勝手に桁が足りなくなったのかな〜っと考えている。
$ cdo -b F64 mergetime ../org/monthly/sfc.monthlyave.198?${MO}.nc tmp.nc
参考:https://code.mpimet.mpg.de/boards/1/topics/1433
$ cdo merge tppn.nc evap.nc t2m.nc out.nc
3変数のデータが含まれたout.ncが作成される。
鉛直層が異なるデータをmergeする際には、少し挙動が異なる模様。今度調べておく。
ファイルfDatの空間解像度を、fBaseの空間解像度に合わせる。tmp.ncが解像度変換したファイル。
# Bilinear interpolation
cdo remapbil,${fBase} ${fDat} tmp.nc
ただし、上記のコマンドだと時間情報がおかしくなるので(西暦1年からスタートなど)、下記のコマンドで時間情報を戻す。
# Adjust time axis
cdo replace ${fBase} tmp.nc ${fOut}cdo timmean tmp.nc out.nc
gradsのctlファイルから簡単にnetcdfへと変換できる。
cdo -f nc import_binary ${fIn} ${fOut}
ただし、書き方が悪いのか、Z軸の情報がおかしくなる(1000, 900, 800,としたいのに、z=1が10hPaになるなど)。
この状態でも一応gradsで開いたりできるが、vintの計算など、うまくできなくなる。
下記のように、Z軸に関するテキストを用意して、Z軸の情報を付加するようにするとOK。
$ cat zaxis.txt
zaxistype = pressure
size = 26
levels = 1000 975 950 925 900 850 800 750 700 650 600 550 500 450 400 350 300 250 200 150 100 70 50 30 20 10
units = hPa
positive = down
$ cdo setzaxis,zaxis.txt ${fOut} ${fOutMod}