8 #ifndef UFO_OBSLOCALIZATION_OBSLOCSOAR_H_
9 #define UFO_OBSLOCALIZATION_OBSLOCSOAR_H_
14 #include "eckit/config/Configuration.h"
16 #include "ioda/ObsSpace.h"
17 #include "ioda/ObsVector.h"
19 #include "oops/generic/soar.h"
32 ObsLocSOAR(
const eckit::Configuration &,
const ioda::ObsSpace &);
37 ioda::ObsVector & locvector)
const override;
40 void print(std::ostream &)
const override;
46 template<
typename MODEL>
48 const ioda::ObsSpace & obsspace):
52 <<
" soar decay" << std::endl;
56 template<
typename MODEL>
58 ioda::ObsVector & locvector)
const {
59 oops::Log::trace() <<
"ObsLocSOAR::computeLocalization" << std::endl;
67 const double SOARexpDecayH = options_.SOARexpDecayH;
68 const size_t nvars = locvector.nvars();
69 for (
size_t jlocal = 0; jlocal < localobs.size(); ++jlocal) {
70 double locFactor = oops::soar(horizontalObsdist[jlocal]*SOARexpDecayH);
72 for (
size_t jvar = 0; jvar < nvars; ++jvar) {
73 locvector[jvar + localobs[jlocal] * nvars] *= locFactor;
80 template<
typename MODEL>
82 os <<
"SOAR horizontal localization with " << options_.SOARexpDecayH
83 <<
" soar decay" << std::endl;
Horizontal SOAR observation space localization.
void computeLocalization(const GeometryIterator_ &, ioda::ObsVector &locvector) const override
void print(std::ostream &) const override
ObsLocSOARParameters options_
ObsLocSOAR(const eckit::Configuration &, const ioda::ObsSpace &)
MODEL::GeometryIterator GeometryIterator_
Options controlling SOAR obs localization. Inherits options from general horizontal obs localization.
oops::RequiredParameter< double > SOARexpDecayH
The SOAR function decay parameter.
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 std::vector< double > & horizontalObsdist() const