ここでは Dennou Ruby Project で開発されているツール群を用いて 解析・描画を行ないます.
今回も実技時間内での作業は 1 つのアカウントで行なってください. 他のアカウントでも同じ作業を行ないたい場合には授業時間外に やってください.
Dennou Ruby Project のツールは オブジェクト指向スクリプト言語の Ruby を使って 作られています.
Ruby は日本人のまつもとひろゆき氏によって開発されており, 日本語の書籍も多く出版されています. 詳しくはRuby のホームページ などを参照してください. Ruby はオブジェクト指向に基づいて設計された言語です. 非常に粗っぽい説明をすれば, プログラムの世界におけるオブジェクトとは, 「データ」と手続きを一体にしたようなものです. それぞれのデータのタイプに応じて手続きを定めるというのを 基本にしてプログラミングを行ないます. なお, ここまで「手続き」と呼んでいたものは Ruby の世界では メソッドと呼ばれます.
ruby を使ったスクリプトの例としてシェルスクリプトの課題 (INEX 第 3 回, 04/28) の解答となる ruby スクリプトを挙げます. こちらを見て各自で作成したシェルスクリプトと比較してみてください. だいぶ様子が違うのではないでしょうか.
今回の実習で使う Dennou Ruby Project のツールのうち, 中心となるのはGPhys というものです. GPhys については GPhys のホームページを参照してください. ここにある GPhys のチュートリアルを一通りやると GPhys の基礎を学ぶことができます.
ここでは, GPhys のチュートリアルの中の以下の部分を実際にやって, GPhys と Ruby に慣れることにしましょう.
解析・描画の作業を開始する前に, 使用する netCDF ファイルの中身を見ておくことにします. まず実験を行なったディレクトリに行ってください. そして, 以下のようにしてファイルの中身を見てください.
$ ncdump Temp.nc | less |
次に, time の値を確認してください.
time = 0, ......, 1095 |
ここまでは 2 日目の瞬間値の図 (スナップショットと言います) を書いてきましたが, zonalmean_3dim_snapshot.rb を編集して, 時間を変更した図も作ってみましょう.
GGraph.tone( gphys.mean('lon').cut('time'=>731..1095).mean('time') ) |
今度は, 違う変数の図を書いてみましょう. 東西風のデータ U.nc を使って次の図を描いてみてください.
なお, 作成した図をファイルに保存するには, スクリプト中において
DCL.gropn(2) |
$ convert -rotate 90 dcl.pdf Temp_zonalmean.png |
降水量と蒸発量のデータを使って簡単なデータ処理をやってみましょう.
まず, horizontalmap_2dim_snapshot.rb をダウンロードして実行してみてください. このスクリプトは 3 年目の最後の瞬間の降水量の経度緯度分布の図を描くものです.
この図は緯度経度分布を示す図になっているので, 海岸線もプロットされています. おおまかには, 降水量は赤道で大きくなっています. これは赤道上で上昇流が生じ雲が形成されるためです. また, 日本付近でも降水量が大きくなっています. これは低気圧に伴う雨です. この図はとある瞬間の図に過ぎませんが, 以下で作成する時間平均図でも同様の傾向が現れているのかよく見てみてください.
降水量に関する別の図も作ってみましょう. 以下の平面分布の図を作ってください.
降水量の東西平均 (経度方向の平均) の図も作ってみましょう. そのためのスクリプト zonalmean_2dim_snapshot.rb をダウンロードして実行してください. 線グラフの図を描くことができたでしょうか? それができたら,
更に緯度方向にも平均をして降水量の水平平均 (経度方向にも緯度方向にも平均) の図を作ってみましょう. そのためのスクリプト globalmean_2dim_timeseries.rb をダウンロードして実行してください. 線グラフの図を描くことができたでしょうか?
では, ここまでに用いたスクリプトを改変して, 表面からの蒸発量の図を描いてみましょう. 蒸発量のデータファイルは SurfH2OVapFlux.nc です. このファイルの中には SurfH2OVapFlux という変数名で蒸発量が格納されています. 蒸発量に関して, 以下の図を何枚か作ってみてください.
最後に, 降水と蒸発の差 (ここでは P-E と表します) を計算してそれを図にしてみましょう. ここでは, 水平分布の図を作ってみます. horizontalmap_2dim_snapshot.rb を更に改変しましょう. 降水量の読みこみ先を gphys_prcp に変更した上で, 蒸発量をの読みこみ先を gphys_h2ovapflux とする設定を追加しましょう. 更に, スクリプト内で gphys_prcp - gphys_h2ovapflux を計算して, 3 年目の最後の瞬間の P-E の平面分布の図を描けるようにしてください.
今日はレポート課題が出題されます. 内容は P-E に関する以下の図を作成し, それらの図に関する記述を行なうというものです.
最終更新日: 2017/07/14 石渡 正樹 作成 | Copyright © 2000-2017 inex |