Class wghi_module
In: src/wghi_module.f90

Methods

Included Modules

wa_module

Public Instance methods

avrlonlatver_xyg :real(8)
: 全球積分
xyg_data :real(8), dimension(im,jm,0:km), intent(in)
: 3 次元格子点

————— 平均計算 ——————

[Source]



    function avrlonlatver_xyg(xyg_data) ! 緯度経度動径(全球)積分
      real(8), dimension(im,jm,0:km), intent(in) :: xyg_data  ! 3 次元格子点
      real(8)                        :: avrlonlatver_xyg      ! 全球積分

      avrlonlatver_xyg = avrlonlat_xy(xy_avrver_xyg(xyg_data))
    end function avrlonlatver_xyg
g_avrlonlat_xyg :real(8), dimension(0:km)
: 動径格子点
xyg_data :real(8), dimension(im,jm,0:km), intent(in)
: 3 次元格子点

————— 平均計算 ——————

[Source]



    function g_avrlonlat_xyg(xyg_data)  ! 緯度経度(水平)積分
      real(8), dimension(im,jm,0:km), intent(in) :: xyg_data  ! 3 次元格子点
      real(8), dimension(0:km)     :: g_avrlonlat_xyg         ! 動径格子点

      g_avrlonlat_xyg = a_avrlonlat_xya(xyg_data)
    end function g_avrlonlat_xyg
g_intlonlat_xyg :real(8), dimension(0:km)
: 動径格子点
xyg_data :real(8), dimension(im,jm,0:km), intent(in)
: 3 次元格子点

————— 積分計算 ——————

[Source]



    function g_intlonlat_xyg(xyg_data)  ! 緯度経度(水平)積分
      real(8), dimension(im,jm,0:km), intent(in) :: xyg_data  ! 3 次元格子点
      real(8), dimension(0:km)     :: g_intlonlat_xyg         ! 動径格子点

      g_intlonlat_xyg = a_intlonlat_xya(xyg_data)
    end function g_intlonlat_xyg
intlonlatver_xyg :real(8)
: 全球積分
xyg_data :real(8), dimension(im,jm,0:km), intent(in)
: 3 次元格子点

————— 積分計算 ——————

[Source]



    function intlonlatver_xyg(xyg_data) ! 緯度経度動径(全球)積分
      real(8), dimension(im,jm,0:km), intent(in) :: xyg_data  ! 3 次元格子点
      real(8)                        :: intlonlatver_xyg      ! 全球積分

      intlonlatver_xyg = intlonlat_xy(xy_intver_xyg(xyg_data))
    end function intlonlatver_xyg
wg_divlon_xyg :real(8), dimension((nm+1)*(nm+1),0:km)
xyg_data :real(8), dimension(im,jm,0:km), intent(in)

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

[Source]



    function wg_divlon_xyg(xyg_data)   ! 格子に作用する発散型経度微分 
                                       ! 1/rcosφ・∂/∂λ

      real(8), dimension(im,jm,0:km), intent(in)   :: xyg_data
      real(8), dimension((nm+1)*(nm+1),0:km)       :: wg_divlon_xyg

      wg_divlon_xyg = wa_divlon_xya(xyg_data)/ra
    end function wg_divlon_xyg
wg_laplah_wg :real(8), dimension((nm+1)*(nm+1),0:km)
wg_data :real(8), dimension((nm+1)*(nm+1),0:km), intent(in)
: ▽^2_H

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

[Source]



    function wg_laplah_wg(wg_data) ! スペクトルに作用する水平ラプラシアン
                                   ! ▽^2_H
      real(8), dimension((nm+1)*(nm+1),0:km), intent(in) :: wg_data
      real(8), dimension((nm+1)*(nm+1),0:km)             :: wg_laplah_wg

      wg_laplah_wg = wa_lapla_wa(wg_data)

    end function wg_laplah_wg
wg_xyg :real(8), dimension((nm+1)*(nm+1),0:km)
xyg_data :real(8), dimension(im,jm,0:km), intent(in)

————— 基本変換 ——————

[Source]



    function wg_xyg(xyg_data)  ! 格子 -> スペクトル
      real(8), dimension((nm+1)*(nm+1),0:km)             :: wg_xyg
      real(8), dimension(im,jm,0:km), intent(in)         :: xyg_data

      wg_xyg = wa_xya(xyg_data)

    end function wg_xyg
