!c Description: !c 微分演算. !c !c Current Code Owner: !c sugiyama@gfd-dennou.org !c !c Histry: !c Version Date Comment !c ------- ---------- -------- !c 1.0 2004-08-12 杉山耕一朗 !c !c Copyright (C) SUGIYAMA Ko-ichiro, 2003, All rights reserved module if_diff interface s_dx_s function s_dx1d_s(var) use gridset real(8), intent(in) :: var(imin:imax) real(8) :: s_dx1d_s(imin:imax) end function s_dx1d_s function s_dx2d_s(var) use gridset real(8), intent(in) :: var(imin:imax, kmin:kmax) real(8) :: s_dx2d_s(imin:imax, kmin:kmax) end function s_dx2d_s end interface interface s_dz_s function s_dz1d_s(var) use gridset real(8), intent(in) :: var(kmin:kmax) real(8) :: s_dz1d_s(kmin:kmax) end function s_dz1d_s function s_dz2d_s(var) use gridset real(8), intent(in) :: var(imin:imax, kmin:kmax) real(8) :: s_dz2d_s(imin:imax, kmin:kmax) end function s_dz2d_s end interface interface s_dx_u function s_dx1d_u(var) use gridset real(8), intent(in) :: var(imin:imax) real(8) :: s_dx1d_u(imin:imax) end function s_dx1d_u function s_dx2d_u(var) use gridset real(8), intent(in) :: var(imin:imax, kmin:kmax) real(8) :: s_dx2d_u(imin:imax, kmin:kmax) end function s_dx2d_u end interface interface s_dz_w function s_dz1d_w(var) use gridset real(8), intent(in) :: var(kmin:kmax) real(8) :: s_dz1d_w(kmin:kmax) end function s_dz1d_w function s_dz2d_w(var) use gridset real(8), intent(in) :: var(imin:imax, kmin:kmax) real(8) :: s_dz2d_w(imin:imax, kmin:kmax) end function s_dz2d_w end interface end module if_diff function s_dx1d_s(var) use gridset use if_boundary implicit none real(8), intent(in) :: var(imin:imax) real(8) :: s_dx1d_s(imin:imax) s_dx1d_s(imin+1:imax-1) = & & ( & & var(imin+2:imax) & & - var(imin:imax-2) & & ) *5.0d-1 / dx call boundary(bdc_s, s_dx1d_s) end function s_dx1d_s function s_dz1d_s(var) use gridset use if_boundary implicit none real(8), intent(in) :: var(kmin:kmax) real(8) :: s_dz1d_s(kmin:kmax) s_dz1d_s(kmin+1:kmax-1) = & & ( & & var(kmin+2:kmax) & & - var(kmin:kmax-2) & & ) * 5.0d-1 / dz call boundary(bdc_s, s_dz1d_s) end function s_dz1d_s function s_dx1d_u(var) use gridset use if_boundary implicit none real(8), intent(in) :: var(imin:imax) real(8) :: s_dx1d_u(imin:imax) s_dx1d_u(imin:imax-1) = & & ( & & var(imin+1:imax) & & - var(imin:imax-1) & & ) / dx call boundary(bdc_s, s_dx1d_u) end function s_dx1d_u function s_dz1d_w(var) use gridset use if_boundary implicit none real(8), intent(in) :: var(kmin:kmax) real(8) :: s_dz1d_w(kmin:kmax) s_dz1d_w(kmin:kmax-1) = & & ( & & var(kmin+1:kmax) & & - var(kmin:kmax-1) & & ) / dz call boundary(bdc_s, s_dz1d_w) end function s_dz1d_w function s_dx2d_s(var) use gridset use if_boundary implicit none real(8), intent(in) :: var(imin:imax, kmin:kmax) real(8) :: s_dx2d_s(imin:imax, kmin:kmax) s_dx2d_s(imin+1:imax-1,kmin:kmax) = & & ( & & var(imin+2:imax,kmin:kmax) & & - var(imin:imax-2,kmin:kmax) & & ) * 5.0d-1 / dx call boundary(bdc_s, s_dx2d_s) end function s_dx2d_s function s_dz2d_s(var) use gridset use if_boundary implicit none real(8), intent(in) :: var(imin:imax, kmin:kmax) real(8) :: s_dz2d_s(imin:imax, kmin:kmax) s_dz2d_s(imin:imax,kmin+1:kmax-1) = & & ( & & var(imin:imax,kmin+2:kmax) & & - var(imin:imax,kmin:kmax-2) & & ) * 5.0d-1 / dz call boundary(bdc_s, s_dz2d_s) end function s_dz2d_s function s_dx2d_u(var) use gridset use if_boundary implicit none real(8), intent(in) :: var(imin:imax, kmin:kmax) real(8) :: s_dx2d_u(imin:imax, kmin:kmax) s_dx2d_u(imin:imax-1,kmin:kmax) = & & ( & & var(imin+1:imax,kmin:kmax) & & - var(imin:imax-1,kmin:kmax) & & ) / dx call boundary(bdc_s, s_dx2d_u) end function s_dx2d_u function s_dz_u(var) use gridset use if_boundary implicit none real(8), intent(in) :: var(imin:imax, kmin:kmax) real(8) :: s_dz_u(imin:imax, kmin:kmax) s_dz_u(imin:imax-1,kmin+1:kmax-1) = & & ( & & var(imin+1:imax,kmin+2:kmax) & & + var(imin:imax-1,kmin+2:kmax) & & - var(imin+1:imax,kmin:kmax-2) & & - var(imin:imax-1,kmin:kmax-2) & & ) * 2.5d-1 / dz call boundary(bdc_s, s_dz_u) end function s_dz_u function s_dx_w(var) use gridset use if_boundary implicit none real(8), intent(in) :: var(imin:imax, kmin:kmax) real(8) :: s_dx_w(imin:imax, kmin:kmax) s_dx_w(imin+1:imax-1,kmin:kmax-1) = & & ( & & var(imin+2:imax,kmin+1:kmax) & & + var(imin+2:imax,kmin:kmax-1) & & - var(imin:imax-2,kmin+1:kmax) & & - var(imin:imax-2,kmin:kmax-1) & & ) * 2.5d-1 / dx call boundary(bdc_s, s_dx_w) end function s_dx_w function s_dz2d_w(var) use gridset use if_boundary implicit none real(8), intent(in) :: var(imin:imax, kmin:kmax) real(8) :: s_dz2d_w(imin:imax, kmin:kmax) s_dz2d_w(imin:imax,kmin:kmax-1) = & & ( & & var(imin:imax,kmin+1:kmax) & & - var(imin:imax,kmin:kmax-1) & & ) / dz call boundary(bdc_s, s_dz2d_w) end function s_dz2d_w !!! !!!速度 u の位置での微分操作 !!! function u_dx_s(var) use gridset use if_boundary implicit none real(8), intent(in) :: var(imin:imax, kmin:kmax) real(8) :: u_dx_s(imin:imax, kmin:kmax) u_dx_s(imin+1:imax,kmin:kmax) = & & ( & & var(imin+1:imax,kmin:kmax) & & - var(imin:imax-1,kmin:kmax) & & ) / dx call boundary(bdc_u, u_dx_s) end function u_dx_s function u_dz_s(var) use gridset use if_boundary implicit none real(8), intent(in) :: var(imin:imax, kmin:kmax) real(8) :: u_dz_s(imin:imax, kmin:kmax) u_dz_s(imin+1:imax,kmin+1:kmax-1) = & & ( & & var(imin+1:imax,kmin+2:kmax) & & + var(imin:imax-1,kmin+2:kmax) & & - var(imin+1:imax,kmin:kmax-2) & & - var(imin:imax-1,kmin:kmax-2) & & ) * 2.5d-1 / dz call boundary(bdc_u, u_dz_s) end function u_dz_s function u_dx_u(var) use gridset use if_boundary implicit none real(8), intent(in) :: var(imin:imax, kmin:kmax) real(8) :: u_dx_u(imin:imax, kmin:kmax) u_dx_u(imin+1:imax-1,kmin:kmax) = & & ( & & var(imin+2:imax,kmin:kmax) & & - var(imin:imax-2,kmin:kmax) & & ) * 5.0d-1 / dx call boundary(bdc_u, u_dx_u) end function u_dx_u function u_dz_u(var) use gridset use if_boundary implicit none real(8), intent(in) :: var(imin:imax, kmin:kmax) real(8) :: u_dz_u(imin:imax, kmin:kmax) u_dz_u(imin:imax,kmin+1:kmax-1) = & & ( & & var(imin:imax,kmin+2:kmax) & & - var(imin:imax,kmin:kmax-2) & & ) * 5.0d-1 / dz call boundary(bdc_u, u_dz_u) end function u_dz_u function u_dx_w(var) use gridset use if_boundary implicit none real(8), intent(in) :: var(imin:imax, kmin:kmax) real(8) :: u_dx_w(imin:imax, kmin:kmax) u_dx_w(imin+1:imax,kmin:kmax-1) = & & ( & & var(imin+1:imax,kmin+1:kmax) & & + var(imin+1:imax,kmin:kmax-1) & & - var(imin:imax-1,kmin+1:kmax) & & - var(imin:imax-1,kmin:kmax-1) & & ) * 5.0d-1/ dx call boundary(bdc_u, u_dx_w) end function u_dx_w function u_dz_w(var) use gridset use if_boundary implicit none real(8), intent(in) :: var(imin:imax, kmin:kmax) real(8) :: u_dz_w(imin:imax, kmin:kmax) u_dz_w(imin+1:imax,kmin:kmax-1) = & & ( & & var(imin+1:imax,kmin+1:kmax) & & + var(imin:imax-1,kmin+1:kmax) & & - var(imin+1:imax,kmin:kmax-1) & & - var(imin:imax-1,kmin:kmax-1) & & ) * 5.0d-1 / dz call boundary(bdc_u, u_dz_w) end function u_dz_w !!! !!!速度 w の位置での微分操作 !!! function w_dx_s(var) use gridset use if_boundary implicit none real(8), intent(in) :: var(imin:imax, kmin:kmax) real(8) :: w_dx_s(imin:imax, kmin:kmax) w_dx_s(imin+1:imax-1,kmin+1:kmax) = & & ( & & var(imin+2:imax,kmin+1:kmax) & & + var(imin+2:imax,kmin:kmax-1) & & - var(imin:imax-2,kmin+1:kmax) & & - var(imin:imax-2,kmin:kmax-1) & & ) * 2.5d-1 / dx call boundary(bdc_w, w_dx_s) end function w_dx_s function w_dz_s(var) use gridset use if_boundary implicit none real(8), intent(in) :: var(imin:imax, kmin:kmax) real(8) :: w_dz_s(imin:imax, kmin:kmax) w_dz_s(imin:imax,kmin+1:kmax) = & & ( & & + var(imin:imax,kmin+1:kmax) & & - var(imin:imax,kmin:kmax-1) & & ) / dz call boundary(bdc_w, w_dz_s) end function w_dz_s function w_dx_u(var) use gridset use if_boundary implicit none real(8), intent(in) :: var(imin:imax, kmin:kmax) real(8) :: w_dx_u(imin:imax, kmin:kmax) w_dx_u(imin:imax-1,kmin+1:kmax) = & & ( & & var(imin+1:imax,kmin+1:kmax) & & + var(imin+1:imax,kmin:kmax-1) & & - var(imin:imax-1,kmin+1:kmax) & & - var(imin:imax-1,kmin:kmax-1) & & ) * 5.0d-1/ dx call boundary(bdc_w, w_dx_u) end function w_dx_u function w_dz_u(var) use gridset use if_boundary implicit none real(8), intent(in) :: var(imin:imax, kmin:kmax) real(8) :: w_dz_u(imin:imax, kmin:kmax) w_dz_u(imin:imax-1,kmin+1:kmax) = & & ( & & var(imin+1:imax,kmin+1:kmax) & & + var(imin:imax-1,kmin+1:kmax) & & - var(imin+1:imax,kmin:kmax-1) & & - var(imin:imax-1,kmin:kmax-1) & & ) * 5.0d-1 / dz call boundary(bdc_w, w_dz_u) end function w_dz_u function w_dx_w(var) use gridset use if_boundary implicit none real(8), intent(in) :: var(imin:imax, kmin:kmax) real(8) :: w_dx_w(imin:imax, kmin:kmax) w_dx_w(imin+1:imax-1,kmin:kmax) = & & ( & & var(imin+2:imax,kmin:kmax) & & - var(imin:imax-2,kmin:kmax) & & ) * 5.0d-1 / dx call boundary(bdc_w, w_dx_w) end function w_dx_w function w_dz_w(var) use gridset use if_boundary implicit none real(8), intent(in) :: var(imin:imax, kmin:kmax) real(8) :: w_dz_w(imin:imax, kmin:kmax) w_dz_w(imin:imax,kmin+1:kmax-1) = & & ( & & var(imin:imax,kmin+2:kmax) & & - var(imin:imax,kmin:kmax-2) & & ) * 5.0d-1 / dz call boundary(bdc_w, w_dz_w) end function w_dz_w