Example #1
0
obserr = 3.0
cycle_period = 3600 * 1

iX, jX = rv.make_coords(ni, nj)
X = np.zeros((ni * nj * nv, nt + 1))
loc = np.zeros((2, nt + 1))
wind = np.zeros((nt + 1, ))
obs = np.zeros((nt + 1, nobs * nv))
iObs = np.zeros((nt + 1, nobs * nv))
jObs = np.zeros((nt + 1, nobs * nv))
vObs = np.zeros((nt + 1, nobs * nv))

##initial state
np.random.seed(0)
X_bkg = rv.make_background_flow(ni, nj, nv, dx, ampl=1e-4)
X[:, 0] = X_bkg + rv.make_state(ni, nj, nv, iStorm, jStorm, Rmw, Vmax, Vout)

for n in range(nt + 1):
    print(n)
    u, v = rv.X2uv(ni, nj, X[:, n])
    zeta = rv.uv2zeta(u, v, dx)
    loc[0, n], loc[1, n] = rv.get_center_ij(u, v, dx)
    wind[n] = rv.get_max_wind(u, v)

    for p in range(nobs):
        for v in range(nv):
            iObs[n, p * nv +
                 v] = np.random.uniform(-obs_range, obs_range) + loc[0, n]
            jObs[n, p * nv +
                 v] = np.random.uniform(-obs_range, obs_range) + loc[1, n]
            vObs[n, p * nv + v] = v
Example #2
0
iBias = 0
jBias = 0
Rsprd = 0
Vsprd = 0

filter_kind = sys.argv[1]  #'EnSRF'
ns = int(sys.argv[2])
nens = int(sys.argv[3])  # ensemble size
Csprd = int(sys.argv[4])
obsR = int(sys.argv[5])
obserr = int(sys.argv[6])  # observation error spread
localize_cutoff = 0

##truth
iX, jX = rv.make_coords(ni, nj)
Xt = rv.make_state(ni, nj, nv, iStorm, jStorm, Rmw, Vmax, Vout)
ut, vt = rv.X2uv(ni, nj, Xt)

##DA trials
casename = '{}_s{}_N{}_C{}_R{}_err{}'.format(filter_kind, ns, nens, Csprd,
                                             obsR, obserr)

if os.path.exists(outdir + casename + '.npy'):
    state_error = np.load(outdir + casename + '.npy')
else:
    state_error = np.zeros((nrealize, nens + 1))
    state_error[:, :] = np.nan

for realize in range(r0, r0 + 100):
    np.random.seed(realize)  # fix random number seed, make results predictable
Example #3
0
#diss_ens = 3e2*np.ones(nens) ##+ np.random.uniform(-2, 4, (nens,))

##initial ensemble state
np.random.seed(0)
X_bkg = rv.make_background_flow(ni, nj, nv, dx, ampl=1e-4)
iX, jX = rv.make_coords(ni, nj)
X = np.zeros((ni * nj * nv, nens, nt + 1))
loc = np.zeros((2, nens, nt + 1))
wind = np.zeros((nens, nt + 1))

iStorm_ens = np.zeros(nens)
jStorm_ens = np.zeros(nens)
for m in range(nens):
    iStorm_ens[m] = iStorm + np.random.normal(0, 1) * Csprd
    jStorm_ens[m] = jStorm + np.random.normal(0, 1) * Csprd
    X[:, m, 0] = rv.make_state(ni, nj, nv, iStorm_ens[m], jStorm_ens[m], Rmw,
                               Vmax, Vout)
    X[:, m, 0] += X_bkg + rv.make_background_flow(ni, nj, nv, dx, ampl=5e-5)

Xt = np.load(outdir + 'truth_state.npy')
obs = np.load(outdir + 'obs.npy')
iObs = np.load(outdir + 'obs_i.npy')
jObs = np.load(outdir + 'obs_j.npy')
vObs = np.load(outdir + 'obs_v.npy')

for n in range(nt):
    print(n)

    ##DA update
    H = rv.obs_operator(iX, jX, nv, iObs[n, :], jObs[n, :], vObs[n, :])
    krange = np.arange(2, 2 * ns + 1, 2)
    Xa = DA.filter_update(ni, nj, nv, X[:, :, n].T, iX, jX, H, iObs[n, :],