11 #include "Tempus_SolutionHistory.hpp"
14 #include "../TestModels/DahlquistTestModel.hpp"
17 namespace Tempus_Unit_Test {
21 using Teuchos::rcp_const_cast;
22 using Teuchos::rcp_dynamic_cast;
24 using Teuchos::sublist;
36 auto inArgsIC = model->getNominalValues();
38 auto icState = Tempus::createSolutionStateX<double>(icSolution);
39 sh->addState(icState);
70 std::string name =
"Unit Test";
74 auto inArgsIC = model->getNominalValues();
77 icState = Tempus::createSolutionStateX<double>(icSolution);
78 history->push_back(icState);
83 int storageLimit = 99;
86 name, history, interpolator, storageType, storageLimit));
105 pl->
set<std::string>(
"Storage Type",
"Static" );
106 pl->
set<
int> (
"Storage Limit", 99);
108 pl->
sublist(
"Interpolator").
set(
"Interpolator Type",
"Lagrange");
111 auto sh = Tempus::createSolutionHistoryPL<double>(pl);
133 auto inArgsIC = model->getNominalValues();
135 auto state0 = Tempus::createSolutionStateX<double>(icSoln);
136 state0->setTime (0.0);
139 sh->setStorageTypeString (
"Keep Newest");
140 sh->addState(state0);
154 TEUCHOS_ASSERT(sh->getStateTimeIndex (0,
false) != Teuchos::null);
156 TEST_COMPARE( sh->getStateTimeIndexN ()->getIndex(), ==, 0);
162 auto state1 = Tempus::createSolutionStateX<double>(icSoln);
163 state1->setTime (1.0);
165 sh->addState(state1);
177 TEUCHOS_ASSERT(sh->getStateTimeIndex (0,
false) == Teuchos::null);
178 TEUCHOS_ASSERT(sh->getStateTimeIndex (1,
false) != Teuchos::null);
180 TEST_COMPARE( sh->getStateTimeIndexN ()->getIndex(), ==, 1);
186 auto state2 = Tempus::createSolutionStateX<double>(icSoln);
187 state2->setTime (-1.0);
188 state2->setIndex(-1);
189 sh->addState(state2);
202 TEUCHOS_ASSERT(sh->getStateTimeIndex (0,
false) == Teuchos::null);
203 TEUCHOS_ASSERT(sh->getStateTimeIndex (1,
false) != Teuchos::null);
205 TEST_COMPARE( sh->getStateTimeIndexN ()->getIndex(), ==, 1);
223 auto inArgsIC = model->getNominalValues();
225 auto state0 = Tempus::createSolutionStateX<double>(icSoln);
226 state0->setTime (0.0);
228 sh->addState(state0);
242 TEUCHOS_ASSERT(sh->getStateTimeIndex (0,
false) != Teuchos::null);
244 TEST_COMPARE( sh->getStateTimeIndexN ()->getIndex(), ==, 0);
250 auto state1 = Tempus::createSolutionStateX<double>(icSoln);
251 state1->setTime (1.0);
253 sh->addState(state1);
265 TEUCHOS_ASSERT(sh->getStateTimeIndex (0,
false) != Teuchos::null);
266 TEUCHOS_ASSERT(sh->getStateTimeIndex (1,
false) != Teuchos::null);
268 TEST_COMPARE( sh->getStateTimeIndexN ()->getIndex(), ==, 1);
269 TEST_COMPARE( sh->getStateTimeIndexNM1()->getIndex(), ==, 0);
276 auto state2 = Tempus::createSolutionStateX<double>(icSoln);
277 state2->setTime (2.0);
279 sh->addState(state2);
291 TEUCHOS_ASSERT(sh->getStateTimeIndex (1,
false) != Teuchos::null);
292 TEUCHOS_ASSERT(sh->getStateTimeIndex (2,
false) != Teuchos::null);
294 TEST_COMPARE( sh->getStateTimeIndexN ()->getIndex(), ==, 2);
295 TEST_COMPARE( sh->getStateTimeIndexNM1()->getIndex(), ==, 1);
302 sh->addState(state0);
315 TEUCHOS_ASSERT(sh->getStateTimeIndex (1,
false) != Teuchos::null);
316 TEUCHOS_ASSERT(sh->getStateTimeIndex (2,
false) != Teuchos::null);
318 TEST_COMPARE( sh->getStateTimeIndexN ()->getIndex(), ==, 2);
319 TEST_COMPARE( sh->getStateTimeIndexNM1()->getIndex(), ==, 1);
336 sh->setStorageTypeString (
"Static");
337 sh->setStorageLimit(7);
340 auto inArgsIC = model->getNominalValues();
344 for (
size_t i=0; i < 13; ++i) {
346 auto stateI = Tempus::createSolutionStateX<double>(icSoln);
347 stateI->setTime (i*0.9);
348 stateI->setTimeStep(0.9);
350 sh->addState(stateI);
369 TEST_COMPARE( sh->getStateTimeIndexN ()->getIndex(), ==, 12);
372 TEST_COMPARE( sh->getStateTimeIndexNM1()->getIndex(), ==, 11);
375 TEST_COMPARE( sh->getStateTimeIndexNM2()->getIndex(), ==, 10);
378 TEST_COMPARE( sh->getStateTimeIndex (7)->getIndex(), ==, 7);
386 for (
size_t i=0; i < 3; ++i) {
388 auto stateI = Tempus::createSolutionStateX<double>(icSoln);
389 stateI->setTime (2*i*0.9+6.3);
390 stateI->setTimeStep(0.9);
391 stateI->setIndex(2*i+7);
392 sh->addState(stateI);
394 for (
size_t i=0; i < 4; ++i) {
396 auto stateI = Tempus::createSolutionStateX<double>(icSoln);
397 stateI->setTime (2*i*0.9+5.4);
398 stateI->setTimeStep(0.9);
399 stateI->setIndex(2*i+6);
400 sh->addState(stateI);
419 TEST_COMPARE( sh->getStateTimeIndexN ()->getIndex(), ==, 12);
422 TEST_COMPARE( sh->getStateTimeIndexNM1()->getIndex(), ==, 11);
425 TEST_COMPARE( sh->getStateTimeIndexNM2()->getIndex(), ==, 10);
428 TEST_COMPARE( sh->getStateTimeIndex (7)->getIndex(), ==, 7);
444 sh->setStorageTypeString (
"Static");
445 sh->setStorageLimit(7);
448 auto inArgsIC = model->getNominalValues();
451 for (
size_t i=0; i < 13; ++i) {
453 auto stateI = Tempus::createSolutionStateX<double>(icSoln);
454 stateI->setTime (i*0.9);
455 stateI->setTimeStep(0.9);
457 sh->addState(stateI);
464 sh->removeState(sh->getStateTimeIndex(6));
465 sh->removeState( 7.2);
466 sh->removeState(sh->getStateTimeIndex(10));
467 sh->removeState(10.8);
483 TEST_COMPARE( sh->getStateTimeIndexN ()->getIndex(), ==, 11);
486 TEST_COMPARE( sh->getStateTimeIndexNM2()->getIndex(), ==, 9);
504 auto inArgsIC = model->getNominalValues();
506 auto state0 = Tempus::createSolutionStateX<double>(icSoln);
507 state0->setTime (0.0);
508 state0->setTimeStep(1.0);
510 sh->addState(state0);
519 TEUCHOS_ASSERT(sh->getCurrentState() == sh->getStateTimeIndexN());
522 sh->initWorkingState();
532 TEUCHOS_ASSERT(sh->getCurrentState() == sh->getStateTimeIndexNM1());
534 TEUCHOS_ASSERT(sh->getWorkingState() == sh->getStateTimeIndexN());
536 TEST_COMPARE ( sh->getCurrentState()->getIndex(), ==, 0);
539 TEST_COMPARE ( sh->getWorkingState()->getIndex(), ==, 1);
557 auto inArgsIC = model->getNominalValues();
559 auto state0 = Tempus::createSolutionStateX<double>(icSoln);
560 state0->setTime (0.0);
561 state0->setTimeStep(1.0);
563 sh->addState(state0);
567 auto state1 = Tempus::createSolutionStateX<double>(icSoln);
568 state1->setTime (1.0);
569 state1->setTimeStep(1.0);
571 sh->addWorkingState(state1);
584 TEUCHOS_ASSERT(sh->getCurrentState() == sh->getStateTimeIndexNM1());
586 TEUCHOS_ASSERT(sh->getWorkingState() == sh->getStateTimeIndexN());
588 TEST_COMPARE ( sh->getCurrentState()->getIndex(), ==, 0);
591 TEST_COMPARE ( sh->getWorkingState()->getIndex(), ==, 1);
594 sh->initWorkingState();
605 TEUCHOS_ASSERT(sh->getCurrentState() == sh->getStateTimeIndexNM1());
607 TEUCHOS_ASSERT(sh->getWorkingState() == sh->getStateTimeIndexN());
609 TEST_COMPARE ( sh->getCurrentState()->getIndex(), ==, 0);
612 TEST_COMPARE ( sh->getWorkingState()->getIndex(), ==, 1);
630 auto inArgsIC = model->getNominalValues();
632 auto state0 = Tempus::createSolutionStateX<double>(icSoln);
633 state0->setTime (0.0);
634 state0->setTimeStep(1.0);
636 sh->addState(state0);
639 sh->initWorkingState();
646 TEUCHOS_ASSERT(sh->getCurrentState() == sh->getStateTimeIndexNM1());
648 TEUCHOS_ASSERT(sh->getWorkingState() == sh->getStateTimeIndexN());
650 TEST_COMPARE ( sh->getCurrentState()->getIndex(), ==, 0);
653 TEST_COMPARE ( sh->getWorkingState()->getIndex(), ==, 1);
656 sh->promoteWorkingState();
661 TEUCHOS_ASSERT(sh->getCurrentState() == sh->getStateTimeIndexN());
665 TEST_COMPARE ( sh->getCurrentState()->getIndex(), ==, 1);
683 auto inArgsIC = model->getNominalValues();
685 auto state0 = Tempus::createSolutionStateX<double>(icSoln);
686 state0->setTime (0.0);
687 state0->setTimeStep(1.0);
689 sh->addState(state0);
692 sh->initWorkingState();
699 TEUCHOS_ASSERT(sh->getCurrentState() == sh->getStateTimeIndexNM1());
701 TEUCHOS_ASSERT(sh->getWorkingState() == sh->getStateTimeIndexN());
703 TEST_COMPARE ( sh->getCurrentState()->getIndex(), ==, 0);
706 TEST_COMPARE ( sh->getWorkingState()->getIndex(), ==, 1);
709 sh->promoteWorkingState();
715 TEUCHOS_ASSERT(sh->getCurrentState() == sh->getStateTimeIndexNM1());
717 TEUCHOS_ASSERT(sh->getWorkingState() == sh->getStateTimeIndexN());
720 TEST_COMPARE ( sh->getCurrentState()->getIndex(), ==, 0);
724 TEST_COMPARE ( sh->getWorkingState()->getIndex(), ==, 1);
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.