Beispiel #1
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)
Beispiel #2
0
def L63_gen():
    from dapper.mods.Lorenz63.sakov2012 import HMM as _HMM

    HMM = _HMM.copy()
    HMM.tseq.BurnIn = 0
    HMM.tseq.Ko = 10

    # xps
    xps = dpr.xpList()
    xps += da.Climatology()
    xps += da.OptInterp()
    xps += da.Persistence()
    xps += da.PreProg(lambda k, xx, yy: xx[k])
    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)

    xps += da.OptPF(N=100, Qs=2, reg=0.7, NER=0.3)
    xps += da.EnKS("Serial", N=30, Lag=1)
    xps += da.EnRTS("Serial", N=30, DeCorr=0.99)

    for xp in xps:
        xp.seed = 3000

    # Run
    xps.launch(HMM, False, store_u=True)
    return xps
Beispiel #3
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
Beispiel #4
0
def test_L63():
    from dapper.mods.Lorenz63.sakov2012 import HMM as _HMM

    xps = dpr.xpList()
    xps += da.EnKF("Sqrt", N=10, infl=1.02, rot=True)
    xps += da.PartFilt(N=20, reg=2.4, NER=0.3)
    xps += da.OptInterp()
    # xps += da.iEnKS('Sqrt',  N=10,  infl=1.02,rot=True)

    HMM = _HMM.copy()
    HMM.tseq.BurnIn = HMM.tseq.dto
    HMM.tseq.Ko = 1

    xps.launch(
        HMM,
        free=False,
        statkeys=True,
        liveplots=None,
        store_u=False,
        fail_gently=False,
        save_as=False,
    )
    print(xps.tabulate_avrgs(["rmse.a"]))

    # Disabled coz magic doesn't work any more on python 3.7
    # spell_out(HMM)
    # spell_out(xps[-1])
    # spell_out(xps[-1].stats)
    # spell_out(xps[-1].avrgs)

    assert True  # An assertion for pytest to count
    return HMM, xps  # Return useful stuff
Beispiel #5
0
def L96_gen():
    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.tseq.BurnIn = 0
    HMM.tseq.Ko = 10

    # xps
    xps = dpr.xpList()
    xps += da.Climatology()
    xps += da.OptInterp()
    xps += da.Persistence()
    xps += da.PreProg(lambda k, xx, yy: xx[k])
    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)

    for xp in xps:
        xp.seed = 3000

    xps.launch(HMM, store_u=True)
    return xps
Beispiel #6
0
def test_L63():
    from dapper.mods.Lorenz63.sakov2012 import HMM as _HMM

    xps = dpr.xpList()
    xps += da.EnKF('Sqrt', N=10, infl=1.02, rot=True)
    xps += da.PartFilt(N=20, reg=2.4, NER=0.3)
    xps += da.OptInterp()
    # xps += da.iEnKS('Sqrt',  N=10,  infl=1.02,rot=True)

    HMM = _HMM.copy()
    HMM.t.BurnIn = HMM.t.dtObs
    HMM.t.KObs = 1

    xps.launch(HMM,
               free=False,
               liveplots="all",
               store_u=False,
               fail_gently=False)

    for xp in xps:
        xp.stats.replay("all")

    xp.stats.replay(t2=1)
    xp.stats.replay(t2=0.0)
    xp.stats.replay(t2=0.3)
    xp.stats.replay(t2=0.8)
    xp.stats.replay(t2=0.8, t1=0.2)
    xp.stats.replay(t2=np.inf)
    xp.stats.replay(t2=np.inf, speed=1)
    xp.stats.replay(t2=np.inf, pause_a=0, pause_f=0)

    assert True  # An assertion for pytest to count
    return HMM, xps  # Return useful stuff
