    Program f01bvfe

!     F01BVF Example Program Text

!     Mark 24 Release. NAG Copyright 2012.

!     .. Use Statements ..
      Use nag_library, Only: dsbtrd, dstebz, f01buf, f01bvf, nag_wp
!     .. Implicit None Statement ..
      Implicit None
!     .. Parameters ..
      Real (Kind=nag_wp), Parameter    :: zero = 0.0_nag_wp
      Integer, Parameter               :: inc1 = 1, nin = 5, nout = 6
!     .. Local Scalars ..
      Real (Kind=nag_wp)               :: abstol
      Integer                          :: i, ifail, info, j, k, lda, ldb, ldv, &
                                          m, m1, m2, m3, ma1, mb1, n, nsplit
!     .. Local Arrays ..
      Real (Kind=nag_wp), Allocatable  :: a(:,:), b(:,:), d(:), e(:), r(:),    &
                                          v(:,:), w(:), work(:)
      Integer, Allocatable             :: iblock(:), isplit(:), iwork(:)
!     .. Intrinsic Procedures ..
      Intrinsic                        :: max
!     .. Executable Statements ..
      Write (nout,*) 'F01BVF Example Program Results'
!     Skip heading in data file
      Read (nin,*)
      Read (nin,*) n, ma1, mb1
      lda = ma1
      ldb = mb1
      ldv = ma1 + mb1 - 2
      m3 = 3*ma1 + mb1 - 4
      Allocate (a(lda,n),b(ldb,n),d(n),e(n),r(n),v(ldv,m3),w(m3),work(4*n), &
        iblock(n),isplit(n),iwork(3*n))
      Read (nin,*)((a(j,i),j=max(1,ma1+1-i),ma1),i=1,n)
      Read (nin,*)((b(j,i),j=max(1,mb1+1-i),mb1),i=1,n)
      k = n/2

!     ifail: behaviour on error exit
!             =0 for hard exit, =1 for quiet-soft, =-1 for noisy-soft
      ifail = 0
      Call f01buf(n,mb1,k,b,ldb,w,ifail)

      ifail = 0
      Call f01bvf(n,ma1,mb1,m3,k,a,lda,b,ldb,v,ldv,w,ifail)

      info = 0
!     The NAG name equivalent of dsbtrd is f08hef
      Call dsbtrd('N','U',n,ma1-1,a,lda,d,e,w,inc1,work,info)

      abstol = zero
      Read (nin,*) m1, m2

      info = 0
!     The NAG name equivalent of dstebz is f08jjf
      Call dstebz('I','E',n,zero,zero,m1,m2,abstol,d,e,m,nsplit,r,iblock, &
        isplit,work,iwork,info)

      Write (nout,*)
      Write (nout,*) 'Selected eigenvalues'
      Write (nout,99999) r(1:m)

99999 Format (1X,8F9.4)
    End Program f01bvfe
