00001 subroutine source_admmom_asympto(sousfv,irg)
00002   use phys_constant, only : long
00003   use grid_parameter, only : ntg, npg
00004   use def_metric_excurve_grid, only : tfkij_grid
00005   use coordinate_grav_r, only : rg
00006   use def_vector_x, only   : vec_xg
00007   use make_array_2d
00008   use interface_interpo_linear_type0_2Dsurf
00009   implicit none
00010   real(long), pointer :: sousfv(:,:,:)
00011   integer    :: irg
00012   real(long), pointer :: fnc(:,:)
00013   real(long) :: na, eb, Aij, val, eia(3,3)
00014   integer    :: itg, ipg, ia, ib, ii
00015 
00016   call alloc_array2d(fnc, 0,ntg, 0,npg)
00017   eia(1,1) = 1.0d0 ; eia(1,2) = 0.0d0 ; eia(1,3) = 0.0d0
00018   eia(2,1) = 0.0d0 ; eia(2,2) = 1.0d0 ; eia(2,3) = 0.0d0
00019   eia(3,1) = 0.0d0 ; eia(3,2) = 0.0d0 ; eia(3,3) = 1.0d0
00020 
00021 do ii = 1, 3
00022 
00023   do ipg = 0, npg
00024     do itg = 0, ntg
00025       fnc(itg,ipg) = 0.0d0
00026       do ib = 1, 3
00027         do ia = 1, 3
00028           Aij = tfkij_grid(irg,itg,ipg,ia,ib)
00029           eb = eia(ii,ib)
00030           na = vec_xg(irg,itg,ipg,ia)/rg(irg)
00031           fnc(itg,ipg) = fnc(itg,ipg) + Aij*eb*na
00032         end do
00033       end do
00034     end do
00035   end do
00036 
00037   do ipg = 1, npg
00038     do itg = 1, ntg
00039       call interpo_linear_type0_2Dsurf(val,fnc,itg,ipg)
00040       sousfv(itg,ipg,ii) = val
00041     end do
00042   end do
00043 
00044 end do
00045 
00046   deallocate(fnc)
00047 
00048 end subroutine source_admmom_asympto