Beispiel #7
0
def test_L96():
    xps = dpr.xpList()

    from dapper.mods.Lorenz96.sakov2008 import HMM as _HMM
    xps += da.EnKF('PertObs', N=40, infl=1.06)
    xps += da.EnKF('Serial', N=28, infl=1.02, rot=True)
    xps += da.OptInterp()
    xps += da.Var3D(xB=0.02)
    xps += da.ExtKF(infl=10)
    xps += da.LETKF(N=6, rot=True, infl=1.05, loc_rad=4, taper='Step')

    # from dapper.mods.Lorenz96.bocquet2015loc import HMM
    # xps += da.EnKF_N(  N=24, rot=True ,infl=1.01)
    # xps += da.PartFilt(N=3000,NER=0.20,reg=1.2)
    # xps += da.PFxN(    N=1000,xN=100, NER=0.9,Qs=0.6)

    HMM = _HMM.copy()
    # HMM.t.BurnIn = 10*HMM.t.dtObs
    # HMM.t.KObs = 30
    HMM.t.BurnIn = HMM.t.dtObs
    HMM.t.KObs = 2

    xps.launch(HMM,
               free=False,
               liveplots="all",
               store_u=False,
               fail_gently=False,
               save_as=False)

    for xp in xps:
        xp.stats.replay("all")

    xp.stats.replay(t2=1)
    xp.stats.replay(t2=0.0)
    xp.stats.replay(t2=0.3)
    xp.stats.replay(t2=0.8)
    xp.stats.replay(t2=0.8, t1=0.2)
    xp.stats.replay(t2=np.inf)
    xp.stats.replay(t2=np.inf, speed=1)
    xp.stats.replay(t2=np.inf, pause_a=0, pause_f=0)

    assert True  # An assertion for pytest to count
    return HMM, xps  # Return useful stuff
Beispiel #8
0
def test_L96():
    xps = dpr.xpList()

    from dapper.mods.Lorenz96.sakov2008 import HMM as _HMM

    xps += da.EnKF("PertObs", N=40, infl=1.06)
    xps += da.EnKF("Serial", N=28, infl=1.02, rot=True)
    xps += da.OptInterp()
    xps += da.Var3D(xB=0.02)
    xps += da.ExtKF(infl=10)
    xps += da.LETKF(N=6, rot=True, infl=1.05, loc_rad=4, taper="Step")

    # from dapper.mods.Lorenz96.bocquet2015loc import HMM
    # xps += da.EnKF_N(  N=24, rot=True ,infl=1.01)
    # xps += da.PartFilt(N=3000,NER=0.20,reg=1.2)
    # xps += da.PFxN(    N=1000,xN=100, NER=0.9,Qs=0.6)

    HMM = _HMM.copy()
    # HMM.tseq.BurnIn = 10*HMM.tseq.dto
    # HMM.tseq.Ko = 30
    HMM.tseq.BurnIn = HMM.tseq.dto
    HMM.tseq.Ko = 2

    xps.launch(
        HMM,
        free=False,
        statkeys=True,
        liveplots=None,
        store_u=False,
        fail_gently=False,
        save_as=False,
    )
    print(xps.tabulate_avrgs(["rmse.a"]))

    # spell_out(HMM)
    # spell_out(xps[-1])
    # spell_out(xps[-1].stats)
    # spell_out(xps[-1].avrgs)

    assert True  # An assertion for pytest to count
    return HMM, xps  # Return useful stuff
Beispiel #9
0
"""Settings from `bib.wiljes2016second`."""

import numpy as np

import dapper.mods as modelling
from dapper.mods.Lorenz63.sakov2012 import HMM as _HMM
from dapper.mods.Lorenz63.sakov2012 import Nx

HMM = _HMM.copy()
HMM.tseq = modelling.Chronology(0.01, dko=12, T=4**5, BurnIn=4)

jj = np.array([0])
Obs = modelling.partial_Id_Obs(Nx, jj)
Obs['noise'] = 8
HMM.Obs = modelling.Operator(**Obs)

####################
# Suggested tuning
####################
# Reproduce benchmarks for NETF and ESRF (here EnKF-N) from left pane of Fig 1.
# from dapper.mods.Lorenz63.wiljes2017 import HMM # rmse.a reported by DAPPER / PAPER:
# ------------------------------------------------------------------------------
# HMM.tseq.Ko = 10**2
# xps += OptInterp()                                                # 5.4    / N/A
# xps += Var3D(xB=0.3)                                              # 3.0    / N/A
# xps += EnKF_N(N=5)                                                # 2.68   / N/A
# xps += EnKF_N(N=30,rot=True)                                      # 2.52   / 2.5
# xps += LNETF(N=40,rot=True,infl=1.02,Rs=1.0,loc_rad='NA')         # 2.61   / ~2.2
# xps += PartFilt(N=35 ,reg=1.4,NER=0.3)                            # 2.05   / 1.4 *
# *: tuning settings not given
#
Beispiel #10
0
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)

# #### Average the time series of various statistics

xp.stats.average_in_time()