Tempus Version of the Day
Time Integration
Loading...
Searching...
No Matches
Tempus_IntegratorForwardSensitivity_decl.hpp
Go to the documentation of this file.
1//@HEADER
2// *****************************************************************************
3// Tempus: Time Integration and Sensitivity Analysis Package
4//
5// Copyright 2017 NTESS and the Tempus contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8//@HEADER
9
10#ifndef Tempus_IntegratorForwardSensitivity_decl_hpp
11#define Tempus_IntegratorForwardSensitivity_decl_hpp
12
13// Tempus
14#include "Tempus_config.hpp"
15#include "Tempus_IntegratorBasic.hpp"
17#include "Tempus_StepperStaggeredForwardSensitivity.hpp"
18
19namespace Tempus {
20
48template <class Scalar>
49class IntegratorForwardSensitivity : virtual public Tempus::Integrator<Scalar> {
50 public:
90 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &model,
91 const Teuchos::RCP<IntegratorBasic<Scalar>> &integrator,
92 const Teuchos::RCP<SensitivityModelEvaluatorBase<Scalar>> &sens_model,
94 &sens_stepper,
95 const bool use_combined_method);
96
98
101
104
106
107
108 virtual bool advanceTime() { return integrator_->advanceTime(); }
110 virtual bool advanceTime(const Scalar timeFinal) override
111 {
112 return integrator_->advanceTime(timeFinal);
113 }
115 virtual void startIntegrator() { integrator_->startIntegrator(); }
117 virtual void startTimeStep() { integrator_->startTimeStep(); }
119 virtual void checkTimeStep() { integrator_->checkTimeStep(); }
121 virtual void endIntegrator() { integrator_->endIntegrator(); }
123
125
126
127 virtual Scalar getTime() const override { return integrator_->getTime(); }
129 virtual int getIndex() const override { return integrator_->getIndex(); }
131 virtual Status getStatus() const override { return integrator_->getStatus(); }
132 // Set Status
133 virtual void setStatus(const Status st) override
134 {
135 integrator_->setStatus(st);
136 }
138 virtual Teuchos::RCP<Stepper<Scalar>> getStepper() const override
139 {
140 return integrator_->getStepper();
141 }
142
144 virtual void setStepper(Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> model);
145
147 virtual void setStepper(Teuchos::RCP<Stepper<Scalar>> stepper)
148 {
149 integrator_->setStepper(stepper);
150 }
153 Teuchos::RCP<SolutionState<Scalar>> state = Teuchos::null)
154 {
155 integrator_->initializeSolutionHistory(state);
156 }
157
159 virtual void initializeSolutionHistory(
160 Scalar t0, Teuchos::RCP<const Thyra::VectorBase<Scalar>> x0,
161 Teuchos::RCP<const Thyra::VectorBase<Scalar>> xdot0 = Teuchos::null,
162 Teuchos::RCP<const Thyra::VectorBase<Scalar>> xdotdot0 = Teuchos::null,
163 Teuchos::RCP<const Thyra::MultiVectorBase<Scalar>> DxDp0 = Teuchos::null,
164 Teuchos::RCP<const Thyra::MultiVectorBase<Scalar>> DxdotDp0 =
165 Teuchos::null,
166 Teuchos::RCP<const Thyra::MultiVectorBase<Scalar>> DxdotdotDp0 =
167 Teuchos::null);
168
170 virtual Teuchos::RCP<const SolutionHistory<Scalar>> getSolutionHistory()
171 const override
172 {
173 return integrator_->getSolutionHistory();
174 }
176 virtual Teuchos::RCP<SolutionHistory<Scalar>> getNonConstSolutionHistory()
177 override
178 {
179 return integrator_->getNonConstSolutionHistory();
180 }
182 virtual void setSolutionHistory(
183 Teuchos::RCP<SolutionHistory<Scalar>> sh = Teuchos::null)
184 {
185 integrator_->setSolutionHistory(sh);
186 }
188 virtual Teuchos::RCP<const TimeStepControl<Scalar>> getTimeStepControl()
189 const override
190 {
191 return integrator_->getTimeStepControl();
192 }
193 virtual Teuchos::RCP<TimeStepControl<Scalar>> getNonConstTimeStepControl()
194 override
195 {
196 return integrator_->getNonConstTimeStepControl();
197 }
199 virtual void setTimeStepControl(
200 Teuchos::RCP<TimeStepControl<Scalar>> tsc = Teuchos::null)
201 {
202 integrator_->setTimeStepControl(tsc);
203 }
205 virtual Teuchos::RCP<IntegratorObserver<Scalar>> getObserver()
206 {
207 return integrator_->getObserver();
208 }
210 virtual void setObserver(
211 Teuchos::RCP<IntegratorObserver<Scalar>> obs = Teuchos::null)
212 {
213 integrator_->setObserver(obs);
214 }
216 virtual void initialize() { integrator_->initialize(); }
217 virtual Teuchos::RCP<Teuchos::Time> getIntegratorTimer() const override
218 {
219 return integrator_->getIntegratorTimer();
220 }
221 virtual Teuchos::RCP<Teuchos::Time> getStepperTimer() const override
222 {
223 return integrator_->getStepperTimer();
224 }
225
236 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar>> getX() const;
237
239 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar>> getDxDp() const;
246 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar>> getXDot() const;
247 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar>> getDXDotDp() const;
256 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar>> getXDotDot() const;
257 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar>> getDXDotDotDp()
258 const;
259
261 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar>> getG() const;
263 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar>> getDgDp() const;
264
266 virtual Teuchos::RCP<SolutionState<Scalar>> getCurrentState()
267 {
268 return integrator_->getCurrentState();
269 }
271
273 void parseScreenOutput() { integrator_->parseScreenOutput(); }
274
276
277 std::string description() const override;
278 void describe(Teuchos::FancyOStream &out,
279 const Teuchos::EVerbosityLevel verbLevel) const override;
281
284
285 protected:
286 Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> model_;
287 Teuchos::RCP<IntegratorBasic<Scalar>> integrator_;
288 Teuchos::RCP<SensitivityModelEvaluatorBase<Scalar>> sens_model_;
289 Teuchos::RCP<StepperStaggeredForwardSensitivity<Scalar>> sens_stepper_;
291};
292
294
309template <class Scalar>
310Teuchos::RCP<IntegratorForwardSensitivity<Scalar>>
312 Teuchos::RCP<Teuchos::ParameterList> pList,
313 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &model,
314 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &sens_residual_model,
315 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &sens_solve_model);
316
318
332template <class Scalar>
333Teuchos::RCP<IntegratorForwardSensitivity<Scalar>>
335 Teuchos::RCP<Teuchos::ParameterList> pList,
336 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &model,
337 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &sens_residual_model)
338{
339 return createIntegratorForwardSensitivity(pList, model, sens_residual_model,
340 sens_residual_model);
341}
342
344
357template <class Scalar>
358Teuchos::RCP<IntegratorForwardSensitivity<Scalar>>
360 Teuchos::RCP<Teuchos::ParameterList> pList,
361 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &model)
362{
363 return createIntegratorForwardSensitivity(pList, model, model, model);
364}
365
367
375template <class Scalar>
376Teuchos::RCP<IntegratorForwardSensitivity<Scalar>>
378
379} // namespace Tempus
380
381#endif // Tempus_IntegratorForwardSensitivity_decl_hpp
Time integrator implementing forward sensitivity analysis.
Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > model_
virtual Teuchos::RCP< const TimeStepControl< Scalar > > getTimeStepControl() const override
Get the TimeStepControl.
virtual void checkTimeStep()
Check if time step has passed or failed.
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getDXDotDp() const
virtual void setStepper(Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > model)
Set the Stepper.
Teuchos::RCP< SensitivityModelEvaluatorBase< Scalar > > sens_model_
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...
SensitivityStepMode getStepMode() const
What mode the current time integration step is in.
virtual void initializeSolutionHistory(Teuchos::RCP< SolutionState< Scalar > > state=Teuchos::null)
Set the initial state which has the initial conditions.
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getDxDp() const
Get the forward sensitivities .
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getX() const
Get the current solution, x, only. If looking for the solution vector and the sensitivities,...
virtual void startIntegrator()
Perform tasks before start of integrator.
virtual Teuchos::RCP< Teuchos::Time > getIntegratorTimer() const override
Returns the IntegratorTimer_ for this Integrator.
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getDXDotDotDp() const
virtual void initialize()
Initializes the Integrator after set* function calls.
virtual Teuchos::RCP< Teuchos::Time > getStepperTimer() const override
virtual void setTimeStepControl(Teuchos::RCP< TimeStepControl< Scalar > > tsc=Teuchos::null)
Set the TimeStepControl.
virtual void endIntegrator()
Perform tasks after end of integrator.
void parseScreenOutput()
Parse when screen output should be executed.
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getG() const
Return response function g.
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getDgDp() const
Return forward sensitivity stored in Jacobian format.
virtual Teuchos::RCP< IntegratorObserver< Scalar > > getObserver()
Get the Observer.
virtual int getIndex() const override
Get current index.
Teuchos::RCP< StepperStaggeredForwardSensitivity< Scalar > > sens_stepper_
virtual Teuchos::RCP< Stepper< Scalar > > getStepper() const override
Get the Stepper.
virtual void setStepper(Teuchos::RCP< Stepper< Scalar > > stepper)
Set the Stepper.
virtual Teuchos::RCP< SolutionState< Scalar > > getCurrentState()
Get current state.
virtual Teuchos::RCP< const SolutionHistory< Scalar > > getSolutionHistory() const override
Get the SolutionHistory.
virtual Teuchos::RCP< SolutionHistory< Scalar > > getNonConstSolutionHistory() override
Get the SolutionHistory.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const override
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 setSolutionHistory(Teuchos::RCP< SolutionHistory< Scalar > > sh=Teuchos::null)
Set the SolutionHistory.
virtual Scalar getTime() const override
Get current time.
virtual bool advanceTime()
Advance the solution to timeMax, and return true if successful.
virtual void setObserver(Teuchos::RCP< IntegratorObserver< Scalar > > obs=Teuchos::null)
Set the Observer.
virtual void setStatus(const Status st) override
Set the Status.
virtual Teuchos::RCP< TimeStepControl< Scalar > > getNonConstTimeStepControl() override
virtual bool advanceTime(const Scalar timeFinal) override
Advance the solution to timeFinal, and return true if successful.
IntegratorObserver class for time integrators.
Thyra Base interface for time integrators. Time integrators are designed to advance the solution from...
A ModelEvaluator decorator for sensitivity analysis.
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Solution state for integrators and steppers.
A stepper implementing staggered forward sensitivity analysis.
Thyra Base interface for time steppers.
TimeStepControl manages the time step size. There several mechanisms that effect the time step size a...
Status
Status for the Integrator, the Stepper and the SolutionState.
Teuchos::RCP< IntegratorForwardSensitivity< Scalar > > createIntegratorForwardSensitivity()
Nonmember constructor.