Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 namespace Tempus {
25 
48 template <class Scalar>
49 class TimeStepControl
50  : virtual public Teuchos::Describable,
51  virtual public Teuchos::VerboseObject<Tempus::TimeStepControl<Scalar>> {
52  public:
55 
58  Scalar initTime, Scalar finalTime, Scalar minTimeStep,
59  Scalar initTimeStep, Scalar maxTimeStep, int initIndex, int finalIndex,
60  Scalar maxAbsError, Scalar maxRelError, int maxFailures,
61  int maxConsecFailures, int numTimeSteps, bool printDtChanges,
62  bool outputExactly, std::vector<int> outputIndices,
63  std::vector<Scalar> outputTimes, int outputIndexInterval,
64  Scalar outputTimeInterval,
65  Teuchos::RCP<TimeEventComposite<Scalar>> timeEvent,
66  Teuchos::RCP<TimeStepControlStrategy<Scalar>> stepControlStrategy);
67 
69  virtual ~TimeStepControl() {}
70 
72  virtual void setNextTimeStep(
73  const Teuchos::RCP<SolutionHistory<Scalar>>& solutionHistory,
74  Status& integratorStatus);
75 
77  virtual bool timeInRange(const Scalar time) const;
78 
80  virtual bool indexInRange(const int iStep) const;
81 
84 
86 
87  std::string description() const;
89  const Teuchos::EVerbosityLevel verbLevel) const;
91 
93 
94  virtual std::string getStepType() const;
95  virtual Scalar getInitTime() const { return initTime_; }
96  virtual Scalar getFinalTime() const { return finalTime_; }
97  virtual Scalar getMinTimeStep() const { return minTimeStep_; }
98  virtual Scalar getInitTimeStep() const { return initTimeStep_; }
99  virtual Scalar getMaxTimeStep() const { return maxTimeStep_; }
100  virtual int getInitIndex() const { return initIndex_; }
101  virtual int getFinalIndex() const { return finalIndex_; }
102  virtual Scalar getMaxAbsError() const { return maxAbsError_; }
103  virtual Scalar getMaxRelError() const { return maxRelError_; }
104 
113  virtual bool getOutputExactly() const;
114 
115  virtual std::vector<int> getOutputIndices() const;
116  virtual std::vector<Scalar> getOutputTimes() const;
117  virtual int getOutputIndexInterval() const;
118  virtual Scalar getOutputTimeInterval() const;
119  virtual int getMaxFailures() const { return maxFailures_; }
120  virtual int getMaxConsecFailures() const { return maxConsecFailures_; }
121  virtual bool getPrintDtChanges() const { return printDtChanges_; }
122  virtual int getNumTimeSteps() const { return numTimeSteps_; }
124  {
125  return timeEvent_;
126  }
129  {
130  return stepControlStrategy_;
131  }
133 
135 
136  virtual void setInitTime(Scalar t)
137  {
138  initTime_ = t;
139  isInitialized_ = false;
140  }
141  virtual void setFinalTime(Scalar t)
142  {
143  finalTime_ = t;
144  isInitialized_ = false;
145  }
146  virtual void setMinTimeStep(Scalar t)
147  {
148  minTimeStep_ = t;
149  isInitialized_ = false;
150  }
151  virtual void setInitTimeStep(Scalar t)
152  {
153  initTimeStep_ = t;
154  isInitialized_ = false;
155  }
156  virtual void setMaxTimeStep(Scalar t)
157  {
158  maxTimeStep_ = t;
159  isInitialized_ = false;
160  }
161  virtual void setInitIndex(int i)
162  {
163  initIndex_ = i;
164  isInitialized_ = false;
165  }
166  virtual void setFinalIndex(int i)
167  {
168  finalIndex_ = i;
169  isInitialized_ = false;
170  }
171  virtual void setMaxAbsError(Scalar e)
172  {
173  maxAbsError_ = e;
174  isInitialized_ = false;
175  }
176  virtual void setMaxRelError(Scalar e)
177  {
178  maxRelError_ = e;
179  isInitialized_ = false;
180  }
181  virtual void setMaxFailures(int i)
182  {
183  maxFailures_ = i;
184  isInitialized_ = false;
185  }
186  virtual void setMaxConsecFailures(int i)
187  {
188  maxConsecFailures_ = i;
189  isInitialized_ = false;
190  }
191  virtual void setPrintDtChanges(bool b)
192  {
193  printDtChanges_ = b;
194  isInitialized_ = false;
195  }
196  virtual void setNumTimeSteps(int numTimeSteps);
197  virtual void setOutputExactly(bool b);
198  virtual void setOutputIndices(std::vector<int> v);
199  virtual void setOutputTimes(std::vector<Scalar> outputTimes);
200  virtual void setOutputIndexInterval(int i);
201  virtual void setOutputTimeInterval(Scalar t);
202  virtual void setTimeEvents(
203  Teuchos::RCP<TimeEventComposite<Scalar>> teb = Teuchos::null);
204  virtual void setTimeStepControlStrategy(
205  Teuchos::RCP<TimeStepControlStrategy<Scalar>> tscs = Teuchos::null);
207 
208  virtual void printDtChanges(int istep, Scalar dt_old, Scalar dt_new,
209  std::string reason) const;
210 
211  virtual void initialize() const;
212  virtual bool isInitialized() { return isInitialized_; }
213  virtual void checkInitialized();
214 
215  protected:
216  mutable bool isInitialized_;
217  Scalar initTime_;
218  Scalar finalTime_;
219  Scalar minTimeStep_;
220  Scalar initTimeStep_;
221  Scalar maxTimeStep_;
224  Scalar maxAbsError_;
225  Scalar maxRelError_;
230 
232 
235 
237 };
238 
240 // ------------------------------------------------------------------------
241 template <class Scalar>
244  bool runInitialize = true);
245 
247 template <class Scalar>
249 {
250  auto tsc = rcp(new Tempus::TimeStepControl<Scalar>());
251  return Teuchos::rcp_const_cast<Teuchos::ParameterList>(
252  tsc->getValidParameters());
253 }
254 
255 } // namespace Tempus
256 
257 #endif // Tempus_TimeStepControl_decl_hpp
virtual void setTimeEvents(Teuchos::RCP< TimeEventComposite< Scalar >> teb=Teuchos::null)
Teuchos::RCP< TimeStepControl< Scalar > > createTimeStepControl(Teuchos::RCP< Teuchos::ParameterList > const &pList, bool runInitialize=true)
Nonmember constructor from ParameterList.
int numTimeSteps_
Number of time steps for Constant time step.
Scalar maxTimeStep_
Maximum Time Step.
bool isInitialized_
Bool if TimeStepControl is initialized.
virtual void setNumTimeSteps(int numTimeSteps)
virtual Scalar getMaxRelError() const
virtual ~TimeStepControl()
Destructor.
virtual Scalar getFinalTime() const
Scalar maxAbsError_
Maximum Absolute Error.
virtual Teuchos::RCP< TimeStepControlStrategy< Scalar > > getTimeStepControlStrategy() const
Scalar dtAfterTimeEvent_
dt to reinstate after TimeEvent step.
virtual Scalar getInitTimeStep() const
virtual void printDtChanges(int istep, Scalar dt_old, Scalar dt_new, std::string reason) const
Teuchos::RCP< TimeEventComposite< Scalar > > timeEvent_
Scalar maxRelError_
Maximum Relative Error.
Teuchos::RCP< Teuchos::ParameterList > getTimeStepControlPL()
Nonmember function to return ParameterList with default values.
virtual void setOutputTimes(std::vector< Scalar > outputTimes)
virtual void setTimeStepControlStrategy(Teuchos::RCP< TimeStepControlStrategy< Scalar >> tscs=Teuchos::null)
virtual std::string getStepType() const
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Teuchos::RCP< TimeStepControlStrategy< Scalar > > stepControlStrategy_
Status
Status for the Integrator, the Stepper and the SolutionState.
bool teAdjustedDt_
Flag indicating that dt was adjusted for time event.
This composite TimeEvent loops over added TimeEvents.
virtual bool indexInRange(const int iStep) const
Check if time step index is within minimum and maximum index.
virtual Scalar getMaxAbsError() const
TimeStepControl manages the time step size. There several mechanisms that effect the time step size a...
Scalar initTimeStep_
Initial Time Step.
TimeStepControl()
Default Constructor.
Scalar minTimeStep_
Minimum Time Step.
virtual void setOutputTimeInterval(Scalar t)
bool printDtChanges_
Print timestep size when it changes.
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
virtual Scalar getMaxTimeStep() const
virtual Scalar getMinTimeStep() const
virtual void setNextTimeStep(const Teuchos::RCP< SolutionHistory< Scalar >> &solutionHistory, Status &integratorStatus)
Determine the time step size.
int maxFailures_
Maximum Number of Stepper Failures.
virtual bool timeInRange(const Scalar time) const
Check if time is within minimum and maximum time.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
virtual int getOutputIndexInterval() const
virtual Scalar getOutputTimeInterval() const
virtual bool getOutputExactly() const
Return if the output needs to exactly happen on output time.
virtual void setInitTimeStep(Scalar t)
int maxConsecFailures_
Maximum Number of Consecutive Stepper Failures.
TimeStepControlStrategy class for TimeStepControl.
virtual Scalar getInitTime() const
virtual void setOutputIndices(std::vector< int > v)
virtual std::vector< Scalar > getOutputTimes() const
virtual Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
Return ParameterList with current values.
virtual std::vector< int > getOutputIndices() const
virtual Teuchos::RCP< TimeEventComposite< Scalar > > getTimeEvents() const