updated top-level README and version_decl for V4.4.2 (#1795)
[WRF.git] / external / fftpack / fftpack5 / cmf2kb.F
blobb6c8e016eab5e3237ca3efda14fbe2f74aba009a
1 subroutine cmf2kb ( lot, ido, l1, na, cc, im1, in1, ch, im2, in2, wa )
3 !*****************************************************************************80
5 !! CMF2KB 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,2)
42   real ( kind = 4 ) ch(2,in2,l1,2,ido)
43   real ( kind = 4 ) chold1
44   real ( kind = 4 ) chold2
45   integer ( kind = 4 ) i
46   integer ( kind = 4 ) im1
47   integer ( kind = 4 ) im2
48   integer ( kind = 4 ) k
49   integer ( kind = 4 ) lot
50   integer ( kind = 4 ) m1
51   integer ( kind = 4 ) m1d
52   integer ( kind = 4 ) m2
53   integer ( kind = 4 ) m2s
54   integer ( kind = 4 ) na
55   real ( kind = 4 ) ti2
56   real ( kind = 4 ) tr2
57   real ( kind = 4 ) wa(ido,1,2)
59   m1d = ( lot - 1 ) * im1 + 1
60   m2s = 1 - im2
62   if ( 1 < ido .or. na == 1 ) then
64     do k = 1, l1
65       m2 = m2s
66       do m1 = 1, m1d, im1
67         m2 = m2 + im2
68         ch(1,m2,k,1,1) = cc(1,m1,k,1,1) + cc(1,m1,k,1,2)
69         ch(1,m2,k,2,1) = cc(1,m1,k,1,1) - cc(1,m1,k,1,2)
70         ch(2,m2,k,1,1) = cc(2,m1,k,1,1) + cc(2,m1,k,1,2)
71         ch(2,m2,k,2,1) = cc(2,m1,k,1,1) - cc(2,m1,k,1,2)
72       end do
73     end do
75     do i = 2, ido
76       do k = 1, l1
77         m2 = m2s
78         do m1 = 1, m1d, im1
79           m2 = m2 + im2
80           ch(1,m2,k,1,i) = cc(1,m1,k,i,1)+cc(1,m1,k,i,2)
81           tr2 = cc(1,m1,k,i,1)-cc(1,m1,k,i,2)
82           ch(2,m2,k,1,i) = cc(2,m1,k,i,1)+cc(2,m1,k,i,2)
83           ti2 = cc(2,m1,k,i,1)-cc(2,m1,k,i,2)
85           ch(2,m2,k,2,i) = wa(i,1,1) * ti2 + wa(i,1,2) * tr2
86           ch(1,m2,k,2,i) = wa(i,1,1) * tr2 - wa(i,1,2) * ti2
88         end do
89       end do
90     end do
92   else
94     do k = 1, l1
95       do m1 = 1, m1d, im1
97         chold1         = cc(1,m1,k,1,1) + cc(1,m1,k,1,2)
98         cc(1,m1,k,1,2) = cc(1,m1,k,1,1) - cc(1,m1,k,1,2)
99         cc(1,m1,k,1,1) = chold1
101         chold2         = cc(2,m1,k,1,1) + cc(2,m1,k,1,2)
102         cc(2,m1,k,1,2) = cc(2,m1,k,1,1) - cc(2,m1,k,1,2)
103         cc(2,m1,k,1,1) = chold2
105       end do
106     end do
108   end if
110   return