Tempus  Version of the Day
Time Integration
Tempus_IntegratorForwardSensitivity_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_IntegratorForwardSensitivity_decl_hpp
10 #define Tempus_IntegratorForwardSensitivity_decl_hpp
11 
12 // Tempus
13 #include "Tempus_config.hpp"
14 #include "Tempus_IntegratorBasic.hpp"
16 #include "Tempus_StepperStaggeredForwardSensitivity.hpp"
17 
18 namespace Tempus {
19 
20 
48 template<class Scalar>
50  : virtual public Tempus::Integrator<Scalar>
51 {
52 public:
53 
93  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &model,
94  const Teuchos::RCP<IntegratorBasic<Scalar>> &integrator,
95  const Teuchos::RCP<SensitivityModelEvaluatorBase<Scalar>> &sens_model,
96  const Teuchos::RCP<StepperStaggeredForwardSensitivity<Scalar>> &sens_stepper,
97  const bool use_combined_method);
98 
100 
102 
105 
107 
108  virtual bool advanceTime()
110  { return integrator_->advanceTime(); }
112  virtual bool advanceTime(const Scalar timeFinal) override
113  { return integrator_->advanceTime(timeFinal); }
115  virtual void startIntegrator()
116  { integrator_->startIntegrator(); }
118  virtual void startTimeStep()
119  { integrator_->startTimeStep(); }
121  virtual void checkTimeStep()
122  { integrator_->checkTimeStep(); }
124  virtual void endIntegrator()
125  { integrator_->endIntegrator(); }
127  virtual Teuchos::RCP<Teuchos::ParameterList> getTempusParameterList() override
128  { return integrator_->getTempusParameterList(); }
129  virtual void setTempusParameterList(Teuchos::RCP<Teuchos::ParameterList> pl) override
130  { integrator_->setTempusParameterList(pl); }
132 
134 
135  virtual Scalar getTime() const override
137  { return integrator_->getTime(); }
139  virtual int getIndex() const override
140  { return integrator_->getIndex(); }
142  virtual Status getStatus() const override
143  { return integrator_->getStatus(); }
144  // Set Status
145  virtual void setStatus(const Status st) override {
146  integrator_->setStatus(st);
147  }
149  virtual Teuchos::RCP<Stepper<Scalar> > getStepper() const override
150  { return integrator_->getStepper(); }
151 
153  virtual void setStepper(Teuchos::RCP<Thyra::ModelEvaluator<Scalar> > model);
154 
156  virtual void setStepper(Teuchos::RCP<Stepper<Scalar> > stepper)
157  { integrator_->setStepper(stepper); }
160  Teuchos::RCP<SolutionState<Scalar> > state = Teuchos::null)
161  { integrator_->initializeSolutionHistory(state); }
162 
164  virtual void initializeSolutionHistory(
165  Scalar t0,
166  Teuchos::RCP<const Thyra::VectorBase<Scalar> > x0,
167  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdot0 = Teuchos::null,
168  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdotdot0 = Teuchos::null,
169  Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > DxDp0 = Teuchos::null,
170  Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > DxdotDp0 = Teuchos::null,
171  Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > DxdotdotDp0 = Teuchos::null);
172 
174  virtual Teuchos::RCP<const SolutionHistory<Scalar> > getSolutionHistory() const override
175  { return integrator_->getSolutionHistory(); }
177  virtual Teuchos::RCP<SolutionHistory<Scalar> > getNonConstSolutionHistory() override
178  { return integrator_->getNonConstSolutionHistory(); }
180  virtual void setSolutionHistory(
181  Teuchos::RCP<SolutionHistory<Scalar> > sh = Teuchos::null)
182  { integrator_->setSolutionHistory(sh); }
184  virtual Teuchos::RCP<const TimeStepControl<Scalar> > getTimeStepControl() const override
185  { return integrator_->getTimeStepControl(); }
186  virtual Teuchos::RCP<TimeStepControl<Scalar> > getNonConstTimeStepControl() override
187  { return integrator_->getNonConstTimeStepControl(); }
189  virtual void setTimeStepControl(
190  Teuchos::RCP<TimeStepControl<Scalar> > tsc = Teuchos::null)
191  { integrator_->setTimeStepControl(tsc); }
193  virtual Teuchos::RCP<IntegratorObserver<Scalar> > getObserver()
194  { return integrator_->getObserver(); }
196  virtual void setObserver(
197  Teuchos::RCP<IntegratorObserver<Scalar> > obs = Teuchos::null)
198  { integrator_->setObserver(obs); }
200  virtual void initialize()
201  { integrator_->initialize(); }
202  virtual Teuchos::RCP<Teuchos::Time> getIntegratorTimer() const override
203  { return integrator_->getIntegratorTimer(); }
204  virtual Teuchos::RCP<Teuchos::Time> getStepperTimer() const override
205  { return integrator_->getStepperTimer(); }
206 
217  virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getX() const;
218 
220  virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > getDxDp() const;
227  virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getXDot() const;
228  virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > getDXDotDp() const;
237  virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getXDotDot() const;
238  virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > getDXDotDotDp() const;
239 
241  virtual Teuchos::RCP<SolutionState<Scalar> > getCurrentState()
242  {return integrator_->getCurrentState();}
244 
246  void parseScreenOutput() { integrator_->parseScreenOutput(); }
247 
249 
250  std::string description() const override;
251  void describe(Teuchos::FancyOStream & out,
252  const Teuchos::EVerbosityLevel verbLevel) const override;
254 
255 protected:
256  Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> model_;
257  Teuchos::RCP<IntegratorBasic<Scalar>> integrator_;
258  Teuchos::RCP<SensitivityModelEvaluatorBase<Scalar>> sens_model_;
259  Teuchos::RCP<StepperStaggeredForwardSensitivity<Scalar>> sens_stepper_;
261 };
262 
264 
277 template <class Scalar>
278 Teuchos::RCP<IntegratorForwardSensitivity<Scalar>>
280  Teuchos::RCP<Teuchos::ParameterList> pList,
281  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &model);
282 
284 
292 template <class Scalar>
293 Teuchos::RCP<IntegratorForwardSensitivity<Scalar>>
295 
296 } // namespace Tempus
297 
298 #endif // Tempus_IntegratorForwardSensitivity_decl_hpp
virtual Teuchos::RCP< const SolutionHistory< Scalar > > getSolutionHistory() const override
Get the SolutionHistory.
Teuchos::RCP< IntegratorBasic< Scalar > > integrator_
virtual Teuchos::RCP< Teuchos::Time > getIntegratorTimer() const override
Returns the IntegratorTimer_ for this Integrator.
virtual int getIndex() const override
Get current index.
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getX() const
Get the current solution, x, only. If looking for the solution vector and the sensitivities, use SolutionState->getX() which will return a Block MultiVector with the first block containing the current solution, x, and the remaining blocks are the forward sensitivities .
virtual Teuchos::RCP< SolutionHistory< Scalar > > getNonConstSolutionHistory() override
Get the SolutionHistory.
virtual bool advanceTime()
Advance the solution to timeMax, and return true if successful.
virtual void initializeSolutionHistory(Teuchos::RCP< SolutionState< Scalar > > state=Teuchos::null)
Set the initial state which has the initial conditions.
virtual void setTimeStepControl(Teuchos::RCP< TimeStepControl< Scalar > > tsc=Teuchos::null)
Set the TimeStepControl.
virtual Teuchos::RCP< IntegratorObserver< Scalar > > getObserver()
Get the Observer.
virtual Teuchos::RCP< const TimeStepControl< Scalar > > getTimeStepControl() const override
Get the TimeStepControl.
virtual void endIntegrator()
Perform tasks after end of integrator.
virtual void setStatus(const Status st) override
Set the Status.
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getDXDotDotDp() const
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getDxDp() const
Get the forward sensitivities .
Teuchos::RCP< IntegratorForwardSensitivity< Scalar > > createIntegratorForwardSensitivity(Teuchos::RCP< Teuchos::ParameterList > pList, const Teuchos::RCP< Thyra::ModelEvaluator< Scalar >> &model)
Nonmember constructor.
virtual void setSolutionHistory(Teuchos::RCP< SolutionHistory< Scalar > > sh=Teuchos::null)
Set the SolutionHistory.
A stepper implementing staggered forward sensitivity analysis.
Teuchos::RCP< StepperStaggeredForwardSensitivity< Scalar > > sens_stepper_
virtual void setStepper(Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > model)
Set the Stepper.
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getXDot() const
Get current the time derivative of the solution, xdot, only. This is the first block only and not the...
virtual void setStepper(Teuchos::RCP< Stepper< Scalar > > stepper)
Set the Stepper.
virtual Teuchos::RCP< SolutionState< Scalar > > getCurrentState()
Get current state.
virtual Status getStatus() const override
Get Status.
virtual Teuchos::RCP< Teuchos::ParameterList > getTempusParameterList() override
Return a copy of the Tempus ParameterList.
Thyra Base interface for time steppers.
virtual void startIntegrator()
Perform tasks before start of integrator.
virtual void checkTimeStep()
Check if time step has passed or failed.
virtual Teuchos::RCP< Teuchos::Time > getStepperTimer() const override
virtual void initialize()
Initializes the Integrator after set* function calls.
virtual Teuchos::RCP< Stepper< Scalar > > getStepper() const override
Get the Stepper.
Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > model_
Status
Status for the Integrator, the Stepper and the SolutionState.
IntegratorObserver class for time integrators.
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getXDotDot() const
Get current the second time derivative of the solution, xdotdot, only. This is the first block only a...
TimeStepControl manages the time step size. There several mechanisms that effect the time step size a...
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
void parseScreenOutput()
Parse when screen output should be executed.
virtual Scalar getTime() const override
Get current time.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const override
Thyra Base interface for time integrators. Time integrators are designed to advance the solution from...
virtual void setTempusParameterList(Teuchos::RCP< Teuchos::ParameterList > pl) override
virtual void setObserver(Teuchos::RCP< IntegratorObserver< Scalar > > obs=Teuchos::null)
Set the Observer.
virtual Teuchos::RCP< TimeStepControl< Scalar > > getNonConstTimeStepControl() override
A ModelEvaluator decorator for sensitivity analysis.
Teuchos::RCP< SensitivityModelEvaluatorBase< Scalar > > sens_model_
Time integrator implementing forward sensitivity analysis.
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getDXDotDp() const
virtual bool advanceTime(const Scalar timeFinal) override
Advance the solution to timeFinal, and return true if successful.
Solution state for integrators and steppers. SolutionState contains the metadata for solutions and th...