13 #include "Teuchos_StandardCatchMacros.hpp"
15 #include "Thyra_VectorStdOps.hpp"
16 #include "Thyra_DefaultSpmdVectorSpace.hpp"
17 #include "Thyra_DetachedVectorView.hpp"
19 #include "../02_Use_ModelEvaluator/VanDerPol_ModelEvaluator_02.hpp"
21 #include "Tempus_SolutionState.hpp"
212 int main(
int argc,
char *argv[])
215 bool success =
false;
223 model->getNominalValues().get_x()->clone_v());
224 solState->setIndex (0);
225 solState->setTime (0.0);
226 solState->setTimeStep(0.0);
229 model->getNominalValues().get_x_dot()->clone_v();
233 double finalTime = 2.0;
234 int nTimeSteps = 2001;
235 const double constDT = finalTime/(nTimeSteps-1);
239 solState->getTime() < finalTime &&
240 solState->getIndex() < nTimeSteps) {
248 int index = solState->getIndex()+1;
250 double time = index*dt;
254 auto inArgs = model->createInArgs();
255 auto outArgs = model->createOutArgs();
258 inArgs.set_x_dot(Teuchos::null);
259 outArgs.set_f(xDot_n);
262 model->evalModel(inArgs, outArgs);
265 Thyra::V_VpStV(x_np1.
ptr(), *x_n, dt, *xDot_n);
268 if ( std::isnan(Thyra::norm(*x_np1)) ) {
272 Thyra::V_V(x_n.
ptr(), *x_np1);
273 solState->setIndex (index);
274 solState->setTime (time);
275 solState->setTimeStep(constDT);
280 if ( solState->getIndex()%100 == 0 )
281 cout << solState->getIndex() <<
" " << time
282 <<
" " << get_ele(*(x_n), 0)
283 <<
" " << get_ele(*(x_n), 1) << endl;
291 x_regress_view[0] = -1.59496108218721311;
292 x_regress_view[1] = 0.96359412806611255;
296 Thyra::V_VmV(x_error.
ptr(), *x_n, *x_regress);
297 double x_L2norm_error = Thyra::norm_2(*x_error );
298 double x_L2norm_regress = Thyra::norm_2(*x_regress);
300 cout <<
"Relative L2 Norm of the error (regression) = "
301 << x_L2norm_error/x_L2norm_regress << endl;
302 if ( x_L2norm_error > 1.0e-08*x_L2norm_regress) {
304 cout <<
"FAILED regression constraint!" << endl;
310 x_best_view[0] = -1.59496108218721311;
311 x_best_view[1] = 0.96359412806611255;
314 Thyra::V_VmV(x_error.
ptr(), *x_n, *x_best);
315 x_L2norm_error = Thyra::norm_2(*x_error);
316 double x_L2norm_best = Thyra::norm_2(*x_best );
318 cout <<
"Relative L2 Norm of the error (best) = "
319 << x_L2norm_error/x_L2norm_best << endl;
320 if ( x_L2norm_error > 0.02*x_L2norm_best) {
322 cout <<
"FAILED best constraint!" << endl;
329 cout <<
"\nEnd Result: Test Passed!" << std::endl;
331 return ( success ? EXIT_SUCCESS : EXIT_FAILURE );
Teuchos::RCP< SolutionState< Scalar > > createSolutionStateX(const Teuchos::RCP< Thyra::VectorBase< Scalar > > &x, const Teuchos::RCP< Thyra::VectorBase< Scalar > > &xdot=Teuchos::null, const Teuchos::RCP< Thyra::VectorBase< Scalar > > &xdotdot=Teuchos::null)
Nonmember constructor from non-const solution vectors, x.
int main(int argc, char *argv[])
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
ModelEvaluator implementation for the example van der Pol Problem.
#define TEUCHOS_STANDARD_CATCH_STATEMENTS(VERBOSE, ERR_STREAM, SUCCESS_FLAG)