90evalModelImpl(
const Thyra::ModelEvaluatorBase::InArgs<Scalar> &inArgs,
91 const Thyra::ModelEvaluatorBase::OutArgs<Scalar> &outArgs)
const
93 typedef Thyra::ModelEvaluatorBase MEB;
95 RCP<const Thyra::ModelEvaluator<Scalar> > under_me = this->getUnderlyingModel();
97 MEB::InArgs<Scalar> under_inArgs = under_me->createInArgs();
98 under_inArgs.setArgs(inArgs);
101 under_inArgs.set_x_dot(inArgs.get_x_dot());
102 under_inArgs.set_alpha(0.0);
104 Teuchos::RCP<Thyra::VectorBase<Scalar> > f = outArgs.get_f();
106 MEB::OutArgs<Scalar> under_outArgs = under_me->createOutArgs();
107 under_outArgs.setArgs(outArgs);
108 if(f!=Teuchos::null) {
111 scrap_f_ = Thyra::createMember(*under_me->get_f_space());
117 under_me->evalModel(under_inArgs,under_outArgs);
130 else if(f!=Teuchos::null){
139 typedef Thyra::ModelEvaluatorBase MEB;
141 using Thyra::createMember;
143 RCP<const Thyra::ModelEvaluator<Scalar> > me = this->getUnderlyingModel();
146 mass_ = me->create_W_op();
149 if(
zero_==Teuchos::null) {
150 zero_ = Thyra::createMember(*me->get_x_space());
151 Thyra::assign(
zero_.ptr(),0.0);
156 MEB::InArgs<Scalar> inArgs_new = me->createInArgs();
157 inArgs_new.setArgs(inArgs);
158 inArgs_new.set_x_dot(inArgs.get_x_dot());
159 inArgs_new.set_alpha(1.0);
160 inArgs_new.set_beta(0.0);
167#ifdef PANZER_HAVE_EPETRA_STACK
168 else if(panzerEpetraModel_!=Teuchos::null)
169 panzerEpetraModel_->setOneTimeDirichletBeta(1.0);
179 MEB::OutArgs<Scalar> outArgs = me->createOutArgs();
180 outArgs.set_W_op(
mass_);
183 me->evalModel(inArgs_new,outArgs);
193 Teuchos::RCP<Thyra::VectorBase<Scalar> > ones = Thyra::createMember(*
mass_->domain());
194 Thyra::assign(ones.ptr(),1.0);
196 RCP<Thyra::VectorBase<Scalar> > invLumpMass = Thyra::createMember(*
mass_->range());
197 Thyra::apply(*
mass_,Thyra::NOTRANS,*ones,invLumpMass.ptr());
198 Thyra::reciprocal(*invLumpMass,invLumpMass.ptr());
208 typedef Thyra::ModelEvaluatorBase MEB;
210 MEB::InArgsSetup<Scalar> inArgs(this->getUnderlyingModel()->
createInArgs());
211 inArgs.setModelEvalDescription(this->description());
212 inArgs.setSupports(MEB::IN_ARG_alpha,
true);
213 inArgs.setSupports(MEB::IN_ARG_beta,
true);
214 inArgs.setSupports(MEB::IN_ARG_x_dot,
true);
217 MEB::OutArgsSetup<Scalar> outArgs(this->getUnderlyingModel()->
createOutArgs());
218 outArgs.setModelEvalDescription(this->description());
219 outArgs.setSupports(MEB::OUT_ARG_W,
false);
220 outArgs.setSupports(MEB::OUT_ARG_W_op,
false);
229 using Teuchos::ptrFromRef;
230 using Teuchos::ptr_dynamic_cast;
233 Ptr<const panzer::ModelEvaluator<Scalar> > panzerModel = ptr_dynamic_cast<const panzer::ModelEvaluator<Scalar> >(ptrFromRef(me));
234 if(panzerModel!=Teuchos::null) {
235 panzerModel->setOneTimeDirichletBeta(beta);
239#ifdef PANZER_HAVE_EPETRA_STACK
240 Ptr<const Thyra::EpetraModelEvaluator> epModel = ptr_dynamic_cast<const Thyra::EpetraModelEvaluator>(ptrFromRef(me));
241 if(epModel!=Teuchos::null) {
242 Ptr<const panzer::ModelEvaluator_Epetra> panzerEpetraModel
243 = ptr_dynamic_cast<const panzer::ModelEvaluator_Epetra>(epModel->getEpetraModel().ptr());
245 if(panzerEpetraModel!=Teuchos::null) {
246 panzerEpetraModel->setOneTimeDirichletBeta(beta);
256 Ptr<const Thyra::ModelEvaluatorDelegatorBase<Scalar> > delegator
257 = ptr_dynamic_cast<const Thyra::ModelEvaluatorDelegatorBase<Scalar> >(ptrFromRef(me));
258 if(delegator!=Teuchos::null) {
263 TEUCHOS_TEST_FOR_EXCEPTION(
true,std::logic_error,
264 "panzer::ExplicitModelEvaluator::setOneTimeDirichletBeta can't find a panzer::ME or a panzer::EpetraME. "
265 "The deepest model is also not a delegator. Thus the recursion failed and an exception was generated.");