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 
25 namespace Tempus {
26 
49 template<class Scalar>
50 class TimeStepControl
51  : virtual public Teuchos::Describable,
52  virtual public Teuchos::VerboseObject<Tempus::TimeStepControl<Scalar> >
53 {
54 public:
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 
98 
100 
101  std::string description() const;
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_; }
138  getTimeEvents() const { return timeEvent_; }
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 
176 protected:
177 
178  mutable bool isInitialized_;
179  Scalar initTime_;
180  Scalar finalTime_;
181  Scalar minTimeStep_;
182  Scalar initTimeStep_;
183  Scalar maxTimeStep_;
186  Scalar maxAbsError_;
187  Scalar maxRelError_;
192 
194 
197 
199 
200 };
201 
202 
204 // ------------------------------------------------------------------------
205 template<class Scalar>
208  bool runInitialize = true);
209 
211 template<class Scalar>
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
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.
virtual void setTimeEvents(Teuchos::RCP< TimeEventComposite< Scalar > > teb=Teuchos::null)
Teuchos::RCP< Teuchos::ParameterList > getTimeStepControlPL()
Nonmember function to return ParameterList with default values.
virtual void setOutputTimes(std::vector< Scalar > outputTimes)
virtual std::string getStepType() const
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Teuchos::RCP< TimeStepControlStrategy< Scalar > > stepControlStrategy_
virtual void setTimeStepControlStrategy(Teuchos::RCP< TimeStepControlStrategy< Scalar > > tscs=Teuchos::null)
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 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