| Class | wghi_module |
| In: |
src/wghi_module.f90
|
| avrlonlatver_xyg : | real(8)
| ||
| xyg_data : | real(8), dimension(im,jm,0:km), intent(in)
|
————— 平均計算 ——————
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)
|
————— 平均計算 ——————
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)
|
————— 積分計算 ——————
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)
|
————— 積分計算 ——————
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) |
————— 微分計算 ——————
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)
|
————— 微分計算 ——————
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) |
————— 基本変換 ——————
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)
|
————— 初期化 ——————
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) |
————— 微分計算 ——————
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) |
————— 微分計算 ——————
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) |
————— 微分計算 ——————
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)
|
————— 平均計算 ——————
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)
|
————— 積分計算 ——————
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)
|
————— 平均計算 ——————
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)
|
————— 積分計算 ——————
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)
|
————— 平均計算 ——————
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)
|
————— 積分計算 ——————
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)
|
————— 微分計算 ——————
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) |
————— 基本変換 ——————
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
| xyh_gradlon_wh : | real(8), dimension(im,jm,km) | ||
| wh_data : | real(8), dimension((nm+1)*(nm+1),km), intent(in)
|
————— 微分計算 ——————
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)
|
————— 微分計算 ——————
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) |
————— 基本変換 ——————
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)
|
————— 平均計算 ——————
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)
|
————— 積分計算 ——————
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)
|
————— 平均計算 ——————
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)
|
————— 積分計算 ——————
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