Public Instance methods
AvrLat_v( v_data ) result(AvrLat_v)
Function : |
|
AvrLat_v : | real(8)
|
v_data(jc) : | real(8), intent(in)
|
1 次元(Y)格子点データの緯度(Y)方向平均(1 層用).
実際には格子点データ各点毎に v_Y_Weight をかけた総和を計算し, v_Y_Weight
の総和で割ることで平均している.
Original external subprogram is w_integral_mpi_module#AvrLat_v
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_xv( xv_data ) result(AvrLonLat_xv)
Function : |
|
AvrLonLat_xv : | real(8)
|
xv_data(0:im-1,jc) : | real(8), intent(in)
: | (in) 2 次元経度緯度格子点データ(0:im-1,jc)
|
|
2 次元緯度経度格子点データの全領域平均(1 層用).
実際には格子点データ各点毎に x_X_Weight, v_Y_Weight をかけた 総和を計算し,
x_X_Weight*v_Y_Weight の総和で割ることで平均している.
Original external subprogram is w_integral_mpi_module#AvrLonLat_xv
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_v( v_data ) result(IntLat_v)
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_xv( xv_data ) result(IntLonLat_xv)
Function : |
|
IntLonLat_xv : | real(8)
|
xv_data(0:im-1,jc) : | real(8), intent(in)
: | (in) 2 次元経度緯度格子点データ(0:im-1,jc)
|
|
2 次元緯度経度格子点データの全領域積分(1 層用).
実際には格子点データ各点毎に x_X_Weight, v_V_Weight をかけた
総和を計算している.
Original external subprogram is w_integral_mpi_module#IntLonLat_xv
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
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
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
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
v_AvrLon_xv( xv_data ) result(v_AvrLon_xv)
Function : |
|
v_AvrLon_xv(jc) : | real(8)
: | (out) 平均された 1 次元緯度(Y)格子点
|
|
xv_data(0:im-1,jc) : | real(8), intent(in)
: | (in) 2 次元経度緯度格子点データ(0:im-1,jc)
|
|
2 次元緯度経度格子点データの経度(X)方向平均(1 層用).
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight
の総和で割ることで平均している.
Original external subprogram is w_integral_mpi_module#v_AvrLon_xv
v_IntLon_xv( xv_data ) result(v_IntLon_xv)
Function : |
|
v_IntLon_xv(jc) : | real(8)
: | (out) 積分された 1 次元緯度(Y)格子点データ
|
|
xv_data(0:im-1,jc) : | real(8), intent(in)
: | (in) 2 次元経度緯度格子点データ(0:im-1,jc)
|
|
2 次元緯度経度格子点データの経度(X)方向積分(1 層用).
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.
Original external subprogram is w_integral_mpi_module#v_IntLon_xv
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_xv( xv_data ) result(w_DivLambda_xv)
Function : |
|
w_DivLambda_xv((nm+1)*(nm+1)) : | real(8)
: | (out) 格子点データを発散型経度微分したスペクトルデータ
|
|
xv_data(0:im-1,jc) : | real(8), intent(in)
|
格子点データに発散型経度微分 1/(1-μ^2)・∂/∂λ (μ=sinφ)
を作用させてスペクトルデータに変換して返す(1 層用).
Original external subprogram is w_deriv_mpi_module#w_DivLambda_xv
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_xv( xv_data ) result(w_DivLat_xv)
Function : |
|
w_DivLat_xv((nm+1)*(nm+1)) : | real(8)
: | (out) 格子点データを発散型緯度微分したスペクトルデータ
|
|
xv_data(0:im-1,jc) : | real(8), intent(in)
|
格子点データに発散型緯度微分 1/cosφ・∂(f cosφ)/∂φ を作用させて
スペクトルデータに変換して返す(1 層用).
Original external subprogram is w_deriv_mpi_module#w_DivLat_xv
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_xv( xv_data ) result(w_DivLon_xv)
Function : |
|
w_DivLon_xv((nm+1)*(nm+1)) : | real(8)
: | (out) 格子点データを発散型経度微分したスペクトルデータ
|
|
xv_data(0:im-1,jc) : | real(8), intent(in)
|
格子点データに発散型経度微分 1/cosφ・∂/∂λ を作用させて
スペクトルデータに変換して返す(1 層用).
Original external subprogram is w_deriv_mpi_module#w_DivLon_xv
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_xv( xv_data ) result(w_DivMu_xv)
Function : |
|
w_DivMu_xv((nm+1)*(nm+1)) : | real(8)
: | (out) 格子点データを発散型緯度微分したスペクトルデータ
|
|
xv_data(0:im-1,jc) : | real(8), intent(in)
|
格子点データに発散型緯度微分 ∂/∂μ (μ=sinφ)を作用させて
スペクトルデータに変換して返す(1 層用).
Original external subprogram is w_deriv_mpi_module#w_DivMu_xv
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_xv_xv( xv_u, xv_v ) result(w_Div_xv_xv)
Function : |
|
w_Div_xv_xv((nm+1)*(nm+1)) : | real(8)
: | (out) 2 つの入力格子点データをベクトル成分とする発散のスペクトルデータ
|
|
xv_u(0:im-1,jc) : | real(8), intent(in)
|
xv_v(0:im-1,jc) : | real(8), intent(in)
|
2 つの入力格子点データをベクトル成分とする発散を計算し,
スペクトルデータとして返す(1 層用).
Original external subprogram is w_deriv_mpi_module#w_Div_xv_xv
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_JacobianMPI_w_w( w_a, w_b ) result(w_JacobianMPI_w_w)
Function : |
|
w_JacobianMPI_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_deriv_mpi_module#w_JacobianMPI_w_w
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_StreamPotential2VectorMPI( w_Psi, w_Chi, xv_U, xv_V )
Subroutine : |
|
w_Psi((nm+1)*(nm+1)) : | real(8), intent(in)
|
w_Chi((nm+1)*(nm+1)) : | real(8), intent(in)
|
xv_U(0:im-1,1:jc) : | real(8), intent(out)
|
xv_V(0:im-1,1:jc) : | real(8), intent(out)
|
流線・ポテンシャル(スペクトルデータ)から速度場(格子データ)に (逆)変換する(1
層用, MPI)
スペクトル変換を用いず微分を計算するために, 変換回数が 2 回ですむ.
u cosφ = ∂χ/∂λ - cosφ∂ψ/∂φ,
v cosφ = cosφ∂χ/∂φ + ∂ψ/∂λ
Original external subprogram is w_base_mpi_module#w_StreamPotential2VectorMPI
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_Vector2VorDivMPI( xv_U, xv_V, w_Vor, w_Div )
Subroutine : |
|
xv_U(0:im-1,1:jm) : | real(8), intent(in)
|
xv_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 層用,
MPI)
スペクトル変換を用いず微分を計算するために, 変換回数が 2 回ですむ.
ζ = 1/cosφ∂v/∂λ - 1/cosφ ∂(u cosφ)/∂φ
D = 1/cosφ∂u/∂λ + 1/cosφ ∂(v cosφ)/∂φ
Original external subprogram is w_base_mpi_module#w_Vector2VorDivMPI
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_VectorCosLat2VorDivMPI( xv_UCosLat, xv_VCosLat, w_Vor, w_Div )
Subroutine : |
|
xv_UCosLat(0:im-1,1:jm) : | real(8), intent(in)
|
xv_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 層用,
MPI)
スペクトル変換を用いず微分を計算するために, 変換回数が 2 回ですむ.
ζ = 1/cosφ∂v/∂λ - 1/cosφ ∂(u cosφ)/∂φ
D = 1/cosφ∂u/∂λ + 1/cosφ ∂(v cosφ)/∂φ
Original external subprogram is w_base_mpi_module#w_VectorCosLat2VorDivMPI
モジュールの終了処理(割り付け配列の解放)をおこなう.
解像度を変更する際にはこのサブルーチンを呼んで終了処理を
おこなったのちに再度 w_mpi_Initial
で初期設定しなければ ならない.
[Source]
subroutine w_mpi_Finalize
!
! モジュールの終了処理(割り付け配列の解放)をおこなう.
!
! 解像度を変更する際にはこのサブルーチンを呼んで終了処理を
! おこなったのちに再度 w_mpi_Initial で初期設定しなければ
! ならない.
!
call w_Finalize
call w_base_mpi_Finalize
call w_deriv_mpi_Finalize
call MessageNotify('M','w_mpi_Finalize', 'w_mpi_module (2013/02/23) is finalized')
end subroutine w_mpi_Finalize
Subroutine : |
|
n_in : | integer,intent(in)
|
i_in : | integer,intent(in)
|
j_in : | integer,intent(in)
|
np_in : | integer,intent(in), optional
|
スペクトル変換の格子点数, 波数を設定する.
他の関数を呼ぶ前に, 最初にこのサブルーチンを呼んで初期設定を
しなければならない.
np_in は w_mpi_module_sjpack
との互換性を保つためのダミー変数である.
[Source]
subroutine w_mpi_initial(n_in,i_in,j_in,np_in)
!
! スペクトル変換の格子点数, 波数を設定する.
!
! 他の関数を呼ぶ前に, 最初にこのサブルーチンを呼んで初期設定を
! しなければならない.
!
! np_in は w_mpi_module_sjpack との互換性を保つためのダミー変数である.
!
integer,intent(in) :: i_in !(in) 格子点数(東西)
integer,intent(in) :: j_in !(in) 格子点数(南北)
integer,intent(in) :: n_in !(in) 切断波数の設定
integer,intent(in), optional :: np_in !(in) ダミー変数
if ( present (np_in) )then
call MessageNotify('W','w_mpi_initial', 'OpenMP calculation not supported with w_mpi_module.')
endif
call w_initial(n_in,i_in,j_in)
call w_base_mpi_initial
call w_deriv_mpi_initial
call MessageNotify('M','w_mpi_initial', 'w_mpi_module (2013/02/15) is initialized')
end subroutine w_mpi_initial
w_xv( xv_data, [ipow], [iflag] ) result(w_xv)
Function : |
|
w_xv((nm+1)*(nm+1)) : | real(8)
|
xv_data(0:im-1,jc) : | real(8), intent(in)
|
ipow : | integer, intent(in), optional
: | (in) 変換時に同時に作用させる 1/cosφ の次数. 省略時は 0.
|
|
iflag : | integer, intent(in), optional
: | 変換の種類
0 : 通常の正変換
1 : 経度微分を作用させた正変換
-1 : 緯度微分を作用させた正変換
2 : sinφを作用させた正変換
省略時は 0.
|
|
格子データからスペクトルデータへ(正)変換する(1 層用).
Original external subprogram is w_base_mpi_module#w_xv
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
x_AvrLat_xv( xv_data ) result(x_AvrLat_xv)
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_xv( xv_data ) result(x_IntLat_xv)
Function : |
|
x_IntLat_xv(0:im-1) : | real(8)
: | (out) 積分された 1 次元経度(X)格子点データ
|
|
xv_data(0:im-1,jc) : | real(8), intent(in)
: | (in) 2 次元経度緯度格子点データ(0:im-1,jc)
|
|
2 次元緯度経度格子点データの緯度(Y)方向積分(1 層用).
実際には格子点データ各点毎に v_Y_Weight をかけた総和を計算している.
Original external subprogram is w_integral_mpi_module#x_IntLat_xv
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
xv_GradLambda_w( w_data ) result(xv_GradLambda_w)
xv_GradLat_w( w_data ) result(xv_GradLat_w)
Function : |
|
xv_GradLat_w(0:im-1,jc) : | real(8)
: | (out) スペクトルデータを勾配型緯度微分した格子点データ
|
|
w_data((nm+1)*(nm+1)) : | real(8), intent(in)
|
スペクトルデータに勾配型緯度微分 ∂/∂φ を作用させて
格子点データに変換して返す(1 層用).
Original external subprogram is w_deriv_mpi_module#xv_GradLat_w
xv_GradLon_w( w_data ) result(xv_GradLon_w)
Function : |
|
xv_GradLon_w(0:im-1,jc) : | real(8)
: | (out) スペクトルデータを勾配型経度微分した格子点データ
|
|
w_data((nm+1)*(nm+1)) : | real(8), intent(in)
|
スペクトルデータに勾配型経度微分 1/cosφ・∂/∂λ を
作用させた格子点データを返す(1 層用).
Original external subprogram is w_deriv_mpi_module#xv_GradLon_w
xv_GradMu_w( w_data ) result(xv_GradMu_w)
Function : |
|
xv_GradMu_w(0:im-1,jc) : | real(8)
: | (out) スペクトルデータを勾配型緯度微分した格子点データ
|
|
w_data((nm+1)*(nm+1)) : | real(8), intent(in)
|
スペクトルデータに勾配型緯度微分 (1-μ^2)∂/∂μ (μ=sinφ)
を作用させて格子点データに変換して返す(1 層用).
Original external subprogram is w_deriv_mpi_module#xv_GradMu_w
xv_w( w_data, [ipow], [iflag] ) result(xv_w)
Function : |
|
xv_w(0:im-1,jc) : | 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 : 緯度微分を作用させた正変換
2 : sinφを作用させた正変換
省略時は 0.
|
|
スペクトルデータから分散格子データへ変換する(1 層用).
Original external subprogram is w_base_mpi_module#xv_w
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
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