besyn.f90 878 Bytes
function besyn(n,x)
    use fvn_common
    implicit none
    ! This function compute the rank n Bessel Y function
    ! using recurrence relation :
    ! Yn+1(x)=2n/x * Yn(x) - Yn-1(x)
    !
    real(sp_kind) :: besyn
    integer :: n
    real(sp_kind) :: x

    real(sp_kind),external :: besy0,besy1
    real(sp_kind) :: two_on_x,bynm1,byn,bytmp
    integer :: i

    if (n==0) then
        besyn=besy0(x)
        return
    end if
    if (n==1) then
        besyn=besy1(x)
        return
    end if

    if (n < 0) then
        write(*,*) "Error in besyn, n must be >= 0"
        stop
    end if
    if (x <= 0.) then
        write(*,*) "Error in besyn, x must be strictly positive"
    end if

    two_on_x=2./x
    bynm1=besy0(x)
    byn=besy1(x)

    do i=1,n-1
        bytmp=two_on_x*byn*i-bynm1
        bynm1=byn
        byn=bytmp
    end do
    besyn=bytmp
end function