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.

Warning

This gets called automatically during init, so don’t call it unless you know what you’re doing.