updated top-level README and version_decl for V4.4.2 (#1795)
[WRF.git] / external / fftpack / fftpack5 / cmf3kb.F
blob7f7324287297654e8d713ed024dd4b1439369062
1 subroutine cmf3kb ( lot, ido, l1, na, cc, im1, in1, ch, im2, in2, wa )
3 !*****************************************************************************80
5 !! CMF3KB 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(2,in1,l1,ido,3)
42   real ( kind = 4 ) ch(2,in2,l1,3,ido)
43   real ( kind = 4 ) ci2
44   real ( kind = 4 ) ci3
45   real ( kind = 4 ) cr2
46   real ( kind = 4 ) cr3
47   real ( kind = 4 ) di2
48   real ( kind = 4 ) di3
49   real ( kind = 4 ) dr2
50   real ( kind = 4 ) dr3
51   integer ( kind = 4 ) i
52   integer ( kind = 4 ) im1
53   integer ( kind = 4 ) im2
54   integer ( kind = 4 ) k
55   integer ( kind = 4 ) lot
56   integer ( kind = 4 ) m1
57   integer ( kind = 4 ) m1d
58   integer ( kind = 4 ) m2
59   integer ( kind = 4 ) m2s
60   integer ( kind = 4 ) na
61   real ( kind = 4 ), parameter :: taui =  0.866025403784439E+00
62   real ( kind = 4 ), parameter :: taur = -0.5E+00
63   real ( kind = 4 ) ti2
64   real ( kind = 4 ) tr2
65   real ( kind = 4 ) wa(ido,2,2)
67   m1d = ( lot - 1 ) * im1 + 1
68   m2s = 1 - im2
70   if ( 1 < ido .or. na == 1 ) then
71     do k = 1, l1
72       m2 = m2s
73       do m1 = 1, m1d, im1
75         m2 = m2 + im2
77         tr2 = cc(1,m1,k,1,2)+cc(1,m1,k,1,3)
78         cr2 = cc(1,m1,k,1,1)+taur*tr2
79         ch(1,m2,k,1,1) = cc(1,m1,k,1,1)+tr2
81         ti2 = cc(2,m1,k,1,2)+cc(2,m1,k,1,3)
82         ci2 = cc(2,m1,k,1,1)+taur*ti2
83         ch(2,m2,k,1,1) = cc(2,m1,k,1,1)+ti2
85         cr3 = taui * (cc(1,m1,k,1,2)-cc(1,m1,k,1,3))
86         ci3 = taui * (cc(2,m1,k,1,2)-cc(2,m1,k,1,3))
88         ch(1,m2,k,2,1) = cr2-ci3
89         ch(1,m2,k,3,1) = cr2+ci3
90         ch(2,m2,k,2,1) = ci2+cr3
91         ch(2,m2,k,3,1) = ci2-cr3
93       end do
94     end do
96     do i = 2, ido
97       do k = 1, l1
98         m2 = m2s
99         do m1 = 1, m1d, im1
100           m2 = m2 + im2
101           tr2 = cc(1,m1,k,i,2)+cc(1,m1,k,i,3)
102           cr2 = cc(1,m1,k,i,1)+taur*tr2
103           ch(1,m2,k,1,i) = cc(1,m1,k,i,1)+tr2
104           ti2 = cc(2,m1,k,i,2)+cc(2,m1,k,i,3)
105           ci2 = cc(2,m1,k,i,1)+taur*ti2
106           ch(2,m2,k,1,i) = cc(2,m1,k,i,1)+ti2
107           cr3 = taui*(cc(1,m1,k,i,2)-cc(1,m1,k,i,3))
108           ci3 = taui*(cc(2,m1,k,i,2)-cc(2,m1,k,i,3))
109           dr2 = cr2-ci3
110           dr3 = cr2+ci3
111           di2 = ci2+cr3
112           di3 = ci2-cr3
113           ch(2,m2,k,2,i) = wa(i,1,1)*di2+wa(i,1,2)*dr2
114           ch(1,m2,k,2,i) = wa(i,1,1)*dr2-wa(i,1,2)*di2
115           ch(2,m2,k,3,i) = wa(i,2,1)*di3+wa(i,2,2)*dr3
116           ch(1,m2,k,3,i) = wa(i,2,1)*dr3-wa(i,2,2)*di3
117         end do
118       end do
119     end do
121   else
123     do k = 1, l1
124       do m1 = 1, m1d, im1
125         tr2 = cc(1,m1,k,1,2)+cc(1,m1,k,1,3)
126         cr2 = cc(1,m1,k,1,1)+taur*tr2
127         cc(1,m1,k,1,1) = cc(1,m1,k,1,1)+tr2
128         ti2 = cc(2,m1,k,1,2)+cc(2,m1,k,1,3)
129         ci2 = cc(2,m1,k,1,1)+taur*ti2
130         cc(2,m1,k,1,1) = cc(2,m1,k,1,1)+ti2
131         cr3 = taui*(cc(1,m1,k,1,2)-cc(1,m1,k,1,3))
132         ci3 = taui*(cc(2,m1,k,1,2)-cc(2,m1,k,1,3))
133         cc(1,m1,k,1,2) = cr2-ci3
134         cc(1,m1,k,1,3) = cr2+ci3
135         cc(2,m1,k,1,2) = ci2+cr3
136         cc(2,m1,k,1,3) = ci2-cr3
137       end do
138     end do
140   end if
142   return