このwiki内では、グリッドファイル(GrADS 4byteバイナリ、特に断らなければdirect書き込み)を〜.bin、コントロールファイルを〜.ctl、変数名をvarと表記します。
-
- sdfopen, open
- nc_open failure: Not a netCDF file
- Open Error: Unknown keyword in description file
- SDF Error: 365 day calendars are no longer supported by sdfopen
- Open Error: Missing ENDVARS statement.
- Open Error: Missing or invalid dimension increment value
- udunits(3): Couldn't open units database "/usr/local/lib/grads/udunits.dat": No such file or directory
- nc_open failure: File too large / Values too large for defined data type
- NetCDF Error (nc_open): Unable to open file
- Unknown command: sdfopen
- display
- スクリプト
- 起動
- GrADSのインストール
- sdfopen, open
Scanning self-describing file: hoge.ctl nc_open failure: Not a netCDF file hoge.ctl does not exist or is not a netCDF file. Couldn't ingest SDF metadata. If this was an HDF-SDS file, try gradshdf.
Scanning description file: hoge.nc Open Error: Unknown keyword in description file --> The invalid description file record is: --> CDF The data file was not opened.
症状:ファイルが開けない
原因:ファイルを開くコマンド、openやsdfopenの使用方法が誤っている
解決策:NetCDFを開くときはsdfopen、ctlファイルを開くときはopenを用いる。
sdfopen hoge.nc
open hoge.ctl
SDF Error: 365 day calendars are no longer supported by sdfopen. To open this file with GrADS, use a descriptor file with a complete TDEF entry and OPTIONS 365_day_calendar. Documentation is at http://iges.org/grads/gadoc/SDFdescriptorfile.html
症状:GrADS2を使ってNetCDFファイルをsdfopenしようとすると、365 day calendarsが対応していないと文句を言われる
原因:GrADS2では、sdfopenで365 day calendarのファイルを開くことができない。
解決策:ncdump等で格子や時間軸の情報を確認し、netcdf用をctlファイルを作成してopenする。面倒であれば、GrADS1でsdfopenしてしまえばよい。
Open Error: Missing ENDVARS statement.
症状:ファイルが開けない
原因:コントロールファイルの末尾、varsの列記の最後のendvarsを表記していない
q ctlinfoではendvarsが表示されない(GrADS1)ので、コピペするときには注意
解決策:コントロールファイルを確認。末尾にendvarsを追加。
GrADS ctlファイルの作成
症状:ファイルが開けない
原因:コントロールファイルのdimensionに関する記述が間違っている
解決策:xdef, ydef, zdef, tdefを確認
Open Error: Missing or invalid dimension increment value --> The invalid description file record is: --> zdef 1 linear 0 0
上記の例の場合、たとえばGrADS 1でファイルをopenしたあと、q ctlinfoの表示結果をそのままctlファイルに用いると、
zdef 1 linear 0 0
のような表記になっているが、z軸方向に1しかない場合はlevelsを用いないといけない。
GrADS2ではq ctlinfoの結果が修正されている。
zdef 1 levels 0
に書き直すとopenできる。
GrADS ctlファイルの作成
udunits(3): Couldn't open units database "/usr/local/lib/grads/udunits.dat": No such file or directory
Scanning self-describing file: ... .nc udunits(3): Couldn't open units database "/usr/local/lib/grads/udunits.dat": No such file or directory UDUNITS package initialization failure.
症状:NetCDFファイルが開けない
原因:udunits.datへのパス、つまり環境変数GADDIR(詳細)が正しく設定されていない
解決策:font0.dat, lowres, udunits.datなどのdatファイルが置かれているディレクトリをGADDIRに設定
GrADSのインストールの環境変数の設定を参照
export GADDIR=/usr/local/grads-1.9b4/data など.bashrcに書いておく
nc_open failure: File too large hoge.nc does not exist or is not a netCDF file.
nc_open failure: Value too large for defined data type hoge.nc does not exist or is not a netCDF file.
NetCDF Error (nc_open): Unable to open file
症状:ファイルが開けない
原因:ファイルサイズが大きすぎる。grads1では、約2GB以上のサイズのファイルが開けない。
NetCDF用のコントロールファイルを作成しても同様。
解決策:GrADS2でsdfopenする、Fortranで読む、等。
GrADS2は365 day calendarをサポートしていないので、このカレンダーのファイルの場合はコントロールファイルを作成する必要がある。
症状:sdfopenができない
原因:GrADS実行ファイルのうち、sdfopenに対応していないものを使用している。
解決策:まずどの実行ファイルを使用しているか確認する。
which grads
で、現在「grads」と打ったときの実行ファイルがどこにあるか表示される。
バージョン1.9では、gradsc以外がsdfopenに対応している。
GrADS Software→What Exectuable Files are in a Release?
症状:
Cannot contour grid - all undefined values
とコマンドラインに表示され、GrADSの窓に
Entire Grid Undefined
と表示される。
原因1:描こうとしている変数が全てundefined(欠損値)扱いとなっている
解決策:ctlファイルのundef文と、元データの欠損値が一致しているか確認する。
maskoutコマンドを使用している場合、全ての範囲でmaskoutが適用されると
この症状になる。
原因2:options templateで複数のデータを対象にしているとき、
現在指定している(x, y, z, t, e)座標のデータが存在しない(現在の座標位置はq dimsで確認可能)
解決策:dset文、options文、chsub文、あるいは指定している座標が適切か確認する
Data Request Warning: Request beyond file limits Entire grid contents are set to missing data Dimension ranges are: X = 0 360 Y = 1 180 Z = 1 1 T = 13 12 Warning issued for variable = var Cannot contour grid - all undefined values
症状:画面にEntire Grid Undefinedと表示され、コマンドラインに上記メッセージが表示される。
原因1:指定している範囲がデータの範囲を超えている
解決策:上記メッセージの例では、時間方向に12個のデータしか存在しないので、その範囲に収める。
原因2:複数のデータを開いているとき、データの範囲(lon, lat, lev, timeなど)にミスマッチがある。
例えば、1971年のデータ
tdef 12 linear jan1971 1mo
と1981年のデータ
tdef 12 linear jan1981 1mo
が別々のctlファイルでopenされているとき、JJA平均値の差は
d ave(var.2, t=6, t=8)-ave(var, t=6, t=8)
では求めることはできない。
これは、t=1〜12はファイル1の時間軸をもとに、1971年1月〜12月が適用され、
ファイル2にはその時間のデータが存在しないためである。
そのため、tではなくtimeで指定する必要がある。
d ave(var.2, time=jun1981, time=aug1981)-ave(var, time=jun1971, time=aug1971)
- set tで指定したい場合
前に開いたファイルの範囲が後に開いたファイルの範囲に
収まっていないといけない。
例. 1979年1月〜2000年12月までの範囲の1979-2000.ctlと、
2000年1月〜2000年12月までの範囲の2000.ctlを開き、2000年1月〜12月の範囲の差を表示
○
open 2000.ctl open 1979-2000.ctl # t=1に2000年1月が適用される set t 1 12 # 2000年1月〜2000年12月の範囲 d var-var.2
×
open 1979-2000.ctl open 2000.ctl # 後に開いたファイルは2000年からしかデータがない set t 1 12 # t=1の情報が衝突し、 d var.2-var # 図が描けない
原因3:NetCDFファイルで、初期のtの設定が29日、30日、31日のいずれかになっていて、タイムステップが1ヶ月等である場合:
t=1:2000年12月31日 t=2:2001年1月31日 t=3:2001年3月3日 t=4:2001年3月31日 t=5:2001年5月1日 t=6:2001年5月31日 ・・・
のように、29日、30日、31日がない月を飛ばして読み込んでしまい、さらにデータの末尾の時間ステップでは、データが欠損扱いになることが多い。
これは、GrADSの時間ステップで1moと指定していると、次の時間ステップは月を一つ増やすのだが、その日が存在しない(2月31日など)場合、足りない日数分、次に進めてしまうことで起こるバグ。2月31日の場合は3月3日に、4月31日の場合は5月1日に置き換わってしまい、それぞれ2月の代わりに3月、4月の代わりに5月のデータを参照してしまう。
解決策:NetCDFファイルを読むctlファイル(tdefでは日を01や15など、安全な値に設定しておく)を作成して、openでファイルを読み込む。
Syntax Error: Invalid Operand 'var' not a variable or function name Error ocurred at column 1 DISPLAY error: Invalid expression Expression = var
症状:描こうとしている変数がdisplayされない
原因:変数名の指定が誤っている
解決策:'var' の部分に正しい変数名が表示されているか確認する。
正しい変数名:
- q file, q ctlinfo時に表示される変数名
- hoge=var のようにdefineした変数名
- 予約済みの変数lat, lon, lev
ケースは異なるが、特にdefineした変数は、define時の範囲でしか定義されていないことに注意。
例.
sdfopen hoge.nc set x 1 360 set y 1 180 a=var set t 1 12 d a
この場合、GrADSのデフォルトの設定、set z 1およびset t 1の範囲内でしかaが定義されていない。
症状:値が一定であると表示される(真っ赤な図が表示される)
原因:変数が一定の値となっている
解決策:d var-var と入力したときなど、値が全ての範囲で一定値となることはあり得るので、
一概にエラーとは言えないが、
一定値でないものを描こうとしている場合、データが間違っている可能性がある。
- sdfwrite, fwriteで書き出したファイルの場合
書き出しに誤りがある、またはctlファイルの書式に誤りがある可能性がある。
症状:
Contouring: -0 to 7e+35 interval 1e+35
のように表示され、斑模様の図が表示される
原因:endianの指定に誤りがある
解決策:binaryをctlファイルで読もうとしている場合、そのPCのエンディアンと、
binaryのエンディアンが一致していないと、データが正しく読まれない。
エンディアンについて→
ctlファイルに
options little_endian または big_endian
と表記、またはbinary作成時にエンディアンを指定する
GrADS fwriteの場合:
set gxout fwrite
set fwrite -le hoge.bin または -be hoge.bin
intel fortranの場合:
ifort -assume byterecl -convert little_endian hoge.f90
G95 fortran compilerの場合:
g95 -fendian=little hoge.f90
症状:
Open Error on Map Data Set: /usr/local/grads/data/lowres Error opening stroke character data set
などのメッセージが出て、正しい図が描画されない
原因:gradsが参照する地図・文字ファイルのディレクトリ指定に誤りがある
解決策:GADDIRを正しく指定する。
export GADDIR=/usr/local/grads-1.9b4/data
のように、
font0.dat ・・・ font5.dat hires lowres mres
のファイルがある場所をGADDIRで指定する。
→ GrADSのインストール
症状:GrADSスクリプトが実行されない
原因:GrADSスクリプトvar.gsと同じ名前のディレクトリvarが存在すると、var.gsが実行されない
解決策:GrADSスクリプト名と重複するディレクトリを作らない、拡張子.gsを明示する
例.
ls
hoge.ctl sh/ sh.gs
○
grads open hoge.ctl (run) sh.gs
×
grads open hoge.ctl sh
症状:GrADSスクリプトのループがうまく回らない
原因:GrADSスクリプトのwhileループを終了するendwhileが存在しない
解決策:GrADSスクリプトにendwhileを記述する。
同様にif文を終了するendif文がなければ
Unable to locate ENDIF statement for the IF statement at line ?? In file hoge.gs
など
Non-terminated constant Error occurred on line 7 In file hoge.gs
症状:
原因:GrADSスクリプトのバグ
解決策:GrADSスクリプトエラーが表示されている行を確認する。クォーテーションがあるか、変数名は正しいか、文法は正しいか
症状:GrADSが起動しない
原因:GrADSの実行ファイルにパスが通っていないor実行ファイルの指定を誤っている
解決策:GrADSを起動するコマンド(実行ファイル名)とパスを確認する。
実行ファイル
Cygwin:grads、grads.exe、gradsnc等
Linux GrADS v1.9以前:gradsnc
Linux GrADS v2以降:grads
パス
which grads
等で確認
例
/usr/local/grads-1.9b4/bin/gradsnc
を起動する方法は、
1. /usr/local/grads-1.9b4/bin/gradsnc
2. export PATH=${PATH}:${GRADSHOME}/bin
と.bashrcに書かれ、source .bashrcした状態で
gradsnc
3. 上記に加え、alias grads=gradsnc
と.bashrcに書かれ、source .bashrcした状態で
grads
4. 3. の状態ではshellからはgradsにパスが通っていないので
#!/bin/bash
gradsnc -lc hoge.gs
(参考:GrADSのインストール)
症状:GrADSが立ち上がらない
原因:X window systemが起動されていない状態で、GrADSを起動しようとするとエラーとなる。
回避策:バッチモードで起動する(黒画面を使用しない)
grads -b
解決策:X window systemを起動する。
windowsからputtyなどで外部のPCに接続し、作業をする場合は、Xmingなどを利用する。
cygwinやLinux PCなど、X window system起動下の環境から、外部のPCに接続し、作業をする場合は、
ssh -X account@ipaddress
のように、-Xオプションを忘れない。
また、1.9b4 の linuxRH7.1のバージョンは、バグのためX window systemが起動していても、
外部からリモートログインするとエラーとなる。
コメントをかく