subroutine rfft_nd_forward(func,n,lot)
real(8),dimension(:),intent(inout) :: func
integer,intent(in) :: N,lot
real(8),dimension(:),allocatable :: wsave,work
integer :: L,lenwrk,lensav,lenr,ier,inc,jump
L=size(func)
if(mod(N*lot,L)/=0)stop "rfft_Nd_forward: incommensurate values of parameters."
!
lenr = N*lot
lenwrk = N*lot
lensav = N + int(log(dble(N))/log(2.d0)) + 4
jump = N
inc = 1
allocate(wsave(lensav))
allocate(work(lenwrk))
call rfftmi(N,wsave,lensav,ier)
if(ier==2)stop "rfft_Nd_forward: LENSAV not big enough"
call rfftmf(lot,jump,N,inc,func,lenr,wsave,lensav,work,lenwrk,ier)
deallocate(wsave,work)
select case(ier)
case (0)
return
case (1)
stop "rfft_Nd_forward: LENR not big enough"
case (2)
stop "rfft_Nd_forward: LENSAV not big enough"
case (3)
stop "rfft_Nd_forward: LENWRK not big enough"
case (4)
stop "rfft_Nd_forward: INC,JUMP,N,LOT are not consistent"
end select
end subroutine rfft_nd_forward