diff --git a/AGENTS.md b/AGENTS.md index 6ffb24a85f8..d663c09e579 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -213,6 +213,7 @@ Regression tests compare OpenMC output against reference data. **Prefer using ex - **PyAPITestHarness**: Standard harness for Python API tests. Compares `inputs_true.dat` (XML hash) and `results_true.dat` (statepoint k-eff and tally values). Requires `model.xml` generation. - **HashedPyAPITestHarness**: Like PyAPITestHarness but hashes the results for compact comparison - **TolerantPyAPITestHarness**: For tests with floating-point non-associativity (e.g., random ray solver with single precision). Uses relative tolerance comparisons. +- **VTKTestHarness**: Like TolerantPyAPITestHarness but keeps one voxel plot and also compares the flux and source arrays of the random ray VTK files - **WeightWindowPyAPITestHarness**: Compares weight window bounds from `weight_windows.h5` - **CollisionTrackTestHarness**: Compares collision track data from `collision_track.h5` against `collision_track_true.h5` - **TestHarness**: Base harness for XML-based tests (no Python model building) diff --git a/tests/regression_tests/random_ray_vtk/__init__.py b/tests/regression_tests/random_ray_vtk/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/regression_tests/random_ray_vtk/eigen_flat/inputs_true.dat b/tests/regression_tests/random_ray_vtk/eigen_flat/inputs_true.dat new file mode 100644 index 00000000000..aa0a03f11e3 --- /dev/null +++ b/tests/regression_tests/random_ray_vtk/eigen_flat/inputs_true.dat @@ -0,0 +1,119 @@ + + + + mgxs.h5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.126 0.126 + 10 10 + -0.63 -0.63 + +3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 + + + 1.26 1.26 + 2 2 + -1.26 -1.26 + +2 2 +2 5 + + + + + + + + + + + + + + + + + + + + + eigenvalue + 100 + 15 + 10 + multi-group + + 100.0 + 20.0 + + + + -1.26 -1.26 -1 1.26 1.26 1 + + + + true + flat + + + + + 2 2 + -1.26 -1.26 + 1.26 1.26 + + + 1 + + + 1e-05 0.0635 10.0 100.0 1000.0 500000.0 1000000.0 20000000.0 + + + 1 2 + flux fission nu-fission + analog + + + + + 4 4 1 + 0.0 0.0 0.0 + 2.52 2.2 1.0 + + + diff --git a/tests/regression_tests/random_ray_vtk/eigen_flat/results_true.dat b/tests/regression_tests/random_ray_vtk/eigen_flat/results_true.dat new file mode 100644 index 00000000000..806a63f8f24 --- /dev/null +++ b/tests/regression_tests/random_ray_vtk/eigen_flat/results_true.dat @@ -0,0 +1,307 @@ +k-combined: +8.385858E-01 7.961547E-03 +tally 1: +9.997473E-01 +1.999080E-01 +3.647422E-01 +2.660938E-02 +8.877096E-01 +1.576175E-01 +6.596313E-01 +8.733599E-02 +9.645251E-02 +1.866649E-03 +2.347461E-01 +1.105687E-02 +5.265210E-01 +5.588004E-02 +1.678151E-02 +5.674313E-05 +4.084283E-02 +3.361112E-04 +7.255342E-01 +1.058319E-01 +2.372143E-02 +1.130924E-04 +5.773322E-02 +6.698897E-04 +2.034631E+00 +8.302433E-01 +2.353203E-02 +1.110302E-04 +5.727296E-02 +6.576904E-04 +5.001687E+00 +5.005258E+00 +7.579105E-03 +1.149177E-05 +1.875397E-02 +7.036183E-05 +2.834778E+00 +1.607414E+00 +3.834521E-02 +2.941615E-04 +1.066553E-01 +2.275769E-03 +1.611723E+00 +5.196217E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.194565E-01 +1.347809E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.714128E-01 +6.575095E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.153101E-01 +1.335408E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.091192E+00 +8.767382E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.453434E+00 +3.968333E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.431845E+00 +1.183113E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.905758E-01 +1.586353E-01 +3.331207E-01 +2.220078E-02 +8.107490E-01 +1.315037E-01 +6.268509E-01 +7.885079E-02 +9.396812E-02 +1.771993E-03 +2.286996E-01 +1.049619E-02 +5.173457E-01 +5.394832E-02 +1.688778E-02 +5.749804E-05 +4.110147E-02 +3.405828E-04 +7.124040E-01 +1.020387E-01 +2.388444E-02 +1.147159E-04 +5.812995E-02 +6.795059E-04 +2.032381E+00 +8.284515E-01 +2.403817E-02 +1.159107E-04 +5.850482E-02 +6.866001E-04 +5.067094E+00 +5.137271E+00 +7.796326E-03 +1.216304E-05 +1.929146E-02 +7.447189E-05 +2.841004E+00 +1.614651E+00 +3.867346E-02 +2.993412E-04 +1.075683E-01 +2.315842E-03 +1.015547E+00 +2.062759E-01 +3.838848E-01 +2.947687E-02 +9.342987E-01 +1.746028E-01 +6.672749E-01 +8.936443E-02 +1.006583E-01 +2.034231E-03 +2.449822E-01 +1.204953E-02 +5.291946E-01 +5.643268E-02 +1.734659E-02 +6.066244E-05 +4.221813E-02 +3.593267E-04 +7.290085E-01 +1.068312E-01 +2.454848E-02 +1.212049E-04 +5.974609E-02 +7.179431E-04 +2.036377E+00 +8.317006E-01 +2.418100E-02 +1.173001E-04 +5.885242E-02 +6.948306E-04 +4.962731E+00 +4.927955E+00 +7.669319E-03 +1.176788E-05 +1.897719E-02 +7.205244E-05 +2.786561E+00 +1.553086E+00 +3.814412E-02 +2.910337E-04 +1.060959E-01 +2.251570E-03 +plot_1.vtk flux_group_0: +6.047841E-01 +5.711319E-01 +4.951928E-01 +4.590153E-01 +5.740759E-01 +5.561564E-01 +4.807656E-01 +4.824558E-01 +5.537308E-01 +5.480924E-01 +5.269392E-01 +5.310346E-01 +5.827065E-01 +5.973359E-01 +5.721900E-01 +5.726148E-01 +plot_1.vtk flux_group_1: +1.038274E+00 +1.001371E+00 +8.932310E-01 +8.592597E-01 +1.014427E+00 +9.978791E-01 +8.974706E-01 +8.882848E-01 +1.005788E+00 +9.980367E-01 +9.658100E-01 +9.644631E-01 +1.033631E+00 +1.037318E+00 +1.016194E+00 +1.013432E+00 +plot_1.vtk flux_group_2: +4.011087E-01 +4.046554E-01 +4.185627E-01 +4.192794E-01 +4.057611E-01 +4.070032E-01 +4.190576E-01 +4.184709E-01 +4.070420E-01 +4.075695E-01 +4.095736E-01 +4.090147E-01 +4.023955E-01 +4.013609E-01 +4.036887E-01 +4.033708E-01 +plot_1.vtk flux_group_3: +1.387600E-01 +1.443710E-01 +1.629735E-01 +1.672593E-01 +1.424673E-01 +1.447999E-01 +1.620244E-01 +1.634913E-01 +1.430857E-01 +1.444860E-01 +1.497037E-01 +1.500004E-01 +1.381710E-01 +1.383021E-01 +1.410722E-01 +1.416524E-01 +plot_1.vtk flux_group_4: +1.030079E-01 +1.056793E-01 +1.141604E-01 +1.170721E-01 +1.040339E-01 +1.052448E-01 +1.130806E-01 +1.144893E-01 +1.038706E-01 +1.045272E-01 +1.077177E-01 +1.080884E-01 +1.021949E-01 +1.021573E-01 +1.042055E-01 +1.046197E-01 +plot_1.vtk flux_group_5: +1.253927E-01 +1.329089E-01 +1.632254E-01 +1.749505E-01 +1.277737E-01 +1.309657E-01 +1.572222E-01 +1.647295E-01 +1.257295E-01 +1.277221E-01 +1.384313E-01 +1.400886E-01 +1.214211E-01 +1.218412E-01 +1.281489E-01 +1.294892E-01 +plot_1.vtk flux_group_6: +1.785199E-01 +2.003826E-01 +3.198731E-01 +3.642592E-01 +1.850330E-01 +1.936853E-01 +2.944633E-01 +3.248951E-01 +1.762112E-01 +1.817605E-01 +2.155434E-01 +2.207258E-01 +1.637172E-01 +1.660025E-01 +1.839652E-01 +1.880769E-01 +plot_1.vtk total_fission_source: +6.118426E-02 +6.643250E-02 +0.000000E+00 +0.000000E+00 +6.266493E-02 +6.472900E-02 +0.000000E+00 +0.000000E+00 +6.045268E-02 +6.181088E-02 +6.998502E-02 +7.127898E-02 +5.747691E-02 +5.810902E-02 +6.241708E-02 +6.343340E-02 diff --git a/tests/regression_tests/random_ray_vtk/eigen_linear/inputs_true.dat b/tests/regression_tests/random_ray_vtk/eigen_linear/inputs_true.dat new file mode 100644 index 00000000000..608ff1bc6cf --- /dev/null +++ b/tests/regression_tests/random_ray_vtk/eigen_linear/inputs_true.dat @@ -0,0 +1,119 @@ + + + + mgxs.h5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.126 0.126 + 10 10 + -0.63 -0.63 + +3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 + + + 1.26 1.26 + 2 2 + -1.26 -1.26 + +2 2 +2 5 + + + + + + + + + + + + + + + + + + + + + eigenvalue + 100 + 15 + 10 + multi-group + + 100.0 + 20.0 + + + + -1.26 -1.26 -1 1.26 1.26 1 + + + + true + linear + + + + + 2 2 + -1.26 -1.26 + 1.26 1.26 + + + 1 + + + 1e-05 0.0635 10.0 100.0 1000.0 500000.0 1000000.0 20000000.0 + + + 1 2 + flux fission nu-fission + analog + + + + + 4 4 1 + 0.0 0.0 0.0 + 2.52 2.2 1.0 + + + diff --git a/tests/regression_tests/random_ray_vtk/eigen_linear/results_true.dat b/tests/regression_tests/random_ray_vtk/eigen_linear/results_true.dat new file mode 100644 index 00000000000..1a20c887823 --- /dev/null +++ b/tests/regression_tests/random_ray_vtk/eigen_linear/results_true.dat @@ -0,0 +1,307 @@ +k-combined: +8.362993E-01 7.089862E-03 +tally 1: +9.982469E-01 +1.993123E-01 +3.629452E-01 +2.634853E-02 +8.833361E-01 +1.560724E-01 +6.610630E-01 +8.773367E-02 +9.648461E-02 +1.868159E-03 +2.348243E-01 +1.106582E-02 +5.286568E-01 +5.635827E-02 +1.683119E-02 +5.710288E-05 +4.096374E-02 +3.382421E-04 +7.281968E-01 +1.066429E-01 +2.376548E-02 +1.135417E-04 +5.784044E-02 +6.725512E-04 +2.042363E+00 +8.367791E-01 +2.359067E-02 +1.116125E-04 +5.741567E-02 +6.611399E-04 +5.024800E+00 +5.052234E+00 +7.615466E-03 +1.160383E-05 +1.884394E-02 +7.104796E-05 +2.849940E+00 +1.624483E+00 +3.866901E-02 +2.990759E-04 +1.075559E-01 +2.313789E-03 +1.615789E+00 +5.222584E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.199362E-01 +1.349369E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.710679E-01 +6.566403E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.146887E-01 +1.333216E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.088724E+00 +8.745693E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.445622E+00 +3.954188E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.424612E+00 +1.176092E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.840636E-01 +1.563342E-01 +3.302232E-01 +2.181821E-02 +8.036972E-01 +1.292376E-01 +6.234645E-01 +7.797306E-02 +9.348579E-02 +1.752971E-03 +2.275257E-01 +1.038352E-02 +5.151708E-01 +5.348019E-02 +1.683613E-02 +5.712506E-05 +4.097576E-02 +3.383735E-04 +7.094735E-01 +1.011788E-01 +2.381337E-02 +1.139961E-04 +5.795699E-02 +6.752424E-04 +2.025112E+00 +8.224179E-01 +2.398002E-02 +1.153308E-04 +5.836330E-02 +6.831651E-04 +5.054745E+00 +5.112307E+00 +7.788949E-03 +1.214049E-05 +1.927321E-02 +7.433384E-05 +2.837465E+00 +1.610789E+00 +3.870822E-02 +2.999072E-04 +1.076649E-01 +2.320221E-03 +1.013940E+00 +2.056244E-01 +3.835611E-01 +2.942756E-02 +9.335110E-01 +1.743106E-01 +6.671972E-01 +8.933817E-02 +1.007569E-01 +2.037810E-03 +2.452222E-01 +1.207073E-02 +5.291824E-01 +5.642729E-02 +1.736757E-02 +6.079292E-05 +4.226920E-02 +3.600996E-04 +7.288726E-01 +1.067939E-01 +2.457229E-02 +1.214184E-04 +5.980403E-02 +7.192073E-04 +2.036124E+00 +8.314782E-01 +2.421030E-02 +1.175686E-04 +5.892374E-02 +6.964209E-04 +4.963612E+00 +4.929709E+00 +7.685178E-03 +1.181662E-05 +1.901644E-02 +7.235086E-05 +2.788017E+00 +1.554738E+00 +3.829404E-02 +2.933400E-04 +1.065129E-01 +2.269413E-03 +plot_1.vtk flux_group_0: +6.135822E-01 +5.766969E-01 +4.929469E-01 +4.575468E-01 +5.427457E-01 +5.450961E-01 +5.014247E-01 +4.775152E-01 +5.878641E-01 +5.531545E-01 +5.303654E-01 +5.529401E-01 +5.777719E-01 +5.962534E-01 +5.582408E-01 +5.788047E-01 +plot_1.vtk flux_group_1: +1.049409E+00 +1.005407E+00 +8.861887E-01 +8.591006E-01 +9.513801E-01 +9.655758E-01 +9.444703E-01 +8.752556E-01 +1.070694E+00 +9.998374E-01 +9.542866E-01 +9.990454E-01 +1.023398E+00 +1.034621E+00 +9.883011E-01 +1.020755E+00 +plot_1.vtk flux_group_2: +4.030177E-01 +4.034727E-01 +4.147695E-01 +4.193796E-01 +3.776413E-01 +3.936524E-01 +4.413809E-01 +4.112300E-01 +4.299764E-01 +4.052762E-01 +3.923634E-01 +4.152441E-01 +3.975131E-01 +3.985133E-01 +3.911380E-01 +4.041501E-01 +plot_1.vtk flux_group_3: +1.391168E-01 +1.434767E-01 +1.614137E-01 +1.673567E-01 +1.319589E-01 +1.406866E-01 +1.706807E-01 +1.604016E-01 +1.502971E-01 +1.432738E-01 +1.405941E-01 +1.505952E-01 +1.363537E-01 +1.368419E-01 +1.363995E-01 +1.413892E-01 +plot_1.vtk flux_group_4: +1.033682E-01 +1.051923E-01 +1.131509E-01 +1.171359E-01 +9.677517E-02 +1.025245E-01 +1.192859E-01 +1.123403E-01 +1.095666E-01 +1.040069E-01 +1.024106E-01 +1.093792E-01 +1.007961E-01 +1.011474E-01 +1.010806E-01 +1.046827E-01 +plot_1.vtk flux_group_5: +1.255157E-01 +1.316047E-01 +1.620948E-01 +1.752836E-01 +1.188916E-01 +1.285926E-01 +1.655152E-01 +1.616158E-01 +1.310923E-01 +1.269314E-01 +1.283831E-01 +1.399191E-01 +1.194216E-01 +1.202196E-01 +1.242112E-01 +1.293034E-01 +plot_1.vtk flux_group_6: +1.781728E-01 +1.966901E-01 +3.191125E-01 +3.668745E-01 +1.736182E-01 +1.926829E-01 +3.083634E-01 +3.181821E-01 +1.800892E-01 +1.803169E-01 +1.909680E-01 +2.149939E-01 +1.604806E-01 +1.631400E-01 +1.777440E-01 +1.866138E-01 +plot_1.vtk total_fission_source: +6.121743E-02 +6.553713E-02 +0.000000E+00 +0.000000E+00 +5.867833E-02 +6.399824E-02 +0.000000E+00 +0.000000E+00 +6.241830E-02 +6.142482E-02 +6.348286E-02 +7.028735E-02 +5.647763E-02 +5.728260E-02 +6.039946E-02 +6.315384E-02 diff --git a/tests/regression_tests/random_ray_vtk/fs_flat/inputs_true.dat b/tests/regression_tests/random_ray_vtk/fs_flat/inputs_true.dat new file mode 100644 index 00000000000..7789abc0e6d --- /dev/null +++ b/tests/regression_tests/random_ray_vtk/fs_flat/inputs_true.dat @@ -0,0 +1,254 @@ + + + + mgxs.h5 + + + + + + + + + + + + + + + + + + + + + 2.5 2.5 2.5 + 12 12 12 + 0.0 0.0 0.0 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 + + + + + + + + + + fixed source + 90 + 15 + 10 + + + 100.0 1.0 + + + universe + 1 + + + multi-group + + 500.0 + 100.0 + + + + 0.0 0.0 0.0 30.0 30.0 30.0 + + + + true + flat + + + + + 1 + + + 2 + + + 3 + + + 3 + flux + tracklength + + + 2 + flux + tracklength + + + 1 + flux + tracklength + + + + + 3 3 3 + 12.75 12.75 12.75 + 24.9 24.9 24.9 + + + diff --git a/tests/regression_tests/random_ray_vtk/fs_flat/results_true.dat b/tests/regression_tests/random_ray_vtk/fs_flat/results_true.dat new file mode 100644 index 00000000000..ea29082605b --- /dev/null +++ b/tests/regression_tests/random_ray_vtk/fs_flat/results_true.dat @@ -0,0 +1,65 @@ +tally 1: +5.364815E-01 +5.764087E-02 +tally 2: +2.635573E-02 +1.416744E-04 +tally 3: +1.885527E-03 +7.311352E-07 +plot_1.vtk flux_group_0: +6.418241E-02 +1.419061E-02 +9.031969E-03 +1.839697E-02 +1.202567E-02 +1.742808E-04 +3.554224E-03 +8.094981E-03 +8.074061E-03 +5.722762E-03 +4.668543E-03 +4.913739E-03 +4.790228E-04 +2.782001E-03 +1.315225E-02 +5.422677E-03 +5.534124E-03 +1.325063E-04 +3.570325E-03 +4.067021E-03 +2.472544E-04 +1.422230E-02 +4.703243E-03 +4.056020E-04 +2.093527E-03 +1.636336E-04 +1.685014E-03 +plot_1.vtk external_source: +3.140000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 diff --git a/tests/regression_tests/random_ray_vtk/fs_linear/inputs_true.dat b/tests/regression_tests/random_ray_vtk/fs_linear/inputs_true.dat new file mode 100644 index 00000000000..bdccc415599 --- /dev/null +++ b/tests/regression_tests/random_ray_vtk/fs_linear/inputs_true.dat @@ -0,0 +1,254 @@ + + + + mgxs.h5 + + + + + + + + + + + + + + + + + + + + + 2.5 2.5 2.5 + 12 12 12 + 0.0 0.0 0.0 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 + + + + + + + + + + fixed source + 90 + 15 + 10 + + + 100.0 1.0 + + + universe + 1 + + + multi-group + + 500.0 + 100.0 + + + + 0.0 0.0 0.0 30.0 30.0 30.0 + + + + true + linear + + + + + 1 + + + 2 + + + 3 + + + 3 + flux + tracklength + + + 2 + flux + tracklength + + + 1 + flux + tracklength + + + + + 3 3 3 + 12.75 12.75 12.75 + 24.9 24.9 24.9 + + + diff --git a/tests/regression_tests/random_ray_vtk/fs_linear/results_true.dat b/tests/regression_tests/random_ray_vtk/fs_linear/results_true.dat new file mode 100644 index 00000000000..df8a6b1253d --- /dev/null +++ b/tests/regression_tests/random_ray_vtk/fs_linear/results_true.dat @@ -0,0 +1,65 @@ +tally 1: +5.422753E-01 +5.888788E-02 +tally 2: +2.666460E-02 +1.448679E-04 +tally 3: +1.874218E-03 +7.240497E-07 +plot_1.vtk flux_group_0: +9.133315E-03 +2.470312E-02 +8.639651E-03 +2.068152E-02 +1.821846E-02 +3.879083E-04 +3.972599E-03 +1.556799E-02 +1.563231E-03 +6.325816E-03 +6.817768E-03 +8.863986E-03 +5.132107E-04 +2.907239E-03 +2.343546E-02 +7.046433E-03 +1.158762E-02 +2.694198E-04 +2.483241E-03 +8.822081E-04 +2.509553E-04 +1.298585E-02 +1.076230E-03 +1.506452E-03 +5.795310E-03 +3.468050E-04 +2.400703E-03 +plot_1.vtk external_source: +3.140000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 diff --git a/tests/regression_tests/random_ray_vtk/test.py b/tests/regression_tests/random_ray_vtk/test.py new file mode 100644 index 00000000000..1b78e1777c7 --- /dev/null +++ b/tests/regression_tests/random_ray_vtk/test.py @@ -0,0 +1,42 @@ +import os + +import openmc +from openmc.examples import random_ray_lattice, random_ray_three_region_cube +from openmc.utility_funcs import change_directory +import pytest + +from tests.testing_harness import VTKTestHarness + + +class MGXSTestHarness(VTKTestHarness): + def _cleanup(self): + super()._cleanup() + f = 'mgxs.h5' + if os.path.exists(f): + os.remove(f) + + +@pytest.mark.parametrize("shape", ["flat", "linear"]) +@pytest.mark.parametrize("run_mode", ["eigen", "fs"]) +def test_random_ray_vtk(run_mode, shape): + with change_directory(f'{run_mode}_{shape}'): + openmc.reset_auto_ids() + plot = openmc.VoxelPlot() + if run_mode == 'eigen': + model = random_ray_lattice() + # Voxel centers off the azimuthal planes and rings of the pins + plot.width = (2.52, 2.2, 1.0) + plot.pixels = (4, 4, 1) + else: + model = random_ray_three_region_cube() + # Voxel centers off the 2.5 cm lattice planes + plot.origin = (12.75, 12.75, 12.75) + plot.width = (24.9, 24.9, 24.9) + plot.pixels = (3, 3, 3) + model.settings.random_ray['source_shape'] = shape + # The linear source keeps its gradients at zero for the first ten + # batches, so put all the active batches after them + model.settings.inactive = 10 + model.settings.batches = 15 + harness = MGXSTestHarness('statepoint.15.h5', model, plot) + harness.main() diff --git a/tests/testing_harness.py b/tests/testing_harness.py index 40c436b55a5..f4717c1c3a4 100644 --- a/tests/testing_harness.py +++ b/tests/testing_harness.py @@ -30,6 +30,21 @@ def colorize(diff): yield line +def read_vtk_arrays(path): + """Read the point data arrays from a legacy binary VTK file.""" + arrays = {} + with open(path, 'rb') as fh: + while line := fh.readline(): + if line.startswith(b'POINT_DATA'): + n = int(line.split()[1]) + elif line.startswith(b'SCALARS'): + _, name, dtype = line.decode().split() + fh.readline() # LOOKUP_TABLE default + dtype = {'float': '>f4', 'int': '>i4'}[dtype] + arrays[name] = np.frombuffer(fh.read(4*n), dtype) + return arrays + + class TestHarness: """General class for running OpenMC regression tests.""" @@ -455,6 +470,40 @@ def _compare_results(self): assert compare, 'Results do not agree' +class VTKTestHarness(TolerantPyAPITestHarness): + """Specialized harness for random ray tests that also check the flux and + source written to VTK files for a voxel plot. + + """ + + def __init__(self, statepoint_name, model, plot): + super().__init__(statepoint_name, model) + # The base class removes all plots, so add back the one being tested + self._model.plots = [plot] + + def _get_results(self): + """Digest the statepoint and VTK files and return as a string.""" + outstr = super()._get_results() + # Adjoint runs also write the forward solve, to a .forward.vtk file + for vtk_file in sorted(glob.glob('*.vtk')): + for name, values in read_vtk_arrays(vtk_file).items(): + # Compare the flux and source fields. The other arrays are + # random colors (FSRs, rank_subdomains), timings + # (measured_load), or not under test (Materials, + # weight_window_lower) + if name.startswith('flux_group_') or name in ( + 'total_fission_source', 'external_source'): + outstr += f'{vtk_file} {name}:\n' + outstr += ''.join(f'{x:12.6E}\n' for x in values) + return outstr + + def _cleanup(self): + """Delete the VTK files.""" + super()._cleanup() + for f in glob.glob('*.vtk'): + os.remove(f) + + class WeightWindowPyAPITestHarness(PyAPITestHarness): def _get_results(self): """Digest info in the weight window file and return as a string.""" diff --git a/tests/unit_tests/test_random_ray_vtk_normalization.py b/tests/unit_tests/test_random_ray_vtk_normalization.py deleted file mode 100644 index b6fa527bdc3..00000000000 --- a/tests/unit_tests/test_random_ray_vtk_normalization.py +++ /dev/null @@ -1,44 +0,0 @@ -import math -import struct - -import openmc -from openmc.examples import random_ray_three_region_cube -from tests.regression_tests import config - - -def _read_vtk_flux(path, group, count): - with open(path, 'rb') as fh: - data = fh.read() - - marker = (f'SCALARS flux_group_{group} float\n' - 'LOOKUP_TABLE default\n').encode() - start = data.index(marker) + len(marker) - end = start + count * struct.calcsize('>f') - return struct.unpack(f'>{count}f', data[start:end]) - - -def test_random_ray_vtk_normalization(run_in_tmpdir): - openmc.reset_auto_ids() - model = random_ray_three_region_cube() - model.settings.random_ray['source_shape'] = 'linear' - model.settings.inactive = 5 - model.settings.batches = 10 - - plot = openmc.VoxelPlot() - plot.filename = 'random_ray_vtk_normalization.h5' - plot.origin = (2.5, 2.5, 2.5) - plot.width = (5.0, 5.0, 5.0) - plot.pixels = (2, 2, 2) - model.plots = [plot] - - model.run(openmc_exec=config['exe']) - - with openmc.StatePoint('statepoint.10.h5') as statepoint: - source_tally = statepoint.get_tally(name='Source Tally') - tally_flux = source_tally.mean.ravel()[0] - - vtk_flux = _read_vtk_flux( - 'random_ray_vtk_normalization.vtk', group=0, count=8) - plot_flux = sum(vtk_flux) / len(vtk_flux) - - assert math.isclose(plot_flux, tally_flux, rel_tol=0.15)