Skip to content

Commit 030cbf4

Browse files
committed
Initial commit
0 parents  commit 030cbf4

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+3617
-0
lines changed

Makefile

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
# Several changes made by HCP so this would build without trouble
2+
# on a Linux/g77 system.
3+
# (1) changed step to build library to use ar instead of update
4+
# (update must mean something different on someone elses Unix.)
5+
# (2) Added make clean step
6+
# (3) In test step, changed a.out to ./a.out for cautious folk who don't
7+
# have "." in their PATH.
8+
# (4) Change FFLAGS from -O to -O2 -funroll-loops
9+
# (5) Specify FC=gcc in case /usr/bin/f77 is not a link to g77
10+
# (as it won't be if you have f77reorder installed)
11+
# (6) Added targets shared and installshared to make and install a shared
12+
# version of the library. You need /usr/local/lib in /etc/ld.so.conf
13+
# for this to work
14+
# (7) Modified names for dble prec version
15+
LIB=dfftpack
16+
17+
# Use these lines for Linux/g77
18+
FC=g77
19+
FFLAGS=-O2 -funroll-loops -fexpensive-optimizations
20+
21+
# Use these lines for Solaris
22+
#FC=f77
23+
#FFLAGS=-fast -O5
24+
25+
OBJ=\
26+
zfftb.o\
27+
cfftb1.o\
28+
zfftf.o\
29+
cfftf1.o\
30+
zffti.o\
31+
cffti1.o\
32+
dcosqb.o\
33+
cosqb1.o\
34+
dcosqf.o\
35+
cosqf1.o\
36+
dcosqi.o\
37+
dcost.o\
38+
dcosti.o\
39+
ezfft1.o\
40+
dzfftb.o\
41+
dzfftf.o\
42+
dzffti.o\
43+
passb.o\
44+
passb2.o\
45+
passb3.o\
46+
passb4.o\
47+
passb5.o\
48+
passf.o\
49+
passf2.o\
50+
passf3.o\
51+
passf4.o\
52+
passf5.o\
53+
radb2.o\
54+
radb3.o\
55+
radb4.o\
56+
radb5.o\
57+
radbg.o\
58+
radf2.o\
59+
radf3.o\
60+
radf4.o\
61+
radf5.o\
62+
radfg.o\
63+
dfftb.o\
64+
rfftb1.o\
65+
dfftf.o\
66+
rfftf1.o\
67+
dffti.o\
68+
rffti1.o\
69+
dsinqb.o\
70+
dsinqf.o\
71+
dsinqi.o\
72+
dsint.o\
73+
sint1.o\
74+
dsinti.o
75+
76+
lib$(LIB).a: $(OBJ)
77+
ar -rcs lib$(LIB).a $(OBJ)
78+
79+
shared:$(OBJ)
80+
$(FC) -shared -o lib$(LIB).so $(OBJ)
81+
82+
install: lib$(LIB).a
83+
mv lib$(LIB).a /usr/local/lib
84+
rm *.o
85+
86+
installshared:lib$(LIB).so
87+
mv lib$(LIB).so /usr/local/lib
88+
rm *.o
89+
ldconfig
90+
91+
test: test.o
92+
$(FC) test.o -L./ -l$(LIB)
93+
time ./a.out
94+
95+
clean:
96+
rm -f -r *.o *.a *.so

README

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
DFFTPACK V1.0
2+
*****************************************************************
3+
A Double precision clone by Hugh C. Pumphrey of:
4+
FFTPACK
5+
version 4 april 1985
6+
7+
The gzipped tar file dp.tgz contains a complete copy of the FORTRAN
8+
sources of fftpack, with everything converted to double precision. If
9+
you do
10+
11+
gunzip dp.tgz
12+
tar xvf dfftpack.tar
13+
14+
You will get a directory called dfftpack with all the source code in
15+
it. There is also:
16+
17+
(*) a Makefile which I have tweaked to work on modern Linux and Solaris
18+
systems. The comments in this file document the changes made.
19+
20+
(*) a file doc which was supplied with fftpack and which has been
21+
altered to reflect the changes made in the change to double precision.
22+
23+
(*) A file doc.double which details the changes I made to the source code
24+
25+
Please send any comments or bug reports to [email protected] . Please
26+
also report if you get dfftpack to build successfully on any system
27+
other than Linux or Solaris.
28+
29+
The original FFTPACK was public domain, so dfftpack is public domain
30+
too. It is released in the hope it will be useful to someone. There is
31+
no warranty of any sort covering this software.

