Esempio n. 1
0
def L63_gen():
    from dapper.mods.Lorenz63.sakov2012 import HMM as _HMM

    HMM = _HMM.copy()
    HMM.t.BurnIn = 0
    HMM.t.KObs = 10

    dpr.set_seed(3000)

    # xps
    xps = dpr.xpList()
    xps += da.Climatology()
    xps += da.OptInterp()
    xps += da.Var3D(xB=0.1)
    xps += da.ExtKF(infl=90)
    xps += da.EnKF("Sqrt", N=3, infl=1.30)
    xps += da.EnKF("Sqrt", N=10, infl=1.02, rot=True)
    xps += da.EnKF("PertObs", N=500, infl=0.95, rot=False)
    xps += da.EnKF_N(N=10, rot=True)
    xps += da.iEnKS("Sqrt", N=10, infl=1.02, rot=True)
    xps += da.PartFilt(N=100, reg=2.4, NER=0.3)
    xps += da.PartFilt(N=800, reg=0.9, NER=0.2)
    xps += da.PartFilt(N=4000, reg=0.7, NER=0.05)
    xps += da.PFxN(xN=1000, N=30, Qs=2, NER=0.2)

    # Run
    xps.launch(HMM, False, store_u=True)
    return xps
Esempio n. 2
0
def L96_table():
    import dapper.mods.Lorenz96 as model
    from dapper.mods.Lorenz96.sakov2008 import HMM as _HMM

    model.Force = 8.0  # undo pinheiro2019
    HMM = _HMM.copy()
    HMM.t.BurnIn = 0
    HMM.t.KObs = 10

    dpr.set_seed(3000)

    # xps
    xps = dpr.xpList()
    xps += da.Climatology()
    xps += da.OptInterp()
    xps += da.Var3D(xB=0.02)
    xps += da.ExtKF(infl=6)
    xps += da.EnKF("PertObs", N=40, infl=1.06)
    xps += da.EnKF("Sqrt", N=28, infl=1.02, rot=True)

    xps += da.EnKF_N(N=24, rot=True)
    xps += da.EnKF_N(N=24, rot=True, xN=2)
    xps += da.iEnKS("Sqrt", N=40, infl=1.01, rot=True)

    xps += da.LETKF(N=7, rot=True, infl=1.04, loc_rad=4)
    xps += da.SL_EAKF(N=7, rot=True, infl=1.07, loc_rad=6)

    xps.launch(HMM, store_u=True)

    table = xps.tabulate_avrgs(statkeys, decimals=4)
    return table.splitlines(True)
Esempio n. 3
0
# #### Imports

# %matplotlib notebook
from mpl_tools import is_notebook_or_qt as nb

import dapper as dpr
import dapper.da_methods as da

# #### Load experiment setup: the hidden Markov model (HMM)

from dapper.mods.Lorenz63.sakov2012 import HMM  # isort:skip

# #### Generate the same random numbers each time this script is run

seed = dpr.set_seed(3000)

# #### Simulate synthetic truth (xx) and noisy obs (yy)

HMM.t.T = 30  # shorten experiment
xx, yy = HMM.simulate()

# #### Specify a DA method configuration ("xp" for "experiment")

xp = da.EnKF('Sqrt', N=10, infl=1.02, rot=True)
# xp = da.Var3D()
# xp = da.PartFilt(N=100, reg=2.4, NER=0.3)

# #### Assimilate yy, knowing the HMM; xx is used to assess the performance

xp.assimilate(HMM, xx, yy, liveplots=not nb)
Esempio n. 4
0
"""Prettier, static illustration of Lorenz two-speed/scale/layer model."""
# Sorry for the mess.

import matplotlib as mpl
import numpy as np
from matplotlib import pyplot as plt

import dapper as dpr
from dapper.mods.LorenzUV.lorenz96 import LUV
from dapper.tools.math import ccat

# Setup
sd0 = dpr.set_seed(4)
# from dapper.mods.LorenzUV.wilks05 import LUV
nU, J = LUV.nU, LUV.J

dt = 0.005
t0 = np.nan
K = int(10 / dt)

step_1 = dpr.with_rk4(LUV.dxdt, autonom=True)
step_K = dpr.with_recursion(step_1, prog=1)

x0 = 0.01 * np.random.randn(LUV.M)
x0 = step_K(x0, int(2 / dt), t0, dt)[-1]  # BurnIn
xx = step_K(x0, K, t0, dt)

# Grab parts of state vector
ii = np.arange(nU + 1)
jj = np.arange(nU * J + 1)
circU = np.mod(ii, nU)
Esempio n. 5
0
def set_X0_and_simulate(hmm, xp):
    dpr.set_seed(3000)
    hmm.X0 = X0(TRUTH, 0)
    xx, yy = hmm.simulate()
    hmm.X0 = X0(GUESS, 0.1**2)
    return xx, yy
Esempio n. 6
0
"""Illustrate usage of DAPPER to benchmark multiple DA methods."""

import dapper as dpr

dpr.set_seed(3000)

##############################
# DA method configurations
##############################
xps = dpr.xpList()

from dapper.mods.Lorenz63.sakov2012 import HMM  # Expected rmse.a:

xps += dpr.Climatology()  # 7.6
xps += dpr.OptInterp()  # 1.25
xps += dpr.Var3D(xB=0.1)  # 1.03
xps += dpr.ExtKF(infl=90)  # 0.87
xps += dpr.EnKF('Sqrt', N=3, infl=1.30)  # 0.82
xps += dpr.EnKF('Sqrt', N=10, infl=1.02, rot=True)  # 0.63
xps += dpr.EnKF('PertObs', N=500, infl=0.95, rot=False)  # 0.56
xps += dpr.EnKF_N(N=10, rot=True)  # 0.54
xps += dpr.iEnKS('Sqrt', N=10, infl=1.02, rot=True)  # 0.31
xps += dpr.PartFilt(N=100, reg=2.4, NER=0.3)  # 0.38
xps += dpr.PartFilt(N=800, reg=0.9, NER=0.2)  # 0.28
# xps += dpr.PartFilt(       N=4000, reg=0.7  , NER=0.05)       # 0.27
# xps += dpr.PFxN(xN=1000,   N=30  , Qs=2     , NER=0.2)        # 0.56

# from dapper.mods.Lorenz96.sakov2008 import HMM    # Expected rmse.a:
# xps += dpr.Climatology()                                     # 3.6
# xps += dpr.OptInterp()                                       # 0.95
# xps += dpr.Var3D(xB=0.02)                                    # 0.41
Esempio n. 7
0
###########################
# Setup
###########################
PRMS = 'Lorenz'
if PRMS == 'Wilks':
    from dapper.mods.LorenzUV.wilks05 import LUV
else:
    from dapper.mods.LorenzUV.lorenz96 import LUV
nU = LUV.nU

K = 400
dt = 0.005
t0 = np.nan

dpr.set_seed(30)  # 3 5 7 13 15 30
x0 = np.random.randn(LUV.M)

true_step = with_rk4(LUV.dxdt, autonom=True)
model_step = with_rk4(LUV.dxdt_trunc, autonom=True)
true_K = with_recursion(true_step, prog=1)

###########################
# Compute truth trajectory
###########################
x0 = true_K(x0, int(2 / dt), t0, dt)[-1]  # BurnIn
xx = true_K(x0, K, t0, dt)

###########################
# Compute unresovled scales
###########################