% 表題   AGCM5 第4部 コードリファレンス スペクトル格子点変換サブルーチン
%
% 履歴
\Drireki{91/12/18 竹広真一}
\Drireki{93/02/07 竹広真一}
\Drireki{93/09/02 保坂征宏}
%

\section{サブルーチンの説明 : スペクトル格子点変換サブルーチン}


まず実行初期に \verb!SPSTUP! を呼ぶこと. 
球面調和函数, 並びにスペクトルの添え字順番配列が計算される. 
以後, 
\verb!W2G! でスペクトルから格子点へ, 
\verb!G2W! で格子点からスペクトルへ
データが変換される. 

\subsection{W2G}
\label{w2g}
\begin{enumerate}
  \item 機能 
    \begin{quote}
        スペクトル空間のデータを格子点のデータに変換する. 
    \end{quote}
  \item 呼び出し方法 
      \begin{verbatim}
          CALL W2G
         M         ( GDATA ,
         I           WDATA ,
         I           HGRAD , HFUNC , KMAXD )
      \end{verbatim}
  \item パラメーターの説明 
    \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt GDATA} & {\tt [R]} & 長さ {\tt (IDIM*JDIM,KMAXD)}の配列. 
                                格子点データ.\\
      {\tt WDATA} & {\tt [R]} & 長さ {\tt (NMDIM,KMAXD)}の配列. 
                                スペクトルデータ. \\
      {\tt HGRAD} & {\tt [C*(4)]} & 
            微分フラグ. 
            {\tt HGRAD} の1文字目が {\tt X} のときは
            ${\displaystyle \DP[]{}{\lambda}}$ を作用された格子点値が返される. 
            {\tt HGRAD} の1文字目が {\tt Y} のときは
            ${\displaystyle (1-\mu^2) \DP[]{}{\mu}}$ を
            作用された格子点値が返される. \\
      {\tt HFUNC} & {\tt [C*(4)]} & 
            符号フラグ. {\tt HFUNC}の1文字目が {\tt A} のときは値を追加, 
            {\tt S} のときは値を引算, {\tt N} のときは符号を変えて代入, 
            それ以外のときはそのまま値を代入する. 
            加えて{\tt HFUNC} の4文字目が {\tt O}のときは...\\ 
    \end{tabular}
    \end{quote}
  \item 備考 
    \begin{enumerate}
        \item 配列の大きさは zcdim をインクルードすることにより設定される. 
        \item 格子点データ, スペクトルデータの仕様はまだ調べていない. 
    \end{enumerate}
\end{enumerate}

\subsection{G2W}
\label{g2w}
\begin{enumerate}
  \item 機能 
    \begin{quote}
        格子点のデータをスペクトル空間のデータに変換する. 
    \end{quote}
  \item 呼び出し方法 
      \begin{verbatim}
          CALL G2W
         M         ( WDATA ,
         I           GDATA ,
         I           HGRAD , HFUNC , KMAXD )
      \end{verbatim}
  \item パラメーターの説明 
    \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt WDATA} & {\tt [R]} & 長さ {\tt (NMDIM,KMAXD)}の配列. 
                                スペクトルデータ. \\
      {\tt GDATA} & {\tt [R]} & 長さ {\tt (IDIM*JDIM,KMAXD)}の配列. 
                                格子点データ.\\
      {\tt HGRAD} & {\tt [C*(4)]} & 
            微分フラグ. 
            {\tt HGRAD} の1文字目が {\tt X} のときは
            ${\displaystyle \Dinv{1-\mu^2} \DP[]{}{\lambda}}$ を
            作用されたスペクトルデータが返される. 
            {\tt HGRAD} の1文字目が {\tt Y} のときは
            ${\displaystyle- \DP[]{}{\mu}}$ を作用された
            スペクトルデータが返される(符号に注意). \\
      {\tt HFUNC} & {\tt [C*(4)]} & 
            符号フラグ. {\tt HFUNC}の1文字目が {\tt A} のときは値を追加, 
            {\tt S} のときは値を引算, {\tt N} のときは符号を変えて代入, 
            それ以外のときはそのまま値を代入する. 
            加えて{\tt HFUNC} の4文字目が {\tt O}のときは...\\ 
    \end{tabular}
    \end{quote}
  \item 備考 
    \begin{enumerate}
        \item 配列の大きさは zcdim をインクルードすることにより設定される. 
        \item 格子点データ, スペクトルデータの仕様はまだ調べていない. 
    \end{enumerate}
\end{enumerate}




\subsection{SPSTUP}
\label{spstup}
\begin{enumerate}
  \item 機能 
    \begin{quote}
      球面調和函数の計算ルーチンを呼び, 
      その値を \verb!SUBROUTINE W2G! に記憶する.  
      スペクトル添え字順番配列を作成する. 
    \end{quote}
      
  \item 呼び出し方法
    \begin{verbatim}
      ENTRY      SPSTUP               !" 球面調和関数準備
     I         ( QSINLA, QGW   , ER    ,
     O           NMO                     )
    \end{verbatim}
    
  \item パラメータの説明
    \begin{verbatim}
*      REAL * 8   QSINLA( JDIM )              !" sin(緯度) (倍精度
*      REAL * 8   QGW   ( JDIM )              !" ガウス荷重 ：倍精度
*      REAL       ER                          !" 地球半径
*      INTEGER    NMO   ( 2, 0:MMAX, 0:LMAX ) !" スペクトルの添字順番
    \end{verbatim}
    
  \item 備考
  
    \begin{enumerate}
    \item 計算手順は以下のとおり. 
      \begin{enumerate}
        \item FFT 使用準備\footnotemark . ( \verb!RFFT1M! ) \\
                \footnotetext{
                     IMAX>1 の時のみ. }
              三角関数表の作成など. 
        \item ルジャンドル函数の計算\footnotemark . ( \verb!SETPNM! ) \\
               \footnotetext{
                     JMAX>1 の時のみ. 
                     南北格子点が一つである JMAX=1 の時は, 
                     ルジャンドル函数は計算せず, 
                     単に NMO(1,M,0), NMO(2,M,0) に
                     1 から順に数字を与えるのみ. 
                   }
              $P_n^m, \DP{P_n^m}{\mu}$ , 
              スペクトル添え字順番行列 \verb!NMO! の作成.  
        \item ガウス荷重の計算. \\
              ガウス荷重 \verb!GWX!, 微分用ガウス荷重 \verb!GWDEL! 
              を
              \begin{verbatim}
         GWX  ( J ) = QGW( J )
         GWDEL( J ) = QGW( J ) / ER / ( 1. - QSINLA(J)**2 )
              \end{verbatim}
              の様に, \verb!QGW! を元に作成し, \verb!W2G! に記憶する. 
        \item \verb!NMO! を \verb!NMOX! にコピーしておく\footnotemark . 
               \footnotetext{
                     なぜ？}
      \end{enumerate}
    \end{enumerate}
\end{enumerate}
