Mac binaries
[jabaws.git] / website / archive / binaries / mac / src / disembl / Tisean_3.0.1 / source_f / slatec / radb4.f
1 *DECK RADB4
2       SUBROUTINE RADB4 (IDO, L1, CC, CH, WA1, WA2, WA3)
3 C***BEGIN PROLOGUE  RADB4
4 C***SUBSIDIARY
5 C***PURPOSE  Calculate the fast Fourier transform of subvectors of
6 C            length four.
7 C***LIBRARY   SLATEC (FFTPACK)
8 C***TYPE      SINGLE PRECISION (RADB4-S)
9 C***AUTHOR  Swarztrauber, P. N., (NCAR)
10 C***ROUTINES CALLED  (NONE)
11 C***REVISION HISTORY  (YYMMDD)
12 C   790601  DATE WRITTEN
13 C   830401  Modified to use SLATEC library source file format.
14 C   860115  Modified by Ron Boisvert to adhere to Fortran 77 by
15 C           (a) changing dummy array size declarations (1) to (*),
16 C           (b) changing definition of variable SQRT2 by using
17 C               FORTRAN intrinsic function SQRT instead of a DATA
18 C               statement.
19 C   881128  Modified by Dick Valent to meet prologue standards.
20 C   890831  Modified array declarations.  (WRB)
21 C   891214  Prologue converted to Version 4.0 format.  (BAB)
22 C   900402  Added TYPE section.  (WRB)
23 C***END PROLOGUE  RADB4
24       DIMENSION CC(IDO,4,*), CH(IDO,L1,4), WA1(*), WA2(*), WA3(*)
25 C***FIRST EXECUTABLE STATEMENT  RADB4
26       SQRT2 = SQRT(2.)
27       DO 101 K=1,L1
28          TR1 = CC(1,1,K)-CC(IDO,4,K)
29          TR2 = CC(1,1,K)+CC(IDO,4,K)
30          TR3 = CC(IDO,2,K)+CC(IDO,2,K)
31          TR4 = CC(1,3,K)+CC(1,3,K)
32          CH(1,K,1) = TR2+TR3
33          CH(1,K,2) = TR1-TR4
34          CH(1,K,3) = TR2-TR3
35          CH(1,K,4) = TR1+TR4
36   101 CONTINUE
37       IF (IDO-2) 107,105,102
38   102 IDP2 = IDO+2
39       IF((IDO-1)/2.LT.L1) GO TO 108
40       DO 104 K=1,L1
41 CDIR$ IVDEP
42          DO 103 I=3,IDO,2
43             IC = IDP2-I
44             TI1 = CC(I,1,K)+CC(IC,4,K)
45             TI2 = CC(I,1,K)-CC(IC,4,K)
46             TI3 = CC(I,3,K)-CC(IC,2,K)
47             TR4 = CC(I,3,K)+CC(IC,2,K)
48             TR1 = CC(I-1,1,K)-CC(IC-1,4,K)
49             TR2 = CC(I-1,1,K)+CC(IC-1,4,K)
50             TI4 = CC(I-1,3,K)-CC(IC-1,2,K)
51             TR3 = CC(I-1,3,K)+CC(IC-1,2,K)
52             CH(I-1,K,1) = TR2+TR3
53             CR3 = TR2-TR3
54             CH(I,K,1) = TI2+TI3
55             CI3 = TI2-TI3
56             CR2 = TR1-TR4
57             CR4 = TR1+TR4
58             CI2 = TI1+TI4
59             CI4 = TI1-TI4
60             CH(I-1,K,2) = WA1(I-2)*CR2-WA1(I-1)*CI2
61             CH(I,K,2) = WA1(I-2)*CI2+WA1(I-1)*CR2
62             CH(I-1,K,3) = WA2(I-2)*CR3-WA2(I-1)*CI3
63             CH(I,K,3) = WA2(I-2)*CI3+WA2(I-1)*CR3
64             CH(I-1,K,4) = WA3(I-2)*CR4-WA3(I-1)*CI4
65             CH(I,K,4) = WA3(I-2)*CI4+WA3(I-1)*CR4
66   103    CONTINUE
67   104 CONTINUE
68       GO TO 111
69   108 DO 110 I=3,IDO,2
70          IC = IDP2-I
71 CDIR$ IVDEP
72          DO 109 K=1,L1
73             TI1 = CC(I,1,K)+CC(IC,4,K)
74             TI2 = CC(I,1,K)-CC(IC,4,K)
75             TI3 = CC(I,3,K)-CC(IC,2,K)
76             TR4 = CC(I,3,K)+CC(IC,2,K)
77             TR1 = CC(I-1,1,K)-CC(IC-1,4,K)
78             TR2 = CC(I-1,1,K)+CC(IC-1,4,K)
79             TI4 = CC(I-1,3,K)-CC(IC-1,2,K)
80             TR3 = CC(I-1,3,K)+CC(IC-1,2,K)
81             CH(I-1,K,1) = TR2+TR3
82             CR3 = TR2-TR3
83             CH(I,K,1) = TI2+TI3
84             CI3 = TI2-TI3
85             CR2 = TR1-TR4
86             CR4 = TR1+TR4
87             CI2 = TI1+TI4
88             CI4 = TI1-TI4
89             CH(I-1,K,2) = WA1(I-2)*CR2-WA1(I-1)*CI2
90             CH(I,K,2) = WA1(I-2)*CI2+WA1(I-1)*CR2
91             CH(I-1,K,3) = WA2(I-2)*CR3-WA2(I-1)*CI3
92             CH(I,K,3) = WA2(I-2)*CI3+WA2(I-1)*CR3
93             CH(I-1,K,4) = WA3(I-2)*CR4-WA3(I-1)*CI4
94             CH(I,K,4) = WA3(I-2)*CI4+WA3(I-1)*CR4
95   109    CONTINUE
96   110 CONTINUE
97   111 IF (MOD(IDO,2) .EQ. 1) RETURN
98   105 DO 106 K=1,L1
99          TI1 = CC(1,2,K)+CC(1,4,K)
100          TI2 = CC(1,4,K)-CC(1,2,K)
101          TR1 = CC(IDO,1,K)-CC(IDO,3,K)
102          TR2 = CC(IDO,1,K)+CC(IDO,3,K)
103          CH(IDO,K,1) = TR2+TR2
104          CH(IDO,K,2) = SQRT2*(TR1-TI1)
105          CH(IDO,K,3) = TI2+TI2
106          CH(IDO,K,4) = -SQRT2*(TR1+TI1)
107   106 CONTINUE
108   107 RETURN
109       END