===== マニュアル ===== * [[http://cola.gmu.edu/grads/|本家COLA]] * [[http://wind.geophys.tohoku.ac.jp/index.php?%B8%F8%B3%AB%BE%F0%CA%F3/GrADS|東北大]] ----- ===== 起動 ===== ==== Windowのサイズ,位置の調整 ==== 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).\\ 横長の場合,描画範囲は11x8.5.横長の場合8.5x11.\\ Ex) 横長(縦長)を指定して起動する場合 $ grads -l(-p) ----- ===== コントロールファイル ===== ==== OPTIONS ==== OPTIONS 365_DAY_CALENDAR !! うるう年を考慮しない OPTIONS YREV !! 緯度方向のデータを読む順番を逆にする。デフォルトは南→北。 OPTIONS BIG_ENDIAN !! エンディアンの指定.デフォルトはLITTLE_ENDIAN OPTIONS TEMPLATE !! 複数のファイルにデータがまたがる場合にはこれを指定 ==== EDEF ==== 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]] ==== VARS ==== 変数名、鉛直総数、ユニット(?)、説明文の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) xlintやylintの指定と異なり,時間軸に対しても有効。ただしstartとendを図と合致するようにしないと正しく描画されない。 ==== Contour ==== === ラベルの書式 === set clab //options// * on: * off: ラベルを付けない * forced: 全てのコンターにラベルを付ける * //format//: 書式を設定。指定方法はC言語ライク。 * masked: ラベル背景色を描かない。 set clopts //color >// set clskip //number// * number: ラベルをいくつおきのコンターに貼るかを指定 ==== bar ==== === barを塗りつぶす/塗りつぶさない === set baropts filled/outline 以前は"outlined"だったのだけど、いつの間にか変わっていた。 ==== Vector ==== ===矢印の大きさ=== 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 http://cola.gmu.edu/grads/gadoc/gradcomdsetarrlab.html ==== その他 ==== === smoothing === 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 === オプション === * -be/-le: big endian / little endian * -sq/-st: sequential / direct * -ap/-cl: 追記 / replace ---- ==== GIFアニメーション ===== タイムステップごとに図を番号を付けて保存後、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 ---- ===== GrADS2.1 ===== ==== 太さの定義 ==== これまで線の太さは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}