    Program g07bffe

!     G07BFF Example Program Text

!     Mark 24 Release. NAG Copyright 2012.

!     .. Use Statements ..
      Use nag_library, Only: g07bff, nag_wp
!     .. Implicit None Statement ..
      Implicit None
!     .. Parameters ..
      Integer, Parameter               :: nin = 5, nout = 6
!     .. Local Scalars ..
      Real (Kind=nag_wp)               :: beta, ll, xi
      Integer                          :: ifail, n, optopt
!     .. Local Arrays ..
      Real (Kind=nag_wp)               :: asvc(4), obsvc(4)
      Real (Kind=nag_wp), Allocatable  :: y(:)
!     .. Executable Statements ..
      Write (nout,*) 'G07BFF Example Program Results'
      Write (nout,*)

!     Skip header
      Read (nin,*)

!     Read in problem size and control parameters
      Read (nin,*) n, optopt

      Allocate (y(n))

!     Read in data
      Read (nin,*) y(1:n)

!     Calculate the GPD parameter estimates
      ifail = 1
      Call g07bff(n,y,optopt,xi,beta,asvc,obsvc,ll,ifail)
      If (ifail/=0) Then
        If (ifail/=6 .And. ifail/=7 .And. ifail/=8) Then
          Write (*,99997) '** G07BFF returned with IFAIL = ', ifail
          Go To 100
        End If
      End If

!     Display parameter estimates
      Write (nout,*) 'Parameter estimates'
      Write (nout,Fmt=99998) 'xi            ', xi
      Write (nout,Fmt=99998) 'beta          ', beta
      Write (nout,*)

!     Display parameter distribution
      If (optopt>0) Then
        If (ifail==7 .Or. ifail==8) Then
          Write (nout,Fmt=99999) 'Invalid observed distribution'
        Else
          Write (nout,*) 'Observed distribution'
          Write (nout,Fmt=99998) 'Var(xi)         ', obsvc(1)
          Write (nout,Fmt=99998) 'Var(beta)       ', obsvc(4)
          Write (nout,Fmt=99998) 'Covar(xi,beta)  ', obsvc(2)
          Write (nout,Fmt=99998) 'Final log-likelihood:', ll
        End If
        Write (nout,*)

      Else
        If (ifail==6 .Or. ifail==7) Then
          Write (nout,Fmt=99999) 'Invalid asymptotic distribution'
        Else
          Write (nout,*) 'Asymptotic distribution'
          Write (nout,Fmt=99998) 'Var(xi)         ', asvc(1)
          Write (nout,Fmt=99998) 'Var(beta)       ', asvc(4)
          Write (nout,Fmt=99998) 'Covar(xi,beta)  ', asvc(2)
        End If
      End If

100   Continue

99999 Format (1X,A)
99998 Format (1X,A,1X,E14.6)
99997 Format (1X,A,I0)
    End Program g07bffe
