コンター値の設定

2.2節で扱ったデータを用いて, コンターラインをユーザー の好みで制御することを考えてみましょう(U2D1).

      PROGRAM U2D1

      PARAMETER( NX=37, NY=37 )
      PARAMETER( XMIN=0, XMAX=360, YMIN=-90, YMAX=90 )
      PARAMETER( PI=3.14159, DRAD=PI/180 )
      REAL P(NX,NY)

      DO 10 J=1,NY
      DO 10 I=1,NX
        ALON = ( XMIN + (XMAX-XMIN)*(I-1)/(NX-1) ) * DRAD
        ALAT = ( YMIN + (YMAX-YMIN)*(J-1)/(NY-1) ) * DRAD
        SLAT = SIN(ALAT)
        P(I,J) = 3*SQRT(1-SLAT**2)*SLAT*COS(ALON) - 0.5*(3*SLAT**2-1)
   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 UDSFMT( '(F4.1)' )
      CALL UDGCLA( 0., 1.4, 0.2 )
      CALL UDSCLV( -1., 3, 4, 'abc', 0.028 )
      CALL UDDCLV( 0.6 )
      CALL UDCNTR( P, NX, NX, NY )

      CALL GRCLS

      END


\resizebox{10cm}{!}{\includegraphics{u2d1/u2d1.eps}}
u2d1.f: frame1

デフォルトではラベル付きの太線が1本おきに引かれますが, これをメジャー ラインとよびます. このメジャーラインに付いているコンターラベルのフォー マットは, UDSFMT ルーチンで設定できます. 29行めのように, 指定す るフォーマットを文字型で与えます. コンターラインにつけるラベルは, コン ターレベルを決定するルーチンの中で生成されますから, UDSFMT ルー チンはコンターラインを生成するルーチン(UDGCLAUDGCLB)の 前に呼ばなければなりません.

コンターラインの生成ですが, ここでは, UDGCLA ルーチンで等間隔の コンターレベルを生成します. 最初の2つの引数がコンターレベルの最小値と 最大値で, 30行めの例では負のコンターは描かれません. 最後の引数は刻み 幅ですが, これが負の時にはその絶対値程度の本数のコンターレベルを生成し ます.

これらのルーチンでは, 等間隔のコンターレベルしか生成されません. もしも, 不等間隔のコンターレベルを指定したい場合や, 特定のコンターレベルを追加 したい場合は, 31行めのように UDSCLV ルーチンで1本1本のコンターレ ベルを生成します. 最初の引数がコンターレベルの値で, 残りの4つがコンター ラインの属性です. 順に, ラインインデクス, ラインタイプ, ラベル, V-座標 系におけるラベルの大きさ, です. 逆に, ある1本のコンターレベルを無効に するには UDDCLV ルーチンを呼びます. 引数はコンターレベルの値で, この例では, 0.6の等高線を描いていません. また, すべてのコンターレベル を無効にするには UDICLV ルーチンを呼びます.

あとは, 同じ UDCNTR ルーチンを呼ぶだけです. このプログラムを実行すると, 次のようなメッセージが出るはずです.

*** MESSAGE (UDCNTR) *** INAPPROPRIATE DATA WILL BE MODIFIED INTERNALLY.
*** MESSAGE (-CNT.-) *** Z( 1, 1)= -1.00000000 ===> -1.00000119
UDCNTR では, ある格子点での値がコンターレベルと等しい時に, 格子 点値をわずかにずらして作画し, このようなメッセージを出力します. たいて いの場合, このメッセージを気にする必要はありません.

関連リンク