cfftb1.f

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
SUBROUTINE CFFTB1 (N,C,CH,WA,IFAC)
2+
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
3+
DIMENSION CH(*) ,C(*) ,WA(*) ,IFAC(*)
4+
NF = IFAC(2)
5+
NA = 0
6+
L1 = 1
7+
IW = 1
8+
DO 116 K1=1,NF
9+
IP = IFAC(K1+2)
10+
L2 = IP*L1
11+
IDO = N/L2
12+
IDOT = IDO+IDO
13+
IDL1 = IDOT*L1
14+
IF (IP .NE. 4) GO TO 103
15+
IX2 = IW+IDOT
16+
IX3 = IX2+IDOT
17+
IF (NA .NE. 0) GO TO 101
18+
CALL PASSB4 (IDOT,L1,C,CH,WA(IW),WA(IX2),WA(IX3))
19+
GO TO 102
20+
101 CALL PASSB4 (IDOT,L1,CH,C,WA(IW),WA(IX2),WA(IX3))
21+
102 NA = 1-NA
22+
GO TO 115
23+
103 IF (IP .NE. 2) GO TO 106
24+
IF (NA .NE. 0) GO TO 104
25+
CALL PASSB2 (IDOT,L1,C,CH,WA(IW))
26+
GO TO 105
27+
104 CALL PASSB2 (IDOT,L1,CH,C,WA(IW))
28+
105 NA = 1-NA
29+
GO TO 115
30+
106 IF (IP .NE. 3) GO TO 109
31+
IX2 = IW+IDOT
32+
IF (NA .NE. 0) GO TO 107
33+
CALL PASSB3 (IDOT,L1,C,CH,WA(IW),WA(IX2))
34+
GO TO 108
35+
107 CALL PASSB3 (IDOT,L1,CH,C,WA(IW),WA(IX2))
36+
108 NA = 1-NA
37+
GO TO 115
38+
109 IF (IP .NE. 5) GO TO 112
39+
IX2 = IW+IDOT
40+
IX3 = IX2+IDOT
41+
IX4 = IX3+IDOT
42+
IF (NA .NE. 0) GO TO 110
43+
CALL PASSB5 (IDOT,L1,C,CH,WA(IW),WA(IX2),WA(IX3),WA(IX4))
44+
GO TO 111
45+
110 CALL PASSB5 (IDOT,L1,CH,C,WA(IW),WA(IX2),WA(IX3),WA(IX4))
46+
111 NA = 1-NA
47+
GO TO 115
48+
112 IF (NA .NE. 0) GO TO 113
49+
CALL PASSB (NAC,IDOT,IP,L1,IDL1,C,C,C,CH,CH,WA(IW))
50+
GO TO 114
51+
113 CALL PASSB (NAC,IDOT,IP,L1,IDL1,CH,CH,CH,C,C,WA(IW))
52+
114 IF (NAC .NE. 0) NA = 1-NA
53+
115 L1 = L2
54+
IW = IW+(IP-1)*IDOT
55+
116 CONTINUE
56+
IF (NA .EQ. 0) RETURN
57+
N2 = N+N
58+
DO 117 I=1,N2
59+
C(I) = CH(I)
60+
117 CONTINUE
61+
RETURN
62+
END

