\hypertarget{namespacewa__module}{}\section{wa\+\_\+module Module Reference}
\label{namespacewa__module}\index{wa\+\_\+module@{wa\+\_\+module}}


3次元球面\+: 水平球面調和関数展開\+: \hyperlink{namespacew__module}{w\+\_\+module} の多層版  


\subsection*{Functions/\+Subroutines}
\begin{DoxyCompactItemize}
\item 
subroutine, public \hyperlink{namespacewa__module_ab24402b6024fa2c9e20157350b2d53c2}{wa\+\_\+initial} (n\+\_\+in, i\+\_\+in, j\+\_\+in, k\+\_\+in, np\+\_\+in)
\begin{DoxyCompactList}\small\item\em 初期化 \end{DoxyCompactList}\item 
subroutine, public \hyperlink{namespacewa__module_ab21348189cd647b8fbb35f0e8a23df74}{wa\+\_\+finalize}
\end{DoxyCompactItemize}


\subsection{Detailed Description}
3次元球面\+: 水平球面調和関数展開\+: \hyperlink{namespacew__module}{w\+\_\+module} の多層版 

\begin{DoxyAuthor}{Author}
Shin-\/ichi Takehiro, Youhei S\+A\+S\+A\+KI 
\end{DoxyAuthor}
\begin{DoxyCopyright}{Copyright}
Copyright (C) S\+P\+M\+O\+D\+EL Development Group, 2019. License is M\+I\+T/\+X11. see \hyperlink{COPYRIGHT}{C\+O\+P\+Y\+R\+I\+G\+HT} in detail
\end{DoxyCopyright}
spml/wa\+\_\+module モジュールは球面での3次元流体運動を 球面調和函数を用いたスペクトル法によって数値計算するための Fortran90 関数を提供する.

球面上の 1 層モデル用 \hyperlink{namespacew__module}{w\+\_\+module} モジュールを多層モデル用に 拡張したものであり, 同時に複数個のスペクトルデータ, 格子点データに対する変換が行える.

\hyperlink{namespacew__module}{w\+\_\+module} は実際には以下の下部モジュールからなる．
\begin{DoxyItemize}
\item \hyperlink{namespacewa__module__base}{wa\+\_\+module\+\_\+base}\+: 基本変換
\item \hyperlink{namespacewa__module__deriv}{wa\+\_\+module\+\_\+deriv}\+: 微分計算
\item \hyperlink{namespacewa__module__integral}{wa\+\_\+module\+\_\+integral}\+: 積分・平均計算
\item \hyperlink{namespacewa__module__spectrum}{wa\+\_\+module\+\_\+spectrum}\+: スペクトル解析
\item \hyperlink{namespacewa__module__interpolate}{wa\+\_\+module\+\_\+interpolate}\+: 補間計算
\end{DoxyItemize}

内部は I\+S\+P\+A\+C\+K3 の S\+X\+P\+A\+C\+Kサブルーチンを呼んでいる. スペクトルデータおよび格子点データの格納方法や変換の詳しい計算法 については\+I\+S\+P\+A\+C\+K3/\+S\+X\+P\+A\+CK のマニュアルを参照されたい.

\begin{DoxyWarning}{Warning}
後方非互換である点に注意されたい
\begin{DoxyItemize}
\item 旧版と異なり (I\+S\+P\+A\+C\+K/\+S\+X\+P\+A\+C\+Kのレベルで) 球面調和関数の正規化が異なる．
\item 旧版と異なり, l\+\_\+nm, nm\+\_\+l は初期化したのちにしか使うことができない.
\end{DoxyItemize}
\end{DoxyWarning}
=== 命名法