i :integer,intent(in)
: 格子点の設定(経度, 緯度, 鉛直)
j :integer,intent(in)
: 格子点の設定(経度, 緯度, 鉛直)
k :integer,intent(in)
: 格子点の設定(経度, 緯度, 鉛直)
n :integer,intent(in)
: 切断波数の設定(水平)
r :real(8),intent(in)
: 球半径
g_in :real(8),intent(in),dimension(0:k)
: 鉛直座標
h_in :real(8),intent(in),dimension(k)
: 鉛直座標

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

[Source]

    subroutine wghi_initial(i,j,k,n,r,g_in,h_in)

     integer,intent(in) :: i, j, k        ! 格子点の設定(経度, 緯度, 鉛直)
     integer,intent(in) :: n              ! 切断波数の設定(水平)
     real(8),intent(in) :: r              ! 球半径
     real(8),intent(in),dimension(0:k) :: g_in       ! 鉛直座標
     real(8),intent(in),dimension(k)   :: h_in       ! 鉛直座標

     im = i  
 jm = j 
 km = k
     nm = n  
 ra = r

     call wa_initial(nm,im,jm,km+1)

     allocate(g_ver(0:km))
     allocate(g_ver_weight(0:km))
     allocate(h_ver(km))
     allocate(h_ver_weight(km))
     allocate(i_ver(km-1))
     allocate(i_ver_weight(km-1))

     g_ver = g_in 
 h_ver = h_in

     h_ver_weight = g_ver(1:km) - g_ver(0:km-1)
     g_ver_weight(1:km-1) = h_ver(2:km) - h_ver(1:km-1)
     g_ver_weight(0) = h_ver(1) - g_ver(0)
     g_ver_weight(km) = g_ver(km) - h_ver(km)

     i_ver = i_g(g_ver) 
 i_ver_weight = i_g(g_ver_weight)

     allocate(xyg_lon(im,jm,0:km))
     allocate(xyg_lat(im,jm,0:km))
     allocate(xyg_ver(im,jm,0:km))
     allocate(xyh_lon(im,jm,km))
     allocate(xyh_lat(im,jm,km))
     allocate(xyh_ver(im,jm,km))
     allocate(xyi_lon(im,jm,km-1))
     allocate(xyi_lat(im,jm,km-1))
     allocate(xyi_ver(im,jm,km-1))

     xyg_lon = spread(xy_lon,3,km+1)
     xyg_lat = spread(xy_lat,3,km+1)
     xyg_ver = spread(spread(g_ver,1,jm),1,im)
     xyh_lon = spread(xy_lon,3,km)
     xyh_lat = spread(xy_lat,3,km)
     xyh_ver = spread(spread(h_ver,1,jm),1,im)
     xyi_lon = spread(xy_lon,3,km-1)
     xyi_lat = spread(xy_lat,3,km-1)
     xyi_ver = spread(spread(i_ver,1,jm),1,im)

   end subroutine wghi_initial
wh_divlon_xyh :real(8), dimension((nm+1)*(nm+1),km)
xyh_data :real(8), dimension(im,jm,km), intent(in)

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

[Source]



    function wh_divlon_xyh(xyh_data)   ! 格子に作用する発散型経度微分 
                                       ! 1/rcosφ・∂/∂λ

      real(8), dimension(im,jm,km), intent(in)   :: xyh_data
      real(8), dimension((nm+1)*(nm+1),km)       :: wh_divlon_xyh

      wh_divlon_xyh = wa_divlon_xya(xyh_data)/ra
    end function wh_divlon_xyh
wi_divlon_xyi :real(8), dimension((nm+1)*(nm+1),km-1)
xyi_data :real(8), dimension(im,jm,km-1), intent(in)

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

[Source]



    function wi_divlon_xyi(xyi_data)   ! 格子に作用する発散型経度微分 
                                       ! 1/rcosφ・∂/∂λ

      real(8), dimension(im,jm,km-1), intent(in)   :: xyi_data
      real(8), dimension((nm+1)*(nm+1),km-1)       :: wi_divlon_xyi

      wi_divlon_xyi = wa_divlon_xya(xyi_data)/ra
    end function wi_divlon_xyi
wi_dver_wh :real(8), dimension((nm+1)*(nm+1),0:km)
wh_data :real(8), dimension((nm+1)*(nm+1),km-1), intent(in)

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

[Source]

    function wi_dver_wh(wh_data)            ! 鉛直微分
      real(8), dimension((nm+1)*(nm+1),km-1), intent(in) :: wh_data
      real(8), dimension((nm+1)*(nm+1),0:km)             :: wi_dver_wh

      wi_dver_wh = (wh_data(:,2:km) - wh_data(:,1:km-1))                               /spread(i_ver_weight,1,(nm+1)*(nm+1))

    end function wi_dver_wh
