1 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
5 C Authors: Paul N. Swarztrauber and Richard A. Valent
9 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
11 SUBROUTINE RFFT2F
(LDIM
, L
, M
, R
, WSAVE
, LENSAV
, WORK
,
13 INTEGER LDIM
, L
, M
, LENSAV
, LENWRK
, IER
14 REAL R
(LDIM
,M
), WSAVE
(LENSAV
), WORK
(LENWRK
)
23 LWSAV
= L
+ INT
(LOG
(REAL(L
))) +4
24 MWSAV
= 2*M
+ INT
(LOG
(REAL(M
))) +4
25 IF (LENSAV
.LT
. LWSAV
+MWSAV
) THEN
27 CALL XERFFT
('RFFT2F', 6)
33 IF (LENWRK
.LT
. 2*(L
/2+1)*M
) THEN
35 CALL XERFFT
('RFFT2F', 8)
39 C Verify LDIM is as big as L
41 IF (LDIM
.LT
. 2*(L
/2+1)) THEN
43 CALL XERFFT
('RFFT2F', -6)
47 C Transform first dimension of array
49 CALL RFFTMF
(M
,LDIM
,L
,1,R
,M*LDIM
,WSAVE
(1),
50 . L
+INT
(LOG
(REAL(L
)))+4,WORK
,2*(L
/2+1)*M
,IER1
)
53 CALL XERFFT
('RFFT2F',-5)
57 C reshuffle to add in nyquist imaginary components
60 IF(MOD
(L
,2).EQ
.0) R
(L
+2,J
)=0.0
67 C transform second dimension of array
69 CALL CFFTMF
(L
/2+1,1,M
,LDIM
/2,R
,M*LDIM
/2,
70 . WSAVE
(L
+INT
(LOG
(REAL(L
)))+5),
71 . 2*M
+INT
(LOG
(REAL(M
)))+4,WORK
,2*(L
/2+1)*M
,IER1
)
74 CALL XERFFT
('RFFT2F',-5)