\begin{DoxyItemize}
\item 関数名の先頭 (wa\+\_\+, nma\+\_\+, na\+\_\+, xya\+\_\+, xa\+\_\+, ya\+\_\+, w\+\_\+, xy\+\_\+, x\+\_\+, y\+\_\+, a\+\_\+) は, 返す値の形を示している. wa\+\_\+ \+:\+: 水平スペクトルデータの並んだ 2 次元配列(スペクトルデータの 並びは S\+N\+P\+A\+C\+K/\+I\+S\+P\+A\+CK に従ったもの) nma\+\_\+ \+:\+: スペクトルデータの並んだ 3 次元配列 (スペクトルデータの並びは 全波数 n, 帯状波数 m で指定される 2 次元配列) na\+\_\+ \+:\+: スペクトルデータの並んだ 2 次元配列 (スペクトルデータの並びは 全波数 n で指定される 1 次元配列) xya\+\_\+ \+:\+: 2 次元格子点データの並んだ 3 次元配列 xa\+\_\+ \+:\+: 経度方向 1 次元格子点データの並んだ 2 次元配列 ya\+\_\+ \+:\+: 緯度方向 1 次元格子点データの並んだ 2 次元配列
\item 関数名の間の文字列(D\+Lon, Grad\+Lat, Grad\+Lat, Div\+Lon, Div\+Lat, Lapla, Lapla\+Inv, Jacobian)は, その関数の作用を表している.
\item 関数名の最後 (\+\_\+wa\+\_\+wa, \+\_\+wa, \+\_\+xya, \+\_\+xa, \+\_\+ya, \+\_\+w\+\_\+w, \+\_\+w, \+\_\+xy, \+\_\+x, \+\_\+y) は, 入力変数の形スペクトルデータおよび格子点データであることを示している. \+\_\+wa \+:\+: スペクトルデータの並んだ 2 次元配列 \+\_\+wa\+\_\+wa \+:\+: 2 つのスペクトルデータの並んだ 2 次元配列 \+\_\+xya \+:\+: 2 次元格子点データの並んだ 3 次元配列 \+\_\+xa \+:\+: 経度方向 1 次元格子点データの並んだ 2 次元配列 \+\_\+ya \+:\+: 緯度方向 1 次元格子点データの並んだ 2 次元配列
\end{DoxyItemize}

=== 各データの種類の説明


\begin{DoxyItemize}
\item xya \+: 2 次元格子点データの並んだ 3 次元配列.
\begin{DoxyItemize}
\item 変数の種類と次元は real(8), dimension(0\+:im-\/1,1\+:jm,\+:).
\item im, jm はそれぞれ経度, 緯度座標の格子点数であり, サブルーチン wa\+\_\+\+Initial にてあらかじめ設定しておく.
\item 扱う第 3 次元の大きさの最大値を wa\+\_\+\+Initial で設定しておく.
\end{DoxyItemize}
\item wa \+: スペクトルデータの並んだ 2 次元配列.
\begin{DoxyItemize}
\item 変数の種類と次元は real(8), dimension((nm+1)$\ast$(nm+1),\+:).
\item nm は球面調和函数の最大全波数であり, サブルーチン wa\+\_\+\+Initial にて あらかじめ設定しておく.
\item スペクトルデータの格納のされ方は関数 l\+\_\+nm, nm\+\_\+l によって調べることができる.
\item 扱う第 3 次元の大きさの最大値を wa\+\_\+\+Initial で設定しておく.
\end{DoxyItemize}
\item xa, ya \+: 経度, 緯度方向 1 次元格子点データ.
\begin{DoxyItemize}
\item 変数の種類と次元はそれぞれ real(8), dimension(0\+:im-\/1,\+:) および real(8), dimension(1\+:jm,\+:).
\end{DoxyItemize}
\item nma \+: スペクトルデータの並んだ 3 次元配列.
\begin{DoxyItemize}
\item 変数の種類と次元は real(8), dimension(0\+:nm,-\/nm\+:nm,\+:).
\item 第 1 次元が水平全波数, 第 2 次元が帯状波数を表す.
\item nm は球面調和函数の最大全波数であり, サブルーチン wa\+\_\+\+Initial にてあらかじめ設定しておく.
\end{DoxyItemize}
\item na \+: スペクトルデータの並んだ 2 次元配列.
\begin{DoxyItemize}
\item 変数の種類と次元は real(8), dimension(0\+:nm,\+:).
\item 第 1 次元が水平全波数を表す.\+nm は球面調和函数の最大全波数であり, サブルーチン wa\+\_\+\+Initial にてあらかじめ設定しておく.
\end{DoxyItemize}
\item wa\+\_\+ で始まる関数が返す値はスペクトルデータの並んだ 2 次元配列に同じ.
\item nma\+\_\+ で始まる関数が返す値はスペクトルデータの並んだ 3 次元配列に同じ.
\item na\+\_\+ で始まる関数が返す値はスペクトルデータの並んだ 2 次元配列に同じ.
\item xya\+\_\+ で始まる関数が返す値は 2 次元格子点データの並んだ 3 次元配列に 同じ.
\item xa\+\_\+, ya\+\_\+ で始まる関数が返す値は 1 次元格子点データの並んだ 2 次元 配列に同じ.
\item スペクトルデータに対する微分等の作用とは, 対応する格子点データに 微分などを作用させたデータをスペクトル変換したものことである.
\end{DoxyItemize}

