Tritium Transport
1D tritium diffusion-trapping equations, the McNabb-Foster trap kinetics, surface boundary taxonomy, and the analytic permeation gates.
Nucleide covers activation (ALARA/FISPACT/R2S) but has nothing on tritium
inventory and permeation in fusion materials. This page pins the spec-phase
equation set for a scoped 1D kernel: Fickian diffusion of a mobile
population c_m coupled to N McNabb–Foster trap speciesmcnabb-1963, with
caller-supplied temperature and surface laws. The nucleide-tritium kernel
implements this equation set; the T1–T2/G1–G9 labels below are the
analytic-gate contract its tests replay, mirroring the E1–E4/O-gate pattern
of the point-kinetics page.
Equations are textbook (Crank; McNabb–Foster; Oriani;
Shewmon)crank-1975mcnabb-1963
oriani-1970shewmon-2016 —
no simulator source was read to produce them.
Overview
A 1D slab 0 ≤ x ≤ L holds mobile tritium c_m(x, t) plus trapped
populations c_{t,j}(x, t) for trap species j = 1..N (vacancies,
dislocations, grain boundaries — distinguished only by their rate data).
Tritium moves by Fickian diffusion with a caller-supplied diffusivity D(T),
parks in traps with temperature-dependent trapping/detrapping rates, and
enters or leaves through surface laws (fixed concentration, Sieverts
equilibrium, recombination flux, or symmetry). Temperature is a
caller-supplied profile T(x, t); there is no heat solve in v1. Series
stacks of slabs — multi-layer walls such as W/Cu/CuCrZr first walls —
extend the same equations layer-by-layer with linear interface
conditions (L1: Sieverts or Henry) or the vented-sink recombination law
(L3) and the series-resistance steady state (L2).
The crate mirrors the kinetics layout: params.rs (transport and
trap data with validating constructors), bc.rs (the surface-law
taxonomy), solve.rs (the implicit stepper plus closed-form gate
helpers), layers.rs (multi-layer series stacks with Sieverts/Henry
interface conditions plus the vented-sink recombination law), and error.rs (a #[non_exhaustive] error enum with the
crate Result alias).
Mathematical details
T1 — Mobile balance
S is a caller-supplied volumetric source (mol/m³/s); initial profiles
c_m(x, 0) and c_{t,j}(x, 0) are caller-supplied (default zero).
T2 — McNabb–Foster trap kinetics
Per trap species with site density N_j (mol/m³):
At equilibrium (∂/∂t = 0) each species sits on its Langmuir isotherm
with occupancy θ_j = K_j c_m / (1 + K_j c_m).
Caller-supplied Arrhenius stance
The kernel ships no material property tables — the same stance as kinetics delayed data. Every coefficient is caller data, constant or Arrhenius in the caller-supplied temperature:
Trap site densities N_j are static in v1 (no damage-created intrinsic
trap evolution).
Boundary-condition taxonomy
At each surface (n the outward normal, J = −D∂c_m/∂n the outward flux)shewmon-2016:
- Dirichlet:
c_m = c̄(prescribed surface concentration). - Sieverts:
c_m = K_S(T)√p(diatomic-gas equilibrium at gas pressurep; the linear Henry variantc_m = K_H pis a named alternative). - Recombination:
J = K_r(T)\,c_m²(surface recombination to molecules; nonlinear Robin condition). - ZeroFlux:
J = 0(symmetry midplane or impermeable wall).
G1 — Steady linear profile
Steady trap-free T1 with constant D, S = 0, and Dirichlet ends
c(0) = c0, c(L) = cL gives d²c/dx² = 0, hence
I is the mobile inventory per unit area. Pinned in
fixtures/tritium/g1_steady.json (algebraic, tolerance 1e-12).
G2 — Permeation transient and time lag
With c(0,t) = c0, c(L,t) = 0, c(x,0) = 0, splitting off the G1 steady
profile leaves a homogeneous heat equation solved by separation of variables
(eigenfunctions sin(nπx/L), eigenvalues Dn²π²/L²)crank-1975. The outlet flux is
Cumulative permeation Q(t) = ∫₀ᵗ J dt asymptotes to J_ss(t − t_lag) with
the breakthrough-curve intercept. Pinned in
fixtures/tritium/g2_timelag.json at seven log-spaced times (series cut at
|term| < 1e-18; solver replay tolerance 1e-6).
G3a — Low-occupancy (Oriani) limit
For K_j c_m ≪ 1, (T2-eq) linearizes to c_{t,j} ≈ N_jK_jc_moriani-1970; under local
equilibrium T1+T2 collapse to (1 + ΣN_jK_j)∂c_m/∂t = D∇²c_m, i.e.
Pinned in fixtures/tritium/g3a_oriani.json (KN = 3, D_eff = D/4;
algebraic, tolerance 1e-12).
G3b — Saturated limit
For K_j c_m ≫ 1, c_{t,j} → N_j: traps sit full, the mobile steady state
is G1, and the trapped load follows the isotherm pointwise. Pinned in
fixtures/tritium/g3b_saturated.json with the exact trapped inventory
2L(1 − ln 2) (algebraic, tolerance 1e-12) — evaluated at Kc = 1 at
x = 0 (occupancy 0.5 falling to 0), so the gate pins the full-isotherm
integral with the saturated asymptote N·L as its limiting interpretation.
G3c — Irreversible limit
For p_j → 0 at fixed mobile c_m, (T2) integrates directly (with
c_t(0) = 0):
Pinned in fixtures/tritium/g3c_irreversible.json at seven times
(algebraic, tolerance 1e-12).
G4 — Sieverts steady state
Sieverts ends c(0) = K_S√p₁, c(L) = K_S√p₂ reduce the trap-free steady
state to G1 between those concentrations, with permeability Φ = D·K_S:
Pinned in fixtures/tritium/g4_sieverts.json (algebraic, tolerance
1e-12).
G5 — Recombination steady state
With a recombination outlet the steady problem is nonlinear, but the
mobile profile stays affine in the recombination face values (the steady
system is linear for frozen faces), so the kernel pins each face-adjacent
response with unit-perturbation Thomas solves: one end closes in closed
form from K_r cf² + g(1−b) cf − g·a = 0, two ends by Newton iteration
with the analytic Jacobian. G5a (Dirichlet + recombination,
trap-free, S = 0) asserts the linear (c0, c_s) profile, flux, and
inventory at 1e-12; G5b asserts the K_r → ∞ recovery of the G1
Dirichlet end. The recombination transient has no such algebraic
oracle and closes per step instead (G6).
G6 — Recombination transient
The recombination transient admits no closed form. The face law
K_r cf² = g(c_adj − cf) makes every implicit θ-step nonlinear, and the
face quadratic couples to the time derivative through the step matrix:
the separation-of-variables trick behind G2 needs a linear problem, and
the frozen-face affine reduction behind G5 needs no time derivative, so
neither extends. The kernel instead reuses the G5 affine face-response
construction inside each θ-step: for frozen traps the step is linear
in the mobile profile with the face values as sources (M c = r + Q f),
so one base Thomas solve plus one sensitivity column P = M⁻¹Q per
recombination end (rebuilt only when dt changes) makes the profile
affine in the faces, c = base + P f. Trap-free steps close each face
in closed form (one end) or by Newton iteration with the analytic
Jacobian (two ends, warm-started from the previous step); steps with
traps fuse the face iterate into the trap-Picard loop, sharing
rtol/atol. A face Newton that exhausts its cap fails the step with
the existing not-converged error (hard fail, no dt retry).
Because no algebraic oracle exists, the G6a–G6d gates are asymptotic and self-convergence — honestly weaker than the G1–G5 algebraic gates:
- G6a (long-time asymptote): Dirichlet + recombination from a clean
slab lands on the G5a steady state:
1e-6relative on the outlet flux, the flux balance|F_L + F_R|, and the G5a linear profile at1e-9, att = 60·t_lag ≈ 44·τ₁—τ₁ = L²/(D y₁²)the slowest mode of the problem linearized about the steady face value (y₁the first positive root ofy·cos y + (2K_r c_s L/D)·sin y = 0), so the slowest mode has decayed toe⁻⁴⁴and only the asymptote is gated. - G6b (K_r continuity):
K_r → ∞recovers the G2 Dirichlet transient (outlet-flux series at1e-6), matching the G5b steady limit;K_r → 0recovers the zero-flux transient (profile at1e-5absolute against the leading-orderK_r c_f² tleak). - G6c (mass balance): recombination leaks, so the discrete invariant
Iᵏ − Iᵏ⁻¹ = dt·[θRᵏ + (1−θ)Rᵏ⁻¹]withR = −(F_L + F_R)closes against the reportedK_r cf²faces to roundoff (1e-12relative). - G6d (self-convergence):
dt-halving on a fixed recombination case shows the θ-method order on two successive halvings — ≈ 2 for Crank–Nicolson (pinned band 1.5–2.5), ≈ 1 for backward Euler (pinned band 0.7–1.3). The band is measured where truncation error dominates: thet = 0corner kink excites Crank–Nicolson fine-mode ringing that decays only as|g| → 1on modes withλ·dt ≫ 2, so coarse-dterrors at late time are ringing, not truncation. - G6e (independent cross-check): self-convergence cannot catch a
spatial-discretization or face-formula bug that is consistent across
refinements, so G6e compares the mid-transient trajectory at
t = 0.5/1/2·t_lagagainst an independent solver — the method of lines with second-order central differences on a node-centred grid (ghost-node recombination end) and a hand-rolled explicit RK4 — that shares no discretization, face closure, or integrator with the kernel. The trap-free G6a slab plus a trap-coupled variant agree with the production transient at1.5e-4relative on the mobile-profile max-norm (6e-4on the trapped profile; outlet flux within5e-3relative or1e-3·J_ssabsolute), ≈5x headroom over the measured cross-method error.
Positivity under the face clamp (cf ≥ 0) is asserted for one- and
two-recombination-end transients on a coarse grid.
Multi-layer series stacks
A LayerStack chains N ≥ 1 slabs — e.g. a W/Cu/CuCrZr first-wall stack —
each carrying (T1–T2) with its own coefficients D_k, K_k, trap
species, temperature, and source. Internal interfaces close through a
linear local-equilibrium law: the potential u = c_m / K and the flux
J = −D ∂c_m/∂x are continuous — the Sieverts potential u = c_m / K_S
[Pa¹ᐟ²] at a Sieverts interface, the Henry potential u = c_m / K_H
[Pa] (Henry constant K_H [mol/m³/Pa]) at a Henry interface,
Each layer’s K is caller data: the layer solubility plays K_S or K_H
according to the law declared at the adjacent interface (one law per gap).
A gap may instead carry the vented-sink recombination law (L3, G10): a
single face concentration x ≥ 0 with half-cell fluxes
J_L = g_L (c_L − x), J_R = g_R (x − c_R) (g = 2D/dx per side, no
solubility involved) and the desorption sink K_r x² venting from the
face,
The K_r → 0 limit is a continuous-concentration joint, not a Sieverts
law; a non-positive permeation drive has no nonnegative root and is a
clear error. The flux-continuous product law (J = K_r x_0 x_1) is
rejected by construction — it admits a spurious insulated root and no
symmetric root, so no spelling for it exists. Away from vented gaps the
steady state is the series-resistance network over the per-layer
permeabilities Φ_k = D_k K_k: u(x) is piecewise linear with constant
flux
The discrete form keeps the mobile concentration as the unknown and writes
every interior face flux as J_f = (c_i/K_i − c_{i+1}/K_{i+1}) / R_f with
face resistance R_f = dx_k/(2Φ_k) + dx_{k+1}/(2Φ_{k+1}) — linear in the
neighbouring cell values, so the linear interface condition (Sieverts or
Henry — the resistance form is law-agnostic) folds directly into the
tridiagonal θ-step matrix (the spike outcome: no interface Newton is
needed, unlike the nonlinear recombination faces of G5/G6). A vented gap
instead CUTs the matrix (block-diagonal; each block sees a Dirichlet cut
face): the adjacent-cell values stay affine in the face value, so the
scalar residual R(x) = P − Q·x − K_r·x² = 0 closes in closed form
x = 2P/(√(Q²+4K_rP)+Q); coupled faces (several gaps, or recombination
outer ends alongside) close by Newton iteration with the analytic
Jacobian. Within one
uniform layer it reduces to the landed arithmetic-mean face. Outer ends
reuse the landed surface taxonomy unchanged, including recombination ends
through the same face-response construction. A one-layer stack dispatches
to the landed single-slab kernel and reproduces it exactly (the G7c
anchor).
G7 — Multi-layer steady state
The layered steady system is linear (for frozen recombination faces), so the algebraic gates carry over at G5-style tolerances:
- G7a (series resistance): a 2-layer stack with contrasting
DandK_Smatches the (L2) closed form at1e-12relative on the fluxes, and every interior face — including the material interface — carries the same flux to roundoff (with a1e-18absolute floor, since the fluxes are ~1e-7 and plain relative roundoff would be unmeetable); the discrete profile is the exact piecewise-linearu(x)at the nodes. - G7b (N-layer continuity): a 3-layer stack holds interface flux continuity and the half-cell-corrected interface potentials to roundoff against the closed form.
- G7c (single-layer recovery): a 1-layer stack reproduces the landed kernel field-by-field, exactly (the layered entry dispatches to it).
- G7d (transparent interface): a 2-layer stack with identical
DandK_Sin both layers is a plain slab; the layered path itself (not the dispatch) matches the landed kernel to roundoff. - G7e (recombination outer end): the layered face-response construction
closes a recombination outlet against the same series resistance; the
flux matches the closed form from
J = K_r (K_{S,n} u_L)^2withu(0) − u(L) = J·Rat1e-12relative.
G8 — Multi-layer transient
The transient reuses the landed θ-stepper with the interface fluxes inside the step matrix; recombination outer ends close per step through the face-response construction on the layered matrix. No algebraic transient oracle exists, so the gates mirror G6:
- G8a (self-convergence):
dt-halving on the 2-layer stack shows the θ-method order on two successive halvings — Crank–Nicolson in the band 1.5–2.5, backward Euler in 0.7–1.3 — measured in the same resolved band as G6d (the stack’s finest-mode scale and lag time set it; measured orders sit at ≈2.0 and ≈1.0). - G8b (long-time asymptote): the 2-layer transient from a clean slab
lands on the layered steady state at
t = 60·max_k(L_k²/6D_k), within1e-6relative on the outlet flux and1e-9on the profile, for both a Dirichlet and a recombination outlet. - G8c (mass balance): with one θ-step per output interval the discrete
balance
Iᵏ − Iᵏ⁻¹ = dt·[θRᵏ + (1−θ)Rᵏ⁻¹],R = −(F_L + F_R), closes against the reported boundary fluxes to roundoff — internal interface fluxes cancel in the sum, so the landed G6c identity carries over.
Positivity is asserted on the layered transient with different trap species per layer (per-cell trap counts follow the owning layer), and the clear error surface (recombination interfaces, malformed stacks and states) is gated in-crate.
G9 — Henry internal interfaces
The linear Henry law shares the (L1) construction — u = c_m/K_H
continuous with continuous flux, folding into the same tridiagonal
θ-step matrix with K_H in place of K_S — so the steady gates carry
over at G7-class tolerances (the G7c single-layer recovery anchor is
unchanged):
- G9a (Henry series resistance): a 2-layer stack joined by one Henry
interface matches the (L2) closed form at
1e-12relative on the fluxes (1e-18absolute floor), every interior face carries the same flux to roundoff, the discrete profile is the exact piecewise-linear Henry potential at the nodes, and the half-cell-corrected interface potential agrees from each side of the gap. - G9b (mixed laws): a 3-layer stack with one Sieverts and one Henry interface holds flux continuity across both interface laws to roundoff against the same series-resistance closed form, with the interface potentials pinned from each side.
G10 — Vented-sink recombination interfaces
A vented-sink gap (L3) desorbs K_r x² from its single face
concentration, so — unlike the linear gaps — it carries a flux jump, not
flux continuity. The CUT-matrix construction closes each gap against the
adjacent blocks: one gap in closed form, coupled faces by Newton. The
gates are synthetic stacks with hand-derived closed forms (each
Dirichlet-bounded block is nodally exact for linear profiles, so the
discrete residual is the continuum quadratic to roundoff):
- G10a (closed form): a 2-layer stack with one vented gap matches the
continuum root of
R(x) = D₁(c₀−x)/L₁ − D₂(x−cN)/L₂ − K_r·x²at1e-12on the face value, fluxes, and block-linear profile, with the gap residual and the outer balanceF_L + F_R + K_r·x² = 0at the same tolerance. - G10b (rate limits):
K_r → ∞pins the upstream block to its Dirichlet-terminated profile;K_r → 0recovers the uncut slab on identical layers and holds joint-continuousc(noK-ratio jump) on contrasting solubilities — the continuous joint, not Sieverts. - G10c (mixed laws): a 4-layer stack with one interface of each law
holds flux continuity across both linear gaps to roundoff while the
vented gap closes the scalar quadratic against the super-block
resistances at
1e-12. - G10d/G10e (coupled Newton): two vented gaps, or a vented gap plus a recombination outer end, close by Newton — residuals pin the Newton contract and the outer balance closes modulo the residuals.
- G10f/G10g (traps and errors): traps evaluate on the owning layer’s isotherm behind the vented close; zero drive fails loudly (no nonnegative root).
G11 — Vented-sink transient
The transient reuses the θ-stepper on the CUT matrix with the G6
face-coupling moved interior: one sensitivity column per vent face per
dt span, per-step close (closed form for a lone gap, warm-started
Newton for coupled faces — fused into the trap Picard loop), and the
discrete balance closed against the reported boundary fluxes plus the
desorption sinks from the recorded gap faces. A lone gap follows the G6
clamping stance per step; the steady P ≤ 0 loud error stands:
- G11a (mass balance): trap-free, one θ-step per output — the balance with the desorption sink closes to roundoff.
- G11b (self-convergence):
dt-halving shows the θ-method order in the resolved band (Crank–Nicolson on the spike’s pinned pair, backward Euler on both pairs). - G11c (long-time asymptote): the vented transient lands on the
vented steady state (fluxes at
1e-6, profile at1e-9). - G11d (trap fusion): the trap-coupled transient closes the mobile-plus-trapped balance with the desorption sink.
Invariants
- Positivity: nonneg initial data, boundary data, and source imply
c_m, c_{t,j} ≥ 0(maximum-principle consequence). The future discrete scheme must preserve it. - Mass conservation:
d/dt[I_m + ΣI_{t,j}] = J(0,t) − J(L,t) + ∫S dxwithJ = −D∂c_m/∂x. The future scheme must satisfy it to roundoff.
Algorithm
The discretization is a 1D cell-centred finite-volume grid with implicit
θ-stepping in the kinetics solve.rs pattern (diffusion implicit, traps
via the exact per-cell backward-Euler map with Picard coupling to
rtol/atol). Each implicit step is a tridiagonal solve through the shared
linalg::tridiag Thomas module the kernel landing added behind the
workspace facade. Gate-to-test mapping: G1/G3a/G3b/G3c/G4 replay as
algebraic assertions (1e-12), G2 as a transient solve (1e-6), G5 as
the recombination steady-state face construction (G5a algebraic at
1e-12, G5b recovery at 1e-6), G6 as the recombination transient
(G6a–G6d asymptotic + self-convergence gates with in-test closed forms,
plus the G6e independent method-of-lines cross-check), G7/G8/G9 as the
multi-layer gates (series-resistance closed forms at 1e-12 with
roundoff-level interface continuity pins, including Henry-interface and
mixed-law stacks; transient asymptote +
self-convergence + mass balance), G10/G11 as the vented-sink
recombination-interface gates (scalar-quadratic closed forms at 1e-12,
Newton-contract residuals for coupled faces, transient balance with the
desorption sink plus asymptote + self-convergence + trap fusion), plus positivity and mass-balance
invariant checks.
Worked example: G1 slab
With D = 1e-9 m²/s, L = 1e-3 m, c0 = 1.0, cL = 0.0 mol/m³, (G1)
gives c = [1.0, 0.75, 0.5, 0.25, 0.0] at x/L = [0, 0.25, 0.5, 0.75, 1],
J_ss = 1e-6 mol/m²/s, and I = 5e-4 mol/m². The same slab switched to
the G2 transient breaks through at t_lag = L²/6D ≈ 166.67 s: the outlet
flux is still ≈2.3e-3 J_ss at t = 31.6 s and reaches 0.9999 J_ss by
t = 1000 s, exactly the fixtures/tritium/g2_timelag.json vector.
Assumptions and limitations
- 1D only: multi-D FEM and heat coupling are explicitly out — that is FESTIM’s reason to exist, and FESTIM is never a dependency. Heterogeneous series stacks in 1D (multi-layer, Sieverts/Henry interfaces) are in scope (G7–G9); in-plane multi-material geometry is not.
- Prescribed temperature:
T(x, t)is caller data; no heat solve. - Caller-supplied properties: diffusivities, solubilities, trapping rates, and surface constants ship as caller data; no vendored tables.
- Linear plus vented-sink interface laws: internal interfaces close through a linear
law — Sieverts (
c/K_Scontinuous) or Henry (c/K_Hcontinuous) — with continuous flux, or through the vented-sink recombination law (single face concentration with theK_r x²desorption jump); reverse or zero drive on a vented gap is a clear error, and trap-species discontinuities across interfaces enter only through caller data. The flux-continuous product law has no spelling by construction. - Single mobile species: tritium only; H/D co-diffusion and isotope exchange are out.
- Static traps:
N_jfixed; damage-driven intrinsic trap creation is deferred to a later design (the T2 form already covers both). - Equilibrium surfaces: Dirichlet/Sieverts ends assume fast surface kinetics; finite-rate surface processes enter only via recombination.
- G6 transient gates: the recombination steady state is pinned (G5a/G5b); the recombination transient closes per θ-step (G6a–G6d asymptotic + self-convergence gates, plus the G6e independent method-of-lines cross-check) — no closed-form transient oracle exists, and none is claimed.
- Thin facades only:
nucleide.tritium(Python) andtritiumBreakthrough(WASM) expose the landed kernel; no new physics past T1–T2/G1–G11.
Validation
- Analytic replay (landed): Rust fixture tests plus
tests/test_tritium.pyassert the G1–G4 fixtures at the pinned tolerances and replay G5/G6 and the multi-layer G7/G8/G9/G10/G11 gates as in-test closed forms (synthetic stacks with hand-derived series-resistance and vented-sink oracles; the multi-layer goldens live in unit tests, notfixtures/tritium/), following the kinetics oracle pattern. Novalidation/*_vs_*.pyscript exists — there is no external oracle to wire, so none was added. - No external probe: a FESTIM cross-check, if ever attempted, stays a loud-SKIP probe. Do not add FESTIM/FEniCS to the validation container: the conda weight is intolerable for an optional nicety, and the analytic gates stand alone.
validation/is untouched by this spec change.
Related work beyond Nucleide
Adjacent capabilities Nucleide does not implement: multi-D finite-element tritium transport with heat coupling (the FESTIM capability envelope); plasma-facing implantation-profile and breeding-blanket (TBR) coupling models; gas-driven permeation experiment analysis beyond the Sieverts / recombination surface laws pinned here.