%表題   GRPH1 基本グラフィックルーチンライブラリ
%
%履歴
%\Drireki{
%         93/10/06 酒井  敏
%         93/10/19 塩谷雅人
%         94/04/05 塩谷雅人
%         94/10/15 酒井  敏, 塩谷雅人
%         95/03/22 酒井  敏
%        }
%
\section{サブルーチンの説明:コントロール}
\label{umpack.ref}

%--------------------------------------------------------------------
\subsection{UMSCNT}
\begin{enumerate}
  \item 機能
  \begin{quote}
    投影面の「接点」を指定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UMSCNT(UXC, UYC, ROT)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt UXC,UYC} & {\tt (R)} & 接点の経度, 緯度. \\
      {\tt ROT}     & {\tt (R)} & 中央の経線の傾き. (時計周り) \\
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item この情報は {\tt UMPFIT} が使う.
    \item 通常の円筒図法 (正軸法) では, {\tt UYC=0}, {\tt ROT=0} である.
          そうでないとき斜軸法となる.
    \item 円錐図法の時, 標準緯度 ({\tt STLAT1})が指定されていなければ,
	  {\tt UYC} が標準緯度となる.
	  標準緯度が指定されている時は, その標準緯度に対応する円錐を設定し,
	  それが{\tt (UXC, UYC) } で接するように, 円錐を傾ける.
	  すなわち, 斜軸法になる.
    \item 方位図法では, {\tt (UXC,UYC,ROT)} は, 
    	  地図投影の極{\tt (PLX,PLY,PLROT)} と同じ意味になる.
  \end{enumerate}
\end{enumerate}
%--------------------------------------------------------------------
\subsection{UMSCWD}
\begin{enumerate}
  \item 機能
  \begin{quote}
    円形のウィンドウを設定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UMSCWD(UXC, UYC, R)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt UXC,UYC} & {\tt (R)} & 中心の経度, 緯度. \\
      {\tt R}       & {\tt (R)} & ウィンドウ半径. (角度) \\
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item この情報は {\tt UMPFIT} が使う.
    \item この円の範囲が入るようにスケーリングファクタが決められる.
    \item 円筒図法, 円錐図法では {\tt UMSCNT} と異なり, 
          {\tt UYC}が 0 でなくても, 
          陽に指定されない限り, 正軸法が採用される.
    \item 円錐図法の時, 標準緯度 ({\tt STLAT1})が指定されていなければ,
	  {\tt UYC} が標準緯度となる.
  \end{enumerate}
\end{enumerate}
%--------------------------------------------------------------------
\subsection{UMSPNT}
\begin{enumerate}
  \item 機能
  \begin{quote}
    地図に含める点を指定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UMSPNT(N, UXP, UYP)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt N}       & {\tt (I)}    & 点の数 \\
      {\tt UXP,UYP} & {\tt (R(N))} & 点の経度, 緯度. \\
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item このルーチンは何度でも呼ぶことができる.
    \item {\tt N} の合計は64 までである.
    \item この情報から「接点」を求める時には, 点の重心を「接点」とする.
  \end{enumerate}
\end{enumerate}
%--------------------------------------------------------------------
\subsection{UMPFIT}
\begin{enumerate}
  \item 機能
  \begin{quote}
    地図投影の変換関数のパラメタを適切に決める.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UMPFIT}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
	なし.
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item このルーチンは, 与えられた情報から変換関数のパラメタを適切に
          決めて設定するが, 確定はしない. 
          ({\tt SGSTRF} は呼ばない.)
  \end{enumerate}
\end{enumerate}
%--------------------------------------------------------------------
%\subsection{UMSTRF}
%\begin{enumerate}
%  \item 機能
%  \begin{quote}
%    地図投影の変換関数のパラメタを適切に決め, 確定する.
%  \end{quote}
%  \item 呼び出し方法
%  \begin{quote}
%    {\tt CALL UMSTRF}
%  \end{quote}
%  \item パラメーターの説明
%  \begin{quote}
%	なし.
%  \end{quote}
%  \item 備考
%  \begin{enumerate}
%    \item このルーチンは, {\tt UMPFIT} と {\tt SGSTRF} を呼ぶ.
%    \item 変換関数番号が正しく設定されていれば, 
%            このルーチンの機能は {\tt GRSTRF} で実現されるので, 
%            ふつうユーザーが陽に使用する必要はない. 
%  \end{enumerate}
%\end{enumerate}
%--------------------------------------------------------------------
\section{サブルーチンの説明:地図情報の描画}
\subsection{UMPGLB}
\begin{enumerate}
  \item 機能
  \begin{quote}
    地図の境界線 (縁) と緯度線, 経度線を描く.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UMPGLB}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
	なし.
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item これは次の{\tt UMPGRD}と{\tt UMPLIM}を連続して呼んでいる.
  \end{enumerate}
