% 表題   dcpam5  コード解説 -- 変数の命名法について
%
% 履歴
%\Drireki{2009/07/12 森川 靖大}
%\Drireki{2009/02/25 森川 靖大}
%
\section{変数の命名法について}
\label{ss:変数命名法}

モデル中の主要な変数の命名法について述べる.
下記の命名法は Takehiro {\it et al.} (2006) に倣い, また
大気大循環モデルで用いるために多少の拡張をおこなったものである. 


\subsection{基本ルール}

配列型の変数名の基本形は% Takehiro {\it et al.} (2006) に準拠し, 
以下のようにする.
%
\vspace{-2ex}
\begin{verbatim}
     (次元情報に関する接頭詞)_(物理的意味)(時間方向添字)
\end{verbatim} \vspace{-2ex}
%
配列ではない変数名の基本形は以下のようにする.
%
\vspace{-2ex}
\begin{verbatim}
     (物理的意味)(時間方向添字)
\end{verbatim}  \vspace{-2ex}
%
時間方向に変化しない変数は \verb|(時間方向添字)| を記述しない.
次元情報に関する接頭詞, 物理的意味, 時間方向添字の付け方については以下で
説明する.

\subsection{次元情報に関する接頭詞・接尾詞}

\setlength{\verbatimbaselineskip}{10.0pt} 

次元情報に関する接頭詞・接尾詞には, 以下の文字を用いる.
%これは Takehiro {\it et al.} (2006) の命名規則を拡張したものである. 

\begin{verbatim}
     x  格子点データ(x / 経度座標)
     y  格子点データ(y / 緯度座標)
     z  格子点データ(z / 動径座標)
     r  格子点データ半整数レベル(z / 動径座標)
     w  球面調和関数展開スペクトルデータ
     a  上記以外の座標
\end{verbatim}
%     p  格子点データ半整数レベル(x / 経度座標)
%     q  格子点データ半整数レベル(y / 緯度座標)
%     s  sin 展開スペクトルデータ
%     c  cos 展開スペクトルデータ
%     e  フーリエ展開スペクトルデータ
%     t  チェビシェフ多項式展開スペクトルデータ

%今後検討を要する次元情報に関する接頭詞・接尾詞は以下のとおりである.

%\begin{verbatim}
%b  Bessel 関数展開スペクトルデータ 
%h  エルミート多項式展開スペクトルデータ 
%\end{verbatim}


\subsection{時間方向添字}

時間方向の添え字には大文字を用いる.
未来のタイムステップを表すには \verb|A| を, 
現在のタイムステップを表すには \verb|N| を, 
過去のタイムステップを表すに \verb|B| を用いる.
%
\vspace{-2ex}
%    AA: 時刻 t+2Δt (After のさらに After)
%    BB: 時刻 t-2Δt (Before のさらに Before)
\begin{itemize}
  \item  {\tt A} : 時刻 $t+\Delta t$ (After)
  \item  {\tt N} : 時刻 $t$      (Now)
  \item  {\tt B} : 時刻 $t-\Delta t$ (Before)
\end{itemize}
\vspace{-1ex}

%複数の時間レベルが現れる場合には, 区別するための任意の文字を追加する.
%%
%\vspace{-2ex}
%\begin{verbatim}
%    As: 時刻 t+Δτ (短い時間刻で計算した After)
%    Al: 時刻 t+Δt  (長い時間刻で計算した After)
%	
%        Bl          Nl          Al
%       -|-----------|-----------|---->t
%       -|-----|-----|-----|-----|---->τ
%        Bs    Ns    As    AAs
%\end{verbatim}
%\vspace{-3ex}
%\begin{itemize}
%\item 例 1 : 時間方向添字を持つ変数名の例
%
%\begin{verbatim}
%xy_TempA
%wa_VorB
%ss_ExnerNs
%\end{verbatim}
%\end{itemize}
%\vspace{-3ex}


\subsection{物理的意味}

基本的なルールは以下の通りである. 
%
\vspace{-2ex}
\begin{itemize}
%\item 1 文字の名前はなるべく使用しない.
%
%悪い例
%
%\begin{verbatim}
%u, v, T, ...
%\end{verbatim}
\item 頭文字は大文字とする.
\item 数式表現と揃える. ただし, 他の変数との混同が起こりそうな
      ものに関しては記述的名称を省略したものを用いる
      \footnote{混同のしやすさに関しての明確な基準は設けていない}.
