46 double tolerance = 1.0e-14;
47 std::vector<std::string> options;
48 options.push_back(
"useFSAL=true");
49 options.push_back(
"useFSAL=false");
50 options.push_back(
"ICConsistency and Check");
52 for (
const auto& option : options) {
54 RCP<ParameterList> pList = getParametersFromXmlFile(
55 "Tempus_Test_NewmarkExplicitAForm_BallParabolic.xml");
58 RCP<ParameterList> hom_pl = sublist(pList,
"HarmonicOscillatorModel",
true);
59 RCP<HarmonicOscillatorModel<double> > model =
63 RCP<ParameterList> pl = sublist(pList,
"Tempus",
true);
64 RCP<ParameterList> stepperPL = sublist(pl,
"Default Stepper",
true);
65 stepperPL->remove(
"Zero Initial Guess");
66 if (option ==
"useFSAL=true")
67 stepperPL->set(
"Use FSAL",
true);
68 else if (option ==
"useFSAL=false")
69 stepperPL->set(
"Use FSAL",
false);
70 else if (option ==
"ICConsistency and Check") {
71 stepperPL->set(
"Initial Condition Consistency",
"Consistent");
72 stepperPL->set(
"Initial Condition Consistency Check",
true);
75 RCP<Tempus::IntegratorBasic<double> > integrator =
76 Tempus::createIntegratorBasic<double>(pl, model);
79 bool integratorStatus = integrator->advanceTime();
80 TEST_ASSERT(integratorStatus)
83 double time = integrator->getTime();
84 double timeFinal = pl->sublist(
"Default Integrator")
85 .sublist(
"Time Step Control")
86 .get<
double>(
"Final Time");
87 TEST_FLOATING_EQUALITY(time, timeFinal, 1.0e-14);
90 RCP<Thyra::VectorBase<double> > x = integrator->getX();
91 RCP<const Thyra::VectorBase<double> > x_exact =
92 model->getExactSolution(time).get_x();
95 std::ofstream ftmp(
"Tempus_Test_NewmarkExplicitAForm_BallParabolic.dat");
97 RCP<const SolutionHistory<double> > solutionHistory =
98 integrator->getSolutionHistory();
101 RCP<const Thyra::VectorBase<double> > x_exact_plot;
102 for (
int i = 0; i < solutionHistory->getNumStates(); i++) {
103 RCP<const SolutionState<double> > solutionState = (*solutionHistory)[i];
104 double time_i = solutionState->getTime();
105 RCP<const Thyra::VectorBase<double> > x_plot = solutionState->getX();
106 x_exact_plot = model->getExactSolution(time_i).get_x();
107 ftmp << time_i <<
" " << get_ele(*(x_plot), 0) <<
" "
108 << get_ele(*(x_exact_plot), 0) << std::endl;
109 if (abs(get_ele(*(x_plot), 0) - get_ele(*(x_exact_plot), 0)) > err)
110 err = abs(get_ele(*(x_plot), 0) - get_ele(*(x_exact_plot), 0));
113 out <<
"Max error = " << err <<
"\n \n";
114 if (err > tolerance) passed =
false;
116 TEUCHOS_TEST_FOR_EXCEPTION(
117 !passed, std::logic_error,
118 "\n Test failed! Max error = " << err <<
" > tolerance = " << tolerance
122 RCP<Tempus::Stepper<double> > stepper = integrator->getStepper();
123 out <<
" Stepper = " << stepper->description() <<
"\n with "
124 << option << std::endl;
125 out <<
" =========================" << std::endl;
126 out <<
" Exact solution : " << get_ele(*(x_exact), 0) << std::endl;
127 out <<
" Computed solution: " << get_ele(*(x), 0) << std::endl;
128 out <<
" =========================" << std::endl;
129 TEST_ASSERT(std::abs(get_ele(*(x), 0)) < 1.0e-14);
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...