x_avrlatver_xyg :real(8), dimension(im)
: 経度格子点
xyg_data :real(8), dimension(im,jm,0:km), intent(in)
: 3 次元格子点

————— 平均計算 ——————

[Source]



    function x_avrlatver_xyg(xyg_data)  ! 緯度動径(子午面)積分
      real(8), dimension(im,jm,0:km), intent(in) :: xyg_data  ! 3 次元格子点
      real(8), dimension(im)     :: x_avrlatver_xyg      ! 経度格子点

      x_avrlatver_xyg = x_avrlat_xy(xy_avrver_xyg(xyg_data))
    end function x_avrlatver_xyg
x_intlatver_xyg :real(8), dimension(im)
: 経度格子点
xyg_data :real(8), dimension(im,jm,0:km), intent(in)
: 3 次元格子点

————— 積分計算 ——————

[Source]



    function x_intlatver_xyg(xyg_data)  ! 緯度動径(子午面)積分
      real(8), dimension(im,jm,0:km), intent(in) :: xyg_data  ! 3 次元格子点
      real(8), dimension(im)     :: x_intlatver_xyg      ! 経度格子点

      x_intlatver_xyg = x_intlat_xy(xy_intver_xyg(xyg_data))
    end function x_intlatver_xyg
xg_avrlat_xyg :real(8), dimension(im,0:km)
: 緯度円格子点
xyg_data :real(8), dimension(im,jm,0:km), intent(in)
: 3 次元格子点

————— 平均計算 ——————

[Source]



    function xg_avrlat_xyg(xyg_data)  ! 緯度積分
      real(8), dimension(im,jm,0:km), intent(in) :: xyg_data ! 3 次元格子点
      real(8), dimension(im,0:km)  :: xg_avrlat_xyg          ! 緯度円格子点

      xg_avrlat_xyg = xa_avrlat_xya(xyg_data)
    end function xg_avrlat_xyg
xg_intlat_xyg :real(8), dimension(im,0:km)
: 緯度円格子点
xyg_data :real(8), dimension(im,jm,0:km), intent(in)
: 3 次元格子点

————— 積分計算 ——————

[Source]



    function xg_intlat_xyg(xyg_data)  ! 緯度積分
      real(8), dimension(im,jm,0:km), intent(in) :: xyg_data ! 3 次元格子点
      real(8), dimension(im,0:km)  :: xg_intlat_xyg          ! 緯度円格子点

      xg_intlat_xyg = xa_intlat_xya(xyg_data)
    end function xg_intlat_xyg
xy_avrver_xyg :real(8), dimension(im,jm)
: 水平格子点
xyg_data :real(8), dimension(im,jm,0:km), intent(in)
: 3 次元格子点

————— 平均計算 ——————

[Source]



    function xy_avrver_xyg(xyg_data)  ! 動径積分
      real(8), dimension(im,jm,0:km), intent(in) :: xyg_data ! 3 次元格子点
      real(8), dimension(im,jm)  :: xy_avrver_xyg            ! 水平格子点

      xy_avrver_xyg = xy_intver_xyg(xyg_data)/sum(g_ver_weight)
    end function xy_avrver_xyg
xy_intver_xyg :real(8), dimension(im,jm)
: 水平格子点
xyg_data :real(8), dimension(im,jm,0:km), intent(in)
: 3 次元格子点

————— 積分計算 ——————

[Source]



    function xy_intver_xyg(xyg_data)  ! 動径積分
      real(8), dimension(im,jm,0:km), intent(in) :: xyg_data ! 3 次元格子点
      real(8), dimension(im,jm)  :: xy_intver_xyg            ! 水平格子点
      integer :: k

      xy_intver_xyg = 0
      do k=0,km
         xy_intver_xyg(:,:) = xy_intver_xyg(:,:)                        + xyg_data(:,:,k) * g_ver_weight(k)
      enddo
    end function xy_intver_xyg
xyg_gradlon_wg :real(8), dimension(im,jm,0:km)
wg_data :real(8), dimension((nm+1)*(nm+1),0:km), intent(in)
: 1/rcosφ・∂/∂λ

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

[Source]



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

      xyg_gradlon_wg = xya_gradlon_wa(wg_data)/ra

    end function xyg_gradlon_wg
xyg_wg :real(8), dimension(im,jm,0:km)
wg_data :real(8), dimension((nm+1)*(nm+1),0:km), intent(in)

————— 基本変換 ——————

