Tempus Version of the Day
Time Integration
Loading...
Searching...
No Matches
Tempus_TimeStepControl_decl.hpp
Go to the documentation of this file.
1// @HEADER
2// ****************************************************************************
3// Tempus: Copyright (2017) Sandia Corporation
4//
5// Distributed under BSD 3-clause license (See accompanying file Copyright.txt)
6// ****************************************************************************
7// @HEADER
8
9#ifndef Tempus_TimeStepControl_decl_hpp
10#define Tempus_TimeStepControl_decl_hpp
11
12#include <iostream>
13#include <iterator>
14#include <sstream>
15
16#include "Teuchos_VerboseObject.hpp"
17#include "Teuchos_Describable.hpp"
18
19#include "Tempus_config.hpp"
20#include "Tempus_SolutionHistory.hpp"
23
24
25namespace Tempus {
26
49template<class Scalar>
51 : virtual public Teuchos::Describable,
52 virtual public Teuchos::VerboseObject<Tempus::TimeStepControl<Scalar> >
53{
54public:
55
58
61 Scalar initTime,
62 Scalar finalTime,
63 Scalar minTimeStep,
64 Scalar initTimeStep,
65 Scalar maxTimeStep,
66 int initIndex,
67 int finalIndex,
68 Scalar maxAbsError,
69 Scalar maxRelError,
70 int maxFailures,
71 int maxConsecFailures,
72 int numTimeSteps,
73 bool printDtChanges,
74 bool outputExactly,
75 std::vector<int> outputIndices,
76 std::vector<Scalar> outputTimes,
77 int outputIndexInterval,
78 Scalar outputTimeInterval,
79 Teuchos::RCP<TimeEventComposite<Scalar> > timeEvent,
80 Teuchos::RCP<TimeStepControlStrategy<Scalar>> stepControlStrategy);
81
83 virtual ~TimeStepControl() {}
84
86 virtual void setNextTimeStep(
87 const Teuchos::RCP<SolutionHistory<Scalar> > & solutionHistory,
88 Status & integratorStatus);
89
91 virtual bool timeInRange(const Scalar time) const;
92
94 virtual bool indexInRange(const int iStep) const;
95
97 virtual Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
98
100
101 std::string description() const;
102 void describe(Teuchos::FancyOStream &out,
103 const Teuchos::EVerbosityLevel verbLevel) const;
105
107
108 virtual std::string getStepType() const;
109 virtual Scalar getInitTime() const { return initTime_; }
110 virtual Scalar getFinalTime() const { return finalTime_; }
111 virtual Scalar getMinTimeStep() const { return minTimeStep_; }
112 virtual Scalar getInitTimeStep() const { return initTimeStep_; }
113 virtual Scalar getMaxTimeStep() const { return maxTimeStep_; }
114 virtual int getInitIndex() const { return initIndex_; }
115 virtual int getFinalIndex() const { return finalIndex_; }
116 virtual Scalar getMaxAbsError() const { return maxAbsError_; }
117 virtual Scalar getMaxRelError() const { return maxRelError_; }
118
127 virtual bool getOutputExactly() const;
128
129 virtual std::vector<int> getOutputIndices() const;
130 virtual std::vector<Scalar> getOutputTimes() const;
131 virtual int getOutputIndexInterval() const;
132 virtual Scalar getOutputTimeInterval() const;
133 virtual int getMaxFailures() const { return maxFailures_; }
134 virtual int getMaxConsecFailures() const { return maxConsecFailures_; }
135 virtual bool getPrintDtChanges() const { return printDtChanges_; }
136 virtual int getNumTimeSteps() const { return numTimeSteps_; }
137 virtual Teuchos::RCP<TimeEventComposite<Scalar> >
138 getTimeEvents() const { return timeEvent_; }
139 virtual Teuchos::RCP<TimeStepControlStrategy<Scalar>>
142
144
145 virtual void setInitTime(Scalar t) { initTime_ = t; isInitialized_ = false; }
146 virtual void setFinalTime(Scalar t) { finalTime_ = t; isInitialized_ = false; }
147 virtual void setMinTimeStep(Scalar t) { minTimeStep_ = t; isInitialized_ = false; }
148 virtual void setInitTimeStep(Scalar t) { initTimeStep_ = t; isInitialized_ = false; }
149 virtual void setMaxTimeStep(Scalar t) { maxTimeStep_ = t; isInitialized_ = false; }
150 virtual void setInitIndex(int i) { initIndex_ = i; isInitialized_ = false; }
151 virtual void setFinalIndex(int i) { finalIndex_ = i; isInitialized_ = false; }
152 virtual void setMaxAbsError(Scalar e) { maxAbsError_ = e; isInitialized_ = false; }
153 virtual void setMaxRelError(Scalar e) { maxRelError_ = e; isInitialized_ = false; }
154 virtual void setMaxFailures(int i) { maxFailures_ = i; isInitialized_ = false; }
155 virtual void setMaxConsecFailures(int i) { maxConsecFailures_ = i; isInitialized_ = false; }
156 virtual void setPrintDtChanges(bool b) { printDtChanges_ = b; isInitialized_ = false; }
157 virtual void setNumTimeSteps(int numTimeSteps);
158 virtual void setOutputExactly(bool b);
159 virtual void setOutputIndices(std::vector<int> v);
160 virtual void setOutputTimes(std::vector<Scalar> outputTimes);
161 virtual void setOutputIndexInterval(int i);
162 virtual void setOutputTimeInterval(Scalar t);
163 virtual void setTimeEvents(
164 Teuchos::RCP<TimeEventComposite<Scalar> > teb = Teuchos::null);
165 virtual void setTimeStepControlStrategy(
166 Teuchos::RCP<TimeStepControlStrategy<Scalar> > tscs = Teuchos::null);
168
169 virtual void printDtChanges(int istep, Scalar dt_old, Scalar dt_new,
170 std::string reason) const;
171
172 virtual void initialize() const;
173 virtual bool isInitialized() { return isInitialized_; }
174 virtual void checkInitialized();
175
176protected:
177
178 mutable bool isInitialized_;
179 Scalar initTime_;
180 Scalar finalTime_;
192
193 Teuchos::RCP<TimeEventComposite<Scalar> > timeEvent_;
194
197
198 Teuchos::RCP<TimeStepControlStrategy<Scalar>> stepControlStrategy_;
199
200};
201
202
204// ------------------------------------------------------------------------
205template<class Scalar>
206Teuchos::RCP<TimeStepControl<Scalar> > createTimeStepControl(
207 Teuchos::RCP<Teuchos::ParameterList> const& pList,
208 bool runInitialize = true);
209
211template<class Scalar>
212Teuchos::RCP<Teuchos::ParameterList> getTimeStepControlPL()
213{
214 auto tsc = rcp(new Tempus::TimeStepControl<Scalar>());
215 return Teuchos::rcp_const_cast<Teuchos::ParameterList> (tsc->getValidParameters());
216}
217
218
219} // namespace Tempus
220
221#endif // Tempus_TimeStepControl_decl_hpp
TimeStepControl manages the time step size. There several mechanisms that effect the time step size a...
virtual void setNextTimeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory, Status &integratorStatus)
Determine the time step size.
virtual std::vector< Scalar > getOutputTimes() const
virtual void setOutputTimeInterval(Scalar t)
virtual bool timeInRange(const Scalar time) const
Check if time is within minimum and maximum time.
virtual void setNumTimeSteps(int numTimeSteps)
virtual void setTimeEvents(Teuchos::RCP< TimeEventComposite< Scalar > > teb=Teuchos::null)
virtual bool getOutputExactly() const
Return if the output needs to exactly happen on output time.
bool printDtChanges_
Print timestep size when it changes.
Scalar dtAfterTimeEvent_
dt to reinstate after TimeEvent step.
Scalar maxRelError_
Maximum Relative Error.
Scalar maxTimeStep_
Maximum Time Step.
Teuchos::RCP< TimeStepControlStrategy< Scalar > > stepControlStrategy_
virtual bool indexInRange(const int iStep) const
Check if time step index is within minimum and maximum index.
virtual Teuchos::RCP< TimeStepControlStrategy< Scalar > > getTimeStepControlStrategy() const
int numTimeSteps_
Number of time steps for Constant time step.
int maxConsecFailures_
Maximum Number of Consecutive Stepper Failures.
bool teAdjustedDt_
Flag indicating that dt was adjusted for time event.
Scalar minTimeStep_
Minimum Time Step.
bool isInitialized_
Bool if TimeStepControl is initialized.
virtual void setOutputIndices(std::vector< int > v)
virtual std::string getStepType() const
virtual Teuchos::RCP< TimeEventComposite< Scalar > > getTimeEvents() const
Teuchos::RCP< TimeEventComposite< Scalar > > timeEvent_
int maxFailures_
Maximum Number of Stepper Failures.
virtual std::vector< int > getOutputIndices() const
virtual void setTimeStepControlStrategy(Teuchos::RCP< TimeStepControlStrategy< Scalar > > tscs=Teuchos::null)
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
virtual void printDtChanges(int istep, Scalar dt_old, Scalar dt_new, std::string reason) const
virtual void setOutputTimes(std::vector< Scalar > outputTimes)
virtual Scalar getOutputTimeInterval() const
Scalar initTimeStep_
Initial Time Step.
Scalar maxAbsError_
Maximum Absolute Error.
virtual Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
Return ParameterList with current values.
Status
Status for the Integrator, the Stepper and the SolutionState.
Teuchos::RCP< TimeStepControl< Scalar > > createTimeStepControl(Teuchos::RCP< Teuchos::ParameterList > const &pList, bool runInitialize=true)
Nonmember constructor from ParameterList.
Teuchos::RCP< Teuchos::ParameterList > getTimeStepControlPL()
Nonmember function to return ParameterList with default values.