%表題   らくらくDCL
%
%履歴
%\Drireki{
%         95/04/13 余田 成男
%        }
%
%\Dchapter{もっと2次元量表示}
\Dchapterhead
\label{c:u2d2}

ここでは UEPACK と UGPACK の進んだ使い方を見てみましょう.
\vspace{1em}

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

%-----------------------------------------------------------------------
\section{トーンパターンを指定する}
\label{s:u2d2_ton}

第\ref{s:quick_con}節の例のように, ただ負の領域に斜線のハッチをつける
だけでは芸がありません. UEPACK を活用すれば, トーンをつけるレベルやパ
ターンを指定することができるようになります({\tt U2D5}).
\vspace{1em}

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

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

\Dproginput{u2d2/u2d5.f}

\begin{center}
\Depsf[10cm]{u2d2/u2d5.eps}\\
{\bf u2d5.f: frame1}\\
\end{center}


%-----------------------------------------------------------------------
\section{ベクトル場のスケーリング}

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

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

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

\Dproginput{u2d2/u2d6.f}
\vspace*{5em}

\begin{center}
\Depsf[10cm]{u2d2/u2d6.eps}\\
{\bf u2d6.f: frame1}\\
\end{center}


%-----------------------------------------------------------------------
\section{等高線とベクトル場の重ね書き}
\label{s:u2d2_w}

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

\Dproginput{u2d2/u2d7.f}

\begin{center}
\Depsf[10cm]{u2d2/u2d7.eps}\\
{\bf u2d7.f: frame1}\\
\end{center}

