FPUT - Fermi-Pasta-Ulam-Tsingou Problem Simulator
A Python package for simulating the classic Fermi-Pasta-Ulam-Tsingou (FPUT) problem - one of the most famous problems in nonlinear dynamics and statistical mechanics.
Background
The FPUT problem originated from a 1950s computer experiment at Los Alamos National Laboratory. Enrico Fermi, John Pasta, and Stan Ulam (with programmer Mary Tsingou) investigated a chain of nonlinear oscillators, expecting to observe thermalization (energy equipartition). Instead, they discovered a surprising recurrence phenomenon - the system returned almost exactly to its initial state after many cycles.
This unexpected result challenged the foundations of statistical mechanics and led to the development of soliton theory and chaos theory.
Installation
pip install fput
For development:
git clone https://github.com/yourusername/fput.git
cd fput
pip install -e ".[dev]"
Quick Start
from fput import FPUTSimulator
import matplotlib.pyplot as plt
# Create a simulator with 32 particles, alpha=0.25
sim = FPUTSimulator(N=32, alpha=0.25, dt=0.05)
# Set initial condition: fundamental sine wave
sim.set_initial_mode(mode=1, amplitude=4)
# Run simulation for 160 fundamental periods
result = sim.run(total_time=160, save_interval=10)
# Visualize the results
from fput.visualization import FPUTVisualizer
viz = FPUTVisualizer(result.time_points, result.mode_energies)
viz.plot_energy_evolution(style="overlay")
plt.show()
Features
- Interactive GUI: User-friendly graphical interface for real-time simulation and visualization
- Multiple Nonlinearities: Support for both α (quadratic) and β (quartic) nonlinear couplings
- Numerical Integration: Runge-Kutta 4 and Velocity Verlet integrators
- Normal Mode Analysis: Convert between physical and normal mode coordinates
- Visualization: Built-in plotting tools for energy evolution and recurrence analysis
- Extensible: Easy to customize for your research needs
Graphical User Interface
The package includes an interactive GUI for exploring the FPUT problem visually:
Launching the GUI
After installation:
# Method 1: Using the command
fput-gui
# Method 2: Using Python module
python -m fput.gui
# Method 3: Direct import
from fput.gui import main
main()
GUI Features
- Real-time plotting: Watch energy evolution as the simulation runs
- Interactive controls: Adjust parameters, pause/resume, and reset
- Multiple views: Energy evolution, phase space, participation ratio, and heat maps
- Quick presets: Classic FPUT, weak nonlinearity, and strong nonlinearity configurations
- FPUT recurrence detection: Automatically identifies energy return to initial mode
Examples
Classic FPUT Experiment
Reproduce the original FPUT results:
from fput import FPUTSimulator
from fput.visualization import FPUTVisualizer
sim = FPUTSimulator(N=32, alpha=0.25)
sim.set_initial_mode(mode=1, amplitude=4)
result = sim.run(total_time=160, save_interval=10)
viz = FPUTVisualizer(result.time_points, result.mode_energies)
viz.plot_energy_evolution(style="stacked")
Beta Nonlinearity
from fput import FPUTBetaSimulator
sim = FPUTBetaSimulator(N=32, beta=1.0)
sim.set_initial_mode(mode=1, amplitude=1.0)
result = sim.run(total_time=200)
Energy Recurrence Analysis
from fput.utils import find_recurrence_times
recurrences = find_recurrence_times(
result.time_points,
result.mode_energies[:, 0],
initial_energy=result.mode_energies[0, 0]
)
print(f"Recurrence times: {recurrences}")
Documentation
The Physics
The FPUT system consists of a chain of particles connected by nonlinear springs. The Hamiltonian is:
H = Σ(1/2 * P_k²) + 1/2 * Σ((Q_{k+1} - Q_k)²) + α/3 * Σ((Q_{k+1} - Q_k)³)
where:
Q_kis the displacement of particle kP_kis the momentum of particle kαis the nonlinear coupling parameter
In normal mode coordinates, the system reveals the surprising energy sharing patterns that puzzled Fermi, Pasta, Ulam, and Tsingou.
Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
License
This project is licensed under the MIT License - see the LICENSE file for details.
References
- Fermi, E., Pasta, J., & Ulam, S. (1955). Studies of Nonlinear Problems I. Los Alamos Report LA-1940.
- Tsingou, M. (Original programmer, now properly recognized!)
- Ford, J. (1992). The Fermi-Pasta-Ulam problem: Paradox turns discovery. Physics Reports, 213(5), 271-310.
Acknowledgments
This package is dedicated to the memory of Enrico Fermi, John Pasta, Stan Ulam, and especially Mary Tsingou, whose computational work made the original discovery possible.
Release files for fput 0.6.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| fput-0.6.0.tar.gz | 33.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fput-0.6.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 60.9 kB
Release files / fput-0.6.0.tar.gz
| Download URL | fput-0.6.0.tar.gz |
|---|---|
| Size | 33.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7a781a71bdb548143ddb05d78d321cba2095366b28bdae9e4fe88c66427d456f
|
|
BLAKE2b-256 checksum How to use checksums |
44333eb03b300260210e5e5f3e62901036eeb96b21a7229260d4007c949cfddd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.8
|
Release files / fput-0.6.0-py3-none-any.whl
| Download URL | fput-0.6.0-py3-none-any.whl |
|---|---|
| Size | 27.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
186afc1160f7889ffcd1d0af943cb06057de5f45450bb587ceaccf381fffd3d1
|
|
BLAKE2b-256 checksum How to use checksums |
db90914c6598fbd70befaea3715920a0f4847d38ef829d57e0999dcc32c1524d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.8
|