1 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
4 ! Copyright (C) 1995-2004, Scientific Computing Division,
5 ! University Corporation for Atmospheric Research
6 ! Licensed under the GNU General Public License (GPL)
8 ! Authors: Paul N. Swarztrauber and Richard A. Valent
10 ! $Id: rfft2f.f,v 1.5 2004/07/06 00:58:41 rodney Exp $
12 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
14 SUBROUTINE RFFT2F (LDIM, L, M, R, WSAVE, LENSAV, WORK, &
16 INTEGER LDIM, L, M, LENSAV, LENWRK, IER
17 REAL R(LDIM,M), WSAVE(LENSAV), WORK(LENWRK)
26 LWSAV = L + INT(LOG (REAL(L))) +4
27 MWSAV = 2*M + INT(LOG (REAL(M))) +4
28 IF (LENSAV .LT. LWSAV+MWSAV) THEN
30 CALL XERFFT ('RFFT2F', 6)
36 IF (LENWRK .LT. 2*(L/2+1)*M) THEN
38 CALL XERFFT ('RFFT2F', 8)
42 ! Verify LDIM is as big as L
44 IF (LDIM .LT. 2*(L/2+1)) THEN
46 CALL XERFFT ('RFFT2F', -6)
50 ! Transform first dimension of array
52 CALL RFFTMF(M,LDIM,L,1,R,M*LDIM,WSAVE(1), &
53 & L+INT(LOG(REAL(L)))+4,WORK,2*(L/2+1)*M,IER1)
56 CALL XERFFT('RFFT2F',-5)
60 ! reshuffle to add in nyquist imaginary components
63 IF(MOD(L,2).EQ.0) R(L+2,J)=0.0
70 ! transform second dimension of array
72 CALL CFFTMF(L/2+1,1,M,LDIM/2,R,M*LDIM/2, &
73 & WSAVE(L+INT(LOG(REAL(L)))+5), &
74 & 2*M+INT(LOG(REAL(M)))+4,WORK,2*(L/2+1)*M,IER1)
77 CALL XERFFT('RFFT2F',-5)