Tempus  Version of the Day
Time Integration
Tempus_WrapperModelEvaluatorBasic_impl.hpp
Go to the documentation of this file.
1 // @HEADER
2 // ****************************************************************************
3 // Tempus: Copyright (2017) Sandia Corporation
4 //
5 // Distributed under BSD 3-clause license (See accompanying file Copyright.txt)
6 // ****************************************************************************
7 // @HEADER
8 
9 #ifndef Tempus_WrapperModelEvaluatorBasic_impl_hpp
10 #define Tempus_WrapperModelEvaluatorBasic_impl_hpp
11 
12 namespace Tempus {
13 
14 
15 template <typename Scalar>
16 Thyra::ModelEvaluatorBase::InArgs<Scalar>
18 createInArgs() const
19 {
20  typedef Thyra::ModelEvaluatorBase MEB;
21  //MEB::InArgsSetup<Scalar> inArgs(appModel_->createInArgs());
22  MEB::InArgsSetup<Scalar> inArgs(appModel_->getNominalValues());
23  inArgs.setModelEvalDescription(this->description());
24  return inArgs;
25 }
26 
27 
28 template <typename Scalar>
29 Thyra::ModelEvaluatorBase::OutArgs<Scalar>
32 {
33  typedef Thyra::ModelEvaluatorBase MEB;
34  MEB::OutArgsSetup<Scalar> outArgs(appModel_->createOutArgs());
35  outArgs.setModelEvalDescription(this->description());
36  return outArgs;
37 }
38 
39 
40 template <typename Scalar>
41 void
43 evalModelImpl(const Thyra::ModelEvaluatorBase::InArgs<Scalar> &inArgs,
44  const Thyra::ModelEvaluatorBase::OutArgs<Scalar> &outArgs) const
45 {
46  typedef Thyra::ModelEvaluatorBase MEB;
47  using Teuchos::RCP;
48 
49  MEB::InArgs<Scalar> appInArgs (wrapperInArgs_);
50  MEB::OutArgs<Scalar> appOutArgs(wrapperOutArgs_);
51 
52  // Setup input condition for application ME
53  RCP<const Thyra::VectorBase<Scalar> > x = inArgs.get_x();
54  appInArgs.set_x(x);
55  for (int i=0; i<appModel_->Np(); ++i) {
56  if (inArgs.get_p(i) != Teuchos::null)
57  appInArgs.set_p(i, inArgs.get_p(i));
58  }
59 
60  RCP<Thyra::VectorBase<Scalar> > x_dot = Thyra::createMember(get_x_space());
61  timeDer_->compute(x, x_dot);
62  appInArgs.set_x_dot(x_dot);
63 
64  // Setup output condition
65  // Note: For the use that Tempus does of this class, these three args *should*
66  // be enough. However, keep in mind that it *may* be necessary to add more
67  // out args in the future. The idea would be the same: if the underlying
68  // modele supports the arg, then set it in the appOutArgs.
69  appOutArgs.set_f(outArgs.get_f());
70  appOutArgs.set_W_op(outArgs.get_W_op());
71  if (outArgs.supports(MEB::OUT_ARG_W_prec)) {
72  appOutArgs.set_W_prec(outArgs.get_W_prec());
73  }
74 
75  appModel_->evalModel(appInArgs,appOutArgs);
76 }
77 
78 
79 } // namespace Tempus
80 
81 #endif // Tempus_WrapperModelEvaluatorBasic_impl_hpp
Tempus
Definition: Tempus_AdjointAuxSensitivityModelEvaluator_decl.hpp:20
Tempus::WrapperModelEvaluatorBasic::createInArgs
Thyra::ModelEvaluatorBase::InArgs< Scalar > createInArgs() const
Definition: Tempus_WrapperModelEvaluatorBasic_impl.hpp:18
Tempus::WrapperModelEvaluatorBasic::createOutArgsImpl
Thyra::ModelEvaluatorBase::OutArgs< Scalar > createOutArgsImpl() const
Definition: Tempus_WrapperModelEvaluatorBasic_impl.hpp:31
Tempus::WrapperModelEvaluatorBasic::evalModelImpl
void evalModelImpl(const Thyra::ModelEvaluatorBase::InArgs< Scalar > &inArgs, const Thyra::ModelEvaluatorBase::OutArgs< Scalar > &outArgs) const
Definition: Tempus_WrapperModelEvaluatorBasic_impl.hpp:43