== 変数・手続き群の要約

==== 初期化

wa\+\_\+\+Initial \+:\+: スペクトル変換の格子点数, 波数, 領域の大きさ, \+:\+: および同時に計算するデータの個数の最大値設定

==== 終了処理

wa\+\_\+\+Finalize \+:\+: モジュールの終了処理(割り付け配列の解放)をおこなう.

==== 座標変数

x\+\_\+\+Lon, y\+\_\+\+Lat \+:\+: 格子点座標(緯度, 経度座標)を格納した 1 次元配列 x\+\_\+\+Lon\+\_\+\+Weight, y\+\_\+\+Lat\+\_\+\+Weight \+:\+: 重み座標を格納した 1 次元配列 xy\+\_\+\+Lon, xy\+\_\+\+Lat \+:\+: 格子点データの経度・緯度座標(\+X,\+Y) (格子点データ型 2 次元配列)

==== 基本変換

xya\+\_\+wa, xy\+\_\+w \+:\+: スペクトルデータから格子データへの変換(多層, 1 層用) wa\+\_\+xya, w\+\_\+xy \+:\+: 格子データからスペクトルデータへの変換(多層, 1 層用) l\+\_\+nm, nm\+\_\+l \+:\+: スペクトルデータの格納位置と全波数・帯状波数の変換 w\+\_\+\+Stream\+Potential2\+Vector \+:\+: 流線ポテンシャルから速度場計算 w\+\_\+\+Vector2\+Vor\+Div \+:\+: 速度場から渦度発散を計算 w\+\_\+\+Vector\+Cos\+Lat2\+Vor\+Div \+:\+: 速度場から渦度発散を計算 wa\+\_\+\+Stream\+Potential2\+Vector \+:\+: 流線ポテンシャルから速度場計算 wa\+\_\+\+Vector2\+Vor\+Div \+:\+: 速度場から渦度発散を計算 wa\+\_\+\+Vector\+Cos\+Lat2\+Vor\+Div \+:\+: 速度場から渦度発散を計算

==== 微分

wa\+\_\+\+Lapla\+\_\+wa, w\+\_\+\+Lapla\+\_\+w \+:\+: スペクトルデータにラプラシアンを 作用させる(多層, 1 層用) rn \+:\+: スペクトルデータのラプラシアンを 計算するための係数 irm \+:\+: 経度微分演算用配列(未定義) wa\+\_\+\+Lapla\+Inv\+\_\+wa, w\+\_\+\+Lapla\+Inv\+\_\+w \+:\+: スペクトルデータにラプラシアンの逆変換を 作用させる(多層, 1 層用) wa\+\_\+\+D\+Lon\+\_\+wa, w\+\_\+\+D\+Lon\+\_\+w \+:\+: スペクトルデータに 経度微分∂/∂λを作用させる(多層, 1 層用) xya\+\_\+\+Grad\+Lon\+\_\+wa, xy\+\_\+\+Grad\+Lon\+\_\+w \+:\+: スペクトルデータに 勾配型経度微分 1/cosφ・∂/∂λ を 作用させる(多層, 1 層用) xya\+\_\+\+Grad\+Lat\+\_\+wa, xy\+\_\+\+Grad\+Lat\+\_\+w \+:\+: スペクトルデータに 勾配型緯度微分 ∂/∂φ を 作用させる(多層, 1 層用) wa\+\_\+\+Div\+Lon\+\_\+xya, w\+\_\+\+Div\+Lon\+\_\+xy \+:\+: 格子データに 発散型経度微分 1/cosφ・∂/∂λを 作用させる(多層, 1 層用) wa\+\_\+\+Div\+Lat\+\_\+xya, w\+\_\+\+Div\+Lat\+\_\+xy \+:\+: 格子データに 発散型緯度微分 1/cosφ・∂(g cosφ)/∂φを 作用させる (多層, 1 層用) wa\+\_\+\+Div\+\_\+xya\+\_\+xya, w\+\_\+\+Div\+\_\+xy\+\_\+xy \+:\+: ベクトル成分である 2 つの格子データに 発散を作用させる(多層, 1 層用) wa\+\_\+\+Jacobian\+\_\+wa\+\_\+wa,w\+\_\+\+Jacobian\+\_\+w\+\_\+w \+:\+: 2つのスペクトルデータからヤコビアンを 計算する(多層, 1 層用)

