ISCE_INSAR/components/isceobj/Util/src/cfft1d_sun.F

64 lines
1.2 KiB
Fortran

c *** JPL/Caltech Repeat Orbit Interferometry (ROI) Package ***
subroutine cfft1d_sun(n,c,dir)
implicit none
integer*4 malloc, nold, n, dir, i
complex*8 c(*)
real*4 WORK(1)
external cfftf, cfftb, cffti
c**** define pointer for work array
pointer (pWORK, WORK)
save pWORK
c**** define flag that determines if array needs to be reinitialized
data nold /0/
save nold
c**** Initialize workspace and fft routine to save CPU time later.
c**** This is done when dir=0 or when the fft length has changed.
if ((n .ne. nold) .or. (dir .eq. 0)) then
if (nold .ne. 0) then
call free(pWORK)
end if
pWORK = malloc( (4*n+30)*4 )
if (pWORK .eq. 0) then
write(*,*) 'cfft1d could not allocate memory'
stop
end if
call cffti(n,WORK)
nold = n
end if
c**** forward transform with no normalization. exp(+ikx)
if (dir .eq. -1) then
call cfftf(n,c,WORK)
end if
c**** inverse transform with normalization. exp(-ikx)
if (dir .eq. 1) then
call cfftb(n,c,WORK)
do i = 1, n
c(i) = c(i) / n
end do
end if
return
end