cont2d - Ngraphで等高線を描くプログラム

実験や数値計算で得られる温度や圧力などの物理量の2次元分布は, 空間を多数の2次元格子に分けて, 各格子点における値で表現する場合が多くあります. 本プログラムはこのような2次元格子点状に与えられた数値から, その等高線の座標データと, それを Ngraph で描画するための補助スクリプトを作成します. Tcl/TK で作成したGUIプログラムの中から Ngraph を起動すると比較的容易に描画できます。本プログラムは FORTRANサブルーチン ng2d のサンプルプログラムとして作成したものです。

1. 動作環境

2.ファイル構成

3.インストール

3-1 用意するもの

3-2 コンパイルとインストール

3-3 GUIのインストール

3-4 Ngraph アドイン

4.使用方法

4-1 データフォーマット

4-2 コマンドライン版の実行

4-3 Ngraphによる描画

4-4 GUI版(cont2d)の実行

5. 使用例

6.著作権、免責、配布など

7.変更履歴

ダウンロード

ダウンロードはファイル名をNetscapeなどのブラウザで右クリックしてリンクを保存してください

cont2d.1.02.tar.gz

道具箱ホームページ
ご意見、ご要望は Amane Tanaka へ

1.動作環境

  FORTRAN77コンパイラと Tcl/Tk と Ngraph が必要です。
 

 また本プログラムは拙作のサブルーチン 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開発など、もし協力してもいいという方がおられましたらよろしくお願いします。

top

2.ファイル構成

  cont2d       Tcl/Tk GUI
  cont2d.tcl   Tcl/Tk GUI ( Windows 用 )
  contchk.f    入力ファイルチェックプログラム
  cont2dc.f    カラー等高線プログラムソース
  cont2dm.f    モノクロ等高線プログラムソース
  cont2df.f    等高線カラー塗り分けプログラムソース
  makefile     g77 でコンパイルする場合の makefile
  doc/         HTMLドキュメント
top

3.インストール

3-1 用意するもの

  ng2d.0.7.tar.gz
  cont2d.1.0.tar.gz

を次のように解凍します.

  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 を使用すれば同じ手続きで解凍できます。

3-2 コンパイルとインストール

ディレクトリ cont2d の makefile の

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 を通したディレクトリにコピーして下さい。
 

3-3 GUI

ディレクトリ cont2d の中にある cont2d は Tcl/Tk で作成した GUI スクリプトです.
スクリプトの冒頭の

#!/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 はコピーされないので注意してください。治
 

3-4 Ngraph アドイン

ng2d に含まれる part.nsc を Ngraph をインストールしたディレクトリにコピーします。
Ngraph を起動して

設定->アドインスクリプト->追加

名称: PART
スクリプト: (Ngraphをインストールしたディレクトリ)/part.nsc

を入力して OK ボタンを押し

設定->初期状態としてセーブ(各種設定)->スクリプト設定

をチェックして OK ボタンを押してください。

top

4.使用方法

4-1 データフォーマット


    ・−・−・−・−・−・−・  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 と考えて下さい。
 

4-2 コマンドライン版の実行

cont2dc    カラー等高線
cont2dm  モノクロ等高線
cont2df  カラー塗り分け

はコマンドラインから実行できるプログラムです. 使用方法はほぼ同じなので 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 では空間を小さな矩形に再分割して塗りつぶすので、その分割数を入力します。
格子の数の数倍程度に設定するとよいでしょう。少なすぎるとモザイクのようになります。
 

4-3 Ngraphによる描画

Ngraphを起動し

グラフ -> アドイン -> PART を選択してOK

というようにメニューを進み, hoge_frm.part を選択 Data Window に hoge_frm.dat がセットされます。 Draw ボタンを押すと格子の枠線が表示されます. 同様に hoge.part を選択すると等高線が描かれ、hoge_grd.partを選択すると格子線が描かれます。  
 

4-4 GUI版(cont2d)の実行


コマンドラインから

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 ボタンで終了します。

top

5.描画例


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 ボタンを押して同様な操作を行うとカラー塗り分けになります。

top

6. 著作権、免責、配布など


cont2d のソフトウエアパッケージ(ソースコード、付属ドキュメント)の著作権は田中周(たなかあまね)が有します。本パッケージを使用するものは営利、非営利を問わず自由に使用することができます。ただし、このことによって生じるいかなる損害も著作者は責任を負いません。自己の責任においてご使用ください。本パッケージを第3者に配布する場合は第3者もまた自由に使用することができるようパッケージの内容をすべて添付して下さい。

本パッケージは拙作のサブルーチン ng2d のサンプルプログラムとして開発したものです。したがってこれを自由に改編したり、
使用者のプログラムに組み込んだりすることは全く問題ありません。本プログラムを使用者の用途に合わせて改編したり組み込んだりしたものは本プログラムとは別の著作物となると考えますので、それに対して私が著作権を主張することはありません。しかしながら第3者に配布する場合は本プログラムを参照した旨を明記していただけるとありがたいです。

top

7.変更履歴

Tue May 11 2000     Ver.1.0

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 関数にリミッタを付加)
                                                    等比的分割時の分割数が多くなることの修正

 

top