* G05PJF Example Program Text * * NAG COPYRIGHT 2008. * * .. Parameters .. INTEGER NIN, NOUT PARAMETER (NIN=5,NOUT=6) INTEGER MSEED, MSTATE PARAMETER (MSEED=1,MSTATE=633) INTEGER KMAX, LDV, IPMAX, IQMAX, NMAX, LR, LDX PARAMETER (KMAX=3,LDV=KMAX,IPMAX=2,IQMAX=2,NMAX=100,LR=600, + LDX=KMAX) * .. Local Scalars .. INTEGER GENID, I, IFAIL, II, IP, IQ, J, K, L, LSEED, + LSTATE, N, SUBID * .. Local Arrays .. DOUBLE PRECISION PHI(KMAX*KMAX*IPMAX), R(LR), + THETA(KMAX*KMAX*IQMAX), VAR(LDV,KMAX), + X(LDX,NMAX), XMEAN(KMAX) INTEGER SEED(MSEED), STATE(MSTATE) * .. External Subroutines .. EXTERNAL G05KFF, G05PJF * .. Executable Statements .. WRITE (NOUT,*) 'G05PJF Example Program Results' WRITE (NOUT,*) * Read data from a file * Skip heading READ (NIN,*) * Read in initial parameters READ (NIN,*) K, IP, IQ, N * Check the specified array limits IF (K.LE.0 .OR. K.GT.KMAX .OR. IP.LT.0 .OR. IP.GT.IPMAX .OR. + IQ.LT.0 .OR. IQ.GT.IQMAX .OR. N.LE.0 .OR. N.GT.NMAX) THEN WRITE (NOUT,99995) GO TO 160 END IF * Read in the AR parameters DO 40 L = 1, IP DO 20 I = 1, K II = (L-1)*K*K + I READ (NIN,*) (PHI(II+K*(J-1)),J=1,K) 20 CONTINUE 40 CONTINUE * Read in the MA parameters DO 80 L = 1, IQ DO 60 I = 1, K II = (L-1)*K*K + I READ (NIN,*) (THETA(II+K*(J-1)),J=1,K) 60 CONTINUE 80 CONTINUE * Read in the means READ (NIN,*) (XMEAN(I),I=1,K) * Read in the variance / covariance matrix DO 100 I = 1, K READ (NIN,*) (VAR(I,J),J=1,I) 100 CONTINUE * Initialize the seed SEED(1) = 1762543 * GENID and SUBID identify the base generator GENID = 1 SUBID = 1 * Initialize the generator to a repeatable sequence LSTATE = MSTATE LSEED = MSEED IFAIL = 1 CALL G05KFF(GENID,SUBID,SEED,LSEED,STATE,LSTATE,IFAIL) IF (IFAIL.NE.0) THEN WRITE (NOUT,99997) IFAIL GO TO 160 END IF * Generate the first realisation * Use MODE = 2 to set up R and generate values IFAIL = 1 CALL G05PJF(2,N,K,XMEAN,IP,PHI,IQ,THETA,VAR,LDV,R,LR,STATE,X,LDX, + IFAIL) IF (IFAIL.NE.0) THEN WRITE (NOUT,99996) IFAIL GO TO 160 END IF * Display the results WRITE (NOUT,*) WRITE (NOUT,*) ' Realisation Number 1' DO 120 I = 1, K WRITE (NOUT,99999) ' Series number ', I WRITE (NOUT,*) ' -------------' WRITE (NOUT,*) WRITE (NOUT,99998) (X(I,J),J=1,N) 120 CONTINUE * Generate a second realisation * Use MODE = 3 to reset the series and generate values IFAIL = 1 CALL G05PJF(3,N,K,XMEAN,IP,PHI,IQ,THETA,VAR,LDV,R,LR,STATE,X,LDX, + IFAIL) IF (IFAIL.NE.0) THEN WRITE (NOUT,99996) IFAIL GO TO 160 END IF * Display the results WRITE (NOUT,*) WRITE (NOUT,*) ' Realisation Number 2' DO 140 I = 1, K WRITE (NOUT,99999) ' Series number ', I WRITE (NOUT,*) ' -------------' WRITE (NOUT,*) WRITE (NOUT,99998) (X(I,J),J=1,N) 140 CONTINUE * 160 CONTINUE * 99999 FORMAT (/1X,A,I3) 99998 FORMAT (8(2X,F8.3)) 99997 FORMAT (1X,' ** G05KFF returned with IFAIL = ',I5) 99996 FORMAT (1X,' ** G05PJF returned with IFAIL = ',I5) 99995 FORMAT (1X,' ** Problem size too large, increase array limits') END