Class wa_deriv_mpi_module
In: libsrc/wa_mpi_module/wa_deriv_mpi_module.f90

wa_deriv_mpi_module

 spml/wa_deriv_mpi_module モジュールは球面上での流体運動を
 球面調和函数を用いたスペクトル法と MPI 並列化によって
 数値計算するためのモジュール wa_mpi_module の下部モジュールであり,
 スペクトル法の微分計算のための Fortran90 関数を提供する.

 球面上の 1 層モデル用 w_deriv_mpi_module モジュールを多層モデル用に
 拡張したものであり, 同時に複数個のスペクトルデータ, 格子点データに
 対する変換が行える.

 内部で ISPACK の SPPACK と SNPACK の Fortran77 サブルーチンを呼んでいる.
 スペクトルデータおよび格子点データの格納方法や変換の詳しい計算法に
 ついては ISPACK/SNPACK,SPPACK のマニュアルを参照されたい.

Methods

im   im   im   im   im   im   jm   jm   jm   jm   jm   jm   nm   nm   nm   nm   nm   nm   wa_DivLambda_xva   wa_DivLat_xva   wa_DivLon_xva   wa_DivMu_xva   wa_Div_xva_xva   wa_JacobianMPI_wa_wa   xva_GradLambda_wa   xva_GradLat_wa   xva_GradLon_wa   xva_GradMu_wa  

Included Modules

dc_message w_base_module w_base_mpi_module wa_base_mpi_module w_deriv_mpi_module

Public Instance methods

im
Variable :
im =64 :integer
: 格子点の設定(東西)

Original external subprogram is w_deriv_mpi_module#im

im
Variable :
im =64 :integer
: 格子点の設定(東西)

Original external subprogram is wa_base_mpi_module#im

im
Variable :
im =64 :integer
: 格子点の設定(東西)

Original external subprogram is w_base_mpi_module#im

im
Variable :
im =64 :integer
: 格子点の設定(東西)

Original external subprogram is w_deriv_mpi_module#im

im
Variable :
im =64 :integer
: 格子点の設定(東西)

Original external subprogram is wa_base_mpi_module#im

im
Variable :
im =64 :integer
: 格子点の設定(東西)

Original external subprogram is w_base_module#im

jm
Variable :
jm =32 :integer
: 格子点の設定(南北)

Original external subprogram is w_deriv_mpi_module#jm

jm
Variable :
jm =32 :integer
: 格子点の設定(南北)

Original external subprogram is wa_base_mpi_module#jm

jm
Variable :
jm =32 :integer
: 格子点の設定(南北)

Original external subprogram is w_base_mpi_module#jm

jm
Variable :
jm =32 :integer
: 格子点の設定(南北)

Original external subprogram is w_deriv_mpi_module#jm

jm
Variable :
jm =32 :integer
: 格子点の設定(南北)

Original external subprogram is wa_base_mpi_module#jm

jm
Variable :
jm =32 :integer
: 格子点の設定(南北)

Original external subprogram is w_base_module#jm

nm
Variable :
nm =21 :integer
: 切断波数の設定

Original external subprogram is w_deriv_mpi_module#nm

nm
Variable :
nm =21 :integer
: 切断波数の設定

Original external subprogram is wa_base_mpi_module#nm

nm
Variable :
nm =21 :integer
: 切断波数の設定

Original external subprogram is w_base_mpi_module#nm

nm
Variable :
nm =21 :integer
: 切断波数の設定

Original external subprogram is w_deriv_mpi_module#nm

nm
Variable :
nm =21 :integer
: 切断波数の設定

Original external subprogram is wa_base_mpi_module#nm

nm
Variable :
nm =21 :integer
: 切断波数の設定

Original external subprogram is w_base_module#nm

Function :
wa_DivLambda_xva((nm+1)*(nm+1),size(xva_data,3)) :real(8)
: (out) 格子点データを発散型経度微分したスペクトルデータ
xva_data(:,:,:) :real(8), intent(in)
: (in) 入力格子点データ

格子点データに発散型経度微分 1/(1-μ^2)・∂/∂λ (μ=sinφ) を作用させてスペクトルデータに変換して返す(多層用).

[Source]

    function wa_DivLambda_xva(xva_data)
      !
      ! 格子点データに発散型経度微分 1/(1-μ^2)・∂/∂λ (μ=sinφ) 
      ! を作用させてスペクトルデータに変換して返す(多層用).
      !
      real(8), intent(in)  :: xva_data(:,:,:)
      !(in) 入力格子点データ

      real(8)              :: wa_DivLambda_xva((nm+1)*(nm+1),size(xva_data,3))
      !(out) 格子点データを発散型経度微分したスペクトルデータ

      wa_DivLambda_xva = wa_xva(xva_data,ipow=2,iflag=-1)
    end function wa_DivLambda_xva
