From dc384f5c14a9af1abb72077a9028eeb5c246a1ce Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Wed, 19 Oct 2016 15:26:43 -0400 Subject: [PATCH] Add temperature deriv test; total nuclide err msg --- src/input_xml.F90 | 17 +++ tests/test_diff_tally/inputs_true.dat | 2 +- tests/test_diff_tally/results_true.dat | 172 ++++++++++++++--------- tests/test_diff_tally/test_diff_tally.py | 39 +++-- 4 files changed, 148 insertions(+), 82 deletions(-) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 1fd11a889f..bb6024ea7c 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -3876,6 +3876,23 @@ contains // trim(to_str(t % id))) end if end do + + if (tally_derivs(t % deriv) % variable == DIFF_NUCLIDE_DENSITY & + .or. tally_derivs(t % deriv) % variable == DIFF_TEMPERATURE) then + if (any(t % nuclide_bins == -1)) then + if (t % find_filter(FILTER_ENERGYOUT) > 0) then + call fatal_error("Error on tally " // trim(to_str(t % id)) & + // ": Cannot use a 'nuclide_density' or 'temperature' & + &derivative on a tally with an outgoing energy filter and & + &'total' nuclide rate. Instead, tally each nuclide in the & + &material individually.") + ! Note that diff tallies with these characteristics would work + ! correctly if no tally events occur in the perturbed material + ! (e.g. pertrubing moderator but only tallying fuel), but this + ! case would be hard to check for by only reading inputs. + end if + end if + end if end if ! If settings.xml trigger is turned on, create tally triggers diff --git a/tests/test_diff_tally/inputs_true.dat b/tests/test_diff_tally/inputs_true.dat index e7215379f7..0a23a2c0ba 100644 --- a/tests/test_diff_tally/inputs_true.dat +++ b/tests/test_diff_tally/inputs_true.dat @@ -1 +1 @@ -f6b3b603cd6ad74c25baf76b57fa222ca395763d0b0317558de8e80ec030af52cf8e266e921b7e36f147e25bcd9cd67cabafd906284a6053b4ca473f4e71252c \ No newline at end of file +7a33d6ea1df959736bf496316b31126523d0578b09a3e6c3440b9cb900e797f21009337e55bbaf90e24edfa6666c838615bc17be163eb062c85a7816fcaee4f9 \ No newline at end of file diff --git a/tests/test_diff_tally/results_true.dat b/tests/test_diff_tally/results_true.dat index b4cef47129..2380050a53 100644 --- a/tests/test_diff_tally/results_true.dat +++ b/tests/test_diff_tally/results_true.dat @@ -1,97 +1,129 @@ d_material,d_nuclide,d_variable,score,mean,std. dev. -3,,density,flux,-5.53e+00,8.45e-01 -3,,density,flux,-9.96e+00,1.01e+00 -1,,density,flux,-2.97e-01,5.83e-02 -1,,density,flux,-3.05e-01,7.69e-02 -1,O16,nuclide_density,flux,-1.10e+01,9.63e+00 -1,O16,nuclide_density,flux,-8.07e+00,7.78e+00 -1,U235,nuclide_density,flux,-1.06e+03,1.30e+02 -1,U235,nuclide_density,flux,-9.28e+02,9.72e+01 -3,,density,total,-2.21e+00,4.04e-01 -3,,density,absorption,6.24e-03,1.37e-01 -3,,density,fission,5.89e-02,7.93e-02 -3,,density,nu-fission,1.47e-01,2.06e-01 -3,,density,total,3.36e-02,6.32e-02 -3,,density,absorption,5.67e-02,6.01e-02 -3,,density,fission,5.46e-02,5.03e-02 -3,,density,nu-fission,1.33e-01,1.23e-01 -3,,density,total,8.38e+00,1.33e+00 -3,,density,absorption,1.30e-01,1.97e-02 +1,,density,nu-fission,1.12e-02,5.75e-03 +1,,density,nu-fission,6.27e-03,1.86e-03 +1,,density,nu-fission,1.90e-02,9.78e-03 +1,,density,nu-fission,1.22e-02,5.45e-03 +1,,density,nu-fission,0.00e+00,0.00e+00 +1,,density,nu-fission,0.00e+00,0.00e+00 +1,,density,nu-fission,0.00e+00,0.00e+00 +1,,density,nu-fission,0.00e+00,0.00e+00 +1,O16,nuclide_density,nu-fission,3.71e-01,1.76e-01 +1,O16,nuclide_density,nu-fission,4.32e-01,7.01e-01 +1,O16,nuclide_density,nu-fission,0.00e+00,0.00e+00 +1,O16,nuclide_density,nu-fission,0.00e+00,0.00e+00 +1,U235,nuclide_density,nu-fission,2.03e+02,2.66e+01 +1,U235,nuclide_density,nu-fission,5.14e+02,1.31e+01 +1,U235,nuclide_density,nu-fission,0.00e+00,0.00e+00 +1,U235,nuclide_density,nu-fission,0.00e+00,0.00e+00 +1,,temperature,nu-fission,1.26e-05,1.05e-05 +1,,temperature,nu-fission,8.20e-06,7.06e-06 +1,,temperature,nu-fission,0.00e+00,0.00e+00 +1,,temperature,nu-fission,0.00e+00,0.00e+00 +3,,density,flux,-5.93e+00,8.02e-01 +3,,density,flux,-1.17e+01,1.10e+00 +1,,density,flux,-1.93e-01,5.38e-02 +1,,density,flux,-1.87e-01,6.13e-02 +1,O16,nuclide_density,flux,3.42e+00,6.84e+00 +1,O16,nuclide_density,flux,-4.63e+00,9.64e+00 +1,U235,nuclide_density,flux,-1.06e+03,1.25e+02 +1,U235,nuclide_density,flux,-9.00e+02,7.41e+01 +1,,temperature,flux,4.38e-05,1.90e-04 +1,,temperature,flux,1.99e-04,1.73e-04 +3,,density,total,-2.51e+00,3.83e-01 +3,,density,absorption,-7.85e-02,1.16e-01 +3,,density,fission,4.85e-02,6.57e-02 +3,,density,nu-fission,1.22e-01,1.73e-01 +3,,density,total,2.01e-02,4.42e-02 +3,,density,absorption,4.49e-02,4.26e-02 +3,,density,fission,4.30e-02,3.67e-02 +3,,density,nu-fission,1.05e-01,8.95e-02 +3,,density,total,7.29e+00,1.19e+00 +3,,density,absorption,1.39e-01,2.85e-02 3,,density,fission,0.00e+00,0.00e+00 3,,density,nu-fission,0.00e+00,0.00e+00 3,,density,total,0.00e+00,0.00e+00 3,,density,absorption,0.00e+00,0.00e+00 3,,density,fission,0.00e+00,0.00e+00 3,,density,nu-fission,0.00e+00,0.00e+00 -1,,density,total,3.84e-01,4.09e-02 -1,,density,absorption,1.77e-02,9.66e-03 -1,,density,fission,2.95e-03,4.95e-03 -1,,density,nu-fission,8.23e-03,1.30e-02 -1,,density,total,5.44e-03,4.18e-03 -1,,density,absorption,1.29e-03,3.79e-03 -1,,density,fission,2.91e-04,3.01e-03 -1,,density,nu-fission,7.52e-04,7.35e-03 -1,,density,total,-3.59e-01,8.82e-02 -1,,density,absorption,-7.04e-03,1.23e-03 +1,,density,total,4.53e-01,3.58e-02 +1,,density,absorption,3.35e-02,7.74e-03 +1,,density,fission,1.09e-02,3.66e-03 +1,,density,nu-fission,2.93e-02,9.64e-03 +1,,density,total,1.18e-02,2.90e-03 +1,,density,absorption,6.94e-03,2.59e-03 +1,,density,fission,4.63e-03,2.07e-03 +1,,density,nu-fission,1.13e-02,5.04e-03 +1,,density,total,-2.03e-01,5.89e-02 +1,,density,absorption,-4.86e-03,6.33e-04 1,,density,fission,0.00e+00,0.00e+00 1,,density,nu-fission,0.00e+00,0.00e+00 1,,density,total,0.00e+00,0.00e+00 1,,density,absorption,0.00e+00,0.00e+00 1,,density,fission,0.00e+00,0.00e+00 1,,density,nu-fission,0.00e+00,0.00e+00 -1,O16,nuclide_density,total,3.94e+01,5.38e+00 -1,O16,nuclide_density,absorption,9.23e-02,8.39e-01 -1,O16,nuclide_density,fission,-1.87e-01,4.17e-01 -1,O16,nuclide_density,nu-fission,-5.04e-01,1.09e+00 -1,O16,nuclide_density,total,-1.54e-01,3.77e-01 -1,O16,nuclide_density,absorption,-1.13e-01,3.27e-01 -1,O16,nuclide_density,fission,-8.48e-02,2.51e-01 -1,O16,nuclide_density,nu-fission,-2.07e-01,6.11e-01 -1,O16,nuclide_density,total,-5.63e+00,9.03e+00 -1,O16,nuclide_density,absorption,-1.65e-01,1.27e-01 +1,O16,nuclide_density,total,4.71e+01,3.78e+00 +1,O16,nuclide_density,absorption,9.64e-01,7.50e-01 +1,O16,nuclide_density,fission,3.09e-01,2.99e-01 +1,O16,nuclide_density,nu-fission,8.08e-01,7.82e-01 +1,O16,nuclide_density,total,3.23e-01,2.77e-01 +1,O16,nuclide_density,absorption,2.86e-01,2.44e-01 +1,O16,nuclide_density,fission,1.74e-01,1.89e-01 +1,O16,nuclide_density,nu-fission,4.24e-01,4.61e-01 +1,O16,nuclide_density,total,1.01e+00,1.06e+01 +1,O16,nuclide_density,absorption,6.41e-02,1.52e-01 1,O16,nuclide_density,fission,0.00e+00,0.00e+00 1,O16,nuclide_density,nu-fission,0.00e+00,0.00e+00 1,O16,nuclide_density,total,0.00e+00,0.00e+00 1,O16,nuclide_density,absorption,0.00e+00,0.00e+00 1,O16,nuclide_density,fission,0.00e+00,0.00e+00 1,O16,nuclide_density,nu-fission,0.00e+00,0.00e+00 -1,U235,nuclide_density,total,-1.95e+02,6.93e+01 -1,U235,nuclide_density,absorption,1.06e+02,2.33e+01 -1,U235,nuclide_density,fission,1.74e+02,1.67e+01 -1,U235,nuclide_density,nu-fission,3.84e+02,4.28e+01 -1,U235,nuclide_density,total,4.48e+02,1.64e+01 -1,U235,nuclide_density,absorption,3.37e+02,1.47e+01 -1,U235,nuclide_density,fission,2.66e+02,1.24e+01 -1,U235,nuclide_density,nu-fission,6.49e+02,3.02e+01 -1,U235,nuclide_density,total,-2.06e+03,2.21e+02 -1,U235,nuclide_density,absorption,-5.23e+01,6.36e+00 +1,U235,nuclide_density,total,-1.76e+02,5.81e+01 +1,U235,nuclide_density,absorption,1.33e+02,1.49e+01 +1,U235,nuclide_density,fission,1.97e+02,9.17e+00 +1,U235,nuclide_density,nu-fission,4.39e+02,2.36e+01 +1,U235,nuclide_density,total,4.79e+02,1.03e+01 +1,U235,nuclide_density,absorption,3.65e+02,8.53e+00 +1,U235,nuclide_density,fission,2.89e+02,6.85e+00 +1,U235,nuclide_density,nu-fission,7.05e+02,1.67e+01 +1,U235,nuclide_density,total,-1.74e+03,1.12e+02 +1,U235,nuclide_density,absorption,-4.22e+01,2.70e+00 1,U235,nuclide_density,fission,0.00e+00,0.00e+00 1,U235,nuclide_density,nu-fission,0.00e+00,0.00e+00 1,U235,nuclide_density,total,0.00e+00,0.00e+00 1,U235,nuclide_density,absorption,0.00e+00,0.00e+00 1,U235,nuclide_density,fission,0.00e+00,0.00e+00 1,U235,nuclide_density,nu-fission,0.00e+00,0.00e+00 -3,,density,absorption,-7.86e-03,9.22e-02 -3,,density,absorption,1.51e-01,2.10e-02 -1,,density,absorption,2.12e-02,6.60e-03 -1,,density,absorption,-4.94e-03,8.88e-04 -1,O16,nuclide_density,absorption,3.51e-01,6.90e-01 -1,O16,nuclide_density,absorption,1.74e-02,7.71e-02 -1,U235,nuclide_density,absorption,9.98e+01,2.40e+01 -1,U235,nuclide_density,absorption,-4.39e+01,7.07e+00 -3,,density,nu-fission,2.64e-02,7.36e-02 -3,,density,nu-fission,7.70e-02,1.28e-01 +1,,temperature,total,1.91e-04,1.38e-04 +1,,temperature,absorption,7.60e-05,4.02e-05 +1,,temperature,fission,1.60e-05,1.40e-05 +1,,temperature,nu-fission,4.22e-05,3.60e-05 +1,,temperature,total,1.12e-05,1.37e-05 +1,,temperature,absorption,1.08e-05,1.26e-05 +1,,temperature,fission,8.52e-06,1.02e-05 +1,,temperature,nu-fission,2.08e-05,2.50e-05 +1,,temperature,total,3.14e-04,2.80e-04 +1,,temperature,absorption,5.46e-06,6.04e-06 +1,,temperature,fission,0.00e+00,0.00e+00 +1,,temperature,nu-fission,0.00e+00,0.00e+00 +1,,temperature,total,0.00e+00,0.00e+00 +1,,temperature,absorption,0.00e+00,0.00e+00 +1,,temperature,fission,0.00e+00,0.00e+00 +1,,temperature,nu-fission,0.00e+00,0.00e+00 +3,,density,absorption,-9.85e-02,8.35e-02 +3,,density,absorption,9.34e-02,3.83e-02 +1,,density,absorption,2.98e-02,6.51e-03 +1,,density,absorption,-2.83e-03,1.44e-03 +1,O16,nuclide_density,absorption,1.34e+00,4.23e-01 +1,O16,nuclide_density,absorption,5.15e-02,8.53e-02 +1,U235,nuclide_density,absorption,1.25e+02,2.55e+01 +1,U235,nuclide_density,absorption,-4.14e+01,4.30e+00 +1,,temperature,absorption,4.95e-05,2.86e-05 +1,,temperature,absorption,-9.35e-07,6.79e-06 +3,,density,nu-fission,4.60e-02,5.96e-02 +3,,density,nu-fission,3.87e-02,3.71e-02 +3,,density,nu-fission,8.85e-02,9.69e-02 +3,,density,nu-fission,4.16e-02,5.47e-02 +3,,density,nu-fission,0.00e+00,0.00e+00 +3,,density,nu-fission,0.00e+00,0.00e+00 3,,density,nu-fission,0.00e+00,0.00e+00 3,,density,nu-fission,0.00e+00,0.00e+00 -1,,density,nu-fission,2.29e-03,4.63e-03 -1,,density,nu-fission,1.33e-02,1.06e-02 -1,,density,nu-fission,0.00e+00,0.00e+00 -1,,density,nu-fission,0.00e+00,0.00e+00 -1,O16,nuclide_density,nu-fission,-9.08e-02,5.90e-01 -1,O16,nuclide_density,nu-fission,1.48e-01,1.07e+00 -1,O16,nuclide_density,nu-fission,0.00e+00,0.00e+00 -1,O16,nuclide_density,nu-fission,0.00e+00,0.00e+00 -1,U235,nuclide_density,nu-fission,9.91e+01,2.80e+01 -1,U235,nuclide_density,nu-fission,2.64e+02,2.71e+01 -1,U235,nuclide_density,nu-fission,0.00e+00,0.00e+00 -1,U235,nuclide_density,nu-fission,0.00e+00,0.00e+00 diff --git a/tests/test_diff_tally/test_diff_tally.py b/tests/test_diff_tally/test_diff_tally.py index d52d499b17..ce5b4a68ef 100644 --- a/tests/test_diff_tally/test_diff_tally.py +++ b/tests/test_diff_tally/test_diff_tally.py @@ -25,7 +25,7 @@ class DiffTallyTestHarness(PyAPITestHarness): self._input_set.settings.particles = 400 self._input_set.settings.source = openmc.Source(space=openmc.stats.Box( [-160, -160, -183], [160, 160, 183])) - self._input_set.settings.output = {'summary': True} + self._input_set.settings.temperature['multipole'] = True self._input_set.tallies = openmc.Tallies() @@ -55,18 +55,23 @@ class DiffTallyTestHarness(PyAPITestHarness): d4.material = 1 d4.nuclide = 'U235' - derivs = [d1, d2, d3, d4] + # Temperature derivatives. + d5 = openmc.TallyDerivative(derivative_id=5) + d5.variable = 'temperature' + d5.material = 1 + + derivs = [d1, d2, d3, d4, d5] # Cover the flux score. - for i in range(4): + for i in range(5): t = openmc.Tally() t.add_score('flux') t.add_filter(filt_mats) t.derivative = derivs[i] - self._input_set.tallies.add_tally(t) + self._input_set.tallies.append(t) # Cover supported scores with a collision estimator. - for i in range(4): + for i in range(5): t = openmc.Tally() t.add_score('total') t.add_score('absorption') @@ -76,25 +81,37 @@ class DiffTallyTestHarness(PyAPITestHarness): t.add_nuclide('total') t.add_nuclide('U235') t.derivative = derivs[i] - self._input_set.tallies.add_tally(t) + self._input_set.tallies.append(t) # Cover an analog estimator. - for i in range(4): + for i in range(5): t = openmc.Tally() t.add_score('absorption') t.add_filter(filt_mats) t.estimator = 'analog' t.derivative = derivs[i] - self._input_set.tallies.add_tally(t) + self._input_set.tallies.append(t) - # And the special fission with energyout filter. - for i in range(4): + # Energyout filter and total nuclide for the density derivatives. + for i in range(2): t = openmc.Tally() t.add_score('nu-fission') t.add_filter(filt_mats) t.add_filter(filt_eout) + t.add_nuclide('total') + t.add_nuclide('U235') t.derivative = derivs[i] - self._input_set.tallies.add_tally(t) + self._input_set.tallies.append(t) + + # Energyout filter without total nuclide for other derivatives. + for i in range(2, 5): + t = openmc.Tally() + t.add_score('nu-fission') + t.add_filter(filt_mats) + t.add_filter(filt_eout) + t.add_nuclide('U235') + t.derivative = derivs[i] + self._input_set.tallies.append(t) self._input_set.export()