10#ifndef Tempus_AuxiliaryIntegralModelEvaluator_impl_hpp
11#define Tempus_AuxiliaryIntegralModelEvaluator_impl_hpp
15#include "Thyra_VectorStdOps.hpp"
19template <
typename Scalar>
27 typedef Thyra::ModelEvaluatorBase MEB;
31 MEB::InArgs<Scalar> me_inArgs =
model_->createInArgs();
32 MEB::InArgsSetup<Scalar> inArgs;
33 inArgs.setModelEvalDescription(this->description());
34 inArgs.setSupports(MEB::IN_ARG_x);
35 inArgs.setSupports(MEB::IN_ARG_t);
36 if (me_inArgs.supports(MEB::IN_ARG_x_dot))
37 inArgs.setSupports(MEB::IN_ARG_x_dot);
38 inArgs.setSupports(MEB::IN_ARG_alpha);
39 inArgs.setSupports(MEB::IN_ARG_beta);
40 inArgs.set_Np(me_inArgs.Np());
43 MEB::OutArgs<Scalar> me_outArgs =
model_->createOutArgs();
44 MEB::OutArgsSetup<Scalar> outArgs;
45 outArgs.setModelEvalDescription(this->description());
46 outArgs.set_Np_Ng(me_inArgs.Np(), 0);
47 outArgs.setSupports(MEB::OUT_ARG_f);
48 outArgs.setSupports(MEB::OUT_ARG_W_op);
52template <
typename Scalar>
57 t_interp_ = Teuchos::ScalarTraits<Scalar>::rmax();
61template <
typename Scalar>
62Teuchos::RCP<const Thyra::VectorSpaceBase<Scalar> >
65 TEUCHOS_ASSERT(p < model_->Np());
66 return model_->get_p_space(p);
69template <
typename Scalar>
70Teuchos::RCP<const Teuchos::Array<std::string> >
73 TEUCHOS_ASSERT(p < model_->Np());
74 return model_->get_p_names(p);
77template <
typename Scalar>
78Teuchos::RCP<const Thyra::VectorSpaceBase<Scalar> >
84template <
typename Scalar>
85Teuchos::RCP<const Thyra::VectorSpaceBase<Scalar> >
91template <
typename Scalar>
92Teuchos::RCP<Thyra::LinearOpBase<Scalar> >
98template <
typename Scalar>
99Teuchos::RCP<const Thyra::LinearOpWithSolveFactoryBase<Scalar> >
105template <
typename Scalar>
106Thyra::ModelEvaluatorBase::InArgs<Scalar>
112template <
typename Scalar>
113Thyra::ModelEvaluatorBase::InArgs<Scalar>
116 typedef Thyra::ModelEvaluatorBase MEB;
118 using Teuchos::rcp_dynamic_cast;
120 MEB::InArgs<Scalar> me_nominal =
model_->getNominalValues();
123 const Scalar zero = Teuchos::ScalarTraits<Scalar>::zero();
126 RCP<Thyra::VectorBase<Scalar> > x = Thyra::createMember(*
space_);
127 Thyra::assign(x.ptr(), zero);
130 if (me_nominal.supports(MEB::IN_ARG_x_dot)) {
131 RCP<Thyra::VectorBase<Scalar> > x_dot = Thyra::createMember(*
space_);
132 Thyra::assign(x_dot.ptr(), zero);
133 nominal.set_x_dot(x_dot);
136 const int np =
model_->Np();
137 for (
int i = 0; i < np; ++i) nominal.set_p(i, me_nominal.get_p(i));
142template <
typename Scalar>
143Thyra::ModelEvaluatorBase::OutArgs<Scalar>
149template <
typename Scalar>
151 const Thyra::ModelEvaluatorBase::InArgs<Scalar> &inArgs,
152 const Thyra::ModelEvaluatorBase::OutArgs<Scalar> &outArgs)
const
154 typedef Thyra::ModelEvaluatorBase MEB;
156 using Teuchos::rcp_dynamic_cast;
160 TEUCHOS_ASSERT(
sh_ != Teuchos::null);
161 const Scalar t = inArgs.get_t();
171 RCP<Thyra::VectorBase<Scalar> > f = outArgs.get_f();
172 if (f != Teuchos::null) {
173 MEB::InArgs<Scalar> me_inArgs =
model_->getNominalValues();
175 if (me_inArgs.supports(MEB::IN_ARG_x_dot))
177 if (me_inArgs.supports(MEB::IN_ARG_t)) me_inArgs.set_t(t);
178 const int np = me_inArgs.Np();
179 for (
int i = 0; i < np; ++i) me_inArgs.set_p(i, inArgs.get_p(i));
181 MEB::OutArgs<Scalar> me_outArgs =
model_->createOutArgs();
184 model_->evalModel(me_inArgs, me_outArgs);
188 if (inArgs.supports(MEB::IN_ARG_x_dot)) {
189 RCP<const Thyra::VectorBase<Scalar> > x_dot = inArgs.get_x_dot();
190 if (x_dot != Teuchos::null) Thyra::V_VmV(f.ptr(), *x_dot, *f);
195 RCP<Thyra::LinearOpBase<Scalar> > op = outArgs.get_W_op();
196 if (op != Teuchos::null) {
197 const Scalar alpha = inArgs.get_alpha();
198 RCP<Thyra::ScaledIdentityLinearOpWithSolve<Scalar> > si_op =
199 rcp_dynamic_cast<Thyra::ScaledIdentityLinearOpWithSolve<Scalar> >(op);
200 si_op->setScale(alpha);
Thyra::ModelEvaluatorBase::InArgs< Scalar > getNominalValues() const
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_x_space() const
void evalModelImpl(const Thyra::ModelEvaluatorBase::InArgs< Scalar > &inArgs, const Thyra::ModelEvaluatorBase::OutArgs< Scalar > &outArgs) const
AuxiliaryIntegralModelEvaluator(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, const int g_index)
Constructor.
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_p_space(int p) const
Teuchos::RCP< const Teuchos::Array< std::string > > get_p_names(int p) const
Teuchos::RCP< Thyra::LinearOpBase< Scalar > > create_W_op() const
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_f_space() const
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > space_
Thyra::ModelEvaluatorBase::InArgs< Scalar > prototypeInArgs_
Thyra::ModelEvaluatorBase::OutArgs< Scalar > prototypeOutArgs_
void setForwardSolutionHistory(const Teuchos::RCP< const Tempus::SolutionHistory< Scalar > > &sh)
Set solution history from forward evaluation.
Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > model_
Teuchos::RCP< Tempus::SolutionState< Scalar > > forward_state_
Thyra::ModelEvaluatorBase::InArgs< Scalar > createInArgs() const
Teuchos::RCP< const Tempus::SolutionHistory< Scalar > > sh_
Thyra::ModelEvaluatorBase::OutArgs< Scalar > createOutArgsImpl() const
Teuchos::RCP< const Thyra::LinearOpWithSolveFactoryBase< Scalar > > get_W_factory() const
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
RCP< ScaledIdentityLinearOpWithSolveFactory< Scalar > > scaledIdentitySolveFactory(const RCP< const VectorSpaceBase< Scalar > > &space, const Scalar &s)
Nonmember constructor.
RCP< ScaledIdentityLinearOpWithSolve< Scalar > > scaledIdentity()
Nonmember constructor function.