Test of the adjoint and of the linear-tangent#
Description#
For every inversion case study, it is necessary to compute a test of the adjoint before running a full variational inversion. It allows to detect any error specifi to your test case and that were never met before. If the computation costs of the inversion set-up are very high, it is possible to execute a adjoint test with a simplified set-up, but it is important to include configurations that can generate errors (month of February, several months/years in a row, etc.).
This test consists in checking that: \(\langle \mathcal{H}(\delta \mathbf{x}) \vert \mathcal{H}(\delta \mathbf{x}) \rangle = \langle \delta \mathbf{x} \vert \mathcal{H}^* \circ \mathcal{H}(\delta \mathbf{x}) \rangle\).
\(\mathcal{H}(\delta \mathbf{x})\) is computed with the tangent linear model, and then \(\mathcal{H}^*\circ \mathcal{H}(\delta \mathbf{x})\) is calculated with the adjoint.
In principle, the two terms of the equation are never exactly equal. Nevertheless, the difference should never exceed several times the machine accuracy.
Configuration#
The following Yaml template is valid for the adjoint test:
mode:
plugin:
name: adj-tl_test
version: std
# Magnitude of the increment for dx
increments: 0.2
# (optional) Type of increments:
# - 'cst' for all equal to 'increments';
# - 'rand' for a centered normal distribution with magnitude 'increments'
# Default is 'cst' if not specified
incrmode: cst
# Testing space. Should be one of: control, chi
testspace: chi
The Yaml arguments are:
increments
: determines the value of \(\delta \mathbf{x}\), which should be taken within a reasonable range around 0incrmode
: the type of incrementsshould be one of:
cst
,rand
the default value is
cst
if not specifiedif
cst
all elements of \(\delta \mathbf{x}\) are set to the same valueif
rand
elements of \(\delta \mathbf{x}\) follow a centered normal distribution with standard deviationincrements
it is recommended to execute an adjoint test with both mode to make sure that some errors do not compensate each other
testspace
: testing spaceshould be one of:
control
,chi
; default iscontrol
when not specifiedif
control
the test is applied to \(\delta \mathbf{x}\) in the control spaceif
chi
the test is computed in the minimization space on \(\delta \mathbf{\chi}\); it allows validating operations at the control space level, e.g., \(\delta \mathbf{x} \rightarrow \mathbf{B}^{1/2} \delta \mathbf{x}\)
Requirements#
The adjoint test requires the following plugins to be executed properly:
1. an observation operator to
compute \(\mathbf{x} \rightarrow \mathcal{H}(\mathbf{x})\) and its
adjoint; optional: default is (standard, std
)
2. a control vector to define the control vector shape and corresponding operations; mandatory
3. an observation vector to define observations to be compared with; mandatory
The following plugins are indirectly needed to compute the test of the adjoint, through the observation operator (see details here):
a numerical model; mandatory