mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-28 06:05:58 -04:00
Merge pull request #1809 from pshriwise/rotation_fix
Fix segfault from unreset particle coordinates in `neighbor_list_find_cell`
This commit is contained in:
commit
ddc83d025b
5 changed files with 96 additions and 0 deletions
|
|
@ -247,6 +247,12 @@ find_cell_inner(Particle& p, const NeighborList* neighbor_list)
|
|||
|
||||
bool neighbor_list_find_cell(Particle& p)
|
||||
{
|
||||
|
||||
// Reset all the deeper coordinate levels.
|
||||
for (int i = p.n_coord_; i < p.coord_.size(); i++) {
|
||||
p.coord_[i].reset();
|
||||
}
|
||||
|
||||
// Get the cell this particle was in previously.
|
||||
auto coord_lvl = p.n_coord_ - 1;
|
||||
auto i_cell = p.coord_[coord_lvl].cell;
|
||||
|
|
|
|||
0
tests/regression_tests/adj_cell_rotation/__init__.py
Normal file
0
tests/regression_tests/adj_cell_rotation/__init__.py
Normal file
38
tests/regression_tests/adj_cell_rotation/inputs_true.dat
Normal file
38
tests/regression_tests/adj_cell_rotation/inputs_true.dat
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<geometry>
|
||||
<cell id="1" material="1" region="-1" universe="1" />
|
||||
<cell id="2" material="2" region="1" universe="1" />
|
||||
<cell fill="1" id="3" region="2 -3 4 -5 6 -8" rotation="10 20 30" universe="2" />
|
||||
<cell fill="1" id="4" region="2 -3 4 -5 8 -7" translation="0 0 15" universe="2" />
|
||||
<surface coeffs="1.0 0.0 0.0 5.0" id="1" type="sphere" />
|
||||
<surface boundary="vacuum" coeffs="-7.5" id="2" name="minimum x" type="x-plane" />
|
||||
<surface boundary="vacuum" coeffs="7.5" id="3" name="maximum x" type="x-plane" />
|
||||
<surface boundary="vacuum" coeffs="-7.5" id="4" name="minimum y" type="y-plane" />
|
||||
<surface boundary="vacuum" coeffs="7.5" id="5" name="maximum y" type="y-plane" />
|
||||
<surface boundary="vacuum" coeffs="-7.5" id="6" type="z-plane" />
|
||||
<surface boundary="vacuum" coeffs="22.5" id="7" type="z-plane" />
|
||||
<surface coeffs="7.5" id="8" type="z-plane" />
|
||||
</geometry>
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<materials>
|
||||
<material depletable="true" id="1">
|
||||
<density units="g/cc" value="10.0" />
|
||||
<nuclide ao="1.0" name="U235" />
|
||||
</material>
|
||||
<material id="2">
|
||||
<density units="g/cc" value="0.1" />
|
||||
<nuclide ao="0.1" name="H1" />
|
||||
</material>
|
||||
</materials>
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<settings>
|
||||
<run_mode>eigenvalue</run_mode>
|
||||
<particles>10000</particles>
|
||||
<batches>10</batches>
|
||||
<inactive>5</inactive>
|
||||
<source strength="1.0">
|
||||
<space type="box">
|
||||
<parameters>-4.0 -4.0 -4.0 4.0 4.0 4.0</parameters>
|
||||
</space>
|
||||
</source>
|
||||
</settings>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
k-combined:
|
||||
4.453328E-01 5.918369E-03
|
||||
50
tests/regression_tests/adj_cell_rotation/test.py
Normal file
50
tests/regression_tests/adj_cell_rotation/test.py
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
import pytest
|
||||
import openmc
|
||||
|
||||
from tests.testing_harness import PyAPITestHarness
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def model():
|
||||
model = openmc.model.Model()
|
||||
|
||||
fuel = openmc.Material()
|
||||
fuel.set_density('g/cc', 10.0)
|
||||
fuel.add_nuclide('U235', 1.0)
|
||||
|
||||
h1 = openmc.Material()
|
||||
h1.set_density('g/cc', 0.1)
|
||||
h1.add_nuclide('H1', 0.1)
|
||||
|
||||
inner_sphere = openmc.Sphere(x0=1.0, r=5.0)
|
||||
|
||||
fuel_cell = openmc.Cell(fill=fuel, region=-inner_sphere)
|
||||
hydrogen_cell = openmc.Cell(fill=h1, region=+inner_sphere)
|
||||
univ = openmc.Universe(cells=[fuel_cell, hydrogen_cell])
|
||||
|
||||
# Create one cell on top of the other. Only one
|
||||
# has a rotation
|
||||
box = openmc.rectangular_prism(15., 15., 'z', boundary_type='vacuum')
|
||||
lower_z = openmc.ZPlane(-7.5, boundary_type='vacuum')
|
||||
upper_z = openmc.ZPlane(22.5, boundary_type='vacuum')
|
||||
middle_z = openmc.ZPlane(7.5)
|
||||
|
||||
lower_cell = openmc.Cell(fill=univ, region=box & +lower_z & -middle_z)
|
||||
lower_cell.rotation = (10, 20, 30)
|
||||
upper_cell = openmc.Cell(fill=univ, region=box & +middle_z & -upper_z)
|
||||
upper_cell.translation = (0, 0, 15)
|
||||
|
||||
model.geometry = openmc.Geometry(root=[lower_cell, upper_cell])
|
||||
|
||||
model.settings.particles = 10000
|
||||
model.settings.inactive = 5
|
||||
model.settings.batches = 10
|
||||
source_box = openmc.stats.Box((-4., -4., -4.), (4., 4., 4.))
|
||||
model.settings.source = openmc.Source(space=source_box)
|
||||
|
||||
return model
|
||||
|
||||
|
||||
def test_rotation(model):
|
||||
harness = PyAPITestHarness('statepoint.10.h5', model)
|
||||
harness.main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue