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