11.2 2次元量表示における欠損値処理

格子点の値が欠損値のときでも, 欠損値処理の指定をすることによって, UDPACK や UEPACK, UGPACK にある2次元量表示サブルーチンでも欠損値処理を して作図できます.

プログラム MISS2 の例では, 基本的には第2.2節の QUICK4 と同じプログラム構成で, ただし格子点値の一部分を欠損値 RMISS (この値はGLRGET ルーチンで設定されている実数欠損値を 参照しました)として, 欠損値処理の指定をおこなって作画しています. 欠損 値処理の指定は, やはり GLLSET ルーチンによって内部変数 'LMISS'.TRUE. とすることによっておこないます. この実行結果 からもわかるように, 欠損値のまわりの格子点を境界としてコンターやトーン が描かれません.

      PROGRAM MISS2

      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)

      CALL GLRGET( 'RMISS', RMISS )
      CALL GLLSET( 'LMISS', .TRUE. )

      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)
        IF( I.EQ.6 .AND. J.EQ.6 ) THEN
          P(I,J) = RMISS
        END IF
        IF( ( 8.LE.I .AND. I.LE.24) .AND. J.EQ.30 ) THEN
          P(I,J) = RMISS
        END IF
        IF( (22.LE.I .AND. I.LE.30) .AND. 
     +      (12.LE.J .AND. J.LE.20)       ) THEN
          P(I,J) = RMISS
        END IF
   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 UETONE( P, NX, NX, NY )
      CALL USDAXS
      CALL UDCNTR( P, NX, NX, NY )

      CALL GRCLS

      END
PROGRAM MISS2



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

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