11 #include "Tempus_TimeStepControl.hpp"
17 namespace Tempus_Unit_Test {
22 using Teuchos::rcp_const_cast;
23 using Teuchos::rcp_dynamic_cast;
24 using Teuchos::sublist;
32 tscsc->isInitialized());
36 tscsc->addStrategy(tscsConstant);
42 std::vector<Teuchos::RCP<Tempus::TimeStepControlStrategy<double>>>
43 strategies = tscsc->getStrategies();
45 auto strategyConstant =
59 tscsc->isInitialized());
62 tscsc->addStrategy(tscsBasicVS);
65 tscsc->addStrategy(tscsIntCtrl);
71 std::vector<Teuchos::RCP<Tempus::TimeStepControlStrategy<double>>>
72 strategies = tscsc->getStrategies();
74 auto strategyBasicVS =
79 auto strategyIntCtrl = rcp_dynamic_cast<
82 "Integral Controller");
95 tscsc_temp->addStrategy(tscs_BasicVS);
96 tscsc_temp->addStrategy(tscs_IC);
97 tscsc_temp->initialize();
103 auto tscsc = Tempus::createTimeStepControlStrategyComposite<double>(pl);
107 std::vector<Teuchos::RCP<Tempus::TimeStepControlStrategy<double>>>
108 strategies = tscsc->getStrategies();
110 auto strategyBasicVS =
116 TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getReductFactor() != 0.5);
117 TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getMinEta() != 0.0);
118 TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getMaxEta() != 1.0e+16);
120 auto strategyIC = Teuchos::rcp_dynamic_cast<
123 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getStepType() !=
"Variable");
124 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getController() !=
"PID");
125 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getKI() != 0.58);
126 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getKP() != 0.21);
127 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getKD() != 0.10);
128 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getSafetyFactor() != 0.90);
129 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getSafetyFactorAfterReject() != 0.90);
130 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getFacMax() != 5.0);
131 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getFacMin() != 0.5);
144 tscsc_temp->addStrategy(tscs_BasicVS);
145 tscsc_temp->addStrategy(tscs_IC);
146 tscsc_temp->initialize();
149 auto pl = tscsc_temp->getValidParameters();
151 TEST_COMPARE(pl->get<std::string>(
"Strategy Type"), ==,
"Composite");
153 "Basic VS, Integral Controller");
155 TEST_COMPARE(pl->isSublist(
"Integral Controller"), ==,
true);
158 std::ostringstream unusedParameters;
159 pl->unused(unusedParameters);
161 unusedParameters.str(), ==,
162 "WARNING: Parameter \"Basic VS\" [unused] is unused\n"
163 "WARNING: Parameter \"Integral Controller\" [unused] is unused\n");
166 auto BasicVS_PL = pl->sublist(
"Basic VS");
167 TEST_COMPARE(BasicVS_PL.get<std::string>(
"Strategy Type"), ==,
"Basic VS");
173 BasicVS_PL.get<
double>(
"Minimum Value Monitoring Function"), 0.0,
176 BasicVS_PL.get<
double>(
"Maximum Value Monitoring Function"), 1.0e+16,
180 std::ostringstream unusedParameters;
181 BasicVS_PL.unused(unusedParameters);
185 auto IntCtrl_PL = pl->sublist(
"Integral Controller");
186 TEST_COMPARE(IntCtrl_PL.get<std::string>(
"Strategy Type"), ==,
187 "Integral Controller");
188 TEST_COMPARE(IntCtrl_PL.get<std::string>(
"Controller Type"), ==,
"PID");
194 IntCtrl_PL.get<
double>(
"Safety Factor After Step Rejection"), 0.9,
202 std::ostringstream unusedParameters;
203 IntCtrl_PL.unused(unusedParameters);
213 auto pl = Tempus::getTimeStepControlStrategyCompositePL<double>();
215 auto tscsc = Tempus::createTimeStepControlStrategyComposite<double>(pl);
218 std::vector<Teuchos::RCP<Tempus::TimeStepControlStrategy<double>>>
219 strategies = tscsc->getStrategies();
230 auto pl = Tempus::getTimeStepControlStrategyCompositePL<double>();
231 pl->set(
"Strategy List",
"");
232 pl->remove(
"Constant");
234 auto tscsc = Tempus::createTimeStepControlStrategyComposite<double>(pl);
236 tscsc->isInitialized());
240 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategyType() ==
"Composite"));
241 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategies().size() == 0));
245 auto pl = Tempus::getTimeStepControlStrategyCompositePL<double>();
246 pl->remove(
"Constant");
247 pl->set(
"Strategy List",
"Application Strategy");
249 auto nonTempusStrategyPL = Teuchos::parameterList(
"Application Strategy");
250 nonTempusStrategyPL->set<std::string>(
"Strategy Type",
251 "Application Strategy");
252 nonTempusStrategyPL->set<
double>(
"Secret Sauce", 1.2345);
253 pl->set(
"Application Strategy", *nonTempusStrategyPL);
255 auto tscsc = Tempus::createTimeStepControlStrategyComposite<double>(pl);
257 tscsc->isInitialized());
261 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategyType() ==
"Composite"));
262 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategies().size() == 0));
271 temp->addStrategy(tscsBasicVS);
274 temp->addStrategy(tscsIntCtrl);
279 auto sList = pl->
get<std::string>(
"Strategy List");
280 pl->set(
"Strategy List", sList +
", Application Strategy");
282 auto nonTempusStrategyPL = Teuchos::parameterList(
"Application Strategy");
283 nonTempusStrategyPL->set<std::string>(
"Strategy Type",
284 "Application Strategy");
285 nonTempusStrategyPL->set<
double>(
"Secret Sauce", 1.2345);
286 pl->set(
"Application Strategy", *nonTempusStrategyPL);
288 auto tscsc = Tempus::createTimeStepControlStrategyComposite<double>(pl);
293 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategyType() ==
"Composite"));
294 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategies().size() == 2));
T & get(const std::string &name, T def_value)
StepControlStrategy class for TimeStepControl.
#define TEST_COMPARE(v1, comp, v2)
#define TEST_FLOATING_EQUALITY(v1, v2, tol)
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
TEUCHOS_UNIT_TEST(BackwardEuler, Default_Construction)
StepControlStrategy class for TimeStepControl.
TimeStepControlStrategyComposite loops over a vector of TimeStepControlStrategies.
StepControlStrategy class for TimeStepControl.
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)