Depletion Calculations in OpenMC

Introduction to Depletion

Depletion calculations track how material compositions change over time due to nuclear reactions. Applications include:

Applications

  • Fuel burnup analysis in power reactors
  • Isotope production in research reactors
  • Waste composition predictions
  • Reactor cycle length estimation

Prerequisites

Before setting up depletion calculations, ensure you have:

  • A working transport model (geometry, materials, settings)
  • Nuclear data with decay and fission yield information
  • Materials marked as depletable

Basic Depletion Setup

Depletion setup has three main steps:

1. Create Burnable Materials

python
# Create depletable UO2 fuel
fuel = openmc.Material(name='UO2')
fuel.set_density('g/cm3', 10.4)
fuel.add_nuclide('U235', 0.04)
fuel.add_nuclide('U238', 0.96)
fuel.add_element('O', 2.0)
fuel.depletable = True  # Enable depletion

materials = openmc.Materials([fuel])

Tutorial snippet — no separate file in examples repo

2. Set Up Transport Model

python
# Create OpenMC model
model = openmc.Model(geometry, materials, settings)

# Create operator for coupled calculations
# All materials with material.depletable = True are depleted
operator = openmc.deplete.CoupledOperator(
    model,
    normalization_mode='fission-q'
)

Tutorial snippet — no separate file in examples repo

3. Run Depletion Calculation

python
# Define power and timesteps
power = 1.0e6  # 1 MW
timesteps = [1.0, 5.0, 10.0]  # days

# Create and run integrator
integrator = openmc.deplete.CECMIntegrator(
    operator,
    timesteps,
    power=power,
    timestep_units='d'
)
integrator.integrate()

Tutorial snippet — no separate file in examples repo

Note: Ensure you have appropriate nuclear data installed, including a depletion chain file containing decay and fission yield data.

Advanced Features

Integration Methods

  • CECMIntegrator: Best accuracy
  • CF4Integrator: Faster, less accurate
  • CELIIntegrator: Alternative algorithm
  • PredictorIntegrator: Predictor-only
  • SICELIIntegrator: Stochastic implicit CELI

Normalization Options

  • Power normalization (MW)
  • Source rate (n/sec)
  • Custom power distributions
  • Time-dependent power

Example: Advanced Configuration

python
# Custom configuration example
integrator = openmc.deplete.CECMIntegrator(
    operator,
    timesteps,
    power=None,
    power_density=100.0,     # W/cm^3
    timestep_units='d'
)

# Run with progress tracking
integrator.integrate()

Tutorial snippet — no separate file in examples repo

Results Analysis

Depletion results include time-dependent k-effective and nuclide concentrations:

python
# Load results (similar to transport statepoint)
results = openmc.deplete.Results("depletion_results.h5")

# Get k-effective evolution (returns Nx2 array: col 0 = value, col 1 = uncertainty)
times, keff = results.get_keff(time_units='d')

# Get nuclide concentrations (atoms/b-cm)
times_atoms, concentrations = results.get_atoms('1', 'U235', time_units='d')

# Create useful plots
import matplotlib.pyplot as plt

# k-effective vs burnup with error bars
plt.figure()
plt.errorbar(times, keff[:, 0], yerr=keff[:, 1])
plt.xlabel('Time (days)')
plt.ylabel('k-effective')
plt.grid(True)

# Isotope depletion
plt.figure()
plt.semilogy(times_atoms, concentrations)
plt.xlabel('Time (days)')
plt.ylabel('U-235 atom density (atoms/b-cm)')
plt.grid(True)
plt.show()

Tutorial snippet — no separate file in examples repo

Additional Resources