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 DCOSQB (N,X,WSAVE)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
DIMENSION X(*) ,WSAVE(*)
DATA TSQRT2 /2.82842712474619009760D0/
IF (N.lt.2) GO TO 101
IF (N.eq.2) GO TO 102
GO TO 103
101 X(1) = 4.0D0*X(1)
RETURN
102 X1 = 4.0D0*(X(1)+X(2))
X(2) = TSQRT2*(X(1)-X(2))
X(1) = X1
RETURN
103 CALL DCOSQB1 (N,X,WSAVE,WSAVE(N+1))
RETURN
END
SUBROUTINE DCOSQB1 (N,X,W,XH)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
DIMENSION X(1) ,W(1) ,XH(1)
NS2 = (N+1)/2
NP2 = N+2
DO 101 I=3,N,2
XIM1 = X(I-1)+X(I)
X(I) = X(I)-X(I-1)
X(I-1) = XIM1
101 CONTINUE
X(1) = X(1)+X(1)
MODN = MOD(N,2)
IF (MODN .EQ. 0) X(N) = X(N)+X(N)
CALL DFFTB (N,X,XH)
DO 102 K=2,NS2
KC = NP2-K
XH(K) = W(K-1)*X(KC)+W(KC-1)*X(K)
XH(KC) = W(K-1)*X(K)-W(KC-1)*X(KC)
102 CONTINUE
IF (MODN .EQ. 0) X(NS2+1) = W(NS2)*(X(NS2+1)+X(NS2+1))
DO 103 K=2,NS2
KC = NP2-K
X(K) = XH(K)+XH(KC)
X(KC) = XH(K)-XH(KC)
103 CONTINUE
X(1) = X(1)+X(1)
RETURN
END
|