もっと2次元量表示

ここでは UEPACK と UGPACK の進んだ使い方を見てみましょう.

UEPACK はU-座標系で作画しているので,後で述べる地図投影にも対応できま すが,UGPACK はV-座標系で作画しているので地図投影には対応していません.

トーンパターンを指定する

[here]節の例のように,ただ負の領域に斜線のハッチをつける だけでは芸がありません.UEPACK を活用すれば,トーンをつけるレベルやパ ターンを指定することができるようになります(U2D5).

トーンの指定は,必要なレベルの分だけ UESTLV ルーチンを呼ぶことに よっておこないます(37行め). 最初の2つの引数によってぬりわけるレベルの 下限値と上限値を指定し,最後の引数でトーンパターン番号を指定します.トー ンパターンは巻末付録を御覧下さい.UESTLN というルーチンを用いれ ば,複数の塗り分けるレベルとパターンを配列で一度に指定することもできま す.また,UDGCLA, UDGCLB ルーチンと同様のトーンレベル生成 ルーチン UEGTLA, UEGTLB もあります.

この例も,第[here]節と同じようにコンターとの重ね書きをおこ なっていますが,プログラム構成で異なるところがあります.それは,SGLSET ルーチンで内部変数 'LSOFTF'.TRUE. として,ソフ トフィルを指定しているために,座標軸の描画やコンタリングのあとで UETONE ルーチンを呼んでも問題ないということです.UEPACK のハッチング は SGPACK のトーンプリミティブを用いていますが,トーンプリミティブは出 力装置の能力に応じてハードフィルとソフトフィルとを切替えることができま す.ハードフィルによるぬりわけを行なう場合,出力装置によっては先に描か れた図形が消えてしまうことがあるので,QUICK4 のプログラム例では, UETONE を最初に呼んでいるわけです.しかし,この例ではソフトフィ ルを指定したので,描く順番を気にしなくてもよいわけです.

u2d2/u2d5.f


u2d5.f: frame1

ベクトル場のスケーリング

2次元ベクトル場を描くサブルーチン UGVECT では,ベクトルの各成分 をV-座標系における単位で表現しています.ただし実際には,V-座標系の単位 に変換した配列を与える必要はなく,スケーリングファクターを与えてやれば 十分です.このスケーリングファクターは,内部変数 'LNRMAL'.TRUE.(初期値)ならば内部的に決定され,.FALSE. ならば内部変 数 'XFACT1', 'YFACT1'を参照します.したがって,このデモプ ログラム(U2D6)のように,スケーリングファクターを陽に指定する場合 は,UGLSET ルーチンで 'LNRMAL'.FALSE. として UGRSET'XFACT1''YFACT1' を設定します.ここで は,UV の値が1桁違いますから,XFACT1=0.5, YFACT1=0.05 としました.たとえば,ベクトル (U,V)=(0.1,1) は,V- 座標系単位で (0.05, 0.05) の大きさのベクトルとして表示されます.つまり, スケーリングファクターとは,次元量として与えられたベクトルの成分をV-座 標系の単位で表現される矢印の成分に変換するための比例係数なのです.

またこの例では,内部変数 'LUNIT'.TRUE. としてユニット ベクトルを描いています.(この初期値は .FALSE.で,ユニットベクト ルを描きません.)表示するユニットベクトルの大きさは,V-座標系の単位を 用いて内部変数 'VXUNIT', 'VYUNIT' をそれぞれ0.1に設定して います.もしも次元量で指定したいならば,内部変数 'UXUNIT', 'UYUNIT' を設定することでユニットベクトルを描くこともできます.UGSUT ルーチンを用いると,このユニットベクトルにタイトルをつけること ができます.x成分は 'U', y成分は 'V' としました.なお, 図の下部に表示されているユニットベクトルの大きさXUNIT, YUNIT は次元量 です.この例のように,ユニットベクトルの大きさをV-座標系の単位で指定し た場合は,それぞれをスケーリングファクターで割った値となります.

UGPACKが図の下に書くメッセージについてですが,ユニットベクトルを描かな いときにはスケーリングファクターが表示され,ユニットベクトルを描くとき にはユニットベクトルの大きさが表示されます.ユニットベクトルを描くとき にも,内部変数 'LUMSG'.FALSE. とすることによってスケー リングファクターの表示に切替えることもできます.また,メッセージを何も 描かせたくないときには,内部変数 'LMSG'.FALSE. としま す.

u2d2/u2d6.f


u2d6.f: frame1

等高線とベクトル場の重ね書き

2次元量表示の最後のプログラム例 U2D7 は,等高線とベクトル場の重 ね書きです.これまでに見てきた内容の描画を1つのフレームにまとめたもの です.'UDLSET' ルーチンで等高線図に関する内部変数 'LABEL''LMSG'.FALSE. にして,ラベルとメッセージを描かない ように設定し,そのかわり,右側にトーンバーをつけるようにしました.61行 め以降で,もう一度正規化変換を行ない,UDCNTRUETONE ルー チンでトーンバーを描いています.

u2d2/u2d7.f


u2d7.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:48 EDT 1995