00001 subroutine calc_radial_green_fn_hret_mi_hadv(omega)
00002 use coordinate_grav_r, only : rg, hrg
00003 use phys_constant, only : long, pi
00004 use grid_parameter, only : nrg, npg, ntg, nlg
00005 use radial_green_fn_hret_mi_hadv
00006 implicit none
00007 integer :: il, im, ir, irr
00008 real(8) :: omega, omegam, omegam_rg, omegam_hrg, om2np1
00009 real(8) :: rtpi2 = 1.253314154753822d0
00010 real(8) :: x, xx, xnu, xrj, xrjp, xry, xryp
00011 real(8) :: sbj, sj
00012 real(8) :: sby, sy, syp
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 bsjy_hrmiha(:,:,:,:) = 0.0d0
00026
00027 do ir = 1, nrg
00028 do irr = 1, nrg
00029 if (hrg(irr).lt.rg(ir)) then
00030 do il = 0, nlg
00031 do im = 0, il
00032 if(im.eq.0)then
00033
00034 bsjy_hrmiha(irr,il,im,ir) = 0.0d0
00035 else
00036 omegam = dble(im)*omega
00037 omegam_hrg = omegam*hrg(irr)
00038 call sphbess(omegam_hrg,il,sj,sy)
00039 sbj=sj
00040 omegam_rg = omegam*rg(ir)
00041 call sphbess(omegam_rg,il,sj,sy)
00042 sby=sj
00043 bsjy_hrmiha(irr,il,im,ir) = -omegam*(2.d0*dble(il)+1.d0)*sbj*sby
00044 endif
00045 end do
00046 end do
00047 endif
00048 if (hrg(irr).ge.rg(ir)) then
00049 do il = 0, nlg
00050 do im = 0, il
00051 if(im.eq.0)then
00052
00053 bsjy_hrmiha(irr,il,im,ir) = 0.0d0
00054 else
00055 omegam = dble(im)*omega
00056 omegam_rg = omegam*rg(ir)
00057 call sphbess(omegam_rg,il,sj,sy)
00058 sbj=sj
00059 omegam_hrg = omegam*hrg(irr)
00060 call sphbess(omegam_hrg,il,sj,sy)
00061 sby=sj
00062 bsjy_hrmiha(irr,il,im,ir) = -omegam*(2.d0*dble(il)+1.d0)*sbj*sby
00063 endif
00064 end do
00065 end do
00066 endif
00067 end do
00068 end do
00069
00070
00071 ir = 0
00072 il = 0
00073 do irr = 1, nrg
00074 bsjy_hrmiha(irr,il,0,ir) = 1.d0/hrg(irr)
00075 end do
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085 do il = 0,nlg
00086 do im = 1,il
00087 omegam=dble(im)*omega
00088 x = omegam*rg(nrg)
00089 xnu = dble(il)+0.5d0
00090 om2np1=omegam*(2.d0*dble(il)+1.d0)
00091 call bessjy(x,xnu,xrj,xry,xrjp,xryp)
00092 sy = xrj*rtpi2/sqrt(x)
00093 syp = rtpi2/sqrt(x)*(xrjp - xrj*0.5d0/x)
00094 do ir = 1,nrg
00095 if(im.eq.0)then
00096 sbsjy_hrmiha(il,im,ir) = rg(ir)**il/rg(nrg)**(il+1)
00097 sbsjyp_hrmiha(il,im,ir) = -(dble(il)+1.d0)*rg(ir)**il/rg(nrg)**(il+2)
00098 else
00099 xx=omegam*rg(ir)
00100 call bessjy(xx,xnu,xrj,xry,xrjp,xryp)
00101 sj = xrj*rtpi2/sqrt(xx)
00102 sbsjy_hrmiha(il,im,ir) = om2np1*sj*sy
00103 sbsjyp_hrmiha(il,im,ir) = omega*om2np1*sj*syp
00104 endif
00105 enddo
00106
00107
00108 sbsjy_hrmiha(0,0,0) = 1./rg(nrg)
00109 sbsjyp_hrmiha(0,0,0)= -1.d0/( rg(nrg)*rg(nrg) )
00110 enddo
00111 enddo
00112
00113 end subroutine calc_radial_green_fn_hret_mi_hadv
00114