FV3-JEDI
LinVarChaA2M.cc
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2017-2020 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 <ostream>
9 #include <string>
10 
11 #include "eckit/config/Configuration.h"
12 
13 #include "oops/interface/LinearVariableChange.h"
14 #include "oops/util/Logger.h"
15 #include "oops/util/Timer.h"
16 
18 #include "fv3jedi/State/State.h"
22 
23 namespace fv3jedi {
24 // -------------------------------------------------------------------------------------------------
25 static oops::LinearVariableChangeMaker<Traits, oops::LinearVariableChange<Traits, LinVarChaA2M> >
26  makerLinVarChaA2M_("Analysis2Model");
27 // -------------------------------------------------------------------------------------------------
28 LinVarChaA2M::LinVarChaA2M(const State & bg, const State & fg, const Geometry & resol,
29  const eckit::Configuration & conf) : geom_(new Geometry(resol))
30 {
31  util::Timer timer(classname(), "LinVarChaA2M");
32  oops::Log::trace() << classname() << " constructor starting" << std::endl;
33  const eckit::Configuration * configc = &conf;
35  fg.toFortran(), &configc);
36  oops::Log::trace() << classname() << " constructor done" << std::endl;
37 }
38 // -------------------------------------------------------------------------------------------------
40  util::Timer timer(classname(), "~LinVarChaA2M");
41  oops::Log::trace() << classname() << " destructor starting" << std::endl;
43  oops::Log::trace() << classname() << " destructor done" << std::endl;
44 }
45 // -------------------------------------------------------------------------------------------------
46 void LinVarChaA2M::multiply(const Increment & dxin, Increment & dxout) const {
47  util::Timer timer(classname(), "multiply");
48  oops::Log::trace() << classname() << " multiply starting" << std::endl;
50  dxout.toFortran());
51  oops::Log::trace() << classname() << " multiply done" << std::endl;
52  dxout.validTime() = dxin.validTime();
53 }
54 // -------------------------------------------------------------------------------------------------
55 void LinVarChaA2M::multiplyInverse(const Increment & dxin, Increment & dxout) const {
56  util::Timer timer(classname(), "multiplyInverse");
57  oops::Log::trace() << classname() << " multiplyInverse starting" << std::endl;
59  dxout.toFortran());
60  oops::Log::trace() << classname() << " multiplyInverse done" << std::endl;
61  dxout.validTime() = dxin.validTime();
62 }
63 // -------------------------------------------------------------------------------------------------
64 void LinVarChaA2M::multiplyAD(const Increment & dxin, Increment & dxout) const {
65  util::Timer timer(classname(), "multiplyAD");
66  oops::Log::trace() << classname() << " multiplyAD starting" << std::endl;
68  dxout.toFortran());
69  oops::Log::trace() << classname() << " multiplyAD done" << std::endl;
70  dxout.validTime() = dxin.validTime();
71 }
72 // -------------------------------------------------------------------------------------------------
73 void LinVarChaA2M::multiplyInverseAD(const Increment & dxin, Increment & dxout) const {
74  util::Timer timer(classname(), "multiplyInverseAD");
75  oops::Log::trace() << classname() << " multiplyInverseAD starting" << std::endl;
77  dxin.toFortran(), dxout.toFortran());
78  oops::Log::trace() << classname() << " multiplyInverseAD done" << std::endl;
79  dxout.validTime() = dxin.validTime();
80 }
81 // -------------------------------------------------------------------------------------------------
82 void LinVarChaA2M::print(std::ostream & os) const {
83  os << classname() << " variable change";
84 }
85 // -------------------------------------------------------------------------------------------------
86 } // namespace fv3jedi
fv3jedi::LinVarChaA2M::classname
static const std::string classname()
Definition: LinVarChaA2M.h:25
Traits.h
fv3jedi::Increment::toFortran
int & toFortran()
Definition: Increment.h:110
fv3jedi::fv3jedi_linvarcha_a2m_multiplyadjoint_f90
void fv3jedi_linvarcha_a2m_multiplyadjoint_f90(const F90lvc_A2M &, const F90geom &, const F90inc &, const F90inc &)
fv3jedi::LinVarChaA2M::~LinVarChaA2M
~LinVarChaA2M()
Definition: LinVarChaA2M.cc:39
fv3jedi::LinVarChaA2M::multiply
void multiply(const Increment &, Increment &) const
Definition: LinVarChaA2M.cc:46
fv3jedi::fv3jedi_linvarcha_a2m_multiply_f90
void fv3jedi_linvarcha_a2m_multiply_f90(const F90lvc_A2M &, const F90geom &, const F90inc &, const F90inc &)
fv3jedi::fv3jedi_linvarcha_a2m_multiplyinverseadjoint_f90
void fv3jedi_linvarcha_a2m_multiplyinverseadjoint_f90(const F90lvc_A2M &, const F90geom &, const F90inc &, const F90inc &)
Utilities.h
fv3jedi::LinVarChaA2M::multiplyAD
void multiplyAD(const Increment &, Increment &) const
Definition: LinVarChaA2M.cc:64
Geometry.h
fv3jedi::LinVarChaA2M::print
void print(std::ostream &) const override
Definition: LinVarChaA2M.cc:82
fv3jedi::LinVarChaA2M::LinVarChaA2M
LinVarChaA2M(const State &, const State &, const Geometry &, const eckit::Configuration &)
Definition: LinVarChaA2M.cc:28
fv3jedi::State::toFortran
int & toFortran()
Definition: State.h:87
fv3jedi::fv3jedi_linvarcha_a2m_create_f90
void fv3jedi_linvarcha_a2m_create_f90(const F90lvc_A2M &, const F90geom &, const F90state &, const F90state &, const eckit::Configuration *const *)
fv3jedi::Increment::validTime
const util::DateTime & validTime() const
Definition: Increment.h:107
fv3jedi::Geometry
Geometry handles geometry for FV3JEDI model.
Definition: Geometry.h:41
fv3jedi::LinVarChaA2M::multiplyInverse
void multiplyInverse(const Increment &, Increment &) const
Definition: LinVarChaA2M.cc:55
fv3jedi::Increment
Definition: Increment.h:52
fv3jedi::makerLinVarChaA2M_
static oops::LinearVariableChangeMaker< Traits, oops::LinearVariableChange< Traits, LinVarChaA2M > > makerLinVarChaA2M_("Analysis2Model")
fv3jedi::State
Definition: State.h:45
fv3jedi::fv3jedi_linvarcha_a2m_multiplyinverse_f90
void fv3jedi_linvarcha_a2m_multiplyinverse_f90(const F90lvc_A2M &, const F90geom &, const F90inc &, const F90inc &)
fv3jedi
Configuration files should be formatted as e.g.
Definition: ErrorCovariance.cc:20
fv3jedi::LinVarChaA2M::keyFtnConfig_
F90lvc_A2M keyFtnConfig_
Definition: LinVarChaA2M.h:36
fv3jedi::fv3jedi_linvarcha_a2m_delete_f90
void fv3jedi_linvarcha_a2m_delete_f90(F90lvc_A2M &)
fv3jedi::LinVarChaA2M::multiplyInverseAD
void multiplyInverseAD(const Increment &, Increment &) const
Definition: LinVarChaA2M.cc:73
LinVarChaA2M.h
State.h
fv3jedi::LinVarChaA2M::geom_
std::shared_ptr< const Geometry > geom_
Definition: LinVarChaA2M.h:35