subroutine dzfftf(n,r,Azero,a,b,Wsave) ! ! VERSION 3 JUNE 1979 ! use fftpack_kind implicit none real(rk) :: a , Azero , b , cf , cfm , r , Wsave integer :: i , n , ns2 , ns2m dimension r(*) , a(*) , b(*) , Wsave(*) if ( n<2 ) then Azero = r(1) return elseif ( n==2 ) then Azero = 0.5_rk*(r(1)+r(2)) a(1) = 0.5_rk*(r(1)-r(2)) return else do i = 1 , n Wsave(i) = r(i) enddo call dfftf(n,Wsave,Wsave(n+1)) cf = 2.0_rk/real(n, rk) cfm = -cf Azero = 0.5_rk*cf*Wsave(1) ns2 = (n+1)/2 ns2m = ns2 - 1 do i = 1 , ns2m a(i) = cf*Wsave(2*i) b(i) = cfm*Wsave(2*i+1) enddo if ( mod(n,2)==1 ) return a(ns2) = 0.5_rk*cf*Wsave(n) b(ns2) = 0.0_rk endif end subroutine dzfftf