SOCA
Ana2Model.cc
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2017-2021 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 
9 #include <ostream>
10 #include <string>
11 
12 #include "eckit/config/Configuration.h"
13 #include "eckit/exception/Exceptions.h"
14 #include "oops/util/Logger.h"
15 #include "soca/Geometry/Geometry.h"
16 #include "soca/State/State.h"
18 
19 using oops::Log;
20 
21 namespace soca {
22 
23 // -----------------------------------------------------------------------------
24 
25 static oops::VariableChangeMaker<soca::Traits, soca::Ana2Model >
27 
28 // -----------------------------------------------------------------------------
29 Ana2Model::Ana2Model(const Geometry & resol, const eckit::Configuration & conf)
30 : uvars_(initRotate(conf, "u")), vvars_(initRotate(conf, "v")),
31  logvars_(initTrans(conf, "var"))
32 {
33  Log::trace() << "Ana2Model::Ana2Model start" << std::endl;
34  ASSERT(uvars_.size() == vvars_.size());
35  Log::trace() << "Ana2Model::Ana2Model Rotating:"
36  << " u = " << uvars_ << " v = " << vvars_ << std::endl;
37  Log::trace() << "Ana2Model::Log Transforming:"
38  << " var = " << logvars_ << std::endl;
39  Log::trace() << "Ana2Model::Ana2Model done" << std::endl;
40 }
41 // -----------------------------------------------------------------------------
43  oops::Log::trace() << "ChangeSOCA destructed" << std::endl;
44 }
45 // -----------------------------------------------------------------------------
46 void Ana2Model::changeVar(const State & xa,
47  State & xm) const {
48  oops::Log::trace() << "Ana2Model::changeVar starting" << xa <<
49  std::endl;
50  util::DateTime * vtime = &xm.validTime();
51  xm = xa;
53  xm.logtrans(logvars_);
54  xm.validTime() = xa.validTime();
55  Log::trace() << "Ana2Model::changeVar done" << xm << std::endl;
56 }
57 // -----------------------------------------------------------------------------
59  State & xa) const {
60  Log::trace() << "Ana2Model::changeVarInverse starting" <<xm <<
61  std::endl;
62  util::DateTime * vtime = &xa.validTime();
63  xa = xm;
65  xa.expontrans(logvars_);
66  xa.validTime() = xm.validTime();
67  Log::trace() << "Ana2Model::changeVarInverse done" << xa << std::endl;
68 }
69 // -----------------------------------------------------------------------------
70 void Ana2Model::print(std::ostream & os) const {
71  os << "Ana2Model";
72 }
73 // -----------------------------------------------------------------------------
74 } // namespace soca
Ana2Model(const Geometry &, const eckit::Configuration &)
Definition: Ana2Model.cc:29
const oops::Variables logvars_
Definition: Ana2Model.h:60
void changeVarInverse(const State &, State &) const override
Definition: Ana2Model.cc:58
const oops::Variables vvars_
Definition: Ana2Model.h:59
const oops::Variables uvars_
Definition: Ana2Model.h:58
void changeVar(const State &, State &) const override
Definition: Ana2Model.cc:46
void print(std::ostream &) const override
Definition: Ana2Model.cc:70
Geometry handles geometry for SOCA model.
Definition: Geometry.h:48
SOCA model state.
Definition: State.h:48
void rotate2grid(const oops::Variables &, const oops::Variables &) const
Definition: State.cc:91
const util::DateTime & validTime() const
Definition: State.cc:218
void expontrans(const oops::Variables &) const
Definition: State.cc:211
void rotate2north(const oops::Variables &, const oops::Variables &) const
Rotations.
Definition: State.cc:84
void logtrans(const oops::Variables &) const
Logarithmic and exponential transformations.
Definition: State.cc:205
static oops::VariableChangeMaker< soca::Traits, soca::Ana2Model > makerVariableChangeAna2Model_("Ana2Model")