Sequential ensemble Kalman filters

This note describes the formulation of sequential ensemble Kalman filter solvers implemented in OOPS. Unlike the local volume solvers described in Local volume solvers, which update each grid point using all observations within a localization radius simultaneously, sequential solvers process observations one at a time. After each observation is assimilated, its impact is propagated to the remaining observation ensembles and to the state ensemble via regression.

The MPI-parallel implementation of the sequential update (distributing observations across processors while keeping the global sequential ordering) follows Anderson and Collins (2007).

General description

For each observation \(k\) (processed sequentially), the algorithm performs three steps:

  1. Observation ensemble update: Compute the analysis update for the \(k\)-th observation ensemble using only that observation’s innovation and error variance. This step is specific to the flavor of sequential EnKF (e.g., EAKF).

  2. Observation-to-observation regression: For each remaining observation \(j > k\), compute the regression coefficient

    \[\beta_{jk} = \frac{\text{cov}(y_j^b, y_k^b)}{\text{var}(y_k^b)}\]

    and apply a localized update to the \(j\)-th observation ensemble:

    \[\Delta y_j = \rho_{jk} \, \beta_{jk} \, \Delta y_k\]

    where \(\rho_{jk}\) is the localization between observations \(j\) and \(k\), and \(\Delta y_k\) is the increment computed in step 1.

  3. Observation-to-state regression: For each grid point \(i\), compute the regression coefficient

    \[\boldsymbol{\beta}_{ik} = \frac{\mathbf{X}'_i \, \mathbf{y}_k^{b\prime}}{\|\mathbf{y}_k^{b\prime}\|^2}\]

    and apply a localized update to the state ensemble at grid point \(i\):

    \[\Delta \mathbf{X}_i = \rho_{ik} \, \boldsymbol{\beta}_{ik} \, \Delta y_k^T\]

    where \(\rho_{ik}\) is the localization between grid point \(i\) and observation \(k\).

Here \(\mathbf{y}_k^{b\prime}\) denotes the ensemble perturbations of the \(k\)-th observation prior (deviations from the ensemble mean), and \(\mathbf{X}'_i\) is the state ensemble perturbation matrix at grid point \(i\).

Ensemble Adjustment Kalman Filter (EAKF)

The EAKF (Anderson 2001) is the only sequential EnKF flavor currently implemented. For a scalar observation \(k\) with prior ensemble \(\{y_{k,j}^b\}_{j=1}^{N_e}\), innovation \(d_k = y_k^o - \bar{y}_k^b\), and observation error variance \(\sigma_k^2\), the observation ensemble update is:

\[K_k = \frac{P_k^b}{P_k^b + \sigma_k^2}\]
\[P_k^a = (1 - K_k) \, P_k^b\]
\[\Delta y_{k,j} = K_k \, d_k + \left(\sqrt{\frac{P_k^a}{P_k^b}} - 1\right) (y_{k,j}^b - \bar{y}_k^b)\]

where \(P_k^b = \frac{1}{N_e - 1} \sum_{j=1}^{N_e} (y_{k,j}^b - \bar{y}_k^b)^2\) is the prior ensemble variance, \(K_k\) is the scalar Kalman gain, and \(P_k^a\) is the posterior variance. The increment \(\Delta y_{k,j}\) adjusts both the ensemble mean (first term) and the ensemble spread (second term) deterministically — no perturbed observations are needed.