blob: 51f94b0a72a95375d5d3bd6127f05c93e731b4a6 [file] [log] [blame]
!
! FT verification routine.
!
subroutine verify(n1, n2, n3, nt, cksum, verified)
implicit none
include 'npbparams.h'
!
! Arguments.
!
integer n1, n2, n3, nt
double complex cksum(0:nt)
logical verified
!
! Local variables.
!
integer kt
double complex cexpd(25)
real*8 epsilon, err
!
! Initialize tolerance level and success flag.
!
epsilon = 1.0d-12
verified = .true.
!
if ((n1 .eq. 64) .and. (n2 .eq. 64) .and.
& (n3 .eq. 64) .and. (nt .eq. 6)) then
!
! Class S reference values.
!
cexpd(1) = dcmplx(554.6087004964D0, 484.5363331978D0)
cexpd(2) = dcmplx(554.6385409189D0, 486.5304269511D0)
cexpd(3) = dcmplx(554.6148406171D0, 488.3910722336D0)
cexpd(4) = dcmplx(554.5423607415D0, 490.1273169046D0)
cexpd(5) = dcmplx(554.4255039624D0, 491.7475857993D0)
cexpd(6) = dcmplx(554.2683411902D0, 493.2597244941D0)
else if ((n1 .eq. 128) .and. (n2 .eq. 128) .and.
& (n3 .eq. 32) .and. (nt .eq. 6)) then
!
! Class W reference values.
!
cexpd(1) = dcmplx(567.3612178944D0, 529.3246849175D0)
cexpd(2) = dcmplx(563.1436885271D0, 528.2149986629D0)
cexpd(3) = dcmplx(559.4024089970D0, 527.0996558037D0)
cexpd(4) = dcmplx(556.0698047020D0, 526.0027904925D0)
cexpd(5) = dcmplx(553.0898991250D0, 524.9400845633D0)
cexpd(6) = dcmplx(550.4159734538D0, 523.9212247086D0)
!
else if ((n1 .eq. 256) .and. (n2 .eq. 256) .and.
& (n3 .eq. 128) .and. (nt .eq. 6)) then
!
! Class A reference values.
!
cexpd(1) = dcmplx(504.6735008193D0, 511.4047905510D0)
cexpd(2) = dcmplx(505.9412319734D0, 509.8809666433D0)
cexpd(3) = dcmplx(506.9376896287D0, 509.8144042213D0)
cexpd(4) = dcmplx(507.7892868474D0, 510.1336130759D0)
cexpd(5) = dcmplx(508.5233095391D0, 510.4914655194D0)
cexpd(6) = dcmplx(509.1487099959D0, 510.7917842803D0)
!
else if ((n1 .eq. 512) .and. (n2 .eq. 256) .and.
& (n3 .eq. 256) .and. (nt .eq. 20)) then
!
! Class B reference values.
!
cexpd(1) = dcmplx(517.7643571579D0, 507.7803458597D0)
cexpd(2) = dcmplx(515.4521291263D0, 508.8249431599D0)
cexpd(3) = dcmplx(514.6409228649D0, 509.6208912659D0)
cexpd(4) = dcmplx(514.2378756213D0, 510.1023387619D0)
cexpd(5) = dcmplx(513.9626667737D0, 510.3976610617D0)
cexpd(6) = dcmplx(513.7423460082D0, 510.5948019802D0)
cexpd(7) = dcmplx(513.5547056878D0, 510.7404165783D0)
cexpd(8) = dcmplx(513.3910925466D0, 510.8576573661D0)
cexpd(9) = dcmplx(513.2470705390D0, 510.9577278523D0)
cexpd(10) = dcmplx(513.1197729984D0, 511.0460304483D0)
cexpd(11) = dcmplx(513.0070319283D0, 511.1252433800D0)
cexpd(12) = dcmplx(512.9070537032D0, 511.1968077718D0)
cexpd(13) = dcmplx(512.8182883502D0, 511.2616233064D0)
cexpd(14) = dcmplx(512.7393733383D0, 511.3203605551D0)
cexpd(15) = dcmplx(512.6691062020D0, 511.3735928093D0)
cexpd(16) = dcmplx(512.6064276004D0, 511.4218460548D0)
cexpd(17) = dcmplx(512.5504076570D0, 511.4656139760D0)
cexpd(18) = dcmplx(512.5002331720D0, 511.5053595966D0)
cexpd(19) = dcmplx(512.4551951846D0, 511.5415130407D0)
cexpd(20) = dcmplx(512.4146770029D0, 511.5744692211D0)
!
else if ((n1 .eq. 512) .and. (n2 .eq. 512) .and.
& (n3 .eq. 512) .and. (nt .eq. 20)) then
!
! Class C reference values.
!
cexpd(1) = dcmplx(519.5078707457D0, 514.9019699238D0)
cexpd(2) = dcmplx(515.5422171134D0, 512.7578201997D0)
cexpd(3) = dcmplx(514.4678022222D0, 512.2251847514D0)
cexpd(4) = dcmplx(514.0150594328D0, 512.1090289018D0)
cexpd(5) = dcmplx(513.7550426810D0, 512.1143685824D0)
cexpd(6) = dcmplx(513.5811056728D0, 512.1496764568D0)
cexpd(7) = dcmplx(513.4569343165D0, 512.1870921893D0)
cexpd(8) = dcmplx(513.3651975661D0, 512.2193250322D0)
cexpd(9) = dcmplx(513.2955192805D0, 512.2454735794D0)
cexpd(10) = dcmplx(513.2410471738D0, 512.2663649603D0)
cexpd(11) = dcmplx(513.1971141679D0, 512.2830879827D0)
cexpd(12) = dcmplx(513.1605205716D0, 512.2965869718D0)
cexpd(13) = dcmplx(513.1290734194D0, 512.3075927445D0)
cexpd(14) = dcmplx(513.1012720314D0, 512.3166486553D0)
cexpd(15) = dcmplx(513.0760908195D0, 512.3241541685D0)
cexpd(16) = dcmplx(513.0528295923D0, 512.3304037599D0)
cexpd(17) = dcmplx(513.0310107773D0, 512.3356167976D0)
cexpd(18) = dcmplx(513.0103090133D0, 512.3399592211D0)
cexpd(19) = dcmplx(512.9905029333D0, 512.3435588985D0)
cexpd(20) = dcmplx(512.9714421109D0, 512.3465164008D0)
!
else if ((n1 .eq. 2048) .and. (n2 .eq. 1024) .and.
& (n3 .eq. 1024) .and. (nt .eq. 25)) then
!
! Class D reference values.
!
cexpd(1) = dcmplx(512.2230065252D0, 511.8534037109D0)
cexpd(2) = dcmplx(512.0463975765D0, 511.7061181082D0)
cexpd(3) = dcmplx(511.9865766760D0, 511.7096364601D0)
cexpd(4) = dcmplx(511.9518799488D0, 511.7373863950D0)
cexpd(5) = dcmplx(511.9269088223D0, 511.7680347632D0)
cexpd(6) = dcmplx(511.9082416858D0, 511.7967875532D0)
cexpd(7) = dcmplx(511.8943814638D0, 511.8225281841D0)
cexpd(8) = dcmplx(511.8842385057D0, 511.8451629348D0)
cexpd(9) = dcmplx(511.8769435632D0, 511.8649119387D0)
cexpd(10) = dcmplx(511.8718203448D0, 511.8820803844D0)
cexpd(11) = dcmplx(511.8683569061D0, 511.8969781011D0)
cexpd(12) = dcmplx(511.8661708593D0, 511.9098918835D0)
cexpd(13) = dcmplx(511.8649768950D0, 511.9210777066D0)
cexpd(14) = dcmplx(511.8645605626D0, 511.9307604484D0)
cexpd(15) = dcmplx(511.8647586618D0, 511.9391362671D0)
cexpd(16) = dcmplx(511.8654451572D0, 511.9463757241D0)
cexpd(17) = dcmplx(511.8665212451D0, 511.9526269238D0)
cexpd(18) = dcmplx(511.8679083821D0, 511.9580184108D0)
cexpd(19) = dcmplx(511.8695433664D0, 511.9626617538D0)
cexpd(20) = dcmplx(511.8713748264D0, 511.9666538138D0)
cexpd(21) = dcmplx(511.8733606701D0, 511.9700787219D0)
cexpd(22) = dcmplx(511.8754661974D0, 511.9730095953D0)
cexpd(23) = dcmplx(511.8776626738D0, 511.9755100241D0)
cexpd(24) = dcmplx(511.8799262314D0, 511.9776353561D0)
cexpd(25) = dcmplx(511.8822370068D0, 511.9794338060D0)
!
else if ((n1 .eq. 4096) .and. (n2 .eq. 2048) .and.
& (n3 .eq. 2048) .and. (nt .eq. 25)) then
!
! Class E reference values.
!
cexpd(1) = dcmplx(512.1601045346D0, 511.7395998266D0)
cexpd(2) = dcmplx(512.0905403678D0, 511.8614716182D0)
cexpd(3) = dcmplx(512.0623229306D0, 511.9074203747D0)
cexpd(4) = dcmplx(512.0438418997D0, 511.9345900733D0)
cexpd(5) = dcmplx(512.0311521872D0, 511.9551325550D0)
cexpd(6) = dcmplx(512.0226088809D0, 511.9720179919D0)
cexpd(7) = dcmplx(512.0169296534D0, 511.9861371665D0)
cexpd(8) = dcmplx(512.0131225172D0, 511.9979364402D0)
cexpd(9) = dcmplx(512.0104767108D0, 512.0077674092D0)
cexpd(10) = dcmplx(512.0085127969D0, 512.0159443121D0)
cexpd(11) = dcmplx(512.0069224127D0, 512.0227453670D0)
cexpd(12) = dcmplx(512.0055158164D0, 512.0284096041D0)
cexpd(13) = dcmplx(512.0041820159D0, 512.0331373793D0)
cexpd(14) = dcmplx(512.0028605402D0, 512.0370938679D0)
cexpd(15) = dcmplx(512.0015223011D0, 512.0404138831D0)
cexpd(16) = dcmplx(512.0001570022D0, 512.0432068837D0)
cexpd(17) = dcmplx(511.9987650555D0, 512.0455615860D0)
cexpd(18) = dcmplx(511.9973525091D0, 512.0475499442D0)
cexpd(19) = dcmplx(511.9959279472D0, 512.0492304629D0)
cexpd(20) = dcmplx(511.9945006558D0, 512.0506508902D0)
cexpd(21) = dcmplx(511.9930795911D0, 512.0518503782D0)
cexpd(22) = dcmplx(511.9916728462D0, 512.0528612016D0)
cexpd(23) = dcmplx(511.9902874185D0, 512.0537101195D0)
cexpd(24) = dcmplx(511.9889291565D0, 512.0544194514D0)
cexpd(25) = dcmplx(511.9876028049D0, 512.0550079284D0)
!
else
!
write (*, 120) 'not performed'
verified = .false.
!
end if
!
! Verification test for results.
!
if (verified) then
do kt = 1, nt
err = abs((cksum(kt)-cexpd(kt))/cexpd(kt))
if (.not.(err.le.epsilon)) then
verified = .false.
goto 100
endif
end do
100 continue
if (verified) then
write (*, 120) 'successful'
else
write (*, 120) 'failed'
end if
120 format (' Verification test for FT ', a)
end if
!
return
end