variational⚓︎
Variational DA methods (iEnKS, 4D-Var, etc).
Var4D
⚓︎
4D-Var.
Cycling scheme is same as in iEnKS (i.e. the shift is always 1*ko).
This implementation does NOT do gradient decent (nor quasi-Newton) in an inner loop, with simplified models. Instead, each (outer) iteration is computed non-iteratively as a Gauss-Newton step. Thus, since the full (approximate) Hessian is formed, there is no benefit to the adjoint trick (back-propagation). => This implementation is not suited for big systems.
Incremental formulation is used, so the formulae look like the ones in iEnKS.
iEnKS
⚓︎
Iterative EnKS.
Special cases: EnRML, ES-MDA, iEnKF, EnKF raanes2019.
As in bocquet2014, optimization uses Gauss-Newton. See bocquet2012a for Levenberg-Marquardt. If MDA=True, then there's not really any optimization, but rather Gaussian annealing.
Args: upd_a (str): Analysis update form (flavour). One of:
- "Sqrt" : as in ETKF , using a deterministic matrix square root transform.
- "PertObs": as in EnRML , using stochastic, perturbed-observations.
- "Order1" : as in DEnKF of [sakov2008b][].
Lag: Length of the DA window (DAW, multiples of dko, i.e. cycles).
- Lag=1 (default) => iterative "filter" iEnKF [sakov2012a][].
- Lag=0 => maximum-likelihood filter [zupanski2005][].
Shift : How far (in cycles) to slide the DAW. Fixed at 1 for code simplicity.
nIter : Maximal num. of iterations used (>=1). Default: 10. Supporting nIter==0 requires more code than it's worth.
wtol : Rel. tolerance defining convergence. Default: 0 => always do nIter iterations. Recommended: 1e-5.
MDA : Use iterations of the "multiple data assimlation" type. Ref emerick2012
bundle: Use finite-diff. linearization instead of of least-squares regression. Makes the iEnKS very much alike the iterative, extended KF (IEKS).
xN : If set, use EnKF_N() pre-inflation. See further documentation there.
Total number of model simulations (of duration dto): N * (nIter*Lag + 1). (due to boundary cases: only asymptotically valid)
Refs: bocquet2012a, bocquet2013, bocquet2014.
var_method
⚓︎
Declare default variational arguments.
iEnKS_update(upd_a, E, DAW, HMM, stats, EPS, y, time, Rm12, xN, MDA, threshold)
⚓︎
Perform the iEnKS update.
This implementation includes several flavours and forms,
specified by upd_a
(See iEnKS
)