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>