Tempus  Version of the Day
Time Integration
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 
13 #include "Teuchos_Time.hpp"
14 
15 #include "Thyra_ModelEvaluator.hpp"
16 
17 #include "Tempus_config.hpp"
18 #include "Tempus_Stepper.hpp"
19 #include "Tempus_Integrator.hpp"
20 #include "Tempus_TimeStepControl.hpp"
21 #include "Tempus_IntegratorObserverBasic.hpp"
22 
23 
24 namespace Tempus {
25 
26 
29 template<class Scalar>
30 class IntegratorBasic : virtual public Tempus::Integrator<Scalar>
31 {
32 public:
33 
36 
39  Teuchos::RCP<Stepper<Scalar> > stepper,
40  Teuchos::RCP<SolutionHistory<Scalar> > solutionHistory,
41  Teuchos::RCP<TimeStepControl<Scalar> > timeStepControl,
42  Teuchos::RCP<IntegratorObserver<Scalar> > integratorObserver,
43  std::vector<int> outputScreenIndices,
44  int outputScreenInterval);
45 
47  virtual ~IntegratorBasic() {}
48 
50 
51  virtual bool advanceTime();
54  virtual bool advanceTime(const Scalar timeFinal) override;
56  virtual void startIntegrator();
58  virtual void startTimeStep();
60  virtual void checkTimeStep();
62  virtual void endIntegrator();
64  virtual Teuchos::RCP<Teuchos::ParameterList> getTempusParameterList()
65  override { return Teuchos::rcp_const_cast<Teuchos::ParameterList> (this->getValidParameters()); }
66  virtual void setTempusParameterList(
67  Teuchos::RCP<Teuchos::ParameterList> pl) override
68  {
69  TEUCHOS_TEST_FOR_EXCEPTION( true, std::logic_error,
70  " IntegratorBasic::setTempusParameterList() -- Deprecated!\n");
71  }
73 
75 
76  virtual Scalar getTime() const override
78  {return solutionHistory_->getCurrentTime();}
80  virtual int getIndex() const override
81  {return solutionHistory_->getCurrentIndex();}
83  virtual Status getStatus() const override
84  {return integratorStatus_;}
86  virtual void setStatus(const Status st) override { integratorStatus_ = st; }
88  virtual Teuchos::RCP<Stepper<Scalar> > getStepper() const override
89  {return stepper_;}
91  virtual void setModel(Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > model);
93  virtual void setStepper(Teuchos::RCP<Stepper<Scalar> > stepper);
95  virtual void initializeSolutionHistory(
96  Teuchos::RCP<SolutionState<Scalar> > state = Teuchos::null);
98  virtual void initializeSolutionHistory(Scalar t0,
99  Teuchos::RCP<const Thyra::VectorBase<Scalar> > x0,
100  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdot0 = Teuchos::null,
101  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdotdot0 = Teuchos::null);
103  virtual Teuchos::RCP<const SolutionHistory<Scalar> > getSolutionHistory() const override
104  {return solutionHistory_;}
106  virtual Teuchos::RCP<SolutionHistory<Scalar> > getNonConstSolutionHistory() override
107  {return solutionHistory_;}
109  virtual void setSolutionHistory(
110  Teuchos::RCP<SolutionHistory<Scalar> > sh = Teuchos::null);
112  virtual Teuchos::RCP<const TimeStepControl<Scalar> > getTimeStepControl() const override
113  {return timeStepControl_;}
114  virtual Teuchos::RCP<TimeStepControl<Scalar> > getNonConstTimeStepControl() override
115  {return timeStepControl_;}
117  virtual void setTimeStepControl(
118  Teuchos::RCP<TimeStepControl<Scalar> > tsc = Teuchos::null);
120  virtual Teuchos::RCP<IntegratorObserver<Scalar> > getObserver()
121  {return integratorObserver_;}
123  virtual void setObserver(
124  Teuchos::RCP<IntegratorObserver<Scalar> > obs = Teuchos::null);
126  virtual void initialize();
127  //TODO: finish this
129  virtual Teuchos::RCP<Teuchos::Time> getIntegratorTimer() const override
130  { return integratorTimer_;}
131  virtual Teuchos::RCP<Teuchos::Time> getStepperTimer() const override
132  { return stepperTimer_;}
133 
135  virtual Teuchos::RCP<Thyra::VectorBase<Scalar> > getX() const
136  {return solutionHistory_->getCurrentState()->getX();}
138  virtual Teuchos::RCP<Thyra::VectorBase<Scalar> > getXDot() const
139  {return solutionHistory_->getCurrentState()->getXDot();}
141  virtual Teuchos::RCP<Thyra::VectorBase<Scalar> > getXDotDot() const
142  {return solutionHistory_->getCurrentState()->getXDotDot();}
143 
145  virtual Teuchos::RCP<SolutionState<Scalar> > getCurrentState()
146  {return solutionHistory_->getCurrentState();}
147 
148  virtual void setScreenOutputIndexInterval(int i)
149  { outputScreenInterval_ = i; }
150 
151  virtual int getScreenOutputIndexInterval() const
152  { return outputScreenInterval_; }
153 
154  virtual void setScreenOutputIndexList(std::vector<int> indices)
155  { outputScreenIndices_ = indices; }
156 
158  virtual void setScreenOutputIndexList(std::string str);
159 
160  virtual std::vector<int> getScreenOutputIndexList() const
161  { return outputScreenIndices_; }
162 
163  virtual std::string getScreenOutputIndexListString() const;
165 
167  { TEUCHOS_TEST_FOR_EXCEPTION( true, std::logic_error,
168  " IntegratorBasic::parseScreenOutput() -- Should call setScreenOutputIndexList()\n");
169  }
170 
171  Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
172 
174 
175  std::string description() const override;
176  void describe(Teuchos::FancyOStream & out,
177  const Teuchos::EVerbosityLevel verbLevel) const override;
179 
181  void setIntegratorName(std::string i) { integratorName_ = i; }
183  std::string getIntegratorName() const { return integratorName_; }
184 
186  std::string getIntegratorType() const { return integratorType_; }
187 
188 protected:
189 
191  void setIntegratorType(std::string i);
192  std::string integratorName_;
193  std::string integratorType_;
194 
195  Teuchos::RCP<Stepper<Scalar> > stepper_;
196  Teuchos::RCP<SolutionHistory<Scalar> > solutionHistory_;
197  Teuchos::RCP<TimeStepControl<Scalar> > timeStepControl_;
198  Teuchos::RCP<IntegratorObserver<Scalar> > integratorObserver_;
199 
200  std::vector<int> outputScreenIndices_;
202 
209 
210  Teuchos::RCP<Teuchos::Time> integratorTimer_;
211  Teuchos::RCP<Teuchos::Time> stepperTimer_;
212 
213 };
214 
215 
217 template<class Scalar>
218 Teuchos::RCP<IntegratorBasic<Scalar> > createIntegratorBasic(
219  Teuchos::RCP<Teuchos::ParameterList> pList);
220 
221 
223 template<class Scalar>
224 Teuchos::RCP<IntegratorBasic<Scalar> > createIntegratorBasic(
225  Teuchos::RCP<Teuchos::ParameterList> pList,
226  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model);
227 
228 
230 template<class Scalar>
231 Teuchos::RCP<IntegratorBasic<Scalar> > createIntegratorBasic(
232  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
233  std::string stepperType);
234 
235 
237 template<class Scalar>
238 Teuchos::RCP<IntegratorBasic<Scalar> > createIntegratorBasic();
239 
240 
242 template<class Scalar>
243 Teuchos::RCP<IntegratorBasic<Scalar> > createIntegratorBasic(
244  Teuchos::RCP<Teuchos::ParameterList> pList,
245  std::vector<Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > > models);
246 
247 
248 } // namespace Tempus
249 
250 #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.
std::string getIntegratorType() const
Get the Integrator Type.
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.
Teuchos::RCP< Teuchos::Time > stepperTimer_
IntegratorBasic()
Default constructor that requires a subsequent, ??? , setStepper, and initialize calls.
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< Teuchos::ParameterList > getTempusParameterList() override
Return a copy of the Tempus ParameterList DEPRECATED!
virtual std::string getScreenOutputIndexListString() const
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.
virtual Teuchos::RCP< Thyra::VectorBase< Scalar > > getX() const
Get current the solution, x.
Status
Status for the Integrator, the Stepper and the SolutionState.
IntegratorObserver class for time integrators.
Teuchos::RCP< TimeStepControl< Scalar > > timeStepControl_
Teuchos::RCP< SolutionHistory< Scalar > > solutionHistory_
virtual void setTempusParameterList(Teuchos::RCP< Teuchos::ParameterList > pl) override
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 int getScreenOutputIndexInterval() const
virtual void initializeSolutionHistory(Teuchos::RCP< SolutionState< Scalar > > state=Teuchos::null)
Set the initial state which has the initial conditions.
std::string getIntegratorName() const
Get the Integrator Name.
virtual void setScreenOutputIndexList(std::vector< int > indices)
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
void setIntegratorName(std::string i)
Set the Integrator Name.
virtual Teuchos::RCP< const TimeStepControl< Scalar > > getTimeStepControl() const override
Get the TimeStepControl.
Teuchos::RCP< IntegratorBasic< Scalar > > createIntegratorBasic(Teuchos::RCP< Teuchos::ParameterList > pList)
Nonmember constructor.
virtual void initialize()
Initializes the Integrator after set* function calls.
virtual Teuchos::RCP< Thyra::VectorBase< Scalar > > getXDot() const
Get current the time derivative of the solution, xdot.
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 std::vector< int > getScreenOutputIndexList() const
virtual Teuchos::RCP< Teuchos::Time > getStepperTimer() const override
virtual Teuchos::RCP< SolutionHistory< Scalar > > getNonConstSolutionHistory() override
Get the SolutionHistory.
virtual Teuchos::RCP< TimeStepControl< Scalar > > getNonConstTimeStepControl() override
virtual void startTimeStep()
Start time step.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const override
virtual Teuchos::RCP< IntegratorObserver< Scalar > > getObserver()
Get the Observer.
Teuchos::RCP< IntegratorObserver< Scalar > > integratorObserver_
virtual Teuchos::RCP< Thyra::VectorBase< Scalar > > getXDotDot() const
Get current the second time derivative of the solution, xdotdot.
std::vector< int > outputScreenIndices_
Vector of screen output indices.
std::string integratorType_
the integrator type.
Solution state for integrators and steppers. SolutionState contains the metadata for solutions and th...
virtual Teuchos::RCP< Teuchos::Time > getIntegratorTimer() const override
Returns the IntegratorTimer_ for this Integrator.
virtual void setScreenOutputIndexInterval(int i)