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

    real(sp_kind),external :: besk0,besk1
    real(sp_kind) :: two_on_x,bknm1,bkn,bktmp
    integer :: i

    if (n==0) then
        beskn=besk0(x)
        return
    end if
    if (n==1) then
        beskn=besk1(x)
        return
    end if

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

    two_on_x=2./x
    bknm1=besk0(x)
    bkn=besk1(x)

    do i=1,n-1
        bktmp=two_on_x*bkn*i+bknm1
        bknm1=bkn
        bkn=bktmp
    end do
    beskn=bktmp
end function