updated top-level README and version_decl for V4.4.2 (#1795)
[WRF.git] / external / fftpack / fftpack5 / z1fm1f.F
blob61f77c77a0764bc2be8388e3ed69ea6e1a04c99a
1 subroutine z1fm1f ( n, inc, c, ch, wa, fnf, fac )
3 !*****************************************************************************80
5 !! Z1FM1F is an FFTPACK5 auxiliary routine.
9 !  Modified:
11 !    26 Ausust 2009
13 !  Author:
15 !    Original complex single precision by Paul Swarztrauber, Richard Valent.
16 !    Complex double precision version by John Burkardt.
18 !  Reference:
20 !    Paul Swarztrauber,
21 !    Vectorizing the Fast Fourier Transforms,
22 !    in Parallel Computations,
23 !    edited by G. Rodrigue,
24 !    Academic Press, 1982.
26 !    Paul Swarztrauber,
27 !    Fast Fourier Transform Algorithms for Vector Computers,
28 !    Parallel Computing, pages 45-63, 1984.
30 !  Parameters:
32   implicit none
34   complex ( kind = 8 ) c(*)
35   real ( kind = 8 ) ch(*)
36   real ( kind = 8 ) fac(*)
37   real ( kind = 8 ) fnf
38   integer ( kind = 4 ) ido
39   integer ( kind = 4 ) inc
40   integer ( kind = 4 ) inc2
41   integer ( kind = 4 ) ip
42   integer ( kind = 4 ) iw
43   integer ( kind = 4 ) k1
44   integer ( kind = 4 ) l1
45   integer ( kind = 4 ) l2
46   integer ( kind = 4 ) lid
47   integer ( kind = 4 ) n
48   integer ( kind = 4 ) na
49   integer ( kind = 4 ) nbr
50   integer ( kind = 4 ) nf
51   real ( kind = 8 ) wa(*)
53   inc2 = inc + inc
54   nf = int ( fnf )
55   na = 0
56   l1 = 1
57   iw = 1
59   do k1 = 1, nf
61      ip = int ( fac(k1) )
62      l2 = ip * l1
63      ido = n / l2
64      lid = l1 * ido
65      nbr = 1 + na + 2 * min ( ip - 2, 4 )
67      if ( nbr == 1 ) then
68        call z1f2kf ( ido, l1, na, c, inc2, ch, 2, wa(iw) )
69      else if ( nbr == 2 ) then
70        call z1f2kf ( ido, l1, na, ch, 2, c, inc2, wa(iw) )
71      else if ( nbr == 3 ) then
72        call z1f3kf ( ido, l1, na, c, inc2, ch, 2, wa(iw) )
73      else if ( nbr == 4 ) then
74        call z1f3kf ( ido, l1, na, ch, 2, c, inc2, wa(iw) )
75      else if ( nbr == 5 ) then
76        call z1f4kf ( ido, l1, na, c, inc2, ch, 2, wa(iw) )
77      else if ( nbr == 6 ) then
78        call z1f4kf ( ido, l1, na, ch, 2, c, inc2, wa(iw) )
79      else if ( nbr == 7 ) then
80        call z1f5kf ( ido, l1, na, c, inc2, ch, 2, wa(iw) )
81      else if ( nbr == 8 ) then
82        call z1f5kf ( ido, l1, na, ch, 2, c, inc2, wa(iw) )
83      else if ( nbr == 9 ) then
84        call z1fgkf ( ido, ip, l1, lid, na, c, c, inc2, ch, ch, 1, wa(iw) )
85      else if ( nbr == 10 ) then
86        call z1fgkf ( ido, ip, l1, lid, na, ch, ch, 2, c, c, inc2, wa(iw) )
87      end if
89      l1 = l2
90      iw = iw + ( ip - 1 ) * ( ido + ido )
92      if ( ip <= 5 ) then
93        na = 1 - na
94      end if
96   end do
98   return
99 end