Cross Sections in MCNP

Managing nuclear data for accurate simulations

What you'll learn

After the first pin · 5 / 1412 min read
  • Read a ZAID suffix such as .80c as a pointer into a processed library — check your xsdir, and remember that .80c is ENDF/B-VII.1, not VIII.0.
  • Match temperature with a pre-broadened suffix, then use TMP and DBRC only for what each of those cards actually does.
  • Pair an S(α,β) table with the same-generation neutron library — .20t with .80c, .10t with .70c.
  • Name the neutron and thermal tables the pin cell uses, and why they are paired.

Before you start

What ACE data and xsdir are

An m card names nuclides, but the physics comes from ACE tables — continuous-energy cross sections processed from an evaluated library and registered in an xsdir (or xsdir_mcnp) file on the machine that runs the job. MCNP looks up each ZAID in that directory; if the suffix is missing or points at a file you do not have, the run stops before transport begins.

Choosing a library therefore means choosing which processed files your deck will load. That choice affects resonance shapes, thermal scattering, and which temperatures are available without further approximation. The Material Cards lesson covers how those names sit on an m card; this page is about what the suffixes resolve to.

What the suffix actually points at

The two digits before the class letter identify a processed library, and they encode the evaluation and the temperature together. They are not a version number. In the ACE files LANL publishes with MCNP6:

mcnp
c The same nuclide from three LANL-published libraries
m1    92235.00c  1.0    $ U-235, ENDF/B-VIII.0 (Lib80x) at 293.6K
m2    92235.80c  1.0    $ U-235, ENDF/B-VII.1 (ENDF71x) at 293.6K
m3    92235.70c  1.0    $ U-235, ENDF/B-VII.0 (ENDF70)  at 293.6K

c ZAID format: ZZAAA.XXc
c ZZ  = atomic number (92 for uranium)
c AAA = mass number (235)
c XX  = library identifier — evaluation AND temperature together
c c   = continuous energy

Read the two-digit identifier as a pointer into a specific processed library, not as a version number. In the LANL files that ship with MCNP6, .00c through .06c are ENDF/B-VIII.0, .80c through .86c are ENDF/B-VII.1, and .70c through .76c are ENDF/B-VII.0. The resemblance between .80c and the name ENDF/B-VIII.0 is a coincidence that catches people out constantly — .80c is VII.1. The second digit of the identifier is a temperature index on that ladder, so .71c is VII.0 at 600 K, not "VII.1".

Other processing centres number their files differently, so the mapping is not portable: KAERI issues ENDF/B-VI.8 as .80c, and JAEA ships JENDL-5 at .20c. Your xsdir is the only authority for the machine in front of you, and the MCNP manual declines to publish a mapping at all. The NRDP library reference collects the LANL numbering in one table.

Two digits is the common case, not the rule. The manual defines the library identifier as a two-or-more-digit integer — 1001.810h is a real proton table — and MCNP 6.3.1 also accepts a named identifier with an extra period before the class letter, as in U-238.Lib80x-293.6K.c, which spells out the library and temperature instead of encoding them in a two-digit index (manual §1.2.3, Table 1.2). The class letter at the end has fourteen legal values (Table B.1): c continuous-energy neutron, t thermal S(α,β), p photoatomic, u photonuclear, h proton, e electron, and so on — there is no n.

Rather than editing every ZAID when you switch libraries, set a default. NLIB on an m card changes the default neutron library for that material, and an M0 card applies its keywords to every other material in the deck. A ZAID that names its own suffix still wins over both — see Material Cards for the worked M0 example.

Temperature: library suffix, TMP, and DBRC

Nuclear cross sections depend on material temperature because of Doppler broadening. MCNP reaches that physics through three separate mechanisms, and it helps to keep them apart: the library suffix carries Doppler-broadened resonances baked in during processing; the TMP card rescales only free-gas scattering; and DBRC corrects resonance elastic scattering for heavy nuclides in the epithermal range.

Pre-broadened data is the preferred route when a table exists at your temperature. The resonance shapes were broadened during processing rather than approximated at run time.

mcnp
c Fuel at operating temperature (600K)
c UO2 weight fractions (4 wt% enriched): sum = 1.0
m1    92235.81c  -0.035   $ U-235 at 600K
      92238.81c  -0.847   $ U-238 at 600K
      8016.81c   -0.118   $ O-16 at 600K

