2次元図における欠損値処理

格子点の値が欠損値のときでも, 欠損値処理の指定をすることによって, 2次元量表示サブルーチンでも欠損値処理を して作図できます.
下のプログラムの例では, 格子点値の一部分を欠損値MISSING_REAL (この値はDclGetParm ルーチンで設定されている実数欠損値を 参照しました)として, 欠損値処理の指定をおこなって作画しています. 欠損 値処理の指定は, やはり DclSetParm ルーチンによって内部変数 'INTERPRET_MISSING_VALUE'.TRUE. とすることによっておこないます. この実行結果 からもわかるように, 欠損値のまわりの格子点を境界としてコンターやトーン が描かれません.

2次元ベクトル場を作画する DclDrawVectors でも, 同様の欠損値処理を行ないます. DclDrawVectors ルーチンでは, ベクトルの少なくとも1成分が欠損値の時にはベ クトルを描きません. DclSetParm ルーチンで内部変数 'ENABLE_MISS_VECTOR_MARKER'.TRUE. にすると, 欠損値ベクトルの格子点にマーカー×を描きます. この印のマーカータイプやマーカーサイズは, やはり, DclSetParmルーチンでそれぞれ対応する内部変数 'MISS_VECTOR_MARKER_TYPE', 'MISS_VECTOR_MARKER_SIZE' を設定することにより変更できます.

miss02.f90
program miss02

  use dcl

  integer,parameter :: nx=36, ny=36
  real,parameter :: xmin=0, xmax=360, ymin=-90, ymax=90
  real,parameter :: pi=3.14159, drad=pi/180
  real :: p(0:nx,0:ny)

    call DclGetParm( 'MISSING_REAL', rmiss )
    call DclSetParm( 'INTERPRET_MISSING_VALUE', .true. )

    do j=0,ny
      alat = ( ymin + (ymax-ymin) * j/ny ) * drad
      slat = sin(alat)
      do i=0,nx
        alon = ( xmin + (xmax-xmin) * i/nx ) * drad
        p(i,j) = 3*sqrt(1-slat**2)*slat*cos(alon) - 0.5*(3*slat**2-1)

        if( i==6 .and. j==6 ) then
          p(i,j) = rmiss
        end if
        if( ( 8 <= i .and. i <= 24) .and. j==30 ) then
          p(i,j) = rmiss
        end if
        if( (22 <= i .and. i <= 30) .and. (12 <= j .and. j <= 20) ) then
          p(i,j) = rmiss
        end if
      end do
    end do

    call DclOpenGraphics()
    call DclNewFrame

    call DclSetWindow( xmin, xmax, ymin, ymax )
    call DclSetViewPort(  0.2,  0.8,  0.2,  0.8 )
    call DclSetTransFunction

    call DclShadeContour( p )
    call DclDrawScaledAxis
    call DclDrawContour( p )

    call DclCloseGraphics

end program



関連リンク