Tempus Version of the Day
Time Integration
Loading...
Searching...
No Matches
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
24namespace Tempus {
25
26
29template<class Scalar>
30class IntegratorBasic : virtual public Tempus::Integrator<Scalar>
31{
32public:
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 void copy(Teuchos::RCP<IntegratorBasic<Scalar> > iB);
48
50 virtual ~IntegratorBasic() {}
51
53
54
55 virtual bool advanceTime();
57 virtual bool advanceTime(const Scalar timeFinal) override;
59 virtual void startIntegrator();
61 virtual void startTimeStep();
63 virtual void checkTimeStep();
65 virtual void endIntegrator();
67
69
70
71 virtual Scalar getTime() const override
72 {return solutionHistory_->getCurrentTime();}
74 virtual int getIndex() const override
75 {return solutionHistory_->getCurrentIndex();}
77 virtual Status getStatus() const override
78 {return integratorStatus_;}
80 virtual void setStatus(const Status st) override { integratorStatus_ = st; }
82 virtual Teuchos::RCP<Stepper<Scalar> > getStepper() const override
83 {return stepper_;}
85 virtual void setModel(Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > model);
87 virtual void setStepper(Teuchos::RCP<Stepper<Scalar> > stepper);
89 virtual void initializeSolutionHistory(
90 Teuchos::RCP<SolutionState<Scalar> > state = Teuchos::null);
92 virtual void initializeSolutionHistory(Scalar t0,
93 Teuchos::RCP<const Thyra::VectorBase<Scalar> > x0,
94 Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdot0 = Teuchos::null,
95 Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdotdot0 = Teuchos::null);
97 virtual Teuchos::RCP<const SolutionHistory<Scalar> > getSolutionHistory() const override
98 {return solutionHistory_;}
100 virtual Teuchos::RCP<SolutionHistory<Scalar> > getNonConstSolutionHistory() override
101 {return solutionHistory_;}
103 virtual void setSolutionHistory(
104 Teuchos::RCP<SolutionHistory<Scalar> > sh = Teuchos::null);
106 virtual Teuchos::RCP<const TimeStepControl<Scalar> > getTimeStepControl() const override
107 {return timeStepControl_;}
108 virtual Teuchos::RCP<TimeStepControl<Scalar> > getNonConstTimeStepControl() override
109 {return timeStepControl_;}
111 virtual void setTimeStepControl(
112 Teuchos::RCP<TimeStepControl<Scalar> > tsc = Teuchos::null);
114 virtual Teuchos::RCP<IntegratorObserver<Scalar> > getObserver()
115 {return integratorObserver_;}
117 virtual void setObserver(
118 Teuchos::RCP<IntegratorObserver<Scalar> > obs = Teuchos::null);
120 virtual void initialize();
122 bool isInitialized() { return isInitialized_; }
123
124 //TODO: finish this
126 virtual Teuchos::RCP<Teuchos::Time> getIntegratorTimer() const override
127 { return integratorTimer_;}
128 virtual Teuchos::RCP<Teuchos::Time> getStepperTimer() const override
129 { return stepperTimer_;}
130
132 virtual Teuchos::RCP<Thyra::VectorBase<Scalar> > getX() const
133 {return solutionHistory_->getCurrentState()->getX();}
135 virtual Teuchos::RCP<Thyra::VectorBase<Scalar> > getXDot() const
136 {return solutionHistory_->getCurrentState()->getXDot();}
138 virtual Teuchos::RCP<Thyra::VectorBase<Scalar> > getXDotDot() const
139 {return solutionHistory_->getCurrentState()->getXDotDot();}
140
142 virtual Teuchos::RCP<SolutionState<Scalar> > getCurrentState()
143 {return solutionHistory_->getCurrentState();}
144
146 { outputScreenInterval_ = i; }
147
149 { return outputScreenInterval_; }
150
151 virtual void setScreenOutputIndexList(std::vector<int> indices)
152 { outputScreenIndices_ = indices; }
153
155 virtual void setScreenOutputIndexList(std::string str);
156
157 virtual std::vector<int> getScreenOutputIndexList() const
158 { return outputScreenIndices_; }
159
160 virtual std::string getScreenOutputIndexListString() const;
162
164 { TEUCHOS_TEST_FOR_EXCEPTION( true, std::logic_error,
165 " IntegratorBasic::parseScreenOutput() -- Should call setScreenOutputIndexList()\n");
166 }
167
168 Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
169
171
172 std::string description() const override;
173 void describe(Teuchos::FancyOStream & out,
174 const Teuchos::EVerbosityLevel verbLevel) const override;
176
178 void setIntegratorName(std::string i) { integratorName_ = i; }
180 std::string getIntegratorName() const { return integratorName_; }
181
183 std::string getIntegratorType() const { return integratorType_; }
184
185protected:
186
188 void setIntegratorType(std::string i);
189 std::string integratorName_;
190 std::string integratorType_;
191
192 Teuchos::RCP<Stepper<Scalar> > stepper_;
193 Teuchos::RCP<SolutionHistory<Scalar> > solutionHistory_;
194 Teuchos::RCP<TimeStepControl<Scalar> > timeStepControl_;
195 Teuchos::RCP<IntegratorObserver<Scalar> > integratorObserver_;
196
197 std::vector<int> outputScreenIndices_;
199
206
207 Teuchos::RCP<Teuchos::Time> integratorTimer_;
208 Teuchos::RCP<Teuchos::Time> stepperTimer_;
209
210};
211
212
214template<class Scalar>
215Teuchos::RCP<IntegratorBasic<Scalar> > createIntegratorBasic(
216 Teuchos::RCP<Teuchos::ParameterList> pList,
217 bool runInitialize=true);
218
219
221template<class Scalar>
222Teuchos::RCP<IntegratorBasic<Scalar> > createIntegratorBasic(
223 Teuchos::RCP<Teuchos::ParameterList> pList,
224 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
225 bool runInitialize=true);
226
227
229template<class Scalar>
230Teuchos::RCP<IntegratorBasic<Scalar> > createIntegratorBasic(
231 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
232 std::string stepperType);
233
234
236template<class Scalar>
237Teuchos::RCP<IntegratorBasic<Scalar> > createIntegratorBasic();
238
239
241template<class Scalar>
242Teuchos::RCP<IntegratorBasic<Scalar> > createIntegratorBasic(
243 Teuchos::RCP<Teuchos::ParameterList> pList,
244 std::vector<Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > > models,
245 bool runInitialize=true);
246
247
248} // namespace Tempus
249
250#endif // Tempus_IntegratorBasic_decl_hpp
virtual void checkTimeStep()
Check if time step has passed or failed.
std::vector< int > outputScreenIndices_
Vector of screen output indices.
virtual void initializeSolutionHistory(Teuchos::RCP< SolutionState< Scalar > > state=Teuchos::null)
Set the initial state which has the initial conditions.
virtual void setSolutionHistory(Teuchos::RCP< SolutionHistory< Scalar > > sh=Teuchos::null)
Set the SolutionHistory.
virtual Teuchos::RCP< const TimeStepControl< Scalar > > getTimeStepControl() const override
Get the TimeStepControl.
virtual Teuchos::RCP< Thyra::VectorBase< Scalar > > getXDotDot() const
Get current the second time derivative of the solution, xdotdot.
virtual Teuchos::RCP< TimeStepControl< Scalar > > getNonConstTimeStepControl() override
int outputScreenInterval_
screen output interval.
virtual void startIntegrator()
Perform tasks before start of integrator.
std::string description() const override
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
Create valid IntegratorBasic ParameterList.
void setIntegratorName(std::string i)
Set the Integrator Name.
Teuchos::RCP< IntegratorObserver< Scalar > > integratorObserver_
virtual Status getStatus() const override
Get Status.
Teuchos::RCP< TimeStepControl< Scalar > > timeStepControl_
Teuchos::RCP< SolutionHistory< Scalar > > solutionHistory_
virtual Scalar getTime() const override
Get current time.
virtual Teuchos::RCP< Teuchos::Time > getIntegratorTimer() const override
Returns the IntegratorTimer_ for this Integrator.
virtual Teuchos::RCP< Stepper< Scalar > > getStepper() const override
Get the Stepper.
virtual void setScreenOutputIndexInterval(int i)
virtual void setStepper(Teuchos::RCP< Stepper< Scalar > > stepper)
Set the Stepper.
std::string integratorName_
integrator name used for I/O.
virtual void setTimeStepControl(Teuchos::RCP< TimeStepControl< Scalar > > tsc=Teuchos::null)
Set the TimeStepControl.
virtual void initialize()
Initializes the Integrator after set* function calls.
std::string getIntegratorType() const
Get the Integrator Type.
void setIntegratorType(std::string i)
Set the Integrator Type.
virtual void endIntegrator()
Perform tasks after end of integrator.
virtual Teuchos::RCP< const SolutionHistory< Scalar > > getSolutionHistory() const override
Get the SolutionHistory.
IntegratorBasic()
Default constructor (requires calls to setModel and setSolutionHistory for initial conditions before ...
virtual void startTimeStep()
Start time step.
virtual void copy(Teuchos::RCP< IntegratorBasic< Scalar > > iB)
Copy (a shallow copy)
virtual Teuchos::RCP< Thyra::VectorBase< Scalar > > getX() const
Get current the solution, x.
virtual int getIndex() const override
Get current index.
virtual Teuchos::RCP< Thyra::VectorBase< Scalar > > getXDot() const
Get current the time derivative of the solution, xdot.
Teuchos::RCP< Teuchos::Time > integratorTimer_
std::string integratorType_
the integrator type.
virtual void setScreenOutputIndexList(std::vector< int > indices)
virtual int getScreenOutputIndexInterval() const
Teuchos::RCP< Stepper< Scalar > > stepper_
virtual void setStatus(const Status st) override
Set Status.
std::string getIntegratorName() const
Get the Integrator Name.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const override
virtual Teuchos::RCP< SolutionHistory< Scalar > > getNonConstSolutionHistory() override
Get the SolutionHistory.
virtual void setModel(Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > model)
Set the model on the stepper.
Teuchos::RCP< Teuchos::Time > stepperTimer_
virtual bool advanceTime()
Advance the solution to timeMax, and return true if successful.
virtual Teuchos::RCP< Teuchos::Time > getStepperTimer() const override
virtual Teuchos::RCP< IntegratorObserver< Scalar > > getObserver()
Get the Observer.
virtual void setObserver(Teuchos::RCP< IntegratorObserver< Scalar > > obs=Teuchos::null)
Set the Observer.
bool isInitialized()
Return true if IntegratorBasic is initialized.
virtual Teuchos::RCP< SolutionState< Scalar > > getCurrentState()
Get current state.
virtual std::string getScreenOutputIndexListString() const
virtual std::vector< int > getScreenOutputIndexList() const
IntegratorObserver class for time integrators.
Thyra Base interface for time integrators. Time integrators are designed to advance the solution from...
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Solution state for integrators and steppers. SolutionState contains the metadata for solutions and th...
Thyra Base interface for time steppers.
TimeStepControl manages the time step size. There several mechanisms that effect the time step size a...
Status
Status for the Integrator, the Stepper and the SolutionState.
Teuchos::RCP< IntegratorBasic< Scalar > > createIntegratorBasic()
Nonmember constructor.