32 TEUCHOS_TEST_FOR_EXCEPT(!tscs->isInitialized());
35 TEUCHOS_TEST_FOR_EXCEPT(tscs->getStepType() !=
"Variable");
36 TEUCHOS_TEST_FOR_EXCEPT(tscs->getController() !=
"PID");
37 TEUCHOS_TEST_FOR_EXCEPT(tscs->getKI() != 0.58);
38 TEUCHOS_TEST_FOR_EXCEPT(tscs->getKP() != 0.21);
39 TEUCHOS_TEST_FOR_EXCEPT(tscs->getKD() != 0.10);
40 TEUCHOS_TEST_FOR_EXCEPT(tscs->getSafetyFactor() != 0.90);
41 TEUCHOS_TEST_FOR_EXCEPT(tscs->getSafetyFactorAfterReject() != 0.90);
42 TEUCHOS_TEST_FOR_EXCEPT(tscs->getFacMax() != 5.0);
43 TEUCHOS_TEST_FOR_EXCEPT(tscs->getFacMin() != 0.5);
46 tscs->setController(
"I"); tscs->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!tscs->isInitialized());
47 tscs->setKI(0.6); tscs->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!tscs->isInitialized());
48 tscs->setKP(0.0); tscs->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!tscs->isInitialized());
49 tscs->setKD(0.0); tscs->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!tscs->isInitialized());
50 tscs->setSafetyFactor(0.8); tscs->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!tscs->isInitialized());
51 tscs->setSafetyFactorAfterReject(0.8); tscs->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!tscs->isInitialized());
52 tscs->setFacMax(4.0); tscs->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!tscs->isInitialized());
53 tscs->setFacMin(0.4); tscs->initialize(); TEUCHOS_TEST_FOR_EXCEPT(!tscs->isInitialized());
55 TEUCHOS_TEST_FOR_EXCEPT(tscs->getStepType() !=
"Variable");
56 TEUCHOS_TEST_FOR_EXCEPT(tscs->getController() !=
"I");
57 TEUCHOS_TEST_FOR_EXCEPT(tscs->getKI() != 0.6);
58 TEUCHOS_TEST_FOR_EXCEPT(tscs->getKP() != 0.0);
59 TEUCHOS_TEST_FOR_EXCEPT(tscs->getKD() != 0.0);
60 TEUCHOS_TEST_FOR_EXCEPT(tscs->getSafetyFactor() != 0.8);
61 TEUCHOS_TEST_FOR_EXCEPT(tscs->getSafetyFactorAfterReject() != 0.8);
62 TEUCHOS_TEST_FOR_EXCEPT(tscs->getFacMax() != 4.0);
63 TEUCHOS_TEST_FOR_EXCEPT(tscs->getFacMin() != 0.4);
72 "I", 0.6, 0.0, 0.0, 0.8, 0.8, 4.0, 0.4));
73 TEUCHOS_TEST_FOR_EXCEPT(!tscs->isInitialized());
75 TEUCHOS_TEST_FOR_EXCEPT(tscs->getStepType() !=
"Variable");
76 TEUCHOS_TEST_FOR_EXCEPT(tscs->getController() !=
"I");
77 TEUCHOS_TEST_FOR_EXCEPT(tscs->getKI() != 0.6);
78 TEUCHOS_TEST_FOR_EXCEPT(tscs->getKP() != 0.0);
79 TEUCHOS_TEST_FOR_EXCEPT(tscs->getKD() != 0.0);
80 TEUCHOS_TEST_FOR_EXCEPT(tscs->getSafetyFactor() != 0.8);
81 TEUCHOS_TEST_FOR_EXCEPT(tscs->getSafetyFactorAfterReject() != 0.8);
82 TEUCHOS_TEST_FOR_EXCEPT(tscs->getFacMax() != 4.0);
83 TEUCHOS_TEST_FOR_EXCEPT(tscs->getFacMin() != 0.4);
91 auto pl = Tempus::getTimeStepControlStrategyIntegralControllerPL<double>();
93 pl->set<std::string>(
"Controller Type",
"I");
94 pl->set<
double>(
"KI", 0.6);
95 pl->set<
double>(
"KP", 0.0);
96 pl->set<
double>(
"KD", 0.0);
97 pl->set<
double>(
"Safety Factor", 0.8);
98 pl->set<
double>(
"Safety Factor After Step Rejection", 0.8);
99 pl->set<
double>(
"Maximum Safety Factor", 4.0);
100 pl->set<
double>(
"Minimum Safety Factor", 0.4);
102 auto tscs = Tempus::createTimeStepControlStrategyIntegralController<double>(pl);
104 TEUCHOS_TEST_FOR_EXCEPT(tscs->getStepType() !=
"Variable");
105 TEUCHOS_TEST_FOR_EXCEPT(tscs->getController() !=
"I");
106 TEUCHOS_TEST_FOR_EXCEPT(tscs->getKI() != 0.6);
107 TEUCHOS_TEST_FOR_EXCEPT(tscs->getKP() != 0.0);
108 TEUCHOS_TEST_FOR_EXCEPT(tscs->getKD() != 0.0);
109 TEUCHOS_TEST_FOR_EXCEPT(tscs->getSafetyFactor() != 0.8);
110 TEUCHOS_TEST_FOR_EXCEPT(tscs->getSafetyFactorAfterReject() != 0.8);
111 TEUCHOS_TEST_FOR_EXCEPT(tscs->getFacMax() != 4.0);
112 TEUCHOS_TEST_FOR_EXCEPT(tscs->getFacMin() != 0.4);
123 double safetyFactor = 0.9;
124 double safetyFactorAfterReject = 0.9;
130 "PID", KI, KP, KD, safetyFactor, safetyFactorAfterReject,
135 tsc->setTimeStepControlStrategy(tscs);
136 tsc->setInitTime(0.0);
137 tsc->setFinalTime(10.0);
138 tsc->setMinTimeStep (0.01);
139 tsc->setInitTimeStep(1.0);
140 tsc->setMaxTimeStep (10.0);
141 tsc->setFinalIndex(100);
143 TEUCHOS_TEST_FOR_EXCEPT(!tsc->isInitialized());
147 auto model = rcp(
new Tempus_Test::DahlquistTestModel<double>());
148 auto inArgsIC = model->getNominalValues();
149 auto icSolution = rcp_const_cast<Thyra::VectorBase<double> >(inArgsIC.get_x());
150 auto icState = Tempus::createSolutionStateX<double>(icSolution);
154 solutionHistory->addState(icState);
155 solutionHistory->getCurrentState()->setTimeStep(1.0);
156 solutionHistory->getCurrentState()->setTime(0.0);
157 solutionHistory->getCurrentState()->setIndex(0);
158 solutionHistory->getCurrentState()->setOrder(order);
164 solutionHistory->initWorkingState();
165 auto currentState = solutionHistory->getCurrentState();
166 auto workingState = solutionHistory->getWorkingState();
168 TEST_FLOATING_EQUALITY(workingState->getErrorRel() , 0.0, 1.0e-14);
169 TEST_FLOATING_EQUALITY(workingState->getErrorRelNm1(), 0.0, 1.0e-14);
170 TEST_FLOATING_EQUALITY(workingState->getErrorRelNm2(), 0.0, 1.0e-14);
172 tsc->setNextTimeStep(solutionHistory, status);
176 TEST_FLOATING_EQUALITY(workingState->getTimeStep(), 1.0, 1.0e-14);
180 workingState->setErrorRel(errN);
186 solutionHistory->initWorkingState();
187 currentState = solutionHistory->getCurrentState();
188 workingState = solutionHistory->getWorkingState();
189 double dt = workingState->getTimeStep();
191 TEST_FLOATING_EQUALITY(workingState->getErrorRel() , 0.1, 1.0e-14);
192 TEST_FLOATING_EQUALITY(workingState->getErrorRelNm1(), 0.0, 1.0e-14);
193 TEST_FLOATING_EQUALITY(workingState->getErrorRelNm2(), 0.0, 1.0e-14);
195 tsc->setNextTimeStep(solutionHistory, status);
197 double p = order - 1.0;
198 double dtNew = dt*safetyFactor*std::pow(errN, -KI/p);
199 TEST_FLOATING_EQUALITY(workingState->getTimeStep(), dtNew, 1.0e-14);
204 workingState->setErrorRel(errN);
210 solutionHistory->initWorkingState();
211 currentState = solutionHistory->getCurrentState();
212 workingState = solutionHistory->getWorkingState();
213 dt = workingState->getTimeStep();
215 TEST_FLOATING_EQUALITY(workingState->getErrorRel() , 0.2, 1.0e-14);
216 TEST_FLOATING_EQUALITY(workingState->getErrorRelNm1(), 0.1, 1.0e-14);
217 TEST_FLOATING_EQUALITY(workingState->getErrorRelNm2(), 0.0, 1.0e-14);
219 tsc->setNextTimeStep(solutionHistory, status);
221 dtNew = dt*safetyFactor*std::pow(errN, -KI/p)
222 *std::pow(errNm1, KP/p);
223 TEST_FLOATING_EQUALITY(workingState->getTimeStep(), dtNew, 1.0e-14);
229 workingState->setErrorRel(errN);
235 solutionHistory->initWorkingState();
236 currentState = solutionHistory->getCurrentState();
237 workingState = solutionHistory->getWorkingState();
238 dt = workingState->getTimeStep();
240 TEST_FLOATING_EQUALITY(workingState->getErrorRel() , 0.3, 1.0e-14);
241 TEST_FLOATING_EQUALITY(workingState->getErrorRelNm1(), 0.2, 1.0e-14);
242 TEST_FLOATING_EQUALITY(workingState->getErrorRelNm2(), 0.1, 1.0e-14);
244 tsc->setNextTimeStep(solutionHistory, status);
246 dtNew = dt*safetyFactor*std::pow(errN, -KI/p)
247 *std::pow(errNm1, KP/p)
248 *std::pow(errNm2, -KD/p);
249 TEST_FLOATING_EQUALITY(workingState->getTimeStep(), dtNew, 1.0e-14);
260 auto pl = tscs->getValidParameters();
262 TEST_COMPARE ( pl->get<std::string>(
"Strategy Type"), ==,
"Integral Controller");
263 TEST_COMPARE ( pl->get<std::string>(
"Controller Type"), ==,
"PID");
264 TEST_FLOATING_EQUALITY( pl->get<
double>(
"KI"), 0.58, 1.0e-14);
265 TEST_FLOATING_EQUALITY( pl->get<
double>(
"KP"), 0.21, 1.0e-14);
266 TEST_FLOATING_EQUALITY( pl->get<
double>(
"KD"), 0.10, 1.0e-14);
267 TEST_FLOATING_EQUALITY( pl->get<
double>(
"Safety Factor"), 0.9, 1.0e-14);
268 TEST_FLOATING_EQUALITY( pl->get<
double>(
"Safety Factor After Step Rejection"), 0.9, 1.0e-14);
269 TEST_FLOATING_EQUALITY( pl->get<
double>(
"Maximum Safety Factor"), 5.0, 1.0e-14);
270 TEST_FLOATING_EQUALITY( pl->get<
double>(
"Minimum Safety Factor"), 0.5, 1.0e-14);
273 std::ostringstream unusedParameters;
274 pl->unused(unusedParameters);
275 TEST_COMPARE ( unusedParameters.str(), ==,
"");
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...