11 #ifndef OOPS_BASE_OBSERVERTLAD_H_
12 #define OOPS_BASE_OBSERVERTLAD_H_
17 #include "eckit/config/Configuration.h"
29 #include "oops/util/DateTime.h"
30 #include "oops/util/Duration.h"
36 template <
typename MODEL,
typename OBS>
64 const util::DateTime &,
const util::DateTime &);
82 template <
typename MODEL,
typename OBS>
86 : obsdb_(obsdb), hop_(obsdb,
eckit::LocalConfiguration(config,
"obs operator")),
87 hoptlad_(obsdb,
eckit::LocalConfiguration(config,
"linear obs operator")),
88 ybias_(ybias), geovars_(), lingetvals_(), gvals_()
92 Log::trace() <<
"ObserverTLAD::ObserverTLAD" << std::endl;
95 template <
typename MODEL,
typename OBS>
97 const util::DateTime & winbgn,
98 const util::DateTime & winend) {
99 Log::trace() <<
"ObserverTLAD::doInitializeTraj start" << std::endl;
101 gvals_.reset(
new GeoVaLs_(hop_.locations(winbgn, winend), geovars_));
102 Log::trace() <<
"ObserverTLAD::doInitializeTraj done" << std::endl;
105 template <
typename MODEL,
typename OBS>
107 const util::DateTime & t2) {
108 Log::trace() <<
"ObserverTLAD::doProcessingTraj start" << std::endl;
110 lingetvals_->setTrajectory(xx, t1, t2, *gvals_);
111 Log::trace() <<
"ObserverTLAD::doProcessingTraj done" << std::endl;
114 template <
typename MODEL,
typename OBS>
116 Log::trace() <<
"ObserverTLAD::doFinalizeTraj start" << std::endl;
117 hoptlad_.setTrajectory(*gvals_, ybias_);
119 Log::trace() <<
"ObserverTLAD::doFinalizeTraj done" << std::endl;
122 template <
typename MODEL,
typename OBS>
124 const util::DateTime & winbgn,
125 const util::DateTime & winend) {
126 Log::trace() <<
"ObserverTLAD::doInitializeTL start" << std::endl;
127 gvals_.reset(
new GeoVaLs_(hop_.locations(winbgn, winend), hoptlad_.requiredVars()));
128 Log::trace() <<
"ObserverTLAD::doInitializeTL done" << std::endl;
131 template <
typename MODEL,
typename OBS>
133 const util::DateTime & t2) {
134 Log::trace() <<
"ObserverTLAD::doProcessingTL start" << std::endl;
136 lingetvals_->fillGeoVaLsTL(dx, t1, t2, *gvals_);
137 Log::trace() <<
"ObserverTLAD::doProcessingTL done" << std::endl;
140 template <
typename MODEL,
typename OBS>
143 Log::trace() <<
"ObserverTLAD::doFinalizeTL start" << std::endl;
144 hoptlad_.simulateObsTL(*gvals_, ydeptl, ybiastl);
146 Log::trace() <<
"ObserverTLAD::doFinalizeTL done" << std::endl;
149 template <
typename MODEL,
typename OBS>
152 const util::DateTime & winbgn,
153 const util::DateTime & winend) {
154 Log::trace() <<
"ObserverTLAD::doFirstAD start" << std::endl;
155 gvals_.reset(
new GeoVaLs_(hop_.locations(winbgn, winend), hoptlad_.requiredVars()));
156 hoptlad_.simulateObsAD(*gvals_, ydepad, ybiasad);
157 Log::trace() <<
"ObserverTLAD::doFirstAD done" << std::endl;
160 template <
typename MODEL,
typename OBS>
162 const util::DateTime & t2) {
163 Log::trace() <<
"ObserverTLAD::doProcessingAD start" << std::endl;
165 lingetvals_->fillGeoVaLsAD(dx, t1, t2, *gvals_);
166 Log::trace() <<
"ObserverTLAD::doProcessingAD done" << std::endl;
169 template <
typename MODEL,
typename OBS>
171 Log::trace() <<
"ObserverTLAD::doLastAD start" << std::endl;
173 Log::trace() <<
"ObserverTLAD::doLastAD done" << std::endl;
179 #endif // OOPS_BASE_OBSERVERTLAD_H_