Fusion neutronics workshop
with OpenMC
Dr Jonathan Shimwell.
Jonathan.Shimwell@ukaea.uk
This work was funded by the RCUK Energy Programme
[Grant number EP/P012450/1]
Neutron birth
(n,n')
(n,f)
(n,n')
(γ,γ')
(n,nγ')
(n,pn')
(n,f)
(n,2n)
(n,α)
(n,γ)
this presentation has moved to
Neutronics analysis has a role in assessing the functionality and viability of nuclear reactor designs, particle accelerators, radiation shielding, medical treatment devices, etc
Neutronics analysis also has uses in fusion reactor design and can ascertain:
- The tritium breeding ratio (TBR)
- Activation of material and resulting radioactivity
- Biological dose rates
- Deposited heat within components
- Material damage (e.g DPA or Helium production)
How can neutronics help
Cross section data is key to the neutronics workflow and provide us with the likelihood of a particular interaction.
Interaction cross sections
Availability of experimental data varies.
Typically the experimental data is then interpreted to create evaluation libraries, such as ENDF, JEFF, JENDL, CENDL.
Cross sections can be measured experimentally with monoenergetic neutrons.
Interaction cross sections
Cross section evaluations exist for different isotopes and different interactions.
Interaction cross sections
A list of interactions is available online
MT numbers using in this workshop include:
- DPA 444
- n,Xt 205
Making materials
import openmc
mat1 = openmc.Material(name='natural Li2O')
mat1.add_element('Li', 2)
mat1.add_element('O', 1)
mat1.set_density('g/cm3', 2.01)
mat2 = openmc.Material(name='enriched Li20')
mat2.add_nuclide('Li6', 0.6*2)
mat2.add_nuclide('Li7', 0.4*2)
mat2.add_nuclide('O16', 0.9976206)
mat2.add_nuclide('O17', 0.000379)
mat2.add_nuclide('O18', 0.0020004)
mat2.set_density('g/cm3', 2.01)
Making materials
import openmc
mat1 = openmc.Material(name='natural Li2O')
mat1.add_element('Li', 2)
mat1.add_element('O', 1)
mat1.set_density('g/cm3', 2.01)
mat2 = openmc.Material(name='enriched Li20')
mat2.add_nuclide('Li6', 0.6*2)
mat2.add_nuclide('Li7', 0.4*2)
mat2.add_nuclide('O16', 0.9976206)
mat2.add_nuclide('O17', 0.000379)
mat2.add_nuclide('O18', 0.0020004)
mat2.set_density('g/cm3', 2.01)
Making materials
import openmc
mat1 = openmc.Material(name='natural L2O')
mat1.add_element('Li', 2)
mat1.add_element('O', 1)
mat.density = 2.01
mat2 = openmc.Material(name='enriched Li20')
mat2.add_nuclide('Li6', 0.6*2)
mat2.add_nuclide('Li7', 0.4*2)
mat2.add_nuclide('O16', 0.9976206)
mat2.add_nuclide('O17', 0.000379)
mat2.add_nuclide('O18', 0.0020004)
Making geometry
Making surfaces
surface_xp = openmc.XPlane(x0=0)
surface_yp = openmc.YPlane(y0=0)
surface_zp = openmc.ZPlane(z0=0)
surface_p = openmc.Plane(A=1.0, B=0.0, C=0.0, D=0.0)
surface_xcy = openmc.XCylinder(y0=0.0, z0=0.0, R=1.0)
surface_ycy = openmc.YCylinder(x0=0.0, z0=0.0, R=1.0)
surface_zcy = openmc.ZCylinder(x0=0.0, z0=0.0, R=1.0)
surface_s = openmc.Sphere(x0=0.0, y0=0.0, z0=0.0, R=1.0)
surface_xco = openmc.XCone(x0=0.0, y0=0.0, z0=0.0, R2=1.0)
surface_yco = openmc.YCone(x0=0.0, y0=0.0, z0=0.0, R2=1.0)
surface_zco = openmc.ZCone( x0=0.0, y0=0.0, z0=0.0, R2=1.0)
surface_quad = openmc.Quadric(a=0.0, b=0.0, c=0.0, d=0.0, e=0.0, f=0.0, g=0.0, h=0.0, j=0.0, k=0.0)
The geometry of a model in OpenMC is defined using constructive solid geometry (CSG) although CAD is supported via DAGMC
Making geometry
Making volumes
surface_sphere = openmc.Sphere(r=10.0) region_inside_sphere = -surface_sphere cell_sphere = openmc.Cell(region=region_inside_sphere)
cell_sphere.fill = steel
surf_sphere1 = openmc.Sphere(r=10.0)
surf_sphere2 = openmc.Sphere(r=20.0)
region_inside_sphere = +surf_sphere1 & -surf_sphere2
cell = openmc.Cell(region= region_inside_sphere)
cell_sphere.fill = steel
Making geometry
Making volumes | (union)
surf_sphere1 = openmc.Sphere(r=10.0)
surf_sphere2 = openmc.Sphere(r=20.0)
surf_cy = openmc.ZCylinder(r=5) surf_up_zp = openmc.ZPlane(z0=30)
surf_low_zp = openmc.ZPlane(z0=-30)
hollow_sph = ( +surf_sphere1 & -surf_sphere2)
capped_cy = ( -surf_cy & -surf_up_zp & +surf_low_zp)
cell = openmc.Cell(region = hollow_sph | capped_cy)
cell_sphere.fill = steel
Making geometry
Making volumes & (intersection)
surf_sphere1 = openmc.Sphere(r=10.0)
surf_sphere2 = openmc.Sphere(r=20.0)
surf_cy = openmc.ZCylinder(r=5) surf_up_zp = openmc.ZPlane(z0=30)
surf_low_zp = openmc.ZPlane(z0=-30)
hollow_sph = ( +surf_sphere1 & -surf_sphere2)
capped_cy = ( -surf_cy & -surf_up_zp & +surf_low_zp)
cell = openmc.Cell(region = hollow_sph & capped_cy)
cell_sphere.fill = steel
Making geometry
Making volumes ~ (complement)
surf_sphere1 = openmc.Sphere(r=10.0)
surf_sphere2 = openmc.Sphere(r=20.0)
surf_cy = openmc.ZCylinder(r=5) surf_up_zp = openmc.ZPlane(z0=30)
surf_low_zp = openmc.ZPlane(z0=-30)
hollow_sph = ( +surf_sphere1 & -surf_sphere2)
capped_cy = ( -surf_cy & -surf_up_zp & +surf_low_zp)
cell = openmc.Cell(region = hollow_sph ~ capped_cy)
cell_sphere.fill = steel
Task 1
Cross section plotting
Plot reactions for isotopes, elements or materials
Task 2
Building and visualizing the model geometry
Construct geometry and view it in 2D or 3D
Task 3
Visualizing neutron tracks
Paraview hints
Paraview hints
Paraview hints
Paraview hints
Paraview hints
Paraview hints
Paraview hints
Paraview hints
Paraview hints
Paraview hints
Paraview hints
Paraview hints
Paraview hints
Paraview hints
Paraview hints
Paraview hints
Paraview hints
Task 3
Visualizing neutron tracks
Task 4
Finding the neutron flux
Task 5
Finding the neutron spectra
Task 6
Finding the tritium production
Task 7
Finding the neutron damage
The DPA tally will just produce a single number
Task 8
Optimize a breeder blanket
for tritium production
Neutronics workshop
By Jonathan Shimwell
Neutronics workshop
Fusion relevant with OpenMc
- 1,520