123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- *DECK COSQB1
- SUBROUTINE COSQB1 (N, X, W, XH)
- C***BEGIN PROLOGUE COSQB1
- C***SUBSIDIARY
- C***PURPOSE Compute the unnormalized inverse of COSQF1.
- C***LIBRARY SLATEC (FFTPACK)
- C***CATEGORY J1A3
- C***TYPE SINGLE PRECISION (COSQB1-S)
- C***KEYWORDS FFTPACK, FOURIER TRANSFORM
- C***AUTHOR Swarztrauber, P. N., (NCAR)
- C***DESCRIPTION
- C
- C Subroutine COSQB1 computes the fast Fourier transform of quarter
- C wave data. That is, COSQB1 computes a sequence from its
- C representation in terms of a cosine series with odd wave numbers.
- C The transform is defined below at output parameter X.
- 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 RFFTB
- 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 changing dummy array size declarations (1) to (*).
- C 881128 Modified by Dick Valent to meet prologue standards.
- C 891214 Prologue converted to Version 4.0 format. (BAB)
- C 920501 Reformatted the REFERENCES section. (WRB)
- C***END PROLOGUE COSQB1
- DIMENSION X(*), W(*), XH(*)
- C***FIRST EXECUTABLE STATEMENT COSQB1
- NS2 = (N+1)/2
- NP2 = N+2
- DO 101 I=3,N,2
- XIM1 = X(I-1)+X(I)
- X(I) = X(I)-X(I-1)
- X(I-1) = XIM1
- 101 CONTINUE
- X(1) = X(1)+X(1)
- MODN = MOD(N,2)
- IF (MODN .EQ. 0) X(N) = X(N)+X(N)
- CALL RFFTB (N,X,XH)
- DO 102 K=2,NS2
- KC = NP2-K
- XH(K) = W(K-1)*X(KC)+W(KC-1)*X(K)
- XH(KC) = W(K-1)*X(K)-W(KC-1)*X(KC)
- 102 CONTINUE
- IF (MODN .EQ. 0) X(NS2+1) = W(NS2)*(X(NS2+1)+X(NS2+1))
- DO 103 K=2,NS2
- KC = NP2-K
- X(K) = XH(K)+XH(KC)
- X(KC) = XH(K)-XH(KC)
- 103 CONTINUE
- X(1) = X(1)+X(1)
- RETURN
- END
|