blob: 7c6ae7550e003d7ffab94d7d413dc7790e5e0878 [file] [log] [blame]
! test of fft*g.f
!
!
program main
integer nmax, nmaxsqrt
parameter (nmax = 32768)
parameter (nmaxsqrt = 128)
integer n, ip(0 : nmaxsqrt + 1)
real*8 a(0 : nmax), w(0 : nmax * 5 / 4 - 1), t(0 : nmax / 2),
& err, errorcheck
!
write (*, *) 'data length n=? (must be 2**m)'
read (*, *) n
ip(0) = 0
!
! check of CDFT
call putdata(0, n - 1, a)
call cdft(n, 1, a, ip, w)
call cdft(n, -1, a, ip, w)
err = errorcheck(0, n - 1, 2.0d0 / n, a)
write (*, *) 'cdft err= ', err
!
! check of RDFT
call putdata(0, n - 1, a)
call rdft(n, 1, a, ip, w)
call rdft(n, -1, a, ip, w)
err = errorcheck(0, n - 1, 2.0d0 / n, a)
write (*, *) 'rdft err= ', err
!
! check of DDCT
call putdata(0, n - 1, a)
call ddct(n, 1, a, ip, w)
call ddct(n, -1, a, ip, w)
a(0) = a(0) * 0.5d0
err = errorcheck(0, n - 1, 2.0d0 / n, a)
write (*, *) 'ddct err= ', err
!
! check of DDST
call putdata(0, n - 1, a)
call ddst(n, 1, a, ip, w)
call ddst(n, -1, a, ip, w)
a(0) = a(0) * 0.5d0
err = errorcheck(0, n - 1, 2.0d0 / n, a)
write (*, *) 'ddst err= ', err
!
! check of DFCT
call putdata(0, n, a)
a(0) = a(0) * 0.5d0
a(n) = a(n) * 0.5d0
call dfct(n, a, t, ip, w)
a(0) = a(0) * 0.5d0
a(n) = a(n) * 0.5d0
call dfct(n, a, t, ip, w)
err = errorcheck(0, n, 2.0d0 / n, a)
write (*, *) 'dfct err= ', err
!
! check of DFST
call putdata(1, n - 1, a)
call dfst(n, a, t, ip, w)
call dfst(n, a, t, ip, w)
err = errorcheck(1, n - 1, 2.0d0 / n, a)
write (*, *) 'dfst err= ', err
!
end
!
!
subroutine putdata(nini, nend, a)
integer nini, nend, j, seed
real*8 a(0 : *), drnd
seed = 0
do j = nini, nend
a(j) = drnd(seed)
end do
end
!
!
function errorcheck(nini, nend, scale, a)
integer nini, nend, j, seed
real*8 scale, a(0 : *), drnd, err, e, errorcheck
err = 0
seed = 0
do j = nini, nend
e = drnd(seed) - a(j) * scale
err = max(err, abs(e))
end do
errorcheck = err
end
!
!
! random number generator, 0 <= drnd < 1
real*8 function drnd(seed)
integer seed
seed = mod(seed * 7141 + 54773, 259200)
drnd = seed * (1.0d0 / 259200.0d0)
end
!