C------------------------------------------------------------------------ C PRIME FACTOR IN PLACE COMLPEX FFT. C C ( TEMPERTON : JOUR COMP. PHYS. VOL 58 1985 PAGE 283.) C C CALLING SEQUENCE : C C CALL PFA(A,B,N,IFAX,NFAC,ISKIP,JSKIP,NUM,ISIGN) C C PARAMETERS : C A - FIRST REAL INPUT/OUTPUT ARRAY C B - FIRST IMAGINARY INPUT/OUTPUT ARRAY C N - TRANSFORM LENGTH C IFAX - INTEGER ARRAY CONTAINING FACTORS OF N C * ALL FACTORS MUST BE MUTUALLY PRIME C * AVAILABLE FACTORS : 2,3,4,5,6,7,8,9,11 C NFAC - NUMBER OF FACTORS IN N (BOTH NFAC AND IFAX C IFAX AND NFAC SRE CALCULATED BY : C CALL PFAFAC(IFAX,NFAC,N) C ISKIP - STRIDE WITHIN THE TRANSFORM C JSKIP - STRIDE BETWEEN TRANSFORMS C NUM - NUMBER OF TRANSFORMS C ISIGN - FFT SIGN (-1 OR +1) C------------------------------------------------------------------------ SUBROUTINE PFA(A,B,N,IFAX,NFAC,ISKIP,JSKIP,NUM,ISIGN) INTEGER IFAX(*) DIMENSION A(*),B(*),C(20),D(20),E(20),F(20) DATA SIN60/0.8660254038/,SIN72/0.9510565163/,SIN36/0.5877852523/ DATA SQ54/0.5590169944/ DATA C71/0.6234898018/,C72/-0.2225209342/,C73/-0.9009688680/ DATA S71/0.7818314825/,S72/0.9749279121/,S73/0.4338837388/ DATA C91/0.7660444431/,C92/0.1736481775/,C94/-0.939692621/ DATA S91/0.6427876097/,S92/0.9848077530/,S94/0.3420201430/ DATA C111/0.8412535328/,C112/0.4154150129/,C113/-0.1423148385/ DATA C114/-0.6548607342/,C115/-0.9594929737/ DATA S111/0.5406408175/,S112/0.9096319954/,S113/0.9898214418/ DATA S114/0.7557495742/,S115/0.2817325565/ DATA SR2/0.7071068/ C NS=N*ISKIP DO 1000 K=1,NFAC C IFAC=IFAX(K) M=N/IFAC DO 100 J=1,IFAC MU=J MM=J*M IF(MOD(MM,IFAC).EQ.1) GO TO 110 100 CONTINUE 110 MM=MM*ISKIP C C PERFORM THE INVERSE TRANSFORM IF(ISIGN.EQ.-1) MU=IFAC-MU C ----------------------------- C MU IS THE REQUIRED ROTATION FOR THE DFT MODULE OF ORDER IFAC C C NOW COMPUTE THE ADDRESSES IA,IB ETC. AND SELECT THE CODING C FOR THE CURRENT FACTOR C IA=1 IB=IA+MM IF(IFAC.EQ.2) GO TO 200 IC=IB+MM IF(IC.GT.NS)IC=IC-NS IF(IFAC.EQ.3) GO TO 300 ID=IC+MM IF(ID.GT.NS)ID=ID-NS IF(IFAC.EQ.4) GO TO 400 IE=ID+MM IF(IE.GT.NS)IE=IE-NS IF(IFAC.EQ.5) GO TO 500 IF=IE+MM IF(IF.GT.NS)IF=IF-NS IF(IFAC.EQ.6) GO TO 600 IG=IF+MM IF(IG.GT.NS)IG=IG-NS IF(IFAC.EQ.7) GO TO 700 IH=IG+MM IF(IH.GT.NS)IH=IH-NS IF(IFAC.EQ.8) GO TO 800 II=IH+MM IF(II.GT.NS)II=II-NS IF(IFAC.EQ.9) GO TO 900 IJ=II+MM IF(IJ.GT.NS)IJ=IJ-NS IF(IFAC.EQ.10) STOP 'NO MODULE FOR FACTOR 10' IK=IJ+MM IF(IK.GT.NS)IK=IK-NS IF(IFAC.EQ.11) GO TO 1100 STOP 'NO MODULES FOR FACTORS GREATER THAN 11' C C C C FACTOR 2 C -------------------- 200 CONTINUE DO 210 L=1,M CDIR$ IVDEP DO 211 L1=1,NUM JJJ=(L1-1)*JSKIP AA=A(IA+JJJ) BA=B(IA+JJJ) AB=A(IB+JJJ) BB=B(IB+JJJ) A(IA+JJJ)=AA+AB B(IA+JJJ)=BA+BB A(IB+JJJ)=AA-AB B(IB+JJJ)=BA-BB 211 CONTINUE IX=IB+ISKIP IB=IA+ISKIP IA=IX 210 CONTINUE GO TO 1000 C C FACTOR 3 C -------------------- 300 CONTINUE Z3=SIN60 IF(MU.EQ.2)Z3=-Z3 DO 310 L=1,M CDIR$ IVDEP DO 311 L1=1,NUM JJJ=(L1-1)*JSKIP AA=A(IA+JJJ) BA=B(IA+JJJ) AB=A(IB+JJJ) BB=B(IB+JJJ) AC=A(IC+JJJ) BC=B(IC+JJJ) T1R=AB+AC T1I=BB+BC T2R=AA-0.5*T1R T2I=BA-0.5*T1I T3R=Z3*(AB-AC) T3I=Z3*(BB-BC) A(IA+JJJ)=AA+T1R B(IA+JJJ)=BA+T1I A(IB+JJJ)=T2R-T3I B(IB+JJJ)=T2I+T3R A(IC+JJJ)=T2R+T3I B(IC+JJJ)=T2I-T3R 311 CONTINUE IX=IC+ISKIP IC=IB+ISKIP IB=IA+ISKIP IA=IX 310 CONTINUE GO TO 1000 C C FACTOR 4 C -------------------- 400 CONTINUE Z4=1.0 IF(MU.EQ.3)Z4=-Z4 DO 410 L=1,M CDIR$ IVDEP DO 411 L1=1,NUM JJJ=(L1-1)*JSKIP AA=A(IA+JJJ) BA=B(IA+JJJ) AB=A(IB+JJJ) BB=B(IB+JJJ) AC=A(IC+JJJ) BC=B(IC+JJJ) AD=A(ID+JJJ) BD=B(ID+JJJ) T1R=AA+AC T1I=BA+BC T2R=AB+AD T2I=BB+BD T3R=AA-AC T3I=BA-BC T4R=Z4*(AB-AD) T4I=Z4*(BB-BD) A(IA+JJJ)=T1R+T2R B(IA+JJJ)=T1I+T2I A(IB+JJJ)=T3R-T4I B(IB+JJJ)=T3I+T4R A(IC+JJJ)=T1R-T2R B(IC+JJJ)=T1I-T2I A(ID+JJJ)=T3R+T4I B(ID+JJJ)=T3I-T4R 411 CONTINUE IX=ID+ISKIP ID=IC+ISKIP IC=IB+ISKIP IB=IA+ISKIP IA=IX 410 CONTINUE GO TO 1000 C C FACTOR 5 C -------------------- 500 CONTINUE GO TO(501,502,503,504) MU 501 C1=SQ54 C2=SIN72 C3=SIN36 GO TO 505 502 C1=-SQ54 C2=SIN36 C3=-SIN72 GO TO 505 503 C1=-SQ54 C2=-SIN36 C3=SIN72 GO TO 505 504 C1=SQ54 C2=-SIN72 C3=-SIN36 505 DO 510 L=1,M CDIR$ IVDEP DO 511 L1=1,NUM JJJ=(L1-1)*JSKIP AA=A(IA+JJJ) BA=B(IA+JJJ) AB=A(IB+JJJ) BB=B(IB+JJJ) AC=A(IC+JJJ) BC=B(IC+JJJ) AD=A(ID+JJJ) BD=B(ID+JJJ) AE=A(IE+JJJ) BE=B(IE+JJJ) T1R=AB+AE T1I=BB+BE T2R=AC+AD T2I=BC+BD T3R=AB-AE T3I=BB-BE T4R=AC-AD T4I=BC-BD T5R=T1R+T2R T5I=T1I+T2I T6R=C1*(T1R-T2R) T6I=C1*(T1I-T2I) T7R=AA-0.25*T5R T7I=BA-0.25*T5I T8R=T7R+T6R T8I=T7I+T6I T9R=T7R-T6R T9I=T7I-T6I T10R=C2*T3R+C3*T4R T10I=C2*T3I+C3*T4I T11R=C3*T3R-C2*T4R T11I=C3*T3I-C2*T4I A(IA+JJJ)=AA+T5R B(IA+JJJ)=BA+T5I A(IB+JJJ)=T8R-T10I B(IB+JJJ)=T8I+T10R A(IC+JJJ)=T9R-T11I B(IC+JJJ)=T9I+T11R A(ID+JJJ)=T9R+T11I B(ID+JJJ)=T9I-T11R A(IE+JJJ)=T8R+T10I B(IE+JJJ)=T8I-T10R 511 CONTINUE IX=IE+ISKIP IE=ID+ISKIP ID=IC+ISKIP IC=IB+ISKIP IB=IA+ISKIP IA=IX 510 CONTINUE GO TO 1000 C C FACTOR 6 C -------------------- 600 CONTINUE Z3=SIN60 IF(MU.EQ.5)Z3=-Z3 DO 610 L=1,M CDIR$ IVDEP DO 611 L1=1,NUM JJJ=(L1-1)*JSKIP AA=A(IA+JJJ) BA=B(IA+JJJ) AB=A(IB+JJJ) BB=B(IB+JJJ) AC=A(IC+JJJ) BC=B(IC+JJJ) AD=A(ID+JJJ) BD=B(ID+JJJ) AE=A(IE+JJJ) BE=B(IE+JJJ) AF=A(IF+JJJ) BF=B(IF+JJJ) T1R=AA+AD T1I=BA+BD T2R=AC+AF T2I=BC+BF T3R=AE+AB T3I=BE+BB T4R=AA-AD T4I=BA-BD T5R=AC-AF T5I=BC-BF T6R=AE-AB T6I=BE-BB T7R=T2R+T3R T7I=T2I+T3I T8R=T2R-T3R T8I=T2I-T3I T9R=T5R+T6R T9I=T5I+T6I T10R=T5R-T6R T10I=T5I-T6I T11R=T1R-0.5*T7R T11I=T1I-0.5*T7I T12R=T4R-0.5*T9R T12I=T4I-0.5*T9I T13R=Z3*T8R T13I=Z3*T8I T14R=Z3*T10R T14I=Z3*T10I A(IA+JJJ)=T1R+T7R B(IA+JJJ)=T1I+T7I A(IB+JJJ)=T12R-T14I B(IB+JJJ)=T12I+T14R A(IC+JJJ)=T11R+T13I B(IC+JJJ)=T11I-T13R A(ID+JJJ)=T4R+T9R B(ID+JJJ)=T4I+T9I A(IE+JJJ)=T11R-T13I B(IE+JJJ)=T11I+T13R A(IF+JJJ)=T12R+T14I 611 B(IF+JJJ)=T12I-T14R IX=IF+ISKIP IF=IE+ISKIP IE=ID+ISKIP ID=IC+ISKIP IC=IB+ISKIP IB=IA+ISKIP IA=IX 610 CONTINUE GO TO 1000 C C FACTOR 7 C -------------------- 700 CONTINUE GO TO(701,702,703,704,705,706) MU 701 C1=C71 C2=C72 C3=C73 C4=C73 C6=C71 C9=C72 S1=S71 S2=S72 S3=S73 S4=-S73 S6=-S71 S9=S72 GO TO 707 702 C1=C72 C2=C73 C3=C71 C4=C71 C6=C72 C9=C73 S1=S72 S2=-S73 S3=-S71 S4=S71 S6=-S72 S9=-S73 GO TO 707 703 C1=C73 C2=C71 C3=C72 C4=C72 C6=C73 C9=C71 S1=S73 S2=-S71 S3=S72 S4=-S72 S6=-S73 S9=-S71 GO TO 707 704 C1=C73 C2=C71 C3=C72 C4=C72 C6=C73 C9=C71 S1=-S73 S2=S71 S3=-S72 S4=S72 S6=S73 S9=S71 GO TO 707 705 C1=C72 C2=C73 C3=C71 C4=C71 C6=C72 C9=C73 S1=-S72 S2=S73 S3=S71 S4=-S71 S6=S72 S9=S73 GO TO 707 706 C1=C71 C2=C72 C3=C73 C4=C73 C6=C71 C9=C72 S1=-S71 S2=-S72 S3=-S73 S4=S73 S6=S71 S9=-S72 707 DO 710 L=1,M CDIR$ IVDEP DO 711 L1=1,NUM JJJ=(L1-1)*JSKIP AA=A(IA+JJJ) BA=B(IA+JJJ) AB=A(IB+JJJ) BB=B(IB+JJJ) AC=A(IC+JJJ) BC=B(IC+JJJ) AD=A(ID+JJJ) BD=B(ID+JJJ) AE=A(IE+JJJ) BE=B(IE+JJJ) AF=A(IF+JJJ) BF=B(IF+JJJ) AG=A(IG+JJJ) BG=B(IG+JJJ) T1R=AB+AG T1I=BB+BG T2R=AC+AF T2I=BC+BF T3R=AD+AE T3I=BD+BE T4R=AB-AG T4I=BB-BG T5R=AC-AF T5I=BC-BF T6R=AD-AE T6I=BD-BE R1R=AA+T1R*C1+T2R*C2+T3R*C3 R1I=BA+T1I*C1+T2I*C2+T3I*C3 R2R=T4R*S1+T5R*S2+T6R*S3 R2I=T4I*S1+T5I*S2+T6I*S3 R3R=AA+T1R*C2+T2R*C4+T3R*C6 R3I=BA+T1I*C2+T2I*C4+T3I*C6 R4R=T4R*S2+T5R*S4+T6R*S6 R4I=T4I*S2+T5I*S4+T6I*S6 R5R=AA+T1R*C3+T2R*C6+T3R*C9 R5I=BA+T1I*C3+T2I*C6+T3I*C9 R6R=T4R*S3+T5R*S6+T6R*S9 R6I=T4I*S3+T5I*S6+T6I*S9 A(IA+JJJ)=AA+T1R+T2R+T3R B(IA+JJJ)=BA+T1I+T2I+T3I A(IB+JJJ)=R1R-R2I B(IB+JJJ)=R1I+R2R A(IC+JJJ)=R3R-R4I B(IC+JJJ)=R3I+R4R A(ID+JJJ)=R5R-R6I B(ID+JJJ)=R5I+R6R A(IE+JJJ)=R5R+R6I B(IE+JJJ)=R5I-R6R A(IF+JJJ)=R3R+R4I B(IF+JJJ)=R3I-R4R A(IG+JJJ)=R1R+R2I 711 B(IG+JJJ)=R1I-R2R IX=IG+ISKIP IG=IF+ISKIP IF=IE+ISKIP IE=ID+ISKIP ID=IC+ISKIP IC=IB+ISKIP IB=IA+ISKIP IA=IX 710 CONTINUE GO TO 1000 C C FACTOR 8 C -------------------- 800 CONTINUE Z4=1. IF(MU.EQ.3.OR.MU.EQ.7)Z4=-Z4 MU=(MU+1)/2 GO TO (801,802,803,804)MU 801 D1=SR2 D2=SR2 D4=1 D5=-SR2 D6=SR2 GO TO 805 802 D1=-SR2 D2=SR2 D4=-1 D5=SR2 D6=SR2 GO TO 805 803 D1=-SR2 D2=-SR2 D4=1 D5=SR2 D6=-SR2 GO TO 805 804 D1=SR2 D2=-SR2 D4=-1 D5=-SR2 D6=-SR2 805 DO 810 L=1,M CDIR$ IVDEP DO 811 L1=1,NUM JJJ=(L1-1)*JSKIP AA=A(IA+JJJ) BA=B(IA+JJJ) AB=A(IC+JJJ) BB=B(IC+JJJ) AC=A(IE+JJJ) BC=B(IE+JJJ) AD=A(IG+JJJ) BD=B(IG+JJJ) T1R=AA+AC T1I=BA+BC T2R=AB+AD T2I=BB+BD T3R=AA-AC T3I=BA-BC T4R=Z4*(AB-AD) T4I=Z4*(BB-BD) C(1)=T1R+T2R D(1)=T1I+T2I C(3)=T3R-T4I D(3)=T3I+T4R C(5)=T1R-T2R D(5)=T1I-T2I C(7)=T3R+T4I D(7)=T3I-T4R AA=A(IB+JJJ) BA=B(IB+JJJ) AB=A(ID+JJJ) BB=B(ID+JJJ) AC=A(IF+JJJ) BC=B(IF+JJJ) AD=A(IH+JJJ) BD=B(IH+JJJ) T1R=AA+AC T1I=BA+BC T2R=AB+AD T2I=BB+BD T3R=AA-AC T3I=BA-BC T4R=Z4*(AB-AD) T4I=Z4*(BB-BD) C(9)=T1R+T2R D(9)=T1I+T2I X1R=T3R-T4I X1I=T3I+T4R X2R=T1R-T2R X2I=T1I-T2I X3R=T3R+T4I X3I=T3I-T4R C(11)=D1*X1R-D2*X1I D(11)=D2*X1R+D1*X1I C(13)=-D4*X2I D(13)=D4*X2R C(15)=D5*X3R-D6*X3I D(15)=D6*X3R+D5*X3I A(IA+JJJ)=C(1)+C(9) B(IA+JJJ)=D(1)+D(9) A(IB+JJJ)=C(3)+C(11) B(IB+JJJ)=D(3)+D(11) A(IC+JJJ)=C(5)+C(13) B(IC+JJJ)=D(5)+D(13) A(ID+JJJ)=C(7)+C(15) B(ID+JJJ)=D(7)+D(15) A(IE+JJJ)=C(1)-C(9) B(IE+JJJ)=D(1)-D(9) A(IF+JJJ)=C(3)-C(11) B(IF+JJJ)=D(3)-D(11) A(IG+JJJ)=C(5)-C(13) B(IG+JJJ)=D(5)-D(13) A(IH+JJJ)=C(7)-C(15) 811 B(IH+JJJ)=D(7)-D(15) IX=IH+ISKIP IH=IG+ISKIP IG=IF+ISKIP IF=IE+ISKIP IE=ID+ISKIP ID=IC+ISKIP IC=IB+ISKIP IB=IA+ISKIP IA=IX 810 CONTINUE GO TO 1000 C C FACTOR 9 C -------------------- 900 CONTINUE Z3=SIN60 IF(MU.EQ.2.OR.MU.EQ.5.OR.MU.EQ.8)Z3=-Z3 GO TO (901,902,903,904,905,906,907,908)MU 901 D1=C91 D2=S91 D3=C92 D4=S92 D7=C94 D8=S94 GO TO 909 902 D1=C92 D2=S92 D3=C94 D4=S94 D7=C91 D8=-S91 GO TO 909 903 CONTINUE 904 D1=C94 D2=S94 D3=C91 D4=-S91 D7=C92 D8=-S92 GO TO 909 905 D1=C94 D2=-S94 D3=C91 D4=S91 D7=C92 D8=S92 GO TO 909 906 CONTINUE 907 D1=C92 D2=-S92 D3=C94 D4=-S94 D7=C91 D8=S91 GO TO 909 908 D1=C91 D2=-S91 D3=C92 D4=-S92 D7=C94 D8=-S94 909 DO 910 L=1,M CDIR$ IVDEP DO 911 L1=1,NUM JJJ=(L1-1)*JSKIP AA=A(IA+JJJ) BA=B(IA+JJJ) AB=A(ID+JJJ) BB=B(ID+JJJ) AC=A(IG+JJJ) BC=B(IG+JJJ) T1R=AB+AC T1I=BB+BC T2R=AA-0.5*T1R T2I=BA-0.5*T1I T3R=Z3*(AB-AC) T3I=Z3*(BB-BC) C(1)=AA+T1R D(1)=BA+T1I C(3)=T2R-T3I D(3)=T2I+T3R C(5)=T2R+T3I D(5)=T2I-T3R AA=A(IB+JJJ) BA=B(IB+JJJ) AB=A(IE+JJJ) BB=B(IE+JJJ) AC=A(IH+JJJ) BC=B(IH+JJJ) T1R=AB+AC T1I=BB+BC T2R=AA-0.5*T1R T2I=BA-0.5*T1I T3R=Z3*(AB-AC) T3I=Z3*(BB-BC) C(7)=AA+T1R D(7)=BA+T1I X1R=T2R-T3I X1I=T2I+T3R X2R=T2R+T3I X2I=T2I-T3R C(9)=D1*X1R-D2*X1I D(9)=D2*X1R+D1*X1I C(11)=D3*X2R-D4*X2I D(11)=D4*X2R+D3*X2I AA=A(IC+JJJ) BA=B(IC+JJJ) AB=A(IF+JJJ) BB=B(IF+JJJ) AC=A(II+JJJ) BC=B(II+JJJ) T1R=AB+AC T1I=BB+BC T2R=AA-0.5*T1R T2I=BA-0.5*T1I T3R=Z3*(AB-AC) T3I=Z3*(BB-BC) C(13)=AA+T1R D(13)=BA+T1I X1R=T2R-T3I X1I=T2I+T3R X2R=T2R+T3I X2I=T2I-T3R C(15)=D3*X1R-D4*X1I D(15)=D4*X1R+D3*X1I C(17)=D7*X2R-D8*X2I D(17)=D8*X2R+D7*X2I T1R=C(7)+C(13) T1I=D(7)+D(13) T2R=C(1)-0.5*T1R T2I=D(1)-0.5*T1I T3R=Z3*(C(7)-C(13)) T3I=Z3*(D(7)-D(13)) E(1)=C(1)+T1R F(1)=D(1)+T1I E(7)=T2R-T3I F(7)=T2I+T3R E(13)=T2R+T3I F(13)=T2I-T3R T1R=C(9)+C(15) T1I=D(9)+D(15) T2R=C(3)-0.5*T1R T2I=D(3)-0.5*T1I T3R=Z3*(C(9)-C(15)) T3I=Z3*(D(9)-D(15)) E(3)=C(3)+T1R F(3)=D(3)+T1I E(9)=T2R-T3I F(9)=T2I+T3R E(15)=T2R+T3I F(15)=T2I-T3R T1R=C(11)+C(17) T1I=D(11)+D(17) T2R=C(5)-0.5*T1R T2I=D(5)-0.5*T1I T3R=Z3*(C(11)-C(17)) T3I=Z3*(D(11)-D(17)) E(5)=C(5)+T1R F(5)=D(5)+T1I E(11)=T2R-T3I F(11)=T2I+T3R E(17)=T2R+T3I F(17)=T2I-T3R A(IA+JJJ)=E(1) B(IA+JJJ)=F(1) A(IB+JJJ)=E(3) B(IB+JJJ)=F(3) A(IC+JJJ)=E(5) B(IC+JJJ)=F(5) A(ID+JJJ)=E(7) B(ID+JJJ)=F(7) A(IE+JJJ)=E(9) B(IE+JJJ)=F(9) A(IF+JJJ)=E(11) B(IF+JJJ)=F(11) A(IG+JJJ)=E(13) B(IG+JJJ)=F(13) A(IH+JJJ)=E(15) B(IH+JJJ)=F(15) A(II+JJJ)=E(17) 911 B(II+JJJ)=F(17) IX=II+ISKIP II=IH+ISKIP IH=IG+ISKIP IG=IF+ISKIP IF=IE+ISKIP IE=ID+ISKIP ID=IC+ISKIP IC=IB+ISKIP IB=IA+ISKIP IA=IX 910 CONTINUE GO TO 1000 C C FACTOR 11 C _____________________ 1100 CONTINUE GO TO (1,2,3,4,5,6,7,8,9,10)MU 1 C1=C111 C2=C112 C3=C113 C4=C114 C5=C115 C6=C115 C8=C113 C9=C112 C10=C111 C12=C111 C15=C114 C16=C115 C20=C112 C25=C113 S1=S111 S2=S112 S3=S113 S4=S114 S5=S115 S6=-S115 S8=-S113 S9=-S112 S10=-S111 S12=S111 S15=S114 S16=S115 S20=-S112 S25=S113 GO TO 11 2 C1=C112 C2=C114 C3=C115 C4=C113 C5=C111 C6=C111 C8=C115 C9=C114 C10=C112 C12=C112 C15=C113 C16=C111 C20=C114 C25=C115 S1=S112 S2=S114 S3=-S115 S4=-S113 S5=-S111 S6=S111 S8=S115 S9=-S114 S10=-S112 S12=S112 S15=-S113 S16=-S111 S20=-S114 S25=-S115 GO TO 11 3 C1=C113 C2=C115 C3=C112 C4=C111 C5=C114 C6=C114 C8=C112 C9=C115 C10=C113 C12=C113 C15=C111 C16=C114 C20=C115 C25=C112 S1=S113 S2=-S115 S3=-S112 S4=S111 S5=S114 S6=-S114 S8=S112 S9=S115 S10=-S113 S12=S113 S15=S111 S16=S114 S20=S115 S25=-S112 GO TO 11 4 C1=C114 C2=C113 C3=C111 C4=C115 C5=C112 C6=C112 C8=C111 C9=C113 C10=C114 C12=C114 C15=C115 C16=C112 C20=C113 C25=C111 S1=S114 S2=-S113 S3=S111 S4=S115 S5=-S112 S6=S112 S8=-S111 S9=S113 S10=-S114 S12=S114 S15=S115 S16=-S112 S20=S113 S25=S111 GO TO 11 5 C1=C115 C2=C111 C3=C114 C4=C112 C5=C113 C6=C113 C8=C114 C9=C111 C10=C115 C12=C115 C15=C112 C16=C113 C20=C111 C25=C114 S1=S115 S2=-S111 S3=S114 S4=-S112 S5=S113 S6=-S113 S8=-S114 S9=S111 S10=-S115 S12=S115 S15=-S112 S16=S113 S20=S111 S25=S114 GO TO 11 6 C1=C115 C2=C111 C3=C114 C4=C112 C5=C113 C6=C113 C8=C114 C9=C111 C10=C115 C12=C115 C15=C112 C16=C113 C20=C111 C25=C114 S1=-S115 S2=S111 S3=-S114 S4=S112 S5=-S113 S6=S113 S8=S114 S9=-S111 S10=S115 S12=-S115 S15=S112 S16=-S113 S20=-S111 S25=-S114 GO TO 11 7 C1=C114 C2=C113 C3=C111 C4=C115 C5=C112 C6=C112 C8=C111 C9=C113 C10=C114 C12=C114 C15=C115 C16=C112 C20=C113 C25=C111 S1=-S114 S2=S113 S3=-S111 S4=-S115 S5=S112 S6=-S112 S8=S111 S9=-S113 S10=S114 S12=-S114 S15=-S115 S16=S112 S20=-S113 S25=-S111 GO TO 11 8 C1=C113 C2=C115 C3=C112 C4=C111 C5=C114 C6=C114 C8=C112 C9=C115 C10=C113 C12=C113 C15=C111 C16=C114 C20=C115 C25=C112 S1=-S113 S2=S115 S3=S112 S4=-S111 S5=-S114 S6=S114 S8=-S112 S9=-S115 S10=S113 S12=-S113 S15=-S111 S16=-S114 S20=-S115 S25=S112 GO TO 11 9 C1=C112 C2=C114 C3=C115 C4=C113 C5=C111 C6=C111 C8=C115 C9=C114 C10=C112 C12=C112 C15=C113 C16=C111 C20=C114 C25=C115 S1=-S112 S2=-S114 S3=S115 S4=S113 S5=S111 S6=-S111 S8=-S115 S9=S114 S10=S112 S12=-S112 S15=S113 S16=S111 S20=S114 S25=S115 GO TO 11 10 C1=C111 C2=C112 C3=C113 C4=C114 C5=C115 C6=C115 C8=C113 C9=C112 C10=C111 C12=C111 C15=C114 C16=C115 C20=C112 C25=C113 S1=-S111 S2=-S112 S3=-S113 S4=-S114 S5=-S115 S6=S115 S8=S113 S9=S112 S10=S111 S12=-S111 S15=-S114 S16=-S115 S20=S112 S25=-S113 11 DO 1110 L=1,M CDIR$ IVDEP DO 1111 L1=1,NUM JJJ=(L1-1)*JSKIP AA=A(IA+JJJ) BA=B(IA+JJJ) AB=A(IB+JJJ) BB=B(IB+JJJ) AC=A(IC+JJJ) BC=B(IC+JJJ) AD=A(ID+JJJ) BD=B(ID+JJJ) AE=A(IE+JJJ) BE=B(IE+JJJ) AF=A(IF+JJJ) BF=B(IF+JJJ) AG=A(IG+JJJ) BG=B(IG+JJJ) AH=A(IH+JJJ) BH=B(IH+JJJ) AI=A(II+JJJ) BI=B(II+JJJ) AJ=A(IJ+JJJ) BJ=B(IJ+JJJ) AK=A(IK+JJJ) BK=B(IK+JJJ) T1R=AB+AK T1I=BB+BK T2R=AC+AJ T2I=BC+BJ T3R=AD+AI T3I=BD+BI T4R=AE+AH T4I=BE+BH T5R=AF+AG T5I=BF+BG T6R=AB-AK T6I=BB-BK T7R=AC-AJ T7I=BC-BJ T8R=AD-AI T8I=BD-BI T9R=AE-AH T9I=BE-BH T10R=AF-AG T10I=BF-BG R1R=AA+T1R*C1+T2R*C2+T3R*C3+T4R*C4+T5R*C5 R1I=BA+T1I*C1+T2I*C2+T3I*C3+T4I*C4+T5I*C5 R2R=T6R*S1+T7R*S2+T8R*S3+T9R*S4+T10R*S5 R2I=T6I*S1+T7I*S2+T8I*S3+T9I*S4+T10I*S5 R3R=AA+T1R*C2+T2R*C4+T3R*C6+T4R*C8+T5R*C10 R3I=BA+T1I*C2+T2I*C4+T3I*C6+T4I*C8+T5I*C10 R4R=T6R*S2+T7R*S4+T8R*S6+T9R*S8+T10R*S10 R4I=T6I*S2+T7I*S4+T8I*S6+T9I*S8+T10I*S10 R5R=AA+T1R*C3+T2R*C6+T3R*C9+T4R*C12+T5R*C15 R5I=BA+T1I*C3+T2I*C6+T3I*C9+T4I*C12+T5I*C15 R6R=T6R*S3+T7R*S6+T8R*S9+T9R*S12+T10R*S15 R6I=T6I*S3+T7I*S6+T8I*S9+T9I*S12+T10I*S15 R7R=AA+T1R*C4+T2R*C8+T3R*C12+T4R*C16+T5R*C20 R7I=BA+T1I*C4+T2I*C8+T3I*C12+T4I*C16+T5I*C20 R8R=T6R*S4+T7R*S8+T8R*S12+T9R*S16+T10R*S20 R8I=T6I*S4+T7I*S8+T8I*S12+T9I*S16+T10I*S20 R9R=AA+T1R*C5+T2R*C10+T3R*C15+T4R*C20+T5R*C25 R9I=BA+T1I*C5+T2I*C10+T3I*C15+T4I*C20+T5I*C25 R10R=T6R*S5+T7R*S10+T8R*S15+T9R*S20+T10R*S25 R10I=T6I*S5+T7I*S10+T8I*S15+T9I*S20+T10I*S25 A(IA+JJJ)=AA+T1R+T2R+T3R+T4R+T5R B(IA+JJJ)=BA+T1I+T2I+T3I+T4I+T5I A(IB+JJJ)=R1R-R2I B(IB+JJJ)=R1I+R2R A(IC+JJJ)=R3R-R4I B(IC+JJJ)=R3I+R4R A(ID+JJJ)=R5R-R6I B(ID+JJJ)=R5I+R6R A(IE+JJJ)=R7R-R8I B(IE+JJJ)=R7I+R8R A(IF+JJJ)=R9R-R10I B(IF+JJJ)=R9I+R10R A(IG+JJJ)=R9R+R10I B(IG+JJJ)=R9I-R10R A(IH+JJJ)=R7R+R8I B(IH+JJJ)=R7I-R8R A(II+JJJ)=R5R+R6I B(II+JJJ)=R5I-R6R A(IJ+JJJ)=R3R+R4I B(IJ+JJJ)=R3I-R4R A(IK+JJJ)=R1R+R2I 1111 B(IK+JJJ)=R1I-R2R IX=IK+ISKIP IK=IJ+ISKIP IJ=II+ISKIP II=IH+ISKIP IH=IG+ISKIP IG=IF+ISKIP IF=IE+ISKIP IE=ID+ISKIP ID=IC+ISKIP IC=IB+ISKIP IB=IA+ISKIP IA=IX 1110 CONTINUE C 1000 CONTINUE RETURN END c################################################### SUBROUTINE PFAFAC(IFC,NFAC,N) DIMENSION IFC(*),IC(15) DO 11 I=1,15 11 IC(I)=0 NUM=N ICC=0 71 IF(NUM/2*2.EQ.NUM)THEN ICC=ICC+1 IC(2)=IC(2)+1 IFC(ICC)=2 NUM=NUM/2 IF(NUM.EQ.1)GOTO 555 GOTO 71 ENDIF 72 IF(NUM/3*3.EQ.NUM)THEN ICC=ICC+1 IC(3)=IC(3)+1 IFC(ICC)=3 NUM=NUM/3 IF(NUM.EQ.1)GOTO 555 GOTO 72 ENDIF 75 IF(NUM/5*5.EQ.NUM)THEN ICC=ICC+1 IC(5)=IC(5)+1 IFC(ICC)=5 NUM=NUM/5 IF(NUM.EQ.1)GOTO 555 GOTO 75 ENDIF 76 IF(NUM/7*7.EQ.NUM)THEN ICC=ICC+1 IC(7)=IC(7)+1 IFC(ICC)=7 NUM=NUM/7 IF(NUM.EQ.1)GOTO 555 GOTO 75 ENDIF 77 IF(NUM/11*11.EQ.NUM)THEN ICC=ICC+1 IC(11)=IC(11)+1 IFC(ICC)=11 NUM=NUM/11 IF(NUM.EQ.1)GOTO 555 GOTO 77 ENDIF 555 CONTINUE IF(ICC.EQ.0)THEN PRINT *,'PRIME NUMBER, GT. 11 !!!' STOP ENDIF NNN=1 DO 10 I=1,ICC 10 NNN=NNN*IFC(I) IF(NNN.NE.N)THEN PRINT *,'THE NUMBER INCLUDES PRIME FACTOR GT. 11 !!!' STOP ENDIF IF(IC(2).EQ.3)THEN IC(8)=1 IC(2)=IC(2)-3 ENDIF IF(IC(2).EQ.2)THEN IC(4)=1 IC(2)=IC(2)-2 ENDIF IF(IC(3).EQ.2)THEN IC(9)=1 IC(3)=IC(3)-2 ENDIF IF(IC(2).EQ.1.AND.IC(3).EQ.1)THEN IC(6)=1 IC(2)=IC(2)-1 IC(3)=IC(3)-1 ENDIF ICC=0 DO 12 I=2,11 IF(IC(I).GT.1)THEN PRINT *,'SORRY, MULTIPLE PRIME FACTOR !!!' STOP ENDIF IF(IC(I).EQ.0)GOTO 12 ICC=ICC+1 IFC(ICC)=I 12 CONTINUE 556 CONTINUE NFAC=ICC RETURN END