00001
00002
00003 module radial_green_fn_grav_bhex_nh
00004 use phys_constant, only : long
00005 use grid_parameter, only : nrg, nlg, rgin, rgout
00006 use coordinate_grav_r, only : rg, rginv, hrg, hrginv
00007 use make_array_3d
00008 implicit none
00009 real(long), pointer :: hgfn_nh(:,:,:), gfnsf_nh(:,:,:)
00010 contains
00011 subroutine allocate_hgfn_bhex_nh
00012 implicit none
00013 call alloc_array3d(hgfn_nh,1,nrg,0,nlg,0,nrg)
00014 call alloc_array3d(gfnsf_nh,0,nlg,0,nrg,1,4)
00015 end subroutine allocate_hgfn_bhex_nh
00016
00017
00018
00019
00020
00021
00022
00023
00024 subroutine calc_hgfn_bhex_nh
00025 implicit none
00026 integer :: ir, irr, il
00027 real(long) :: bhrad, bhradinv, bhsq
00028 real(long) :: radext, radextinv, radsq
00029 real(long) :: fac1, fac2, fac3, dil1, dil2
00030
00031 do ir = 0, nrg
00032 do il = 0, nlg
00033 do irr = 1, nrg
00034 hgfn_nh(irr,il,ir) = 0.d0
00035 end do
00036 end do
00037 end do
00038
00039
00040
00041 bhrad = rgin
00042 bhradinv = 1.0d0/rgin
00043 radext = rgout
00044 radextinv = 1.0d0/rgout
00045
00046 do ir = 0, nrg
00047 do irr = 1, nrg
00048 if (hrg(irr).lt.rg(ir)) then
00049 do il = 0, nlg
00050 hgfn_nh(irr,il,ir) = hrg(irr)**il/rg(ir)**(il+1)
00051 end do
00052 end if
00053 if (hrg(irr).ge.rg(ir)) then
00054 do il = 0, nlg
00055
00056 hgfn_nh(irr,il,ir) = rg(ir)**il/hrg(irr)**(il+1)
00057 end do
00058 end if
00059 end do
00060 end do
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070 bhrad = rgin
00071 bhradinv = 1.0d0/rgin
00072 radext = rgout
00073 radextinv = 1.0d0/rgout
00074 bhsq = bhrad**2
00075 radsq = radext**2
00076
00077
00078
00079
00080
00081
00082
00083 do ir = 0, nrg
00084
00085 il = 0
00086 gfnsf_nh(il,ir,1) = - dble(2*il+1)/dble(il+1) &
00087 & *bhrad*(bhrad*rginv(ir))**(il+1)
00088 gfnsf_nh(il,ir,2) = 0.0d0
00089 gfnsf_nh(il,ir,3) = 0.0d0
00090 gfnsf_nh(il,ir,4) = - dble(il+1)
00091
00092 do il = 1, nlg
00093
00094 gfnsf_nh(il,ir,1) = - dble(2*il+1)/dble(il+1) &
00095 & *bhrad*(bhrad*rginv(ir))**(il+1)
00096 gfnsf_nh(il,ir,2) = 0.0d0
00097 gfnsf_nh(il,ir,3) = 0.0d0
00098 gfnsf_nh(il,ir,4) = 0.0d0
00099
00100 end do
00101 end do
00102
00103 end subroutine calc_hgfn_bhex_nh
00104 end module radial_green_fn_grav_bhex_nh