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"
165#ifdef Thyra_BUILD_HESSIAN_SUPPORT
170 ModelEvaluatorBase::InArgs<Scalar> createInArgs() const;
223 > LocalVerbosityLevel_validator_;
224 static const std::string LocalVerbosityLevel_name_;
226 static const std::string LocalVerbosityLevel_default_;
231#define THYRA_MODEL_EVALUATOR_DECORATOR_EVAL_MODEL_GEN_LOCALVERBLEVEL_BEGIN(CLASS_NAME,INARGS,OUTARGS,UNDERLYINGMODEL,LOCALVERBLEVEL) \
233 using Teuchos::includesVerbLevel; \
234 using Teuchos::RCP; \
235 using Teuchos::EVerbosityLevel; \
236 const std::string blahblah_classNameStr \
237 = std::string(CLASS_NAME)+"<"+Teuchos::ScalarTraits<Scalar>::name()+">"; \
238 const std::string blahblah_classFuncNameStr \
239 = blahblah_classNameStr+"::evalModel(...)"; \
240 THYRA_FUNC_TIME_MONITOR(blahblah_classFuncNameStr); \
242 const Thyra::ModelEvaluatorBase::OutArgs<Scalar> &blahblah_outArgs = (OUTARGS); \
244 Teuchos::Time totalTimer(""); \
245 totalTimer.start(true); \
247 const RCP<Teuchos::FancyOStream> out = this->getOStream(); \
248 const EVerbosityLevel verbLevel = this->getVerbLevel(); \
249 const EVerbosityLevel localVerbLevelInput = (LOCALVERBLEVEL); \
250 const EVerbosityLevel localVerbLevel = \
251 ( localVerbLevelInput==Teuchos::VERB_DEFAULT ? verbLevel : localVerbLevelInput ); \
252 Teuchos::OSTab tab(out); \
253 if(out.get() && includesVerbLevel(localVerbLevel,Teuchos::VERB_LOW)) \
254 *out << "\nEntering " << blahblah_classFuncNameStr << " ...\n"; \
256 if(out.get() && includesVerbLevel(localVerbLevel,Teuchos::VERB_MEDIUM)) \
258 << "\ninArgs =\n" << Teuchos::describe((INARGS),localVerbLevel) \
259 << "\noutArgs on input =\n" << Teuchos::describe((OUTARGS),Teuchos::VERB_LOW); \
261 const RCP<const Thyra::ModelEvaluator<Scalar> > \
262 thyraModel = (UNDERLYINGMODEL); \
264 typedef Teuchos::VerboseObjectTempState<Thyra::ModelEvaluatorBase> VOTSME; \
265 VOTSME thyraModel_outputTempState(thyraModel,out,verbLevel)
268#define THYRA_MODEL_EVALUATOR_DECORATOR_EVAL_MODEL_LOCALVERBLEVEL_BEGIN(CLASS_NAME,INARGS,OUTARGS,LOCALVERBLEVEL) \
269 THYRA_MODEL_EVALUATOR_DECORATOR_EVAL_MODEL_GEN_LOCALVERBLEVEL_BEGIN(CLASS_NAME,INARGS,OUTARGS,this->getUnderlyingModel(),LOCALVERBLEVEL)
272#define THYRA_MODEL_EVALUATOR_DECORATOR_EVAL_MODEL_GEN_BEGIN(CLASS_NAME,INARGS,OUTARGS,UNDERLYINGMODEL) \
273 THYRA_MODEL_EVALUATOR_DECORATOR_EVAL_MODEL_GEN_LOCALVERBLEVEL_BEGIN(CLASS_NAME,INARGS,OUTARGS,UNDERLYINGMODEL,Teuchos::VERB_DEFAULT)
276#define THYRA_MODEL_EVALUATOR_DECORATOR_EVAL_MODEL_BEGIN(CLASS_NAME,INARGS,OUTARGS) \
277 THYRA_MODEL_EVALUATOR_DECORATOR_EVAL_MODEL_GEN_BEGIN(CLASS_NAME,INARGS,OUTARGS,this->getUnderlyingModel())
280#define THYRA_MODEL_EVALUATOR_DECORATOR_EVAL_MODEL_END() \
281 if(out.get() && includesVerbLevel(localVerbLevel,Teuchos::VERB_MEDIUM)) \
283 << "\noutArgs on output =\n" << Teuchos::describe(blahblah_outArgs,localVerbLevel); \
286 if(out.get() && includesVerbLevel(localVerbLevel,Teuchos::VERB_LOW)) \
288 << "\nTotal evaluation time = "<<totalTimer.totalElapsedTime()<<" sec\n" \
289 << "\nLeaving " << blahblah_classFuncNameStr << " ...\n"
299template<
class Scalar>
307template<
class Scalar>
310=
"Local Verbosity Level";
312template<
class Scalar>
317template<
class Scalar>
320= getVerbosityLevelParameterValueName(
328template<
class Scalar>
333template<
class Scalar>
338 this->initialize(model);
342template<
class Scalar>
347 this->initialize(model);
351template<
class Scalar>
356 model_.initialize(model);
360template<
class Scalar>
365 model_.initialize(model);
369template<
class Scalar>
372 model_.uninitialize();
379template<
class Scalar>
382 return model_.isConst();
386template<
class Scalar>
390 return model_.getNonconstObj();
394template<
class Scalar>
398 return model_.getConstObj();
405template<
class Scalar>
409 return getUnderlyingModel()->get_x_space();
413template<
class Scalar>
417 return getUnderlyingModel()->get_f_space();
421template<
class Scalar>
425 return getUnderlyingModel()->get_f_multiplier_space();
429template<
class Scalar>
433 return getUnderlyingModel()->get_p_space(l);
437template<
class Scalar>
441 return getUnderlyingModel()->get_p_names(l);
445template<
class Scalar>
449 return getUnderlyingModel()->get_g_space(j);
453template<
class Scalar>
457 return getUnderlyingModel()->get_g_multiplier_space(j);
461template<
class Scalar>
465 return getUnderlyingModel()->get_g_names(j);
469template<
class Scalar>
473 return getUnderlyingModel()->getNominalValues();
477template<
class Scalar>
481 return getUnderlyingModel()->getLowerBounds();
485template<
class Scalar>
489 return getUnderlyingModel()->getUpperBounds();
493template<
class Scalar>
497 return getUnderlyingModel()->create_W();
501template<
class Scalar>
505 return getUnderlyingModel()->create_W_op();
509template<
class Scalar>
513 return getUnderlyingModel()->create_W_prec();
517template<
class Scalar>
521 return getUnderlyingModel()->get_W_factory();
525#ifdef Thyra_BUILD_HESSIAN_SUPPORT
526template<
class Scalar>
530 return getUnderlyingModel()->create_hess_g_pp(j, l1, l2);
535template<
class Scalar>
536ModelEvaluatorBase::InArgs<Scalar>
541 return std::move(inArgs);
545template<
class Scalar>
548 ,
const bool wasSolved
551 getNonconstUnderlyingModel()->reportFinalPoint(finalPoint,wasSolved);
561template<
class Scalar>
567 if (is_null(LocalVerbosityLevel_validator_))
568 LocalVerbosityLevel_validator_ =
569 Teuchos::verbosityLevelParameterEntryValidator(
570 LocalVerbosityLevel_name_
573 LocalVerbosityLevel_name_, LocalVerbosityLevel_default_,
574 "Overriding verbosity level for this model evaluator object.\n"
575 "This level will not propagate to nested model evaluator objects\n"
576 "The value of \"default\" result in the object verbosity level being\n"
578 LocalVerbosityLevel_validator_
583template<
class Scalar>
589 return LocalVerbosityLevel_validator_->getIntegralValue(
590 paramList, LocalVerbosityLevel_name_, LocalVerbosityLevel_default_ );
600template<
class Scalar>
608template<
class Scalar>
609RCP<LinearOpBase<Scalar> >
610ModelEvaluatorDelegatorBase<Scalar>::create_DgDx_dot_op_impl(
614 return getUnderlyingModel()->create_DgDx_dot_op(j);
618template<
class Scalar>
619RCP<LinearOpBase<Scalar> >
620ModelEvaluatorDelegatorBase<Scalar>::create_DgDx_op_impl(
624 return getUnderlyingModel()->create_DgDx_op(j);
628template<
class Scalar>
629RCP<LinearOpBase<Scalar> >
630ModelEvaluatorDelegatorBase<Scalar>::create_DgDp_op_impl(
634 return getUnderlyingModel()->create_DgDp_op(j,l);
638template<
class Scalar>
639ModelEvaluatorBase::OutArgs<Scalar>
640ModelEvaluatorDelegatorBase<Scalar>::createOutArgsImpl()
const
642 ModelEvaluatorBase::OutArgsSetup<Scalar>
643 outArgs = getUnderlyingModel()->createOutArgs();
644 outArgs.setModelEvalDescription(this->description());
645 return std::move(outArgs);
ParameterList & set(std::string const &name, T const &value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
Protected subclass of InArgs that only ModelEvaluator subclasses can access to set up the selection o...
void setModelEvalDescription(const std::string &modelEvalDescription)
Concrete aggregate class for all input arguments computable by a ModelEvaluator subclass object.
Concrete aggregate class for all output arguments computable by a ModelEvaluator subclass object.
Default base class for concrete model evaluators.
RCP< LinearOpBase< Scalar > > create_DfDp_op(int l) const
This is a base class that delegetes almost all function to a wrapped model evaluator object.
virtual bool isUnderlyingModelConst() const
void setLocalVerbosityLevelValidatedParameter(ParameterList *paramList) const
Set a valid parameter for reading the local verbosity level.
ModelEvaluatorBase::InArgs< Scalar > createInArgs() const
Teuchos::ArrayView< const std::string > get_g_names(int j) const
RCP< const VectorSpaceBase< Scalar > > get_f_space() const
Teuchos::EVerbosityLevel readLocalVerbosityLevelValidatedParameter(ParameterList ¶mList) const
Read the local verbosity level parameter.
RCP< const VectorSpaceBase< Scalar > > get_x_space() const
RCP< const Teuchos::Array< std::string > > get_p_names(int l) const
ModelEvaluatorDelegatorBase()
Constructs to uninitialized.
RCP< const VectorSpaceBase< Scalar > > get_p_space(int l) const
ModelEvaluatorBase::InArgs< Scalar > getLowerBounds() const
RCP< LinearOpWithSolveBase< Scalar > > create_W() const
RCP< const VectorSpaceBase< Scalar > > get_g_space(int j) const
virtual RCP< const ModelEvaluator< Scalar > > getUnderlyingModel() const
RCP< const LinearOpWithSolveFactoryBase< Scalar > > get_W_factory() const
void reportFinalPoint(const ModelEvaluatorBase::InArgs< Scalar > &finalPoint, const bool wasSolved)
ModelEvaluatorBase::InArgs< Scalar > getNominalValues() const
RCP< PreconditionerBase< Scalar > > create_W_prec() const
void uninitialize()
Uninitialize.
ModelEvaluatorBase::InArgs< Scalar > getUpperBounds() const
void initialize(const RCP< ModelEvaluator< Scalar > > &model)
Initialize given a non-const model evaluator.
RCP< const VectorSpaceBase< Scalar > > get_f_multiplier_space() const
virtual RCP< ModelEvaluator< Scalar > > getNonconstUnderlyingModel()
RCP< const VectorSpaceBase< Scalar > > get_g_multiplier_space(int j) const
RCP< LinearOpBase< Scalar > > create_W_op() const
Pure abstract base interface for evaluating a stateless "model" that can be mapped into a number of d...
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)