*     S30JBF Example Program Text
*     Mark 22 Release. NAG Copyright 2007.
*     .. Parameters ..
      INTEGER          NIN, NOUT
      PARAMETER        (NIN=5,NOUT=6)
      INTEGER          LDP, MMAX, NMAX
      PARAMETER        (LDP=10,MMAX=10,NMAX=10)
*     .. Local Scalars ..
      DOUBLE PRECISION JVOL, LAMBDA, R, S, SIGMA
      INTEGER          I, IFAIL, J, M, N
      CHARACTER        PUT
*     .. Local Arrays ..
      DOUBLE PRECISION CHARM(LDP,NMAX), COLOUR(LDP,NMAX),
     +                 DELTA(LDP,NMAX), GAMMA(LDP,NMAX), P(LDP,NMAX),
     +                 RHO(LDP,NMAX), SPEED(LDP,NMAX), T(NMAX),
     +                 THETA(LDP,NMAX), VANNA(LDP,NMAX), VEGA(LDP,NMAX),
     +                 VOMMA(LDP,NMAX), X(MMAX), ZOMMA(LDP,NMAX)
*     .. External Subroutines ..
      EXTERNAL         S30JBF
*     .. Executable Statements ..
      WRITE (NOUT,*) 'S30JBF Example Program Results'
      WRITE (NOUT,*)
      WRITE (NOUT,*) 'Merton Jump-Diffusion Model'
*     Skip heading in data file
      READ (NIN,*)
*     Read problem parameters.
      READ (NIN,*) PUT
      READ (NIN,*) LAMBDA
      READ (NIN,*) S, SIGMA, R, JVOL
      READ (NIN,*) M, N
*
      IF (M.LE.MMAX .AND. N.LE.NMAX) THEN
*        Read array of strike/exercise prices, X
         READ (NIN,*) (X(I),I=1,M)
*        Read array of times to expiry
         READ (NIN,*) (T(I),I=1,N)
*
         IFAIL = 1
*
         CALL S30JBF(PUT,M,N,X,S,T,SIGMA,R,LAMBDA,JVOL,P,LDP,DELTA,
     +               GAMMA,VEGA,THETA,RHO,VANNA,CHARM,SPEED,COLOUR,
     +               ZOMMA,VOMMA,IFAIL)
*
         IF (IFAIL.EQ.0) THEN
            IF (PUT.EQ.'C' .OR. PUT.EQ.'c') THEN
               WRITE (NOUT,*) 'European Call :'
            ELSE IF (PUT.EQ.'P' .OR. PUT.EQ.'p') THEN
               WRITE (NOUT,*) 'European Put :'
            END IF
*
            WRITE (NOUT,'(A,1X,F8.4)') '  Spot       = ', S
            WRITE (NOUT,'(A,1X,F8.4)') '  Volatility = ', SIGMA
            WRITE (NOUT,'(A,1X,F8.4)') '  Rate       = ', R
            WRITE (NOUT,'(A,1X,F8.4)') '  Jumps      = ', LAMBDA
            WRITE (NOUT,'(A,1X,F8.4)') '  Jump vol   = ', JVOL
*
            WRITE (NOUT,*)
            DO 60 J = 1, N
               WRITE (NOUT,*)
               WRITE (NOUT,99999) T(J)
               WRITE (NOUT,*)
     +           '  Strike    Price    Delta    Gamma     Vega    Theta'
     +           //'      Rho'
               DO 20 I = 1, M
                  WRITE (NOUT,99998) X(I), P(I,J), DELTA(I,J),
     +              GAMMA(I,J), VEGA(I,J), THETA(I,J), RHO(I,J)
   20          CONTINUE
*
               WRITE (NOUT,*)
     +  '  Strike    Price    Vanna    Charm    Speed   Colour    Zomma'
     +           //'    Vomma'
               DO 40 I = 1, M
                  WRITE (NOUT,99997) X(I), P(I,J), VANNA(I,J),
     +              CHARM(I,J), SPEED(I,J), COLOUR(I,J), ZOMMA(I,J),
     +              VOMMA(I,J)
   40          CONTINUE
*
   60       CONTINUE
         ELSE
            WRITE (NOUT,*)
            WRITE (NOUT,99996) IFAIL
         END IF
      END IF
*
99999 FORMAT (1X,'Time to Expiry : ',1X,F8.4)
99998 FORMAT (1X,7(F8.4,1X))
99997 FORMAT (1X,8(F8.4,1X))
99996 FORMAT (1X,' ** S30JBF returned with IFAIL = ',I5)
      END