\end{enumerate}

%--------------------------------------------------------------------
\subsection{UMPGRD}
\begin{enumerate}
  \item 機能
  \begin{quote}
    緯度線・経度線を描く.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UMPGRD}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
	なし.
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item 描く緯度線・経度線の種類としては major line と minor line の
      2種類がある.
    \item major line を描くかどうかは{\tt UMLGET/UMLSET}が管理する
      内部変数{\tt 'LGRIDMJ'}が決める(初期値は{\tt .TRUE.}.
      (以下, 特に断らない限り「内部変数」とは \UMPGETSET が
      管理する内部変数のことをいう. )
      描くその間隔は{\tt 'DGRIDMJ'}が決める.
      また描く線分の属性は{\tt 'INDEXMJ'}, {\tt 'ITYPEMJ'}が決める
      (初期値はそれぞれ3, 1).
      さらに子午線に関しては, 内部変数{\tt 'DGRPLMJ'}によって
      極から何度はいったところから描くかが指定できる(初期値は0).
    \item minor line を描くかどうかは
      内部変数{\tt 'LGRIDMN'}が決める(初期値は{\tt .TRUE.}.
      描くその間隔は{\tt 'DGRIDMN'}が決める.
      また描く線分の属性は{\tt 'INDEXMN'}, {\tt 'ITYPEMN'}が決める
      (初期値はそれぞれ1, 3).
      さらに子午線に関しては, 内部変数{\tt 'DGRPLMN'}によって
      極から何度はいったところから描くかが指定できる(初期値は0).
    \item {\tt 'DGRIDMJ'} と {\tt 'DGRIDMN'} は {\tt GRFRM} を
      呼んだタイミングで「不定」に設定される. 
      これらの値が不定のとき, 地図の大きさから適当な値が設定される. 
  \end{enumerate}
\end{enumerate}

%--------------------------------------------------------------------
\subsection{UMPLIM}
\begin{enumerate}
  \item 機能
  \begin{quote}
    地図の境界線 (縁) を描く.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UMPLIM}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
	なし.
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item 地図境界を描く線分のラインインデクスは
      内部変数{\tt 'INDEXBND'}が決める(初期値は3).
      ラインタイプはつねに1 (実線)である.
  \end{enumerate}
\end{enumerate}

%--------------------------------------------------------------------
%\subsection{UMPOUT}
%\begin{enumerate}
%  \item 機能
%  \begin{quote}
%    海岸線を描く.
%  \end{quote}
%  \item 呼び出し方法
%  \begin{quote}
%    {\tt CALL UMPOUT}
%  \end{quote}
%  \item パラメーターの説明
%  \begin{quote}
%	なし.
%  \end{quote}
%  \item 備考
%  \begin{enumerate}
%    \item このサブルーチンは内部で {\tt UMPMAP} (次節参照) を呼んでいる.
%    \item このサブルーチンが描く地図情報としては次の2つがある.
%    \begin{tabbing}
%      123456789 \= 1234 \=                                         \kill
%      \> \> \makebox[1cm][r]{ 1 :}
%          \makebox[8.5cm][l]{海岸線データ. } \\
%      \> \> \makebox[1cm][r]{ 2 :}
%          \makebox[8.5cm][l]{海岸線, 国境データ.
%          \rule[-1ex]{0ex}{1ex}}
%    \end{tabbing}
%    この番号は内部変数{\tt 'IGROUP'} が決める(初期値は1).
%  \end{enumerate}
%\end{enumerate}

%--------------------------------------------------------------------
\subsection{UMPMAP}
\begin{enumerate}
  \item 機能
  \begin{quote}
    各種地図情報を描く.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UMPMAP(CDSN)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt CDSN} & {\tt (C*(*))} & 地図情報ファイル名.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item {\tt CDSN} で指定したファイル名が直接用いられるとは限らない.
      実際に読み込まれるファイル名は {\tt UMQFNM} が決める.
      {\tt UMQFNM} の標準的な仕様では,
      まずカレントディレクトリを探す.
      次に{\tt GLCGET/}{\tt GLCSET}が管理する内部変数
      {\tt 'DUPATH'}のさすディレクトリを探す.
      最後に内部変数{\tt 'DSPATH'}のさすディレクトリを探す.
    \item 現在のところ次のような地図情報ファイルが用意されている.\\
    \begin{tabular}{llp{10cm}}
      {\tt 'coast\_world'}  & : & 世界の海岸線. \\
      {\tt 'border\_world'} & : & 世界の国境. \\
      {\tt 'plate\_world'}  & : & 世界のプレート境界. \\
      {\tt 'state\_usa'}    & : & アメリカの州境. \\
      {\tt 'coast\_japan'}  & : & 日本の海岸線. \\
      {\tt 'pref\_japan'}   & : & 日本の県境.
    \end{tabular}
  \end{enumerate}
