77 RCP<const Thyra::VectorSpaceBase<double> > xSpace =
78 Thyra::defaultSpmdVectorSpace<double>(vectorLength);
80 RCP<Thyra::VectorBase<double> > x_n = Thyra::createMember(xSpace);
81 RCP<Thyra::VectorBase<double> > xDot_n = Thyra::createMember(xSpace);
86 double epsilon = 1.0e-1;
89 Thyra::DetachedVectorView<double> x_n_view(*x_n);
92 Thyra::DetachedVectorView<double> xDot_n_view(*xDot_n);
94 xDot_n_view[1] = -2.0/epsilon;
98 double finalTime = 2.0;
99 int nTimeSteps = 2000;
100 const double constDT = finalTime/nTimeSteps;
104 cout << std::setw(8) <<
"index"
105 << std::setw(10) <<
"time"
106 << std::setw(12) <<
"x_0"
107 << std::setw(12) <<
"x_1" << endl;
109 cout << std::setw(8) << n
110 << std::setw(10) << std::setprecision(3) << time
111 << std::setw(12) << std::setprecision(4) << get_ele(*x_n, 0)
112 << std::setw(12) << std::setprecision(4) << get_ele(*x_n, 1) << endl;
115 while (passed && time < finalTime && n < nTimeSteps) {
118 RCP<Thyra::VectorBase<double> > x_np1 = x_n->clone_v();
126 Thyra::ConstDetachedVectorView<double> x_n_view(*x_n);
127 Thyra::DetachedVectorView<double> xDot_n_view(*xDot_n);
128 xDot_n_view[0] = x_n_view[1];
130 ((1.0-x_n_view[0]*x_n_view[0])*x_n_view[1]-x_n_view[0])/epsilon;
134 Thyra::V_VpStV(x_np1.ptr(), *x_n, dt, *xDot_n);
137 if ( std::isnan(Thyra::norm(*x_np1)) ) {
141 Thyra::V_V(x_n.ptr(), *x_np1);
147 cout << std::setw(8) << n
148 << std::setw(10) << std::setprecision(3) << time
149 << std::setw(12) << std::setprecision(4) << get_ele(*x_n, 0)
150 << std::setw(12) << std::setprecision(4) << get_ele(*x_n, 1) << endl;
156 if (passed && regressionPassed) success =
true;
158 TEUCHOS_STANDARD_CATCH_STATEMENTS(verbose, std::cerr, success);
161 cout <<
"\nEnd Result: Test Passed!" << std::endl;
163 return ( success ? EXIT_SUCCESS : EXIT_FAILURE );
bool tutorialRegressionTest(const Teuchos::RCP< Thyra::VectorBase< double > > &x_n, std::ostream &out=std::cout, const double relTol=Teuchos::as< double >(1.0e-8))
Regression check for the Tempus tutorial van der Pol examples.