32 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
35 TEST_COMPARE(tsc->getStepType(), ==,
"Constant");
36 TEST_FLOATING_EQUALITY(tsc->getInitTime(), 0.0, 1.0e-14);
37 TEST_FLOATING_EQUALITY(tsc->getFinalTime(), 1.0e+99, 1.0e-14);
38 TEST_FLOATING_EQUALITY(tsc->getMinTimeStep(), 0.0, 1.0e-14);
39 TEST_FLOATING_EQUALITY(tsc->getInitTimeStep(), 1.0e+99, 1.0e-14);
40 TEST_FLOATING_EQUALITY(tsc->getMaxTimeStep(), 1.0e+99, 1.0e-14);
41 TEST_COMPARE(tsc->getInitIndex(), ==, 0);
42 TEST_COMPARE(tsc->getFinalIndex(), ==, 1000000);
43 TEST_FLOATING_EQUALITY(tsc->getMaxAbsError(), 1.0e-08, 1.0e-14);
44 TEST_FLOATING_EQUALITY(tsc->getMaxRelError(), 1.0e-08, 1.0e-14);
45 TEST_COMPARE(tsc->getMaxFailures(), ==, 10);
46 TEST_COMPARE(tsc->getMaxConsecFailures(), ==, 5);
47 TEST_COMPARE(tsc->getNumTimeSteps(), ==, -1);
48 TEST_COMPARE(tsc->getPrintDtChanges(), ==,
true);
49 TEST_COMPARE(tsc->getOutputExactly(), ==,
true);
50 TEST_COMPARE(tsc->getOutputIndexInterval(), ==, 1000000);
51 TEST_FLOATING_EQUALITY(tsc->getOutputTimeInterval(), 1.0e+99, 1.0e-14);
52 auto tec = tsc->getTimeEvents();
53 TEST_COMPARE(tec->getSize(), ==, 2);
54 TEST_COMPARE(tec->getTimeEventNames(), ==,
55 "Output Index Interval, Output Time Interval");
58 tsc->setInitTime(1.0);
60 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
61 tsc->setFinalTime(100.0);
63 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
64 tsc->setMinTimeStep(0.01);
66 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
67 tsc->setInitTimeStep(0.02);
69 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
70 tsc->setMaxTimeStep(0.05);
72 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
73 tsc->setInitIndex(-100);
75 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
76 tsc->setFinalIndex(100);
78 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
79 tsc->setMaxAbsError(1.0e-06);
81 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
82 tsc->setMaxRelError(1.0e-06);
84 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
85 tsc->setMaxFailures(8);
87 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
88 tsc->setMaxConsecFailures(4);
90 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
91 tsc->setNumTimeSteps(-1);
93 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
94 tsc->setPrintDtChanges(
false);
96 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
97 tsc->setOutputExactly(
false);
99 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
100 tsc->setOutputIndexInterval(9);
102 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
103 tsc->setOutputTimeInterval(0.1);
105 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
107 TEST_COMPARE(tsc->getStepType(), ==,
"Constant");
108 TEST_FLOATING_EQUALITY(tsc->getInitTime(), 1.0, 1.0e-14);
109 TEST_FLOATING_EQUALITY(tsc->getFinalTime(), 100.0, 1.0e-14);
110 TEST_FLOATING_EQUALITY(tsc->getMinTimeStep(), 0.01, 1.0e-14);
111 TEST_FLOATING_EQUALITY(tsc->getInitTimeStep(), 0.02, 1.0e-14);
112 TEST_FLOATING_EQUALITY(tsc->getMaxTimeStep(), 0.05, 1.0e-14);
113 TEST_COMPARE(tsc->getInitIndex(), ==, -100);
114 TEST_COMPARE(tsc->getFinalIndex(), ==, 100);
115 TEST_FLOATING_EQUALITY(tsc->getMaxAbsError(), 1.0e-06, 1.0e-14);
116 TEST_FLOATING_EQUALITY(tsc->getMaxRelError(), 1.0e-06, 1.0e-14);
117 TEST_COMPARE(tsc->getMaxFailures(), ==, 8);
118 TEST_COMPARE(tsc->getMaxConsecFailures(), ==, 4);
119 TEST_COMPARE(tsc->getNumTimeSteps(), ==, -1);
120 TEST_COMPARE(tsc->getPrintDtChanges(), ==,
false);
121 TEST_COMPARE(tsc->getOutputExactly(), ==,
false);
122 TEST_COMPARE(tsc->getOutputIndexInterval(), ==, 9);
123 TEST_FLOATING_EQUALITY(tsc->getOutputTimeInterval(), 0.1, 1.0e-14);
128 ter->setName(
"Test Range");
129 tel->setName(
"Test List");
132 tsc->setTimeEvents(tecTmp);
133 tec = tsc->getTimeEvents();
134 TEST_COMPARE(tec->getSize(), ==, 2);
135 TEST_COMPARE(tec->getTimeEventNames(), ==,
"Test Range, Test List");
142 std::vector<int> outputIndices;
143 outputIndices.push_back(7);
144 outputIndices.push_back(11);
145 outputIndices.push_back(13);
147 std::vector<double> outputTimes;
148 outputTimes.push_back(0.3);
149 outputTimes.push_back(0.7);
150 outputTimes.push_back(1.3);
151 outputTimes.push_back(1.7);
158 ter->setName(
"Test Range");
159 teri->setName(
"Test Range Index");
160 tel->setName(
"Test List");
161 teli->setName(
"Test List Index");
192 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
194 TEST_COMPARE(tsc->getStepType(), ==,
"Constant");
195 TEST_FLOATING_EQUALITY(tsc->getInitTime(), 1.0, 1.0e-14);
196 TEST_FLOATING_EQUALITY(tsc->getFinalTime(), 100.0, 1.0e-14);
197 TEST_FLOATING_EQUALITY(tsc->getMinTimeStep(), 0.01, 1.0e-14);
198 TEST_FLOATING_EQUALITY(tsc->getInitTimeStep(), 0.02, 1.0e-14);
199 TEST_FLOATING_EQUALITY(tsc->getMaxTimeStep(), 0.05, 1.0e-14);
200 TEST_COMPARE(tsc->getInitIndex(), ==, -100);
201 TEST_COMPARE(tsc->getFinalIndex(), ==, 100);
202 TEST_FLOATING_EQUALITY(tsc->getMaxAbsError(), 1.0e-06, 1.0e-14);
203 TEST_FLOATING_EQUALITY(tsc->getMaxRelError(), 1.0e-06, 1.0e-14);
204 TEST_COMPARE(tsc->getMaxFailures(), ==, 8);
205 TEST_COMPARE(tsc->getMaxConsecFailures(), ==, 4);
206 TEST_COMPARE(tsc->getNumTimeSteps(), ==, -1);
207 TEST_COMPARE(tsc->getPrintDtChanges(), ==,
false);
208 TEST_COMPARE(tsc->getOutputExactly(), ==,
false);
209 TEST_COMPARE(tsc->getOutputIndexInterval(), ==, 9);
210 TEST_FLOATING_EQUALITY(tsc->getOutputTimeInterval(), 0.011, 1.0e-14);
211 auto tec = tsc->getTimeEvents();
212 TEST_COMPARE(tec->getSize(), ==, 8);
214 tec->getTimeEventNames(), ==,
215 "Test Range, Test Range Index, Test List, Test List Index, Output Time "
216 "Interval, Output Time List, Output Index Interval, Output Index List");
223 Teuchos::RCP<Teuchos::ParameterList> pl =
224 Tempus::getTimeStepControlPL<double>();
226 pl->set<
double>(
"Initial Time", 1.0);
227 pl->set<
double>(
"Final Time", 100.0);
228 pl->set<
double>(
"Minimum Time Step", 0.01);
229 pl->set<
double>(
"Initial Time Step", 0.02);
230 pl->set<
double>(
"Maximum Time Step", 0.05);
231 pl->set<
int>(
"Initial Time Index", -100);
232 pl->set<
int>(
"Final Time Index", 100);
233 pl->set<
double>(
"Maximum Absolute Error", 1.0e-06);
234 pl->set<
double>(
"Maximum Relative Error", 1.0e-06);
235 pl->set<
int>(
"Maximum Number of Stepper Failures", 8);
236 pl->set<
int>(
"Maximum Number of Consecutive Stepper Failures", 4);
237 pl->set<
int>(
"Number of Time Steps", -1);
238 pl->set<
bool>(
"Print Time Step Changes",
false);
239 pl->set<
bool>(
"Output Exactly On Output Times",
false);
240 pl->set<std::string>(
"Output Index List",
"7, 11, 13");
241 pl->set<std::string>(
"Output Time List",
"0.3, 0.7, 1.3, 1.7");
242 pl->set<
int>(
"Output Index Interval", 9);
243 pl->set<
double>(
"Output Time Interval", 0.011);
246 auto tscsPL = tscs->getValidParameters();
247 pl->set(
"Time Step Control Strategy", *tscsPL);
254 ter->setName(
"Test Range");
255 teri->setName(
"Test Range Index");
256 tel->setName(
"Test List");
257 teli->setName(
"Test List Index");
262 auto tecPL = rcp_const_cast<ParameterList>(tec->getValidParameters());
263 pl->set(
"Time Step Control Events", *tecPL);
265 auto tsc = Tempus::createTimeStepControl<double>(pl);
266 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
268 tsc->describe(out, Teuchos::VERB_EXTREME);
270 TEST_COMPARE(tsc->getStepType(), ==,
"Constant");
271 TEST_FLOATING_EQUALITY(tsc->getInitTime(), 1.0, 1.0e-14);
272 TEST_FLOATING_EQUALITY(tsc->getFinalTime(), 100.0, 1.0e-14);
273 TEST_FLOATING_EQUALITY(tsc->getMinTimeStep(), 0.01, 1.0e-14);
274 TEST_FLOATING_EQUALITY(tsc->getInitTimeStep(), 0.02, 1.0e-14);
275 TEST_FLOATING_EQUALITY(tsc->getMaxTimeStep(), 0.05, 1.0e-14);
276 TEST_COMPARE(tsc->getInitIndex(), ==, -100);
277 TEST_COMPARE(tsc->getFinalIndex(), ==, 100);
278 TEST_FLOATING_EQUALITY(tsc->getMaxAbsError(), 1.0e-06, 1.0e-14);
279 TEST_FLOATING_EQUALITY(tsc->getMaxRelError(), 1.0e-06, 1.0e-14);
280 TEST_COMPARE(tsc->getMaxFailures(), ==, 8);
281 TEST_COMPARE(tsc->getMaxConsecFailures(), ==, 4);
282 TEST_COMPARE(tsc->getNumTimeSteps(), ==, -1);
283 TEST_COMPARE(tsc->getPrintDtChanges(), ==,
false);
284 TEST_COMPARE(tsc->getOutputExactly(), ==,
false);
285 TEST_COMPARE(tsc->getOutputIndices()[0], ==, 7);
286 TEST_COMPARE(tsc->getOutputIndices()[1], ==, 11);
287 TEST_COMPARE(tsc->getOutputIndices()[2], ==, 13);
288 TEST_FLOATING_EQUALITY(tsc->getOutputTimes()[0], 0.3, 1.0e-14);
289 TEST_FLOATING_EQUALITY(tsc->getOutputTimes()[1], 0.7, 1.0e-14);
290 TEST_FLOATING_EQUALITY(tsc->getOutputTimes()[2], 1.3, 1.0e-14);
291 TEST_FLOATING_EQUALITY(tsc->getOutputTimes()[3], 1.7, 1.0e-14);
292 TEST_COMPARE(tsc->getOutputIndexInterval(), ==, 9);
293 TEST_FLOATING_EQUALITY(tsc->getOutputTimeInterval(), 0.011, 1.0e-14);
295 tec = tsc->getTimeEvents();
296 TEST_COMPARE(tec->getSize(), ==, 8);
298 tec->getTimeEventNames(), ==,
299 "Output Index List, Output Index Interval, Output Time List, Output Time "
300 "Interval, Test Range, Test Range Index, Test List, Test List Index");
312 double dLast = 0.989;
315 tsc->setInitTime(dFirst);
316 TEST_COMPARE(tsc->getInitTime(), ==, dFirst);
317 tsc->setFinalTime(dLast);
318 TEST_COMPARE(tsc->getFinalTime(), ==, dLast);
319 tsc->setMinTimeStep(dStep);
320 TEST_COMPARE(tsc->getMinTimeStep(), ==, dStep);
321 tsc->setInitTimeStep(dStep);
322 TEST_COMPARE(tsc->getInitTimeStep(), ==, dStep);
323 tsc->setMaxTimeStep(dLast);
324 TEST_COMPARE(tsc->getMaxTimeStep(), ==, dLast);
325 tsc->setInitIndex(iFirst);
326 TEST_COMPARE(tsc->getInitIndex(), ==, iFirst);
327 tsc->setFinalIndex(iLast);
328 TEST_COMPARE(tsc->getFinalIndex(), ==, iLast);
329 tsc->setMaxAbsError(dStep);
330 TEST_COMPARE(tsc->getMaxAbsError(), ==, dStep);
331 tsc->setMaxRelError(dStep);
332 TEST_COMPARE(tsc->getMaxRelError(), ==, dStep);
333 tsc->setOutputExactly(
false);
334 TEST_COMPARE(tsc->getOutputExactly(), ==,
false);
335 tsc->setOutputExactly(
true);
336 TEST_COMPARE(tsc->getOutputExactly(), ==,
true);
338 std::vector<int> iVSet{0, 1, 2, 3, 5, 8, 13, 21, 34};
339 tsc->setOutputIndices(iVSet);
340 TEUCHOS_TEST_FOR_EXCEPT(tsc->getOutputIndices() != iVSet);
342 tsc->setOutputIndexInterval(iStep);
343 TEST_COMPARE(tsc->getOutputIndexInterval(), ==, iStep);
344 tsc->setOutputTimeInterval(dStep);
345 TEST_COMPARE(tsc->getOutputTimeInterval(), ==, dStep);
354 std::vector<double> times_in;
355 times_in.push_back(0.0000000000000000e-11);
356 times_in.push_back(0.1001384570000000e-11);
357 times_in.push_back(0.2002769140000000e-11);
358 times_in.push_back(0.3004153710000000e-11);
359 times_in.push_back(0.4005538280000000e-11);
360 times_in.push_back(0.5006922850000000e-11);
361 times_in.push_back(0.6008307420000000e-11);
362 times_in.push_back(0.7009691990000000e-11);
363 times_in.push_back(0.8011076560000000e-11);
364 times_in.push_back(0.9012461130000000e-11);
365 times_in.push_back(1.0013845700000000e-11);
367 tsc->setOutputTimes(times_in);
369 auto times_out = tsc->getOutputTimes();
370 double maxDiff = 0.0;
373 for (
size_t i = 0; i < times_in.size(); ++i) {
377 maxDiff = std::max(std::fabs(times_in[i] - times_out[i]), maxDiff);
381 TEST_COMPARE(maxDiff, <, 1.0e-25);
384 times_in.push_back(0.00000000000000000000000000000000);
385 times_in.push_back(0.00000000000100138457000000009381);
386 times_in.push_back(0.00000000000200276914000000018762);
387 times_in.push_back(0.00000000000300415371000000007949);
388 times_in.push_back(0.00000000000400553828000000037525);
389 times_in.push_back(0.00000000000500692284999999986321);
390 times_in.push_back(0.00000000000600830742000000015898);
391 times_in.push_back(0.00000000000700969198999999964694);
392 times_in.push_back(0.00000000000801107656000000075050);
393 times_in.push_back(0.00000000000901246112999999943067);
394 times_in.push_back(0.00000000001001384569999999972643);
396 tsc->setOutputTimes(times_in);
398 times_out = tsc->getOutputTimes();
402 for (
size_t i = 0; i < times_in.size(); ++i) {
406 maxDiff = std::max(std::fabs(times_in[i] - times_out[i]), maxDiff);
410 TEST_COMPARE(maxDiff, <, 1.0e-25);
436 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
439 auto testTimeInRange = [=](
double initTime,
double finalTime) {
440 tsc->setInitTime(initTime);
441 tsc->setFinalTime(finalTime);
443 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
445 const int i = (initTime == 0)
447 : 1 + (int)std::floor(std::log10(std::fabs(initTime)));
448 const double absTolInit10 = std::pow(10, i - 10);
449 const double absTolInit15 = std::pow(10, i - 15);
450 const int j = (finalTime == 0)
452 : 1 + (int)std::floor(std::log10(std::fabs(finalTime)));
453 const double absTolFinal10 = std::pow(10, j - 10);
454 const double absTolFinal15 = std::pow(10, j - 15);
457 if (initTime == 0.0) {
458 TEUCHOS_TEST_FOR_EXCEPT(tsc->timeInRange(initTime - 0.1));
461 TEUCHOS_TEST_FOR_EXCEPT(
462 tsc->timeInRange(initTime - 0.1 * std::fabs(initTime)));
464 TEUCHOS_TEST_FOR_EXCEPT(tsc->timeInRange(initTime - absTolInit10));
465 TEUCHOS_TEST_FOR_EXCEPT(!tsc->timeInRange(initTime - absTolInit15));
466 TEUCHOS_TEST_FOR_EXCEPT(!tsc->timeInRange(initTime));
467 TEUCHOS_TEST_FOR_EXCEPT(!tsc->timeInRange(initTime + absTolInit15));
468 TEUCHOS_TEST_FOR_EXCEPT(!tsc->timeInRange(initTime + absTolInit10));
469 TEUCHOS_TEST_FOR_EXCEPT(
470 !tsc->timeInRange(initTime + 0.3 * (std::fabs(finalTime - initTime))));
471 TEUCHOS_TEST_FOR_EXCEPT(!tsc->timeInRange(finalTime - absTolFinal10));
472 TEUCHOS_TEST_FOR_EXCEPT(tsc->timeInRange(finalTime - absTolFinal15));
473 TEUCHOS_TEST_FOR_EXCEPT(tsc->timeInRange(finalTime));
474 TEUCHOS_TEST_FOR_EXCEPT(tsc->timeInRange(finalTime + absTolFinal15));
475 TEUCHOS_TEST_FOR_EXCEPT(tsc->timeInRange(finalTime + absTolFinal10));
476 if (finalTime == 0.0) {
477 TEUCHOS_TEST_FOR_EXCEPT(tsc->timeInRange(finalTime + 0.1));
480 TEUCHOS_TEST_FOR_EXCEPT(
481 tsc->timeInRange(finalTime + 0.1 * std::fabs(finalTime)));
486 testTimeInRange(0.0, 1.0);
489 testTimeInRange(-1.0, 0.0);
492 testTimeInRange(9.9e-20, 3.3e+20);
493 testTimeInRange(-1.9e+20, 2.3e-20);
501 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
504 auto testIndexInRange = [=](
double initIndex,
double finalIndex) {
505 tsc->setInitIndex(initIndex);
506 tsc->setFinalIndex(finalIndex);
508 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
511 TEUCHOS_TEST_FOR_EXCEPT(tsc->indexInRange(initIndex - 7));
512 TEUCHOS_TEST_FOR_EXCEPT(tsc->indexInRange(initIndex - 1));
513 TEUCHOS_TEST_FOR_EXCEPT(!tsc->indexInRange(initIndex));
514 TEUCHOS_TEST_FOR_EXCEPT(!tsc->indexInRange(initIndex + 1));
515 TEUCHOS_TEST_FOR_EXCEPT(!tsc->indexInRange(
516 initIndex + (
int)0.3 * (std::fabs(finalIndex - initIndex))));
517 TEUCHOS_TEST_FOR_EXCEPT(!tsc->indexInRange(finalIndex - 1));
518 TEUCHOS_TEST_FOR_EXCEPT(tsc->indexInRange(finalIndex));
519 TEUCHOS_TEST_FOR_EXCEPT(tsc->indexInRange(finalIndex + 1));
520 TEUCHOS_TEST_FOR_EXCEPT(tsc->indexInRange(finalIndex + 7));
524 testIndexInRange(0, 10);
527 testIndexInRange(-10, 0);
530 testIndexInRange(-190000, 20);
531 testIndexInRange(-19, 200000);
538 std::vector<int> outputIndices;
539 outputIndices.push_back(7);
540 outputIndices.push_back(11);
541 outputIndices.push_back(13);
543 std::vector<double> outputTimes;
544 outputTimes.push_back(0.3);
545 outputTimes.push_back(0.7);
546 outputTimes.push_back(1.3);
547 outputTimes.push_back(1.7);
554 1.0, 100.0, 0.01, 0.02, 0.05, -100, 100, 1.0e-06, 1.0e-06, 8, 4, -1,
555 false,
false, outputIndices, outputTimes, 9, 0.011, tec, tscsc));
556 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
558 auto pl = tsc->getValidParameters();
560 TEST_FLOATING_EQUALITY(pl->get<
double>(
"Initial Time"), 1.0, 1.0e-14);
561 TEST_FLOATING_EQUALITY(pl->get<
double>(
"Final Time"), 100.0, 1.0e-14);
562 TEST_FLOATING_EQUALITY(pl->get<
double>(
"Minimum Time Step"), 0.01, 1.0e-14);
563 TEST_FLOATING_EQUALITY(pl->get<
double>(
"Initial Time Step"), 0.02, 1.0e-14);
564 TEST_FLOATING_EQUALITY(pl->get<
double>(
"Maximum Time Step"), 0.05, 1.0e-14);
565 TEST_COMPARE(pl->get<
int>(
"Initial Time Index"), ==, -100);
566 TEST_COMPARE(pl->get<
int>(
"Final Time Index"), ==, 100);
567 TEST_FLOATING_EQUALITY(pl->get<
double>(
"Maximum Absolute Error"), 1.0e-06,
569 TEST_FLOATING_EQUALITY(pl->get<
double>(
"Maximum Relative Error"), 1.0e-06,
571 TEST_COMPARE(pl->get<
int>(
"Maximum Number of Stepper Failures"), ==, 8);
572 TEST_COMPARE(pl->get<
int>(
"Maximum Number of Consecutive Stepper Failures"),
574 TEST_COMPARE(pl->get<
int>(
"Number of Time Steps"), ==, -1);
575 TEST_COMPARE(pl->get<
bool>(
"Print Time Step Changes"), ==,
false);
576 TEST_COMPARE(pl->get<
bool>(
"Output Exactly On Output Times"), ==,
false);
577 TEST_COMPARE(pl->get<std::string>(
"Output Index List"), ==,
"7, 11, 13");
578 TEST_COMPARE(pl->get<std::string>(
"Output Time List"), ==,
579 "0.3, 0.7, 1.3, 1.7");
580 TEST_COMPARE(pl->get<
int>(
"Output Index Interval"), ==, 9);
581 TEST_FLOATING_EQUALITY(pl->get<
double>(
"Output Time Interval"), 0.011,
585 std::ostringstream unusedParameters;
586 pl->unused(unusedParameters);
587 TEST_COMPARE(unusedParameters.str(), ==,
588 "WARNING: Parameter \"Time Step Control Strategy\" "
589 "[unused] is unused\n");
592 auto tscs_PL = pl->sublist(
"Time Step Control Strategy");
593 TEST_COMPARE(tscs_PL.get<std::string>(
"Strategy Type"), ==,
"Constant");
594 TEST_FLOATING_EQUALITY(tscs_PL.get<
double>(
"Time Step"), 0.0, 1.0e-14);
597 std::ostringstream unusedParameters;
598 tscs_PL.unused(unusedParameters);
599 TEST_COMPARE(unusedParameters.str(), ==,
"");
608 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
610 tsc->setInitTime(0.0);
611 tsc->setFinalTime(100.0);
612 tsc->setMinTimeStep(0.01);
613 tsc->setInitTimeStep(0.02);
614 tsc->setMaxTimeStep(0.05);
615 tsc->setNumTimeSteps(-1);
617 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
619 TEST_FLOATING_EQUALITY(tsc->getInitTime(), 0.0, 1.0e-14);
620 TEST_FLOATING_EQUALITY(tsc->getFinalTime(), 100.0, 1.0e-14);
621 TEST_FLOATING_EQUALITY(tsc->getMinTimeStep(), 0.01, 1.0e-14);
622 TEST_FLOATING_EQUALITY(tsc->getInitTimeStep(), 0.02, 1.0e-14);
623 TEST_FLOATING_EQUALITY(tsc->getMaxTimeStep(), 0.05, 1.0e-14);
624 TEST_COMPARE(tsc->getNumTimeSteps(), ==, -1);
626 tsc->setNumTimeSteps(100);
629 TEST_FLOATING_EQUALITY(tsc->getInitTime(), 0.0, 1.0e-14);
630 TEST_FLOATING_EQUALITY(tsc->getFinalTime(), 100.0, 1.0e-14);
631 TEST_FLOATING_EQUALITY(tsc->getMinTimeStep(), 1.0, 1.0e-14);
632 TEST_FLOATING_EQUALITY(tsc->getInitTimeStep(), 1.0, 1.0e-14);
633 TEST_FLOATING_EQUALITY(tsc->getMaxTimeStep(), 1.0, 1.0e-14);
634 TEST_COMPARE(tsc->getNumTimeSteps(), ==, 100);
643 auto inArgsIC = model->getNominalValues();
644 auto icSolution = rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x());
645 auto icState = Tempus::createSolutionStateX<double>(icSolution);
647 solutionHistory->addState(icState);
649 solutionHistory->getCurrentState()->setTimeStep(dt);
653 std::vector<double> outputTimes;
654 double outputTime = 0.8;
655 outputTimes.push_back(outputTime);
656 tsc->setOutputTimes(outputTimes);
657 tsc->setOutputExactly(
true);
659 tsc->setTimeStepControlStrategy(tscs);
660 tsc->setMinTimeStep(dt / 2.0);
661 tsc->setInitTimeStep(dt);
662 tsc->setMaxTimeStep(2.0 * dt);
663 tsc->setPrintDtChanges(
true);
665 TEST_COMPARE(tsc->getOutputExactly(), ==,
true);
670 solutionHistory->initWorkingState();
671 auto currentState = solutionHistory->getCurrentState();
672 auto workingState = solutionHistory->getWorkingState();
674 tsc->setNextTimeStep(solutionHistory, status);
676 TEST_FLOATING_EQUALITY(workingState->getTimeStep(), outputTime, 1.0e-14);
677 TEST_FLOATING_EQUALITY(workingState->getTime(), outputTime, 1.0e-14);
678 TEST_COMPARE(workingState->getOutput(), ==,
true);
683 solutionHistory->promoteWorkingState();
687 solutionHistory->initWorkingState();
688 currentState = solutionHistory->getCurrentState();
689 workingState = solutionHistory->getWorkingState();
691 tsc->setNextTimeStep(solutionHistory, status);
693 TEST_FLOATING_EQUALITY(workingState->getTimeStep(), dt, 1.0e-14);
694 TEST_FLOATING_EQUALITY(currentState->getTime() + workingState->getTimeStep(),
695 workingState->getTime(), 1.0e-14);
697 TEST_COMPARE(workingState->getOutput(), ==,
false);
706 auto inArgsIC = model->getNominalValues();
707 auto icSolution = rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x());
708 auto icState = Tempus::createSolutionStateX<double>(icSolution);
710 solutionHistory->addState(icState);
712 solutionHistory->getCurrentState()->setTimeStep(dt);
716 std::vector<double> outputTimes;
717 double outputTime = 0.8;
718 outputTimes.push_back(outputTime);
719 tsc->setOutputTimes(outputTimes);
720 tsc->setMinTimeStep(dt / 2.0);
721 tsc->setInitTimeStep(dt);
722 tsc->setMaxTimeStep(2.0 * dt);
723 tsc->setOutputExactly(
false);
725 TEST_COMPARE(tsc->getOutputExactly(), ==,
false);
729 solutionHistory->initWorkingState();
730 auto currentState = solutionHistory->getCurrentState();
731 auto workingState = solutionHistory->getWorkingState();
733 tsc->setNextTimeStep(solutionHistory, status);
734 double timeN = workingState->getTime();
735 TEST_COMPARE(timeN, ==, dt);
737 TEST_COMPARE(workingState->getOutput(), ==,
true);
742 solutionHistory->promoteWorkingState();
745 solutionHistory->initWorkingState();
747 currentState = solutionHistory->getCurrentState();
748 workingState = solutionHistory->getWorkingState();
750 tsc->setNextTimeStep(solutionHistory, status);
751 timeN = workingState->getTime();
752 TEST_COMPARE((timeN), ==, 2 * dt);
754 double dtN = workingState->getTimeStep();
755 TEST_COMPARE(dt, ==, dtN);
757 TEST_COMPARE(workingState->getOutput(), ==,
false);
766 auto inArgsIC = model->getNominalValues();
767 auto icSolution = rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x());
768 auto icState = Tempus::createSolutionStateX<double>(icSolution);
770 solutionHistory->addState(icState);
772 solutionHistory->getCurrentState()->setTimeStep(dt);
776 std::vector<double> outputTimes;
777 double outputTime = 0.8;
778 outputTimes.push_back(outputTime);
779 tsc->setOutputTimes(outputTimes);
780 tsc->setOutputExactly(
true);
781 tsc->setTimeStepControlStrategy();
782 tsc->setInitTimeStep(dt);
787 for (
int i = 0; i < 10000; ++i) {
788 solutionHistory->initWorkingState();
789 tsc->setNextTimeStep(solutionHistory, status);
792 solutionHistory->getWorkingState()->setSolutionStatus(
795 solutionHistory->promoteWorkingState();
798 auto currentState = solutionHistory->getCurrentState();
799 double time = currentState->getTime();
800 TEST_COMPARE(std::fabs(time - 1.0), <, 1.0e-15);
808 auto pl = Tempus::getTimeStepControlPL<double>();
809 pl->remove(
"Time Step Control Strategy");
811 auto tsc = Tempus::createTimeStepControl<double>(pl,
false);
812 TEUCHOS_TEST_FOR_EXCEPT(tsc->isInitialized());
814 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
817 TEUCHOS_TEST_FOR_EXCEPT(!(tsc->getStepType() ==
"Constant"));
818 TEUCHOS_TEST_FOR_EXCEPT(
819 !(tsc->getTimeStepControlStrategy()->getStrategyType() ==
"Constant"));
823 auto pl = Tempus::getTimeStepControlPL<double>();
824 pl->remove(
"Time Step Control Strategy");
825 pl->set(
"Time Step Control Strategy",
826 *(Tempus::getTimeStepControlStrategyBasicVS_PL<double>()));
828 auto tsc = Tempus::createTimeStepControl<double>(pl);
829 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
832 TEUCHOS_TEST_FOR_EXCEPT(!(tsc->getStepType() ==
"Variable"));
833 TEUCHOS_TEST_FOR_EXCEPT(
834 !(tsc->getTimeStepControlStrategy()->getStrategyType() ==
"Basic VS"));
838 auto pl = Tempus::getTimeStepControlPL<double>();
839 pl->remove(
"Time Step Control Strategy");
841 "Time Step Control Strategy",
842 *(Tempus::getTimeStepControlStrategyIntegralControllerPL<double>()));
844 auto tsc = Tempus::createTimeStepControl<double>(pl);
845 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
848 TEUCHOS_TEST_FOR_EXCEPT(!(tsc->getStepType() ==
"Variable"));
849 TEUCHOS_TEST_FOR_EXCEPT(
850 !(tsc->getTimeStepControlStrategy()->getStrategyType() ==
851 "Integral Controller"));
855 auto pl = Tempus::getTimeStepControlPL<double>();
856 pl->remove(
"Time Step Control Strategy");
857 pl->set(
"Time Step Control Strategy",
858 *(Tempus::getTimeStepControlStrategyCompositePL<double>()));
860 auto tsc = Tempus::createTimeStepControl<double>(pl);
861 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
864 TEUCHOS_TEST_FOR_EXCEPT(!(tsc->getStepType() ==
"Constant"));
865 TEUCHOS_TEST_FOR_EXCEPT(
866 !(tsc->getTimeStepControlStrategy()->getStrategyType() ==
"Composite"));
870 auto pl = Tempus::getTimeStepControlPL<double>();
871 pl->remove(
"Time Step Control Strategy");
873 auto nonTempusStrategyPL =
874 Teuchos::parameterList(
"Time Step Control Strategy");
875 nonTempusStrategyPL->set<std::string>(
"Strategy Type",
876 "Application Strategy");
877 nonTempusStrategyPL->set<
double>(
"Secret Sauce", 1.2345);
879 pl->set(
"Time Step Control Strategy", *nonTempusStrategyPL);
881 auto tsc = Tempus::createTimeStepControl<double>(pl);
882 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
886 TEUCHOS_TEST_FOR_EXCEPT(!(tsc->getStepType() ==
"Constant"));
887 TEUCHOS_TEST_FOR_EXCEPT(
888 !(tsc->getTimeStepControlStrategy()->getStrategyType() ==
"Constant"));
899 temp->addStrategy(tscsBasicVS);
902 temp->addStrategy(tscsIntCtrl);
904 TEUCHOS_TEST_FOR_EXCEPT(!temp->isInitialized());
907 tsc->setTimeStepControlStrategy(temp);
909 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
911 Teuchos::RCP<Tempus::TimeStepControlStrategy<double>> strategy =
912 tsc->getTimeStepControlStrategy();
916 rcp_dynamic_cast<Tempus::TimeStepControlStrategyComposite<double>>(
919 TEST_COMPARE(tscsc->size(), ==, 2);
921 std::vector<Teuchos::RCP<Tempus::TimeStepControlStrategy<double>>>
922 strategies = tscsc->getStrategies();
924 auto strategyBasicVS =
925 Teuchos::rcp_dynamic_cast<Tempus::TimeStepControlStrategyBasicVS<double>>(
928 TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getStepType() !=
"Variable");
929 TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getAmplFactor() != 1.75);
930 TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getReductFactor() != 0.5);
931 TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getMinEta() != 0.0);
932 TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getMaxEta() != 1.0e+16);
934 auto strategyIC = Teuchos::rcp_dynamic_cast<
937 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getStepType() !=
"Variable");
938 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getController() !=
"PID");
939 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getKI() != 0.58);
940 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getKP() != 0.21);
941 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getKD() != 0.10);
942 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getSafetyFactor() != 0.90);
943 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getSafetyFactorAfterReject() != 0.90);
944 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getFacMax() != 5.0);
945 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getFacMin() != 0.5);