Class | w_wave_module_sjpack |
In: |
libsrc/w_wave_module_sjpack/w_wave_module_sjpack.f90
|
Authors: | Shin-ichi Takehiro, Youhei SASAKI |
Version: | $Id: w_wave_module_sjpack.f90 586 2013-05-23 17:42:12Z uwabami $ |
Copyright&License: | See COPYRIGHT |
spml/w_wave_module_sjpack モジュールは球面上での 2 次元流体運動を 球面調和函数を用いたスペクトル法によって 1 東西波数数値計算するための Fortran90 関数を提供する. w_wave_module_sjpack は実際には基本変換, 微分計算をそれぞれ担っている 下部モジュール w_wave_base_module_sjpack, w_wave_deriv_module_sjpack, w_wave_interpolate_module_sjpack からなっている. 内部で ISPACK の LJPACK(SJPACK) の Fortran77 サブルーチンを呼んでいる. スペクトルデータおよび格子点データの格納方法や変換の詳しい計算法に ついては ISPACK/SJPACK のマニュアルを参照されたい. w_wave_modulde_sjpack で提供される関数・サブルーチンは 2 次元的 流体運動を扱う w_module_sjpack モジュールで用いられているものと 名前およびインターフェースが共通になるように設計してある. したがって, w_module を用いて構成された 2 次元モデルを経度方向に 1 波数成分のモデルへと改造するには次の手順が必要となる. * use 文での w_module_sjpack の引用を w_wave_module_sjpack に変更する. * w_Initial の引数に東西破数を追加する. * 配列の大きさを経度方向格子点数 im -> 2 に, 水平波数を (nm+1)**2 -> 2*(nm-m+1) に変更する. * DO 文で水平波数に関してループを回しているところを (nm+1)**2 -> 2*(nm-m+1) に変更する. * gtool 出力の次元変数変更する.
w_ : | スペクトルデータ |
xy_ : | 2 次元格子点データ(y 方向緯度座標, x 方向スペクトルデータ実数虚数) |
_w : | スペクトルデータ |
_w_w : | 2 つのスペクトルデータ |
_xy : | 2 次元格子点データ(y 方向緯度座標, x 方向スペクトルデータ実数虚数) |
w_Initial : | スペクトル変換の格子点数, 波数, 領域の大きさの設定 |
w_Finalize : | モジュールの終了処理(割り付け配列の解放)をおこなう. |
y_Lat : | 格子点座標(経度座標)を格納した 1 次元配列 |
y_Lat_Weight : | 重み座標を格納した 1 次元配列 |
xy_Lat : | 格子点データの緯度座標(格子点データ型 2 次元配列) |
xy_w : | スペクトルデータから格子データへの変換 |
w_xy : | 格子データからスペクトルデータへの変換 |
l_nm, nm_l : | スペクトルデータの格納位置と全波数・帯状波数の変換 |
w_Lapla_w : | スペクトルデータにラプラシアンを作用させる |
rn : | スペクトルデータのラプラシアンを計算するための係数. |
irm : | 経度微分演算用配列(未定義) |
w_LaplaInv_w : | スペクトルデータにラプラシアンの逆変換を作用させる |
w_DLon_w : | スペクトルデータに経度微分∂/∂λを作用させる |
xy_GradLon_w : | スペクトルデータに 勾配型経度微分 1/cosφ・∂/∂λを作用させる |
xy_GradLat_w : | スペクトルデータに勾配型緯度微分∂/∂φを作用させる |
w_DivLon_xy : | 格子データに発散型経度微分 1/cosφ・∂/∂λを作用させる |
w_DivLat_xy : | 格子データに 発散型緯度微分 1/cosφ・∂(g cosφ)/∂φを作用させる |
w_Div_xy_xy : | ベクトル成分である 2 つの格子データに発散を作用させる |
xy_GradLambda_w : | スペクトルデータに勾配型経度微分∂/∂λを作用させる |
xy_GradMu_w : | スペクトルデータに 勾配型緯度微分 (1-μ^2)∂/∂μを作用させる |
w_DivLambda_xy : | 格子データに 発散型経度微分 1/(1-μ^2)・∂/∂λを作用させる |
w_DivMu_xy : | 格子データに発散型緯度微分∂/∂μを作用させる |
Interpolate_w : | スペクトルデータから任意の点での値を求める. |
Function : | |||
Interpolate_array00_w : | real(8)
| ||
w_data(2*(nm-m+1)) : | real(8), intent(IN)
| ||
alon : | real(8), intent(IN)
| ||
alat : | real(8), intent(IN)
|
緯度 alat, 経度 alon における関数値を その球面調和変換係数 w_data から補間計算する
Original external subprogram is w_wave_interpolate_module_sjpack#Interpolate_w
Function : | |||
l_nm_array01(size(marray)) : | integer
| ||
n : | integer, intent(in)
| ||
marray(:) : | integer, intent(in)
|
スペクトルデータの格納位置
全波数(n)と東西波数(m)からそのスペクトルデータの格納位置を返す.
第 1 引数 n が整数, 第 2 引数 marray が整数 1 次元配列の場合, marray と同じ大きさの 1 次元整数配列を返す.
Original external subprogram is w_wave_base_module_sjpack#l_nm
Function : | |||
l_nm_array00 : | integer
| ||
n_in : | integer, intent(in)
| ||
m_in : | integer, intent(in)
|
全波数(n)と東西波数(m)からそのスペクトルデータの格納位置を返す.
引数 n,m がともに整数値の場合, 整数値を返す.
Original external subprogram is w_wave_base_module_sjpack#l_nm
Function : | |||
l_nm_array10(size(narray)) : | integer
| ||
narray(:) : | integer, intent(in)
| ||
m_in : | integer, intent(in)
|
全波数(n)と東西波数(m)からそのスペクトルデータの格納位置を返す.
第 1 引数 narray が整数 1 次元配列, 第 2 引数 m が整数の場合, narray と同じ大きさの 1 次元整数配列を返す.
Original external subprogram is w_wave_base_module_sjpack#l_nm
Function : | |||
l_nm_array11(size(narray)) : | integer
| ||
narray(:) : | integer, intent(in)
| ||
marray(:) : | integer, intent(in)
|
全波数(n)と東西波数(m)からそのスペクトルデータの格納位置を返す.
第 1,2 引数 narray, marray がともに整数 1 次元配列の場合, narray, marray と同じ大きさの 1 次元整数配列を返す. narray, marray は同じ大きさでなければならない.
Original external subprogram is w_wave_base_module_sjpack#l_nm
Function : | |||
nm_l_int(2) : | integer
| ||
l : | integer, intent(in)
|
スペクトルデータの格納位置(l)から全波数(n)と東西波数(m)を返す.
引数 l が整数値の場合, 対応する全波数と帯状波数を 長さ 2 の 1 次元整数値を返す. nm_l(1) が全波数, nm_l(2) が帯状波数である.
Original external subprogram is w_wave_base_module_sjpack#nm_l
Function : | |||
nm_l_array(size(larray),2) : | integer
| ||
larray(:) : | integer, intent(in)
|
スペクトルデータの格納位置(l)から全波数(n)と東西波数(m)を返す.
引数 larray が整数 1 次元配列の場合, larray に対応する n, m を格納した 2 次元整数配列を返す. nm_l_array(:,1) が全波数, nm_l_array(:,2) が帯状波数である.
Original external subprogram is w_wave_base_module_sjpack#nm_l
Variable : | |||
rn(:,:) : | real(8), allocatable
|
Original external subprogram is w_wave_deriv_module_sjpack#rn
Function : | |||
w_DLon_w(2*(nn-m+1)) : | real(8)
| ||
w_data(2*(nn-m+1)) : | real(8), intent(in)
|
入力スペクトルデータに経度微分∂/∂λを作用する.
スペクトルデータの経度微分とは, 対応する格子点データに 経度微分を作用させたデータのスペクトル変換のことである.
Original external subprogram is w_wave_base_module_sjpack#w_DLon_w
Function : | |||
w_DivLat_xy(2*(nm-m+1)) : | real(8)
| ||
xy_data(0:im-1,1:jm) : | real(8), intent(in)
|
格子点データに発散型緯度微分 1/cosφ・∂(f cosφ)/∂φ を作用させて スペクトルデータに変換して返す(1 層用).
Original external subprogram is w_wave_deriv_module_sjpack#w_DivLat_xy
Function : | |||
w_DivLon_xy(2*(nm-m+1)) : | real(8)
| ||
xy_data(0:im-1,1:jm) : | real(8), intent(in)
|
格子点データに発散型経度微分 1/cosφ・∂/∂λ を作用させて スペクトルデータに変換して返す(1 層用).
Original external subprogram is w_wave_deriv_module_sjpack#w_DivLon_xy
Function : | |||
w_Div_xy_xy(2*(nm-m+1)) : | real(8)
| ||
xy_u(0:im-1,1:jm) : | real(8), intent(in)
| ||
xy_v(0:im-1,1:jm) : | real(8), intent(in)
|
2 つの入力格子点データをベクトル成分とする発散を計算し, スペクトルデータとして返す(1 層用).
Original external subprogram is w_wave_deriv_module_sjpack#w_Div_xy_xy
Subroutine : |
モジュールの終了処理(割り付け配列の解放)をおこなう.
解像度を変更する際にはこのサブルーチンを呼んで終了処理を おこなったのちに再度 w_Initial で初期設定しなければ ならない.
subroutine w_Finalize ! ! モジュールの終了処理(割り付け配列の解放)をおこなう. ! ! 解像度を変更する際にはこのサブルーチンを呼んで終了処理を ! おこなったのちに再度 w_Initial で初期設定しなければ ! ならない. ! call w_base_Finalize call w_deriv_Finalize call MessageNotify('M','w_Finalize', 'w_module_sjpack (2014/05/17) is finalized') end subroutine w_Finalize
Function : | |||
w_LaplaInv_w(2*(nm-m+1)) : | real(8)
| ||
w_data(2*(nm-m+1)) : | real(8), intent(in)
|
入力スペクトルデータに逆ラプラシアン
▽^{-2} =[1/cos^2φ・∂^2/∂λ^2 + 1/cosφ・∂/∂φ(cosφ∂/∂φ)]^{-1}
を作用する(1 層用).
スペクトルデータの逆ラプラシアンとは, 対応する格子点データに 逆ラプラシアンを作用させたデータのスペクトル変換のことである.
Original external subprogram is w_wave_deriv_module_sjpack#w_LaplaInv_w
Function : | |||
w_Lapla_w(2*(nm-m+1)) : | real(8)
| ||
w_data(2*(nm-m+1)) : | real(8), intent(in)
|
入力スペクトルデータにラプラシアン
▽^2 = 1/cos^2φ・∂^2/∂λ^2 + 1/cosφ・∂/∂φ(cosφ∂/∂φ)
を作用する(1 層用).
スペクトルデータのラプラシアンとは, 対応する格子点データに ラプラシアンを作用させたデータのスペクトル変換のことである.
Original external subprogram is w_wave_deriv_module_sjpack#w_Lapla_w
Subroutine : | |||
n_in : | integer,intent(in)
| ||
m_in : | integer,intent(in)
| ||
i_in : | integer,intent(in)
| ||
j_in : | integer,intent(in)
|
スペクトル変換の格子点数, 波数を設定する.
他の関数を呼ぶ前に, 最初にこのサブルーチンを呼んで初期設定を しなければならない.
subroutine w_initial(n_in,m_in,i_in,j_in) ! ! スペクトル変換の格子点数, 波数を設定する. ! ! 他の関数を呼ぶ前に, 最初にこのサブルーチンを呼んで初期設定を ! しなければならない. ! integer,intent(in) :: i_in !(in) 格子点数(東西) integer,intent(in) :: j_in !(in) 格子点数(南北) integer,intent(in) :: n_in !(in) 切断波数の設定 integer,intent(in) :: m_in !(in) 東西波数 call w_base_initial(n_in,m_in,i_in,j_in) call w_deriv_initial call MessageNotify('M','w_initial', 'w_wave_module_sjpack (2014/05/17) is initialized') end subroutine w_initial
Function : | |||
w_xy(2*(nn-m+1)) : | real(8)
| ||
xy_data(0:im-1,1:jm) : | real(8), intent(in)
| ||
ipow : | integer, intent(in), optional
| ||
iflag : | integer, intent(in), optional
|
格子データからスペクトルデータへ(正)変換する(1 層用).
Original external subprogram is w_wave_base_module_sjpack#w_xy
Function : | |||
xy_GradLat_w(0:im-1,1:jm) : | real(8)
| ||
w_data(2*(nm-m+1)) : | real(8), intent(in)
|
スペクトルデータに勾配型緯度微分 ∂/∂φ を作用させて 格子点データに変換して返す(1 層用).
Original external subprogram is w_wave_deriv_module_sjpack#xy_GradLat_w
Function : | |||
xy_GradLon_w(0:im-1,1:jm) : | real(8)
| ||
w_data(2*(nm-m+1)) : | real(8), intent(in)
|
スペクトルデータに勾配型経度微分 1/cosφ・∂/∂λ を 作用させた格子点データを返す(1 層用).
Original external subprogram is w_wave_deriv_module_sjpack#xy_GradLon_w
Variable : | |
xy_Lat(:,:) : | real(8), allocatable |
Original external subprogram is w_wave_base_module_sjpack#xy_Lat
Function : | |||
xy_w(0:im-1,1:jm) : | real(8)
| ||
w_data(2*(nn-m+1)) : | real(8), intent(in)
| ||
ipow : | integer, intent(in), optional
| ||
iflag : | integer, intent(in), optional
|
スペクトルデータから格子データへ変換する(1 層用).
Original external subprogram is w_wave_base_module_sjpack#xy_w
Variable : | |||
y_Lat(:) : | real(8), allocatable
|
Original external subprogram is w_wave_base_module_sjpack#y_Lat
Variable : | |||
y_Lat_Weight(:) : | real(8), allocatable
|
Original external subprogram is w_wave_base_module_sjpack#y_Lat_Weight