10#ifndef DUMMY_TEST_MODEL_EVALUATOR_DEF_HPP
11#define DUMMY_TEST_MODEL_EVALUATOR_DEF_HPP
14#include "Thyra_DummyTestModelEvaluator_decl.hpp"
15#include "Thyra_SimpleDenseLinearOp.hpp"
16#include "Thyra_DefaultSpmdVectorSpace.hpp"
17#include "Thyra_DefaultSerialDenseLinearOpWithSolveFactory.hpp"
18#include "Thyra_DefaultPreconditioner.hpp"
19#include "Thyra_DetachedMultiVectorView.hpp"
20#include "Thyra_DetachedVectorView.hpp"
21#include "Thyra_MultiVectorStdOps.hpp"
22#include "Thyra_VectorStdOps.hpp"
31Teuchos::RCP<DummyTestModelEvaluator<Scalar> >
36 const bool supports_x_dot,
37 const bool supports_x_dot_dot,
38 const bool supports_extended_inargs,
39 const bool supports_extended_outargs,
40 const bool supports_derivatives
55 const bool supports_x_dot,
56 const bool supports_x_dot_dot,
57 const bool supports_extended_inargs,
58 const bool supports_extended_outargs,
59 const bool supports_derivatives
68 p_space_.resize(p_sizes.
size());
69 for (Ordinal l = 0; l < p_sizes.
size(); ++l) {
75 g_space_.resize(g_sizes.
size());
76 for (Ordinal j = 0; j < g_sizes.
size(); ++j) {
80 W_factory_ = defaultSerialDenseLinearOpWithSolveFactory<Scalar>();
82 MEB::InArgsSetup<Scalar> inArgs;
83 inArgs.setModelEvalDescription(this->
description());
84 inArgs.set_Np_Ng(p_space_.size(),g_sizes.
size());
85 inArgs.setSupports(MEB::IN_ARG_x);
87 inArgs.setSupports(MEB::IN_ARG_x_dot);
88 if (supports_x_dot_dot)
89 inArgs.setSupports(MEB::IN_ARG_x_dot_dot);
90 inArgs.setSupports(MEB::IN_ARG_step_size);
91 inArgs.setSupports(MEB::IN_ARG_stage_number);
92 inArgs.template setSupports<Thyra::MockExtendedInArgs<Scalar> >(
true);
94 if (!supports_extended_inargs)
95 inArgs.template setSupports<Thyra::MockExtendedInArgs<Scalar> >(
false);
96 prototypeInArgs_ = inArgs;
98 MEB::OutArgsSetup<Scalar> outArgs;
99 outArgs.setModelEvalDescription(this->
description());
100 outArgs.set_Np_Ng(p_space_.size(), g_space_.size());
101 outArgs.setSupports(MEB::OUT_ARG_f);
102 outArgs.setSupports(MEB::OUT_ARG_W_op);
103 outArgs.setSupports(MEB::OUT_ARG_W_prec);
104 outArgs.template setSupports<Thyra::MockExtendedOutArgs<Scalar> >(
true);
106 if (!supports_extended_outargs)
107 outArgs.template setSupports<Thyra::MockExtendedOutArgs<Scalar> >(
false);
108 if (supports_derivatives)
110#ifdef Thyra_BUILD_HESSIAN_SUPPORT
111 outArgs.setHessianSupports(
true);
114 MEB::DerivativeSupport derivativeSupport(MEB::DERIV_MV_BY_COL);
116 for (
int j=0; j<g_space_.size(); ++j)
117 outArgs.setSupports(MEB::OUT_ARG_DgDx,j,derivativeSupport);
119 prototypeOutArgs_ = outArgs;
121 nominalValues_ = inArgs;
123 V_S(x0.
ptr(), ST::zero());
124 nominalValues_.set_x(x0);
132template<
class Scalar>
140template<
class Scalar>
148template<
class Scalar>
152 return Teuchos::null;
156template<
class Scalar>
164template<
class Scalar>
172template<
class Scalar>
180template<
class Scalar>
184 return nominalValues_;
188template<
class Scalar>
196template<
class Scalar>
204template<
class Scalar>
208 return createNonconstSimpleDenseLinearOp<Scalar>(
214template<
class Scalar>
219 createNonconstSimpleDenseLinearOp<Scalar>(
226template<
class Scalar>
234template<
class Scalar>
238 return prototypeInArgs_;
242template<
class Scalar>
251template<
class Scalar>
258 MEB::InArgsSetup<Scalar> inArgs(prototypeInArgs_);
259 inArgs.set_Np(new_size);
260 prototypeInArgs_ = inArgs;
263 MEB::OutArgsSetup<Scalar> outArgs(prototypeOutArgs_);
264 outArgs.set_Np_Ng(new_size,g_space_.size());
265 prototypeOutArgs_ = outArgs;
270template<
class Scalar>
275 this->change_p_size_incorrectly(new_size);
276 this->resetDefaultBase();
282template<
class Scalar>
284DummyTestModelEvaluator<Scalar>::createOutArgsImpl()
const
286 return prototypeOutArgs_;
290template<
class Scalar>
291void DummyTestModelEvaluator<Scalar>::evalModelImpl(
309#define DUMMY_TEST_MODEL_EVALUATOR_INSTANT(SCALAR) \
311 template class DummyTestModelEvaluator<SCALAR >; \
313 template Teuchos::RCP<DummyTestModelEvaluator<SCALAR > > \
314 dummyTestModelEvaluator( \
315 const Ordinal x_size, \
316 const ArrayView<const Ordinal> &p_sizes, \
317 const ArrayView<const Ordinal> &g_sizes, \
318 const bool supports_x_dot, \
319 const bool supports_x_dot_dot, \
320 const bool supports_extended_inargs, \
321 const bool supports_extended_outargs, \
322 const bool supports_derivatives \
virtual std::string description() const
Teuchos::RCP< DefaultPreconditioner< Scalar > > nonconstUnspecifiedPrec(const Teuchos::RCP< LinearOpBase< Scalar > > &unspecifiedPrecOp)
Create a precondioner from a single linear operator not targeted to be used on the left or the right.
RCP< DefaultSpmdVectorSpace< Scalar > > defaultSpmdVectorSpace()
Nonmember consturctor that creats an uninitialized vector space.
Test helper ModelEvaluator.
RCP< const VectorSpaceBase< Scalar > > get_x_space() const
RCP< const LinearOpWithSolveFactoryBase< Scalar > > get_W_factory() const
DummyTestModelEvaluator(const Ordinal x_size, const ArrayView< const Ordinal > &p_sizes, const ArrayView< const Ordinal > &g_sizes, const bool supports_x_dot=false, const bool supports_x_dot_dot=false, const bool supports_extended_inargs=true, const bool supports_extended_outargs=true, const bool supports_derivatives=false)
ModelEvaluatorBase::InArgs< Scalar > getUpperBounds() const
RCP< PreconditionerBase< Scalar > > create_W_prec() const
RCP< const VectorSpaceBase< Scalar > > get_g_space(int j) const
ModelEvaluatorBase::InArgs< Scalar > getLowerBounds() const
RCP< const Teuchos::Array< std::string > > get_p_names(int l) const
RCP< const VectorSpaceBase< Scalar > > get_f_space() const
Teuchos::ArrayView< const std::string > get_g_names(int j) const
void reportFinalPoint(const ModelEvaluatorBase::InArgs< Scalar > &finalPoint, const bool wasSolved)
RCP< LinearOpBase< Scalar > > create_W_op() const
ModelEvaluatorBase::InArgs< Scalar > getNominalValues() const
ModelEvaluatorBase::InArgs< Scalar > createInArgs() const
RCP< const VectorSpaceBase< Scalar > > get_p_space(int l) const
RCP< DummyTestModelEvaluator< Scalar > > dummyTestModelEvaluator(const Ordinal x_size=2, const ArrayView< const Ordinal > &p_sizes=Teuchos::null, const ArrayView< const Ordinal > &g_sizes=Teuchos::null, const bool supports_x_dot=false, const bool supports_x_dot_dot=false, const bool supports_extended_inargs=true, const bool supports_extended_outargs=true, const bool supports_derivatives=false)
Nonmember constuctor.
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.
Base subclass for ModelEvaluator that defines some basic types.
void V_S(const Ptr< VectorBase< Scalar > > &y, const Scalar &alpha)
y(i) = alpha, i = 0...y->space()->dim()-1.
RCP< VectorBase< Scalar > > createMember(const RCP< const VectorSpaceBase< Scalar > > &vs, const std::string &label="")
Create a vector member from the vector space.
RCP< MultiVectorBase< Scalar > > createMembers(const RCP< const VectorSpaceBase< Scalar > > &vs, int numMembers, const std::string &label="")
Create a set of vector members (a MultiVectorBase) from the vector space.
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)