[Source]


    function xyg_wg(wg_data)  ! スペクトル -> 格子
      real(8), dimension(im,jm,0:km)                     :: xyg_wg
      real(8), dimension((nm+1)*(nm+1),0:km), intent(in) :: wg_data

      xyg_wg = xya_wa(wg_data)

    end function xyg_wg
xyg_yg :real(8), dimension(im,jm,0:km)
yg_data :real(8), dimension(jm,0:km), intent(in)

————— 基本変換 ——————

[Source]



    function xyg_yg(yg_data)    ! 子午面データ拡張
      real(8), dimension(im,jm,0:km)              :: xyg_yg
      real(8), dimension(jm,0:km), intent(in)     :: yg_data

      xyg_yg = spread(yg_data,1,im)
    end function xyg_yg
xyh_gradlon_wh :real(8), dimension(im,jm,km)
wh_data :real(8), dimension((nm+1)*(nm+1),km), intent(in)
: 1/rcosφ・∂/∂λ

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

[Source]



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

      xyh_gradlon_wh = xya_gradlon_wa(wh_data)/ra

    end function xyh_gradlon_wh
xyi_gradlon_wi :real(8), dimension(im,jm,km-1)
wi_data :real(8), dimension((nm+1)*(nm+1),km-1), intent(in)
: 1/rcosφ・∂/∂λ

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

[Source]



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

      xyi_gradlon_wi = xya_gradlon_wa(wi_data)/ra

    end function xyi_gradlon_wi
xyi_xyg :real(8), dimension(im,jm,km-1)
xyg_data :real(8), dimension(im,jm,0:km), intent(in)

————— 基本変換 ——————

[Source]



    function xyi_xyg(xyg_data) ! 鉛直変換
      real(8), dimension(im,jm,km-1)                     :: xyi_xyg
      real(8), dimension(im,jm,0:km), intent(in)         :: xyg_data

      xyi_xyg = xyg_data(:,:,1:km-1)
    end function xyi_xyg
y_avrlonver_xyg :real(8), dimension(jm)
: 緯度格子点
xyg_data :real(8), dimension(im,jm,0:km), intent(in)
: 3 次元格子点

————— 平均計算 ——————

[Source]



    function y_avrlonver_xyg(xyg_data)  ! 経度動径(緯度円)積分
      real(8), dimension(im,jm,0:km), intent(in) :: xyg_data  ! 3 次元格子点
      real(8), dimension(jm)       :: y_avrlonver_xyg         ! 緯度格子点

      y_avrlonver_xyg = y_avrlon_xy(xy_avrver_xyg(xyg_data))
    end function y_avrlonver_xyg
y_intlonver_xyg :real(8), dimension(jm)
: 緯度格子点
xyg_data :real(8), dimension(im,jm,0:km), intent(in)
: 3 次元格子点

————— 積分計算 ——————

[Source]



    function y_intlonver_xyg(xyg_data)  ! 経度動径(緯度円)積分
      real(8), dimension(im,jm,0:km), intent(in) :: xyg_data  ! 3 次元格子点
      real(8), dimension(jm)       :: y_intlonver_xyg         ! 緯度格子点

      y_intlonver_xyg = y_intlon_xy(xy_intver_xyg(xyg_data))
    end function y_intlonver_xyg
yg_avrlon_xyg :real(8), dimension(jm,0:km)
: 子午面格子点
xyg_data :real(8), dimension(im,jm,0:km), intent(in)
: 3 次元格子点

————— 平均計算 ——————

[Source]


    function yg_avrlon_xyg(xyg_data)  ! 経度(帯状)積分
      real(8), dimension(im,jm,0:km), intent(in) :: xyg_data ! 3 次元格子点
      real(8), dimension(jm,0:km)  :: yg_avrlon_xyg          ! 子午面格子点

      yg_avrlon_xyg = ya_avrlon_xya(xyg_data)
    end function yg_avrlon_xyg
yg_intlon_xyg :real(8), dimension(jm,0:km)
: 子午面格子点
xyg_data :real(8), dimension(im,jm,0:km), intent(in)
: 3 次元格子点

————— 積分計算 ——————

[Source]


    function yg_intlon_xyg(xyg_data)  ! 経度(帯状)積分
      real(8), dimension(im,jm,0:km), intent(in) :: xyg_data ! 3 次元格子点
      real(8), dimension(jm,0:km)  :: yg_intlon_xyg          ! 子午面格子点

      yg_intlon_xyg = ya_intlon_xya(xyg_data)
    end function yg_intlon_xyg

[Validate]