dzfftf Subroutine

subroutine dzfftf(n, r, Azero, a, b, Wsave)

Arguments

Type IntentOptional Attributes Name
integer :: n
real(kind=rk) :: r
real(kind=rk) :: Azero
real(kind=rk) :: a
real(kind=rk) :: b
real(kind=rk) :: Wsave

Contents

Source Code


Variables

Type Visibility Attributes Name Initial
real(kind=rk), public :: cf
real(kind=rk), public :: cfm
integer, public :: i
integer, public :: ns2
integer, public :: ns2m

Source Code

      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