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>
165 #ifdef Thyra_BUILD_HESSIAN_SUPPORT
168 #endif // ifdef Thyra_BUILD_HESSIAN_SUPPORT
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"
299 template<
class Scalar>
307 template<
class Scalar>
310 =
"Local Verbosity Level";
312 template<
class Scalar>
317 template<
class Scalar>
320 = getVerbosityLevelParameterValueName(
328 template<
class Scalar>
333 template<
class Scalar>
342 template<
class Scalar>
351 template<
class Scalar>
356 model_.initialize(model);
360 template<
class Scalar>
365 model_.initialize(model);
369 template<
class Scalar>
372 model_.uninitialize();
379 template<
class Scalar>
382 return model_.isConst();
386 template<
class Scalar>
390 return model_.getNonconstObj();
394 template<
class Scalar>
398 return model_.getConstObj();
405 template<
class Scalar>
409 return getUnderlyingModel()->get_x_space();
413 template<
class Scalar>
417 return getUnderlyingModel()->get_f_space();
421 template<
class Scalar>
425 return getUnderlyingModel()->get_f_multiplier_space();
429 template<
class Scalar>
433 return getUnderlyingModel()->get_p_space(l);
437 template<
class Scalar>
441 return getUnderlyingModel()->get_p_names(l);
445 template<
class Scalar>
449 return getUnderlyingModel()->get_g_space(j);
453 template<
class Scalar>
457 return getUnderlyingModel()->get_g_multiplier_space(j);
461 template<
class Scalar>
465 return getUnderlyingModel()->get_g_names(j);
469 template<
class Scalar>
473 return getUnderlyingModel()->getNominalValues();
477 template<
class Scalar>
481 return getUnderlyingModel()->getLowerBounds();
485 template<
class Scalar>
489 return getUnderlyingModel()->getUpperBounds();
493 template<
class Scalar>
497 return getUnderlyingModel()->create_W();
501 template<
class Scalar>
505 return getUnderlyingModel()->create_W_op();
509 template<
class Scalar>
513 return getUnderlyingModel()->create_W_prec();
517 template<
class Scalar>
521 return getUnderlyingModel()->get_W_factory();
525 #ifdef Thyra_BUILD_HESSIAN_SUPPORT
526 template<
class Scalar>
530 return getUnderlyingModel()->create_hess_g_pp(j, l1, l2);
532 #endif // ifdef Thyra_BUILD_HESSIAN_SUPPORT
535 template<
class Scalar>
536 ModelEvaluatorBase::InArgs<Scalar>
541 return std::move(inArgs);
545 template<
class Scalar>
548 ,
const bool wasSolved
551 getNonconstUnderlyingModel()->reportFinalPoint(finalPoint,wasSolved);
561 template<
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_
583 template<
class Scalar>
589 return LocalVerbosityLevel_validator_->getIntegralValue(
590 paramList, LocalVerbosityLevel_name_, LocalVerbosityLevel_default_ );
600 template<
class Scalar>
608 template<
class Scalar>
609 RCP<LinearOpBase<Scalar> >
610 ModelEvaluatorDelegatorBase<Scalar>::create_DgDx_dot_op_impl(
614 return getUnderlyingModel()->create_DgDx_dot_op(j);
618 template<
class Scalar>
619 RCP<LinearOpBase<Scalar> >
620 ModelEvaluatorDelegatorBase<Scalar>::create_DgDx_op_impl(
624 return getUnderlyingModel()->create_DgDx_op(j);
628 template<
class Scalar>
629 RCP<LinearOpBase<Scalar> >
630 ModelEvaluatorDelegatorBase<Scalar>::create_DgDp_op_impl(
634 return getUnderlyingModel()->create_DgDp_op(j,l);
638 template<
class Scalar>
639 ModelEvaluatorBase::OutArgs<Scalar>
640 ModelEvaluatorDelegatorBase<Scalar>::createOutArgsImpl()
const
642 ModelEvaluatorBase::OutArgsSetup<Scalar>
643 outArgs = getUnderlyingModel()->createOutArgs();
644 outArgs.setModelEvalDescription(this->description());
645 return std::move(outArgs);
651 #endif // THYRA_DEFAULT_MODEL_EVALUATOR_DELEGETOR_BASE_HPP
Protected subclass of InArgs that only ModelEvaluator subclasses can access to set up the selection o...
void initialize(int *argc, char ***argv)
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.
bool is_null(const boost::shared_ptr< T > &p)
RCP< const VectorSpaceBase< Scalar > > get_x_space() const
RCP< LinearOpBase< Scalar > > create_DfDp_op(int l) const
virtual RCP< const ModelEvaluator< Scalar > > getUnderlyingModel() const
Concrete aggregate class for all output arguments computable by a ModelEvaluator subclass object...
RCP< PreconditionerBase< Scalar > > create_W_prec() const
void uninitialize()
Uninitialize.
void setModelEvalDescription(const std::string &modelEvalDescription)
ParameterList & set(std::string const &name, T const &value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
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.
ModelEvaluatorDelegatorBase()
Constructs to uninitialized.
virtual bool isUnderlyingModelConst() const
RCP< const VectorSpaceBase< Scalar > > get_f_space() const
Teuchos::ArrayView< const std::string > get_g_names(int j) const
RCP< const VectorSpaceBase< Scalar > > get_f_multiplier_space() const
RCP< const VectorSpaceBase< Scalar > > get_p_space(int l) const
void reportFinalPoint(const ModelEvaluatorBase::InArgs< Scalar > &finalPoint, const bool wasSolved)
RCP< LinearOpWithSolveBase< Scalar > > create_W() const
virtual RCP< ModelEvaluator< Scalar > > getNonconstUnderlyingModel()
RCP< LinearOpBase< Scalar > > create_W_op() const
RCP< const Teuchos::Array< std::string > > get_p_names(int l) const
Teuchos::EVerbosityLevel readLocalVerbosityLevelValidatedParameter(ParameterList ¶mList) const
Read the local verbosity level parameter.
ModelEvaluatorBase::InArgs< Scalar > getUpperBounds() const
RCP< const VectorSpaceBase< Scalar > > get_g_space(int j) const
RCP< const VectorSpaceBase< Scalar > > get_g_multiplier_space(int j) const
ModelEvaluatorBase::InArgs< Scalar > createInArgs() const
ModelEvaluatorBase::InArgs< Scalar > getLowerBounds() const
ModelEvaluatorBase::InArgs< Scalar > getNominalValues() const
RCP< const LinearOpWithSolveFactoryBase< Scalar > > get_W_factory() const
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
void setLocalVerbosityLevelValidatedParameter(ParameterList *paramList) const
Set a valid parameter for reading the local verbosity level.
Concrete aggregate class for all input arguments computable by a ModelEvaluator subclass object...