Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
73934ca
Add new plasma physics variables and update iteration variable count
chris-ashe Mar 17, 2026
0895901
Add particle balance constraint equation and update constraint count
chris-ashe Mar 17, 2026
e4b3864
Add new plasma physics input variables for recycling and fuelling
chris-ashe Mar 17, 2026
1513adb
Refactor particle balance constraint equation and update iteration va…
chris-ashe Mar 17, 2026
422b518
Update particle balance constraints and increment equation count
chris-ashe Mar 17, 2026
79ead71
Update constraint limits
chris-ashe Mar 17, 2026
8b17392
Add new total D-T fusion rate variables
chris-ashe Mar 17, 2026
547ec90
Update consistency equations for particle consistency
timothy-nunn Mar 18, 2026
05fdb3a
Update molflow plasma fuelling variable ranges for consistency
chris-ashe Mar 20, 2026
50550a2
Refine fusion power output formatting for improved precision in plot …
chris-ashe Mar 20, 2026
494e85b
Add D-D fusion reaction rate variables for helium and tritium branches
chris-ashe Mar 20, 2026
17b9923
Add D-D fusion rate calculations for tritium and helium branches
chris-ashe Mar 20, 2026
b0d315e
Add plasma tritium flow rate calculations and contour plotting
chris-ashe Mar 20, 2026
2bdb30c
Add total D-D fusion rate calculation and update output formatting
chris-ashe Mar 20, 2026
eeeca04
Add deuterium and alpha particle flow rate calculations and contour p…
chris-ashe Mar 20, 2026
6ac4a3b
Add plotting of fuelling efficiency and recycling fraction in plasma …
chris-ashe Mar 20, 2026
bb233cd
Add plasma fuelling equations and documentation
chris-ashe Mar 22, 2026
6391258
Add D-3He fusion rate and neutron production rate calculations
chris-ashe Mar 22, 2026
d111b06
Add fuelling composition variables and constraints for deuterium, tri…
chris-ashe Mar 22, 2026
4f24913
Enhance plasma flow calculations by adding tritium and deuterium flow…
chris-ashe Mar 22, 2026
0bfb844
Rename burn-up fraction variable to f_plasma_fuel_burnup across multi…
chris-ashe Mar 22, 2026
b20c1f1
Refactor fuel burn-up rate variable to fusrat_total across multiple f…
chris-ashe Mar 22, 2026
d2550bc
Refactor plasma exhaust calculations to plasma fuelling, updating rel…
chris-ashe Mar 23, 2026
d1c65bf
Refactor plasma fuelling plotting functions to improve organization a…
chris-ashe Mar 23, 2026
65b8ba3
Integrate PlasmaFuelling class into physics calculations and update f…
chris-ashe Mar 23, 2026
cc3e2de
Enhance plasma fuelling documentation with flow rate equations and ke…
chris-ashe Mar 23, 2026
ff205b4
Refactor fuelling output logic to use dedicated method in PlasmaFuell…
chris-ashe Mar 23, 2026
6e67b2b
:fire: Remove tauratio variable from input variables and related test…
chris-ashe Mar 23, 2026
98c39b6
Add tritium and deuterium burnup calculations and update physics vari…
chris-ashe Mar 23, 2026
f959ac5
:fire: Refactor plasma fuelling variables: remove unused 'molflow_pla…
chris-ashe Mar 23, 2026
df35364
Add Avogadro's number constant with reference documentation
chris-ashe Mar 23, 2026
512dfa2
Add plasma fuelling loss calculations and update related variables in…
chris-ashe Mar 24, 2026
9517a75
Add helium-3 flow contour plotting and enhance existing contour plots…
chris-ashe Mar 24, 2026
51877ea
Refactor plotting indices in main_plot function to accommodate additi…
chris-ashe Mar 25, 2026
b58e4c5
Enhance plasma fuelling documentation: add definitions for exhaust ef…
chris-ashe Mar 27, 2026
7fa71d3
Refactor Physics model and unit tests to integrate PlasmaFuelling cla…
chris-ashe Mar 31, 2026
49236ad
Post rebase fixes
chris-ashe Jun 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
154 changes: 154 additions & 0 deletions documentation/source/physics-models/plasma_fuelling.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
# Plasma Fuelling | `PlasmaFuelling()`

The control of fuelling is governed by 4 key particle flux equations for each of the primary fuel species and the helium ash, $\alpha$.

$$
\frac{dn_{\text{T}}}{dt} = f_{\text{fuelling,T}}\eta_{\text{fuelling}}\Gamma_{\text{fuel}} + \Gamma_{\text{D+D} \rightarrow \text{T}} - \Gamma_{\text{D+T}} - \frac{N_{\text{T}}}{\tau_{\text{T}}^*}
$$

$$
\frac{dn_{\text{D}}}{dt} = f_{\text{fuelling,D}}\eta_{\text{fuelling}}\Gamma_{\text{fuel}} -2 \Gamma_{\text{D+D}}- \Gamma_{\text{D+3He}} - \Gamma_{\text{D+T}} - \frac{N_{\text{T}}}{\tau_{\text{D}}^*}
$$

