armi.nucDirectory.thermalScattering module¶
Handle awareness of Thermal Scattering Laws.
Scattering characteristics of thermal neutrons are often significantly different between a free atom and one bound in a particular molecule. Nuclear data libraries often have special tables to account for the bound states. These data are commonly represented as S(alpha, beta) tables.
Here we provide objects representing the thermal scattering law (TSL) information.
We expect them to be most useful as class attributes on Material
subclasses
to inform physics solvers that support thermal scattering of the TSLs. See
Graphite
for an example.
We do not provide special versions of various NuclideBases like C12 because of potential errors in choosing one over the other
The information contained in here is based on Parsons, LA-UR-18-25096, https://mcnp.lanl.gov/pdf_files/la-ur-18-25096.pdf
Scattering law data are currently available for a variety of classifications:
Element in Compound (H in H2O, Be in BeO)
Element in structure (C in Graphite, Be in metal)
Can be separated as crystalline, 30% porous, 10% porous, etc.
Element in spin isomer (para H, ortho H, para D, ortho D, etc.)
Compound in phase (solid CH4, liquid CH4, SiO2-alpha, SiO2-beta).
Just compound (benzene)
Just isotope (Fe56, Al27)
The labels for these vary across evaluations (e.g. ENDF/B-VII, ENDF/B-VIII, etc.). We provide ENDF/B-III.0 and ACE labels. Other physics kernels will have to derive their own labels as appropriate in client code.
Like NuclideBase and Element, we want to have only one ThermalScattering instance
for each TSL, so we use a module-level directory called byNbAndCompound
. This improves
efficiency and allows better cross-referencing when thousands of material instances
would otherwise have identical instances of these.
Thus, in practice, users should rarely instantiate these on their own.
- class armi.nucDirectory.thermalScattering.ThermalScattering(nuclideBases: Union[armi.nucDirectory.nuclideBases.INuclide, Tuple[armi.nucDirectory.nuclideBases.INuclide]], compoundName: Optional[str] = None, endf8Label: Optional[str] = None, aceLabel: Optional[str] = None)[source]¶
Bases:
object
Thermal Scattering data.
- Parameters
nuclideBases (INuclide or tuple of INuclide) – One or more nuclide bases whose existence would trigger the inclusion of the TSL. Generally items here will be a NaturalNuclideBase like
nb.byName["C"]
for Carbon but it is a tuple to capture, e.g. the C and H in methane.compoundName (str, optional) – Label indicating what the subjects are in (e.g.
"Graphite"
or"H2O"
. Can be left off for, e.g. Fe56.endf8Label (str, optional) – Label for endf8 evaluation
aceLabel (str, optional) – ace label
- getSubjectNuclideBases()[source]¶
Return all nuclide bases that could be subject to this law.
In cases where the law is defined by a NaturalNuclideBase, all potential isotopes of the element as well as the element it self should trigger it. This helps handle cases where, for example, C or C12 is present.
- armi.nucDirectory.thermalScattering.factory()[source]¶
Generate the
ThermalScattering
instances.The logic for these is a bit complex so we skip reading a text file and code it up here.
This is called by the nuclideBases factory since it must ALWAYS be re-run when the nuclideBases are rebuilt.
See also
armi.nucDirectory.nuclideBases.factory
Calls this during ARMI initialization.
This gets called automatically during init, so don’t call it unless you know what you’re doing.