deepconv/arare5 では入出力するファイルとして Gtool4 NetCDF 規約 に基づいた NetCDF データを扱います.
数値実験の結果を解析・可視化するためには, NetCDF データを取り扱うことのできる解析・可視化ツールが必要です. ここでは, 電脳 Ruby プロジェクト から提供される Gphys を使った可視化の例を紹介します.
電脳Ruby謹製品 インストールガイド を参照してください.
ここでは, 重力流の実験 で得られたデータを GPhys/GGraph を用いて可視化してみることにします.
まず irb を起動してください.
$ irb
以下のような irb のプロンプトが表示されます.
irb(main):001:0>
このプロンプトに, 以下のようにコマンドを打ちます. 左端の数字は行番号で, 打つ必要はありません.
1: require "numru/ggraph" 2: include NumRu 3: gphys = GPhys::IO.open('denscurrent-dry_PTemp.nc', 'PTemp').cut('y'=>0.0) 4: DCL.gropn(4) 5: DCL.sgpset('lcntl', false) ; DCL.uzfact(0.7) 6: GGraph.tone gphys
irb のプロンプトにおいて quit と打つと irb を終了することができます.
ここでは Temp.nc というファイルの中の Temp という変数を読み込み, 図示を行っています.
PTemp は x, y, z, t (時間) の 4 次元データですが, この実験は水平鉛直 2 次元で行っているので, 3 行目で y = 0 としています. 何も指定しないと最後の次元に関しては自動的に 1 番目の要素が選択されます. したがってこの図は t=0 での水平鉛直 2 次元での温位を示していることになります
また, 続けて, 下のように時刻を指定することで, 異なる時刻での最下層の温度分布を描くことができます.
7: GGraph.tone gphys.cut('t'=>900)
終了させるには
8: DCL.grcls 9: quit
としましょう.
絵を描くだけでなく, 解析を行うこともできます. 例として温位とエクスナー関数から温度を計算し, 図示してみましょう.
1: require "numru/ggraph" 2: include NumRu 3: gphys1 = GPhys::IO.open('denscurrent-dry_PTempAll.nc', 'PTempAll').cut('y'=>0.0) 4: gphys2 = GPhys::IO.open('denscurrent-dry_ExnerAll.nc', 'ExnerAll').cut('y'=>0.0) 5: temp = gphys1 * gphys2 6: DCL.gropn(1) 7: DCL.sgpset('lcntl', false) ; DCL.uzfact(0.7) 8: GGraph.tone temp.cut('t'=>900,'x'=>25e3..45e3) 9: GGraph.contour temp.cut('t'=>900,'x'=>25e3..45e3),false 10: GGraph.color_bar
第 5 行目で温度の計算を温位とエクスナー関数から行っています. 図示させているのは x = 25 ~ 45 km です.
このように, GPhys/GGraph を用いると多彩な解析と可視化を実現できます. 処理が長くなってきたら irb でインタラクティブに行うかわりに, エディタを用いてスクリプトファイルを書く方が効率的であり再利用も容易になります. より高度な解析・可視化を行う際には, GPhys チュートリアル を参照してください.
ここでは, Polvani et al. (2004) の傾圧不安定波動実験 で得られたデータを GPhys 付属の gp コマンドを用いて可視化してみることにします. 温度のデータを読み取り図示するには,
% gpview denscurrent-dry_PTemp.nc@PTemp,y=0
と入力します. これは denscurrent-dry_PTemp.nc というファイルの中の PTemp という変数を読み込み, 図示せよというコマンドです.
PTemp は x, y, z, t (時間) の 4 次元データですが, この実験は水平鉛直 2 次元で行っているので, y = 0 としています. 何も指定しないと最後の次元に関しては自動的に 1 番目の要素が選択されます. したがってこの図は t=0 での水平鉛直 2 次元での温位を示していることになります
断面を変えて, 時刻 t=900, x = 25 ~ 50 km にしたければ,
% gpview denscurrent-dry_PTemp.nc@PTemp,y=0,x=25e3:50e3,t=900 --nocont
と, カンマで区切って断面を指定することができます.
アニメーションも簡単に見ることができます.
% gpview denscurrent-dry_PTemp.nc@PTemp,y=0,x=25e3:50e3 --anim t --nocont
座標を 3 つ指定して 1 次元データにすると折れ線グラフを描けます.
% gpview denscurrent-dry_PTemp.nc@PTemp,y=0,x=25e3:50e3,t=900 --exch
--exch オプションは縦軸と横軸を入れ換える操作を指示するものです.
gpview には他にもいろいろなオプションがあります. gpview --help とするとオプションと使い方の例が表示されます. gp コマンドシリーズには他にもいろいろなものが用意されています. 主なものは以下の通りです.
gp コマンドシリーズは 1 行入力ですぐに結果を表示できるのが特徴です. そのためクイックルックや計算の途中でのデータチェック等に便利です. しかしながら複数の変数を組み合わせた解析や可視化はできません. 本格的なデータ解析と可視化を行うには, GPhys/GGraph による解析と可視化が適しているでしょう.