$$
\frac{dn_{\text{3He}}}{dt} = f_{\text{fuelling,3He}}\eta_{\text{fuelling}}\Gamma_{\text{fuel}} + \Gamma_{\text{D+D} \rightarrow \text{3He}} - \frac{N_{\text{T}}}{\tau_{\text{3He}}^*}
$$

$$
\frac{dn_{\alpha}}{dt} = \Gamma_{\text{D+3He}} + \Gamma_{\text{D+T}} - \frac{N_{\alpha}}{\tau_{\alpha}^*}
$$

In a steady state equilibrium all 4 of these equations should balance, therefore:

$$
\frac{dn_{\text{D}}}{dt} = \frac{dn_{\text{T}}}{dt} = \frac{dn_{\text{3He}}}{dt} = \frac{dn_{\alpha}}{dt} = 0
$$

Here $\eta_{\text{fuelling}}$ is the fuelling efficiecny which represents the method of injecting fuel into the plasma. Gas puffing on the low field side is probably around 0.01-0.1, supersonic gas is 0.1 and 0.2 and using pellets can get you close to unity with 0.5-0.9. $\Gamma_{\text{fuelling}}$ is the fuel injection rate into the vacuum vessel, so $\eta_{\text{fuelling}} \Gamma_{\text{fuelling}}$ together presents the fraction of injected fuel that actually makes it into the plasma core to fuse.


The fuelling fractional compositions is given by $f$

- $N$ is the total amount of ions in the plasma.

- $\tau_{\text{fuel}}^*$ is the recycling corrected fuel particle confinement time given by:

$\tau_{\text{fuel}}^* = (\tau_p) / (1-R)$

The (effective) exhaust efficiency is is given by , $\eta_{\text{eff}} = 1- R$

The factor $\frac{R}{1-R}$ is the mean number of recycling events back into the burning region experieced by a particle before it is pumped away.

The definition of the recycling coefficient $R = 1- \frac{\Gamma_{\text{pumps}}}{\Gamma_{\text{out}}}$, where $\Gamma_{\text{pumps}}$ is the number of particles exhausted by the pumps per second and $\Gamma_{\text{out}}$ is the number of particles per second transported radially outwards across the separatrix.



Where $\tau_p$ is the particle confinement time which we can assume is approximately equal to the energy confinement time ($\tau_p = \tau_E$).

!!! note "Quantifying $R$"

The recycling coefficient $R$, defined as the fraction of particles crossing the LCFS that return to the plasma, can depend on numerous factors—including vessel pumping speed, neutral pressure in the private‑divertor region, impurity seeding levels, and the detailed properties of the SOL. Among these parameters, $R$ is the least certain and the most difficult to quantify. In next‑step devices, the SOL temperature is expected to be high, so particles reflected from the vessel walls are mostly ionized within the SOL and are removed by pumping before they can effectively refuel the burning plasma. As a result, the recycling coefficient is anticipated to be lower than in present‑day tokamaks, where $R$ can often approach unity. An additional uncertainty is the extent of neutral penetration at the plasma edge, which influences both the pedestal density and the density profile, and therefore also affects $R$[^1].




## METIS Alpha Confinement

$$
\tau_{\alpha} = f_{\alpha}\tau_{\text{E}}\frac{R}{1-R}\tau_{\text{ne}}
$$

This is the model currently in METIS[^2] and is found in [^3]


--------------

## Tritium Flow Rate | `calculate_plasma_tritium_flow_rate()`

$$
\frac{dn_{\text{T}}}{dt} = f_{\text{fuelling,T}}\eta_{\text{fuelling}}\Gamma_{\text{fuel}} + \Gamma_{\text{D+D} \rightarrow \text{T}} - \Gamma_{\text{D+T}} - \frac{N_{\text{T}}}{\tau_{\text{T}}^*}
$$

---------------

## Deuterium Flow Rate | `calculate_plasma_deuterium_flow_rate()`

$$
\frac{dn_{\text{D}}}{dt} = f_{\text{fuelling,D}}\eta_{\text{fuelling}}\Gamma_{\text{fuel}} -2 \Gamma_{\text{D+D}}- \Gamma_{\text{D+3He}} - \Gamma_{\text{D+T}} - \frac{N_{\text{T}}}{\tau_{\text{D}}^*}
$$

---------------

## Helium-3 Flow Rate | `calculate_plasma_helium3_flow_rate()`

$$
\frac{dn_{\text{3He}}}{dt} = f_{\text{fuelling,3He}}\eta_{\text{fuelling}}\Gamma_{\text{fuel}} + \Gamma_{\text{D+D} \rightarrow \text{3He}} - \frac{N_{\text{T}}}{\tau_{\text{3He}}^*}
$$

---------------

## Alpha Particle Flow Rate | `calculate_plasma_alphas_flow_rate()`

$$
\frac{dn_{\alpha}}{dt} = \Gamma_{\text{D+3He}} + \Gamma_{\text{D+T}} - \frac{N_{\alpha}}{\tau_{\alpha}^*}
$$

-----------------

## Key Constraints

### Deuterium Flow Consistency

This constraint can be activated by stating `icc = 94` in the input file.

