OpenMC Guide
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 accuracyCF4Integrator: Faster, less accurateCELIIntegrator: Alternative algorithmSICELIIntegrator: 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()