TraTT is a time-dependent Takagi–Taupin solver: it simulates what an X-ray diffraction
measurement would see while a GHz sound wave is still entering a perfect crystal, before it has
filled the whole crystal. It is for people working on time-resolved X-ray diffraction from acoustic
waves, who want to know how the acoustic satellites of a Bragg peak build up in time. The
repository contains the solver (pip install tratt), the analysis scripts, a lab notebook of the
results, and the source of a conference poster.
Main result, a calculation: satellite n forms in τn = ΛP/(vs|Jn(S)|) (in Laue one Pendellösung period of the satellite, first maximum at τn/2), independent of the crystal thickness, and full TT (points) follows the closed formulas (lines) without a fitting parameter (notebook Entries 1, 9, 24). The physics background, the question and the dimensionless numbers are in docs/background.md.
| Date | Study | Result |
|---|---|---|
| 2026-10-27 | Solver checks | Convergence, limit and boundary-flux checks of the solver as one table and one figure. |
| 2026-10-19 | Overshoot map under a linear turn-on | Largest excess 0.603 at S = 3.8, on the rise-time boundary of the scan. |
| 2026-10-15 | Transfer function from strain spectrum to reflectivity | Closed form matches TT with no fit parameter; two parts withdrawn for short windows. |
| 2026-10-08 | Quasi-static condition and surface waves | No result transfers to SAW geometry as it stands. |
pip install tratt
With uv, in a new environment:
uv venv
uv pip install tratt
.venv/bin/python -c "import tratt"uv venv
uv pip install tratt
.venv\Scripts\python -c "import tratt"Requires Python 3.12+; the package is the solver (src/tratt, numpy and scipy only). Notebooks, figure scripts and the poster build need a
clone of this repository.
These are calculation results only; no experiment has been compared yet. Each item gives the notebook entries with the numbers, scripts and limitations.
The vertical axis of the right panel, β/K, is the detuning β from the Bragg condition in units of the acoustic wave vector K = 2π/Λac, so the peaks sit at the satellite orders n.
1. Characteristic time of each satellite (Entries 1, 9, 24). Satellite n at time t has the intensity of a uniform, unstrained crystal of thickness vst with coupling α|Jn(S)|. With t̃ = t/ttr: In = sin²(πα|Jn|t̃) in Laue and tanh²(πα|Jn|t̃) in Bragg geometry. These formulas agree with the full TT calculation without a fitting parameter. The characteristic time of satellite n is therefore τn = ΛP/(vs|Jn(S)|): in Laue one oscillation period, with the first maximum at τn/2; in Bragg 99 % is reached at 0.95τn. It does not depend on the crystal thickness, and the satellite with the largest |Jn(S)| forms first. The figure at the top shows it.
2. Gradual turn-on and overshoot (Entries 28, 30, 67). If the amplitude A(t) changes in time, different depths of the crystal have different amplitudes. Satellite n then depends on the amplitude during the last transit time, Θn(t̃) = ∫01 Jn(S A(t̃−ζ)) dζ with depth ζ = z/L, and not only on the present amplitude. With a linear turn-on over Trise the satellite can overshoot: its maximum during the turn-on exceeds the steady value. In a scan of 11,211 (S, Trise) conditions for the first Laue satellite (α = 0.5, R = 0.0125) the largest overshoot is 0.603 of the incident intensity, at the edge of the scan (Trise = 4ttr). The map comes from the Θn law; full TT at five points agrees with it to 8×10⁻⁵. Near a Bessel zero (J1 = 0 at the final amplitude) the satellite reaches 0.53 during the turn-on and 1.3×10⁻⁴ at the end.
3. Validity of the independent-satellite approximation (Entries 19, 26, 52–54). Results 1 and 2 treat each satellite independently, so their error grows with R = Λac/ΛP. For the satellite centre intensity in time it is about 0.9R at S = 1.5 and at most 0.03 for R ≤ 0.05 (30 random cases). The steady-state satellite populations of the filled crystal reach a 5 % median error at R = 0.34–0.57. For larger R the satellites are coupled through the forward beam. This is a limit of the approximate laws, not of the TT solver.
Solver checks. Against the closed-form Laue and Bragg solutions without sound the error is
below 10⁻⁹; the RK4 step converges at fourth order; against the independent Floquet solver for a
filled crystal the agreement is about 10⁻⁵ (Entry 42). The 54 tests in tests/ cover these.
4. Outlook: measurement of the phonon spectrum (Entries 59, 64). For small strain, the Fourier component of the reflectivity at frequency ω is the strain spectrum multiplied by a crystal transfer function H(ω). We obtained H(ω) analytically to first order. Inside the Darwin width (the angular range of strong reflection) it agrees with full TT, while the perturbation theory of Sondhauss & Wark (2003) differs from full TT by a factor of 3–8. Comparison with previous work is not complete (Entries 60, 61).
Every study in the repository, with its notebook entries, status and reproduce commands: docs/research/README.md.
KPS 2026 Fall Meeting, poster P2.17 (Jeju, 22 October 2026). Isaac Yong, Ouyoung Kwon, Hyunjung Kim — Center for Ultrafast Phase Transformation, Sogang University. The preview is built from the current source, whose notation was corrected after the meeting; the printed poster is the source at commit 40676f4.
uv sync --extra dev
uv run pytest -q # 54 tests: analytic limits, Floquet cross-check, formation law
uv run python explore/make_poster_figs.py # poster figures -> figures/poster/
uv run python poster/build.py # poster/poster.md -> poster/out/poster.pdf
The banner and the Sogang and CUPT logos are in poster/assets/.
src/tratt/ solver package
core.py Laue IVP and Bragg Riccati (RK4, vectorised over eta and time; Bragg absorption kappa)
drive.py travelling acoustic drive phi(zeta; t): front, rise, amplitude profile
floquet.py exact Floquet solver for a uniformly filled crystal (independent cross-check)
observe.py channel windows, convergence time, peak width
cube.py rocking curve over time (I(eta, t) cubes)
sweep.py parameter grids
tests/ analytic ground truth as asserts
notes/ lab_notebook.md: every result, with its script and its caveats (numbered entries)
explore/nb/ one script per notebook entry (eNN_*.py), with small cached results
explore/ figure scripts; make_poster_figs.py draws the poster figures
examples/ satellite_movie.py: an 18 s movie of the satellites forming (Entry 24 conditions)
poster/ poster.md (the only source of poster text), build.py (layout + checks), fonts
figures/ figures referenced by the notebook and the poster
DESIGN.md physics conventions, analytic limits, assumptions
This work was supported by the National Research Foundation of Korea, grant RS-2021-NR059920.
See CITATION.cff.
MIT, see LICENSE.




