Public Instance methods
AvrLat_y( y_data ) result(AvrLat_y)
Function : |
|
AvrLat_y : | real(8)
|
y_data(1:jm) : | real(8), intent(in)
|
1 次元(Y)格子点データの緯度(Y)方向平均(1 層用).
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight
の総和で割ることで平均している.
Original external subprogram is w_module#AvrLat_y
AvrLonLat_xy( xy_data ) result(AvrLonLat_xy)
Function : |
|
AvrLonLat_xy : | real(8)
|
xy_data(0:im-1,1:jm) : | real(8), intent(in)
|
2 次元緯度経度格子点データの全領域平均(1 層用).
実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた 総和を計算し,
x_X_Weight*y_Y_Weight の総和で割ることで平均している.
Original external subprogram is w_module#AvrLonLat_xy
AvrLon_x( x_data ) result(AvrLon_x)
Function : |
|
AvrLon_x : | real(8)
|
x_data(0:im-1) : | real(8), intent(in)
|
1 次元(X)格子点データの経度(X)方向平均(1 層用).
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight
の総和で割ることで平均している.
Original external subprogram is w_module#AvrLon_x
IntLat_y( y_data ) result(IntLat_y)
Function : |
|
IntLat_y : | real(8)
|
y_data(1:jm) : | real(8), intent(in)
|
1 次元緯度(Y)格子点データの Y 方向積分(1 層用).
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.
Original external subprogram is w_module#IntLat_y
IntLonLat_xy( xy_data ) result(IntLonLat_xy)
Function : |
|
IntLonLat_xy : | real(8)
|
xy_data(0:im-1,1:jm) : | real(8), intent(in)
: | (in) 2 次元経度緯度格子点データ(0:im-1,1:jm)
|
|
2 次元緯度経度格子点データの全領域積分(1 層用).
実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた
総和を計算している.
Original external subprogram is w_module#IntLonLat_xy
IntLon_x( x_data ) result(IntLon_x)
Function : |
|
IntLon_x : | real(8)
|
x_data(0:im-1) : | real(8), intent(in)
|
1 次元経度(X)格子点データの X 方向積分(1 層用).
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.
Original external subprogram is w_module#IntLon_x
Interpolate_w( w_data, alon, alat ) result(Interpolate_array00_w)
Function : |
|
Interpolate_array00_w : | real(8)
|
w_data((nm+1)*(nm+1)) : | real(8), intent(IN)
|
alon : | real(8), intent(IN)
|
alat : | real(8), intent(IN)
|
緯度 alat, 経度 alon における関数値を その球面調和変換係数 w_data
から補間計算する
Original external subprogram is w_module#Interpolate_w
a_AvrLat_ya( ya_data ) result(a_AvrLat_ya)
Function : |
|
a_AvrLat_ya(size(ya_data,2)) : | real(8)
|
ya_data(:,:) : | real(8), intent(in)
: | (in) 1 次元緯度格子点データの並び(1:jm,*)
|
|
1 次元(Y)格子点データの緯度(Y)方向平均(多層用).
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight
の総和で割ることで平均している.
Original external subprogram is wa_integral_module#a_AvrLat_ya
a_AvrLonLat_xya( xya_data ) result(a_AvrLonLat_xya)
Function : |
|
a_AvrLonLat_xya(size(xya_data,3)) : | real(8)
|
xya_data(0:,:,:) : | real(8), intent(in)
: | (in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)
|
|
2 次元緯度経度格子点データの全領域平均(多層用).
実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた 総和を計算し,
x_X_Weight*y_Y_Weight の総和で割ることで平均している.
Original external subprogram is wa_integral_module#a_AvrLonLat_xya
a_AvrLon_xa( xa_data ) result(a_AvrLon_xa)
Function : |
|
a_AvrLon_xa(size(xa_data,2)) : | real(8)
|
xa_data(0:,:) : | real(8), intent(in)
: | (in) 1 次元経度(X)格子点データの並び(0:im-1,*)
|
|
経度平均
1 次元(X)格子点データの経度(X)方向平均(多層用).
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight
の総和で割ることで平均している.
Original external subprogram is wa_integral_module#a_AvrLon_xa
a_IntLat_ya( ya_data ) result(a_IntLat_ya)
Function : |
|
a_IntLat_ya(size(ya_data,2)) : | real(8)
|
ya_data(:,:) : | real(8), intent(in)
: | (in) 1 次元緯度(Y)格子点データの並び(1:jm,*)
|
|
1 次元緯度(Y)格子点データの Y 方向積分(多層用).
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.
Original external subprogram is wa_integral_module#a_IntLat_ya
a_IntLonLat_xya( xya_data ) result(a_IntLonLat_xya)
Function : |
|
a_IntLonLat_xya(size(xya_data,3)) : | real(8)
|
xya_data(0:,:,:) : | real(8), intent(in)
: | (in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)
|
|
2 次元緯度経度格子点データの全領域積分(多層用).
実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた
総和を計算している.
Original external subprogram is wa_integral_module#a_IntLonLat_xya
a_IntLon_xa( xa_data ) result(a_IntLon_xa)
Function : |
|
a_IntLon_xa(size(xa_data,2)) : | real(8)
|
xa_data(0:,:) : | real(8), intent(in)
: | (in) 1 次元経度(X)格子点データの並び(0:im-1,*)
|
|
経度積分
1 次元経度(X)格子点データの X 方向積分(多層用).
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.
Original external subprogram is wa_integral_module#a_IntLon_xa
a_Interpolate_wa( wa_data, alon, alat ) result(a_Interpolate_array00_wa)
Function : |
|
a_Interpolate_array00_wa(size(wa_data,2)) : | real(8)
|
wa_data(:,:) : | real(8), intent(IN)
|
alon : | real(8), intent(IN)
|
alat : | real(8), intent(IN)
|
緯度 alon, 経度 alat における関数値を その球面調和変換係数 wa_data
から補間計算する
Original external subprogram is wa_interpolate_module#a_Interpolate_wa
irm
Variable : |
|
irm(:,:) : | integer, allocatable
: | 経度微分演算用配列
スペクトルデータの経度微分を計算するための係数. 配列サイズは (
(nm+1)*(nm+1),2 ) である.
L番目の格納位置のスペクトルが実部なら, irm(L,1)には対応する虚部の格納位置が, irm(L,2) には東西波数 m が格納されている.
また, L番目の格納位置のスペクトル が虚部なら, irm(L,1)には対応する実部の格納位置が, irm(L,2)には -m が格納され ている.
|
|
Original external subprogram is w_module#irm
l_nm( n, m ) result(l_nm_array00)
Function : |
|
l_nm_array00 : | integer
|
n : | integer, intent(in)
|
m : | integer, intent(in)
|
全波数(n)と東西波数(m)からそのスペクトルデータの格納位置を返す.
引数 n,m がともに整数値の場合, 整数値を返す.
Original external subprogram is w_module#l_nm
l_nm( n, marray ) result(l_nm_array01)
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_module#l_nm
l_nm( narray, m ) result(l_nm_array10)
Function : |
|
l_nm_array10(size(narray)) : | integer
|
narray(:) : | integer, intent(in)
|
m : | integer, intent(in)
|
全波数(n)と東西波数(m)からそのスペクトルデータの格納位置を返す.
第 1 引数 narray が整数 1 次元配列, 第 2 引数 m が整数の場合, narray
と同じ大きさの 1 次元整数配列を返す.
Original external subprogram is w_module#l_nm
l_nm( narray, marray ) result(l_nm_array11)
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_module#l_nm
n_EnergyFromStreamfunc_w( w_Strfunc ) result(n_EnergyFromStreamfunc_w)
Function : |
|
n_EnergyFromStreamfunc_w : | real(8), dimension(0:nm)
: | (out) エネルギースペクトル (水平全波数 n 空間)
|
|
w_Strfunc(:) : | real(8), intent(in)
|
流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を
計算する(1 層用).
* 全波数 n の流線関数のスペクトル成分ψ(n,m) から
エネルギースペクトルはΣ[m=-nm]^nm(1/2)n(n+1)ψ(n,m)^2
と計算される.
* 全てのエネルギースペクトル成分の和に 4πをかけたものが
球面上での全エネルギーに等しい.
Original external subprogram is w_module#n_EnergyFromStreamfunc_w
n_EnstrophyFromStreamfunc_w( w_Strfunc ) result(n_EnstrophyFromStreamfunc_w)
流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を
計算する(1 層用)
- 全波数 n の流線関数のスペクトル成分ψ(n,m) からエンストロフィー
スペクトルはΣ[m=-nm]^nm(1/2)n^2(n+1)^2ψ(n,m)^2 と計算される.
- 全てのエネルギースペクトル成分の和に 4π/R^2 をかけたものが
球面上での全エンストフィーに等しい.
Original external subprogram is w_module#n_EnstrophyFromStreamfunc_w
na_EnergyFromStreamfunc_wa( wa_Strfunc ) result(na_EnergyFromStreamfunc_wa)
Function : |
|
na_EnergyFromStreamfunc_wa : | real(8), dimension(0:nm,size(wa_Strfunc,2))
: | (out) エネルギースペクトル (水平全波数 n 空間)
|
|
wa_Strfunc(:,:) : | real(8), intent(in)
|
流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を
計算する(多層用).
* 全波数 n の流線関数のスペクトル成分ψ(n,m) から
エネルギースペクトルはΣ[m=-nm]^nm(1/2)n(n+1)ψ(n,m)^2
と計算される.
* 全てのエネルギースペクトル成分の和に 4πをかけたものが
球面上での全エネルギーに等しい.
Original external subprogram is wa_spectrum_module#na_EnergyFromStreamfunc_wa
na_EnstrophyFromStreamfunc_wa( wa_Strfunc ) result(na_EnstrophyFromStreamfunc_wa)
Function : |
|
na_EnstrophyFromStreamfunc_wa : | real(8), dimension(0:nm,size(wa_Strfunc,2))
: | エンストロフィースペクトル (out) エンストロフィースペクトル(水平全波数 n
空間)
|
|
wa_Strfunc(:,:) : | real(8), intent(in)
|
流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を
計算する(多層用)
- 全波数 n の流線関数のスペクトル成分ψ(n,m) からエンストロフィー
スペクトルはΣ[m=-nm]^nm(1/2)n^2(n+1)^2ψ(n,m)^2 と計算される.
- 全てのエネルギースペクトル成分の和に 4π/R^2 をかけたものが
球面上での全エンストフィーに等しい.
Original external subprogram is wa_spectrum_module#na_EnstrophyFromStreamfunc_wa
nm_EnergyFromStreamfunc_w( w_Strfunc ) result(nm_EnergyFromStreamfunc_w)
Function : |
|
nm_EnergyFromStreamfunc_w : | real(8), dimension(0:nm,-nm:nm)
: | (out) エネルギースペクトル(水平全波数 n, 帯状波数 m 空間)
|
|
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)
Original external subprogram is w_module#nm_EnergyFromStreamfunc_w
nm_EnstrophyFromStreamfunc_w( w_Strfunc ) result(nm_EnstrophyFromStreamfunc_w)
nm_l( l ) result(nm_l_int)
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_module#nm_l
nm_l( larray ) result(nm_l_array)
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_module#nm_l
nma_EnergyFromStreamfunc_wa( wa_Strfunc ) result(nma_EnergyFromStreamfunc_wa)
Function : |
|
nma_EnergyFromStreamfunc_wa : | real(8), dimension(0:nm,-nm:nm,size(wa_Strfunc,2))
: | (out) エネルギースペクトル(水平全波数 n, 帯状波数 m 空間)
|
|
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)
Original external subprogram is wa_spectrum_module#nma_EnergyFromStreamfunc_wa
nma_EnstrophyFromStreamfunc_wa( wa_Strfunc ) result(nma_EnstrophyFromStreamfunc_wa)
rn
Variable : |
|
rn(:,:) : | real(8), allocatable
: | ラプラシアン演算用配列
スペクトルデータのラプラシアンを計算するための係数
配列のサイズは((nm+1)*(nm+1), 2)
r(L,1) には L 番目の格納位置のスペクトルに対するラプラシアン計算の 係数
-n(n+1) の値が格納されている.
|
|
Original external subprogram is w_module#rn
w_DLon_w( w_data ) result(w_DLon_w)
Function : |
|
w_DLon_w((nm+1)*(nm+1)) : | real(8)
|
w_data((nm+1)*(nm+1)) : | real(8), intent(in)
|
スペクトルデータに経度微分 ∂/∂λ を作用させる(1 層用).
スペクトルデータの経度微分とは, 対応する格子点データに
経度微分∂/∂λを作用させたデータのスペクトル変換のことである.
Original external subprogram is w_module#w_DLon_w
w_DivLambda_xy( xy_data ) result(w_DivLambda_xy)
Function : |
|
w_DivLambda_xy((nm+1)*(nm+1)) : | real(8)
: | (out) 格子点データを発散型経度微分したスペクトルデータ
|
|
xy_data(0:im-1,1:jm) : | real(8), intent(in)
|
格子点データに発散型経度微分 1/(1-μ^2)・∂/∂λ (μ=sinφ)
を作用させてスペクトルデータに変換して返す(1 層用).
Original external subprogram is w_module#w_DivLambda_xy
w_DivLat_xy( xy_data ) result(w_DivLat_xy)
Function : |
|
w_DivLat_xy((nm+1)*(nm+1)) : | real(8)
: | (out) 格子点データを発散型緯度微分したスペクトルデータ
|
|
xy_data(0:im-1,1:jm) : | real(8), intent(in)
|
格子点データに発散型緯度微分 1/cosφ・∂(f cosφ)/∂φ を作用させて
スペクトルデータに変換して返す(1 層用).
Original external subprogram is w_module#w_DivLat_xy
w_DivLon_xy( xy_data ) result(w_DivLon_xy)
Function : |
|
w_DivLon_xy((nm+1)*(nm+1)) : | real(8)
: | (out) 格子点データを発散型経度微分したスペクトルデータ
|
|
xy_data(0:im-1,1:jm) : | real(8), intent(in)
|
格子点データに発散型経度微分 1/cosφ・∂/∂λ を作用させて
スペクトルデータに変換して返す(1 層用).
Original external subprogram is w_module#w_DivLon_xy
w_DivMu_xy( xy_data ) result(w_DivMu_xy)
Function : |
|
w_DivMu_xy((nm+1)*(nm+1)) : | real(8)
: | (out) 格子点データを発散型緯度微分したスペクトルデータ
|
|
xy_data(0:im-1,1:jm) : | real(8), intent(in)
|
格子点データに発散型緯度微分 ∂/∂μ (μ=sinφ)を作用させて
スペクトルデータに変換して返す(1 層用).
Original external subprogram is w_module#w_DivMu_xy
w_Div_xy_xy( xy_u, xy_v ) result(w_Div_xy_xy)
Function : |
|
w_Div_xy_xy((nm+1)*(nm+1)) : | real(8)
: | (out) 2 つの入力格子点データをベクトル成分とする発散のスペクトルデータ
|
|
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_module#w_Div_xy_xy
w_Jacobian_w_w( w_a, w_b ) result(w_Jacobian_w_w)
Function : |
|
w_Jacobian_w_w((nm+1)*(nm+1)) : | real(8)
: | (out) 2 つのスペクトルデータのヤコビアン
|
|
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 層用).
Original external subprogram is w_module#w_Jacobian_w_w
w_LaplaInv_w( w_data ) result(w_LaplaInv_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 層用).
スペクトルデータの逆ラプラシアンとは, 対応する格子点データに
逆ラプラシアンを作用させたデータのスペクトル変換のことである.
Original external subprogram is w_module#w_LaplaInv_w
w_Lapla_w( w_data ) result(w_Lapla_w)
Function : |
|
w_Lapla_w((nm+1)*(nm+1)) : | real(8)
: | (out) 入力スペクトルデータのラプラシアン
|
|
w_data((nm+1)*(nm+1)) : | real(8), intent(in)
|
入力スペクトルデータにラプラシアン
▽^2 = 1/cos^2φ・∂^2/∂λ^2 + 1/cosφ・∂/∂φ(cosφ∂/∂φ)
を作用する(1 層用).
スペクトルデータのラプラシアンとは, 対応する格子点データに
ラプラシアンを作用させたデータのスペクトル変換のことである.
Original external subprogram is w_module#w_Lapla_w
w_StreamPotential2Vector( w_Psi, w_Chi, xy_U, xy_V )
Subroutine : |
|
w_Psi((nm+1)*(nm+1)) : | real(8), intent(in)
|
w_Chi((nm+1)*(nm+1)) : | real(8), intent(in)
|
xy_U(0:im-1,1:jm) : | real(8), intent(out)
|
xy_V(0:im-1,1:jm) : | real(8), intent(out)
|
流線・ポテンシャル(スペクトルデータ)から速度場(格子データ)に (逆)変換する(1
層用)
スペクトル変換を用いず微分を計算するために, 変換回数が 2 回ですむ.
u cosφ = ∂χ/∂λ - cosφ∂ψ/∂φ,
v cosφ = cosφ∂χ/∂φ + ∂ψ/∂λ
Original external subprogram is w_module#w_StreamPotential2Vector
w_Vector2VorDiv( xy_U, xy_V, w_Vor, w_Div )
Subroutine : |
|
xy_U(0:im-1,1:jm) : | real(8), intent(in)
|
xy_V(0:im-1,1:jm) : | real(8), intent(in)
|
w_Vor((nm+1)*(nm+1)) : | real(8), intent(out)
|
w_Div((nm+1)*(nm+1)) : | real(8), intent(out)
|
速度場(格子データ)から渦度・発散(スペクトルデータ)に (正)変換する(1 層用)
スペクトル変換を用いず微分を計算するために, 変換回数が 2 回ですむ.
ζ = 1/cosφ∂v/∂λ - 1/cosφ ∂(u cosφ)/∂φ
D = 1/cosφ∂u/∂λ + 1/cosφ ∂(v cosφ)/∂φ
Original external subprogram is w_module#w_Vector2VorDiv
w_VectorCosLat2VorDiv( xy_UCosLat, xy_VCosLat, w_Vor, w_Div )
Subroutine : |
|
xy_UCosLat(0:im-1,1:jm) : | real(8), intent(in)
|
xy_VCosLat(0:im-1,1:jm) : | real(8), intent(in)
|
w_Vor((nm+1)*(nm+1)) : | real(8), intent(out)
|
w_Div((nm+1)*(nm+1)) : | real(8), intent(out)
|
速度場(格子データ)から渦度・発散(スペクトルデータ)に (正)変換する(1 層用)
スペクトル変換を用いず微分を計算するために, 変換回数が 2 回ですむ.
ζ = 1/cosφ∂v/∂λ - 1/cosφ ∂(u cosφ)/∂φ
D = 1/cosφ∂u/∂λ + 1/cosφ ∂(v cosφ)/∂φ
Original external subprogram is w_module#w_VectorCosLat2VorDiv
w_xy( xy_data, [ipow], [iflag] ) result(w_xy)
Function : |
|
w_xy((nm+1)*(nm+1)) : | real(8)
|
xy_data(0:im-1,1:jm) : | real(8), intent(in)
|
ipow : | integer, intent(in), optional
: | (in) 変換時に同時に作用させる 1/cosφ の次数. 省略時は 0.
|
|
iflag : | integer, intent(in), optional
: | 変換の種類
0 : 通常の正変換
-1 : 経度微分を作用させた正変換
1 : 緯度微分 1/cosφ・∂(f cos^2φ)/∂φ を作用させた正変換
2 : sinφを作用させた正変換
省略時は 0.
|
|
格子データからスペクトルデータへ(正)変換する(1 層用).
Original external subprogram is w_module#w_xy
wa_DLon_wa( wa_data ) result(wa_DLon_wa)
Function : |
|
wa_DLon_wa((nm+1)*(nm+1),size(wa_data,2)) : | real(8)
|
wa_data(:,:) : | real(8), intent(in)
|
スペクトルデータに経度微分 ∂/∂λ を作用させる(多層用).
スペクトルデータの経度微分とは, 対応する格子点データに
経度微分∂/∂λを作用させたデータのスペクトル変換のことである.
Original external subprogram is wa_deriv_module#wa_DLon_wa
wa_DivLambda_xya( xya_data ) result(wa_DivLambda_xya)
Function : |
|
wa_DivLambda_xya((nm+1)**2,size(xya_data,3)) : | real(8)
: | (out) 格子点データを発散型経度微分したスペクトルデータ
|
|
xya_data(0:,:,:) : | real(8), intent(in)
|
格子点データに発散型経度微分 1/(1-μ^2)・∂/∂λ (μ=sinφ)
を作用させてスペクトルデータに変換して返す(多層用).
Original external subprogram is wa_deriv_module#wa_DivLambda_xya
wa_DivLat_xya( xya_data ) result(wa_DivLat_xya)
Function : |
|
wa_DivLat_xya((nm+1)**2,size(xya_data,3)) : | real(8)
: | (out) 格子点データを発散型緯度微分したスペクトルデータ
|
|
xya_data(0:,:,:) : | real(8), intent(in)
|
格子点データに発散型緯度微分 1/cosφ・∂(f cosφ)/∂φ を作用させて
スペクトルデータに変換して返す(多層用).
Original external subprogram is wa_deriv_module#wa_DivLat_xya
wa_DivLon_xya( xya_data ) result(wa_DivLon_xya)
Function : |
|
wa_DivLon_xya((nm+1)**2,size(xya_data,3)) : | real(8)
: | (out) 格子点データを発散型経度微分したスペクトルデータ
|
|
xya_data(0:,:,:) : | real(8), intent(in)
|
格子点データに発散型経度微分 1/cosφ・∂/∂λ を作用させて
スペクトルデータに変換して返す(多層用).
Original external subprogram is wa_deriv_module#wa_DivLon_xya
wa_DivMu_xya( xya_data ) result(wa_DivMu_xya)
Function : |
|
wa_DivMu_xya((nm+1)**2,size(xya_data,3)) : | real(8)
: | (out) 格子点データを発散型緯度微分したスペクトルデータ
|
|
xya_data(0:,:,:) : | real(8), intent(in)
|
格子点データに発散型緯度微分 ∂/∂μ (μ=sinφ)を作用させて
スペクトルデータに変換して返す(多層用).
Original external subprogram is wa_deriv_module#wa_DivMu_xya
wa_Div_xya_xya( xya_u, xya_v ) result(wa_Div_xya_xya)
Function : |
|
wa_Div_xya_xya((nm+1)**2,size(xya_u,3)) : | real(8)
: | (out) 2 つの入力格子点データをベクトル成分とする発散のスペクトルデータ
|
|
xya_u(0:,:,:) : | real(8), intent(in)
|
xya_v(0:,:,:) : | real(8), intent(in)
|
2 つの入力格子点データをベクトル成分とする発散を計算し,
スペクトルデータとして返す(多層用).
Original external subprogram is wa_deriv_module#wa_Div_xya_xya
モジュールの終了処理(割り付け配列の解放)をおこなう.
解像度を変更する際にはこのサブルーチンを呼んで終了処理を
おこなったのちに再度 wa_Initial
で初期設定しなければ ならない.
[Source]
subroutine wa_Finalize
!
! モジュールの終了処理(割り付け配列の解放)をおこなう.
!
! 解像度を変更する際にはこのサブルーチンを呼んで終了処理を
! おこなったのちに再度 wa_Initial で初期設定しなければ
! ならない.
!
call w_Finalize
call wa_base_Finalize
call MessageNotify('M','wa_Finalize', 'wa_module (2013/02/23) is finalized')
end subroutine wa_Finalize
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 より大きな値を指定しなければ並列計算ルーチンは呼ばれない.
[Source]
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_Initial(n_in,i_in,j_in,np_in)
else
call w_Initial(n_in,i_in,j_in)
endif
call wa_base_Initial(k_in)
call MessageNotify('M','wa_initial', 'wa_module (2013/02/23) is initialized')
end subroutine wa_Initial
wa_Jacobian_wa_wa( wa_a, wa_b ) result(wa_Jacobian_wa_wa)
Function : |
|
wa_Jacobian_wa_wa((nm+1)**2,size(wa_a,2)) : | real(8)
: | (out) 2 つのスペクトルデータのヤコビアン
|
|
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/∂φ
を作用させる(多層用).
Original external subprogram is wa_deriv_module#wa_Jacobian_wa_wa
wa_LaplaInv_wa( wa_data ) result(wa_LaplaInv_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}
を作用する(多層用).
スペクトルデータの逆ラプラシアンとは, 対応する格子点データに
逆ラプラシアンを作用させたデータのスペクトル変換のことである.
Original external subprogram is wa_deriv_module#wa_LaplaInv_wa
wa_Lapla_wa( wa_data ) result(wa_Lapla_wa)
Function : |
|
wa_data(:,:) : | real(8), intent(in)
|
入力スペクトルデータにラプラシアン
▽^2 = 1/cos^2φ・∂^2/∂λ^2 + 1/cosφ・∂/∂φ(cosφ∂/∂φ)
を作用する(多層用).
スペクトルデータのラプラシアンとは, 対応する格子点データに
ラプラシアンを作用させたデータのスペクトル変換のことである.
Original external subprogram is wa_deriv_module#wa_Lapla_wa
wa_StreamPotential2Vector( wa_Psi, wa_Chi, xya_U, xya_V )
Subroutine : |
|
wa_Psi(:,:) : | real(8), intent(in)
: | (in) 流線関数((nm+1)*(nm+1),:)
|
|
wa_Chi(:,:) : | real(8), intent(in)
: | (in) 速度ポテンシャル((nm+1)*(nm+1),:)
|
|
xya_U(0:im-1,1:jm,size(wa_Psi,2)) : | real(8), intent(out)
: | (out) 速度経度成分(0:im-1,1:jm,:)
|
|
xya_V(0:im-1,1:jm,size(wa_Psi,2)) : | real(8), intent(out)
: | (out) 速度緯度成分(0:im-1,1:jm,:)
|
|
流線・ポテンシャル(スペクトルデータ)から速度場(格子データ)に
(逆)変換する(多層用)
スペクトル変換を用いず微分を計算するために, 変換回数が 2 回ですむ.
u cosφ = ∂χ/∂λ - cosφ∂ψ/∂φ,
v cosφ = cosφ∂χ/∂φ + ∂ψ/∂λ
Original external subprogram is wa_base_module#wa_StreamPotential2Vector
wa_Vector2VorDiv( xya_U, xya_V, wa_Vor, wa_Div )
Subroutine : |
|
xya_U(0:,:,:) : | real(8), intent(in)
: | (in) 速度経度成分(0:im-1,1:jm,:)
|
|
xya_V(0:,:,:) : | real(8), intent(in)
: | (in) 速度緯度成分(0:im-1,1:jm,:)
|
|
wa_Vor((nm+1)*(nm+1),size(xya_U,3)) : | real(8), intent(out)
|
wa_Div((nm+1)*(nm+1),size(xya_U,3)) : | real(8), intent(out)
|
速度場(格子データ)から渦度・発散(スペクトルデータ)に (正)変換する(多層用)
スペクトル変換を用いず微分を計算するために, 変換回数が 2 回ですむ.
ζ = 1/cosφ∂v/∂λ - 1/cosφ ∂(u cosφ)/∂φ
D = 1/cosφ∂u/∂λ + 1/cosφ ∂(v cosφ)/∂φ
Original external subprogram is wa_base_module#wa_Vector2VorDiv
wa_VectorCosLat2VorDiv( xya_UCosLat, xya_VCosLat, wa_Vor, wa_Div )
Subroutine : |
|
xya_UCosLat(0:,:,:) : | real(8), intent(in)
: | (in) 速度経度成分 * cos(lat) (0:im-1,1:jm,:)
|
|
xya_VCosLat(0:,:,:) : | real(8), intent(in)
: | (in) 速度緯度成分 * cos(lat) (0:im-1,1:jm,:)
|
|
wa_Vor((nm+1)*(nm+1),size(xya_UCosLat,3)) : | real(8), intent(out)
|
wa_Div((nm+1)*(nm+1),size(xya_UCosLat,3)) : | real(8), intent(out)
|
速度場(格子データ)から渦度・発散(スペクトルデータ)に (正)変換する(多層用)
スペクトル変換を用いず微分を計算するために, 変換回数が 2 回ですむ.
ζ = 1/cosφ∂v/∂λ - 1/cosφ ∂(u cosφ)/∂φ
D = 1/cosφ∂u/∂λ + 1/cosφ ∂(v cosφ)/∂φ
Original external subprogram is wa_base_module#wa_VectorCosLat2VorDiv
wa_xya( xya_data, [ipow], [iflag] ) result(wa_xya)
Function : |
|
wa_xya((nm+1)*(nm+1),size(xya_data,3)) : | real(8)
: | (out) スペクトルデータ((nm+1)*(nm+1),:)
|
|
xya_data(0:,:,:) : | real(8), intent(in)
: | (in) 格子点データ(0:im-1,1:jm,:)
|
|
ipow : | integer, intent(in), optional
: | (in) 変換時に同時に作用させる 1/cosφ の次数. 省略時は 0.
|
|
iflag : | integer, intent(in), optional
: | 変換の種類
0 : 通常の正変換
-1 : 経度微分を作用させた正変換
1 : 緯度微分を作用させた正変換
2 : sinφを作用させた正変換
省略時は 0.
|
|
格子点 -> 球面調和関数スペクトル
格子データからスペクトルデータへ(正)変換する(多層用).
Original external subprogram is wa_base_module#wa_xya
x_AvrLat_xy( xy_data ) result(x_AvrLat_xy)
Function : |
|
x_AvrLat_xy(im) : | real(8)
: | (out) 平均された 1 次元経度(X)格子点データ
|
|
xy_data(0:im-1,1:jm) : | real(8), intent(in)
: | (in) 2 次元経度緯度格子点データ(0:im-1,1:jm)
|
|
2 次元緯度経度格子点データの緯度(Y)方向平均(1 層用).
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight
の総和で割ることで平均している.
Original external subprogram is w_module#x_AvrLat_xy
x_IntLat_xy( xy_data ) result(x_IntLat_xy)
Function : |
|
x_IntLat_xy(0:im-1) : | real(8)
: | (out) 積分された 1 次元経度(X)格子点データ
|
|
xy_data(0:im-1,1:jm) : | real(8), intent(in)
: | (in) 2 次元経度緯度格子点データ(0:im-1,1:jm)
|
|
2 次元緯度経度格子点データの緯度(Y)方向積分(1 層用).
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.
Original external subprogram is w_module#x_IntLat_xy
xa_AvrLat_xya( xya_data ) result(xa_AvrLat_xya)
Function : |
|
xa_AvrLat_xya(0:im-1,size(xya_data,3)) : | real(8)
: | (out) 平均された 1 次元経度(X)格子点データの並び(im,*)
|
|
xya_data(0:,:,:) : | real(8), intent(in)
: | (in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)
|
|
2 次元緯度経度格子点データの緯度(Y)方向平均(多層用).
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight
の総和で割ることで平均している.
Original external subprogram is wa_integral_module#xa_AvrLat_xya
xa_IntLat_xya( xya_data ) result(xa_IntLat_xya)
Function : |
|
xa_IntLat_xya(0:im-1,size(xya_data,3)) : | real(8)
: | (out) 積分された 1 次元経度(X)格子点データの並び
|
|
xya_data(0:,:,:) : | real(8), intent(in)
: | (in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)
|
|
2 次元緯度経度格子点データの緯度(Y)方向積分(多層用).
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.
Original external subprogram is wa_integral_module#xa_IntLat_xya
xy_GradLambda_w( w_data ) result(xy_GradLambda_w)
Function : |
|
xy_GradLambda_w(0:im-1,1:jm) : | real(8)
: | (out) スペクトルデータを勾配型経度微分した格子点データ
|
|
w_data((nm+1)*(nm+1)) : | real(8), intent(in)
|
スペクトルデータに勾配型経度微分 ∂/∂λ を作用する(1 層用).
Original external subprogram is w_module#xy_GradLambda_w
xy_GradLat_w( w_data ) result(xy_GradLat_w)
Function : |
|
xy_GradLat_w(0:im-1,1:jm) : | real(8)
: | (out) スペクトルデータを勾配型緯度微分した格子点データ
|
|
w_data((nm+1)*(nm+1)) : | real(8), intent(in)
|
スペクトルデータに勾配型緯度微分 ∂/∂φ を作用させて
格子点データに変換して返す(1 層用).
Original external subprogram is w_module#xy_GradLat_w
xy_GradLon_w( w_data ) result(xy_GradLon_w)
Function : |
|
xy_GradLon_w(0:im-1,1:jm) : | real(8)
: | (out) スペクトルデータを勾配型経度微分した格子点データ
|
|
w_data((nm+1)*(nm+1)) : | real(8), intent(in)
|
スペクトルデータに勾配型経度微分 1/cosφ・∂/∂λ を
作用させた格子点データを返す(1 層用).
Original external subprogram is w_module#xy_GradLon_w
xy_GradMu_w( w_data ) result(xy_GradMu_w)
Function : |
|
xy_GradMu_w(0:im-1,1:jm) : | real(8)
: | (out) スペクトルデータを勾配型緯度微分した格子点データ
|
|
w_data((nm+1)*(nm+1)) : | real(8), intent(in)
|
スペクトルデータに勾配型緯度微分 (1-μ^2)∂/∂μ (μ=sinφ)
を作用させて格子点データに変換して返す(1 層用).
Original external subprogram is w_module#xy_GradMu_w
xy_w( w_data, [ipow], [iflag] ) result(xy_w)
Function : |
|
xy_w(0:im-1,1:jm) : | real(8)
|
w_data((nm+1)*(nm+1)) : | real(8), intent(in)
|
ipow : | integer, intent(in), optional
: | (in) 作用させる 1/cosφ の次数. 省略時は 0.
|
|
iflag : | integer, intent(in), optional
: | (in) 変換の種類
0 : 通常の正変換
-1 : 経度微分を作用させた逆変換
1 : 緯度微分 cosφ・∂/∂φ を作用させた逆変換
2 : sinφを作用させた逆変換
省略時は 0.
|
|
スペクトルデータから格子データへ変換する(1 層用).
Original external subprogram is w_module#xy_w
xya_GradLambda_wa( wa_data ) result(xya_GradLambda_wa)
xya_GradLat_wa( wa_data ) result(xya_GradLat_wa)
Function : |
|
xya_GradLat_wa(0:im-1,1:jm,size(wa_data,2)) : | real(8)
: | (out) スペクトルデータを勾配型緯度微分した格子点データ
|
|
wa_data(:,:) : | real(8), intent(in)
|
スペクトルデータに勾配型緯度微分 ∂/∂φ を作用させて
格子点データに変換して返す(多層用).
Original external subprogram is wa_deriv_module#xya_GradLat_wa
xya_GradLon_wa( wa_data ) result(xya_GradLon_wa)
Function : |
|
xya_GradLon_wa(0:im-1,1:jm,size(wa_data,2)) : | real(8)
: | (out) スペクトルデータを勾配型経度微分した格子点データ
|
|
wa_data(:,:) : | real(8), intent(in)
|
スペクトルデータに勾配型経度微分 1/cosφ・∂/∂λ を
作用させた格子点データを返す(多層用).
Original external subprogram is wa_deriv_module#xya_GradLon_wa
xya_GradMu_wa( wa_data ) result(xya_GradMu_wa)
Function : |
|
xya_GradMu_wa(0:im-1,1:jm,size(wa_data,2)) : | real(8)
: | (out) スペクトルデータを勾配型緯度微分した格子点データ
|
|
wa_data(:,:) : | real(8), intent(in)
|
スペクトルデータに勾配型緯度微分 (1-μ^2)∂/∂μ (μ=sinφ)
を作用させて格子点データに変換して返す(多層用).
Original external subprogram is wa_deriv_module#xya_GradMu_wa
xya_wa( wa_data, [ipow], [iflag] ) result(xya_wa)
Function : |
|
xya_wa(0:im-1,1:jm,size(wa_data,2)) : | real(8)
: | (out) 格子点データ(0:im-1,1:jm,:)
|
|
wa_data(:,:) : | real(8), intent(in)
: | (in) スペクトルデータ((nm+1)*(nm+1),:)
|
|
ipow : | integer, intent(in), optional
: | (in) 作用させる 1/cosφ の次数. 省略時は 0.
|
|
iflag : | integer, intent(in), optional
: | (in) 変換の種類
0 : 通常の正変換
-1 : 経度微分を作用させた正変換
1 : 緯度微分を作用させた正変換
2 : sinφを作用させた正変換
省略時は 0.
|
|
球面調和関数スペクトル -> 格子点
スペクトルデータから格子データへ変換する(多層用).
Original external subprogram is wa_base_module#xya_wa
y_AvrLon_xy( xy_data ) result(y_AvrLon_xy)
Function : |
|
y_AvrLon_xy(1:jm) : | real(8)
: | (out) 平均された 1 次元緯度(Y)格子点
|
|
xy_data(0:im-1,1:jm) : | real(8), intent(in)
: | (in) 2 次元経度緯度格子点データ(0:im-1,1:jm)
|
|
2 次元緯度経度格子点データの経度(X)方向平均(1 層用).
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight
の総和で割ることで平均している.
Original external subprogram is w_module#y_AvrLon_xy
y_IntLon_xy( xy_data ) result(y_IntLon_xy)
Function : |
|
y_IntLon_xy(1:jm) : | real(8)
: | (out) 積分された 1 次元緯度(Y)格子点データ
|
|
xy_data(0:im-1,1:jm) : | real(8), intent(in)
: | (in) 2 次元経度緯度格子点データ(0:im-1,1:jm)
|
|
2 次元緯度経度格子点データの経度(X)方向積分(1 層用).
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.
Original external subprogram is w_module#y_IntLon_xy
ya_AvrLon_xya( xya_data ) result(ya_AvrLon_xya)
Function : |
|
ya_AvrLon_xya(1:jm,size(xya_data,3)) : | real(8)
: | (out) 平均された 1 次元緯度(Y)格子点の並び(1:jm,*)
|
|
xya_data(0:,:,:) : | real(8), intent(in)
: | (in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)
|
|
2 次元緯度経度格子点データの経度(X)方向平均(多層用).
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight
の総和で割ることで平均している.
Original external subprogram is wa_integral_module#ya_AvrLon_xya
ya_IntLon_xya( xya_data ) result(ya_IntLon_xya)
Function : |
|
ya_IntLon_xya(1:jm,size(xya_data,3)) : | real(8)
: | (out) 積分された 1 次元緯度(Y)格子点データの並び
|
|
xya_data(0:,:,:) : | real(8), intent(in)
: | (in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)
|
|
2 次元緯度経度格子点データの経度(X)方向積分(多層用).
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.
Original external subprogram is wa_integral_module#ya_IntLon_xya