c--------------------------------------------------------------------- c--------------------------------------------------------------------- subroutine verify(xcr, xce, xci, class, verified) c--------------------------------------------------------------------- c--------------------------------------------------------------------- c--------------------------------------------------------------------- c verification routine c--------------------------------------------------------------------- implicit none include 'mpinpb.h' 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 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