75int main(
int argc,
char *argv[])
81 Teuchos::RCP<const Thyra::ModelEvaluator<double> >
86 model->getNominalValues().get_x()->clone_v());
87 solState->setIndex (0);
88 solState->setTime (0.0);
89 solState->setTimeStep(0.0);
91 RCP<Thyra::VectorBase<double> > xDot_n =
92 model->getNominalValues().get_x_dot()->clone_v();
96 double finalTime = 2.0;
97 int nTimeSteps = 2001;
98 const double constDT = finalTime/(nTimeSteps-1);
102 solState->getTime() < finalTime &&
103 solState->getIndex() < nTimeSteps) {
106 RCP<Thyra::VectorBase<double> > x_n = solState->getX();
107 RCP<Thyra::VectorBase<double> > x_np1 = solState->getX()->clone_v();
111 int index = solState->getIndex()+1;
113 double time = index*dt;
117 auto inArgs = model->createInArgs();
118 auto outArgs = model->createOutArgs();
121 inArgs.set_x_dot(Teuchos::null);
122 outArgs.set_f(xDot_n);
125 model->evalModel(inArgs, outArgs);
128 Thyra::V_VpStV(x_np1.ptr(), *x_n, dt, *xDot_n);
131 if ( std::isnan(Thyra::norm(*x_np1)) ) {
135 Thyra::V_V(x_n.ptr(), *x_np1);
136 solState->setIndex (index);
137 solState->setTime (time);
138 solState->setTimeStep(constDT);
143 if ( solState->getIndex()%100 == 0 )
144 cout << solState->getIndex() <<
" " << time
145 <<
" " << get_ele(*(x_n), 0)
146 <<
" " << get_ele(*(x_n), 1) << endl;
150 RCP<Thyra::VectorBase<double> > x_n = solState->getX();
151 RCP<Thyra::VectorBase<double> > x_regress = x_n->clone_v();
153 Thyra::DetachedVectorView<double> x_regress_view(*x_regress);
154 x_regress_view[0] = -1.59496108218721311;
155 x_regress_view[1] = 0.96359412806611255;
158 RCP<Thyra::VectorBase<double> > x_error = x_n->clone_v();
159 Thyra::V_VmV(x_error.ptr(), *x_n, *x_regress);
160 double x_L2norm_error = Thyra::norm_2(*x_error );
161 double x_L2norm_regress = Thyra::norm_2(*x_regress);
163 cout <<
"Relative L2 Norm of the error (regression) = "
164 << x_L2norm_error/x_L2norm_regress << endl;
165 if ( x_L2norm_error > 1.0e-08*x_L2norm_regress) {
167 cout <<
"FAILED regression constraint!" << endl;
170 RCP<Thyra::VectorBase<double> > x_best = x_n->clone_v();
172 Thyra::DetachedVectorView<double> x_best_view(*x_best);
173 x_best_view[0] = -1.59496108218721311;
174 x_best_view[1] = 0.96359412806611255;
177 Thyra::V_VmV(x_error.ptr(), *x_n, *x_best);
178 x_L2norm_error = Thyra::norm_2(*x_error);
179 double x_L2norm_best = Thyra::norm_2(*x_best );
181 cout <<
"Relative L2 Norm of the error (best) = "
182 << x_L2norm_error/x_L2norm_best << endl;
183 if ( x_L2norm_error > 0.02*x_L2norm_best) {
185 cout <<
"FAILED best constraint!" << endl;
189 TEUCHOS_STANDARD_CATCH_STATEMENTS(verbose, std::cerr, success);
192 cout <<
"\nEnd Result: Test Passed!" << std::endl;
194 return ( success ? EXIT_SUCCESS : EXIT_FAILURE );