00001 subroutine grd2phi_midpoint_type0(fnc,deriv,irg,itg,ipg)
00002 use phys_constant, only : long
00003 use coordinate_grav_phi, only : hphig
00004 use coordinate_grav_extended, only : ipgex_phi, phigex
00005 implicit none
00006 real(long), external :: d2fdx2_2nd
00007 real(long), pointer :: fnc(:,:,:)
00008 real(long), intent(out) :: deriv
00009 real(long) :: pv
00010 real(long) :: r4(4), th4(4), phi4(4), fp4(4)
00011 integer :: irg, itg, ipg, irgex, itgex, ipgex
00012 integer :: ip0, ipg0, ii, jj, kk
00013
00014
00015
00016
00017
00018
00019 ip0 = ipg-2
00020 deriv = 0.0d0
00021
00022 do jj = 1, 2
00023 irgex = irg - 1 + jj
00024 do kk = 1, 2
00025 itgex = itg - 1 + kk
00026 do ii = 1, 4
00027 ipg0 = ip0 + ii - 1
00028 phi4(ii) = phigex(ipg0)
00029
00030 ipgex = ipgex_phi(ipg0)
00031 fp4(ii) = fnc(irgex,itgex,ipgex)
00032 end do
00033
00034
00035
00036 pv = hphig(ipg)
00037 deriv = deriv + d2fdx2_2nd(phi4,fp4,pv)
00038 end do
00039 end do
00040
00041 deriv = 0.25d0*deriv
00042
00043 end subroutine grd2phi_midpoint_type0