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: str = None, endf8Label: str = None, aceLabel: 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.
-
_genENDFB8Label
()[source]¶ Generate the ENDF/B-VIII.0 label.
Several ad-hoc assumptions are made in converting this object to a ENDF/B-VIII label which may not apply in all cases.
It is believed that these rules cover most ENDF TSLs listed in Parsons, LA-UR-18-25096, https://mcnp.lanl.gov/pdf_files/la-ur-18-25096.pdf
Unfortunately, the ace labels are not as easily derived.
If nuclideBases is length one and contains a
NaturalNuclideBase
, then the name will be assumed to beElement_in_compoundName
If nuclideBases is length one and is a NuclideBase, it is assumed to be an isotope like Fe-56 and the label will be (for example) 026_Fe_056
If nuclideBases has length greater than one, the compoundName will form the entire of the label. So, if Si and O are in the bases, the compoundName must be
SiO2-alpha
in order to gettsl-SiO2-alpha.endf
as a endf8 label.
-
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.
Warning
This gets called automatically during init, so don’t call it unless you know what you’re doing.