c Room temperature components (293.6K)
c Natural zirconium (atom fractions)
m2    40090.80c  0.5145   $ Zr-90 cladding
      40091.80c  0.1122   $ Zr-91
      40092.80c  0.1715   $ Zr-92
      40094.80c  0.1738   $ Zr-94
      40096.80c  0.0280   $ Zr-96

c Pre-broadened temperatures in ENDF71x (ENDF/B-VII.1):
c .80c = 293.6K (room temperature)
c .81c = 600K (typical moderator/coolant temperature)
c .82c = 900K (typical fuel temperature)
c .83c = 1200K (hot fuel / accident conditions)
c .84c = 2500K | .85c = 0.1K | .86c = 250K
c Lib80x (ENDF/B-VIII.0) uses the same ladder at .00c-.06c

Use .81c for hot coolant and .82c.83c for fuel when you are on the ENDF71x ladder. Fractions need not sum to 1.0; MCNP normalizes them. Mixing evaluations inside one material is legal but rarely what you meant.

When no pre-broadened table sits at your temperature, TMP is the fallback — and it is narrower than its name suggests. It only rescales the free-gas scattering model; resonance shapes stay at whatever temperature the library was processed at.

mcnp
c TMP card: one kT value per cell, in MeV
c   kT(MeV) = 8.617e-11 × T(K)
c   800K → 6.90e-8 | 600K → 5.17e-8 | 293.6K → 2.53e-8
TMP  6.90e-8  5.17e-8  2.53e-8

c Enable Doppler-broadening rejection correction
c   endf= picks the 0-K scattering data set and is required with isos=
c   isos= takes bare target identifiers, never table identifiers
DBRC  endf=71 emax=2.10e-4 isos=U-235 U-238

The data-card form of TMP takes one entry per cell in the problem, in cell order — not a single global value. A zero entry on a non-void cell is a fatal error. And the card runs opposite to most people's intuition: omit it and MCNP adjusts free-gas scattering back toward 293.6 K, without touching resonances. A deck built on .83c data with no TMP cards is therefore inconsistent, and the manual asks you to set TMP on every cell whose library is not at room temperature.

DBRC is a separate correction to the resonance elastic scattering kernel for heavy nuclides, and it sharpens Doppler feedback in hot fuel. Two syntax points trip people up: endf= selects the 0-K data set (71 or 80) and is required whenever you list isotopes, and isos= wants bare identifiers such as U-238 or 92238 — appending .80c there is not valid.

Thermal scattering pairs with the neutron library

Below roughly 10 eV a neutron can no longer treat a hydrogen nucleus as a free particle at rest: the nucleus is bound into a molecule, and scattering has to account for the molecular and lattice modes it can excite. An mt card supplies that treatment by naming an S(α,β) table. Always attach one for moderator materials — leaving it off is a silent error, covered in detail on Material Cards.

mcnp
c Water moderator with thermal scattering
m1    1001.80c  2        $ Hydrogen in H2O
      8016.80c  1        $ Oxygen in H2O
mt1   lwtr.20t           $ Light water S(α,β) at 293.6K

c Graphite moderator
m2    6000.80c  1        $ Carbon
mt2   grph.20t           $ Graphite S(α,β)

c Heavy water
m3    1002.80c  2        $ Deuterium in D2O
      8016.80c  1        $ Oxygen in D2O
mt3   hwtr.20t           $ Heavy water S(α,β)

c Polyethylene shielding
m4    1001.80c  4        $ Hydrogen in (CH2)n
      6000.80c  2        $ Carbon in (CH2)n
mt4   poly.20t           $ Polyethylene S(α,β)

c Temperature-dependent alternatives (use ONE mt per material):
c mt1   lwtr.21t         $ Light water at 350K (pick one)
c mt1   lwtr.26t         $ Light water at 600K (pick one)

Keep the thermal and neutron libraries from the same generation. ENDF71SaB runs .20t at 293.6 K up to .28t at 800 K and pairs with .80c; the older endf70sab covers the same ladder at .10t.18t and pairs with .70c. Swap one generation and you should swap the other.

Two wrinkles worth knowing before you switch a deck to ENDF/B-VIII.0. Its thermal set renames the tables, so lwtr becomes h-h2o and poly becomes h-poly. And it dropped elemental evaluations, so 6000 for natural carbon exists in .80c but not in .00c — graphite has to be built from 6012 and 6013 instead.

Unresolved resonances and photonuclear data

