-
Notifications
You must be signed in to change notification settings - Fork 560
Open
Labels
Description
Bug Description
It appears that fill
is based solely on object identifier irrespective of object type (e.g., Material
, Universe
, Lattice
). This can sometimes cause unintended behavior, and cause false-alarm errors with circular dependencies. In the following example a cell and
Steps to Reproduce
MWE:
OD = 0.08
WALL = 0.005
LENGTH = 0.5
CAVITY_LENGTH = 0.3
R_SEED = 0.03
R_CAVITY = OD/2 - WALL
END_L = LENGTH - CAVITY_LENGTH
def generate_brach_problem():
outer_cyl = openmc.model.RightCircularCylinder((0,0,0), LENGTH, OD / 2)
inner_cyl = openmc.model.RightCircularCylinder((0,0,END_L/2),CAVITY_LENGTH, R_CAVITY)
titanium = openmc.Material()
titanium.add_element("Ti", 1.0)
titanium.set_density("g/cm3", 4.5)
capsule = openmc.Cell(region = -outer_cyl & +inner_cyl, fill = titanium)
pallad = openmc.Material()
pallad.add_element("Pd", 1.0)
pallad.set_density("g/cm3", 12)
seed_sp = openmc.Sphere(r=R_SEED)
air = openmc.Material()
air.add_element("N", 0.8)
air.add_element("O", 0.2)
air.set_density("g/cm3", 0.0012)
seed = openmc.Universe( cells = [openmc.Cell(region = -seed_sp, fill = pallad),
openmc.Cell(region = + seed_sp, fill = air)]
)
lattice = openmc.RectLattice()
lattice.pitch = (1, 1, R_SEED * 2)
lattice.universes = [[[seed]*5]]
lattice.lower_left = (0,0, END_L /2)
filler = openmc.Cell(region = -inner_cyl, fill = lattice)
print(capsule, seed, lattice, filler)
filler.plot()
model = openmc.Model()
model.geometry.root_universe = openmc.Universe(cells = [capsule, filler])
model.geometry.plot(basis="xz")
plt.show()
generate_brach_problem()
this Prints:
Cell
ID = 9
Name =
Fill = Material 7
Region = (-15 16 -17 (18 | -19 | 20))
Rotation = None
Temperature = None
Translation = None
Volume = None
Universe
ID = 3
Name =
Geom = CSG
Cells = [10, 11]
RectLattice
ID = 4
Name =
Shape = (5, 1, 1)
Lower Left = (0, 0, 0.1)
Pitch = (1, 1, 0.06)
Outer = None
Universes
3 3 3 3 3 Cell
ID = 12
Name =
Fill = 4
Region = (-18 19 -20)
Rotation = None
Translation = None
Volume = None
This leads to the error:
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
Cell In[5], line 39
36 model.geometry.plot(basis="xz")
37 plt.show()
---> 39 generate_brach_problem()
Cell In[5], line 33, in generate_brach_problem()
31 filler = openmc.Cell(region = -inner_cyl, fill = lattice)
32 print(capsule, seed, lattice, filler)
---> 33 filler.plot()
34 model = openmc.Model()
35 model.geometry.root_universe = openmc.Universe(cells = [capsule, filler])
File /usr/local/lib/python3.9/dist-packages/openmc/cell.py:624, in Cell.plot(self, *args, **kwargs)
622 u = openmc.Universe(cells=[self], universe_id=openmc.Universe.next_id + 1)
623 openmc.Universe.used_ids.remove(u.id)
--> 624 return u.plot(*args, **kwargs)
File /usr/local/lib/python3.9/dist-packages/openmc/universe.py:446, in Universe.plot(self, origin, width, pixels, basis, color_by, colors, seed, openmc_exec, axes, legend, axis_units, legend_kwargs, outline, **kwargs)
443 model.plots.append(plot)
445 # Run OpenMC in geometry plotting mode
--> 446 model.plot_geometry(False, cwd=tmpdir, openmc_exec=openmc_exec)
448 # Read image from file
449 img_path = Path(tmpdir) / f'plot_{plot.id}.png'
File /usr/local/lib/python3.9/dist-packages/openmc/model/model.py:828, in Model.plot_geometry(self, output, cwd, openmc_exec)
826 else:
827 self.export_to_xml()
--> 828 openmc.plot_geometry(output=output, openmc_exec=openmc_exec)
File /usr/local/lib/python3.9/dist-packages/openmc/executor.py:154, in plot_geometry(output, openmc_exec, cwd, path_input)
152 if path_input is not None:
153 args += [path_input]
--> 154 _run(args, output, cwd)
File /usr/local/lib/python3.9/dist-packages/openmc/executor.py:125, in _run(args, output, cwd)
122 error_msg = 'OpenMC aborted unexpectedly.'
123 error_msg = ' '.join(error_msg.split())
--> 125 raise RuntimeError(error_msg)
RuntimeError: Cell 12 is filled with the same universe that it is contained in. application called MPI_Abort(MPI_COMM_WORLD, -1) - process 0 [unset]: write_line error; fd=-1 buf=:cmd=abort exitcode=-1 : system msg for write_line failure : Bad file descriptor
Environment
Openmc: v0.14.0