dapper.mods.Lorenz96.spantini2019
Try reproducing Figure 9 of Spantini's coupling/nonlinear-transport paper.
1"""Try reproducing Figure 9 of Spantini's coupling/nonlinear-transport paper.""" 2 3import numpy as np 4 5import dapper.mods as modelling 6from dapper.mods.Lorenz96 import Tplot, dstep_dx, step, x0 7from dapper.tools.localization import nd_Id_localization 8 9tseq = modelling.Chronology(0.02, dto=0.4, Ko=2000, Tplot=Tplot, BurnIn=2 * Tplot) 10Nx = 40 11x0 = x0(Nx) 12Dyn = { 13 "M": Nx, 14 "model": step, 15 "linear": dstep_dx, 16 "noise": 0, 17} 18X0 = modelling.GaussRV(mu=x0, C=0.1) 19jj = np.arange(0, Nx, 2) 20Obs = modelling.partial_Id_Obs(Nx, jj) 21Obs["noise"] = 0.5 22Obs["localizer"] = nd_Id_localization((Nx,), (2,), jj) 23HMM = modelling.HiddenMarkovModel(Dyn, Obs, tseq, X0) 24 25#################### 26# Suggested tuning 27#################### 28 29# # rmse.a 30# xps += da.Climatology() # 3.6 31# xps += da.OptInterp() # 2.5 32# xps += da.Var3D(B="eye", xB=4) # 2.3 33# xps += da.EnKF ("Sqrt", N=40 , infl=1.10) # 2.2 34# xps += da.EnKF ("Sqrt", N=60 , infl=1.10) # 1.3 35# xps += da.EnKF ("Sqrt", N=100, infl=1.10) # 0.97 36# xps += da.LETKF( N=40 , infl=1.10, loc_rad=4) # 1.0 37# xps += da.LETKF( N=60 , infl=1.02, loc_rad=4) # 0.89 38# xps += da.LETKF( N=100, infl=1.02, loc_rad=4) # 0.84 39# xps += da.iEnKS("Sqrt", N=40 , infl=1.10, Lag=2) # 0.52 40# xps += da.iEnKS("Sqrt", N=60 , infl=1.10, Lag=2) # 0.47 41# xps += da.iEnKS("Sqrt", N=100, xN=1, Lag=2) # 0.43
tseq =
<Chronology>
- K: 40020
- Ko: 2000
- T: 800.4
- BurnIn: 20
- dto: 0.4
- dt: 0.02
Nx =
40
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.])
Dyn =
{'M': 40, 'model': <function step>, 'linear': <function dstep_dx>, 'noise': 0}
X0 =
GaussRV({
'C': <CovMat>
M: 40
kind: 'diag'
trunc: 1.0
rk: 40
full: (only computing/printing corners)
[[0.1 0. 0. ... 0. 0. 0. ]
[0. 0.1 0. ... 0. 0. 0. ]
[0. 0. 0.1 ... 0. 0. 0. ]
...
[0. 0. 0. ... 0.1 0. 0. ]
[0. 0. 0. ... 0. 0.1 0. ]
[0. 0. 0. ... 0. 0. 0.1]]
diag:
[0.1 0.1 0.1 ... 0.1 0.1 0.1],
'mu': 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.]),
'M': 40
})
jj =
array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34,
36, 38])
Obs =
{'M': 20, 'model': Direct obs. at [ 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38]
<function partial_Id_Obs.<locals>.model>, 'linear': Constant matrix
[[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.]
[0. 0. 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. 0. 0. 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. 0. 0. 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. 0. 0. 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. 0. 0. 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. 0. 0. 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. 0. 0. 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. 0. 0. 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. 0. 0. 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. 0. 0. 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. 0. 0. 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. 0. 0.
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.
0. 0. 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. 0. 0. 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. 0. 0. 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. 0. 0. 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. 0. 0. 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. 0. 0. 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. 0. 0. 1. 0.]]
<function partial_Id_Obs.<locals>.linear>, 'noise': 0.5, 'localizer': <function localization_setup.<locals>.localization_now>}
HMM =
HiddenMarkovModel({
'Dyn':
Operator({
'M': 40,
'model': <function step>,
'noise':
GaussRV({
'mu': array([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., 0.]),
'M': 40,
'C': 0
}),
'linear': <function dstep_dx>
}),
'Obs':
<TimeDependentOperator> CONSTANT operator sepcified by .Op1:
Operator({
'M': 20,
'model':
Direct obs. at [ 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28
30 32 34 36 38]
<function partial_Id_Obs.<locals>.model>,
'noise':
GaussRV({
'C': <CovMat>
M: 20
kind: 'diag'
trunc: 1.0
rk: 20
full:
[[0.5 0. 0. 0. 0. 0. 0. 0. 0.
0.
0. 0. 0. 0. 0. 0. 0. 0. 0.
0. ]
[0. 0.5 0. 0. 0. 0. 0. 0. 0.
0.
0. 0. 0. 0. 0. 0. 0. 0. 0.
0. ]
[0. 0. 0.5 0. 0. 0. 0. 0. 0.
0.
0. 0. 0. 0. 0. 0. 0. 0. 0.
0. ]
[0. 0. 0. 0.5 0. 0. 0. 0. 0.
0.
0. 0. 0. 0. 0. 0. 0. 0. 0.
0. ]
[0. 0. 0. 0. 0.5 0. 0. 0. 0.
0.
0. 0. 0. 0. 0. 0. 0. 0. 0.
0. ]
[0. 0. 0. 0. 0. 0.5 0. 0. 0.
0.
0. 0. 0. 0. 0. 0. 0. 0. 0.
0. ]
[0. 0. 0. 0. 0. 0. 0.5 0. 0.
0.
0. 0. 0. 0. 0. 0. 0. 0. 0.
0. ]
[0. 0. 0. 0. 0. 0. 0. 0.5 0.
0.
0. 0. 0. 0. 0. 0. 0. 0. 0.
0. ]
[0. 0. 0. 0. 0. 0. 0. 0. 0.5
0.
0. 0. 0. 0. 0. 0. 0. 0. 0.
0. ]
[0. 0. 0. 0. 0. 0. 0. 0. 0.
0.5
0. 0. 0. 0. 0. 0. 0. 0. 0.
0. ]
[0. 0. 0. 0. 0. 0. 0. 0. 0.
0.
0.5 0. 0. 0. 0. 0. 0. 0. 0.
0. ]
[0. 0. 0. 0. 0. 0. 0. 0. 0.
0.
0. 0.5 0. 0. 0. 0. 0. 0. 0.
0. ]
[0. 0. 0. 0. 0. 0. 0. 0. 0.
0.
0. 0. 0.5 0. 0. 0. 0. 0. 0.
0. ]
[0. 0. 0. 0. 0. 0. 0. 0. 0.
0.
0. 0. 0. 0.5 0. 0. 0. 0. 0.
0. ]
[0. 0. 0. 0. 0. 0. 0. 0. 0.
0.
0. 0. 0. 0. 0.5 0. 0. 0. 0.
0. ]
[0. 0. 0. 0. 0. 0. 0. 0. 0.
0.
0. 0. 0. 0. 0. 0.5 0. 0. 0.
0. ]
[0. 0. 0. 0. 0. 0. 0. 0. 0.
0.
0. 0. 0. 0. 0. 0. 0.5 0. 0.
0. ]
[0. 0. 0. 0. 0. 0. 0. 0. 0.
0.
0. 0. 0. 0. 0. 0. 0. 0.5 0.
0. ]
[0. 0. 0. 0. 0. 0. 0. 0. 0.
0.
0. 0. 0. 0. 0. 0. 0. 0. 0.5
0. ]
[0. 0. 0. 0. 0. 0. 0. 0. 0.
0.
0. 0. 0. 0. 0. 0. 0. 0. 0.
0.5]]
diag:
[0.5 0.5 0.5 ... 0.5 0.5 0.5],
'mu': array([0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.]),
'M': 20
}),
'linear':
Constant matrix
[[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.]
[0. 0. 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. 0. 0. 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. 0. 0. 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. 0. 0. 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. 0. 0. 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. 0. 0. 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. 0. 0. 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. 0. 0. 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. 0. 0. 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. 0.
0. 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. 0. 0. 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. 0. 0.
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.
0. 0. 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. 0. 0. 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. 0. 0. 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. 0. 0. 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. 0. 0. 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. 0. 0. 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. 0. 0. 1. 0.]]
<function partial_Id_Obs.<locals>.linear>,
'localizer':
<function
localization_setup.<locals>.localization_now at
0x7fa23fdb2320>
}),
'tseq':
<Chronology>
- K: 40020
- Ko: 2000
- T: 800.4
- BurnIn: 20
- dto: 0.4
- dt: 0.02,
'X0':
GaussRV({
'C': <CovMat>
M: 40
kind: 'diag'
trunc: 1.0
rk: 40
full: (only computing/printing corners)
[[0.1 0. 0. ... 0. 0. 0. ]
[0. 0.1 0. ... 0. 0. 0. ]
[0. 0. 0.1 ... 0. 0. 0. ]
...
[0. 0. 0. ... 0.1 0. 0. ]
[0. 0. 0. ... 0. 0.1 0. ]
[0. 0. 0. ... 0. 0. 0.1]]
diag:
[0.1 0.1 0.1 ... 0.1 0.1 0.1],
'mu': 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.]),
'M': 40
}),
'liveplotters': [],
'sectors': {},
'name': 'Lorenz96/spantini2019.py'
})