Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Tempus_SolutionHistory_decl.hpp
Go to the documentation of this file.
1 //@HEADER
2 // *****************************************************************************
3 // Tempus: Time Integration and Sensitivity Analysis Package
4 //
5 // Copyright 2017 NTESS and the Tempus contributors.
6 // SPDX-License-Identifier: BSD-3-Clause
7 // *****************************************************************************
8 //@HEADER
9 
10 #ifndef Tempus_SolutionHistory_decl_hpp
11 #define Tempus_SolutionHistory_decl_hpp
12 
13 #include "Tempus_config.hpp"
14 #include "Tempus_SolutionState.hpp"
15 #include "Tempus_Interpolator.hpp"
16 
17 namespace Tempus {
18 
25 };
26 
116 template <class Scalar>
117 class SolutionHistory
118  : virtual public Teuchos::Describable,
119  virtual public Teuchos::VerboseObject<SolutionHistory<Scalar> > {
120  public:
122  SolutionHistory();
123 
126  std::string name,
127  Teuchos::RCP<std::vector<Teuchos::RCP<SolutionState<Scalar> > > > history,
128  Teuchos::RCP<Interpolator<Scalar> > interpolator, StorageType storageType,
129  int storageLimit);
130 
133 
135 
136  void addState(const Teuchos::RCP<SolutionState<Scalar> >& state,
138  bool doChecks = true); // <-- Perform internal checks.
139 
142  const bool updateTime = true);
143 
145  void removeState(const Teuchos::RCP<SolutionState<Scalar> >& state);
146 
148  void removeState(const Scalar time);
149 
151  Teuchos::RCP<SolutionState<Scalar> > findState(const Scalar time) const;
152 
155  const Scalar time) const;
156 
158  void interpolateState(const Scalar time,
159  SolutionState<Scalar>* state_out) const;
160 
162  void initWorkingState();
163 
165  void promoteWorkingState();
166 
168  void clear()
169  {
170  history_->clear();
171  isInitialized_ = false;
172  }
173 
176  void copy(Teuchos::RCP<const SolutionHistory<Scalar> > sh);
178 
180 
181  std::string getName() const { return name_; }
183 
185  void setName(std::string name) { name_ = name; }
186 
189  const
190  {
191  return history_;
192  }
193 
196  Teuchos::RCP<std::vector<Teuchos::RCP<SolutionState<Scalar> > > > h)
197  {
198  history_ = h;
199  isInitialized_ = false;
200  }
201 
204  {
206  !((0 <= i) && (i < (int)history_->size())), std::out_of_range,
207  "Error - SolutionHistory index is out of range.\n"
208  << " [Min, Max] = [ 0, " << history_->size() << "]\n"
209  << " index = " << i << "\n");
210  return (*history_)[i];
211  }
212 
215  {
217  !((0 <= i) && (i < (int)history_->size())), std::out_of_range,
218  "Error - SolutionHistory index is out of range.\n"
219  << " [Min, Max] = [ 0, " << history_->size() << "]\n"
220  << " index = " << i << "\n");
221  return (*history_)[i];
222  }
223 
226  {
227  const int m = history_->size();
229  if (m == 0)
230  state = Teuchos::null;
231  else if (m == 1 || workingState_ == Teuchos::null)
232  state = (*history_)[m - 1];
233  else if (m > 1)
234  state = (*history_)[m - 2];
235  return state;
236  }
237 
240  {
241  if (workingState_ == Teuchos::null && warn) {
243  Teuchos::OSTab ostab(out, 1, "SolutionHistory::getWorkingState()");
244  *out << "Warning - WorkingState is null and likely has been promoted. "
245  << "You might want to call getCurrentState() instead.\n"
246  << std::endl;
247  }
248  return workingState_;
249  }
250 
252  int getNumStates() const { return history_->size(); }
253 
255  Scalar getCurrentTime() const { return getCurrentState()->getTime(); }
256 
258  int getCurrentIndex() const { return getCurrentState()->getIndex(); }
259 
261  void setStorageLimit(int storage_limit);
262 
264  int getStorageLimit() const { return storageLimit_; }
265 
267  void setStorageType(StorageType st);
268 
271 
273  void setStorageTypeString(std::string st);
274 
276  std::string getStorageTypeString() const;
277 
279  Scalar minTime() const { return (history_->front())->getTime(); }
280 
282  Scalar maxTime() const { return (history_->back())->getTime(); }
283 
289  bool warn = true) const;
290 
296  bool warn = true) const;
297 
303  bool warn = true) const;
304 
310  int index, bool warn = true) const;
312 
315 
318 
320 
321  virtual std::string description() const;
322  virtual void describe(Teuchos::FancyOStream& out,
323  const Teuchos::EVerbosityLevel verbLevel) const;
325 
327 
328  void setInterpolator(const Teuchos::RCP<Interpolator<Scalar> >& interpolator);
335 
337  void printHistory(std::string verb = "low") const;
338 
345  void initialize() const;
346 
348  bool isInitialized() { return isInitialized_; }
349 
350  protected:
351  std::string name_;
356 
359 
360  mutable bool isInitialized_;
361 };
362 
364 template <class Scalar>
366 
368 template <class Scalar>
371 
373 template <class Scalar>
375  const Teuchos::RCP<SolutionState<Scalar> >& state);
376 
378 template <class Scalar>
380  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& model);
381 
382 } // namespace Tempus
383 
384 #endif // Tempus_SolutionHistory_decl_hpp
Teuchos::RCP< Interpolator< Scalar > > unSetInterpolator()
Unset the interpolator for this history.
Scalar minTime() const
Return the current minimum time of the SolutionStates.
std::string getName() const
Get this SolutionHistory&#39;s name.
Keep the 2 newest states for undo.
int getCurrentIndex() const
Get the current timestep index.
Teuchos::RCP< Interpolator< Scalar > > interpolator_
void initWorkingState()
Initialize the working state.
StorageType getStorageType() const
Get the enum storage type.
Teuchos::RCP< SolutionHistory< Scalar > > createSolutionHistory()
Nonmember constructor.
void printHistory(std::string verb="low") const
Print information on States in the SolutionHistory.
Teuchos::RCP< SolutionState< Scalar > > interpolateState(const Scalar time) const
Generate and interpolate a new solution state at requested time.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
int getNumStates() const
Get the number of states.
Teuchos::RCP< const SolutionState< Scalar > > operator[](const int i) const
Subscript operator (const version)
Teuchos::RCP< Teuchos::ParameterList > getNonconstParameterList()
Return a valid non-const ParameterList with current settings.
Teuchos::RCP< Interpolator< Scalar > > getNonconstInterpolator()
Scalar getCurrentTime() const
Get the current time.
void setStorageLimit(int storage_limit)
Set the maximum storage of this history.
Teuchos::RCP< SolutionHistory< Scalar > > createSolutionHistoryPL(Teuchos::RCP< Teuchos::ParameterList > pList)
Nonmember constructor from a ParameterList.
Teuchos::RCP< SolutionHistory< Scalar > > createSolutionHistoryME(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model)
Nonmember contructor from a Thyra ModelEvaluator.
Teuchos::RCP< SolutionState< Scalar > > getWorkingState(bool warn=true) const
Return the working state.
Teuchos::RCP< SolutionState< Scalar > > workingState_
The state being worked on.
Teuchos::RCP< SolutionState< Scalar > > getStateTimeIndex(int index, bool warn=true) const
Get the state with timestep index equal to &quot;index&quot;.
void initialize() const
Initialize SolutionHistory.
void setHistory(Teuchos::RCP< std::vector< Teuchos::RCP< SolutionState< Scalar > > > > h)
Set underlining history.
void promoteWorkingState()
Promote the working state to current state.
void removeState(const Teuchos::RCP< SolutionState< Scalar > > &state)
Remove solution state.
bool isInitialized_
Bool if SolutionHistory is initialized.
Teuchos::RCP< SolutionState< Scalar > > getCurrentState() const
Return the current state, i.e., the last accepted state.
Teuchos::RCP< SolutionState< Scalar > > getStateTimeIndexNM1(bool warn=true) const
Get the state with timestep index equal to n-1.
Teuchos::RCP< std::vector< Teuchos::RCP< SolutionState< Scalar > > > > getHistory() const
Get underlining history.
Base strategy class for interpolation functionality.
virtual std::string description() const
Teuchos::RCP< SolutionState< Scalar > > getStateTimeIndexN(bool warn=true) const
Get the state with timestep index equal to n.
Teuchos::RCP< SolutionState< Scalar > > getStateTimeIndexNM2(bool warn=true) const
Get the state with timestep index equal to n-2.
void addState(const Teuchos::RCP< SolutionState< Scalar > > &state, bool doChecks=true)
Add solution state to history.
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
std::string getStorageTypeString() const
Set the string storage type.
void setName(std::string name)
Set this SolutionHistory&#39;s name.
void setStorageType(StorageType st)
Set the storage type via enum.
void addWorkingState(const Teuchos::RCP< SolutionState< Scalar > > &state, const bool updateTime=true)
Add a working solution state to history.
Keep a fix number of states.
Teuchos::RCP< SolutionHistory< Scalar > > createSolutionHistoryState(const Teuchos::RCP< SolutionState< Scalar > > &state)
Nonmember contructor from a SolutionState.
void setStorageTypeString(std::string st)
Set the storage type via string.
Teuchos::RCP< const Interpolator< Scalar > > getInterpolator() const
Scalar maxTime() const
Return the current maximum time of the SolutionStates.
void setInterpolator(const Teuchos::RCP< Interpolator< Scalar > > &interpolator)
Set the interpolator for this history.
int getStorageLimit() const
Get the maximum storage of this history.
void copy(Teuchos::RCP< const SolutionHistory< Scalar > > sh)
Teuchos::RCP< SolutionState< Scalar > > findState(const Scalar time) const
Find solution state at requested time (no interpolation)
Teuchos::RCP< SolutionState< Scalar > > operator[](const int i)
Subscript operator.
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
Return a valid ParameterList with current settings.
virtual RCP< FancyOStream > getOStream() const
Solution state for integrators and steppers.
bool isInitialized()
Return if SolutionHistory is initialized.
Teuchos::RCP< std::vector< Teuchos::RCP< SolutionState< Scalar > > > > history_