Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 
94  const Teuchos::RCP<IntegratorBasic<Scalar>> &integrator,
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 
129 
130  virtual Scalar getTime() const override
132  { return integrator_->getTime(); }
134  virtual int getIndex() const override
135  { return integrator_->getIndex(); }
137  virtual Status getStatus() const override
138  { return integrator_->getStatus(); }
139  // Set Status
140  virtual void setStatus(const Status st) override {
141  integrator_->setStatus(st);
142  }
144  virtual Teuchos::RCP<Stepper<Scalar> > getStepper() const override
145  { return integrator_->getStepper(); }
146 
149 
151  virtual void setStepper(Teuchos::RCP<Stepper<Scalar> > stepper)
152  { integrator_->setStepper(stepper); }
155  Teuchos::RCP<SolutionState<Scalar> > state = Teuchos::null)
156  { integrator_->initializeSolutionHistory(state); }
157 
159  virtual void initializeSolutionHistory(
160  Scalar t0,
162  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdot0 = Teuchos::null,
163  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdotdot0 = Teuchos::null,
164  Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > DxDp0 = Teuchos::null,
165  Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > DxdotDp0 = Teuchos::null,
166  Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > DxdotdotDp0 = Teuchos::null);
167 
170  { return integrator_->getSolutionHistory(); }
173  { return integrator_->getNonConstSolutionHistory(); }
175  virtual void setSolutionHistory(
176  Teuchos::RCP<SolutionHistory<Scalar> > sh = Teuchos::null)
177  { integrator_->setSolutionHistory(sh); }
180  { return integrator_->getTimeStepControl(); }
182  { return integrator_->getNonConstTimeStepControl(); }
184  virtual void setTimeStepControl(
185  Teuchos::RCP<TimeStepControl<Scalar> > tsc = Teuchos::null)
186  { integrator_->setTimeStepControl(tsc); }
189  { return integrator_->getObserver(); }
191  virtual void setObserver(
192  Teuchos::RCP<IntegratorObserver<Scalar> > obs = Teuchos::null)
193  { integrator_->setObserver(obs); }
195  virtual void initialize()
196  { integrator_->initialize(); }
198  { return integrator_->getIntegratorTimer(); }
200  { return integrator_->getStepperTimer(); }
201 
213 
234 
239 
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 
257 
258 protected:
259 
265 };
266 
268 
283 template <class Scalar>
288  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &sens_residual_model,
289  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &sens_solve_model);
290 
292 
306 template <class Scalar>
311  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &sens_residual_model)
312 {
314  pList, model, sens_residual_model, sens_residual_model);
315 }
316 
318 
331 template <class Scalar>
336 {
337  return createIntegratorForwardSensitivity(pList, model, model, model);
338 }
339 
341 
349 template <class Scalar>
352 
353 } // namespace Tempus
354 
355 #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< SolutionHistory< Scalar > > getNonConstSolutionHistory() override
Get the SolutionHistory.
virtual bool advanceTime()
Advance the solution to timeMax, and return true if successful.
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...
virtual void initializeSolutionHistory(Teuchos::RCP< SolutionState< Scalar > > state=Teuchos::null)
Set the initial state which has the initial conditions.
SensitivityStepMode getStepMode() const
What mode the current time integration step is in.
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getDXDotDp() const
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 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 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< const Thyra::MultiVectorBase< Scalar > > getDgDp() const
Return forward sensitivity stored in Jacobian format.
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 Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getDxDp() const
Get the forward sensitivities .
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.
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.
Teuchos::RCP< IntegratorForwardSensitivity< Scalar > > createIntegratorForwardSensitivity(Teuchos::RCP< Teuchos::ParameterList > pList, const Teuchos::RCP< Thyra::ModelEvaluator< Scalar >> &model, const Teuchos::RCP< Thyra::ModelEvaluator< Scalar >> &sens_residual_model, const Teuchos::RCP< Thyra::ModelEvaluator< Scalar >> &sens_solve_model)
Nonmember constructor.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const override
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getG() const
Return response function g.
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-&gt;getX() which will return a Block MultiVector with the first block containing the current solution, x, and the remaining blocks are the forward sensitivities .
Thyra Base interface for time integrators. Time integrators are designed to advance the solution from...
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 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 bool advanceTime(const Scalar timeFinal) override
Advance the solution to timeFinal, and return true if successful.
Solution state for integrators and steppers.