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: 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_IntegratorBasic_decl_hpp
11#define Tempus_IntegratorBasic_decl_hpp
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
23namespace Tempus {
24
27template <class Scalar>
28class IntegratorBasic : virtual public Tempus::Integrator<Scalar> {
29 public:
33
35 IntegratorBasic(Teuchos::RCP<Stepper<Scalar> > stepper,
36 Teuchos::RCP<SolutionHistory<Scalar> > solutionHistory,
37 Teuchos::RCP<TimeStepControl<Scalar> > timeStepControl,
38 Teuchos::RCP<IntegratorObserver<Scalar> > integratorObserver,
39 std::vector<int> outputScreenIndices,
40 int outputScreenInterval);
41
43 virtual void copy(Teuchos::RCP<IntegratorBasic<Scalar> > iB);
44
46 virtual ~IntegratorBasic() {}
47
49
50
51 virtual bool advanceTime();
53 virtual bool advanceTime(const Scalar timeFinal) override;
55 virtual void startIntegrator();
57 virtual void startTimeStep();
59 virtual void checkTimeStep();
61 virtual void endIntegrator();
63
65
66
67 virtual Scalar getTime() const override
68 {
69 return solutionHistory_->getCurrentTime();
70 }
72 virtual int getIndex() const override
73 {
74 return solutionHistory_->getCurrentIndex();
75 }
77 virtual Status getStatus() const override { return integratorStatus_; }
79 virtual void setStatus(const Status st) override { integratorStatus_ = st; }
81 virtual Teuchos::RCP<Stepper<Scalar> > getStepper() const override
82 {
83 return stepper_;
84 }
86 virtual void setModel(
87 Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > model);
89 virtual void setStepper(Teuchos::RCP<Stepper<Scalar> > stepper);
91 virtual void initializeSolutionHistory(
92 Teuchos::RCP<SolutionState<Scalar> > state = Teuchos::null);
94 virtual void initializeSolutionHistory(
95 Scalar t0, Teuchos::RCP<const Thyra::VectorBase<Scalar> > x0,
96 Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdot0 = Teuchos::null,
97 Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdotdot0 = Teuchos::null);
99 virtual Teuchos::RCP<const SolutionHistory<Scalar> > getSolutionHistory()
100 const override
101 {
102 return solutionHistory_;
103 }
105 virtual Teuchos::RCP<SolutionHistory<Scalar> > getNonConstSolutionHistory()
106 override
107 {
108 return solutionHistory_;
109 }
111 virtual void setSolutionHistory(
112 Teuchos::RCP<SolutionHistory<Scalar> > sh = Teuchos::null);
114 virtual Teuchos::RCP<const TimeStepControl<Scalar> > getTimeStepControl()
115 const override
116 {
117 return timeStepControl_;
118 }
119 virtual Teuchos::RCP<TimeStepControl<Scalar> > getNonConstTimeStepControl()
120 override
121 {
122 return timeStepControl_;
123 }
125 virtual void setTimeStepControl(
126 Teuchos::RCP<TimeStepControl<Scalar> > tsc = Teuchos::null);
128 virtual Teuchos::RCP<IntegratorObserver<Scalar> > getObserver()
129 {
130 return integratorObserver_;
131 }
133 virtual void setObserver(
134 Teuchos::RCP<IntegratorObserver<Scalar> > obs = Teuchos::null);
136 virtual void initialize();
138 bool isInitialized() { return isInitialized_; }
139
140 // TODO: finish this
142 virtual Teuchos::RCP<Teuchos::Time> getIntegratorTimer() const override
143 {
144 return integratorTimer_;
145 }
146 virtual Teuchos::RCP<Teuchos::Time> getStepperTimer() const override
147 {
148 return stepperTimer_;
149 }
150
152 virtual Teuchos::RCP<Thyra::VectorBase<Scalar> > getX() const
153 {
154 return solutionHistory_->getCurrentState()->getX();
155 }
157 virtual Teuchos::RCP<Thyra::VectorBase<Scalar> > getXDot() const
158 {
159 return solutionHistory_->getCurrentState()->getXDot();
160 }
162 virtual Teuchos::RCP<Thyra::VectorBase<Scalar> > getXDotDot() const
163 {
164 return solutionHistory_->getCurrentState()->getXDotDot();
165 }
166
168 virtual Teuchos::RCP<SolutionState<Scalar> > getCurrentState()
169 {
170 return solutionHistory_->getCurrentState();
171 }
172
174 {
176 }
177
179 {
181 }
182
183 virtual void setScreenOutputIndexList(std::vector<int> indices)
184 {
185 outputScreenIndices_ = indices;
186 }
187
189 virtual void setScreenOutputIndexList(std::string str);
190
191 virtual std::vector<int> getScreenOutputIndexList() const
192 {
194 }
195
196 virtual std::string getScreenOutputIndexListString() const;
198
200 {
201 TEUCHOS_TEST_FOR_EXCEPTION(true, std::logic_error,
202 " IntegratorBasic::parseScreenOutput() -- "
203 "Should call setScreenOutputIndexList()\n");
204 }
205
206 Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
207
209
210 std::string description() const override;
211 void describe(Teuchos::FancyOStream& out,
212 const Teuchos::EVerbosityLevel verbLevel) const override;
214
216 void setIntegratorName(std::string i) { integratorName_ = i; }
218 std::string getIntegratorName() const { return integratorName_; }
219
221 std::string getIntegratorType() const { return integratorType_; }
222
223 protected:
225 void setIntegratorType(std::string i);
226 std::string integratorName_;
227 std::string integratorType_;
228
229 Teuchos::RCP<Stepper<Scalar> > stepper_;
230 Teuchos::RCP<SolutionHistory<Scalar> > solutionHistory_;
231 Teuchos::RCP<TimeStepControl<Scalar> > timeStepControl_;
232 Teuchos::RCP<IntegratorObserver<Scalar> > integratorObserver_;
233
234 std::vector<int> outputScreenIndices_;
236
243
244 Teuchos::RCP<Teuchos::Time> integratorTimer_;
245 Teuchos::RCP<Teuchos::Time> stepperTimer_;
246};
247
249template <class Scalar>
250Teuchos::RCP<IntegratorBasic<Scalar> > createIntegratorBasic(
251 Teuchos::RCP<Teuchos::ParameterList> pList, bool runInitialize = true);
252
254template <class Scalar>
255Teuchos::RCP<IntegratorBasic<Scalar> > createIntegratorBasic(
256 Teuchos::RCP<Teuchos::ParameterList> pList,
257 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
258 bool runInitialize = true);
259
261template <class Scalar>
262Teuchos::RCP<IntegratorBasic<Scalar> > createIntegratorBasic(
263 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
264 std::string stepperType);
265
267template <class Scalar>
268Teuchos::RCP<IntegratorBasic<Scalar> > createIntegratorBasic();
269
271template <class Scalar>
272Teuchos::RCP<IntegratorBasic<Scalar> > createIntegratorBasic(
273 Teuchos::RCP<Teuchos::ParameterList> pList,
274 std::vector<Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > > models,
275 bool runInitialize = true);
276
277} // namespace Tempus
278
279#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.
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.
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.