32  TEUCHOS_TEST_FOR_EXCEPT(
 
   33      tscsc->isInitialized());  
 
   37  tscsc->addStrategy(tscsConstant);
 
   39  TEUCHOS_TEST_FOR_EXCEPT(!tscsc->isInitialized());
 
   41  TEST_COMPARE(tscsc->size(), ==, 1);
 
   43  std::vector<Teuchos::RCP<Tempus::TimeStepControlStrategy<double>>>
 
   44      strategies = tscsc->getStrategies();
 
   46  auto strategyConstant =
 
   47      rcp_dynamic_cast<Tempus::TimeStepControlStrategyConstant<double>>(
 
   50  TEUCHOS_TEST_FOR_EXCEPT(strategyConstant->getStepType() != 
"Constant");
 
   51  TEUCHOS_TEST_FOR_EXCEPT(strategyConstant->getConstantTimeStep() != 0.0);
 
 
   59  TEUCHOS_TEST_FOR_EXCEPT(
 
   60      tscsc->isInitialized());  
 
   63  tscsc->addStrategy(tscsBasicVS);
 
   66  tscsc->addStrategy(tscsIntCtrl);
 
   68  TEUCHOS_TEST_FOR_EXCEPT(!tscsc->isInitialized());
 
   70  TEST_COMPARE(tscsc->size(), ==, 2);
 
   72  std::vector<Teuchos::RCP<Tempus::TimeStepControlStrategy<double>>>
 
   73      strategies = tscsc->getStrategies();
 
   75  auto strategyBasicVS =
 
   76      rcp_dynamic_cast<Tempus::TimeStepControlStrategyBasicVS<double>>(
 
   78  TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getStrategyType() != 
"Basic VS");
 
   80  auto strategyIntCtrl = rcp_dynamic_cast<
 
   82  TEUCHOS_TEST_FOR_EXCEPT(strategyIntCtrl->getStrategyType() !=
 
   83                          "Integral Controller");
 
 
   96  tscsc_temp->addStrategy(tscs_BasicVS);
 
   97  tscsc_temp->addStrategy(tscs_IC);
 
   98  tscsc_temp->initialize();
 
   99  TEUCHOS_TEST_FOR_EXCEPT(!tscsc_temp->isInitialized());
 
  102      rcp_const_cast<Teuchos::ParameterList>(tscsc_temp->getValidParameters());
 
  104  auto tscsc = Tempus::createTimeStepControlStrategyComposite<double>(pl);
 
  106  TEST_COMPARE(tscsc->size(), ==, 2);
 
  108  std::vector<Teuchos::RCP<Tempus::TimeStepControlStrategy<double>>>
 
  109      strategies = tscsc->getStrategies();
 
  111  auto strategyBasicVS =
 
  112      Teuchos::rcp_dynamic_cast<Tempus::TimeStepControlStrategyBasicVS<double>>(
 
  115  TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getStepType() != 
"Variable");
 
  116  TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getAmplFactor() != 1.75);
 
  117  TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getReductFactor() != 0.5);
 
  118  TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getMinEta() != 0.0);
 
  119  TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getMaxEta() != 1.0e+16);
 
  121  auto strategyIC = Teuchos::rcp_dynamic_cast<
 
  124  TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getStepType() != 
"Variable");
 
  125  TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getController() != 
