*DECK RFFTI1 SUBROUTINE RFFTI1 (N, WA, IFAC) C***BEGIN PROLOGUE RFFTI1 C***PURPOSE Initialize a real and an integer work array for RFFTF1 and C RFFTB1. C***LIBRARY SLATEC (FFTPACK) C***CATEGORY J1A1 C***TYPE SINGLE PRECISION (RFFTI1-S, CFFTI1-C) C***KEYWORDS FFTPACK, FOURIER TRANSFORM C***AUTHOR Swarztrauber, P. N., (NCAR) C***DESCRIPTION C C Subroutine RFFTI1 initializes the work arrays WA and IFAC which are C used in both RFFTF1 and RFFTB1. The prime factorization of N and a C tabulation of the trigonometric functions are computed and stored in C IFAC and WA, respectively. C C Input Argument C C N the length of the sequence to be transformed. C C Output Arguments C C WA a real work array which must be dimensioned at least N. C C IFAC an integer work array which must be dimensioned at least 15. C C The same work arrays can be used for both RFFTF1 and RFFTB1 as long C as N remains unchanged. Different WA and IFAC arrays are required C for different values of N. The contents of WA and IFAC must not be C changed between calls of RFFTF1 or RFFTB1. 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 (NONE) 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, and C (c) changing definition of variable TPI by using C FORTRAN intrinsic functions instead of DATA C statements. C 881128 Modified by Dick Valent to meet prologue standards. C 890531 Changed all specific intrinsics to generic. (WRB) C 891214 Prologue converted to Version 4.0 format. (BAB) C 900131 Routine changed from subsidiary to user-callable. (WRB) C 920501 Reformatted the REFERENCES section. (WRB) C***END PROLOGUE RFFTI1 DIMENSION WA(*), IFAC(*), NTRYH(4) SAVE NTRYH DATA NTRYH(1),NTRYH(2),NTRYH(3),NTRYH(4)/4,2,3,5/ C***FIRST EXECUTABLE STATEMENT RFFTI1 NL = N NF = 0 J = 0 101 J = J+1 IF (J-4) 102,102,103 102 NTRY = NTRYH(J) GO TO 104 103 NTRY = NTRY+2 104 NQ = NL/NTRY NR = NL-NTRY*NQ IF (NR) 101,105,101 105 NF = NF+1 IFAC(NF+2) = NTRY NL = NQ IF (NTRY .NE. 2) GO TO 107 IF (NF .EQ. 1) GO TO 107 DO 106 I=2,NF IB = NF-I+2 IFAC(IB+2) = IFAC(IB+1) 106 CONTINUE IFAC(3) = 2 107 IF (NL .NE. 1) GO TO 104 IFAC(1) = N IFAC(2) = NF TPI = 8.*ATAN(1.) ARGH = TPI/N IS = 0 NFM1 = NF-1 L1 = 1 IF (NFM1 .EQ. 0) RETURN DO 110 K1=1,NFM1 IP = IFAC(K1+2) LD = 0 L2 = L1*IP IDO = N/L2 IPM = IP-1 DO 109 J=1,IPM LD = LD+L1 I = IS ARGLD = LD*ARGH FI = 0. DO 108 II=3,IDO,2 I = I+2 FI = FI+1. ARG = FI*ARGLD WA(I-1) = COS(ARG) WA(I) = SIN(ARG) 108 CONTINUE IS = IS+IDO 109 CONTINUE L1 = L2 110 CONTINUE RETURN END