13 #include "../TestModels/DahlquistTestModel.hpp"
14 #include "../TestModels/VanDerPol_IMEX_ExplicitModel.hpp"
15 #include "../TestModels/VanDerPol_IMEX_ImplicitModel.hpp"
17 namespace Tempus_Unit_Test {
22 using Teuchos::rcp_const_cast;
23 using Teuchos::rcp_dynamic_cast;
24 using Teuchos::sublist;
39 explicitModel, implicitModel));
43 stepper->setModel(model);
44 stepper->initialize();
54 bool useFSAL = stepper->getUseFSAL();
55 std::string ICConsistency = stepper->getICConsistency();
56 bool ICConsistencyCheck = stepper->getICConsistencyCheck();
57 bool zeroInitialGuess = stepper->getZeroInitialGuess();
58 std::string stepperType =
"IMEX RK SSP2";
60 auto explicitTableau = stepperERK->getTableau();
63 auto implicitTableau = stepperSDIRK->getTableau();
67 stepper->setAppAction(modifier);
68 stepper->initialize();
70 stepper->setAppAction(modifierX);
71 stepper->initialize();
73 stepper->setAppAction(observer);
74 stepper->initialize();
76 stepper->setSolver(solver);
77 stepper->initialize();
79 stepper->setUseFSAL(useFSAL);
80 stepper->initialize();
82 stepper->setICConsistency(ICConsistency);
83 stepper->initialize();
85 stepper->setICConsistencyCheck(ICConsistencyCheck);
86 stepper->initialize();
88 stepper->setZeroInitialGuess(zeroInitialGuess);
89 stepper->initialize();
92 stepper->setStepperName(stepperType);
93 stepper->initialize();
95 stepper->setExplicitTableau(explicitTableau);
96 stepper->initialize();
98 stepper->setImplicitTableau(implicitTableau);
99 stepper->initialize();
101 stepper->setOrder(order);
102 stepper->initialize();
111 model, solver, useFSAL, ICConsistency, ICConsistencyCheck,
112 zeroInitialGuess, modifier, stepperType, explicitTableau, implicitTableau,
130 explicitModel, implicitModel));
145 explicitModel, implicitModel));
149 auto stepper = sf->createStepper(
"General IMEX RK", model);
156 StepperFactory_Construction_General_wo_Parameterlist_Model)
164 explicitModel, implicitModel));
168 auto stepper = sf->createStepper(
"General IMEX RK");
169 stepper->setModel(model);
170 stepper->initialize();
185 explicitModel, implicitModel));
190 class StepperRKModifierIMEX_TrapezoidaTest
196 : out(Out), success(Success)
202 virtual ~StepperRKModifierIMEX_TrapezoidaTest() {}
210 const double relTol = 1.0e-14;
217 stepper_imex->getImplicitTableau()->c();
219 auto currentState = sh->getCurrentState();
220 auto workingState = sh->getWorkingState();
221 const double dt = workingState->getTimeStep();
222 double time = currentState->getTime();
223 double imp_time = time;
224 if (stageNumber >= 0) {
225 time += c(stageNumber) * dt;
226 imp_time += chat(stageNumber) * dt;
229 auto x = workingState->getX();
230 auto xDot = workingState->getXDot();
231 if (xDot == Teuchos::null) xDot = stepper->getStepperXDot();
236 auto imex_me = Teuchos::rcp_dynamic_cast<
238 stepper->getModel(),
true);
239 auto explicitModel = Teuchos::rcp_dynamic_cast<
241 imex_me->getExplicitModel(),
true);
242 auto implicitModel = Teuchos::rcp_dynamic_cast<
244 imex_me->getImplicitModel(),
true);
251 const double x_0 = get_ele(*(x), 0);
261 const double X_i = get_ele(*(x), 0);
262 const double f_i = get_ele(*(xDot), 0);
264 if (stageNumber == 0) {
270 else if (stageNumber == 1) {
285 const double X_i = get_ele(*(x), 0);
286 const double f_i = get_ele(*(xDot), 0);
288 if (stageNumber == 0) {
295 else if (stageNumber == 1) {
309 const double x_1 = get_ele(*(x), 0);
310 time = workingState->getTime();
335 explicitModel, implicitModel));
337 auto modifier =
rcp(
new StepperRKModifierIMEX_TrapezoidaTest(out, success));
341 stepper->setModel(model);
347 bool useFSAL = stepper->getUseFSAL();
348 std::string ICConsistency = stepper->getICConsistency();
349 bool ICConsistencyCheck = stepper->getICConsistencyCheck();
350 bool zeroInitialGuess = stepper->getZeroInitialGuess();
351 std::string stepperType =
"IMEX RK SSP2";
353 auto explicitTableau = stepperERK->getTableau();
356 auto implicitTableau = stepperSDIRK->getTableau();
359 stepper->setStepperName(stepperType);
360 stepper->setExplicitTableau(explicitTableau);
361 stepper->setImplicitTableau(implicitTableau);
362 stepper->setOrder(order);
363 stepper->setSolver(solver);
364 stepper->setUseFSAL(useFSAL);
365 stepper->setICConsistency(ICConsistency);
366 stepper->setICConsistencyCheck(ICConsistencyCheck);
367 stepper->setZeroInitialGuess(zeroInitialGuess);
369 stepper->setModel(model);
370 stepper->setAppAction(modifier);
371 stepper->setUseFSAL(
false);
372 stepper->initialize();
378 stepper->setInitialConditions(solutionHistory);
379 solutionHistory->initWorkingState();
381 solutionHistory->getWorkingState()->setTimeStep(dt);
382 solutionHistory->getWorkingState()->setTime(dt);
383 stepper->takeStep(solutionHistory);
At the beginning of the stage.
At the beginning of the step.
van der Pol model formulated for IMEX-RK.
Default observer for StepperRK.
Explicit Runge-Kutta time stepper.
void testFactoryConstruction(std::string stepperType, const Teuchos::RCP< const Thyra::ModelEvaluator< double > > &model)
Unit test utility for Stepper construction through StepperFactory.
The classic Dahlquist Test Problem.
ModelEvaluator pair for implicit and explicit (IMEX) evaulations.
Implicit-Explicit Runge-Kutta (IMEX-RK) time stepper.
#define TEST_COMPARE(v1, comp, v2)
#define TEST_FLOATING_EQUALITY(v1, v2, tol)
Before the implicit solve.
Teuchos::RCP< Teuchos::ParameterList > defaultSolverParameters()
Returns the default solver ParameterList for implicit Steppers.
Teuchos::RCP< SolutionHistory< Scalar > > createSolutionHistoryME(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model)
Nonmember contructor from a Thyra ModelEvaluator.
Base class for Runge-Kutta methods, ExplicitRK, DIRK and IMEX.
void testRKAppAction(const Teuchos::RCP< Tempus::StepperRKBase< double >> &stepper, const Teuchos::RCP< const Thyra::ModelEvaluator< double >> &model, Teuchos::FancyOStream &out, bool &success)
Unit test utility for Stepper RK AppAction.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
TEUCHOS_UNIT_TEST(BackwardEuler, Default_Construction)
virtual void modify(Teuchos::RCP< SolutionHistory< double > >, Teuchos::RCP< StepperRKBase< double > >, const typename StepperRKAppAction< double >::ACTION_LOCATION actLoc)=0
Modify RK Stepper.
virtual int getStageNumber() const
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
ACTION_LOCATION
Indicates the location of application action (see algorithm).
Default ModifierX for StepperRK.
After the implicit solve.
Before the explicit evaluation.
Default modifier for StepperRK.
van der Pol model formulated for IMEX.
#define TEUCHOS_ASSERT(assertion_test)
Base modifier for StepperRK.
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)