1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
SUBROUTINE DCOST (N,X,WSAVE)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
DIMENSION X(*) ,WSAVE(*)
NM1 = N-1
NP1 = N+1
NS2 = N/2
IF (N.lt.2) GO TO 106
IF (N.eq.2) GO TO 101
GO TO 102
101 X1H = X(1)+X(2)
X(2) = X(1)-X(2)
X(1) = X1H
RETURN
102 IF (N .GT. 3) GO TO 103
X1P3 = X(1)+X(3)
TX2 = X(2)+X(2)
X(2) = X(1)-X(3)
X(1) = X1P3+TX2
X(3) = X1P3-TX2
RETURN
103 C1 = X(1)-X(N)
X(1) = X(1)+X(N)
DO 104 K=2,NS2
KC = NP1-K
T1 = X(K)+X(KC)
T2 = X(K)-X(KC)
C1 = C1+WSAVE(KC)*T2
T2 = WSAVE(K)*T2
X(K) = T1-T2
X(KC) = T1+T2
104 CONTINUE
MODN = MOD(N,2)
IF (MODN .NE. 0) X(NS2+1) = X(NS2+1)+X(NS2+1)
CALL DFFTF (NM1,X,WSAVE(N+1))
XIM2 = X(2)
X(2) = C1
DO 105 I=4,N,2
XI = X(I)
X(I) = X(I-2)-X(I-1)
X(I-1) = XIM2
XIM2 = XI
105 CONTINUE
IF (MODN .NE. 0) X(N) = XIM2
106 RETURN
END
|