Function :
wa_DivLat_xva((nm+1)*(nm+1),size(xva_data,3)) :real(8)
: (out) 格子点データを発散型緯度微分したスペクトルデータ
xva_data(:,:,:) :real(8), intent(in)
: (in) 入力格子点データ

格子点データに発散型緯度微分 1/cosφ・∂(f cosφ)/∂φ を作用させて スペクトルデータに変換して返す(多層用).

[Source]

    function wa_DivLat_xva(xva_data)
      !
      ! 格子点データに発散型緯度微分 1/cosφ・∂(f cosφ)/∂φ を作用させて
      ! スペクトルデータに変換して返す(多層用).
      !

      real(8), intent(in)  :: xva_data(:,:,:)
      !(in) 入力格子点データ

      real(8)              :: wa_DivLat_xva((nm+1)*(nm+1),size(xva_data,3))
      !(out) 格子点データを発散型緯度微分したスペクトルデータ

      wa_DivLat_xva = wa_xva(xva_data,ipow=1,iflag=1)
    end function wa_DivLat_xva
Function :
wa_DivLon_xva((nm+1)*(nm+1),size(xva_data,3)) :real(8)
: (out) 格子点データを発散型経度微分したスペクトルデータ
xva_data(:,:,:) :real(8), intent(in)
: (in) 入力格子点データ

格子点データに発散型経度微分 1/cosφ・∂/∂λ を作用させて スペクトルデータに変換して返す(多層用).

[Source]

    function wa_DivLon_xva(xva_data)
      !
      ! 格子点データに発散型経度微分 1/cosφ・∂/∂λ を作用させて
      ! スペクトルデータに変換して返す(多層用).
      !
      real(8), intent(in)  :: xva_data(:,:,:)
      !(in) 入力格子点データ

      real(8)              :: wa_DivLon_xva((nm+1)*(nm+1),size(xva_data,3))
      !(out) 格子点データを発散型経度微分したスペクトルデータ

      wa_DivLon_xva = wa_xva(xva_data,ipow=1,iflag=-1)
    end function wa_DivLon_xva
Function :
wa_DivMu_xva((nm+1)*(nm+1),size(xva_data,3)) :real(8)
: (out) 格子点データを発散型緯度微分したスペクトルデータ
xva_data(:,:,:) :real(8), intent(in)
: (in) 入力格子点データ

格子点データに発散型緯度微分 ∂/∂μ (μ=sinφ)を作用させて スペクトルデータに変換して返す(多層用).

[Source]

    function wa_DivMu_xva(xva_data)
      !
      ! 格子点データに発散型緯度微分 ∂/∂μ (μ=sinφ)を作用させて
      ! スペクトルデータに変換して返す(多層用).
      !

      real(8), intent(in)  :: xva_data(:,:,:)
      !(in) 入力格子点データ

      real(8)              :: wa_DivMu_xva((nm+1)*(nm+1),size(xva_data,3))
      !(out) 格子点データを発散型緯度微分したスペクトルデータ

      wa_DivMu_xva = wa_xva(xva_data,ipow=2,iflag=1)
    end function wa_DivMu_xva
Function :
wa_Div_xva_xva((nm+1)*(nm+1),size(xva_u,3)) :real(8)
: (out) 2 つの入力格子点データをベクトル成分とする発散のスペクトルデータ
xva_u(:,:,:) :real(8), intent(in)
: (in) ベクトル経度成分の格子点データ
xva_v(:,:,:) :real(8), intent(in)
: (in) ベクトル緯度成分の格子点データ

2 つの入力格子点データをベクトル成分とする発散を計算し, スペクトルデータとして返す(多層用).

[Source]

    function wa_Div_xva_xva(xva_u,xva_v)
      !
      ! 2 つの入力格子点データをベクトル成分とする発散を計算し, 
      ! スペクトルデータとして返す(多層用).
      !
      real(8), intent(in)  :: xva_u(:,:,:)
      !(in) ベクトル経度成分の格子点データ

      real(8), intent(in)  :: xva_v(:,:,:)
      !(in) ベクトル緯度成分の格子点データ

      real(8)              :: wa_Div_xva_xva((nm+1)*(nm+1),size(xva_u,3))
      !(out) 2 つの入力格子点データをベクトル成分とする発散のスペクトルデータ

      wa_Div_xva_xva = wa_DivLon_xva(xva_u) + wa_DivLat_xva(xva_v)
    end function wa_Div_xva_xva
Function :
wa_JacobianMPI_wa_wa((nm+1)*(nm+1),size(wa_a,2)) :real(8)
: (out) 2 つのスペクトルデータのヤコビアン
wa_a(:,:) :real(8), intent(in)
: (in) 1つ目の入力スペクトルデータ
wa_b(:,:) :real(8), intent(in)
: (in) 2つ目の入力スペクトルデータ

2 つのスペクトルデータにヤコビアン

  J(f,g) = ∂f/∂λ・∂g/∂μ - ∂g/∂λ・∂f/∂μ
         = ∂f/∂λ・1/cosφ・∂g/∂φ
            - ∂g/∂λ・1/cosφ・∂f/∂φ

