Skip to content

Commit 5f84d01

Browse files
committed
Merge branch 'master' into serpent-material-temps
2 parents 5586a09 + 6bac510 commit 5f84d01

29 files changed

Lines changed: 2189 additions & 121 deletions

doc/releasenotes/v0.5.0.rst

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ New Features
5454
Describe any new features to the code.
5555
5656
- ``openmc`` support via `DepcodeOpenMC`
57+
- OpenMC compatible MSBR model.
5758

5859

5960

@@ -81,7 +82,9 @@ Script Changes
8182
- Add ``SERPENT_DATA`` and ``SERPENT_ACELIB`` variables to ``.bashrc``
8283

8384
- A new script, ``scripts/ci/openmc-xs.bash``, that downloads the OpenMC HDF5 cross section library.
84-
85+
- A new script, ``download_endfb71.bash``, that downloads the ENDF/B 7.1 cross section library -- including thermal scattering, decay, and fission yield data -- in ACE format.
86+
- A new script, ``process_endfb71_to_openmc.bash``, that converts the library created by ``download_endfb71.bash`` into an OpenMC-usable HDF5 format. Requires OpenMC to be installed from source to use.
87+
- A new script ``openmc_msbr_model.py``, that creates an OpenMC-usable MSBR model based on the Serpent MSBR model.
8588

8689

8790
Python API Changes
@@ -116,7 +119,7 @@ Python API Changes
116119
- ``template_inputfile_path`` → ``template_input_file_path``
117120
- Removed default values for `geo_files`
118121
- Changed `iter_inputfile`, `iter_matfile` to be attributes instead of parameters
119-
- Changed `npop`, `active_cycles`, `inactive_cycles` to be attributes instead of
122+
- Changed `npop`, `active_cycles`, `inactive_cycles` to be attributes instead of parameters
120123
- ``read_depcode_info()`` → ``read_step_metadata()``
121124
- ``sim_info`` → ``step_metadata``
122125
- ``read_depcode_step_param()`` → ``read_neutronics_parameters()``
@@ -134,7 +137,7 @@ Python API Changes
134137
- ``template_inputfile_path`` → ``template_input_file_path``
135138
- Removed default values for `exec_path`, `template_input_file_path`, `geo_files`
136139
- Changed `iter_inputfile`, `iter_matfile` to be attributes instead of parameters
137-
- Changed `npop`, `active_cycles`, `inactive_cycles` to be attributes instead of
140+
- Changed `npop`, `active_cycles`, `inactive_cycles` to be attributes instead of parameters
138141
- ``read_depcode_info()`` → ``read_depletion_step_metadata()``
139142
- ``sim_info`` → ``step_metadata``
140143
- ``read_depcode_step_param()`` → ``read_neutronics_parameters()``

examples/msbr/README.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
## MSBR Model
2+
3+
This model is based on the following technical report:
4+
5+
Robertson, R. C. (1971). Conceptual Design Study of a Single-Fluid Molten-Salt Breeder Reactor. (ORNL--4541). ORNL.
6+
7+
For a complete discussion of the model, please see Chapter 4 in:
8+
9+
Yardas, O. (2023). Implementation and validation of OpenMC in SaltProc [MS Thesis, University of Illinois at Urbana-Champaign].
10+
11+
12+
## Key features
13+
- Zone IB
14+
- Zone IIA
15+
- Simplified Zone IIB (graphite slabs are constructed from cylindrical sectors, and so do not have a consistent width; the last gap in the ccw direction in each octant is smaller than the other gaps, which all have the same dimension)
16+
- Control rod elements (A Guess, as no spec was provided)
17+
- Radial reflectors.
18+
- Simplified axial reflectors (flat as opposed to dished in the reference specification)
19+
20+
## Missing from model
21+
- Zone IA
22+
- Support structure above the main core
23+
- Radial reflector axial ribs
24+
- Radial reflector retaining rings
25+
- Zone IIB Graphite Dowel pins and Hastelloy N eliptical pins
26+
- Salt inlets and outlest
27+
- Zone I eliptical graphite sealing pins

