00001 subroutine calc_area_AHfinder(aharea,ahmass)
00002 use phys_constant, only : long, pi
00003 use def_horizon, only : ahz
00004 use def_metric, only : psi
00005 use grid_parameter, only : npg, nrg, ntg
00006 use coordinate_grav_r, only : rg
00007 use weight_midpoint_grav, only : hwdtg, hwdpg
00008 use interface_interpo_linear_type0_2Dsurf
00009 use interface_interpo_linear_surface_type0
00010 implicit none
00011 real(long), external :: lagint_4th
00012 real(long) :: r4(4), f4(4)
00013 real(long) :: aharea, ahmass, area, detr, psiw, rgv, wds, fn_lagint
00014 integer :: ii, ipg, ir0, irg, irg0, itg
00015
00016
00017 write(6,*) "### Should rewrite calc_area_AHfinder.f90 "
00018
00019 area = 0.0d0
00020 do ipg = 1, npg
00021 do itg = 1, ntg
00022 call interpo_linear_type0_2Dsurf(rgv,ahz,itg,ipg)
00023 do irg = 0, nrg-1
00024 detr = (rg(irg+1)-rgv)*(rg(irg)-rgv)
00025 if(detr <= 0.0d0) then
00026 irg0 = irg
00027 exit
00028 end if
00029 end do
00030
00031 ir0 = min0(max0(irg0-1,0),nrg-3)
00032
00033 do ii = 1, 4
00034 irg = ir0-1 + ii
00035 r4(ii) = rg(irg)
00036 call interpo_linear_surface_type0(psiw,psi,irg,itg,ipg)
00037 f4(ii) = psiw
00038 end do
00039
00040 psiw = lagint_4th(r4,f4,rgv)
00041 wds = hwdtg(itg)*hwdpg(ipg)
00042 area = area + psiw**4*rgv**2*wds
00043
00044 end do
00045 end do
00046
00047 aharea = area*2.0d0
00048 ahmass = dsqrt(aharea/(16.0d0*pi))
00049
00050 end subroutine calc_area_AHfinder