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);