格子点の座標を設定する

2次元の格子点座標に関する情報を管理するサブルーチンが用意されています. DclDrawContour を呼ぶ前にこれらのサブルーチンを呼んで格 子点の座標値をあらかじめ指定しておけば, 不等間隔な格子点でもコンタリン グが可能になります.

この例では, これまでと同じ2次元配列データですが, y方向にはサイン緯度 (-1から1の値を取る)の座標系を設定してコンタリングをおこなっています. ま ず, 配列 UY1 に格子点の座標をユーザー座標系の値で用意します. UY2 は, DclDrawAxisSpecify ルーチンでy座標軸のラベルを描くために, その座標値を 用意する配列です. 38行めではDclDrawAxis ルーチンでx方向の座標軸 を等間隔に刻んで描きます. 次に, DclDrawAxisSpecify ルーチンで データのある格子点に目盛をつけ, 緯度30度毎にラベルをつけます. 詳しくは座標軸についての項目を 参照してください.

次に, x方向については, DclSetXEvenGrid ルーチンを用いて, 最小値, 最大値 および格子点数を指定することによって, 格子点座標に関する情報を設定しています. ただし, ここでは格子点をウインドウいっぱいに設定するようにしている だけなので, DclSetXEvenGrid ルーチンを呼ばなくても結果は同じです. そして, DclSetYGrid ルーチンを用いて不等間隔の格子点を設定しています. 引数は, 座標値を指定する配列名 UY1を与えます. x軸に不等間隔の格子 点を設定するには, DclSetXGrid ルーチンを用います.

あとは, DclDrawContour ルーチンを呼ぶと, 格子点が不等間隔の場合でも 等高線図を描くことができます.

 

2d02.f90
program sample_2d02

  use dcl
  integer,parameter :: nx=18, ny=18
  real,parameter :: xmin=0, xmax=360, dx1=10, dx2=60
  real,parameter :: ymin=-90, ymax=90
  real,parameter :: pi=3.141592, drad=pi/180, dz=0.05
  integer,parameter :: my=6, nc=3

  real ::      p(0:nx, 0:ny), uy1(0:ny), uy2(0:my)
  character(len=nc),dimension(0:my) :: ch

    ch = (/ 'SP ', '60S', '30S', 'EQ ', '30N', '60N', 'NP ' /)

    do j = 0, ny
      alat = ( ymin + (ymax-ymin) * j/ny ) * drad
      slat = sin(alat)
      uy1(j) = slat
      do i = 0, nx
        alon = ( xmin + (xmax-xmin) * i/nx ) * drad
        p(i,j) = cos(alon) * (1-slat**2) * sin(2*pi*slat) + dz
      end do
    end do

    do j = 0, my
      alat = ( ymin + (ymax-ymin) * j/my ) * drad
      slat = sin(alat)
      uy2(j) = slat
    end do

    call DclOpenGraphics()
    call DclNewFrame

    call DclSetWindow( xmin, xmax, uy1(1), uy1(ny) )
    call DclSetViewPort( 0.2, 0.8, 0.2, 0.8 )
    call DclSetTransFunction

    call DclDrawAxis( 'bt', dx2, dx1 )
    call DclDrawTitle( 'b', 'LONGITUDE', 0.0 )

    call DclDrawAxisSpecify( 'lr', uy2, uy1, ch )
    call DclDrawTitle( 'l', 'LATITUDE', 0.0 )

    call DclSetXEvenGrid( xmin, xmax, nx+1 )
    call DclSetYGrid( uy1 )

    call DclSetContourLabelFormat( '(f6.1)' )
    call DclSetContourLevel( p, 0.2 )
    call DclSetContourLine( 0.1, index=1, type=4, height=0.01 )

    call DclDrawContour( p )

    call DclCloseGraphics

end program



関連リンク

DclSetXGrid
(UWSGXA)
格子点配列の格子点X座標を各座標値で設定する.
DclSetYGrid
(UWSGYA)
格子点配列の格子点Y座標を各座標値で設定する.
DclSetXEvenGrid
(UWSGXB)
格子点X座標を等間隔に設定する.
DclSetYEvenGrid
(UWSGYB)
格子点Y座標を等間隔に設定する.

* 括弧の中は、対応するf77インターフェイス名.