9 #ifndef Tempus_ModelEvaluatorIMEXPair_Basic_impl_hpp
10 #define Tempus_ModelEvaluatorIMEXPair_Basic_impl_hpp
12 #include "Thyra_ProductVectorBase.hpp"
13 #include "Thyra_ProductVectorSpaceBase.hpp"
17 template <
typename Scalar>
21 using Teuchos::rcp_const_cast;
27 MEB::InArgs<Scalar> inArgs = implicitModel_->getNominalValues();
30 if (inArgs.supports(MEB::IN_ARG_x_dot)) {
34 xDot_ = Teuchos::null;
39 !(explicitModel_->get_x_space()->isCompatible(
40 *(implicitModel_->get_x_space()))),
42 "Error - WrapperModelEvaluatorPairIMEX_Basic::initialize()\n"
43 <<
" Explicit and Implicit vector x spaces are incompatible!\n"
44 <<
" Explicit vector x space = "
45 << *(explicitModel_->get_x_space())
46 <<
"\n Implicit vector x space = "
47 << *(implicitModel_->get_x_space()) <<
"\n");
51 !(explicitModel_->get_f_space()->isCompatible(
52 *(implicitModel_->get_f_space()))),
54 "Error - WrapperModelEvaluatorPairIMEX_Basic::initialize()\n"
55 <<
" Explicit and Implicit vector f spaces are incompatible!\n"
56 <<
" Explicit vector f space = "
57 << *(explicitModel_->get_f_space())
58 <<
"\n Implicit vector f space = "
59 << *(implicitModel_->get_f_space()) <<
"\n");
62 template <
typename Scalar>
67 true, std::logic_error,
68 "Error - WrapperModelEvaluatorPairIMEX_Basic<Scalar>::setAppModel\n"
69 " should not be used. One should instead use setExplicitModel,\n"
70 " setImplicitModel, or create a new WrapperModelEvaluatorPairIMEX.\n");
73 template <
typename Scalar>
78 true, std::logic_error,
79 "Error - WrapperModelEvaluatorPairIMEX_Basic<Scalar>::getAppModel\n"
80 " should not be used. One should instead use getExplicitModel,\n"
81 " getImplicitModel, or directly use this WrapperModelEvaluatorPairIMEX\n"
85 template <
typename Scalar>
89 return this->implicitModel_->get_x_space();
92 template <
typename Scalar>
96 return this->implicitModel_->get_g_space(i);
99 template <
typename Scalar>
103 return this->implicitModel_->get_p_space(i);
106 template <
typename Scalar>
111 MEB::InArgsSetup<Scalar> inArgs = this->createInArgs();
112 return std::move(inArgs);
115 template <
typename Scalar>
121 MEB::InArgsSetup<Scalar> inArgs(implicitModel_->getNominalValues());
124 if (y_ != Teuchos::null) inArgs.set_p(index_, y_);
125 if (inArgs.supports(MEB::IN_ARG_x_dot)) inArgs.set_x_dot(xDot_);
126 if (inArgs.supports(MEB::IN_ARG_t)) inArgs.set_t(time_);
127 if (inArgs.supports(MEB::IN_ARG_step_size))
128 inArgs.set_step_size(p_->timeStepSize_);
129 if (inArgs.supports(MEB::IN_ARG_alpha)) inArgs.set_alpha(p_->alpha_);
130 if (inArgs.supports(MEB::IN_ARG_beta)) inArgs.set_beta(p_->beta_);
131 if (inArgs.supports(MEB::IN_ARG_stage_number))
132 inArgs.set_stage_number(p_->stageNumber_);
134 inArgs.setModelEvalDescription(this->description());
135 return std::move(inArgs);
138 template <
typename Scalar>
143 MEB::OutArgsSetup<Scalar> outArgs(implicitModel_->createOutArgs());
144 outArgs.setModelEvalDescription(this->description());
145 return std::move(outArgs);
148 template <
typename Scalar>
156 RCP<const Thyra::VectorBase<Scalar> > x = inArgs.
get_x();
157 RCP<Thyra::VectorBase<Scalar> > x_dot = Thyra::createMember(get_x_space());
158 timeDer_->compute(x, x_dot);
160 MEB::InArgs<Scalar> appImplicitInArgs(inArgs);
161 MEB::OutArgs<Scalar> appImplicitOutArgs(outArgs);
162 appImplicitInArgs.set_x_dot(x_dot);
164 implicitModel_->evalModel(appImplicitInArgs, appImplicitOutArgs);
169 #endif // Tempus_ModelEvaluatorIMEXPair_Basic_impl_hpp
virtual Thyra::ModelEvaluatorBase::OutArgs< Scalar > createOutArgsImpl() const
virtual Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > getAppModel() const
Get the underlying application ModelEvaluator.
virtual Thyra::ModelEvaluatorBase::InArgs< Scalar > createInArgs() const
virtual Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_g_space(int i) const
Get the g space.
virtual void evalModelImpl(const Thyra::ModelEvaluatorBase::InArgs< Scalar > &in, const Thyra::ModelEvaluatorBase::OutArgs< Scalar > &out) const
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
virtual Thyra::ModelEvaluatorBase::InArgs< Scalar > getNominalValues() const
virtual void initialize()
Initialize after setting member data.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
virtual void setAppModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &me)
Set the underlying application ModelEvaluator.
virtual Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_p_space(int i) const
Get the p space.
virtual Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_x_space() const
Get the x-solution space.
RCP< const VectorBase< Scalar > > get_x() const