This constraint ensures that the change in deuterium particles as a function of time is zero. It ensures the output of `calculate_plasma_deuterium_flow_rate()` is zero

**It is recommended to have this constraint on as it is a plasma consistency model**

----------------

### Tritium Flow Consistency

This constraint can be activated by stating `icc = 93` in the input file.

This constraint ensures that the change in tritium particles as a function of time is zero. It ensures the output of `calculate_plasma_tritium_flow_rate()` is zero

**It is recommended to have this constraint on as it is a plasma consistency model**

-----------------

### Helium-3 Flow Consistency

### Alpha Particle Flow Consistency

This constraint can be activated by stating `icc = 95` in the input file.

This constraint ensures that the change in alpha particles as a function of time is zero. It ensures the output of `calculate_plasma_alphas_flow_rate(()` is zero

**It is recommended to have this constraint on as it is a plasma consistency model**

------------------

### Fuelling Proportion Consistency

This constraint can be activated by stating `icc = 96` in the input file.

This ensures that all 3 injected fuelling fractions sum up to 1:

$$
f_{\text{fuelling,D}} + f_{\text{fuelling,T}} + f_{\text{fuelling,3He}} = 1.0
$$

**It is recommended to have this constraint on as it is a plasma consistency model**

-----------------


[^1]: G. L. Jackson, V. S. Chan, and R. D. Stambaugh, “An Analytic Expression for the Tritium Burnup Fraction in Burning-Plasma Devices,” Fusion Science and Technology, vol. 64, no. 1, pp. 8–12, Jul. 2013, doi: https://doi.org/10.13182/fst13-a17042.

[^2]: J. F. Artaud et al., “Metis: a fast integrated tokamak modelling tool for scenario design,” Nuclear Fusion, vol. 58, no. 10, pp. 105001–105001, Aug. 2018, doi: https://doi.org/10.1088/1741-4326/aad5b1.

[^3]: D. Reiter, H. Kever, G. H. Wolf, M. Baelmans, R. Behrisch, and R. Schneider, “Helium removal from tokamaks,” Plasma Physics and Controlled Fusion, vol. 33, no. 13, pp. 1579–1600, Nov. 1991, doi: https://doi.org/10.1088/0741-3335/33/13/008.
1 change: 1 addition & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ nav:
- Overview: physics-models/plasma_beta/plasma_beta.md
- Fast Alpha: physics-models/plasma_beta/plasma_alpha_beta_contribution.md
- Density Limit: physics-models/plasma_density.md
- Fuelling: physics-models/plasma_fuelling.md
- Composition & Impurities: physics-models/plasma_composition.md
- Radiation: physics-models/plasma_radiation.md
- Plasma Current:
Expand Down
7 changes: 7 additions & 0 deletions process/core/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,13 @@
MFILE = 13
"""Machine-optimised output file unit"""


AVOGADRO_NUMBER = 6.02214076e23
"""Avogadro's number [1/mol]
Reference: National Institute of Standards and Technology (NIST)
https://physics.nist.gov/cgi-bin/cuu/Value?na|search_for=avogadro
"""

ELECTRON_CHARGE = 1.602176634e-19
"""Electron / elementary charge [C]
Reference: National Institute of Standards and Technology (NIST)
Expand Down
19 changes: 18 additions & 1 deletion process/core/input.py
Original file line number Diff line number Diff line change
Expand Up @@ -696,6 +696,24 @@ def __post_init__(self):
"f_volflow_vac_pumps_impedance": InputVariable("vacuum", float, range=(1e-06, 1.0)),
"volflow_vac_pumps_max": InputVariable("vacuum", float, range=(1e-06, 1000.0)),
"molflow_vac_pumps": InputVariable("vacuum", float, range=(0.0, 1e30)),
"f_plasma_particles_lcfs_recycled": InputVariable(
data_structure.physics_variables, float, range=(0.0, 1.0)
),
"eta_plasma_fuelling": InputVariable(
data_structure.physics_variables, float, range=(0.0, 1.0)
),
"molflow_plasma_fuelling_vv_injected": InputVariable(
data_structure.physics_variables, float, range=(1e18, 1e24)
),
"f_molflow_plasma_fuelling_deuterium": InputVariable(
data_structure.physics_variables, float, range=(0.0, 1.0)
),
"f_molflow_plasma_fuelling_tritium": InputVariable(
data_structure.physics_variables, float, range=(0.0, 1.0)
),
"f_molflow_plasma_fuelling_helium3": InputVariable(
data_structure.physics_variables, float, range=(0.0, 1.0)
),
"pflux_plant_floor_electric": InputVariable(
"heat_transport", float, range=(0.0, 1000.0)
),
Expand Down Expand Up @@ -852,7 +870,6 @@ def __post_init__(self):
"t_plasma_energy_confinement_max": InputVariable(
"physics", float, range=(0.1, 100.0)
),
"tauratio": InputVariable("physics", float, range=(0.1, 100.0)),
"n_beam_decay_lengths_core_required": InputVariable(
"current_drive", float, range=(0.0, 10.0)
),
Expand Down
Loading
Loading