mcdc.Material#

class mcdc.Material(name: str = '', nuclide_composition: dict[str, float] | None = None, element_composition: dict[str, float] | None = None, temperature: float = 293.6, neutron_multigroup: NeutronMultigroupData | None = None)#

Particle-interaction properties assigned to simulation cells.

Parameters:
  • name (str, optional) – User-facing material name.

  • nuclide_composition (dict of str to float, optional) – Nuclide names and atomic densities in atoms/(barn cm).

  • element_composition (dict of str to float, optional) – Element symbols and atomic densities in atoms/(barn cm).

  • temperature (float, optional) – Material temperature in kelvin. Each nuclide uses the closest temperature available in the data library.

  • neutron_multigroup (NeutronMultigroupData, optional) – Groupwise macroscopic cross sections and related data for neutron multigroup transport, where neutron energy is represented by discrete groups. When supplied with a native composition, its explicit energy_grid defines the energy range where the multigroup treatment applies. In hybrid transport, native neutron data is used outside that range when present; without native composition, the material has zero interaction cross section.

Notes

A nuclide or element composition connects the material to MC/DC’s native transport physics through its data libraries. Particle-specific data can augment native interaction data or support specialized and reduced transport treatments. NeutronMultigroupData describes discrete neutron energy groups and their macroscopic interaction, production, and timing data. It can be used alone or alongside a native composition.

Examples

Define uranium dioxide from nuclide atomic densities:

>>> import mcdc
>>> fuel = mcdc.Material(
...     name="UO2",
...     nuclide_composition={"U235": 5.0e-4, "U238": 2.2e-2, "O16": 4.5e-2},
...     temperature=293.6,
... )

Define a one-group multigroup material:

>>> import numpy as np
>>> absorber = mcdc.Material.multigroup(
...     name="Absorber", capture=np.array([1.0])
... )

Attach native data and multigroup neutron data to the same material:

>>> hybrid_fuel = mcdc.Material(
...     name="Hybrid fuel",
...     nuclide_composition={"U235": 5.0e-4, "U238": 2.2e-2},
...     neutron_multigroup=mcdc.NeutronMultigroupData(
...         capture=np.array([0.10]),
...         fission=np.array([0.20]),
...         nu_p=np.array([2.50]),
...         energy_grid=np.array([1.0e-5, 20.0e6]),
...     ),
... )
classmethod multigroup(*, name: str = '', capture: ArrayLike | None = None, scatter: ArrayLike | None = None, fission: ArrayLike | None = None, nu_s: ArrayLike | None = None, nu_p: ArrayLike | None = None, nu_d: ArrayLike | None = None, chi_p: ArrayLike | None = None, chi_d: ArrayLike | None = None, speed: ArrayLike | None = None, decay_rate: ArrayLike | None = None, energy_grid: ArrayLike | None = None, energy_representation: str | int = 'midpoint') Self#

Create a material for neutron multigroup transport.

The supplied arguments define groupwise macroscopic interaction and production data. This helper stores them in NeutronMultigroupData and attaches the data to the material. Macroscopic cross sections use cm^-1, group speeds use cm/s, precursor decay rates use s^-1, and explicit physical energy boundaries use eV. Omitting energy_grid creates a zero-valued placeholder that is valid only when every material with neutron multigroup data also omits its energy grid.