UFO
LinearObsOperator.cc
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2018 UCAR
3  *
4  * This software is licensed under the terms of the Apache Licence Version 2.0
5  * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
6  */
7 
8 #include "ioda/ObsVector.h"
9 
10 #include "ufo/LinearObsOperator.h"
12 #include "ufo/Locations.h"
13 #include "ufo/ObsBias.h"
14 #include "ufo/ObsBiasIncrement.h"
15 #include "ufo/ObsDiagnostics.h"
16 
17 namespace ufo {
18 
19 // -----------------------------------------------------------------------------
20 
21 LinearObsOperator::LinearObsOperator(ioda::ObsSpace & os, const eckit::Configuration & conf)
22  : oper_(LinearObsOperatorFactory::create(os, conf)), odb_(os), biaspreds_()
23 {}
24 
25 // -----------------------------------------------------------------------------
26 
28 
29 // -----------------------------------------------------------------------------
30 
31 void LinearObsOperator::setTrajectory(const GeoVaLs & gvals, const ObsBias & bias) {
32  oops::Variables vars;
33  vars += bias.requiredHdiagnostics();
34  ObsDiagnostics ydiags(odb_, Locations(odb_, odb_.windowStart(), odb_.windowEnd()), vars);
35  oper_->setTrajectory(gvals, bias, ydiags);
36  biaspreds_.clear();
37  biaspreds_ = bias.computePredictors(gvals, ydiags);
38 }
39 
40 // -----------------------------------------------------------------------------
41 
42 void LinearObsOperator::simulateObsTL(const GeoVaLs & gvals, ioda::ObsVector & yy,
43  const ObsBiasIncrement & bias) const {
44  oper_->simulateObsTL(gvals, yy);
45  if (bias) {
46  ioda::ObsVector ybiasinc(odb_);
47  bias.computeObsBiasTL(gvals, biaspreds_, ybiasinc);
48  yy += ybiasinc;
49  }
50 }
51 
52 // -----------------------------------------------------------------------------
53 
54 void LinearObsOperator::simulateObsAD(GeoVaLs & gvals, const ioda::ObsVector & yy,
55  ObsBiasIncrement & bias) const {
56  oper_->simulateObsAD(gvals, yy);
57  if (bias) {
58  ioda::ObsVector ybiasinc(yy);
59  bias.computeObsBiasAD(gvals, biaspreds_, ybiasinc);
60  }
61 }
62 
63 // -----------------------------------------------------------------------------
64 
65 const oops::Variables & LinearObsOperator::requiredVars() const {
66  return oper_->requiredVars();
67 }
68 
69 // -----------------------------------------------------------------------------
70 
71 void LinearObsOperator::print(std::ostream & os) const {
72  os << *oper_;
73 }
74 
75 // -----------------------------------------------------------------------------
76 
77 } // namespace ufo
ufo::LinearObsOperator::LinearObsOperator
LinearObsOperator(ioda::ObsSpace &, const eckit::Configuration &)
Definition: LinearObsOperator.cc:21
ufo::LinearObsOperator::simulateObsTL
void simulateObsTL(const GeoVaLs &, ioda::ObsVector &, const ObsBiasIncrement &) const
Definition: LinearObsOperator.cc:42
ufo::LinearObsOperator::~LinearObsOperator
~LinearObsOperator()
Definition: LinearObsOperator.cc:27
ObsBiasIncrement.h
ObsBias.h
ufo::LinearObsOperator::biaspreds_
std::vector< ioda::ObsVector > biaspreds_
Definition: LinearObsOperator.h:60
ufo::LinearObsOperator::odb_
ioda::ObsSpace & odb_
Definition: LinearObsOperator.h:59
ufo::Locations
Locations class to handle locations for UFO.
Definition: src/ufo/Locations.h:32
LinearObsOperatorBase.h
ufo::LinearObsOperator::requiredVars
const oops::Variables & requiredVars() const
Operator input required from Model.
Definition: LinearObsOperator.cc:65
ufo::ObsBias::computePredictors
std::vector< ioda::ObsVector > computePredictors(const GeoVaLs &, const ObsDiagnostics &) const
Definition: ObsBias.cc:292
ufo::ObsBiasIncrement::computeObsBiasTL
void computeObsBiasTL(const GeoVaLs &, const std::vector< ioda::ObsVector > &, ioda::ObsVector &) const
Definition: ObsBiasIncrement.cc:188
ufo
Definition: RunCRTM.h:27
ufo::ObsBias
Class to handle observation bias parameters.
Definition: ObsBias.h:44
ufo::ObsDiagnostics
Definition: src/ufo/ObsDiagnostics.h:35
ufo::LinearObsOperator::setTrajectory
void setTrajectory(const GeoVaLs &, const ObsBias &)
Obs Operator.
Definition: LinearObsOperator.cc:31
ufo::GeoVaLs
GeoVaLs: geophysical values at locations.
Definition: src/ufo/GeoVaLs.h:39
ufo::ObsBiasIncrement
Definition: ObsBiasIncrement.h:39
LinearObsOperator.h
ufo::ObsBias::requiredHdiagnostics
const oops::Variables & requiredHdiagnostics() const
Definition: ObsBias.h:74
ufo::ObsBiasIncrement::computeObsBiasAD
void computeObsBiasAD(GeoVaLs &, const std::vector< ioda::ObsVector > &, const ioda::ObsVector &)
Definition: ObsBiasIncrement.cc:247
ufo::LinearObsOperator::print
void print(std::ostream &) const
Definition: LinearObsOperator.cc:71
ufo::LinearObsOperatorFactory
Obs Operator Factory.
Definition: LinearObsOperatorBase.h:55
ufo::LinearObsOperator::oper_
std::unique_ptr< LinearObsOperatorBase > oper_
Definition: LinearObsOperator.h:58
ufo::LinearObsOperator::simulateObsAD
void simulateObsAD(GeoVaLs &, const ioda::ObsVector &, ObsBiasIncrement &) const
Definition: LinearObsOperator.cc:54
conf
Definition: conf.py:1