Esempio n. 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)
Esempio n. 2
0
def test_L63():
    from dapper.mods.Lorenz63.sakov2012 import HMM

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

    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
Esempio n. 3
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
Esempio n. 4
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. 5
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
Esempio n. 6
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
Esempio n. 7
0
def data():
    from dapper.mods.LA.small import HMM as _HMM

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

    xps = dpr.xpList(unique=True)

    # yapf: disable
    xps += da.EnKF('Sqrt'   , N=20)
    xps += da.EnKF('PertObs', N=20)
    xps += da.EnKF('DEnKF'  , N=20)
    for Lag in [0, 1, 3]:
        xps += da.EnKS('Sqrt'   , N=20, Lag=Lag)
        xps += da.EnKS('PertObs', N=20, Lag=Lag)
        xps += da.EnKS('DEnKF'  , N=20, Lag=Lag)
        for nIter in [1, 4]:
            for MDA in [False, True]:
                xps += da.iEnKS('Sqrt'   , N=20, Lag=Lag, nIter=nIter, MDA=MDA)
                xps += da.iEnKS('PertObs', N=20, Lag=Lag, nIter=nIter, MDA=MDA)
                xps += da.iEnKS('Order1' , N=20, Lag=Lag, nIter=nIter, MDA=MDA)
    # yapf: enable

    for xp in xps:
        xp.seed = 3000

    xps.launch(HMM, store_u=True, save_as=False)
    print(xps.tabulate_avrgs(["rmse.a", "rmse.f", "rmse.u", "rmse.s"]))

    return xps
Esempio n. 8
0
def test_L63():
    from dapper.mods.Lorenz63.sakov2012 import HMM

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

    HMM.t.BurnIn = HMM.t.dtObs
    HMM.t.KObs = 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"]))

    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
Esempio n. 9
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
Esempio n. 10
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
Esempio n. 11
0
##############################
# DA Configurations
##############################
# Param ranges
params = dict(
    xB       = [.1, .2, .4, 1],
    N        = [5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20, 25, 30, 35, 40, 45, 50],
    infl     = 1+np.array([0, .01, .02, .04, .07, .1, .2, .4, .7, 1]),
    rot      = [True, False],
    loc_rad  = dpr.round2sigfig([a*b for b in [.1, 1, 10] for a in [1, 2, 4, 7]], 2),
)
# Combines all the params suitable for a method. Faster than "manual" for-loops.
for_params = dpr.get_param_setter(params, seed=3000+np.arange(10), F=[8, 10])

xps = dpr.xpList()
xps += for_params(da.Climatology)
xps += for_params(da.OptInterp)
xps += for_params(da.Var3D, B="eye")
xps += for_params(da.EnKF, upd_a="PertObs")
xps += for_params(da.EnKF, upd_a="Sqrt")
xps += for_params(da.EnKF_N, infl=1.0)
xps += for_params(da.LETKF)


##############################
# Run experiments
##############################

# Paralellize/distribute experiments across CPUs.
mp = False     # 1 CPU only
Esempio n. 12
0
# and the dynamics for the DA methods.
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

# Note: An alternative approach might be to simply
# write our own `simulate()` which merely sets the `Force` parameter,
# rather than sampling it.


# #### DA methods configurations

xps = dpr.xpList()
# xps += da.PartFilt(N=1000, reg=1)  # works OK with Nx=6
for N in [20, 50]:
    # xps += da.EnKF('Sqrt', N, infl=1.04)
    xps += da.EnKF_N(N, xN=2)
    for Lag in [1, 4, 20]:
        xps += da.iEnKS("Sqrt", N, Lag=Lag, xN=2, wtol=1e-5)
# TODO 4: Add 3D- and 4D-Var


# #### Launch experiments

scriptname = "basic_3" if nb else __file__
save_as = xps.launch(
    HMM, scriptname, setup=set_X0_and_simulate,
    mp=False,           # Multiprocessing
Esempio n. 13
0
"""Tests with the LA model, which are very useful for testing
boundary cases of the iEnKS (e.g. nIter=1, Lag=0)."""

##############################
# Preamble
##############################
import numpy as np

import dapper as dpr
from dapper.dict_tools import deep_getattr
from dapper.mods.LA.small import HMM

HMM.t.BurnIn = 0
HMM.t.KObs = 10

xps = dpr.xpList(unique=True)

# yapf: disable
xps += dpr.EnKF('Sqrt',    N=20)
xps += dpr.EnKF('PertObs', N=20)
xps += dpr.EnKF('DEnKF',   N=20)
for Lag in [0, 1, 3]:
    xps += dpr.EnKS('Sqrt',    N=20, Lag=Lag)
    xps += dpr.EnKS('PertObs', N=20, Lag=Lag)
    xps += dpr.EnKS('DEnKF',   N=20, Lag=Lag)
    for nIter in [1, 4]:
        for MDA in [False, True]:
            xps += dpr.iEnKS('Sqrt',    N=20, Lag=Lag, nIter=nIter, MDA=MDA)
            xps += dpr.iEnKS('PertObs', N=20, Lag=Lag, nIter=nIter, MDA=MDA)
            xps += dpr.iEnKS('Order1',  N=20, Lag=Lag, nIter=nIter, MDA=MDA)
# yapf: enable