Source Definition in OpenMC

Introduction to Sources

Sources define where particles originate in your simulation. OpenMC supports two main simulation modes:

Eigenvalue Mode

Initial source only starts the simulation. Fission sites become sources for later generations. Common for reactor calculations.

Fixed-source Mode

Source definition affects all results. Must accurately represent your physical source. Common for shielding calculations.

Basic Source Setup

A source has three main components: where particles start (space), their energy, and their direction (angle).

Simple Point Source

python
# Create point source at origin with default settings
source = openmc.Source(
    space=openmc.stats.Point((0., 0., 0.)),     # Location
    energy=openmc.stats.Discrete([1.0e6], [1.0]), # 1 MeV neutrons
    angle=openmc.stats.Isotropic()               # All directions
)

# Add to settings
settings = openmc.Settings()
settings.source = source

Common Source Types

Box Source

python
# Uniform distribution in a box
box_source = openmc.Source(
    space=openmc.stats.Box(
        (-10., -10., -10.),  # Lower-left
        (10., 10., 10.)      # Upper-right
    )
)

Cylindrical Source

python
import numpy as np

# Uniform in a cylinder
r = openmc.stats.Uniform(0., 5.0)
phi = openmc.stats.Uniform(0., 2*np.pi)
z = openmc.stats.Uniform(-10., 10.)

cyl_source = openmc.Source(
    space=openmc.stats.CylindricalIndependent(
        r, phi, z
    )
)

Tip: For reactor simulations, you often don't need to specify a detailed source - a simple uniform distribution in the fuel region is sufficient as the fission source will quickly converge.

Energy Distributions

Common Sources

python
# Fusion source (14.1 MeV)
fusion = openmc.stats.Discrete([14.1e6], [1.0])

# Fission spectrum
fission = openmc.stats.Watt(a=0.988e6, b=2.249e-6)

# Thermal source
thermal = openmc.stats.Maxwell(1.2e6)

Custom Distribution

python
# Define energy points and probabilities
energies = [0.0, 1e6, 2e6, 3e6]  # eV
probs = [0.0, 0.5, 1.0, 0.0]

custom = openmc.stats.Tabular(energies, probs)

Multiple Sources

You can combine multiple sources with different strengths:

python
# Create two sources
src1 = openmc.Source(space=openmc.stats.Point((0., 0., 0.)))
src1.strength = 2.0  # Twice as strong

src2 = openmc.Source(space=openmc.stats.Point((10., 0., 0.)))
src2.strength = 1.0

# Combine sources
settings.source = [src1, src2]

Additional Resources