Final Concentration Profile (2D) t = FINAL
Concentration Evolution (3D)
Final Figure of Merit zT (2D) Avg ZT: -
ZT Evolution (3D)
Final Seebeck Coefficient (2D)
Seebeck Evolution (3D)
Final Conductivity (2D)
Conductivity Evolution (3D)
User Guide
ThermoMigrate - Thermoelectric dopant-migration simulator
version 4.0.2 - NitaD, Univ Paris-Saclay, 12 july 2026
Getting Started
Pick a system & dopant
Choose a host material in Material System, then a dopant preset. This auto-fills D₀, Ea, and Q* with literature-calibrated values.
Set the gradient & duration
Define T_Hot, T_Cold, leg length, and anneal duration in the Thermal Gradient card. These drive both diffusion and Soret transport.
Read the results
Switch between the four result tabs, and toggle 2D Final vs 3D Timeline in the header to see the final profile or its full time evolution.
Every change re-runs the simulation automatically (with a short debounce) in a background worker thread, so the interface stays responsive even for long, high-resolution anneals.
Interface Guide
Material System
Selects the thermoelectric host: PbSe, SnSe, MgAgSb (α-phase only), or Bi2(Se,Te)3. Each has its own mobility, band gap, and lattice thermal conductivity model, its own list of calibrated dopants, and its own valid temperature range tied to that material's real stability limit (see Thermal Gradient below).
Thermal Gradient
T_Hot (left, x=0) and T_Cold (right, x=1) set a fixed linear temperature profile across the Leg Length (2–∞ mm). Both temperatures are capped to the selected material's real stability range (shown live under the fields) and stay at least 300 K. |T_Hot−T_Cold| / Leg Length is also capped at 40 K/mm — violating it blocks the run with an explanation rather than silently clamping anything. Anneal Duration, folded into the same card, sets the total simulated time in days.
Dopant
The preset dropdown loads typical D₀, Ea, and Q* for a dopant/host pair. Pick Custom Params to type your own, and use Concentration for a constant value or a Smart Input formula (see below).
Result Tabs & View Toggle
Conc, ZT, Seebeck, Sigma each show a 2D final-state chart and a 3D evolution surface. The header toggle switches all tabs at once between 2D Final (initial vs. final snapshot) and 3D Timeline (~40 sampled snapshots across the anneal).
Export Data
Downloads a CSV with time, position, concentration, ZT and sigma.
How to use "Smart Input"
The Concentration field accepts JavaScript math expressions evaluated over the normalized position x. Use it to define graded initial doping profiles for Functionally Graded Materials (FGM) studies.
The Variable 'x'
-
x = 0.0Hot Side (Left) -
x = 1.0Cold Side (Right)
The profile is normalized to leg length, regardless of the value entered there.
Supported Math
Standard operators (+, -, *, /) and ternaries (cond ? a : b) also apply.
Profile Library
Copy and paste these directly into the Concentration input field to test different scenarios.
| Profile Type | Equation Example | Why test this? |
|---|---|---|
| Constant (Flat) | 1e19 |
The standard baseline. |
| Linear Grading |
2e19 * (1 - 0.5*x)
Starts at 2e19, drops to 1e19
|
Optimizes $zT$ by matching carrier conc to temperature ($n \propto T^{1.5}$). |
| Exponential | 1e19 * exp(2*x) |
Rapidly increasing dopant towards the cold side. |
| Step Function |
x < 0.5 ? 2e19 : 1e18
|
Simulates a diffusion couple (high conc joined to low conc). |
| Parabolic | 1e19 * (1 + 4*x*(1-x)) |
Peak concentration in the middle of the leg. |
| Gaussian Bump | 1e19*(1+3*exp(-pow((x-0.5)/0.15,2))) |
A localized doping spike, e.g. from a mid-leg implant or diffusion source. |
| Smooth Step (Sigmoid) | 1e18+1e19/(1+exp(-10*(x-0.5))) |
Same junction as the step function but continuous, which is gentler on the numerical solver. |
Material Systems
Four thermoelectric hosts are modeled. Each has its own transport-property fit (see Physics Model for the equations and Default Parameters for every constant) and its own allowed temperature window, enforced by the Thermal Gradient card and tied to that material's real stability limit rather than one generic range.
A. PbSe (Lead Selenide)
A rock-salt IV–VI narrow-gap semiconductor and, alongside PbTe, one of the leading mid-to-high-temperature thermoelectrics: strong band convergence and intrinsically low lattice thermal conductivity give optimized bulk/nanostructured samples zT ≈ 1.3–1.8 in the 800–950 K range. Dopants here are treated as simple substitutional/interstitial point defects (Na, Ag, Cu, Cl).
| Melting point | 1338–1351 K (1065–1078°C) |
| Tool's allowed T range | 300–1300 K — ~45–50 K margin below melting |
| Band gap Eg (model) | 0.28 eV |
| Available dopants | Na, Ag, Cu, Cl, Custom |
B. SnSe (Tin Selenide)
A layered orthorhombic IV–VI semiconductor, famous since Zhao et al. (Nature, 2014) for ultralow single-crystal lattice thermal conductivity along the b-axis, giving a record zT ≈ 2.6–2.8 near 800–950 K. It undergoes a structural Pnma→Cmcm phase transition around 750 K that further improves performance in the high-T phase; this tool adds a small extra thermal-conductivity term above 750 K to reflect that (see Physics Model, part D).
| Melting point | 1134 K |
| Tool's allowed T range | 300–1100 K — keeps the 750 K transition and the near-melting zT peak accessible |
| Band gap Eg (model) | 0.86 eV |
| Available dopants | Na, Ag, K, Custom |
C. MgAgSb — α-phase only
A low-to-mid-temperature p-type thermoelectric valued for a high power factor and low lattice thermal conductivity near room temperature (reported peak zT ≈ 1.2–1.4 near 475 K), attractive for waste-heat and wearable applications below ~200°C. MgAgSb exists in three polymorphs; only the low-temperature α-phase has this favorable transport behavior. It transforms to a β-phase (and eventually γ) above roughly 560 K, with different, unmodeled transport — so this tool restricts simulation to the α-phase window only, unlike the other three materials where the ceiling is set by melting.
| α→β transition | ≈560–573 K (true melting point is much higher, but irrelevant — the modeled phase doesn't survive that far) |
| Tool's allowed T range | 300–560 K — the entire range stays in the α-phase |
| Band gap Eg (model) | 0.18 eV |
| Available dopants | Ag, Zn, Ni, Custom |
D. Bi2(Se,Te)3
The benchmark commercial thermoelectric for near-room-temperature Peltier cooling and power generation — essentially every commercial TE module uses a Bi2Te3-based alloy. Alloying with Bi2Se3 (n-type) or Sb2Te3 (p-type) reduces lattice thermal conductivity below that of pure Bi2Te3; this tool's parameters target that optimized-alloy regime (klat ≈ 0.6 W/m/K at 300 K, vs. ≈1.2 W/m/K reported for unalloyed single-crystal Bi2Te3). Its narrow gap causes significant bipolar carrier excitation even near 300 K — the main reason its useful range is so much lower than the other three materials here, and why the field keeps searching for wider-gap alternatives for higher-T service. This tool's simplified single-parabolic-band model reaches zT ≈ 0.9–1.1 near room temperature (optimized, nanostructured real samples reach higher, up to ≈1.2–1.4, via mechanisms — band convergence, nanostructuring — this simple model doesn't capture).
| Melting point | 858 K (585°C) |
| Tool's allowed T range | 300–800 K |
| Band gap Eg (model) | 0.14 eV — narrowest of the four, dominant limitation |
| Available dopants | Cu, Ag, I, Custom |
Cu's D₀/Ea (1.7×10⁻&sup6; m²/s, 0.25 eV) come from a 2-point Arrhenius fit to two independent literature diffusion measurements — single-crystal fast-axis diffusion ≈1×10⁻¹⁰ m²/s at 300 K, and an effective sintered-pellet value ≈4×10⁻&sup9; m²/s at 483 K. It's the only dopant preset in this tool anchored to real measurements rather than estimated by analogy; see Default Parameters for the full table and its caveats.
Physics Model
A. Conservation Law
Dopant concentration $C(x,t)$ obeys a 1D continuity equation — the flux $J$ defined below is the only thing that moves mass around, and the zero-flux boundaries (part E, Numerical Method) mean nothing enters or leaves the leg:
B. The Soret Effect
Dopants migrate under the temperature gradient via thermodiffusion (thermomigration). The net atomic flux combines ordinary Fickian diffusion with a thermal-gradient (Soret) term:
The direction of net migration is set by the sign of the Heat of Transport ($Q^*$):
- If Q* > 0: Dopants move to the COLD side.
- If Q* < 0: Dopants move to the HOT side (Thermophilic).
The diffusivity itself follows an Arrhenius law with prefactor $D_0$ and activation energy $E_a$ (both per-dopant, set in the sidebar or a preset):
Note the model assumes complete ionization: the simulated dopant concentration $C$ is used directly as the free-carrier concentration in every transport equation below, with no separate ionization-fraction or trap-state treatment.
C. Mobility, Conductivity & Seebeck Coefficient
Carrier mobility follows a power law in temperature, with material-specific prefactor $\mu_0$ and exponent $m$ (values in Default Parameters):
The Seebeck coefficient starts from a Pisarenko-like baseline at 300 K (material constants $A$, $B$, $C_{ref}$), then gets a linear high-T boost before bipolar suppression is applied:
$s$ is the per-material "Seebeck slope" listed in Default Parameters. For SnSe specifically, $S_T$ is additionally capped at 550 µV/K before bipolar suppression, to prevent runaway growth at low doping/high T that the simple linear boost would otherwise produce — the other three materials didn't need this in testing but could in principle at extreme enough inputs.
D. Thermal Conductivity & Figure of Merit (zT)
Total thermal conductivity sums a material-specific lattice term, an electronic term from the Wiedemann–Franz law (Lorenz number $L_0=2.4\times10^{-8}$ W·Ω/K²), a bipolar term, and — for SnSe above 750 K only — a phase-transition term:
which combines with $S_T$ (after bipolar suppression, part below) and $\sigma$ into the figure of merit:
where $S$ is the Seebeck coefficient, $\sigma$ the electrical conductivity, and $\kappa_{tot}$ the total thermal conductivity (lattice + electronic + bipolar [+ phase, SnSe only]). The Avg ZT badge on the ZT tab averages this value across the leg at the final simulated (or truncated) time.
E. High-Temperature Accuracy (Bipolar Correction)
To prevent unrealistic $zT$ predictions at high temperatures (where standard single-band models fail), this simulation uses a bipolar correction calibrated to typical TE data. The activation factor is:
- Effective Band Gap: Each system uses its own $E_g$ estimate (Default Parameters) to calculate minority-carrier activation — the smaller $E_g$ is, the lower the temperature at which bipolar effects start eating into $S$ and $zT$. This is why Bi2Te3 ($E_g=0.14$ eV) rolls over so much earlier than PbSe ($E_g=0.28$ eV).
- Seebeck Suppression: As $T$ rises, $\xi$ grows and the $\frac{1}{1+5\xi}$ factor pulls $S$ down, reproducing the Seebeck "rollover" seen in real experiments.
- Thermal Conductivity: The $\kappa_{bi}$ term above grows with the same $\xi$, further lowering $zT$ toward realistic limits at high T.
Default Parameters
Every constant behind the Material Systems and Physics Model sections above, for direct inspection or reproduction outside this tool. Diffusion parameters (D₀, Ea, Q*) are order-of-magnitude estimates consistent with known diffusion trends (fast interstitial dopants like Cu/Ag vs. slower substitutional ones like Cl/I) rather than independently verified literature values for each exact dopant–host pair, with the single exception noted below.
Dopant Presets
| System | Dopant | D₀ (m²/s) | Ea (eV) | Q* (eV) | Default C₀ (cm⁻³) |
|---|---|---|---|---|---|
| PbSe | Na | 2.3×10⁻⁷ | 0.60 | +0.20 | 1×10¹⁹ |
| Ag (Fast) | 5.0×10⁻⁷ | 0.45 | +0.15 | 5×10¹⁸ | |
| Cu (Ultra-Fast) | 8.0×10⁻⁷ | 0.35 | +0.12 | 3×10¹⁸ | |
| Cl (n-type) | 1.0×10⁻⁸ | 0.80 | −0.10 | 2×10¹⁹ | |
| SnSe | Na (p-type) | 1.5×10⁻⁷ | 0.65 | +0.25 | 2×10¹⁹ |
| Ag (Fast) | 4.0×10⁻⁷ | 0.50 | +0.18 | 8×10¹⁸ | |
| K (Heavy) | 0.5×10⁻⁷ | 0.75 | +0.30 | 1×10¹⁹ | |
| Custom | 1.0×10⁻⁷ | 0.60 | 0.00 | 1×10¹⁹ | |
| MgAgSb (α) | Ag (Ultra-Fast) | 1.2×10⁻⁶ | 0.30 | +0.10 | 1×10¹⁹ |
| Zn (p-type) | 2.5×10⁻⁷ | 0.55 | +0.15 | 2×10¹⁸ | |
| Ni (Slow) | 1.0×10⁻⁸ | 0.70 | +0.20 | 5×10¹⁸ | |
| Custom | 1.0×10⁻⁷ | 0.50 | 0.00 | 1×10¹⁹ | |
| Bi2(Se,Te)3 | Cu (lit.-derived) | 1.7×10⁻⁶ | 0.25 | +0.18 | 3×10¹⁸ |
| Ag (est.) | 6.0×10⁻⁷ | 0.30 | +0.15 | 5×10¹⁸ | |
| I (est.) | 5.0×10⁻⁹ | 0.45 | −0.12 | 2×10¹⁸ | |
| Custom | 1.0×10⁻⁷ | 0.50 | 0.00 | 1×10¹⁹ |
Only Bi2Te3:Cu is anchored to real measurements (a 2-point Arrhenius fit across 300–483 K — see Material Systems, part D). Every other row, across all four systems, is an order-of-magnitude estimate. Q* values were not independently found in literature for any of these exact dopant–host pairs; their magnitudes (0.10–0.30 eV) match the right order of magnitude for reported thermomigration heat-of-transport values but should be treated as illustrative, not authoritative.
Transport-Model Constants
| System | μ₀ (cm²/V·s) | Exponent m | S₃₀₀ formula (µV/K) | Eg (eV) | κlat(300K) (W/m·K) | Seebeck slope s |
|---|---|---|---|---|---|---|
| PbSe | 1150 | 2.2 | 400−130(log C−18) | 0.28 | 1.4 | 0.0025 |
| SnSe | 250 | 2.0 | 350−100(log C−18) | 0.86 | 0.55 | 0.0016 |
| MgAgSb | 80 | 1.5 | 250−85(log C−19) | 0.18 | 0.8 | 0.0020 |
| Bi2(Se,Te)3 | 700 | 1.5 | 320−100(log C−19) | 0.14 | 0.6 | 0.0022 |
$\mu(T)=\mu_0(T/300)^{-m}$; $\kappa_{lat}(T) = \kappa_{lat}(300\text{K})\times(300/T)$ for all four systems (i.e. $\propto 1/T$). SnSe additionally caps $S_T$ at 550 µV/K and adds $\kappa_{phase}=0.1\times\frac{T-750}{50}$ for $T>750$ K. Universal constants shared by all four systems: Lorenz number $L_0=2.4\times10^{-8}$ W·Ω/K², bipolar prefactor 20 (i.e. $\kappa_{bi}=20\,(T/300)\,\xi$), Boltzmann constant $k_B = 8.617333\times10^{-5}$ eV/K.
Numerical Method
The tool solves the 1D continuity equation with an explicit finite-volume scheme, offloaded to a background Web Worker so the UI never blocks while a run is in progress. Space is divided into $N$ nodes $x_i = i\Delta x$ spanning the full leg length exactly ($x_0=0$, $x_{N-1}=L$).
Discrete Update
Interior nodes update from the flux imbalance across a full cell of width $\Delta x$:
The two boundary nodes ($i=0$ and $i=N-1$) sit exactly on the domain edge, so they only own a half cell — node 0 owns $[0,\Delta x/2]$, not $[-\Delta x/2, \Delta x/2]$, since there's no leg on the other side. With the zero-flux condition $J(0)=J(L)=0$ imposed at the true edges, that gives:
The factor of 2 (rather than the interior nodes' implicit factor of 1) is what makes the scheme conserve the true integrated mass $\int_0^L C\,dx$ exactly, to floating-point precision, rather than a quantity that implicitly treats the leg as one grid spacing longer than entered. This was verified by direct calculation: without the factor of 2, the boundary cells behave as if they were full-width, so the total simulated mass drifts by $\mathcal{O}(1/N)$ — about 1–2% at the default 70-point grid, rising to about 10% at the coarsest 10-point floor. With it, ∫C dx is conserved exactly regardless of grid resolution or how strong the Soret term is.
Upwind Advection
Each face flux $J_{i+1/2}$ combines a centered Fickian term with an upwinded Soret (advective) term — the concentration used for the advective part comes from whichever side the local drift is flowing from, not a simple average of both sides:
$C_{upwind}=C_i$ if $v_{i+1/2}\ge0$ (drift toward $+x$), else $C_{i+1}$. A centered average for the Soret term is only oscillation-free while the local cell Péclet number $\big(\frac{Q^*}{k_BT^2}\frac{\partial T}{\partial x}\big)\Delta x$ stays below ≈2; grid coarsening (below) enlarges $\Delta x$ exactly when that number is already large from a big $Q^*$ or steep gradient, so a centered scheme can and did produce negative concentrations in that regime. Upwinding trades a bit of numerical smearing for guaranteed monotonicity. A $\max(0,\cdot)$ floor is also applied to every update as a belt-and-suspenders backstop.
Adaptive Grid & Stability
- Adaptive grid: The spatial grid starts at $N=70$ points and is coarsened in steps of 5 (down to a floor of $N=10$) if the step budget (4,000,000 steps) would otherwise be exceeded — this keeps very fast dopants tractable without changing the physics. If the budget still can't cover the full requested anneal duration even at the coarsest grid, the run is truncated and a banner (plus a note in the CSV export) says so along with how much simulated time you actually got — it is never left unstated.
- CFL stability: The time step obeys both a diffusive and an advective limit, and the smaller of the two is used: $\Delta t = \min(\Delta t_{diff}, \Delta t_{adv})$, with
$\Delta t_{diff} = 0.4\,\dfrac{\Delta x^2}{D_{max}} \qquad \Delta t_{adv} = 0.25\,\dfrac{\Delta x}{v_{max}}$The marginal (exactly-stable) limits are $\Delta x^2/(2D)$ and $\Delta x/(2v)$ respectively — both figures above already include the boundary nodes' tighter half-cell requirement, so the 0.4 and 0.25 factors are true safety margins (not just margins for the interior nodes), not marginal values themselves.
- Snapshot sampling: Roughly 40 evenly spaced snapshots are stored across the run for the 3D Timeline view and CSV export; the 2D Final view compares only the first (t=0) and last snapshot.
- Boundary conditions: Both ends of the leg are closed (zero-flux, $J=0$) — dopant mass is neither absorbed nor emitted at the contacts, and (per the half-cell treatment above) the true integrated mass is conserved exactly, not approximately.
Limits & Validation Rules
Every hard bound the tool enforces, and why. Bounds on T_Hot, T_Cold, and Leg Length are enforced by clamping the input field itself (you'll see the number in the box change); the gradient cap is enforced by refusing to run and explaining why, never by silently changing a number you typed — the same is true of the Smart Input concentration formula (invalid syntax blocks the run with an inline error rather than falling back to something else).
| Quantity | Enforced limit | Reason |
|---|---|---|
| T_Hot & T_Cold | 300 K floor; ceiling is material-specific (see Material Systems: 1300/1100/560/800 K for PbSe/SnSe/MgAgSb/Bi2Te3) | Stay below melting (or, for MgAgSb, below the α-phase transition) with a safety margin; stay at/above room temperature |
| |T_Hot−T_Cold| / Leg Length | ≤ 40 K/mm | Keeps the linear profile physically reasonable and keeps the local cell Péclet number in check (see Numerical Method) |
| Leg Length | ≥ 2 mm, no upper bound | Avoids degenerately short legs; combined with the gradient cap this also bounds how steep a profile is reachable at all |
| Anneal Duration | 0.01–365 days | UI-level sanity bound |
| Initial concentration | Floored at 1×1015 cm⁻³ at t=0 (Smart Input formula or constant) | Avoids a zero/negative seed profile |
| Concentration, for property evaluation | Clamped to 1×1017–5×1020 cm⁻³ only when computing S/σ/zT at a point | Keeps the mobility/Seebeck fits inside their valid range; the underlying simulated concentration field itself is not clamped to this window, so the chart/CSV can still show values outside it |
| Grid points N | Starts at 70, auto-coarsens by 5 down to a floor of 10 | Keeps runtime/step-count bounded for fast dopants |
| Step budget | 4,000,000 steps per run | If still exceeded at N=10, the run is truncated — flagged via banner and CSV note, never silent |
| D₀, Q* (both custom and preset) | No hard bound | Known gap — extreme values are handled correctly by the upwind scheme, non-negativity floor, and step-budget/truncation logic, but can still make a run slow to converge or heavily grid-coarsened. Sanity-check unusually large entries against Default Parameters. |
Modeling Assumptions
- Purely 1D along the leg axis — no radial or cross-sectional variation.
- The temperature profile is fixed and linear for the entire anneal (no transient thermal solve, no coupling from doping back to $T$).
- Complete ionization: simulated dopant concentration $C$ is used directly as free-carrier concentration, with no separate ionization-fraction or trap-state treatment.
- No contact resistance, interfacial reactions, or mechanical/stress-driven transport.
- The bipolar correction is a calibrated approximation tuned to typical TE data, not a full band-structure calculation.
- D₀/Ea/Q* presets are order-of-magnitude estimates, consistent with known diffusion trends (fast interstitial dopants like Cu/Ag vs. slower substitutional ones), rather than independently verified literature values for each exact dopant–host pair — except Bi2Te3:Cu, whose D₀/Ea come from a 2-point Arrhenius fit to two literature diffusion measurements (300 K and 483 K, different sample types). See Default Parameters for the complete table.
Units & Symbols
| Quantity | Symbol | Unit |
|---|---|---|
| Temperature | T | K |
| Dopant / carrier concentration | C | cm⁻³ |
| Dopant flux | J | cm⁻²s⁻¹ |
| Diffusivity / diffusion prefactor | D / D₀ | m²/s |
| Activation energy | Ea | eV |
| Heat of transport | Q* | eV |
| Leg length | L | mm |
| Anneal duration | t | days |
| Seebeck coefficient | S | µV/K |
| Electrical conductivity | σ | S/cm |
| Carrier mobility / prefactor | μ / μ₀ | cm²/V·s |
| Mobility temperature exponent | m | (dimensionless) |
| Band gap | Eg | eV |
| Bipolar activation factor | ξ | (dimensionless) |
| Thermal conductivity (lat./elec./bipolar/phase/total) | κlat,elec,bi,phase,tot | W/m·K |
| Lorenz number | L₀ | W·Ω/K² |
| Figure of merit | zT | (dimensionless) |
| Boltzmann constant | kB | 8.617333×10⁻⁵ eV/K |
FAQ & Troubleshooting
I get an "Invalid Formula" error on the Concentration field — why?
The expression must be valid JavaScript math using only x and the functions listed under Smart Input. A common cause is missing multiplication signs — write 2*x, not 2x.
Why does the plot look coarser for very fast dopants like Cu or Ag?
Very high diffusivities or Soret velocities force a smaller stable time step. To stay within the step budget, the solver automatically coarsens the spatial grid — see Numerical Method above.
What exactly is in the exported CSV?
Two blocks — concentration and ZT — each with time (seconds) down the rows and position (mm) across the columns, covering every sampled snapshot of the most recently completed run.
Does the model include contact resistance or radiative heat loss?
No — see Modeling Assumptions (under Limits & Validation Rules) above. The thermal profile is treated as fixed and linear, and both ends of the leg are zero-flux boundaries for dopant transport — total dopant mass is conserved exactly (see Numerical Method).
I'm getting a "Gradient exceeds limit" error and the run won't start — why?
|T_Hot−T_Cold| / Leg Length is capped at 40 K/mm to keep the profile physically reasonable. The error message tells you the max ΔT for your current leg length, and the min leg length for your current ΔT — adjust either one.
An amber banner says my run was truncated — is my result still usable?
The physics up to the reported "actual" time is still valid — the run just didn't reach your full requested duration before hitting the 4,000,000-step budget. Try a shorter anneal duration, a smaller |Q*|, or a milder gradient to let it finish.