Skip to content

fusion-energy/openmc-plasma-source

Repository files navigation

CI testing codecov PyPI version

OpenMC-plasma-source

This python-based package offers a collection of pre-built OpenMC neutron sources for fusion applications.

Installation

OpenMC is required to use this package.

To install openmc_plasma_source, simply run:

pip install openmc_plasma_source

Usage

Tokamak Source

Create a source with a spatial and temperature distribution of a tokamak plasma. The function returns a single openmc.MeshSource backed by a CylindricalMesh. The plasma cross-section is discretised onto the mesh and each mesh voxel is assigned its own neutron source strength (the probability that a neutron spawns in that voxel) and energy distribution based on the local ion temperature.

The equations implemented here are taken from this paper.

from openmc_plasma_source import tokamak_source

my_source = tokamak_source(
    elongation=1.557,
    ion_density_centre=1.09e20,
    ion_density_pedestal=1.09e20,
    ion_density_peaking_factor=1,
    ion_density_separatrix=3e19,
    ion_temperature_centre=45.9e3,
    ion_temperature_pedestal=6.09e3,
    ion_temperature_separatrix=0.1e3,
    ion_temperature_peaking_factor=8.06,
    ion_temperature_beta=6,
    major_radius=906,
    minor_radius=292.258,
    pedestal_radius=0.8 * 292.258,
    mode="H",
    shafranov_factor=0.44789,
    triangularity=0.270,
    fuel={"D": 0.5, "T": 0.5},
)

The mesh resolution and the density of the internal sampling grid can be controlled with optional arguments, along with the toroidal extent of the source:

my_source = tokamak_source(
    # ... plasma parameters as above ...
    start_angle=0,                 # toroidal start angle in radians
    rotation_angle=2 * 3.14159,    # toroidal extent in radians
    mesh_resolution=(100, 100), # number of mesh bins in (r, z)
    grid_density=500,              # points per dimension in the (a, alpha) grid
)

For a more complete example check out the example script.

out out

Ring Source

Create a ring source with temperature distribution of a 2000 eV plasma.

from openmc_plasma_source import fusion_ring_source

my_source = fusion_ring_source(
    radius=700,
    start_angle=0.0,            # toroidal start angle in radians
    rotation_angle=2 * math.pi, # toroidal extent in radians (360deg source)
    temperature=20000.0,
    fuel={"D": 0.5, "T": 0.5},
)

Point Source

Create a point source with temperature distribution of a 2000 eV plasma.

from openmc_plasma_source import fusion_point_source

my_source = fusion_point_source(
    coordinate=(0, 0, 0),
    temperature=20000.0,
    fuel={"D": 0.09, "T": 0.91},  # note this is mainly tritium fuel so that TT reactions are more likely
)

Testing

To run the tests, simply run

pytest tests

About

Creates a plasma source as an openmc.source object from input parameters that describe the plasma

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages