![]() |
公開情報/GrADS/GrADSのTipshttps://wind.gp.tohoku.ac.jp:443/html/index.php?%B8%F8%B3%AB%BE%F0%CA%F3/GrADS/GrADS%A4%CETips |
---|
GrADSのTips
凡例
起動と終了GrADSを起動する[mydir@hosts] grads Grid Analysis and Display System (GrADS) Version 1.8SL11 Copyright (c) 1988-2001 by Brian Doty Center for Ocean-Land-Atmosphere Studies Institute for Global Environment and Society All Rights Reserved > Config: v1.8SL11 32-bit little-endian readline printim Issue 'q config' command for more information. Landscape mode? (no for portrait): GX Package Initialization: Size = 11 8.5 ga-> "Landscape mode?"の部分で何も入力せずにEnterキーを押すと、landscape(横長)になります。 ここでnoと入力してEnterキーを押すと、portrait(縦長)になります。landscape、portraitを指定して起動する場合は、 [mydir@hosts] grads -l // landscape [mydir@hosts] grads -p // portrait でもOKです。 なお、Version 1.9 以下のGrADSでは、gradsの代わりにgradscと入力する必要があります。これが面倒でしたら、予めリンクやエイリアスを設定するとよいでしょう。 非X環境で起動する[mydir@hosts] grads -b 引数-bを付けて起動することで、グラフィックス表示以外は通常通り使用することができます。windowsからTeraTermで接続してGrADSを使う場合に役立ちます。描画処理がない分、処理が高速になることも期待できます。 起動直後に実行するコマンドを指定するgrads -c コマンド
GrADSを起動したまま親シェルのコマンドを実行する!コマンド
GrADSを終了するquit ファイル操作コントロールファイルをオープンするopen ファイル名
コントロールファイルをオープンすると番号が振られます(上の例では1)。複数のファイルを同時に開いた場合は2,3,...と付番され、複数ファイルの区別に使われます。蛇足ですが、末尾の.ctlは省略できます(ただし、testというファイルが別に存在すればエラーになる)。
コントロールファイルをクローズするclose ファイル番号 ファイル番号はオープン時に付番されます。
複数ファイルを開いている場合、ファイル番号の一番大きなファイルしか閉じることができません。
netcdf(*.nc)をオープンするsdfopen ファイル名
蛇足ですが、netcdfのファイルの情報を見たい場合、Linuxのコマンドラインで [mydir@hosts] ncdump -c ファイル名 とすると見られます。 epsとして保存するenable print ファイル名(.gmf) print disable print !gxeps -c -i ファイル名(.gmf) -o ファイル名(.eps) 1〜3行目ででgmfファイル(GrADS Metacode Format)を作り、4行目でepsに変換しています。
netCDFファイルを開くときの注意64-bit機のGrADSの場合、「sdfopen」で開くと、まれに「289.615」という値を持つ箇所が、欠損値または「-32767.0」として認識される。 状態表示(querry)ファイルの情報を表示するq file ファイル番号 データファイル名や次元、変数などの情報が表示されます。
コントロールファイルの中身を表示するq ctlinfo ファイル番号 「q file」では整形されて表示されますが、「q ctlinfo」は整形されずにそのまま全部表示されるようです。 現在の次元を表示するq dims
現在のグラフィック環境の情報を表示するq gxinfo 直前に描いた図の種類やページのサイズなどを取得できます。
シェードの色を取得するq shades
座標の相互変換を行うq xy2w v1 v2 // (X,Y)系 → world系 q xy2gr v1 v2 // (X,Y)系 → (gX, gY, gZ, gT)系 q w2xy v1 v2 // world系 → (X,Y)系 q w2gr v1 v2 // world系 → (gX, gY, gZ, gT)系 q gr2w v1 v2 // (gX, gY, gZ, gT)系 → world系 q gr2xy v1 v2 // (gX, gY, gZ, gT)系 → (X,Y)系
現在定義されている変数名を得るq define 現在の未定義値を得る (ver. 2.0.a6以降)q undef 描画一般図を描画するdisplay 変数名 又は d 変数名 dはdisplayの省略形です。描画のされ方(2D,3D,アニメーション etc)は、次元やgxoutの設定に依存します。
表示されている図を消去するclear 又は c cはclearの省略形です。 clearを行うと、パラメータの多く(例えば色)も同時に初期化されます。これを回避するには、以下のようにnorsetオプションを使います。 c norset ファイル番号を指定して描画するd 変数名.ファイル番号 open時に割り振られたファイル番号を使うと、複数のファイルの変数を同時に扱うことができます。
デフォルトのファイル番号を変更するset dfile ファイル番号 ファイル番号を指定せずにdrawした場合のデフォルトを指定します。
各次元をステップ数で設定するset x 開始ステップ [終了ステップ] // X(経度)次元 set y 開始ステップ [終了ステップ] // Y(緯度)次元 set z 開始ステップ [終了ステップ] // Z(高度)次元 set t 開始ステップ [終了ステップ] // T(時間)次元 set e 開始ステップ [終了ステップ] // E(アンサンブル)次元 終了ステップは省略可能です。省略すると固定(fixed)次元、省略せず「開始≠終了」の場合は変動(varying)次元となります。
各次元を座標値(world coordinate)で設定するset lon 開始座標値 [終了座標値] // 経度(X)次元 set lat 開始座標値 [終了座標値] // 緯度(Y)次元 set lev 開始座標値 [終了座標値] // 高度(Z)次元 set time 開始座標値 [終了座標値] // 時間(T)次元 set ens 開始座標値 [終了座標値] // アンサンブル(ENS)次元 使い方はほとんど「set x 〜」等と同様です。但し、座標値はコントロールファイルの書式に従います。
様々な次元でアニメーションを見るset loopdim x/y/z/t
次元が低い場合でも強制的にアニメーションを見る / 解除するset looping on/off 折れ線グラフのアニメーションを見たい場合等に有効です。 任意の断面を切り出すGradsの本家にスクリプトが載っています。http://www.iges.org/grads/gadoc/usingstationdata.html#xsection アニメーションをゆっくり見るftp://grads.iges.org/grads/scripts/xanim.gs まず、時間の指定。 set t 1 10 あとは、3通りほど書き方がある。 xanim -pause -grfill var # マウスクリックでコマ送り(かつgrfillで表示) xainm -sec 1 var # 1コマ1秒ずつ表示 xanim -skip 4 -repeat 5 var # 4コマ目ごと、5回繰り返し 早すぎて見えないときに便利。 タイムステップを指定して描画するd 変数名(t=タイムステップ) 「set t」を使わずにタイムステップを指定して描画することができます。
GrADSのロゴ(左下)と日付(右下)を表示する/しないset grads on/off 日付(右下)を表示する/しないset timelab on/off 描画の度に毎回実行するスクリプトを指定する/指定を解除する。set imprun スクリプト名/off 背景色を変更するset background 色番号
Gradsウインドウに他のウインドウを重ねても消えないようにする
描画位置を設定するset parea xmin xmax ymin ymax set vpage xmin xmax ymin ymax pareaは図の描画位置を設定します。ラベルやタイトルなどは含まれません。縦横比が決まっている場合(例:水平図)はほとんどの場合、設定した領域全体に描画が行われないので注意してください。 vpageは全体の描画位置を設定します。pareaと違いラベルやタイトルも含みます。 本家のマニュアルには、複数の図を同時に出力する場合、pareaよりもvpageの方が適切であると記述されています(一応どちらでもうまくいくと思いますが)。 領域全体が未定義値の場合、「Entire Grid Undefined」と表示する / しないset datawarn on/off 図の外側に枠を表示する / しない / 丸型にするset frame on/off/circle circleは北極中心図などのときに有効です。 地図と投影法以下の描画例はNCEP/NCAR再解析 を使用しています。 背景に地図を描く/描かないset mpdraw on/off 地図のみを表示するdraw map 地図の色・スタイル・太さを設定する/自動設定するset map 色番号 線種番号 太さ set map auto 地図の解像度を変えるset mpdset lowres/mres/hires 地図として政治境界を描く/描かないset poli on/off 地図の解像度がmres/hiresの場合のみ有効です。デフォルトはon。 地図の様々な種類の線を個別に設定するset mpt 種類番号 色番号 線種番号 太さ // 個別に指定 set mpt 種類番号 -1 // デフォルトの色・線種・太さ set mpt 種類番号 off // 表示しない 種類番号は海岸線や国境、州境などを表す番号です(何が何に対応するかはmapファイル依存)。種類番号に*を指定すると「全て」の意味になります。
メルカトル図法で描くset mproj latlon デフォルトの図法です。
画面全体に直交座標で描く(縦横比を無視する)set mproj scaled set mproj off scaledは地図あり、offは地図なし(緯度経度のラベルもなし)です。
ロビンソン図法で描くset mproj robinson lat, lon はそれぞれ[-90:90], [-180:180]のみ対応しています。
モルワイデ図法で描くset mproj mollweide
正投影図法で描くset mproj orthogr 「set lat -90 90」およびlonの範囲を180度にする必要があります。
北極(南極)中心の図を描く
緯度(or 経度)鉛直断面で緯度経度を表すN, S, E, Wを消すset mproj off 座標軸とラベル・補助線鉛直軸を対数軸にする/解除するset zlog on/off 座標軸のラベル・補助線を自由な位置に設定するset xlevs レベル1 レベル2 ... set ylevs レベル1 レベル2 ...
ラベル・補助線の間隔を設定するset xlint 間隔 set ylint 間隔 等間隔にラベル・補助線をつけることができます。 ラベルとして任意の文字列を設定するset xlabs ラベル1 | ラベル2 | ... set ylabs ラベル1 | ラベル2 | ... ラベル・補助線は等間隔に設定されます。
縦軸と横軸を入れ換える/元に戻すset xyrev on/off 座標軸の向きを逆にするset xflip on/off set yflip on/off ふつうは右 or 上に行くほど座標の値が大きくなりますが、これをonにすることで右 or 上に行くほど座標の値を小さくすることができます。たとえばホフメラー図を描く場合、時間経過を「上→下」「下→上」どっちで表すか、これで指定できます。 ラベル・補助線を表示する/しないset xlab on/off set ylab on/off
ラベルの書式指定するset xlab format set ylab format formatはC言語のprintfとほぼ同じ形式です(以下の例を参照)。
ラベルのフォントを設定するset xlopts 色番号 [太さ [大きさ]] set ylopts 色番号 [太さ [大きさ]] ラベルに用いるフォントの色、太さ、大きさを設定します。デフォルト値は色番号=1、太さ=4、大きさ=0.12です。xloptsはX軸(横軸)、yloptsはY軸(縦軸)のラベルを設定します。
x軸のラベルを描く場所を指定するset xlpos 位置 側 「位置」にはx軸からのずれ、「側」にはt(上側)、b(下側)のどちらかを指定します。
y軸のラベルを描く場所を指定するset ylpos 位置 側 「位置」にはy軸からのずれ、「側」にはr(右側)、l(左側)のどちらかを指定します。
補助線のみ表示し、ラベルを表示しない経験則ですが、 ga-> set xlopts 1 0 0 // x軸 ga-> set ylopts 1 0 0 // y軸 で、補助線のみを表示することができます。 線種・色を指定して補助線を表示する/補助線を表示しないset grid on 線種 色 // 水平、鉛直 set grid horizontal 線種 色 // 水平のみ set grid vertical 線種 色 // 鉛直のみ set grid off // 補助線を表示しない 特定の座標軸(緯線・経線)の書き方
時間軸のラベルに年/月日を入れないset tlsupp year set tlsupp month yearを指定すると年、monthを指定すると年と月日の表示が消えます。yearは気候値を描く時に便利です。この設定は"c"を行なうと解除されます。 等値線(contour)等値線を引くset gxout contour d 変数
等値線を引く値を指定するset clevs レベル1 レベル2 ...
等値線の最大値、最小値、間隔を指定するset cmax 最大値 set cmin 最小値 set cint 間隔
等値線を描かない範囲を指定するset black 最小値 最大値
等値線の色(一色)を設定するset ccolor 色番号
等値線の色(複数)を設定するset ccols 色番号1 色番号2 ... 普通はset clevsで等値線の値を設定してから使います。
等値線の太さを変えるset cthick 太さ 太さは1〜20まで設定可能です。
等値線の線種を設定するset cstyle 線種番号 等値線にラベルをつける/つけない/強制的につけるset clab on/off/forced onとforcedの違いは、onは全ての等値線にラベルがつくとは限らないのに対して、forcedは全ての等値線に強制的にラベルを付けます。 等値線のラベルのフォントを設定するset clopts 色番号 [太さ [大きさ]] 等値線のラベルに用いるフォントの色、太さ、大きさを設定します。デフォルト値は色番号=1、太さ=1、大きさ=0.09です。
&aname: ID too long; 場所によって等値線の間隔を変える場所によって値が急激に変化する場合に有効です。たとえば、ある経度における物理量Aの鉛直断面を書く場合、 ga-> set lon 120 //東経120°で断面を切る ga-> set lat -90 90 ga-> set t 1 ga-> set lev 1000 100 ga-> A1=A //1000〜100hPaのデータを一時的に格納 ga-> set lev 100 10 ga-> A2=A // 100〜 10hPaのデータを一時的に格納 ga-> set lev 1000 10 ga-> set cmin 1 //1000〜100hPaの等値線の設定 ga-> set cint 1 ga-> set cmax 10 ga-> d A1 ga-> set cmin 0.1 // 100〜 10hPaの等値線の設定 ga-> set cint 0.1 ga-> set cmax 1 ga-> d A2 上の例では、1000hPa〜100hPaと100hPa〜10hPaについて、等値線を描き分けています。 maskoutを用いた方法も示しておきます。こちらの方がスマートかもしれません。 ga-> set cmin 1 ga-> set cint 1 ga-> set cmax 10 ga-> d maskout(A, -(lev-1000)*(lev-100)) ga-> set cmin 0.1 ga-> set cint 0.1 ga-> set cmax 1 ga-> d maskout(A, -(lev-100)*(lev-10))
ベクトル(vector)ベクトルを表示するset gxout vector d 変数1;変数2 変数1が横軸方向、変数2が縦軸方向の成分になります。
ベクトルの色を変えるset ccolor 色番号
ベクトルの太さを変えるset cthick 太さ 太さは1〜20まで設定可能です。
ベクトルの長さスケールを変えるset arrscl 基準長 値
ベクトルの表示間隔を変えるd skip(変数1,Xステップ,Yステップ);変数2
ベクトルの長さスケール(凡例)を表示する/しないset arrlab on/off 好きな位置にスケールを表示できればいいのですが・・・。 バグ:ベクトルの向きがずれるベクトルを描く前に不正な処理(エラーに限らない)を行うと、ベクトルの向きがずれることがあります。これはreinitしても解消せず、GrADSの再起動が必要です。(気象研究所の方からの情報) 抜本的な対処法はGrADSのインストールを参照。 折線グラフ (line)折線グラフを引くset gxout line d 変数 次元が1次元の場合のデフォルトの図法です。 グラフの色を指定するset ccolor 色番号 色番号はデフォルトの色一覧を参照してください。 グラフの太さを変えるset cthick 太さ 太さは1〜20まで設定可能です。
マークの大きさを設定するset digsiz サイズ 本家のマニュアルではサイズを0.10〜0.15にするのがおすすめだそうです。 グラフのマーク(プロット点)の種類を指定するset cmark マーク番号 グラフの線種を指定するset cstyle 線種番号 y軸の範囲を指定するset vrange 最小値 最大値
緯度軸をcosでスケーリングする/しないset coslat on/off 高緯度に行くほど単位緯度あたりの軸の長さが短くなります。全球平均値の緯度毎の寄与を見る際に有効かも。 未定義値を線で結ぶ / 元に戻すset missconn on/off 折れ線の塗りつぶし(linefill)あらかじめ次元を1次元にしておく必要があります。 2本の折れ線の間を塗りつぶすset gxout linefill d 変数1;変数2
塗りつぶす色を指定するset lfcols 色1 色2 「一番目の折れ線 > 二番目の折れ線」 のとき色1で、「一番目の折れ線 < 二番目の折れ線」 のとき色2で塗りつぶされます。 バー(bar)あらかじめ次元を1次元にしておく必要があります。 バーを描くset gxout bar d 変数 バーを塗りつぶす/塗りつぶさないset baropts filled/outlined バー同士の間隔を設定するset bargap 間隔[%] デフォルトの間隔は0です。間隔を100にするとバーではなく線で描かれます。 バーを描く基準値を設定するset barbase 基準値 set barbase bottom/top どの値を基準にしてバーを描くか設定します。値ではなくbottom(top)を指定すると、最小値よりも小さい値(最大値よりも大きい値)が基準になります。つまり、バーは常に上(下)に向かって伸びることになります。
散布図(scatter)散布図を描くset gxout scatter d 変数1;変数2
横軸、縦軸の範囲を設定するset vrange 最小値 最大値 set vrange2 最小値 最大値 vrangeは横軸、vrange2は縦軸の値の範囲を設定します。
マークの大きさを設定するset digsiz サイズ 本家のマニュアルではサイズを0.10〜0.15にするのがおすすめだそうです。 マークの種類を設定するset cmark マーク番号 文字大きさと幅を指定して文字列を描画するset strsiz 幅 [高さ] 以下に、座標(3,3)に幅0.1、高さ0.15の大きさの文字で「hello」と描画する例を示します。 ga-> set strsiz 0.1 0.15 ga-> draw string 3 3 hello 色、座標の基準、太さ、回転角を指定して文字列を描画するset string 色番号 [座標の基準 [太さ [回転角]]] 座標の基準とは、drawの際に指定する座標が、文字列のどの位置を基準にするかを表します。以下に指定のための文字列を示します。(GrADs本家より引用) tl tc tr tl - top left +-------------+--------------+ tc - center top | | tr - right top l + + c + r etc. | | +-------------+--------------+ bl bc br たとえば"c"の場合、drawで指定した座標を中心に文字列が配置されます。回転角(度)を指定した場合は、座標の基準を中心に時計回りに回転します。
タイトルを書くdraw title This is Title. すると「This is Title.」が結果画像の上に記入される。(事前に「d var」など、何か描いておく必要がある。) set strsiz 0.2 0.25 set string 1 c 6 draw string 5.5 8.05 This is Title. でも、似たように書くことが出来る。(事前に「d var」など、何か描いておく必要はない。) 文字中に「\」を使うことで、改行することもできる。 draw title This is\Title. とすれば、以下のように出る。 This is Title. X軸、Y軸のタイトル(ラベル)を書くdraw xlab X_LABEL draw xlab Y_LABEL するとX軸には「X_LABEL」、Y軸には「Y_LABEL」と記入される。 上付き文字を表示する`a文字列 なお、上付き文字を解除したい場合は`nを使います。
下付き文字を表示する`b文字列 なお、下付き文字を解除したい場合は`nを使います。
様々な記号(e.g., ギリシャ文字)を表示する`n文字列 nはフォント番号を表し、0から9まで指定可能です。デフォルトでは0〜4のフォント番号が使えるはずです。`nの後の文字列には、表示したい記号に対応する文字を並べます。これは例えば ga-> font 3 等で確認できます(左が入力する文字、右が実際に表示される文字)なお、デフォルトに戻る場合は`0を使います。
図形線を描くdraw line x1 y1 x2 y2 (x1,y1)から(x2,y2)へ直線を引きます。
線の色、線種、太さを設定するset line 色番号 [線種番号 [太さ]] 四角形を描くdraw rec xmin ymin xmax ymax
四角形(塗りつぶし)を描くdraw recf xmin ymin xmax ymax
多角形(塗りつぶし)を描くdraw polyf x1 y1 x2 y2 x3 y3 ... xn yn
多角形を使ったサンプル図(作成:大気海洋変動観測センター T.T.さんより) マークを描くdraw mark マーク番号 x座標 y座標 マークの大きさ マークの色を変える場合は set line 色番号 天気記号を描くdraw wxsym 記号番号 x座標 y座標 大きさ [色 [太さ]] 記号番号は、 ga-> wxsym と入力すると表示されます。 コントロールファイルの文法データファイル名を指定するバイナリデータのファイル名data-filenameを指定する場合、 DSET data-filename ここでdata-filenameは、以下のような記述方法があります。 DSET ^test.dr //コントロールファイルから見た相対パス DSET /home/hoge/test.dr //絶対パス うるう年を考慮しないコントロールファイル内で、 OPTIONS 365_DAY_CALENDAR と記述します。こうすると、1980年などの閏年でも一年が365日として扱われます。 複数ファイルを1つのコントロールファイルで読み込む長い期間のデータを扱う場合、一つのファイルにまとめるとファイルサイズが大きくなることがあります。このようなとき、ファイルを分割すると扱いが楽になります。例えばデータを以下のように、月毎に分けることを考えます。 u199009.dr u199010.dr u199011.dr u199012.dr u199101.dr u199102.dr u199103.dr このとき、コントロールファイルをひとつにまとめることができます。 DSET u%y4%m2.dr OPTIONS TEMPLATE // これが必要 .....(省略)..... TDEF 212 LINEAR 1SEP1990 1DY .....(省略)..... %y4には年が4桁で、%m2には月が2桁で置き換えられます。この他にも以下のような表記があります (よく分からないものには?が付いています…)。
また、Version2.0aより、アンサンブルメンバーに関してもテンプレートで読み込めることが可能となりました。
なお、 /mnt/sky/data/u1990_1991.dr /mnt/air/data/u1992_1993.dr のように、任意の名前のファイルを連続して読み込むことも可能です。以下のように、タイムステップの始点・終点とファイル名を指定します。 DSET /mnt/%ch.dr OPTIONS TEMPLATE CHSUB 1 731 sky/data/u1990_1991 // はじめの731日分はこっち CHSUB 732 1461 air/data/u1992_1993 // 次の730日分はこっち .....(省略)..... TDEF 1461 LINEAR 1JAN1990 1DY .....(省略)..... エンディアンを指定して読み込むOPTIONS little_endian //リトルエンディアンとして読み込む OPTIONS big_endian //ビッグエンディアンとして読み込む 他にもcray_32bit_ieeeというのがあるそうですが、誰か使っている人いますか?。 y方向またはz方向が逆順のバイナリファイルを使って描きたい場合の設定コントロールファイルの「OPTIONS」に「yrev」または「zrev」を加える。 X次元の設定二通りの設定方法があります。 XDEF 格子数 LINEAR 開始座標 増分 XDEF 格子数 LEVELS 座標1 座標2 ... LINEARは等間隔格子、LEVELSは不等間隔格子の指定に適しています。基本的に単位は「度」ですが、kmなど他の単位で記述することも可能です。その場合、描画の前に ga-> set mproj off と指定するとよいでしょう。ただし地図を描きたい場合は、自前で地図データを用意して重ね描きする必要があります。 Y次元の設定XDEFと基本的に同じです。 YDEF 格子数 LINEAR 開始座標 増分 YDEF 格子数 LEVELS 座標1 座標2 ... X次元・Y次元・Z次元の設定についての注意点異なるコントロールファイルのデータを比較したい場合(差・和を取りたいなど)、平面の場合ならX次元・Y次元の設定を、鉛直の場合ならX次元・Z次元、または、Y次元・Z次元の設定を、同じにしておく必要があるので注意!! T次元の設定TDEF タイムステップ数 LINEAR 開始時刻 時間増分 X次元などと違い、T次元は常にLINEAR(等間隔タイムステップ)です。開始時刻は hh:mmZddmmmyyyy もしくは簡単に、 ddmmmyyyy 等と指定します。ただし
時間増分は、'1yr', '2mn' などのように、「2桁以内の整数 + 単位」と表現します。単位は以下が使えます。
4バイト浮動小数以外のバイナリデータを読み込む変数を列記する部分 変数名 層の数 unit 説明 のunitフィールドに指定します。指定方法は以下の通り(空白を入れないように注意!)。
コントロールファイルの例(書式なしファイルの場合)DSET ^%y4%m2.dr UNDEF 9.999E+20 TITLE JRA-25 1.25 OPTIONS YREV LITTLE_ENDIAN TEMPLATE XDEF 288 LINEAR 0.000000 1.2500000 YDEF 145 LINEAR -90.000000 1.25 ZDEF 1 LEVELS 1013 TDEF 120000 LINEAR 00Z01JAN1979 6HR VARS 1 prmsl 0 33,100,0 ** pressure reduced to mean sea level [Pa] ENDVARS NetCDF用のコントロールファイルを作成するsdfopenでNetCDFファイルを開けない場合、コントロールファイルを作成するとうまくいく場合があります。これには、
の二通りがあります。 前者は基本的に通常のコントロールファイルと同様です。ここに例があります。 後者は xdfopen というコマンドを使用します。文法は通常のコントロールファイルと良く似ていますが、最低限 DSET NetCDFファイル名 があればOKです。 次元を設定するには、 XDEF NetCDF中の次元名 XDEF NetCDF中の次元名 サイズ XDEF NetCDF中の次元名 サイズ [linear/levels] 値・・・ などとします。「NetCDF中の次元名」とは、ncdump -h などで出てくる次元の名前です。3番目の使用方法のサイズ以降は、ふつうのコントロールファイルの設定方法と同様です。たとえば、 XDEF lon YDEF lat TDEF time 1200 LINEAR 00:00Z15JAN2000 1mo とすると、時間次元のみ上書きされます。 以下、完全なファイル(a.ctl)の例。 DSET ^a.nc XDEF lon YDEF lat TDEF time 1200 LINEAR 00:00Z15JAN2000 1mo 開くときは、 ga-> xdfopen a.nc ただし、GrADS Version 1.9以下では gradsnc を使用してください。 コントロールファイルの例(NetCDFファイル、openを用いる場合)dset ^%y4%m2%d2.nc options template yrev undef 9.96921e+36 unpack scale_factor add_offset dtype netcdf xdef 240 linear 120.0000 0.125 ydef 252 linear 22.4000 0.100 zdef 1 levels 1013 tdef 40000 linear 00z02jul2002 1hr vars 9 psea=>psea 0 t,y,x sea level pressure u=>u 0 t,y,x eastward component of wind v=>v 0 t,y,x northward component of wind temp=>temp 0 t,y,x temperature rh=>rh 0 t,y,x relative humidity r1h=>r1h 0 t,y,x rainfall in 1 hour ncld_upper=>ncld_upper 0 t,y,x upper-level cloudiness ncld_mid=>ncld_mid 0 t,y,x mid-level cloudiness ncld_low=>ncld_low 0 t,y,x low-level cloudiness endvars 緯度経度座標以外のデータの読み込み(PDEF)GrADSでは緯度経度座標だけでなく任意の座標系のデータを読み込むことができます。特にランベルト座標やポーラーステレオ座標のようによく使われる座標系については、コントロールファイルに記述するだけで簡単に読み込むことができます。以下ではPDEFの使い方を簡単に説明してきます。詳細はGrADS本家 をご覧ください。 ランベルト座標NHMから直接出力されたデータやMANALなどを読み込む場合に便利です。 PDEF XNUM YNUM LCCR LAT LON X Y SLAT1 SLAT2 SLON DX DY PDEF XNUM YNUM LCC LAT LON X Y SLAT1 SLAT2 SLON DX DY
前者(LCCR)は風が図法上の成分で書いてある場合、後者(LCC)は風が緯度経度座標の成分にすでに変換されている場合に用います。 以下、MANALを読み込む場合の例。 PDEF 361 289 LCCR 30 140 245 85 30 60 140 10000 10000 ただし、Version 1.9 b の場合、PDEFを定義した場合に lat、lon 変数がうまく描かれません。Version 2.0 a では修正されています。 一般的な座標GrADSで定義されていない座標系を用いる場合、以下のように BILIN キーワードを用いてコントロールファイルに記述します。ただし、後で示すように座標変換を行うためのマッピングファイルを作成する必要があります。 PDEF isize jsize BILIN format byteorder fname
マッピングファイルを作るのに必要な最低限の情報は、 変換後の格子(緯度経度座標)における、変換前格子のグリッド番号 です。簡単のため、以下のような座標で考えてみましょう。 | | | (1,4)-------(2,4)-------(3,4)--- | | | | <3,8> |<4,8> | | | | (1,3)-------(2,3)-------(3,3)--- | | | | <3,7>| <4,7> | | | (1,2)-------(2,2)-------(3,2)--- | | | | |<3,6> | | | | <4,6> (1,1)-------(2,1)-------(3,1)--- ここで(*,*)は変換後の緯度経度座標のグリッド番号、<*,*>は変換前の一般座標のグリッド番号を表しているものとします。このとき、たとえば(2,3)の格子点は、変換前の格子点<3,8>, <4,8>, <3,7>, <4,7> に囲まれています。大体<3.8,7.5>といったところでしょうか。この「(2,3)は変換前格子の<3.8,7.5>に相当する」という情報が必要となります。GrADSはこの情報をもとに線形内挿を行うのです。 ここでは触れませんが、「風速がどの座標系に基づいているか」によっては単純な線形内挿では不十分な場合があります。風速(u,v)が緯度経度座標を向いていない場合、どれくらい回転することで緯度経度座標に直せるかという情報も必要になります。 マッピングファイルには、XDEF*YDEF個の4バイト浮動小数点データが3組格納されています。
変数予約済みの変数lat lon lev これらはコントロールファイルで開いた変数と同様に使用できます。
関数注意事項「http://meteora.ucsd.edu/~kyoshimura/?IT%20memo%2FGrADS%20memo#ea5481a4」を参考に、関数使用時の注意点を以下にあげる。
平均を計算するave(変数, 開始, 終了 [,増分] [,-b]) mean(変数, 開始, 終了 [,増分] [,-b]) 平均(時間 or 空間)を計算します。平均の開始と終了の指定方法は例を御覧下さい。増分は時間平均の際の時間増分を指定することができます。また、-bは境界を正確に扱うためのフラグです。 格子がlinearでない場合、格子間隔に応じて重みをつけて平均されます。また、緯度平均を取る場合、aveを用いると緯度に応じた重みがかかりますが、meanでは重みがかかりません。 以下の例では、空間3次元と時間の次元をもつ変数Uを取り上げて説明します。全ての例は以下の次元の状態からスタートするものとします。 ga-> q dims //とりあえず現在の次元を表示 Default file number is: 1 X is varying Lon = 0 to 360 X = 1 to 129 Y is varying Lat = -87.864 to 87.864 Y = 1 to 64 Z is fixed Lev = 1000 Z = 1 T is fixed Time = 00Z01AUG1998 T = 1
領域平均を計算する最初の注意事項に書いた通り、1次元方向でなく、2次元の領域で平均する場合にはaaveを用いる(欠損値の扱いの都合上)。 d aave(var,x=1,x=10,y=1,y=20) ただし、このままでは時間方向に動かすことができない(「set t 1 10」の後に上記コマンドを実行しても、エラーメッセージが出るだけ)。 d tloop(aave(var,x=1,x=10,y=1,y=20)) 最大値/最小値を計算するmax(変数, 開始, 終了 [,時間増分]) min(変数, 開始, 終了 [,時間増分])
最大値/最小値が出現する位置を求めるmaxloc(変数, 開始, 終了 [,時間増分]) minloc(変数, 開始, 終了 [,時間増分]) 使い方は基本的にmax()、min()と同様です。
鉛直積分を計算するvint(開始気圧, 物理量, 終了気圧) 開始気圧(hPa)から終了気圧(hPa)までの物理量の質量重みつき鉛直積算を行います。開始気圧と物理量は次元を持った変数、終了気圧は定数で指定します。
中心差分を計算するcdiff(変数, 次元) 次元にはX, Y, Z, T どれかを指定します。指定した次元はvaryingである必要があります。
水平渦度(curlの鉛直成分)を計算するhcurl(東西風, 南北風) 東西風と南北風の変数から、水平渦度を計算します。
水平発散(div)を計算するhdivg(東西風, 南北風) 東西風と南北風の変数から、水平発散を計算します。
データにマスクをかけるmaskout(expr, mask) exprは描画したい変数、maskはマスクの判定を行うための変数です。ある地点におけるmaskの値が0以上の場合、exprをそのまま返します。maskの値が0未満の場合は、未定義値として扱われます。
未定義値/未定義値以外/全値を強制的に定数にするconst(expr, value, -u) // exprの未定義値 → value const(expr, value) // exprの未定義値以外 → value const(expr, value, -a) // exprの全ての値 → value
時間についての相関係数を計算するtcorr(変数1, 変数2, t=開始時間ステップ, t=終了時間ステップ) or tcorr(変数1, 変数2, time=開始時刻, time=終了時刻) 時間方向の相関係数を計算します。変数1は時間の次元しか持てないことに注意してください(変数2は時間以外を持つことも可)。
線形回帰係数を計算するtregr(変数1, 変数2, t=開始時間ステップ, t=終了時間ステップ) or tregr(変数1, 変数2, time=開始時刻, time=終了時刻) 変数1、2はともに時間に依存する必要があります。変数2は時間に加えて空間(X,Y)に依存することもできます。横軸に変数1、縦軸に変数2をとった散布図を書いたとき、最小自乗法でフィッティングした直線の傾きを求めていることになります。
べき乗を計算するpow(変数1, 変数2) 変数1の「変数2」乗を計算します。
スムージングを行うsmth9(変数) 自身+周囲8格子の重みつき平均を行います。重みは、自身が1、上下左右が0.5、斜め上・下が0.3です。但し、1次元データの場合は自身+周囲2格子のデータを使用します。 水平・時間内挿を行う(Ver2.0以降)lterp(変数1, 変数2) 変数1を変数2の格子に内挿する計算をします。格子数・時間間隔の異なるデータ間の計算を、この関数を用いることで出来るようになります。(鉛直方向の内挿は出来ない) ただし、以下の注意が必要。
ユーザ定義関数GrADSではave()やpow()のような組み込み関数だけでなく、独自の関数を追加することができます。これをユーザ定義関数(User Defined Function, 以下UDF)と呼びます。 UDFは自分の好きなコンピュータ言語(たとえばFortran、C言語)を用いて作成することができます。以下では実際に関数を作成しながらUDFの解説をします。 注意!:2009.01.18現在、2.0系ではユーザ定義関数が使用できません。 ga-> q udf Warning: User Defined Functions have been disabled in this version of GrADS となります。GrADSソースコードのgafunc.cに JMA remainder of subroutine commented out pending implementation of DLLs とあるので、そのうち復活するのではと期待しています・・・。 UDFT (ユーザ定義関数テーブル)UDFTとは関数の名前やプログラムの場所、引数の渡し方などを定義したテキストファイルです。任意の場所に置くことができます (ここでは/usr/local/grads/にudftというファイルを作成します)。以下にUDFTの例を示します。 test 1 3 expr value value sequential /usr/local/grads/test/test /home/kodama/grads/test/test.out /home/kodama/grads/test/test.in 各行の簡単な説明は以下の通りです。 (関数名) (引数の数の最小値) (引数の数の最大値) (引数の種類1) (引数の種類2) ... (関数データ交換ファイルの読み書き方法) (実行ファイル名) (関数データ交換ファイル名) (関数結果ファイル名、実行ファイル->GrADS)
次に、環境変数GAUDFTにUDFTのファイル名を設定します。 bashなら [mydir@hosts] export GAUDFT="/usr/local/grads/udft" cshなら [mydir@hosts] setenv GAUDFT /usr/local/grads/udft ここまでうまくいったかどうかを確認してみましょう。GrADSを立ち上げて、 ga-> q udft によって、現在登録されているUDFを確認することができます。 複数のUDFをUDFTに記述する場合のUDFTは、 test 1 1 expr sequential /usr/local/grads/test/test /home/kodama/grads/test/test.out /home/kodama/grads/test/test.in test2 1 1 expr sequential /usr/local/grads/test2/test2 /home/kodama/grads/test2/test2.out /home/kodama/grads/test2/test2.in のように前のテーブルの後ろにつなげて記述します。決して空行を空けたりしてはいけません。 関数データ交換ファイルGrADSからプログラムへデータを渡すには、 UDFT4行目に指定した関数データ交換ファイル(function data transfer file)を介して行います。ファイルはヘッダレコードと引数レコードに分かれています。 ヘッダレコードは浮動小数点(4bytes)20個で構成されています。各浮動小数点の意味は以下の通り。
引数部には、UDFで指定した引数の順番にデータが入っています。引数の種類(expr, value, char)によって書式が違います。 exprを指定した場合、
valueを指定した場合、4bytes浮動小数点×1個。これがそのまま引数の値です。 charを指定した場合、80bytesの文字列。80bytesに満たない部分には空白で埋められ、80bytesを超える場合は捨てられます。 関数結果ファイルプログラムで処理した結果をGrADSへ戻すには、UDFT5行目に指定した関数結果ファイル(function result file)を介して行います。ファイルはヘッダレコードとグリッドレコードに分かれています。 ヘッダレコードは浮動小数点(4bytes)20個で構成されています。各浮動小数点の意味は以下の通り。
グリッドレコードは基本的に、関数データ交換ファイルの引数部と同じ形式で記述します。ただし第3レコードと第4レコードは扱いが少し異なるので注意が必要です。
簡単な例2次元の気温場T[K]を与えると、単位を[℃]に変換する関数kelvin()を作成します。関数とデータ交換用のファイルは /home/hoge/gudf/kelvin 以下に置くことにします。予め環境変数GAUDFTを設定するのも忘れずに。
kelvin.f90コンパイルしてa.outを作成すれば、準備は完了です。GrADSを立ち上げて、 d kelvin(T) とすれば実行できます。 その他色を定義するset rgb 色番号 red green blue RGB値を色番号に結びつけます。色番号は0〜15が定義済み(デフォルトの色一覧)なので、16〜99が使えます。red, green, blueは0〜255の整数です。 シェルのコマンドを実行する!コマンド名 !を先頭に付けると、シェルのコマンドと解釈されます。 gradsを実行しながらlsを実行したい場合は、 ga-> !ls index.html index.html~ とします。 ga-> !emacs test.ctl & みたいなこともできます(GrADSを閉じずにコントロールファイルを編集できる)。 カラーバーを表示するcbar 「set gxout shaded」などの設定がされている場合、 ga-> cbar とすると、適切な位置にカラーバーが表示されます。 ga-> cbarc ga-> cbarn などのバリエーションもあります。これらのカラーバーは、/usr/local/lib/grads/ といったフォルダに、スクリプトとして置いてあります。 任意の場所にカラーバーを描画したい場合はスクリプト集を参考にして下さい。 cbar*がシステムに存在しない場合は、 ftp://grads.iges.org/grads/scripts/ からcbar*.gsをダウンロードして任意の場所(/usr/local/lib/grads/scripts/ など)に置き、 環境変数GASCRPにダウンロードしてきたファイルを置いたディレクトリを指定すると使えるようになります。 バイナリデータの格納順たとえば以下のようなコントロールファイル(test.ctl)があったとします。 DSET test.dr UNDEF 9.99E+33 TITLE UVT XDEF 3 LEVELS 0 120 240 YDEF 4 LEVELS -90 -30 30 90 ZDEF 5 LEVELS 1000 800 600 400 200 TDEF 10 LINEAR 1JAN2000 1DY VARS 3 U 5 99 horizontal velocity V 5 99 horizontal velocity T 5 99 temperature ENDVARS このとき、対応するバイナリファイルtest.drの中身は(図は U(x=1, y=1, z=1, t=1) U(x=2, y=1, z=1, t=1) U(x=3, y=1, z=1, t=1) U(x=1, y=2, z=1, t=1) U(x=2, y=2, z=1, t=1) U(x=3, y=2, z=1, t=1) U(x=1, y=3, z=1, t=1) …………(中略)………… U(x=3, y=4, z=1, t=1) U(x=1, y=1, z=2, t=1) U(x=2, y=1, z=2, t=1) U(x=3, y=1, z=2, t=1) U(x=1, y=2, z=2, t=1) …………(中略)………… U(x=3, y=4, z=5, t=1) V(x=1, y=1, z=1, t=1) V(x=2, y=1, z=1, t=1) …………(中略)………… T(x=2, y=4, z=2, t=1) T(x=3, y=4, z=2, t=1) ………(以上をt=2,3,...についても繰り返す)……… U(x=1, y=1, z=1, t=2) U(x=2, y=1, z=1, t=2) U(x=3, y=1, z=1, t=2) U(x=1, y=2, z=1, t=2) …………………………… Fortran 90 でデータを吐き出す例(test.f90)を以下に示しました。(注意:open文のreclの指定方法は、コンパイラやオプションによって異なります。ifortで特にオプションがない場合は4*を付けない等) program test implicit none integer,parameter :: xdef=3, ydef=4, zdef=5 real(4) :: U(xdef,ydef,zdef), V(xdef,ydef,zdef), T(xdef,ydef,zdef) integer :: i, r open(10,file='test.dr',status='unknown',form='unformatted', & & access='direct',recl=4*xdef*ydef*zdef) r = 1 !書きこみ位置 do i=1,10 ! ここで時刻t=iのU,V,Tを格納 …………(中略)………… ! 書きこみ write(10,rec=r) U r = r + 1 write(10,rec=r) V r = r + 1 write(10,rec=r) T r = r + 1 end do close(10) end program test 計算したデータなどをGradsファイルで出力する「set gxout fwrite」を使う。以下はnetCDFからGrADSファイルを作成する場合の例。しっかりと格子情報を指定してからにしてください。(うまくいかないときがあるらしい・・・) 'sdfopen netcdf.nc' 'set gxout fwrite' 'set undef dfile' ;* <- GrADS 2.0.a6以降の場合あった方がいいかも 'set fwrite test.grd' t=1 while(t<=tmax) 'set t 't z=1 while(z<=zmax) 'set z 'z 'set x 1 96' 'set y 1 96' 'd var' z=z+1 endwhile t=t+1 endwhile 'disable fwrite' 出力時にはオプションがつけられる。「set fwrite (-le,-be) (-sq,-st) (-ap,-cl) test.grd」。 'set fwrite'を複数回実行する場合、'disable fwrite'でファイルを閉じる必要があります。 GrADS 2.0.a6以降の場合、未定義値は自動的に-9.99e+8になってしまいます。未定義値を元のファイルに合わせるには、'set undef dfile' とするとよいでしょう。 出力する未定義値を変更する (Ver.2.0.a6以降)set undef 未定義値 set undef file ファイル番号 // 指定したファイル番号の未定義値を使用 set undef dfile // 現在のファイル番号の未定義値を使用 ここで指定した未定義値は、'set gxout fwrite'でファイルに出力する際などに利用されます。Ver.2.0.a6以降で 'set undef' を使わないと、Ver.2.0.a6より前のGrADSとは挙動が異なるので要注意です。 計算したデータなどをnetCDFファイルで出力する(Ver.2.0a3-)「set gxout fwrite」を使うときとは若干違う。先に全ての時間・格子情報を定義してから、出力する。 'open grads.ctl' 'set x 1 96' 'set y 1 96' 'set z 1 38' 'set t 1 10' 'define temp = t' 'set sdfwrite grads.nc' 'sdfwrite temp' 一度「define」しないといけないので(netCDFの定義の都合上)、注意。デフォルトは、1ファイル1変数しかできない。「set sdfattr」で設定できるようです。 格子サイズが小さい場合(e.g.200m格子)に、格子点でのデータが表示されない問題
バグ or 仕様:描画回数の限界
"Out of buffer space"が出る場合描画に時間がかかるような図(高解像度の図など)を描くときに表示される場合があります。これが出ても描画する分には問題ありませんが、ファイルに保存をする場合は図が切れてしまいます。このような場合、図を分けて保存するなどの対処が必要でしょう。 ソースコードインストールができる人限定になりますが、より根本的な解決方法として、ソースコードのバッファ値を増やす方法があります。grads-2.0.a7.1 の場合、gxmeta.c の 249 or 250 という数字を大きくすることでエラーが出なくなります。たとえば 249 を 499 に、250 を 500 にするのが一案でしょう。なお、メモリを大量に食いつぶす恐れがありますので、物理メモリが小さなマシンでは注意が必要でしょう。 番号一覧色
マークの種類
線種
|