00001 subroutine source_AHarea_AHfinder(sou)
00002 use phys_constant, only : long, pi
00003 use grid_parameter, only : nrg, ntg, npg
00004 use coordinate_grav_r, only : rg
00005 use trigonometry_grav_theta, only : hsinthg
00006 use def_metric, only : tfkijkij, psi
00007 use def_horizon, only : ahz
00008 use interface_interpo_linear_type0_2Dsurf
00009 use interface_interpo_linear_surface_type0
00010 use interface_grdtp_2Dsurf_midpoint_type0
00011 implicit none
00012 real(long), pointer :: sou(:,:)
00013 real(long), external :: lagint_4th
00014 real(long) :: r4(4), f4(4)
00015 real(long) :: detr, psiw, rgv, dahzdt, dahzdp
00016 integer :: ii, ir0, irg0, irg, itg, ipg
00017
00018 do ipg = 1, npg
00019 do itg = 1, ntg
00020 call interpo_linear_type0_2Dsurf(rgv,ahz,itg,ipg)
00021 irg0 = 0
00022 do irg = 0, nrg-1
00023 detr = (rg(irg+1)-rgv)*(rg(irg)-rgv)
00024 if(detr <= 0.0d0) then
00025 irg0 = irg
00026 exit
00027 end if
00028 end do
00029
00030 ir0 = min0(max0(irg0-1,0),nrg-3)
00031
00032 do ii = 1, 4
00033 irg = ir0-1 + ii
00034 r4(ii) = rg(irg)
00035 call interpo_linear_surface_type0(psiw,psi,irg,itg,ipg)
00036 f4(ii) = psiw
00037 end do
00038
00039 call grdtp_2Dsurf_midpoint_type0(ahz,dahzdt,dahzdp,itg,ipg)
00040
00041 psiw = lagint_4th(r4,f4,rgv)
00042 sou(itg,ipg) = psiw**4*rgv**2*dsqrt(1.0d0 + (dahzdt/rgv)**2 &
00043 & + (dahzdp/(rgv*hsinthg(itg)))**2)
00044
00045 end do
00046 end do
00047
00048 end subroutine source_AHarea_AHfinder