* C09CCF Example Program Text * Mark 22 Release. NAG Copyright 2007. * .. Parameters .. INTEGER NIN, NOUT PARAMETER (NIN=5,NOUT=6) INTEGER NMAX, NWCMAX, LENC, NWLMAX PARAMETER (NMAX=850,NWCMAX=850,LENC=NWCMAX,NWLMAX=20) * .. Local Scalars .. INTEGER I, IFAIL, N, NF, NNZ, NWC, NWL, NY CHARACTER*10 MODE, WAVNAM, WTRANS * .. Local Arrays .. DOUBLE PRECISION C(NWCMAX), X(NMAX), Y(NMAX) INTEGER DWTLEV(NWLMAX), ICOMM(100) * .. External Subroutines .. EXTERNAL C09AAF, C09CCF, C09CDF * .. Executable Statements .. WRITE (NOUT,*) 'C09CCF Example Program Results' * Skip heading in data file READ (NIN,*) * Read problem parameters READ (NIN,*) N READ (NIN,*) WAVNAM, MODE * IF (N.LE.NMAX .AND. N.GE.2) THEN WRITE (NOUT,99999) WAVNAM, MODE, N * * Read data array and write it out * READ (NIN,*) (X(I),I=1,N) * WRITE (NOUT,*) ' Input Data X :' WRITE (NOUT,99998) (X(I),I=1,N) * * Query wavelet filter dimensions * For Multi-Resolution Analysis, decomposition, WTRANS = 'M' * IFAIL = 1 WTRANS = 'Multilevel' CALL C09AAF(WAVNAM,WTRANS,MODE,N,NWL,NF,NWC,ICOMM,IFAIL) * IF (IFAIL.NE.0) THEN WRITE (NOUT,99997) IFAIL GO TO 40 END IF * * Perform Discrete Wavelet transform * IFAIL = 1 CALL C09CCF(N,X,LENC,C,NWL,DWTLEV,ICOMM,IFAIL) * IF (IFAIL.EQ.0) THEN WRITE (NOUT,99996) NWL WRITE (NOUT,99995) WRITE (NOUT,99994) (DWTLEV(I),I=1,NWL+1) NNZ = 0 DO 20 I = 1, NWL + 1 NNZ = NNZ + DWTLEV(I) 20 CONTINUE WRITE (NOUT,99993) WRITE (NOUT,99998) (C(I),I=1,NNZ) * * Reconstruct original data * NY = N IFAIL = 1 CALL C09CDF(NWL,LENC,C,NY,Y,ICOMM,IFAIL) * IF (IFAIL.NE.0) THEN WRITE (NOUT,99992) IFAIL ELSE WRITE (NOUT,99991) WRITE (NOUT,99998) (Y(I),I=1,NY) END IF ELSE WRITE (NOUT,99990) IFAIL END IF * 40 END IF * 99999 FORMAT (1X,' MLDWT :: Wavelet : ',A10,', End mode : ',A10,' N = ', + I10) 99998 FORMAT (8(F8.4,1X),:) 99997 FORMAT (1X,' ** C09AAF returned with IFAIL = ',I5) 99996 FORMAT (1X,' Number of Levels : ',I10) 99995 FORMAT (1X,' Number of coefficients in each level : ') 99994 FORMAT (8(I8,1X),:) 99993 FORMAT (1X,' Wavelet coefficients C : ') 99992 FORMAT (1X,' ** C09CDF returned with IFAIL = ',I5) 99991 FORMAT (1X,' Reconstruction Y : ') 99990 FORMAT (1X,' ** C09CCF returned with IFAIL = ',I5) END