また本プログラムは拙作のサブルーチン ng2d (http://www01.u-page.so-net.ne.jp/bd5/amane/ng2d/doc/ng2d.html)を使用します。別途入手して下さい。
開発環境は
Vine Linux 1.1 (http://vinelinux.org/)
g77 version egcs-2.90.29
tcl8.0jp/tk8.0jp
Ngraph 6.03.06
で次の環境で動作確認してます.
Windows98 + Cygwin1.1 (http://sourceware.cygnus.com/cygwin/) のg77 + Tcl/Tk8.3(http://dev.scriptics.com/) + Ngraph 6.3 for Windows
Cygwinをインストールすると別のバージョンのTcl/Tkもひとりでにインストールされます。それでも使用できると思います。
商用のFortran コンパイラをもってる場合はそれでも使えると思います。その場合
Tcl/Tk のみ入手すればよいでしょう。
私自身の開発環境は、公私ともにUNIXを主にしているので、Windows 版の動作についてはあまり明るくありません。あくまでも自己責任でおねがいします。
また、商用コンパイラによるWindows 版のバイナリ配布や独自のGUI開発など、もし協力してもいいという方がおられましたらよろしくお願いします。
を次のように解凍します.
tar zxvf ng2d.0.7.tar.gz
cd ng2d
tar zxvf ../cont2d.1.0.tar.gz
ディレクトリ ng2d 以下に展開されるファイルのうち必要なものは以下のものです。
ng2d ----- ng2d.f 等高線ベクトル用サブルーチン
ng2d
|-- ng2d_par.f
ng2d の作業配列の大きさを定義するパラメータファイル
|-- part.nsc
Ngraphのアドインスクリプト
|-- cont2d
----- cont2d
|-- cnotchk.f
|-- cont2dc.f
|-- cont2dm.f
|-- cont2df.f
|-- makefile
Windows でも cygwin などの tar を使用すれば同じ手続きで解凍できます。
INSTALLDIR=/home/amane/bin
F77=g77 -O4
をインストール先のディレクトリ、FORTRAN コンパリラに合わせて変更してください。
make
すると
contchk, cont2dc, cont2dm, cont2df
が作成されます. 基本的にはこれらのプログラムをコンパイルする際にひとつ上のディレクトリのng2d.o をリンクするようにしてるだけなので適宜 makefile を変更してください。
make install
でインストールできます。
Windows98+Cygwin1.1 の場合も同様に makeできます。また、実行ファイルには当然
exe の拡張子がつきます。これらを c:\autoexec.bat で PATH を通したディレクトリにコピーして下さい。
#!/usr/bin/wish
をインストールされてる Tcl/Tk に合わせて変更してください。そしてこのスクリプトも実行パスが通ったディレクトリにコピーしてください。
make install
でもコピーされます。
Windows で cygwin 環境の の コマンドラインから実行できるようにするためには、cont2d.tcl の冒頭を、
#!/bin/cygwish80 c:\bin\cont2d.tcl
のように cygwin 環境式のディレクトリパスで wish コマンドを記した後に
windows 式のディレクトリパスで cont2d.tcl のパスを書くというように変更してから、パスの通ったインストール先のディレクトリにコピーしてください。このようにすると
cygwin の bash などのコマンドラインから実行できるようです。また .tclファイルを、インストールされている
Tcl/Tk の wish と関連付すれば マウスクリックで起動できます。Cygwin 付属Tcl/Tk
の場合の wish はデフォルトで c:\cygwin\bin\cygwish80.exe です。make install
では cont2d.tcl はコピーされないので注意してください。治
設定->アドインスクリプト->追加
名称: PART
スクリプト: (Ngraphをインストールしたディレクトリ)/part.nsc
を入力して OK ボタンを押し
設定->初期状態としてセーブ(各種設定)->スクリプト設定
をチェックして OK ボタンを押してください。
・−・−・−・−・−・−・ ny
| | | | | | |
・−・−・−・−・−・−・
| | | | | | |
・−・−・−・−・−・−・
| | | | | | |
・−・−・−・−・−・−・
| | | | | | |
・−・−・−・−・−・−・ 2
| | | | | | |
・−・−・−・−・−・−・j=1
i=1 2
nx
上図のような2次元格子を考え,横方向左から i 番目、縦方向下から j 番目の格子の座標を x(i,j), y(i,j), 等高線にしたい値を z(i,j) とします. そしてデータファイルはテキストファイルで次のようなフォーマットとします.
---- 次の行から --------------------------------------------------
データを説明するコメントなど数行
x( 1, 1) ・・・ y( 1, 1) ・・・ z( 1, 1) ・・・ msk( 1, 1)
・・・
x( 2, 1) ・・・ y( 2, 1) ・・・ z( 2, 1) ・・・ msk( 2, 1)
・・・
・ ・ ・ ・
・ ・ ・ ・
・ ・ ・ ・
x(nx, 1) ・・・ y(nx, 1) ・・・ z(nx, 1) ・・・ msk( 1, 1)
・・・
x( 1, 2) ・・・ y( 1, 2) ・・・ z( 1, 2) ・・・ msk( 1, 2)
・・・
x( 2, 2) ・・・ y( 2, 2) ・・・ z( 2, 2) ・・・ msk( 2, 2)
・・・
・ ・ ・ ・
・ ・ ・ ・
・ ・ ・ ・
x(nx, 2) ・・・ y(nx, 2) ・・・ z(nx, 2) ・・・ msk(nx, 2)
・・・
x( 1, 3) ・・・ y( 1, 3) ・・・ z( 1, 3) ・・・ msk( 1, 3)
・・・
・ ・ ・ ・
・ ・ ・ ・
・ ・ ・ ・
x(nx,ny) ・・・ y(nx,ny) ・・・ z(nx,ny) ・・・ msk(nx,ny)
・・・
---- 上の行まで ---------------------------------------------------
ix iy iz imsk iend
・データはスペースまたはカンマで区切って下さい。
・データファイルの先頭には適当なコメントを数行いれることができます.
・データは各行がひとつの格子点に対応します.
・データの順番は, 左下の格子点から始めて, 格子を左から右に向かって進み右端で一つ上の左端に進みます.
・最低限必要なデータは x(i,j), y(i,j) および z(i,j) です。
・msk(i,j) は, 実験などで測定できなかった点や計算が発散する点などをマスク
するるためのフラグで msk(i,j) がゼロでないところは等高線を描きません.
マスクする必要がなければいりません。プログラム内部では実数として読み込み整数に変換します.
・各行には含まれるデータは 100 個までとし, その数を iend とします.
・各行の中で x(i,j), y(i,j), z(i,j), msk(i,j) はそれぞれ, 行頭から
ix, iy, iz, imsk 番目のデータであるとします. msk(i,j)が不要の場合は imsk
= 0 と考えて下さい。
はコマンドラインから実行できるプログラムです. 使用方法はほぼ同じなので
cont2dc について説明します。
コマンドラインから
cont2dc
と入力します. 画面の指示に従って入力データに関する情報を入力します.
input filename?
データファイル名
skip lines?
読み飛ばすコメントなどの行数
nx ny?
格子サイズ
ix iy iz imsk iend? 各行の中でのデータの位置 ix,iy,iz,imsk
および
各行に含まれるデータ数 iend を入力します.
入力データが読み込まれ, 最小値と最大値が表示されます.
zmin = xxxx zmax = xxxx
出力ファイルの設定をします.
number of contour levels? 等高線の数
output filename?
出力データファイルのプレフィックス
level 1?
等高線のレベルを小さい順に入力します
level 2?
出力データファイルのプレフィックスを hoge とすると
hoge.part
等高線のデータタイプ、凡例などを設定する Ngraph スクリプト
hoge.1, hoge.2, ...
等高線データファイル(カラーの場合)
hoge.dat
等高線データファイル(モノクロの場合)
hoge_grd.part, hoge_grd.dat 格子線を描くための設定ファイルとデータファイル
hoge_frm.part, hoge_frm.dat 格子の枠線を描くための設定ファイルとデータファイル
などのファイルが出力されます。
cont2df の場合はさらに
ires jres? x方向およびy方向の分割数
を入力します。cont2df では空間を小さな矩形に再分割して塗りつぶすので、その分割数を入力します。
格子の数の数倍程度に設定するとよいでしょう。少なすぎるとモザイクのようになります。
グラフ -> アドイン -> PART を選択してOK
というようにメニューを進み, hoge_frm.part を選択 Data Window に hoge_frm.dat がセットされます。
Draw ボタンを押すと格子の枠線が表示されます. 同様に hoge.part を選択すると等高線が描かれ、hoge_grd.partを選択すると格子線が描かれます。
コマンドラインから
cont2d
と入力すると図のような画面が表示されます。
Input Data
データファイル名
Skip lines
読み飛ばすコメントなどの行数
nx ny
格子サイズ
x col, y col, z col mask end 各行の中でのデータの位置 ix,iy,iz,imsk
および
各行に含まれるデータ数 iend を入力します.
Output File
出力データファイルのプレフィックス(Windows の場合はフルパスで指定して下さい)
を入力し、右下の欄に等高線のレベルを小さい順に入力して、下部にある cont2dc, cont2dm, cont2df のボタンを押すとそれぞれのコマンドが実行され 4-2 で説明したような出力ファイルが作成されます.
Arithmetric sequential levels と Geometric sequential levels はレベルを等差数列的または等比数列的に設定するときの補助機能で、等高線の数 n に適当な値を入れて auto ボタンを押すと最小値と最大値から判断した初項、公差、公比などが表示されます。これを適当に変更して set ボタンを押すと右の欄に等高線のレベルが設定されます。
ngraphボタンを押すと ngraph が起動します。ボタンの横の data , grid, fram をチェックして してからボタンを押すと、それぞれ等高線、格子、枠が自動的に設定されます。
exit ボタンで終了します。
FORTRAN によるプログラム
--- sample.f --------------------------------------
program main
do 10 j=1,100
do 10 i=1,100
x=float(i)*0.1
y=float(j)*0.1
z=sin(x)*sin(y)
if ((i.eq.j).or.(i.eq.(101-j))) then
msk = 1
else
msk = 0
endif
write(*,*) x,y,z,msk
10 continue
stop
end
---------------------------------------------------
をコンパイルして
sample > sample.dat
として作った sample.dat から等高線を描きます.
sample.dat は
0.100000001 0.100000001 0.00996671245 1
0.200000003 0.100000001 0.0198338386 0
0.300000012 0.100000001 0.0295027941 0
0.400000006 0.100000001 0.0388769656 0
0.5 0.100000001 0.0478626937 0
0.600000024 0.100000001 0.0563701913 0
................
というようなデータで1カラム目が x, 2カラム目が y, 3カラム目が z,
4カラム目がマスク部分のフラグです。
sample.dat のあるディレクトリで
cont2d
と入力します.
Input Data からOutput File のあたりまで上のように入力します。
レベルは auto ボタンを押した後 Arithmetric sequencial levels (等差数列レベル)の
set ボタンを押すと右の欄に上図のように設定されます。 直接右欄を編集することもできるし、初項や公差、公比、等高線の数を編集して
set ボタンを押して描きたいレベルを設定することもできます。
cont2dc ボタンを押すと
cont.1〜 cont.11 : 等高線データファイル
cont.part : Ngraphスクリプト
cont_frm.dat : 枠線のデータファイル
cont_frm.part : Ngraphスクリプト
cont_grd.dat : 格子線データファイル
cont_grd.part : Ngraphスクリプト
が出力されます。
data および frame をチェックしてNgraph ボタンを押すと Ngraph が起動して、等高線と枠が描かれます。
対角線の部分がマスク領域です。(凡例は少し移動しました)
grid をチェックしてNgraph ボタンを押すと格子が表示されます。
cont2dc ボタンの代わりに cont2dm ボタンを押して同様な操作をすると、モノクロ等高線が描けます。
cont2df ボタンを押して同様な操作を行うとカラー塗り分けになります。
cont2d のソフトウエアパッケージ(ソースコード、付属ドキュメント)の著作権は田中周(たなかあまね)が有します。本パッケージを使用するものは営利、非営利を問わず自由に使用することができます。ただし、このことによって生じるいかなる損害も著作者は責任を負いません。自己の責任においてご使用ください。本パッケージを第3者に配布する場合は第3者もまた自由に使用することができるようパッケージの内容をすべて添付して下さい。
本パッケージは拙作のサブルーチン ng2d のサンプルプログラムとして開発したものです。したがってこれを自由に改編したり、
使用者のプログラムに組み込んだりすることは全く問題ありません。本プログラムを使用者の用途に合わせて改編したり組み込んだりしたものは本プログラムとは別の著作物となると考えますので、それに対して私が著作権を主張することはありません。しかしながら第3者に配布する場合は本プログラムを参照した旨を明記していただけるとありがたいです。
Tue May 17 2000 Ver.1.01 makefile を変更
Sun May 28 2000 Ver.1.02
makefileを変更(make install, make clean の追加など)
GUI : auto ボタンの動作の変更( split 部分の fix , ratio の計算時に
exp 関数にリミッタを付加)
等比的分割時の分割数が多くなることの修正