==== 微分(λ,μ=sinφ 座標)

xya\+\_\+\+Grad\+Lambda\+\_\+wa, xy\+\_\+\+Grad\+Lambda\+\_\+w \+:\+: スペクトルデータに 勾配型経度微分∂/∂λを作用させる (多層, 1 層用) xya\+\_\+\+Grad\+Mu\+\_\+wa, xy\+\_\+\+Grad\+Mu\+\_\+w \+:\+: スペクトルデータに 勾配型緯度微分(1-\/μ$^\wedge$2)∂/∂μ を作用させる (多層, 1 層用) wa\+\_\+\+Div\+Lambda\+\_\+xya,w\+\_\+\+Div\+Lambda\+\_\+xy \+:\+: 格子データに発散型経度微分 1 /(1-\/μ$^\wedge$2)・∂/∂λを作用させる (多層, 1 層用)

wa\+\_\+\+Div\+Mu\+\_\+xya,w\+\_\+\+Div\+Mu\+\_\+xy \+:\+: 格子データに発散型緯度微分 ∂/∂μを作用させる(多層, 1 層用)

==== 補間計算

a\+\_\+\+Interpolate\+\_\+wa, Interpolate\+\_\+w \+:\+: スペクトルデータから 任意の点の関数値を計算する.

==== 積分・平均

a\+\_\+\+Int\+Lon\+Lat\+\_\+xya, a\+\_\+\+Avr\+Lon\+Lat\+\_\+xya \+:\+: 2 次元格子点データの 全領域積分および平均(多層用) Int\+Lon\+Lat\+\_\+xy, Avr\+Lon\+Lat\+\_\+xy \+:\+: 2 次元格子点データの 全領域積分および平均(1 層用) ya\+\_\+\+Int\+Lon\+\_\+xya, ya\+\_\+\+Avr\+Lon\+\_\+xya \+:\+: 2 次元格子点データの 経度方向積分および平均(多層用) y\+\_\+\+Int\+Lon\+\_\+xy, y\+\_\+\+Avr\+Lon\+\_\+xy \+:\+: 2 次元格子点データの 経度方向積分および平均(1 層用) a\+\_\+\+Int\+Lon\+\_\+xa, a\+\_\+\+Avr\+Lon\+\_\+xa \+:\+: 1 次元(\+X)格子点データの 経度方向積分および平均(多層用) Int\+Lon\+\_\+x, Avr\+Lon\+\_\+x \+:\+: 1 次元(\+X)格子点データの 経度方向積分および平均(1 層用) xa\+\_\+\+Int\+Lat\+\_\+xya, x\+\_\+\+Avr\+Lat\+\_\+xy \+:\+: 2 次元格子点データの 緯度方向積分および平均(多層用) x\+\_\+\+Int\+Lat\+\_\+xy, x\+\_\+\+Avr\+Lat\+\_\+xy \+:\+: 2 次元格子点データの 緯度方向積分および平均(1 層用) a\+\_\+\+Int\+Lat\+\_\+ya, a\+\_\+\+Avr\+Lat\+\_\+ya \+:\+: 1 次元(\+Y)格子点データの 緯度方向積分および平均(多層用) Int\+Lat\+\_\+y, Avr\+Lat\+\_\+y \+:\+: 1 次元(\+Y)格子点データの 緯度方向積分および平均(1 層用)

==== スペクトル解析

