とりあえず使ってみよう

DCLグラフィクスではサブルーチンを数行呼ぶだけで,折れ線図や等高線図,2 次元ベクトル場などの作図が可能です.とりあえず,気楽に使ってみましょう.

とりあえず折れ線

データ解析でも数値計算でも一刻も早く計算結果が見たいものです.面倒な FORMAT を考えて,WRITE 文でたくさんの数字列をアウトプット して,それをじっくり眺めて...というようなことをやっていた時代もそ んなに昔のことではないのですが,そんな時, DCLを用いるとわずか数行でデー タをグラフ化できます.

まず,例題として,カオスを生み出す簡単なロジスティク模型を考えてみましょ う. y_n+1 = r y_n (1-y_n). r > r_ = 3.5700 でカオス解となりますが,次のFORTRANプログラム QUICK1 は,パラメータ r = 3.7, 初期値 y_0 = 0.5 として, y_50 まで求めて,グラフ化しようというものです.今は「おまじない」 である GROPN 等を含めても14行めからの4行で,自動的にスケールを決 めて作図してくれます.

quick/quick1.f

UNIX システムで DCL が標準的にインストールされている場合には,

% dclfrt -o quick1 quick1.f
によって quick1 という実行ファイルが作られます.X ウインドウシス テムが起動されている状態で
% quick1
といれると,ウインドウがひとつ現れて,ウインドウの位置を確定すると描画 がはじまり,下のようなグラフが得られます.このとき,次の警告メッセージ が出ることが多いと思いますが,特に気にする必要はありません.
*** WARNING (STSWTR) *** WORKSTATION VIEWPORT WAS MODIFIED.
図形表示の終了はマウスクリックで行ないます.


quick1.f: frame1

「おまじない」のGROPN および GRFRM サブルーチンで図形出力 装置を準備し,作画領域を設定します.実際にスケーリングを行なって折れ線 や座標軸を描いたのは,自動スケーリングパッケージ USPACK のなかの USGRPH というサブルーチンです.このサブルーチンは,(x,y)座標のデー タとその個数(NMAX+1)を与えると,それらを実線で結んでプロットしま す.描画終了の「おまじない」が GRCLS ルーチンです.これらの「お まじない」については,第[here], [here]章で説明します.

つぎに,USGRPH ルーチンの自動スケーリング機能の実力を示すために, プログラムQUICK2 で意地の悪いデータを与えて作図してみましょう.

quick/quick2.f

この例ではデータの変動幅が極端なのですが,結果はどうでしょうか.x軸 のラベルが重なったり,y軸に1.00005というような不細工なラベルを付けて, それが描画範囲を越えてしまったりという様なことは起こりません.与えられ たデータから適当な目盛間隔やラベルの間隔を求めて座標軸を描いているので すが,ラベルの文字数が大きすぎる場合には,この例のようにファクター値 (10^4, 10^-5)やオフセット値(1)を適当に選んで軸の端に表示し,ラベ ルが適当な文字数以内におさまるようにします.


quick2.f: frame1

QUICK2 のグラフ部分では15行めからの3行が増えていますが,これで図 形の出力先を実行時に決められるようになります.実行ファイルを作りこれを 実行すると,標準的な場合には

WORKSTATION ID (I) ? ;
1:X, 2:PS, 3:Tek ;
ときいてきます.GRPH1 のサブルーチン SGPWSN を呼んで,今の環境で 利用可能な「ワークステーション名」のリストを書き出しています.この場合, 3つの出力先が可能で,X ウインドウシステムが起動されている状態で1を入力 すると,QUICK1 の例と同様にウインドウが現れます.一方, 2 (PS)を 指定すると,カレントディレクトリに dcl.ps というポストスクリプトファイ ルができます.そこで,
% lpr dcl.ps
と入力すれば,ポストスクリプトプリンタに結果が出力されます.また,3 (Tek)を指定するとテクトロ端末で描画ができます.

自動スケーリング機能の USPACK サブルーチンを使って,さらに手のこんだ1 次元データの作図が可能です.それは,第[here]章で説明することに しましょう.

