| Class | w_deriv_mpi_module_sjpack |
| In: |
libsrc/w_mpi_module_sjpack/w_deriv_mpi_module_sjpack.f90
|
spml/w_deriv_mpi_module_sjpack モジュールは球面上での 2 次元流体運動を 球面調和函数を用いたスペクトル法と MPI によって数値計算するための モジュール w_mpi_module_sjpack の下部モジュールであり, スペクトル法の 微分計算のための Fortran90 関数を提供する. 内部で ISPACK の SJPACK-MPI の Fortran77 サブルーチンを呼んでいる. スペクトルデータおよび格子点データの格納方法や変換の詳しい計算法に ついては ISPACK/SJPACK のマニュアルを参照されたい.
| Variable : | |||
| im =64 : | integer
|
Original external subprogram is w_base_mpi_module_sjpack#im
| Variable : | |||
| jm =32 : | integer
|
Original external subprogram is w_base_mpi_module_sjpack#jm
| Variable : | |||
| nn =22 : | integer
|
Original external subprogram is w_base_mpi_module_sjpack#nn
| Variable : | |||
| nn =22 : | integer
|
Original external subprogram is w_base_module_sjpack#nn
| Function : | |||
| w_DivLambda_xv((nm+1)*(nm+1)) : | real(8)
| ||
| xv_data(0:im-1,jc) : | real(8), intent(in)
|
格子点データに発散型経度微分 1/(1-μ^2)・∂/∂λ (μ=sinφ) を作用させてスペクトルデータに変換して返す(1 層用).
function w_DivLambda_xv(xv_data)
!
! 格子点データに発散型経度微分 1/(1-μ^2)・∂/∂λ (μ=sinφ)
! を作用させてスペクトルデータに変換して返す(1 層用).
!
real(8) :: w_DivLambda_xv((nm+1)*(nm+1))
!(out) 格子点データを発散型経度微分したスペクトルデータ
real(8), intent(in) :: xv_data(0:im-1,jc)
!(in) 入力格子点データ
w_DivLambda_xv = w_xv(xv_data,ipow=2,iflag=-1)
end function w_DivLambda_xv
| Function : | |||
| w_DivLat_xv((nm+1)*(nm+1)) : | real(8)
| ||
| xv_data(0:im-1,jc) : | real(8), intent(in)
|
格子点データに発散型緯度微分 1/cosφ・∂(f cosφ)/∂φ を作用させて スペクトルデータに変換して返す(1 層用).
function w_DivLat_xv(xv_data)
!
! 格子点データに発散型緯度微分 1/cosφ・∂(f cosφ)/∂φ を作用させて
! スペクトルデータに変換して返す(1 層用).
!
real(8) :: w_DivLat_xv((nm+1)*(nm+1))
!(out) 格子点データを発散型緯度微分したスペクトルデータ
real(8), intent(in) :: xv_data(0:im-1,jc)
!(in) 入力格子点データ
w_DivLat_xv = w_xv(xv_data,ipow=1,iflag=1)
end function w_DivLat_xv
| Function : | |||
| w_DivLon_xv((nm+1)*(nm+1)) : | real(8)
| ||
| xv_data(0:im-1,jc) : | real(8), intent(in)
|
格子点データに発散型経度微分 1/cosφ・∂/∂λ を作用させて スペクトルデータに変換して返す(1 層用).
function w_DivLon_xv(xv_data)
!
! 格子点データに発散型経度微分 1/cosφ・∂/∂λ を作用させて
! スペクトルデータに変換して返す(1 層用).
!
real(8) :: w_DivLon_xv((nm+1)*(nm+1))
!(out) 格子点データを発散型経度微分したスペクトルデータ
real(8), intent(in) :: xv_data(0:im-1,jc)
!(in) 入力格子点データ
w_DivLon_xv = w_xv(xv_data,ipow=1,iflag=-1)
end function w_DivLon_xv
| Function : | |||
| w_DivMu_xv((nm+1)*(nm+1)) : | real(8)
| ||
| xv_data(0:im-1,jc) : | real(8), intent(in)
|
格子点データに発散型緯度微分 ∂/∂μ (μ=sinφ)を作用させて スペクトルデータに変換して返す(1 層用).
function w_DivMu_xv(xv_data)
!
! 格子点データに発散型緯度微分 ∂/∂μ (μ=sinφ)を作用させて
! スペクトルデータに変換して返す(1 層用).
!
real(8) :: w_DivMu_xv((nm+1)*(nm+1))
!(out) 格子点データを発散型緯度微分したスペクトルデータ
real(8), intent(in) :: xv_data(0:im-1,jc)
!(in) 入力格子点データ
w_DivMu_xv = w_xv(xv_data,ipow=2,iflag=1)
end function w_DivMu_xv
| Function : | |||
| w_Div_xv_xv((nm+1)*(nm+1)) : | real(8)
| ||
| xv_u(0:im-1,jc) : | real(8), intent(in)
| ||
| xv_v(0:im-1,jc) : | real(8), intent(in)
|
2 つの入力格子点データをベクトル成分とする発散を計算し, スペクトルデータとして返す(1 層用).
function w_Div_xv_xv(xv_u,xv_v)
!
! 2 つの入力格子点データをベクトル成分とする発散を計算し,
! スペクトルデータとして返す(1 層用).
!
real(8) :: w_Div_xv_xv((nm+1)*(nm+1))
!(out) 2 つの入力格子点データをベクトル成分とする発散のスペクトルデータ
real(8), intent(in) :: xv_u(0:im-1,jc)
!(in) ベクトル経度成分の格子点データ
real(8), intent(in) :: xv_v(0:im-1,jc)
!(in) ベクトル緯度成分の格子点データ
w_Div_xv_xv = w_Divlon_xv(xv_u) + w_Divlat_xv(xv_v)
end function w_Div_xv_xv
| Function : | |||
| w_JacobianMPI_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 層用).
function w_JacobianMPI_w_w(w_a,w_b)
! 2 つのスペクトルデータにヤコビアン
!
! J(f,g) = ∂f/∂λ・∂g/∂μ - ∂g/∂λ・∂f/∂μ
! = ∂f/∂λ・1/cosφ・∂g/∂φ
! - ∂g/∂λ・1/cosφ・∂f/∂φ
!
! を作用させる(1 層用).
real(8) :: w_JacobianMPI_w_w((nm+1)*(nm+1))
!(out) 2 つのスペクトルデータのヤコビアン
real(8), intent(in) :: w_a((nm+1)*(nm+1))
!(in) 1つ目の入力スペクトルデータ
real(8), intent(in) :: w_b((nm+1)*(nm+1))
!(in) 2つ目の入力スペクトルデータ
w_JacobianMPI_w_w = w_xv( xv_w(w_DLon_w(w_a))*xv_w(w_b,ipow=2,iflag=1) - xv_w(w_DLon_w(w_b))*xv_w(w_a,ipow=2,iflag=1) )
end function w_JacobianMPI_w_w
| Subroutine : |
モジュールの終了処理(割り付け配列の解放)をおこなう.
このサブルーチンを単独で用いるのでなく, 上位サブルーチン w_mpi_Finalize を使用すること.
subroutine w_deriv_mpi_finalize
!
! モジュールの終了処理(割り付け配列の解放)をおこなう.
!
! このサブルーチンを単独で用いるのでなく,
! 上位サブルーチン w_mpi_Finalize を使用すること.
!
call MessageNotify('M','w_deriv_mpi_Finalize', 'No need to finalize w_deriv_mpi_module_sjpack')
call MessageNotify('M','w_deriv_mpi_Finalize', 'w_deriv_mpi_module_sjpack is finalized (dummy, 20013/02/23)')
end subroutine w_deriv_mpi_finalize
| Subroutine : |
初期化ルーチン. w_deriv_mpi_module と互換性を保つために用意しているだけ
subroutine w_deriv_mpi_initial
!
! 初期化ルーチン. w_deriv_mpi_module と互換性を保つために用意しているだけ
!
call MessageNotify('M','w_deriv_mpi_initial', 'w_deriv_mpi_module_sjpack is initialized (dummy)')
end subroutine w_deriv_mpi_initial
| Function : | |||
| xv_GradLambda_w(0:im-1,jc) : | real(8)
| ||
| w_data((nm+1)*(nm+1)) : | real(8), intent(in)
|
スペクトルデータに勾配型経度微分 ∂/∂λ を作用する(1 層用).
function xv_GradLambda_w(w_data)
!
! スペクトルデータに勾配型経度微分 ∂/∂λ を作用する(1 層用).
!
real(8) :: xv_GradLambda_w(0:im-1,jc)
!(out) スペクトルデータを勾配型経度微分した格子点データ
real(8), intent(in) :: w_data((nm+1)*(nm+1))
!(in) 入力スペクトルデータ
xv_GradLambda_w = xv_w(w_data,ipow=0,iflag=-1)
end function xv_GradLambda_w
| Function : | |||
| xv_GradLat_w(0:im-1,jc) : | real(8)
| ||
| w_data((nm+1)*(nm+1)) : | real(8), intent(in)
|
スペクトルデータに勾配型緯度微分 ∂/∂φ を作用させて 格子点データに変換して返す(1 層用).
function xv_GradLat_w(w_data)
!
! スペクトルデータに勾配型緯度微分 ∂/∂φ を作用させて
! 格子点データに変換して返す(1 層用).
!
real(8) :: xv_GradLat_w(0:im-1,jc)
!(out) スペクトルデータを勾配型緯度微分した格子点データ
real(8), intent(in) :: w_data((nm+1)*(nm+1))
!(in) 入力スペクトルデータ
xv_GradLat_w = xv_w(w_data,ipow=1,iflag=1)
end function xv_GradLat_w
| Function : | |||
| xv_GradLon_w(0:im-1,jc) : | real(8)
| ||
| w_data((nm+1)*(nm+1)) : | real(8), intent(in)
|
スペクトルデータに勾配型経度微分 1/cosφ・∂/∂λ を 作用させた格子点データを返す(1 層用).
function xv_GradLon_w(w_data)
!
! スペクトルデータに勾配型経度微分 1/cosφ・∂/∂λ を
! 作用させた格子点データを返す(1 層用).
!
real(8) :: xv_GradLon_w(0:im-1,jc)
!(out) スペクトルデータを勾配型経度微分した格子点データ
real(8), intent(in) :: w_data((nm+1)*(nm+1))
!(in) 入力スペクトルデータ
xv_GradLon_w = xv_w(w_data,ipow=1,iflag=-1)
end function xv_GradLon_w
| Function : | |||
| xv_GradMu_w(0:im-1,jc) : | real(8)
| ||
| w_data((nm+1)*(nm+1)) : | real(8), intent(in)
|
スペクトルデータに勾配型緯度微分 (1-μ^2)∂/∂μ (μ=sinφ) を作用させて格子点データに変換して返す(1 層用).
function xv_GradMu_w(w_data)
!
! スペクトルデータに勾配型緯度微分 (1-μ^2)∂/∂μ (μ=sinφ)
! を作用させて格子点データに変換して返す(1 層用).
!
real(8) :: xv_GradMu_w(0:im-1,jc)
!(out) スペクトルデータを勾配型緯度微分した格子点データ
real(8), intent(in) :: w_data((nm+1)*(nm+1))
!(in) 入力スペクトルデータ
xv_GradMu_w = xv_w(w_data,ipow=0,iflag=1)
end function xv_GradMu_w