SUBROUTINE SET77(TRIGS,IFAX,N) C C SUBROUTINE 'SET77' - COMPUTES FACTORS OF N & TRIGONOMETRIC C FUNCTINS REQUIRED BY FFT77 & FFT771 C IMPLICIT NONE INTEGER MAXFAC PARAMETER( MAXFAC = 10 ) INTEGER N,IFAX(MAXFAC+1),JFAX(MAXFAC),LFAX(7) REAL TRIGS(3*N/2), DEL,ANGLE INTEGER NIL,NHL, I,K,L, NU,IFAC,NFAX DATA LFAX/6,8,5,4,3,2,1/ DEL=4.0*ASIN(1.0)/FLOAT(N) NIL=0 C NHL=(N/2)-1 NHL=(3*N/2)-1 DO 10 K=NIL,NHL ANGLE=FLOAT(K)*DEL TRIGS(2*K+1)=COS(ANGLE) TRIGS(2*K+2)=SIN(ANGLE) 10 CONTINUE * FIX FOR SMALL N (4,6,8) IF (N.LE.8) THEN IFAX(1)=2 IFAX(2)=2 IFAX(3)=N/2 RETURN ENDIF C FIND FACTORS OF N (8,6,5,4,3,2; ONLY ONE 8 ALLOWED) C LOOK FOR SIXES FIRST, STORE FACTORS IN DESCENDING ORDER NU=N IFAC=6 K=0 L=1 20 CONTINUE IF (MOD(NU,IFAC).NE.0) GO TO 30 K=K+1 JFAX(K)=IFAC IF (IFAC.NE.8) GO TO 25 IF (K.EQ.1) GO TO 25 JFAX(1)=8 JFAX(K)=6 25 CONTINUE NU=NU/IFAC IF (NU.EQ.1) GO TO 50 IF (IFAC.NE.8) GO TO 20 30 CONTINUE L=L+1 IFAC=LFAX(L) IF (IFAC.GT.1) GO TO 20 WRITE(6,40) N 40 FORMAT('1N =',I4,' - CONTAINS ILLEGAL FACTORS') RETURN C NOW REVERSE ORDER OF FACTORS 50 CONTINUE NFAX=K IFAX(1)=NFAX print*,NFAX DO 60 I=1,NFAX IFAX(NFAX+2-I)=JFAX(I) 60 CONTINUE RETURN END