42 #ifndef THYRA_DEFAULT_MODEL_EVALUATOR_DELEGETOR_BASE_HPP 43 #define THYRA_DEFAULT_MODEL_EVALUATOR_DELEGETOR_BASE_HPP 46 #include "Thyra_ModelEvaluatorDefaultBase.hpp" 47 #include "Teuchos_ConstNonconstObjectContainer.hpp" 48 #include "Teuchos_TimeMonitor.hpp" 49 #include "Teuchos_StandardParameterEntryValidators.hpp" 81 template<
class Scalar>
136 RCP<const VectorSpaceBase<Scalar> >
get_x_space()
const;
138 RCP<const VectorSpaceBase<Scalar> >
get_f_space()
const;
140 RCP<const VectorSpaceBase<Scalar> >
get_p_space(
int l)
const;
142 RCP<const Teuchos::Array<std::string> >
get_p_names(
int l)
const;
144 RCP<const VectorSpaceBase<Scalar> >
get_g_space(
int j)
const;
146 Teuchos::ArrayView<const std::string>
get_g_names(
int j)
const;
154 RCP<LinearOpWithSolveBase<Scalar> >
create_W()
const;
160 RCP<const LinearOpWithSolveFactoryBase<Scalar> >
get_W_factory()
const;
178 ParameterList *paramList
183 ParameterList ¶mList
194 RCP<LinearOpBase<Scalar> > create_DfDp_op_impl(
int l)
const;
196 RCP<LinearOpBase<Scalar> > create_DgDx_dot_op_impl(
int j)
const;
198 RCP<LinearOpBase<Scalar> > create_DgDx_op_impl(
int j)
const;
200 RCP<LinearOpBase<Scalar> > create_DgDp_op_impl(
int j,
int l )
const;
208 Teuchos::ConstNonconstObjectContainer<ModelEvaluator<Scalar> > model_;
212 Teuchos::StringToIntegralParameterEntryValidator<
213 Teuchos::EVerbosityLevel
215 > LocalVerbosityLevel_validator_;
216 static const std::string LocalVerbosityLevel_name_;
217 static const Teuchos::EVerbosityLevel LocalVerbosityLevel_enum_default_;
218 static const std::string LocalVerbosityLevel_default_;
223 #define THYRA_MODEL_EVALUATOR_DECORATOR_EVAL_MODEL_GEN_LOCALVERBLEVEL_BEGIN(CLASS_NAME,INARGS,OUTARGS,UNDERLYINGMODEL,LOCALVERBLEVEL) \ 225 using Teuchos::includesVerbLevel; \ 226 using Teuchos::RCP; \ 227 using Teuchos::EVerbosityLevel; \ 228 const std::string blahblah_classNameStr \ 229 = std::string(CLASS_NAME)+"<"+Teuchos::ScalarTraits<Scalar>::name()+">"; \ 230 const std::string blahblah_classFuncNameStr \ 231 = blahblah_classNameStr+"::evalModel(...)"; \ 232 THYRA_FUNC_TIME_MONITOR(blahblah_classFuncNameStr); \ 234 const Thyra::ModelEvaluatorBase::OutArgs<Scalar> &blahblah_outArgs = (OUTARGS); \ 236 Teuchos::Time totalTimer(""); \ 237 totalTimer.start(true); \ 239 const RCP<Teuchos::FancyOStream> out = this->getOStream(); \ 240 const EVerbosityLevel verbLevel = this->getVerbLevel(); \ 241 const EVerbosityLevel localVerbLevelInput = (LOCALVERBLEVEL); \ 242 const EVerbosityLevel localVerbLevel = \ 243 ( localVerbLevelInput==Teuchos::VERB_DEFAULT ? verbLevel : localVerbLevelInput ); \ 244 Teuchos::OSTab tab(out); \ 245 if(out.get() && includesVerbLevel(localVerbLevel,Teuchos::VERB_LOW)) \ 246 *out << "\nEntering " << blahblah_classFuncNameStr << " ...\n"; \ 248 if(out.get() && includesVerbLevel(localVerbLevel,Teuchos::VERB_MEDIUM)) \ 250 << "\ninArgs =\n" << Teuchos::describe((INARGS),localVerbLevel) \ 251 << "\noutArgs on input =\n" << Teuchos::describe((OUTARGS),Teuchos::VERB_LOW); \ 253 const RCP<const Thyra::ModelEvaluator<Scalar> > \ 254 thyraModel = (UNDERLYINGMODEL); \ 256 typedef Teuchos::VerboseObjectTempState<Thyra::ModelEvaluatorBase> VOTSME; \ 257 VOTSME thyraModel_outputTempState(thyraModel,out,verbLevel) 260 #define THYRA_MODEL_EVALUATOR_DECORATOR_EVAL_MODEL_LOCALVERBLEVEL_BEGIN(CLASS_NAME,INARGS,OUTARGS,LOCALVERBLEVEL) \ 261 THYRA_MODEL_EVALUATOR_DECORATOR_EVAL_MODEL_GEN_LOCALVERBLEVEL_BEGIN(CLASS_NAME,INARGS,OUTARGS,this->getUnderlyingModel(),LOCALVERBLEVEL) 264 #define THYRA_MODEL_EVALUATOR_DECORATOR_EVAL_MODEL_GEN_BEGIN(CLASS_NAME,INARGS,OUTARGS,UNDERLYINGMODEL) \ 265 THYRA_MODEL_EVALUATOR_DECORATOR_EVAL_MODEL_GEN_LOCALVERBLEVEL_BEGIN(CLASS_NAME,INARGS,OUTARGS,UNDERLYINGMODEL,Teuchos::VERB_DEFAULT) 268 #define THYRA_MODEL_EVALUATOR_DECORATOR_EVAL_MODEL_BEGIN(CLASS_NAME,INARGS,OUTARGS) \ 269 THYRA_MODEL_EVALUATOR_DECORATOR_EVAL_MODEL_GEN_BEGIN(CLASS_NAME,INARGS,OUTARGS,this->getUnderlyingModel()) 272 #define THYRA_MODEL_EVALUATOR_DECORATOR_EVAL_MODEL_END() \ 273 if(out.get() && includesVerbLevel(localVerbLevel,Teuchos::VERB_MEDIUM)) \ 275 << "\noutArgs on output =\n" << Teuchos::describe(blahblah_outArgs,localVerbLevel); \ 278 if(out.get() && includesVerbLevel(localVerbLevel,Teuchos::VERB_LOW)) \ 280 << "\nTotal evaluation time = "<<totalTimer.totalElapsedTime()<<" sec\n" \ 281 << "\nLeaving " << blahblah_classFuncNameStr << " ...\n" 291 template<
class Scalar>
293 Teuchos::StringToIntegralParameterEntryValidator<
294 Teuchos::EVerbosityLevel
299 template<
class Scalar>
302 =
"Local Verbosity Level";
304 template<
class Scalar>
305 const Teuchos::EVerbosityLevel
307 = Teuchos::VERB_DEFAULT;
309 template<
class Scalar>
312 = getVerbosityLevelParameterValueName(
320 template<
class Scalar>
325 template<
class Scalar>
330 this->initialize(model);
334 template<
class Scalar>
339 this->initialize(model);
343 template<
class Scalar>
348 model_.initialize(model);
352 template<
class Scalar>
357 model_.initialize(model);
361 template<
class Scalar>
364 model_.uninitialize();
371 template<
class Scalar>
374 return model_.isConst();
378 template<
class Scalar>
379 RCP<ModelEvaluator<Scalar> >
382 return model_.getNonconstObj();
386 template<
class Scalar>
387 RCP<const ModelEvaluator<Scalar> >
390 return model_.getConstObj();
397 template<
class Scalar>
398 RCP<const VectorSpaceBase<Scalar> >
401 return getUnderlyingModel()->get_x_space();
405 template<
class Scalar>
406 RCP<const VectorSpaceBase<Scalar> >
409 return getUnderlyingModel()->get_f_space();
413 template<
class Scalar>
414 RCP<const VectorSpaceBase<Scalar> >
417 return getUnderlyingModel()->get_p_space(l);
421 template<
class Scalar>
422 RCP<const Teuchos::Array<std::string> >
425 return getUnderlyingModel()->get_p_names(l);
429 template<
class Scalar>
430 RCP<const VectorSpaceBase<Scalar> >
433 return getUnderlyingModel()->get_g_space(j);
437 template<
class Scalar>
438 Teuchos::ArrayView<const std::string>
441 return getUnderlyingModel()->get_g_names(j);
445 template<
class Scalar>
449 return getUnderlyingModel()->getNominalValues();
453 template<
class Scalar>
457 return getUnderlyingModel()->getLowerBounds();
461 template<
class Scalar>
465 return getUnderlyingModel()->getUpperBounds();
469 template<
class Scalar>
470 RCP<LinearOpWithSolveBase<Scalar> >
473 return getUnderlyingModel()->create_W();
477 template<
class Scalar>
478 RCP<LinearOpBase<Scalar> >
481 return getUnderlyingModel()->create_W_op();
485 template<
class Scalar>
486 RCP<PreconditionerBase<Scalar> >
489 return getUnderlyingModel()->create_W_prec();
493 template<
class Scalar>
494 RCP<const LinearOpWithSolveFactoryBase<Scalar> >
497 return getUnderlyingModel()->get_W_factory();
501 template<
class Scalar>
511 template<
class Scalar>
514 ,
const bool wasSolved
517 getNonconstUnderlyingModel()->reportFinalPoint(finalPoint,wasSolved);
527 template<
class Scalar>
529 ParameterList *paramList
532 TEUCHOS_TEST_FOR_EXCEPT(0==paramList);
533 if (is_null(LocalVerbosityLevel_validator_))
534 LocalVerbosityLevel_validator_ =
535 Teuchos::verbosityLevelParameterEntryValidator(
536 LocalVerbosityLevel_name_
539 LocalVerbosityLevel_name_, LocalVerbosityLevel_default_,
540 "Overriding verbosity level for this model evaluator object.\n" 541 "This level will not propagate to nested model evaluator objects\n" 542 "The value of \"default\" result in the object verbosity level being\n" 544 LocalVerbosityLevel_validator_
549 template<
class Scalar>
550 Teuchos::EVerbosityLevel
552 ParameterList ¶mList
555 return LocalVerbosityLevel_validator_->getIntegralValue(
556 paramList, LocalVerbosityLevel_name_, LocalVerbosityLevel_default_ );
566 template<
class Scalar>
567 RCP<LinearOpBase<Scalar> >
574 template<
class Scalar>
575 RCP<LinearOpBase<Scalar> >
576 ModelEvaluatorDelegatorBase<Scalar>::create_DgDx_dot_op_impl(
580 return getUnderlyingModel()->create_DgDx_dot_op(j);
584 template<
class Scalar>
585 RCP<LinearOpBase<Scalar> >
586 ModelEvaluatorDelegatorBase<Scalar>::create_DgDx_op_impl(
590 return getUnderlyingModel()->create_DgDx_op(j);
594 template<
class Scalar>
595 RCP<LinearOpBase<Scalar> >
596 ModelEvaluatorDelegatorBase<Scalar>::create_DgDp_op_impl(
600 return getUnderlyingModel()->create_DgDp_op(j,l);
604 template<
class Scalar>
605 ModelEvaluatorBase::OutArgs<Scalar>
606 ModelEvaluatorDelegatorBase<Scalar>::createOutArgsImpl()
const 608 ModelEvaluatorBase::OutArgsSetup<Scalar>
609 outArgs = getUnderlyingModel()->createOutArgs();
610 outArgs.setModelEvalDescription(this->description());
617 #endif // THYRA_DEFAULT_MODEL_EVALUATOR_DELEGETOR_BASE_HPP Protected subclass of InArgs that only ModelEvaluator subclasses can access to set up the selection o...
RCP< const VectorSpaceBase< Scalar > > get_g_space(int j) const
Pure abstract base interface for evaluating a stateless "model" that can be mapped into a number of d...
Default base class for concrete model evaluators.
Concrete aggregate class for all output arguments computable by a ModelEvaluator subclass object...
void uninitialize()
Uninitialize.
void setModelEvalDescription(const std::string &modelEvalDescription)
Teuchos::ArrayView< const std::string > get_g_names(int j) const
ModelEvaluatorBase::InArgs< Scalar > createInArgs() const
RCP< PreconditionerBase< Scalar > > create_W_prec() const
This is a base class that delegetes almost all function to a wrapped model evaluator object...
void initialize(const RCP< ModelEvaluator< Scalar > > &model)
Initialize given a non-const model evaluator.
RCP< const VectorSpaceBase< Scalar > > get_p_space(int l) const
Teuchos::EVerbosityLevel readLocalVerbosityLevelValidatedParameter(ParameterList ¶mList) const
Read the local verbosity level parameter.
RCP< LinearOpWithSolveBase< Scalar > > create_W() const
RCP< const LinearOpWithSolveFactoryBase< Scalar > > get_W_factory() const
ModelEvaluatorDelegatorBase()
Constructs to uninitialized.
RCP< LinearOpBase< Scalar > > create_W_op() const
ModelEvaluatorBase::InArgs< Scalar > getNominalValues() const
void reportFinalPoint(const ModelEvaluatorBase::InArgs< Scalar > &finalPoint, const bool wasSolved)
ModelEvaluatorBase::InArgs< Scalar > getUpperBounds() const
virtual RCP< ModelEvaluator< Scalar > > getNonconstUnderlyingModel()
virtual bool isUnderlyingModelConst() const
RCP< const Teuchos::Array< std::string > > get_p_names(int l) const
ModelEvaluatorBase::InArgs< Scalar > getLowerBounds() const
RCP< const VectorSpaceBase< Scalar > > get_x_space() const
RCP< LinearOpBase< Scalar > > create_DfDp_op(int l) const
virtual RCP< const ModelEvaluator< Scalar > > getUnderlyingModel() const
void setLocalVerbosityLevelValidatedParameter(ParameterList *paramList) const
Set a valid parameter for reading the local verbosity level.
RCP< const VectorSpaceBase< Scalar > > get_f_space() const
Concrete aggregate class for all output arguments computable by a ModelEvaluator subclass object...