格子点の値が欠損値のときでも, 欠損値処理の指定をすることによって,
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' を設定することにより変更できます.
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 |
|