updated top-level README and version_decl for V4.4.2 (#1795)
[WRF.git] / external / fftpack / fftpack5 / cmfm1f.F
blob2f4850862715c163f3897ad44f279a05256db423
1 subroutine cmfm1f ( lot, jump, n, inc, c, ch, wa, fnf, fac )
3 !*****************************************************************************80
5 !! CMFM1F 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   complex ( kind = 4 ) c(*)
37   real ( kind = 4 ) ch(*)
38   real ( kind = 4 ) fac(*)
39   real ( kind = 4 ) fnf
40   integer ( kind = 4 ) ido
41   integer ( kind = 4 ) inc
42   integer ( kind = 4 ) ip
43   integer ( kind = 4 ) iw
44   integer ( kind = 4 ) jump
45   integer ( kind = 4 ) k1
46   integer ( kind = 4 ) l1
47   integer ( kind = 4 ) l2
48   integer ( kind = 4 ) lid
49   integer ( kind = 4 ) lot
50   integer ( kind = 4 ) n
51   integer ( kind = 4 ) na
52   integer ( kind = 4 ) nbr
53   integer ( kind = 4 ) nf
54   real ( kind = 4 ) wa(*)
56   nf = int ( fnf )
57   na = 0
58   l1 = 1
59   iw = 1
61   do k1 = 1, nf
63     ip = int ( fac(k1) )
64     l2 = ip * l1
65     ido = n / l2
66     lid = l1 * ido
67     nbr = 1 + na + 2 * min ( ip - 2, 4 )
69     if ( nbr == 1 ) then
70       call cmf2kf ( lot, ido, l1, na, c, jump, inc, ch, 1, lot, wa(iw) )
71     else if ( nbr == 2 ) then
72       call cmf2kf ( lot, ido, l1, na, ch, 1, lot, c, jump, inc, wa(iw) )
73     else if ( nbr == 3 ) then
74       call cmf3kf ( lot, ido, l1, na, c, jump, inc, ch, 1, lot, wa(iw) )
75     else if ( nbr == 4 ) then
76       call cmf3kf ( lot, ido, l1, na, ch, 1, lot, c, jump, inc, wa(iw) )
77     else if ( nbr == 5 ) then
78       call cmf4kf ( lot, ido, l1, na, c, jump, inc, ch, 1, lot, wa(iw) )
79     else if ( nbr == 6 ) then
80       call cmf4kf ( lot, ido, l1, na, ch, 1, lot, c, jump, inc, wa(iw) )
81     else if ( nbr == 7 ) then
82       call cmf5kf ( lot, ido, l1, na, c, jump, inc, ch, 1, lot, wa(iw) )
83     else if ( nbr == 8 ) then
84       call cmf5kf ( lot, ido, l1, na, ch, 1, lot, c, jump, inc, wa(iw) )
85     else if ( nbr == 9 ) then
86       call cmfgkf ( lot, ido, ip, l1, lid, na, c, c, jump, inc, ch, ch, &
87         1, lot, wa(iw) )
88     else if ( nbr == 10 ) then
89       call cmfgkf ( lot, ido, ip, l1, lid, na, ch, ch, 1, lot, c, c, &
90         jump, inc, wa(iw) )
91     end if
93     l1 = l2
94     iw = iw + ( ip - 1 ) * ( ido + ido )
96     if ( ip <= 5 ) then
97       na = 1 - na
98     end if
100   end do
102   return