69 explicit DAEStructure(
const Teuchos::RCP<const Vector>& algebraic_mask)
72 typedef Teuchos::ScalarTraits<Scalar> ST;
73 TEUCHOS_TEST_FOR_EXCEPTION(
81 TEUCHOS_TEST_FOR_EXCEPTION(
82 Thyra::norm_inf(*w) != Teuchos::ScalarTraits<Mag>::zero(),
83 std::invalid_argument,
84 "Error - Tempus::DAEStructure: the entries of \""
86 <<
"\" must be 1 (algebraic equations) or 0 (other equations).\n");
89 Thyra::put_scalar(ST::one(), d.ptr());
127 const Thyra::ModelEvaluatorBase::InArgs<Scalar>& inArgs,
128 const std::string& caller)
const
130 typedef Thyra::ModelEvaluatorBase MEB;
131 MEB::OutArgs<Scalar> outArgs = model.createOutArgs();
132 if (!outArgs.supports(MEB::OUT_ARG_W_op))
return;
134 MEB::InArgs<Scalar> massInArgs = inArgs;
135 if (massInArgs.supports(MEB::IN_ARG_alpha))
136 massInArgs.set_alpha(Scalar(1.0));
137 if (massInArgs.supports(MEB::IN_ARG_beta)) massInArgs.set_beta(Scalar(0.0));
138 Teuchos::RCP<Thyra::LinearOpBase<Scalar> > W_op = model.create_W_op();
139 outArgs.set_W_op(W_op);
140 model.evalModel(massInArgs, outArgs);
142 Teuchos::RCP<Vector> v = Thyra::createMember(model.get_x_space());
143 Thyra::randomize(Scalar(0.5), Scalar(1.5), v.ptr());
144 Teuchos::RCP<Vector> r = Thyra::createMember(model.get_f_space());
145 W_op->apply(Thyra::NOTRANS, *v, r.ptr(), Scalar(1.0), Scalar(0.0));
146 const Mag scale = Thyra::norm_inf(*r);
148 const Mag err = Thyra::norm_inf(*r);
149 TEUCHOS_TEST_FOR_EXCEPTION(
150 err >
Mag(1.0e-12) * scale, std::logic_error,
151 "Error - " << caller <<
": the rows of the mass matrix df/dx_dot "
152 <<
"(model evaluated with alpha = 1, beta = 0) flagged by \""
154 <<
" on these rows, " << scale
155 <<
" on all rows). Only equations that do not depend on "
156 <<
"x_dot can be flagged as algebraic.\n");