UFO
|
Observation operator for profile averaging. More...
#include <ObsProfileAverage.h>
Public Member Functions | |
ObsProfileAverage (const ioda::ObsSpace &, const eckit::Configuration &) | |
~ObsProfileAverage () override | |
void | simulateObs (const GeoVaLs &, ioda::ObsVector &, ObsDiagnostics &) const override |
Obs Operator. More... | |
const oops::Variables & | requiredVars () const override |
Operator input required from Model. More... | |
oops::Variables | simulatedVars () const override |
List of variables simulated by this operator. More... | |
![]() | |
ObsOperatorBase (const ioda::ObsSpace &odb, const eckit::Configuration &=eckit::LocalConfiguration()) | |
virtual | ~ObsOperatorBase () |
virtual std::unique_ptr< Locations > | locations () const |
Locations for GeoVaLs. More... | |
Static Public Member Functions | |
static const std::string | classname () |
Private Member Functions | |
void | print (std::ostream &) const override |
Private Attributes | |
const ioda::ObsSpace & | odb_ |
ObsSpace. More... | |
ObsProfileAverageData | data_ |
Data handler for the ProfileAverage operator and TL/AD code. More... | |
Observation operator for profile averaging.
This observation operator produces H(x) vectors which correspond to vertically-averaged profiles. The algorithm determines the locations at which reported-level profiles intersect each model pressure level. The intersections are found by stepping through the observation locations from the lowest-altitude value upwards. For each model level, the location of the observation whose pressure is larger than, and closest to, the model pressure is recorded. The <vertical coordinate> parameter controls the model pressure GeoVaLs that are used in this procedure. If there are no observations in a model level, which can occur for (e.g.) sondes reporting in low-frequency TAC format, the location corresponding to the last filled level is used. (If there are some model levels closer to the surface than the lowest-altitude observation, the location of the lowest observation is used for these levels.)
This procedure is iterated multiple times in order to account for the fact that model pressures can be slanted close to the Earth's surface. The number of iterations is configured with the <number of intersection iterations> parameter.
Having obtained the profile boundaries, values of model pressure and any simulated variables are obtained as in the locations that were determined in the procedure above. This produces a single column of model values which are used as the H(x) variable. In essence, this operator converts a set of GeoVaLs to what is referred to as a 'CX column' in OPS terminology.
In order for this operator to work correctly the ObsSpace must have been extended as in the following yaml snippet:
(where 71 can be replaced by the length of the air_pressure_levels GeoVaL). The H(x) values are placed in the extended section of the ObsSpace. Note that, unlike what may be expected for an observation operator, averaging of the model values across each layer is not performed; a single model value is used in each case. This follows what is used in OPS. Alternatives could be considered in the future.
A comparison with OPS is be performed if the option <compare with OPS> is set to true. This checks values of the locations and pressure values associated with the slant path. All other comparisons are performed with the standard 'vector ref' option in the yaml file.
This operator also accepts an optional variables
parameter, which controls which ObsSpace variables will be simulated. This option should only be set if this operator is used as a component of the Composite operator. If variables
is not set, the operator will simulate all ObsSpace variables. Please see the documentation of the Composite operator for further details.
Definition at line 85 of file ObsProfileAverage.h.
ufo::ObsProfileAverage::ObsProfileAverage | ( | const ioda::ObsSpace & | odb, |
const eckit::Configuration & | config | ||
) |
Definition at line 30 of file ObsProfileAverage.cc.
|
override |
Definition at line 39 of file ObsProfileAverage.cc.
|
inlinestatic |
Definition at line 88 of file ObsProfileAverage.h.
|
overrideprivatevirtual |
Implements ufo::ObsOperatorBase.
Definition at line 99 of file ObsProfileAverage.cc.
|
inlineoverridevirtual |
Operator input required from Model.
Implements ufo::ObsOperatorBase.
Definition at line 95 of file ObsProfileAverage.h.
|
inlineoverridevirtual |
List of variables simulated by this operator.
The default implementation returns the list of all simulated variables in the ObsSpace.
Reimplemented from ufo::ObsOperatorBase.
Definition at line 97 of file ObsProfileAverage.h.
|
overridevirtual |
Obs Operator.
Implements ufo::ObsOperatorBase.
Definition at line 45 of file ObsProfileAverage.cc.
|
private |
Data handler for the ProfileAverage operator and TL/AD code.
Definition at line 107 of file ObsProfileAverage.h.
|
private |
ObsSpace.
Definition at line 104 of file ObsProfileAverage.h.