dubfi.fluxes.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, ...])

Compute observation uncertainty that shall be assumed in the inversion.

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

Compute model data mismatch uncertainty.

get_initial_inflation(config, ssh)

Get explicitly configured inflation for one station and sampling height.

get_inflation_ens(config, mdm, obs_uncert, meteo_ens, ...)

Compute uncertainty inflation from ensembles.

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

Compute uncertainty inflation from uncertainties.

apply_inflation_ens(inflation, tot_ens, flux_ens, ...)

Apply uncertainty inflation to ensemble in-place.

Module Contents

dubfi.fluxes.mdm.get_obs_uncertainty(ssh, config, obs, obs_orig=None, obs_stdev=None, same_station_count=None, mec_stdev=None, signal_n=None)

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.fluxes.mdm.get_uncertainty(obs_uncert, meteo_uncert, bc_uncert, inflation=None)

Compute model data mismatch uncertainty.

Parameters:
  • obs_uncert (numpy.ndarray | xarray.DataArray)

  • meteo_uncert (numpy.ndarray | xarray.DataArray)

  • bc_uncert (numpy.ndarray | xarray.DataArray | None)

  • inflation (numpy.ndarray | xarray.DataArray | None)

Return type:

numpy.ndarray | xarray.DataArray

dubfi.fluxes.mdm.get_initial_inflation(config, ssh)

Get explicitly configured inflation for one station and sampling height.

Parameters:
  • config (dict[str, Any])

  • ssh (str)

Return type:

float

dubfi.fluxes.mdm.get_inflation_ens(config, mdm, obs_uncert, meteo_ens, bc_ens)

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.fluxes.mdm.get_inflation_uncert(config, mdm, obs_uncert, meteo_uncert, bc_uncert)

Compute uncertainty inflation from uncertainties.

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

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)

  • meteo_uncert (xr.DataArray | np.ndarray) – uncertainty due to meteorology

  • bc_uncert (xr.DataArray | np.ndarray | None) – uncertainty from boundary conditions

Returns:

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

Return type:

xr.DataArray | np.ndarray

dubfi.fluxes.mdm.apply_inflation_ens(inflation, tot_ens, flux_ens, obs_uncert)

Apply uncertainty inflation to ensemble in-place.

Parameters:
  • inflation (numpy.ndarray | xarray.DataArray)

  • tot_ens (numpy.ndarray | xarray.DataArray)

  • flux_ens (numpy.ndarray | xarray.DataArray)

  • obs_uncert (numpy.ndarray | xarray.DataArray)

Return type:

None