11#include "Tempus_TimeStepControl.hpp"
22using Teuchos::rcp_const_cast;
23using Teuchos::rcp_dynamic_cast;
24using Teuchos::ParameterList;
25using Teuchos::sublist;
33 TEUCHOS_TEST_FOR_EXCEPT(tscsc->isInitialized());
36 tscsc->addStrategy(tscsConstant);
38 TEUCHOS_TEST_FOR_EXCEPT(!tscsc->isInitialized());
40 TEST_COMPARE(tscsc->size(), ==, 1);
42 std::vector<Teuchos::RCP<Tempus::TimeStepControlStrategy<double>>>
43 strategies = tscsc->getStrategies();
45 auto strategyConstant = rcp_dynamic_cast<Tempus::TimeStepControlStrategyConstant<double> > (strategies[0]);
47 TEUCHOS_TEST_FOR_EXCEPT(strategyConstant->getStepType() !=
"Constant");
48 TEUCHOS_TEST_FOR_EXCEPT(strategyConstant->getConstantTimeStep() != 0.0);
57 TEUCHOS_TEST_FOR_EXCEPT(tscsc->isInitialized());
60 tscsc->addStrategy(tscsBasicVS);
62 tscsc->addStrategy(tscsIntCtrl);
64 TEUCHOS_TEST_FOR_EXCEPT(!tscsc->isInitialized());
66 TEST_COMPARE(tscsc->size(), ==, 2);
68 std::vector<Teuchos::RCP<Tempus::TimeStepControlStrategy<double>>>
69 strategies = tscsc->getStrategies();
71 auto strategyBasicVS = rcp_dynamic_cast<Tempus::TimeStepControlStrategyBasicVS<double> > (strategies[0]);
72 TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getStrategyType() !=
"Basic VS");
74 auto strategyIntCtrl = rcp_dynamic_cast<Tempus::TimeStepControlStrategyIntegralController<double> > (strategies[1]);
75 TEUCHOS_TEST_FOR_EXCEPT(strategyIntCtrl->getStrategyType() !=
"Integral Controller");
90 tscsc_temp->addStrategy(tscs_BasicVS);
91 tscsc_temp->addStrategy(tscs_IC);
92 tscsc_temp->initialize();
93 TEUCHOS_TEST_FOR_EXCEPT(!tscsc_temp->isInitialized());
95 auto pl = rcp_const_cast<Teuchos::ParameterList>(tscsc_temp->getValidParameters());
97 auto tscsc = Tempus::createTimeStepControlStrategyComposite<double>(pl);
99 TEST_COMPARE(tscsc->size(), ==, 2);
101 std::vector<Teuchos::RCP<Tempus::TimeStepControlStrategy<double>>>
102 strategies = tscsc->getStrategies();
104 auto strategyBasicVS = Teuchos::rcp_dynamic_cast<Tempus::TimeStepControlStrategyBasicVS<double> > (strategies[0]);
106 TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getStepType() !=
"Variable");
107 TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getAmplFactor() != 1.75);
108 TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getReductFactor() != 0.5);
109 TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getMinEta() != 0.0);
110 TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getMaxEta() != 1.0e+16);
112 auto strategyIC = Teuchos::rcp_dynamic_cast<Tempus::TimeStepControlStrategyIntegralController<double> > (strategies[1]);
114 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getStepType() !=
"Variable");
115 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getController() !=
"PID");
116 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getKI() != 0.58);
117 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getKP() != 0.21);
118 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getKD() != 0.10);
119 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getSafetyFactor() != 0.90);
120 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getSafetyFactorAfterReject() != 0.90);
121 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getFacMax() != 5.0);
122 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getFacMin() != 0.5);
135 tscsc_temp->addStrategy(tscs_BasicVS);
136 tscsc_temp->addStrategy(tscs_IC);
137 tscsc_temp->initialize();
138 TEUCHOS_TEST_FOR_EXCEPT(!tscsc_temp->isInitialized());
140 auto pl = tscsc_temp->getValidParameters();
142 TEST_COMPARE ( pl->get<std::string>(
"Strategy Type"), ==,
"Composite");
143 TEST_COMPARE ( pl->get<std::string>(
"Strategy List"), ==,
"Basic VS, Integral Controller");
144 TEST_COMPARE ( pl->isSublist(
"Basic VS") , ==,
true);
145 TEST_COMPARE ( pl->isSublist(
"Integral Controller") , ==,
true);
148 std::ostringstream unusedParameters;
149 pl->unused(unusedParameters);
150 TEST_COMPARE ( unusedParameters.str(), ==,
151 "WARNING: Parameter \"Basic VS\" [unused] is unused\n"
152 "WARNING: Parameter \"Integral Controller\" [unused] is unused\n");
155 auto BasicVS_PL = pl->sublist(
"Basic VS");
156 TEST_COMPARE ( BasicVS_PL.get<std::string>(
"Strategy Type") , ==,
"Basic VS");
157 TEST_FLOATING_EQUALITY( BasicVS_PL.get<
double>(
"Amplification Factor"), 1.75, 1.0e-14);
158 TEST_FLOATING_EQUALITY( BasicVS_PL.get<
double>(
"Reduction Factor") , 0.5 , 1.0e-14);
159 TEST_FLOATING_EQUALITY( BasicVS_PL.get<
double>(
"Minimum Value Monitoring Function"), 0.0 , 1.0e-14);
160 TEST_FLOATING_EQUALITY( BasicVS_PL.get<
double>(
"Maximum Value Monitoring Function"), 1.0e+16, 1.0e-14);
163 std::ostringstream unusedParameters;
164 BasicVS_PL.unused(unusedParameters);
165 TEST_COMPARE ( unusedParameters.str(), ==,
"");
168 auto IntCtrl_PL = pl->sublist(
"Integral Controller");
169 TEST_COMPARE ( IntCtrl_PL.get<std::string>(
"Strategy Type") , ==,
"Integral Controller");
170 TEST_COMPARE ( IntCtrl_PL.get<std::string>(
"Controller Type") , ==,
"PID");
171 TEST_FLOATING_EQUALITY( IntCtrl_PL.get<
double>(
"KI"), 0.58, 1.0e-14);
172 TEST_FLOATING_EQUALITY( IntCtrl_PL.get<
double>(
"KP"), 0.21, 1.0e-14);
173 TEST_FLOATING_EQUALITY( IntCtrl_PL.get<
double>(
"KD"), 0.1 , 1.0e-14);
174 TEST_FLOATING_EQUALITY( IntCtrl_PL.get<
double>(
"Safety Factor"), 0.9 , 1.0e-14);
175 TEST_FLOATING_EQUALITY( IntCtrl_PL.get<
double>(
"Safety Factor After Step Rejection"), 0.9 , 1.0e-14);
176 TEST_FLOATING_EQUALITY( IntCtrl_PL.get<
double>(
"Maximum Safety Factor"), 5.0 , 1.0e-14);
177 TEST_FLOATING_EQUALITY( IntCtrl_PL.get<
double>(
"Minimum Safety Factor"), 0.5 , 1.0e-14);
180 std::ostringstream unusedParameters;
181 IntCtrl_PL.unused(unusedParameters);
182 TEST_COMPARE ( unusedParameters.str(), ==,
"");
193 auto pl = Tempus::getTimeStepControlStrategyCompositePL<double>();
195 auto tscsc = Tempus::createTimeStepControlStrategyComposite<double>(pl);
196 TEUCHOS_TEST_FOR_EXCEPT(!tscsc->isInitialized());
198 std::vector<Teuchos::RCP<Tempus::TimeStepControlStrategy<double>>>
199 strategies = tscsc->getStrategies();
202 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStepType() ==
"Constant"));
203 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategyType() ==
"Composite"));
204 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategies().size() == 1));
205 TEUCHOS_TEST_FOR_EXCEPT(!(strategies[0]->getStepType() ==
"Constant"));
206 TEUCHOS_TEST_FOR_EXCEPT(!(strategies[0]->getStrategyType() ==
"Constant"));
210 auto pl = Tempus::getTimeStepControlStrategyCompositePL<double>();
211 pl->set(
"Strategy List",
"");
212 pl->remove(
"Constant");
214 auto tscsc = Tempus::createTimeStepControlStrategyComposite<double>(pl);
215 TEUCHOS_TEST_FOR_EXCEPT(tscsc->isInitialized());
218 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStepType() ==
"Variable"));
219 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategyType() ==
"Composite"));
220 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategies().size() == 0));
224 auto pl = Tempus::getTimeStepControlStrategyCompositePL<double>();
225 pl->remove(
"Constant");
226 pl->set(
"Strategy List",
"Application Strategy");
228 auto nonTempusStrategyPL =
229 Teuchos::parameterList(
"Application Strategy");
230 nonTempusStrategyPL->set<std::string>(
"Strategy Type",
"Application Strategy");
231 nonTempusStrategyPL->set<
double>(
"Secret Sauce", 1.2345);
232 pl->set(
"Application Strategy", *nonTempusStrategyPL);
234 auto tscsc = Tempus::createTimeStepControlStrategyComposite<double>(pl);
235 TEUCHOS_TEST_FOR_EXCEPT(tscsc->isInitialized());
238 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStepType() ==
"Variable"));
239 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategyType() ==
"Composite"));
240 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategies().size() == 0));
248 temp->addStrategy(tscsBasicVS);
250 temp->addStrategy(tscsIntCtrl);
253 auto pl = rcp_const_cast<Teuchos::ParameterList>(temp->getValidParameters());
254 auto sList = pl->get<std::string>(
"Strategy List");
255 pl->set(
"Strategy List", sList+
", Application Strategy");
257 auto nonTempusStrategyPL =
258 Teuchos::parameterList(
"Application Strategy");
259 nonTempusStrategyPL->set<std::string>(
"Strategy Type",
"Application Strategy");
260 nonTempusStrategyPL->set<
double>(
"Secret Sauce", 1.2345);
261 pl->set(
"Application Strategy", *nonTempusStrategyPL);
263 auto tscsc = Tempus::createTimeStepControlStrategyComposite<double>(pl);
264 TEUCHOS_TEST_FOR_EXCEPT(!tscsc->isInitialized());
267 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStepType() ==
"Variable"));
268 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategyType() ==
"Composite"));
269 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategies().size() == 2));
StepControlStrategy class for TimeStepControl.
TimeStepControlStrategyComposite loops over a vector of TimeStepControlStrategies.
StepControlStrategy class for TimeStepControl.
StepControlStrategy class for TimeStepControl.
TEUCHOS_UNIT_TEST(BackwardEuler, Default_Construction)