updated top-level README and version_decl for V4.5 (#1847)
[WRF.git] / external / fftpack / fftpack5 / z1fm1b.F
blobab65c486f8f292b2d8f6d1bbba089b3e461a0aa7
1 subroutine z1fm1b ( n, inc, c, ch, wa, fnf, fac )
3 !*****************************************************************************80
5 !! Z1FM1B 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 ) k
44   integer ( kind = 4 ) k1
45   integer ( kind = 4 ) l1
46   integer ( kind = 4 ) l2
47   integer ( kind = 4 ) lid
48   integer ( kind = 4 ) n
49   integer ( kind = 4 ) na
50   integer ( kind = 4 ) nbr
51   integer ( kind = 4 ) nf
52   real ( kind = 8 ) wa(*)
54   inc2 = inc + inc
55   nf = int ( fnf )
56   na = 0
57   l1 = 1
58   iw = 1
60   do k1 = 1, nf
62     ip = int ( fac(k1) )
63     l2 = ip * l1
64     ido = n / l2
65     lid = l1 * ido
66     nbr = 1 + na + 2 * min ( ip - 2, 4 )
68     if ( nbr == 1 ) then
69       call z1f2kb ( ido, l1, na, c, inc2, ch, 2, wa(iw) )
70     else if ( nbr == 2 ) then
71       call z1f2kb ( ido, l1, na, ch, 2, c, inc2, wa(iw) )
72     else if ( nbr == 3 ) then
73       call z1f3kb ( ido, l1, na, c, inc2, ch, 2, wa(iw) )
74     else if ( nbr == 4 ) then
75       call z1f3kb ( ido, l1, na, ch, 2, c, inc2, wa(iw) )
76     else if ( nbr == 5 ) then
77       call z1f4kb ( ido, l1, na, c, inc2, ch, 2, wa(iw) )
78     else if ( nbr == 6 ) then
79       call z1f4kb ( ido, l1, na, ch, 2, c, inc2, wa(iw) )
80     else if ( nbr == 7 ) then
81       call z1f5kb ( ido, l1, na, c, inc2, ch, 2, wa(iw) )
82     else if ( nbr == 8 ) then
83       call z1f5kb ( ido, l1, na, ch, 2, c, inc2, wa(iw) )
84     else if ( nbr == 9 ) then
85       call z1fgkb ( ido, ip, l1, lid, na, c, c, inc2, ch, ch, 2, wa(iw) )
86     else if ( nbr == 10 ) then
87       call z1fgkb ( ido, ip, l1, lid, na, ch, ch, 2, c, c, inc2, wa(iw) )
88     end if
90     l1 = l2
91     iw = iw + ( ip - 1 ) * ( ido + ido )
93     if ( ip <= 5 ) then
94       na = 1 - na
95     end if
97   end do
99   return