| Class | w_deriv_module |
| In: |
src/w_deriv_module.f90
|
| w_DivLambda_xy((nm+1)*(nm+1)) : | real(8)
| ||
| xy_data(im,jm) : | real(8), intent(in) |
————— 微分計算 (λ,μ座標系用) ——————
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) |
————— 微分計算 ——————
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)
|
————— 微分計算 ——————
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) |
————— 微分計算 ——————
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
| n_in : | integer,intent(in)
| ||
| i_in : | integer,intent(in)
| ||
| j_in : | integer,intent(in)
|
————— 初期化 ——————
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) |
————— 微分計算 (λ,μ座標系用) ——————
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)
| ||
| w_data((nm+1)*(nm+1)) : | real(8), intent(in) |
————— 微分計算 ——————
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