13 #include "Tempus_config.hpp"
14 #include "Tempus_IntegratorBasic.hpp"
16 #include "Tempus_StepperFactory.hpp"
17 #include "Tempus_StepperNewmarkImplicitAForm.hpp"
18 #include "Tempus_StepperNewmarkImplicitDForm.hpp"
20 #include "../TestModels/HarmonicOscillatorModel.hpp"
21 #include "../TestUtils/Tempus_ConvergenceTestUtils.hpp"
28 namespace Tempus_Test {
30 using Teuchos::getParametersFromXmlFile;
33 using Teuchos::rcp_const_cast;
34 using Teuchos::rcp_dynamic_cast;
35 using Teuchos::sublist;
45 double tolerance = 1.0e-14;
46 std::vector<std::string> options;
47 options.push_back(
"useFSAL=true");
48 options.push_back(
"useFSAL=false");
49 options.push_back(
"ICConsistency and Check");
51 for (
const auto& option : options) {
54 "Tempus_Test_NewmarkExplicitAForm_BallParabolic.xml");
64 stepperPL->
remove(
"Zero Initial Guess");
65 if (option ==
"useFSAL=true")
66 stepperPL->
set(
"Use FSAL",
true);
67 else if (option ==
"useFSAL=false")
68 stepperPL->
set(
"Use FSAL",
false);
69 else if (option ==
"ICConsistency and Check") {
70 stepperPL->
set(
"Initial Condition Consistency",
"Consistent");
71 stepperPL->
set(
"Initial Condition Consistency Check",
true);
75 Tempus::createIntegratorBasic<double>(pl, model);
78 bool integratorStatus = integrator->advanceTime();
82 double time = integrator->getTime();
83 double timeFinal = pl->sublist(
"Default Integrator")
84 .sublist(
"Time Step Control")
85 .
get<
double>(
"Final Time");
91 model->getExactSolution(time).get_x();
94 std::ofstream ftmp(
"Tempus_Test_NewmarkExplicitAForm_BallParabolic.dat");
97 integrator->getSolutionHistory();
101 for (
int i = 0; i < solutionHistory->getNumStates(); i++) {
103 double time_i = solutionState->getTime();
105 x_exact_plot = model->getExactSolution(time_i).get_x();
106 ftmp << time_i <<
" " << get_ele(*(x_plot), 0) <<
" "
107 << get_ele(*(x_exact_plot), 0) << std::endl;
108 if (abs(get_ele(*(x_plot), 0) - get_ele(*(x_exact_plot), 0)) > err)
109 err = abs(get_ele(*(x_plot), 0) - get_ele(*(x_exact_plot), 0));
112 out <<
"Max error = " << err <<
"\n \n";
113 if (err > tolerance) passed =
false;
116 !passed, std::logic_error,
117 "\n Test failed! Max error = " << err <<
" > tolerance = " << tolerance
122 out <<
" Stepper = " << stepper->description() <<
"\n with "
123 << option << std::endl;
124 out <<
" =========================" << std::endl;
125 out <<
" Exact solution : " << get_ele(*(x_exact), 0) << std::endl;
126 out <<
" Computed solution: " << get_ele(*(x), 0) << std::endl;
127 out <<
" =========================" << std::endl;
ParameterList & set(std::string const &name, T const &value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
#define TEST_FLOATING_EQUALITY(v1, v2, tol)
Consider the ODE: where is a constant, is a constant damping parameter, is a constant forcing par...
bool remove(std::string const &name, bool throwIfNotExists=true)
TEUCHOS_UNIT_TEST(BackwardEuler, SinCos_ASA)
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Solution state for integrators and steppers.