%表題   GTOOL3 利用の手引 (gptool)
%
%履歴   90/09/24 沼口  敦
%       95/06/03 竹広真一
%

\chapter{データ加工モジュール群}

データをさまざまに加工するモジュールが用意されている.
ヘッダーは,
データの変更に応じて自動的に変更される.

\section{各軸に対する操作のモジュール}

  名称が{\tt GPX, GPY, GPZ}で始まるモジュールは,
  それぞれ第1軸, 第2軸, 第3軸に対する各種操作を行なう.
  以下には, {\tt GPX}で始まる
  第1軸に対する操作のモジュールのみを示す.
  第2軸あるいは第3軸に対する操作のモジュールは,
  それぞれ {\tt X}を{\tt Y}あるいは{\tt Z}に,
  第1軸を第2軸あるいは第3軸に読み変えればよい.

  \subsection{GPXSEL  [S]  第１次元の格子選択 }
    \entry{GPXSEL}

    % GPXSEL.FOR 9:  1990/09/23 (日) 19:10:13
    \begin{verbatim}
          SUBROUTINE GPXSEL
         I         ( HHEAD , GDATA , IXSEL  ,
         I           HEDIT , HETTL ,
         O           HHEADO, GDATAO          )
    *
          CHARACTER  HHEAD  ( * )*(*)        ! ヘッダー(入力)
          REAL       GDATA  ( * )            ! データ(入力)
          INTEGER    IXSEL                   ! 選択する第1次元の格子
          CHARACTER  HEDIT       *(*)        ! 編集略記号
          CHARACTER  HETTL       *(*)        ! 編集タイトル
          CHARACTER  HHEADO ( * )*(*)        ! ヘッダー(出力)
          REAL       GDATAO ( * )            ! データ(出力)
    \end{verbatim}

    \begin{setumei}
    第1次元に関して,
    特定の格子(格子番号IXSEL)のデータのみを取り出す.
    次元は一つ下がり,
    第2次元の情報が第1次元の情報に,
    第3次元の情報が第2次元の情報に順次移動される.
    出力データは
    (入力データの第2次元の寸法)$\times$(入力データの第3次元の寸法)
    の大きさである.

    もともとのデータに存在しない格子を指定した場合には
    欠損値が代入される.
    ただし周期的な座標軸の場合には周期性が考慮される.

    編集略記号として空白(' ')を指定した場合には,
    編集略記号として'XS'にIXSELの内容がついたもの
    (例えば'XS5')が,
    編集タイトルとして`(第1次元の格子の名称)=(格子の位置)'
    (例えば'GLON128=30.')が編集記述子として付加される.
    この際, 格子位置情報が参照される.
    編集略記号として'NUL'を指定した場合には,
    編集記述子は付加されない.
    そのほかの場合は, 与えたHEDIT,HETTLがそのまま
    編集記述子として付加される.
    \end{setumei}

  \subsection{GPXRDC  [S]  第１次元の部分切出し }
    \entry{GPXRDC}

    % GPXRDC.FOR 9:  1990/09/23 (日) 19:09:57
    \begin{verbatim}
          SUBROUTINE GPXRDC
         I         ( HHEAD , GDATA , IXSEL1 , IXSEL2 ,
         I           HEDIT , HETTL ,
         O           HHEADO, GDATAO                    )
    *
          CHARACTER  HHEAD  ( * )*(*)        ! ヘッダー(入力)
          REAL       GDATA  ( * )            ! データ(入力)
          INTEGER    IXSEL1                  ! 切り出す第1次元の格子
          INTEGER    IXSEL2                  ! 切り出す第1次元の格子
          CHARACTER  HEDIT       *(*)        ! 編集略記号
          CHARACTER  HETTL       *(*)        ! 編集タイトル
          CHARACTER  HHEADO ( * )*(*)        ! ヘッダー(出力)
          REAL       GDATAO ( * )            ! データ(出力)
    \end{verbatim}

    \begin{setumei}
    第1次元に関して,
    特定の部分(格子番号IXSEL1からIXSEL2の部分)
    のデータを取り出す.
    次元は下がらない.
    IXSEL1 と IXSEL2に同じ数を指定しても,
    ヘッダーはGPXSELの結果と
    同じにならないので注意.
    出力データは
    (IXSEL2-IXSEL1+1)$\times$
    (入力データの第2次元の寸法)$\times$(入力データの第3次元の寸法)
    の大きさである.

    もともとのデータに存在しない領域には
    欠損値が代入される.
    ただし周期的な座標軸の場合には周期性が考慮される.

    編集略記号として空白(' ')を指定した場合には,
    編集略記号として'XR'にIXSEL1 と IXSEL2の
    内容がついたもの
    (例えば'XR5-10')が,
    編集タイトルとして
    `(第1次元の格子の名称)=(格子の位置1)-(格子の位置2)'
    (例えば'GLON128=30.-60.')が編集記述子として付加される.
    この際, 格子位置情報が参照される.
    編集略記号として'NUL'を指定した場合には,
    編集記述子は付加されない.
    そのほかの場合は, 与えたHEDIT,HETTLがそのまま
    編集記述子として付加される.
    \end{setumei}

  \subsection{GPXAVG  [S]  第１次元に関する平均 }
    \entry{GPXAVG}

    % GPXAVG.FOR 10:  1990/09/23 (日) 19:08:52
    \begin{verbatim}
          SUBROUTINE GPXAVG
         I         ( HHEAD , GDATA ,
         I           HEDIT , HETTL ,
         O           HHEADO, GDATAO  )
    *
          CHARACTER  HHEAD  ( * )*(*)        ! ヘッダー(入力)
          REAL       GDATA  ( * )            ! データ(入力)
          CHARACTER  HEDIT       *(*)        ! 編集略記号
          CHARACTER  HETTL       *(*)        ! 編集タイトル
          CHARACTER  HHEADO ( * )*(*)        ! ヘッダー(出力)
          REAL       GDATAO ( * )            ! データ(出力)
    \end{verbatim}

    \begin{setumei}
    データの第1次元に関する平均を作成する.
    格子重みファイルが参照され,
    それに記述された重みをかけた平均をとる.
    出力データは
    (入力データの第2次元の寸法)$\times$(入力データの第3次元の寸法)
    の大きさである.

    編集略記号として空白(' ')を指定した場合には,
    編集略記号として'XM'が,
    編集タイトルとして
    `(第1次元の格子の名称)-mean'
    (例えば'GLON128-mean')が編集記述子として付加される.
    編集略記号として'NUL'を指定した場合には,
    編集記述子は付加されない.
    そのほかの場合は, 与えたHEDIT,HETTLがそのまま
    編集記述子として付加される.
    \end{setumei}

  \subsection{GPXEDY  [S]  第１次元の平均を引く }
    \entry{GPXEDY}

    % GPXEDY.FOR 9:  1990/09/23 (日) 19:09:42
    \begin{verbatim}
          SUBROUTINE GPXEDY
         I         ( HHEAD , GDATA ,
         I           HEDIT , HETTL ,
         O           HHEADO, GDATAO )
    *
          CHARACTER  HHEAD  ( * )*(*)        ! ヘッダー(入力)
          REAL       GDATA  ( * )            ! データ(入力)
          CHARACTER  HEDIT       *(*)        ! 編集略記号
          CHARACTER  HETTL       *(*)        ! 編集タイトル
          CHARACTER  HHEADO ( * )*(*)        ! ヘッダー(出力)
          REAL       GDATAO ( * )            ! データ(出力)
    \end{verbatim}

    \begin{setumei}
    データの第1次元に関する平均を,
    データから差し引いたものを作成する.
    出力データは入力データと同じ大きさである.
    平均を入れておくための作業領域GWORK
    ((入力データの第2次元の寸法)$\times$(入力データの第3次元の寸法)
    の大きさ)
    が必要である.

    編集略記号として空白(' ')を指定した場合には,
    編集略記号として'XE'が,
    編集タイトルとして
    `(第1次元の格子の名称)-eddy'
    (例えば'GLON128-eddy')が編集記述子として付加される.
    編集略記号として'NUL'を指定した場合には,
    編集記述子は付加されない.
    そのほかの場合は, 与えたHEDIT,HETTLがそのまま
    編集記述子として付加される.
    \end{setumei}

  \subsection{GPXCOM  [S]  第１次元の結合 }
    \entry{GPXCOM}

    % GPXCOM.FOR 9:  1990/09/23 (日) 19:09:09
    \begin{verbatim}
          SUBROUTINE GPXCOM
         I         ( HHEADO, GDATA , IX    ,
         M           GDATAO                  )
    *
          CHARACTER  HHEADO ( * )*(*)        ! ヘッダー(出力)
          REAL       GDATA  ( * )            ! データ(入力)
          INTEGER    IX                      ! 入れるべき第1次元の格
          REAL       GDATAO ( * )            ! データ(出力)
    \end{verbatim}

    \begin{setumei}
    1次元のデータを集めて2次元のデータを,
    あるいは2次元のデータを集めて3次元のデータを作成する.
    入力データを,
    第1次元の格子番号IXの格子のデータとして
    出力データに入れる.

    次元は一つ上がり,
    第2次元の情報が第3次元の情報に,
    第1次元の情報が第2次元の情報に順次移動される.

    これを用いるためには,
    あらかじめ次にあげるモジュールGPXCMIを
    呼んでおく必要がある.
    すなわち,
    GPXCMIによって出力領域を確保し,
    ヘッダーををセットした後,
    GPXCOMを順次呼んでデータを入れて行く.
    入れて行くデータは全て同じ形式である必要がある.
    \end{setumei}

  \subsection{GPXCMI  [S]  第１次元の結合の準備 }
    \entry{GPXCMI}

    % GPXCOM.FOR 46:  1990/09/23 (日) 19:09:09
    \begin{verbatim}
          SUBROUTINE GPXCMI
         I         ( HHEAD , HAITMX, IXSTR , IXEND ,
         I           HEDIT , HETTL ,
         O           HHEADO, GDATAO )
    *
          CHARACTER  HHEAD  ( * )*(*)        ! ヘッダー(入力)
          CHARACTER  HAITMX      *(*)        ! 結合する第1次元の格子
          INTEGER    IXSTR                   ! 第1次元の軸の格子始め
          INTEGER    IXEND                   ! 第1次元の軸の格子終り
          CHARACTER  HEDIT       *(*)        ! 編集略記号
          CHARACTER  HETTL       *(*)        ! 編集タイトル
          CHARACTER  HHEADO ( * )*(*)        ! ヘッダー(出力)
          REAL       GDATAO ( * )            ! データ(出力)
    \end{verbatim}

    \begin{setumei}
    GPXCOMによってデータを結合する準備をする.
    格子番号IXSTRからIXENDまでの出力領域を確保し,
    ヘッダーを設定する.
    出力データは
    (IXEND-IXSTR+1)$\times$
    (入力データの第2次元の寸法)$\times$(入力データの第3次元の寸法)
    の大きさである.

    IXSTR=IXEND=0の時には,
    格子位置ファイルを参照し,
    1から全格子数までの出力領域を確保する.

    編集略記号として空白(' ')を指定した場合には,
    編集略記号として'XC'にIXSTR と IXENDの
    内容がついたもの
    (例えば'XC5-10')が,
    編集タイトルとして
    `(第1次元の格子の名称)=(格子の位置1)-(格子の位置2)'
    (例えば'GLON128=30.-60.')が編集記述子として付加される.
    この際, 格子位置ファイルが参照される.
    編集略記号として'NUL'を指定した場合には,
    編集記述子は付加されない.
    そのほかの場合は, 与えたHEDIT,HETTLがそのまま
    編集記述子として付加される.
    \end{setumei}

  \subsection{GPXEXP  [S]  第1次元を拡張 }
    \entry{GPXEXP}

    % GPXEXP.FOR 9:  1990/09/24 (月) 19:52:24
    \begin{verbatim}
          SUBROUTINE GPXEXP
         I         ( HHEAD , GDATA ,
         I           HEDIT , HETTL ,
         O           HHEADO, GDATAO   )
    *
          CHARACTER  HHEAD  ( * )*(*)        ! ヘッダー(入力)
          REAL       GDATA  ( * )            ! データ(入力)
          CHARACTER  HEDIT       *(*)        ! 編集略記号
          CHARACTER  HETTL       *(*)        ! 編集タイトル
          CHARACTER  HHEADO ( * )*(*)        ! ヘッダー(出力)
          REAL       GDATAO ( * )            ! データ(出力)
    \end{verbatim}

    \begin{setumei}
    第1次元を, 格子点位置ファイルの情報に基づいて
    1から全格子数までの領域に拡張する.
    もともとのデータに存在しない領域には
    欠損値が代入される.
    出力データは
    (第1次元の全格子数)$\times$
    (入力データの第2次元の寸法)$\times$(入力データの第3次元の寸法)
    の大きさである.

    内部で\モジ{GPXRDC}を呼び出しており,
    編集記述の設定等はGDXRDCに準ずる.
    \end{setumei}

  \subsection{GPXEXC  [ES]  第1次元をサイクリックに拡張 }
    \entry{GPXEXC}

    % GPXEXP.FOR 39:  1990/09/24 (月) 19:52:24
    \begin{verbatim}
          ENTRY      GPXEXC
         I         ( HHEAD , GDATA ,
         I           HEDIT , HETTL ,
         O           HHEADO, GDATAO   )
    *
          CHARACTER  HHEAD  ( * )*(*)        ! ヘッダー(入力)
          REAL       GDATA  ( * )            ! データ(入力)
          CHARACTER  HEDIT       *(*)        ! 編集略記号
          CHARACTER  HETTL       *(*)        ! 編集タイトル
          CHARACTER  HHEADO ( * )*(*)        ! ヘッダー(出力)
          REAL       GDATAO ( * )            ! データ(出力)
    \end{verbatim}

    \begin{setumei}
    第1次元を, 格子点位置ファイルの情報に基づいて
    1から全格子数までの領域に拡張する.
    もともとのデータに存在しない領域には
    欠損値が代入される.
    ただし周期的な座標軸の場合には,
    (全格子数+1)までの領域に
    周期性を考慮して拡張される.
    非周期的な座標軸の場合は,
    \モジ{GPXEXP}と同じ結果となる.
    出力データは
    非周期的な座標軸の場合
    (第1次元の全格子数)$\times$
    (入力データの第2次元の寸法)$\times$(入力データの第3次元の寸法)
    の大きさ,
    非周期的な座標軸の場合
    (第1次元の全格子数+1)$\times$
    (入力データの第2次元の寸法)$\times$(入力データの第3次元の寸法)
    の大きさである.

    内部で\モジ{GPXRDC}を呼び出しており,
    編集記述の設定等はGDXRDCに準ずる.
    \end{setumei}

  \subsection{GPXEXT  [S]  第１次元の拡大}
    \entry{GPXEXT}

    \begin{verbatim}
          SUBROUTINE GPXEXT
         I         ( HHEAD , GDATA ,
         I           HAITMX, IXSTR , IXEND ,
         I           HEDIT , HETTL ,
         O           HHEADO, GDATAO )
    *
          CHARACTER  HHEAD  ( * )*(*)        !" ヘッダー(入力)
          REAL       GDATA  ( * )            !" データ(入力)
          CHARACTER  HAITMX      *(*)        !" 拡大する第1次元の軸名
          INTEGER    IXSTR                   !" 第1次元の軸の格子始め
          INTEGER    IXEND                   !" 第1次元の軸の格子終り
          CHARACTER  HEDIT       *(*)        !" 編集略記号
          CHARACTER  HETTL       *(*)        !" 編集タイトル
          CHARACTER  HHEADO ( * )*(*)        !" ヘッダー(出力)
          REAL       GDATAO ( * )            !" データ(出力)
    \end{verbatim}


\section{時系列に関する操作のモジュール}

  時刻ごとに別のデータになっている
  時系列データを処理するモジュールである.

  \subsection{GPTAVG  [S]  時間平均への足し込み }
    \entry{GPTAVG}

    % GPTAVG.FOR 9:  1990/09/23 (日) 19:08:14
    \begin{verbatim}
          SUBROUTINE GPTAVG
         I         ( HHEAD , GDATA ,
         I           HEDIT , HETTL ,
         M           HHEADW, WDATA ,
         O           HHEADO, GDATAO )
    *
          CHARACTER  HHEAD  ( * )*(*)        ! ヘッダー(入力)
          REAL       GDATA  ( * )            ! データ(入力)
          CHARACTER  HEDIT       *(*)        ! 編集略記号
          CHARACTER  HETTL       *(*)        ! 編集タイトル
          CHARACTER  HHEADW ( * )*(*)        ! ヘッダー(ワーク)
          REAL       WDATA  ( * )            ! ウェイトカウンター
          CHARACTER  HHEADO ( * )*(*)        ! ヘッダー(出力)
          REAL       GDATAO ( * )            ! データ(出力)
    \end{verbatim}

    \begin{setumei}
    時系列データの時間に対する平均を作成する.
    GPTAVG, GPTAVO, GPTAVRの3つのモジュールを一組で使用する.
    まず, GPTAVRで初期化を行なう.
    その後GPTAVGによってデータを順次入れて行く.
    最後にGPTAVOを呼ぶことによって時間平均が求められる.
    作業領域として, 入力データと同じ大きさのWDATAが必要である.
    出力データは入力データと同じ大きさである.

    時間平均の重みとしては,
    ヘッダーの欄TDUR(28),
    すなわちデータの代表する時間が使用される.

    編集略記号として空白(' ')を指定した場合には,
    編集略記号として'TM'が,
    編集タイトルとして
    最初のデータの時刻を,
    \モジラ{GTPGET}{GTPSET}の管理する
    \パラ{UTIM}{DAY}
    の単位で示したもの
    (例えば'120.DAY-')
    が編集記述子として付加される.
    編集略記号として'NUL'を指定した場合には,
    編集記述子は付加されない.
    そのほかの場合は, 与えたHEDIT,HETTLがそのまま
    編集記述子として付加される.

    平均結果の時刻は最後のデータの時刻となり,
    データ代表時間(欄TDUR(28))には,
    入力データのデータ代表時間の和が入れられる.
    \end{setumei}

  \subsection{GPTAVO  [S]  時間平均の算出 }
    \entry{GPTAVO}

    % GPTAVG.FOR 96:  1990/09/23 (日) 19:08:14
    \begin{verbatim}
          SUBROUTINE GPTAVO
         I         ( HHEADW, WDATA  ,
         M           HHEADO, GDATAO  )
    *
          CHARACTER  HHEADW ( * )*(*)        ! ヘッダー(ワーク)
          REAL       WDATA  ( * )            ! ウェイトカウンター
          CHARACTER  HHEADO ( * )*(*)        ! ヘッダー(出力)
          REAL       GDATAO ( * )            ! データ(出力)
    \end{verbatim}

    \begin{setumei}
    時間平均の算出を行なう.
    くわしくは\モジ{GPTAVG}の項参照.
    \end{setumei}

  \subsection{GPTAVR  [ES]  時間平均のリセット }
    \entry{GPTAVR}

    % GPTAVG.FOR 86:  1990/09/23 (日) 19:08:14
    \begin{verbatim}
          ENTRY       GPTAVR
         O          ( HHEADO )
    *
          CHARACTER  HHEADO ( * )*(*)        ! ヘッダー(出力)
    \end{verbatim}

    \begin{setumei}
    時間平均の初期化を行なう.
    実はHHEADOに初期化の印を付けているだけであり,
    実際上の初期化処理はGPTAVGの中で行なう.
    くわしくは\モジ{GPTAVG}の項を参照.
    \end{setumei}

  \subsection{GPTSEQ  [S]  時系列の作成 }
    \entry{GPTSEQ}

    % GPTSEQ.FOR 9:  1990/09/23 (日) 19:08:34
    \begin{verbatim}
          SUBROUTINE  GPTSEQ
         I          ( HHEAD , GDATA ,
         I            HEDIT , HETTL ,
         O            HHEADT, GDATAT )
    *
          CHARACTER  HHEAD  ( * )*(*)        ! ヘッダー(入力)
          REAL       GDATA  ( * )            ! データ(入力)
          CHARACTER  HEDIT       *(*)        ! 編集略記号
          CHARACTER  HETTL       *(*)        ! 編集タイトル
          CHARACTER  HHEADT ( * )*(*)        ! ヘッダー(出力)
          REAL       GDATAT ( * )            ! データ(出力)
    \end{verbatim}

    \begin{setumei}
    時刻ごとに別のデータとなっているデータから,
    一つの座標軸が時間軸であるような時系列データを作成する.
    GPTSEQ, GPTSQRの2つのモジュールを一組で使用する.
    まず, GPTSQRで初期化を行なう.
    その後GPTSEQによってデータを順次入れて行く.

    入力データが1次元データの場合は
    2次元めが時間軸となり,
    入力データが2次元データの場合は
    3次元めが時間軸となる.

    内部で'@TIMExx'という名称の格子
    (xxは数字であり,
    新しい時系列を作成しはじめるたびに1から増えて行く)
    を生成し,
    \モジラ{GUQIAX}{GUSIAX}に管理させる.
    この軸の単位は,
    \モジラ{GTPGET}{GTPSET}の管理する
    \パラ{UTIM}{'DAY'}
    である.

    編集略記号として空白(' ')を指定した場合には,
    編集略記号として'TSEQ'が,
    編集タイトルとして
    'time sequence'が
    編集記述子として付加される.
    編集略記号として'NUL'を指定した場合には,
    編集記述子は付加されない.
    そのほかの場合は, 与えたHEDIT,HETTLがそのまま
    編集記述子として付加される.
    \end{setumei}

  \subsection{GPTSQR  [ES]  時系列のリセット }
    \entry{GPTSQR}

    % GPTSEQ.FOR 91:  1990/09/23 (日) 19:08:34
    \begin{verbatim}
          ENTRY       GPTSQR
         O          ( HHEADT )
    *
          CHARACTER  HHEADT ( * )*(*)        ! ヘッダー(出力)
    \end{verbatim}

    \begin{setumei}
    時系列作成の初期化を行なう.
    実はHHEADTに初期化の印を付けているだけであり,
    実際上の初期化処理はGPTSEQの中で行なう.
    くわしくは\モジ{GPTSEQ}参照.
    \end{setumei}

  \subsection{GPTSQN  [ES]  時系列番号のセット}
    \entry{GPTSQN}

    \begin{verbatim}
          ENTRY       GPTSQN
         I          ( ISEQ   )

    \end{verbatim}

\section{1組のデータに対する基本演算操作のモジュール}

  以下は, 電脳ライブラリ{\rm MATH1}における
  {\rm VRALIB}に対応したモジュールである.

  \subsection{GPFINC  [S]  データとスカラーの和 }
    \entry{GPFINC}

    % GPFINC.FOR 9:  1990/09/23 (日) 19:07:16
    \begin{verbatim}
          SUBROUTINE GPFINC
         I         ( HHEAD , GDATA , VAL   ,
         I           HEDIT , HETTL ,
         O           HHEADO, GDATAO  )
    *
          CHARACTER  HHEAD  ( * )*(*)        ! ヘッダー(入力)
          REAL       GDATA  ( * )            ! データ(入力)
          REAL       VAL                     ! スカラー値
          CHARACTER  HEDIT       *(*)        ! 編集略記号
          CHARACTER  HETTL       *(*)        ! 編集タイトル
          CHARACTER  HHEADO ( * )*(*)        ! ヘッダー(出力)
          REAL       GDATAO ( * )            ! データ(出力)
    \end{verbatim}

    \begin{setumei}
    配列データGDATAの各々の要素とスカラーVALを足し合わせ,
    配列データGDATAOとして格納する.
    {\rm SUBFUNC}のVRINCに対応する.

    編集略記号として空白(' ')
    または'NUL'を指定した場合には,
    編集記述子は付加されない.
    そのほかの場合は, 与えたHEDIT,HETTLがそのまま
    編集記述子として付加される.
    \end{setumei}

  \subsection{GPFFCT  [S]  データとスカラーの積 }
    \entry{GPFFCT}

    % GPFFCT.FOR 9:  1990/09/23 (日) 19:06:34
    \begin{verbatim}
          SUBROUTINE GPFFCT
         I         ( HHEAD , GDATA , VAL   ,
         I           HEDIT , HETTL ,
         O           HHEADO, GDATAO  )
    *
          CHARACTER  HHEAD  ( * )*(*)        ! ヘッダー(入力)
          REAL       GDATA  ( * )            ! データ(入力)
          REAL       VAL                     ! スカラー値
          CHARACTER  HEDIT       *(*)        ! 編集略記号
          CHARACTER  HETTL       *(*)        ! 編集タイトル
          CHARACTER  HHEADO ( * )*(*)        ! ヘッダー(出力)
          REAL       GDATAO ( * )            ! データ(出力)
    \end{verbatim}

    \begin{setumei}
    配列データGDATAの各々の要素とスカラーVALをかけ合わせ,
    配列データGDATAOとして格納する.
    {\rm SUBFUNC}のVRFCTに対応する.
    その他は\モジ{GPFINC}を参照.
    \end{setumei}

  \subsection{GPFCON  [S]  データへのスカラー代入 }
    \entry{GPFCON}

    % GPFCON.FOR 9:  1990/09/23 (日) 19:06:05
    \begin{verbatim}
          SUBROUTINE GPFCON
         I         ( HHEAD , GDATA , VAL   ,
         I           HEDIT , HETTL ,
         O           HHEADO, GDATAO  )
    *
          CHARACTER  HHEAD  ( * )*(*)        ! ヘッダー(入力)
          REAL       GDATA  ( * )            ! データ(入力)
          REAL       VAL                     ! スカラー値
          CHARACTER  HEDIT       *(*)        ! 編集略記号
          CHARACTER  HETTL       *(*)        ! 編集タイトル
          CHARACTER  HHEADO ( * )*(*)        ! ヘッダー(出力)
          REAL       GDATAO ( * )            ! データ(出力)
    \end{verbatim}

    \begin{setumei}
    配列データGDATAOの各々の要素に
    スカラーVALを代入する.
    ただし,
    配列データGDATAの内容が欠損値である要素には
    欠損値が入る.
    {\rm SUBFUNC}のVRCONに対応する.
    その他は\モジ{GPFINC}を参照.
    \end{setumei}

  \subsection{GPFSET  [S]  データにデータを代入 }
    \entry{GPFSET}

    % GPFSET.FOR 9:  1990/09/23 (日) 19:07:45
    \begin{verbatim}
          SUBROUTINE GPFSET
         I         ( HHEAD , GDATA ,
         I           HEDIT , HETTL ,
         O           HHEADO, GDATAO  )
    *
          CHARACTER  HHEAD  ( * )*(*)        ! ヘッダー(入力)
          REAL       GDATA  ( * )            ! データ(入力)
          CHARACTER  HEDIT       *(*)        ! 編集略記号
          CHARACTER  HETTL       *(*)        ! 編集タイトル
          CHARACTER  HHEADO ( * )*(*)        ! ヘッダー(出力)
          REAL       GDATAO ( * )            ! データ(出力)
    \end{verbatim}

    \begin{setumei}
    配列データGDATAを
    配列データGDATAOに代入する.
    {\rm SUBFUNC}のVRSETに対応する.
    その他は\モジ{GPFINC}を参照.
    \end{setumei}

  \subsection{GPFFNA  [S]  データに関数を作用 }
    \entry{GPFFNA}

    % GPFFNA.FOR 9:  1990/09/23 (日) 19:06:48
    \begin{verbatim}
          SUBROUTINE GPFFNA
         I         ( HHEAD , GDATA , RFNA  ,
         I           HEDIT , HETTL ,
         O           HHEADO, GDATAO  )
    *
          CHARACTER  HHEAD  ( * )*(*)        ! ヘッダー(入力)
          REAL       GDATA  ( * )            ! データ(入力)
          EXTERNAL   RFNA                    ! 関数(1変数)
          CHARACTER  HEDIT       *(*)        ! 編集略記号
          CHARACTER  HETTL       *(*)        ! 編集タイトル
          CHARACTER  HHEADO ( * )*(*)        ! ヘッダー(出力)
          REAL       GDATAO ( * )            ! データ(出力)
    \end{verbatim}

    \begin{setumei}
    配列データGDATAの各々の要素に関数FNAを作用させ
    配列データGDATAOとして格納する.
    {\rm SUBFUNC}のVRFNAに対応する.
    その他は\モジ{GPFINC}を参照.
    \end{setumei}

\section{2組のデータに対する基本演算操作のモジュール}

  以下は, 電脳ライブラリ{\rm MATH1}における
  {\rm VRBLIB}に対応したモジュールである.

  \subsection{GPFADD  [S]  データ同士の和 }
    \entry{GPFADD}

    % GPFADD.FOR 9:  1990/09/23 (日) 19:05:50
    \begin{verbatim}
          SUBROUTINE GPFADD
         I         ( HHEAD1, GDATA1,
         I           HHEAD2, GDATA2,
         I           HEDIT , HETTL ,
         O           HHEADO, GDATAO  )
    *
          CHARACTER  HHEAD1 ( * )*(*)        ! ヘッダー(入力1)
          REAL       GDATA1 ( * )            ! データ(入力1)
          CHARACTER  HHEAD2 ( * )*(*)        ! ヘッダー(入力2)
          REAL       GDATA2 ( * )            ! データ(入力2)
          CHARACTER  HEDIT       *(*)        ! 編集略記号
          CHARACTER  HETTL       *(*)        ! 編集タイトル
          CHARACTER  HHEADO ( * )*(*)        ! ヘッダー(出力)
          REAL       GDATAO ( * )            ! データ(出力)
    \end{verbatim}

    \begin{setumei}
    配列データGDATA1とGDATA2を要素ごとに足し合わせ,
    配列データGDATAOとして格納する.
    {\rm SUBFUNC}のVRADDに対応する.

    出力配列データGDATAOの範囲は
    GDATA1の領域と同じとなる.
    GDATA1とGDATA2の範囲は一致していなくてよいが,
    各軸の格子の名称が一致していない時には警告が出る.

    編集略記号として空白(' ')
    または'NUL'を指定した場合には,
    編集記述子は付加されない.
    そのほかの場合は, 与えたHEDIT,HETTLがそのまま
    編集記述子として付加される.
    \end{setumei}

  \subsection{GPFSUB  [S]  データ同士の差 }
    \entry{GPFSUB}

    % GPFSUB.FOR 9:  1990/09/23 (日) 19:07:58
    \begin{verbatim}
          SUBROUTINE GPFSUB
         I         ( HHEAD1, GDATA1,
         I           HHEAD2, GDATA2,
         I           HEDIT , HETTL ,
         O           HHEADO, GDATAO  )
    *
          CHARACTER  HHEAD1 ( * )*(*)        ! ヘッダー(入力1)
          REAL       GDATA1 ( * )            ! データ(入力1)
          CHARACTER  HHEAD2 ( * )*(*)        ! ヘッダー(入力2)
          REAL       GDATA2 ( * )            ! データ(入力2)
          CHARACTER  HEDIT       *(*)        ! 編集略記号
          CHARACTER  HETTL       *(*)        ! 編集タイトル
          CHARACTER  HHEADO ( * )*(*)        ! ヘッダー(出力)
          REAL       GDATAO ( * )            ! データ(出力)
    \end{verbatim}

\begin{setumei}
配列データGDATA1の各要素からGDATA2の各要素を引き
配列データGDATAOとして格納する.
{\rm SUBFUNC}のVRSUBに対応する.
その他は\モジ{GPFADD}を参照.
\end{setumei}

  \subsection{GPFMLT  [S]  データ同士の積 }
    \entry{GPFMLT}

    % GPFMLT.FOR 9:  1990/09/23 (日) 19:07:30
    \begin{verbatim}
          SUBROUTINE GPFMLT
         I         ( HHEAD1, GDATA1,
         I           HHEAD2, GDATA2,
         I           HEDIT , HETTL ,
         O           HHEADO, GDATAO  )
    *
          CHARACTER  HHEAD1 ( * )*(*)        ! ヘッダー(入力1)
          REAL       GDATA1 ( * )            ! データ(入力1)
          CHARACTER  HHEAD2 ( * )*(*)        ! ヘッダー(入力2)
          REAL       GDATA2 ( * )            ! データ(入力2)
          CHARACTER  HEDIT       *(*)        ! 編集略記号
          CHARACTER  HETTL       *(*)        ! 編集タイトル
          CHARACTER  HHEADO ( * )*(*)        ! ヘッダー(出力)
          REAL       GDATAO ( * )            ! データ(出力)
    \end{verbatim}

    \begin{setumei}
    配列データGDATA1とGDATA2を要素ごとにかけ合わせ,
    配列データGDATAOとして格納する.
    {\rm SUBFUNC}のVRMULに対応する.
    その他は\モジ{GPFADD}を参照.
    \end{setumei}

  \subsection{GPFDIV  [S]  データ同士の商 }
    \entry{GPFDIV}

    % GPFDIV.FOR 9:  1990/09/23 (日) 19:06:18
    \begin{verbatim}
          SUBROUTINE GPFDIV
         I         ( HHEAD1, GDATA1,
         I           HHEAD2, GDATA2,
         I           HEDIT , HETTL ,
         O           HHEADO, GDATAO  )
    *
          CHARACTER  HHEAD1 ( * )*(*)        ! ヘッダー(入力1)
          REAL       GDATA1 ( * )            ! データ(入力1)
          CHARACTER  HHEAD2 ( * )*(*)        ! ヘッダー(入力2)
          REAL       GDATA2 ( * )            ! データ(入力2)
          CHARACTER  HEDIT       *(*)        ! 編集略記号
          CHARACTER  HETTL       *(*)        ! 編集タイトル
          CHARACTER  HHEADO ( * )*(*)        ! ヘッダー(出力)
          REAL       GDATAO ( * )            ! データ(出力)
    \end{verbatim}

    \begin{setumei}
    配列データGDATA1の各要素をGDATA2の各要素で割り
    配列データGDATAOとして格納する.
    {\rm SUBFUNC}のVRDIVに対応する.
    その他は\モジ{GPFADD}を参照.
    \end{setumei}

  \subsection{GPFFNB  [S]  ２つのデータに関数を作用 }
    \entry{GPFFNB}

    % GPFFNB.FOR 9:  1990/09/23 (日) 19:07:01
    \begin{verbatim}
          SUBROUTINE GPFFNB
         I         ( HHEAD1, GDATA1,
         I           HHEAD2, GDATA2, RFNB  ,
         I           HEDIT , HETTL ,
         O           HHEADO, GDATAO  )
    *
          CHARACTER  HHEAD1 ( * )*(*)        ! ヘッダー(入力1)
          REAL       GDATA1 ( * )            ! データ(入力1)
          CHARACTER  HHEAD2 ( * )*(*)        ! ヘッダー(入力2)
          REAL       GDATA2 ( * )            ! データ(入力2)
          EXTERNAL   RFNB                    ! 関数(2変数)
          CHARACTER  HEDIT       *(*)        ! 編集略記号
          CHARACTER  HETTL       *(*)        ! 編集タイトル
          CHARACTER  HHEADO ( * )*(*)        ! ヘッダー(出力)
          REAL       GDATAO ( * )            ! データ(出力)
    \end{verbatim}

    \begin{setumei}
    配列データGDATAとGDATA2の各要素を
    2変数関数FNBに入れた結果を,
    配列データGDATAOとして格納する.
    {\rm SUBFUNC}のVRFNBに対応する.
    その他は\モジ{GPFADD}を参照.
    \end{setumei}

\section{外部手続き呼びだし汎用モジュール}

  \subsection{GPCAL1  [S]  外部手続き呼びだし }
    \entry{GPCAL1}

    % GPCAL1.FOR 9:  1990/09/23 (日) 19:05:09
    \begin{verbatim}
          SUBROUTINE GPCAL1
         I         ( GESUBR,
         I           HHEAD , GDATA ,
         I           HEDIT , HETTL ,
         O           HHEADO, GDATAO )
    *
    *     EXTERNAL   GESUBR                  ! 外部手続き名
          CHARACTER  HHEAD  ( * )*(*)        ! ヘッダー(入力)
          REAL       GDATA  ( * )            ! データ(入力)
          CHARACTER  HEDIT       *(*)        ! 編集略記号
          CHARACTER  HETTL       *(*)        ! 編集タイトル
          CHARACTER  HHEADO ( * )*(*)        ! ヘッダー(出力)
          REAL       GDATAO ( * )            ! データ(出力)
    \end{verbatim}

    \begin{setumei}
    次のような
    ユーザー作成の外部手続き(サブルーチン)を呼び出す.
    \begin{verbatim}
          SUBROUTINE NANASI
         I         ( HHEAD , GDATA ,
         O           HHEADO, GDATAO,
         D           IXDIM , IYDIM , IZDIM )
    *
          REAL       GDATA ( IXDIM, IYDIM, IZDIM )
    \end{verbatim}
    GDATAOの呼ばれる側でのサイズは自由である.
    GPEXS1の中ではGDATAOの
    サイズのチェックは行なわれないので,
    必要ならば呼ばれる側のサブルーチンで
    GUSZCKを用いてチェックする必要がある.
    また, HHEADOはHHEADのコピーが渡され,
    GPEXS1の中では操作が行なわれないので,
    必要ならば呼ばれる側のサブルーチンで
    適当にセットし直す必要がある.

    編集略記号として空白(' ')
    または'NUL'以外のものを指定した場合には,
    与えたHEDIT,HETTLがそのまま
    編集記述子として付加される.
    呼ばれる側のサブルーチンで
    編集記述子を付加した場合にはそれに上書きされる.
    \end{setumei}

  \subsection{GPCAL2  [S]  ２引数外部手続き呼びだし }
    \entry{GPCAL2}

    % GPCAL2.FOR 9:  1990/09/23 (日) 19:05:22
    \begin{verbatim}
          SUBROUTINE GPCAL2
         I         ( GESUBR,
         I           HHEAD1, GDATA1,
         I           HHEAD2, GDATA2,
         I           HEDIT , HETTL ,
         O           HHEADO, GDATAO )
    *
    *     EXTERNAL   GESUBR                  ! 外部手続き名
          CHARACTER  HHEAD1 ( * )*(*)        ! ヘッダー(入力1)
          REAL       GDATA1 ( * )            ! データ(入力1)
          CHARACTER  HHEAD2 ( * )*(*)        ! ヘッダー(入力2)
          REAL       GDATA2 ( * )            ! データ(入力2)
          CHARACTER  HEDIT       *(*)        ! 編集略記号
          CHARACTER  HETTL       *(*)        ! 編集タイトル
          CHARACTER  HHEADO ( * )*(*)        ! ヘッダー(出力)
          REAL       GDATAO ( * )            ! データ(出力)
    \end{verbatim}

    \begin{setumei}
    次のような
    ユーザー作成の外部手続き(サブルーチン)を呼び出す.
    \begin{verbatim}
          SUBROUTINE NANAS2
         I         ( HHEAD1, GDATA1,
         I           HHEAD2, GDATA2,
         O           HHEADO, GDATAO,
         D           IXDIM1, IYDIM1, IZDIM1,
         D           IXDIM2, IYDIM2, IZDIM2 )
    *
          REAL       GDATA1( IXDIM1, IYDIM1, IZDIM1 )
          REAL       GDATA2( IXDIM2, IYDIM2, IZDIM2 )
    \end{verbatim}
    GDATAOの呼ばれる側でのサイズは自由である.
    HHEADOはHHEAD1のコピーが渡される.
    そのほかは\モジ{GPCAL1}と同様である.
    \end{setumei}

  \subsection{GPCAL3  [S]  ３引数外部手続き呼びだし }
    \entry{GPCAL3}

    % GPCAL3.FOR 9:  1990/09/23 (日) 19:05:36
    \begin{verbatim}
          SUBROUTINE GPCAL3
         I         ( GESUBR,
         I           HHEAD1, GDATA1,
         I           HHEAD2, GDATA2,
         I           HHEAD3, GDATA3,
         I           HEDIT , HETTL ,
         O           HHEADO, GDATAO )
    *
    *     EXTERNAL   GESUBR                  ! 外部手続き名
          CHARACTER  HHEAD1 ( * )*(*)        ! ヘッダー(入力1)
          REAL       GDATA1 ( * )            ! データ(入力1)
          CHARACTER  HHEAD2 ( * )*(*)        ! ヘッダー(入力2)
          REAL       GDATA2 ( * )            ! データ(入力2)
          CHARACTER  HHEAD3 ( * )*(*)        ! ヘッダー(入力3)
          REAL       GDATA3 ( * )            ! データ(入力3)
          CHARACTER  HEDIT       *(*)        ! 編集略記号
          CHARACTER  HETTL       *(*)        ! 編集タイトル
          CHARACTER  HHEADO ( * )*(*)        ! ヘッダー(出力)
          REAL       GDATAO ( * )            ! データ(出力)
    \end{verbatim}

    \begin{setumei}
    次のような
    ユーザー作成の外部手続き(サブルーチン)を呼び出す.
    \begin{verbatim}
          SUBROUTINE NANAS3
         I         ( HHEAD1, GDATA1,
         I           HHEAD2, GDATA2,
         I           HHEAD3, GDATA3,
         O           HHEADO, GDATAO,
         D           IXDIM1, IYDIM1, IZDIM1,
         D           IXDIM2, IYDIM2, IZDIM2,
         D           IXDIM3, IYDIM3, IZDIM3 )
    *
          REAL       GDATA1( IXDIM1, IYDIM1, IZDIM1 )
          REAL       GDATA2( IXDIM2, IYDIM2, IZDIM2 )
          REAL       GDATA3( IXDIM3, IYDIM3, IZDIM3 )
    \end{verbatim}
    GDATAOの呼ばれる側でのサイズは自由である.
    HHEADOはHHEAD1のコピーが渡される.
    そのほかは\モジ{GPCAL1}と同様である.
    \end{setumei}

  \subsection{GPCAL4  [S]  ４引数外部手続き呼びだし }
    \entry{GPCAL4}

    \begin{verbatim}
          SUBROUTINE GPCAL4
         I         ( GESUBR,
         I           HHEAD1, GDATA1,
         I           HHEAD2, GDATA2,
         I           HHEAD3, GDATA3,
         I           HHEAD4, GDATA4,
         I           HEDIT , HETTL ,
         O           HHEADO, GDATAO )
    *
    *"    EXTERNAL   GESUBR                  ! 外部手続き名
          CHARACTER  HHEAD1 ( * )*(*)        !" ヘッダー(入力1)
          REAL       GDATA1 ( * )            !" データ(入力1)
          CHARACTER  HHEAD2 ( * )*(*)        !" ヘッダー(入力2)
          REAL       GDATA2 ( * )            !" データ(入力2)
          CHARACTER  HHEAD3 ( * )*(*)        !" ヘッダー(入力3)
          REAL       GDATA3 ( * )            !" データ(入力3)
          CHARACTER  HHEAD4 ( * )*(*)        !" ヘッダー(入力4)
          REAL       GDATA4 ( * )            !" データ(入力4)
          CHARACTER  HEDIT       *(*)        !" 編集略記号
          CHARACTER  HETTL       *(*)        !" 編集タイトル
          CHARACTER  HHEADO ( * )*(*)        !" ヘッダー(出力)
          REAL       GDATAO ( * )            !" データ(出力)
    \end{verbatim}

% Local Variables: 
% mode: japanese-latex
% TeX-master: "gtool"
% End: 
