00001 subroutine calc_radial_green_fn_hrethadv(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_hrethadv
00006 implicit none
00007 integer :: il, im, ir, irr, irini
00008 real(8) :: omega, omegam, omegam_rg, omegam_hrg, omegam_rgout, om2lp1
00009 real(8) :: rtpi2 = 1.253314154753822d0, rgoutsq, small = 1.0d-13
00010 real(8) :: x, xx, xnu, xrj, xrjp, xry, xryp
00011 real(8) :: sbj, sj, sby, sy
00012 real(8) :: sbjp, sjp, sbyp, syp
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 bsjy_hrha(:,:,:,:) = 0.0d0
00026
00027 irini = 0
00028 if (rg(0).le.small) then
00029 irini = 1
00030 ir = 0
00031 il = 0
00032 do irr = 1, nrg
00033 bsjy_hrha(irr,il,0,ir) = 1.d0/hrg(irr)
00034 end do
00035 end if
00036
00037 do ir = irini, nrg
00038 do irr = 1, nrg
00039 if (hrg(irr).lt.rg(ir)) then
00040 do il = 0, nlg
00041 do im = 0, il
00042 if(im.eq.0)then
00043 bsjy_hrha(irr,il,im,ir) = hrg(irr)**il/rg(ir)**(il+1)
00044 else
00045 omegam = dble(im)*omega
00046 omegam_hrg = omegam*hrg(irr)
00047 call sphbess(omegam_hrg,il,sj,sy)
00048 sbj=sj
00049 omegam_rg = omegam*rg(ir)
00050 call sphbess(omegam_rg,il,sj,sy)
00051 sby=sy
00052 bsjy_hrha(irr,il,im,ir) = -omegam*(2.d0*dble(il)+1.d0)*sbj*sby
00053 endif
00054 end do
00055 end do
00056 endif
00057 if (hrg(irr).ge.rg(ir)) then
00058 do il = 0, nlg
00059 do im = 0, il
00060 if(im.eq.0)then
00061 bsjy_hrha(irr,il,im,ir) = rg(ir)**il/hrg(irr)**(il+1)
00062 else
00063 omegam = dble(im)*omega
00064 omegam_rg = omegam*rg(ir)
00065 call sphbess(omegam_rg,il,sj,sy)
00066 sbj=sj
00067 omegam_hrg = omegam*hrg(irr)
00068 call sphbess(omegam_hrg,il,sj,sy)
00069 sby=sy
00070 bsjy_hrha(irr,il,im,ir) = -omegam*(2.d0*dble(il)+1.d0)*sbj*sby
00071 endif
00072 end do
00073 end do
00074 endif
00075 end do
00076 end do
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086 sbsjy_hrha(:,:,:) = 0.0d0
00087 sbsjyp_hrha(:,:,:) = 0.0d0
00088
00089 irini = 0
00090
00091 if (rg(0).le.small) then
00092 irini = 1
00093 sbsjy_hrha(0,0,0) = 1.0d0/rg(nrg)
00094 sbsjyp_hrha(0,0,0)= -1.0d0/(rg(nrg)*rg(nrg))
00095 end if
00096
00097 do il = 0, nlg
00098 do im = 0, il
00099 do ir = irini, nrg
00100 if(im.eq.0)then
00101 sbsjy_hrha(il,im,ir) = rg(ir)**il/rg(nrg)**(il+1)
00102 sbsjyp_hrha(il,im,ir) = -(dble(il)+1.d0)*rg(ir)**il/rg(nrg)**(il+2)
00103 else
00104 omegam = dble(im)*omega
00105 omegam_rgout = omegam*rg(nrg)
00106 om2lp1 = omegam*(2.d0*dble(il)+1.d0)
00107 call sphbess_and_dx(omegam_rgout,il,sj,sy,sjp,syp)
00108 sby = sy
00109 sbyp = omegam*syp
00110 omegam_rg = omegam*rg(ir)
00111 call sphbess(omegam_rg,il,sj,sy)
00112 sbj = sj
00113 sbsjy_hrha(il,im,ir) = - om2lp1*sbj*sby
00114 sbsjyp_hrha(il,im,ir) = - om2lp1*sbj*sbyp
00115 endif
00116 enddo
00117 enddo
00118 enddo
00119
00120 rgoutsq = rg(nrg)*rg(nrg)
00121 sbsjy_hrha(:,:,:) = rgoutsq*sbsjy_hrha(:,:,:)
00122 sbsjyp_hrha(:,:,:) = rgoutsq*sbsjyp_hrha(:,:,:)
00123
00124 end subroutine calc_radial_green_fn_hrethadv