Two PHYS controls matter once the libraries are chosen: unresolved-resonance probability tables for neutrons, and photonuclear reactions for coupled photon transport.

mcnp
c Probability tables for unresolved resonance region
c Controlled via the PHYS:n card (3rd entry, iunr):
c   iunr=0 (default) = probability tables ON
c   iunr=1           = probability tables OFF
PHYS:n  20  0  0           $ Probability tables on (default)
c
c Essential for fast-spectrum and intermediate-energy
c reactor calculations where unresolved resonances
c affect self-shielding.

Probability table sampling in the unresolved resonance region is on by default (iunr = 0 on the PHYS:n card); set iunr = 1 only if you need to disable it. The tables matter most for fast and intermediate-energy calculations where unresolved resonances affect self-shielding.

mcnp
c Photon production from neutron reactions is automatic
c in MODE n p. No additional cards are needed.
c
c LCA/LCB control intranuclear cascade model parameters
c for high-energy (>150 MeV) physics, not photon production.

c Enable photonuclear reactions
PHYS:p  20  0  0  -1     $ Photonuclear ON, analog (4th entry ispn=-1)

In MODE n p, photon production from neutron reactions is automatic. Turn on photonuclear reactions with PHYS:p when the application needs them — shielding and activation studies are the usual cases.

The pin cell's nuclear data

The running example for this path is a PWR pin cell. Its four materials are written on Material Cards; the nuclear data they load is deliberate and paired. Every continuous-energy ZAID uses .70c (ENDF/B-VII.0 at 293.6 K), and the water kernel is lwtr.10t — endf70sab at the same temperature.

mcnp
c Pin-cell nuclear data (ENDF/B-VII.0 + endf70sab)
m1    92235.70c   0.045   $ U-235
      92238.70c   0.955   $ U-238
      8016.70c    2.0
m4    1001.70c    2.0
      8016.70c    1.0
mt4   lwtr.10t            $ binds hydrogen; pairs with .70c

That pairing is the same rule as above, applied to VII.0 instead of VII.1: neutron .70c with thermal .10t, not .20t. The teaching examples earlier on this page use .80c / .20t because that is the ladder most published decks show; the pin keeps VII.0 so the guide deck matches mcnp-examples/example_pin/pin_cell.i line for line. See Example: Pin Cell for the full input.

The pin is at room-temperature library data, so it does not need hot-fuel suffixes or a TMP card. When you move the same geometry to operating temperature, change the fuel (and usually cladding and moderator) suffixes on the temperature ladder, attach TMP for every non-room-temperature cell, and consider DBRC for U-238 in the fuel.

Try it: ZAID format

A ZAID has three parts and all three are required: ZAAA for the nuclide, two digits for the evaluation, and one letter for the class of data. Drop the letter and MCNP cannot tell a continuous-energy neutron table from a thermal one, so it stops rather than guessing.

Try it yourself — zaids.i
Two entries are missing their class letter. Neutron continuous-energy data is c, so 92238.71c is the pattern to follow.
2 warningsChecked by the OWEN rule set

The letters you will meet most often are c for continuous-energy neutron data, t for the S(α,β) tables above, p for photoatomic, and u for photonuclear. The full list is fixed by MCNP, so a suffix like .50j cannot exist no matter what a paper says. The two digits before the letter identify the evaluation and the temperature together, which is why .70c and .71c are not interchangeable even though both are ENDF/B-VII.0 — one is 293.6 K and the other is 600 K.

Card semantics on this page follow MCNP6.3.1 Theory & User Manual (LA-UR-24-24602 Rev. 1), §1.2.3 Table Identifiers, §2.3.2 Neutron Interaction Data, §2.3.6 Neutron Thermal S(α,β) Tables, §5.7.7 DBRC: Doppler Broadening Resonance Correction and §B XSDIR Data Directory File.

The manual deliberately does not map suffixes to evaluations — §1.2.3 sends you to your own xsdir. The numbering used here is LANL's, confirmed by Listing 5.26, which pairs endf=71 with a .83c table.

Full reference list on the attribution page.

Check yourself

  • Read a suffix such as .80c as a library pointer, and say where to look when you do not know?
  • Pick a pre-broadened suffix that matches the temperature of each component?
  • Explain what TMP does — and does not — and when DBRC matters?
  • Attach the right S(α,β) table and keep it paired with the neutron library generation?
  • Name the pin cell's neutron suffix and water thermal table?