Class wa_spectrum_module
In: libsrc/wa_module/wa_spectrum_module.f90

wa_spectrum_module

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 のマニュアルを参照されたい.

Methods

Included Modules

w_base_module

Public Instance methods

Function :
na_EnergyFromStreamfunc_wa :real(8), dimension(0:nm,size(wa_Strfunc,2))
: (out) エネルギースペクトル (水平全波数 n 空間)
wa_Strfunc(:,:) :real(8), intent(in)
: (in) 流線関数(スペクトルデータ)

流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を 計算する(多層用).

 * 全波数 n の流線関数のスペクトル成分ψ(n,m) から
   エネルギースペクトルはΣ[m=-nm]^nm(1/2)n(n+1)ψ(n,m)^2
   と計算される.

 * 全てのエネルギースペクトル成分の和に 4πをかけたものが
   球面上での全エネルギーに等しい.

[Source]

    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))
: エンストロフィースペクトル (out) エンストロフィースペクトル(水平全波数 n 空間)
wa_Strfunc(:,:) :real(8), intent(in)
: (in) 流線関数(スペクトルデータ)

流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を 計算する(多層用)

  • 全波数 n の流線関数のスペクトル成分ψ(n,m) からエンストロフィー スペクトルはΣ[m=-nm]^nm(1/2)n^2(n+1)^2ψ(n,m)^2 と計算される.
  • 全てのエネルギースペクトル成分の和に 4π/R^2 をかけたものが 球面上での全エンストフィーに等しい.

[Source]

    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))
: (out) エネルギースペクトル(水平全波数 n, 帯状波数 m 空間)
wa_Strfunc(:,:) :real(8), intent(in)
: (in) 流線関数(スペクトルデータ)

流線関数のスペクトルデータからエネルギーの球面調和函数成分 (スペクトル)を計算する(多層用).

 * 全波数 n, 帯状波数 m の流線関数のスペクトル成分ψ(n,m) から
   エネルギースペクトルは (1/2)n(n+1)ψ(n,m)^2 と計算される.

 * 全てのエネルギースペクトル成分の和に4πをかけたものが球面上での
   全エネルギーに等しい.

 * データの存在しない全波数 n, 帯状波数 m の配列には欠損値が格納される.
   欠損値の値はモジュール変数 w_spectrum_VMiss によって設定できる
   (初期値は -999.0)

[Source]

    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))
: エンストロフィースペクトル (水平全波数 n, 帯状波数 m 空間)
wa_Strfunc(:,:) :real(8), intent(in)
: (in) 流線関数(スペクトルデータ)

流線関数のスペクトルデータからエンストロフィーの球面調和函数成分 (スペクトル)を計算する(多層用).

  • 全波数 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)

[Source]

    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
wa_spectrum_VMiss
Variable :
wa_spectrum_VMiss = -999.000 :real(8)
: 欠損値初期値