00001 subroutine reset_bh_boundary_AH
00002 use phys_constant, only : long
00003 use grid_parameter, only : nrg, ntg, npg, rgin
00004 use def_metric
00005 use def_bh_parameter, only : ome_bh, spin_bh, alph_bh
00006 use def_binary_parameter, only : sepa
00007 use def_metric_excurve_grid, only : tfkij_grid
00008 use def_vector_bh, only : vec_bh_cbh_xg, vec_bh_cm_phig, vec_bh_cbh_phig
00009 use make_array_2d
00010 use make_array_3d
00011 use interface_grdr_gridpoint_type0_nosym
00012 use interface_interpo_linear_type0_2Dsurf
00013 implicit none
00014 real(long), pointer :: sou_surf(:,:), dsou_surf(:,:)
00015 real(long), pointer :: psi_bhsurf(:,:), dpsi_bhsurf(:,:)
00016 real(long), pointer :: bvxyzd(:,:,:)
00017 real(long) :: work(2,2), deriv, dpsidr
00018 real(long) :: Aij_surf, Aij_sisj, si, sj
00019 real(long) :: psigc, psigc3, psigcinv2
00020 real(long) :: vphi_cm, vphi_cbh
00021 integer :: itg, ipg, ii, jj
00022
00023 call alloc_array2d(psi_bhsurf, 0, ntg, 0, npg)
00024 call alloc_array2d(dpsi_bhsurf, 0, ntg, 0, npg)
00025 call alloc_array3d(bvxyzd,0,ntg,0,npg,1,3)
00026
00027 psi_bhsurf(0:ntg,0:npg) = psi(0,0:ntg,0:npg)
00028
00029 do ipg = 0, npg
00030 do itg = 0, ntg
00031 call grdr_gridpoint_type0_nosym(psi,deriv,0,itg,ipg)
00032 dpsi_bhsurf(itg,ipg) = deriv
00033 end do
00034 end do
00035
00036 do ipg = 0, npg
00037 do itg = 0, ntg
00038 psigc = psi(0,itg,ipg)
00039 psigc3 = psigc**3
00040 Aij_sisj = 0.0d0
00041 do ii = 1, 3
00042 do jj = 1, 3
00043 Aij_surf = tfkij_grid(0,itg,ipg,ii,jj)
00044 si = vec_bh_cbh_xg(itg,ipg,ii)/rgin
00045 sj = vec_bh_cbh_xg(itg,ipg,jj)/rgin
00046 Aij_sisj = Aij_sisj + Aij_surf*si*sj
00047 end do
00048 end do
00049 psi(0,itg,ipg) = 2.0d0*rgin*(-dpsi_bhsurf(itg,ipg) - 0.25d0*psigc3*Aij_sisj)
00050
00051 end do
00052 end do
00053 alps(0,0:ntg,0:npg) = alph_bh*psi(0,0:ntg,0:npg)
00054
00055
00056 do ii = 1,3
00057 do ipg = 0, npg
00058 do itg = 0, ntg
00059 psigc = psi(0,itg,ipg)
00060 psigcinv2 = 1.0d0/psigc**2
00061 si = vec_bh_cbh_xg(itg,ipg,ii)/rgin
00062 vphi_cm = vec_bh_cm_phig(itg,ipg,ii)
00063 vphi_cbh = vec_bh_cbh_phig(itg,ipg,ii)
00064 bvxyzd(itg,ipg,ii) = alph_bh*psigcinv2*si - ome_bh*vphi_cm - spin_bh*vphi_cbh
00065 end do
00066 end do
00067 end do
00068
00069 bvxd(0,0:ntg,0:npg) = bvxyzd(0:ntg,0:npg,1)
00070 bvyd(0,0:ntg,0:npg) = bvxyzd(0:ntg,0:npg,2)
00071 bvzd(0,0:ntg,0:npg) = bvxyzd(0:ntg,0:npg,3)
00072
00073 deallocate(bvxyzd)
00074 deallocate(psi_bhsurf)
00075 deallocate(dpsi_bhsurf)
00076 end subroutine reset_bh_boundary_AH