dapper.mods.Lorenz96.demo

Demonstrate the Lorenz-96 model.

 1"""Demonstrate the Lorenz-96 model."""
 2
 3# For a deeper introduction, see
 4# "DA-tutorials/T4 - Dynamical systems, chaos, Lorenz.ipynb"
 5
 6from matplotlib import pyplot as plt
 7from numpy import eye
 8
 9import dapper.mods as modelling
10from dapper.mods.Lorenz96 import step, x0
11from dapper.tools.viz import amplitude_animation
12
13simulator = modelling.with_recursion(step, prog="Simulating")
14
15M = 40
16N = 3
17
18x0 = x0(M)
19E0 = x0 + 1e-3 * eye(M)[:N]
20
21dt = 0.05
22xx = simulator(E0, k=500, t=0, dt=dt)
23
24ani = amplitude_animation(xx, dt=dt, interval=70)
25
26plt.show()
def simulator(x0, k, *args, **kwargs):
131    def fun_k(x0, k, *args, **kwargs):
132        xx = np.zeros((k+1,)+x0.shape)
133        xx[0] = x0
134
135        # Prog. bar name
136        if prog == False:  # noqa: E712
137            desc = None
138        elif prog is None:
139            desc = "Recurs."
140        else:
141            desc = prog
142
143        for i in progbar(range(k), desc):
144            xx[i+1] = func(xx[i], *args, **kwargs)
145
146        return xx
M = 40
N = 3
x0 = array([1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
E0 = array([[1.001e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00], [1.000e+00, 1.000e-03, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00], [1.000e+00, 0.000e+00, 1.000e-03, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00]])
dt = 0.05
xx = array([[[ 1.00100000e+00, 0.00000000e+00, 0.00000000e+00, ..., 0.00000000e+00, 0.00000000e+00, 0.00000000e+00], [ 1.00000000e+00, 1.00000000e-03, 0.00000000e+00, ..., 0.00000000e+00, 0.00000000e+00, 0.00000000e+00], [ 1.00000000e+00, 0.00000000e+00, 1.00000000e-03, ..., 0.00000000e+00, 0.00000000e+00, 0.00000000e+00]], [[ 1.34234318e+00, 3.89771192e-01, 3.80804028e-01, ..., 3.90164738e-01, 3.90210219e-01, 3.99530052e-01], [ 1.34140145e+00, 3.90721676e-01, 3.80766910e-01, ..., 3.90164738e-01, 3.90210173e-01, 3.99520742e-01], [ 1.34139231e+00, 3.89827608e-01, 3.81763316e-01, ..., 3.90164738e-01, 3.90210173e-01, 3.99520697e-01]], [[ 1.66697943e+00, 7.57759134e-01, 7.26326987e-01, ..., 7.61309360e-01, 7.61978241e-01, 7.96364063e-01], [ 1.66611068e+00, 7.58663241e-01, 7.26274528e-01, ..., 7.61309352e-01, 7.61977572e-01, 7.96329716e-01], [ 1.66607771e+00, 7.57885713e-01, 7.27261357e-01, ..., 7.61309352e-01, 7.61977564e-01, 7.96329067e-01]], ..., [[ 2.79388325e+00, 6.80452529e+00, 6.40332999e+00, ..., -5.97713353e-01, 2.68266118e+00, 5.72796923e-01], [ 8.03774836e-01, -4.76401648e+00, 1.75068278e+00, ..., -1.71158581e+00, 1.55213177e+00, 7.28414650e+00], [-3.35141991e+00, 2.51575683e+00, 9.24551460e-01, ..., 4.47504474e+00, 1.14298247e+01, 1.82111185e+00]], [[ 3.26111482e+00, 7.69569164e+00, 6.80245232e+00, ..., -8.07489405e-01, 3.17770275e+00, 1.45852872e+00], [-9.77597048e-01, -4.10636768e+00, 1.67156580e+00, ..., -1.40405892e+00, 1.39049497e+00, 7.42269555e+00], [-2.68725295e+00, 2.51189176e+00, 2.19503480e+00, ..., 5.51541798e+00, 1.07261795e+01, -2.31750503e+00]], [[ 3.94820333e+00, 8.49555135e+00, 6.01673238e+00, ..., -1.56203233e+00, 3.72063181e+00, 2.58131566e+00], [-2.32905981e+00, -3.01773923e+00, 1.21017702e+00, ..., -1.10873459e+00, 1.32059687e+00, 7.42203417e+00], [-7.08260758e-01, 2.23093929e+00, 3.23173843e+00, ..., 6.59152038e+00, 8.67624819e+00, -5.55816692e+00]]])
ani = <matplotlib.animation.FuncAnimation object>