Remi Delaporte-Mathurin
→ Limit inventories
→ Detritiation
→ Accurate assessment
Safety hazards
Risk of contamination
→ Permeation barriers
→ Clean-up
Tritium self-sufficiency
→ Breeding blanket design
→ Sub-systems engineering
How to analyse this thermo-desorption spectrum?
What's the T inventory in the first wall of SPARC?
How much T will permeate to the coolant?
How long do we need to bake components for detritiation?
What is the extraction efficiency of the TES?
What is the T residence time of component X?
Hydrogen transport
Mobile H concentration
Trapped H concentration
Time derivatives
Diffusive term
Trapping term
Detrapping term
Molecular dissociation and recombination
Sievert's law of solubility
Henry's law of solubility
Plasma + gas exposure
We need a numerical tool
W
Cu
CuCrZr
Particle and heat fluxes
Convection
14 mm
Problem: predict T retention and permeation
User inputs
Heat transfer model
Hydrogen transport model
FESTIM
Outputs
2022
2019
Start of development
open-source
Oct 2023
v1.0 release
2024
An open-source python-based finite elements code for hydrogen transport
We want to make hydrogen transport simulations easy for everyone!
We also encourage contributions!
Jonathan Dufour
CEA, France
+ all contributors
✅ More transparency
✅ More collaborations
✅ More flexibility
The code is missing a feature?
Just add it!
Found a bug?
Report it and we'll fix it!
fork
fork
pull request
FESTIM
Jane Doe
FESTIM
John Doe
FESTIM
festim-dev
pull request
Documentation
and installation instructions
conda install -c conda-forge fenics
pip install festim
Two lines to install!
import festim as F
import numpy as np
my_model = F.Simulation()
my_model.mesh = F.MeshFromVertices(
vertices=np.linspace(0, 1e-6, num=1001)
)
my_model.materials = F.Material(id=1, D_0=1.9e-7, E_D=0.2)
my_model.T = 500 # K
my_model.boundary_conditions = [
F.DirichletBC(
surfaces=[1, 2],
value=1e15, # H/m3/s
field=0
)
]
my_model.settings = F.Settings(
absolute_tolerance=1e10,
relative_tolerance=1e-10,
final_time=100 # s
)
my_model.dt = F.Stepsize(0.1) # s
my_model.initialise()
my_model.run()
The FESTIM workshop is a series of tutorials
from basic problems to more advance cases
Check out the complete documentation at
Installation instructions
User guide
festim-vv-report.readthedocs.io
Effective-diffusion through a slab
2D multi-material
Exact
Computed concentration
governing equations
exact solutions
parameters (sources, BCs, ICs)
FESTIM
computed solutions
solve
run
compare
⚠️sometimes very complex!
governing equations
manufactured solutions
source terms, BCs and ICs
FESTIM
computed solutions
compare
8 private companies
10 universities
16 research organisations
📈5 years of development
📑13+ publications
🗣️110+ citations
🧑💻14+ contributors
🏛️24+ institutions using the code
🧑💻27+ Slack members
⭐75+ stars on GitHub
3 workshops
Evolution of GitHub stars
Open source
SOFE workshop
New reference paper
At
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
At
Gaussian Process Regression (GPR)
Monoblock behaviour law
At
Rapid assessment of monoblock inventories
Inner Vertical Target
Inner Strike Point
Outer Strike Point
Outer Vertical Target
Dome
Monoblock inventory
+
Divertor inventory
SOLPS runs: Pitts et al NME (2020)
Divertor H inventory (g) at \( t = 10^7 \, \mathrm{s}\)
Safety limit \( = \) 700 g T
\( \max \approx \) 2 % limit ✅
James Dark et al 2021 Nucl. Fusion 61 116076
courtesy of K. Dunnell (MIT)
courtesy of K. Dunnell (MIT)
① neutrons are generated
② tritium is created from nuclear reactions
③ tritium is transported in the salt
④ tritium is released into the gas phase
⑤ tritium is collected and counted
Velocity
Temperature
Tritium concentration
courtesy of C. Weaver (MIT)
0D model
FESTIM model
Benedikt & Day, (2017) Fusion Engineering and Design
Text
Permeation barriers
Chemical reactions
Multi-species transport
Finite element engine upgrade
Graphical user interface
same underlying equations!
Can be represented by festim.Reaction
my_model.species = [
mobile_H,
mobile_D,
trapped_H,
trapped_D,
]
my_model.reactions = [
F.Reaction(
k_0=k_0,
E_k=0.39,
p_0=1e13,
E_p=1.2,
reactant1=mobile_H,
reactant2=empty_trap,
product=trapped_H,
volume=my_subdomain,
),
F.Reaction(
k_0=k_0,
E_k=0.39,
p_0=1e13,
E_p=1.2,
reactant1=mobile_D,
reactant2=empty_trap,
product=trapped_D,
volume=my_subdomain,
),
F.Reaction(
k_0=k_0,
E_k=0.1,
p_0=k_0,
E_p=0.1,
reactant1=mobile_H,
reactant2=trapped_D,
product=[mobile_D, trapped_H],
volume=my_subdomain,
),
]
Usual trapping reactions
Swapping reaction
4 species are defined
\( \mathrm{H} \) = mobile H
\( \mathrm{D} \) = mobile D
\( [\mathrm{H}_x\mathrm{D}_y] \) = \(x\) H and \(y\) D in trap
see Zibrov and Schmid, NME, 2024
for complete description
Your next tritium systems are likely to rely on tritium transport modelling.
Why not get involved in FESTIM to make sure it suits your needs?
No barrier
with barrier
Permeation barrier
Substrate
High H pressure
Low H pressure
Conservation of chemical potential
Permeation flux
courtesy of V. Kulagin (MePhi)
\(P(t)\)
permeation flux
Enclosure