33 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
36 TEST_COMPARE(tsc->getStepType(), ==,
"Constant");
37 TEST_FLOATING_EQUALITY(tsc->getInitTime(), 0.0, 1.0e-14);
38 TEST_FLOATING_EQUALITY(tsc->getFinalTime(), 1.0e+99, 1.0e-14);
39 TEST_FLOATING_EQUALITY(tsc->getMinTimeStep(), 0.0, 1.0e-14);
40 TEST_FLOATING_EQUALITY(tsc->getInitTimeStep(), 1.0e+99, 1.0e-14);
41 TEST_FLOATING_EQUALITY(tsc->getMaxTimeStep(), 1.0e+99, 1.0e-14);
42 TEST_COMPARE(tsc->getInitIndex(), ==, 0);
43 TEST_COMPARE(tsc->getFinalIndex(), ==, 1000000);
44 TEST_FLOATING_EQUALITY(tsc->getMaxAbsError(), 1.0e-08, 1.0e-14);
45 TEST_FLOATING_EQUALITY(tsc->getMaxRelError(), 1.0e-08, 1.0e-14);
46 TEST_COMPARE(tsc->getMaxFailures(), ==, 10);
47 TEST_COMPARE(tsc->getMaxConsecFailures(), ==, 5);
48 TEST_COMPARE(tsc->getNumTimeSteps(), ==, -1);
49 TEST_COMPARE(tsc->getPrintDtChanges(), ==,
true);
50 TEST_COMPARE(tsc->getOutputExactly(), ==,
true);
51 TEST_COMPARE(tsc->getOutputIndexInterval(), ==, 1000000);
52 TEST_FLOATING_EQUALITY(tsc->getOutputTimeInterval(), 1.0e+99, 1.0e-14);
53 auto tec = tsc->getTimeEvents();
54 TEST_COMPARE(tec->getSize(), ==, 2);
55 TEST_COMPARE(tec->getTimeEventNames(), ==,
56 "Output Index Interval, Output Time Interval");
59 tsc->setInitTime(1.0);
61 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
62 tsc->setFinalTime(100.0);
64 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
65 tsc->setMinTimeStep(0.01);
67 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
68 tsc->setInitTimeStep(0.02);
70 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
71 tsc->setMaxTimeStep(0.05);
73 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
74 tsc->setInitIndex(-100);
76 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
77 tsc->setFinalIndex(100);
79 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
80 tsc->setMaxAbsError(1.0e-06);
82 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
83 tsc->setMaxRelError(1.0e-06);
85 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
86 tsc->setMaxFailures(8);
88 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
89 tsc->setMaxConsecFailures(4);
91 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
92 tsc->setNumTimeSteps(-1);
94 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
95 tsc->setPrintDtChanges(
false);
97 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
98 tsc->setOutputExactly(
false);
100 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
101 tsc->setOutputIndexInterval(9);
103 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
104 tsc->setOutputTimeInterval(0.1);
106 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
108 TEST_COMPARE(tsc->getStepType(), ==,
"Constant");
109 TEST_FLOATING_EQUALITY(tsc->getInitTime(), 1.0, 1.0e-14);
110 TEST_FLOATING_EQUALITY(tsc->getFinalTime(), 100.0, 1.0e-14);
111 TEST_FLOATING_EQUALITY(tsc->getMinTimeStep(), 0.01, 1.0e-14);
112 TEST_FLOATING_EQUALITY(tsc->getInitTimeStep(), 0.02, 1.0e-14);
113 TEST_FLOATING_EQUALITY(tsc->getMaxTimeStep(), 0.05, 1.0e-14);
114 TEST_COMPARE(tsc->getInitIndex(), ==, -100);
115 TEST_COMPARE(tsc->getFinalIndex(), ==, 100);
116 TEST_FLOATING_EQUALITY(tsc->getMaxAbsError(), 1.0e-06, 1.0e-14);
117 TEST_FLOATING_EQUALITY(tsc->getMaxRelError(), 1.0e-06, 1.0e-14);
118 TEST_COMPARE(tsc->getMaxFailures(), ==, 8);
119 TEST_COMPARE(tsc->getMaxConsecFailures(), ==, 4);
120 TEST_COMPARE(tsc->getNumTimeSteps(), ==, -1);
121 TEST_COMPARE(tsc->getPrintDtChanges(), ==,
false);
122 TEST_COMPARE(tsc->getOutputExactly(), ==,
false);
123 TEST_COMPARE(tsc->getOutputIndexInterval(), ==, 9);
124 TEST_FLOATING_EQUALITY(tsc->getOutputTimeInterval(), 0.1, 1.0e-14);
129 ter->setName(
"Test Range");
130 tel->setName(
"Test List");
133 tsc->setTimeEvents(tecTmp);
134 tec = tsc->getTimeEvents();
135 TEST_COMPARE(tec->getSize(), ==, 2);
136 TEST_COMPARE(tec->getTimeEventNames(), ==,
"Test Range, Test List");
143 std::vector<int> outputIndices;
144 outputIndices.push_back(7);
145 outputIndices.push_back(11);
146 outputIndices.push_back(13);
148 std::vector<double> outputTimes;
149 outputTimes.push_back(0.3);
150 outputTimes.push_back(0.7);
151 outputTimes.push_back(1.3);
152 outputTimes.push_back(1.7);
159 ter->setName(
"Test Range");
160 teri->setName(
"Test Range Index");
161 tel->setName(
"Test List");
162 teli->setName(
"Test List Index");
193 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
195 TEST_COMPARE(tsc->getStepType(), ==,
"Constant");
196 TEST_FLOATING_EQUALITY(tsc->getInitTime(), 1.0, 1.0e-14);
197 TEST_FLOATING_EQUALITY(tsc->getFinalTime(), 100.0, 1.0e-14);
198 TEST_FLOATING_EQUALITY(tsc->getMinTimeStep(), 0.01, 1.0e-14);
199 TEST_FLOATING_EQUALITY(tsc->getInitTimeStep(), 0.02, 1.0e-14);
200 TEST_FLOATING_EQUALITY(tsc->getMaxTimeStep(), 0.05, 1.0e-14);
201 TEST_COMPARE(tsc->getInitIndex(), ==, -100);
202 TEST_COMPARE(tsc->getFinalIndex(), ==, 100);
203 TEST_FLOATING_EQUALITY(tsc->getMaxAbsError(), 1.0e-06, 1.0e-14);
204 TEST_FLOATING_EQUALITY(tsc->getMaxRelError(), 1.0e-06, 1.0e-14);
205 TEST_COMPARE(tsc->getMaxFailures(), ==, 8);
206 TEST_COMPARE(tsc->getMaxConsecFailures(), ==, 4);
207 TEST_COMPARE(tsc->getNumTimeSteps(), ==, -1);
208 TEST_COMPARE(tsc->getPrintDtChanges(), ==,
false);
209 TEST_COMPARE(tsc->getOutputExactly(), ==,
false);
210 TEST_COMPARE(tsc->getOutputIndexInterval(), ==, 9);
211 TEST_FLOATING_EQUALITY(tsc->getOutputTimeInterval(), 0.011, 1.0e-14);
212 auto tec = tsc->getTimeEvents();
213 TEST_COMPARE(tec->getSize(), ==, 8);
215 tec->getTimeEventNames(), ==,
216 "Test Range, Test Range Index, Test List, Test List Index, Output Time "
217 "Interval, Output Time List, Output Index Interval, Output Index List");
224 Teuchos::RCP<Teuchos::ParameterList> pl =
227 pl->set<
double>(
"Initial Time", 1.0);
228 pl->set<
double>(
"Final Time", 100.0);
229 pl->set<
double>(
"Minimum Time Step", 0.01);
230 pl->set<
double>(
"Initial Time Step", 0.02);
231 pl->set<
double>(
"Maximum Time Step", 0.05);
232 pl->set<
int>(
"Initial Time Index", -100);
233 pl->set<
int>(
"Final Time Index", 100);
234 pl->set<
double>(
"Maximum Absolute Error", 1.0e-06);
235 pl->set<
double>(
"Maximum Relative Error", 1.0e-06);
236 pl->set<
int>(
"Maximum Number of Stepper Failures", 8);
237 pl->set<
int>(
"Maximum Number of Consecutive Stepper Failures", 4);
238 pl->set<
int>(
"Number of Time Steps", -1);
239 pl->set<
bool>(
"Print Time Step Changes",
false);
240 pl->set<
bool>(
"Output Exactly On Output Times",
false);
241 pl->set<std::string>(
"Output Index List",
"7, 11, 13");
242 pl->set<std::string>(
"Output Time List",
"0.3, 0.7, 1.3, 1.7");
243 pl->set<
int>(
"Output Index Interval", 9);
244 pl->set<
double>(
"Output Time Interval", 0.011);
247 auto tscsPL = tscs->getValidParameters();
248 pl->set(
"Time Step Control Strategy", *tscsPL);
255 ter->setName(
"Test Range");
256 teri->setName(
"Test Range Index");
257 tel->setName(
"Test List");
258 teli->setName(
"Test List Index");
263 auto tecPL = rcp_const_cast<ParameterList>(tec->getValidParameters());
264 pl->set(
"Time Step Control Events", *tecPL);
267 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
269 tsc->describe(out, Teuchos::VERB_EXTREME);
271 TEST_COMPARE(tsc->getStepType(), ==,
"Constant");
272 TEST_FLOATING_EQUALITY(tsc->getInitTime(), 1.0, 1.0e-14);
273 TEST_FLOATING_EQUALITY(tsc->getFinalTime(), 100.0, 1.0e-14);
274 TEST_FLOATING_EQUALITY(tsc->getMinTimeStep(), 0.01, 1.0e-14);
275 TEST_FLOATING_EQUALITY(tsc->getInitTimeStep(), 0.02, 1.0e-14);
276 TEST_FLOATING_EQUALITY(tsc->getMaxTimeStep(), 0.05, 1.0e-14);
277 TEST_COMPARE(tsc->getInitIndex(), ==, -100);
278 TEST_COMPARE(tsc->getFinalIndex(), ==, 100);
279 TEST_FLOATING_EQUALITY(tsc->getMaxAbsError(), 1.0e-06, 1.0e-14);
280 TEST_FLOATING_EQUALITY(tsc->getMaxRelError(), 1.0e-06, 1.0e-14);
281 TEST_COMPARE(tsc->getMaxFailures(), ==, 8);
282 TEST_COMPARE(tsc->getMaxConsecFailures(), ==, 4);
283 TEST_COMPARE(tsc->getNumTimeSteps(), ==, -1);
284 TEST_COMPARE(tsc->getPrintDtChanges(), ==,
false);
285 TEST_COMPARE(tsc->getOutputExactly(), ==,
false);
286 TEST_COMPARE(tsc->getOutputIndices()[0], ==, 7);
287 TEST_COMPARE(tsc->getOutputIndices()[1], ==, 11);
288 TEST_COMPARE(tsc->getOutputIndices()[2], ==, 13);
289 TEST_FLOATING_EQUALITY(tsc->getOutputTimes()[0], 0.3, 1.0e-14);
290 TEST_FLOATING_EQUALITY(tsc->getOutputTimes()[1], 0.7, 1.0e-14);
291 TEST_FLOATING_EQUALITY(tsc->getOutputTimes()[2], 1.3, 1.0e-14);
292 TEST_FLOATING_EQUALITY(tsc->getOutputTimes()[3], 1.7, 1.0e-14);
293 TEST_COMPARE(tsc->getOutputIndexInterval(), ==, 9);
294 TEST_FLOATING_EQUALITY(tsc->getOutputTimeInterval(), 0.011, 1.0e-14);
296 tec = tsc->getTimeEvents();
297 TEST_COMPARE(tec->getSize(), ==, 8);
299 tec->getTimeEventNames(), ==,
300 "Output Index List, Output Index Interval, Output Time List, Output Time "
301 "Interval, Test Range, Test Range Index, Test List, Test List Index");
313 double dLast = 0.989;
316 tsc->setInitTime(dFirst);
317 TEST_COMPARE(tsc->getInitTime(), ==, dFirst);
318 tsc->setFinalTime(dLast);
319 TEST_COMPARE(tsc->getFinalTime(), ==, dLast);
320 tsc->setMinTimeStep(dStep);
321 TEST_COMPARE(tsc->getMinTimeStep(), ==, dStep);
322 tsc->setInitTimeStep(dStep);
323 TEST_COMPARE(tsc->getInitTimeStep(), ==, dStep);
324 tsc->setMaxTimeStep(dLast);
325 TEST_COMPARE(tsc->getMaxTimeStep(), ==, dLast);
326 tsc->setInitIndex(iFirst);
327 TEST_COMPARE(tsc->getInitIndex(), ==, iFirst);
328 tsc->setFinalIndex(iLast);
329 TEST_COMPARE(tsc->getFinalIndex(), ==, iLast);
330 tsc->setMaxAbsError(dStep);
331 TEST_COMPARE(tsc->getMaxAbsError(), ==, dStep);
332 tsc->setMaxRelError(dStep);
333 TEST_COMPARE(tsc->getMaxRelError(), ==, dStep);
334 tsc->setOutputExactly(
false);
335 TEST_COMPARE(tsc->getOutputExactly(), ==,
false);
336 tsc->setOutputExactly(
true);
337 TEST_COMPARE(tsc->getOutputExactly(), ==,
true);
339 std::vector<int> iVSet{0, 1, 2, 3, 5, 8, 13, 21, 34};
340 tsc->setOutputIndices(iVSet);
341 TEUCHOS_TEST_FOR_EXCEPT(tsc->getOutputIndices() != iVSet);
343 tsc->setOutputIndexInterval(iStep);
344 TEST_COMPARE(tsc->getOutputIndexInterval(), ==, iStep);
345 tsc->setOutputTimeInterval(dStep);
346 TEST_COMPARE(tsc->getOutputTimeInterval(), ==, dStep);
355 std::vector<double> times_in;
356 times_in.push_back(0.0000000000000000e-11);
357 times_in.push_back(0.1001384570000000e-11);
358 times_in.push_back(0.2002769140000000e-11);
359 times_in.push_back(0.3004153710000000e-11);
360 times_in.push_back(0.4005538280000000e-11);
361 times_in.push_back(0.5006922850000000e-11);
362 times_in.push_back(0.6008307420000000e-11);
363 times_in.push_back(0.7009691990000000e-11);
364 times_in.push_back(0.8011076560000000e-11);
365 times_in.push_back(0.9012461130000000e-11);
366 times_in.push_back(1.0013845700000000e-11);
368 tsc->setOutputTimes(times_in);
370 auto times_out = tsc->getOutputTimes();
371 double maxDiff = 0.0;
374 for (
size_t i = 0; i < times_in.size(); ++i) {
378 maxDiff = std::max(std::fabs(times_in[i] - times_out[i]), maxDiff);
382 TEST_COMPARE(maxDiff, <, 1.0e-25);
385 times_in.push_back(0.00000000000000000000000000000000);
386 times_in.push_back(0.00000000000100138457000000009381);
387 times_in.push_back(0.00000000000200276914000000018762);
388 times_in.push_back(0.00000000000300415371000000007949);
389 times_in.push_back(0.00000000000400553828000000037525);
390 times_in.push_back(0.00000000000500692284999999986321);
391 times_in.push_back(0.00000000000600830742000000015898);
392 times_in.push_back(0.00000000000700969198999999964694);
393 times_in.push_back(0.00000000000801107656000000075050);
394 times_in.push_back(0.00000000000901246112999999943067);
395 times_in.push_back(0.00000000001001384569999999972643);
397 tsc->setOutputTimes(times_in);
399 times_out = tsc->getOutputTimes();
403 for (
size_t i = 0; i < times_in.size(); ++i) {
407 maxDiff = std::max(std::fabs(times_in[i] - times_out[i]), maxDiff);
411 TEST_COMPARE(maxDiff, <, 1.0e-25);
437 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
440 auto testTimeInRange = [=](
double initTime,
double finalTime) {
441 tsc->setInitTime(initTime);
442 tsc->setFinalTime(finalTime);
444 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
446 const int i = (initTime == 0)
448 : 1 + (int)std::floor(std::log10(std::fabs(initTime)));
449 const double absTolInit10 = std::pow(10, i - 10);
450 const double absTolInit15 = std::pow(10, i - 15);
451 const int j = (finalTime == 0)
453 : 1 + (int)std::floor(std::log10(std::fabs(finalTime)));
454 const double absTolFinal10 = std::pow(10, j - 10);
455 const double absTolFinal15 = std::pow(10, j - 15);
458 if (initTime == 0.0) {
459 TEUCHOS_TEST_FOR_EXCEPT(tsc->timeInRange(initTime - 0.1));
462 TEUCHOS_TEST_FOR_EXCEPT(
463 tsc->timeInRange(initTime - 0.1 * std::fabs(initTime)));
465 TEUCHOS_TEST_FOR_EXCEPT(tsc->timeInRange(initTime - absTolInit10));
466 TEUCHOS_TEST_FOR_EXCEPT(!tsc->timeInRange(initTime - absTolInit15));
467 TEUCHOS_TEST_FOR_EXCEPT(!tsc->timeInRange(initTime));
468 TEUCHOS_TEST_FOR_EXCEPT(!tsc->timeInRange(initTime + absTolInit15));
469 TEUCHOS_TEST_FOR_EXCEPT(!tsc->timeInRange(initTime + absTolInit10));
470 TEUCHOS_TEST_FOR_EXCEPT(
471 !tsc->timeInRange(initTime + 0.3 * (std::fabs(finalTime - initTime))));
472 TEUCHOS_TEST_FOR_EXCEPT(!tsc->timeInRange(finalTime - absTolFinal10));
473 TEUCHOS_TEST_FOR_EXCEPT(tsc->timeInRange(finalTime - absTolFinal15));
474 TEUCHOS_TEST_FOR_EXCEPT(tsc->timeInRange(finalTime));
475 TEUCHOS_TEST_FOR_EXCEPT(tsc->timeInRange(finalTime + absTolFinal15));
476 TEUCHOS_TEST_FOR_EXCEPT(tsc->timeInRange(finalTime + absTolFinal10));
477 if (finalTime == 0.0) {
478 TEUCHOS_TEST_FOR_EXCEPT(tsc->timeInRange(finalTime + 0.1));
481 TEUCHOS_TEST_FOR_EXCEPT(
482 tsc->timeInRange(finalTime + 0.1 * std::fabs(finalTime)));
487 testTimeInRange(0.0, 1.0);
490 testTimeInRange(-1.0, 0.0);
493 testTimeInRange(9.9e-20, 3.3e+20);
494 testTimeInRange(-1.9e+20, 2.3e-20);
502 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
505 auto testIndexInRange = [=](
double initIndex,
double finalIndex) {
506 tsc->setInitIndex(initIndex);
507 tsc->setFinalIndex(finalIndex);
509 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
512 TEUCHOS_TEST_FOR_EXCEPT(tsc->indexInRange(initIndex - 7));
513 TEUCHOS_TEST_FOR_EXCEPT(tsc->indexInRange(initIndex - 1));
514 TEUCHOS_TEST_FOR_EXCEPT(!tsc->indexInRange(initIndex));
515 TEUCHOS_TEST_FOR_EXCEPT(!tsc->indexInRange(initIndex + 1));
516 TEUCHOS_TEST_FOR_EXCEPT(!tsc->indexInRange(
517 initIndex + (
int)0.3 * (std::fabs(finalIndex - initIndex))));
518 TEUCHOS_TEST_FOR_EXCEPT(!tsc->indexInRange(finalIndex - 1));
519 TEUCHOS_TEST_FOR_EXCEPT(tsc->indexInRange(finalIndex));
520 TEUCHOS_TEST_FOR_EXCEPT(tsc->indexInRange(finalIndex + 1));
521 TEUCHOS_TEST_FOR_EXCEPT(tsc->indexInRange(finalIndex + 7));
525 testIndexInRange(0, 10);
528 testIndexInRange(-10, 0);
531 testIndexInRange(-190000, 20);
532 testIndexInRange(-19, 200000);
539 std::vector<int> outputIndices;
540 outputIndices.push_back(7);
541 outputIndices.push_back(11);
542 outputIndices.push_back(13);
544 std::vector<double> outputTimes;
545 outputTimes.push_back(0.3);
546 outputTimes.push_back(0.7);
547 outputTimes.push_back(1.3);
548 outputTimes.push_back(1.7);
555 1.0, 100.0, 0.01, 0.02, 0.05, -100, 100, 1.0e-06, 1.0e-06, 8, 4, -1,
556 false,
false, outputIndices, outputTimes, 9, 0.011, tec, tscsc));
557 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
559 auto pl = tsc->getValidParameters();
561 TEST_FLOATING_EQUALITY(pl->get<
double>(
"Initial Time"), 1.0, 1.0e-14);
562 TEST_FLOATING_EQUALITY(pl->get<
double>(
"Final Time"), 100.0, 1.0e-14);
563 TEST_FLOATING_EQUALITY(pl->get<
double>(
"Minimum Time Step"), 0.01, 1.0e-14);
564 TEST_FLOATING_EQUALITY(pl->get<
double>(
"Initial Time Step"), 0.02, 1.0e-14);
565 TEST_FLOATING_EQUALITY(pl->get<
double>(
"Maximum Time Step"), 0.05, 1.0e-14);
566 TEST_COMPARE(pl->get<
int>(
"Initial Time Index"), ==, -100);
567 TEST_COMPARE(pl->get<
int>(
"Final Time Index"), ==, 100);
568 TEST_FLOATING_EQUALITY(pl->get<
double>(
"Maximum Absolute Error"), 1.0e-06,
570 TEST_FLOATING_EQUALITY(pl->get<
double>(
"Maximum Relative Error"), 1.0e-06,
572 TEST_COMPARE(pl->get<
int>(
"Maximum Number of Stepper Failures"), ==, 8);
573 TEST_COMPARE(pl->get<
int>(
"Maximum Number of Consecutive Stepper Failures"),
575 TEST_COMPARE(pl->get<
int>(
"Number of Time Steps"), ==, -1);
576 TEST_COMPARE(pl->get<
bool>(
"Print Time Step Changes"), ==,
false);
577 TEST_COMPARE(pl->get<
bool>(
"Output Exactly On Output Times"), ==,
false);
578 TEST_COMPARE(pl->get<std::string>(
"Output Index List"), ==,
"7, 11, 13");
579 TEST_COMPARE(pl->get<std::string>(
"Output Time List"), ==,
580 "0.3, 0.7, 1.3, 1.7");
581 TEST_COMPARE(pl->get<
int>(
"Output Index Interval"), ==, 9);
582 TEST_FLOATING_EQUALITY(pl->get<
double>(
"Output Time Interval"), 0.011,
586 std::ostringstream unusedParameters;
587 pl->unused(unusedParameters);
588 TEST_COMPARE(unusedParameters.str(), ==,
589 "WARNING: Parameter \"Time Step Control Strategy\" "
590 "[unused] is unused\n");
593 auto tscs_PL = pl->sublist(
"Time Step Control Strategy");
594 TEST_COMPARE(tscs_PL.get<std::string>(
"Strategy Type"), ==,
"Constant");
595 TEST_FLOATING_EQUALITY(tscs_PL.get<
double>(
"Time Step"), 0.0, 1.0e-14);
598 std::ostringstream unusedParameters;
599 tscs_PL.unused(unusedParameters);
600 TEST_COMPARE(unusedParameters.str(), ==,
"");
609 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
611 tsc->setInitTime(0.0);
612 tsc->setFinalTime(100.0);
613 tsc->setMinTimeStep(0.01);
614 tsc->setInitTimeStep(0.02);
615 tsc->setMaxTimeStep(0.05);
616 tsc->setNumTimeSteps(-1);
618 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
620 TEST_FLOATING_EQUALITY(tsc->getInitTime(), 0.0, 1.0e-14);
621 TEST_FLOATING_EQUALITY(tsc->getFinalTime(), 100.0, 1.0e-14);
622 TEST_FLOATING_EQUALITY(tsc->getMinTimeStep(), 0.01, 1.0e-14);
623 TEST_FLOATING_EQUALITY(tsc->getInitTimeStep(), 0.02, 1.0e-14);
624 TEST_FLOATING_EQUALITY(tsc->getMaxTimeStep(), 0.05, 1.0e-14);
625 TEST_COMPARE(tsc->getNumTimeSteps(), ==, -1);
627 tsc->setNumTimeSteps(100);
630 TEST_FLOATING_EQUALITY(tsc->getInitTime(), 0.0, 1.0e-14);
631 TEST_FLOATING_EQUALITY(tsc->getFinalTime(), 100.0, 1.0e-14);
632 TEST_FLOATING_EQUALITY(tsc->getMinTimeStep(), 1.0, 1.0e-14);
633 TEST_FLOATING_EQUALITY(tsc->getInitTimeStep(), 1.0, 1.0e-14);
634 TEST_FLOATING_EQUALITY(tsc->getMaxTimeStep(), 1.0, 1.0e-14);
635 TEST_COMPARE(tsc->getNumTimeSteps(), ==, 100);
644 auto inArgsIC = model->getNominalValues();
645 auto icSolution = rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x());
648 solutionHistory->addState(icState);
650 solutionHistory->getCurrentState()->setTimeStep(dt);
654 std::vector<double> outputTimes;
655 double outputTime = 0.8;
656 outputTimes.push_back(outputTime);
657 tsc->setOutputTimes(outputTimes);
658 tsc->setOutputExactly(
true);
660 tsc->setTimeStepControlStrategy(tscs);
661 tsc->setMinTimeStep(dt / 2.0);
662 tsc->setInitTimeStep(dt);
663 tsc->setMaxTimeStep(2.0 * dt);
664 tsc->setPrintDtChanges(
true);
666 TEST_COMPARE(tsc->getOutputExactly(), ==,
true);
671 solutionHistory->initWorkingState();
672 auto currentState = solutionHistory->getCurrentState();
673 auto workingState = solutionHistory->getWorkingState();
675 tsc->setNextTimeStep(solutionHistory, status);
677 TEST_FLOATING_EQUALITY(workingState->getTimeStep(), outputTime, 1.0e-14);
678 TEST_FLOATING_EQUALITY(workingState->getTime(), outputTime, 1.0e-14);
679 TEST_COMPARE(workingState->getOutput(), ==,
true);
684 solutionHistory->promoteWorkingState();
688 solutionHistory->initWorkingState();
689 currentState = solutionHistory->getCurrentState();
690 workingState = solutionHistory->getWorkingState();
692 tsc->setNextTimeStep(solutionHistory, status);
694 TEST_FLOATING_EQUALITY(workingState->getTimeStep(), dt, 1.0e-14);
695 TEST_FLOATING_EQUALITY(currentState->getTime() + workingState->getTimeStep(),
696 workingState->getTime(), 1.0e-14);
698 TEST_COMPARE(workingState->getOutput(), ==,
false);
709 auto inArgsIC = model->getNominalValues();
710 auto icSolution = rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x());
713 solutionHistory->addState(icState);
715 solutionHistory->getCurrentState()->setTimeStep(dt);
721 std::vector<double> outputTimes(1, 0.8);
722 tsc->setOutputTimes(outputTimes);
723 tsc->setOutputExactly(
true);
725 std::vector<double>(1, 0.5),
"Other Time List",
true)));
727 tsc->setTimeStepControlStrategy(tscs);
728 tsc->setMinTimeStep(0.1);
729 tsc->setInitTimeStep(dt);
730 tsc->setMaxTimeStep(2.0 * dt);
736 solutionHistory->initWorkingState();
737 auto workingState = solutionHistory->getWorkingState();
738 tsc->setNextTimeStep(solutionHistory, status);
739 TEST_FLOATING_EQUALITY(workingState->getTime(), 0.5, 1.0e-14);
740 TEST_COMPARE(workingState->getOutput(), ==,
false);
742 solutionHistory->promoteWorkingState();
746 solutionHistory->initWorkingState();
747 workingState = solutionHistory->getWorkingState();
748 tsc->setNextTimeStep(solutionHistory, status);
749 TEST_FLOATING_EQUALITY(workingState->getTime(), 0.8, 1.0e-14);
750 TEST_COMPARE(workingState->getOutput(), ==,
true);
759 auto inArgsIC = model->getNominalValues();
760 auto icSolution = rcp_const_cast<Thyra::VectorBase<double>>(inArgsIC.get_x());
763 solutionHistory->addState(icState);
765 solutionHistory->getCurrentState()->setTimeStep(dt);
769 std::vector<double> outputTimes;
770 double outputTime = 0.8;
771 outputTimes.push_back(outputTime);
772 tsc->setOutputTimes(outputTimes);
773 tsc->setMinTimeStep(dt / 2.0);
774 tsc->setInitTimeStep(dt);
775 tsc->setMaxTimeStep(2.0 * dt);
776 tsc->setOutputExactly(
false);
778 TEST_COMPARE(tsc->getOutputExactly(), ==,
false);
782 solutionHistory->initWorkingState();
783 auto currentState = solutionHistory->getCurrentState();
784 auto workingState = solutionHistory->getWorkingState();
786 tsc->setNextTimeStep(solutionHistory, status);
787 double timeN = workingState->getTime();
788 TEST_COMPARE(timeN, ==, dt);
790 TEST_COMPARE(workingState->getOutput(), ==,
true);
795 solutionHistory->promoteWorkingState();
798 solutionHistory->initWorkingState();
800 currentState = solutionHistory->getCurrentState();
801 workingState = solutionHistory->getWorkingState();
803 tsc->setNextTimeStep(solutionHistory, status);
804 timeN = workingState->getTime();
805 TEST_COMPARE((timeN), ==, 2 * dt);
807 double dtN = workingState->getTimeStep();
808 TEST_COMPARE(dt, ==, dtN);
810 TEST_COMPARE(workingState->getOutput(), ==,
false);
952 temp->addStrategy(tscsBasicVS);
955 temp->addStrategy(tscsIntCtrl);
957 TEUCHOS_TEST_FOR_EXCEPT(!temp->isInitialized());
960 tsc->setTimeStepControlStrategy(temp);
962 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
964 Teuchos::RCP<Tempus::TimeStepControlStrategy<double>> strategy =
965 tsc->getTimeStepControlStrategy();
969 rcp_dynamic_cast<Tempus::TimeStepControlStrategyComposite<double>>(
972 TEST_COMPARE(tscsc->size(), ==, 2);
974 std::vector<Teuchos::RCP<Tempus::TimeStepControlStrategy<double>>>
975 strategies = tscsc->getStrategies();
977 auto strategyBasicVS =
978 Teuchos::rcp_dynamic_cast<Tempus::TimeStepControlStrategyBasicVS<double>>(
981 TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getStepType() !=
"Variable");
982 TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getAmplFactor() != 1.75);
983 TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getReductFactor() != 0.5);
984 TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getMinEta() != 0.0);
985 TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getMaxEta() != 1.0e+16);
987 auto strategyIC = Teuchos::rcp_dynamic_cast<
990 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getStepType() !=
"Variable");
991 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getController() !=
"PID");
992 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getKI() != 0.58);
993 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getKP() != 0.21);
994 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getKD() != 0.10);
995 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getSafetyFactor() != 0.90);
996 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getSafetyFactorAfterReject() != 0.90);
997 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getFacMax() != 5.0);
998 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getFacMin() != 0.5);