10#ifndef Tempus_TimeStepControlStrategy_Constant_hpp
11#define Tempus_TimeStepControlStrategy_Constant_hpp
13#include "Tempus_config.hpp"
15#include "Tempus_SolutionState.hpp"
16#include "Tempus_SolutionHistory.hpp"
24template <
class Scalar>
39 std::string name =
"Constant")
55 Status &integratorStatus)
override
61 RCP<SolutionState<Scalar> > workingState =
62 solutionHistory->getWorkingState();
63 const Scalar errorAbs = workingState->getErrorAbs();
64 const Scalar errorRel = workingState->getErrorRel();
65 Scalar dt = workingState->getTimeStep();
67 RCP<Teuchos::FancyOStream> out = tsc.getOStream();
68 Teuchos::OSTab ostab(out, 1,
"setNextTimeStep");
69 out->setOutputToRootOnly(0);
74 "Resetting constant dt.");
80 *out <<
"Failure - Stepper failed and can not change time step size!\n"
81 <<
" Time step type == CONSTANT_STEP_SIZE\n"
89 *out <<
"Failure - Absolute error failed and can not change time step!\n"
90 <<
" Time step type == CONSTANT_STEP_SIZE\n"
91 <<
" (errorAbs =" << errorAbs
92 <<
") > (errorMaxAbs =" << tsc.
getMaxAbsError() <<
")" << std::endl;
99 *out <<
"Failure - Relative error failed and can not change time step!\n"
100 <<
" Time step type == CONSTANT_STEP_SIZE\n"
101 <<
" (errorRel =" << errorRel
102 <<
") > (errorMaxRel =" << tsc.
getMaxRelError() <<
")" << std::endl;
103 integratorStatus =
FAILED;
108 workingState->setTimeStep(dt);
113 const int index = workingState->getIndex();
114 const Scalar time = (index - initIndex) * dt + initTime;
115 workingState->setTime(time);
122 return "Tempus::TimeStepControlStrategyConstant";
126 const Teuchos::EVerbosityLevel verbLevel)
const override
128 auto l_out = Teuchos::fancyOStream(out.getOStream());
129 Teuchos::OSTab ostab(*l_out, 2, this->
description());
130 l_out->setOutputToRootOnly(0);
132 *l_out <<
"\n--- " << this->
description() <<
" ---" << std::endl;
134 if (Teuchos::as<int>(verbLevel) >= Teuchos::as<int>(Teuchos::VERB_MEDIUM)) {
136 <<
" Step Type = " << this->
getStepType() << std::endl
139 *l_out << std::string(this->
description().length() + 8,
'-') << std::endl;
148 Teuchos::RCP<Teuchos::ParameterList> pl =
149 Teuchos::parameterList(
"Time Step Control Strategy");
151 pl->set<std::string>(
"Strategy Type", this->
getStrategyType(),
"Constant");
175template <
class Scalar>
176Teuchos::RCP<TimeStepControlStrategyConstant<Scalar> >
178 const Teuchos::RCP<Teuchos::ParameterList> &pList,
179 std::string name =
"Constant")
182 if (pList == Teuchos::null || pList->numParams() == 0)
return tscs;
184 TEUCHOS_TEST_FOR_EXCEPTION(
185 pList->get<std::string>(
"Strategy Type") !=
"Constant", std::logic_error,
186 "Error - Strategy Type != 'Constant'. (='" +
187 pList->get<std::string>(
"Strategy Type") +
"')\n");
189 pList->validateParametersAndSetDefaults(*tscs->getValidParameters());
191 tscs->setConstantTimeStep(pList->get<
double>(
"Time Step"));
200template <
class Scalar>
204 return Teuchos::rcp_const_cast<Teuchos::ParameterList>(
205 t->getValidParameters());
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
StepControlStrategy class for TimeStepControl.
virtual Scalar getConstantTimeStep() const
virtual void setConstantTimeStep(Scalar dt)
TimeStepControlStrategyConstant(Scalar constantTimeStep, std::string name="Constant")
Full Constructor.
std::string description() const override
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const override
virtual void setNextTimeStep(const TimeStepControl< Scalar > &tsc, Teuchos::RCP< SolutionHistory< Scalar > > solutionHistory, Status &integratorStatus) override
Determine the time step size.
Scalar constantTimeStep_
Constant time step size.
virtual Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const override
Return ParameterList with current values.
virtual void initialize() const override
TimeStepControlStrategyConstant()
Default Constructor.
virtual ~TimeStepControlStrategyConstant()
Destructor.
TimeStepControlStrategy class for TimeStepControl.
virtual void setStrategyType(std::string s)
virtual void checkInitialized()
bool isInitialized_
Bool if strategy is initialized.
virtual void setStepType(std::string s)
virtual std::string getStrategyType() const
virtual void setName(std::string s)
virtual std::string getStepType() const
TimeStepControl manages the time step size. There several mechanisms that effect the time step size a...
virtual int getInitIndex() const
virtual Scalar getMaxAbsError() const
virtual Scalar getMaxRelError() const
virtual Scalar getInitTime() const
virtual Scalar getInitTimeStep() const
virtual void printDtChanges(int istep, Scalar dt_old, Scalar dt_new, std::string reason) const
Status
Status for the Integrator, the Stepper and the SolutionState.
Teuchos::RCP< Teuchos::ParameterList > getTimeStepControlStrategyConstantPL()
Nonmember function to return ParameterList with default values.
Teuchos::RCP< TimeStepControlStrategyConstant< Scalar > > createTimeStepControlStrategyConstant(const Teuchos::RCP< Teuchos::ParameterList > &pList, std::string name="Constant")
Nonmember constructor.