00001 subroutine calc_fnc_moment_asympto(fnc,fnc_moment)
00002 use phys_constant, only : long, pi
00003 use grid_parameter, only : nrg, ntg, npg, rgout
00004 use coordinate_grav_r, only : rg
00005 use make_array_2d
00006 use make_array_3d
00007 use interface_source_fnc_moment_asympto
00008 use interface_surf_int_grav_solidangle
00009 implicit none
00010 real(long), pointer :: fnc(:,:,:)
00011 real(long) :: fnc_moment(3)
00012 real(long) :: fac4pi
00013 real(long) :: surf, rg_asympt
00014 real(long), pointer :: sousf(:,:), sousfv(:,:,:)
00015 integer :: irg, ir, ii
00016
00017 call alloc_array2d(sousf , 0, ntg, 0, npg)
00018 call alloc_array3d(sousfv, 0, ntg, 0, npg, 1, 3)
00019
00020 rg_asympt = 10.0**(dlog10(rgout)*2.0/3.0)
00021
00022 do ir = 0, nrg
00023 irg = ir
00024 if (rg(ir).ge.rg_asympt) exit
00025 end do
00026
00027 call source_fnc_moment_asympto(fnc,sousfv,irg)
00028 do ii = 1, 3
00029 sousf(0:ntg,0:npg) = sousfv(0:ntg,0:npg,ii)
00030 call surf_int_grav_solidangle(sousf,surf)
00031 fac4pi = 1.0d0/(4.0d0*pi)
00032 fnc_moment(ii) = fac4pi*surf
00033 end do
00034
00035
00036
00037 deallocate(sousf)
00038 deallocate(sousfv)
00039 end subroutine calc_fnc_moment_asympto