4 * This source code is part of
8 * GROningen MAchine for Chemical Simulations
12 * Copyright (c) 1991-1999
13 * BIOSON Research Institute, Dept. of Biophysical Chemistry
14 * University of Groningen, The Netherlands
17 * GROMACS: A message-passing parallel molecular dynamics implementation
18 * H.J.C. Berendsen, D. van der Spoel and R. van Drunen
19 * Comp. Phys. Comm. 91, 43-56 (1995)
21 * Also check out our WWW page:
22 * http://md.chem.rug.nl/~gmx
27 * Green Red Orange Magenta Azure Cyan Skyblue
29 static char *SRCID_fourn_c
= "$Id$";
35 #define SWAP(a,b) tempr=(a);(a)=(b);(b)=tempr
37 void fourn(real data
[],int nn
[],int ndim
,int isign
)
39 int i1
,i2
,i3
,i2rev
,i3rev
,ip1
,ip2
,ip3
,ifp1
,ifp2
;
40 int ibit
,idim
,k1
,k2
,n
,nprev
,nrem
,ntot
;
42 double theta
,wi
,wpi
,wpr
,wr
,wtemp
;
45 for (idim
=1;idim
<=ndim
;idim
++)
48 for (idim
=ndim
;idim
>=1;idim
--) {
55 for (i2
=1;i2
<=ip2
;i2
+=ip1
) {
57 for (i1
=i2
;i1
<=i2
+ip1
-2;i1
+=2) {
58 for (i3
=i1
;i3
<=ip3
;i3
+=ip2
) {
60 SWAP(data
[i3
],data
[i3rev
]);
61 SWAP(data
[i3
+1],data
[i3rev
+1]);
66 while (ibit
>= ip1
&& i2rev
> ibit
) {
75 theta
=isign
*6.28318530717959/(ifp2
/ip1
);
77 wpr
= -2.0*wtemp
*wtemp
;
81 for (i3
=1;i3
<=ifp1
;i3
+=ip1
) {
82 for (i1
=i3
;i1
<=i3
+ip1
-2;i1
+=2) {
83 for (i2
=i1
;i2
<=ip3
;i2
+=ifp2
) {
86 tempr
=wr
*data
[k2
]-wi
*data
[k2
+1];
87 tempi
=wr
*data
[k2
+1]+wi
*data
[k2
];
88 data
[k2
]=data
[k1
]-tempr
;
89 data
[k2
+1]=data
[k1
+1]-tempi
;
94 wr
=(wtemp
=wr
)*wpr
-wi
*wpi
+wr
;
95 wi
=wi
*wpr
+wtemp
*wpi
+wi
;