GrADSチュートリアル
GrADSチュートリアル
GrADS (Grid Analysis and Display System)は,気象・気候の分野で用いられてきた,グリッド解析表示システム(ソフト)です.
(GrADS 本家サイト:http://cola.gmu.edu/grads/)
格子点データ(大気再解析データや数値シミュレーションの出力データなど)を特に地図上に作図するために用いられます.等値線等に加えて地図を容易に描画する事が出来,全球スケールの気象を扱う分野で広く使われています.
(同様の目的に使えるソフトウェア・ツールはGrADS以外にも複数存在しています.このようなソフトウェアなしに地図付の図を描画するのは非常に大変です.想像するのが難しいかもしれませんが,ソフトウェアなしに等値線を描画する事自体,とても大変です.興味のある方はトライしてみて下さい)
GrADSを用いてこのような図を描く事ができます.
(冬季の降水量と海面気圧の気候値,JRA-55)
このチュートリアルは,約 30 分~1時間で,GrADS の基本的な機能を体験するためのものです.
GrADSの機能はここで紹介したものに留まりません.補足資料として,興味のある方のさらなる学習に役立つ情報をチュートリアルの後に掲載しています.
気象・気候の分野では,多次元(三次元以上)のデータを用いることがほとんどです.
空間次元は東西・南北・鉛直方向の三次元あり,それに時間次元が1つないしそれ以上,さらにその他の次元が加わる事もあります.
しかし,一般的な方法で図を描画する場合,一次元ないし二次元のデータを描画することしかできません.下の図のように,多次元のデータというのは,言うなれば世界地図が大量にあるような状況です.当然,大量の世界地図を同時に表示することはできません.
本インターンシップでも三次元以上のデータを扱いますが,それらを通常の方法で描画するには,(少なくとも)二次元のデータとして,抽出・加工する必要があります.
多次元かつ非常に大きなサイズのデータ,所謂「ビッグデータ」を,どのように解析・加工し,我々が理解出来る図として描画するか,というのが,気象・気候の研究において非常に重要な点であるという事が想像できるかもしれません.
非常に大きなサイズのデータを用いてどのような論を立てるか,というのが気象・気候を相手とする研究の醍醐味の一つであると言えますが,何かを主張するためには「他の人が理解出来る図表」を作成する必要があります.
この点を念頭に置きつつ,このチュートリアルを行ってみて下さい.
より「研究に触れる」ことが出来ると思います.
ターミナルを起動し,サーバにログインした後,適当なディレクトリに移動します.例えば
$ cd /home/local/internship/202303/shared/clim
です.
次に,以下のコマンドでGrADSを起動します。
$ grads
この時,
Landscape mode? ('n' for portrait):
という表示が出ますが,気にせずEnterを押してください.
すると、GrADSのウィンドウが立ち上がり、ターミナルのプロンプトが
ga->
に変わります(GrADSのウィンドウは黒いままで何も表示されていないはずです)
ウィンドウが立ち上がらない場合,おそらくX windowの設定が正しく行われていません.
GrADSの終了は
ga-> quit
で行います.
💡 ディレクトリとファイル
ディレクトリ(=フォルダ)は箱で,その中に入っているのがファイル.
CUI (文字=コマンドで情報の表示と操作を行う形式)では,ディレクトリの中に入って作業を行うイメージです.
💻 GrADSの起動と終了を行ってみましょう.
まずGrADSを起動します.
今回解析するデータはnetcdfと呼ばれる形式です.今回のインターンシップではデータの形式に関する詳細を知る必要はないですが,netcdfはファイルの中に格子情報などが格納された自己記述型の形式であるという特徴があります.
netcdfファイルのオープンにはsdfopenというコマンドを用います.仮に,自分が今いるディレクトリにあるatmos.clim.slp.ncというファイルをオープンする場合,
ga-> sdfopen atmos.clim.slp.nc
です.ファイル名は,以下のように絶対パス(今いる場所からの相対的な場所ではなく絶対的な場所)で指定する事も出来ます.
ga-> sdfopen /home/local/internship/202303/shared/clim/atmos.clim.slp.nc
💡 相対パスと絶対パス
相対パス:自分が今いるディレクトリから見た,あるディレクトリやファイルの位置
絶対パス:ルートディレクトリを基準とした、あるディレクトリやファイルの位置
正常にオープン出来た場合,” Scanning self-describing file: ~~~”などのいくつかの情報が出ます.もし正常にオープンできなかった場合にはエラーメッセージが出ます.
(ターミナルに表示されるメッセージを見る習慣を付けましょう.これはGrADSに限らず,CUIによる操作全般に言える事です.例えば現在の航空機の操縦において,クルーは機体の状態をモニタリングして情報を伝えるシステムのメッセージに対処することで問題に対処します.)
開いたファイルについて,ファイル情報(変数名や軸情報)を表示したい場合は
ga-> q file
と実行します.
GrADSを終了するとオープンされていたファイルが自動的にクローズされます.
GrADSを終了せずにファイルをクローズしたい場合には
ga-> close 1
のようにします.”1”はファイルの番号で,今はatmos.clim.slp.ncというファイルしか開いていないため1番です.
ここから想像されるように,GrADSでは複数のファイルを同時にオープンする事が(後述のように)可能ですが,その場合には開かれているファイルの中で番号の一番大きなファイルのみクローズする事が出来ます.
ファイル形式には,もちろんnetcdf以外の形式もあります.GrADSでよく用いられる形式として,データのみが格納されたファイル (バイナリ=人間が読めないデータ.GrADS形式と言われる事があります)がありますが,この形式では格子情報を”.ctl”という拡張子のコントロールファイルによって別に与えてあげる必要があります.この形式の場合,
ga-> open slp.ctl
のように,openコマンドを用います.(今回のインターンシップでは使いませんが)
💻 GrADSを起動し,ファイルをオープン→情報を表示→クローズしてみましょう.
モデル実験データを用いて、等値線図を描いてみます.
GrADSを起動し、
ga-> sdfopen atmos.clim.slp.nc
で海面気圧の格納されたファイルを開きます.atmos.clim.slp.ncはx,y,tの三次元データなので(格子点数がそれぞれ144x90x36),水平面(x,yの二次元)の等値線を描画するには,時間次元について切り出す位置を指定する必要があります.
今回は,時間次元の1番目(Jan1997),鉛直次元の1番目(1000hPa)を指定するとして
ga-> set t 1
ga-> set z 1
とします.(これらを指定しないと自動的に1番目のデータを読みこんで表示します)
変数名がslpであるので,
ga-> d slp
で,下のような海面気圧の等値線を描く事が出来ます.
描画した図を消去するには
ga-> c
とします.”c”は”clear”の略で,clearと実行しても同じ効果が得られます.そして
ga-> close 1
でファイルを閉じておきましょう.
今度は気温について,緯度-鉛直断面を描いてみましょう.気温のデータは(x,y,z,t)の四次元データ(144x90x17x36) なので,(y,z)断面を描くには,xとtの次元を指定してあげます.例えば
ga-> sdfopen atmos.clim.temp.nc
ga-> set lon 180
ga-> set lev 1000 100
ga-> set time Jan1997
ga-> d temp
とすることで,以下のような図を描くことが出来ます.(lonはlongitude=経度のことです)
💻 温度の等値線を,水平面・緯度-鉛直断面についてそれぞれ描いてみましょう.
3.で簡単な図を画面に表示する事が出来るようになりましたが,このままでは誰か他の人に図を見せるのが難しいです.学会発表でライブコーディングならぬライブドローイングをする訳には行きません.
そこで,描画した図を画像ファイルとして保存することを考えましょう.
図を描画した後に,gxprintというコマンドを実行することで,画像ファイルとして保存する事が可能です.例えば
ga-> gxprint image.png
とするとpng形式で"image.png"という名前の画像を保存できます.
解像度を指定するには,例えば
ga-> gxprint image.png x1200
のようにします(この場合は横1200ピクセルとなる).
他の形式 (jpg,epsなど)にも対応しています.
💻 表示した画像を画像ファイルとして保存してみましょう.
GrADSでは,複雑でない計算を行うためのコマンド群が用意されています.
例えば平均を計算する操作を行うことが出来ます.気温の時間方向の平均を計算して描画する場合,
ga-> sdfopen atmos.clim.temp.nc
ga-> set time jan1997
ga-> set lev 1000
ga-> set lon 120 180
ga-> set lat 20 60
ga-> define tm=ave(temp,time=jan1997,time=dec1999)
ga-> set cint 5
ga-> set cthick 5
ga-> d tm
のようにすると,下のような図が描けます.
”ave”が平均を計算するための関数で,”define”は新しい変数を定義するコマンドです.
“cint”は等値線を描く値の間隔,”cthick”は線の太さを指定するためのものです.
次に,以下のように気温の東西平均を計算して描画してみましょう.
ga-> set time jan1997
ga-> set lev 1000 100
ga-> set lon 180
ga-> set lat -90 90
ga-> define tm=ave(temp,lon=0,lon=360)-273.15
ga-> set cint 5
ga-> set cthick 5
ga-> d tm
ここで,“define”では関数を用いるだけでなく,加算をはじめとする計算を行えることが分かりますね.
💻 時間平均,東西平均した温度の図を描いてみましょう.
GrADSでは複数のファイルを開く事ができ,開いた順に1,2,…とファイル番号が付与されます.この番号を変数名の後ろに付ける事で,どのファイルを読むかを指定できます.
例えば,温度と西風風速の緯度-鉛直断面を重ねて描いてみましょう.
ga-> sdfopen atmos.clim.temp.nc
ga-> sdfopen atmos.clim.ucomp.nc
ga-> set time jan1997
ga-> set lev 1000 100
ga-> set lon 0 360
ga-> set lat -90 90
ga-> define tm=ave(temp.1,time=jan1997,time=dec1999)
ga-> define um=ave(ucomp.2,time=jan1997,time=dec1999)
ga-> set lon 180
ga-> define tmm=ave(tm,lon=0,lon=360)
ga-> define umm=ave(um,lon=0,lon=360)
ga-> set cint 5
ga-> set ccolor 2
ga-> d tm
ga-> set cint 10
ga-> set ccolor 1
ga-> d um
下のような図が描けたでしょうか.
なお“ccolor”は線などの色を記述するためのものです.1と2がそれぞれ白(背景が黒の場合.背景が白の場合には黒)と赤に対応しています.今回のように同時に複数の物理量を描画する場合,何らかの方法でそれらを区別できるようにすることが望ましいです.
💻 複数の物理量を重ねた図を描画してみましょう.
5や6で,これだけ長いコマンドを毎回入力するのは面倒だと感じ始めた頃ではないでしょうか.
GrADSでは,これまで見てきたような対話的な実行法だけでなく,実行したいコマンドをファイル(スクリプトと呼びます)に纏めてから実行する事が可能です.実際の研究にGrADSを用いる場合,データを眺めるだけなら対話的な形式でも問題ないですが,プレゼンテーションなどで用いる図を作成する場合には,GrADSスクリプトを作成してから実行するのが一般的です.
GrADSスクリプトでは,実行するコマンドをシングルクォーテーションで括って,ファイルに記述します.例えばscript.gsというファイルをGrADSスクリプトとしましょう.
まずファイルを作成します.
$ touch script.gs
$ emacs -nw script.gs
でファイルを編集し保存します.
そしてGrADSを起動し,
ga-> run script.gs
とすれば,スクリプトファイルを実行できます.
💡 GrADSスクリプトの例
'reinit'
'sdfopen /home/local/internship/202303/shared/clim/atmos.clim.slp.nc'
'set display color white'
'clear'
'set lon 0 360'
'set lat -90 90'
'set z 1'
'set t 1'
'd slp.1'
💻 GrADSスクリプトを作成し,実行してみましょう.
これまでは図の見た目を全く気にせずに描画してきましたが,もちろん見た目も図の重要な要素の一つです.3~7で描いてきた図の見た目は,お世辞にも良いとは言えません.
今回のインターンシップの目的からはやや外れますが,図の見た目をもう少し良くする事を考えてみましょう.
ga-> sdfopen atmos.clim.temp.nc
ga-> set display color white
ga-> c
ga-> set time jan1997
ga-> set lev 1000
に加えて,
ga-> set lon 120 180
ga-> set lat 20 60
ga-> set cint 5
ga-> set cthick 5
ga-> set ccolor 2
としてから
ga-> d temp
としてみましょう.
“set display color white”で背景を白にしています.その後で一旦画面を消去しなければウィンドウに反映されないことに注意しましょう.
また,
ga-> c
ga-> set gxout shaded
ga-> d temp
ga-> cbar
としてみましょう.(設定のうちいくつかはファイルをクローズするまで記憶されています)
“set gxout shaded”により,等値線ではなく,塗り潰された図が出力されます.”cbar”はカラーバーを描くためのコマンドです.
💻 (時間の余った人向け)上のコマンド,また付録のコマンド群などを参考に,好きな物理量について「少し凝った図」を作成してみましょう.
作成:岡島(筑波大学 生命環境系)
GrADSに関する情報を得ることの出来る主なサイトを以下に挙げています.
GrADSの本家サイト (英語)
インストールなどに.
日本語のページ
東北大学大学院理学系研究科 流体地球物理学講座
https://wind.gp.tohoku.ac.jp/html/index.php?%B8%F8%B3%AB%BE%F0%CA%F3/GrADS/GrADS%A4%CETips
多くの情報があります.少し慣れた人向けです.
東京大学大気海洋研究所 西井さん(現:三重大学)作成の全学ゼミ用ページ
https://www-aos.eps.s.u-tokyo.ac.jp/~nishii/zengakuzemi/grads-memo.html
簡単なコマンドについて知るのに使えます.
GrADS-Note (筑波大学 釜江さん作成)
https://seesaawiki.jp/ykamae_grads-note/
インストールの方法やチュートリアル的資料,よく使う文などの情報が纏められています.
東京大学生産技術研究所 芳村さんのページ
http://isotope.iis.u-tokyo.ac.jp/~kei/?IT%20memo/GrADS%20memo
GrADSの使い方に関する色々な情報があります.
東京学芸大学 気象学研究室 数値計算セミナーのページ
http://kishou.u-gakugei.ac.jp/seminars/numerical_2021/
簡単なチュートリアルがあります.
> sdfopen (ファイル名)
netcdfファイルを開く.
> open (ファイル名)
GrADS用のコントロールファイルを開く.
> close (ファイル番号)
開かれているファイルを閉じる.最も大きな番号についてのみ機能するので注意.
> reinit
GrADSを初期化する.描画が消去され,開いていたファイルも全て閉じられる.
> clear
描画されているものを全て消す.単に”c”でもOK.
> set display color white
背景を白色にする.clearしないと反映されない.
> set lon (経度)
> set lat (緯度)
描画する経度(幅)及び緯度(幅)を東経及び北緯で設定する.数字を1つ設定した場合にはその経度or緯度のみを,2つ指定した場合には1つ目と2つ目の数字の間の部分を描画する.
> set lev (高さ)
> set z (高さ)
描画する高さを設定する.”lev”は単位付きの高さで,”z”は何番目の面であるかを指定する.数字を2つ指定する事も可能.
> set time (時間)
> set t (時間)
描画する時間を設定する.”time”は単位付きの時刻で,”t”は何番目の時間ステップであるかを指定する.時刻や数字を2つ指定する事も可能.
> set ccolor (色番号)
線の色を変える.色番号は1が黒,2が赤など.
> set cthick (太さ)
線の太さを変える.太さは整数値で指定.3-6くらいを良く使う.
> set cint (間隔)
線を引く値の間隔を設定する.
> set clevs (値)
線を引く値を1つないし2つ以上の数字で陽に指定する.塗り潰しの場合には境界値を指定する.
> set clab (オプション)
線にラベルを付けるかどうかを選択する.”on”と”off”に加えて”masked”が指定できる.
> set ccols (色番号)
set clevsで設定した複数の値に対して色を設定する.塗り潰しの場合は設定した値の数+1つの色を設定する必要がある.
> set xlint (間隔)
> set ylint (間隔)
X軸,Y軸の目盛間隔を指定する.
> set xlopts (色番号) (字の太さ) (字の大きさ)
> set ylopts (色番号) (字の太さ) (字の大きさ)
X軸,Y軸の目盛に付く文字を調整する.字の太さは4-7辺り,字の大きさは0.2-0.3辺りがよい.
> set gxout (オプション)
描画のスタイルを変更する.デフォルトは等高線で”contour”.べた塗りは”shaded”.単純な折れ線は”line”など.
> d (変数名)
何らかの変数を描画する.開いたファイルの変数をそのまま描画する場合,ファイルで指定されている名前をdの後ろに付ける.例:d slp
複数のファイルを開いている場合は,変数名の後ろに何番目のファイルであるかを指定する.2番目のファイルのslpを描画したい場合には”d slp.2”とする.
> printim (ファイル名)
現在表示されている図をファイルに出力する.画像ファイルなので,”.png”などの拡張子を指定するのが普通.(複数の方法があるが,これが最も単純なコマンド)
> gxprint (ファイル名)
現在表示されている図をファイルに出力する.比較的新しいバージョンで実装されたコマンドで,pngやjpgなどの画像ファイルも直接出力出来,解像度などの設定も可能.
> q dim
現在設定されている座標の情報を表示する.
> q file
現在開いているファイルの情報を表示する.後ろに数字を指定すると,指定した番号のファイルの情報を表示できる.
> q ctlinfo
現在開いているファイルの情報を表示する.”q file”より多くの情報が表示される.
> set dfile (ファイル番号)
軸情報を設定する際に参照するファイルの番号を設定する.
> quit
GrADSを終了する.