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

    real(8),external :: dbesy0,dbesy1
    real(8) :: two_on_x,bynm1,byn,bytmp
    integer :: i

    if (n==0) then
        dbesyn=dbesy0(x)
        return
    end if
    if (n==1) then
        dbesyn=dbesy1(x)
        return
    end if
    if (n < 0) then
        write(*,*) "Error in dbesyn, n must be >= 0"
        stop
    end if
    if (x <= 0.) then
        write(*,*) "Error in dbesyn, x must be strictly positive"
    end if

    two_on_x=2./x
    bynm1=dbesy0(x)
    byn=dbesy1(x)

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