cfftf1.f

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
SUBROUTINE CFFTF1 (N,C,CH,WA,IFAC)
2+
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
3+
DIMENSION CH(*) ,C(*) ,WA(*) ,IFAC(*)
4+
NF = IFAC(2)
5+
NA = 0
6+
L1 = 1
7+
IW = 1
8+
DO 116 K1=1,NF
9+
IP = IFAC(K1+2)
10+
L2 = IP*L1
11+
IDO = N/L2
12+
IDOT = IDO+IDO
13+
IDL1 = IDOT*L1
14+
IF (IP .NE. 4) GO TO 103
15+
IX2 = IW+IDOT
16+
IX3 = IX2+IDOT
17+
IF (NA .NE. 0) GO TO 101
18+
CALL PASSF4 (IDOT,L1,C,CH,WA(IW),WA(IX2),WA(IX3))
19+
GO TO 102
20+
101 CALL PASSF4 (IDOT,L1,CH,C,WA(IW),WA(IX2),WA(IX3))
21+
102 NA = 1-NA
22+
GO TO 115
23+
103 IF (IP .NE. 2) GO TO 106
24+
IF (NA .NE. 0) GO TO 104
25+
CALL PASSF2 (IDOT,L1,C,CH,WA(IW))
26+
GO TO 105
27+
104 CALL PASSF2 (IDOT,L1,CH,C,WA(IW))
28+
105 NA = 1-NA
29+
GO TO 115
30+
106 IF (IP .NE. 3) GO TO 109
31+
IX2 = IW+IDOT
32+
IF (NA .NE. 0) GO TO 107
33+
CALL PASSF3 (IDOT,L1,C,CH,WA(IW),WA(IX2))
34+
GO TO 108
35+
107 CALL PASSF3 (IDOT,L1,CH,C,WA(IW),WA(IX2))
36+
108 NA = 1-NA
37+
GO TO 115
38+
109 IF (IP .NE. 5) GO TO 112
39+
IX2 = IW+IDOT
40+
IX3 = IX2+IDOT
41+
IX4 = IX3+IDOT
42+
IF (NA .NE. 0) GO TO 110
43+
CALL PASSF5 (IDOT,L1,C,CH,WA(IW),WA(IX2),WA(IX3),WA(IX4))
44+
GO TO 111
45+
110 CALL PASSF5 (IDOT,L1,CH,C,WA(IW),WA(IX2),WA(IX3),WA(IX4))
46+
111 NA = 1-NA
47+
GO TO 115
48+
112 IF (NA .NE. 0) GO TO 113
49+
CALL PASSF (NAC,IDOT,IP,L1,IDL1,C,C,C,CH,CH,WA(IW))
50+
GO TO 114
51+
113 CALL PASSF (NAC,IDOT,IP,L1,IDL1,CH,CH,CH,C,C,WA(IW))
52+
114 IF (NAC .NE. 0) NA = 1-NA
53+
115 L1 = L2
54+
IW = IW+(IP-1)*IDOT
55+
116 CONTINUE
56+
IF (NA .EQ. 0) RETURN
57+
N2 = N+N
58+
DO 117 I=1,N2
59+
C(I) = CH(I)
60+
117 CONTINUE
61+
RETURN
62+
END

cffti1.f

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
SUBROUTINE CFFTI1 (N,WA,IFAC)
2+
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
3+
DIMENSION WA(*) ,IFAC(*) ,NTRYH(4)
4+
DATA NTRYH(1),NTRYH(2),NTRYH(3),NTRYH(4)/3,4,2,5/
5+
NL = N
6+
NF = 0
7+
J = 0
8+
101 J = J+1
9+
IF (J-4) 102,102,103
10+
102 NTRY = NTRYH(J)
11+
GO TO 104
12+
103 NTRY = NTRY+2
13+
104 NQ = NL/NTRY
14+
NR = NL-NTRY*NQ
15+
IF (NR) 101,105,101
16+
105 NF = NF+1
17+
IFAC(NF+2) = NTRY
18+
NL = NQ
19+
IF (NTRY .NE. 2) GO TO 107
20+
IF (NF .EQ. 1) GO TO 107
21+
DO 106 I=2,NF
22+
IB = NF-I+2
23+
IFAC(IB+2) = IFAC(IB+1)
24+
106 CONTINUE
25+
IFAC(3) = 2
26+
107 IF (NL .NE. 1) GO TO 104
27+
IFAC(1) = N
28+
IFAC(2) = NF
29+
TPI = 6.28318530717958647692D0
30+
ARGH = TPI/FLOAT(N)
31+
I = 2
32+
L1 = 1
33+
DO 110 K1=1,NF
34+
IP = IFAC(K1+2)
35+
LD = 0
36+
L2 = L1*IP
37+
IDO = N/L2
38+
IDOT = IDO+IDO+2
39+
IPM = IP-1
40+
DO 109 J=1,IPM
41+
I1 = I
42+
WA(I-1) = 1.0D0
43+
WA(I) = 0.0D0
44+
LD = LD+L1
45+
FI = 0.0D0
46+
ARGLD = FLOAT(LD)*ARGH
47+
DO 108 II=4,IDOT,2
48+
I = I+2
49+
FI = FI+1.D0
50+
ARG = FI*ARGLD
51+
WA(I-1) = COS(ARG)
52+
WA(I) = SIN(ARG)
53+
108 CONTINUE
54+
IF (IP .LE. 5) GO TO 109
55+
WA(I1-1) = WA(I-1)
56+
WA(I1) = WA(I)
57+
109 CONTINUE
58+
L1 = L2
59+
110 CONTINUE
60+
RETURN
61+
END

