Merge remote-tracking branch 'origin/release-v4.6.1'
[WRF.git] / external / fftpack / fftpack5 / r1f5kb.F
blob53c2aef71f9282daa6ea2c3f074af97cbd86a239
1 subroutine r1f5kb ( ido, l1, cc, in1, ch, in2, wa1, wa2, wa3, wa4 )
3 !*****************************************************************************80
5 !! R1F5KB 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 ) arg
42   real ( kind = 4 ) cc(in1,ido,5,l1)
43   real ( kind = 4 ) ch(in2,ido,l1,5)
44   integer ( kind = 4 ) i
45   integer ( kind = 4 ) ic
46   integer ( kind = 4 ) idp2
47   integer ( kind = 4 ) k
48   real ( kind = 4 ) ti11
49   real ( kind = 4 ) ti12
50   real ( kind = 4 ) tr11
51   real ( kind = 4 ) tr12
52   real ( kind = 4 ) wa1(ido)
53   real ( kind = 4 ) wa2(ido)
54   real ( kind = 4 ) wa3(ido)
55   real ( kind = 4 ) wa4(ido)
57   arg = 2.0E+00 * 4.0E+00 * atan ( 1.0E+00 ) / 5.0E+00
58   tr11 = cos ( arg )
59   ti11 = sin ( arg )
60   tr12 = cos ( 2.0E+00 * arg )
61   ti12 = sin ( 2.0E+00 * arg )
63   do k = 1, l1
65     ch(1,1,k,1) = cc(1,1,1,k) + 2.0E+00 * cc(1,ido,2,k) &
66                               + 2.0E+00 * cc(1,ido,4,k)
68     ch(1,1,k,2) = ( cc(1,1,1,k) &
69       +   tr11 * 2.0E+00 * cc(1,ido,2,k) + tr12 * 2.0E+00 * cc(1,ido,4,k) ) &
70       - ( ti11 * 2.0E+00 * cc(1,1,3,k)   + ti12 * 2.0E+00 * cc(1,1,5,k))
72     ch(1,1,k,3) = ( cc(1,1,1,k) &
73       +   tr12 * 2.0E+00 * cc(1,ido,2,k) + tr11 * 2.0E+00 * cc(1,ido,4,k) ) &
74       - ( ti12 * 2.0E+00 * cc(1,1,3,k)   - ti11 * 2.0E+00 * cc(1,1,5,k))
76     ch(1,1,k,4) = ( cc(1,1,1,k) &
77       +   tr12 * 2.0E+00 * cc(1,ido,2,k) + tr11 * 2.0E+00 * cc(1,ido,4,k) ) &
78       + ( ti12 * 2.0E+00 * cc(1,1,3,k)   - ti11 * 2.0E+00 * cc(1,1,5,k))
80     ch(1,1,k,5) = ( cc(1,1,1,k) &
81       +   tr11 * 2.0E+00 * cc(1,ido,2,k) + tr12 * 2.0E+00 * cc(1,ido,4,k) ) &
82       + ( ti11 * 2.0E+00 * cc(1,1,3,k)   + ti12 * 2.0E+00 * cc(1,1,5,k) )
84   end do
86   if ( ido == 1 ) then
87     return
88   end if
90   idp2 = ido + 2
92   do k = 1, l1
93     do i = 3, ido, 2
94       ic = idp2 - i
95       ch(1,i-1,k,1) = cc(1,i-1,1,k)+(cc(1,i-1,3,k)+cc(1,ic-1,2,k)) &
96         +(cc(1,i-1,5,k)+cc(1,ic-1,4,k))
97       ch(1,i,k,1) = cc(1,i,1,k)+(cc(1,i,3,k)-cc(1,ic,2,k)) &
98         +(cc(1,i,5,k)-cc(1,ic,4,k))
99       ch(1,i-1,k,2) = wa1(i-2)*((cc(1,i-1,1,k)+tr11* &
100         (cc(1,i-1,3,k)+cc(1,ic-1,2,k))+tr12 &
101         *(cc(1,i-1,5,k)+cc(1,ic-1,4,k)))-(ti11*(cc(1,i,3,k) &
102         +cc(1,ic,2,k))+ti12*(cc(1,i,5,k)+cc(1,ic,4,k)))) &
103         -wa1(i-1)*((cc(1,i,1,k)+tr11*(cc(1,i,3,k)-cc(1,ic,2,k)) &
104         +tr12*(cc(1,i,5,k)-cc(1,ic,4,k)))+(ti11*(cc(1,i-1,3,k) &
105         -cc(1,ic-1,2,k))+ti12*(cc(1,i-1,5,k)-cc(1,ic-1,4,k))))
106       ch(1,i,k,2) = wa1(i-2)*((cc(1,i,1,k)+tr11*(cc(1,i,3,k) &
107         -cc(1,ic,2,k))+tr12*(cc(1,i,5,k)-cc(1,ic,4,k))) &
108         +(ti11*(cc(1,i-1,3,k)-cc(1,ic-1,2,k))+ti12 &
109         *(cc(1,i-1,5,k)-cc(1,ic-1,4,k))))+wa1(i-1) &
110         *((cc(1,i-1,1,k)+tr11*(cc(1,i-1,3,k) &
111         +cc(1,ic-1,2,k))+tr12*(cc(1,i-1,5,k)+cc(1,ic-1,4,k))) &
112         -(ti11*(cc(1,i,3,k)+cc(1,ic,2,k))+ti12 &
113         *(cc(1,i,5,k)+cc(1,ic,4,k))))
114       ch(1,i-1,k,3) = wa2(i-2) &
115         *((cc(1,i-1,1,k)+tr12*(cc(1,i-1,3,k)+cc(1,ic-1,2,k)) &
116         +tr11*(cc(1,i-1,5,k)+cc(1,ic-1,4,k)))-(ti12*(cc(1,i,3,k) &
117         +cc(1,ic,2,k))-ti11*(cc(1,i,5,k)+cc(1,ic,4,k)))) &
118         -wa2(i-1) &
119         *((cc(1,i,1,k)+tr12*(cc(1,i,3,k)- &
120       cc(1,ic,2,k))+tr11*(cc(1,i,5,k)-cc(1,ic,4,k))) &
121         +(ti12*(cc(1,i-1,3,k)-cc(1,ic-1,2,k))-ti11 &
122         *(cc(1,i-1,5,k)-cc(1,ic-1,4,k))))
123       ch(1,i,k,3) = wa2(i-2) &
124         *((cc(1,i,1,k)+tr12*(cc(1,i,3,k)- &
125         cc(1,ic,2,k))+tr11*(cc(1,i,5,k)-cc(1,ic,4,k))) &
126         +(ti12*(cc(1,i-1,3,k)-cc(1,ic-1,2,k))-ti11 &
127         *(cc(1,i-1,5,k)-cc(1,ic-1,4,k)))) &
128         +wa2(i-1) &
129         *((cc(1,i-1,1,k)+tr12*(cc(1,i-1,3,k)+cc(1,ic-1,2,k)) &
130         +tr11*(cc(1,i-1,5,k)+cc(1,ic-1,4,k)))-(ti12*(cc(1,i,3,k) &
131         +cc(1,ic,2,k))-ti11*(cc(1,i,5,k)+cc(1,ic,4,k))))
132       ch(1,i-1,k,4) = wa3(i-2) &
133         *((cc(1,i-1,1,k)+tr12*(cc(1,i-1,3,k)+cc(1,ic-1,2,k)) &
134         +tr11*(cc(1,i-1,5,k)+cc(1,ic-1,4,k)))+(ti12*(cc(1,i,3,k) &
135         +cc(1,ic,2,k))-ti11*(cc(1,i,5,k)+cc(1,ic,4,k)))) &
136         -wa3(i-1) &
137         *((cc(1,i,1,k)+tr12*(cc(1,i,3,k)- &
138       cc(1,ic,2,k))+tr11*(cc(1,i,5,k)-cc(1,ic,4,k))) &
139         -(ti12*(cc(1,i-1,3,k)-cc(1,ic-1,2,k))-ti11 &
140         *(cc(1,i-1,5,k)-cc(1,ic-1,4,k))))
141       ch(1,i,k,4) = wa3(i-2) &
142         *((cc(1,i,1,k)+tr12*(cc(1,i,3,k)- &
143         cc(1,ic,2,k))+tr11*(cc(1,i,5,k)-cc(1,ic,4,k))) &
144         -(ti12*(cc(1,i-1,3,k)-cc(1,ic-1,2,k))-ti11 &
145         *(cc(1,i-1,5,k)-cc(1,ic-1,4,k)))) &
146         +wa3(i-1) &
147         *((cc(1,i-1,1,k)+tr12*(cc(1,i-1,3,k)+cc(1,ic-1,2,k)) &
148         +tr11*(cc(1,i-1,5,k)+cc(1,ic-1,4,k)))+(ti12*(cc(1,i,3,k) &
149         +cc(1,ic,2,k))-ti11*(cc(1,i,5,k)+cc(1,ic,4,k))))
150       ch(1,i-1,k,5) = wa4(i-2) &
151         *((cc(1,i-1,1,k)+tr11*(cc(1,i-1,3,k)+cc(1,ic-1,2,k)) &
152         +tr12*(cc(1,i-1,5,k)+cc(1,ic-1,4,k)))+(ti11*(cc(1,i,3,k) &
153         +cc(1,ic,2,k))+ti12*(cc(1,i,5,k)+cc(1,ic,4,k)))) &
154         -wa4(i-1) &
155         *((cc(1,i,1,k)+tr11*(cc(1,i,3,k)-cc(1,ic,2,k)) &
156         +tr12*(cc(1,i,5,k)-cc(1,ic,4,k)))-(ti11*(cc(1,i-1,3,k) &
157         -cc(1,ic-1,2,k))+ti12*(cc(1,i-1,5,k)-cc(1,ic-1,4,k))))
158       ch(1,i,k,5) = wa4(i-2) &
159         *((cc(1,i,1,k)+tr11*(cc(1,i,3,k)-cc(1,ic,2,k)) &
160         +tr12*(cc(1,i,5,k)-cc(1,ic,4,k)))-(ti11*(cc(1,i-1,3,k) &
161         -cc(1,ic-1,2,k))+ti12*(cc(1,i-1,5,k)-cc(1,ic-1,4,k)))) &
162         +wa4(i-1) &
163         *((cc(1,i-1,1,k)+tr11*(cc(1,i-1,3,k)+cc(1,ic-1,2,k)) &
164         +tr12*(cc(1,i-1,5,k)+cc(1,ic-1,4,k)))+(ti11*(cc(1,i,3,k) &
165         +cc(1,ic,2,k))+ti12*(cc(1,i,5,k)+cc(1,ic,4,k))))
166     end do
167   end do
169   return