\end{enumerate}


%--------------------------------------------------------------------
\subsection{UM{\it p}GET/UM{\it p}SET(UM{\it p}STX)}
\begin{enumerate}
  \item 機能
  \begin{quote}
    UMPACKサブルーチンパッケージで使用する内部変数を参照/変更する.
    ( \UMPSTX は実行時オプションによる変更を許す. )
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL \UMPGET (CP,IPARA)} \\
    {\tt CALL \UMPSET (CP,IPARA)} \\
    {\tt CALL \UMPSTX (CP,IPARA)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt CP} & {\tt (C*8)} & 内部変数の名前.  \\
      {\tt IPARA} & {\tt (I,R,L)} & 内部変数の値.
    \end{tabular}

    \vspace{1em}
    以下に{\tt CP}として指定できる名前のリストを記す.

    \vspace{1em}
    \begin{tabbing}
      1234567890 \= 1234 \=                                         \kill
      {\tt 'LGRIDMJ'} \> {\tt (L)} \>
        \parbox[t]{11cm}{{\tt UMPGRD}が緯度線・経度線を
        描くとき major line を描くかどうかを指定する.
        {\tt .TRUE.}なら描く; {\tt .FALSE.}なら描かない
        (初期値は{\tt .TRUE.}). \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'LGRIDMN'} \> {\tt (L)} \>
        \parbox[t]{11cm}{{\tt UMPGRD}が緯度線・経度線を
        描くとき minor line を描くかどうかを指定する.
        {\tt .TRUE.}なら描く; {\tt .FALSE.}なら描かない
        (初期値は{\tt .TRUE.}). \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'INDEXMJ'} \> {\tt (I)} \>
        \parbox[t]{11cm}{{\tt UMPGRD}が描く緯度線・経度線の
        major line のラインインデクス
        (初期値は{\tt 3}). \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'INDEXMN'} \> {\tt (I)} \>
        \parbox[t]{11cm}{{\tt UMPGRD}が描く緯度線・経度線の
        minor line のラインインデクス
        (初期値は{\tt 1}). \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'ITYPEMJ'} \> {\tt (I)} \>
        \parbox[t]{11cm}{{\tt UMPGRD}が描く緯度線・経度線の
        major line のラインタイプ
        (初期値は{\tt 1}). \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'ITYPEMN'} \> {\tt (I)} \>
        \parbox[t]{11cm}{{\tt UMPGRD}が描く緯度線・経度線の
        minor line のラインタイプ
        (初期値は{\tt 3}). \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'DGRIDMJ'} \> {\tt (I)} \>
        \parbox[t]{11cm}{{\tt UMPGRD}が描く緯度線・経度線の
        major line の間隔
        (単位は度; 初期値は{\tt 30}). \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'DGRIDMN'} \> {\tt (I)} \>
        \parbox[t]{11cm}{{\tt UMPGRD}が描く緯度線・経度線の
        minor line の間隔
        (単位は度; 初期値は{\tt 10}). \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'DGRPLMJ'} \> {\tt (I)} \>
        \parbox[t]{11cm}{{\tt UMPGRD}が描く経度線の
        major line を極からどれだけはいったところから描くかを指定する.
        (単位は度; 初期値は{\tt 0}). \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'DGRPLMN'} \> {\tt (I)} \>
        \parbox[t]{11cm}{{\tt UMPGRD}が描く経度線の
        minor line を極からどれだけはいったところから描くかを指定する.
        (単位は度; 初期値は{\tt 0}). \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'INDEXBND'} \> {\tt (I)} \>
        \parbox[t]{11cm}{{\tt UMPLIM}が描く地図境界線の
        ラインインデクス
        (初期値は{\tt 3}). \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'MAXBND'} \> {\tt (I)} \>
        \parbox[t]{11cm}{{\tt UMPLIM}が描く地図境界線を描くとき
        いくつぐらいの線分に分割して描くかを設定する
        (初期値は{\tt 300}). \rule[-1ex]{0ex}{1ex}} \\
