(Library) 流線描画ルーチン

作成者:大塚 成徳

概要

DCLを用いて流線を描くための拡張ライブラリです。 現状ではまだかなり制限の多い仕様です。

  • 直交座標系。
  • x, y共に同じ格子間隔、等間隔格子。
  • 格子の値は単調増加。
  • u, vの次元はx, yの次元を時間で割ったもの。つまり流速が[m/s]ならば格子は[m]でなければならない。

また流線を描く過程で多くのマジックナンバーが使われており、 与えるデータに応じて適切に変える必要がありますが、 現在はソースコードに直書きなので変えることが出来ません。

インストール

資源を展開して、トップディレクトリに cd して、次のようにします。

% ruby extconf.rb
% make
% make install

使用法

サンプルが test.rb にあります。

#!/usr/bin/env ruby

require "numru/dcl"
require "numru/dclext_streamline"

include NumRu

#格子点数
nx = 40
ny = 40
#格子間隔
dl = 1

#格子点情報を二次元配列で作る
x = NArray.sfloat(nx,ny).indgen!(0,dl) % nx
y = (NArray.sfloat(ny,nx).indgen!(0,dl) % ny).transpose(1,0)

#流速場の設定
u = NArray.sfloat(nx,ny)
v = NArray.sfloat(nx,ny)
u = -10.0 * NMath.sin(NMath.atan2(x-(nx/2),y-(ny/2)))
v =  10.0 * NMath.cos(NMath.atan2(x-(nx/2),y-(ny/2)))

DCL.gropn(1)
DCL.grfrm
DCL.grswnd(x.min,x.max,y.min,y.max)
DCL.grsvpt(0.2,0.8,0.2,0.8)
DCL.grstrf
DCL.usdaxs

#ベクトル場の描画
DCL::ugvect(u,v)

#流線の密度
idensity = 40
#線種
type = 1
#線の太さ、色
index = 21
#流線の描画
DCLExt::streamline(u,v,x,y,dl,idensity,type,index)

DCL.grcls

test.gif

使用例

以下はGfdnaviに組み込んで描画した例です。

gfdnavi_streamline_demo.png gfdnavi_streamline_demo_map_latlon.png

更新履歴

  • 2008/12/31 バグ修正(dclext_streamline.20081231.tgz)
  • 2008/2/18 サンプルプログラム掲載(dclext_streamline.20080218.tgz)
  • 2008/2/16 アップデート(dclext_streamline.20080216b.tgz, streamline.yml)
  • 2008/2/16 作成(dclext_streamline.20080216.tgz, streamline.yml)
更新日時:2008/02/18 13:02:18
キーワード:[Extension library] [Streamline] [拡張ライブラリ] [流線]
参照: