dynamodels
A Model couples a governing equation to a pre-allocated state history and a pluggable time integrator. Every physical model in the package — three low-order oscillators, two spatially extended PDEs, and the Lorenz systems — implements the same interface:
time_integrate(Nt)advances the state,get_observable_hist()returns what a sensor would measure, andvisualize_history()plots both.
The package itself depends only on numpy, scipy, matplotlib and typeguard.

Where to go
- Getting started — install, the five-line quickstart, the
Modelinterface. - Example usage — the
Modelinterface end to end in an executed notebook: integration, the history buffer, observables, ensembles and integrators. - Available Models — one page per physical model, each with the governing equations and a figure of its time evolution: Lorenz63, Lorenz96, Van der Pol, Rijke tube, Annular combustor, Kuramoto-Sivashinsky (1-D), Kuramoto-Sivashinsky (2-D), Kuznetsov oscillator.
- API reference —
Model,Integrator,HistoryTracker,utils. - Learn more — Tutorials on thermoacoustics, the Rijke tube and annular
combustor notebooks; Characterizing a model, nonlinear time-series diagnostics
with
ntsa, the sibling package built on this one.
Ecosystem
ntsa— nonlinear time-series analysis (Lyapunov exponents, delay embeddings, regime classification, bifurcation sweeps) for any model that follows thedynamodelsprotocol.- romda — bias-aware ensemble data assimilation built on top of both.
Citing
If a model in this package is central to your work, please cite its original reference, listed on that model's page. To cite the package itself:
@software{novoa2026dynamodels,
author = {N{\'o}voa, Andrea},
title = {dynamodels -- dynamical systems models},
year = {2026},
version = {v0.1.0},
publisher = {Zenodo},
doi = {10.5281/zenodo.21843589},
url = {https://doi.org/10.5281/zenodo.21843589},
}