mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-26 13:15:39 -04:00
Implemented pincell example file using Python API
This commit is contained in:
parent
368184371e
commit
fca305129a
5 changed files with 214 additions and 145 deletions
214
examples/python/pincell/build-xml.py
Normal file
214
examples/python/pincell/build-xml.py
Normal file
|
|
@ -0,0 +1,214 @@
|
|||
import openmc
|
||||
|
||||
|
||||
###############################################################################
|
||||
# Simulation Input File Parameters
|
||||
###############################################################################
|
||||
|
||||
# OpenMC simulation parameters
|
||||
batches = 100
|
||||
inactive = 10
|
||||
particles = 1000
|
||||
|
||||
|
||||
###############################################################################
|
||||
# Exporting to OpenMC materials.xml File
|
||||
###############################################################################
|
||||
|
||||
# Instantiate some Nuclides
|
||||
h1 = openmc.Nuclide('H-1')
|
||||
h2 = openmc.Nuclide('H-2')
|
||||
he4 = openmc.Nuclide('He-4')
|
||||
b10 = openmc.Nuclide('B-10')
|
||||
b11 = openmc.Nuclide('B-11')
|
||||
o16 = openmc.Nuclide('O-16')
|
||||
o17 = openmc.Nuclide('O-17')
|
||||
cr50 = openmc.Nuclide('Cr-50')
|
||||
cr52 = openmc.Nuclide('Cr-52')
|
||||
cr53 = openmc.Nuclide('Cr-53')
|
||||
cr54 = openmc.Nuclide('Cr-54')
|
||||
fe54 = openmc.Nuclide('Fe-54')
|
||||
fe56 = openmc.Nuclide('Fe-56')
|
||||
fe57 = openmc.Nuclide('Fe-57')
|
||||
fe58 = openmc.Nuclide('Fe-58')
|
||||
zr90 = openmc.Nuclide('Zr-90')
|
||||
zr91 = openmc.Nuclide('Zr-91')
|
||||
zr92 = openmc.Nuclide('Zr-92')
|
||||
zr94 = openmc.Nuclide('Zr-94')
|
||||
zr96 = openmc.Nuclide('Zr-96')
|
||||
sn112 = openmc.Nuclide('Sn-112')
|
||||
sn114 = openmc.Nuclide('Sn-114')
|
||||
sn115 = openmc.Nuclide('Sn-115')
|
||||
sn116 = openmc.Nuclide('Sn-116')
|
||||
sn117 = openmc.Nuclide('Sn-117')
|
||||
sn118 = openmc.Nuclide('Sn-118')
|
||||
sn119 = openmc.Nuclide('Sn-119')
|
||||
sn120 = openmc.Nuclide('Sn-120')
|
||||
sn122 = openmc.Nuclide('Sn-122')
|
||||
sn124 = openmc.Nuclide('Sn-124')
|
||||
u234 = openmc.Nuclide('U-234')
|
||||
u235 = openmc.Nuclide('U-235')
|
||||
u238 = openmc.Nuclide('U-238')
|
||||
|
||||
# Instantiate some Materials and register the appropriate Nuclides
|
||||
uo2 = openmc.Material(material_id=1, name='UO2 fuel at 2.4% wt enrichment')
|
||||
uo2.setDensity('g/cm3', 10.29769)
|
||||
uo2.addNuclide(u234, 4.4843e-6)
|
||||
uo2.addNuclide(u235, 5.5815e-4)
|
||||
uo2.addNuclide(u238, 2.2408e-2)
|
||||
uo2.addNuclide(o16, 4.5829e-2)
|
||||
uo2.addNuclide(o17, 1.1164e-4)
|
||||
|
||||
helium = openmc.Material(material_id=2, name='Helium for gap')
|
||||
helium.setDensity('g/cm3', 0.001598)
|
||||
helium.addNuclide(he4, 2.4044e-4)
|
||||
|
||||
zircaloy = openmc.Material(material_id=3, name='Zircaloy 4')
|
||||
zircaloy.setDensity('g/cm3', 6.55)
|
||||
zircaloy.addNuclide(o16, 3.0743e-4)
|
||||
zircaloy.addNuclide(o17, 7.4887e-7)
|
||||
zircaloy.addNuclide(cr50, 3.2962e-6)
|
||||
zircaloy.addNuclide(cr52, 6.3564e-5)
|
||||
zircaloy.addNuclide(cr53, 7.2076e-6)
|
||||
zircaloy.addNuclide(cr54, 1.7941e-6)
|
||||
zircaloy.addNuclide(fe54, 8.6699e-6)
|
||||
zircaloy.addNuclide(fe56, 1.3610e-4)
|
||||
zircaloy.addNuclide(fe57, 3.1431e-6)
|
||||
zircaloy.addNuclide(fe58, 4.1829e-7)
|
||||
zircaloy.addNuclide(zr90, 2.1827e-2)
|
||||
zircaloy.addNuclide(zr91, 4.7600e-3)
|
||||
zircaloy.addNuclide(zr92, 7.2758e-3)
|
||||
zircaloy.addNuclide(zr94, 7.3734e-3)
|
||||
zircaloy.addNuclide(zr96, 1.1879e-3)
|
||||
zircaloy.addNuclide(sn112, 4.6735e-6)
|
||||
zircaloy.addNuclide(sn114, 3.1799e-6)
|
||||
zircaloy.addNuclide(sn115, 1.6381e-6)
|
||||
zircaloy.addNuclide(sn116, 7.0055e-5)
|
||||
zircaloy.addNuclide(sn117, 3.7003e-5)
|
||||
zircaloy.addNuclide(sn118, 1.1669e-4)
|
||||
zircaloy.addNuclide(sn119, 4.1387e-5)
|
||||
zircaloy.addNuclide(sn120, 1.5697e-4)
|
||||
zircaloy.addNuclide(sn122, 2.2308e-5)
|
||||
zircaloy.addNuclide(sn124, 2.7897e-5)
|
||||
|
||||
borated_water = openmc.Material(material_id=4, name='Borated water at 975 ppm')
|
||||
borated_water.setDensity('g/cm3', 0.740582)
|
||||
borated_water.addNuclide(b10, 8.0042e-6)
|
||||
borated_water.addNuclide(b11, 3.2218e-5)
|
||||
borated_water.addNuclide(h1, 4.9457e-2)
|
||||
borated_water.addNuclide(h2, 7.4196e-6)
|
||||
borated_water.addNuclide(o16, 2.4672e-2)
|
||||
borated_water.addNuclide(o17, 6.0099e-5)
|
||||
borated_water.addSAlphaBeta('HH2O', '71t')
|
||||
|
||||
# Instantiate a MaterialsFile, register all Materials, and export to XML
|
||||
materials_file = openmc.MaterialsFile()
|
||||
materials_file.setDefaultXS('71c')
|
||||
materials_file.addMaterials([uo2, helium, zircaloy, borated_water])
|
||||
materials_file.exportToXML()
|
||||
|
||||
|
||||
###############################################################################
|
||||
# Exporting to OpenMC geometry.xml File
|
||||
###############################################################################
|
||||
|
||||
# Instantiate ZCylinder surfaces
|
||||
fuel_or = openmc.ZCylinder(surface_id=1, x0=0, y0=0, R=0.39218, name='Fuel OR')
|
||||
clad_ir = openmc.ZCylinder(surface_id=2, x0=0, y0=0, R=0.40005, name='Clad IR')
|
||||
clad_or = openmc.ZCylinder(surface_id=3, x0=0, y0=0, R=0.45720, name='Clad OR')
|
||||
left = openmc.XPlane(surface_id=4, x0=-0.62992, name='left')
|
||||
right = openmc.XPlane(surface_id=5, x0=0.62992, name='right')
|
||||
bottom = openmc.YPlane(surface_id=6, y0=-0.62992, name='bottom')
|
||||
top = openmc.YPlane(surface_id=7, y0=0.62992, name='top')
|
||||
|
||||
left.setBoundaryType('reflective')
|
||||
right.setBoundaryType('reflective')
|
||||
top.setBoundaryType('reflective')
|
||||
bottom.setBoundaryType('reflective')
|
||||
|
||||
# Instantiate Cells
|
||||
fuel = openmc.Cell(cell_id=1, name='cell 1')
|
||||
gap = openmc.Cell(cell_id=2, name='cell 2')
|
||||
clad = openmc.Cell(cell_id=3, name='cell 3')
|
||||
water = openmc.Cell(cell_id=4, name='cell 4')
|
||||
|
||||
# Register Surfaces with Cells
|
||||
fuel.addSurface(fuel_or, halfspace=-1)
|
||||
gap.addSurface(fuel_or, halfspace=+1)
|
||||
gap.addSurface(clad_ir, halfspace=-1)
|
||||
clad.addSurface(clad_ir, halfspace=+1)
|
||||
clad.addSurface(clad_or, halfspace=-1)
|
||||
water.addSurface(clad_or, halfspace=+1)
|
||||
water.addSurface(left, halfspace=+1)
|
||||
water.addSurface(right, halfspace=-1)
|
||||
water.addSurface(bottom, halfspace=+1)
|
||||
water.addSurface(top, halfspace=-1)
|
||||
|
||||
# Register Materials with Cells
|
||||
fuel.setFill(uo2)
|
||||
gap.setFill(helium)
|
||||
clad.setFill(zircaloy)
|
||||
water.setFill(borated_water)
|
||||
|
||||
# Instantiate Universe
|
||||
root = openmc.Universe(universe_id=0, name='root universe')
|
||||
|
||||
# Register Cells with Universe
|
||||
root.addCells([fuel, gap, clad, water])
|
||||
|
||||
# Instantiate a Geometry and register the root Universe
|
||||
geometry = openmc.Geometry()
|
||||
geometry.setRootUniverse(root)
|
||||
|
||||
# Instantiate a GeometryFile, register Geometry, and export to XML
|
||||
geometry_file = openmc.GeometryFile()
|
||||
geometry_file.setGeometry(geometry)
|
||||
geometry_file.exportToXML()
|
||||
|
||||
|
||||
###############################################################################
|
||||
# Exporting to OpenMC settings.xml File
|
||||
###############################################################################
|
||||
|
||||
# Instantiate a SettingsFile, set all runtime parameters, and export to XML
|
||||
settings_file = openmc.SettingsFile()
|
||||
settings_file.setBatches(batches)
|
||||
settings_file.setInactive(inactive)
|
||||
settings_file.setParticles(particles)
|
||||
settings_file.setSourceSpace('box', [-0.62992, -0.62992, -1, \
|
||||
0.62992, 0.62992, 1])
|
||||
settings_file.setEntropyLowerLeft([-0.39218, -0.39218, -1.e50])
|
||||
settings_file.setEntropyUpperRight([0.39218, 0.39218, 1.e50])
|
||||
settings_file.setEntropyDimension([10, 10, 1])
|
||||
settings_file.exportToXML()
|
||||
|
||||
|
||||
###############################################################################
|
||||
# Exporting to OpenMC tallies.xml File
|
||||
###############################################################################
|
||||
|
||||
# Instantiate a tally mesh
|
||||
mesh = openmc.Mesh(mesh_id=1)
|
||||
mesh.setType('rectangular')
|
||||
mesh.setDimension([100, 100, 1])
|
||||
mesh.setLowerLeft([-0.62992, -0.62992, -1.e50])
|
||||
mesh.setUpperRight([0.62992, 0.62992, 1.e50])
|
||||
|
||||
# Instantiate some tally Filters
|
||||
energy_filter = openmc.Filter(type='energy', bins=[0., 4.e-6, 20.])
|
||||
mesh_filter = openmc.Filter()
|
||||
mesh_filter.setMesh(mesh)
|
||||
|
||||
# Instantiate the Tally
|
||||
tally = openmc.Tally(tally_id=1)
|
||||
tally.addFilter(energy_filter)
|
||||
tally.addFilter(mesh_filter)
|
||||
tally.addScore('flux')
|
||||
tally.addScore('fission')
|
||||
tally.addScore('nu-fission')
|
||||
|
||||
# Instantiate a TalliesFile, register all Tallies, and export to XML
|
||||
tallies_file = openmc.TalliesFile()
|
||||
tallies_file.addMesh(mesh)
|
||||
tallies_file.addTally(tally)
|
||||
tallies_file.exportToXML()
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<geometry>
|
||||
|
||||
<!--
|
||||
This is a simple pin cell model based on dimensions from the MIT BEAVRS
|
||||
(Benchmarking for Evaluation and Validation of Reactor Simulations)
|
||||
benchmark.
|
||||
-->
|
||||
|
||||
<!-- Surfaces for fuel, gap, cladding. Dimensions from Figure 2 in BEAVRS -->
|
||||
<surface id="1" type="z-cylinder" coeffs="0. 0. 0.39218" /> <!-- Fuel OR -->
|
||||
<surface id="2" type="z-cylinder" coeffs="0. 0. 0.40005" /> <!-- Clad IR -->
|
||||
<surface id="3" type="z-cylinder" coeffs="0. 0. 0.45720" /> <!-- Clad OR -->
|
||||
|
||||
<!-- Reflective surfaces on outside of pin-cell. The lattice pitch is 1.25984
|
||||
cm (taken from Table 2 in BEAVRS). -->
|
||||
<surface id="4" type="x-plane" coeffs="-0.62992" boundary="reflective" />
|
||||
<surface id="5" type="x-plane" coeffs=" 0.62992" boundary="reflective" />
|
||||
<surface id="6" type="y-plane" coeffs="-0.62992" boundary="reflective" />
|
||||
<surface id="7" type="y-plane" coeffs=" 0.62992" boundary="reflective" />
|
||||
|
||||
<cell id="1" material="1" surfaces=" -1" /> <!-- UO2 Fuel -->
|
||||
<cell id="2" material="2" surfaces="1 -2" /> <!-- Helium gap -->
|
||||
<cell id="3" material="3" surfaces="2 -3" /> <!-- Zircaloy cladding -->
|
||||
<cell id="4" material="4" surfaces="3 4 -5 6 -7" /> <!-- Borated water -->
|
||||
|
||||
</geometry>
|
||||
|
|
@ -1,70 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<materials>
|
||||
|
||||
<!-- By default, use 300K cross sections -->
|
||||
<default_xs>71c</default_xs>
|
||||
|
||||
<!--
|
||||
Since O-18 is not present in ENDF/B-VII, it was necessary to combine the
|
||||
atom densities for O-17 and O-18 in any materials containing Oxygen.
|
||||
-->
|
||||
|
||||
<!-- UO2 fuel at 2.4 wt% enrichment -->
|
||||
<material id="1">
|
||||
<density value="10.29769" units="g/cm3" />
|
||||
<nuclide name="U-234" ao="4.4843e-06" />
|
||||
<nuclide name="U-235" ao="5.5815e-04" />
|
||||
<nuclide name="U-238" ao="2.2408e-02" />
|
||||
<nuclide name="O-16" ao="4.5829e-02" />
|
||||
<nuclide name="O-17" ao="1.1164e-04" />
|
||||
</material>
|
||||
|
||||
<!-- Helium for gap -->
|
||||
<material id="2">
|
||||
<density value="0.001598" units="g/cm3" />
|
||||
<nuclide name="He-4" ao="2.4044e-04" />
|
||||
</material>
|
||||
|
||||
<!-- Zircaloy 4 -->
|
||||
<material id="3">
|
||||
<density value="6.55" units="g/cm3" />
|
||||
<nuclide name="O-16" ao="3.0743e-04" />
|
||||
<nuclide name="O-17" ao="7.4887e-07" />
|
||||
<nuclide name="Cr-50" ao="3.2962e-06" />
|
||||
<nuclide name="Cr-52" ao="6.3564e-05" />
|
||||
<nuclide name="Cr-53" ao="7.2076e-06" />
|
||||
<nuclide name="Cr-54" ao="1.7941e-06" />
|
||||
<nuclide name="Fe-54" ao="8.6699e-06" />
|
||||
<nuclide name="Fe-56" ao="1.3610e-04" />
|
||||
<nuclide name="Fe-57" ao="3.1431e-06" />
|
||||
<nuclide name="Fe-58" ao="4.1829e-07" />
|
||||
<nuclide name="Zr-90" ao="2.1827e-02" />
|
||||
<nuclide name="Zr-91" ao="4.7600e-03" />
|
||||
<nuclide name="Zr-92" ao="7.2758e-03" />
|
||||
<nuclide name="Zr-94" ao="7.3734e-03" />
|
||||
<nuclide name="Zr-96" ao="1.1879e-03" />
|
||||
<nuclide name="Sn-112" ao="4.6735e-06" />
|
||||
<nuclide name="Sn-114" ao="3.1799e-06" />
|
||||
<nuclide name="Sn-115" ao="1.6381e-06" />
|
||||
<nuclide name="Sn-116" ao="7.0055e-05" />
|
||||
<nuclide name="Sn-117" ao="3.7003e-05" />
|
||||
<nuclide name="Sn-118" ao="1.1669e-04" />
|
||||
<nuclide name="Sn-119" ao="4.1387e-05" />
|
||||
<nuclide name="Sn-120" ao="1.5697e-04" />
|
||||
<nuclide name="Sn-122" ao="2.2308e-05" />
|
||||
<nuclide name="Sn-124" ao="2.7897e-05" />
|
||||
</material>
|
||||
|
||||
<!-- Borated water at 975 ppm -->
|
||||
<material id="4">
|
||||
<density value="0.740582" units="g/cm3" />
|
||||
<nuclide name="B-10" ao="8.0042e-06" />
|
||||
<nuclide name="B-11" ao="3.2218e-05" />
|
||||
<nuclide name="H-1" ao="4.9457e-02" />
|
||||
<nuclide name="H-2" ao="7.4196e-06" />
|
||||
<nuclide name="O-16" ao="2.4672e-02" />
|
||||
<nuclide name="O-17" ao="6.0099e-05" />
|
||||
<sab name="HH2O" xs="71t" />
|
||||
</material>
|
||||
|
||||
</materials>
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<settings>
|
||||
|
||||
<!-- Define how many particles to run and for how many batches -->
|
||||
<eigenvalue>
|
||||
<batches>100</batches>
|
||||
<inactive>10</inactive>
|
||||
<particles>1000</particles>
|
||||
</eigenvalue>
|
||||
|
||||
<!-- The starting source is a uniform distribution over the entire pin
|
||||
cell. Note that since this is effectively a 2D model, the z coordinates
|
||||
are inconsequential -->
|
||||
<source>
|
||||
<space type="box">
|
||||
<parameters>
|
||||
-0.62992 -0.62992 -1.
|
||||
0.62992 0.62992 1.
|
||||
</parameters>
|
||||
</space>
|
||||
</source>
|
||||
|
||||
<!-- To assess convergence of the source distribution, we need to define the
|
||||
bounds for a mesh over which the Shannon entropy should be
|
||||
calculated. The extent in the z direction is made arbitrarily large. -->
|
||||
<entropy>
|
||||
<lower_left>-0.39218 -0.39218 -1.e50</lower_left>
|
||||
<upper_right>0.39218 0.39218 1.e50</upper_right>
|
||||
<dimension>10 10 1</dimension>
|
||||
</entropy>
|
||||
|
||||
</settings>
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<tallies>
|
||||
|
||||
<mesh id="1" type="rectangular">
|
||||
<dimension>100 100 1</dimension>
|
||||
<lower_left>-0.62992 -0.62992 -1.e50</lower_left>
|
||||
<upper_right>0.62992 0.62992 1.e50</upper_right>
|
||||
</mesh>
|
||||
|
||||
<tally id="1">
|
||||
<filter type="mesh" bins="1" />
|
||||
<filter type="energy" bins="0. 4.e-6 20.0" />
|
||||
<scores>flux fission nu-fission</scores>
|
||||
</tally>
|
||||
|
||||
</tallies>
|
||||
Loading…
Add table
Add a link
Reference in a new issue