Class differentiate_center4
In: util/differentiate_center4.f90

4 次精度の微分演算を行うための関数群をまとめたパッケージ型モジュール 水平 Arakawa-C, 鉛直 Lorentz グリッドでの微分計算

Methods

Included Modules

gridset

Public Instance methods

Function :
pr_dx_xr(DimXMin:DimXMax, DimZMin:DimZMax) :real(8)
: 微分値
xr_var(DimXMin:DimXMax, DimZMin:DimZMax) :real(8), intent(in)
: 微分演算の対象となる変数

格子点上での x 方向 4 次精度微分演算

[Source]

  function pr_dx_xr( xr_var )
    !
    !格子点上での x 方向 4 次精度微分演算
    !

    !暗黙の型宣言禁止
    implicit none

    !変数定義    
    real(8), intent(in) :: xr_var(DimXMin:DimXMax, DimZMin:DimZMax)
                                     !微分演算の対象となる変数
    real(8)             :: pr_dx_xr(DimXMin:DimXMax, DimZMin:DimZMax)
                                     !微分値
    
    pr_dx_xr = 1.0d-16
    pr_dx_xr(DimXMin+1:DimXMax-2, DimZMin:DimZMax) = ( xr_var(DimXMin+2:DimXMax-1,DimZMin:DimZMax) - xr_var(DimXMin+1:DimXMax-2,DimZMin:DimZMax) ) * 9.0d0 / ( 8.0d0 * DelX ) - ( xr_var(DimXMin+3:DimXMax,DimZMin:DimZMax) - xr_var(DimXMin:DimXMax-3,DimZMin:DimZMax) ) / ( 24.0d0 * DelX)
    
  end function pr_dx_xr
Function :
pr_dz_pz(DimXMin:DimXMax, DimZMin:DimZMax) :real(8)
: 微分値
pz_var(DimXMin:DimXMax, DimZMin:DimZMax) :real(8), intent(in)
: 微分演算の対象となる変数

格子点上での x 方向 4 次精度微分演算

[Source]

  function pr_dz_pz( pz_var )
    !
    !格子点上での x 方向 4 次精度微分演算
    !

    !暗黙の型宣言禁止
    implicit none
    
    !変数定義
    real(8), intent(in) :: pz_var(DimXMin:DimXMax, DimZMin:DimZMax)
                                     !微分演算の対象となる変数
    real(8)             :: pr_dz_pz(DimXMin:DimXMax, DimZMin:DimZMax)
                                     !微分値    

    pr_dz_pz = 1.0d-16
    pr_dz_pz(DimXMin:DimXMax, DimZMin+1:DimZMax-2) = ( pz_var(DimXMin:DimXMax,DimZMin+2:DimZMax-1) - pz_var(DimXMin:DimXMax,DimZMin+1:DimZMax-2) ) * 9.0d0 / ( 8.0d0 * DelZ ) - ( pz_var(DimXMin:DimXMax,DimZMin+3:DimZMax) - pz_var(DimXMin:DimXMax,DimZMin:DimZMax-3) ) / ( 24.0d0 * DelZ )
    
  end function pr_dz_pz
Function :
pz_dx_xz(DimXMin:DimXMax, DimZMin:DimZMax) :real(8)
: 微分値
xz_var(DimXMin:DimXMax, DimZMin:DimZMax) :real(8), intent(in)
: 微分演算の対象となる変数

z 方向に半格子ずれた点での x 方向 4 次精度微分演算

