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