気象データ解析ツールであるGrADSについての情報をまとめています。

追加された行はこの色です。
削除された行はこの色です。

このwiki内では、グリッドファイル(GrADS 4byteバイナリ、特に断らなければdirect書き込み)を〜.bin、コントロールファイルを〜.ctl、変数名をvarと表記します。
このwiki内では、グリッドファイル(GrADS 4byteバイナリ、特に断らなければdirect書き込み)を〜.bin、コントロールファイルを〜.ctl、変数名をvarと表記します。

#contents



**sdfopen, open

***nc_open failure: Not a netCDF file

=|BOX|
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.
||=

***Open Error: Unknown keyword in description file

=|BOX|
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

=|BOX|
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.

Open Error: Missing ENDVARS statement.

症状:ファイルが開けない
原因:コントロールファイルの末尾、varsの列記の最後のendvarsを表記していない
   q ctlinfoではendvarsが表示されない(GrADS1)ので、コピペするときには注意
解決策:コントロールファイルを確認。末尾にendvarsを追加。

[[GrADS ctlファイルの作成]]

***Open Error: Missing or invalid dimension increment value

症状:ファイルが開けない
原因:コントロールファイルのdimensionに関する記述が間違っている
解決策:xdef, ydef, zdef, tdefを確認

=|BOX|
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

=|BOX|
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([[詳細>>http://seesaawiki.jp/ykamae_grads-note/d/GrADS%a4%ce%a5%a4%a5%f3%a5%b9%a5%c8%a1%bc%a5%eb]])が正しく設定されていない
解決策:font0.dat, lowres, udunits.datなどのdatファイルが置かれているディレクトリをGADDIRに設定
[[GrADSのインストール]]の環境変数の設定を参照

export GADDIR=/usr/local/grads-1.9b4/data など
.bashrcに書いておく

***nc_open failure: File too large / Values too large for defined data type

=|BOX|
nc_open failure:
File too large
hoge.nc does not exist or is not a netCDF file.
||=

=|BOX|
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

=|BOX|
NetCDF Error (nc_open): Unable to open file
||=


症状:ファイルが開けない
原因:ファイルサイズが大きすぎる。grads1では、約2GB以上のサイズのファイルが開けない。
NetCDF用のコントロールファイルを作成しても同様。
解決策:GrADS2でsdfopenする、Fortranで読む、等。
GrADS2は365 day calendarをサポートしていないので、このカレンダーのファイルの場合はコントロールファイルを作成する必要がある。


***Unknown command: sdfopen

症状:sdfopenができない
原因:GrADS実行ファイルのうち、sdfopenに対応していないものを使用している。
解決策:まずどの実行ファイルを使用しているか確認する。

which grads

で、現在「grads」と打ったときの実行ファイルがどこにあるか表示される。
バージョン1.9では、gradsc以外がsdfopenに対応している。

[[GrADS Software>>http://cola.gmu.edu/grads/downloads.html]]→What Exectuable Files are in a Release?



**display

***all undefined values (Entire Grid Undefined)

症状:

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

=|BOX|
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月の範囲の差を表示


=|BOX|
open 2000.ctl
open 1979-2000.ctl  # t=1に2000年1月が適用される
set t 1 12     # 2000年1月〜2000年12月の範囲
d var-var.2
||=

×
=|BOX|
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ヶ月等である場合:

=|BOX|
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

=|BOX|
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時の範囲でしか定義されていないことに注意。
例.

=|BOX|
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が定義されていない。

***Constant field. Value = -999

症状:値が一定であると表示される(真っ赤な図が表示される)
原因:変数が一定の値となっている
解決策:d var-var と入力したときなど、値が全ての範囲で一定値となることはあり得るので、
一概にエラーとは言えないが、
一定値でないものを描こうとしている場合、データが間違っている可能性がある。

--sdfwrite, fwriteで書き出したファイルの場合

書き出しに誤りがある、またはctlファイルの書式に誤りがある可能性がある。

***Contouring: nan to nan interval inf

症状:

Contouring: -0 to 7e+35 interval 1e+35

のように表示され、斑模様の図が表示される
原因:endianの指定に誤りがある
解決策:binaryをctlファイルで読もうとしている場合、そのPCのエンディアンと、
binaryのエンディアンが一致していないと、データが正しく読まれない。
エンディアンについて[[→>>http://digital.ni.com/public.nsf/allkb/008AB70CC5F0EB6B8625706C001AD943]]


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

症状:

=|BOX|
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スクリプトライブラリ]]を参照

***I/O Error reading script file: var

症状:GrADSスクリプトが実行されない
原因:GrADSスクリプトvar.gsと同じ名前のディレクトリvarが存在すると、var.gsが実行されない
解決策:GrADSスクリプト名と重複するディレクトリを作らない、拡張子.gsを明示する
例.

ls
hoge.ctl sh/ sh.gs


=|BOX|
grads
open hoge.ctl
(run) sh.gs
||=

×
=|BOX|
grads
open hoge.ctl
sh
||=

***Unable to locate ENDWHILE statement for the WHILE statement

症状:GrADSスクリプトのループがうまく回らない
原因:GrADSスクリプトのwhileループを終了するendwhileが存在しない
解決策:GrADSスクリプトにendwhileを記述する。

同様にif文を終了するendif文がなければ

=|BOX|
Unable to locate ENDIF statement for the IF statement at line ??
In file hoge.gs
||=

など

***Non-terminated constant

=|BOX|
Non-terminated constant
Error occurred on line 7
In file hoge.gs
||=

症状:
原因:GrADSスクリプトのバグ
解決策:GrADSスクリプトエラーが表示されている行を確認する。クォーテーションがあるか、変数名は正しいか、文法は正しいか



**起動

***grads:command not found

症状: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のインストール>>http://seesaawiki.jp/ykamae_grads-note/d/GrADS%a4%ce%a5%a4%a5%f3%a5%b9%a5%c8%a1%bc%a5%eb]])



**GrADSのインストール

***bash: ./grads: cannot execute binary file

症状:GrADSが起動しない
原因:GrADSのバージョンがPCと整合していない
解決策:そのPCにあったGrADSをインストールする。

[[GrADSのインストール]]

***Error in GXSTRT: Unable to connect to X server

症状: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が起動していても、
外部からリモートログインするとエラーとなる。

管理人/副管理人のみ編集できます