Forward run forward/std#

Description#

Forward (or tangent-linear) run of the observation operator.

Mathematical framework#

The observation operator \(\mathcal{H}\) maps the control vector \(\mathbf{x} \in \mathbb{R}^n\) to the observation space \(\mathbf{y} \in \mathbb{R}^m\):

\[\mathbf{y}_\mathrm{sim} = \mathcal{H}(\mathbf{x})\]

When run_mode = 'tl', only the linearised (tangent-linear) operator is evaluated:

\[\delta\mathbf{y} = \mathbf{H}\,\delta\mathbf{x}\]

where \(\mathbf{H} = \partial\mathcal{H}/\partial\mathbf{x}\) is the Jacobian of \(\mathcal{H}\) evaluated at the linearisation point \(\mathbf{x}_b\).

OSSE perturbation#

When perturb_obsvect = True, synthetic observations are generated by adding Gaussian noise to the simulated values:

\[y_\mathrm{obs} = y_\mathrm{sim} + \varepsilon, \quad \varepsilon \sim \mathcal{N}(0,\,\sigma_\varepsilon), \quad \sigma_\varepsilon = \delta \cdot \sigma_{\mathbf{y}_\mathrm{sim}}\]

where \(\delta\) is set by the obserror parameter. This is used to create synthetic truth in Observing System Simulation Experiments (OSSEs).

Outputs#

  • Simulated observation vector — written to the sim (or sim_tl) column of the output monitor.nc file.

  • OSSE observations — when perturb_obsvect = True, perturbed values are written to the obs column and \(\sigma_\varepsilon\) to yobs_err.

  • 4-D concentration fields — saved by the model plugin when configured to do so.

YAML arguments#

The following arguments are used to configure the plugin. pyCIF will return an exception at the initialization if mandatory arguments are not specified, or if any argument does not fit accepted values or type:

run_mode : “fwd” or “tl”, optional, default “fwd”

Running mode for the forward simulation

  • “fwd”: run a full forward mode

  • “tl”: run the tangent-linear operator

use_xb : bool, optional, default True

Initialise the control vector x from the background xb before running.

perturb_obsvect : bool, optional, default False

Generate synthetic observations for OSSEs by adding Gaussian noise to the simulated values: \(y_\mathrm{obs} = y_\mathrm{sim} + \varepsilon\), \(\varepsilon \sim \mathcal{N}(0,\,\delta\cdot\sigma_{y_\mathrm{sim}})\), where \(\delta\) is set by obserror. Perturbed values are written to the obs column of monitor.nc and \(\sigma_\varepsilon\) to yobs_err.

obserror : float, optional, default 0.0

Fractional scale \(\delta\) for the OSSE noise: \(\sigma_\varepsilon = \delta \cdot \sigma_{y_\mathrm{sim}}\). Used only when perturb_obsvect = True.

reload_results : bool, optional, default False

Skip already-completed simulations and reload their results from disk.

Requirements#

The current plugin requires the present plugins to run properly:

Requirement name

Requirement type

Explicit definition

Any valid

Default name

Default version

controlvect

ControlVect

True

True

standard

std

obsoperator

ObsOperator

True

False

standard

std

YAML template#

Please find below a template for a YAML configuration:

 1mode:
 2  plugin:
 3    name: forward
 4    version: std
 5    type: mode
 6
 7  # Optional arguments
 8  run_mode: XXXXX  # fwd|tl
 9  use_xb: XXXXX  # bool
10  perturb_obsvect: XXXXX  # bool
11  obserror: XXXXX  # float
12  reload_results: XXXXX  # bool