Depletion Calculations in OpenMC

Introduction to Depletion

Building on our knowledge of materials and transport physics, depletion calculations allow us to track how material compositions change over time due to nuclear reactions. This is essential for:

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

Setting up a depletion calculation involves 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])

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'
)

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()

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
  • SICELIIntegrator: Predictor-only

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',
    chain_file='chain_casl.xml',  # Custom chain
    solver='cram48'  # Specific solver
)

# Run with progress tracking
integrator.integrate()

Results Analysis

After running a depletion calculation, you can analyze the results using familiar tools from previous sections, enhanced with time-dependent capabilities:

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

# Get k-effective evolution
times, keff = results.get_keff()

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

# Create useful plots
import matplotlib.pyplot as plt

# k-effective vs burnup
plt.figure()
plt.plot(times, keff)
plt.xlabel('Time (days)')
plt.ylabel('k-effective')
plt.grid(True)

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

Additional Resources