Skip to content

KuramotoSivashinsky

Systems / ODEs / Chaotic attractors

The canonical 1-D model of spatiotemporal chaos — flame fronts and falling films, chaotic in space and time.

continuous · ODE32 dimensionsspatiotemporal

KuramotoSivashinsky spatiotemporal field

spatiotemporal field

Definition

@staticmethod
def _equations(Y, t, *, N, L):
    # 7-point central weights (Trefethen-style) for periodic, equispaced grid.
    # First derivative (6th-order): D1 * f / dx
    w1 = (
        -1.0 / 60.0,
        3.0 / 20.0,
        -3.0 / 4.0,
        0.0,
        3.0 / 4.0,
        -3.0 / 20.0,
        1.0 / 60.0,
    )
    # Second derivative (6th-order): D2 * f / dx^2
    w2 = (
        1.0 / 90.0,
        -3.0 / 20.0,
        3.0 / 2.0,
        -49.0 / 18.0,
        3.0 / 2.0,
        -3.0 / 20.0,
        1.0 / 90.0,
    )
    # Fourth derivative (7-point central, 4th-order accurate): D4 * f / dx^4
    w4 = (-1.0 / 6.0, 2.0, -6.5, 28.0 / 3.0, -6.5, 2.0, -1.0 / 6.0)
    offsets = (-3, -2, -1, 0, 1, 2, 3)

    dx = L / N
    inv_dx = 1.0 / dx
    inv_dx2 = inv_dx * inv_dx
    inv_dx4 = inv_dx2 * inv_dx2

    rhs = []
    for j in range(N):
        # Nonlinear term: -u * u_x (structure-preserving)
        ux = 0.0
        for r, c in zip(offsets, w1, strict=True):
            idx = (j + r) % N
            ux += c * Y(idx)
        ux *= inv_dx

        nonlinear = -Y(j) * ux

        # u_xx: 6th-order central
        uxx = 0.0
        for r, c in zip(offsets, w2, strict=True):
            idx = (j + r) % N
            uxx += c * Y(idx)
        uxx *= inv_dx2

        # u_xxxx: 7-point central
        uxxxx = 0.0
        for r, c in zip(offsets, w4, strict=True):
            idx = (j + r) % N
            uxxxx += c * Y(idx)
        uxxxx *= inv_dx4

        rhs.append(nonlinear - uxx - uxxxx)
    return rhs

Parameters

Symbol Default Role
N 32 number of grid modes
L 22 domain length (sets the number of unstable modes)

Properties

Lyapunov spectrum
TODO — dim 32 > 6 — full spectrum too slow
Kaplan–Yorke dimension
TODO — requires a numeric Lyapunov spectrum
Divergence ∇·f
$\nabla\!\cdot f = \frac{89201.7777777778}{L^{2}} - \frac{313174698.666667}{L^{4}}$
+ per-node nonlinear terms (over 32 nodes)
Equilibria
TODO — dim 32 > 8 — equilibrium search skipped

Define it in TSDynamics

import tsdynamics as ts

sys = ts.systems.KuramotoSivashinsky()
traj = sys.integrate(final_time=100.0, dt=0.01)

exps = sys.lyapunov_spectrum()
ts.kaplan_yorke_dimension(exps)

Reference

Kuramoto & Tsuzuki (1976), Prog. Theor. Phys. 55, 356-369; Sivashinsky (1977), Acta Astronaut. 4, 1177-1206

BibTeX
@misc{kuramotosivashinsky,
  title = {KuramotoSivashinsky system},
  note = {Kuramoto & Tsuzuki (1976), Prog. Theor. Phys. 55, 356-369; Sivashinsky (1977), Acta Astronaut. 4, 1177-1206}
}