updated top-level README and version_decl for V4.5 (#1847)
[WRF.git] / external / fftpack / fftpack5 / c1fm1f.F
blob865a4bf2f942cb6b345e66bb455541e34b30e963
1 subroutine c1fm1f ( n, inc, c, ch, wa, fnf, fac )
3 !*****************************************************************************80
5 !! C1FM1F 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 ) inc2
43   integer ( kind = 4 ) ip
44   integer ( kind = 4 ) iw
45   integer ( kind = 4 ) k1
46   integer ( kind = 4 ) l1
47   integer ( kind = 4 ) l2
48   integer ( kind = 4 ) lid
49   integer ( kind = 4 ) n
50   integer ( kind = 4 ) na
51   integer ( kind = 4 ) nbr
52   integer ( kind = 4 ) nf
53   real ( kind = 4 ) wa(*)
55   inc2 = inc + inc
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 c1f2kf ( ido, l1, na, c, inc2, ch, 2, wa(iw) )
71      else if ( nbr == 2 ) then
72        call c1f2kf ( ido, l1, na, ch, 2, c, inc2, wa(iw) )
73      else if ( nbr == 3 ) then
74        call c1f3kf ( ido, l1, na, c, inc2, ch, 2, wa(iw) )
75      else if ( nbr == 4 ) then
76        call c1f3kf ( ido, l1, na, ch, 2, c, inc2, wa(iw) )
77      else if ( nbr == 5 ) then
78        call c1f4kf ( ido, l1, na, c, inc2, ch, 2, wa(iw) )
79      else if ( nbr == 6 ) then
80        call c1f4kf ( ido, l1, na, ch, 2, c, inc2, wa(iw) )
81      else if ( nbr == 7 ) then
82        call c1f5kf ( ido, l1, na, c, inc2, ch, 2, wa(iw) )
83      else if ( nbr == 8 ) then
84        call c1f5kf ( ido, l1, na, ch, 2, c, inc2, wa(iw) )
85      else if ( nbr == 9 ) then
86        call c1fgkf ( ido, ip, l1, lid, na, c, c, inc2, ch, ch, 1, wa(iw) )
87      else if ( nbr == 10 ) then
88        call c1fgkf ( ido, ip, l1, lid, na, ch, ch, 2, c, c, inc2, wa(iw) )
89      end if
91      l1 = l2
92      iw = iw + ( ip - 1 ) * ( ido + ido )
94      if ( ip <= 5 ) then
95        na = 1 - na
96      end if
98   end do
100   return