1import os
2
3import openmc
4import openmc.model
5import pytest
6
7from tests.testing_harness import TestHarness, PyAPITestHarness
8
9
10def make_model():
11    model = openmc.model.Model()
12
13    # Materials
14    moderator = openmc.Material(material_id=1)
15    moderator.set_density('g/cc', 1.0)
16    moderator.add_nuclide('H1', 2.0)
17    moderator.add_nuclide('O16', 1.0)
18    moderator.add_s_alpha_beta('c_H_in_H2O')
19
20    dense_fuel = openmc.Material(material_id=2)
21    dense_fuel.set_density('g/cc', 4.5)
22    dense_fuel.add_nuclide('U235', 1.0)
23
24    model.materials += [moderator, dense_fuel]
25
26    # Geometry
27    c1 = openmc.Cell(cell_id=1, fill=moderator)
28    mod_univ = openmc.Universe(universe_id=1, cells=(c1,))
29
30    r0 = openmc.ZCylinder(r=0.3)
31    c11 = openmc.Cell(cell_id=11, fill=dense_fuel, region=-r0)
32    c11.temperature = [500, 700, 0, 800]
33    c12 = openmc.Cell(cell_id=12, fill=moderator, region=+r0)
34    fuel_univ = openmc.Universe(universe_id=11, cells=(c11, c12))
35
36    lat = openmc.RectLattice(lattice_id=101)
37    lat.dimension = [2, 2]
38    lat.lower_left = [-2.0, -2.0]
39    lat.pitch = [2.0, 2.0]
40    lat.universes = [[fuel_univ]*2]*2
41    lat.outer = mod_univ
42
43    x0 = openmc.XPlane(x0=-3.0)
44    x1 = openmc.XPlane(x0=3.0)
45    y0 = openmc.YPlane(y0=-3.0)
46    y1 = openmc.YPlane(y0=3.0)
47    for s in [x0, x1, y0, y1]:
48        s.boundary_type = 'reflective'
49    c101 = openmc.Cell(cell_id=101, fill=lat, region=+x0 & -x1 & +y0 & -y1)
50    model.geometry.root_universe = openmc.Universe(universe_id=0, cells=(c101,))
51
52    # Settings
53    model.settings.batches = 5
54    model.settings.inactive = 0
55    model.settings.particles = 1000
56    model.settings.source = openmc.Source(space=openmc.stats.Box(
57        [-1, -1, -1], [1, 1, 1]))
58    model.settings.temperature = {'tolerance': 1000, 'multipole': True}
59
60    # Tallies
61    tally = openmc.Tally()
62    tally.nuclides = ['U235', 'O16', 'total']
63    tally.scores = ['total', 'fission', '(n,gamma)', 'elastic', '(n,p)']
64    model.tallies.append(tally)
65
66    return model
67
68
69class MultipoleTestHarness(PyAPITestHarness):
70    def _get_results(self):
71        outstr = super()._get_results()
72        su = openmc.Summary('summary.h5')
73        outstr += str(su.geometry.get_all_cells()[11])
74        return outstr
75
76
77def test_multipole():
78    model = make_model()
79    harness = MultipoleTestHarness('statepoint.5.h5', model)
80    harness.main()
81