2次元ベクトル場を描くサブルーチン UGVECT では, ベクトルの各成分
をV-座標系における単位で表現しています. ただし実際には, V-座標系の単位
に変換した配列を与える必要はなく, スケーリングファクターを与えてやれば
十分です. このスケーリングファクターは, 内部変数 'LNRMAL' が
.TRUE.(初期値)ならば内部的に決定され, .FALSE. ならば内部変
数 'XFACT1', 'YFACT1'を参照します. したがって, このデモプ
ログラム(U2D6)のように, スケーリングファクターを陽に指定する場合
は, UGLSET ルーチンで 'LNRMAL' を .FALSE. として
UGRSET で 'XFACT1' と 'YFACT1' を設定します. ここで
は, U と V の値が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. としま す.
PROGRAM U2D6
PARAMETER( NX=11, NY=11 )
PARAMETER( XMIN=-1, XMAX=1, YMIN=-1, YMAX=1 )
REAL U(NX,NY), V(NX,NY)
DO 10 J=1,NY
DO 10 I=1,NX
X = XMIN + (XMAX-XMIN)*(I-1)/(NX-1)
Y = YMIN + (YMAX-YMIN)*(J-1)/(NY-1)
U(I,J) = X * 0.1
V(I,J) = -Y
10 CONTINUE
WRITE(*,*) ' WORKSTATION ID (I) ? ;'
CALL SGPWSN
READ (*,*) IWS
CALL GROPN( IWS )
CALL GRFRM
CALL GRSWND( XMIN, XMAX, YMIN, YMAX )
CALL GRSVPT( 0.2, 0.8, 0.2, 0.8 )
CALL GRSTRN( 1 )
CALL GRSTRF
CALL USDAXS
CALL UGLSET( 'LNRMAL', .FALSE. )
CALL UGRSET( 'XFACT1', 0.5 )
CALL UGRSET( 'YFACT1', 0.05 )
CALL UGLSET( 'LUNIT' , .TRUE. )
CALL UGRSET( 'VXUNIT', 0.1 )
CALL UGRSET( 'VYUNIT', 0.1 )
CALL UGRSET( 'VXUOFF', 0.06 )
CALL UGSUT( 'X', 'U' )
CALL UGSUT( 'Y', 'V' )
CALL UGVECT( U, NX, V, NX, NX, NY )
CALL GRCLS
END
PROGRAM U2D6