Merge remote-tracking branch 'origin/release-v4.6.1'
[WRF.git] / external / fftpack / fftpack5 / c1f3kb.F
blobc758e2c430e514d54e9ea078232655d1427cd0f1
1 subroutine c1f3kb ( ido, l1, na, cc, in1, ch, in2, wa )
3 !*****************************************************************************80
5 !! C1F3KB 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   integer ( kind = 4 ) ido
37   integer ( kind = 4 ) in1
38   integer ( kind = 4 ) in2
39   integer ( kind = 4 ) l1
41   real ( kind = 4 ) cc(in1,l1,ido,3)
42   real ( kind = 4 ) ch(in2,l1,3,ido)
43   real ( kind = 4 ) ci2
44   real ( kind = 4 ) ci3
45   real ( kind = 4 ) cr2
46   real ( kind = 4 ) cr3
47   real ( kind = 4 ) di2
48   real ( kind = 4 ) di3
49   real ( kind = 4 ) dr2
50   real ( kind = 4 ) dr3
51   integer ( kind = 4 ) i
52   integer ( kind = 4 ) k
53   integer ( kind = 4 ) na
54   real ( kind = 4 ), parameter :: taui =  0.866025403784439E+00
55   real ( kind = 4 ), parameter :: taur = -0.5E+00
56   real ( kind = 4 ) ti2
57   real ( kind = 4 ) tr2
58   real ( kind = 4 ) wa(ido,2,2)
60   if ( 1 < ido .or. na == 1 ) then
62     do k = 1, l1
64       tr2 = cc(1,k,1,2)+cc(1,k,1,3)
65       cr2 = cc(1,k,1,1)+taur*tr2
66       ch(1,k,1,1) = cc(1,k,1,1)+tr2
67       ti2 = cc(2,k,1,2)+cc(2,k,1,3)
68       ci2 = cc(2,k,1,1)+taur*ti2
69       ch(2,k,1,1) = cc(2,k,1,1)+ti2
70       cr3 = taui*(cc(1,k,1,2)-cc(1,k,1,3))
71       ci3 = taui*(cc(2,k,1,2)-cc(2,k,1,3))
73       ch(1,k,2,1) = cr2 - ci3
74       ch(1,k,3,1) = cr2 + ci3
75       ch(2,k,2,1) = ci2 + cr3
76       ch(2,k,3,1) = ci2 - cr3
78     end do
80     do i = 2, ido
81       do k = 1, l1
82         tr2 = cc(1,k,i,2)+cc(1,k,i,3)
83         cr2 = cc(1,k,i,1)+taur*tr2
84         ch(1,k,1,i) = cc(1,k,i,1)+tr2
85         ti2 = cc(2,k,i,2)+cc(2,k,i,3)
86         ci2 = cc(2,k,i,1)+taur*ti2
87         ch(2,k,1,i) = cc(2,k,i,1)+ti2
88         cr3 = taui*(cc(1,k,i,2)-cc(1,k,i,3))
89         ci3 = taui*(cc(2,k,i,2)-cc(2,k,i,3))
91         dr2 = cr2 - ci3
92         dr3 = cr2 + ci3
93         di2 = ci2 + cr3
94         di3 = ci2 - cr3
96         ch(2,k,2,i) = wa(i,1,1) * di2 + wa(i,1,2) * dr2
97         ch(1,k,2,i) = wa(i,1,1) * dr2 - wa(i,1,2) * di2
98         ch(2,k,3,i) = wa(i,2,1) * di3 + wa(i,2,2) * dr3
99         ch(1,k,3,i) = wa(i,2,1) * dr3 - wa(i,2,2) * di3
101       end do
102     end do
104   else
106     do k = 1, l1
108       tr2 = cc(1,k,1,2)+cc(1,k,1,3)
109       cr2 = cc(1,k,1,1)+taur*tr2
110       cc(1,k,1,1) = cc(1,k,1,1)+tr2
111       ti2 = cc(2,k,1,2)+cc(2,k,1,3)
112       ci2 = cc(2,k,1,1)+taur*ti2
113       cc(2,k,1,1) = cc(2,k,1,1)+ti2
114       cr3 = taui*(cc(1,k,1,2)-cc(1,k,1,3))
115       ci3 = taui*(cc(2,k,1,2)-cc(2,k,1,3))
117       cc(1,k,1,2) = cr2 - ci3
118       cc(1,k,1,3) = cr2 + ci3
119       cc(2,k,1,2) = ci2 + cr3
120       cc(2,k,1,3) = ci2 - cr3
122     end do
124   end if
126   return