mcdc.NeutronMultigroupData#

class mcdc.NeutronMultigroupData(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')#

Groupwise macroscopic interaction data for neutron multigroup transport.

Neutron multigroup transport represents neutron energy with discrete groups and describes interactions using groupwise cross sections, production spectra, speeds, and delayed-precursor data. For a multigroup-only material, mcdc.Material.multigroup() provides the convenient entry point. Construct NeutronMultigroupData directly when a material needs an explicit physical energy grid, including when attaching it alongside a native composition.

Parameters:
  • capture (array_like of float, optional) – Macroscopic capture cross section in cm^-1 for each incoming energy group, with shape (G,).

  • scatter (array_like of float, optional) – Macroscopic scattering-production matrix in cm^-1 with shape (G, G), indexed as scatter[g_out, g_in]. Column sums define the scattering cross section for each incoming group. Columns are normalized internally to form the scattering spectrum.

  • fission (array_like of float, optional) – Macroscopic fission cross section in cm^-1 for each incoming energy group, with shape (G,). Supplying fission requires at least one of nu_p or nu_d.

  • nu_s (array_like of float, optional) – Mean number of neutrons produced per scattering event in each incoming group, with shape (G,). Defaults to one.

  • nu_p (array_like of float, optional) – Mean prompt-fission yield for each incoming group, with shape (G,).

  • nu_d (array_like of float, optional) – Mean delayed-fission yield with shape (J, G), indexed as nu_d[j, g_in]. Its first dimension determines the number J of delayed precursor groups.

  • chi_p (array_like of float, optional) – Prompt-fission spectrum. Shape (G,) applies one outgoing spectrum to every incoming group. Shape (G, G) is indexed as chi_p[g_out, g_in]. Required when nu_p is supplied and G > 1.

  • chi_d (array_like of float, optional) – Delayed-fission spectrum with shape (G, J), indexed as chi_d[g_out, j]. Required when nu_d is supplied and G > 1.

  • speed (array_like of float, optional) – Neutron speed in cm/s for each energy group, with shape (G,). Defaults to one.

  • decay_rate (array_like of float, optional) – Decay constant in s^-1 for each delayed precursor group, with shape (J,). Defaults to infinity.

  • energy_grid (array_like of float, optional) – Physical energy-group boundaries in eV with shape (G + 1,). User-supplied boundaries must be strictly increasing, and group g spans energy_grid[g] <= E < energy_grid[g + 1]. The default is a zero-valued placeholder used only when physical energy mapping is not required.

  • energy_representation (str or int, optional) – Policy used to reconstruct continuous energy from a group when a physical energy grid participates in transport. "midpoint" uses the arithmetic midpoint, "log_midpoint" uses the geometric midpoint, "uniform" samples uniformly in energy, and "log_uniform" samples uniformly in log-energy. The default is "midpoint". Only the default "midpoint" placeholder is accepted when energy_grid is omitted. Logarithmic policies require positive boundaries. The corresponding NEUTRON_MULTIGROUP_ENERGY_* integer constants are also accepted.

Notes

G is inferred from capture, scatter, or fission. An explicit energy grid is required whenever simulation transport needs to map continuous neutron energy to material-local groups.

Examples

Construct one-group data with capture, scattering, and prompt fission:

>>> import mcdc
>>> import numpy as np
>>> neutron_multigroup = mcdc.NeutronMultigroupData(
...     capture=np.array([1.0 / 3.0]),
...     scatter=np.array([[1.0 / 3.0]]),
...     fission=np.array([1.0 / 3.0]),
...     nu_p=np.array([2.3]),
...     energy_grid=np.array([1.0e-5, 20.0e6]),
... )

Construct data with two energy groups. Scattering is indexed by outgoing then incoming group:

>>> two_group = mcdc.NeutronMultigroupData(
...     capture=np.array([0.1, 0.2]),
...     scatter=np.array([
...         [1.0, 2.0],
...         [3.0, 0.0],
...     ]),
...     nu_s=np.array([1.1, 1.2]),
...     energy_grid=np.array([1.0e-5, 1.0, 20.0e6]),
... )

Construct two-group fission data with two delayed precursor groups. The delayed yield is indexed by precursor then incoming energy group, while the delayed spectrum is indexed by outgoing energy then precursor group:

>>> multiple_precursors = mcdc.NeutronMultigroupData(
...     fission=np.array([0.2, 0.3]),
...     nu_d=np.array([
...         [0.1, 0.2],
...         [0.3, 0.4],
...     ]),
...     chi_d=np.array([
...         [1.0, 3.0],
...         [3.0, 1.0],
...     ]),
...     decay_rate=np.array([0.01, 0.02]),
... )