地球流体の分野では,測器にトラブルがあったり観測出来なかったりして,デー タに欠損が生じることがしばしば起こります.その時, 適当な欠損値を与えて データの継続性を保つことが一般的に行なわれますが,そのようなデータを解 析するのは結構面倒なものです.DCLには,強力な欠損値処理機能があります. どのように欠損値が処理できるのか,この章ではグラフィクスルーチンに限っ て説明しましょう.
データの中に欠損がある場合には,MATH1 の SYSLIB サブルーチンパッケージ にある GLLSET ルーチンで欠損値処理の指定に関する内部変数 'LMISS' を .TRUE. にして,欠損値処理を有効にします.欠損値処理 の制御は SGPACK だけでなく DCL 全体で統一的に行われるために,欠損値処 理に関する内部変数の管理はSGpGET/SGpSET ではなく GLpGET/GLpSET で行われています(p は I, R, L または C).
このように指定すると,データの値が999.であるものは欠損値と見なして,こ れから見るような欠損値処理を行ないます.欠損値999.が実際のデータ範囲に 入っていて,別の値にしたい場合には,GLRSET ルーチンによって実数 の欠損値をあらわす内部変数 'RMISS' を変更します.
まず,MISS1プログラムを例に,ポリラインとポリマーカーのプリミティ ブで欠損値処理がどのように行なわれるか見てみましょう.第[here] 章で用いた正弦関数のデータに欠損値 999.を埋め込みます.データの1/4のと ころでは3点連続して欠損値とし,3/4のところでは,有効な点が欠損値データ に挟まれて1点だけ孤立しているように与えます.
miss1.f: frame1
欠損値処理をしない(デフォルト)で SGPLU と SGPMU のルーチン を呼んだ結果が上の2つです.他のデータと比べて999.は非常に大きな値です から,ポリラインではほぼ真上に線を引いて最大作画範囲を飛び出しています. また,ポリマーカーでもこれらの点は作画範囲を飛び出してしまって描かれま せん.
GLLSET ルーチンで内部変数 'LMISS' を .TRUE. にして, 欠損値処理を行なって描いた結果が下の2つです.ポリラインでは欠損値の前 後を線で結びません.有効な点が1点だけ孤立している場合には,その点を結 ぶことができないので,そこには何も描かれません.また,ポリマーカーでは 欠損値の点にはマーカーを打ちません.この例では,ポリマーカーの結果はど ちらも同じですが,欠損値を小さくして2.とすると違いは明らかです.
格子点の値が欠損値のときでも,欠損値処理の指定をすることによって, UDPACK や UEPACK, UGPACK にある2次元量表示サブルーチンでも欠損値処理を して作図できます.
プログラム MISS2 の例では,基本的には第[here]節の QUICK4 と同じプログラム構成で,ただし格子点値の一部分を欠損値 RMISS(この値はGLRGET ルーチンで設定されている実数欠損値を 参照しました)として,欠損値処理の指定をおこなって作画しています.欠損 値処理の指定は,やはり GLLSET ルーチンによって内部変数 'LMISS' を .TRUE. とすることによっておこないます.この実行結果 からもわかるように,欠損値のまわりの格子点を境界としてコンターやトーン が描かれません.
miss2.f: frame1
2次元ベクトル場を作画する UGPACK でも,同様の欠損値処理を行ないます. UGVECT ルーチンでは,ベクトルの少なくとも1成分が欠損値の時にはベ クトルを描きません.UGLSET ルーチンで UGPACK に関する内部変数 'LMISSP' を .TRUE. にすると,欠損値ベクトルの格子点にマー カー を描きます.この印のマーカータイプやマーカーサイズは, やはり,UGISET, UGRSET ルーチンでそれぞれ対応する内部変数 'ITYPE1', 'RSIZEM' を設定することにより変更できます.
NUMAGUTI Atusi <a1n@gfdl.gov> Last Modified: Thu Aug 31 13:11:36 EDT 1995