blob: 0628800f35764437eacc2378707ea616d7d0985a [file] [log] [blame]
c---------------------------------------------------------------------
c---------------------------------------------------------------------
subroutine verify(xcr, xce, xci, class, verified)
c---------------------------------------------------------------------
c---------------------------------------------------------------------
c---------------------------------------------------------------------
c verification routine
c---------------------------------------------------------------------
implicit none
include 'applu.incl'
double precision xcr(5), xce(5), xci
double precision xcrref(5),xceref(5),xciref,
> xcrdif(5),xcedif(5),xcidif,
> epsilon, dtref
integer m
character class
logical verified
c---------------------------------------------------------------------
c tolerance level
c---------------------------------------------------------------------
epsilon = 1.0d-08
class = 'U'
verified = .true.
do m = 1,5
xcrref(m) = 1.0
xceref(m) = 1.0
end do
xciref = 1.0
if ( (nx0 .eq. 12 ) .and.
> (ny0 .eq. 12 ) .and.
> (nz0 .eq. 12 ) .and.
> (itmax .eq. 50 )) then
class = 'S'
dtref = 5.0d-1
c---------------------------------------------------------------------
c Reference values of RMS-norms of residual, for the (12X12X12) grid,
c after 50 time steps, with DT = 5.0d-01
c---------------------------------------------------------------------
xcrref(1) = 1.6196343210976702d-02
xcrref(2) = 2.1976745164821318d-03
xcrref(3) = 1.5179927653399185d-03
xcrref(4) = 1.5029584435994323d-03
xcrref(5) = 3.4264073155896461d-02
c---------------------------------------------------------------------
c Reference values of RMS-norms of solution error, for the (12X12X12) grid,
c after 50 time steps, with DT = 5.0d-01
c---------------------------------------------------------------------
xceref(1) = 6.4223319957960924d-04
xceref(2) = 8.4144342047347926d-05
xceref(3) = 5.8588269616485186d-05
xceref(4) = 5.8474222595157350d-05
xceref(5) = 1.3103347914111294d-03
c---------------------------------------------------------------------
c Reference value of surface integral, for the (12X12X12) grid,
c after 50 time steps, with DT = 5.0d-01
c---------------------------------------------------------------------
xciref = 7.8418928865937083d+00
elseif ( (nx0 .eq. 33) .and.
> (ny0 .eq. 33) .and.
> (nz0 .eq. 33) .and.
> (itmax . eq. 300) ) then
class = 'W' !SPEC95fp size
dtref = 1.5d-3
c---------------------------------------------------------------------
c Reference values of RMS-norms of residual, for the (33x33x33) grid,
c after 300 time steps, with DT = 1.5d-3
c---------------------------------------------------------------------
xcrref(1) = 0.1236511638192d+02
xcrref(2) = 0.1317228477799d+01
xcrref(3) = 0.2550120713095d+01
xcrref(4) = 0.2326187750252d+01
xcrref(5) = 0.2826799444189d+02
c---------------------------------------------------------------------
c Reference values of RMS-norms of solution error, for the (33X33X33) grid,
c---------------------------------------------------------------------
xceref(1) = 0.4867877144216d+00
xceref(2) = 0.5064652880982d-01
xceref(3) = 0.9281818101960d-01
xceref(4) = 0.8570126542733d-01
xceref(5) = 0.1084277417792d+01
c---------------------------------------------------------------------
c Reference value of surface integral, for the (33X33X33) grid,
c after 300 time steps, with DT = 1.5d-3
c---------------------------------------------------------------------
xciref = 0.1161399311023d+02
elseif ( (nx0 .eq. 64) .and.
> (ny0 .eq. 64) .and.
> (nz0 .eq. 64) .and.
> (itmax . eq. 250) ) then
class = 'A'
dtref = 2.0d+0
c---------------------------------------------------------------------
c Reference values of RMS-norms of residual, for the (64X64X64) grid,
c after 250 time steps, with DT = 2.0d+00
c---------------------------------------------------------------------
xcrref(1) = 7.7902107606689367d+02
xcrref(2) = 6.3402765259692870d+01
xcrref(3) = 1.9499249727292479d+02
xcrref(4) = 1.7845301160418537d+02
xcrref(5) = 1.8384760349464247d+03
c---------------------------------------------------------------------
c Reference values of RMS-norms of solution error, for the (64X64X64) grid,
c after 250 time steps, with DT = 2.0d+00
c---------------------------------------------------------------------
xceref(1) = 2.9964085685471943d+01
xceref(2) = 2.8194576365003349d+00
xceref(3) = 7.3473412698774742d+00
xceref(4) = 6.7139225687777051d+00
xceref(5) = 7.0715315688392578d+01
c---------------------------------------------------------------------
c Reference value of surface integral, for the (64X64X64) grid,
c after 250 time steps, with DT = 2.0d+00
c---------------------------------------------------------------------
xciref = 2.6030925604886277d+01
elseif ( (nx0 .eq. 102) .and.
> (ny0 .eq. 102) .and.
> (nz0 .eq. 102) .and.
> (itmax . eq. 250) ) then
class = 'B'
dtref = 2.0d+0
c---------------------------------------------------------------------
c Reference values of RMS-norms of residual, for the (102X102X102) grid,
c after 250 time steps, with DT = 2.0d+00
c---------------------------------------------------------------------
xcrref(1) = 3.5532672969982736d+03
xcrref(2) = 2.6214750795310692d+02
xcrref(3) = 8.8333721850952190d+02
xcrref(4) = 7.7812774739425265d+02
xcrref(5) = 7.3087969592545314d+03
c---------------------------------------------------------------------
c Reference values of RMS-norms of solution error, for the (102X102X102)
c grid, after 250 time steps, with DT = 2.0d+00
c---------------------------------------------------------------------
xceref(1) = 1.1401176380212709d+02
xceref(2) = 8.1098963655421574d+00
xceref(3) = 2.8480597317698308d+01
xceref(4) = 2.5905394567832939d+01
xceref(5) = 2.6054907504857413d+02
c---------------------------------------------------------------------
c Reference value of surface integral, for the (102X102X102) grid,
c after 250 time steps, with DT = 2.0d+00
c---------------------------------------------------------------------
xciref = 4.7887162703308227d+01
elseif ( (nx0 .eq. 162) .and.
> (ny0 .eq. 162) .and.
> (nz0 .eq. 162) .and.
> (itmax . eq. 250) ) then
class = 'C'
dtref = 2.0d+0
c---------------------------------------------------------------------
c Reference values of RMS-norms of residual, for the (162X162X162) grid,
c after 250 time steps, with DT = 2.0d+00
c---------------------------------------------------------------------
xcrref(1) = 1.03766980323537846d+04
xcrref(2) = 8.92212458801008552d+02
xcrref(3) = 2.56238814582660871d+03
xcrref(4) = 2.19194343857831427d+03
xcrref(5) = 1.78078057261061185d+04
c---------------------------------------------------------------------
c Reference values of RMS-norms of solution error, for the (162X162X162)
c grid, after 250 time steps, with DT = 2.0d+00
c---------------------------------------------------------------------
xceref(1) = 2.15986399716949279d+02
xceref(2) = 1.55789559239863600d+01
xceref(3) = 5.41318863077207766d+01
xceref(4) = 4.82262643154045421d+01
xceref(5) = 4.55902910043250358d+02
c---------------------------------------------------------------------
c Reference value of surface integral, for the (162X162X162) grid,
c after 250 time steps, with DT = 2.0d+00
c---------------------------------------------------------------------
xciref = 6.66404553572181300d+01
c---------------------------------------------------------------------
c Reference value of surface integral, for the (162X162X162) grid,
c after 250 time steps, with DT = 2.0d+00
c---------------------------------------------------------------------
xciref = 6.66404553572181300d+01
elseif ( (nx0 .eq. 408) .and.
> (ny0 .eq. 408) .and.
> (nz0 .eq. 408) .and.
> (itmax . eq. 300) ) then
class = 'D'
dtref = 1.0d+0
c---------------------------------------------------------------------
c Reference values of RMS-norms of residual, for the (408X408X408) grid,
c after 300 time steps, with DT = 1.0d+00
c---------------------------------------------------------------------
xcrref(1) = 0.4868417937025d+05
xcrref(2) = 0.4696371050071d+04
xcrref(3) = 0.1218114549776d+05
xcrref(4) = 0.1033801493461d+05
xcrref(5) = 0.7142398413817d+05
c---------------------------------------------------------------------
c Reference values of RMS-norms of solution error, for the (408X408X408)
c grid, after 300 time steps, with DT = 1.0d+00
c---------------------------------------------------------------------
xceref(1) = 0.3752393004482d+03
xceref(2) = 0.3084128893659d+02
xceref(3) = 0.9434276905469d+02
xceref(4) = 0.8230686681928d+02
xceref(5) = 0.7002620636210d+03
c---------------------------------------------------------------------
c Reference value of surface integral, for the (408X408X408) grid,
c after 300 time steps, with DT = 1.0d+00
c---------------------------------------------------------------------
xciref = 0.8334101392503d+02
elseif ( (nx0 .eq. 1020) .and.
> (ny0 .eq. 1020) .and.
> (nz0 .eq. 1020) .and.
> (itmax . eq. 300) ) then
class = 'E'
dtref = 0.5d+0
c---------------------------------------------------------------------
c Reference values of RMS-norms of residual, for the (1020X1020X1020) grid,
c after 300 time steps, with DT = 0.5d+00
c---------------------------------------------------------------------
xcrref(1) = 0.2099641687874d+06
xcrref(2) = 0.2130403143165d+05
xcrref(3) = 0.5319228789371d+05
xcrref(4) = 0.4509761639833d+05
xcrref(5) = 0.2932360006590d+06
c---------------------------------------------------------------------
c Reference values of RMS-norms of solution error, for the (1020X1020X1020)
c grid, after 300 time steps, with DT = 0.5d+00
c---------------------------------------------------------------------
xceref(1) = 0.4800572578333d+03
xceref(2) = 0.4221993400184d+02
xceref(3) = 0.1210851906824d+03
xceref(4) = 0.1047888986770d+03
xceref(5) = 0.8363028257389d+03
c---------------------------------------------------------------------
c Reference value of surface integral, for the (1020X1020X1020) grid,
c after 300 time steps, with DT = 0.5d+00
c---------------------------------------------------------------------
xciref = 0.9512163272273d+02
else
verified = .FALSE.
endif
c---------------------------------------------------------------------
c verification test for residuals if gridsize is one of
c the defined grid sizes above (class .ne. 'U')
c---------------------------------------------------------------------
c---------------------------------------------------------------------
c Compute the difference of solution values and the known reference values.
c---------------------------------------------------------------------
do m = 1, 5
xcrdif(m) = dabs((xcr(m)-xcrref(m))/xcrref(m))
xcedif(m) = dabs((xce(m)-xceref(m))/xceref(m))
enddo
xcidif = dabs((xci - xciref)/xciref)
c---------------------------------------------------------------------
c Output the comparison of computed results to known cases.
c---------------------------------------------------------------------
if (class .ne. 'U') then
write(*, 1990) class
1990 format(/, ' Verification being performed for class ', a)
write (*,2000) epsilon
2000 format(' Accuracy setting for epsilon = ', E20.13)
verified = (dabs(dt-dtref) .le. epsilon)
if (.not.verified) then
class = 'U'
write (*,1000) dtref
1000 format(' DT does not match the reference value of ',
> E15.8)
endif
else
write(*, 1995)
1995 format(' Unknown class')
endif
if (class .ne. 'U') then
write (*, 2001)
else
write (*, 2005)
endif
2001 format(' Comparison of RMS-norms of residual')
2005 format(' RMS-norms of residual')
do m = 1, 5
if (class .eq. 'U') then
write(*, 2015) m, xcr(m)
else if (xcrdif(m) .le. epsilon) then
write (*,2011) m,xcr(m),xcrref(m),xcrdif(m)
else
verified = .false.
write (*,2010) m,xcr(m),xcrref(m),xcrdif(m)
endif
enddo
if (class .ne. 'U') then
write (*,2002)
else
write (*,2006)
endif
2002 format(' Comparison of RMS-norms of solution error')
2006 format(' RMS-norms of solution error')
do m = 1, 5
if (class .eq. 'U') then
write(*, 2015) m, xce(m)
else if (xcedif(m) .le. epsilon) then
write (*,2011) m,xce(m),xceref(m),xcedif(m)
else
verified = .false.
write (*,2010) m,xce(m),xceref(m),xcedif(m)
endif
enddo
2010 format(' FAILURE: ', i2, 2x, E20.13, E20.13, E20.13)
2011 format(' ', i2, 2x, E20.13, E20.13, E20.13)
2015 format(' ', i2, 2x, E20.13)
if (class .ne. 'U') then
write (*,2025)
else
write (*,2026)
endif
2025 format(' Comparison of surface integral')
2026 format(' Surface integral')
if (class .eq. 'U') then
write(*, 2030) xci
else if (xcidif .le. epsilon) then
write(*, 2032) xci, xciref, xcidif
else
verified = .false.
write(*, 2031) xci, xciref, xcidif
endif
2030 format(' ', 4x, E20.13)
2031 format(' FAILURE: ', 4x, E20.13, E20.13, E20.13)
2032 format(' ', 4x, E20.13, E20.13, E20.13)
if (class .eq. 'U') then
write(*, 2022)
write(*, 2023)
2022 format(' No reference values provided')
2023 format(' No verification performed')
else if (verified) then
write(*, 2020)
2020 format(' Verification Successful')
else
write(*, 2021)
2021 format(' Verification failed')
endif
return
end