[Source]

  function pz_dx_xz( xz_var ) 
    !
    ! z 方向に半格子ずれた点での x 方向 4 次精度微分演算
    !
   
    !暗黙の型宣言禁止
    implicit none

    !変数定義
    real(8), intent(in) :: xz_var(DimXMin:DimXMax, DimZMin:DimZMax)
                                     !微分演算の対象となる変数
    real(8)             :: pz_dx_xz(DimXMin:DimXMax, DimZMin:DimZMax)
                                     !微分値

    pz_dx_xz = 1.0d-16
    pz_dx_xz(DimXMin+1:DimXMax-2,DimZMin:DimZMax) = ( xz_var(DimXMin+2:DimXMax-1,DimZMin:DimZMax) - xz_var(DimXMin+1:DimXMax-2,DimZMin:DimZMax) ) * 9.0d0 / ( 8.0d0 * DelX ) - ( xz_var(DimXMin+3:DimXMax,DimZMin:DimZMax) - xz_var(DimXMin:DimXMax-3,DimZMin:DimZMax) ) / ( 24.0d0 * DelX )
  end function pz_dx_xz
Function :
pz_dz_pr(DimXMin:DimXMax, DimZMin:DimZMax) :real(8)
: 微分値
pr_var(DimXMin:DimXMax, DimZMin:DimZMax) :real(8), intent(in)
: 微分演算の対象となる変数

z 方向に半格子ずれた点での z 方向 4 次精度微分演算

[Source]

  function pz_dz_pr( pr_var )
    !
    ! z 方向に半格子ずれた点での z 方向 4 次精度微分演算
    !

    !暗黙の型宣言禁止
    implicit none
    
    real(8), intent(in) :: pr_var(DimXMin:DimXMax, DimZMin:DimZMax)
                                     !微分演算の対象となる変数
    real(8)             :: pz_dz_pr(DimXMin:DimXMax, DimZMin:DimZMax)
                                     !微分値
    
    pz_dz_pr = 1.0d-16
    pz_dz_pr(DimXMin:DimXMax, DimZMin+2:DimZMax-1) = ( pr_var(DimXMin:DimXMax,DimZMin+2:DimZMax-1) - pr_var(DimXMin:DimXMax,DimZMin+1:DimZMax-2) ) * 9.0d0 / ( 8.0d0 * DelZ ) - ( pr_var(DimXMin:DimXMax,DimZMin+3:DimZMax) - pr_var(DimXMin:DimXMax,DimZMin:DimZMax-3) ) / ( 24.0d0 * DelZ )
    
  end function pz_dz_pr
Function :
xr_dx_pr(DimXMin:DimXMax, DimZMin:DimZMax) :real(8)
: 微分値
pr_var(DimXMin:DimXMax, DimZMin:DimZMax) :real(8), intent(in)
: 微分演算の対象となる変数

x 方向に半格子ずれた点での x 方向 4 次精度微分演算

[Source]

  function xr_dx_pr( pr_var ) 
    !
    ! x 方向に半格子ずれた点での x 方向 4 次精度微分演算
    !
    
    !暗黙の型宣言禁止
    implicit none

    !変数定義
    real(8), intent(in) :: pr_var(DimXMin:DimXMax, DimZMin:DimZMax)
                                     !微分演算の対象となる変数
    real(8)             :: xr_dx_pr(DimXMin:DimXMax, DimZMin:DimZMax)
                                     !微分値
    
    xr_dx_pr = 1.0d-16
    xr_dx_pr(DimXMin+2:DimXMax-1, DimZMin:DimZMax) = ( pr_var(DimXMin+2:DimXMax-1,DimZMin:DimZMax) - pr_var(DimXMin+1:DimXMax-2,DimZMin:DimZMax) ) * 9.0d0 / ( 8.0d0 * DelX ) - ( pr_var(DimXMin+3:DimXMax,DimZMin:DimZMax) - pr_var(DimXMin:DimXMax-3,DimZMin:DimZMax) ) / ( 24.0d0 * DelX )
    
  end function xr_dx_pr
Function :
xr_dz_xz(DimXMin:DimXMax, DimZMin:DimZMax) :real(8)
: 微分値
xz_var(DimXMin:DimXMax, DimZMin:DimZMax) :real(8), intent(in)
: 微分演算の対象となる変数

x 方向に半格子ずれた点での z 方向 4 次精度微分演算

