Merge remote-tracking branch 'origin/release-v4.6.1'
[WRF.git] / external / fftpack / fftpack5 / r1f3kf.F
blobe7df48de4629e5003e311eb0694ded1df02502a2
1 subroutine r1f3kf ( ido, l1, cc, in1, ch, in2, wa1, wa2 )
3 !*****************************************************************************80
5 !! R1F3KF 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 ) arg
42   real ( kind = 4 ) cc(in1,ido,l1,3)
43   real ( kind = 4 ) ch(in2,ido,3,l1)
44   integer ( kind = 4 ) i
45   integer ( kind = 4 ) ic
46   integer ( kind = 4 ) idp2
47   integer ( kind = 4 ) k
48   real ( kind = 4 ) taui
49   real ( kind = 4 ) taur
50   real ( kind = 4 ) wa1(ido)
51   real ( kind = 4 ) wa2(ido)
53   arg = 2.0E+00 * 4.0E+00 * atan ( 1.0E+00 ) / 3.0E+00
54   taur = cos ( arg )
55   taui = sin ( arg )
57   do k = 1, l1
58     ch(1,1,1,k) = cc(1,1,k,1)          + ( cc(1,1,k,2) + cc(1,1,k,3) )
59     ch(1,1,3,k) =                 taui * ( cc(1,1,k,3) - cc(1,1,k,2) )
60     ch(1,ido,2,k) = cc(1,1,k,1) + taur * ( cc(1,1,k,2) + cc(1,1,k,3) )
61   end do
63   if ( ido == 1 ) then
64     return
65   end if
67   idp2 = ido + 2
69   do k = 1, l1
70     do i = 3, ido, 2
71       ic = idp2 - i
72       ch(1,i-1,1,k) = cc(1,i-1,k,1)+((wa1(i-2)*cc(1,i-1,k,2)+ &
73         wa1(i-1)*cc(1,i,k,2))+(wa2(i-2)*cc(1,i-1,k,3)+wa2(i-1)* &
74         cc(1,i,k,3)))
75       ch(1,i,1,k) = cc(1,i,k,1)+((wa1(i-2)*cc(1,i,k,2)- &
76         wa1(i-1)*cc(1,i-1,k,2))+(wa2(i-2)*cc(1,i,k,3)-wa2(i-1)* &
77         cc(1,i-1,k,3)))
78       ch(1,i-1,3,k) = (cc(1,i-1,k,1)+taur*((wa1(i-2)* &
79         cc(1,i-1,k,2)+wa1(i-1)*cc(1,i,k,2))+(wa2(i-2)* &
80         cc(1,i-1,k,3)+wa2(i-1)*cc(1,i,k,3))))+(taui*((wa1(i-2)* &
81         cc(1,i,k,2)-wa1(i-1)*cc(1,i-1,k,2))-(wa2(i-2)* &
82         cc(1,i,k,3)-wa2(i-1)*cc(1,i-1,k,3))))
83       ch(1,ic-1,2,k) = (cc(1,i-1,k,1)+taur*((wa1(i-2)* &
84         cc(1,i-1,k,2)+wa1(i-1)*cc(1,i,k,2))+(wa2(i-2)* &
85         cc(1,i-1,k,3)+wa2(i-1)*cc(1,i,k,3))))-(taui*((wa1(i-2)* &
86         cc(1,i,k,2)-wa1(i-1)*cc(1,i-1,k,2))-(wa2(i-2)* &
87         cc(1,i,k,3)-wa2(i-1)*cc(1,i-1,k,3))))
88       ch(1,i,3,k) = (cc(1,i,k,1)+taur*((wa1(i-2)*cc(1,i,k,2)- &
89         wa1(i-1)*cc(1,i-1,k,2))+(wa2(i-2)*cc(1,i,k,3)-wa2(i-1)* &
90         cc(1,i-1,k,3))))+(taui*((wa2(i-2)*cc(1,i-1,k,3)+wa2(i-1)* &
91         cc(1,i,k,3))-(wa1(i-2)*cc(1,i-1,k,2)+wa1(i-1)* &
92         cc(1,i,k,2))))
93       ch(1,ic,2,k) = (taui*((wa2(i-2)*cc(1,i-1,k,3)+wa2(i-1)* &
94         cc(1,i,k,3))-(wa1(i-2)*cc(1,i-1,k,2)+wa1(i-1)* &
95         cc(1,i,k,2))))-(cc(1,i,k,1)+taur*((wa1(i-2)*cc(1,i,k,2)- &
96         wa1(i-1)*cc(1,i-1,k,2))+(wa2(i-2)*cc(1,i,k,3)-wa2(i-1)* &
97         cc(1,i-1,k,3))))
98     end do
99   end do
101   return