diff --git a/tests/test_diff_density/build_xml.py b/tests/test_diff_density/build_xml.py
deleted file mode 100644
index d5e50c7e82..0000000000
--- a/tests/test_diff_density/build_xml.py
+++ /dev/null
@@ -1,150 +0,0 @@
-import openmc
-
-
-def make_mats(mod_density=0.7420582):
- water = openmc.Material(name='water')
- water.set_density('g/cm3', mod_density)
- water.add_nuclide(openmc.Nuclide('H-1'), 2.0)
- water.add_nuclide(openmc.Nuclide('O-16'), 1.0)
-
- fuel = openmc.Material(name='fuel 2.4%')
- fuel.set_density('g/cm3', 10.29769)
- fuel.add_nuclide(openmc.Nuclide('U-234'), 5.7987e-06)
- fuel.add_nuclide(openmc.Nuclide('U-235'), 7.2175e-04)
- fuel.add_nuclide(openmc.Nuclide('U-238'), 2.2253e-02)
- fuel.add_nuclide(openmc.Nuclide('O-16'), 4.5750e-02)
- fuel.add_nuclide(openmc.Nuclide('O-17'), 9.4222e-05)
-
- zirc4 = openmc.Material(name='zircaloy 4')
- zirc4.set_density('g/cm3', 6.55)
- zirc4.add_nuclide(openmc.Nuclide('O-16'), 3.0743e-04)
- zirc4.add_nuclide(openmc.Nuclide('O-17'), 1.1711e-07)
- # O-18 omitted
- zirc4.add_nuclide(openmc.Nuclide('Cr-50'), 3.2962e-06)
- zirc4.add_nuclide(openmc.Nuclide('Cr-52'), 6.3564e-05)
- zirc4.add_nuclide(openmc.Nuclide('Cr-53'), 7.2076e-06)
- zirc4.add_nuclide(openmc.Nuclide('Cr-54'), 1.7941e-06)
- zirc4.add_nuclide(openmc.Nuclide('Fe-54'), 8.6699e-06)
- zirc4.add_nuclide(openmc.Nuclide('Fe-56'), 1.3610e-04)
- zirc4.add_nuclide(openmc.Nuclide('Fe-57'), 3.1431e-06)
- zirc4.add_nuclide(openmc.Nuclide('Fe-58'), 4.1829e-07)
- zirc4.add_nuclide(openmc.Nuclide('Zr-90'), 2.1827e-02)
- zirc4.add_nuclide(openmc.Nuclide('Zr-91'), 4.7600e-03)
- zirc4.add_nuclide(openmc.Nuclide('Zr-92'), 7.2758e-03)
- zirc4.add_nuclide(openmc.Nuclide('Zr-94'), 7.3734e-03)
- zirc4.add_nuclide(openmc.Nuclide('Zr-96'), 1.1879e-03)
- zirc4.add_nuclide(openmc.Nuclide('Sn-112'), 4.6735e-06)
- zirc4.add_nuclide(openmc.Nuclide('Sn-114'), 3.1799e-06)
- zirc4.add_nuclide(openmc.Nuclide('Sn-115'), 1.6381e-06)
- zirc4.add_nuclide(openmc.Nuclide('Sn-116'), 7.0055e-05)
- zirc4.add_nuclide(openmc.Nuclide('Sn-117'), 3.7003e-05)
- zirc4.add_nuclide(openmc.Nuclide('Sn-118'), 1.1669e-04)
- zirc4.add_nuclide(openmc.Nuclide('Sn-119'), 4.1387e-05)
- zirc4.add_nuclide(openmc.Nuclide('Sn-120'), 1.5697e-04)
- zirc4.add_nuclide(openmc.Nuclide('Sn-122'), 2.2308e-05)
- zirc4.add_nuclide(openmc.Nuclide('Sn-124'), 2.7897e-05)
-
- materials_file = openmc.MaterialsFile()
- materials_file.default_xs = '71c'
- materials_file.add_materials([water, fuel, zirc4])
-
- return (materials_file,
- {'mod':water,
- 'fuel':fuel,
- 'clad':zirc4})
-
-
-def make_geom(mats):
- # Instantiate surfaces.
- rfo = openmc.ZCylinder(x0=0.0, y0=0.0, R=0.39218, name='fuel outer')
- rci = openmc.ZCylinder(x0=0.0, y0=0.0, R=0.40005, name='clad inner')
- rco = openmc.ZCylinder(x0=0.0, y0=0.0, R=0.45720, name='clad outer')
-
- x0 = openmc.XPlane(x0=-0.62992)
- x1 = openmc.XPlane(x0=0.62992)
- y0 = openmc.YPlane(y0=-0.62992)
- y1 = openmc.YPlane(y0=0.62992)
- z0 = openmc.ZPlane(z0=-1.0)
- z1 = openmc.ZPlane(z0=1.0)
- x0.boundary_type = 'reflective'
- x1.boundary_type = 'reflective'
- y0.boundary_type = 'reflective'
- y1.boundary_type = 'reflective'
- z0.boundary_type = 'reflective'
- z1.boundary_type = 'reflective'
-
- # Instantiate cells.
- fuel_c = openmc.Cell(name='fuel')
- fuel_c.add_surface(rfo, halfspace=-1)
- fuel_c.add_surface(z0, halfspace=+1)
- fuel_c.add_surface(z1, halfspace=-1)
-
- gap = openmc.Cell(name='gap')
- gap.add_surface(rci, halfspace=-1)
- gap.add_surface(rfo, halfspace=+1)
- gap.add_surface(z0, halfspace=+1)
- gap.add_surface(z1, halfspace=-1)
-
- clad_c = openmc.Cell(name='clad')
- clad_c.add_surface(rco, halfspace=-1)
- clad_c.add_surface(rci, halfspace=+1)
- clad_c.add_surface(z0, halfspace=+1)
- clad_c.add_surface(z1, halfspace=-1)
-
- mod_c = openmc.Cell(name='moderator')
- mod_c.add_surface(rco, halfspace=+1)
- mod_c.add_surface(x0, halfspace=+1)
- mod_c.add_surface(x1, halfspace=-1)
- mod_c.add_surface(y0, halfspace=+1)
- mod_c.add_surface(y1, halfspace=-1)
- mod_c.add_surface(z0, halfspace=+1)
- mod_c.add_surface(z1, halfspace=-1)
-
- # Add materials to cells.
- fuel_c.fill = mats['fuel']
- gap.fill = 'void'
- clad_c.fill = mats['clad']
- mod_c.fill = mats['mod']
-
- # Instantiate universes.
- u0 = openmc.Universe(universe_id=0)
- u0.add_cells([fuel_c, gap, clad_c, mod_c])
-
- # Write the XML file.
- geometry = openmc.Geometry()
- geometry.root_universe = u0
- geometry_file = openmc.GeometryFile()
- geometry_file.geometry = geometry
-
- return geometry_file
-
-
-def make_settings(**kwargs):
- if 'batches' in kwargs:
- batches = kwargs['batches']
-
- settings_file = openmc.SettingsFile()
- settings_file.batches = kwargs.setdefault('batches', 100)
- settings_file.inactive = kwargs.setdefault('inactive', 10)
- settings_file.particles = kwargs.setdefault('particles', 1000)
- settings_file.set_source_space('box', (-0.6, -0.6, -0.9,
- 0.6, 0.6, 0.9))
- settings_file.entropy_lower_left = (-0.7, -0.7, -1.1)
- settings_file.entropy_upper_right = (0.7, 0.7, 1.1)
- settings_file.entropy_dimension = (10, 10, 10)
- return settings_file
-
-
-def make_inputs(mod_density=0.7420582, **kwargs):
- (mat_file, mats) = make_mats(mod_density)
- mat_file.export_to_xml()
-
- geo_file = make_geom(mats)
- geo_file.export_to_xml()
-
- sets_file = make_settings(**kwargs)
- sets_file.export_to_xml()
-
-
-if __name__ == '__main__':
- make_inputs(inactive=5, batches=10, particles=100)
diff --git a/tests/test_diff_density/geometry.xml b/tests/test_diff_density/geometry.xml
deleted file mode 100644
index e7e5b097ba..0000000000
--- a/tests/test_diff_density/geometry.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
- |
- |
- |
- |
-
-
-
-
-
-
-
-
-
-
diff --git a/tests/test_diff_density/materials.xml b/tests/test_diff_density/materials.xml
deleted file mode 100644
index 955ea92e7d..0000000000
--- a/tests/test_diff_density/materials.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
- 71c
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/tests/test_diff_density/results_true.dat b/tests/test_diff_density/results_true.dat
deleted file mode 100644
index 5e515c4613..0000000000
--- a/tests/test_diff_density/results_true.dat
+++ /dev/null
@@ -1,5 +0,0 @@
-k-combined:
-1.502605E+00 2.273838E-02
-tally 1:
-5.280104E+00
-1.379258E+01
diff --git a/tests/test_diff_density/settings.xml b/tests/test_diff_density/settings.xml
deleted file mode 100644
index a41ba9725b..0000000000
--- a/tests/test_diff_density/settings.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
- 100
- 10
- 5
-
-
-
- -0.6 -0.6 -0.9 0.6 0.6 0.9
-
-
-
- 10 10 10
- -0.7 -0.7 -1.1
- 0.7 0.7 1.1
-
-
diff --git a/tests/test_diff_density/tallies.xml b/tests/test_diff_density/tallies.xml
deleted file mode 100644
index 214f33ab37..0000000000
--- a/tests/test_diff_density/tallies.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
- keff
-
-
-
diff --git a/tests/test_diff_density/test_diff_density.py b/tests/test_diff_density/test_diff_density.py
deleted file mode 100755
index ed6addec45..0000000000
--- a/tests/test_diff_density/test_diff_density.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-import os
-import sys
-sys.path.insert(0, os.pardir)
-from testing_harness import TestHarness
-
-
-if __name__ == '__main__':
- harness = TestHarness('statepoint.10.*', True)
- harness.main()
diff --git a/tests/test_diff_nuclide_density/build_xml.py b/tests/test_diff_nuclide_density/build_xml.py
deleted file mode 100644
index f77a337cb1..0000000000
--- a/tests/test_diff_nuclide_density/build_xml.py
+++ /dev/null
@@ -1,164 +0,0 @@
-import openmc
-
-
-def make_mats(**kwargs):
- water_dict = {
- 'B-10': 8.0042e-06,
- 'B-11': 3.2218e-05,
- 'H-1': 4.9457e-02,
- 'H-2': 7.4196e-06,
- 'O-16': 2.4672e-02,
- 'O-17': 9.3982e-06 + 5.0701e-05}
- water = openmc.Material(name='water')
- water.set_density('sum')
- for nuclide in water_dict:
- water.add_nuclide(nuclide, water_dict[nuclide])
-
- U235_dens = kwargs.setdefault('U235_dens', 5.5814e-04)
- fuel_dict = {
- 'B-10': 8.0042e-06,
- 'U-234': 4.4842e-06,
- 'U-235': U235_dens,
- 'U-238': 2.2407e-02,
- 'O-16': 4.5828e-02,
- 'O-17': 1.7457e-05 + 9.4176e-05}
- fuel = openmc.Material(name='fuel 2.4%')
- fuel.set_density('sum')
- for nuclide in fuel_dict:
- fuel.add_nuclide(nuclide, fuel_dict[nuclide])
-
- zirc4_dict = {
- 'O-16': 3.0743e-04,
- 'O-17': 1.1711e-07 + 6.3176e-07,
- 'Cr-50': 3.2962e-06,
- 'Cr-52': 6.3564e-05,
- 'Cr-53': 7.2076e-06,
- 'Cr-54': 1.7941e-06,
- 'Fe-54': 8.6699e-06,
- 'Fe-56': 1.3610e-04,
- 'Fe-57': 3.1431e-06,
- 'Fe-58': 4.1829e-07,
- 'Zr-90': 2.1827e-02,
- 'Zr-91': 4.7600e-03,
- 'Zr-92': 7.2758e-03,
- 'Zr-94': 7.3734e-03,
- 'Zr-96': 1.1879e-03,
- 'Sn-112': 4.6735e-06,
- 'Sn-114': 3.1799e-06,
- 'Sn-115': 1.6381e-06,
- 'Sn-116': 7.0055e-05,
- 'Sn-117': 3.7003e-05,
- 'Sn-118': 1.1669e-04,
- 'Sn-119': 4.1387e-05,
- 'Sn-120': 1.5697e-04,
- 'Sn-122': 2.2308e-05,
- 'Sn-124': 2.7897e-05}
- zirc4 = openmc.Material(name='zircaloy 4')
- zirc4.set_density('sum')
- for nuclide in zirc4_dict:
- zirc4.add_nuclide(nuclide, zirc4_dict[nuclide])
-
- materials_file = openmc.MaterialsFile()
- materials_file.default_xs = '71c'
- materials_file.add_materials([water, fuel, zirc4])
-
- return (materials_file,
- {'mod':water,
- 'fuel':fuel,
- 'clad':zirc4})
-
-
-def make_geom(mats):
- # Instantiate surfaces.
- rfo = openmc.ZCylinder(x0=0.0, y0=0.0, R=0.39218, name='fuel outer')
- rci = openmc.ZCylinder(x0=0.0, y0=0.0, R=0.40005, name='clad inner')
- rco = openmc.ZCylinder(x0=0.0, y0=0.0, R=0.45720, name='clad outer')
-
- x0 = openmc.XPlane(x0=-0.62992)
- x1 = openmc.XPlane(x0=0.62992)
- y0 = openmc.YPlane(y0=-0.62992)
- y1 = openmc.YPlane(y0=0.62992)
- z0 = openmc.ZPlane(z0=-1.0)
- z1 = openmc.ZPlane(z0=1.0)
- x0.boundary_type = 'reflective'
- x1.boundary_type = 'reflective'
- y0.boundary_type = 'reflective'
- y1.boundary_type = 'reflective'
- z0.boundary_type = 'reflective'
- z1.boundary_type = 'reflective'
-
- # Instantiate cells.
- fuel_c = openmc.Cell(name='fuel')
- fuel_c.add_surface(rfo, halfspace=-1)
- fuel_c.add_surface(z0, halfspace=+1)
- fuel_c.add_surface(z1, halfspace=-1)
-
- gap = openmc.Cell(name='gap')
- gap.add_surface(rci, halfspace=-1)
- gap.add_surface(rfo, halfspace=+1)
- gap.add_surface(z0, halfspace=+1)
- gap.add_surface(z1, halfspace=-1)
-
- clad_c = openmc.Cell(name='clad')
- clad_c.add_surface(rco, halfspace=-1)
- clad_c.add_surface(rci, halfspace=+1)
- clad_c.add_surface(z0, halfspace=+1)
- clad_c.add_surface(z1, halfspace=-1)
-
- mod_c = openmc.Cell(name='moderator')
- mod_c.add_surface(rco, halfspace=+1)
- mod_c.add_surface(x0, halfspace=+1)
- mod_c.add_surface(x1, halfspace=-1)
- mod_c.add_surface(y0, halfspace=+1)
- mod_c.add_surface(y1, halfspace=-1)
- mod_c.add_surface(z0, halfspace=+1)
- mod_c.add_surface(z1, halfspace=-1)
-
- # Add materials to cells.
- fuel_c.fill = mats['fuel']
- gap.fill = 'void'
- clad_c.fill = mats['clad']
- mod_c.fill = mats['mod']
-
- # Instantiate universes.
- u0 = openmc.Universe(universe_id=0)
- u0.add_cells([fuel_c, gap, clad_c, mod_c])
-
- # Write the XML file.
- geometry = openmc.Geometry()
- geometry.root_universe = u0
- geometry_file = openmc.GeometryFile()
- geometry_file.geometry = geometry
-
- return geometry_file
-
-
-def make_settings(**kwargs):
- if 'batches' in kwargs:
- batches = kwargs['batches']
-
- settings_file = openmc.SettingsFile()
- settings_file.batches = kwargs.setdefault('batches', 1610)
- settings_file.inactive = kwargs.setdefault('inactive', 10)
- settings_file.particles = kwargs.setdefault('particles', 1000)
- settings_file.set_source_space('box', (-0.6, -0.6, -0.9,
- 0.6, 0.6, 0.9))
- settings_file.entropy_lower_left = (-0.7, -0.7, -1.1)
- settings_file.entropy_upper_right = (0.7, 0.7, 1.1)
- settings_file.entropy_dimension = (10, 10, 10)
- return settings_file
-
-
-def make_inputs(**kwargs):
- (mat_file, mats) = make_mats(**kwargs)
- mat_file.export_to_xml()
-
- geo_file = make_geom(mats)
- geo_file.export_to_xml()
-
- sets_file = make_settings(**kwargs)
- sets_file.export_to_xml()
-
-
-if __name__ == '__main__':
- make_inputs(inactive=5, batches=10, particles=100)
diff --git a/tests/test_diff_nuclide_density/geometry.xml b/tests/test_diff_nuclide_density/geometry.xml
deleted file mode 100644
index e7e5b097ba..0000000000
--- a/tests/test_diff_nuclide_density/geometry.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
- |
- |
- |
- |
-
-
-
-
-
-
-
-
-
-
diff --git a/tests/test_diff_nuclide_density/materials.xml b/tests/test_diff_nuclide_density/materials.xml
deleted file mode 100644
index 02b55f4523..0000000000
--- a/tests/test_diff_nuclide_density/materials.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
- 71c
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/tests/test_diff_nuclide_density/results_true.dat b/tests/test_diff_nuclide_density/results_true.dat
deleted file mode 100644
index d0c2e3ad15..0000000000
--- a/tests/test_diff_nuclide_density/results_true.dat
+++ /dev/null
@@ -1,5 +0,0 @@
-k-combined:
-1.055198E+00 5.785829E-02
-tally 1:
-2.547151E+03
-1.303757E+06
diff --git a/tests/test_diff_nuclide_density/settings.xml b/tests/test_diff_nuclide_density/settings.xml
deleted file mode 100644
index a41ba9725b..0000000000
--- a/tests/test_diff_nuclide_density/settings.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
- 100
- 10
- 5
-
-
-
- -0.6 -0.6 -0.9 0.6 0.6 0.9
-
-
-
- 10 10 10
- -0.7 -0.7 -1.1
- 0.7 0.7 1.1
-
-
diff --git a/tests/test_diff_nuclide_density/tallies.xml b/tests/test_diff_nuclide_density/tallies.xml
deleted file mode 100644
index 321b2c9b0e..0000000000
--- a/tests/test_diff_nuclide_density/tallies.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
- keff
-
-
-
-
diff --git a/tests/test_diff_nuclide_density/test_diff_nuclide_density.py b/tests/test_diff_nuclide_density/test_diff_nuclide_density.py
deleted file mode 100755
index ed6addec45..0000000000
--- a/tests/test_diff_nuclide_density/test_diff_nuclide_density.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-import os
-import sys
-sys.path.insert(0, os.pardir)
-from testing_harness import TestHarness
-
-
-if __name__ == '__main__':
- harness = TestHarness('statepoint.10.*', True)
- harness.main()
diff --git a/tests/test_diff_tally/inputs_true.dat b/tests/test_diff_tally/inputs_true.dat
new file mode 100644
index 0000000000..22656a4838
--- /dev/null
+++ b/tests/test_diff_tally/inputs_true.dat
@@ -0,0 +1 @@
+cb132b2211831bf333bc9be0b10d092ad3bbe9a188743cf4c430ae97037987763b268997757a0602c164d8c2deb3eb9843590d860ba5a4858092a9ad0b8adeba
\ No newline at end of file
diff --git a/tests/test_diff_tally/results_true.dat b/tests/test_diff_tally/results_true.dat
new file mode 100644
index 0000000000..8b33b82935
--- /dev/null
+++ b/tests/test_diff_tally/results_true.dat
@@ -0,0 +1,97 @@
+d_material,d_nuclide,d_variable,score,mean,std. dev.
+3,,density,flux,-5.12e+00,8.94e-01
+3,,density,flux,-1.07e+01,8.84e-01
+1,,density,flux,-3.14e-01,4.48e-02
+1,,density,flux,-2.73e-01,8.51e-02
+1,O-16.71c,nuclide_density,flux,-3.58e+00,7.77e+00
+1,O-16.71c,nuclide_density,flux,-7.64e+00,1.09e+01
+1,U-235.71c,nuclide_density,flux,-1.19e+03,1.18e+02
+1,U-235.71c,nuclide_density,flux,-1.25e+03,1.63e+02
+3,,density,total,-1.92e+00,4.49e-01
+3,,density,absorption,5.89e-02,6.68e-02
+3,,density,fission,8.55e-02,3.33e-02
+3,,density,nu-fission,2.20e-01,8.60e-02
+3,,density,total,4.49e-02,3.15e-02
+3,,density,absorption,6.66e-02,2.74e-02
+3,,density,fission,6.12e-02,2.24e-02
+3,,density,nu-fission,1.49e-01,5.45e-02
+3,,density,total,7.72e+00,9.45e-01
+3,,density,absorption,1.26e-01,2.24e-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.79e-01,1.14e-02
+1,,density,absorption,1.27e-02,4.48e-03
+1,,density,fission,1.88e-03,1.96e-03
+1,,density,nu-fission,5.22e-03,5.08e-03
+1,,density,total,5.43e-03,1.67e-03
+1,,density,absorption,1.29e-03,1.64e-03
+1,,density,fission,3.13e-05,1.30e-03
+1,,density,nu-fission,1.12e-04,3.17e-03
+1,,density,total,-2.91e-01,9.67e-02
+1,,density,absorption,-5.40e-03,1.29e-03
+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,O-16.71c,nuclide_density,total,4.33e+01,3.24e+00
+1,O-16.71c,nuclide_density,absorption,6.59e-01,5.83e-01
+1,O-16.71c,nuclide_density,fission,4.31e-01,1.26e-01
+1,O-16.71c,nuclide_density,nu-fission,1.08e+00,3.25e-01
+1,O-16.71c,nuclide_density,total,4.52e-01,1.50e-01
+1,O-16.71c,nuclide_density,absorption,4.58e-01,1.12e-01
+1,O-16.71c,nuclide_density,fission,3.54e-01,9.55e-02
+1,O-16.71c,nuclide_density,nu-fission,8.62e-01,2.33e-01
+1,O-16.71c,nuclide_density,total,-4.58e-01,1.17e+01
+1,O-16.71c,nuclide_density,absorption,1.23e-01,1.75e-01
+1,O-16.71c,nuclide_density,fission,0.00e+00,0.00e+00
+1,O-16.71c,nuclide_density,nu-fission,0.00e+00,0.00e+00
+1,O-16.71c,nuclide_density,total,0.00e+00,0.00e+00
+1,O-16.71c,nuclide_density,absorption,0.00e+00,0.00e+00
+1,O-16.71c,nuclide_density,fission,0.00e+00,0.00e+00
+1,O-16.71c,nuclide_density,nu-fission,0.00e+00,0.00e+00
+1,U-235.71c,nuclide_density,total,-2.41e+02,5.64e+01
+1,U-235.71c,nuclide_density,absorption,1.11e+02,1.40e+01
+1,U-235.71c,nuclide_density,fission,1.79e+02,9.60e+00
+1,U-235.71c,nuclide_density,nu-fission,3.97e+02,2.44e+01
+1,U-235.71c,nuclide_density,total,4.56e+02,1.09e+01
+1,U-235.71c,nuclide_density,absorption,3.45e+02,1.09e+01
+1,U-235.71c,nuclide_density,fission,2.70e+02,8.42e+00
+1,U-235.71c,nuclide_density,nu-fission,6.59e+02,2.05e+01
+1,U-235.71c,nuclide_density,total,-2.29e+03,2.59e+02
+1,U-235.71c,nuclide_density,absorption,-5.31e+01,5.44e+00
+1,U-235.71c,nuclide_density,fission,0.00e+00,0.00e+00
+1,U-235.71c,nuclide_density,nu-fission,0.00e+00,0.00e+00
+1,U-235.71c,nuclide_density,total,0.00e+00,0.00e+00
+1,U-235.71c,nuclide_density,absorption,0.00e+00,0.00e+00
+1,U-235.71c,nuclide_density,fission,0.00e+00,0.00e+00
+1,U-235.71c,nuclide_density,nu-fission,0.00e+00,0.00e+00
+3,,density,absorption,-3.29e-02,8.34e-02
+3,,density,absorption,1.21e-01,4.42e-02
+1,,density,absorption,1.51e-02,2.89e-03
+1,,density,absorption,-4.61e-03,2.30e-03
+1,O-16.71c,nuclide_density,absorption,2.87e-01,5.33e-01
+1,O-16.71c,nuclide_density,absorption,2.86e-01,3.59e-01
+1,U-235.71c,nuclide_density,absorption,1.14e+02,1.15e+01
+1,U-235.71c,nuclide_density,absorption,-5.10e+01,4.74e+00
+3,,density,nu-fission,4.24e-04,6.13e-02
+3,,density,nu-fission,2.40e-02,6.37e-02
+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.85e-02,2.57e-03
+1,,density,nu-fission,-6.16e-02,5.51e-03
+1,,density,nu-fission,0.00e+00,0.00e+00
+1,,density,nu-fission,0.00e+00,0.00e+00
+1,O-16.71c,nuclide_density,nu-fission,1.70e-01,2.18e-01
+1,O-16.71c,nuclide_density,nu-fission,6.30e-01,5.11e-01
+1,O-16.71c,nuclide_density,nu-fission,0.00e+00,0.00e+00
+1,O-16.71c,nuclide_density,nu-fission,0.00e+00,0.00e+00
+1,U-235.71c,nuclide_density,nu-fission,-2.00e+02,1.68e+01
+1,U-235.71c,nuclide_density,nu-fission,-4.76e+02,1.41e+01
+1,U-235.71c,nuclide_density,nu-fission,0.00e+00,0.00e+00
+1,U-235.71c,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
new file mode 100644
index 0000000000..2bd0f704df
--- /dev/null
+++ b/tests/test_diff_tally/test_diff_tally.py
@@ -0,0 +1,123 @@
+#!/usr/bin/env python
+
+import glob
+import os
+import pandas as pd
+try:
+ from StringIO import StringIO
+except:
+ from io import StringIO
+import sys
+sys.path.insert(0, os.pardir)
+from testing_harness import PyAPITestHarness
+from openmc import Filter, Mesh, Tally, TalliesFile, Summary, StatePoint
+#from openmc.statepoint import StatePoint
+from openmc.source import Source
+from openmc.stats import Box
+
+class DiffTallyTestHarness(PyAPITestHarness):
+ def _build_inputs(self):
+ # Build default materials/geometry
+ self._input_set.build_default_materials_and_geometry()
+
+ # Set settings explicitly
+ self._input_set.settings.batches = 5
+ self._input_set.settings.inactive = 0
+ self._input_set.settings.particles = 400
+ self._input_set.settings.source = Source(space=Box(
+ [-160, -160, -183], [160, 160, 183]))
+ self._input_set.settings.output = {'summary':True}
+
+ self._input_set.tallies = TalliesFile()
+
+ filt_mats = Filter(type='material', bins=(1, 3))
+ filt_eout = Filter(type='energyout', bins=(0.0, 1.0, 20.0))
+
+ def add_derivs(tally_list):
+ assert len(tally_list) == 4
+ # We want density derivatives for both water and fuel to get
+ # coverage for both fissile and non-fissile materials.
+ tally_list[0].diff_variable = 'density'
+ tally_list[0].diff_material = 3
+ tally_list[1].diff_variable = 'density'
+ tally_list[1].diff_material = 1
+
+ # O-16 is a good nuclide to test against because it is present
+ # in both water and fuel. Some routines need to recognize that they
+ # have the perturbed nuclide but not the perturbed material.
+ tally_list[2].diff_variable = 'nuclide_density'
+ tally_list[2].diff_material = 1
+ tally_list[2].diff_nuclide = 'O-16'
+
+ # A fissile nuclide, just for good measure.
+ tally_list[3].diff_variable = 'nuclide_density'
+ tally_list[3].diff_material = 1
+ tally_list[3].diff_nuclide = 'U-235'
+
+ # Cover the flux score.
+ tallies = [Tally() for i in range(4)]
+ for t in tallies: t.add_score('flux')
+ for t in tallies: t.add_filter(filt_mats)
+ add_derivs(tallies)
+ for t in tallies: self._input_set.tallies.add_tally(t)
+
+ # Cover supported scores with a collision estimator.
+ tallies = [Tally() for i in range(4)]
+ for t in tallies: t.add_score('total')
+ for t in tallies: t.add_score('absorption')
+ for t in tallies: t.add_score('fission')
+ for t in tallies: t.add_score('nu-fission')
+ for t in tallies: t.add_filter(filt_mats)
+ for t in tallies: t.add_nuclide('total')
+ for t in tallies: t.add_nuclide('U-235')
+ add_derivs(tallies)
+ for t in tallies: self._input_set.tallies.add_tally(t)
+
+ # Cover an analog estimator.
+ tallies = [Tally() for i in range(4)]
+ for t in tallies: t.add_score('absorption')
+ for t in tallies: t.add_filter(filt_mats)
+ for t in tallies: t.estimator = 'analog'
+ add_derivs(tallies)
+ for t in tallies: self._input_set.tallies.add_tally(t)
+
+ # And the special fission with energyout filter.
+ tallies = [Tally() for i in range(4)]
+ for t in tallies: t.add_score('nu-fission')
+ for t in tallies: t.add_filter(filt_mats)
+ for t in tallies: t.add_filter(filt_eout)
+ add_derivs(tallies)
+ for t in tallies: self._input_set.tallies.add_tally(t)
+
+ self._input_set.export()
+
+ def _get_results(self):
+ #return super(DiffTallyTestHarness, self)._get_results(hash_output=True)
+ # Read the statepoint and summary files.
+ statepoint = glob.glob(os.path.join(os.getcwd(), self._sp_name))[0]
+ sp = StatePoint(statepoint)
+ su = Summary('summary.h5')
+ sp.link_with_summary(su)
+
+ # Extract the tally data as a Pandas DataFrame.
+ df = pd.DataFrame()
+ for t in sp.tallies.values():
+ df = df.append(t.get_pandas_dataframe(), ignore_index=True)
+
+ # Extract the relevant data as a CSV string.
+ out = StringIO()
+ cols = ('d_material', 'd_nuclide', 'd_variable', 'score', 'mean',
+ 'std. dev.')
+ df.to_csv(out, columns=cols, index=False, float_format='%.2e')
+
+ return out.getvalue()
+
+ def _cleanup(self):
+ super(DiffTallyTestHarness, self)._cleanup()
+ f = os.path.join(os.getcwd(), 'tallies.xml')
+ if os.path.exists(f): os.remove(f)
+
+
+if __name__ == '__main__':
+ harness = DiffTallyTestHarness('statepoint.5.*', True)
+ harness.main()