Local Ensemble data assimilation in OOPS

The Local Ensemble DA application is a generic application for running data assimilation with Local Ensemble Kalman filters. It can be extended to use any Local EnKF that updates state gridpoints independently from each other by using observations within a localization distance from a gridpoint.

Configuration file (e.g. letkf.yaml) for running LocalEnsembleDA application has to contain the following sections:

  • geometry - geometry for the background and analysis files

  • background - ensemble background members (currently used both for computing H(x) and as backgrounds)

  • observations - describes observations, observation errors, observation operators used in the assimilation, and the horizontal localization

  • driver - describes optional modifications to the behavior of the LocalEnsembleDA driver

  • local ensemble DA - configuration of the local ensemble DA solver package

Supported modifications to the driver

  • Read HX from disk instead of computing it at run-time.

driver:
  read HX from disk: false #default value
  • Compute posterior observer and output test prints for the oma statistics. One might choose to set this flag to false in order to speed up completion of the localEnsembleDA solver.

driver:
  do posterior observer: true #default value
  • Run LocalEnsembleDA in observer mode to compute HX offline. This works hand-in-hand with read HX from disk. One might choose to separate this into two steps because it is possible to use more efficient round-robin distribution if run as observer only: true.

driver:
  run as observer only: false #default value

Supported Local Ensemble Kalman filters

LETKF

Two Local Ensemble Transform Kalman Filter (Hunt et al 2007) implementations are supported:

  • C++ implementation using Eigen (double precision).

This implementation is used when LETKF keyword is used in solver section of configuration file:

local ensemble DA:
  solver: LETKF
  • GSI-LETKF Fortran implementation using LAPACK (single precision).

This implementation is used when GSI LETKF keywords are used in solver section of configuration file:

local ensemble DA:
  solver: GSI LETKF

LGETKF

Another available solver is Local GETKF (Gain form of the Ensemble Transform Kalman filter, Bishop et al 2017) using modulated ensembles to emulate model-space localization in vertical. The implementation calls GSI-GETKF Fortran implementation and follows Lei et al 2018.

To use LGETKF, specify GETKF in solver section. Using LGETKF also requires specifying parameters for the modulation product that emulates model-space localization in vertical:

  • fraction of retained variance - fraction of the variance retained after the eigenspectrum of the vertical localization function is truncated (1 – retain all eigenvectors, 0 – retain the first eigenvector)

  • lengthscale units - name of variable for vertical localization. FV3 implementation currently supports two types of units: logp – logarithm of pressure at mid level of the vertical column with surface pressure set to 1e5 at all points, and levels – indices of vertical levels.

  • lengthscale - localization distance in the above units, at which Gaspari-Cohn localization function is zero.

An example of using LGETKF solver in FV3:

local ensemble DA:
  solver: GETKF
  vertical localization:
    fraction of retained variance: .95
    lengthscale: 1.5
    lengthscale units: logP

Localization supported in the ensemble solvers

Observation-space \(R\)-localization is used in the horizontal in all of the currently available solvers. Localization distance can be specified differently for different observation types in the obs error.localization section of configuration, for example:

observations:
- obs space:
    name: radiosonde
  ...
  obs error:
    covariance model: localized diagonal   # inflate obs errors based on the distance from the updated grid point
    localization:
      localization method: Gaspari-Cohn
      lengthscale: 1000e3                  # localization distance in meters

There is currently no vertical localization in LETKF implementations in JEDI. LGETKF implementation uses ensemble modulation to emulate model-space vertical localization.

Table 1 Localization options available in different solvers

Solver

Horizontal localization

Vertical localization

LETKF

Gaspari-Cohn R-localization

No localization

GSI LETKF

Gaspari-Cohn R-localization

No localization

GETKF

Gaspari-Cohn R-localization

Modulated ensembles for emulating Gaspari-Cohn B-localization

Inflation supported in the ensemble solvers

Several covariance inflation methods are supported:

  • multiplicative prior inflation:

\[{P^{b}}'=\alpha P^{b}\]

Parameter of multiplicative inflation is controlled by inflation.mult configuration value, for example:

local ensemble DA:
  inflation:
    mult: 1.1
\[{X_{a}^{i}}' = \alpha X_{b}^{i} + (1-\alpha) X_{a}^{i}\]

Parameter of RTPP inflation is controlled by inflation.rtpp configuration value, for example:

local ensemble DA:
  inflation:
    rtpp: 0.5
\[{X_{a}^{i}}' = X_{a}^{i} (\alpha \frac{\sigma_{b}-\sigma_{a}}{\sigma_{a}}+1)\]

Parameter of RTPS inflation is controlled by inflation.rtps configuration value, for example:

local ensemble DA:
  inflation:
    rtps: 0.6
Table 2 Inflation options available in different solvers

Solver

Inflation options

LETKF

Multiplicative inflation, RTPP, RTPS

GSI LETKF

RTPP, RTPS

GETKF

RTPP, RTPS

NOTE about obs distributions

Currently Local Ensemble DA requires InefficientDistribution obs distribution. I.e. each obs and H(x) is replicated on each PE. This is clearly Inefficient. We have an option to run Local Ensemble DA in the observer only mode with RoundRobin to compute H(X). Then one can read ensemble of H(x) from disk using driver.read HX from disk == true and driver.do posterior observer == false that will remove all duplicate H(X) operations from the solver.