とりあえず等高線図

2次元のスカラー場を手早くコンタリングして見たいというときには,等高線 描画パッケージ UDPACK にあるサブルーチン UDCNTR を1つ呼ぶだけで 十分です.例題として,球面調和関数の重ね合わせ P^1_2( φ) (i λ)- P_2( φ) の実部を描いてみましょう(QUICK3).

quick/quick3.f


quick3.f: frame1

UDCNTR は等高線図を描くだけで,枠や座標軸を描いてくれませんから, この例ではまず,いくつかの「おまじない」(GRSWND, GRSVPT, GRSTRN, GRSTRF)で座標系を決め,USPACKのルーチン USDAXS を使っておまかせの座標軸を描画したのちに,UDCNTR を呼ん で等高線図を描いています.

UDCNTR の引数は,最初のP が作画しようとする場を与える2次元 配列,2番目のNX が実際に宣言した配列の第1次元寸法,3, 4番目の NX, NY がそれぞれ,作画に使う配列の第1次元および第2次元寸 法です.この例のように,宣言した配列をフルに用いて作画するときは,2番 目と3番目の引数は同じになりますが,第1次元目の寸法をこのように2つの引 数で指定するといいことがあります.その利点は第[here]節で説 明します.

この例のように UDCNTR だけを呼ぶ場合には,等間隔の格子点を設定し てコンタリングを行ないます.つまり,座標軸の目盛に関係なく,P(1,1) が左下隅, P(NX,NY) が右上隅にくるような等間隔の格子点座 標が設定されます.また,コンターレベルも自動的に決定されて,図の下にそ のコンター間隔が表示されます.

GRPH1 の ユーザーインターフェイス SGPACK には,折れ線を描いたり文字列 を描いたりする機能の他にも,多角形閉領域のぬりつぶしを行なう機能があり ます. UEPACK はこれに対応するトーンぬりつぶしの上位ルーチンですが, QUICK3 の例で UETONE サブルーチンを1つ呼ぶだけで,とりあえ ず負の領域に斜線のハッチをつけることができます(QUICK4). ここで UETONE を呼ぶのが31行めで,座標軸やコンターを描くよりも前である ことに注意しておきましょう.これらの順序を変えると,出力装置によっては 結果が異なります.それまでに描いた部分がぬりつぶされ消されてしまうこと があるのです.この点については,第[here]節,第 [here]節で詳しく説明します.

UDPACK や UEPACK, UWPACK の諸機能を使うことによって,高度な等高線図が 描けるようになります.カラーグラフィクスが利用できる環境では,このよう な等高線図を色の塗り分け(カラー グラデーション)で表現することも可能に なります.これらは,第[here], [here], [here]章で説 明することにしましょう.

quick/quick4.f


quick4.f: frame1

とりあえず2次元ベクトル場

今度は,2次元のベクトル場を手早く矢印で見たいというときの例題です.次 の QUICK5 は簡単な変形場を描くプログラムですが,GRPH2 の UGPACK にあるサブルーチン UGVECT 1つを呼ぶだけで十分です.前節の等高線 図の場合と同様に,おまかせの座標軸を描画したあとで UGVECT ルーチ ンを呼んでベクトル場を描いています.

この例では,やはり,等間隔の格子点を設定して,それぞれの格子点でのベク トルを矢印で表現します.おまかせ描画のときには,ベクトルの長さが格子点 間隔を越えないようにスケーリングファクターが決定され,それを乗じてベク トルが描かれます.この場合,x成分とy成分のスケーリングファクターは 同じになっていて,図の下部マージンにはその値が表示されています.

ベクトル場も UGPACK のルーチンを使うことによって高度な作図ができるよ うになります.これも第[here]章で説明することにしましょう.

quick/quick5.f


quick5.f: frame1


Back to Main


Latex Source


地球流体電脳倶楽部 : 95/6/9 (Version 5.0)

NUMAGUTI Atusi <a1n@gfdl.gov>
Last Modified: Thu Aug 31 13:11:42 EDT 1995