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