"PID");
 
  126  TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getKI() != 0.58);
 
  127  TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getKP() != 0.21);
 
  128  TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getKD() != 0.10);
 
  129  TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getSafetyFactor() != 0.90);
 
  130  TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getSafetyFactorAfterReject() != 0.90);
 
  131  TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getFacMax() != 5.0);
 
  132  TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getFacMin() != 0.5);
 
 
  145  tscsc_temp->addStrategy(tscs_BasicVS);
 
  146  tscsc_temp->addStrategy(tscs_IC);
 
  147  tscsc_temp->initialize();
 
  148  TEUCHOS_TEST_FOR_EXCEPT(!tscsc_temp->isInitialized());
 
  150  auto pl = tscsc_temp->getValidParameters();
 
  152  TEST_COMPARE(pl->get<std::string>(
"Strategy Type"), ==, 
"Composite");
 
  153  TEST_COMPARE(pl->get<std::string>(
"Strategy List"), ==,
 
  154               "Basic VS, Integral Controller");
 
  155  TEST_COMPARE(pl->isSublist(
"Basic VS"), ==, 
true);
 
  156  TEST_COMPARE(pl->isSublist(
"Integral Controller"), ==, 
true);
 
  159    std::ostringstream unusedParameters;
 
  160    pl->unused(unusedParameters);
 
  162        unusedParameters.str(), ==,
 
  163        "WARNING: Parameter \"Basic VS\"    [unused] is unused\n" 
  164        "WARNING: Parameter \"Integral Controller\"    [unused] is unused\n");
 
  167  auto BasicVS_PL = pl->sublist(
"Basic VS");
 
  168  TEST_COMPARE(BasicVS_PL.get<std::string>(
"Strategy Type"), ==, 
"Basic VS");
 
  169  TEST_FLOATING_EQUALITY(BasicVS_PL.get<
double>(
"Amplification Factor"), 1.75,
 
  171  TEST_FLOATING_EQUALITY(BasicVS_PL.get<
double>(
"Reduction Factor"), 0.5,
 
  173  TEST_FLOATING_EQUALITY(
 
  174      BasicVS_PL.get<
double>(
"Minimum Value Monitoring Function"), 0.0,
 
  176  TEST_FLOATING_EQUALITY(
 
  177      BasicVS_PL.get<
double>(
"Maximum Value Monitoring Function"), 1.0e+16,
 
  181    std::ostringstream unusedParameters;
 
  182    BasicVS_PL.unused(unusedParameters);
 
  183    TEST_COMPARE(unusedParameters.str(), ==, 
"");
 
  186  auto IntCtrl_PL = pl->sublist(
"Integral Controller");
 
  187  TEST_COMPARE(IntCtrl_PL.get<std::string>(
"Strategy Type"), ==,
 
  188               "Integral Controller");
 
  189  TEST_COMPARE(IntCtrl_PL.get<std::string>(
"Controller Type"), ==, 
"PID");
 
  190  TEST_FLOATING_EQUALITY(IntCtrl_PL.get<
double>(
"KI"), 0.58, 1.0e-14);
 
  191  TEST_FLOATING_EQUALITY(IntCtrl_PL.get<
double>(
"KP"), 0.21, 1.0e-14);
 
  192  TEST_FLOATING_EQUALITY(IntCtrl_PL.get<
double>(
"KD"), 0.1, 1.0e-14);
 
  193  TEST_FLOATING_EQUALITY(IntCtrl_PL.get<
double>(
"Safety Factor"), 0.9, 1.0e-14);
 
  194  TEST_FLOATING_EQUALITY(
 
  195      IntCtrl_PL.get<
double>(
"Safety Factor After Step Rejection"), 0.9,
 
  197  TEST_FLOATING_EQUALITY(IntCtrl_PL.get<
double>(
"Maximum Safety Factor"), 5.0,
 
  199  TEST_FLOATING_EQUALITY(IntCtrl_PL.get<
double>(
"Minimum Safety Factor"), 0.5,
 
  203    std::ostringstream unusedParameters;
 
  204    IntCtrl_PL.unused(unusedParameters);
 
  205    TEST_COMPARE(unusedParameters.str(), ==, 
"");
 
 
  214    auto pl = Tempus::getTimeStepControlStrategyCompositePL<double>();
 
  216    auto tscsc = Tempus::createTimeStepControlStrategyComposite<double>(pl);
 
  217    TEUCHOS_TEST_FOR_EXCEPT(!tscsc->isInitialized());
 
  219    std::vector<Teuchos::RCP<Tempus::TimeStepControlStrategy<double>>>
 
  220        strategies = tscsc->getStrategies();
 
  223    TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStepType() == 
"Constant"));
 
  224    TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategyType() == 
"Composite"));
 
  225    TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategies().size() == 1));
 
  226    TEUCHOS_TEST_FOR_EXCEPT(!(strategies[0]->getStepType() == 
"Constant"));
 
  227    TEUCHOS_TEST_FOR_EXCEPT(!(strategies[0]->getStrategyType() == 
"Constant"));
 
  231    auto pl = Tempus::getTimeStepControlStrategyCompositePL<double>();
 
  232    pl->set(
"Strategy List", 
"");
 
  233    pl->remove(
"Constant");
 
  235    auto tscsc = Tempus::createTimeStepControlStrategyComposite<double>(pl);
 
  236    TEUCHOS_TEST_FOR_EXCEPT(
 
  237        tscsc->isInitialized());  
 
  240    TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStepType() == 
"Variable"));
 
  241    TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategyType() == 
"Composite"));
 
  242    TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategies().size() == 0));
 
  246    auto pl = Tempus::getTimeStepControlStrategyCompositePL<double>();
 
  247    pl->remove(
"Constant");
 
  248    pl->set(
"Strategy List", 
"Application Strategy");
 
  250    auto nonTempusStrategyPL = Teuchos::parameterList(
"Application Strategy");
 
  251    nonTempusStrategyPL->set<std::string>(
"Strategy Type",
 
  252                                          "Application Strategy");
 
  253    nonTempusStrategyPL->set<
double>(
"Secret Sauce", 1.2345);
 
  254    pl->set(
"Application Strategy", *nonTempusStrategyPL);
 
  256    auto tscsc = Tempus::createTimeStepControlStrategyComposite<double>(pl);
 
  257    TEUCHOS_TEST_FOR_EXCEPT(
 
  258        tscsc->isInitialized());  
 
  261    TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStepType() == 
"Variable"));
 
  262    TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategyType() == 
"Composite"));
 
  263    TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategies().size() == 0));
 
  272    temp->addStrategy(tscsBasicVS);
 
  275    temp->addStrategy(tscsIntCtrl);
 
  279        rcp_const_cast<Teuchos::ParameterList>(temp->getValidParameters());
 
  280    auto sList = pl->get<std::string>(
"Strategy List");
 
  281    pl->set(
"Strategy List", sList + 
", Application Strategy");
 
  283    auto nonTempusStrategyPL = Teuchos::parameterList(
"Application Strategy");
 
  284    nonTempusStrategyPL->set<std::string>(
"Strategy Type",
 
  285                                          "Application Strategy");
 
  286    nonTempusStrategyPL->set<
double>(
"Secret Sauce", 1.2345);
 
  287    pl->set(
"Application Strategy", *nonTempusStrategyPL);
 
  289    auto tscsc = Tempus::createTimeStepControlStrategyComposite<double>(pl);
 
  290    TEUCHOS_TEST_FOR_EXCEPT(!tscsc->isInitialized());
 
  293    TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStepType() == 
"Variable"));
 
  294    TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategyType() == 
"Composite"));
 
  295    TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategies().size() == 2));