nma\+\_\+\+Energy\+From\+Streamfunc\+\_\+wa,nm\+\_\+\+Energy\+From\+Streamfunc\+\_\+w \+:\+: 流線関数からエネルギースペクトルを計算する (水平全波数 n, 帯状波数 m 空間)(多層, 1 層用)

na\+\_\+\+Energy\+From\+Streamfunc\+\_\+wa,n\+\_\+\+Energy\+From\+Streamfunc\+\_\+w \+:\+: 流線関数からエネルギースペクトルを計算する (水平全波数 n 空間) (多層, 1 層用)

nma\+\_\+\+Enstrophy\+From\+Streamfunc\+\_\+wa,nm\+\_\+\+Enstrophy\+From\+Streamfunc\+\_\+w \+:\+: 流線関数からエンストロフィースペクトルを計算する (水平全波数 n, 帯状波数 m 空間)(多層, 1 層用)

na\+\_\+\+Enstrophy\+From\+Streamfunc\+\_\+wa,n\+\_\+\+Enstrophy\+From\+Streamfunc\+\_\+w \+:\+: 流線関数からエンストロフィースペクトルを計算する(水平全波数 n 空間) (多層, 1 層用)

w\+\_\+spectrum\+\_\+\+V\+Miss \+:\+: 欠損値 

\subsection{Function/\+Subroutine Documentation}
\mbox{\Hypertarget{namespacewa__module_ab21348189cd647b8fbb35f0e8a23df74}\label{namespacewa__module_ab21348189cd647b8fbb35f0e8a23df74}} 
\index{wa\+\_\+module@{wa\+\_\+module}!wa\+\_\+finalize@{wa\+\_\+finalize}}
\index{wa\+\_\+finalize@{wa\+\_\+finalize}!wa\+\_\+module@{wa\+\_\+module}}
\subsubsection{\texorpdfstring{wa\+\_\+finalize()}{wa\_finalize()}}
{\footnotesize\ttfamily subroutine, public wa\+\_\+module\+::wa\+\_\+finalize (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}



Definition at line 367 of file wa\+\_\+module.\+f90.



References w\+\_\+module\+::w\+\_\+finalize(), and wa\+\_\+module\+\_\+base\+::wa\+\_\+base\+\_\+finalize().


\begin{DoxyCode}
367     \textcolor{comment}{!}
368     \textcolor{comment}{! モジュールの終了処理(割り付け配列の解放)をおこなう.}
369     \textcolor{comment}{!}
370     \textcolor{comment}{! 解像度を変更する際にはこのサブルーチンを呼んで終了処理を}
371     \textcolor{comment}{! おこなったのちに再度 wa\_Initial で初期設定しなければ}
372     \textcolor{comment}{! ならない.}
373     \textcolor{comment}{!}
374     \textcolor{keyword}{call }w\_finalize
375     \textcolor{keyword}{call }wa\_base\_finalize
376 
377     \textcolor{keyword}{call }messagenotify(\textcolor{stringliteral}{'M'},\textcolor{stringliteral}{'wa\_Finalize'}, &
378       & \textcolor{stringliteral}{'wa\_module (2019/12/24) is finalized'})
379 
\end{DoxyCode}
Here is the call graph for this function\+:
\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=350pt]{namespacewa__module_ab21348189cd647b8fbb35f0e8a23df74_cgraph}
\end{center}
\end{figure}
\mbox{\Hypertarget{namespacewa__module_ab24402b6024fa2c9e20157350b2d53c2}\label{namespacewa__module_ab24402b6024fa2c9e20157350b2d53c2}} 
\index{wa\+\_\+module@{wa\+\_\+module}!wa\+\_\+initial@{wa\+\_\+initial}}
\index{wa\+\_\+initial@{wa\+\_\+initial}!wa\+\_\+module@{wa\+\_\+module}}
\subsubsection{\texorpdfstring{wa\+\_\+initial()}{wa\_initial()}}
{\footnotesize\ttfamily subroutine, public wa\+\_\+module\+::wa\+\_\+initial (\begin{DoxyParamCaption}\item[{integer, intent(in)}]{n\+\_\+in,  }\item[{integer, intent(in)}]{i\+\_\+in,  }\item[{integer, intent(in)}]{j\+\_\+in,  }\item[{integer, intent(in), optional}]{k\+\_\+in,  }\item[{integer, intent(in), optional}]{np\+\_\+in }\end{DoxyParamCaption})}



