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 
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 void copy(Teuchos::RCP<IntegratorBasic<Scalar> > iB);
48 
50  virtual ~IntegratorBasic() {}
51 
53 
54  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  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,
94  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdot0 = Teuchos::null,
95  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdotdot0 = Teuchos::null);
98  {return solutionHistory_;}
101  {return solutionHistory_;}
103  virtual void setSolutionHistory(
104  Teuchos::RCP<SolutionHistory<Scalar> > sh = Teuchos::null);
107  {return timeStepControl_;}
109  {return timeStepControl_;}
111  virtual void setTimeStepControl(
112  Teuchos::RCP<TimeStepControl<Scalar> > tsc = Teuchos::null);
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
127  { return integratorTimer_;}
129  { return stepperTimer_;}
130 
133  {return solutionHistory_->getCurrentState()->getX();}
136  {return solutionHistory_->getCurrentState()->getXDot();}
139  {return solutionHistory_->getCurrentState()->getXDotDot();}
140 
143  {return solutionHistory_->getCurrentState();}
144 
145  virtual void setScreenOutputIndexInterval(int i)
146  { outputScreenInterval_ = i; }
147 
148  virtual int getScreenOutputIndexInterval() const
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 
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 
185 protected:
186 
188  void setIntegratorType(std::string i);
189  std::string integratorName_;
190  std::string integratorType_;
191 
196 
197  std::vector<int> outputScreenIndices_;
199 
206 
209 
210 };
211 
212 
214 template<class Scalar>
217  bool runInitialize=true);
218 
219 
221 template<class Scalar>
225  bool runInitialize=true);
226 
227 
229 template<class Scalar>
232  std::string stepperType);
233 
234 
236 template<class Scalar>
238 
239 
241 template<class Scalar>
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 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.
IntegratorBasic()
Default constructor (requires calls to setModel and setSolutionHistory for initial conditions before ...
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)