| Class | wa_module |
| In: |
src/wa_module.f90
|
spml/w_module モジュールは球面上での 2 次元流体運動を 球面調和函数を用いたスペクトル法によって数値計算するための Fortran90 関数を提供する. 球面上の 1 層モデル用 wa_module モジュールを多層モデル用に 拡張したものであり, 同時に複数個のスペクトルデータ, 格子点データに 対する変換が行える. wa_module は実際には基本変換, 微分計算, 積分・平均計算, スペクトル解析 をそれぞれ担っている下部モジュール wa_base_module, wa_deriv_module, wa_integral_module, wa_spectrum_module および 1 層用のモジュール w_module からなっている. 内部で ISPACK の SPPACK と SNPACK の Fortran77 サブルーチンを呼んでいる. スペクトルデータおよび格子点データの格納方法や変換の詳しい計算法に ついては ISPACK/SNPACK,SPPACK のマニュアルを参照されたい.
関数・変数の名前と型について
w_module でのものに追加される関数・変数の名前と型についてのみ説明する. w_module での関数・変数の名前と型については w_module の該当項を参照 されたい.
◯命名法
* 関数名の先頭 (wa_, nma_, na_, xya_, xa_, ya_, w_, xy_, x_, y_, a_) は,
返す値の形を示している.
wa_ : 水平スペクトルデータの並んだ 2 次元配列(スペクトルデータの
並びは SNPACK/ISPACK に従ったもの)
nma_ : スペクトルデータの並んだ 3 次元配列 (スペクトルデータの並びは
全波数 n, 帯状波数 m で指定される 2 次元配列)
na_ : スペクトルデータの並んだ 2 次元配列 (スペクトルデータの並びは
全波数 n で指定される 1 次元配列)
xya_ : 2 次元格子点データの並んだ 3 次元配列
xa_ : 経度方向 1 次元格子点データの並んだ 2 次元配列
ya_ : 緯度方向 1 次元格子点データの並んだ 2 次元配列
* 関数名の間の文字列(DLon, GradLat, GradLat, DivLon, DivLat, Lapla,
LaplaInv, Jacobian)は, その関数の作用を表している.
* 関数名の最後 (_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 次元配列
◯各データの種類の説明
* xya : 2 次元格子点データの並んだ 3 次元配列.
変数の種類と次元は real(8), dimension(im,jm,:).
im, jm はそれぞれ経度, 緯度座標の格子点数であり, サブルーチン
wa_Initial にてあらかじめ設定しておく.
扱う第 3 次元の大きさの最大値を wa_Initial で設定しておく.
* wa : スペクトルデータの並んだ 2 次元配列.
変数の種類と次元は real(8), dimension((nm+1)*(nm+1),:).
nm は球面調和函数の最大全波数であり, サブルーチン wa_Initial にて
あらかじめ設定しておく. スペクトルデータの格納のされ方は関数
l_nm, nm_l によって調べることができる. 扱う第 3 次元の大きさの
最大値を wa_Initial で設定しておく.
* xa, ya : 経度, 緯度方向 1 次元格子点データ.
変数の種類と次元はそれぞれ real(8), dimension(im,:)
および real(8), dimension(jm,:).
* nma : スペクトルデータの並んだ 3 次元配列.
変数の種類と次元は real(8), dimension(0:nm,-nm:nm,:).
第 1 次元が水平全波数, 第 2 次元が帯状波数を表す. nm は球面調和函数の
最大全波数であり, サブルーチン wa_Initial にてあらかじめ設定しておく.
* na : スペクトルデータの並んだ 2 次元配列.
変数の種類と次元は real(8), dimension(0:nm,:).
第 1 次元が水平全波数を表す.nm は球面調和函数の最大全波数であり,
サブルーチン wa_Initial にてあらかじめ設定しておく.
* wa_ で始まる関数が返す値はスペクトルデータの並んだ 2 次元配列に同じ.
* nma_ で始まる関数が返す値はスペクトルデータの並んだ 3 次元配列に同じ.
* na_ で始まる関数が返す値はスペクトルデータの並んだ 2 次元配列に同じ.
* xya_ で始まる関数が返す値は 2 次元格子点データの並んだ 3 次元配列に
同じ.
* xa_, ya_ で始まる関数が返す値は 1 次元格子点データの並んだ 2 次元
配列に同じ.
* スペクトルデータに対する微分等の作用とは, 対応する格子点データに
微分などを作用させたデータをスペクトル変換したものことである.
| Function : | |||
| AvrLat_y : | real(8)
| ||
| y_data(jm) : | real(8), intent(in)
|
1 次元(Y)格子点データの緯度(Y)方向平均(1 層用).
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight の総和で割ることで平均している.
The entity is w_integral_module#AvrLat_y
| Function : | |||
| AvrLonLat_xy : | real(8)
| ||
| xy_data(im,jm) : | real(8), intent(in)
|
2 次元緯度経度格子点データの全領域平均(1 層用).
実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた 総和を計算し, x_X_Weight*y_Y_Weight の総和で割ることで平均している.
The entity is w_integral_module#AvrLonLat_xy
| Function : | |||
| AvrLon_x : | real(8)
| ||
| x_data(jm) : | real(8), intent(in)
|
1 次元(X)格子点データの経度(X)方向平均(1 層用).
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight の総和で割ることで平均している.
The entity is w_integral_module#AvrLon_x
| Function : | |||
| IntLat_y : | real(8)
| ||
| y_data(jm) : | real(8), intent(in)
|
1 次元緯度(Y)格子点データの Y 方向積分(1 層用).
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.
The entity is w_integral_module#IntLat_y
| Function : | |||
| IntLonLat_xy : | real(8)
| ||
| xy_data(im,jm) : | real(8), intent(in)
|
2 次元緯度経度格子点データの全領域積分(1 層用).
実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた 総和を計算している.
The entity is w_integral_module#IntLonLat_xy
| Function : | |||
| IntLon_x : | real(8)
| ||
| x_data(im) : | real(8), intent(in)
|
1 次元経度(X)格子点データの X 方向積分(1 層用).
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.
The entity is w_integral_module#IntLon_x
| Function : | |||
| a_AvrLat_ya(size(ya_data,2)) : | real(8)
| ||
| ya_data(:,:) : | real(8), intent(in)
|
1 次元(Y)格子点データの緯度(Y)方向平均(多層用).
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight の総和で割ることで平均している.
The entity is wa_integral_module#a_AvrLat_ya
| Function : | |||
| a_AvrLonLat_xya(size(xya_data,3)) : | real(8)
| ||
| xya_data(:,:,:) : | real(8), intent(in)
|
2 次元緯度経度格子点データの全領域平均(多層用).
実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた 総和を計算し, x_X_Weight*y_Y_Weight の総和で割ることで平均している.
The entity is wa_integral_module#a_AvrLonLat_xya
| Function : | |||
| a_AvrLon_xa(size(xa_data,2)) : | real(8)
| ||
| xa_data(:,:) : | real(8), intent(in)
|
経度平均
1 次元(X)格子点データの経度(X)方向平均(多層用).
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight の総和で割ることで平均している.
The entity is wa_integral_module#a_AvrLon_xa
| Function : | |||
| a_IntLat_ya(size(ya_data,2)) : | real(8)
| ||
| ya_data(:,:) : | real(8), intent(in)
|
1 次元緯度(Y)格子点データの Y 方向積分(多層用).
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.
The entity is wa_integral_module#a_IntLat_ya
| Function : | |||
| a_IntLonLat_xya(size(xya_data,3)) : | real(8)
| ||
| xya_data(:,:,:) : | real(8), intent(in)
|
2 次元緯度経度格子点データの全領域積分(多層用).
実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた 総和を計算している.
The entity is wa_integral_module#a_IntLonLat_xya
| Function : | |||
| a_IntLon_xa(size(xa_data,2)) : | real(8)
| ||
| xa_data(:,:) : | real(8), intent(in)
|
経度積分
1 次元経度(X)格子点データの X 方向積分(多層用).
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.
The entity is wa_integral_module#a_IntLon_xa
| Function : | |||
| l_nm_array00 : | integer
| ||
| n : | integer, intent(in)
| ||
| m : | integer, intent(in)
|
全波数(n)と東西波数(m)からそのスペクトルデータの格納位置を返す.
引数 n,m がともに整数値の場合, 整数値を返す.
The entity is w_base_module#l_nm
| Function : | |||
| l_nm_array01(size(marray)) : | integer
| ||
| n : | integer, intent(in)
| ||
| marray(:) : | integer, intent(in)
|
スペクトルデータの格納位置
全波数(n)と東西波数(m)からそのスペクトルデータの格納位置を返す.
第 1 引数 n が整数, 第 2 引数 marray が整数 1 次元配列の場合, marray と同じ大きさの 1 次元整数配列を返す.
The entity is w_base_module#l_nm
| Function : | |||
| l_nm_array10(size(narray)) : | integer
| ||
| narray(:) : | integer, intent(in)
| ||
| m : | integer, intent(in)
|
全波数(n)と東西波数(m)からそのスペクトルデータの格納位置を返す.
第 1 引数 narray が整数 1 次元配列, 第 2 引数 m が整数の場合, narray と同じ大きさの 1 次元整数配列を返す.
The entity is w_base_module#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 は同じ大きさでなければならない.
The entity is w_base_module#l_nm
| Function : | |||
| n_EnergyFromStreamfunc_w : | real(8), dimension(0:nm)
| ||
| w_Strfunc(:) : | real(8), intent(in)
|
流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を 計算する(1 層用).
* 全波数 n の流線関数のスペクトル成分ψ(n,m) から エネルギースペクトルはΣ[m=-nm]^nm(1/2)n(n+1)ψ(n,m)^2 と計算される. * 全てのエネルギースペクトル成分の和に 4πをかけたものが 球面上での全エネルギーに等しい.
The entity is w_spectrum_module#n_EnergyFromStreamfunc_w
| Function : | |||
| n_EnstrophyFromStreamfunc_w : | real(8), dimension(0:nm)
| ||
| w_Strfunc(:) : | real(8), intent(in)
|
流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を 計算する(1 層用)
The entity is w_spectrum_module#n_EnstrophyFromStreamfunc_w
| Function : | |||
| na_EnergyFromStreamfunc_wa : | real(8), dimension(0:nm,size(wa_Strfunc,2))
| ||
| wa_Strfunc(:,:) : | real(8), intent(in)
|
流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を 計算する(多層用).
* 全波数 n の流線関数のスペクトル成分ψ(n,m) から エネルギースペクトルはΣ[m=-nm]^nm(1/2)n(n+1)ψ(n,m)^2 と計算される. * 全てのエネルギースペクトル成分の和に 4πをかけたものが 球面上での全エネルギーに等しい.
The entity is wa_spectrum_module#na_EnergyFromStreamfunc_wa
| Function : | |||
| na_EnstrophyFromStreamfunc_wa : | real(8), dimension(0:nm,size(wa_Strfunc,2))
| ||
| wa_Strfunc(:,:) : | real(8), intent(in)
|
流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を 計算する(多層用)
The entity is wa_spectrum_module#na_EnstrophyFromStreamfunc_wa
| Function : | |||
| nm_EnergyFromStreamfunc_w : | real(8), dimension(0:nm,-nm:nm)
| ||
| w_Strfunc(:) : | real(8), intent(in)
|
流線関数のスペクトルデータからエネルギーの球面調和函数成分 (スペクトル)を計算する(1 層用).
* 全波数 n, 帯状波数 m の流線関数のスペクトル成分ψ(n,m) から エネルギースペクトルは (1/2)n(n+1)ψ(n,m)^2 と計算される. * 全てのエネルギースペクトル成分の和に4πをかけたものが球面上での 全エネルギーに等しい. * データの存在しない全波数 n, 帯状波数 m の配列には欠損値が格納される. 欠損値の値はモジュール変数 w_spectrum_VMiss によって設定できる (初期値は -999.0)
The entity is w_spectrum_module#nm_EnergyFromStreamfunc_w
| Function : | |||
| nm_EnstrophyFromStreamfunc_w : | real(8), dimension(0:nm,-nm:nm)
| ||
| w_Strfunc(:) : | real(8), intent(in)
|
流線関数のスペクトルデータからエンストロフィーの球面調和函数成分 (スペクトル)を計算する(1 層用).
エンストロフィースペクトルは (1/2)n^2(n+1)^2ψ(n,m)^2 と計算される.
The entity is w_spectrum_module#nm_EnstrophyFromStreamfunc_w
| Function : | |||
| nm_l_int(2) : | integer
| ||
| l : | integer, intent(in)
|
スペクトルデータの格納位置(l)から全波数(n)と東西波数(m)を返す.
引数 l が整数値の場合, 対応する全波数と帯状波数を 長さ 2 の 1 次元整数値を返す. nm_l(1) が全波数, nm_l(2) が帯状波数である.
The entity is w_base_module#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) が帯状波数である.
The entity is w_base_module#nm_l
| Function : | |||
| nma_EnergyFromStreamfunc_wa : | real(8), dimension(0:nm,-nm:nm,size(wa_Strfunc,2))
| ||
| wa_Strfunc(:,:) : | real(8), intent(in)
|
流線関数のスペクトルデータからエネルギーの球面調和函数成分 (スペクトル)を計算する(多層用).
* 全波数 n, 帯状波数 m の流線関数のスペクトル成分ψ(n,m) から エネルギースペクトルは (1/2)n(n+1)ψ(n,m)^2 と計算される. * 全てのエネルギースペクトル成分の和に4πをかけたものが球面上での 全エネルギーに等しい. * データの存在しない全波数 n, 帯状波数 m の配列には欠損値が格納される. 欠損値の値はモジュール変数 w_spectrum_VMiss によって設定できる (初期値は -999.0)
The entity is wa_spectrum_module#nma_EnergyFromStreamfunc_wa
| Function : | |||
| nma_EnstrophyFromStreamfunc_wa : | real(8), dimension(0:nm,-nm:nm,size(wa_Strfunc,2))
| ||
| wa_Strfunc(:,:) : | real(8), intent(in)
|
流線関数のスペクトルデータからエンストロフィーの球面調和函数成分 (スペクトル)を計算する(多層用).
エンストロフィースペクトルは (1/2)n^2(n+1)^2ψ(n,m)^2 と計算される.
The entity is wa_spectrum_module#nma_EnstrophyFromStreamfunc_wa
| Function : | |||
| w_DLon_w((nm+1)*(nm+1)) : | real(8)
| ||
| w_data((nm+1)*(nm+1)) : | real(8), intent(in)
|
スペクトルデータに経度微分 ∂/∂λ を作用させる(1 層用).
スペクトルデータの経度微分とは, 対応する格子点データに 経度微分∂/∂λを作用させたデータのスペクトル変換のことである.
The entity is w_deriv_module#w_DLon_w
| Function : | |||
| w_DivLambda_xy((nm+1)*(nm+1)) : | real(8)
| ||
| xy_data(im,jm) : | real(8), intent(in)
|
格子点データに発散型経度微分 1/(1-μ^2)・∂/∂λ (μ=sinφ) を作用させてスペクトルデータに変換して返す(1 層用).
The entity is w_deriv_module#w_DivLambda_xy
| Function : | |||
| w_DivLat_xy((nm+1)*(nm+1)) : | real(8)
| ||
| xy_data(im,jm) : | real(8), intent(in)
|
格子点データに発散型緯度微分 1/cosφ・∂(f cosφ)/∂φ を作用させて スペクトルデータに変換して返す(1 層用).
The entity is w_deriv_module#w_DivLat_xy
| Function : | |||
| w_DivLon_xy((nm+1)*(nm+1)) : | real(8)
| ||
| xy_data(im,jm) : | real(8), intent(in)
|
格子点データに発散型経度微分 1/cosφ・∂/∂λ を作用させて スペクトルデータに変換して返す(1 層用).
The entity is w_deriv_module#w_DivLon_xy
| Function : | |||
| w_DivMu_xy((nm+1)*(nm+1)) : | real(8)
| ||
| xy_data(im,jm) : | real(8), intent(in)
|
格子点データに発散型緯度微分 ∂/∂μ (μ=sinφ)を作用させて スペクトルデータに変換して返す(1 層用).
The entity is w_deriv_module#w_DivMu_xy
| Function : | |||
| w_Div_xy_xy((nm+1)*(nm+1)) : | real(8)
| ||
| xy_u(im,jm) : | real(8), intent(in)
| ||
| xy_v(im,jm) : | real(8), intent(in)
|
2 つの入力格子点データをベクトル成分とする発散を計算し, スペクトルデータとして返す(1 層用).
The entity is w_deriv_module#w_Div_xy_xy
| Function : | |||
| w_Jacobian_w_w((nm+1)*(nm+1)) : | real(8)
| ||
| w_a((nm+1)*(nm+1)) : | real(8), intent(in)
| ||
| w_b((nm+1)*(nm+1)) : | real(8), intent(in)
|
2 つのスペクトルデータにヤコビアン
J(f,g) = ∂f/∂λ・∂g/∂μ - ∂g/∂λ・∂f/∂μ
= ∂f/∂λ・1/cosφ・∂g/∂φ
- ∂g/∂λ・1/cosφ・∂f/∂φ
を作用させる(1 層用).
The entity is w_deriv_module#w_Jacobian_w_w
| Function : | |||
| w_LaplaInv_w((nm+1)*(nm+1)) : | real(8)
| ||
| w_data((nm+1)*(nm+1)) : | real(8), intent(in)
|
入力スペクトルデータに逆ラプラシアン
▽^{-2}
=[1/cos^2φ・∂^2/∂λ^2 + 1/cosφ・∂/∂φ(cosφ∂/∂φ)]^{-1}
を作用する(1 層用).
スペクトルデータの逆ラプラシアンとは, 対応する格子点データに 逆ラプラシアンを作用させたデータのスペクトル変換のことである.
The entity is w_deriv_module#w_LaplaInv_w
| Function : | |||
| w_Lapla_w((nm+1)*(nm+1)) : | real(8)
| ||
| w_data((nm+1)*(nm+1)) : | real(8), intent(in)
|
入力スペクトルデータにラプラシアン
▽^2 = 1/cos^2φ・∂^2/∂λ^2 + 1/cosφ・∂/∂φ(cosφ∂/∂φ)
を作用する(1 層用).
スペクトルデータのラプラシアンとは, 対応する格子点データに ラプラシアンを作用させたデータのスペクトル変換のことである.
The entity is w_deriv_module#w_Lapla_w
| Variable : | |||
| w_spectrum_VMiss = -999.000 : | real(8)
|
The entity is w_spectrum_module#w_spectrum_VMiss
| Function : | |||
| w_xy((nm+1)*(nm+1)) : | real(8)
| ||
| xy_data(im,jm) : | real(8), intent(in)
| ||
| ipow : | integer, intent(in), optional
| ||
| iflag : | integer, intent(in), optional
|
格子データからスペクトルデータへ(正)変換する(1 層用).
The entity is w_base_module#w_xy
| Function : | |||
| wa_DLon_wa((nm+1)*(nm+1),size(wa_data,2)) : | real(8)
| ||
| wa_data(:,:) : | real(8), intent(in)
|
スペクトルデータに経度微分 ∂/∂λ を作用させる(多層用).
スペクトルデータの経度微分とは, 対応する格子点データに 経度微分∂/∂λを作用させたデータのスペクトル変換のことである.
The entity is wa_deriv_module#wa_DLon_wa
| Function : | |||
| wa_DivLambda_xya((nm+1)*(nm+1),size(xya_data,3)) : | real(8)
| ||
| xya_data(:,:,:) : | real(8), intent(in)
|
格子点データに発散型経度微分 1/(1-μ^2)・∂/∂λ (μ=sinφ) を作用させてスペクトルデータに変換して返す(多層用).
The entity is wa_deriv_module#wa_DivLambda_xya
| Function : | |||
| wa_DivLat_xya((nm+1)*(nm+1),size(xya_data,3)) : | real(8)
| ||
| xya_data(:,:,:) : | real(8), intent(in)
|
格子点データに発散型緯度微分 1/cosφ・∂(f cosφ)/∂φ を作用させて スペクトルデータに変換して返す(多層用).
The entity is wa_deriv_module#wa_DivLat_xya
| Function : | |||
| wa_DivLon_xya((nm+1)*(nm+1),size(xya_data,3)) : | real(8)
| ||
| xya_data(:,:,:) : | real(8), intent(in)
|
格子点データに発散型経度微分 1/cosφ・∂/∂λ を作用させて スペクトルデータに変換して返す(多層用).
The entity is wa_deriv_module#wa_DivLon_xya
| Function : | |||
| wa_DivMu_xya((nm+1)*(nm+1),size(xya_data,3)) : | real(8)
| ||
| xya_data(:,:,:) : | real(8), intent(in)
|
格子点データに発散型緯度微分 ∂/∂μ (μ=sinφ)を作用させて スペクトルデータに変換して返す(多層用).
The entity is wa_deriv_module#wa_DivMu_xya
| Function : | |||
| wa_Div_xya_xya((nm+1)*(nm+1),size(xya_u,3)) : | real(8)
| ||
| xya_u(:,:,:) : | real(8), intent(in)
| ||
| xya_v(:,:,:) : | real(8), intent(in)
|
2 つの入力格子点データをベクトル成分とする発散を計算し, スペクトルデータとして返す(多層用).
The entity is wa_deriv_module#wa_Div_xya_xya
| Subroutine : | |||
| n_in : | integer,intent(in)
| ||
| i_in : | integer,intent(in)
| ||
| j_in : | integer,intent(in)
| ||
| k_in : | integer,intent(in)
| ||
| np_in : | integer,intent(in), optional
|
スペクトル変換の格子点数, 波数, 最大データ数(層数)および OPENMP 使用時の最大スレッド数を設定する.
他の関数を呼ぶ前に, 最初にこのサブルーチンを呼んで初期設定を しなければならない.
np_in に 1 より大きな値を指定すれば ISPACK の球面調和函数変換 OPENMP 並列計算ルーチンが用いられる. 並列計算を実行するには, 実行時に環境変数 OMP_NUM_THREADS を np_in 以下の数字に設定する等の システムに応じた準備が必要となる.
np_in に 1 より大きな値を指定しなければ並列計算ルーチンは呼ばれない.
subroutine wa_Initial(n_in,i_in,j_in,k_in,np_in)
!
! スペクトル変換の格子点数, 波数, 最大データ数(層数)および
! OPENMP 使用時の最大スレッド数を設定する.
!
! 他の関数を呼ぶ前に, 最初にこのサブルーチンを呼んで初期設定を
! しなければならない.
!
! np_in に 1 より大きな値を指定すれば ISPACK の球面調和函数変換
! OPENMP 並列計算ルーチンが用いられる. 並列計算を実行するには,
! 実行時に環境変数 OMP_NUM_THREADS を np_in 以下の数字に設定する等の
! システムに応じた準備が必要となる.
!
! np_in に 1 より大きな値を指定しなければ並列計算ルーチンは呼ばれない.
!
integer,intent(in) :: i_in ! 格子点数(東西)
integer,intent(in) :: j_in ! 格子点数(南北)
integer,intent(in) :: n_in ! 切断波数
integer,intent(in) :: k_in ! 最大データ数(層数)
integer,intent(in), optional :: np_in ! OPENMP での最大スレッド数
if ( present(np_in) ) then
call w_deriv_Initial(n_in,i_in,j_in,np_in)
else
call w_deriv_Initial(n_in,i_in,j_in)
endif
call wa_deriv_Initial(k_in)
end subroutine wa_Initial
| Function : | |||
| wa_Jacobian_wa_wa((nm+1)*(nm+1),size(wa_a,2)) : | real(8)
| ||
| wa_a(:,:) : | real(8), intent(in)
| ||
| wa_b(:,:) : | real(8), intent(in)
|
2 つのスペクトルデータにヤコビアン
J(f,g) = ∂f/∂λ・∂g/∂μ - ∂g/∂λ・∂f/∂μ
= ∂f/∂λ・1/cosφ・∂g/∂φ
- ∂g/∂λ・1/cosφ・∂f/∂φ
を作用させる(多層用).
The entity is wa_deriv_module#wa_Jacobian_wa_wa
| Function : | |||
| wa_LaplaInv_wa((nm+1)*(nm+1),size(wa_data,2)) : | real(8)
| ||
| wa_data(:,:) : | real(8), intent(in)
|
入力スペクトルデータに逆ラプラシアン
▽^{-2}
=[1/cos^2φ・∂^2/∂λ^2 + 1/cosφ・∂/∂φ(cosφ∂/∂φ)]^{-1}
を作用する(多層用).
スペクトルデータの逆ラプラシアンとは, 対応する格子点データに 逆ラプラシアンを作用させたデータのスペクトル変換のことである.
The entity is wa_deriv_module#wa_LaplaInv_wa
| Function : | |||
| wa_data(:,:) : | real(8), intent(in)
|
入力スペクトルデータにラプラシアン
▽^2 = 1/cos^2φ・∂^2/∂λ^2 + 1/cosφ・∂/∂φ(cosφ∂/∂φ)
を作用する(多層用).
スペクトルデータのラプラシアンとは, 対応する格子点データに ラプラシアンを作用させたデータのスペクトル変換のことである.
The entity is wa_deriv_module#wa_Lapla_wa
| Variable : | |||
| wa_spectrum_VMiss = -999.000 : | real(8)
|
The entity is wa_spectrum_module#wa_spectrum_VMiss
| Function : | |||
| wa_xya((nm+1)*(nm+1),size(xya_data,3)) : | real(8)
| ||
| xya_data(:,:,:) : | real(8), intent(in)
| ||
| ipow : | integer, intent(in), optional
| ||
| iflag : | integer, intent(in), optional
|
格子点 -> 球面調和関数スペクトル
格子データからスペクトルデータへ(正)変換する(多層用).
The entity is wa_base_module#wa_xya
| Function : | |||
| x_AvrLat_xy(im) : | real(8)
| ||
| xy_data(im,jm) : | real(8), intent(in)
|
2 次元緯度経度格子点データの緯度(Y)方向平均(1 層用).
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight の総和で割ることで平均している.
The entity is w_integral_module#x_AvrLat_xy
| Function : | |||
| x_IntLat_xy(im) : | real(8)
| ||
| xy_data(im,jm) : | real(8), intent(in)
|
2 次元緯度経度格子点データの緯度(Y)方向積分(1 層用).
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.
The entity is w_integral_module#x_IntLat_xy
| Variable : | |||
| x_Lon_Weight(:) : | real(8), allocatable
|
The entity is w_base_module#x_Lon_Weight
| Function : | |||
| xa_AvrLat_xya(im,size(xya_data,3)) : | real(8)
| ||
| xya_data(:,:,:) : | real(8), intent(in)
|
2 次元緯度経度格子点データの緯度(Y)方向平均(多層用).
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight の総和で割ることで平均している.
The entity is wa_integral_module#xa_AvrLat_xya
| Function : | |||
| xa_IntLat_xya(im,size(xya_data,3)) : | real(8)
| ||
| xya_data(:,:,:) : | real(8), intent(in)
|
2 次元緯度経度格子点データの緯度(Y)方向積分(多層用).
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.
The entity is wa_integral_module#xa_IntLat_xya
| Function : | |||
| xy_GradLambda_w(im,jm) : | real(8)
| ||
| w_data((nm+1)*(nm+1)) : | real(8), intent(in)
|
スペクトルデータに勾配型経度微分 ∂/∂λ を作用する(1 層用).
The entity is w_deriv_module#xy_GradLambda_w
| Function : | |||
| xy_GradLat_w(im,jm) : | real(8)
| ||
| w_data((nm+1)*(nm+1)) : | real(8), intent(in)
|
スペクトルデータに勾配型緯度微分 ∂/∂φ を作用させて 格子点データに変換して返す(1 層用).
The entity is w_deriv_module#xy_GradLat_w
| Function : | |||
| xy_GradLon_w(im,jm) : | real(8)
| ||
| w_data((nm+1)*(nm+1)) : | real(8), intent(in)
|
スペクトルデータに勾配型経度微分 1/cosφ・∂/∂λ を 作用させた格子点データを返す(1 層用).
The entity is w_deriv_module#xy_GradLon_w
| Function : | |||
| xy_GradMu_w(im,jm) : | real(8)
| ||
| w_data((nm+1)*(nm+1)) : | real(8), intent(in)
|
スペクトルデータに勾配型緯度微分 (1-μ^2)∂/∂μ (μ=sinφ) を作用させて格子点データに変換して返す(1 層用).
The entity is w_deriv_module#xy_GradMu_w
| Function : | |||
| xy_w(im,jm) : | real(8)
| ||
| w_data((nm+1)*(nm+1)) : | real(8), intent(in)
| ||
| ipow : | integer, intent(in), optional
| ||
| iflag : | integer, intent(in), optional
|
スペクトルデータから格子データへ変換する(1 層用).
The entity is w_base_module#xy_w
| Function : | |||
| xya_GradLambda_wa(im,jm,size(wa_data,2)) : | real(8)
| ||
| wa_data(:,:) : | real(8), intent(in)
|
スペクトルデータに勾配型経度微分 ∂/∂λ を作用する(多層用).
The entity is wa_deriv_module#xya_GradLambda_wa
| Function : | |||
| xya_GradLat_wa(im,jm,size(wa_data,2)) : | real(8)
| ||
| wa_data(:,:) : | real(8), intent(in)
|
スペクトルデータに勾配型緯度微分 ∂/∂φ を作用させて 格子点データに変換して返す(多層用).
The entity is wa_deriv_module#xya_GradLat_wa
| Function : | |||
| xya_GradLon_wa(im,jm,size(wa_data,2)) : | real(8)
| ||
| wa_data(:,:) : | real(8), intent(in)
|
スペクトルデータに勾配型経度微分 1/cosφ・∂/∂λ を 作用させた格子点データを返す(多層用).
The entity is wa_deriv_module#xya_GradLon_wa
| Function : | |||
| xya_GradMu_wa(im,jm,size(wa_data,2)) : | real(8)
| ||
| wa_data(:,:) : | real(8), intent(in)
|
スペクトルデータに勾配型緯度微分 (1-μ^2)∂/∂μ (μ=sinφ) を作用させて格子点データに変換して返す(多層用).
The entity is wa_deriv_module#xya_GradMu_wa
| Function : | |||
| xya_wa(im,jm,size(wa_data,2)) : | real(8)
| ||
| wa_data(:,:) : | real(8), intent(in)
| ||
| ipow : | integer, intent(in), optional
| ||
| iflag : | integer, intent(in), optional
|
球面調和関数スペクトル -> 格子点
スペクトルデータから格子データへ変換する(多層用).
The entity is wa_base_module#xya_wa
| Function : | |||
| y_AvrLon_xy(jm) : | real(8)
| ||
| xy_data(im,jm) : | real(8), intent(in)
|
2 次元緯度経度格子点データの経度(X)方向平均(1 層用).
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight の総和で割ることで平均している.
The entity is w_integral_module#y_AvrLon_xy
| Function : | |||
| y_IntLon_xy(jm) : | real(8)
| ||
| xy_data(im,jm) : | real(8), intent(in)
|
2 次元緯度経度格子点データの経度(X)方向積分(1 層用).
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.
The entity is w_integral_module#y_IntLon_xy
| Variable : | |||
| y_Lat_Weight(:) : | real(8), allocatable
|
The entity is w_base_module#y_Lat_Weight
| Function : | |||
| ya_AvrLon_xya(jm,size(xya_data,3)) : | real(8)
| ||
| xya_data(:,:,:) : | real(8), intent(in)
|
2 次元緯度経度格子点データの経度(X)方向平均(多層用).
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight の総和で割ることで平均している.
The entity is wa_integral_module#ya_AvrLon_xya
| Function : | |||
| ya_IntLon_xya(jm,size(xya_data,3)) : | real(8)
| ||
| xya_data(:,:,:) : | real(8), intent(in)
|
2 次元緯度経度格子点データの経度(X)方向積分(多層用).
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.
The entity is wa_integral_module#ya_IntLon_xya