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