9 #include "Teuchos_UnitTestHarness.hpp" 10 #include "Teuchos_XMLParameterListHelpers.hpp" 11 #include "Teuchos_TimeMonitor.hpp" 12 #include "Teuchos_DefaultComm.hpp" 14 #include "Thyra_VectorStdOps.hpp" 16 #include "Tempus_StepperFactory.hpp" 17 #include "Tempus_TimeStepControl.hpp" 23 #include "../TestModels/SinCosModel.hpp" 24 #include "../TestModels/DahlquistTestModel.hpp" 25 #include "../TestUtils/Tempus_ConvergenceTestUtils.hpp" 34 using Teuchos::rcp_const_cast;
35 using Teuchos::rcp_dynamic_cast;
36 using Teuchos::ParameterList;
37 using Teuchos::sublist;
38 using Teuchos::getParametersFromXmlFile;
46 TEUCHOS_TEST_FOR_EXCEPT(tscsc->isInitialized());
49 tscsc->addStrategy(tscsConstant);
51 TEUCHOS_TEST_FOR_EXCEPT(!tscsc->isInitialized());
53 TEST_COMPARE(tscsc->size(), ==, 1);
55 std::vector<Teuchos::RCP<Tempus::TimeStepControlStrategy<double>>>
56 strategies = tscsc->getStrategies();
60 TEUCHOS_TEST_FOR_EXCEPT(strategyConstant->getStepType() !=
"Constant");
61 TEUCHOS_TEST_FOR_EXCEPT(strategyConstant->getConstantTimeStep() != 0.0);
70 TEUCHOS_TEST_FOR_EXCEPT(tscsc->isInitialized());
73 tscsc->addStrategy(tscsBasicVS);
75 tscsc->addStrategy(tscsIntCtrl);
77 TEUCHOS_TEST_FOR_EXCEPT(!tscsc->isInitialized());
79 TEST_COMPARE(tscsc->size(), ==, 2);
81 std::vector<Teuchos::RCP<Tempus::TimeStepControlStrategy<double>>>
82 strategies = tscsc->getStrategies();
85 TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getStrategyType() !=
"Basic VS");
88 TEUCHOS_TEST_FOR_EXCEPT(strategyIntCtrl->getStrategyType() !=
"Integral Controller");
103 tscsc_temp->addStrategy(tscs_BasicVS);
104 tscsc_temp->addStrategy(tscs_IC);
105 tscsc_temp->initialize();
106 TEUCHOS_TEST_FOR_EXCEPT(!tscsc_temp->isInitialized());
108 auto pl = rcp_const_cast<Teuchos::ParameterList>(tscsc_temp->getValidParameters());
110 auto tscsc = Tempus::createTimeStepControlStrategyComposite<double>(pl);
112 TEST_COMPARE(tscsc->size(), ==, 2);
114 std::vector<Teuchos::RCP<Tempus::TimeStepControlStrategy<double>>>
115 strategies = tscsc->getStrategies();
119 TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getStepType() !=
"Variable");
120 TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getAmplFactor() != 1.75);
121 TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getReductFactor() != 0.5);
122 TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getMinEta() != 0.0);
123 TEUCHOS_TEST_FOR_EXCEPT(strategyBasicVS->getMaxEta() != 1.0e+16);
127 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getStepType() !=
"Variable");
128 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getController() !=
"PID");
129 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getKI() != 0.58);
130 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getKP() != 0.21);
131 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getKD() != 0.10);
132 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getSafetyFactor() != 0.90);
133 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getSafetyFactorAfterReject() != 0.90);
134 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getFacMax() != 5.0);
135 TEUCHOS_TEST_FOR_EXCEPT(strategyIC->getFacMin() != 0.5);
148 tscsc_temp->addStrategy(tscs_BasicVS);
149 tscsc_temp->addStrategy(tscs_IC);
150 tscsc_temp->initialize();
151 TEUCHOS_TEST_FOR_EXCEPT(!tscsc_temp->isInitialized());
153 auto pl = tscsc_temp->getValidParameters();
155 TEST_COMPARE ( pl->get<std::string>(
"Strategy Type"), ==,
"Composite");
156 TEST_COMPARE ( pl->get<std::string>(
"Strategy List"), ==,
"Basic VS, Integral Controller");
157 TEST_COMPARE ( pl->isSublist(
"Basic VS") , ==,
true);
158 TEST_COMPARE ( pl->isSublist(
"Integral Controller") , ==,
true);
161 std::ostringstream unusedParameters;
162 pl->unused(unusedParameters);
163 TEST_COMPARE ( unusedParameters.str(), ==,
164 "WARNING: Parameter \"Basic VS\" [unused] is unused\n" 165 "WARNING: Parameter \"Integral Controller\" [unused] is unused\n");
168 auto BasicVS_PL = pl->sublist(
"Basic VS");
169 TEST_COMPARE ( BasicVS_PL.get<std::string>(
"Strategy Type") , ==,
"Basic VS");
170 TEST_FLOATING_EQUALITY( BasicVS_PL.get<
double>(
"Amplification Factor"), 1.75, 1.0e-14);
171 TEST_FLOATING_EQUALITY( BasicVS_PL.get<
double>(
"Reduction Factor") , 0.5 , 1.0e-14);
172 TEST_FLOATING_EQUALITY( BasicVS_PL.get<
double>(
"Minimum Value Monitoring Function"), 0.0 , 1.0e-14);
173 TEST_FLOATING_EQUALITY( BasicVS_PL.get<
double>(
"Maximum Value Monitoring Function"), 1.0e+16, 1.0e-14);
176 std::ostringstream unusedParameters;
177 BasicVS_PL.unused(unusedParameters);
178 TEST_COMPARE ( unusedParameters.str(), ==,
"");
181 auto IntCtrl_PL = pl->sublist(
"Integral Controller");
182 TEST_COMPARE ( IntCtrl_PL.get<std::string>(
"Strategy Type") , ==,
"Integral Controller");
183 TEST_COMPARE ( IntCtrl_PL.get<std::string>(
"Controller Type") , ==,
"PID");
184 TEST_FLOATING_EQUALITY( IntCtrl_PL.get<
double>(
"KI"), 0.58, 1.0e-14);
185 TEST_FLOATING_EQUALITY( IntCtrl_PL.get<
double>(
"KP"), 0.21, 1.0e-14);
186 TEST_FLOATING_EQUALITY( IntCtrl_PL.get<
double>(
"KD"), 0.1 , 1.0e-14);
187 TEST_FLOATING_EQUALITY( IntCtrl_PL.get<
double>(
"Safety Factor"), 0.9 , 1.0e-14);
188 TEST_FLOATING_EQUALITY( IntCtrl_PL.get<
double>(
"Safety Factor After Step Rejection"), 0.9 , 1.0e-14);
189 TEST_FLOATING_EQUALITY( IntCtrl_PL.get<
double>(
"Maximum Safety Factor"), 5.0 , 1.0e-14);
190 TEST_FLOATING_EQUALITY( IntCtrl_PL.get<
double>(
"Minimum Safety Factor"), 0.5 , 1.0e-14);
193 std::ostringstream unusedParameters;
194 IntCtrl_PL.unused(unusedParameters);
195 TEST_COMPARE ( unusedParameters.str(), ==,
"");
206 auto pl = Tempus::getTimeStepControlStrategyCompositePL<double>();
208 auto tscsc = Tempus::createTimeStepControlStrategyComposite<double>(pl);
209 TEUCHOS_TEST_FOR_EXCEPT(!tscsc->isInitialized());
211 std::vector<Teuchos::RCP<Tempus::TimeStepControlStrategy<double>>>
212 strategies = tscsc->getStrategies();
215 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStepType() ==
"Constant"));
216 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategyType() ==
"Composite"));
217 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategies().size() == 1));
218 TEUCHOS_TEST_FOR_EXCEPT(!(strategies[0]->getStepType() ==
"Constant"));
219 TEUCHOS_TEST_FOR_EXCEPT(!(strategies[0]->getStrategyType() ==
"Constant"));
223 auto pl = Tempus::getTimeStepControlStrategyCompositePL<double>();
224 pl->set(
"Strategy List",
"");
225 pl->remove(
"Constant");
227 auto tscsc = Tempus::createTimeStepControlStrategyComposite<double>(pl);
228 TEUCHOS_TEST_FOR_EXCEPT(tscsc->isInitialized());
231 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStepType() ==
"Variable"));
232 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategyType() ==
"Composite"));
233 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategies().size() == 0));
237 auto pl = Tempus::getTimeStepControlStrategyCompositePL<double>();
238 pl->remove(
"Constant");
239 pl->set(
"Strategy List",
"Application Strategy");
241 auto nonTempusStrategyPL =
242 Teuchos::parameterList(
"Application Strategy");
243 nonTempusStrategyPL->set<std::string>(
"Strategy Type",
"Application Strategy");
244 nonTempusStrategyPL->set<
double>(
"Secret Sauce", 1.2345);
245 pl->set(
"Application Strategy", *nonTempusStrategyPL);
247 auto tscsc = Tempus::createTimeStepControlStrategyComposite<double>(pl);
248 TEUCHOS_TEST_FOR_EXCEPT(tscsc->isInitialized());
251 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStepType() ==
"Variable"));
252 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategyType() ==
"Composite"));
253 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategies().size() == 0));
261 temp->addStrategy(tscsBasicVS);
263 temp->addStrategy(tscsIntCtrl);
266 auto pl = rcp_const_cast<Teuchos::ParameterList>(temp->getValidParameters());
267 auto sList = pl->get<std::string>(
"Strategy List");
268 pl->set(
"Strategy List", sList+
", Application Strategy");
270 auto nonTempusStrategyPL =
271 Teuchos::parameterList(
"Application Strategy");
272 nonTempusStrategyPL->set<std::string>(
"Strategy Type",
"Application Strategy");
273 nonTempusStrategyPL->set<
double>(
"Secret Sauce", 1.2345);
274 pl->set(
"Application Strategy", *nonTempusStrategyPL);
276 auto tscsc = Tempus::createTimeStepControlStrategyComposite<double>(pl);
277 TEUCHOS_TEST_FOR_EXCEPT(!tscsc->isInitialized());
280 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStepType() ==
"Variable"));
281 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategyType() ==
"Composite"));
282 TEUCHOS_TEST_FOR_EXCEPT(!(tscsc->getStrategies().size() == 2));
StepControlStrategy class for TimeStepControl.
TEUCHOS_UNIT_TEST(BackwardEuler, Default_Construction)
StepControlStrategy class for TimeStepControl.
TimeStepControlStrategyComposite loops over a vector of TimeStepControlStrategies.
StepControlStrategy class for TimeStepControl.