    PROGRAM f08qlfe

!      F08QLF Example Program Text

!      Mark 23 Release. NAG Copyright 2011.

!      .. Use Statements ..
       USE nag_library, ONLY : dlange => f06raf, dtrevc, dtrsna, nag_wp, x02ajf
!      .. Implicit None Statement ..
       IMPLICIT NONE
!      .. Parameters ..
       INTEGER, PARAMETER              :: nin = 5, nout = 6
!      .. Local Scalars ..
       REAL (KIND=nag_wp)              :: eps, tnorm
       INTEGER                         :: i, info, ldt, ldvl, ldvr, ldwork, m, n
!      .. Local Arrays ..
       REAL (KIND=nag_wp), ALLOCATABLE :: s(:), sep(:), t(:,:), vl(:,:),       &
                                          vr(:,:), work(:,:)
       INTEGER, ALLOCATABLE            :: iwork(:)
       LOGICAL                         :: select(1)
!      .. Executable Statements ..
       WRITE (nout,*) 'F08QLF Example Program Results'
       WRITE (nout,*)
!      Skip heading in data file
       READ (nin,*)
       READ (nin,*) n
       ldt = n
       ldvl = n
       ldvr = n
       ldwork = n
       ALLOCATE (s(n),sep(n),t(ldt,n),vl(ldvl,n),vr(ldvr,n),work(ldwork,n+6), &
          iwork(2*n-1))

!      Read T from data file

       READ (nin,*) (t(i,1:n),i=1,n)

!      Calculate the left and right eigenvectors of T

!      The NAG name equivalent of dtrevc is f08qkf
       CALL dtrevc('Both','All',select,n,t,ldt,vl,ldvl,vr,ldvr,n,m,work,info)

!      Estimate condition numbers for all the eigenvalues and right
!      eigenvectors of T

!      The NAG name equivalent of dtrsna is f08qlf
       CALL dtrsna('Both','All',select,n,t,ldt,vl,ldvl,vr,ldvr,s,sep,n,m,work, &
          ldwork,iwork,info)

!      Print condition numbers of eigenvalues and right eigenvectors

       WRITE (nout,*) 'S'
       WRITE (nout,99999) s(1:m)
       WRITE (nout,*)
       WRITE (nout,*) 'SEP'
       WRITE (nout,99999) sep(1:m)

!      Calculate approximate error estimates (using the 1-norm)

       eps = x02ajf()
!      f06raf is the NAG name equivalent of the LAPACK auxiliary dlange
       tnorm = dlange('1-norm',n,n,t,ldt,work)
       WRITE (nout,*)
       WRITE (nout,*) 'Approximate error estimates for eigenvalues ', &
          'of T (machine-dependent)'
       WRITE (nout,99999) (eps*tnorm/s(i),i=1,m)
       WRITE (nout,*)
       WRITE (nout,*) 'Approximate error estimates for right ', &
          'eigenvectors of T (machine-dependent)'
       WRITE (nout,99999) (eps*tnorm/sep(i),i=1,m)

99999  FORMAT ((3X,1P,7E11.1))
    END PROGRAM f08qlfe
