Neutron and Photon interaction cross sections
Material creation
Particle sources
Constructive Solid Geometry (CSG)
Tallies (heat, tritium breeding ratio, damage, flux)
Neutron activation
We are going to track a single neutron through a fusion reactor and see what interactions happen along the way.
This is exactly what a Monte Carlo code like OpenMC does, repeated for millions of neutrons, using random numbers to sample each interaction.
We track a neutron through the reactor and at each step sample what happens next.
Every interaction is governed by nuclear data and sampled from probability distributions.
We take a slice through the radial build of a tokamak and track our neutron through it.
Built with Paramak.
The neutron is travelling through a plasma of deuterium and tritium ions. Does it interact before escaping?
The distance to the next interaction is sampled with a random number. This sampling is the heart of the Monte Carlo method.
where:
The first wall material changes how the neutron behaves.
Assuming a first wall that is 10 cm thick.
Mean free path:
Each of the 11 nuclides in the steel has a different (n,total) interaction cross section.
The total neutron cross section of each nuclide at 14 MeV decides which nuclide is hit.
The Fe56 nuclide has 82 reactions which the neutron can undergo.
Finding the cross sections of each reaction at 14 MeV gives their relative probability.
The resulting scattering angle is transformed into the laboratory frame to obtain the new neutron direction.
A 14 MeV neutron undergoing a 60° scatter reduces in energy depending on the mass of the target:
where is the target-to-neutron mass ratio.
The breeder zone should:
The interactions that have neutrons as products also have nuclear data for energy and angular distributions.
The nuclear data provides equation fits with coefficients, or tabular data, so the code can transport the products correctly.
Results are impacted by the geometry as well as the material options. Changing the first wall thickness would produce a different winner.
* best value in column
These responses cannot be read from a table in general, they need to be simulated. The rest of the workshop builds up the tools to do exactly that.
Install Python
Clone or download the repository
pip install the dependencies
download the nuclear data
Navigate to the URL in the terminal
Detailed instructions are on GitHub
image source xkcd.com
Collection of Jupyter notebooks
Separate task folder for each topic
Learning outcomes for each task
Simulation outputs include:
If you are not already in the repository directory then cd neutronics-workshop
cd neutronics-workshop
Run the jupyter lab command to launch Jupyter
jupyter lab
Click on the tasks folder within Jupyter
Probability of interaction is characterised by the microscopic cross-section (σ). It is the effective size of the nucleus.
Cross section data is key to the neutronics workflow and provide us with the likelihood of a particular interaction.
Cross sections can be measured experimentally with monoenergetic neutrons.
Availability of experimental data varies for different reactions and different isotopes.
Typically the experimental data is then interpreted to create evaluation libraries, such as ENDF, JEFF, JENDL, CENDL.
Source IAEA nuclear data services
Cross section evaluations exist for:
A list of reactions available in OpenMC is here
For example:
Neutronics codes require the isotopes and the number density.
This can be provided with different combinations of density units, isotope/element concentration and weight or atom fractions.
Simple material construction from nuclides.
mat2 = openmc.Material() mat2.add_nuclide('Li6', 0.0759*2) mat2.add_nuclide('Li7', 0.9241*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)
Simpler material construction from elements.
import openmc mat1 = openmc.Material() mat1.add_element('H', 2) mat1.add_element('O', 1) mat1.set_density('g/cm3', 2.01)
Simple enriched material construction from elements.
import openmc mat1 = openmc.Material() mat1.add_element('Li', 4, enrichment_target='Li6', enrichment=60) mat1.add_element('Si', 1) mat1.add_element('O', 4) mat1.set_density('g/cm3', 2.01)
The simplest geometry is a single surface and a cell defined as below (-) that surface.
import openmc surface_sphere = openmc.Sphere(r=10.0) region_inside_sphere = -surface_sphere cell_sphere = openmc.Cell(region=region_inside_sphere) cell_sphere.fill = steel
Cells can also be constrained by multiple surfaces. This example is above (+) one surface and (&) below (-) another
import openmc surf_sphere1 = openmc.Sphere(r=10.0) surf_sphere2 = openmc.Sphere(r=20.0) between_spheres = +surf_sphere1 & -surf_sphere2 cell_sphere = openmc.Cell(region=between_spheres) cell_sphere.fill = steel
The outer most surface of the model should have a boundary_type set to "vacuum" to indicate that neutrons should not be tracked beyond this surface.
boundary_type
"vacuum"
import openmc surf_sphere = openmc.Sphere(r=10.0, boundary_type="vacuum") region_inside_spheres = -surf_sphere cell_inside_spheres = openmc.Cell(region=region_inside_spheres) cell_sphere.fill = steel
Constructive Solid Geometry (CSG) implementation in OpenMC has the following surface types.
Image source Paramak
OpenMC also supports:
For more complex 3D geometry DAGMC can be used which makes use of a meshed geometry to transport particles.
Neutron and photon sources have distributions for:
Visualization of the source term helps check the simulation is correct
The spatial distribution of MCF plasma covers a larger area compared to ICF'
.
The energy distribution of MCF has less neutron scattering compared to ICF. Neutrons are:
Plot created with fusion-neutron-utils https://github.com/fusion-energy/fusion_neutron_utils
image source slb.com
Image source tend.web.psi.ch
The average logarithmic energy decrement (or loss) per collision () is related to the atomic mass () of the nucleus
The average number of collisions required to reduce the energy of the neutron from to .
If is 14MeV and is 0.025eV
We should account for the likelihood of scattering.
The number density of the nucleus (ND) and the microscopic cross section (σ) combine to produce the macroscopic scattering cross section (Σ)
A grid of voxels / mesh elements can be overlaid on a geometry and the neutron response can be tallied in each voxel.
The mesh is typically 3D and defined with a top right and lower left coordinate.
Today simulation on CAD in OpenMC use: DAGMC for surface mesh geometry DAGMC for volume mesh (unstructured mesh) https://svalinn.github.io/DAGMC/
LibMesh for surface mesh LibMesh for volume mesh (unstructured mesh) https://libmesh.github.io/
In the future XDG https://github.com/pshriwise/xdg
It is possible to automatically convert clean CAD into DAGMC geometry any use this in transport
Convert a step file to a DAGMC file Convert a CAD object to a DAGMC file
Try: Task 16 part 1 Task 16 part 2
In addition to slice plots, openmc plotter, openmc geometry plot there are two options that are specifically just for DAGMC geometry viewing.
mbconvert (part of moab) with paraview
stellarvisa https://github.com/Thea-Energy/stellarvista
After creating the geometry
Run particle transport with a meshed CAD geometry
Try: Task 17 part 1
Creation of a vtk file with tets was
This allows us to simulate unstructured mesh geometry
Try: Task 18 part 1
Replace the "your code here" sections to make the best reactor.
your code here
Chose the best options from a selection of materials.
Refine the design to:

[](https://star-history.com/#openmc-dev/openmc&Date)