123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- *DECK EZFFTF
- SUBROUTINE EZFFTF (N, R, AZERO, A, B, WSAVE)
- C***BEGIN PROLOGUE EZFFTF
- C***PURPOSE Compute a simplified real, periodic, fast Fourier forward
- C transform.
- C***LIBRARY SLATEC (FFTPACK)
- C***CATEGORY J1A1
- C***TYPE SINGLE PRECISION (EZFFTF-S)
- C***KEYWORDS FFTPACK, FOURIER TRANSFORM
- C***AUTHOR Swarztrauber, P. N., (NCAR)
- C***DESCRIPTION
- C
- C Subroutine EZFFTF computes the Fourier coefficients of a real
- C periodic sequence (Fourier analysis). The transform is defined
- C below at Output Parameters AZERO, A and B. EZFFTF is a simplified
- C but slower version of RFFTF.
- C
- C Input Parameters
- C
- C N the length of the array R to be transformed. The method
- C is most efficient when N is the product of small primes.
- C
- C R a real array of length N which contains the sequence
- C to be transformed. R is not destroyed.
- C
- C
- C WSAVE a work array which must be dimensioned at least 3*N+15
- C in the program that calls EZFFTF. The WSAVE array must be
- C initialized by calling subroutine EZFFTI(N,WSAVE), and a
- C different WSAVE array must be used for each different
- C value of N. This initialization does not have to be
- C repeated so long as N remains unchanged. Thus subsequent
- C transforms can be obtained faster than the first.
- C The same WSAVE array can be used by EZFFTF and EZFFTB.
- C
- C Output Parameters
- C
- C AZERO the sum from I=1 to I=N of R(I)/N
- C
- C A,B for N even B(N/2)=0. and A(N/2) is the sum from I=1 to
- C I=N of (-1)**(I-1)*R(I)/N
- C
- C for N even define KMAX=N/2-1
- C for N odd define KMAX=(N-1)/2
- C
- C then for K=1,...,KMAX
- C
- C A(K) equals the sum from I=1 to I=N of
- C
- C 2./N*R(I)*COS(K*(I-1)*2*PI/N)
- C
- C B(K) equals the sum from I=1 to I=N of
- C
- C 2./N*R(I)*SIN(K*(I-1)*2*PI/N)
- C
- C***REFERENCES P. N. Swarztrauber, Vectorizing the FFTs, in Parallel
- C Computations (G. Rodrigue, ed.), Academic Press,
- C 1982, pp. 51-83.
- C***ROUTINES CALLED RFFTF
- C***REVISION HISTORY (YYMMDD)
- C 790601 DATE WRITTEN
- C 830401 Modified to use SLATEC library source file format.
- C 860115 Modified by Ron Boisvert to adhere to Fortran 77 by
- C (a) changing dummy array size declarations (1) to (*),
- C (b) changing references to intrinsic function FLOAT
- C to REAL.
- C 881128 Modified by Dick Valent to meet prologue standards.
- C 890531 Changed all specific intrinsics to generic. (WRB)
- C 890531 REVISION DATE from Version 3.2
- C 891214 Prologue converted to Version 4.0 format. (BAB)
- C 920501 Reformatted the REFERENCES section. (WRB)
- C***END PROLOGUE EZFFTF
- DIMENSION R(*), A(*), B(*), WSAVE(*)
- C***FIRST EXECUTABLE STATEMENT EZFFTF
- IF (N-2) 101,102,103
- 101 AZERO = R(1)
- RETURN
- 102 AZERO = .5*(R(1)+R(2))
- A(1) = .5*(R(1)-R(2))
- RETURN
- 103 DO 104 I=1,N
- WSAVE(I) = R(I)
- 104 CONTINUE
- CALL RFFTF (N,WSAVE,WSAVE(N+1))
- CF = 2./N
- CFM = -CF
- AZERO = .5*CF*WSAVE(1)
- NS2 = (N+1)/2
- NS2M = NS2-1
- DO 105 I=1,NS2M
- A(I) = CF*WSAVE(2*I)
- B(I) = CFM*WSAVE(2*I+1)
- 105 CONTINUE
- IF (MOD(N,2) .EQ. 0) A(NS2) = .5*CF*WSAVE(N)
- RETURN
- END
|