updated top-level README and version_decl for V4.5 (#1847)
[WRF.git] / external / fftpack / fftpack5 / z1f3kb.F
blob19bbe26b2b7d8712211133564768fadd177e5725
1 subroutine z1f3kb ( ido, l1, na, cc, in1, ch, in2, wa )
3 !*****************************************************************************80
5 !! Z1F3KB 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   integer ( kind = 4 ) ido
35   integer ( kind = 4 ) in1
36   integer ( kind = 4 ) in2
37   integer ( kind = 4 ) l1
39   real ( kind = 8 ) cc(in1,l1,ido,3)
40   real ( kind = 8 ) ch(in2,l1,3,ido)
41   real ( kind = 8 ) ci2
42   real ( kind = 8 ) ci3
43   real ( kind = 8 ) cr2
44   real ( kind = 8 ) cr3
45   real ( kind = 8 ) di2
46   real ( kind = 8 ) di3
47   real ( kind = 8 ) dr2
48   real ( kind = 8 ) dr3
49   integer ( kind = 4 ) i
50   integer ( kind = 4 ) k
51   integer ( kind = 4 ) na
52   real ( kind = 8 ), parameter :: taui =  0.866025403784439D+00
53   real ( kind = 8 ), parameter :: taur = -0.5D+00
54   real ( kind = 8 ) ti2
55   real ( kind = 8 ) tr2
56   real ( kind = 8 ) wa(ido,2,2)
58   if ( 1 < ido .or. na == 1 ) then
60     do k = 1, l1
62       tr2 = cc(1,k,1,2)+cc(1,k,1,3)
63       cr2 = cc(1,k,1,1)+taur*tr2
64       ch(1,k,1,1) = cc(1,k,1,1)+tr2
65       ti2 = cc(2,k,1,2)+cc(2,k,1,3)
66       ci2 = cc(2,k,1,1)+taur*ti2
67       ch(2,k,1,1) = cc(2,k,1,1)+ti2
68       cr3 = taui*(cc(1,k,1,2)-cc(1,k,1,3))
69       ci3 = taui*(cc(2,k,1,2)-cc(2,k,1,3))
71       ch(1,k,2,1) = cr2 - ci3
72       ch(1,k,3,1) = cr2 + ci3
73       ch(2,k,2,1) = ci2 + cr3
74       ch(2,k,3,1) = ci2 - cr3
76     end do
78     do i = 2, ido
79       do k = 1, l1
80         tr2 = cc(1,k,i,2)+cc(1,k,i,3)
81         cr2 = cc(1,k,i,1)+taur*tr2
82         ch(1,k,1,i) = cc(1,k,i,1)+tr2
83         ti2 = cc(2,k,i,2)+cc(2,k,i,3)
84         ci2 = cc(2,k,i,1)+taur*ti2
85         ch(2,k,1,i) = cc(2,k,i,1)+ti2
86         cr3 = taui*(cc(1,k,i,2)-cc(1,k,i,3))
87         ci3 = taui*(cc(2,k,i,2)-cc(2,k,i,3))
89         dr2 = cr2 - ci3
90         dr3 = cr2 + ci3
91         di2 = ci2 + cr3
92         di3 = ci2 - cr3
94         ch(2,k,2,i) = wa(i,1,1) * di2 + wa(i,1,2) * dr2
95         ch(1,k,2,i) = wa(i,1,1) * dr2 - wa(i,1,2) * di2
96         ch(2,k,3,i) = wa(i,2,1) * di3 + wa(i,2,2) * dr3
97         ch(1,k,3,i) = wa(i,2,1) * dr3 - wa(i,2,2) * di3
99       end do
100     end do
102   else
104     do k = 1, l1
106       tr2 = cc(1,k,1,2)+cc(1,k,1,3)
107       cr2 = cc(1,k,1,1)+taur*tr2
108       cc(1,k,1,1) = cc(1,k,1,1)+tr2
109       ti2 = cc(2,k,1,2)+cc(2,k,1,3)
110       ci2 = cc(2,k,1,1)+taur*ti2
111       cc(2,k,1,1) = cc(2,k,1,1)+ti2
112       cr3 = taui*(cc(1,k,1,2)-cc(1,k,1,3))
113       ci3 = taui*(cc(2,k,1,2)-cc(2,k,1,3))
115       cc(1,k,1,2) = cr2 - ci3
116       cc(1,k,1,3) = cr2 + ci3
117       cc(2,k,1,2) = ci2 + cr3
118       cc(2,k,1,3) = ci2 - cr3
120     end do
122   end if
124   return