11 #include "Tempus_SolutionHistory.hpp"
14 #include "../TestModels/DahlquistTestModel.hpp"
16 namespace Tempus_Unit_Test {
21 using Teuchos::rcp_const_cast;
22 using Teuchos::rcp_dynamic_cast;
23 using Teuchos::sublist;
34 auto inArgsIC = model->getNominalValues();
37 auto icState = Tempus::createSolutionStateX<double>(icSolution);
38 sh->addState(icState);
49 sh->setName(
"Testing");
54 sh->setStorageTypeString(
"Static");
57 sh->setStorageLimit(99);
74 std::string name =
"Unit Test";
78 auto inArgsIC = model->getNominalValues();
82 Tempus::createSolutionStateX<double>(icSolution);
83 history->push_back(icState);
88 int storageLimit = 99;
91 storageType, storageLimit));
108 pl->
set<std::string>(
"Storage Type",
"Static");
109 pl->
set<
int>(
"Storage Limit", 99);
111 pl->
sublist(
"Interpolator").
set(
"Interpolator Type",
"Lagrange");
114 auto sh = Tempus::createSolutionHistoryPL<double>(pl);
134 auto inArgsIC = model->getNominalValues();
136 auto state0 = Tempus::createSolutionStateX<double>(icSoln);
137 state0->setTime(0.0);
140 sh->setStorageTypeString(
"Keep Newest");
141 sh->addState(state0);
157 TEST_COMPARE(sh->getStateTimeIndexN()->getIndex(), ==, 0);
163 auto state1 = Tempus::createSolutionStateX<double>(icSoln);
164 state1->setTime(1.0);
166 sh->addState(state1);
181 TEST_COMPARE(sh->getStateTimeIndexN()->getIndex(), ==, 1);
187 auto state2 = Tempus::createSolutionStateX<double>(icSoln);
188 state2->setTime(-1.0);
189 state2->setIndex(-1);
190 sh->addState(state2);
206 TEST_COMPARE(sh->getStateTimeIndexN()->getIndex(), ==, 1);
222 auto inArgsIC = model->getNominalValues();
224 auto state0 = Tempus::createSolutionStateX<double>(icSoln);
225 state0->setTime(0.0);
227 sh->addState(state0);
243 TEST_COMPARE(sh->getStateTimeIndexN()->getIndex(), ==, 0);
249 auto state1 = Tempus::createSolutionStateX<double>(icSoln);
250 state1->setTime(1.0);
252 sh->addState(state1);
267 TEST_COMPARE(sh->getStateTimeIndexN()->getIndex(), ==, 1);
268 TEST_COMPARE(sh->getStateTimeIndexNM1()->getIndex(), ==, 0);
275 auto state2 = Tempus::createSolutionStateX<double>(icSoln);
276 state2->setTime(2.0);
278 sh->addState(state2);
293 TEST_COMPARE(sh->getStateTimeIndexN()->getIndex(), ==, 2);
294 TEST_COMPARE(sh->getStateTimeIndexNM1()->getIndex(), ==, 1);
301 sh->addState(state0);
317 TEST_COMPARE(sh->getStateTimeIndexN()->getIndex(), ==, 2);
318 TEST_COMPARE(sh->getStateTimeIndexNM1()->getIndex(), ==, 1);
333 sh->setStorageTypeString(
"Static");
334 sh->setStorageLimit(7);
337 auto inArgsIC = model->getNominalValues();
341 for (
size_t i = 0; i < 13; ++i) {
343 auto stateI = Tempus::createSolutionStateX<double>(icSoln);
344 stateI->setTime(i * 0.9);
345 stateI->setTimeStep(0.9);
347 sh->addState(stateI);
366 TEST_COMPARE(sh->getStateTimeIndexN()->getIndex(), ==, 12);
369 TEST_COMPARE(sh->getStateTimeIndexNM1()->getIndex(), ==, 11);
372 TEST_COMPARE(sh->getStateTimeIndexNM2()->getIndex(), ==, 10);
375 TEST_COMPARE(sh->getStateTimeIndex(7)->getIndex(), ==, 7);
383 for (
size_t i = 0; i < 3; ++i) {
385 auto stateI = Tempus::createSolutionStateX<double>(icSoln);
386 stateI->setTime(2 * i * 0.9 + 6.3);
387 stateI->setTimeStep(0.9);
388 stateI->setIndex(2 * i + 7);
389 sh->addState(stateI);
391 for (
size_t i = 0; i < 4; ++i) {
393 auto stateI = Tempus::createSolutionStateX<double>(icSoln);
394 stateI->setTime(2 * i * 0.9 + 5.4);
395 stateI->setTimeStep(0.9);
396 stateI->setIndex(2 * i + 6);
397 sh->addState(stateI);
416 TEST_COMPARE(sh->getStateTimeIndexN()->getIndex(), ==, 12);
419 TEST_COMPARE(sh->getStateTimeIndexNM1()->getIndex(), ==, 11);
422 TEST_COMPARE(sh->getStateTimeIndexNM2()->getIndex(), ==, 10);
425 TEST_COMPARE(sh->getStateTimeIndex(7)->getIndex(), ==, 7);
439 sh->setStorageTypeString(
"Static");
440 sh->setStorageLimit(7);
443 auto inArgsIC = model->getNominalValues();
446 for (
size_t i = 0; i < 13; ++i) {
448 auto stateI = Tempus::createSolutionStateX<double>(icSoln);
449 stateI->setTime(i * 0.9);
450 stateI->setTimeStep(0.9);
452 sh->addState(stateI);
459 sh->removeState(sh->getStateTimeIndex(6));
460 sh->removeState(7.2);
461 sh->removeState(sh->getStateTimeIndex(10));
462 sh->removeState(10.8);
478 TEST_COMPARE(sh->getStateTimeIndexN()->getIndex(), ==, 11);
481 TEST_COMPARE(sh->getStateTimeIndexNM2()->getIndex(), ==, 9);
497 auto inArgsIC = model->getNominalValues();
499 auto state0 = Tempus::createSolutionStateX<double>(icSoln);
500 state0->setTime(0.0);
501 state0->setTimeStep(1.0);
503 sh->addState(state0);
512 TEUCHOS_ASSERT(sh->getCurrentState() == sh->getStateTimeIndexN());
515 sh->initWorkingState();
525 TEUCHOS_ASSERT(sh->getCurrentState() == sh->getStateTimeIndexNM1());
527 TEUCHOS_ASSERT(sh->getWorkingState() == sh->getStateTimeIndexN());
548 auto inArgsIC = model->getNominalValues();
550 auto state0 = Tempus::createSolutionStateX<double>(icSoln);
551 state0->setTime(0.0);
552 state0->setTimeStep(1.0);
554 sh->addState(state0);
558 auto state1 = Tempus::createSolutionStateX<double>(icSoln);
559 state1->setTime(1.0);
560 state1->setTimeStep(1.0);
562 sh->addWorkingState(state1);
575 TEUCHOS_ASSERT(sh->getCurrentState() == sh->getStateTimeIndexNM1());
577 TEUCHOS_ASSERT(sh->getWorkingState() == sh->getStateTimeIndexN());
585 sh->initWorkingState();
596 TEUCHOS_ASSERT(sh->getCurrentState() == sh->getStateTimeIndexNM1());
598 TEUCHOS_ASSERT(sh->getWorkingState() == sh->getStateTimeIndexN());
619 auto inArgsIC = model->getNominalValues();
621 auto state0 = Tempus::createSolutionStateX<double>(icSoln);
622 state0->setTime(0.0);
623 state0->setTimeStep(1.0);
625 sh->addState(state0);
628 sh->initWorkingState();
635 TEUCHOS_ASSERT(sh->getCurrentState() == sh->getStateTimeIndexNM1());
637 TEUCHOS_ASSERT(sh->getWorkingState() == sh->getStateTimeIndexN());
645 sh->promoteWorkingState();
650 TEUCHOS_ASSERT(sh->getCurrentState() == sh->getStateTimeIndexN());
670 auto inArgsIC = model->getNominalValues();
672 auto state0 = Tempus::createSolutionStateX<double>(icSoln);
673 state0->setTime(0.0);
674 state0->setTimeStep(1.0);
676 sh->addState(state0);
679 sh->initWorkingState();
686 TEUCHOS_ASSERT(sh->getCurrentState() == sh->getStateTimeIndexNM1());
688 TEUCHOS_ASSERT(sh->getWorkingState() == sh->getStateTimeIndexN());
696 sh->promoteWorkingState();
702 TEUCHOS_ASSERT(sh->getCurrentState() == sh->getStateTimeIndexNM1());
704 TEUCHOS_ASSERT(sh->getWorkingState() == sh->getStateTimeIndexN());
Keep the 2 newest states for undo.
The classic Dahlquist Test Problem.
ParameterList & set(std::string const &name, T const &value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
#define TEST_COMPARE(v1, comp, v2)
#define TEST_FLOATING_EQUALITY(v1, v2, tol)
Sine-Cosine model problem from Rythmos. This is a canonical Sine-Cosine differential equation with a...
static Teuchos::RCP< Interpolator< Scalar > > createInterpolator(std::string interpolatorType="")
Create default interpolator from interpolator type (e.g., "Linear").
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
TEUCHOS_UNIT_TEST(BackwardEuler, Default_Construction)
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Keep a fix number of states.
ParameterList & sublist(const std::string &name, bool mustAlreadyExist=false, const std::string &docString="")
ParameterList & setName(const std::string &name)
#define TEUCHOS_ASSERT(assertion_test)
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
Solution state for integrators and steppers.