9 #include "Teuchos_UnitTestHarness.hpp" 10 #include "Teuchos_XMLParameterListHelpers.hpp" 11 #include "Teuchos_TimeMonitor.hpp" 12 #include "Teuchos_DefaultComm.hpp" 14 #include "Thyra_VectorStdOps.hpp" 16 #include "Tempus_SolutionHistory.hpp" 19 #include "../TestModels/SinCosModel.hpp" 20 #include "../TestModels/DahlquistTestModel.hpp" 21 #include "../TestUtils/Tempus_ConvergenceTestUtils.hpp" 30 using Teuchos::rcp_const_cast;
31 using Teuchos::rcp_dynamic_cast;
32 using Teuchos::ParameterList;
33 using Teuchos::sublist;
34 using Teuchos::getParametersFromXmlFile;
42 TEUCHOS_TEST_FOR_EXCEPT(sh->isInitialized());
46 auto inArgsIC = model->getNominalValues();
48 auto icState = Tempus::createSolutionStateX<double>(icSolution);
49 sh->addState(icState);
51 TEUCHOS_TEST_FOR_EXCEPT(!sh->isInitialized());
54 TEST_COMPARE ( sh->getNumStates(), ==, 1);
55 TEST_COMPARE ( sh->getInterpolator()->order(), ==, 0);
57 TEST_COMPARE ( sh->getStorageLimit(), ==, 2);
60 sh->setName (
"Testing"); TEUCHOS_TEST_FOR_EXCEPT(!sh->isInitialized());
62 sh->setStorageTypeString (
"Static"); sh->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!sh->isInitialized());
63 sh->setStorageLimit(99); sh->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!sh->isInitialized());
65 TEST_COMPARE( sh->getName () , ==,
"Testing");
67 TEST_COMPARE( sh->getStorageTypeString(), ==,
"Static");
68 TEST_COMPARE( sh->getStorageLimit() , ==, 99);
70 TEST_FLOATING_EQUALITY( sh->minTime(), 0.0, 1.0e-14);
71 TEST_FLOATING_EQUALITY( sh->maxTime(), 0.0, 1.0e-14);
80 std::string name =
"Unit Test";
84 auto inArgsIC = model->getNominalValues();
86 Teuchos::RCP<Tempus::SolutionState<double> >
87 icState = Tempus::createSolutionStateX<double>(icSolution);
88 history->push_back(icState);
93 int storageLimit = 99;
96 name, history, interpolator, storageType, storageLimit));
97 TEUCHOS_TEST_FOR_EXCEPT(!sh->isInitialized());
99 TEST_COMPARE ( sh->getNumStates(), ==, 1);
100 TEST_COMPARE ( sh->getInterpolator()->order(), ==, 0);
102 TEST_COMPARE ( sh->getStorageLimit(), ==, 99);
112 RCP<ParameterList> pl = sh_temp->getNonconstParameterList();
114 pl->setName(
"Unit Test");
115 pl->set<std::string>(
"Storage Type",
"Static" );
116 pl->set<
int> (
"Storage Limit", 99);
118 pl->sublist(
"Interpolator").set(
"Interpolator Type",
"Lagrange");
119 pl->sublist(
"Interpolator").set(
"Order", 1);
121 auto sh = Tempus::createSolutionHistoryPL<double>(pl);
122 TEUCHOS_TEST_FOR_EXCEPT(sh->isInitialized());
125 TEST_COMPARE ( sh->getNumStates(), ==, 0);
126 TEST_COMPARE ( sh->getInterpolator()->order(), ==, 1);
128 TEST_COMPARE ( sh->getStorageLimit(), ==, 99);
139 TEUCHOS_TEST_FOR_EXCEPT(sh->isInitialized());
143 auto inArgsIC = model->getNominalValues();
145 auto state0 = Tempus::createSolutionStateX<double>(icSoln);
146 state0->setTime (0.0);
149 sh->setStorageTypeString (
"Keep Newest");
150 sh->addState(state0);
152 TEUCHOS_TEST_FOR_EXCEPT(!sh->isInitialized());
154 TEST_COMPARE ( sh->getNumStates(), ==, 1);
155 TEST_FLOATING_EQUALITY( sh->getCurrentTime(), 0.0, 1.0e-14);
156 TEST_COMPARE ( sh->getCurrentIndex(), ==, 0);
157 TEST_FLOATING_EQUALITY( sh->minTime(), 0.0, 1.0e-14);
158 TEST_FLOATING_EQUALITY( sh->maxTime(), 0.0, 1.0e-14);
160 TEUCHOS_ASSERT(sh->getCurrentState () != Teuchos::null);
161 TEUCHOS_ASSERT(sh->getStateTimeIndexN (
false) != Teuchos::null);
162 TEUCHOS_ASSERT(sh->getStateTimeIndexNM1(
false) == Teuchos::null);
163 TEUCHOS_ASSERT(sh->getStateTimeIndexNM2(
false) == Teuchos::null);
164 TEUCHOS_ASSERT(sh->getStateTimeIndex (0,
false) != Teuchos::null);
166 TEST_COMPARE( sh->getStateTimeIndexN ()->getIndex(), ==, 0);
167 TEST_FLOATING_EQUALITY( sh->getStateTimeIndexN ()->getTime(), 0.0, 1.0e-14);
172 auto state1 = Tempus::createSolutionStateX<double>(icSoln);
173 state1->setTime (1.0);
175 sh->addState(state1);
177 TEST_COMPARE ( sh->getNumStates(), ==, 1);
178 TEST_FLOATING_EQUALITY( sh->getCurrentTime(), 1.0, 1.0e-14);
179 TEST_COMPARE ( sh->getCurrentIndex(), ==, 1);
180 TEST_FLOATING_EQUALITY( sh->minTime(), 1.0, 1.0e-14);
181 TEST_FLOATING_EQUALITY( sh->maxTime(), 1.0, 1.0e-14);
183 TEUCHOS_ASSERT(sh->getCurrentState () != Teuchos::null);
184 TEUCHOS_ASSERT(sh->getStateTimeIndexN (
false) != Teuchos::null);
185 TEUCHOS_ASSERT(sh->getStateTimeIndexNM1(
false) == Teuchos::null);
186 TEUCHOS_ASSERT(sh->getStateTimeIndexNM2(
false) == Teuchos::null);
187 TEUCHOS_ASSERT(sh->getStateTimeIndex (0,
false) == Teuchos::null);
188 TEUCHOS_ASSERT(sh->getStateTimeIndex (1,
false) != Teuchos::null);
190 TEST_COMPARE( sh->getStateTimeIndexN ()->getIndex(), ==, 1);
191 TEST_FLOATING_EQUALITY( sh->getStateTimeIndexN ()->getTime(), 1.0, 1.0e-14);
196 auto state2 = Tempus::createSolutionStateX<double>(icSoln);
197 state2->setTime (-1.0);
198 state2->setIndex(-1);
199 sh->addState(state2);
202 TEST_COMPARE ( sh->getNumStates(), ==, 1);
203 TEST_FLOATING_EQUALITY( sh->getCurrentTime(), 1.0, 1.0e-14);
204 TEST_COMPARE ( sh->getCurrentIndex(), ==, 1);
205 TEST_FLOATING_EQUALITY( sh->minTime(), 1.0, 1.0e-14);
206 TEST_FLOATING_EQUALITY( sh->maxTime(), 1.0, 1.0e-14);
208 TEUCHOS_ASSERT(sh->getCurrentState () != Teuchos::null);
209 TEUCHOS_ASSERT(sh->getStateTimeIndexN (
false) != Teuchos::null);
210 TEUCHOS_ASSERT(sh->getStateTimeIndexNM1(
false) == Teuchos::null);
211 TEUCHOS_ASSERT(sh->getStateTimeIndexNM2(
false) == Teuchos::null);
212 TEUCHOS_ASSERT(sh->getStateTimeIndex (0,
false) == Teuchos::null);
213 TEUCHOS_ASSERT(sh->getStateTimeIndex (1,
false) != Teuchos::null);
215 TEST_COMPARE( sh->getStateTimeIndexN ()->getIndex(), ==, 1);
216 TEST_FLOATING_EQUALITY( sh->getStateTimeIndexN ()->getTime(), 1.0, 1.0e-14);
229 TEUCHOS_TEST_FOR_EXCEPT(sh->isInitialized());
233 auto inArgsIC = model->getNominalValues();
235 auto state0 = Tempus::createSolutionStateX<double>(icSoln);
236 state0->setTime (0.0);
238 sh->addState(state0);
240 TEUCHOS_TEST_FOR_EXCEPT(!sh->isInitialized());
242 TEST_COMPARE ( sh->getNumStates(), ==, 1);
243 TEST_FLOATING_EQUALITY( sh->getCurrentTime(), 0.0, 1.0e-14);
244 TEST_COMPARE ( sh->getCurrentIndex(), ==, 0);
245 TEST_FLOATING_EQUALITY( sh->minTime(), 0.0, 1.0e-14);
246 TEST_FLOATING_EQUALITY( sh->maxTime(), 0.0, 1.0e-14);
248 TEUCHOS_ASSERT(sh->getCurrentState () != Teuchos::null);
249 TEUCHOS_ASSERT(sh->getStateTimeIndexN (
false) != Teuchos::null);
250 TEUCHOS_ASSERT(sh->getStateTimeIndexNM1(
false) == Teuchos::null);
251 TEUCHOS_ASSERT(sh->getStateTimeIndexNM2(
false) == Teuchos::null);
252 TEUCHOS_ASSERT(sh->getStateTimeIndex (0,
false) != Teuchos::null);
254 TEST_COMPARE( sh->getStateTimeIndexN ()->getIndex(), ==, 0);
255 TEST_FLOATING_EQUALITY( sh->getStateTimeIndexN ()->getTime(), 0.0, 1.0e-14);
260 auto state1 = Tempus::createSolutionStateX<double>(icSoln);
261 state1->setTime (1.0);
263 sh->addState(state1);
265 TEST_COMPARE ( sh->getNumStates(), ==, 2);
266 TEST_FLOATING_EQUALITY( sh->getCurrentTime(), 1.0, 1.0e-14);
267 TEST_COMPARE ( sh->getCurrentIndex(), ==, 1);
268 TEST_FLOATING_EQUALITY( sh->minTime(), 0.0, 1.0e-14);
269 TEST_FLOATING_EQUALITY( sh->maxTime(), 1.0, 1.0e-14);
271 TEUCHOS_ASSERT(sh->getCurrentState () != Teuchos::null);
272 TEUCHOS_ASSERT(sh->getStateTimeIndexN (
false) != Teuchos::null);
273 TEUCHOS_ASSERT(sh->getStateTimeIndexNM1(
false) != Teuchos::null);
274 TEUCHOS_ASSERT(sh->getStateTimeIndexNM2(
false) == Teuchos::null);
275 TEUCHOS_ASSERT(sh->getStateTimeIndex (0,
false) != Teuchos::null);
276 TEUCHOS_ASSERT(sh->getStateTimeIndex (1,
false) != Teuchos::null);
278 TEST_COMPARE( sh->getStateTimeIndexN ()->getIndex(), ==, 1);
279 TEST_COMPARE( sh->getStateTimeIndexNM1()->getIndex(), ==, 0);
280 TEST_FLOATING_EQUALITY( sh->getStateTimeIndexN ()->getTime(), 1.0, 1.0e-14);
281 TEST_FLOATING_EQUALITY( sh->getStateTimeIndexNM1()->getTime(), 0.0, 1.0e-14);
286 auto state2 = Tempus::createSolutionStateX<double>(icSoln);
287 state2->setTime (2.0);
289 sh->addState(state2);
291 TEST_COMPARE ( sh->getNumStates(), ==, 2);
292 TEST_FLOATING_EQUALITY( sh->getCurrentTime(), 2.0, 1.0e-14);
293 TEST_COMPARE ( sh->getCurrentIndex(), ==, 2);
294 TEST_FLOATING_EQUALITY( sh->minTime(), 1.0, 1.0e-14);
295 TEST_FLOATING_EQUALITY( sh->maxTime(), 2.0, 1.0e-14);
297 TEUCHOS_ASSERT(sh->getCurrentState () != Teuchos::null);
298 TEUCHOS_ASSERT(sh->getStateTimeIndexN (
false) != Teuchos::null);
299 TEUCHOS_ASSERT(sh->getStateTimeIndexNM1(
false) != Teuchos::null);
300 TEUCHOS_ASSERT(sh->getStateTimeIndexNM2(
false) == Teuchos::null);
301 TEUCHOS_ASSERT(sh->getStateTimeIndex (1,
false) != Teuchos::null);
302 TEUCHOS_ASSERT(sh->getStateTimeIndex (2,
false) != Teuchos::null);
304 TEST_COMPARE( sh->getStateTimeIndexN ()->getIndex(), ==, 2);
305 TEST_COMPARE( sh->getStateTimeIndexNM1()->getIndex(), ==, 1);
306 TEST_FLOATING_EQUALITY( sh->getStateTimeIndexN ()->getTime(), 2.0, 1.0e-14);
307 TEST_FLOATING_EQUALITY( sh->getStateTimeIndexNM1()->getTime(), 1.0, 1.0e-14);
312 sh->addState(state0);
315 TEST_COMPARE ( sh->getNumStates(), ==, 2);
316 TEST_FLOATING_EQUALITY( sh->getCurrentTime(), 2.0, 1.0e-14);
317 TEST_COMPARE ( sh->getCurrentIndex(), ==, 2);
318 TEST_FLOATING_EQUALITY( sh->minTime(), 1.0, 1.0e-14);
319 TEST_FLOATING_EQUALITY( sh->maxTime(), 2.0, 1.0e-14);
321 TEUCHOS_ASSERT(sh->getCurrentState () != Teuchos::null);
322 TEUCHOS_ASSERT(sh->getStateTimeIndexN (
false) != Teuchos::null);
323 TEUCHOS_ASSERT(sh->getStateTimeIndexNM1(
false) != Teuchos::null);
324 TEUCHOS_ASSERT(sh->getStateTimeIndexNM2(
false) == Teuchos::null);
325 TEUCHOS_ASSERT(sh->getStateTimeIndex (1,
false) != Teuchos::null);
326 TEUCHOS_ASSERT(sh->getStateTimeIndex (2,
false) != Teuchos::null);
328 TEST_COMPARE( sh->getStateTimeIndexN ()->getIndex(), ==, 2);
329 TEST_COMPARE( sh->getStateTimeIndexNM1()->getIndex(), ==, 1);
330 TEST_FLOATING_EQUALITY( sh->getStateTimeIndexN ()->getTime(), 2.0, 1.0e-14);
331 TEST_FLOATING_EQUALITY( sh->getStateTimeIndexNM1()->getTime(), 1.0, 1.0e-14);
344 TEUCHOS_TEST_FOR_EXCEPT(sh->isInitialized());
346 sh->setStorageTypeString (
"Static");
347 sh->setStorageLimit(7);
350 auto inArgsIC = model->getNominalValues();
354 for (
size_t i=0; i < 13; ++i) {
356 auto stateI = Tempus::createSolutionStateX<double>(icSoln);
357 stateI->setTime (i*0.9);
358 stateI->setTimeStep(0.9);
360 sh->addState(stateI);
363 TEUCHOS_TEST_FOR_EXCEPT(!sh->isInitialized());
365 sh->describe(out, Teuchos::VERB_MEDIUM);
367 TEST_COMPARE ( sh->getNumStates(), ==, 7);
368 TEST_FLOATING_EQUALITY( sh->getCurrentTime(), 10.8, 1.0e-14);
369 TEST_COMPARE ( sh->getCurrentIndex(), ==, 12);
370 TEST_FLOATING_EQUALITY( sh->minTime(), 5.4, 1.0e-14);
371 TEST_FLOATING_EQUALITY( sh->maxTime(), 10.8, 1.0e-14);
373 TEUCHOS_ASSERT(sh->getCurrentState () != Teuchos::null);
374 TEUCHOS_ASSERT(sh->getStateTimeIndexN () != Teuchos::null);
375 TEUCHOS_ASSERT(sh->getStateTimeIndexNM1() != Teuchos::null);
376 TEUCHOS_ASSERT(sh->getStateTimeIndexNM2() != Teuchos::null);
377 TEUCHOS_ASSERT(sh->getStateTimeIndex (7)!= Teuchos::null);
379 TEST_COMPARE( sh->getStateTimeIndexN ()->getIndex(), ==, 12);
380 TEST_FLOATING_EQUALITY( sh->getStateTimeIndexN ()->getTime(), 10.8, 1.0e-14);
382 TEST_COMPARE( sh->getStateTimeIndexNM1()->getIndex(), ==, 11);
383 TEST_FLOATING_EQUALITY( sh->getStateTimeIndexNM1()->getTime(), 9.9, 1.0e-14);
385 TEST_COMPARE( sh->getStateTimeIndexNM2()->getIndex(), ==, 10);
386 TEST_FLOATING_EQUALITY( sh->getStateTimeIndexNM2()->getTime(), 9.0, 1.0e-14);
388 TEST_COMPARE( sh->getStateTimeIndex (7)->getIndex(), ==, 7);
389 TEST_FLOATING_EQUALITY( sh->getStateTimeIndex (7)->getTime(), 6.3, 1.0e-14);
396 for (
size_t i=0; i < 3; ++i) {
398 auto stateI = Tempus::createSolutionStateX<double>(icSoln);
399 stateI->setTime (2*i*0.9+6.3);
400 stateI->setTimeStep(0.9);
401 stateI->setIndex(2*i+7);
402 sh->addState(stateI);
404 for (
size_t i=0; i < 4; ++i) {
406 auto stateI = Tempus::createSolutionStateX<double>(icSoln);
407 stateI->setTime (2*i*0.9+5.4);
408 stateI->setTimeStep(0.9);
409 stateI->setIndex(2*i+6);
410 sh->addState(stateI);
413 TEUCHOS_TEST_FOR_EXCEPT(!sh->isInitialized());
415 sh->describe(out, Teuchos::VERB_MEDIUM);
417 TEST_COMPARE ( sh->getNumStates(), ==, 7);
418 TEST_FLOATING_EQUALITY( sh->getCurrentTime(), 10.8, 1.0e-14);
419 TEST_COMPARE ( sh->getCurrentIndex(), ==, 12);
420 TEST_FLOATING_EQUALITY( sh->minTime(), 5.4, 1.0e-14);
421 TEST_FLOATING_EQUALITY( sh->maxTime(), 10.8, 1.0e-14);
423 TEUCHOS_ASSERT(sh->getCurrentState () != Teuchos::null);
424 TEUCHOS_ASSERT(sh->getStateTimeIndexN () != Teuchos::null);
425 TEUCHOS_ASSERT(sh->getStateTimeIndexNM1() != Teuchos::null);
426 TEUCHOS_ASSERT(sh->getStateTimeIndexNM2() != Teuchos::null);
427 TEUCHOS_ASSERT(sh->getStateTimeIndex (7)!= Teuchos::null);
429 TEST_COMPARE( sh->getStateTimeIndexN ()->getIndex(), ==, 12);
430 TEST_FLOATING_EQUALITY( sh->getStateTimeIndexN ()->getTime(), 10.8, 1.0e-14);
432 TEST_COMPARE( sh->getStateTimeIndexNM1()->getIndex(), ==, 11);
433 TEST_FLOATING_EQUALITY( sh->getStateTimeIndexNM1()->getTime(), 9.9, 1.0e-14);
435 TEST_COMPARE( sh->getStateTimeIndexNM2()->getIndex(), ==, 10);
436 TEST_FLOATING_EQUALITY( sh->getStateTimeIndexNM2()->getTime(), 9.0, 1.0e-14);
438 TEST_COMPARE( sh->getStateTimeIndex (7)->getIndex(), ==, 7);
439 TEST_FLOATING_EQUALITY( sh->getStateTimeIndex (7)->getTime(), 6.3, 1.0e-14);
452 TEUCHOS_TEST_FOR_EXCEPT(sh->isInitialized());
454 sh->setStorageTypeString (
"Static");
455 sh->setStorageLimit(7);
458 auto inArgsIC = model->getNominalValues();
461 for (
size_t i=0; i < 13; ++i) {
463 auto stateI = Tempus::createSolutionStateX<double>(icSoln);
464 stateI->setTime (i*0.9);
465 stateI->setTimeStep(0.9);
467 sh->addState(stateI);
470 TEUCHOS_TEST_FOR_EXCEPT(!sh->isInitialized());
472 sh->describe(out, Teuchos::VERB_MEDIUM);
474 sh->removeState(sh->getStateTimeIndex(6));
475 sh->removeState( 7.2);
476 sh->removeState(sh->getStateTimeIndex(10));
477 sh->removeState(10.8);
479 sh->describe(out, Teuchos::VERB_MEDIUM);
481 TEST_COMPARE ( sh->getNumStates(), ==, 3);
482 TEST_FLOATING_EQUALITY( sh->getCurrentTime(), 9.9, 1.0e-14);
483 TEST_COMPARE ( sh->getCurrentIndex(), ==, 11);
484 TEST_FLOATING_EQUALITY( sh->minTime(), 6.3, 1.0e-14);
485 TEST_FLOATING_EQUALITY( sh->maxTime(), 9.9, 1.0e-14);
487 TEUCHOS_ASSERT(sh->getCurrentState () != Teuchos::null);
488 TEUCHOS_ASSERT(sh->getStateTimeIndexN () != Teuchos::null);
489 TEUCHOS_ASSERT(sh->getStateTimeIndexNM1() == Teuchos::null);
490 TEUCHOS_ASSERT(sh->getStateTimeIndexNM2() != Teuchos::null);
491 TEUCHOS_ASSERT(sh->getStateTimeIndex (7)!= Teuchos::null);
493 TEST_COMPARE( sh->getStateTimeIndexN ()->getIndex(), ==, 11);
494 TEST_FLOATING_EQUALITY( sh->getStateTimeIndexN ()->getTime(), 9.9, 1.0e-14);
496 TEST_COMPARE( sh->getStateTimeIndexNM2()->getIndex(), ==, 9);
497 TEST_FLOATING_EQUALITY( sh->getStateTimeIndexNM2()->getTime(), 8.1, 1.0e-14);
510 TEUCHOS_TEST_FOR_EXCEPT(sh->isInitialized());
514 auto inArgsIC = model->getNominalValues();
516 auto state0 = Tempus::createSolutionStateX<double>(icSoln);
517 state0->setTime (0.0);
518 state0->setTimeStep(1.0);
520 sh->addState(state0);
522 TEUCHOS_TEST_FOR_EXCEPT(!sh->isInitialized());
527 TEST_COMPARE ( sh->getNumStates(), ==, 1);
528 TEUCHOS_ASSERT(sh->getCurrentState() != Teuchos::null);
529 TEUCHOS_ASSERT(sh->getCurrentState() == sh->getStateTimeIndexN());
530 TEUCHOS_ASSERT(sh->getWorkingState() == Teuchos::null);
532 sh->initWorkingState();
535 TEST_COMPARE ( sh->getNumStates(), ==, 2);
536 TEST_FLOATING_EQUALITY( sh->getCurrentTime(), 0.0, 1.0e-14);
537 TEST_COMPARE ( sh->getCurrentIndex(), ==, 0);
538 TEST_FLOATING_EQUALITY( sh->minTime(), 0.0, 1.0e-14);
539 TEST_FLOATING_EQUALITY( sh->maxTime(), 1.0, 1.0e-14);
541 TEUCHOS_ASSERT(sh->getCurrentState() != Teuchos::null);
542 TEUCHOS_ASSERT(sh->getCurrentState() == sh->getStateTimeIndexNM1());
543 TEUCHOS_ASSERT(sh->getWorkingState() != Teuchos::null);
544 TEUCHOS_ASSERT(sh->getWorkingState() == sh->getStateTimeIndexN());
546 TEST_COMPARE ( sh->getCurrentState()->getIndex(), ==, 0);
547 TEST_FLOATING_EQUALITY( sh->getCurrentState()->getTime(), 0.0, 1.0e-14);
549 TEST_COMPARE ( sh->getWorkingState()->getIndex(), ==, 1);
550 TEST_FLOATING_EQUALITY( sh->getWorkingState()->getTime(), 1.0, 1.0e-14);
563 TEUCHOS_TEST_FOR_EXCEPT(sh->isInitialized());
567 auto inArgsIC = model->getNominalValues();
569 auto state0 = Tempus::createSolutionStateX<double>(icSoln);
570 state0->setTime (0.0);
571 state0->setTimeStep(1.0);
573 sh->addState(state0);
575 TEUCHOS_TEST_FOR_EXCEPT(!sh->isInitialized());
577 auto state1 = Tempus::createSolutionStateX<double>(icSoln);
578 state1->setTime (1.0);
579 state1->setTimeStep(1.0);
581 sh->addWorkingState(state1);
587 TEST_COMPARE ( sh->getNumStates(), ==, 2);
588 TEST_FLOATING_EQUALITY( sh->getCurrentTime(), 0.0, 1.0e-14);
589 TEST_COMPARE ( sh->getCurrentIndex(), ==, 0);
590 TEST_FLOATING_EQUALITY( sh->minTime(), 0.0, 1.0e-14);
591 TEST_FLOATING_EQUALITY( sh->maxTime(), 1.0, 1.0e-14);
593 TEUCHOS_ASSERT(sh->getCurrentState() != Teuchos::null);
594 TEUCHOS_ASSERT(sh->getCurrentState() == sh->getStateTimeIndexNM1());
595 TEUCHOS_ASSERT(sh->getWorkingState() != Teuchos::null);
596 TEUCHOS_ASSERT(sh->getWorkingState() == sh->getStateTimeIndexN());
598 TEST_COMPARE ( sh->getCurrentState()->getIndex(), ==, 0);
599 TEST_FLOATING_EQUALITY( sh->getCurrentState()->getTime(), 0.0, 1.0e-14);
601 TEST_COMPARE ( sh->getWorkingState()->getIndex(), ==, 1);
602 TEST_FLOATING_EQUALITY( sh->getWorkingState()->getTime(), 1.0, 1.0e-14);
604 sh->initWorkingState();
608 TEST_COMPARE ( sh->getNumStates(), ==, 2);
609 TEST_FLOATING_EQUALITY( sh->getCurrentTime(), 0.0, 1.0e-14);
610 TEST_COMPARE ( sh->getCurrentIndex(), ==, 0);
611 TEST_FLOATING_EQUALITY( sh->minTime(), 0.0, 1.0e-14);
612 TEST_FLOATING_EQUALITY( sh->maxTime(), 1.0, 1.0e-14);
614 TEUCHOS_ASSERT(sh->getCurrentState() != Teuchos::null);
615 TEUCHOS_ASSERT(sh->getCurrentState() == sh->getStateTimeIndexNM1());
616 TEUCHOS_ASSERT(sh->getWorkingState() != Teuchos::null);
617 TEUCHOS_ASSERT(sh->getWorkingState() == sh->getStateTimeIndexN());
619 TEST_COMPARE ( sh->getCurrentState()->getIndex(), ==, 0);
620 TEST_FLOATING_EQUALITY( sh->getCurrentState()->getTime(), 0.0, 1.0e-14);
622 TEST_COMPARE ( sh->getWorkingState()->getIndex(), ==, 1);
623 TEST_FLOATING_EQUALITY( sh->getWorkingState()->getTime(), 1.0, 1.0e-14);
636 TEUCHOS_TEST_FOR_EXCEPT(sh->isInitialized());
640 auto inArgsIC = model->getNominalValues();
642 auto state0 = Tempus::createSolutionStateX<double>(icSoln);
643 state0->setTime (0.0);
644 state0->setTimeStep(1.0);
646 sh->addState(state0);
648 TEUCHOS_TEST_FOR_EXCEPT(!sh->isInitialized());
649 sh->initWorkingState();
654 TEST_COMPARE ( sh->getNumStates(), ==, 2);
655 TEUCHOS_ASSERT(sh->getCurrentState() != Teuchos::null);
656 TEUCHOS_ASSERT(sh->getCurrentState() == sh->getStateTimeIndexNM1());
657 TEUCHOS_ASSERT(sh->getWorkingState() != Teuchos::null);
658 TEUCHOS_ASSERT(sh->getWorkingState() == sh->getStateTimeIndexN());
660 TEST_COMPARE ( sh->getCurrentState()->getIndex(), ==, 0);
661 TEST_FLOATING_EQUALITY( sh->getCurrentState()->getTime(), 0.0, 1.0e-14);
663 TEST_COMPARE ( sh->getWorkingState()->getIndex(), ==, 1);
664 TEST_FLOATING_EQUALITY( sh->getWorkingState()->getTime(), 1.0, 1.0e-14);
666 sh->promoteWorkingState();
669 TEST_COMPARE ( sh->getNumStates(), ==, 2);
670 TEUCHOS_ASSERT(sh->getCurrentState() != Teuchos::null);
671 TEUCHOS_ASSERT(sh->getCurrentState() == sh->getStateTimeIndexN());
672 TEUCHOS_ASSERT(sh->getWorkingState() == Teuchos::null);
675 TEST_COMPARE ( sh->getCurrentState()->getIndex(), ==, 1);
676 TEST_FLOATING_EQUALITY( sh->getCurrentState()->getTime(), 1.0, 1.0e-14);
689 TEUCHOS_TEST_FOR_EXCEPT(sh->isInitialized());
693 auto inArgsIC = model->getNominalValues();
695 auto state0 = Tempus::createSolutionStateX<double>(icSoln);
696 state0->setTime (0.0);
697 state0->setTimeStep(1.0);
699 sh->addState(state0);
701 TEUCHOS_TEST_FOR_EXCEPT(!sh->isInitialized());
702 sh->initWorkingState();
707 TEST_COMPARE ( sh->getNumStates(), ==, 2);
708 TEUCHOS_ASSERT(sh->getCurrentState() != Teuchos::null);
709 TEUCHOS_ASSERT(sh->getCurrentState() == sh->getStateTimeIndexNM1());
710 TEUCHOS_ASSERT(sh->getWorkingState() != Teuchos::null);
711 TEUCHOS_ASSERT(sh->getWorkingState() == sh->getStateTimeIndexN());
713 TEST_COMPARE ( sh->getCurrentState()->getIndex(), ==, 0);
714 TEST_FLOATING_EQUALITY( sh->getCurrentState()->getTime(), 0.0, 1.0e-14);
716 TEST_COMPARE ( sh->getWorkingState()->getIndex(), ==, 1);
717 TEST_FLOATING_EQUALITY( sh->getWorkingState()->getTime(), 1.0, 1.0e-14);
719 sh->promoteWorkingState();
723 TEST_COMPARE ( sh->getNumStates(), ==, 2);
724 TEUCHOS_ASSERT(sh->getCurrentState() != Teuchos::null);
725 TEUCHOS_ASSERT(sh->getCurrentState() == sh->getStateTimeIndexNM1());
726 TEUCHOS_ASSERT(sh->getWorkingState() != Teuchos::null);
727 TEUCHOS_ASSERT(sh->getWorkingState() == sh->getStateTimeIndexN());
730 TEST_COMPARE ( sh->getCurrentState()->getIndex(), ==, 0);
731 TEST_FLOATING_EQUALITY( sh->getCurrentState()->getTime(), 0.0, 1.0e-14);
734 TEST_COMPARE ( sh->getWorkingState()->getIndex(), ==, 1);
735 TEST_FLOATING_EQUALITY( sh->getWorkingState()->getTime(), 1.0, 1.0e-14);
Keep the 2 newest states for undo.
The classic Dahlquist Test Problem.
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_UNIT_TEST(BackwardEuler, Default_Construction)
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Keep a fix number of states.
Solution state for integrators and steppers. SolutionState contains the metadata for solutions and th...