00001 subroutine source_charge_asympto(sousf,irg)
00002 use phys_constant, only : long, pi
00003 use grid_parameter, only : ntg, npg
00004 use coordinate_grav_r, only: rg
00005 use def_metric, only : psi
00006 use def_metric_hij, only : hxxu, hxyu, hxzu, hyyu, hyzu, hzzu
00007 use def_faraday_tensor, only : fxd_grid, fyd_grid, fzd_grid
00008 use def_vector_x, only : vec_xg
00009 use make_array_2d
00010 use interface_interpo_linear_type0_2Dsurf
00011 implicit none
00012 real(long), pointer :: dfnc(:,:), sousf(:,:)
00013 integer :: irg, itg, ipg
00014 real(long) :: deriv, val
00015 real(long) :: psi2, fxdc, fydc, fzdc, erx, ery, erz
00016 real(long) :: gmxxu, gmxyu, gmxzu, gmyxu, gmyyu, gmyzu, gmzxu, gmzyu, gmzzu
00017
00018 call alloc_array2d(dfnc, 0,ntg, 0,npg)
00019 call calc_vector_x_grav(1)
00020
00021 do ipg = 0, npg
00022 do itg = 0, ntg
00023 psi2 = psi(irg,itg,ipg)**2
00024 fxdc = fxd_grid(irg,itg,ipg)
00025 fydc = fyd_grid(irg,itg,ipg)
00026 fzdc = fzd_grid(irg,itg,ipg)
00027 erx = vec_xg(irg,itg,ipg,1)/rg(irg)
00028 ery = vec_xg(irg,itg,ipg,2)/rg(irg)
00029 erz = vec_xg(irg,itg,ipg,3)/rg(irg)
00030 gmxxu= hxxu(irg,itg,ipg) + 1.0d0
00031 gmxyu= hxyu(irg,itg,ipg)
00032 gmxzu= hxzu(irg,itg,ipg)
00033 gmyyu= hyyu(irg,itg,ipg) + 1.0d0
00034 gmyzu= hyzu(irg,itg,ipg)
00035 gmzzu= hzzu(irg,itg,ipg) + 1.0d0
00036 gmyxu= gmxyu
00037 gmzxu= gmxzu
00038 gmzyu= gmyzu
00039
00040 dfnc(itg,ipg) = (gmxxu*fxdc*erx + gmxyu*fxdc*ery + gmxzu*fxdc*erz &
00041 & + gmyxu*fydc*erx + gmyyu*fydc*ery + gmyzu*fydc*erz &
00042 & + gmzxu*fzdc*erx + gmzyu*fzdc*ery + gmzzu*fzdc*erz)*psi2
00043
00044 end do
00045 end do
00046
00047 do ipg = 1, npg
00048 do itg = 1, ntg
00049 call interpo_linear_type0_2Dsurf(val,dfnc,itg,ipg)
00050 sousf(itg,ipg) = val
00051 end do
00052 end do
00053
00054 deallocate(dfnc)
00055 end subroutine source_charge_asympto