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" 103 template<
class Scalar>
121 Scalar maxEta, std::string name =
"Basic VS")
143 RCP<SolutionState<Scalar> > workingState=solutionHistory->getWorkingState();
144 const Scalar errorAbs = workingState->getErrorAbs();
145 const Scalar errorRel = workingState->getErrorRel();
146 const int iStep = workingState->getIndex();
147 Scalar dt = workingState->getTimeStep();
151 Scalar eta = solutionHistory->getCurrentState()->getDxNormL2Rel();
157 "Stepper failure - Decreasing dt.");
164 + std::to_string(eta) +
" < " + std::to_string(
getMinEta())
165 +
"). Increasing dt.");
171 + std::to_string(eta) +
" > " + std::to_string(
getMaxEta())
172 +
"). Decreasing dt.");
177 "Absolute error is too large (" 178 + std::to_string(errorAbs)+
" > "+std::to_string(tsc.
getMaxAbsError())
179 +
"). Decreasing dt.");
184 "Relative error is too large (" 185 + std::to_string(errorRel)+
" > "+std::to_string(tsc.
getMaxRelError())
186 +
"). Decreasing dt.");
193 "dt is too small. Resetting to minimum dt.");
198 "dt is too large. Resetting to maximum dt.");
202 workingState->setTimeStep(dt);
203 workingState->setTime(solutionHistory->getCurrentState()->getTime() + dt);
204 workingState->setComputeNorms(
true);
210 {
return "Tempus::TimeStepControlStrategyBasicVS"; }
213 const Teuchos::EVerbosityLevel verbLevel)
const override 215 auto l_out = Teuchos::fancyOStream( out.getOStream() );
216 Teuchos::OSTab ostab(*l_out, 2, this->
description());
217 l_out->setOutputToRootOnly(0);
219 *l_out <<
"\n--- " << this->
description() <<
" ---" << std::endl;
221 if (Teuchos::as<int>(verbLevel) >= Teuchos::as<int>(Teuchos::VERB_MEDIUM)) {
223 <<
" Step Type = " << this->
getStepType() << std::endl
224 <<
" Amplification Factor = " <<
getAmplFactor() << std::endl
226 <<
" Minimum Value Monitoring Function = " <<
getMinEta() << std::endl
227 <<
" Maximum Value Monitoring Function = " <<
getMaxEta() << std::endl;
228 *l_out << std::string(this->
description().length()+8,
'-') <<std::endl;
236 Teuchos::RCP<Teuchos::ParameterList> pl =
237 Teuchos::parameterList(
"Time Step Control Strategy");
239 pl->set<std::string>(
"Strategy Type", this->
getStrategyType(),
"Basic VS");
240 pl->set<
double>(
"Amplification Factor",
getAmplFactor(),
"Amplification factor");
241 pl->set<
double>(
"Reduction Factor" ,
getReductFactor() ,
"Reduction factor");
242 pl->set<
double>(
"Minimum Value Monitoring Function",
getMinEta(),
"Min value eta");
243 pl->set<
double>(
"Maximum Value Monitoring Function",
getMaxEta(),
"Max value eta");
250 TEUCHOS_TEST_FOR_EXCEPTION(
getAmplFactor() <= 1.0, std::out_of_range,
251 "Error - Invalid value of Amplification Factor = " <<
getAmplFactor()
252 <<
"! \n" <<
"Amplification Factor must be > 1.0.\n");
254 TEUCHOS_TEST_FOR_EXCEPTION(
getReductFactor() >= 1.0, std::out_of_range,
256 <<
"! \n" <<
"Reduction Factor must be < 1.0.\n");
259 "Error - Invalid values of 'Minimum Value Monitoring Function' = " 260 <<
getMinEta() <<
"\n and 'Maximum Value Monitoring Function' = " 261 <<
getMaxEta() <<
"! \n Mininum Value cannot be > Maximum Value! \n");
289 template <
class Scalar>
290 Teuchos::RCP<TimeStepControlStrategyBasicVS<Scalar> >
292 const Teuchos::RCP<Teuchos::ParameterList> & pList,
293 std::string name =
"Basic VS")
296 if (pList == Teuchos::null)
return tscs;
298 TEUCHOS_TEST_FOR_EXCEPTION(
299 pList->get<std::string>(
"Strategy Type",
"Basic VS") !=
"Basic VS",
301 "Error - Strategy Type != 'Basic VS'. (='" 302 +pList->get<std::string>(
"Strategy Type")+
"')\n");
304 pList->validateParametersAndSetDefaults(*tscs->getValidParameters(), 0);
306 tscs->setAmplFactor( pList->get<
double>(
"Amplification Factor"));
307 tscs->setReductFactor(pList->get<
double>(
"Reduction Factor"));
308 tscs->setMinEta(pList->get<
double>(
"Minimum Value Monitoring Function"));
309 tscs->setMaxEta(pList->get<
double>(
"Maximum Value Monitoring Function"));
319 template<
class Scalar>
323 return Teuchos::rcp_const_cast<Teuchos::ParameterList> (t->getValidParameters());
328 #endif // Tempus_TimeStepControlStrategy_BasicVS_hpp virtual std::string getStrategyType() const
Teuchos::RCP< Teuchos::ParameterList > getTimeStepControlStrategyBasicVS_PL()
Nonmember function to return ParameterList with default values.
virtual void setMaxEta(Scalar maxEta)
virtual void initialize() const override
StepControlStrategy class for TimeStepControl.
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 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.
Status
Status for the Integrator, the Stepper and the SolutionState.
virtual Scalar getMaxEta() const
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.
virtual void printDtChanges(int istep, Scalar dt_old, Scalar dt_new, std::string reason) const
virtual Scalar getMinEta() const
bool isInitialized_
Bool if strategy is initialized.
TimeStepControl manages the time step size. There several mechanisms that effect the time step size a...
virtual void setMinEta(Scalar minEta)
virtual Scalar getMaxAbsError() const
virtual void setName(std::string s)
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
virtual void setReductFactor(Scalar sigma)
Scalar maxEta_
Maximum Value Monitoring Function.
virtual Scalar getMaxRelError() const
virtual Scalar getMinTimeStep() const
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const override
virtual Scalar getMaxTimeStep() const
virtual void setStrategyType(std::string s)
virtual std::string getStepType() const
TimeStepControlStrategy class for TimeStepControl.
virtual Scalar getReductFactor() const
std::string description() const override
TimeStepControlStrategyBasicVS()
Default Constructor.
virtual Scalar getAmplFactor() const
TimeStepControlStrategyBasicVS(Scalar rho, Scalar sigma, Scalar minEta, Scalar maxEta, std::string name="Basic VS")
Full Constructor.