\end{itemize}
\vspace{-2ex}
%
%以下に例を挙げる.
%
%\vspace{-2ex}
%\begin{itemize}
%\item \verb|U|    東西風速 (eastward wind) $ u $
%\item \verb|Div|  発散     (divergence)    $ D $
%\item \verb|Temp| 温度     (temperature)   $ T $
%\end{itemize}
%\vspace{-2ex}


\subsection{変数の例}

上記の規則に基づく変数の例を示す. 

\vspace{-3ex}
\begin{itemize}
\item 1 次元配列である座標データの例

  \begin{itemize}
   \item {\tt x\_Lon\ \ \ \ }:       経度データ
   \item {\tt y\_Lon\ \ \ \ }:       緯度データ
   \item {\tt z\_Sigma\ \ }:     鉛直σデータ (整数レベル)
   \item {\tt r\_Sigma\ \ }:     鉛直σデータ (半整数レベル)
  \end{itemize}

%      \begin{verbatim}
%
%      ---- r ---- 半整数レベル
%
%           z        整数レベル
%
%      ---- r ---- 半整数レベル
%      \end{verbatim}
%      \vspace{-1ex}

\vspace{-0ex}
\item 3 次元格子点データ, スペクトルデータの例

  \begin{itemize}
   \item {\tt xyz\_TempN}:    \  $ T (t) $:
	                         温度 格子点 3 次元 (鉛直整数レベル) データ ($t$)
   \item {\tt xyr\_UA\ \ \ }: \  $ u (t+\Delta t)$:
	                         東西風速 格子点 3 次元データ (鉛直半整数レベル)
   \item {\tt wz\_VorB\ \ }:  \  $ \zeta (t-\Delta t)$:
	                         渦度 スペクトルデータ (鉛直整数レベル)
   \item {\tt w\_DPiDtN\ }:   \  $ \displaystyle \DP{\pi}{t} (t)$:
	                         地表面気圧 $\pi = \ln p_s$ 時間変化率
	                         スペクトルデータ
  \end{itemize}

\end{itemize}
\vspace{-3ex}



%\subsection{関数の利用}
%
%Takehiro {\it et al.} (2006) の手法に準拠し, 
%    支配方程式系の数式表現に似せたソースコードを
%    記述するために, 配列を返す利用者定義関数を積極的に用いる.
%    関数の命名法に関しては \ref{関数命名法}を参照されたい.
%dcpam5 は力学過程の離散化にスペクトル法を用いており, 
%    このスペクトル演算には Takehiro {\it et al.} (2006)
%    で紹介される SPMODEL ライブラリ (spml) を用いる.
%    spml はスペクトル計算のための既存 Fortran 77 ライブラリである
%    ISPACK (Ishioka, 2005) から提供されるサブルーチン群を,
%    Fortran 90 で強化された配列機能を利用して関数でくるむことに
%    より作成されたものである. ISPACK が提供していた格子点空間と
%    スペクトル空間との変換に加えて,
%    微分積分計算をも関数として新たに追加している. 
%
%ただし, これはサブルーチンの使用を禁止するものではないことに留意すること. 
%引数の数が多い場合には関数の利用は逆にソースコードの見通しを悪くするため, 
%    引数の数および支配方程式系の数式表現との対応を
%    考慮しつつ, 関数とサブルーチンのどちらを使用するか
%    判断する必要がある. 
%
%\subsection{関数命名法}
%
%\subsubsection*{基本ルール}
%
%関数名の基本形は以下のようにする. 
%
%\vspace{-2ex}
%\begin{verbatim}
%      (返り値の次元情報を示す接頭詞)_(機能)_(引数の次元情報を示す接尾詞)
%\end{verbatim}
%\vspace{-2ex}
%
%ただし, 引数が複数である場合,
%さらにこの後ろに ``\verb|_(引数の次元情報を示す接尾詞)|''
%を引数の数だけ並べるようにする.
%
%次元情報に関する接頭詞・接尾詞の具体例は
%\ref{変数命名法}を参照されたい. 
%
%以下に Takehiro {\it et al.} (2006) の spml ライブラリから
%提供される関数を例として挙げる. 
%
%\vspace{-2ex}
%\begin{itemize}
% \item xy 2 次元データの     
%       緯度方向平均を返す関数: \verb|x_AvrLat_xy|
%
% \item 2 つの xy 2 次元データ
%       に発散を作用させてスペ
%       クトルデータを返す関数: \verb|w_Div_xy_xy|
%       
%\end{itemize}



