13#include "Teuchos_StandardCatchMacros.hpp"
15#include "Thyra_VectorStdOps.hpp"
16#include "Thyra_DefaultSpmdVectorSpace.hpp"
17#include "Thyra_DetachedVectorView.hpp"
205int main(
int argc,
char *argv[])
208 bool success =
false;
211 int vectorLength = 2;
212 RCP<const Thyra::VectorSpaceBase<double> > xSpace =
213 Thyra::defaultSpmdVectorSpace<double>(vectorLength);
215 RCP<Thyra::VectorBase<double> > x_n = Thyra::createMember(xSpace);
216 RCP<Thyra::VectorBase<double> > xDot_n = Thyra::createMember(xSpace);
220 double epsilon = 1.0e-1;
222 Thyra::DetachedVectorView<double> x_n_view(*x_n);
225 Thyra::DetachedVectorView<double> xDot_n_view(*xDot_n);
226 xDot_n_view[0] = 0.0;
227 xDot_n_view[1] = -2.0/epsilon;
231 double finalTime = 2.0;
232 int nTimeSteps = 2001;
233 const double constDT = finalTime/(nTimeSteps-1);
238 cout << n <<
" " << time <<
" " << get_ele(*(x_n), 0)
239 <<
" " << get_ele(*(x_n), 1) << endl;
240 while (passing && time < finalTime && n < nTimeSteps) {
243 RCP<Thyra::VectorBase<double> > x_np1 = x_n->clone_v();
251 Thyra::ConstDetachedVectorView<double> x_n_view(*x_n);
252 Thyra::DetachedVectorView<double> xDot_n_view(*xDot_n);
253 xDot_n_view[0] = x_n_view[1];
255 ((1.0-x_n_view[0]*x_n_view[0])*x_n_view[1]-x_n_view[0])/epsilon;
259 Thyra::V_VpStV(x_np1.ptr(), *x_n, dt, *xDot_n);
262 if ( std::isnan(Thyra::norm(*x_np1)) ) {
267 Thyra::V_V(x_n.ptr(), *x_np1);
272 cout << n <<
" " << time <<
" " << get_ele(*(x_n), 0)
273 <<
" " << get_ele(*(x_n), 1) << endl;
277 RCP<Thyra::VectorBase<double> > x_regress = x_n->clone_v();
279 Thyra::DetachedVectorView<double> x_regress_view(*x_regress);
280 x_regress_view[0] = -1.59496108218721311;
281 x_regress_view[1] = 0.96359412806611255;
284 RCP<Thyra::VectorBase<double> > x_error = x_n->clone_v();
285 Thyra::V_VmV(x_error.ptr(), *x_n, *x_regress);
286 double x_L2norm_error = Thyra::norm_2(*x_error );
287 double x_L2norm_regress = Thyra::norm_2(*x_regress);
289 cout <<
"Relative L2 Norm of the error (regression) = "
290 << x_L2norm_error/x_L2norm_regress << endl;
291 if ( x_L2norm_error > 1.0e-08*x_L2norm_regress) {
293 cout <<
"FAILED regression constraint!" << endl;
296 RCP<Thyra::VectorBase<double> > x_best = x_n->clone_v();
298 Thyra::DetachedVectorView<double> x_best_view(*x_best);
299 x_best_view[0] = -1.59496108218721311;
300 x_best_view[1] = 0.96359412806611255;
303 Thyra::V_VmV(x_error.ptr(), *x_n, *x_best);
304 x_L2norm_error = Thyra::norm_2(*x_error);
305 double x_L2norm_best = Thyra::norm_2(*x_best );
307 cout <<
"Relative L2 Norm of the error (best) = "
308 << x_L2norm_error/x_L2norm_best << endl;
309 if ( x_L2norm_error > 0.02*x_L2norm_best) {
311 cout <<
"FAILED best constraint!" << endl;
313 if (passing) success =
true;
315 TEUCHOS_STANDARD_CATCH_STATEMENTS(verbose, std::cerr, success);
318 cout <<
"\nEnd Result: Test Passed!" << std::endl;
320 return ( success ? EXIT_SUCCESS : EXIT_FAILURE );
int main(int argc, char *argv[])
Description: