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 
47 template <class Scalar>
48 class IntegratorForwardSensitivity : virtual public Tempus::Integrator<Scalar> {
49  public:
90  const Teuchos::RCP<IntegratorBasic<Scalar>> &integrator,
93  &sens_stepper,
94  const bool use_combined_method);
95 
97 
100 
103 
105 
106  virtual bool advanceTime() { return integrator_->advanceTime(); }
109  virtual bool advanceTime(const Scalar timeFinal) override
110  {
111  return integrator_->advanceTime(timeFinal);
112  }
114  virtual void startIntegrator() { integrator_->startIntegrator(); }
116  virtual void startTimeStep() { integrator_->startTimeStep(); }
118  virtual void checkTimeStep() { integrator_->checkTimeStep(); }
120  virtual void endIntegrator() { integrator_->endIntegrator(); }
122 
124 
125  virtual Scalar getTime() const override { return integrator_->getTime(); }
128  virtual int getIndex() const override { return integrator_->getIndex(); }
130  virtual Status getStatus() const override { return integrator_->getStatus(); }
131  // Set Status
132  virtual void setStatus(const Status st) override
133  {
134  integrator_->setStatus(st);
135  }
137  virtual Teuchos::RCP<Stepper<Scalar>> getStepper() const override
138  {
139  return integrator_->getStepper();
140  }
141 
144 
146  virtual void setStepper(Teuchos::RCP<Stepper<Scalar>> stepper)
147  {
148  integrator_->setStepper(stepper);
149  }
152  Teuchos::RCP<SolutionState<Scalar>> state = Teuchos::null)
153  {
154  integrator_->initializeSolutionHistory(state);
155  }
156 
158  virtual void initializeSolutionHistory(
159  Scalar t0, Teuchos::RCP<const Thyra::VectorBase<Scalar>> x0,
160  Teuchos::RCP<const Thyra::VectorBase<Scalar>> xdot0 = Teuchos::null,
161  Teuchos::RCP<const Thyra::VectorBase<Scalar>> xdotdot0 = Teuchos::null,
162  Teuchos::RCP<const Thyra::MultiVectorBase<Scalar>> DxDp0 = Teuchos::null,
164  Teuchos::null,
165  Teuchos::RCP<const Thyra::MultiVectorBase<Scalar>> DxdotdotDp0 =
166  Teuchos::null);
167 
170  const override
171  {
172  return integrator_->getSolutionHistory();
173  }
176  override
177  {
178  return integrator_->getNonConstSolutionHistory();
179  }
181  virtual void setSolutionHistory(
182  Teuchos::RCP<SolutionHistory<Scalar>> sh = Teuchos::null)
183  {
184  integrator_->setSolutionHistory(sh);
185  }
188  const override
189  {
190  return integrator_->getTimeStepControl();
191  }
193  override
194  {
195  return integrator_->getNonConstTimeStepControl();
196  }
198  virtual void setTimeStepControl(
199  Teuchos::RCP<TimeStepControl<Scalar>> tsc = Teuchos::null)
200  {
201  integrator_->setTimeStepControl(tsc);
202  }
205  {
206  return integrator_->getObserver();
207  }
209  virtual void setObserver(
210  Teuchos::RCP<IntegratorObserver<Scalar>> obs = Teuchos::null)
211  {
212  integrator_->setObserver(obs);
213  }
215  virtual void initialize() { integrator_->initialize(); }
217  {
218  return integrator_->getIntegratorTimer();
219  }
221  {
222  return integrator_->getStepperTimer();
223  }
224 
236 
257  const;
258 
263 
266  {
267  return integrator_->getCurrentState();
268  }
270 
272  void parseScreenOutput() { integrator_->parseScreenOutput(); }
273 
275 
276  std::string description() const override;
278  const Teuchos::EVerbosityLevel verbLevel) const override;
280 
283 
284  protected:
290 };
291 
293 
308 template <class Scalar>
313  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &sens_residual_model,
314  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &sens_solve_model);
315 
317 
331 template <class Scalar>
336  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &sens_residual_model)
337 {
338  return createIntegratorForwardSensitivity(pList, model, sens_residual_model,
339  sens_residual_model);
340 }
341 
343 
356 template <class Scalar>
361 {
362  return createIntegratorForwardSensitivity(pList, model, model, model);
363 }
364 
366 
374 template <class Scalar>
377 
378 } // namespace Tempus
379 
380 #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.
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.
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 setStepper(Teuchos::RCP< Thyra::ModelEvaluator< Scalar >> model)
Set the Stepper.
SensitivityStepMode getStepMode() const
What mode the current time integration step is in.
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getDXDotDp() const
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
A stepper implementing staggered forward sensitivity analysis.
Teuchos::RCP< StepperStaggeredForwardSensitivity< Scalar > > sens_stepper_
virtual void setSolutionHistory(Teuchos::RCP< SolutionHistory< Scalar >> sh=Teuchos::null)
Set the SolutionHistory.
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.
virtual void setStepper(Teuchos::RCP< Stepper< Scalar >> stepper)
Set the Stepper.
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.
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 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 void initializeSolutionHistory(Teuchos::RCP< SolutionState< Scalar >> state=Teuchos::null)
Set the initial state which has the initial conditions.
virtual bool advanceTime(const Scalar timeFinal) override
Advance the solution to timeFinal, and return true if successful.
Solution state for integrators and steppers.
virtual void setTimeStepControl(Teuchos::RCP< TimeStepControl< Scalar >> tsc=Teuchos::null)
Set the TimeStepControl.