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