FFTW (1-D Serial) (Real to Complex to Real)

Program rupak

implicit none

integer ( kind = 4 ), parameter :: N = 10

integer ( kind = 4 ), parameter :: Nh = ( N / 2 ) + 1

include "fftw3.f"

integer ( kind = 4 ) i,j

complex ( kind = 8 ) uk(Nh)

real ( kind = 8 ) u(N),u_dum(N)

integer ( kind = 8 ) plan_forward,plan_backward

  integer :: seed

  seed = 123456789

write(*,*)

do i = 1,N

  u(i) = ran(seed)

  seed=u(i)*seed

  write(*,*) i,u(i), "u"

enddo

write(*,*)

  call dfftw_plan_dft_r2c_1d_ (plan_forward, N, u, uk, FFTW_ESTIMATE)

  call dfftw_execute_ (plan_forward)

do i = 1,Nh

  uk(i) = uk(i)

  !write(*, '(2x,i4,2x,i4,2x,2g14.6)') i,uk(i)

enddo

write(*,*)

  call dfftw_plan_dft_c2r_1d_ (plan_backward, N, uk, u_dum, FFTW_ESTIMATE)

  call dfftw_execute_ (plan_backward)

do i = 1,N

  write(*,*) i,u_dum(i)/dfloat(N), "u_dum"

enddo

write(*,*)

  call dfftw_destroy_plan_ ( plan_forward )

  call dfftw_destroy_plan_ ( plan_backward )

end