[Source]

  function xr_dz_xz( xz_var ) 
    !
    ! x 方向に半格子ずれた点での z 方向 4 次精度微分演算
    !

    !暗黙の型宣言禁止
    implicit none

    !変数定義
    real(8), intent(in) :: xz_var(DimXMin:DimXMax, DimZMin:DimZMax)
                                     !微分演算の対象となる変数    
    real(8)             :: xr_dz_xz(DimXMin:DimXMax, DimZMin:DimZMax)
                                     !微分値
    
    xr_dz_xz = 1.0d-16 
    xr_dz_xz(DimXMin:DimXMax,DimZMin+1:DimZMax-2) = ( xz_var(DimXMin:DimXMax,DimZMin+2:DimZMax-1) - xz_var(DimXMin:DimXMax,DimZMin+1:DimZMax-2) ) * 9.0d0 / ( 8.0d0 * DelZ ) - ( xz_var(DimXMin:DimXMax,DimZMin+3:DimZMax) - xz_var(DimXMin:DimXMax,DimZMin:DimZMax-3) ) / ( 24.0d0 * DelZ )
    
  end function xr_dz_xz
Function :
xz_dx_pz(DimXMin:DimXMax, DimZMin:DimZMax) :real(8)
: 微分値
pz_var(DimXMin:DimXMax, DimZMin:DimZMax) :real(8), intent(in)
: 微分演算の対象となる変数

x, z 方向に半格子ずれた点での x 方向 4 次精度微分演算

[Source]

  function xz_dx_pz( pz_var ) 
    !
    ! x, z 方向に半格子ずれた点での x 方向 4 次精度微分演算
    !

    !暗黙の型宣言禁止
    implicit none

    !変数定義
    real(8), intent(in) :: pz_var(DimXMin:DimXMax, DimZMin:DimZMax)
                                     !微分演算の対象となる変数
    real(8)             :: xz_dx_pz(DimXMin:DimXMax, DimZMin:DimZMax)
                                     !微分値

    xz_dx_pz = 1.0d-16 
    xz_dx_pz(DimXMin+2:DimXMax-1,DimZMin:DimZMax) = ( pz_var(DimXMin+2:DimXMax-1,DimZMin:DimZMax) - pz_var(DimXMin+1:DimXMax-2,DimZMin:DimZMax) ) * 9.0d0 / (8.0d0 * DelX ) - ( pz_var(DimXMin+3:DimXMax,DimZMin:DimZMax) - pz_var(DimXMin:DimXMax-3,DimZMin:DimZMax) ) / ( 24.0d0 * DelX )

  end function xz_dx_pz
Function :
xz_dz_xr(DimXMin:DimXMax, DimZMin:DimZMax) :real(8)
: 微分値
xr_var(DimXMin:DimXMax, DimZMin:DimZMax) :real(8), intent(in)
: 微分演算の対象となる変数

x, z 方向に半格子ずれた点での z 方向 4 次精度微分演算

[Source]

  function xz_dz_xr( xr_var ) 
    !
    ! x, z 方向に半格子ずれた点での z 方向 4 次精度微分演算
    !

    !暗黙の型宣言禁止
    implicit none

    !変数定義
    real(8), intent(in) :: xr_var(DimXMin:DimXMax, DimZMin:DimZMax)
                                     !微分演算の対象となる変数
    real(8)             :: xz_dz_xr(DimXMin:DimXMax, DimZMin:DimZMax)
                                     !微分値
    
    xz_dz_xr = 1.0d-16 
    xz_dz_xr(DimXMin:DimXMax,DimZMin+2:DimZMax-1) = ( xr_var(DimXMin:DimXMax,DimZMin+2:DimZMax-1) - xr_var(DimXMin:DimXMax,DimZMin+1:DimZMax-2) ) * 9.0d0 / ( 8.0d0 * DelZ ) - ( xr_var(DimXMin:DimXMax,DimZMin+3:DimZMax) - xr_var(DimXMin:DimXMax,DimZMin:DimZMax-3) ) / ( 24.0d0 * DelZ )

  end function xz_dz_xr