dubfi.dataprovider.mdm

Unified implementation for handling uncertainty inflation etc.

Motivation

Uncertainties and inflation are computed distributed during inversion, but are not saved there. To provide the uncertainties used in the inversion, these need to be calculated again during post-processing. Using a common implementation should reduce the risk of undetected bugs and inconsistencies.

Added in version 0.1.0: (initial release)

Functions

get_obs_uncertainty(ssh, config, obs[, obs_orig, ...]) → Array

Compute observation uncertainty that shall be assumed in the inversion.

get_uncertainty(obs_uncert[, meteo_uncert, bc_uncert, ...]) → Array

Compute model data mismatch uncertainty.

get_station_inflation(config, ssh[, variant]) → float

Get explicitly configured inflation for one station and sampling height.

get_inflation_ens(config, mdm, obs_uncert, meteo_ens, ...) → xarray.DataArray | numpy.ndarray

Compute uncertainty inflation from ensembles.

get_inflation_uncert(config, mdm, obs_uncert, ...) → Array

Compute uncertainty inflation from uncertainties.

apply_inflation_ens(inflation, tot_ens, flux_ens, ...) → tuple[Array, Array, Array]

Apply uncertainty inflation to ensemble in-place.

Module Contents

dubfi.dataprovider.mdm.get_obs_uncertainty(ssh: str, config: dict[str, Any], obs: Array, obs_orig: Array | None = None, obs_stdev: Array | None = None, same_station_count: Array | float | None = None, mec_stdev: Array | None = None, signal_n: Array | None = None) → Array

Compute observation uncertainty that shall be assumed in the inversion.

Observation uncertainty describes the uncorrelated uncertainty applied to each observation data point, including representativity uncertainty. All variables should be provided as mole mixing ratios (mol/mol).

Parameters:
  • ssh (str) – station and sampling height code

  • config (dict) – inversion configuration

  • obs (np.ndarray | xr.DataArray) – observations (time series)

  • obs_orig (np.ndarray | xr.DataArray, optional) – original observations (without temporal smoothing)

  • obs_stdev (np.ndarray | xr.DataArray, optional) – temporal variability of observations (as reported by the observation site)

  • same_station_count (np.ndarray | xr.DataArray, optional) – for each observation, number of all observations with equal time and station. Usually, this is the number of currently active sampling heights of the station.

  • mec_stdev (np.ndarray | xr.DataArray, optional) – standard deviation computed by model equivalent calculator

  • signal_n (np.ndarray | xr.DataArray, optional) – signal from natural fluxes. Natural fluxes are assumed to have a higher uncertainty.

Returns:

uncertainty – resulting uncertainty

Return type:

np.ndarray | xr.DataArray

dubfi.dataprovider.mdm.get_uncertainty(obs_uncert: Array, meteo_uncert: Array | None = None, bc_uncert: Array | None = None, inflation: Array | None = None) → Array

Compute model data mismatch uncertainty.

dubfi.dataprovider.mdm.get_station_inflation(config: dict[str, Any], ssh: str, variant: str = 'meteo') → float

Get explicitly configured inflation for one station and sampling height.

dubfi.dataprovider.mdm.get_inflation_ens(config: dict[str, Any], mdm: Array, obs_uncert: Array, meteo_ens: Array, bc_ens: Array | None) → xarray.DataArray | numpy.ndarray

Compute uncertainty inflation from ensembles.

Parameters:
  • config (dict) – inversion configuration

  • mdm (xr.DataArray | np.ndarray) – model data mismatch

  • obs_uncert (xr.DataArray | np.ndarray) – observation uncertainty (assumed to be uncorrelated), one-dimensional

  • meteo_ens (xr.DataArray | np.ndarray) – meteorological ensemble, dimensions should be (ensmem, time)

  • bc_ens (xr.DataArray | np.ndarray | None) – boundary condition ensemble, dimensions should be (bc_ens_letkf OR bc_ens, time)

Returns:

inflation – extra inflation that shall be applied to mdm and meteo_ens.

Return type:

xr.DataArray | np.ndarray

dubfi.dataprovider.mdm.get_inflation_uncert(config: dict[str, Any], mdm: Array, obs_uncert: Array | float, meteo_var: Array | float, bc_var: Array | float | None) → Array

Compute uncertainty inflation from uncertainties.

All input arrays are expected to be one-dimensional and aligned.

Parameters:
  • config (dict) – inversion configuration

  • mdm (xr.DataArray | np.ndarray) – model data mismatch

  • obs_uncert (xr.DataArray | np.ndarray) – observation uncertainty as used in the model (including inflation, assumed to be uncorrelated)

  • meteo_var (xr.DataArray | np.ndarray) – variance (uncertainty squared) due to meteorology

  • bc_var (xr.DataArray | np.ndarray | None) – variance (uncertainty squared) from boundary conditions

Returns:

inflation – extra inflation that shall be applied to mdm and meteo_ens.

Return type:

xr.DataArray | np.ndarray

dubfi.dataprovider.mdm.apply_inflation_ens(inflation: Array, tot_ens: Array, flux_ens: Array, obs_uncert: Array) → tuple[Array, Array, Array]

Apply uncertainty inflation to ensemble in-place.