9 #ifndef Tempus_AuxiliaryIntegralModelEvaluator_impl_hpp
10 #define Tempus_AuxiliaryIntegralModelEvaluator_impl_hpp
14 #include "Thyra_VectorStdOps.hpp"
18 template <
typename Scalar>
24 t_interp_(Teuchos::ScalarTraits<Scalar>::rmax())
30 MEB::InArgs<Scalar> me_inArgs =
model_->createInArgs();
31 MEB::InArgsSetup<Scalar> inArgs;
32 inArgs.setModelEvalDescription(this->
description());
33 inArgs.setSupports(MEB::IN_ARG_x);
34 inArgs.setSupports(MEB::IN_ARG_t);
35 if (me_inArgs.supports(MEB::IN_ARG_x_dot))
36 inArgs.setSupports(MEB::IN_ARG_x_dot);
37 inArgs.setSupports(MEB::IN_ARG_alpha);
38 inArgs.setSupports(MEB::IN_ARG_beta);
39 inArgs.set_Np(me_inArgs.Np());
42 MEB::OutArgs<Scalar> me_outArgs =
model_->createOutArgs();
43 MEB::OutArgsSetup<Scalar> outArgs;
44 outArgs.setModelEvalDescription(this->
description());
45 outArgs.set_Np_Ng(me_inArgs.Np(), 0);
46 outArgs.setSupports(MEB::OUT_ARG_f);
47 outArgs.setSupports(MEB::OUT_ARG_W_op);
51 template <
typename Scalar>
57 forward_state_ = Teuchos::null;
60 template <
typename Scalar>
65 return model_->get_p_space(p);
68 template <
typename Scalar>
73 return model_->get_p_names(p);
76 template <
typename Scalar>
83 template <
typename Scalar>
90 template <
typename Scalar>
94 return Thyra::scaledIdentity(space_, Scalar(1.0));
97 template <
typename Scalar>
101 return Thyra::scaledIdentitySolveFactory(space_, Scalar(1.0));
104 template <
typename Scalar>
108 return prototypeInArgs_;
111 template <
typename Scalar>
117 using Teuchos::rcp_dynamic_cast;
119 MEB::InArgs<Scalar> me_nominal = model_->getNominalValues();
120 MEB::InArgs<Scalar> nominal = this->createInArgs();
125 RCP<Thyra::VectorBase<Scalar> > x = Thyra::createMember(*space_);
126 Thyra::assign(x.ptr(), zero);
129 if (me_nominal.supports(MEB::IN_ARG_x_dot)) {
130 RCP<Thyra::VectorBase<Scalar> > x_dot = Thyra::createMember(*space_);
131 Thyra::assign(x_dot.ptr(), zero);
132 nominal.set_x_dot(x_dot);
135 const int np = model_->Np();
136 for (
int i = 0; i < np; ++i) nominal.set_p(i, me_nominal.get_p(i));
141 template <
typename Scalar>
145 return prototypeOutArgs_;
148 template <
typename Scalar>
155 using Teuchos::rcp_dynamic_cast;
160 const Scalar t = inArgs.
get_t();
161 if (forward_state_ == Teuchos::null || t_interp_ != t) {
162 if (forward_state_ == Teuchos::null)
163 forward_state_ = sh_->interpolateState(t);
165 sh_->interpolateState(t, forward_state_.get());
170 RCP<Thyra::VectorBase<Scalar> > f = outArgs.
get_f();
171 if (f != Teuchos::null) {
172 MEB::InArgs<Scalar> me_inArgs = model_->getNominalValues();
173 me_inArgs.set_x(forward_state_->getX());
174 if (me_inArgs.supports(MEB::IN_ARG_x_dot))
175 me_inArgs.set_x_dot(forward_state_->getXDot());
176 if (me_inArgs.supports(MEB::IN_ARG_t)) me_inArgs.set_t(t);
177 const int np = me_inArgs.Np();
178 for (
int i = 0; i < np; ++i) me_inArgs.set_p(i, inArgs.
get_p(i));
180 MEB::OutArgs<Scalar> me_outArgs = model_->createOutArgs();
181 me_outArgs.set_g(g_index_, f);
183 model_->evalModel(me_inArgs, me_outArgs);
187 if (inArgs.
supports(MEB::IN_ARG_x_dot)) {
188 RCP<const Thyra::VectorBase<Scalar> > x_dot = inArgs.
get_x_dot();
189 if (x_dot != Teuchos::null) Thyra::V_VmV(f.ptr(), *x_dot, *f);
194 RCP<Thyra::LinearOpBase<Scalar> > op = outArgs.
get_W_op();
195 if (op != Teuchos::null) {
197 RCP<Thyra::ScaledIdentityLinearOpWithSolve<Scalar> > si_op =
Implicit concrete LinearOpBase subclass that takes a flattended out multi-vector and performs a multi...
AuxiliaryIntegralModelEvaluator(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, const int g_index)
Constructor.
void setScale(const Scalar &s)
Thyra::ModelEvaluatorBase::InArgs< Scalar > createInArgs() const
RCP< const VectorBase< Scalar > > get_x_dot() const
Thyra::ModelEvaluatorBase::InArgs< Scalar > prototypeInArgs_
Teuchos::RCP< const Thyra::LinearOpWithSolveFactoryBase< Scalar > > get_W_factory() const
Thyra::ModelEvaluatorBase::OutArgs< Scalar > createOutArgsImpl() const
Evaluation< VectorBase< Scalar > > get_f() const
static magnitudeType rmax()
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_f_space() const
void setForwardSolutionHistory(const Teuchos::RCP< const Tempus::SolutionHistory< Scalar > > &sh)
Set solution history from forward evaluation.
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > space_
virtual std::string description() const
Teuchos::RCP< const Teuchos::Array< std::string > > get_p_names(int p) const
void evalModelImpl(const Thyra::ModelEvaluatorBase::InArgs< Scalar > &inArgs, const Thyra::ModelEvaluatorBase::OutArgs< Scalar > &outArgs) const
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Thyra::ModelEvaluatorBase::OutArgs< Scalar > prototypeOutArgs_
Thyra::ModelEvaluatorBase::InArgs< Scalar > getNominalValues() const
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_x_space() const
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_p_space(int p) const
#define TEUCHOS_ASSERT(assertion_test)
Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > model_
bool supports(EInArgsMembers arg) const
Teuchos::RCP< Thyra::LinearOpBase< Scalar > > create_W_op() const
RCP< LinearOpBase< Scalar > > get_W_op() const
RCP< const VectorBase< Scalar > > get_p(int l) const