00001 subroutine excurve_TrpBH_gridpoint
00002 use phys_constant, only : long
00003 use grid_parameter, only : nrg, ntg, npg
00004 use def_metric_pBH, only : aij_trpBH_grid, aijaij_trpBH_grid
00005 use def_bh_parameter, only : mass_pBH, mom_pBH, spin_pBH
00006 use coordinate_grav_r, only : rg
00007 use def_vector_x, only : vec_xg
00008 use make_array_4d
00009 implicit none
00010 integer :: info
00011 integer :: irg, itg, ipg, i, j, k, l, m
00012 real(long) :: gm(3,3), fac, fac_p, fac_s, nk_pk, n(3), p(3), s(3)
00013 real(long) :: epsi(3,3,3), eps_s(3)
00014
00015
00016
00017
00018 info = 0
00019
00020 fac = 3.0d0*dsqrt(3.0d0)*mass_pBH**2.0d0/4.0d0
00021 fac_p = 3.0d0/2.0d0
00022 fac_s = 6.0d0
00023 epsi(1:3,1:3,1:3) = 0.0d0
00024 epsi(1,2,3) = 1.0d0 ; epsi(2,3,1) = 1.0d0 ; epsi(3,1,2) = 1.0d0
00025 epsi(2,1,3) = -1.0d0 ; epsi(1,3,2) = -1.0d0 ; epsi(3,2,1) = -1.0d0
00026 gm(1:3,1:3) = 0.0d0
00027 gm(1,1) = 1.0d0 ; gm(2,2) = 1.0d0 ; gm(3,3) = 1.0d0
00028 p(1) = mom_pBH(1) ; s(1) = spin_pBH(1)
00029 p(2) = mom_pBH(2) ; s(2) = spin_pBH(2)
00030 p(3) = mom_pBH(3) ; s(3) = spin_pBH(3)
00031 do ipg = 0, npg
00032 do itg = 0, ntg
00033 do irg = 1, nrg
00034 aijaij_trpBH_grid(irg,itg,ipg) = 0.0d0
00035 n(1) = vec_xg(irg,itg,ipg,1)/rg(irg)
00036 n(2) = vec_xg(irg,itg,ipg,2)/rg(irg)
00037 n(3) = vec_xg(irg,itg,ipg,3)/rg(irg)
00038 nk_pk = n(1)*p(1) + n(2)*p(2) + n(3)*p(3)
00039 do k = 1, 3
00040 eps_s(k) = 0.0d0
00041 do l = 1, 3
00042 do m = 1, 3
00043 eps_s(k) = eps_s(k) + epsi(k,l,m)*s(l)*n(m)
00044 end do
00045 end do
00046 end do
00047
00048
00049 do i = 1, 3
00050 do j = 1, 3
00051
00052 aij_trpBH_grid(irg,itg,ipg,i,j) = fac/rg(irg)**3.0d0 &
00053 & * (gm(i,j) - 3.0d0*n(i)*n(j))&
00054 & + fac_p/rg(irg)**2.0d0 &
00055 & *(p(i)*n(j) + p(j)*n(i) &
00056 & - nk_pk*(gm(i,j) - n(i)*n(j))) &
00057 & + fac_s/rg(irg)**3.0d0 &
00058 & *0.5d0*(n(i)*eps_s(j) &
00059 & + n(j)*eps_s(i))
00060
00061 aijaij_trpBH_grid(irg,itg,ipg) = aijaij_trpBH_grid(irg,itg,ipg) &
00062 & + aij_trpBH_grid(irg,itg,ipg,i,j)**2.0d0
00063 end do
00064 end do
00065 if (aijaij_trpBH_grid(irg,itg,ipg) /= 0.0d0) info = 1
00066 end do
00067 end do
00068 end do
00069
00070 aij_trpBH_grid(0,0:ntg,0:npg,1:3,1:3) = 1.0d+40
00071 aijaij_trpBH_grid(0,0:ntg,0:npg) = 1.0d+40
00072
00073 if (info /= 1) write(6,*) ' ### Warning Aij_trpBH = 0 *** '
00074
00075 end subroutine excurve_TrpBH_gridpoint