W,H,X,Yをそれぞれwindowの幅,高さ,画面左端からの距離,画面上端からの距離とする.単位はピクセル.
$ grads -g WxH+X+Y
Xmingを使用している場合はXlaunchの設定でこれを調整できる
Additional parameters for Xming: -screen 0 X Y
GrADS起動時に問われる“Landscape mode?”に“yes(またはenter key)”で横長(landscape).“no”を返すと縦長(portrait).
横長の場合,描画範囲は11×8.5.横長の場合8.5×11.
Ex) 横長(縦長)を指定して起動する場合
$ grads -l(-p)
OPTIONS 365_DAY_CALENDAR !! うるう年を考慮しない OPTIONS YREV !! 緯度方向のデータを読む順番を逆にする。デフォルトは南→北。 OPTIONS BIG_ENDIAN !! エンディアンの指定.デフォルトはLITTLE_ENDIAN OPTIONS TEMPLATE !! 複数のファイルにデータがまたがる場合にはこれを指定
GrADS2.0以降に追加された機能でアンサンブルメンバーを扱うことが可能。 アンサンブルメンバーはX, Y, Z, ΔTについては同一である必要。一方でTの開始時刻はメンバー間で異なっていてもOK。 以下にメンバー間でTの開始時刻が異なる例を示す。
DSET ^file.%e.grd OPTIONS TEMPLATE EDEF //ensemble_size// //ensemble_name_1// //t_length// //t_start// * //ensemble_name_*//がDSETの%eに代入されたファイルが読み込まれる //ensemble_name_2// //t_length// //t_start// ... //ensemble_name_N// //t_length// //t_start//
メンバー間で開始時刻およびタイムステップが同一の場合はt_lengthおよびt_startを記述する必要はない。
参考①http://cola.gmu.edu/grads/gadoc/descriptorfile.html#EDEF
参考②http://cola.gmu.edu/grads/gadoc/ensembles.html
変数名、鉛直総数、ユニット(?)、説明文の4つで構成される。データが4バイト浮動小数の場合、ユニットは気にしなくてよい。“99”と記入。
VARS ${varnum} ${variable_name_1} ${levs} ${unit} ${description} ${variable_name_2} ... ... ENDVARS
ENDVARS以降にはいかなる記述も許されない。空行もアウト。
ひとつのコントロールファイルで,任意の名前のバイナリファイルをまとめて開くことができる.
DSET ^%ch OPTIONS template CHSUB 1 12 example_hoge.bin !! 最初の12ステップはこちらから CHSUB 13 48 example_fuga.bin !! 次の36ステップはこちらのファイルから
プレーンバイナリだけでなく,NetCDFに も適用可.
X–>Y–>Z–>変数–>T–>Ens。 デフォルトではデータは南から北向きであることを想定している。鉛直総数(Z)は変数ごとに異なっていてもOK。
ga-> set mpdset lowres/mres/hires/newmap/worldmap
右にいくほど高解像度.
軸について任意の間隔を指定できる.
ga-> set xaxis(yaxis) <start> <end> <increment>
xlintやylintの指定と異なり,時間軸に対しても有効。ただしstartとendを図と合致するようにしないと正しく描画されない。
set clab //options// * on: * off: ラベルを付けない * forced: 全てのコンターにラベルを付ける * //format//: 書式を設定。指定方法はC言語ライク。 * masked: ラベル背景色を描かない。
set clopts //color <thickness <size>>// set clskip //number// * number: ラベルをいくつおきのコンターに貼るかを指定
set baropts filled/outline
以前は“outlined”だったのだけど、いつの間にか変わっていた。
set arrowhead //size
sizeのデフォルト値は0.05。負の値を設定すると、矢印の大きさが描く変数の値に比例するようになる。
凡例の位置を変える機能があるわけではなく、以下では自前で凡例を書いている。
'set gxout vector' len = 0.3 ; scale = 2 xrit = 8.0 ; ybot = 0.5 'set arrscl 'len' 'scale 'set arrlab off' 'd u;v' rc = arrow(xrit-0.25,ybot+0.2,len,scale) function arrow(x,y,len,scale) 'set line 1 1 4' 'draw line 'x-len/2.' 'y' 'x+len/2.' 'y 'draw line 'x+len/2.-0.05' 'y+0.025' 'x+len/2.' 'y 'draw line 'x+len/2.-0.05' 'y-0.025' 'x+len/2.' 'y 'set string 1 c' 'set strsiz 0.1' 'draw string 'x' 'y-0.1' 'scale return
smth9(var)
set loopdim x/y/z/e/t
set loopincr $(increment)
ターミナルに書き出す場合。printモードで${output_file}に出力する。
ga-> set gxout print ga-> set prnopts ${書式} ${1行あたりに出力するデータ数} ${データ間の空白の数} ga-> d ${var_name}
ファイルに書き込む場合。この作業は、スクリプトを通してしか行うことができない。
'd var' tmp=subwrd(result,4) rc=write('${output_file},tmp) rc=close('${output_file}')
*エラー値を数字から“Undef”に置き換えて出力
ga-> set prnopts ${書式} ${1行あたりに出力するデータ数} ${データ間の空白の数} u
* ファイルに追記する
rc=write('${output_file}',result,append)
fwriteモードで描画すると${output_file}に出力される。 x,y,z,tを明示的に指定しないとサイズが不正になる場合があるので注意。
ga-> set gxout fwrite ga-> set fwrite ${option} ${output_file} ga-> d ${var_name} ga-> disable fwrite
タイムステップごとに図を番号を付けて保存後、ImageMagickでアニメーションに変換する。
while (t<='tend') 'set t 't 'd 'var if (t>=10) 'printim tmp.'t'.gif white' else 'printim tmp.0't'.gif white' endif t=t+1 endwhile !convert -loop 0 -delay 7 tmp.??.gif animation.gif
loopは繰り返し再生の回数を指定。0は無限ループ。delayでアニメーションの速さを調整。
function main(args) #スクリプトの先頭で宣言 ... x=subwrd(args,1) #1つ目の引数を"x"に格納 y=subwrd(args,2) #2つ目の引数を"y"に格納 ...
シェルのコマンドラインから“grads -blc hogehoge.gs”のようにスクリプトを実行する場合は引数を与えられない?不便。 –>できる。その場合は以下のように、GrADSスクリプトと引数をまとめてクオーテーションマークで囲って実行する。
$ grads -blc "hogehoge.gs args"
rec=read('${input_file}') tmp=sublin(rec,2) #recの2行目をtmpに読み込む var1=subwrd(tmp,1) #tmpの1列目をvar1に読み込む var2=subwrd(tmp,2) #tmpの2列目をvar2に読み込む ... rec=close('${input_file}')
readコマンドの戻り値は2行あって、1行目がファイル状態(0=正常、1>=エラー)で、2行目がデータ。一度のreadで1行分の情報しか読み取らないので、複数の行を読みこ時は、これを複数回実行する必要あり。 読み込めファイルは80行程度という情報もあるが、今のところはそれより大きいファイルも問題なく扱えている。
スクリプトにチルダ(“~“)を入れると、そこで一時停止する。エンターを押すと先に進む。
'~' pull hoge
—-
これまで線の太さは1-12に限定されていたが、任意の太さを指定できるようになった。
set lwid ${thickness} ${width} * thickness: 太さの割り当て番号。13-256。 * width: 線の太さ。0以上。
set rgb color# R G B T * color#:色番号(16-2047)。 * T:透明度(0-255)。0が完全に透明、255が完全に不透明。
printim, printは使えなくなり、代わりにgxprintというコマンドが用意されている。
コマンド履歴の表示
ga-> his
コマンド履歴のテキスト出力
ga-> his ${output_file}