213int main(
int argc,
char *argv[])
216 bool success =
false;
219 Teuchos::RCP<const Thyra::ModelEvaluator<double> >
224 model->getNominalValues().get_x()->clone_v());
225 solState->setIndex (0);
226 solState->setTime (0.0);
227 solState->setTimeStep(0.0);
229 RCP<Thyra::VectorBase<double> > xDot_n =
230 model->getNominalValues().get_x_dot()->clone_v();
234 double finalTime = 2.0;
235 int nTimeSteps = 2001;
236 const double constDT = finalTime/(nTimeSteps-1);
240 solState->getTime() < finalTime &&
241 solState->getIndex() < nTimeSteps) {
244 RCP<Thyra::VectorBase<double> > x_n = solState->getX();
245 RCP<Thyra::VectorBase<double> > x_np1 = solState->getX()->clone_v();
249 int index = solState->getIndex()+1;
251 double time = index*dt;
255 auto inArgs = model->createInArgs();
256 auto outArgs = model->createOutArgs();
259 inArgs.set_x_dot(Teuchos::null);
260 outArgs.set_f(xDot_n);
263 model->evalModel(inArgs, outArgs);
266 Thyra::V_VpStV(x_np1.ptr(), *x_n, dt, *xDot_n);
269 if ( std::isnan(Thyra::norm(*x_np1)) ) {
273 Thyra::V_V(x_n.ptr(), *x_np1);
274 solState->setIndex (index);
275 solState->setTime (time);
276 solState->setTimeStep(constDT);
281 if ( solState->getIndex()%100 == 0 )
282 cout << solState->getIndex() <<
" " << time
283 <<
" " << get_ele(*(x_n), 0)
284 <<
" " << get_ele(*(x_n), 1) << endl;
288 RCP<Thyra::VectorBase<double> > x_n = solState->getX();
289 RCP<Thyra::VectorBase<double> > x_regress = x_n->clone_v();
291 Thyra::DetachedVectorView<double> x_regress_view(*x_regress);
292 x_regress_view[0] = -1.59496108218721311;
293 x_regress_view[1] = 0.96359412806611255;
296 RCP<Thyra::VectorBase<double> > x_error = x_n->clone_v();
297 Thyra::V_VmV(x_error.ptr(), *x_n, *x_regress);
298 double x_L2norm_error = Thyra::norm_2(*x_error );
299 double x_L2norm_regress = Thyra::norm_2(*x_regress);
301 cout <<
"Relative L2 Norm of the error (regression) = "
302 << x_L2norm_error/x_L2norm_regress << endl;
303 if ( x_L2norm_error > 1.0e-08*x_L2norm_regress) {
305 cout <<
"FAILED regression constraint!" << endl;
308 RCP<Thyra::VectorBase<double> > x_best = x_n->clone_v();
310 Thyra::DetachedVectorView<double> x_best_view(*x_best);
311 x_best_view[0] = -1.59496108218721311;
312 x_best_view[1] = 0.96359412806611255;
315 Thyra::V_VmV(x_error.ptr(), *x_n, *x_best);
316 x_L2norm_error = Thyra::norm_2(*x_error);
317 double x_L2norm_best = Thyra::norm_2(*x_best );
319 cout <<
"Relative L2 Norm of the error (best) = "
320 << x_L2norm_error/x_L2norm_best << endl;
321 if ( x_L2norm_error > 0.02*x_L2norm_best) {
323 cout <<
"FAILED best constraint!" << endl;
327 TEUCHOS_STANDARD_CATCH_STATEMENTS(verbose, std::cerr, success);
330 cout <<
"\nEnd Result: Test Passed!" << std::endl;
332 return ( success ? EXIT_SUCCESS : EXIT_FAILURE );