updated top-level README and version_decl for V4.5 (#1847)
[WRF.git] / external / fftpack / fftpack5 / z1f4kb.F
blobc8407f8a3c01eeb0c43c3e3663f13e808cc762d0
1 subroutine z1f4kb ( ido, l1, na, cc, in1, ch, in2, wa )
3 !*****************************************************************************80
5 !! Z1F4KB is an FFTPACK5 auxiliary routine.
9 !  Modified:
11 !    26 Ausust 2009
13 !  Author:
15 !    Original complex single precision by Paul Swarztrauber, Richard Valent.
16 !    Complex double precision version by John Burkardt.
18 !  Reference:
20 !    Paul Swarztrauber,
21 !    Vectorizing the Fast Fourier Transforms,
22 !    in Parallel Computations,
23 !    edited by G. Rodrigue,
24 !    Academic Press, 1982.
26 !    Paul Swarztrauber,
27 !    Fast Fourier Transform Algorithms for Vector Computers,
28 !    Parallel Computing, pages 45-63, 1984.
30 !  Parameters:
32   implicit none
34   integer ( kind = 4 ) ido
35   integer ( kind = 4 ) in1
36   integer ( kind = 4 ) in2
37   integer ( kind = 4 ) l1
39   real ( kind = 8 ) cc(in1,l1,ido,4)
40   real ( kind = 8 ) ch(in2,l1,4,ido)
41   real ( kind = 8 ) ci2
42   real ( kind = 8 ) ci3
43   real ( kind = 8 ) ci4
44   real ( kind = 8 ) cr2
45   real ( kind = 8 ) cr3
46   real ( kind = 8 ) cr4
47   integer ( kind = 4 ) i
48   integer ( kind = 4 ) k
49   integer ( kind = 4 ) na
50   real ( kind = 8 ) ti1
51   real ( kind = 8 ) ti2
52   real ( kind = 8 ) ti3
53   real ( kind = 8 ) ti4
54   real ( kind = 8 ) tr1
55   real ( kind = 8 ) tr2
56   real ( kind = 8 ) tr3
57   real ( kind = 8 ) tr4
58   real ( kind = 8 ) wa(ido,3,2)
60   if ( 1 < ido .or. na == 1 ) then
62     do k = 1, l1
63       ti1 = cc(2,k,1,1)-cc(2,k,1,3)
64       ti2 = cc(2,k,1,1)+cc(2,k,1,3)
65       tr4 = cc(2,k,1,4)-cc(2,k,1,2)
66       ti3 = cc(2,k,1,2)+cc(2,k,1,4)
67       tr1 = cc(1,k,1,1)-cc(1,k,1,3)
68       tr2 = cc(1,k,1,1)+cc(1,k,1,3)
69       ti4 = cc(1,k,1,2)-cc(1,k,1,4)
70       tr3 = cc(1,k,1,2)+cc(1,k,1,4)
71       ch(1,k,1,1) = tr2+tr3
72       ch(1,k,3,1) = tr2-tr3
73       ch(2,k,1,1) = ti2+ti3
74       ch(2,k,3,1) = ti2-ti3
75       ch(1,k,2,1) = tr1+tr4
76       ch(1,k,4,1) = tr1-tr4
77       ch(2,k,2,1) = ti1+ti4
78       ch(2,k,4,1) = ti1-ti4
79     end do
81     do i = 2, ido
82       do k = 1, l1
83         ti1 = cc(2,k,i,1)-cc(2,k,i,3)
84         ti2 = cc(2,k,i,1)+cc(2,k,i,3)
85         ti3 = cc(2,k,i,2)+cc(2,k,i,4)
86         tr4 = cc(2,k,i,4)-cc(2,k,i,2)
87         tr1 = cc(1,k,i,1)-cc(1,k,i,3)
88         tr2 = cc(1,k,i,1)+cc(1,k,i,3)
89         ti4 = cc(1,k,i,2)-cc(1,k,i,4)
90         tr3 = cc(1,k,i,2)+cc(1,k,i,4)
91         ch(1,k,1,i) = tr2+tr3
92         cr3 = tr2-tr3
93         ch(2,k,1,i) = ti2+ti3
94         ci3 = ti2-ti3
95         cr2 = tr1+tr4
96         cr4 = tr1-tr4
97         ci2 = ti1+ti4
98         ci4 = ti1-ti4
100         ch(1,k,2,i) = wa(i,1,1)*cr2-wa(i,1,2)*ci2
101         ch(2,k,2,i) = wa(i,1,1)*ci2+wa(i,1,2)*cr2
102         ch(1,k,3,i) = wa(i,2,1)*cr3-wa(i,2,2)*ci3
103         ch(2,k,3,i) = wa(i,2,1)*ci3+wa(i,2,2)*cr3
104         ch(1,k,4,i) = wa(i,3,1)*cr4-wa(i,3,2)*ci4
105         ch(2,k,4,i) = wa(i,3,1)*ci4+wa(i,3,2)*cr4
107        end do
108     end do
110   else
112     do k = 1, l1
113        ti1 = cc(2,k,1,1)-cc(2,k,1,3)
114        ti2 = cc(2,k,1,1)+cc(2,k,1,3)
115        tr4 = cc(2,k,1,4)-cc(2,k,1,2)
116        ti3 = cc(2,k,1,2)+cc(2,k,1,4)
117        tr1 = cc(1,k,1,1)-cc(1,k,1,3)
118        tr2 = cc(1,k,1,1)+cc(1,k,1,3)
119        ti4 = cc(1,k,1,2)-cc(1,k,1,4)
120        tr3 = cc(1,k,1,2)+cc(1,k,1,4)
121        cc(1,k,1,1) = tr2+tr3
122        cc(1,k,1,3) = tr2-tr3
123        cc(2,k,1,1) = ti2+ti3
124        cc(2,k,1,3) = ti2-ti3
125        cc(1,k,1,2) = tr1+tr4
126        cc(1,k,1,4) = tr1-tr4
127        cc(2,k,1,2) = ti1+ti4
128        cc(2,k,1,4) = ti1-ti4
129     end do
131   end if
133   return