The aim of this project is to facilitate the creation of materials for use in neutronics codes such as OpenMC, Serpent, MCNP and Fispact.
The hope is that by having this collection of materials it is easier to reuse materials across projects, use a common source with less room for user error.
To use the code you will need to have OpenMC installed OpenMC
The code can be easily installed using pip
pip install neutronics_material_maker
Materials for using in neutronics codes have two main aspects; a list of isotopes along with their abundance and the material density.
This code contains an internal collection of materials with their isotopes abundances and densities (sometimes temperature, pressure and enrichment dependant), but you may also import your own materials collection.
Each of the materials available is stored in an internal dictionary that can be accessed using the AvailableMaterials()
command.
import neutronics_material_maker as nmm
all_materials = nmm.AvailableMaterials()
print(all_materials.keys())
Here is an example that access a material from the internal collection called eurofer which has about 60 isotopes of and a density of 7.78g/cm3.
import neutronics_material_maker as nmm
my_mat = nmm.Material('eurofer')
my_mat.openmc_material
For several materials within the collection the temperature and the pressure impacts the density of the material. The neutronics_material_maker adjusts the density to take temperature and the pressure into account when appropriate. Densities are caluclated either by an material specific formula (for example FLiBe) or using CoolProps (for example coolants)
import neutronics_material_maker as nmm
my_mat1 = nmm.Material('H2O', temperature_in_C=300, pressure_in_Pa=15e6)
my_mat1.openmc_material
For several materials within the collection the density is adjusted when the material is enriched. For breeder blankets in fusion it is common to enrich the lithium 6 content.
Lithium ceramics used in fusion breeder blankets often contain enriched lithium-6 content. This slightly change in density is accounted for by the neutronics_material_maker
import neutronics_material_maker as nmm
my_mat2 = nmm.Material('Li4SiO4', enrichment=60)
my_mat2.openmc_material
Materials can also be mixed together using the MultiMaterial class. This accepts a list of neutronics_material_maker.Materials or openmc.Material objects along with the material fractions (fracs).
import neutronics_material_maker as nmm
my_mat1 = nmm.Material('Li4SiO4', enrichment=60)
my_mat2 = nmm.Material('Be12Ti')
my_mat3 = MultiMaterial(materials=[my_mat1, my_mat2],
fracs=[0.4, 0.6],
percent_type='vo')
my_mat3.openmc_material
Assuming you have a JSON file saved as mat_lib.json
containing materials defined in the same format as the exisiting materials then you can import this file into the package using AddMaterialFromFile()
. Another option is to use AddMaterialFromDir()
to import a directory of json files
import neutronics_material_maker as nmm
nmm.AddMaterialFromFile('mat_lib.json')
nmm.AvailableMaterials() # this will print the new larger list of materials
You can export to OpenMC, Serpent, MCNP and Fispact with the appropiate arguments
import neutronics_material_maker as nmm
my_mat = nmm.Material('tungsten')
my_mat.openmc_material()
my_mat.mcnp_material(id=1, zaid_suffix='.31c)
my_mat.serpent_material(zaid_suffix='.31c))
my_mat.fispact_material(volume=100)
Further examples can be found in the UKAEA OpenMC workshop task 11 and in the Documentation