10#ifndef THYRA_DEFAULT_MODEL_EVALUATOR_DELEGETOR_BASE_HPP
11#define THYRA_DEFAULT_MODEL_EVALUATOR_DELEGETOR_BASE_HPP
14#include "Thyra_ModelEvaluatorDefaultBase.hpp"
15#include "Teuchos_ConstNonconstObjectContainer.hpp"
16#include "Teuchos_TimeMonitor.hpp"
17#include "Teuchos_StandardParameterEntryValidators.hpp"
133#ifdef Thyra_BUILD_HESSIAN_SUPPORT
138 ModelEvaluatorBase::InArgs<Scalar> createInArgs() const;
191 > LocalVerbosityLevel_validator_;
192 static const std::string LocalVerbosityLevel_name_;
194 static const std::string LocalVerbosityLevel_default_;
199#define THYRA_MODEL_EVALUATOR_DECORATOR_EVAL_MODEL_GEN_LOCALVERBLEVEL_BEGIN(CLASS_NAME,INARGS,OUTARGS,UNDERLYINGMODEL,LOCALVERBLEVEL) \
201 using Teuchos::includesVerbLevel; \
202 using Teuchos::RCP; \
203 using Teuchos::EVerbosityLevel; \
204 const std::string blahblah_classNameStr \
205 = std::string(CLASS_NAME)+"<"+Teuchos::ScalarTraits<Scalar>::name()+">"; \
206 const std::string blahblah_classFuncNameStr \
207 = blahblah_classNameStr+"::evalModel(...)"; \
208 THYRA_FUNC_TIME_MONITOR(blahblah_classFuncNameStr); \
210 const Thyra::ModelEvaluatorBase::OutArgs<Scalar> &blahblah_outArgs = (OUTARGS); \
212 Teuchos::Time totalTimer(""); \
213 totalTimer.start(true); \
215 const RCP<Teuchos::FancyOStream> out = this->getOStream(); \
216 const EVerbosityLevel verbLevel = this->getVerbLevel(); \
217 const EVerbosityLevel localVerbLevelInput = (LOCALVERBLEVEL); \
218 const EVerbosityLevel localVerbLevel = \
219 ( localVerbLevelInput==Teuchos::VERB_DEFAULT ? verbLevel : localVerbLevelInput ); \
220 Teuchos::OSTab tab(out); \
221 if(out.get() && includesVerbLevel(localVerbLevel,Teuchos::VERB_LOW)) \
222 *out << "\nEntering " << blahblah_classFuncNameStr << " ...\n"; \
224 if(out.get() && includesVerbLevel(localVerbLevel,Teuchos::VERB_MEDIUM)) \
226 << "\ninArgs =\n" << Teuchos::describe((INARGS),localVerbLevel) \
227 << "\noutArgs on input =\n" << Teuchos::describe((OUTARGS),Teuchos::VERB_LOW); \
229 const RCP<const Thyra::ModelEvaluator<Scalar> > \
230 thyraModel = (UNDERLYINGMODEL); \
232 typedef Teuchos::VerboseObjectTempState<Thyra::ModelEvaluatorBase> VOTSME; \
233 VOTSME thyraModel_outputTempState(thyraModel,out,verbLevel)
236#define THYRA_MODEL_EVALUATOR_DECORATOR_EVAL_MODEL_LOCALVERBLEVEL_BEGIN(CLASS_NAME,INARGS,OUTARGS,LOCALVERBLEVEL) \
237 THYRA_MODEL_EVALUATOR_DECORATOR_EVAL_MODEL_GEN_LOCALVERBLEVEL_BEGIN(CLASS_NAME,INARGS,OUTARGS,this->getUnderlyingModel(),LOCALVERBLEVEL)
240#define THYRA_MODEL_EVALUATOR_DECORATOR_EVAL_MODEL_GEN_BEGIN(CLASS_NAME,INARGS,OUTARGS,UNDERLYINGMODEL) \
241 THYRA_MODEL_EVALUATOR_DECORATOR_EVAL_MODEL_GEN_LOCALVERBLEVEL_BEGIN(CLASS_NAME,INARGS,OUTARGS,UNDERLYINGMODEL,Teuchos::VERB_DEFAULT)
244#define THYRA_MODEL_EVALUATOR_DECORATOR_EVAL_MODEL_BEGIN(CLASS_NAME,INARGS,OUTARGS) \
245 THYRA_MODEL_EVALUATOR_DECORATOR_EVAL_MODEL_GEN_BEGIN(CLASS_NAME,INARGS,OUTARGS,this->getUnderlyingModel())
248#define THYRA_MODEL_EVALUATOR_DECORATOR_EVAL_MODEL_END() \
249 if(out.get() && includesVerbLevel(localVerbLevel,Teuchos::VERB_MEDIUM)) \
251 << "\noutArgs on output =\n" << Teuchos::describe(blahblah_outArgs,localVerbLevel); \
254 if(out.get() && includesVerbLevel(localVerbLevel,Teuchos::VERB_LOW)) \
256 << "\nTotal evaluation time = "<<totalTimer.totalElapsedTime()<<" sec\n" \
257 << "\nLeaving " << blahblah_classFuncNameStr << " ...\n"
267template<
class Scalar>
275template<
class Scalar>
278=
"Local Verbosity Level";
280template<
class Scalar>
285template<
class Scalar>
288= getVerbosityLevelParameterValueName(
296template<
class Scalar>
301template<
class Scalar>
306 this->initialize(model);
310template<
class Scalar>
315 this->initialize(model);
319template<
class Scalar>
324 model_.initialize(model);
328template<
class Scalar>
333 model_.initialize(model);
337template<
class Scalar>
340 model_.uninitialize();
347template<
class Scalar>
350 return model_.isConst();
354template<
class Scalar>
358 return model_.getNonconstObj();
362template<
class Scalar>
366 return model_.getConstObj();
373template<
class Scalar>
377 return getUnderlyingModel()->get_x_space();
381template<
class Scalar>
385 return getUnderlyingModel()->get_f_space();
389template<
class Scalar>
393 return getUnderlyingModel()->get_f_multiplier_space();
397template<
class Scalar>
401 return getUnderlyingModel()->get_p_space(l);
405template<
class Scalar>
409 return getUnderlyingModel()->get_p_names(l);
413template<
class Scalar>
417 return getUnderlyingModel()->get_g_space(j);
421template<
class Scalar>
425 return getUnderlyingModel()->get_g_multiplier_space(j);
429template<
class Scalar>
433 return getUnderlyingModel()->get_g_names(j);
437template<
class Scalar>
441 return getUnderlyingModel()->getNominalValues();
445template<
class Scalar>
449 return getUnderlyingModel()->getLowerBounds();
453template<
class Scalar>
457 return getUnderlyingModel()->getUpperBounds();
461template<
class Scalar>
465 return getUnderlyingModel()->create_W();
469template<
class Scalar>
473 return getUnderlyingModel()->create_W_op();
477template<
class Scalar>
481 return getUnderlyingModel()->create_W_prec();
485template<
class Scalar>
489 return getUnderlyingModel()->get_W_factory();
493#ifdef Thyra_BUILD_HESSIAN_SUPPORT
494template<
class Scalar>
498 return getUnderlyingModel()->create_hess_g_pp(j, l1, l2);
503template<
class Scalar>
504ModelEvaluatorBase::InArgs<Scalar>
509 return std::move(inArgs);
513template<
class Scalar>
516 ,
const bool wasSolved
519 getNonconstUnderlyingModel()->reportFinalPoint(finalPoint,wasSolved);
529template<
class Scalar>
535 if (is_null(LocalVerbosityLevel_validator_))
536 LocalVerbosityLevel_validator_ =
538 LocalVerbosityLevel_name_
541 LocalVerbosityLevel_name_, LocalVerbosityLevel_default_,
542 "Overriding verbosity level for this model evaluator object.\n"
543 "This level will not propagate to nested model evaluator objects\n"
544 "The value of \"default\" result in the object verbosity level being\n"
546 LocalVerbosityLevel_validator_
551template<
class Scalar>
558 paramList, LocalVerbosityLevel_name_, LocalVerbosityLevel_default_ );
568template<
class Scalar>
576template<
class Scalar>
577RCP<LinearOpBase<Scalar> >
578ModelEvaluatorDelegatorBase<Scalar>::create_DgDx_dot_op_impl(
582 return getUnderlyingModel()->create_DgDx_dot_op(j);
586template<
class Scalar>
587RCP<LinearOpBase<Scalar> >
588ModelEvaluatorDelegatorBase<Scalar>::create_DgDx_op_impl(
592 return getUnderlyingModel()->create_DgDx_op(j);
596template<
class Scalar>
597RCP<LinearOpBase<Scalar> >
598ModelEvaluatorDelegatorBase<Scalar>::create_DgDp_op_impl(
602 return getUnderlyingModel()->create_DgDp_op(j,l);
606template<
class Scalar>
607ModelEvaluatorBase::OutArgs<Scalar>
608ModelEvaluatorDelegatorBase<Scalar>::createOutArgsImpl()
const
610 ModelEvaluatorBase::OutArgsSetup<Scalar>
611 outArgs = getUnderlyingModel()->createOutArgs();
612 outArgs.setModelEvalDescription(this->description());
613 return std::move(outArgs);
ParameterList & set(std::string const &name, T &&value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
IntegralType getIntegralValue(ParameterList const ¶mList, std::string const ¶mName)
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)
T_To & dyn_cast(T_From &from)