を作用させる(多層用).

[Source]

    function wa_JacobianMPI_wa_wa(wa_a,wa_b)
      ! 2 つのスペクトルデータにヤコビアン
      !
      !   J(f,g) = ∂f/∂λ・∂g/∂μ - ∂g/∂λ・∂f/∂μ
      !          = ∂f/∂λ・1/cosφ・∂g/∂φ
      !             - ∂g/∂λ・1/cosφ・∂f/∂φ
      !
      ! を作用させる(多層用).
      !
      real(8), intent(in) :: wa_a(:,:)
      !(in) 1つ目の入力スペクトルデータ

      real(8), intent(in) :: wa_b(:,:)
      !(in) 2つ目の入力スペクトルデータ

      real(8)             :: wa_JacobianMPI_wa_wa((nm+1)*(nm+1),size(wa_a,2))
      !(out) 2 つのスペクトルデータのヤコビアン

      integer :: k

      do k=1,size(wa_a,2)
         wa_JacobianMPI_wa_wa(:,k) = w_JacobianMPI_w_w(wa_a(:,k),wa_b(:,k))
      end do
    end function wa_JacobianMPI_wa_wa
Function :
xva_GradLambda_wa(im,jc,size(wa_data,2)) :real(8)
: (in) 入力スペクトルデータ
wa_data(:,:) :real(8), intent(in)
: (out) スペクトルデータを勾配型経度微分した格子点データ

スペクトルデータに勾配型経度微分 ∂/∂λ を作用する(多層用).

[Source]

    function xva_GradLambda_wa(wa_data)
      !
      ! スペクトルデータに勾配型経度微分 ∂/∂λ を作用する(多層用).
      !
      real(8), intent(in)  :: wa_data(:,:)
      !(out) スペクトルデータを勾配型経度微分した格子点データ

      real(8)              :: xva_GradLambda_wa(im,jc,size(wa_data,2))
      !(in) 入力スペクトルデータ

      xva_GradLambda_wa = xva_wa(wa_data,ipow=0,iflag=-1)
    end function xva_GradLambda_wa
Function :
xva_GradLat_wa(im,jc,size(wa_data,2)) :real(8)
: (out) スペクトルデータを勾配型緯度微分した格子点データ
wa_data(:,:) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに勾配型緯度微分 ∂/∂φ を作用させて 格子点データに変換して返す(多層用).

[Source]

    function xva_GradLat_wa(wa_data)
      !
      ! スペクトルデータに勾配型緯度微分 ∂/∂φ を作用させて
      ! 格子点データに変換して返す(多層用).
      !
      real(8), intent(in)  :: wa_data(:,:)
      !(in) 入力スペクトルデータ

      real(8)              :: xva_GradLat_wa(im,jc,size(wa_data,2))
      !(out) スペクトルデータを勾配型緯度微分した格子点データ

      xva_GradLat_wa = xva_wa(wa_data,ipow=1,iflag=1)
    end function xva_GradLat_wa
Function :
xva_GradLon_wa(im,jc,size(wa_data,2)) :real(8)
: (out) スペクトルデータを勾配型経度微分した格子点データ
wa_data(:,:) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに勾配型経度微分 1/cosφ・∂/∂λ を 作用させた格子点データを返す(多層用).

[Source]

    function xva_GradLon_wa(wa_data)
      !
      ! スペクトルデータに勾配型経度微分 1/cosφ・∂/∂λ を
      ! 作用させた格子点データを返す(多層用).
      !
      real(8), intent(in)  :: wa_data(:,:)
      !(in) 入力スペクトルデータ

      real(8)              :: xva_GradLon_wa(im,jc,size(wa_data,2))
      !(out) スペクトルデータを勾配型経度微分した格子点データ

      xva_GradLon_wa = xva_wa(wa_data,ipow=1,iflag=-1)
    end function xva_GradLon_wa
Function :
xva_GradMu_wa(im,jc,size(wa_data,2)) :real(8)
: (out) スペクトルデータを勾配型緯度微分した格子点データ
wa_data(:,:) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに勾配型緯度微分 (1-μ^2)∂/∂μ (μ=sinφ) を作用させて格子点データに変換して返す(多層用).

[Source]

    function xva_GradMu_wa(wa_data)
      !
      ! スペクトルデータに勾配型緯度微分 (1-μ^2)∂/∂μ  (μ=sinφ)
      ! を作用させて格子点データに変換して返す(多層用).
      !
      real(8), intent(in)  :: wa_data(:,:)
      !(in) 入力スペクトルデータ

      real(8)              :: xva_GradMu_wa(im,jc,size(wa_data,2))
      !(out) スペクトルデータを勾配型緯度微分した格子点データ

      xva_GradMu_wa = xva_wa(wa_data,ipow=0,iflag=1)
    end function xva_GradMu_wa