examples/msbr/control_rods.py

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
import openmc
2+
import numpy as np
3+
4+
def control_rod(gr_sq_neg,
5+
gr_extra_regions,
6+
inter_elem_channel,
7+
fuel_hole,
8+
fuel,
9+
moder):
10+
"""Create universe for control rod element with control rod fully inserted.
11+
Based on specification in Roberton, 1971.
12+
13+
Parameters
14+
----------
15+
gr_sq_neg : openmc.Intersection
16+
The region bounding the outer surface of the 6 in. x 6 in. graphite
17+
element.
18+
gr_extra_regions : list of (openmc.Region, str)
19+
'Add-on' regions and their names for the graphite element.
20+
Includes ribs, rib tips, and gap-filling regions.
21+
inter_elem_channel : openmc.Region, list of (openmc.Region, str)
22+
Inter-element channel region(s).
23+
fuel_hole : openmc.ZCylinder
24+
Central fuel hole in graphite element.
25+
fuel : openmc.Material
26+
Fuel salt material
27+
moder : openmc.Material
28+
Graphite material
29+
30+
Returns
31+
-------
32+
cr : openmc.Universe
33+
Univerese for control rod element with control rod fully insterted.
34+
"""
35+
36+
s1 = openmc.ZCylinder(r=4.7625, name='control_rod')
37+
38+
c1 = openmc.Cell(fill=moder, region=-s1, name='control_rod')
39+
c2 = openmc.Cell(fill=fuel, region=(+s1 & -fuel_hole), name='cr_fuel_inner')
40+
c3 = openmc.Cell(fill=moder, region=(+fuel_hole &
41+
gr_sq_neg &
42+
inter_elem_channel),
43+
name='cr_moderator')
44+
c4 = openmc.Cell(fill=fuel, region= (~gr_sq_neg & inter_elem_channel),
45+
name='cr_fuel_outer')
46+
#universe_id=3
47+
cr = openmc.Universe(name='control_rod', cells=[c1, c2, c3, c4])
48+
49+
for (reg, name) in gr_extra_regions:
50+
cr.add_cell(openmc.Cell(fill=moder, region=reg,
51+
name=f'cr_moderator_{name}'))
52+
53+
return cr
54+
55+
def control_rod_channel(gr_sq_neg,
56+
gr_extra_regions,
57+
inter_elem_channel,
58+
fuel_hole,
59+
fuel,
60+
moder):
61+
"""Create universe for control rod element with control rod fully withdrawn.
62+
Based on specification in Roberton, 1971.
63+
64+
Parameters
65+
----------
66+
gr_sq_neg : openmc.Intersection
67+
The region bounding the outer surface of the 6 in. x 6 in. graphite
68+
element.
69+
gr_extra_regions : list of (openmc.Region, str)
70+
'Add-on' regions and their names for the graphite element.
71+
Includes ribs, rib tips, and gap-filling regions.
72+
inter_elem_channel : openmc.Region, list of (openmc.Region, str)
73+
Inter-element channel region(s).
74+
fuel_hole : openmc.ZCylinder
75+
Central fuel hole in graphite element.
76+
fuel : openmc.Material
77+
Fuel salt material
78+
moder : openmc.Material
79+
Graphite material
80+
81+
Returns
82+
-------
83+
crc : openmc.Universe
84+
Universe for control rod element with control rod fully withdrawn.
85+
"""
86+
87+
c1 = openmc.Cell(fill=fuel, region=(-fuel_hole), name='crc_fuel_inner')
88+
89+
c2 = openmc.Cell(fill=moder, region=(+fuel_hole &
90+
gr_sq_neg &
91+
inter_elem_channel),
92+
name='crc_moderator')
93+
c3 = openmc.Cell(fill=fuel, region=(~gr_sq_neg & inter_elem_channel),
94+
name='crc_fuel_outer')
95+
96+
# universe_id=4
97+
crc = openmc.Universe(name='control_rod_channel', cells=[c1, c2, c3])
98+
99+
for (reg, name) in gr_extra_regions:
100+
crc.add_cell(openmc.Cell(fill=moder, region=reg,
101+
name=f'crc_moderator_{name}'))
102+
103+
return crc

0 commit comments

Comments
 (0)