45#ifndef THYRA_SIMPLE_2D_MODEL_EVALUATOR_DEF_HPP
46#define THYRA_SIMPLE_2D_MODEL_EVALUATOR_DEF_HPP
49#include "Thyra_Simple2DModelEvaluator_decl.hpp"
50#include "Thyra_SimpleDenseLinearOp.hpp"
51#include "Thyra_DefaultSpmdVectorSpace.hpp"
52#include "Thyra_DefaultSerialDenseLinearOpWithSolveFactory.hpp"
53#include "Thyra_DefaultPreconditioner.hpp"
54#include "Thyra_DetachedMultiVectorView.hpp"
55#include "Thyra_DetachedVectorView.hpp"
56#include "Thyra_MultiVectorStdOps.hpp"
57#include "Thyra_VectorStdOps.hpp"
67Teuchos::RCP<Simple2DModelEvaluator<Scalar> >
68simple2DModelEvaluator()
105template<
class Scalar>
108 showGetInvalidArg_ = showGetInvalidArg;
115template<
class Scalar>
123template<
class Scalar>
131template<
class Scalar>
135 return nominalValues_;
139template<
class Scalar>
143 return createNonconstSimpleDenseLinearOp<Scalar>(
149template<
class Scalar>
154 createNonconstSimpleDenseLinearOp<Scalar>(
161template<
class Scalar>
169template<
class Scalar>
173 return prototypeInArgs_;
180template<
class Scalar>
182Simple2DModelEvaluator<Scalar>::createOutArgsImpl()
const
184 return prototypeOutArgs_;
188template<
class Scalar>
189void Simple2DModelEvaluator<Scalar>::evalModelImpl(
194 using Teuchos::rcp_dynamic_cast;
195 const Scalar one = 1.0, two = 2.0, zero = 0.0;
197 const ConstDetachedVectorView<Scalar> x(inArgs.
get_x());
199 const RCP<Thyra::VectorBase<Scalar> > f_out = outArgs.
get_f();
200 const RCP<Thyra::LinearOpBase< Scalar > > W_op_out = outArgs.
get_W_op();
201 const RCP<Thyra::PreconditionerBase< Scalar > > W_prec_out = outArgs.
get_W_prec();
203 if (nonnull(f_out)) {
204 const DetachedVectorView<Scalar> f(f_out);
205 f[0] = x[0] + x[1] * x[1] - p_[0];
206 f[1] = d_ * (x[0] * x[0] - x[1] - p_[1]);
211 rcp_dynamic_cast<SimpleDenseLinearOp<Scalar> >(W_op_out,
true);
213 Thyra::DetachedMultiVectorView<Scalar> W_dmvv(W_mv);
215 W_dmvv(0, 1) = two * x[1];
216 W_dmvv(1, 0) = d_ * two * x[0];
222 rcp_dynamic_cast<SimpleDenseLinearOp<Scalar> >(
223 W_prec_out->getNonconstUnspecifiedPrecOp(),
true);
225 Thyra::DetachedMultiVectorView<Scalar> W_prec_dmvv(W_prec_mv);
227 W_prec_dmvv(0, 0) = one;
228 W_prec_dmvv(0, 1) =
zero;
229 W_prec_dmvv(1, 0) =
zero;
230 W_prec_dmvv(1, 1) = -one/d_;
239template<
class Scalar>
240Simple2DModelEvaluator<Scalar>::Simple2DModelEvaluator()
243 W_factory_(Thyra::defaultSerialDenseLinearOpWithSolveFactory<Scalar>()),
246 showGetInvalidArg_(false)
250 using Thyra::VectorBase;
252 typedef Thyra::ModelEvaluatorBase MEB;
253 typedef Teuchos::ScalarTraits<Scalar> ST;
255 MEB::InArgsSetup<Scalar> inArgs;
256 inArgs.setModelEvalDescription(this->
description());
257 inArgs.setSupports(MEB::IN_ARG_x);
258 prototypeInArgs_ = inArgs;
260 MEB::OutArgsSetup<Scalar> outArgs;
261 outArgs.setModelEvalDescription(this->
description());
262 outArgs.setSupports(MEB::OUT_ARG_f);
263 outArgs.setSupports(MEB::OUT_ARG_W_op);
264 outArgs.setSupports(MEB::OUT_ARG_W_prec);
265 prototypeOutArgs_ = outArgs;
267 nominalValues_ = inArgs;
269 V_S(x0_.ptr(), ST::zero());
270 nominalValues_.set_x(x0_);
273 set_p(Teuchos::tuple<Scalar>(2.0, 0.0)());
274 set_x0(Teuchos::tuple<Scalar>(1.0, 1.0)());
288#define SIMPLE_2D_MODEL_EVALUATOR_INSTANT(SCALAR) \
290 template class Simple2DModelEvaluator<SCALAR >; \
292 template Teuchos::RCP<Simple2DModelEvaluator<SCALAR > > \
293 simple2DModelEvaluator(); \
const ArrayRCP< Scalar > values() const
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.
RCP< const LinearOpBase< Scalar > > zero(const RCP< const VectorSpaceBase< Scalar > > &range, const RCP< const VectorSpaceBase< Scalar > > &domain)
Create a zero linear operator with given range and domain spaces.
Create an explicit mutable (non-const) view of a VectorBase object.
const RTOpPack::SubVectorView< Scalar > & sv() const
Returns the explicit view as an RTOpPack::ConstSubVectorView<Scalar> object.
Concrete aggregate class for all input arguments computable by a ModelEvaluator subclass object.
RCP< const VectorBase< Scalar > > get_x() const
Precondition: supports(IN_ARG_x)==true.
Concrete aggregate class for all output arguments computable by a ModelEvaluator subclass object.
Evaluation< VectorBase< Scalar > > get_f() const
Precondition: supports(OUT_ARG_f)==true.
RCP< LinearOpBase< Scalar > > get_W_op() const
Precondition: supports(OUT_ARG_W_op)==true.
RCP< PreconditionerBase< Scalar > > get_W_prec() const
Precondition: supports(OUT_ARG_W_op)==true.
void assign(const Ptr< MultiVectorBase< Scalar > > &V, Scalar alpha)
V = alpha.
void set_p(const Teuchos::ArrayView< const Scalar > &p)
void set_d(const Scalar &d)
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_x_space() const
Teuchos::RCP< const Thyra::LinearOpWithSolveFactoryBase< Scalar > > get_W_factory() const
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_f_space() const
Teuchos::RCP< Thyra::LinearOpBase< Scalar > > create_W_op() const
Thyra::ModelEvaluatorBase::InArgs< Scalar > createInArgs() const
Thyra::ModelEvaluatorBase::InArgs< Scalar > getNominalValues() const
void set_x0(const Teuchos::ArrayView< const Scalar > &x0)
void setShowGetInvalidArgs(bool showGetInvalidArg)
Teuchos::RCP< Thyra::PreconditionerBase< Scalar > > create_W_prec() const
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_ASSERT_EQUALITY(val1, val2)
bool nonnull(const std::shared_ptr< T > &p)
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)