Class | eea_module |
In: |
libsrc/eea_module/eea_module.f90
|
Authors: | Shin-ichi Takehiro, Youhei SASAKI |
Version: | $Id: eea_module.f90 590 2013-08-19 08:48:21Z uwabami $ |
Copyright&License: | See COPYRIGHT |
spml/eea_module モジュールは周期境界条件の下での 2 次元矩形領域の 流体運動をスペクトル法により数値計算するための Fortran90 関数を 提供する.
内部で ee_module モジュールを呼んでいる. スペクトルデータおよび格子点データの格納方法については ISPACK/P2PACK のマニュアルを参照されたい.
eea_: | スペクトルデータ(第 1,2 次元がそれぞれ Y,X 方向波数, 第3次元は任意) |
yxa_: | 3 次元格子点データ(第 1,2 次元がそれぞれ Y,X 方向の格子点,, 第3次元は任意) |
xya_: | 3 次元格子点データ(第 1,2 次元がそれぞれ X,Y 方向の格子点,, 第3次元は任意) |
ee_ : | スペクトルデータ(第 1,2 次元がそれぞれ Y,X 方向波数) |
yx_ : | 2 次元格子点データ(第 1,2 次元がそれぞれ Y,X 方向の格子点) |
xy_ : | 2 次元格子点データ(第 1,2 次元がそれぞれ X,Y 方向の格子点) |
x_ : | X 方向 1 次元格子点データ, y_ : Y 方向 1 次元格子点データ |
_eea : | 複数のスペクトルデータ |
_ee : | スペクトルデータ |
_ee_ee : | 2 つのスペクトルデータ |
_yxa : | 3 次元格子点データ |
_yx : | 2 次元格子点データ |
_xy : | 2 次元格子点データ |
_x : | X 方向 1 次元格子点データ |
_y : | Y 方向 1 次元格子点データ. |
eea_Initial : | スペクトル変換の格子点数, 波数, 領域の大きさの設定 |
x_X, y_Y : | 格子点座標(X,Y座標)を格納した 1 次元配列 |
x_X_Weight, y_Y_Weight : | 重み座標を格納した 1 次元配列 |
yx_X, yx_Y : | 格子点データの XY 座標(X,Y)(格子点データ型 2 次元配列) |
xy_X, xy_Y : | 格子点データの XY 座標(X,Y)(格子点データ型 2 次元配列) |
yxa_eea : | スペクトルデータから格子データへの変換 |
eea_yxa : | 格子データからスペクトルデータへの変換 |
xya_yxa : | 格子データの次元順序入換 |
yxa_xya : | 格子データの次元順序入換 |
yx_ee : | スペクトルデータから格子データへの変換 |
ee_yx : | 格子データからスペクトルデータへの変換 |
eea_Lapla_eea : | スペクトルデータにラプラシアンを作用させる |
eea_LaplaInv_eea : | スペクトルデータにラプラシアンの逆変換を作用させる |
eea_Dx_eea : | スペクトルデータに X 微分を作用させる |
eea_Dy_eea : | スペクトルデータに Y 微分を作用させる |
eea_Jacobian_eea_eea : | 2 つのスペクトルデータからヤコビアンを計算する |
ee_Lapla_ee : | スペクトルデータにラプラシアンを作用させる |
ee_LaplaInv_ee : | スペクトルデータにラプラシアンの逆変換を作用させる |
ee_Dx_ee : | スペクトルデータに X 微分を作用させる |
ee_Dy_ee : | スペクトルデータに Y 微分を作用させる |
ee_Jacobian_ee_ee : | 2 つのスペクトルデータからヤコビアンを計算する |
a_IntYX_yxa, a_AvrYX_yxa : | 2 次元格子点データの全領域積分および平均 |
ya_IntX_yxa, ya_AvrX_yxa : | 2 次元格子点データの X 方向積分および平均 |
a_IntX_xa, a_AvrX_xa : | 1 次元(X)格子点データの X 方向積分および平均 |
xa_IntY_yxa, xa_AvrY_yxa : | 2 次元格子点データの Y 方向積分および平均 |
a_IntY_ya, a_AvrY_ya : | 1 次元(Y)格子点データの Y 方向積分および平均 |
IntYX_yx, AvrYX_yx : | 2 次元格子点データの全領域積分および平均 |
y_IntX_yx, y_AvrX_yx : | 2 次元格子点データの X 方向積分および平均 |
IntX_x, AvrX_x : | 1 次元(X)格子点データの X 方向積分および平均 |
x_IntY_yx, x_AvrY_yx : | 2 次元格子点データの Y 方向積分および平均 |
IntY_y, AvrY_y : | 1 次元(Y)格子点データの Y 方向積分および平均 |
eea_EnergyFromStreamfunc_eea :: ee_EnergyFromStreamfunc_ee :: 流線関数からエネルギースペクトルを計算する
eea_EnstrophyFromStreamfunc_eea :: ee_EnstrophyFromStreamfunc_ee :: 流線関数からエンストロフィースペクトルを計算する
a_Interpolate_eea : | 任意の点の値をスペクトルデータから計算する |
Interpolate_ee : | 任意の点の値をスペクトルデータから計算する |
Function : | |||
AvrX_x : | real(8)
| ||
x : | real(8), dimension(0:im-1)
|
1 次元(X)格子点データの X 方向平均
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight の総和で割ることで平均している.
Original external subprogram is ee_module#AvrX_x
Function : | |||
AvrYX_yx : | real(8)
| ||
yx : | real(8), dimension(0:jm-1,0:im-1)
|
2 次元格子点データの全領域平均
実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた 総和を計算し, x_X_Weight*y_Y_Weight の総和で割ることで平均している.
Original external subprogram is ee_module#AvrYX_yx
Function : | |||
AvrY_y : | real(8)
| ||
y : | real(8), dimension(0:jm-1)
|
1 次元(Y)格子点データの Y 方向平均
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight の総和で割ることで平均している.
Original external subprogram is ee_module#AvrY_y
Function : | |||
IntX_x : | real(8)
| ||
x : | real(8), dimension(0:im-1)
|
1 次元(X)格子点データの X 方向積分
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.
Original external subprogram is ee_module#IntX_x
Function : | |||
IntYX_yx : | real(8)
| ||
yx : | real(8), dimension(0:jm-1,0:im-1)
|
2 次元格子点データの全領域積分および平均.
実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた 総和を計算している.
Original external subprogram is ee_module#IntYX_yx
Function : | |||
IntY_y : | real(8)
| ||
y : | real(8), dimension(0:jm-1)
|
Y 方向積分
1 次元(Y)格子点データの Y 方向積分
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.
Original external subprogram is ee_module#IntY_y
Function : | |||
Interpolate_ee : | real(8)
| ||
x : | real(8), intent(IN)
| ||
y : | real(8), intent(IN)
|
Original external subprogram is ee_module#Interpolate_ee
Function : | |||
a_AvrX_xa : | real(8), dimension(size(xa,2))
| ||
xa : | real(8), dimension(0:,:)
|
2 次元(X)格子点データの X 方向平均
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight の総和で割ることで平均している.
function a_AvrX_xa(xa) ! ! 2 次元(X)格子点データの X 方向平均 ! ! 実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, ! x_X_Weight の総和で割ることで平均している. ! real(8), dimension(0:,:) :: xa !(in) 1 次元格子点データ real(8), dimension(size(xa,2)) :: a_AvrX_xa !(out) 平均値 integer :: n ! 作業変数 do n=1,size(xa,2) a_AvrX_xa(n) = AvrX_x(xa(:,n)) end do end function a_AvrX_xa
Function : | |||
a_AvrYX_yxa : | real(8), dimension(size(yxa,3))
| ||
yxa : | real(8), dimension(0:,0:,:)
|
3 次元格子点データの水平領域平均
実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた 総和を計算し, x_X_Weight*y_Y_Weight の総和で割ることで平均している.
function a_AvrYX_yxa(yxa) ! ! 3 次元格子点データの水平領域平均 ! ! 実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた ! 総和を計算し, x_X_Weight*y_Y_Weight の総和で割ることで平均している. ! real(8), dimension(0:,0:,:) :: yxa !(in) 2 次元格子点データ real(8), dimension(size(yxa,3)) :: a_AvrYX_yxa !(out) 平均値 integer :: n ! 作業変数 do n=1,size(yxa,3) a_AvrYX_yxa(n) = AvrYX_yx(yxa(:,:,n)) end do end function a_AvrYX_yxa
Function : | |||
a_AvrY_ya : | real(8), dimension(size(ya,2))
| ||
ya : | real(8), dimension(0:,:)
|
2 次元(Y)格子点データの Y 方向平均
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight の総和で割ることで平均している.
function a_AvrY_ya(ya) ! ! 2 次元(Y)格子点データの Y 方向平均 ! ! 実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, ! y_Y_Weight の総和で割ることで平均している. ! real(8), dimension(0:,:) :: ya !(in) 1 次元格子点データ real(8), dimension(size(ya,2)) :: a_AvrY_ya !(out) 平均値 integer :: n ! 作業変数 do n=1,size(ya,2) a_AvrY_ya(n) = AvrY_y(ya(:,n)) end do end function a_AvrY_ya
Function : | |||
a_IntX_xa : | real(8), dimension(size(xa,2))
| ||
xa : | real(8), dimension(0:,:)
|
2 次元(X)格子点データの X 方向積分
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.
function a_IntX_xa(xa) ! ! 2 次元(X)格子点データの X 方向積分 ! ! 実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している. ! real(8), dimension(0:,:) :: xa !(in) 1 次元格子点データ !(in) 2 次元格子点データ real(8), dimension(size(xa,2)) :: a_IntX_xa !(out) 積分値 !(out) 積分された 1 次元格子点データ integer :: n ! 作業変数 do n=1,size(xa,2) a_IntX_xa(n) = IntX_x(xa(:,n)) enddo end function a_IntX_xa
Function : | |||
a_IntYX_yxa : | real(8), dimension(size(yxa,3))
| ||
yxa : | real(8), dimension(0:,0:,:)
|
3 次元格子点データの水平領域積分および平均.
実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた 総和を計算している.
function a_IntYX_yxa(yxa) ! ! 3 次元格子点データの水平領域積分および平均. ! ! 実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた ! 総和を計算している. ! real(8), dimension(0:,0:,:) :: yxa !(in) 2 次元格子点データ real(8), dimension(size(yxa,3)) :: a_IntYX_yxa !(out) 積分値 integer :: n ! 作業変数 do n=1,size(yxa,3) a_IntYX_yxa(n) = IntYX_yx(yxa(:,:,n)) enddo end function a_IntYX_yxa
Function : | |||
a_IntY_ya : | real(8), dimension(size(ya,2))
| ||
ya : | real(8), dimension(0:,:)
|
Y 方向積分
2 次元(Y)格子点データの Y 方向積分
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.
function a_IntY_ya(ya) ! Y 方向積分 ! ! 2 次元(Y)格子点データの Y 方向積分 ! ! 実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している. ! real(8), dimension(0:,:) :: ya !(in) 1 次元格子点データ !(in) 2 次元格子点データ real(8), dimension(size(ya,2)) :: a_IntY_ya !(out) 積分値 !(out) 積分された 1 次元格子点データ integer :: n ! 作業変数 do n=1,size(ya,2) a_IntY_ya(n) = IntY_y(ya(:,n)) enddo end function a_IntY_ya
Function : | |||
a_Interpolate_eea(size(xa)) : | real(8)
| ||
xa(:) : | real(8), intent(IN)
| ||
ya(:) : | real(8), intent(IN)
|
function a_Interpolate_eea( eea_Data, xa, ya ) real(8), intent(IN) :: eea_data(-lm:,-km:,:) ! スペクトルデータ real(8), intent(IN) :: xa(:) ! 補間する点の x 座標 real(8), intent(IN) :: ya(:) ! 補間する点の y 座標 real(8) :: a_Interpolate_eea(size(xa)) ! 補間した値 integer :: n do n=1,size(xa) a_Interpolate_eea(n) = Interpolate_ee(eea_Data(:,:,n),xa(n),ya(n)) end do end function a_Interpolate_eea
Function : | |||
ee_Dx_ee : | real(8), dimension(-lm:lm,-km:km)
| ||
ee : | real(8), dimension(-lm:lm,-km:km), intent(in)
|
入力スペクトルデータに X 微分(∂x)を作用する.
スペクトルデータの X 微分とは, 対応する格子点データに X 微分を 作用させたデータのスペクトル変換のことである.
実際にはスペクトルデータに X 方向波数 k をかけて sin(kx) <-> cos(kx) 成分に入れ換える計算を行っている.
Original external subprogram is ee_module#ee_Dx_ee
Function : | |||
ee_Dy_ee : | real(8), dimension(-lm:lm,-km:km)
| ||
ee : | real(8), dimension(-lm:lm,-km:km), intent(in)
|
入力スペクトルデータに Y 微分(∂y)を作用する.
スペクトルデータの X 微分とは, 対応する格子点データに Y 微分を 作用させたデータのスペクトル変換のことである.
実際にはスペクトルデータに X 方向波数 l をかけて sin(ky) <-> cos(ky) 成分に入れ換える計算を行っている.
Original external subprogram is ee_module#ee_Dy_ee
Function : | |||
ee_EnergyFromStreamfunc_ee : | real(8), dimension(-lm:lm,-km:km)
| ||
ee_StrFunc : | real(8), dimension(-lm:lm,-km:km), intent(in)
|
流線関数からエネルギースペクトルを計算する.
E_kl = (1/2)(k^2+l^2)|\psi_kl|^2
Original external subprogram is ee_module#ee_EnergyFromStreamfunc_ee
Function : | |||
ee_EnstrophyFromStreamfunc_ee : | real(8), dimension(-lm:lm,-km:km)
| ||
ee_StrFunc : | real(8), dimension(-lm:lm,-km:km), intent(in)
|
流線関数からエンストロフィースペクトルを計算する.
Q_kl = (1/2)(k^2+l^2)^2|\psi_kl|^2
Original external subprogram is ee_module#ee_EnstrophyFromStreamfunc_ee
Function : | |||
ee_JacobianZ_ee : | real(8), dimension(-lm:lm,-km:km)
|
渦度スペクトルデータ ζ から流線関数と渦度のヤコビアン
J(ψ,ζ)=(∂xψ)(∂yζ)-(∂yψ)(∂xζ) を計算する. ただしψ は (∂xx+∂yy)ψ=ζ を満たす流線関数である.
Original external subprogram is ee_module#ee_JacobianZ_ee
Function : | |||
ee_Jacobian_ee_ee : | real(8), dimension(-lm:lm,-km:km)
| ||
ee_a : | real(8), dimension(-lm:lm,-km:km), intent(in)
| ||
ee_b : | real(8), dimension(-lm:lm,-km:km), intent(in)
|
2 つのスペクトルデータからヤコビアン J(A,B)=(∂xA)(∂yB)-(∂yA)(∂xB) を計算する. 2 つのスペクトルデータのヤコビアンとは, 対応する 2 つの 格子点データのヤコビアンのスペクトル変換のことである.
Original external subprogram is ee_module#ee_Jacobian_ee_ee
Function : | |||
ee_LaplaInv_ee : | real(8), dimension(-lm:lm,-km:km)
| ||
ee : | real(8), dimension(-lm:lm,-km:km), intent(in)
|
入力スペクトルデータに逆ラプラシアン(∂xx+∂yy)**(-1)を作用する.
スペクトルデータの逆ラプラシアンとは, 対応する格子点データに 逆ラプラシアンを作用させたデータのスペクトル変換のことである.
実際にはスペクトルデータに全波数 (k**2 + l**2) で割る 計算を行っている. k=l=0 成分には 0 を代入している.
Original external subprogram is ee_module#ee_LaplaInv_ee
Function : | |||
ee_Lapla_ee : | real(8), dimension(-lm:lm,-km:km)
| ||
ee : | real(8), dimension(-lm:lm,-km:km), intent(in)
|
入力スペクトルデータにラプラシアン(∂xx+∂yy)を作用する.
スペクトルデータのラプラシアンとは, 対応する格子点データに ラプラシアンを作用させたデータのスペクトル変換のことである.
実際にはスペクトルデータに全波数 (k**2 + l**2) をかける 計算を行っている.
Original external subprogram is ee_module#ee_Lapla_ee
Function : | |||
ee_yx : | real(8), dimension(-lm:lm,-km:km)
| ||
yx : | real(8), dimension(0:jm-1,0:im-1), intent(in)
|
格子データからスペクトルデータへ変換する.
Original external subprogram is ee_module#ee_yx
Function : | |||
eea_Dx_eea : | real(8), dimension(-lm:lm,-km:km,size(eea,3))
| ||
eea : | real(8), dimension(-lm:,-km:,:), intent(in)
|
入力スペクトルデータに X 微分(∂x)を作用する.
スペクトルデータの X 微分とは, 対応する格子点データに X 微分を 作用させたデータのスペクトル変換のことである.
実際にはスペクトルデータに X 方向波数 k をかけて sin(kx) <-> cos(kx) 成分に入れ換える計算を行っている.
function eea_Dx_eea(eea) ! ! 入力スペクトルデータに X 微分(∂x)を作用する. ! ! スペクトルデータの X 微分とは, 対応する格子点データに X 微分を ! 作用させたデータのスペクトル変換のことである. ! ! 実際にはスペクトルデータに X 方向波数 k をかけて ! sin(kx) <-> cos(kx) 成分に入れ換える計算を行っている. ! real(8), dimension(-lm:,-km:,:), intent(in) :: eea !(in) 入力スペクトルデータ real(8), dimension(-lm:lm,-km:km,size(eea,3)) :: eea_Dx_eea !(out) スペクトルデータの X 微分 integer n ! 作業変数 do n=1,size(eea,3) eea_Dx_eea(:,:,n) = ee_Dx_ee(eea(:,:,n)) enddo end function eea_Dx_eea
Function : | |||
eea_Dy_eea : | real(8), dimension(-lm:lm,-km:km,size(eea,3))
| ||
eea : | real(8), dimension(-lm:,-km:,:), intent(in)
|
入力スペクトルデータに Y 微分(∂y)を作用する.
スペクトルデータの X 微分とは, 対応する格子点データに Y 微分を 作用させたデータのスペクトル変換のことである.
実際にはスペクトルデータに X 方向波数 l をかけて sin(ky) <-> cos(ky) 成分に入れ換える計算を行っている.
function eea_Dy_eea(eea) ! ! 入力スペクトルデータに Y 微分(∂y)を作用する. ! ! スペクトルデータの X 微分とは, 対応する格子点データに Y 微分を ! 作用させたデータのスペクトル変換のことである. ! ! 実際にはスペクトルデータに X 方向波数 l をかけて ! sin(ky) <-> cos(ky) 成分に入れ換える計算を行っている. ! real(8), dimension(-lm:,-km:,:), intent(in) :: eea !(in) 入力スペクトルデータ real(8), dimension(-lm:lm,-km:km,size(eea,3)) :: eea_Dy_eea !(out) スペクトルデータの Y 微分 integer n ! 作業変数 do n=1,size(eea,3) eea_Dy_eea(:,:,n) = ee_Dy_ee(eea(:,:,n)) enddo end function eea_Dy_eea
Function : | |||
eea_EnergyFromStreamfunc_eea : | real(8), dimension(-lm:lm,-km:km,size(eea_StrFunc,3))
| ||
eea_StrFunc : | real(8), dimension(-lm:,-km:,:), intent(in)
|
流線関数からエネルギースペクトルを計算する.
E_kl = (1/2)(k^2+l^2)|\psi_kl|^2
function eea_EnergyFromStreamfunc_eea(eea_StrFunc) ! ! 流線関数からエネルギースペクトルを計算する. ! ! E_kl = (1/2)(k^2+l^2)|\psi_kl|^2 ! ! * E_kl の総和が場の平均運動エネルギーとなる. ! * それに領域の面積をかけると全運動エネルギーとなる. ! real(8), dimension(-lm:,-km:,:), intent(in) :: eea_StrFunc ! 流線関数 real(8), dimension(-lm:lm,-km:km,size(eea_StrFunc,3)) :: eea_EnergyFromStreamfunc_eea ! エネルギースペクトル integer n ! 作業変数 do n=1,size(eea_StrFunc,3) eea_EnergyFromStreamfunc_eea(:,:,n) = ee_EnergyFromStreamfunc_ee(eea_StrFunc(:,:,n)) enddo end function eea_EnergyFromStreamfunc_eea
Function : | |||
eea_EnstrophyFromStreamfunc_eea : | real(8), dimension(-lm:lm,-km:km,size(eea_StrFunc,3))
| ||
eea_StrFunc : | real(8), dimension(-lm:,-km:,:), intent(in)
|
流線関数からエンストロフィースペクトルを計算する.
Q_kl = (1/2)(k^2+l^2)^2|\psi_kl|^2
function eea_EnstrophyFromStreamfunc_eea(eea_StrFunc) ! ! 流線関数からエンストロフィースペクトルを計算する. ! ! Q_kl = (1/2)(k^2+l^2)^2|\psi_kl|^2 ! ! * Q_kl の総和が場の平均エンストロフィーとなる. ! * それに領域の面積をかけると全エンストロフィーとなる. ! real(8), dimension(-lm:,-km:,:), intent(in) :: eea_StrFunc ! 流線関数 real(8), dimension(-lm:lm,-km:km,size(eea_StrFunc,3)) :: eea_EnstrophyFromStreamfunc_eea ! エンストロフィーースペクトル integer n ! 作業変数 do n=1,size(eea_StrFunc,3) eea_EnstrophyFromStreamfunc_eea(:,:,n) = ee_EnstrophyFromStreamfunc_ee(eea_StrFunc(:,:,n)) enddo end function eea_EnstrophyFromStreamfunc_eea
Subroutine : | |||
i : | integer,intent(in)
| ||
j : | integer,intent(in)
| ||
l : | integer,intent(in)
| ||
xmin : | real(8),intent(in)
| ||
xmax : | real(8),intent(in)
| ||
ymin : | real(8),intent(in)
| ||
ymax : | real(8),intent(in)
|
スペクトル変換の格子点数, 波数, 領域の大きさを設定する.
他の関数や変数を呼ぶ前に, 最初にこのサブルーチンを呼んで 初期設定をしなければならない.
subroutine eea_Initial(i,j,k,l,xmin,xmax,ymin,ymax) ! ! スペクトル変換の格子点数, 波数, 領域の大きさを設定する. ! ! 他の関数や変数を呼ぶ前に, 最初にこのサブルーチンを呼んで ! 初期設定をしなければならない. ! integer,intent(in) :: i ! 格子点数(X) integer,intent(in) :: j ! 格子点数(Y) integer,intent(in) :: K ! 切断波数(X) integer,intent(in) :: l ! 切断波数(Y) real(8),intent(in) :: xmin, xmax ! X 座標範囲 real(8),intent(in) :: ymin, ymax ! Y 座標範囲 im = i jm = j km = k lm = l call ee_Initial(i,j,k,l,xmin,xmax,ymin,ymax) allocate(xy_X(0:im-1,0:jm-1),xy_Y(0:im-1,0:jm-1)) xy_X = transpose(yx_X) xy_Y = transpose(yx_Y) call MessageNotify('M','eea_initial','eae_module (2011/12/10) is initialized') end subroutine eea_Initial
Function : | |||
eea_JacobianZ_eea : | real(8), dimension(-lm:lm,-km:km,size(eea_Zeta,3))
|
渦度スペクトルデータ ζ から流線関数と渦度のヤコビアン
J(ψ,ζ)=(∂xψ)(∂yζ)-(∂yψ)(∂xζ) を計算する. ただしψ は (∂xx+∂yy)ψ=ζ を満たす流線関数である.
function eea_JacobianZ_eea(eea_zeta) ! ! 渦度スペクトルデータ ζ から流線関数と渦度のヤコビアン ! ! J(ψ,ζ)=(∂xψ)(∂yζ)-(∂yψ)(∂xζ) ! ! を計算する. ただしψ は (∂xx+∂yy)ψ=ζ を満たす流線関数である. ! real(8), dimension(-lm:,-km:,:), intent(in) :: eea_Zeta !(in) 渦度スペクトルデータ real(8), dimension(-lm:lm,-km:km,size(eea_Zeta,3)) :: eea_JacobianZ_eea !(out) 流線関数と渦度のヤコビアン integer n ! 作業変数 do n=1,size(eea_Zeta,3) eea_JacobianZ_eea(:,:,n) = ee_JacobianZ_ee(eea_Zeta(:,:,n)) end do end function eea_JacobianZ_eea
Function : | |||
eea_Jacobian_eea_eea : | real(8), dimension(-lm:lm,-km:km,size(eea_a,3))
| ||
eea_a : | real(8), dimension(-lm:,-km:,:), intent(in)
| ||
eea_b : | real(8), dimension(-lm:,-km:,:), intent(in)
|
2 つのスペクトルデータからヤコビアン J(A,B)=(∂xA)(∂yB)-(∂yA)(∂xB) を計算する. 2 つのスペクトルデータのヤコビアンとは, 対応する 2 つの 格子点データのヤコビアンのスペクトル変換のことである.
function eea_Jacobian_eea_eea(eea_a,eea_b) ! ! 2 つのスペクトルデータからヤコビアン ! ! J(A,B)=(∂xA)(∂yB)-(∂yA)(∂xB) ! ! を計算する. ! ! 2 つのスペクトルデータのヤコビアンとは, 対応する 2 つの ! 格子点データのヤコビアンのスペクトル変換のことである. ! real(8), dimension(-lm:,-km:,:), intent(in) :: eea_a !(in) 1つ目の入力スペクトルデータ real(8), dimension(-lm:,-km:,:), intent(in) :: eea_b !(in) 2つ目の入力スペクトルデータ real(8), dimension(-lm:lm,-km:km,size(eea_a,3)) :: eea_Jacobian_eea_eea !(out) 2 つのスペクトルデータのヤコビアン integer n ! 作業変数 do n=1,size(eea_a,3) eea_Jacobian_eea_eea(:,:,n) = ee_Jacobian_ee_ee(eea_a(:,:,n),eea_b(:,:,n)) end do end function eea_Jacobian_eea_eea
Function : | |||
eea_LaplaInv_eea : | real(8), dimension(-lm:lm,-km:km,size(eea,3))
| ||
eea : | real(8), dimension(-lm:,-km:,:), intent(in)
|
入力スペクトルデータに逆ラプラシアン(∂xx+∂yy)**(-1)を作用する.
スペクトルデータの逆ラプラシアンとは, 対応する格子点データに 逆ラプラシアンを作用させたデータのスペクトル変換のことである.
実際にはスペクトルデータに全波数 (k**2 + l**2) で割る 計算を行っている. k=l=0 成分には 0 を代入している.
function eea_LaplaInv_eea(eea) ! ! 入力スペクトルデータに逆ラプラシアン(∂xx+∂yy)**(-1)を作用する. ! ! スペクトルデータの逆ラプラシアンとは, 対応する格子点データに ! 逆ラプラシアンを作用させたデータのスペクトル変換のことである. ! ! 実際にはスペクトルデータに全波数 (k**2 + l**2) で割る ! 計算を行っている. k=l=0 成分には 0 を代入している. ! real(8), dimension(-lm:,-km:,:), intent(in) :: eea !(in) スペクトルデータ real(8), dimension(-lm:lm,-km:km,size(eea,3)) :: eea_LaplaInv_eea !(out) スペクトルデータの逆ラプラシアン integer n do n=1,size(eea,3) eea_LaplaInv_eea(:,:,n) = ee_LaplaInv_ee(eea(:,:,n)) enddo end function eea_LaplaInv_eea
Function : | |||
eea_Lapla_eea : | real(8), dimension(-lm:lm,-km:km,size(eea,3))
| ||
eea : | real(8), dimension(-lm:,-km:,:), intent(in)
|
入力スペクトルデータにラプラシアン(∂xx+∂yy)を作用する.
スペクトルデータのラプラシアンとは, 対応する格子点データに ラプラシアンを作用させたデータのスペクトル変換のことである.
実際にはスペクトルデータに全波数 (k**2 + l**2) をかける 計算を行っている.
function eea_Lapla_eea(eea) ! ! 入力スペクトルデータにラプラシアン(∂xx+∂yy)を作用する. ! ! スペクトルデータのラプラシアンとは, 対応する格子点データに ! ラプラシアンを作用させたデータのスペクトル変換のことである. ! ! 実際にはスペクトルデータに全波数 (k**2 + l**2) をかける ! 計算を行っている. ! real(8), dimension(-lm:,-km:,:), intent(in) :: eea !(in) 入力スペクトルデータ real(8), dimension(-lm:lm,-km:km,size(eea,3)) :: eea_Lapla_eea !(out) スペクトルデータのラプラシアン integer n ! 作業変数 do n=1,size(eea,3) eea_Lapla_eea(:,:,n) = ee_Lapla_ee(eea(:,:,n)) enddo end function eea_Lapla_eea
Function : | |||
eea_yxa : | real(8), dimension(-lm:lm,-km:km,size(yxa,3))
| ||
yxa : | real(8), dimension(0:,0:,:), intent(in)
|
格子データからスペクトルデータへ変換する.
function eea_yxa(yxa) ! ! 格子データからスペクトルデータへ変換する. ! real(8), dimension(0:,0:,:), intent(in) :: yxa !(in) 格子点データ real(8), dimension(-lm:lm,-km:km,size(yxa,3)) :: eea_yxa !(out) スペクトルデータ integer :: n ! DO LOOP 変数 do n = 1, size(yxa,3) eea_yxa(:,:,n) = ee_yx(yxa(:,:,n)) end do end function eea_yxa
Function : | |||
x_AvrY_yx : | real(8), dimension(0:im-1)
| ||
yx : | real(8), dimension(0:jm-1,0:im-1)
|
2 次元格子点データの Y 方向平均
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight の総和で割ることで平均している.
Original external subprogram is ee_module#x_AvrY_yx
Function : | |||
x_IntY_yx : | real(8), dimension(0:im-1)
| ||
yx : | real(8), dimension(0:jm-1,0:im-1)
|
2 次元格子点データの Y 方向積分
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.
Original external subprogram is ee_module#x_IntY_yx
Variable : | |||
x_X => null() : | real(8), dimension(:), pointer
|
Original external subprogram is ee_module#x_X
Variable : | |||
x_X_Weight => null() : | real(8), dimension(:), pointer
|
Original external subprogram is ee_module#x_X_Weight
Function : | |||
xa_AvrY_yxa : | real(8), dimension(0:im-1,size(yxa,3))
| ||
yxa : | real(8), dimension(0:,0:,:)
|
3 次元格子点データの Y 方向平均
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight の総和で割ることで平均している.
function xa_AvrY_yxa(yxa) ! ! 3 次元格子点データの Y 方向平均 ! ! 実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, ! y_Y_Weight の総和で割ることで平均している. ! real(8), dimension(0:,0:,:) :: yxa !(in) 2 次元格子点データ real(8), dimension(0:im-1,size(yxa,3)) :: xa_AvrY_yxa !(out) 平均された 2 次元(X)格子点データ integer :: n ! 作業変数 do n=1,size(yxa,3) xa_AvrY_yxa(:,n) = x_AvrY_yx(yxa(:,:,n)) end do end function xa_AvrY_yxa
Function : | |||
xa_IntY_yxa : | real(8), dimension(0:im-1,size(yxa,3))
| ||
yxa : | real(8), dimension(0:,0:,:)
|
3 次元格子点データの Y 方向積分
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.
function xa_IntY_yxa(yxa) ! ! 3 次元格子点データの Y 方向積分 ! ! 実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している. ! real(8), dimension(0:,0:,:) :: yxa !(in) 3 次元格子点データ real(8), dimension(0:im-1,size(yxa,3)) :: xa_IntY_yxa !(out) 積分された 2 次元(X)格子点データ integer :: n ! 作業変数 do n=1,size(yxa,3) xa_IntY_yxa(:,n) = x_IntY_yx(yxa(:,:,n)) enddo end function xa_IntY_yxa
Function : | |||
xya_yxa : | real(8), dimension(0:im-1,0:jm-1,size(yxa,3))
| ||
yxa : | real(8), dimension(0:,0:,:), intent(in)
|
格子データの次元入換
function xya_yxa(yxa) ! ! 格子データの次元入換 ! real(8), dimension(0:,0:,:), intent(in) :: yxa !(in) 格子点データ real(8), dimension(0:im-1,0:jm-1,size(yxa,3)) :: xya_yxa !(out) スペクトルデータ integer :: n ! DO LOOP 変数 do n = 1, size(yxa,3) xya_yxa(:,:,n) = transpose(yxa(:,:,n)) end do end function xya_yxa
Function : | |||
y_AvrX_yx : | real(8), dimension(0:jm-1)
| ||
yx : | real(8), dimension(0:jm-1,0:im-1)
|
2 次元格子点データの X 方向平均
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight の総和で割ることで平均している.
Original external subprogram is ee_module#y_AvrX_yx
Function : | |||
y_IntX_yx : | real(8), dimension(0:jm-1)
| ||
yx : | real(8), dimension(0:jm-1,0:im-1)
|
2 次元格子点データの X 方向積分
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.
Original external subprogram is ee_module#y_IntX_yx
Variable : | |||
y_Y => null() : | real(8), dimension(:), pointer
|
Original external subprogram is ee_module#y_Y
Variable : | |||
y_Y_Weight => null() : | real(8), dimension(:), pointer
|
Original external subprogram is ee_module#y_Y_Weight
Function : | |||
ya_AvrX_yxa : | real(8), dimension(0:jm-1,size(yxa,3))
| ||
yxa : | real(8), dimension(0:,0:,:)
|
3 次元格子点データの X 方向平均
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight の総和で割ることで平均している.
function ya_AvrX_yxa(yxa) ! ! 3 次元格子点データの X 方向平均 ! ! 実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, ! x_X_Weight の総和で割ることで平均している. ! real(8), dimension(0:,0:,:) :: yxa !(in) 2 次元格子点データ real(8), dimension(0:jm-1,size(yxa,3)) :: ya_AvrX_yxa !(out) 平均された 1 次元(Y)格子点データ integer :: n ! 作業変数 do n=1,size(yxa,3) ya_AvrX_yxa(:,n) = y_AvrX_yx(yxa(:,:,n)) end do end function ya_AvrX_yxa
Function : | |||
ya_IntX_yxa : | real(8), dimension(0:jm-1,size(yxa,3))
| ||
yxa : | real(8), dimension(0:,0:,:)
|
3 次元格子点データの X 方向積分
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.
function ya_IntX_yxa(yxa) ! ! 3 次元格子点データの X 方向積分 ! ! 実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している. ! real(8), dimension(0:,0:,:) :: yxa !(in) 2 次元格子点データ real(8), dimension(0:jm-1,size(yxa,3)) :: ya_IntX_yxa !(out) 積分された 1 次元(Y)格子点データ integer :: n ! 作業変数 do n=1,size(yxa,3) ya_IntX_yxa(:,n) = y_IntX_yx(yxa(:,:,n)) enddo end function ya_IntX_yxa
Variable : | |||
yx_X => null() : | real(8), dimension(:,:), pointer
|
Original external subprogram is ee_module#yx_X
Variable : | |||
yx_Y => null() : | real(8), dimension(:,:), pointer
|
Original external subprogram is ee_module#yx_Y
Function : | |||
yx_ee : | real(8), dimension(0:jm-1,0:im-1)
| ||
ee : | real(8), dimension(-lm:lm,-km:km), intent(in)
|
スペクトルデータから格子データへ変換する.
Original external subprogram is ee_module#yx_ee
Function : | |||
yxa_eea : | real(8), dimension(0:jm-1,0:im-1,size(eea,3))
| ||
eea : | real(8), dimension(-lm:,-km:,:), intent(in)
|
スペクトルデータから格子データへ変換する.
function yxa_eea(eea) ! ! スペクトルデータから格子データへ変換する. ! real(8), dimension(-lm:,-km:,:), intent(in) :: eea !(in) スペクトルデータ real(8), dimension(0:jm-1,0:im-1,size(eea,3)) :: yxa_eea !(out) 格子点データ integer :: n ! DO LOOP 変数 do n = 1, size(eea,3) yxa_eea(:,:,n) = yx_ee(eea(:,:,n)) end do end function yxa_eea
Function : | |||
yxa_xya : | real(8), dimension(0:jm-1,0:im-1,size(xya,3))
| ||
xya : | real(8), dimension(0:,0:,:), intent(in)
|
格子データの次元入換
function yxa_xya(xya) ! ! 格子データの次元入換 ! real(8), dimension(0:,0:,:), intent(in) :: xya !(in) 格子点データ real(8), dimension(0:jm-1,0:im-1,size(xya,3)) :: yxa_xya !(out) スペクトルデータ integer :: n ! DO LOOP 変数 do n = 1, size(xya,3) yxa_xya(:,:,n) = transpose(xya(:,:,n)) end do end function yxa_xya