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 ~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();
65  override { return Teuchos::rcp_const_cast<Teuchos::ParameterList> (this->getValidParameters()); }
66  virtual void setTempusParameterList(
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 Teuchos::RCP<Stepper<Scalar> > getStepper() const override
87  {return stepper_;}
89  virtual void setModel(Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > model);
91  virtual void setStepper(Teuchos::RCP<Stepper<Scalar> > stepper);
93  virtual void initializeSolutionHistory(
94  Teuchos::RCP<SolutionState<Scalar> > state = Teuchos::null);
96  virtual void initializeSolutionHistory(Scalar t0,
98  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdot0 = Teuchos::null,
99  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdotdot0 = Teuchos::null);
102  {return solutionHistory_;}
104  virtual void setSolutionHistory(
105  Teuchos::RCP<SolutionHistory<Scalar> > sh = Teuchos::null);
108  {return timeStepControl_;}
110  {return timeStepControl_;}
112  virtual void setTimeStepControl(
113  Teuchos::RCP<TimeStepControl<Scalar> > tsc = Teuchos::null);
116  {return integratorObserver_;}
118  virtual void setObserver(
119  Teuchos::RCP<IntegratorObserver<Scalar> > obs = Teuchos::null);
121  virtual void initialize();
122  //TODO: finish this
125  { return integratorTimer_;}
127  { return stepperTimer_;}
128 
131  {return solutionHistory_->getCurrentState()->getX();}
134  {return solutionHistory_->getCurrentState()->getXDot();}
137  {return solutionHistory_->getCurrentState()->getXDotDot();}
138 
141  {return solutionHistory_->getCurrentState();}
142 
143  virtual void setScreenOutputIndexInterval(int i)
144  { outputScreenInterval_ = i; }
145 
146  virtual int getScreenOutputIndexInterval() const
147  { return outputScreenInterval_; }
148 
149  virtual void setScreenOutputIndexList(std::vector<int> indices)
150  { outputScreenIndices_ = indices; }
151 
153  virtual void setScreenOutputIndexList(std::string str);
154 
155  virtual std::vector<int> getScreenOutputIndexList() const
156  { return outputScreenIndices_; }
157 
158  virtual std::string getScreenOutputIndexListString() const;
160 
162  { TEUCHOS_TEST_FOR_EXCEPTION( true, std::logic_error,
163  " IntegratorBasic::parseScreenOutput() -- Should call setScreenOutputIndexList()\n");
164  }
165 
167 
169 
170  std::string description() const override;
171  void describe(Teuchos::FancyOStream & out,
172  const Teuchos::EVerbosityLevel verbLevel) const override;
174 
176  void setIntegratorName(std::string i) { integratorName_ = i; }
178  std::string getIntegratorName() const { return integratorName_; }
179 
181  std::string getIntegratorType() const { return integratorType_; }
182 
183 protected:
184 
186  void setIntegratorType(std::string i);
187  std::string integratorName_;
188  std::string integratorType_;
189 
194 
195  std::vector<int> outputScreenIndices_;
197 
204 
207 
208 };
209 
210 
212 template<class Scalar>
216 
217 
219 template<class Scalar>
222  std::string stepperType);
223 
224 
226 template<class Scalar>
228 
229 
231 template<class Scalar>
234  std::vector<Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > > models);
235 
236 
237 } // namespace Tempus
238 
239 #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.
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 that requires a subsequent, ??? , setStepper, and initialize calls.
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 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.
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 void initializeSolutionHistory(Teuchos::RCP< SolutionState< Scalar > > state=Teuchos::null)
Set the initial state which has the initial conditions.
Teuchos::RCP< IntegratorBasic< Scalar > > createIntegratorBasic(Teuchos::RCP< Teuchos::ParameterList > pList, const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &model)
Nonmember constructor.
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...
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 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< 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. 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)