| Class | xyz_deriv_module |
| In: |
../src/utils/xyz_deriv_module.f90
|
3 次元 (xyz 方向) 不等間隔交互格子 微分演算モジュール
xyz_deriv_module は, 3 次元 (xyz 方向) 不等間隔交互格子を用いた有限差分 法に基づく数値モデルのための, 微分演算を行う Fortran90 関数を提供する. 微分演算は 2 次精度中心差分を用いて行う.
| Function : | |
| paa_dx_xaa(imin:imax,jmin:jmax,kmin:kmax) : | real(DP) |
| xaa_Var(imin:imax,jmin:jmax,kmin:kmax) : | real(DP),intent(in) |
半整数格子点上の 1 階微分を計算する
function paa_dx_xaa(xaa_Var)
! 半整数格子点上の 1 階微分を計算する
real(DP),intent(in) :: xaa_Var(imin:imax,jmin:jmax,kmin:kmax)
real(DP) :: paa_dx_xaa(imin:imax,jmin:jmax,kmin:kmax)
integer :: ix
! 1 階微分の計算
!
do ix = imin, imax-1
paa_dx_xaa(ix,:,:) = (xaa_Var(ix+1,:,:)-xaa_Var(ix,:,:))/p_dx(ix)
end do
! imax での値は決まらないので, 値を入れておく.
! 計算領域に滲み出した時にわかるように, 大きな値を入れておく
!
paa_dx_xaa(imax,:,:) = 1.0d10
end function paa_dx_xaa
| Function : | |
| aqa_dy_aya(imin:imax,jmin:jmax,kmin:kmax) : | real(DP) |
| aya_Var(imin:imax,jmin:jmax,kmin:kmax) : | real(DP),intent(in) |
半整数格子点上の 1 階微分を計算する
function aqa_dy_aya(aya_Var)
! 半整数格子点上の 1 階微分を計算する
real(DP),intent(in) :: aya_Var(imin:imax,jmin:jmax,kmin:kmax)
real(DP) :: aqa_dy_aya(imin:imax,jmin:jmax,kmin:kmax)
integer :: jy
! y 方向一様な場合は微分はゼロ.
if (jmin == jmax) then
aqa_dy_aya = 0.0d0
return
end if
! 1 階微分の計算
!
do jy = jmin, jmax-1
aqa_dy_aya(:,jy,:) = (aya_Var(:,jy+1,:)-aya_Var(:,jy,:))/q_dy(jy)
end do
! jmax での値は決まらないので, 値を入れておく.
! 計算領域に滲み出した時にわかるように, 大きな値を入れておく
!
aqa_dy_aya(:,jmax,:) = 1.0d10
end function aqa_dy_aya
| Function : | |
| paa_dx_xaa(imin:imax,jmin:jmax,kmin:kmax) : | real(DP) |
| xaa_Var(imin:imax,jmin:jmax,kmin:kmax) : | real(DP),intent(in) |
半整数格子点上の 1 階微分を計算する
function paa_dx_xaa(xaa_Var)
! 半整数格子点上の 1 階微分を計算する
real(DP),intent(in) :: xaa_Var(imin:imax,jmin:jmax,kmin:kmax)
real(DP) :: paa_dx_xaa(imin:imax,jmin:jmax,kmin:kmax)
integer :: ix
! 1 階微分の計算
!
do ix = imin, imax-1
paa_dx_xaa(ix,:,:) = (xaa_Var(ix+1,:,:)-xaa_Var(ix,:,:))/p_dx(ix)
end do
! imax での値は決まらないので, 値を入れておく.
! 計算領域に滲み出した時にわかるように, 大きな値を入れておく
!
paa_dx_xaa(imax,:,:) = 1.0d10
end function paa_dx_xaa
| Function : | |
| aar_dz_aaz(imin:imax,jmin:jmax,kmin:kmax) : | real(DP) |
| aaz_Var(imin:imax,jmin:jmax,kmin:kmax) : | real(DP),intent(in) |
半整数格子点上の 1 階微分を計算する
function aar_dz_aaz(aaz_Var)
! 半整数格子点上の 1 階微分を計算する
real(DP),intent(in) :: aaz_Var(imin:imax,jmin:jmax,kmin:kmax)
real(DP) :: aar_dz_aaz(imin:imax,jmin:jmax,kmin:kmax)
integer :: kz
! 1 階微分の計算
!
do kz = kmin, kmax-1
aar_dz_aaz(:,:,kz) = (aaz_Var(:,:,kz+1)-aaz_Var(:,:,kz))/r_dz(kz)
end do
! kmax での値は決まらないので, 値を入れておく.
! 計算領域に滲み出した時にわかるように, 大きな値を入れておく
!
aar_dz_aaz(:,:,kmax) = 1.0d10
end function aar_dz_aaz
| Function : | |
| paa_dx_xaa(imin:imax,jmin:jmax,kmin:kmax) : | real(DP) |
| xaa_Var(imin:imax,jmin:jmax,kmin:kmax) : | real(DP),intent(in) |
半整数格子点上の 1 階微分を計算する
function paa_dx_xaa(xaa_Var)
! 半整数格子点上の 1 階微分を計算する
real(DP),intent(in) :: xaa_Var(imin:imax,jmin:jmax,kmin:kmax)
real(DP) :: paa_dx_xaa(imin:imax,jmin:jmax,kmin:kmax)
integer :: ix
! 1 階微分の計算
!
do ix = imin, imax-1
paa_dx_xaa(ix,:,:) = (xaa_Var(ix+1,:,:)-xaa_Var(ix,:,:))/p_dx(ix)
end do
! imax での値は決まらないので, 値を入れておく.
! 計算領域に滲み出した時にわかるように, 大きな値を入れておく
!
paa_dx_xaa(imax,:,:) = 1.0d10
end function paa_dx_xaa
| Function : | |
| aya_dy_aqa(imin:imax,jmin:jmax,kmin:kmax) : | real(DP) |
| aqa_Var(imin:imax,jmin:jmax,kmin:kmax) : | real(DP),intent(in) |
半整数格子点上の 1 階微分を計算する
function aya_dy_aqa(aqa_Var)
! 半整数格子点上の 1 階微分を計算する
real(DP),intent(in) :: aqa_Var(imin:imax,jmin:jmax,kmin:kmax)
real(DP) :: aya_dy_aqa(imin:imax,jmin:jmax,kmin:kmax)
integer :: jy
! y 方向一様な場合は微分はゼロ.
if (jmin == jmax) then
aya_dy_aqa = 0.0d0
return
end if
! 1 階微分の計算
!
do jy = jmin+1, jmax
aya_dy_aqa(:,jy,:) = (aqa_Var(:,jy,:)-aqa_Var(:,jy-1,:))/y_dy(jy)
end do
! jmin での値は決まらないので, 値を入れておく.
! 計算領域に滲み出した時にわかるように, 大きな値を入れておく
!
aya_dy_aqa(:,jmin,:) = 1.0d10
end function aya_dy_aqa
| Function : | |
| aaz_dz_aar(imin:imax,jmin:jmax,kmin:kmax) : | real(DP) |
| aar_Var(imin:imax,jmin:jmax,kmin:kmax) : | real(DP),intent(in) |
半整数格子点上の 1 階微分を計算する
function aaz_dz_aar(aar_Var)
! 半整数格子点上の 1 階微分を計算する
real(DP),intent(in) :: aar_Var(imin:imax,jmin:jmax,kmin:kmax)
real(DP) :: aaz_dz_aar(imin:imax,jmin:jmax,kmin:kmax)
integer :: kz
! 1 階微分の計算
!
do kz = kmin+1, kmax
aaz_dz_aar(:,:,kz) = (aar_Var(:,:,kz)-aar_Var(:,:,kz-1))/z_dz(kz)
end do
! kmin での値は決まらないので, 値を入れておく.
! 計算領域に滲み出した時にわかるように, 大きな値を入れておく
!
aaz_dz_aar(:,:,kmin) = 1.0d10
end function aaz_dz_aar
| Function : | |
| aqa_dy_aya(imin:imax,jmin:jmax,kmin:kmax) : | real(DP) |
| aya_Var(imin:imax,jmin:jmax,kmin:kmax) : | real(DP),intent(in) |
半整数格子点上の 1 階微分を計算する
function aqa_dy_aya(aya_Var)
! 半整数格子点上の 1 階微分を計算する
real(DP),intent(in) :: aya_Var(imin:imax,jmin:jmax,kmin:kmax)
real(DP) :: aqa_dy_aya(imin:imax,jmin:jmax,kmin:kmax)
integer :: jy
! y 方向一様な場合は微分はゼロ.
if (jmin == jmax) then
aqa_dy_aya = 0.0d0
return
end if
! 1 階微分の計算
!
do jy = jmin, jmax-1
aqa_dy_aya(:,jy,:) = (aya_Var(:,jy+1,:)-aya_Var(:,jy,:))/q_dy(jy)
end do
! jmax での値は決まらないので, 値を入れておく.
! 計算領域に滲み出した時にわかるように, 大きな値を入れておく
!
aqa_dy_aya(:,jmax,:) = 1.0d10
end function aqa_dy_aya
| Function : | |
| aar_dz_aaz(imin:imax,jmin:jmax,kmin:kmax) : | real(DP) |
| aaz_Var(imin:imax,jmin:jmax,kmin:kmax) : | real(DP),intent(in) |
半整数格子点上の 1 階微分を計算する
function aar_dz_aaz(aaz_Var)
! 半整数格子点上の 1 階微分を計算する
real(DP),intent(in) :: aaz_Var(imin:imax,jmin:jmax,kmin:kmax)
real(DP) :: aar_dz_aaz(imin:imax,jmin:jmax,kmin:kmax)
integer :: kz
! 1 階微分の計算
!
do kz = kmin, kmax-1
aar_dz_aaz(:,:,kz) = (aaz_Var(:,:,kz+1)-aaz_Var(:,:,kz))/r_dz(kz)
end do
! kmax での値は決まらないので, 値を入れておく.
! 計算領域に滲み出した時にわかるように, 大きな値を入れておく
!
aar_dz_aaz(:,:,kmax) = 1.0d10
end function aar_dz_aaz
| Function : | |
| xaa_dx_paa(imin:imax,jmin:jmax,kmin:kmax) : | real(DP) |
| paa_Var(imin:imax,jmin:jmax,kmin:kmax) : | real(DP),intent(in) |
半整数格子点上の 1 階微分を計算する
function xaa_dx_paa(paa_Var)
! 半整数格子点上の 1 階微分を計算する
real(DP),intent(in) :: paa_Var(imin:imax,jmin:jmax,kmin:kmax)
real(DP) :: xaa_dx_paa(imin:imax,jmin:jmax,kmin:kmax)
integer :: ix
! 1 階微分の計算
!
do ix = imin+1, imax
xaa_dx_paa(ix,:,:) = (paa_Var(ix,:,:)-paa_Var(ix-1,:,:))/x_dx(ix)
end do
! imin での値は決まらないので, 値を入れておく.
! 計算領域に滲み出した時にわかるように, 大きな値を入れておく
!
xaa_dx_paa(imin,:,:) = 1.0d10
end function xaa_dx_paa
| Function : | |
| aqa_dy_aya(imin:imax,jmin:jmax,kmin:kmax) : | real(DP) |
| aya_Var(imin:imax,jmin:jmax,kmin:kmax) : | real(DP),intent(in) |
半整数格子点上の 1 階微分を計算する
function aqa_dy_aya(aya_Var)
! 半整数格子点上の 1 階微分を計算する
real(DP),intent(in) :: aya_Var(imin:imax,jmin:jmax,kmin:kmax)
real(DP) :: aqa_dy_aya(imin:imax,jmin:jmax,kmin:kmax)
integer :: jy
! y 方向一様な場合は微分はゼロ.
if (jmin == jmax) then
aqa_dy_aya = 0.0d0
return
end if
! 1 階微分の計算
!
do jy = jmin, jmax-1
aqa_dy_aya(:,jy,:) = (aya_Var(:,jy+1,:)-aya_Var(:,jy,:))/q_dy(jy)
end do
! jmax での値は決まらないので, 値を入れておく.
! 計算領域に滲み出した時にわかるように, 大きな値を入れておく
!
aqa_dy_aya(:,jmax,:) = 1.0d10
end function aqa_dy_aya
| Function : | |
| aaz_dz_aar(imin:imax,jmin:jmax,kmin:kmax) : | real(DP) |
| aar_Var(imin:imax,jmin:jmax,kmin:kmax) : | real(DP),intent(in) |
半整数格子点上の 1 階微分を計算する
function aaz_dz_aar(aar_Var)
! 半整数格子点上の 1 階微分を計算する
real(DP),intent(in) :: aar_Var(imin:imax,jmin:jmax,kmin:kmax)
real(DP) :: aaz_dz_aar(imin:imax,jmin:jmax,kmin:kmax)
integer :: kz
! 1 階微分の計算
!
do kz = kmin+1, kmax
aaz_dz_aar(:,:,kz) = (aar_Var(:,:,kz)-aar_Var(:,:,kz-1))/z_dz(kz)
end do
! kmin での値は決まらないので, 値を入れておく.
! 計算領域に滲み出した時にわかるように, 大きな値を入れておく
!
aaz_dz_aar(:,:,kmin) = 1.0d10
end function aaz_dz_aar
| Function : | |
| xaa_dx_paa(imin:imax,jmin:jmax,kmin:kmax) : | real(DP) |
| paa_Var(imin:imax,jmin:jmax,kmin:kmax) : | real(DP),intent(in) |
半整数格子点上の 1 階微分を計算する
function xaa_dx_paa(paa_Var)
! 半整数格子点上の 1 階微分を計算する
real(DP),intent(in) :: paa_Var(imin:imax,jmin:jmax,kmin:kmax)
real(DP) :: xaa_dx_paa(imin:imax,jmin:jmax,kmin:kmax)
integer :: ix
! 1 階微分の計算
!
do ix = imin+1, imax
xaa_dx_paa(ix,:,:) = (paa_Var(ix,:,:)-paa_Var(ix-1,:,:))/x_dx(ix)
end do
! imin での値は決まらないので, 値を入れておく.
! 計算領域に滲み出した時にわかるように, 大きな値を入れておく
!
xaa_dx_paa(imin,:,:) = 1.0d10
end function xaa_dx_paa
| Function : | |
| aya_dy_aqa(imin:imax,jmin:jmax,kmin:kmax) : | real(DP) |
| aqa_Var(imin:imax,jmin:jmax,kmin:kmax) : | real(DP),intent(in) |
半整数格子点上の 1 階微分を計算する
function aya_dy_aqa(aqa_Var)
! 半整数格子点上の 1 階微分を計算する
real(DP),intent(in) :: aqa_Var(imin:imax,jmin:jmax,kmin:kmax)
real(DP) :: aya_dy_aqa(imin:imax,jmin:jmax,kmin:kmax)
integer :: jy
! y 方向一様な場合は微分はゼロ.
if (jmin == jmax) then
aya_dy_aqa = 0.0d0
return
end if
! 1 階微分の計算
!
do jy = jmin+1, jmax
aya_dy_aqa(:,jy,:) = (aqa_Var(:,jy,:)-aqa_Var(:,jy-1,:))/y_dy(jy)
end do
! jmin での値は決まらないので, 値を入れておく.
! 計算領域に滲み出した時にわかるように, 大きな値を入れておく
!
aya_dy_aqa(:,jmin,:) = 1.0d10
end function aya_dy_aqa
| Function : | |
| aar_dz_aaz(imin:imax,jmin:jmax,kmin:kmax) : | real(DP) |
| aaz_Var(imin:imax,jmin:jmax,kmin:kmax) : | real(DP),intent(in) |
半整数格子点上の 1 階微分を計算する
function aar_dz_aaz(aaz_Var)
! 半整数格子点上の 1 階微分を計算する
real(DP),intent(in) :: aaz_Var(imin:imax,jmin:jmax,kmin:kmax)
real(DP) :: aar_dz_aaz(imin:imax,jmin:jmax,kmin:kmax)
integer :: kz
! 1 階微分の計算
!
do kz = kmin, kmax-1
aar_dz_aaz(:,:,kz) = (aaz_Var(:,:,kz+1)-aaz_Var(:,:,kz))/r_dz(kz)
end do
! kmax での値は決まらないので, 値を入れておく.
! 計算領域に滲み出した時にわかるように, 大きな値を入れておく
!
aar_dz_aaz(:,:,kmax) = 1.0d10
end function aar_dz_aaz
| Function : | |
| xaa_dx_paa(imin:imax,jmin:jmax,kmin:kmax) : | real(DP) |
| paa_Var(imin:imax,jmin:jmax,kmin:kmax) : | real(DP),intent(in) |
半整数格子点上の 1 階微分を計算する
function xaa_dx_paa(paa_Var)
! 半整数格子点上の 1 階微分を計算する
real(DP),intent(in) :: paa_Var(imin:imax,jmin:jmax,kmin:kmax)
real(DP) :: xaa_dx_paa(imin:imax,jmin:jmax,kmin:kmax)
integer :: ix
! 1 階微分の計算
!
do ix = imin+1, imax
xaa_dx_paa(ix,:,:) = (paa_Var(ix,:,:)-paa_Var(ix-1,:,:))/x_dx(ix)
end do
! imin での値は決まらないので, 値を入れておく.
! 計算領域に滲み出した時にわかるように, 大きな値を入れておく
!
xaa_dx_paa(imin,:,:) = 1.0d10
end function xaa_dx_paa
| Function : | |
| aya_dy_aqa(imin:imax,jmin:jmax,kmin:kmax) : | real(DP) |
| aqa_Var(imin:imax,jmin:jmax,kmin:kmax) : | real(DP),intent(in) |
半整数格子点上の 1 階微分を計算する
function aya_dy_aqa(aqa_Var)
! 半整数格子点上の 1 階微分を計算する
real(DP),intent(in) :: aqa_Var(imin:imax,jmin:jmax,kmin:kmax)
real(DP) :: aya_dy_aqa(imin:imax,jmin:jmax,kmin:kmax)
integer :: jy
! y 方向一様な場合は微分はゼロ.
if (jmin == jmax) then
aya_dy_aqa = 0.0d0
return
end if
! 1 階微分の計算
!
do jy = jmin+1, jmax
aya_dy_aqa(:,jy,:) = (aqa_Var(:,jy,:)-aqa_Var(:,jy-1,:))/y_dy(jy)
end do
! jmin での値は決まらないので, 値を入れておく.
! 計算領域に滲み出した時にわかるように, 大きな値を入れておく
!
aya_dy_aqa(:,jmin,:) = 1.0d10
end function aya_dy_aqa
| Function : | |
| aaz_dz_aar(imin:imax,jmin:jmax,kmin:kmax) : | real(DP) |
| aar_Var(imin:imax,jmin:jmax,kmin:kmax) : | real(DP),intent(in) |
半整数格子点上の 1 階微分を計算する
function aaz_dz_aar(aar_Var)
! 半整数格子点上の 1 階微分を計算する
real(DP),intent(in) :: aar_Var(imin:imax,jmin:jmax,kmin:kmax)
real(DP) :: aaz_dz_aar(imin:imax,jmin:jmax,kmin:kmax)
integer :: kz
! 1 階微分の計算
!
do kz = kmin+1, kmax
aaz_dz_aar(:,:,kz) = (aar_Var(:,:,kz)-aar_Var(:,:,kz-1))/z_dz(kz)
end do
! kmin での値は決まらないので, 値を入れておく.
! 計算領域に滲み出した時にわかるように, 大きな値を入れておく
!
aaz_dz_aar(:,:,kmin) = 1.0d10
end function aaz_dz_aar