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





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

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