cosqb1.f

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
SUBROUTINE COSQB1 (N,X,W,XH)
2+
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
3+
DIMENSION X(1) ,W(1) ,XH(1)
4+
NS2 = (N+1)/2
5+
NP2 = N+2
6+
DO 101 I=3,N,2
7+
XIM1 = X(I-1)+X(I)
8+
X(I) = X(I)-X(I-1)
9+
X(I-1) = XIM1
10+
101 CONTINUE
11+
X(1) = X(1)+X(1)
12+
MODN = MOD(N,2)
13+
IF (MODN .EQ. 0) X(N) = X(N)+X(N)
14+
CALL DFFTB (N,X,XH)
15+
DO 102 K=2,NS2
16+
KC = NP2-K
17+
XH(K) = W(K-1)*X(KC)+W(KC-1)*X(K)
18+
XH(KC) = W(K-1)*X(K)-W(KC-1)*X(KC)
19+
102 CONTINUE
20+
IF (MODN .EQ. 0) X(NS2+1) = W(NS2)*(X(NS2+1)+X(NS2+1))
21+
DO 103 K=2,NS2
22+
KC = NP2-K
23+
X(K) = XH(K)+XH(KC)
24+
X(KC) = XH(K)-XH(KC)
25+
103 CONTINUE
26+
X(1) = X(1)+X(1)
27+
RETURN
28+
END

cosqf1.f

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
SUBROUTINE COSQF1 (N,X,W,XH)
2+
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
3+
DIMENSION X(1) ,W(1) ,XH(1)
4+
NS2 = (N+1)/2
5+
NP2 = N+2
6+
DO 101 K=2,NS2
7+
KC = NP2-K
8+
XH(K) = X(K)+X(KC)
9+
XH(KC) = X(K)-X(KC)
10+
101 CONTINUE
11+
MODN = MOD(N,2)
12+
IF (MODN .EQ. 0) XH(NS2+1) = X(NS2+1)+X(NS2+1)
13+
DO 102 K=2,NS2
14+
KC = NP2-K
15+
X(K) = W(K-1)*XH(KC)+W(KC-1)*XH(K)
16+
X(KC) = W(K-1)*XH(K)-W(KC-1)*XH(KC)
17+
102 CONTINUE
18+
IF (MODN .EQ. 0) X(NS2+1) = W(NS2)*XH(NS2+1)
19+
CALL DFFTF (N,X,XH)
20+
DO 103 I=3,N,2
21+
XIM1 = X(I-1)-X(I)
22+
X(I) = X(I-1)+X(I)
23+
X(I-1) = XIM1
24+
103 CONTINUE
25+
RETURN
26+
END

dcosqb.f

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
SUBROUTINE DCOSQB (N,X,WSAVE)
2+
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
3+
DIMENSION X(*) ,WSAVE(*)
4+
DATA TSQRT2 /2.82842712474619009760D0/
5+
IF (N-2) 101,102,103
6+
101 X(1) = 4.0D0*X(1)
7+
RETURN
8+
102 X1 = 4.0D0*(X(1)+X(2))
9+
X(2) = TSQRT2*(X(1)-X(2))
10+
X(1) = X1
11+
RETURN
12+
103 CALL COSQB1 (N,X,WSAVE,WSAVE(N+1))
13+
RETURN
14+
END

0 commit comments

Comments
 (0)