updated top-level README and version_decl for V4.4.2 (#1795)
[WRF.git] / external / fftpack / fftpack5 / c1f5kb.F
bloba8760275944175e9c5951b0b213344fc0d4bfbcf
1 subroutine c1f5kb ( ido, l1, na, cc, in1, ch, in2, wa )
3 !*****************************************************************************80
5 !! C1F5KB 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,5)
42   real ( kind = 4 ) ch(in2,l1,5,ido)
43   real ( kind = 4 ) chold1
44   real ( kind = 4 ) chold2
45   real ( kind = 4 ) ci2
46   real ( kind = 4 ) ci3
47   real ( kind = 4 ) ci4
48   real ( kind = 4 ) ci5
49   real ( kind = 4 ) cr2
50   real ( kind = 4 ) cr3
51   real ( kind = 4 ) cr4
52   real ( kind = 4 ) cr5
53   real ( kind = 4 ) di2
54   real ( kind = 4 ) di3
55   real ( kind = 4 ) di4
56   real ( kind = 4 ) di5
57   real ( kind = 4 ) dr2
58   real ( kind = 4 ) dr3
59   real ( kind = 4 ) dr4
60   real ( kind = 4 ) dr5
61   integer ( kind = 4 ) i
62   integer ( kind = 4 ) k
63   integer ( kind = 4 ) na
64   real ( kind = 4 ) ti2
65   real ( kind = 4 ) ti3
66   real ( kind = 4 ) ti4
67   real ( kind = 4 ) ti5
68   real ( kind = 4 ), parameter :: ti11 =  0.9510565162951536E+00
69   real ( kind = 4 ), parameter :: ti12 =  0.5877852522924731E+00
70   real ( kind = 4 ) tr2
71   real ( kind = 4 ) tr3
72   real ( kind = 4 ) tr4
73   real ( kind = 4 ) tr5
74   real ( kind = 4 ), parameter :: tr11 =  0.3090169943749474E+00
75   real ( kind = 4 ), parameter :: tr12 = -0.8090169943749474E+00
76   real ( kind = 4 ) wa(ido,4,2)
78   if ( 1 < ido .or. na == 1 ) then
80     do k = 1, l1
81       ti5 = cc(2,k,1,2)-cc(2,k,1,5)
82       ti2 = cc(2,k,1,2)+cc(2,k,1,5)
83       ti4 = cc(2,k,1,3)-cc(2,k,1,4)
84       ti3 = cc(2,k,1,3)+cc(2,k,1,4)
85       tr5 = cc(1,k,1,2)-cc(1,k,1,5)
86       tr2 = cc(1,k,1,2)+cc(1,k,1,5)
87       tr4 = cc(1,k,1,3)-cc(1,k,1,4)
88       tr3 = cc(1,k,1,3)+cc(1,k,1,4)
89       ch(1,k,1,1) = cc(1,k,1,1)+tr2+tr3
90       ch(2,k,1,1) = cc(2,k,1,1)+ti2+ti3
91       cr2 = cc(1,k,1,1)+tr11*tr2+tr12*tr3
92       ci2 = cc(2,k,1,1)+tr11*ti2+tr12*ti3
93       cr3 = cc(1,k,1,1)+tr12*tr2+tr11*tr3
94       ci3 = cc(2,k,1,1)+tr12*ti2+tr11*ti3
95       cr5 = ti11*tr5+ti12*tr4
96       ci5 = ti11*ti5+ti12*ti4
97       cr4 = ti12*tr5-ti11*tr4
98       ci4 = ti12*ti5-ti11*ti4
99       ch(1,k,2,1) = cr2-ci5
100       ch(1,k,5,1) = cr2+ci5
101       ch(2,k,2,1) = ci2+cr5
102       ch(2,k,3,1) = ci3+cr4
103       ch(1,k,3,1) = cr3-ci4
104       ch(1,k,4,1) = cr3+ci4
105       ch(2,k,4,1) = ci3-cr4
106       ch(2,k,5,1) = ci2-cr5
107     end do
109     do i = 2, ido
110       do k = 1, l1
111         ti5 = cc(2,k,i,2)-cc(2,k,i,5)
112         ti2 = cc(2,k,i,2)+cc(2,k,i,5)
113         ti4 = cc(2,k,i,3)-cc(2,k,i,4)
114         ti3 = cc(2,k,i,3)+cc(2,k,i,4)
115         tr5 = cc(1,k,i,2)-cc(1,k,i,5)
116         tr2 = cc(1,k,i,2)+cc(1,k,i,5)
117         tr4 = cc(1,k,i,3)-cc(1,k,i,4)
118         tr3 = cc(1,k,i,3)+cc(1,k,i,4)
119         ch(1,k,1,i) = cc(1,k,i,1)+tr2+tr3
120         ch(2,k,1,i) = cc(2,k,i,1)+ti2+ti3
121         cr2 = cc(1,k,i,1)+tr11*tr2+tr12*tr3
122         ci2 = cc(2,k,i,1)+tr11*ti2+tr12*ti3
123         cr3 = cc(1,k,i,1)+tr12*tr2+tr11*tr3
124         ci3 = cc(2,k,i,1)+tr12*ti2+tr11*ti3
125         cr5 = ti11*tr5+ti12*tr4
126         ci5 = ti11*ti5+ti12*ti4
127         cr4 = ti12*tr5-ti11*tr4
128         ci4 = ti12*ti5-ti11*ti4
129         dr3 = cr3-ci4
130         dr4 = cr3+ci4
131         di3 = ci3+cr4
132         di4 = ci3-cr4
133         dr5 = cr2+ci5
134         dr2 = cr2-ci5
135         di5 = ci2-cr5
136         di2 = ci2+cr5
137         ch(1,k,2,i) = wa(i,1,1)*dr2-wa(i,1,2)*di2
138         ch(2,k,2,i) = wa(i,1,1)*di2+wa(i,1,2)*dr2
139         ch(1,k,3,i) = wa(i,2,1)*dr3-wa(i,2,2)*di3
140         ch(2,k,3,i) = wa(i,2,1)*di3+wa(i,2,2)*dr3
141         ch(1,k,4,i) = wa(i,3,1)*dr4-wa(i,3,2)*di4
142         ch(2,k,4,i) = wa(i,3,1)*di4+wa(i,3,2)*dr4
143         ch(1,k,5,i) = wa(i,4,1)*dr5-wa(i,4,2)*di5
144         ch(2,k,5,i) = wa(i,4,1)*di5+wa(i,4,2)*dr5
145       end do
146     end do
148   else
150     do k = 1, l1
151       ti5 = cc(2,k,1,2)-cc(2,k,1,5)
152       ti2 = cc(2,k,1,2)+cc(2,k,1,5)
153       ti4 = cc(2,k,1,3)-cc(2,k,1,4)
154       ti3 = cc(2,k,1,3)+cc(2,k,1,4)
155       tr5 = cc(1,k,1,2)-cc(1,k,1,5)
156       tr2 = cc(1,k,1,2)+cc(1,k,1,5)
157       tr4 = cc(1,k,1,3)-cc(1,k,1,4)
158       tr3 = cc(1,k,1,3)+cc(1,k,1,4)
159       chold1 = cc(1,k,1,1)+tr2+tr3
160       chold2 = cc(2,k,1,1)+ti2+ti3
161       cr2 = cc(1,k,1,1)+tr11*tr2+tr12*tr3
162       ci2 = cc(2,k,1,1)+tr11*ti2+tr12*ti3
163       cr3 = cc(1,k,1,1)+tr12*tr2+tr11*tr3
164       ci3 = cc(2,k,1,1)+tr12*ti2+tr11*ti3
165       cc(1,k,1,1) = chold1
166       cc(2,k,1,1) = chold2
167       cr5 = ti11*tr5+ti12*tr4
168       ci5 = ti11*ti5+ti12*ti4
169       cr4 = ti12*tr5-ti11*tr4
170       ci4 = ti12*ti5-ti11*ti4
171       cc(1,k,1,2) = cr2-ci5
172       cc(1,k,1,5) = cr2+ci5
173       cc(2,k,1,2) = ci2+cr5
174       cc(2,k,1,3) = ci3+cr4
175       cc(1,k,1,3) = cr3-ci4
176       cc(1,k,1,4) = cr3+ci4
177       cc(2,k,1,4) = ci3-cr4
178       cc(2,k,1,5) = ci2-cr5
179     end do
181   end if
183   return