Merge remote-tracking branch 'origin/release-v4.6.1'
[WRF.git] / external / fftpack / fftpack5 / c1f4kb.F
blobc2bfa89e2d7d86479eb83c485f95b84a8a30d28f
1 subroutine c1f4kb ( ido, l1, na, cc, in1, ch, in2, wa )
3 !*****************************************************************************80
5 !! C1F4KB is an FFTPACK5 auxiliary routine.
8 !    Copyright (C) 1995-2004, Scientific Computing Division,
9 !    University Corporation for Atmospheric Research
11 !  Modified:
13 !    27 March 2009
15 !  Author:
17 !    Paul Swarztrauber
18 !    Richard Valent
20 !  Reference:
22 !    Paul Swarztrauber,
23 !    Vectorizing the Fast Fourier Transforms,
24 !    in Parallel Computations,
25 !    edited by G. Rodrigue,
26 !    Academic Press, 1982.
28 !    Paul Swarztrauber,
29 !    Fast Fourier Transform Algorithms for Vector Computers,
30 !    Parallel Computing, pages 45-63, 1984.
32 !  Parameters:
34   implicit none
36   integer ( kind = 4 ) ido
37   integer ( kind = 4 ) in1
38   integer ( kind = 4 ) in2
39   integer ( kind = 4 ) l1
41   real ( kind = 4 ) cc(in1,l1,ido,4)
42   real ( kind = 4 ) ch(in2,l1,4,ido)
43   real ( kind = 4 ) ci2
44   real ( kind = 4 ) ci3
45   real ( kind = 4 ) ci4
46   real ( kind = 4 ) cr2
47   real ( kind = 4 ) cr3
48   real ( kind = 4 ) cr4
49   integer ( kind = 4 ) i
50   integer ( kind = 4 ) k
51   integer ( kind = 4 ) na
52   real ( kind = 4 ) ti1
53   real ( kind = 4 ) ti2
54   real ( kind = 4 ) ti3
55   real ( kind = 4 ) ti4
56   real ( kind = 4 ) tr1
57   real ( kind = 4 ) tr2
58   real ( kind = 4 ) tr3
59   real ( kind = 4 ) tr4
60   real ( kind = 4 ) wa(ido,3,2)
62   if ( 1 < ido .or. na == 1 ) then
64     do k = 1, l1
65       ti1 = cc(2,k,1,1)-cc(2,k,1,3)
66       ti2 = cc(2,k,1,1)+cc(2,k,1,3)
67       tr4 = cc(2,k,1,4)-cc(2,k,1,2)
68       ti3 = cc(2,k,1,2)+cc(2,k,1,4)
69       tr1 = cc(1,k,1,1)-cc(1,k,1,3)
70       tr2 = cc(1,k,1,1)+cc(1,k,1,3)
71       ti4 = cc(1,k,1,2)-cc(1,k,1,4)
72       tr3 = cc(1,k,1,2)+cc(1,k,1,4)
73       ch(1,k,1,1) = tr2+tr3
74       ch(1,k,3,1) = tr2-tr3
75       ch(2,k,1,1) = ti2+ti3
76       ch(2,k,3,1) = ti2-ti3
77       ch(1,k,2,1) = tr1+tr4
78       ch(1,k,4,1) = tr1-tr4
79       ch(2,k,2,1) = ti1+ti4
80       ch(2,k,4,1) = ti1-ti4
81     end do
83     do i = 2, ido
84       do k = 1, l1
86         ti1 = cc(2,k,i,1)-cc(2,k,i,3)
87         ti2 = cc(2,k,i,1)+cc(2,k,i,3)
88         ti3 = cc(2,k,i,2)+cc(2,k,i,4)
89         tr4 = cc(2,k,i,4)-cc(2,k,i,2)
90         tr1 = cc(1,k,i,1)-cc(1,k,i,3)
91         tr2 = cc(1,k,i,1)+cc(1,k,i,3)
92         ti4 = cc(1,k,i,2)-cc(1,k,i,4)
93         tr3 = cc(1,k,i,2)+cc(1,k,i,4)
94         ch(1,k,1,i) = tr2+tr3
95         cr3 = tr2-tr3
96         ch(2,k,1,i) = ti2+ti3
97         ci3 = ti2-ti3
98         cr2 = tr1+tr4
99         cr4 = tr1-tr4
100         ci2 = ti1+ti4
101         ci4 = ti1-ti4
103         ch(1,k,2,i) = wa(i,1,1)*cr2-wa(i,1,2)*ci2
104         ch(2,k,2,i) = wa(i,1,1)*ci2+wa(i,1,2)*cr2
105         ch(1,k,3,i) = wa(i,2,1)*cr3-wa(i,2,2)*ci3
106         ch(2,k,3,i) = wa(i,2,1)*ci3+wa(i,2,2)*cr3
107         ch(1,k,4,i) = wa(i,3,1)*cr4-wa(i,3,2)*ci4
108         ch(2,k,4,i) = wa(i,3,1)*ci4+wa(i,3,2)*cr4
110        end do
111     end do
113   else
115     do k = 1, l1
116        ti1 = cc(2,k,1,1)-cc(2,k,1,3)
117        ti2 = cc(2,k,1,1)+cc(2,k,1,3)
118        tr4 = cc(2,k,1,4)-cc(2,k,1,2)
119        ti3 = cc(2,k,1,2)+cc(2,k,1,4)
120        tr1 = cc(1,k,1,1)-cc(1,k,1,3)
121        tr2 = cc(1,k,1,1)+cc(1,k,1,3)
122        ti4 = cc(1,k,1,2)-cc(1,k,1,4)
123        tr3 = cc(1,k,1,2)+cc(1,k,1,4)
124        cc(1,k,1,1) = tr2+tr3
125        cc(1,k,1,3) = tr2-tr3
126        cc(2,k,1,1) = ti2+ti3
127        cc(2,k,1,3) = ti2-ti3
128        cc(1,k,1,2) = tr1+tr4
129        cc(1,k,1,4) = tr1-tr4
130        cc(2,k,1,2) = ti1+ti4
131        cc(2,k,1,4) = ti1-ti4
132     end do
134   end if
136   return