Detonation cell widths from soot-foil records — with a measurement you check by eye before you trust it.
Your image never leaves your machine. The Python runs inside this tab through WebAssembly — there is no server, nothing is uploaded, and nothing is stored. The first run downloads about 25 MB of runtime, which your browser then caches.
Required — every length in the method is physical, so an image alone cannot be measured. Give the extent of the image itself, not of any figure around it. Crop axes and labels away first.
Leave these alone unless the verification overlay comes out wrong. The cell width is found from the record itself.
starting…
This is the part that matters. The measurement can fail quietly: if the two families of trajectories are misread, a number still comes out and still looks plausible. So look at the overlay — each contour should wrap one trajectory, red for one family and blue for the other, and the contours should follow the tracks rather than cut across them.
Do the contours follow the tracks?
The result is a distribution. A cellular front does not have one cell width, it has a spread of them, so the median below is a summary of the histogram — not a substitute for it.
The pattern turns along a record, so each block is given its own pair of family angles and its own measurement. These are the numbers behind the right-hand panel above.
Every number in the histogram is the gap between two consecutive marks on one vertical cut. Count the marks between two labels and you have done the arithmetic yourself — there is nothing else in the statistics.
The per-block fields blended with a partition of unity, which is why the contours stay continuous across the joins rather than breaking at them.
A soot foil carries two families of triple-point trajectories, and the cell width is the transverse distance between adjacent trajectories of one family. Two traps make this easy to get wrong, silently. The pattern is usually sheared, so the trajectory bounding a cell transversely is not the one directly above it, and a nearest-neighbour rule invents a tail of wide cells. And the cells group into larger patches, so the dominant periodicity of the raw image — what autocorrelation or a spectrum returns — is the grouping, not the cell. On one experimental plate that error was a factor of three.
SootViz separates the families first, with a bank of oriented line filters, fits their angles per block so the pattern may turn along a long record, and measures each family on its own. The two families are then independent measurements of the same quantity, so their disagreement is an error bar, reported with every result alongside an orientation coherence.
Four levels of evidence, in increasing order of realism. Reproduce any of them
with sootviz benchmark; the figures behind them are in the
benchmark gallery.
| case | true λ | measured | error | families |
|---|---|---|---|---|
| regular | 2.50 mm | 2.48 | −0.8 % | 0 % |
| sheared (asymmetric families) | 2.50 mm | 2.48 | −0.8 % | 2 % |
| irregular (0.20 λ jitter) | 2.00 mm | 1.88 | −6.0 % | 0 % |
| noisy, low contrast | 3.00 mm | 2.52 | −16.0 % | 6 % |
The last row is the documented limit, not a hidden one: heavy noise at low contrast shortens the plateau and costs about 15 %. A real record in that state reports a high scale sensitivity, which is the signal to quote a distribution rather than a number.
Taileb, Melguizo-Gavilanes & Chinnayya, Combustion and Flame 218 (2020) 247, Fig. 5. The authors report a range over their three chemistry models rather than a value per panel — “the cell size was numerically estimated to lie in the range of 0.9 mm ≤ λnum ≤ 1.9 mm” (p. 17) — and state that detailed chemistry gives the smaller cell, while single-step was tuned to the experimental size. So what can honestly be checked is range containment and that ordering:
| panel | SootViz | IQR | in reported range |
|---|---|---|---|
| single-step | 2.07 mm | 1.50–2.74 | yes |
| three-step chain-branching | 1.28 mm | 0.93–1.72 | yes |
| detailed | 0.93 mm | 0.71–1.19 | yes |
Ordering single-step ≥ three-step ≥ detailed is reproduced, and the two extremes land on the authors' two bounds. Their figures are copyrighted and are not reproduced here.
A numerical foil from our own solver, 30 × 20 mm: λ = 2.35 mm, IQR 1.79–3.06, families agree to 10 %, scale sensitivity 6 %. A photographed experimental plate, 5 m × 1 m, where the pattern turns along the record: λ = 0.162 m over 13 blocks, with family angles swinging from +35°…+65° to −65°…−45°. That plate is the instructive one — the families disagree by 19 % and the scale sensitivity is 23 %, so SootViz warns on both counts instead of handing over a clean-looking number.
This is free and always will be. Citing it is what makes it worth maintaining, and it lets a reader check how your cell widths were obtained.
@software{sootviz,
author = {Thyagarajan, Karthik},
title = {{SootViz}: cell-width measurement from detonation soot-foil records},
year = {2026},
note = {Strawhat CFD},
url = {https://github.com/fedres/sootviz}
}
And the paper describing the method (Appendix C):
@article{thyagarajan2026lbfs,
author = {Thyagarajan, Karthik and Melguizo-Gavilanes, Jos\'e},
title = {A systematic assessment of the lattice {B}oltzmann flux solver with
face-local gating as a scheme for flame acceleration, detonation and
deflagration-to-detonation transition. {P}art {I}: one-dimensional
detonation dynamics and inviscid detonations},
year = {2026}
}