Commit a7b064f5 authored by rtoy's avatar rtoy
Browse files

Initial revision.

parent 2c5e0d97
.SUFFIXES:
.SUFFIXES: .f .o
OBJ = c1f2kb.o c1f2kf.o c1f3kb.o c1f3kf.o c1f4kb.o c1f4kf.o c1f5kb.o c1f5kf.o c1fgkb.o c1fgkf.o c1fm1b.o c1fm1f.o cfft1b.o\
cfft1f.o cfft1i.o cfft2b.o cfft2f.o cfft2i.o cfftmb.o cfftmf.o cfftmi.o cmf2kb.o\
cmf2kf.o cmf3kb.o cmf3kf.o cmf4kb.o cmf4kf.o cmf5kb.o cmf5kf.o cmfgkb.o cmfgkf.o cmfm1b.o cmfm1f.o cosq1b.o\
cosq1f.o cosq1i.o cosqb1.o cosqf1.o cosqmb.o cosqmf.o cosqmi.o cost1b.o cost1f.o cost1i.o costb1.o costf1.o\
costmb.o costmf.o costmi.o factor.o mcfti1.o mcsqb1.o mcsqf1.o mcstb1.o mcstf1.o mradb2.o mradb3.o\
mradb4.o mradb5.o mradbg.o mradf2.o mradf3.o mradf4.o mradf5.o mradfg.o mrftb1.o mrftf1.o mrfti1.o msntb1.o\
msntf1.o r1f2kb.o r1f2kf.o r1f3kb.o r1f3kf.o r1f4kb.o r1f4kf.o r1f5kb.o r1f5kf.o r1fgkb.o r1fgkf.o rfft1b.o\
rfft1f.o rfft1i.o rfft2b.o rfft2f.o rfft2i.o rfftb1.o rfftf1.o rffti1.o rfftmb.o\
rfftmf.o rfftmi.o sinq1b.o sinq1f.o sinq1i.o sinqmb.o sinqmf.o sinqmi.o sint1b.o sint1f.o sint1i.o sintb1.o\
sintf1.o sintmb.o sintmf.o sintmi.o tables.o xercon.o xerfft.o
default:
@echo "Usage: $(MAKE) [ sun | hp | ibm | gnu | intel | absoft | pgi]"
sun:
@$(MAKE) FC=f90 LD=ar FFLAGS="-xO5" LDFLAGS="cr" TARGET=libfftpack.a all
hp:
@$(MAKE) FC=f90 LD=ar FFLAGS="-fast" LDFLAGS="cr" TARGET=libfftpack.a all
ibm:
@$(MAKE) FC=xlf LD=ar FFLAGS="-O3" LDFLAGS="cr" TARGET=libfftpack.a all
gnu:
@$(MAKE) FC=g77 LD=ar FFLAGS="-O3" LDFLAGS="cr" TARGET=libfftpack.a all
intel:
@$(MAKE) FC=ifort LD=ar FFLAGS="-O3" LDFLAGS="cr" TARGET=libfftpack.a all
absoft:
@$(MAKE) FC=f77 LD=ar FFLAGS="-O3" LDFLAGS="cr" TARGET=libfftpack.a all
pgi:
@$(MAKE) FC=pgf77 LD=ar FFLAGS="-fast" LDFLAGS="cr" TARGET=libfftpack.a all
all: library
library: $(OBJ)
$(LD) $(LDFLAGS) $(TARGET) $(OBJ)
.f.o:
$(FC) -c $(FFLAGS) $<
clean:
rm -f $(OBJ) libfftpack*
FFTPACK5 - a FORTRAN library of fast Fourier transforms
Authors: Paul N. Swarztrauber and Richard A. Valent
$Id$
Website
-------
http://www.scd.ucar.edu/css/software/fftpack5
Documentation
-------------
Documentation is provided in PDF format in the file fftpack5.pdf.
This information is also available in HTML format at the above
website. Information about building the library follows below,
as well as a synopsis of the library.
Compiling Library
-----------------
The included Makefile if configured to build a static
library on most currently availble unix and unix-like
operating systems. The given make targets (type "make"
without any arguments for a list of targets) correspond
to compiler names; e.g. intel = Intel F95 compiler,
gnu = GNU g77 compiler, sun = Sun Solaris compiler, etc.
The source code is by default configured for single precision
real numbers. If double precision is desired, the Makefile must
be modified with the appropriate compiler options for promoting
real to double precision as well as promoting constants to double
precision (this is often "-r8" on some, but not all, compilers).
Complex Transform Routines
__________________________
CFFT1I 1D complex initialization
CFFT1B 1D complex backward
CFFT1F 1D complex forward
CFFT2I 2D complex initialization
CFFT2B 2D complex backward
CFFT2F 2D complex forward
CFFTMI multiple complex initialization
CFFTMB multiple complex backward
CFFTMF multiple complex forward
Real Transform Routines
_______________________
RFFT1I 1D real initialization
RFFT1B 1D real backward
RFFT1F 1D real forward
RFFT2I 2D real initialization
RFFT2B 2D real backward
RFFT2F 2D real forward
RFFTMI multiple real initialization
RFFTMB multiple real backward
RFFTMF multiple real forward
Real Cosine Transform Routines
______________________________
COST1I 1D real cosine initialization
COST1B 1D real cosine backward
COST1F 1D real cosine forward
COSTMI multiple real cosine initialization
COSTMB multiple real cosine backward
COSTMF multiple real cosine forward
Real Sine Transform Routines
____________________________
SINT1I 1D real sine initialization
SINT1B 1D real sine backward
SINT1F 1D real sine forward
SINTMI multiple real sine initialization
SINTMB multiple real sine backward
SINTMF multiple real sine forward
Real Quarter-Cosine Transform Routines
______________________________________
COSQ1I 1D real quarter-cosine initialization
COSQ1B 1D real quarter-cosine backward
COSQ1F 1D real quarter-cosine forward
COSQMI multiple real quarter-cosine initialization
COSQMB multiple real quarter-cosine backward
COSQMF multiple real quarter-cosine forward
Real Quarter-Sine Transform Routines
____________________________________
SINQ1I 1D real quarter-sine initialization
SINQ1B 1D real quarter-sine backward
SINQ1F 1D real quarter-sine forward
SINQMI multiple real quarter-sine initialization
SINQMB multiple real quarter-sine backward
SINQMF multiple real quarter-sine forward
Library FFTPACK5 contains 1D, 2D, and multiple fast Fourier
subroutines, written in Fortran 77, for transforming real and complex
data, real even and odd wave data, and real even and odd quarter-wave
data.
All of the FFTPACK5 routines listed above are grouped in triplets
e.g. {CFFT1I, CFFT1F, CFFT1B}. The suffix "I" denotes "initialize",
"F" denotes "forward" (as in "forward transform") and "B" denotes
"backward". In an application program, before calling "B" or "F"
routines for the first time, or before calling them with a different
length, users must initialize an array by calling the "I" routine of
the appropriate pair or triplet. Note that "I" routines need not be
called each time before a "B" or "F" routine is called.
All of the transform routines in FFTPACK5 are normalized.
Error messages are written to unit 6 by routine XERFFT. The
standard version of XERFFT issues an error message and halts execution,
so that no FFTPACK routine will return to the calling program with
error return IER different than zero. Users may consider modifying the
STOP statement in order to call system-specific exception-handling
facilities.
FFTPACK5 is written in standard Fortran 77 except for several
instances where arrays of type REAL or COMPLEX are passed to a
subroutine and used as a different type.
(1) "Vectorizing the Fast Fourier Transforms", by Paul Swarztrauber,
Parallel Computations, G. Rodrigue, ed., Academic Press,
New York 1982.
(2) "Fast Fourier Transforms Algorithms for Vector Computers", by
Paul Swarztrauber, Parallel Computing, (1984) pp.45-63.
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
C FFTPACK 5.0
C
C Authors: Paul N. Swarztrauber and Richard A. Valent
C
C $Id$
C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
SUBROUTINE C1F2KB (IDO,L1,NA,CC,IN1,CH,IN2,WA)
REAL CC(IN1,L1,IDO,2),CH(IN2,L1,2,IDO),WA(IDO,1,2)
C
IF (IDO.GT.1 .OR. NA.EQ.1) GO TO 102
DO 101 K=1,L1
CHOLD1 = CC(1,K,1,1)+CC(1,K,1,2)
CC(1,K,1,2) = CC(1,K,1,1)-CC(1,K,1,2)
CC(1,K,1,1) = CHOLD1
CHOLD2 = CC(2,K,1,1)+CC(2,K,1,2)
CC(2,K,1,2) = CC(2,K,1,1)-CC(2,K,1,2)
CC(2,K,1,1) = CHOLD2
101 CONTINUE
RETURN
102 DO 103 K=1,L1
CH(1,K,1,1) = CC(1,K,1,1)+CC(1,K,1,2)
CH(1,K,2,1) = CC(1,K,1,1)-CC(1,K,1,2)
CH(2,K,1,1) = CC(2,K,1,1)+CC(2,K,1,2)
CH(2,K,2,1) = CC(2,K,1,1)-CC(2,K,1,2)
103 CONTINUE
IF(IDO .EQ. 1) RETURN
DO 105 I=2,IDO
DO 104 K=1,L1
CH(1,K,1,I) = CC(1,K,I,1)+CC(1,K,I,2)
TR2 = CC(1,K,I,1)-CC(1,K,I,2)
CH(2,K,1,I) = CC(2,K,I,1)+CC(2,K,I,2)
TI2 = CC(2,K,I,1)-CC(2,K,I,2)
CH(2,K,2,I) = WA(I,1,1)*TI2+WA(I,1,2)*TR2
CH(1,K,2,I) = WA(I,1,1)*TR2-WA(I,1,2)*TI2
104 CONTINUE
105 CONTINUE
RETURN
END
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
C FFTPACK 5.0
C
C Authors: Paul N. Swarztrauber and Richard A. Valent
C
C $Id$
C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
SUBROUTINE C1F2KF (IDO,L1,NA,CC,IN1,CH,IN2,WA)
REAL CC(IN1,L1,IDO,2),CH(IN2,L1,2,IDO),WA(IDO,1,2)
C
IF (IDO .GT. 1) GO TO 102
SN = 1./REAL(2*L1)
IF (NA .EQ. 1) GO TO 106
DO 101 K=1,L1
CHOLD1 = SN*(CC(1,K,1,1)+CC(1,K,1,2))
CC(1,K,1,2) = SN*(CC(1,K,1,1)-CC(1,K,1,2))
CC(1,K,1,1) = CHOLD1
CHOLD2 = SN*(CC(2,K,1,1)+CC(2,K,1,2))
CC(2,K,1,2) = SN*(CC(2,K,1,1)-CC(2,K,1,2))
CC(2,K,1,1) = CHOLD2
101 CONTINUE
RETURN
106 DO 107 K=1,L1
CH(1,K,1,1) = SN*(CC(1,K,1,1)+CC(1,K,1,2))
CH(1,K,2,1) = SN*(CC(1,K,1,1)-CC(1,K,1,2))
CH(2,K,1,1) = SN*(CC(2,K,1,1)+CC(2,K,1,2))
CH(2,K,2,1) = SN*(CC(2,K,1,1)-CC(2,K,1,2))
107 CONTINUE
RETURN
102 DO 103 K=1,L1
CH(1,K,1,1) = CC(1,K,1,1)+CC(1,K,1,2)
CH(1,K,2,1) = CC(1,K,1,1)-CC(1,K,1,2)
CH(2,K,1,1) = CC(2,K,1,1)+CC(2,K,1,2)
CH(2,K,2,1) = CC(2,K,1,1)-CC(2,K,1,2)
103 CONTINUE
DO 105 I=2,IDO
DO 104 K=1,L1
CH(1,K,1,I) = CC(1,K,I,1)+CC(1,K,I,2)
TR2 = CC(1,K,I,1)-CC(1,K,I,2)
CH(2,K,1,I) = CC(2,K,I,1)+CC(2,K,I,2)
TI2 = CC(2,K,I,1)-CC(2,K,I,2)
CH(2,K,2,I) = WA(I,1,1)*TI2-WA(I,1,2)*TR2
CH(1,K,2,I) = WA(I,1,1)*TR2+WA(I,1,2)*TI2
104 CONTINUE
105 CONTINUE
RETURN
END
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
C FFTPACK 5.0
C
C Authors: Paul N. Swarztrauber and Richard A. Valent
C
C $Id$
C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
SUBROUTINE C1F3KB (IDO,L1,NA,CC,IN1,CH,IN2,WA)
REAL CC(IN1,L1,IDO,3),CH(IN2,L1,3,IDO),WA(IDO,2,2)
DATA TAUR,TAUI /-.5,.866025403784439/
C
IF (IDO.GT.1 .OR. NA.EQ.1) GO TO 102
DO 101 K=1,L1
TR2 = CC(1,K,1,2)+CC(1,K,1,3)
CR2 = CC(1,K,1,1)+TAUR*TR2
CC(1,K,1,1) = CC(1,K,1,1)+TR2
TI2 = CC(2,K,1,2)+CC(2,K,1,3)
CI2 = CC(2,K,1,1)+TAUR*TI2
CC(2,K,1,1) = CC(2,K,1,1)+TI2
CR3 = TAUI*(CC(1,K,1,2)-CC(1,K,1,3))
CI3 = TAUI*(CC(2,K,1,2)-CC(2,K,1,3))
CC(1,K,1,2) = CR2-CI3
CC(1,K,1,3) = CR2+CI3
CC(2,K,1,2) = CI2+CR3
CC(2,K,1,3) = CI2-CR3
101 CONTINUE
RETURN
102 DO 103 K=1,L1
TR2 = CC(1,K,1,2)+CC(1,K,1,3)
CR2 = CC(1,K,1,1)+TAUR*TR2
CH(1,K,1,1) = CC(1,K,1,1)+TR2
TI2 = CC(2,K,1,2)+CC(2,K,1,3)
CI2 = CC(2,K,1,1)+TAUR*TI2
CH(2,K,1,1) = CC(2,K,1,1)+TI2
CR3 = TAUI*(CC(1,K,1,2)-CC(1,K,1,3))
CI3 = TAUI*(CC(2,K,1,2)-CC(2,K,1,3))
CH(1,K,2,1) = CR2-CI3
CH(1,K,3,1) = CR2+CI3
CH(2,K,2,1) = CI2+CR3
CH(2,K,3,1) = CI2-CR3
103 CONTINUE
IF (IDO .EQ. 1) RETURN
DO 105 I=2,IDO
DO 104 K=1,L1
TR2 = CC(1,K,I,2)+CC(1,K,I,3)
CR2 = CC(1,K,I,1)+TAUR*TR2
CH(1,K,1,I) = CC(1,K,I,1)+TR2
TI2 = CC(2,K,I,2)+CC(2,K,I,3)
CI2 = CC(2,K,I,1)+TAUR*TI2
CH(2,K,1,I) = CC(2,K,I,1)+TI2
CR3 = TAUI*(CC(1,K,I,2)-CC(1,K,I,3))
CI3 = TAUI*(CC(2,K,I,2)-CC(2,K,I,3))
DR2 = CR2-CI3
DR3 = CR2+CI3
DI2 = CI2+CR3
DI3 = CI2-CR3
CH(2,K,2,I) = WA(I,1,1)*DI2+WA(I,1,2)*DR2
CH(1,K,2,I) = WA(I,1,1)*DR2-WA(I,1,2)*DI2
CH(2,K,3,I) = WA(I,2,1)*DI3+WA(I,2,2)*DR3
CH(1,K,3,I) = WA(I,2,1)*DR3-WA(I,2,2)*DI3
104 CONTINUE
105 CONTINUE
RETURN
END
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
C FFTPACK 5.0
C
C Authors: Paul N. Swarztrauber and Richard A. Valent
C
C $Id$
C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
SUBROUTINE C1F3KF (IDO,L1,NA,CC,IN1,CH,IN2,WA)
REAL CC(IN1,L1,IDO,3),CH(IN2,L1,3,IDO),WA(IDO,2,2)
DATA TAUR,TAUI /-.5,-.866025403784439/
C
IF (IDO .GT. 1) GO TO 102
SN = 1./REAL(3*L1)
IF (NA .EQ. 1) GO TO 106
DO 101 K=1,L1
TR2 = CC(1,K,1,2)+CC(1,K,1,3)
CR2 = CC(1,K,1,1)+TAUR*TR2
CC(1,K,1,1) = SN*(CC(1,K,1,1)+TR2)
TI2 = CC(2,K,1,2)+CC(2,K,1,3)
CI2 = CC(2,K,1,1)+TAUR*TI2
CC(2,K,1,1) = SN*(CC(2,K,1,1)+TI2)
CR3 = TAUI*(CC(1,K,1,2)-CC(1,K,1,3))
CI3 = TAUI*(CC(2,K,1,2)-CC(2,K,1,3))
CC(1,K,1,2) = SN*(CR2-CI3)
CC(1,K,1,3) = SN*(CR2+CI3)
CC(2,K,1,2) = SN*(CI2+CR3)
CC(2,K,1,3) = SN*(CI2-CR3)
101 CONTINUE
RETURN
106 DO 107 K=1,L1
TR2 = CC(1,K,1,2)+CC(1,K,1,3)
CR2 = CC(1,K,1,1)+TAUR*TR2
CH(1,K,1,1) = SN*(CC(1,K,1,1)+TR2)
TI2 = CC(2,K,1,2)+CC(2,K,1,3)
CI2 = CC(2,K,1,1)+TAUR*TI2
CH(2,K,1,1) = SN*(CC(2,K,1,1)+TI2)
CR3 = TAUI*(CC(1,K,1,2)-CC(1,K,1,3))
CI3 = TAUI*(CC(2,K,1,2)-CC(2,K,1,3))
CH(1,K,2,1) = SN*(CR2-CI3)
CH(1,K,3,1) = SN*(CR2+CI3)
CH(2,K,2,1) = SN*(CI2+CR3)
CH(2,K,3,1) = SN*(CI2-CR3)
107 CONTINUE
RETURN
102 DO 103 K=1,L1
TR2 = CC(1,K,1,2)+CC(1,K,1,3)
CR2 = CC(1,K,1,1)+TAUR*TR2
CH(1,K,1,1) = CC(1,K,1,1)+TR2
TI2 = CC(2,K,1,2)+CC(2,K,1,3)
CI2 = CC(2,K,1,1)+TAUR*TI2
CH(2,K,1,1) = CC(2,K,1,1)+TI2
CR3 = TAUI*(CC(1,K,1,2)-CC(1,K,1,3))
CI3 = TAUI*(CC(2,K,1,2)-CC(2,K,1,3))
CH(1,K,2,1) = CR2-CI3
CH(1,K,3,1) = CR2+CI3
CH(2,K,2,1) = CI2+CR3
CH(2,K,3,1) = CI2-CR3
103 CONTINUE
DO 105 I=2,IDO
DO 104 K=1,L1
TR2 = CC(1,K,I,2)+CC(1,K,I,3)
CR2 = CC(1,K,I,1)+TAUR*TR2
CH(1,K,1,I) = CC(1,K,I,1)+TR2
TI2 = CC(2,K,I,2)+CC(2,K,I,3)
CI2 = CC(2,K,I,1)+TAUR*TI2
CH(2,K,1,I) = CC(2,K,I,1)+TI2
CR3 = TAUI*(CC(1,K,I,2)-CC(1,K,I,3))
CI3 = TAUI*(CC(2,K,I,2)-CC(2,K,I,3))
DR2 = CR2-CI3
DR3 = CR2+CI3
DI2 = CI2+CR3
DI3 = CI2-CR3
CH(2,K,2,I) = WA(I,1,1)*DI2-WA(I,1,2)*DR2
CH(1,K,2,I) = WA(I,1,1)*DR2+WA(I,1,2)*DI2
CH(2,K,3,I) = WA(I,2,1)*DI3-WA(I,2,2)*DR3
CH(1,K,3,I) = WA(I,2,1)*DR3+WA(I,2,2)*DI3
104 CONTINUE
105 CONTINUE
RETURN
END
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
C FFTPACK 5.0
C
C Authors: Paul N. Swarztrauber and Richard A. Valent
C
C $Id$
C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
SUBROUTINE C1F4KB (IDO,L1,NA,CC,IN1,CH,IN2,WA)
REAL CC(IN1,L1,IDO,4),CH(IN2,L1,4,IDO),WA(IDO,3,2)
C
C FFTPACK 5.0 auxiliary routine
C
IF (IDO.GT.1 .OR. NA.EQ.1) GO TO 102
DO 101 K=1,L1
TI1 = CC(2,K,1,1)-CC(2,K,1,3)
TI2 = CC(2,K,1,1)+CC(2,K,1,3)
TR4 = CC(2,K,1,4)-CC(2,K,1,2)
TI3 = CC(2,K,1,2)+CC(2,K,1,4)
TR1 = CC(1,K,1,1)-CC(1,K,1,3)
TR2 = CC(1,K,1,1)+CC(1,K,1,3)
TI4 = CC(1,K,1,2)-CC(1,K,1,4)
TR3 = CC(1,K,1,2)+CC(1,K,1,4)
CC(1,K,1,1) = TR2+TR3
CC(1,K,1,3) = TR2-TR3
CC(2,K,1,1) = TI2+TI3
CC(2,K,1,3) = TI2-TI3
CC(1,K,1,2) = TR1+TR4
CC(1,K,1,4) = TR1-TR4
CC(2,K,1,2) = TI1+TI4
CC(2,K,1,4) = TI1-TI4
101 CONTINUE
RETURN
102 DO 103 K=1,L1
TI1 = CC(2,K,1,1)-CC(2,K,1,3)
TI2 = CC(2,K,1,1)+CC(2,K,1,3)
TR4 = CC(2,K,1,4)-CC(2,K,1,2)
TI3 = CC(2,K,1,2)+CC(2,K,1,4)
TR1 = CC(1,K,1,1)-CC(1,K,1,3)
TR2 = CC(1,K,1,1)+CC(1,K,1,3)
TI4 = CC(1,K,1,2)-CC(1,K,1,4)
TR3 = CC(1,K,1,2)+CC(1,K,1,4)
CH(1,K,1,1) = TR2+TR3
CH(1,K,3,1) = TR2-TR3
CH(2,K,1,1) = TI2+TI3
CH(2,K,3,1) = TI2-TI3
CH(1,K,2,1) = TR1+TR4
CH(1,K,4,1) = TR1-TR4
CH(2,K,2,1) = TI1+TI4
CH(2,K,4,1) = TI1-TI4
103 CONTINUE
IF(IDO .EQ. 1) RETURN
DO 105 I=2,IDO
DO 104 K=1,L1
TI1 = CC(2,K,I,1)-CC(2,K,I,3)
TI2 = CC(2,K,I,1)+CC(2,K,I,3)
TI3 = CC(2,K,I,2)+CC(2,K,I,4)
TR4 = CC(2,K,I,4)-CC(2,K,I,2)
TR1 = CC(1,K,I,1)-CC(1,K,I,3)
TR2 = CC(1,K,I,1)+CC(1,K,I,3)
TI4 = CC(1,K,I,2)-CC(1,K,I,4)
TR3 = CC(1,K,I,2)+CC(1,K,I,4)
CH(1,K,1,I) = TR2+TR3
CR3 = TR2-TR3
CH(2,K,1,I) = TI2+TI3
CI3 = TI2-TI3
CR2 = TR1+TR4
CR4 = TR1-TR4
CI2 = TI1+TI4
CI4 = TI1-TI4
CH(1,K,2,I) = WA(I,1,1)*CR2-WA(I,1,2)*CI2
CH(2,K,2,I) = WA(I,1,1)*CI2+WA(I,1,2)*CR2
CH(1,K,3,I) = WA(I,2,1)*CR3-WA(I,2,2)*CI3
CH(2,K,3,I) = WA(I,2,1)*CI3+WA(I,2,2)*CR3
CH(1,K,4,I) = WA(I,3,1)*CR4-WA(I,3,2)*CI4
CH(2,K,4,I) = WA(I,3,1)*CI4+WA(I,3,2)*CR4
104 CONTINUE
105 CONTINUE
RETURN
END
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
C FFTPACK 5.0
C
C Authors: Paul N. Swarztrauber and Richard A. Valent
C
C $Id$
C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC </