OpenMC Guide
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 accuracyCF4Integrator: Faster, less accurateCELIIntegrator: Alternative algorithmPredictorIntegrator: Predictor-onlySICELIIntegrator: 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