9 #ifndef Tempus_TimeStepControlStrategy_IntegralController_hpp
10 #define Tempus_TimeStepControlStrategy_IntegralController_hpp
12 #include "Tempus_config.hpp"
14 #include "Tempus_SolutionState.hpp"
15 #include "Tempus_SolutionHistory.hpp"
57 template<
class Scalar>
76 this->
setName(
"Integral Controller");
82 Scalar KI, Scalar KP, Scalar KD,
83 Scalar safetyFactor, Scalar safetyFactorAfterReject,
84 Scalar facMax, Scalar facMin, std::string name =
"Integral Controller")
120 RCP<SolutionState<Scalar> > workingState=solutionHistory->getWorkingState();
121 const Scalar errorRel = workingState->getErrorRel();
125 int order = workingState->getOrder() - 1;
126 Scalar dt = workingState->getTimeStep();
133 Scalar k1 = Teuchos::as<Scalar>(-
KI_ / order);
134 Scalar k2 = Teuchos::as<Scalar>(
KP_ / order);
135 Scalar k3 = Teuchos::as<Scalar>(-
KD_ / order);
137 k1 = std::pow(
errN_, k1);
148 beta = std::max(
facMin_, beta);
149 beta = std::min(
facMax_, beta);
157 dt = std::min(dt, workingState->getTimeStep());
168 workingState->setTimeStep(dt);
169 workingState->setTime(solutionHistory->getCurrentState()->getTime() + dt);
176 {
return "Tempus::TimeStepControlStrategyIntegralController"; }
184 <<
"Step Type = " << this->
getStepType() << std::endl
186 <<
"KI = " <<
getKI() << std::endl
187 <<
"KP = " <<
getKP() << std::endl
188 <<
"KD = " <<
getKD() << std::endl
189 <<
"errN_ = " <<
errN_ << std::endl
190 <<
"errNm1_ = " <<
errNm1_ << std::endl
191 <<
"errNm2_ = " <<
errNm2_ << std::endl
194 <<
"Maximum Safety Factor (INPUT) = " <<
facMaxINPUT_ << std::endl
195 <<
"Maximum Safety Factor = " <<
getFacMax() << std::endl
196 <<
"Minimum Safety Factor = " <<
getFacMin() << std::endl;
204 Teuchos::parameterList(
"Time Step Control Strategy");
206 pl->
set<std::string>(
"Strategy Type", this->
getStrategyType(),
"Integral Controller");
208 "Proportional-Integral-Derivative");
209 pl->
set<Scalar>(
"KI" ,
getKI(),
"Integral gain");
210 pl->
set<Scalar>(
"KP" ,
getKP(),
"Proportional gain");
211 pl->
set<Scalar>(
"KD" ,
getKD(),
"Derivative gain");
213 pl->
set<Scalar>(
"Safety Factor After Step Rejection",
215 "Safety Factor Following Step Rejection");
216 pl->
set<Scalar>(
"Maximum Safety Factor" ,
getFacMax(),
"Maximum Safety Factor");
217 pl->
set<Scalar>(
"Minimum Safety Factor" ,
getFacMin(),
"Minimum Safety Factor");
225 "Error - Invalid value of Safety Factory= " <<
safetyFactor_ <<
"! \n"
226 <<
"Safety Factor must be > 0.0.\n");
229 "Error - Invalid value of Maximum Safety Factory= " <<
facMax_ <<
"! \n"
230 <<
"Maximum Safety Factor must be > 0.0.\n");
233 "Error - Invalid value of Minimum Safety Factory= " <<
facMin_ <<
"! \n"
234 <<
"Minimum Safety Factor must be > 0.0.\n");
239 "Error - Invalid choice of Controller Type = " <<
controller_ <<
"! \n"
240 <<
"Valid Choice are ['I', 'PI', 'PID'].\n");
285 template <
class Scalar>
289 std::string name =
"Integral Controller")
293 if (pList == Teuchos::null)
return tscs;
296 pList->
get<std::string>(
"Strategy Type",
"Integral Controller") !=
297 "Integral Controller", std::logic_error,
298 "Error - Strategy Type != 'Integral Controller'. (='"
299 +pList->
get<std::string>(
"Strategy Type")+
"')\n");
303 tscs->setController (pList->
get<std::string>(
"Controller Type"));
304 tscs->setKI (pList->
get<Scalar>(
"KI"));
305 tscs->setKP (pList->
get<Scalar>(
"KP"));
306 tscs->setKD (pList->
get<Scalar>(
"KD"));
307 tscs->setSafetyFactor(pList->
get<Scalar>(
"Safety Factor"));
308 tscs->setSafetyFactorAfterReject(pList->
get<Scalar>(
"Safety Factor After Step Rejection"));
309 tscs->setFacMax (pList->
get<Scalar>(
"Maximum Safety Factor"));
310 tscs->setFacMin (pList->
get<Scalar>(
"Minimum Safety Factor"));
320 template<
class Scalar>
329 #endif // Tempus_TimeStepControlStrategy_IntegralController_hpp
virtual Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const override
Return ParameterList with current values.
Scalar facMin_
Minimum Safety Factor.
T & get(const std::string &name, T def_value)
ParameterList & set(std::string const &name, T const &value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
virtual Scalar getSafetyFactor() const
virtual void checkInitialized()
virtual Scalar getKI() const
virtual std::string getStrategyType() const
virtual std::string getController() const
virtual Scalar getFacMax() const
virtual void setController(std::string c)
virtual Scalar getKP() const
virtual void setKD(Scalar k)
virtual Scalar getSafetyFactorAfterReject() const
std::string description() const override
virtual void setKP(Scalar k)
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Scalar KD_
Derivative gain.
Status
Status for the Integrator, the Stepper and the SolutionState.
virtual Scalar getKD() const
virtual void setStepType(std::string s)
Scalar safetyFactor_
Safety Factor.
bool isInitialized_
Bool if strategy is initialized.
TimeStepControl manages the time step size. There several mechanisms that effect the time step size a...
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const override
void validateParametersAndSetDefaults(ParameterList const &validParamList, int const depth=1000)
virtual void setName(std::string s)
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
virtual void setSafetyFactor(Scalar f)
virtual void setSafetyFactorAfterReject(Scalar f)
std::string controller_
Control type ['I', 'PI', 'PID'].
virtual void setKI(Scalar k)
Teuchos::RCP< Teuchos::ParameterList > getTimeStepControlStrategyIntegralControllerPL()
Nonmember function to return ParameterList with default values.
Scalar facMaxINPUT_
Maximum Safety Factor from input.
TimeStepControlStrategyIntegralController(std::string controller, Scalar KI, Scalar KP, Scalar KD, Scalar safetyFactor, Scalar safetyFactorAfterReject, Scalar facMax, Scalar facMin, std::string name="Integral Controller")
Full Constructor.
virtual void setNextTimeStep(const TimeStepControl< Scalar > &tsc, Teuchos::RCP< SolutionHistory< Scalar > > solutionHistory, Status &) override
Set the time step size.
Teuchos::RCP< TimeStepControlStrategyIntegralController< Scalar > > createTimeStepControlStrategyIntegralController(const Teuchos::RCP< Teuchos::ParameterList > pList, std::string name="Integral Controller")
virtual Scalar getFacMin() const
virtual void setFacMax(Scalar f)
virtual ~TimeStepControlStrategyIntegralController()
Destructor.
TimeStepControlStrategyIntegralController()
Default Constructor.
virtual void initialize() const override
StepControlStrategy class for TimeStepControl.
virtual void setStrategyType(std::string s)
bool firstSuccessfulStep_
TimeStepControlStrategy class for TimeStepControl.
Scalar safetyFactorAfterReject_
Safety Factor Following Step Rejection.
virtual std::string getStepType() const
virtual void setFacMin(Scalar f)
Scalar facMax_
Maximum Safety Factor.
Scalar KP_
Proportional gain.