初期化 

終了処理 

Definition at line 324 of file wa\+\_\+module.\+f90.



References w\+\_\+module\+::w\+\_\+initial().


\begin{DoxyCode}
324     \textcolor{comment}{!}
325     \textcolor{comment}{! スペクトル変換の格子点数, 波数, 最大データ数(層数)および}
326     \textcolor{comment}{! OPENMP 使用時の最大スレッド数を設定する.}
327     \textcolor{comment}{!}
328     \textcolor{comment}{! 他の関数を呼ぶ前に, 最初にこのサブルーチンを呼んで初期設定を}
329     \textcolor{comment}{! しなければならない.}
330     \textcolor{comment}{!}
331     \textcolor{comment}{! SNPACK 用 wa\_initial との互換性のために引数 k\_in が用意されているが,}
332     \textcolor{comment}{! このパラメターによって同時に処理できる変数の数(層数)を制限される事はない.}
333     \textcolor{comment}{!}
334     \textcolor{comment}{! np\_in に 1 より大きな値を指定すれば ISPACK の球面調和函数変換}
335     \textcolor{comment}{! OPENMP 並列計算ルーチンが用いられる. 並列計算を実行するには,}
336     \textcolor{comment}{! 実行時に環境変数 OMP\_NUM\_THREADS を np\_in 以下の数字に設定する等の}
337     \textcolor{comment}{! システムに応じた準備が必要となる.}
338     \textcolor{comment}{!}
339     \textcolor{comment}{! np\_in に 1 より大きな値を指定しなければ並列計算ルーチンは呼ばれない.}
340     \textcolor{comment}{!}
341     \textcolor{keywordtype}{integer},\textcolor{keywordtype}{intent(in)} :: i\_in                \textcolor{comment}{! 格子点数(東西)}
342     \textcolor{keywordtype}{integer},\textcolor{keywordtype}{intent(in)} :: j\_in                \textcolor{comment}{! 格子点数(南北)}
343     \textcolor{keywordtype}{integer},\textcolor{keywordtype}{intent(in)} :: n\_in                \textcolor{comment}{! 切断波数}
344     \textcolor{keywordtype}{integer},\textcolor{keywordtype}{intent(in)}, \textcolor{keywordtype}{optional} :: k\_in      \textcolor{comment}{! 最大データ数(層数)}
345     \textcolor{keywordtype}{integer},\textcolor{keywordtype}{intent(in)}, \textcolor{keywordtype}{optional} :: np\_in     \textcolor{comment}{! OPENMP での最大スレッド数}
346 
347     \textcolor{keywordflow}{if} ( \textcolor{keyword}{present}(np\_in) ) \textcolor{keywordflow}{then}
348       \textcolor{keyword}{call }messagenotify(\textcolor{stringliteral}{'M'},\textcolor{stringliteral}{'wa\_base\_Initial'}, &
349         & \textcolor{stringliteral}{'Optional argnument np is dummy.'})
350 \textcolor{keywordflow}{    endif}
351 
352     \textcolor{keywordflow}{if} ( \textcolor{keyword}{present}(k\_in) ) \textcolor{keywordflow}{then}
353       \textcolor{keyword}{call }messagenotify(\textcolor{stringliteral}{'M'},\textcolor{stringliteral}{'wa\_base\_Initial'}, &
354         & \textcolor{stringliteral}{'Optional argnument k is dummy.'})
355 \textcolor{keywordflow}{    endif}
356 
357     \textcolor{keyword}{call }w\_initial(n\_in,i\_in,j\_in)
358     \textcolor{comment}{! call wa\_base\_Initial(k\_in)}
359 
360     \textcolor{keyword}{call }messagenotify(\textcolor{stringliteral}{'M'},\textcolor{stringliteral}{'wa\_initial'}, &
361       & \textcolor{stringliteral}{'wa\_module (2019/12/24) is initialized'})
362 
\end{DoxyCode}
Here is the call graph for this function\+:
\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=350pt]{namespacewa__module_ab24402b6024fa2c9e20157350b2d53c2_cgraph}
\end{center}
\end{figure}
