9 #ifndef Tempus_TimeStepControlStrategy_BasicVS_hpp
10 #define Tempus_TimeStepControlStrategy_BasicVS_hpp
12 #include "Thyra_VectorStdOps.hpp"
14 #include "Tempus_config.hpp"
16 #include "Tempus_SolutionState.hpp"
17 #include "Tempus_SolutionHistory.hpp"
102 template <
class Scalar>
118 Scalar maxEta, std::string name =
"Basic VS")
140 RCP<SolutionState<Scalar> > workingState =
141 solutionHistory->getWorkingState();
142 const Scalar errorAbs = workingState->getErrorAbs();
143 const Scalar errorRel = workingState->getErrorRel();
144 const int iStep = workingState->getIndex();
145 Scalar dt = workingState->getTimeStep();
149 Scalar eta = solutionHistory->getCurrentState()->getDxNormL2Rel();
155 "Stepper failure - Decreasing dt.");
161 "Change too small (" + std::to_string(eta) +
" < " +
163 "). Increasing dt.");
168 "Change too large (" + std::to_string(eta) +
" > " +
170 "). Decreasing dt.");
175 iStep, dt, dt * sigma,
176 "Absolute error is too large (" + std::to_string(errorAbs) +
" > " +
182 iStep, dt, dt * sigma,
183 "Relative error is too large (" + std::to_string(errorRel) +
" > " +
191 "dt is too small. Resetting to minimum dt.");
196 "dt is too large. Resetting to maximum dt.");
200 workingState->setTimeStep(dt);
201 workingState->setTime(solutionHistory->getCurrentState()->getTime() + dt);
202 workingState->setComputeNorms(
true);
209 return "Tempus::TimeStepControlStrategyBasicVS";
215 auto l_out = Teuchos::fancyOStream(out.
getOStream());
217 l_out->setOutputToRootOnly(0);
219 *l_out <<
"\n--- " << this->
description() <<
" ---" << std::endl;
222 *l_out <<
" StrategyType = "
230 <<
" Minimum Value Monitoring Function = " <<
getMinEta()
232 <<
" Maximum Value Monitoring Function = " <<
getMaxEta()
234 *l_out << std::string(this->
description().length() + 8,
'-') << std::endl;
244 Teuchos::parameterList(
"Time Step Control Strategy");
248 "Amplification factor");
250 pl->
set<
double>(
"Minimum Value Monitoring Function",
getMinEta(),
252 pl->
set<
double>(
"Maximum Value Monitoring Function",
getMaxEta(),
261 "Error - Invalid value of Amplification Factor = "
263 <<
"Amplification Factor must be > 1.0.\n");
266 "Error - Invalid value of Reduction Factor = "
268 <<
"Reduction Factor must be < 1.0.\n");
272 "Error - Invalid values of 'Minimum Value Monitoring Function' = "
274 <<
"\n and 'Maximum Value Monitoring Function' = " <<
getMaxEta()
275 <<
"! \n Mininum Value cannot be > Maximum Value! \n");
314 template <
class Scalar>
318 std::string name =
"Basic VS")
321 if (pList == Teuchos::null || pList->
numParams() == 0)
return tscs;
324 pList->
get<std::string>(
"Strategy Type") !=
"Basic VS", std::logic_error,
325 "Error - Strategy Type != 'Basic VS'. (='" +
326 pList->
get<std::string>(
"Strategy Type") +
"')\n");
330 tscs->setAmplFactor(pList->
get<
double>(
"Amplification Factor"));
331 tscs->setReductFactor(pList->
get<
double>(
"Reduction Factor"));
332 tscs->setMinEta(pList->
get<
double>(
"Minimum Value Monitoring Function"));
333 tscs->setMaxEta(pList->
get<
double>(
"Maximum Value Monitoring Function"));
342 template <
class Scalar>
347 t->getValidParameters());
351 #endif // Tempus_TimeStepControlStrategy_BasicVS_hpp
Teuchos::RCP< Teuchos::ParameterList > getTimeStepControlStrategyBasicVS_PL()
Nonmember function to return ParameterList with default values.
virtual void setMaxEta(Scalar maxEta)
virtual void initialize() const override
T & get(const std::string &name, T def_value)
StepControlStrategy class for TimeStepControl.
ParameterList & set(std::string const &name, T const &value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
virtual Scalar getMaxRelError() const
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
virtual Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const override
Return ParameterList with current values.
virtual ~TimeStepControlStrategyBasicVS()
Destructor.
virtual void checkInitialized()
Scalar minEta_
Minimum Value Monitoring Function.
virtual Scalar getReductFactor() const
virtual std::string getStrategyType() const
Ordinal numParams() const
virtual void printDtChanges(int istep, Scalar dt_old, Scalar dt_new, std::string reason) const
virtual Scalar getMinEta() const
virtual Scalar getAmplFactor() const
virtual void setAmplFactor(Scalar rho)
Teuchos::RCP< TimeStepControlStrategyBasicVS< Scalar > > createTimeStepControlStrategyBasicVS(const Teuchos::RCP< Teuchos::ParameterList > &pList, std::string name="Basic VS")
Nonmember constructor.
Scalar sigma_
Reduction Factor.
Scalar rho_
Amplification Factor.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Status
Status for the Integrator, the Stepper and the SolutionState.
virtual void setStepType(std::string s)
virtual void setNextTimeStep(const TimeStepControl< Scalar > &tsc, Teuchos::RCP< SolutionHistory< Scalar > > solutionHistory, Status &) override
Set the time step size.
bool isInitialized_
Bool if strategy is initialized.
virtual Scalar getMaxAbsError() const
TimeStepControl manages the time step size. There several mechanisms that effect the time step size a...
virtual void setMinEta(Scalar minEta)
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 setReductFactor(Scalar sigma)
virtual Scalar getMaxTimeStep() const
virtual Scalar getMinTimeStep() const
Scalar maxEta_
Maximum Value Monitoring Function.
RCP< std::basic_ostream< char_type, traits_type > > getOStream()
virtual Scalar getMaxEta() const
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const override
virtual void setStrategyType(std::string s)
TimeStepControlStrategy class for TimeStepControl.
virtual std::string getStepType() const
std::string description() const override
TimeStepControlStrategyBasicVS()
Default Constructor.
TimeStepControlStrategyBasicVS(Scalar rho, Scalar sigma, Scalar minEta, Scalar maxEta, std::string name="Basic VS")
Full Constructor.