Class | wa_spectrum_module |
In: |
libsrc/wa_module/wa_spectrum_module.f90
|
Authors: | Shin-ichi Takehiro, Youhei SASAKI |
Version: | $Id: wa_spectrum_module.f90 590 2013-08-19 08:48:21Z uwabami $ |
Copyright&License: | See COPYRIGHT |
spml/wa_spectrum_module モジュールは球面上での流体運動を 球面調和函数を用いたスペクトル法によって数値計算するための モジュール wa_module の下部モジュールであり, スペクトル解析計算のための Fortran90 関数を提供する.
球面上の 1 層モデル用 w_spectrum_module モジュールを多層モデル用に 拡張したものであり, 同時に複数個のスペクトルデータ, 格子点データに 対する変換が行える.
内部で ISPACK の SPPACK と SNPACK の Fortran77 サブルーチンを呼んでいる. スペクトルデータおよび格子点データの格納方法や変換の詳しい計算法に ついては ISPACK/SNPACK,SPPACK のマニュアルを参照されたい.
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πをかけたものが 球面上での全エネルギーに等しい.
function na_EnergyFromStreamfunc_wa(wa_Strfunc) ! ! 流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を ! 計算する(多層用). ! ! * 全波数 n の流線関数のスペクトル成分ψ(n,m) から ! エネルギースペクトルはΣ[m=-nm]^nm(1/2)n(n+1)ψ(n,m)^2 ! と計算される. ! ! * 全てのエネルギースペクトル成分の和に 4πをかけたものが ! 球面上での全エネルギーに等しい. ! real(8), intent(in) :: wa_Strfunc(:,:) !(in) 流線関数(スペクトルデータ) real(8), dimension(0:nm,size(wa_Strfunc,2)) :: na_EnergyFromStreamfunc_wa !(out) エネルギースペクトル (水平全波数 n 空間) integer n,m ! DO 変数 do n=0,nm na_EnergyFromStreamfunc_wa(n,:) = 0.5 * n*(n+1) * sum(wa_StrFunc(l_nm(n,(/(m,m=-n,n)/)),:)**2,1) enddo end function na_EnergyFromStreamfunc_wa
Function : | |||
na_EnstrophyFromStreamfunc_wa : | real(8), dimension(0:nm,size(wa_Strfunc,2))
| ||
wa_Strfunc(:,:) : | real(8), intent(in)
|
流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を 計算する(多層用)
function na_EnstrophyFromStreamfunc_wa(wa_Strfunc) ! ! ! 流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を ! 計算する(多層用) ! ! * 全波数 n の流線関数のスペクトル成分ψ(n,m) からエンストロフィー ! スペクトルはΣ[m=-nm]^nm(1/2)n^2(n+1)^2ψ(n,m)^2 と計算される. ! ! * 全てのエネルギースペクトル成分の和に 4π/R^2 をかけたものが ! 球面上での全エンストフィーに等しい. ! real(8), intent(in) :: wa_Strfunc(:,:) !(in) 流線関数(スペクトルデータ) real(8), dimension(0:nm,size(wa_Strfunc,2)) :: na_EnstrophyFromStreamfunc_wa ! エンストロフィースペクトル !(out) エンストロフィースペクトル(水平全波数 n 空間) integer n,m ! DO 変数 do n=0,nm na_EnstrophyFromStreamfunc_wa(n,:) = 0.5 * n**2 * (n+1)**2 * sum(wa_StrFunc(l_nm(n,(/(m,m=-n,n)/)),:)**2,1) enddo end function na_EnstrophyFromStreamfunc_wa
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)
function nma_EnergyFromStreamfunc_wa(wa_Strfunc) ! ! 流線関数のスペクトルデータからエネルギーの球面調和函数成分 ! (スペクトル)を計算する(多層用). ! ! * 全波数 n, 帯状波数 m の流線関数のスペクトル成分ψ(n,m) から ! エネルギースペクトルは (1/2)n(n+1)ψ(n,m)^2 と計算される. ! ! * 全てのエネルギースペクトル成分の和に4πをかけたものが球面上での ! 全エネルギーに等しい. ! ! * データの存在しない全波数 n, 帯状波数 m の配列には欠損値が格納される. ! 欠損値の値はモジュール変数 w_spectrum_VMiss によって設定できる ! (初期値は -999.0) ! real(8), intent(in) :: wa_Strfunc(:,:) !(in) 流線関数(スペクトルデータ) real(8), dimension(0:nm,-nm:nm,size(wa_Strfunc,2)) :: nma_EnergyFromStreamfunc_wa !(out) エネルギースペクトル(水平全波数 n, 帯状波数 m 空間) integer n,m ! DO 変数 nma_EnergyFromStreamfunc_wa = wa_spectrum_VMiss do n=0,nm do m=-n,n nma_EnergyFromStreamfunc_wa(n,m,:) = 0.5 * n*(n+1) * wa_Strfunc(l_nm(n,m),:)**2 enddo enddo end function 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 と計算される.
function nma_EnstrophyFromStreamfunc_wa(wa_Strfunc) ! ! ! 流線関数のスペクトルデータからエンストロフィーの球面調和函数成分 ! (スペクトル)を計算する(多層用). ! ! * 全波数 n, 帯状波数 m の流線関数のスペクトル成分ψ(n,m) から ! エンストロフィースペクトルは (1/2)n^2(n+1)^2ψ(n,m)^2 と計算される. ! ! * 全てのエンストロフィースペクトル成分の和に4π/R^2をかけたものが ! 球面上での全エンストロフィーに等しい. ここで R は球面の半径である. ! ! * データの存在しない全波数 n, 帯状波数 m の配列には欠損値が格納される. ! 欠損値の値はモジュール変数 w_spectrum_VMiss によって設定できる ! (初期値は -999.0) ! real(8), intent(in) :: wa_Strfunc(:,:) !(in) 流線関数(スペクトルデータ) real(8), dimension(0:nm,-nm:nm,size(wa_Strfunc,2)) :: nma_EnstrophyFromStreamfunc_wa ! エンストロフィースペクトル (水平全波数 n, 帯状波数 m 空間) integer n,m ! DO 変数 nma_EnstrophyFromStreamfunc_wa = wa_spectrum_VMiss do n=0,nm do m=-n,n nma_EnstrophyFromStreamfunc_wa(n,m,:) = 0.5 * n**2 * (n+1)**2 * wa_Strfunc(l_nm(n,m),:)**2 enddo enddo end function nma_EnstrophyFromStreamfunc_wa