00001 subroutine excurve_TrpBH_gridpoint_mpt(impt)
00002 use phys_constant, only : long, nmpt
00003 use grid_parameter, only : nrg, ntg, npg
00004 use def_metric_pBH, only : aij_trpBH_grid, aijaij_trpBH_grid
00005 use def_binary_parameter, only : dis, sepa
00006 use def_bh_parameter, only : mom_pBH, spin_pBH, mass_pBH
00007 use def_vector_x, only : vec_xg
00008 implicit none
00009 integer :: impt, impt_bh1, impt_bh2, info = 0
00010 integer :: irg, itg, ipg, i, j, k, l, m
00011 real(long) :: dis_bh1, dis_bh2
00012 real(long) :: vx_bh1(3), vx_bh2(3), n_bh1(3), n_bh2(3), r_bh1, r_bh2
00013 real(long) :: p_bh1(3), p_bh2(3), s_bh1(3), s_bh2(3)
00014 real(long) :: fac_bh1, fac_bh2, fac_p, fac_s, nk_pk_bh1, nk_pk_bh2, gamma
00015 real(long) :: epsi(3,3,3), eps_s_n_bh1(3), eps_s_n_bh2(3)
00016
00017
00018 fac_p = 3.0d0/2.0d0
00019 fac_s = 6.0d0
00020 epsi(1:3,1:3,1:3) = 0.0d0
00021 epsi(1,2,3) = 1.0d0
00022 epsi(2,3,1) = 1.0d0
00023 epsi(3,1,2) = 1.0d0
00024 epsi(2,1,3) = -1.0d0
00025 epsi(1,3,2) = -1.0d0
00026 epsi(3,2,1) = -1.0d0
00027
00028 if (impt.eq.1) then ; impt_bh1 = 1 ; impt_bh2 = 2 ; end if
00029 if (impt.eq.2) then ; impt_bh1 = 2 ; impt_bh2 = 1 ; end if
00030 if (impt.eq.nmpt) then ; impt_bh1 = 1 ; impt_bh2 = 2 ; end if
00031
00032 call copy_def_binary_parameter_from_mpt(impt_bh1)
00033 call copy_def_bh_parameter_from_mpt(impt_bh1)
00034 dis_bh1 = 0.0d0
00035 if (impt.eq.nmpt) dis_bh1 = - dis
00036 p_bh1(1) = mom_pBH(1) ; s_bh1(1) = spin_pBH(1)
00037 p_bh1(2) = mom_pBH(2) ; s_bh1(2) = spin_pBH(2)
00038 p_bh1(3) = mom_pBH(3) ; s_bh1(3) = spin_pBH(3)
00039 fac_bh1 = 3.0d0*dsqrt(3.0d0)*mass_pBH**2.0d0/4.0d0
00040 call copy_def_binary_parameter_from_mpt(impt_bh2)
00041 call copy_def_bh_parameter_from_mpt(impt_bh2)
00042 dis_bh2 = sepa
00043 if (impt.eq.nmpt) dis_bh2 = dis
00044 p_bh2(1) = - mom_pBH(1) ; s_bh2(1) = - spin_pBH(1)
00045 p_bh2(2) = - mom_pBH(2) ; s_bh2(2) = - spin_pBH(2)
00046 p_bh2(3) = mom_pBH(3) ; s_bh2(3) = spin_pBH(3)
00047 fac_bh2 = 3.0d0*dsqrt(3.0d0)*mass_pBH**2.0d0/4.0d0
00048
00049 call copy_def_binary_parameter_from_mpt(impt)
00050 call copy_def_bh_parameter_from_mpt(impt)
00051
00052 aijaij_trpBH_grid(0:nrg,0:ntg,0:npg) = 0.0d0
00053
00054 do ipg = 0, npg
00055 do itg = 0, ntg
00056 do irg = 1, nrg
00057
00058 vx_bh1(1) = vec_xg(irg,itg,ipg,1) - dis_bh1
00059 vx_bh1(2) = vec_xg(irg,itg,ipg,2)
00060 vx_bh1(3) = vec_xg(irg,itg,ipg,3)
00061 r_bh1 = dsqrt(vx_bh1(1)**2 + vx_bh1(2)**2 + vx_bh1(3)**2)
00062 n_bh1(1) = vx_bh1(1)/r_bh1
00063 n_bh1(2) = vx_bh1(2)/r_bh1
00064 n_bh1(3) = vx_bh1(3)/r_bh1
00065 nk_pk_bh1 = n_bh1(1)*p_bh1(1)+n_bh1(2)*p_bh1(2)+n_bh1(3)*p_bh1(3)
00066
00067 vx_bh2(1) = vec_xg(irg,itg,ipg,1) - dis_bh2
00068 vx_bh2(2) = vec_xg(irg,itg,ipg,2)
00069 vx_bh2(3) = vec_xg(irg,itg,ipg,3)
00070 r_bh2 = dsqrt(vx_bh2(1)**2 + vx_bh2(2)**2 + vx_bh2(3)**2)
00071 n_bh2(1) = vx_bh2(1)/r_bh2
00072 n_bh2(2) = vx_bh2(2)/r_bh2
00073 n_bh2(3) = vx_bh2(3)/r_bh2
00074 nk_pk_bh2 = n_bh2(1)*p_bh2(1)+n_bh2(2)*p_bh2(2)+n_bh2(3)*p_bh2(3)
00075
00076 do k = 1, 3
00077 eps_s_n_bh1(k) = 0.0d0
00078 eps_s_n_bh2(k) = 0.0d0
00079 do l = 1, 3
00080 do m = 1, 3
00081 eps_s_n_bh1(k) = eps_s_n_bh1(k) + epsi(k,l,m)*s_bh1(l)*n_bh1(m)
00082 eps_s_n_bh2(k) = eps_s_n_bh2(k) + epsi(k,l,m)*s_bh2(l)*n_bh2(m)
00083 end do
00084 end do
00085 end do
00086
00087 do i = 1, 3
00088 do j = 1, 3
00089 if (i == j) then
00090 gamma = 1.0d0
00091 else
00092 gamma = 0.0d0
00093 end if
00094
00095 aij_trpBH_grid(irg,itg,ipg,i,j) = &
00096 & fac_bh1/r_bh1**3.0d0 &
00097 & *(gamma - 3.0d0*n_bh1(i)*n_bh1(j))&
00098 & + fac_p/r_bh1**2.0d0 &
00099 & *(p_bh1(i)*n_bh1(j) + p_bh1(j)*n_bh1(i) &
00100 & - nk_pk_bh1*(gamma - n_bh1(i)*n_bh1(j))) &
00101 & + fac_s/r_bh1**3.0d0 &
00102 & *0.5d0*(n_bh1(i)*eps_s_n_bh1(j) &
00103 & + n_bh1(j)*eps_s_n_bh1(i)) &
00104
00105 & + fac_bh2/r_bh2**3.0d0 &
00106 & *(gamma - 3.0d0*n_bh2(i)*n_bh2(j)) &
00107 & + fac_p/r_bh2**2.0d0 &
00108 & *(p_bh2(i)*n_bh2(j) + p_bh2(j)*n_bh2(i) &
00109 & - nk_pk_bh2*(gamma - n_bh2(i)*n_bh2(j))) &
00110 & + fac_s/r_bh2**3.0d0 &
00111 & *0.5d0*(n_bh2(i)*eps_s_n_bh2(j) &
00112 & + n_bh2(j)*eps_s_n_bh2(i))
00113
00114 aijaij_trpBH_grid(irg,itg,ipg) = aijaij_trpBH_grid(irg,itg,ipg) &
00115 & + aij_trpBH_grid(irg,itg,ipg,i,j)**2.0d0
00116 end do
00117 end do
00118 if (aijaij_trpBH_grid(irg,itg,ipg) /= 0.0d0) info = 1
00119 end do
00120 end do
00121 end do
00122
00123 aijaij_trpBH_grid(0,0:ntg,0:npg) = 1.0d+40
00124
00125 if (info /= 1) write(6,*) ' ### Warning Aij_trpBH = 0 *** '
00126
00127 end subroutine excurve_TrpBH_gridpoint_mpt