Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Tempus_IntegratorBasic_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_IntegratorBasic_decl_hpp
10 #define Tempus_IntegratorBasic_decl_hpp
11 
12 #include "Teuchos_Time.hpp"
13 
14 #include "Thyra_ModelEvaluator.hpp"
15 
16 #include "Tempus_config.hpp"
17 #include "Tempus_Stepper.hpp"
18 #include "Tempus_Integrator.hpp"
19 #include "Tempus_TimeStepControl.hpp"
20 #include "Tempus_IntegratorObserverBasic.hpp"
21 
22 namespace Tempus {
23 
26 template <class Scalar>
27 class IntegratorBasic : virtual public Tempus::Integrator<Scalar> {
28  public:
32 
35  Teuchos::RCP<SolutionHistory<Scalar> > solutionHistory,
36  Teuchos::RCP<TimeStepControl<Scalar> > timeStepControl,
37  Teuchos::RCP<IntegratorObserver<Scalar> > integratorObserver,
38  std::vector<int> outputScreenIndices,
39  int outputScreenInterval);
40 
42  virtual void copy(Teuchos::RCP<IntegratorBasic<Scalar> > iB);
43 
45  virtual ~IntegratorBasic() {}
46 
48 
49  virtual bool advanceTime();
52  virtual bool advanceTime(const Scalar timeFinal) override;
54  virtual void startIntegrator();
56  virtual void startTimeStep();
58  virtual void checkTimeStep();
60  virtual void endIntegrator();
62 
64 
65  virtual Scalar getTime() const override
67  {
68  return solutionHistory_->getCurrentTime();
69  }
71  virtual int getIndex() const override
72  {
73  return solutionHistory_->getCurrentIndex();
74  }
76  virtual Status getStatus() const override { return integratorStatus_; }
78  virtual void setStatus(const Status st) override { integratorStatus_ = st; }
80  virtual Teuchos::RCP<Stepper<Scalar> > getStepper() const override
81  {
82  return stepper_;
83  }
85  virtual void setModel(
88  virtual void setStepper(Teuchos::RCP<Stepper<Scalar> > stepper);
90  virtual void initializeSolutionHistory(
91  Teuchos::RCP<SolutionState<Scalar> > state = Teuchos::null);
93  virtual void initializeSolutionHistory(
94  Scalar t0, Teuchos::RCP<const Thyra::VectorBase<Scalar> > x0,
95  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdot0 = Teuchos::null,
96  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdotdot0 = Teuchos::null);
99  const override
100  {
101  return solutionHistory_;
102  }
105  override
106  {
107  return solutionHistory_;
108  }
110  virtual void setSolutionHistory(
111  Teuchos::RCP<SolutionHistory<Scalar> > sh = Teuchos::null);
114  const override
115  {
116  return timeStepControl_;
117  }
119  override
120  {
121  return timeStepControl_;
122  }
124  virtual void setTimeStepControl(
125  Teuchos::RCP<TimeStepControl<Scalar> > tsc = Teuchos::null);
128  {
129  return integratorObserver_;
130  }
132  virtual void setObserver(
133  Teuchos::RCP<IntegratorObserver<Scalar> > obs = Teuchos::null);
135  virtual void initialize();
137  bool isInitialized() { return isInitialized_; }
138 
139  // TODO: finish this
142  {
143  return integratorTimer_;
144  }
146  {
147  return stepperTimer_;
148  }
149 
152  {
153  return solutionHistory_->getCurrentState()->getX();
154  }
157  {
158  return solutionHistory_->getCurrentState()->getXDot();
159  }
162  {
163  return solutionHistory_->getCurrentState()->getXDotDot();
164  }
165 
168  {
169  return solutionHistory_->getCurrentState();
170  }
171 
172  virtual void setScreenOutputIndexInterval(int i)
173  {
175  }
176 
177  virtual int getScreenOutputIndexInterval() const
178  {
179  return outputScreenInterval_;
180  }
181 
182  virtual void setScreenOutputIndexList(std::vector<int> indices)
183  {
184  outputScreenIndices_ = indices;
185  }
186 
188  virtual void setScreenOutputIndexList(std::string str);
189 
190  virtual std::vector<int> getScreenOutputIndexList() const
191  {
192  return outputScreenIndices_;
193  }
194 
195  virtual std::string getScreenOutputIndexListString() const;
197 
199  {
200  TEUCHOS_TEST_FOR_EXCEPTION(true, std::logic_error,
201  " IntegratorBasic::parseScreenOutput() -- "
202  "Should call setScreenOutputIndexList()\n");
203  }
204 
206 
208 
209  std::string description() const override;
211  const Teuchos::EVerbosityLevel verbLevel) const override;
213 
215  void setIntegratorName(std::string i) { integratorName_ = i; }
217  std::string getIntegratorName() const { return integratorName_; }
218 
220  std::string getIntegratorType() const { return integratorType_; }
221 
222  protected:
224  void setIntegratorType(std::string i);
225  std::string integratorName_;
226  std::string integratorType_;
227 
232 
233  std::vector<int> outputScreenIndices_;
235 
242 
245 };
246 
248 template <class Scalar>
250  Teuchos::RCP<Teuchos::ParameterList> pList, bool runInitialize = true);
251 
253 template <class Scalar>
257  bool runInitialize = true);
258 
260 template <class Scalar>
263  std::string stepperType);
264 
266 template <class Scalar>
268 
270 template <class Scalar>
273  std::vector<Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > > models,
274  bool runInitialize = true);
275 
276 } // namespace Tempus
277 
278 #endif // Tempus_IntegratorBasic_decl_hpp
virtual bool advanceTime()
Advance the solution to timeMax, and return true if successful.
Teuchos::RCP< Stepper< Scalar > > stepper_
virtual Teuchos::RCP< Stepper< Scalar > > getStepper() const override
Get the Stepper.
int outputScreenInterval_
screen output interval.
virtual Scalar getTime() const override
Get current time.
virtual void setModel(Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > model)
Set the model on the stepper.
virtual void setStatus(const Status st) override
Set Status.
Teuchos::RCP< Teuchos::Time > integratorTimer_
std::string description() const override
virtual void setTimeStepControl(Teuchos::RCP< TimeStepControl< Scalar > > tsc=Teuchos::null)
Set the TimeStepControl.
virtual void setObserver(Teuchos::RCP< IntegratorObserver< Scalar > > obs=Teuchos::null)
Set the Observer.
virtual Teuchos::RCP< SolutionState< Scalar > > getCurrentState()
Get current state.
virtual Status getStatus() const override
Get Status.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Teuchos::RCP< Teuchos::Time > stepperTimer_
virtual Teuchos::RCP< Thyra::VectorBase< Scalar > > getXDotDot() const
Get current the second time derivative of the solution, xdotdot.
virtual std::string getScreenOutputIndexListString() const
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
Create valid IntegratorBasic ParameterList.
virtual void setStepper(Teuchos::RCP< Stepper< Scalar > > stepper)
Set the Stepper.
Thyra Base interface for time steppers.
virtual void checkTimeStep()
Check if time step has passed or failed.
virtual Teuchos::RCP< const SolutionHistory< Scalar > > getSolutionHistory() const override
Get the SolutionHistory.
virtual void setSolutionHistory(Teuchos::RCP< SolutionHistory< Scalar > > sh=Teuchos::null)
Set the SolutionHistory.
std::string integratorName_
integrator name used for I/O.
Status
Status for the Integrator, the Stepper and the SolutionState.
std::string getIntegratorType() const
Get the Integrator Type.
IntegratorObserver class for time integrators.
Teuchos::RCP< TimeStepControl< Scalar > > timeStepControl_
Teuchos::RCP< SolutionHistory< Scalar > > solutionHistory_
std::string getIntegratorName() const
Get the Integrator Name.
TimeStepControl manages the time step size. There several mechanisms that effect the time step size a...
virtual int getIndex() const override
Get current index.
virtual void initializeSolutionHistory(Teuchos::RCP< SolutionState< Scalar > > state=Teuchos::null)
Set the initial state which has the initial conditions.
virtual std::vector< int > getScreenOutputIndexList() const
virtual void setScreenOutputIndexList(std::vector< int > indices)
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
bool isInitialized()
Return true if IntegratorBasic is initialized.
virtual int getScreenOutputIndexInterval() const
void setIntegratorName(std::string i)
Set the Integrator Name.
virtual Teuchos::RCP< const TimeStepControl< Scalar > > getTimeStepControl() const override
Get the TimeStepControl.
virtual void initialize()
Initializes the Integrator after set* function calls.
virtual void endIntegrator()
Perform tasks after end of integrator.
virtual ~IntegratorBasic()
Destructor.
virtual void startIntegrator()
Perform tasks before start of integrator.
void setIntegratorType(std::string i)
Set the Integrator Type.
Thyra Base interface for time integrators. Time integrators are designed to advance the solution from...
virtual Teuchos::RCP< Teuchos::Time > getStepperTimer() const override
virtual void copy(Teuchos::RCP< IntegratorBasic< Scalar > > iB)
Copy (a shallow copy)
virtual Teuchos::RCP< SolutionHistory< Scalar > > getNonConstSolutionHistory() override
Get the SolutionHistory.
virtual Teuchos::RCP< TimeStepControl< Scalar > > getNonConstTimeStepControl() override
virtual void startTimeStep()
Start time step.
virtual Teuchos::RCP< Thyra::VectorBase< Scalar > > getXDot() const
Get current the time derivative of the solution, xdot.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const override
virtual Teuchos::RCP< IntegratorObserver< Scalar > > getObserver()
Get the Observer.
Teuchos::RCP< IntegratorBasic< Scalar > > createIntegratorBasic(Teuchos::RCP< Teuchos::ParameterList > pList, bool runInitialize=true)
Nonmember constructor.
Teuchos::RCP< IntegratorObserver< Scalar > > integratorObserver_
virtual Teuchos::RCP< Thyra::VectorBase< Scalar > > getX() const
Get current the solution, x.
std::vector< int > outputScreenIndices_
Vector of screen output indices.
std::string integratorType_
the integrator type.
Solution state for integrators and steppers.
virtual Teuchos::RCP< Teuchos::Time > getIntegratorTimer() const override
Returns the IntegratorTimer_ for this Integrator.
virtual void setScreenOutputIndexInterval(int i)