00001 subroutine excurve_TrpBH
00002 use phys_constant, only : long
00003 use grid_parameter, only : nrg, ntg, npg
00004 use def_metric_pBH, only : aij_trpBH, aijaij_trpBH
00005 use def_bh_parameter, only : mass_pBH, mom_pBH, spin_pBH
00006 use coordinate_grav_r, only : hrg
00007 use def_vector_x, only : hvec_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, hnk_pk, hn(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 = 1, npg
00032 do itg = 1, ntg
00033 do irg = 1, nrg
00034 aijaij_trpBH(irg,itg,ipg) = 0.0d0
00035 hn(1) = hvec_xg(irg,itg,ipg,1)/hrg(irg)
00036 hn(2) = hvec_xg(irg,itg,ipg,2)/hrg(irg)
00037 hn(3) = hvec_xg(irg,itg,ipg,3)/hrg(irg)
00038 hnk_pk = hn(1)*p(1) + hn(2)*p(2) + hn(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)*hn(m)
00044 end do
00045 end do
00046 end do
00047
00048 do i = 1, 3
00049 do j = 1, 3
00050
00051 aij_trpBH(irg,itg,ipg,i,j) = fac/hrg(irg)**3.0d0 &
00052 & * (gm(i,j) - 3.0d0*hn(i)*hn(j))&
00053 & + fac_p/hrg(irg)**2.0d0 &
00054 & *(p(i)*hn(j) + p(j)*hn(i) &
00055 & - hnk_pk*(gm(i,j) - hn(i)*hn(j))) &
00056 & + fac_s/hrg(irg)**3.0d0 &
00057 & *0.5d0*(hn(i)*eps_s(j) &
00058 & + hn(j)*eps_s(i))
00059
00060 aijaij_trpBH(irg,itg,ipg) = aijaij_trpBH(irg,itg,ipg) &
00061 & + aij_trpBH(irg,itg,ipg,i,j)**2.0d0
00062 end do
00063 end do
00064 if (aijaij_trpBH(irg,itg,ipg) /= 0.0d0) info = 1
00065 end do
00066 end do
00067 end do
00068
00069 if (info /= 1) write(6,*) ' ### Warning Aij_trpBH = 0 *** '
00070
00071 end subroutine excurve_TrpBH