# gong-wire The third chaos toy, after `../chaos-toy-examples` (two coupled oscillators) and `../fput-chain` (the struck FPUT chain). The FPUT chain cascades among its 32 nearly harmonic modes, which span only about 4 kHz when the lowest is at 100 Hz; a gong or a cymbal spreads energy upward through a dense, inharmonic spectrum reaching well above 10 kHz, over tens of milliseconds. This project adds the two ingredients that make the difference, bending stiffness and curvature, to the FPUT chain. ## The model (`wire.py`) $N$ unit beads on a wire between two pinned ends move sideways, $y_j$. The wire may be built as a shallow arch of height $H_d$, rest shape $z_j = 4 H_d x(1-x)$. The energy is $$\sum_j \left[\tfrac12 T D_j^2 + \beta \left(z'_j D_j + \tfrac12 D_j^2\right)^2\right] + \tfrac12 K_b \sum_j (y_{j+1} - 2y_j + y_{j-1})^2, \qquad D_j = y_{j+1} - y_j,$$ with $z'_j$ the slope of link $j$ at rest. Each term has a role: - *Stretching* ($\beta$). A sideways offset $D$ between neighbours stretches the link by about $D^2/2$. With $H_d = K_b = 0$ the model is exactly the FPUT-$\beta$ chain, read as the sideways motion of a beaded string; this is what passes energy between modes, as the midplane stretching does in a plate. - *Bending* ($K_b$). Resistance to kinks makes the frequencies grow like the square of the wavenumber at short wavelengths, as in a plate: with $K_b = 4$ and 64 beads the modes span 100 Hz to about 17 kHz instead of 100 Hz to 4 kHz. - *Dome* ($H_d$). With a curved rest shape the link stretch has a part linear in $D$, which stiffens the wire (as curvature stiffens a shell) and adds a quadratic coupling ($z' D^3$ in the energy), through which two modes can drive a third at the sum of their frequencies, the three-wave coupling of gongs and cymbals. With a dome the normal modes are no longer sines and are computed numerically. Damping is friction plus dashpots between neighbours; with bending, the dashpot decay rate grows roughly in proportion to frequency, as in a metal plate. `run` uses leapfrog time stepping with a Crank-Nicolson step for the damping. Checks: the force equals minus the energy gradient to 1e-10, the stiffness matrix matches the linearized force to 1e-7, and energy is conserved to about 1e-4 in the exploration runs. ## Results (2026-10-05) **Exploration, undamped** (`experiments.py explore`, `results/explore.png`; 64 beads, strike centered on bead 14 with width 3, lowest mode at 100 Hz). Share of the energy in modes above 4 kHz at 10, 50 and 300 ms: | bending | dome | E = 10 | E = 50 | | --- | --- | --- | --- | | 0 | 0 | 3%, 20%, 19% (top mode 4.1 kHz) | 12%, 12%, 11% | | 4 | 0 | 0.6%, 6%, 16% | 15%, 48%, 74% | | 4 | 3 | 1%, 9%, 21% | 24%, 44%, 63% | | 4 | 8 | 1%, 8%, 22% | 15%, 42%, 61% | At $E = 2$ almost nothing reaches 4 kHz in any configuration. With bending, a strong strike's energy climbs into the 4 to 17 kHz band over the first 50 to 100 ms: a bloom rather than the instant mixing of the plain chain, which has no high band to climb into. The dome speeds up the early spreading (at $E = 10$ the share above 1 kHz after 10 ms rises from 24% without a dome to 34 to 43% with one), but its effect is smaller than that of bending. **Bloom without chaos.** In the web app (damped: lowest mode ringing 3 s, highest 0.3 s) the cascade and the chaos separate clearly. At $E = 20$ about 10% of the energy reaches above 4 kHz within 20 ms, yet the local Lyapunov exponent stays near zero and strikes differing by $10^{-6}$ end identical. At $E = 60$ a perturbation grows only by about $e^{4.6}$ within 200 ms; at $E = 200$, 59% of the energy reaches above 4 kHz by 35 ms, the motion is chaotic for the first 0.11 s (peak rate 334 per second, total growth about $e^{14}$), and 8 strikes differing by $10^{-6}$ end with spectra that differ by 4.5 dB. As in the FPUT chain, a cascade is not the same as sensitivity: the bloom is reproducible from strike to strike over a wide range of strengths, and only very hard strikes leave a different spectrum each time. Bending detunes the modes, which presumably raises the threshold for chaos much as the on-site springs did in the FPUT chain. ## Web application `web/index.html` (single page; published as a private artifact at https://claude.ai/artifact/RqEkYpuX4wqHXT7Rcfs3ZU) runs 8 strikes in parallel Web Workers. Controls: strike energy, bending stiffness, dome height, number of beads, strike position and width, the difference between strikes, ring times of the lowest and highest modes, the pitch of the lowest mode (held so the highest mode stays below 20 kHz), and length. Panels: the domed wire with its beads (with slow motion), strike A's energy per mode labelled by pitch, the share of each strike's energy above 1 and 4 kHz, the final spectra against pitch, the local Lyapunov exponent with the energy, and a spectrogram of any strike (selector or arrow keys). Presets: Soft strike ($E = 3$), Gong ($E = 20$), Hard strike ($E = 200$), String (FPUT, no bending or dome). Locally: `cd web && python -m http.server`. ## Running Experiments run on the office workstation (`~/work/gong-wire`, Python 3.9 with numpy and scipy), plots locally: WORKERS=18 python experiments.py explore # results/explore.npz python plots.py # results/explore.png