SUBROUTINE fourcol_3d(data,isign) USE nrtype; USE nrutil, ONLY : assert,swap IMPLICIT NONE COMPLEX(SPC), DIMENSION(:,:,:), INTENT(INOUT) :: data INTEGER(I4B), INTENT(IN) :: isign INTEGER(I4B) :: n,i,istep,j,m,mmax,n2 REAL(DP) :: theta COMPLEX(SPC), DIMENSION(size(data,2),size(data,3)) :: temp COMPLEX(DPC) :: w,wp COMPLEX(SPC) :: ws n=size(data,1) call assert(iand(n,n-1)==0, 'n must be a power of 2 in fourcol_3d') n2=n/2 j=n2 do i=1,n-2 if (j > i) call swap(data(j+1,:,:),data(i+1,:,:)) m=n2 do if (m < 2 .or. j < m) exit j=j-m m=m/2 end do j=j+m end do mmax=1 do if (n <= mmax) exit istep=2*mmax theta=PI_D/(isign*mmax) wp=cmplx(-2.0_dp*sin(0.5_dp*theta)**2,sin(theta),kind=dpc) w=cmplx(1.0_dp,0.0_dp,kind=dpc) do m=1,mmax ws=w do i=m,n,istep j=i+mmax temp=ws*data(j,:,:) data(j,:,:)=data(i,:,:)-temp data(i,:,:)=data(i,:,:)+temp end do w=w*wp+w end do mmax=istep end do END SUBROUTINE fourcol_3d