Blame view

fvn_fnlib/beskn.f90 878 Bytes
f6bacaf83   cwaterkeyn   ChW 11/09: ANSI c...
1
  function beskn(n,x)
8d883e8a1   wdaniau   Integration of ki...
2
      use fvn_common
e1aefab23   daniau   git-svn-id: https...
3
4
5
6
7
      implicit none
      ! This function compute the rank n Bessel Y function
      ! using recurrence relation :
      ! Kn+1(x)=2n/x * Kn(x) + Kn-1(x)
      !
f6bacaf83   cwaterkeyn   ChW 11/09: ANSI c...
8
      real(sp_kind) :: beskn
e1aefab23   daniau   git-svn-id: https...
9
      integer :: n
f6bacaf83   cwaterkeyn   ChW 11/09: ANSI c...
10
      real(sp_kind) :: x
e1aefab23   daniau   git-svn-id: https...
11

f6bacaf83   cwaterkeyn   ChW 11/09: ANSI c...
12
13
      real(sp_kind),external :: besk0,besk1
      real(sp_kind) :: two_on_x,bknm1,bkn,bktmp
e1aefab23   daniau   git-svn-id: https...
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
      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