Class w_deriv_module
In: src/w_deriv_module.f90

Methods

Included Modules

w_base_module

Public Instance methods

w_DLon_w((nm+1)*(nm+1)) :real(8)
w_data((nm+1)*(nm+1)) :real(8), intent(in)

————— 微分計算 ——————

[Source]



    function w_DLon_w(w_data)       ! スペクトルに作用する経度微分 ∂/∂λ
      real(8)              :: w_DLon_w((nm+1)*(nm+1))
      real(8), intent(in)  :: w_data((nm+1)*(nm+1))

      call spclam(nm,w_data,w_DLon_w,irm)
    end function w_DLon_w
w_DivLambda_xy((nm+1)*(nm+1)) :real(8)
: 1/(1-μ^2)・∂/∂λ
xy_data(im,jm) :real(8), intent(in)

————— 微分計算 (λ,μ座標系用) ——————

[Source]



    function w_DivLambda_xy(xy_data) ! 格子に作用する発散型経度微分
                                     ! 1/(1-μ^2)・∂/∂λ
      real(8)              :: w_DivLambda_xy((nm+1)*(nm+1))
      real(8), intent(in)  :: xy_data(im,jm)

      w_DivLambda_xy = w_xy(xy_data,ipow=2,iflag=-1)
    end function w_DivLambda_xy
w_DivLon_xy((nm+1)*(nm+1)) :real(8)
xy_data(im,jm) :real(8), intent(in)

————— 微分計算 ——————

[Source]



    function w_DivLon_xy(xy_data) ! 格子に作用する発散型経度微分 1/cosφ・∂/∂λ
      real(8)              :: w_DivLon_xy((nm+1)*(nm+1))
      real(8), intent(in)  :: xy_data(im,jm)

      w_DivLon_xy = w_xy(xy_data,ipow=1,iflag=-1)
    end function w_DivLon_xy
w_Div_xy_xy((nm+1)*(nm+1)) :real(8)
xy_u(im,jm) :real(8), intent(in)
: ベクトル経度成分
xy_v(im,jm) :real(8), intent(in)
: ベクトル緯度成分

————— 微分計算 ——————

[Source]



    function w_Div_xy_xy(xy_u,xy_v)   ! 格子に作用する発散
      real(8)              :: w_Div_xy_xy((nm+1)*(nm+1))
      real(8), intent(in)  :: xy_u(im,jm)   ! ベクトル経度成分
      real(8), intent(in)  :: xy_v(im,jm)   ! ベクトル緯度成分

      w_Div_xy_xy = w_Divlon_xy(xy_u) + w_Divlat_xy(xy_v)
    end function w_Div_xy_xy
w_Jacobian_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)

————— 微分計算 ——————

[Source]



    function w_Jacobian_w_w(w_a,w_b) ! スペクトルに作用するヤコビアン
                             ! J(f,g) = ∂f/∂λ・∂g/∂μ - ∂g/∂λ・∂f/∂μ
                             !        = ∂f/∂λ・1/cosφ・∂g/∂φ
                             !           - ∂g/∂λ・1/cosφ・∂f/∂φ

      real(8)             :: w_Jacobian_w_w((nm+1)*(nm+1))
      real(8), intent(in) :: w_a((nm+1)*(nm+1))
      real(8), intent(in) :: w_b((nm+1)*(nm+1))

      call spnjcb(nm,im,im,jm,jm,w_a,w_b,w_Jacobian_w_w,           it,t,y,ip2,p2,r2,ip3,p3,r3,ia,a,q,ws,ww)
    end function w_Jacobian_w_w
w_Lapla_w((nm+1)*(nm+1)) :real(8)
w_data((nm+1)*(nm+1)) :real(8), intent(in)

————— 微分計算 ——————

[Source]

    function w_Lapla_w(w_data)      ! スペクトルに作用する Laplacian
      real(8)              :: w_Lapla_w((nm+1)*(nm+1))
      real(8), intent(in)  :: w_data((nm+1)*(nm+1))

      call spclap(nm,w_data,w_Lapla_w,rn(1,1))
    end function w_Lapla_w
n_in :integer,intent(in)
: 切断波数の設定
i_in :integer,intent(in)
: 格子点の設定(東西, 南北)
j_in :integer,intent(in)
: 格子点の設定(東西, 南北)

————— 初期化 ——————

[Source]

    subroutine w_deriv_initial(n_in,i_in,j_in)

      integer,intent(in) :: i_in, j_in        ! 格子点の設定(東西, 南北)
      integer,intent(in) :: n_in              ! 切断波数の設定

      integer iw

      call w_base_initial(n_in,i_in,j_in)

      allocate(rn((nm+1)*(nm+1),2))           ! ラプラシアン演算用配列
      allocate(irm((nm+1)*(nm+1),2))          ! 経度微分演算用配列
      call spnini(nm,rn)
      call spmini(nm,irm)

      allocate(ip2(2*((nm+1)/2+nm+1)*2))      ! ヤコビアン計算用配列
      allocate(p2(2*((nm+1)/2+nm+1)*jm))      ! ヤコビアン計算用配列
      allocate(r2(2*((nm+1)/2*2+3)*(nm/2+1))) ! ヤコビアン計算用配列
      allocate(ip3(3*((nm+1)/2+nm+1)*2))      ! ヤコビアン計算用配列
      allocate(p3(3*((nm+1)/2+nm+1)*jm))      ! ヤコビアン計算用配列
      allocate(r3(3*((nm+1)/2*2+3)*(nm/2+1))) ! ヤコビアン計算用配列
      call snkini(nm,jm,2,ip,p,r,ip2,p2,r2)
      call snkini(nm,jm,3,ip,p,r,ip3,p3,r3)

      allocate(q(3*((nm+1)/2+nm+1)*jm))       ! 作業用配列
      iw=3*max( ((nm+1)/2*2+3)*(nm/2+2)*2,                 jm*((nm+1)/2+nm+1)*2, jm*jm )
      allocate(ws(iw),ww(iw))                 ! 作業用配列
    end subroutine w_deriv_initial
xy_GradLambda_w(im,jm) :real(8)
: ∂/∂λ
w_data((nm+1)*(nm+1)) :real(8), intent(in)

————— 微分計算 (λ,μ座標系用) ——————

[Source]

    function xy_GradLambda_w(w_data) ! スペクトルに作用する勾配型経度微分
                                     ! ∂/∂λ
      real(8)              :: xy_GradLambda_w(im,jm)
      real(8), intent(in)  :: w_data((nm+1)*(nm+1))

      xy_GradLambda_w = xy_w(w_data,ipow=0,iflag=-1)
    end function xy_GradLambda_w
xy_GradLon_w(im,jm) :real(8)
: 1/cosφ・∂/∂λ
w_data((nm+1)*(nm+1)) :real(8), intent(in)

————— 微分計算 ——————

[Source]



    function xy_GradLon_w(w_data) ! スペクトルに作用する勾配型経度微分
                                  ! 1/cosφ・∂/∂λ
      real(8)              :: xy_GradLon_w(im,jm)
      real(8), intent(in)  :: w_data((nm+1)*(nm+1))

      xy_GradLon_w = xy_w(w_data,ipow=1,iflag=-1)
    end function xy_GradLon_w

[Validate]