6.1 等高線図

格子点で与えられた2次元のスカラーデータを手早く等高線図で描きたいとい うときには, サブルーチン UDCNTR を呼びます(U2D1). UDCNTR ルーチンは等高線を描くだけですから, まず正規化変換を設定します. ウインドウはGRSWND ルーチンで[TMIN,TMAX]×[ZMIN,ZMAX]( [0,5]×[20,50])と陽に設定 しますが, ビューポート([0.2,0.8,] ×[0.2,0.8,] )と変換関数番号(1: 直角一様座標)は括弧内の初期値を用いるので, USPFIT ルーチンを呼び, さらに GRSTRF ルーチンでこれらを確定しています.

次に, USSTTL ルーチンで座標軸タイトルの情報を与え, USDAXS ルーチンでおまかせの座標軸を描きます.

そして, 最後に UDCNTR ルーチンを呼んで等高線を描きます. 現在設定 されているウインドウいっぱいに等間隔の格子点が設定されて,コンタリング が行なわれます. つまり, 座標軸の目盛に関係なく, U(1,1) が左下隅, U(NT,NZ) が右上隅にくるように等間隔の格子点座標が設定されます. コンターレベルは自動的に決定され, 図の下にそのコンター間隔が表示されま す. UDCNTR の引数の2番目以降で配列の寸法を指定しますが, 第1次元 寸法を2度指定するのは, 配列の一部分だけを作画できるようにするためです. この例のようにデータ全部を描く場合は, 2番目の引数と3番目の引数を同じ (NT)にします.

      PROGRAM U2D1

      PARAMETER( NT=51, NZ=21 ) 
      PARAMETER( TMIN=0, TMAX=5, ZMIN=20, ZMAX=50 ) 
      PARAMETER( DT=(TMAX-TMIN)/(NT-1), DZ=(ZMAX-ZMIN)/(NZ-1) ) 
      REAL U(NT,NZ) 
 
*- データ -- 
      DO 10 J=1,NZ 
        Z  = (J-1)*DZ 
        UZ = EXP(-0.2*Z)*(Z**0.5) 
        DO 20 I=1,NT 
          T = (I-1)*DT - 2.*EXP(-0.1*Z) 
          U(I,J) = UZ*SIN(3.*T) 
   20   CONTINUE 
   10 CONTINUE 
 
*- グラフ -- 
      WRITE(*,*) ' WORKSTATION ID (I)  ? ;' 
      CALL SGPWSN 
      READ (*,*) IWS 
 
      CALL GROPN( IWS ) 
      CALL GRFRM 
 
      CALL GRSWND( TMIN, TMAX, ZMIN, ZMAX ) 
      CALL USPFIT 
      CALL GRSTRF 
 
      CALL USSTTL( 'TIME', 'YEAR', 'HEIGHT', 'km' ) 
      CALL USDAXS 
 
      CALL UDCNTR( U, NT, NT, NZ ) 
 
      CALL GRCLS 
 
      END 
 
PROGRAM U2D1

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