%      {\tt 'IGROUP'} \> {\tt (I)} \>
%        \parbox[t]{11cm}{{\tt UMPOUT}が描く地図情報のグループ番号
%        (初期値は{\tt 1}). \rule[-1ex]{0ex}{1ex}} \\
%      \> \> \makebox[1cm][r]{ 1 :}
%          \makebox[8.5cm][l]{海岸線データ. } \\
%      \> \> \makebox[1cm][r]{ 2 :}
%          \makebox[8.5cm][l]{海岸線, 国境データ.
%          \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'INDEXOUT'} \> {\tt (I)} \>
        \parbox[t]{11cm}{海岸線などの地図情報を描く線分の
        ラインインデクス
        (初期値は{\tt 1}). \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'ITYPEOUT'} \> {\tt (I)} \>
        \parbox[t]{11cm}{海岸線などの地図情報を描く線分の
        ラインタイプ
        (初期値は{\tt 1}). \rule[-1ex]{0ex}{1ex}} \\
%      {\tt 'LWHINT'} \> {\tt (L)} \>
%        \parbox[t]{11cm}{{\tt UMSTRF} が変換パラメータを決定するとき,
%	ウインドウ情報をヒントとして使うかどうかを指定する.
%        {\tt .TRUE.} なら使う;
%        {\tt .FALSE.} なら使わない
%        (初期値は{\tt .TRUE.}). \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'LGLOBE'} \> {\tt (L)} \>
        \parbox[t]{11cm}{{\tt UMSTRF} が変換パラメータを決定するとき,
	全球を描くようにするかどうかを指定する.
        {\tt .TRUE.} なら全球を描く;
        {\tt .FALSE.} なら全球を描かない
        (初期値は{\tt .FALSE.}). \rule[-1ex]{0ex}{1ex}} \\
    \end{tabbing}

  \end{quote}
  \item 備考
  \begin{enumerate}
    \item 内部変数を管理するための下請けルーチンとして
      以下のものがある.
      \begin{quote}
      \begin{tabular}{lp{8cm}}
        {\tt UMPQNP(NCP)}       &
          内部変数の総数{\tt NCP}を求める. \\
        {\tt UMPQID(CP,IDX)}    &
          内部変数{\tt CP}の位置{\tt IDX}を求める.  \\
        {\tt UMPQCP(IDX,CP)}    &
          {\tt IDX}の位置にある内部変数の名前{\tt CP}を参照する.  \\
        {\tt UMPQVL(IDX,IPARA)} &
          {\tt IDX}の位置にある内部変数の値{\tt IPARA}を参照する.  \\
        {\tt UMPSVL(IDX,IPARA)} &
          {\tt IDX}の位置にある内部変数の値{\tt IPARA}を変更する.  \\
      \end{tabular}
      \end{quote}
    \item \UMPGET は上に述べた{\tt UMPQID}を呼んで
      内部変数の位置を求め, {\tt UMPQVL}によって値を参照する;
      \UMPSET は{\tt UMPQID}を呼んで内部変数の位置を求め,
      {\tt UMPSVL}によって値を設定する.
      したがって指定した内部変数名が見つからないとき,
      エラーメッセージは{\tt UMPQID}が出力する.
    \item {\tt ITYPE}としては適切な型の定数または変数を指定すること.
  \end{enumerate}
\end{enumerate}
