Tempus  Version of the Day
Time Integration
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 // Teuchos
13 #include "Teuchos_VerboseObject.hpp"
14 #include "Teuchos_Describable.hpp"
15 #include "Teuchos_ParameterListAcceptorDefaultBase.hpp"
16 // Tempus
17 #include "Tempus_config.hpp"
18 #include "Tempus_SolutionHistory.hpp"
20 
21 #include <iostream>
22 #include <iterator>
23 #include <sstream>
24 
25 
26 namespace Tempus {
27 
28 /** \brief TimeStepControl manages the time step size.
29  * There several mechanicisms that effect the time step size and
30  * handled with this class:
31  * - Maximum and minimum time
32  * - Maximum and minimum time index
33  * - Maximum and minimum time step size
34  * - Maximum and minimum error
35  * - Maximum and minimum order
36  * - Startup considerations (e.g., ramping)
37  * - Solution and/or diagnostic output
38  * Additional step control can be added through the step control observer,
39  * or inheriting from this class.
40  * - Stability limits (e.g., CFL number)
41  */
42 template<class Scalar>
43 class TimeStepControl
44  : virtual public Teuchos::Describable,
45  virtual public Teuchos::ParameterListAcceptor,
46  virtual public Teuchos::VerboseObject<Tempus::TimeStepControl<Scalar> >
47 {
48 public:
49 
50  /// Constructor
51  TimeStepControl(Teuchos::RCP<Teuchos::ParameterList> pList = Teuchos::null);
52 
53  /// This is a copy constructor
54  TimeStepControl(const TimeStepControl<Scalar>& tsc);
55 
56  /// Destructor
57  virtual ~TimeStepControl() {}
58 
59  virtual void initialize(Teuchos::RCP<Teuchos::ParameterList> pList =
60  Teuchos::null) { this->setParameterList(pList); }
61 
62  /** \brief Determine the time step size.*/
63  virtual void getNextTimeStep(
64  const Teuchos::RCP<SolutionHistory<Scalar> > & solutionHistory,
65  Status & integratorStatus);
66 
67  /** \brief Check if time is within minimum and maximum time. */
68  virtual bool timeInRange(const Scalar time) const;
69 
70  /** \brief Check if time step index is within minimum and maximum index. */
71  virtual bool indexInRange(const int iStep) const;
72 
73  /** \brief Set the TimeStepControlStrategy. */
74  virtual void setTimeStepControlStrategy(
75  Teuchos::RCP<TimeStepControlStrategy<Scalar> > tscs = Teuchos::null);
76 
77  /// \name Overridden from Teuchos::ParameterListAccepto{}
78  //@{
79  void setParameterList(const Teuchos::RCP<Teuchos::ParameterList> & pl);
80  Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
81  Teuchos::RCP<Teuchos::ParameterList> getNonconstParameterList();
82  Teuchos::RCP<Teuchos::ParameterList> unsetParameterList();
83  //@}
84 
85  /// \name Overridden from Teuchos::Describable
86  //@{
87  std::string description() const;
88  void describe(Teuchos::FancyOStream &out,
89  const Teuchos::EVerbosityLevel verbLevel) const;
90  //@}
91 
92  /// \name Get ParameterList values
93  //@{
94  virtual Scalar getInitTime() const
95  { return tscPL_->get<double>("Initial Time"); }
96  virtual Scalar getFinalTime() const
97  { return tscPL_->get<double>("Final Time"); }
98  virtual Scalar getMinTimeStep() const
99  { return tscPL_->get<double>("Minimum Time Step"); }
100  virtual Scalar getInitTimeStep() const
101  { return tscPL_->get<double>("Initial Time Step"); }
102  virtual Scalar getMaxTimeStep() const
103  { return tscPL_->get<double>("Maximum Time Step"); }
104  virtual int getInitIndex() const
105  { return tscPL_->get<int> ("Initial Time Index"); }
106  virtual int getFinalIndex() const
107  { return tscPL_->get<int> ("Final Time Index"); }
108  virtual Scalar getMaxAbsError() const
109  { return tscPL_->get<double>("Maximum Absolute Error"); }
110  virtual Scalar getMaxRelError() const
111  { return tscPL_->get<double>("Maximum Relative Error"); }
112  virtual int getMinOrder() const
113  { return tscPL_->get<int> ("Minimum Order"); }
114  virtual int getInitOrder() const
115  { return tscPL_->get<int> ("Initial Order"); }
116  virtual int getMaxOrder() const
117  { return tscPL_->get<int> ("Maximum Order"); }
118  virtual std::string getStepType() const
119  { return tscPL_->get<std::string>("Integrator Step Type"); }
120  virtual std::vector<int> getOutputIndices() const
121  { return outputIndices_; }
122  virtual std::vector<Scalar> getOutputTimes() const
123  { return outputTimes_; }
124  virtual int getMaxFailures() const
125  { return tscPL_->get<int>("Maximum Number of Stepper Failures"); }
126  virtual int getMaxConsecFailures() const
127  { return tscPL_->
128  get<int>("Maximum Number of Consecutive Stepper Failures"); }
129  virtual int getNumTimeSteps() const
130  { return tscPL_->get<int>("Number of Time Steps"); }
131  virtual Teuchos::RCP<TimeStepControlStrategyComposite<Scalar>>
133  //@}
134 
135  /// \name Set ParameterList values
136  //@{
137  virtual void setInitTime(Scalar InitTime)
138  { tscPL_->set<double>("Initial Time" , InitTime ); }
139  virtual void setFinalTime(Scalar FinalTime)
140  { tscPL_->set<double>("Final Time" , FinalTime ); }
141  virtual void setMinTimeStep(Scalar MinTimeStep)
142  { tscPL_->set<double>("Minimum Time Step" , MinTimeStep ); }
143  virtual void setInitTimeStep(Scalar InitTimeStep)
144  { tscPL_->set<double>("Initial Time Step" , InitTimeStep); }
145  virtual void setMaxTimeStep(Scalar MaxTimeStep)
146  { tscPL_->set<double>("Maximum Time Step" , MaxTimeStep ); }
147  virtual void setInitIndex(int InitIndex)
148  { tscPL_->set<int> ("Initial Time Index" , InitIndex ); }
149  virtual void setFinalIndex(int FinalIndex)
150  { tscPL_->set<int> ("Final Time Index" , FinalIndex ); }
151  virtual void setMaxAbsError(Scalar MaxAbsError)
152  { tscPL_->set<double>("Maximum Absolute Error" , MaxAbsError ); }
153  virtual void setMaxRelError(Scalar MaxRelError)
154  { tscPL_->set<double>("Maximum Relative Error" , MaxRelError ); }
155  virtual void setMinOrder(int MinOrder)
156  { tscPL_->set<int> ("Minimum Order" , MinOrder ); }
157  virtual void setInitOrder(int InitOrder)
158  { tscPL_->set<int> ("Initial Order" , InitOrder ); }
159  virtual void setMaxOrder(int MaxOrder)
160  { tscPL_->set<int> ("Maximum Order" , MaxOrder ); }
161  virtual void setStepType(std::string StepType)
162  { tscPL_->set<std::string>("Integrator Step Type", StepType ); }
163  virtual void setOutputIndices(std::vector<int> OutputIndices)
164  { outputIndices_ = OutputIndices;
165  std::ostringstream ss;
166  std::copy(OutputIndices.begin(), OutputIndices.end()-1,
167  std::ostream_iterator<int>(ss, ","));
168  ss << OutputIndices.back();
169  tscPL_->set<std::string>("Output Index List", ss.str());
170  }
171  virtual void setOutputTimes(std::vector<Scalar> OutputTimes)
172  { outputTimes_ = OutputTimes;
173  std::ostringstream ss;
174  std::copy(OutputTimes.begin(), OutputTimes.end()-1,
175  std::ostream_iterator<Scalar>(ss, ","));
176  ss << OutputTimes.back();
177  tscPL_->set<std::string>("Output Time List", ss.str());
178  }
179  virtual void setMaxFailures(int MaxFailures)
180  { tscPL_->set<int>("Maximum Number of Stepper Failures", MaxFailures); }
181  virtual void setMaxConsecFailures(int MaxConsecFailures)
182  { tscPL_->set<int>
183  ("Maximum Number of Consecutive Stepper Failures", MaxConsecFailures); }
184  virtual void setNumTimeSteps(int numTimeSteps);
185  //@}
186 
187 protected:
188 
189  Teuchos::RCP<Teuchos::ParameterList> tscPL_;
190 
191  std::vector<int> outputIndices_; ///< Vector of output indices.
192  std::vector<Scalar> outputTimes_; ///< Vector of output times.
193 
194  bool outputAdjustedDt_; ///< Flag indicating that dt was adjusted for output.
195  Scalar dtAfterOutput_; ///< dt to reinstate after output step.
196 
197  Teuchos::RCP<TimeStepControlStrategyComposite<Scalar>> stepControlStrategy_;
198 
199 };
200 } // namespace Tempus
201 
202 #endif // Tempus_TimeStepControl_decl_hpp
Tempus::TimeStepControl::setOutputTimes
virtual void setOutputTimes(std::vector< Scalar > OutputTimes)
Definition: Tempus_TimeStepControl_decl.hpp:171
Tempus::TimeStepControl::getInitOrder
virtual int getInitOrder() const
Definition: Tempus_TimeStepControl_decl.hpp:114
Tempus::TimeStepControl::getOutputTimes
virtual std::vector< Scalar > getOutputTimes() const
Definition: Tempus_TimeStepControl_decl.hpp:122
Tempus::TimeStepControl::setInitIndex
virtual void setInitIndex(int InitIndex)
Definition: Tempus_TimeStepControl_decl.hpp:147
Tempus_TimeStepControlStrategyComposite.hpp
Tempus::TimeStepControl::getMaxRelError
virtual Scalar getMaxRelError() const
Definition: Tempus_TimeStepControl_decl.hpp:110
Tempus::TimeStepControl::getMaxOrder
virtual int getMaxOrder() const
Definition: Tempus_TimeStepControl_decl.hpp:116
Tempus::TimeStepControl::dtAfterOutput_
Scalar dtAfterOutput_
dt to reinstate after output step.
Definition: Tempus_TimeStepControl_decl.hpp:195
Tempus::TimeStepControl::unsetParameterList
Teuchos::RCP< Teuchos::ParameterList > unsetParameterList()
Definition: Tempus_TimeStepControl_impl.hpp:577
Tempus::solutionHistory
Teuchos::RCP< SolutionHistory< Scalar > > solutionHistory(Teuchos::RCP< Teuchos::ParameterList > pList=Teuchos::null)
Nonmember constructor.
Definition: Tempus_SolutionHistory_impl.hpp:504
Tempus::TimeStepControl::getOutputIndices
virtual std::vector< int > getOutputIndices() const
Definition: Tempus_TimeStepControl_decl.hpp:120
Tempus::TimeStepControl::~TimeStepControl
virtual ~TimeStepControl()
Destructor.
Definition: Tempus_TimeStepControl_decl.hpp:57
Tempus::TimeStepControl::setTimeStepControlStrategy
virtual void setTimeStepControlStrategy(Teuchos::RCP< TimeStepControlStrategy< Scalar > > tscs=Teuchos::null)
Set the TimeStepControlStrategy.
Definition: Tempus_TimeStepControl_impl.hpp:440
Tempus::TimeStepControl::setOutputIndices
virtual void setOutputIndices(std::vector< int > OutputIndices)
Definition: Tempus_TimeStepControl_decl.hpp:163
Tempus::TimeStepControl::timeInRange
virtual bool timeInRange(const Scalar time) const
Check if time is within minimum and maximum time.
Definition: Tempus_TimeStepControl_impl.hpp:215
Tempus::TimeStepControl::setMaxOrder
virtual void setMaxOrder(int MaxOrder)
Definition: Tempus_TimeStepControl_decl.hpp:159
Tempus::TimeStepControl::initialize
virtual void initialize(Teuchos::RCP< Teuchos::ParameterList > pList=Teuchos::null)
Definition: Tempus_TimeStepControl_decl.hpp:59
Tempus
Definition: Tempus_AdjointAuxSensitivityModelEvaluator_decl.hpp:20
Tempus::TimeStepControl::getValidParameters
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
Definition: Tempus_TimeStepControl_impl.hpp:511
Tempus::TimeStepControl::getMinOrder
virtual int getMinOrder() const
Definition: Tempus_TimeStepControl_decl.hpp:112
Tempus::TimeStepControl::setNumTimeSteps
virtual void setNumTimeSteps(int numTimeSteps)
Definition: Tempus_TimeStepControl_impl.hpp:231
Tempus::TimeStepControl::setMinOrder
virtual void setMinOrder(int MinOrder)
Definition: Tempus_TimeStepControl_decl.hpp:155
Tempus::TimeStepControl::setFinalIndex
virtual void setFinalIndex(int FinalIndex)
Definition: Tempus_TimeStepControl_decl.hpp:149
Tempus::TimeStepControl::getNextTimeStep
virtual void getNextTimeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory, Status &integratorStatus)
Determine the time step size.
Definition: Tempus_TimeStepControl_impl.hpp:49
Tempus::TimeStepControl::getTimeStepControlStrategy
virtual Teuchos::RCP< TimeStepControlStrategyComposite< Scalar > > getTimeStepControlStrategy() const
Definition: Tempus_TimeStepControl_decl.hpp:132
Tempus::TimeStepControl::setInitTimeStep
virtual void setInitTimeStep(Scalar InitTimeStep)
Definition: Tempus_TimeStepControl_decl.hpp:143
Tempus::TimeStepControl::tscPL_
Teuchos::RCP< Teuchos::ParameterList > tscPL_
Definition: Tempus_TimeStepControl_decl.hpp:189
Tempus::TimeStepControl::setMaxFailures
virtual void setMaxFailures(int MaxFailures)
Definition: Tempus_TimeStepControl_decl.hpp:179
Tempus::TimeStepControl::setMaxConsecFailures
virtual void setMaxConsecFailures(int MaxConsecFailures)
Definition: Tempus_TimeStepControl_decl.hpp:181
Tempus::TimeStepControl::getStepType
virtual std::string getStepType() const
Definition: Tempus_TimeStepControl_decl.hpp:118
Tempus::TimeStepControl::setInitTime
virtual void setInitTime(Scalar InitTime)
Definition: Tempus_TimeStepControl_decl.hpp:137
Tempus::TimeStepControl::getFinalIndex
virtual int getFinalIndex() const
Definition: Tempus_TimeStepControl_decl.hpp:106
Tempus::TimeStepControl::getMinTimeStep
virtual Scalar getMinTimeStep() const
Definition: Tempus_TimeStepControl_decl.hpp:98
Tempus::TimeStepControl::getInitIndex
virtual int getInitIndex() const
Definition: Tempus_TimeStepControl_decl.hpp:104
Tempus::TimeStepControl::indexInRange
virtual bool indexInRange(const int iStep) const
Check if time step index is within minimum and maximum index.
Definition: Tempus_TimeStepControl_impl.hpp:224
Tempus::TimeStepControl::setFinalTime
virtual void setFinalTime(Scalar FinalTime)
Definition: Tempus_TimeStepControl_decl.hpp:139
Tempus::TimeStepControl::outputTimes_
std::vector< Scalar > outputTimes_
Vector of output times.
Definition: Tempus_TimeStepControl_decl.hpp:192
Tempus::TimeStepControl::TimeStepControl
TimeStepControl(Teuchos::RCP< Teuchos::ParameterList > pList=Teuchos::null)
Constructor.
Definition: Tempus_TimeStepControl_impl.hpp:30
Tempus::TimeStepControl::getFinalTime
virtual Scalar getFinalTime() const
Definition: Tempus_TimeStepControl_decl.hpp:96
Tempus::TimeStepControl::getInitTimeStep
virtual Scalar getInitTimeStep() const
Definition: Tempus_TimeStepControl_decl.hpp:100
Tempus::SolutionHistory
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Definition: Tempus_Integrator.hpp:25
Tempus::TimeStepControl::setStepType
virtual void setStepType(std::string StepType)
Definition: Tempus_TimeStepControl_decl.hpp:161
Tempus::TimeStepControl::setMaxAbsError
virtual void setMaxAbsError(Scalar MaxAbsError)
Definition: Tempus_TimeStepControl_decl.hpp:151
Tempus::TimeStepControl::getMaxFailures
virtual int getMaxFailures() const
Definition: Tempus_TimeStepControl_decl.hpp:124
Tempus::TimeStepControl::outputAdjustedDt_
bool outputAdjustedDt_
Flag indicating that dt was adjusted for output.
Definition: Tempus_TimeStepControl_decl.hpp:194
Tempus::TimeStepControl::setMaxTimeStep
virtual void setMaxTimeStep(Scalar MaxTimeStep)
Definition: Tempus_TimeStepControl_decl.hpp:145
Tempus::TimeStepControl::getInitTime
virtual Scalar getInitTime() const
Definition: Tempus_TimeStepControl_decl.hpp:94
Tempus::TimeStepControl::setInitOrder
virtual void setInitOrder(int InitOrder)
Definition: Tempus_TimeStepControl_decl.hpp:157
Tempus::TimeStepControl::stepControlStrategy_
Teuchos::RCP< TimeStepControlStrategyComposite< Scalar > > stepControlStrategy_
Definition: Tempus_TimeStepControl_decl.hpp:197
Tempus::TimeStepControl::getMaxAbsError
virtual Scalar getMaxAbsError() const
Definition: Tempus_TimeStepControl_decl.hpp:108
Tempus::TimeStepControl::getMaxConsecFailures
virtual int getMaxConsecFailures() const
Definition: Tempus_TimeStepControl_decl.hpp:126
Tempus::TimeStepControlStrategy
StepControlStrategy class for TimeStepControl.
Definition: Tempus_TimeStepControlStrategy.hpp:26
Tempus::TimeStepControl::setMaxRelError
virtual void setMaxRelError(Scalar MaxRelError)
Definition: Tempus_TimeStepControl_decl.hpp:153
Tempus::TimeStepControl::getNonconstParameterList
Teuchos::RCP< Teuchos::ParameterList > getNonconstParameterList()
Definition: Tempus_TimeStepControl_impl.hpp:569
Tempus::TimeStepControl::outputIndices_
std::vector< int > outputIndices_
Vector of output indices.
Definition: Tempus_TimeStepControl_decl.hpp:191
Tempus::TimeStepControl::describe
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
Definition: Tempus_TimeStepControl_impl.hpp:266
Tempus::TimeStepControl::getNumTimeSteps
virtual int getNumTimeSteps() const
Definition: Tempus_TimeStepControl_decl.hpp:129
Tempus::TimeStepControl::description
std::string description() const
Definition: Tempus_TimeStepControl_impl.hpp:258
Tempus::Status
Status
Status for the Integrator, the Stepper and the SolutionState.
Definition: Tempus_Types.hpp:16
Tempus::TimeStepControl::setParameterList
void setParameterList(const Teuchos::RCP< Teuchos::ParameterList > &pl)
Definition: Tempus_TimeStepControl_impl.hpp:278
Tempus::TimeStepControl::setMinTimeStep
virtual void setMinTimeStep(Scalar MinTimeStep)
Definition: Tempus_TimeStepControl_decl.hpp:141
Tempus::TimeStepControl::getMaxTimeStep
virtual Scalar getMaxTimeStep() const
Definition: Tempus_TimeStepControl_decl.hpp:102