8 #ifndef UFO_OBSLOCALIZATION_OBSLOCGC99_H_
9 #define UFO_OBSLOCALIZATION_OBSLOCGC99_H_
14 #include "eckit/config/Configuration.h"
16 #include "ioda/ObsSpace.h"
17 #include "ioda/ObsVector.h"
19 #include "oops/generic/gc99.h"
32 ObsLocGC99(
const eckit::Configuration &,
const ioda::ObsSpace &);
37 ioda::ObsVector & locfactor)
const override;
40 void print(std::ostream &)
const override;
44 template<
typename MODEL>
46 const ioda::ObsSpace & obsspace):
50 <<
" lengthscale" << std::endl;
55 template<
typename MODEL>
57 ioda::ObsVector & locvector)
const {
58 oops::Log::trace() <<
"ObsLocGC99::computeLocalization" << std::endl;
68 const size_t nvars = locvector.nvars();
69 for (
size_t jlocal = 0; jlocal < localobs.size(); ++jlocal) {
70 double locFactor = oops::gc99(horizontalObsdist[jlocal] / options.
lengthscale);
72 for (
size_t jvar = 0; jvar < nvars; ++jvar) {
73 locvector[jvar + localobs[jlocal] * nvars] *= locFactor;
80 template<
typename MODEL>
83 os <<
"Gaspari-Cohn horizontal localization with " << options.
lengthscale
84 <<
" lengthscale" << std::endl;
Horizontal Gaspari-Cohn observation space localization.
ObsLocGC99(const eckit::Configuration &, const ioda::ObsSpace &)
void print(std::ostream &) const override
void computeLocalization(const GeometryIterator_ &, ioda::ObsVector &locfactor) const override
MODEL::GeometryIterator GeometryIterator_
Options controlling local observations subsetting.
oops::RequiredParameter< double > lengthscale
Localization lengthscale (find all obs within the distance from reference point)
Horizontal Box car observation space localization.
const std::vector< int > & localobs() const
MODEL::GeometryIterator GeometryIterator_
void computeLocalization(const GeometryIterator_ &, ioda::ObsVector &locvector) const override
const ObsLocParameters & localizationOptions() const
const std::vector< double > & horizontalObsdist() const