Deuterium retention in tungsten#
This validation case is a thermo-desorption spectrum measurement perfomed by Ogorodnikova et al. [12].
Deuterium ions at 200 eV were implanted in a 0.5 mm thick sample of high purity tungsten foil (PCW).
The ion beam with an incident flux of \(2.5 \times 10^{19} \ \mathrm{D \ m^{-2} \ s^{-1}}\) was turned on for 400 s which corresponds to a fluence of \(1.0 \times 10^{22} \ \mathrm{D \ m^{-2}}\)
The diffusivity of tungsten in the FESTIM model is as measured by Frauenfelder [13].
To reproduce this experiment, three traps are needed: 2 intrinsic traps and 1 extrinsic trap. The extrinsic trap represents the defects created during the ion implantation.
The time evolution of extrinsic traps density \(n_i\) expressed in \(\text{m}^{-3}\) is defined as:
FESTIM code#
Show code cell source
import festim as F
import numpy as np
import sympy as sp
import matplotlib.pyplot as plt
model = F.Simulation()
sample_depth = 5e-4
vertices = np.concatenate(
[
np.linspace(0, 30e-9, num=200),
np.linspace(30e-9, 3e-6, num=300),
np.linspace(3e-6, 20e-6, num=200),
np.linspace(20e-6, sample_depth, num=100)
]
)
model.mesh = F.MeshFromVertices(vertices)
# Material Setup, only W
tungsten = F.Material(
id=1,
D_0=4.1e-07, # m2/s
E_D=0.39, # eV
)
model.materials = tungsten
import sympy as sp
imp_fluence = 1e22
incident_flux = 2.5e19 # beam strength from paper
imp_time = imp_fluence / incident_flux # s
ion_flux = sp.Piecewise((incident_flux, F.t <= imp_time), (0, True))
source_term = F.ImplantationFlux(
flux=ion_flux, imp_depth=4.5e-9, width=2.5e-9, volume=1 # H/m2/s # m # m
)
model.sources = [source_term]
# trap settings
w_atom_density = 6.3e28 # atom/m3
trap_1 = F.Trap(
k_0=4.1e-7 / (1.1e-10**2 * 6 * w_atom_density),
E_k=0.39,
p_0=1e13,
E_p=0.87,
density=1.3e-3 * w_atom_density,
materials=tungsten,
)
trap_2 = F.Trap(
k_0=4.1e-7 / (1.1e-10**2 * 6 * w_atom_density),
E_k=0.39,
p_0=1e13,
E_p=1.0,
density=4e-4 * w_atom_density,
materials=tungsten,
)
center = 4.5e-9
width = 2.5e-9
distribution = (
1 / (width * (2 * sp.pi) ** 0.5) * sp.exp(-0.5 * ((F.x - center) / width) ** 2)
)
trap_3 = F.ExtrinsicTrap(
k_0=4.1e-7 / (1.1e-10**2 * 6 * w_atom_density),
E_k=0.39,
p_0=1e13,
E_p=1.5,
phi_0=ion_flux,
n_amax=1e-01 * w_atom_density,
f_a=distribution,
eta_a=6e-4,
n_bmax=1e-02 * w_atom_density,
f_b=sp.Piecewise((1e6, F.x < 1e-6), (0, True)),
eta_b=2e-4,
materials=tungsten,
)
model.traps = [trap_1, trap_2, trap_3]
# boundary conditions
model.boundary_conditions = [F.DirichletBC(surfaces=[1, 2], value=0, field=0)]
implantation_temp = 293 # K
temperature_ramp = 8 # K/s
start_tds = imp_time + 50 # s
model.T = F.Temperature(
value=sp.Piecewise(
(implantation_temp, F.t < start_tds),
(implantation_temp + temperature_ramp * (F.t - start_tds), True),
)
)
min_temp, max_temp = implantation_temp, 700
model.dt = F.Stepsize(
initial_value=0.5,
stepsize_change_ratio=1.1,
max_stepsize=lambda t: 0.5 if t > start_tds else None,
dt_min=1e-05,
milestones=[start_tds],
)
model.settings = F.Settings(
absolute_tolerance=1e10,
relative_tolerance=1e-09,
final_time=start_tds
+ (max_temp - implantation_temp) / temperature_ramp, # time to reach max temp
)
derived_quantities = F.DerivedQuantities(
[
F.TotalVolume("solute", volume=1),
F.TotalVolume("retention", volume=1),
F.TotalVolume("1", volume=1),
F.TotalVolume("2", volume=1),
F.TotalVolume("3", volume=1),
F.HydrogenFlux(surface=1),
F.HydrogenFlux(surface=2),
],
)
model.exports = [derived_quantities]
model.initialise()
model.run()
Show code cell output
Calling FFC just-in-time (JIT) compiler, this may take some time.
Defining initial values
Calling FFC just-in-time (JIT) compiler, this may take some time.
Calling FFC just-in-time (JIT) compiler, this may take some time.
Defining variational problem
Defining source terms
Defining boundary conditions
Time stepping...
Calling FFC just-in-time (JIT) compiler, this may take some time.
Calling FFC just-in-time (JIT) compiler, this may take some time.
Calling FFC just-in-time (JIT) compiler, this may take some time.
Calling FFC just-in-time (JIT) compiler, this may take some time.
Calling FFC just-in-time (JIT) compiler, this may take some time.
0.1 % 5.0e-01 s Elapsed time so far: 3.2 s
Calling FFC just-in-time (JIT) compiler, this may take some time.
/home/docs/checkouts/readthedocs.org/user_builds/festim-vv-report/conda/v1.0/lib/python3.11/site-packages/festim/exports/derived_quantities/derived_quantities.py:129: DeprecationWarning: The current derived_quantities title style will be deprecated in a future release, please use show_units=True instead
warnings.warn(
/home/docs/checkouts/readthedocs.org/user_builds/festim-vv-report/conda/v1.0/lib/python3.11/site-packages/festim/exports/derived_quantities/derived_quantities.py:129: DeprecationWarning: The current derived_quantities title style will be deprecated in a future release, please use show_units=True instead
warnings.warn(
/home/docs/checkouts/readthedocs.org/user_builds/festim-vv-report/conda/v1.0/lib/python3.11/site-packages/festim/exports/derived_quantities/derived_quantities.py:129: DeprecationWarning: The current derived_quantities title style will be deprecated in a future release, please use show_units=True instead
warnings.warn(
/home/docs/checkouts/readthedocs.org/user_builds/festim-vv-report/conda/v1.0/lib/python3.11/site-packages/festim/exports/derived_quantities/derived_quantities.py:129: DeprecationWarning: The current derived_quantities title style will be deprecated in a future release, please use show_units=True instead
warnings.warn(
/home/docs/checkouts/readthedocs.org/user_builds/festim-vv-report/conda/v1.0/lib/python3.11/site-packages/festim/exports/derived_quantities/derived_quantities.py:129: DeprecationWarning: The current derived_quantities title style will be deprecated in a future release, please use show_units=True instead
warnings.warn(
/home/docs/checkouts/readthedocs.org/user_builds/festim-vv-report/conda/v1.0/lib/python3.11/site-packages/festim/exports/derived_quantities/derived_quantities.py:129: DeprecationWarning: The current derived_quantities title style will be deprecated in a future release, please use show_units=True instead
warnings.warn(
/home/docs/checkouts/readthedocs.org/user_builds/festim-vv-report/conda/v1.0/lib/python3.11/site-packages/festim/exports/derived_quantities/derived_quantities.py:129: DeprecationWarning: The current derived_quantities title style will be deprecated in a future release, please use show_units=True instead
warnings.warn(
0.2 % 9.5e-01 s Elapsed time so far: 3.7 s
0.3 % 1.4e+00 s Elapsed time so far: 3.8 s
0.3 % 1.7e+00 s Elapsed time so far: 3.8 s
0.4 % 2.2e+00 s Elapsed time so far: 3.9 s
0.5 % 2.6e+00 s Elapsed time so far: 3.9 s
0.6 % 3.1e+00 s Elapsed time so far: 4.0 s
0.7 % 3.7e+00 s Elapsed time so far: 4.0 s
0.8 % 4.3e+00 s Elapsed time so far: 4.1 s
1.0 % 4.9e+00 s Elapsed time so far: 4.1 s
1.1 % 5.7e+00 s Elapsed time so far: 4.1 s
1.3 % 6.5e+00 s Elapsed time so far: 4.2 s
1.5 % 7.4e+00 s Elapsed time so far: 4.2 s
1.7 % 8.3e+00 s Elapsed time so far: 4.3 s
1.9 % 9.4e+00 s Elapsed time so far: 4.3 s
2.1 % 1.1e+01 s Elapsed time so far: 4.4 s
2.4 % 1.2e+01 s Elapsed time so far: 4.4 s
2.6 % 1.3e+01 s Elapsed time so far: 4.5 s
2.9 % 1.4e+01 s Elapsed time so far: 4.5 s
3.1 % 1.6e+01 s Elapsed time so far: 4.5 s
3.5 % 1.7e+01 s Elapsed time so far: 4.6 s
3.8 % 1.9e+01 s Elapsed time so far: 4.6 s
4.1 % 2.0e+01 s Elapsed time so far: 4.7 s
4.4 % 2.2e+01 s Elapsed time so far: 4.7 s
4.8 % 2.4e+01 s Elapsed time so far: 4.8 s
5.1 % 2.6e+01 s Elapsed time so far: 4.8 s
5.5 % 2.8e+01 s Elapsed time so far: 4.8 s
5.9 % 3.0e+01 s Elapsed time so far: 4.9 s
6.3 % 3.2e+01 s Elapsed time so far: 4.9 s
6.7 % 3.4e+01 s Elapsed time so far: 5.0 s
7.2 % 3.6e+01 s Elapsed time so far: 5.0 s
7.7 % 3.8e+01 s Elapsed time so far: 5.1 s
8.1 % 4.1e+01 s Elapsed time so far: 5.1 s
8.7 % 4.3e+01 s Elapsed time so far: 5.1 s
9.2 % 4.6e+01 s Elapsed time so far: 5.2 s
9.7 % 4.9e+01 s Elapsed time so far: 5.2 s
10.3 % 5.1e+01 s Elapsed time so far: 5.3 s
10.8 % 5.4e+01 s Elapsed time so far: 5.3 s
11.3 % 5.7e+01 s Elapsed time so far: 5.4 s
11.9 % 6.0e+01 s Elapsed time so far: 5.4 s
12.5 % 6.3e+01 s Elapsed time so far: 5.5 s
13.1 % 6.6e+01 s Elapsed time so far: 5.5 s
13.8 % 6.9e+01 s Elapsed time so far: 5.6 s
14.4 % 7.2e+01 s Elapsed time so far: 5.6 s
15.1 % 7.5e+01 s Elapsed time so far: 5.6 s
15.8 % 7.9e+01 s Elapsed time so far: 5.7 s
16.5 % 8.2e+01 s Elapsed time so far: 5.7 s
17.2 % 8.6e+01 s Elapsed time so far: 5.8 s
18.0 % 9.0e+01 s Elapsed time so far: 5.8 s
18.8 % 9.4e+01 s Elapsed time so far: 5.9 s
19.6 % 9.8e+01 s Elapsed time so far: 5.9 s
20.3 % 1.0e+02 s Elapsed time so far: 6.0 s
21.1 % 1.1e+02 s Elapsed time so far: 6.0 s
22.0 % 1.1e+02 s Elapsed time so far: 6.0 s
22.8 % 1.1e+02 s Elapsed time so far: 6.1 s
23.7 % 1.2e+02 s Elapsed time so far: 6.1 s
24.5 % 1.2e+02 s Elapsed time so far: 6.2 s
25.4 % 1.3e+02 s Elapsed time so far: 6.2 s
26.4 % 1.3e+02 s Elapsed time so far: 6.3 s
27.3 % 1.4e+02 s Elapsed time so far: 6.3 s
28.3 % 1.4e+02 s Elapsed time so far: 6.4 s
29.2 % 1.5e+02 s Elapsed time so far: 6.4 s
30.2 % 1.5e+02 s Elapsed time so far: 6.4 s
31.2 % 1.6e+02 s Elapsed time so far: 6.5 s
32.2 % 1.6e+02 s Elapsed time so far: 6.5 s
33.3 % 1.7e+02 s Elapsed time so far: 6.6 s
34.3 % 1.7e+02 s Elapsed time so far: 6.6 s
35.4 % 1.8e+02 s Elapsed time so far: 6.7 s
36.6 % 1.8e+02 s Elapsed time so far: 6.7 s
37.6 % 1.9e+02 s Elapsed time so far: 6.7 s
38.8 % 1.9e+02 s Elapsed time so far: 6.8 s
39.9 % 2.0e+02 s Elapsed time so far: 6.8 s
41.1 % 2.1e+02 s Elapsed time so far: 6.9 s
42.4 % 2.1e+02 s Elapsed time so far: 6.9 s
43.6 % 2.2e+02 s Elapsed time so far: 7.0 s
44.9 % 2.2e+02 s Elapsed time so far: 7.0 s
46.1 % 2.3e+02 s Elapsed time so far: 7.1 s
47.4 % 2.4e+02 s Elapsed time so far: 7.1 s
48.6 % 2.4e+02 s Elapsed time so far: 7.1 s
49.9 % 2.5e+02 s Elapsed time so far: 7.2 s
51.4 % 2.6e+02 s Elapsed time so far: 7.2 s
52.7 % 2.6e+02 s Elapsed time so far: 7.3 s
54.1 % 2.7e+02 s Elapsed time so far: 7.3 s
55.4 % 2.8e+02 s Elapsed time so far: 7.4 s
56.9 % 2.8e+02 s Elapsed time so far: 7.4 s
58.4 % 2.9e+02 s Elapsed time so far: 7.5 s
59.9 % 3.0e+02 s Elapsed time so far: 7.5 s
61.5 % 3.1e+02 s Elapsed time so far: 7.5 s
62.9 % 3.2e+02 s Elapsed time so far: 7.6 s
64.5 % 3.2e+02 s Elapsed time so far: 7.6 s
65.9 % 3.3e+02 s Elapsed time so far: 7.7 s
67.5 % 3.4e+02 s Elapsed time so far: 7.7 s
69.2 % 3.5e+02 s Elapsed time so far: 7.8 s
70.8 % 3.5e+02 s Elapsed time so far: 7.8 s
72.6 % 3.6e+02 s Elapsed time so far: 7.9 s
74.2 % 3.7e+02 s Elapsed time so far: 7.9 s
75.9 % 3.8e+02 s Elapsed time so far: 7.9 s
77.5 % 3.9e+02 s Elapsed time so far: 8.0 s
79.2 % 4.0e+02 s Elapsed time so far: 8.0 s
80.8 % 4.0e+02 s Elapsed time so far: 8.1 s
82.2 % 4.1e+02 s Elapsed time so far: 8.1 s
83.8 % 4.2e+02 s Elapsed time so far: 8.2 s
85.6 % 4.3e+02 s Elapsed time so far: 8.2 s
87.5 % 4.4e+02 s Elapsed time so far: 8.2 s
89.6 % 4.5e+02 s Elapsed time so far: 8.3 s
89.8 % 4.5e+02 s Elapsed time so far: 8.3 s
90.1 % 4.5e+02 s Elapsed time so far: 8.3 s
90.2 % 4.5e+02 s Elapsed time so far: 8.4 s
90.3 % 4.5e+02 s Elapsed time so far: 8.4 s
90.4 % 4.5e+02 s Elapsed time so far: 8.4 s
90.5 % 4.5e+02 s Elapsed time so far: 8.5 s
90.6 % 4.5e+02 s Elapsed time so far: 8.5 s
90.7 % 4.5e+02 s Elapsed time so far: 8.5 s
90.8 % 4.5e+02 s Elapsed time so far: 8.6 s
90.9 % 4.6e+02 s Elapsed time so far: 8.6 s
91.0 % 4.6e+02 s Elapsed time so far: 8.6 s
91.1 % 4.6e+02 s Elapsed time so far: 8.7 s
91.2 % 4.6e+02 s Elapsed time so far: 8.7 s
91.3 % 4.6e+02 s Elapsed time so far: 8.8 s
91.4 % 4.6e+02 s Elapsed time so far: 8.8 s
91.5 % 4.6e+02 s Elapsed time so far: 8.9 s
91.6 % 4.6e+02 s Elapsed time so far: 8.9 s
91.7 % 4.6e+02 s Elapsed time so far: 8.9 s
91.8 % 4.6e+02 s Elapsed time so far: 9.0 s
91.9 % 4.6e+02 s Elapsed time so far: 9.0 s
92.0 % 4.6e+02 s Elapsed time so far: 9.1 s
92.1 % 4.6e+02 s Elapsed time so far: 9.1 s
92.2 % 4.6e+02 s Elapsed time so far: 9.1 s
92.3 % 4.6e+02 s Elapsed time so far: 9.2 s
92.4 % 4.6e+02 s Elapsed time so far: 9.2 s
92.5 % 4.6e+02 s Elapsed time so far: 9.3 s
92.6 % 4.6e+02 s Elapsed time so far: 9.3 s
92.7 % 4.6e+02 s Elapsed time so far: 9.4 s
92.8 % 4.6e+02 s Elapsed time so far: 9.4 s
92.9 % 4.7e+02 s Elapsed time so far: 9.4 s
93.0 % 4.7e+02 s Elapsed time so far: 9.5 s
93.1 % 4.7e+02 s Elapsed time so far: 9.5 s
93.2 % 4.7e+02 s Elapsed time so far: 9.6 s
93.3 % 4.7e+02 s Elapsed time so far: 9.6 s
93.4 % 4.7e+02 s Elapsed time so far: 9.6 s
93.5 % 4.7e+02 s Elapsed time so far: 9.7 s
93.6 % 4.7e+02 s Elapsed time so far: 9.7 s
93.7 % 4.7e+02 s Elapsed time so far: 9.8 s
93.8 % 4.7e+02 s Elapsed time so far: 9.8 s
93.9 % 4.7e+02 s Elapsed time so far: 9.9 s
94.0 % 4.7e+02 s Elapsed time so far: 9.9 s
94.1 % 4.7e+02 s Elapsed time so far: 9.9 s
94.2 % 4.7e+02 s Elapsed time so far: 10.0 s
94.3 % 4.7e+02 s Elapsed time so far: 10.0 s
94.4 % 4.7e+02 s Elapsed time so far: 10.0 s
94.5 % 4.7e+02 s Elapsed time so far: 10.1 s
94.6 % 4.7e+02 s Elapsed time so far: 10.1 s
94.7 % 4.7e+02 s Elapsed time so far: 10.1 s
94.8 % 4.7e+02 s Elapsed time so far: 10.2 s
94.9 % 4.8e+02 s Elapsed time so far: 10.2 s
95.0 % 4.8e+02 s Elapsed time so far: 10.2 s
95.1 % 4.8e+02 s Elapsed time so far: 10.3 s
95.2 % 4.8e+02 s Elapsed time so far: 10.3 s
95.3 % 4.8e+02 s Elapsed time so far: 10.4 s
95.4 % 4.8e+02 s Elapsed time so far: 10.4 s
95.5 % 4.8e+02 s Elapsed time so far: 10.4 s
95.6 % 4.8e+02 s Elapsed time so far: 10.5 s
95.7 % 4.8e+02 s Elapsed time so far: 10.5 s
95.8 % 4.8e+02 s Elapsed time so far: 10.5 s
95.9 % 4.8e+02 s Elapsed time so far: 10.6 s
96.0 % 4.8e+02 s Elapsed time so far: 10.6 s
96.1 % 4.8e+02 s Elapsed time so far: 10.6 s
96.2 % 4.8e+02 s Elapsed time so far: 10.7 s
96.3 % 4.8e+02 s Elapsed time so far: 10.7 s
96.4 % 4.8e+02 s Elapsed time so far: 10.7 s
96.5 % 4.8e+02 s Elapsed time so far: 10.8 s
96.6 % 4.8e+02 s Elapsed time so far: 10.8 s
96.7 % 4.8e+02 s Elapsed time so far: 10.8 s
96.8 % 4.8e+02 s Elapsed time so far: 10.9 s
96.9 % 4.9e+02 s Elapsed time so far: 10.9 s
97.0 % 4.9e+02 s Elapsed time so far: 10.9 s
97.1 % 4.9e+02 s Elapsed time so far: 11.0 s
97.2 % 4.9e+02 s Elapsed time so far: 11.0 s
97.3 % 4.9e+02 s Elapsed time so far: 11.1 s
97.4 % 4.9e+02 s Elapsed time so far: 11.1 s
97.5 % 4.9e+02 s Elapsed time so far: 11.1 s
97.6 % 4.9e+02 s Elapsed time so far: 11.2 s
97.7 % 4.9e+02 s Elapsed time so far: 11.2 s
97.8 % 4.9e+02 s Elapsed time so far: 11.2 s
97.9 % 4.9e+02 s Elapsed time so far: 11.3 s
98.0 % 4.9e+02 s Elapsed time so far: 11.3 s
98.1 % 4.9e+02 s Elapsed time so far: 11.3 s
98.2 % 4.9e+02 s Elapsed time so far: 11.4 s
98.3 % 4.9e+02 s Elapsed time so far: 11.4 s
98.4 % 4.9e+02 s Elapsed time so far: 11.4 s
98.5 % 4.9e+02 s Elapsed time so far: 11.5 s
98.6 % 4.9e+02 s Elapsed time so far: 11.5 s
98.7 % 4.9e+02 s Elapsed time so far: 11.5 s
98.8 % 4.9e+02 s Elapsed time so far: 11.6 s
98.9 % 5.0e+02 s Elapsed time so far: 11.6 s
99.0 % 5.0e+02 s Elapsed time so far: 11.7 s
99.1 % 5.0e+02 s Elapsed time so far: 11.7 s
99.2 % 5.0e+02 s Elapsed time so far: 11.7 s
99.3 % 5.0e+02 s Elapsed time so far: 11.8 s
99.4 % 5.0e+02 s Elapsed time so far: 11.8 s
99.5 % 5.0e+02 s Elapsed time so far: 11.8 s
99.6 % 5.0e+02 s Elapsed time so far: 11.9 s
99.7 % 5.0e+02 s Elapsed time so far: 11.9 s
99.8 % 5.0e+02 s Elapsed time so far: 11.9 s
99.9 % 5.0e+02 s Elapsed time so far: 12.0 s
100.0 % 5.0e+02 s Elapsed time so far: 12.0 s
Comparison with experimental data#
The results produced by FESTIM are in good agreement with the experimental data. The grey areas represent the contribution of each trap to the global TDS spectrum.
Show code cell source
t = derived_quantities.t
flux_left = derived_quantities.filter(fields="solute", surfaces=1).data
flux_right = derived_quantities.filter(fields="solute", surfaces=2).data
flux_total = -np.array(flux_left) - np.array(flux_right)
trap_1 = derived_quantities.filter(fields="1").data
trap_2 = derived_quantities.filter(fields="2").data
trap_3 = derived_quantities.filter(fields="3").data
contribution_trap_1 = -np.diff(trap_1) / np.diff(t)
contribution_trap_2 = -np.diff(trap_2) / np.diff(t)
contribution_trap_3 = -np.diff(trap_3) / np.diff(t)
t = np.array(t)
temp = implantation_temp + 8 * (t - start_tds)
# plotting simulation data
plt.plot(temp, flux_total, linewidth=3, label="FESTIM")
# plotting trap contributions
plt.plot(temp[1:], contribution_trap_1, linestyle="--", color="grey")
plt.fill_between(temp[1:], 0, contribution_trap_1, facecolor="grey", alpha=0.1)
plt.plot(temp[1:], contribution_trap_2, linestyle="--", color="grey")
plt.fill_between(temp[1:], 0, contribution_trap_2, facecolor="grey", alpha=0.1)
plt.plot(temp[1:], contribution_trap_3, linestyle="--", color="grey")
plt.fill_between(temp[1:], 0, contribution_trap_3, facecolor="grey", alpha=0.1)
# plotting original data
experimental_tds = np.genfromtxt("ogorodnikova-original.csv", delimiter=",")
experimental_temp = experimental_tds[:, 0]
experimental_flux = experimental_tds[:, 1]
plt.scatter(experimental_temp, experimental_flux, color="green", label="original", s=16)
plt.legend()
plt.xlim(min_temp, max_temp)
plt.ylim(bottom=-1.25e18, top=0.6 * 1e19)
plt.ylabel(r"Desorption flux (m$^{-2}$ s$^{-1}$)")
plt.xlabel(r"Temperature (K)")
plt.show()
Note
The experimental data was taken from Figure 5 of the original experiment paper [12] using WebPlotDigitizer