格子点で与えられた2次元のスカラーデータを手早く等高線図で描きたいとい
うときには, メソッド Contour.draw を呼びます(U2D1). Contour.draw ルーチンは等高線を描くだけですから, まず正規化変換を設定します.
ウインドウは Figモジュールのパラメタ window で[TMIN,TMAX]×[ZMIN,ZMAX](
[0,5]×[20,50])と陽に設定
しますが, ビューポート([0.2,0.8,] ×[0.2,0.8,] )と変換関数番号(1:
直角一様座標)は括弧内の初期値を用います.
次に, Axis.title メソッドで座標軸タイトルの情報を与え, Axis.draw
ルーチンでおまかせの座標軸を描きます.
そして, 最後に Contour.draw メソッドを呼んで等高線を描きます. 現在設定 されているウインドウいっぱいに等間隔の格子点が設定されて,コンタリング が行なわれます. つまり, 座標軸の目盛に関係なく, U(1,1) が左下隅, U(NT,NZ) が右上隅にくるように等間隔の格子点座標が設定されます. コンターレベルは自動的に決定され, 図の下にそのコンター間隔が表示されま す. Contour.draw の引数の2番目以降で配列の寸法を指定しますが, 第1次元 寸法を2度指定するのは, 配列の一部分だけを作画できるようにするためです. この例のようにデータ全部を描く場合は, 2番目の引数と3番目の引数を同じ (NT)にします.
#
# u2d1.rb
require "narray"
require "numru/advanceddcl"
include NumRu::AdvancedDCL
include NMath
nt = 51
nz = 21
tmin = 0.0
tmax = 5.0
zmin = 20.0
zmax = 50.0
dt = (tmax-tmin)/(nt-1)
dz = (zmax-zmin)/(nz-1)
u = NArray.sfloat(nt, nz)
#-- data ----
for j in 0..nz-1
zj = j*dz
uz = exp(-0.2*zj)*(zj**0.5)
for i in 0..nt-1
ti = i*dt-2.0*exp(-0.1*zj)
u[i,j] = uz*sin(3.0*ti)
end
end
#-- graph ----
Dev.open
Frame.new
Fig.window=[tmin, tmax, zmin, zmax]
Axis.title('TIME', 'YEAR', 'HEIGHT', 'km')
Axis.draw
Contour.draw(u)
Dev.close
PROGRAM U2D1