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: 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
18namespace Tempus {
19
20
48template<class Scalar>
50 : virtual public Tempus::Integrator<Scalar>
51{
52public:
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
109 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
131 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
148 virtual void setStepper(Teuchos::RCP<Thyra::ModelEvaluator<Scalar> > model);
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,
161 Teuchos::RCP<const Thyra::VectorBase<Scalar> > x0,
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
169 virtual Teuchos::RCP<const SolutionHistory<Scalar> > getSolutionHistory() const override
170 { return integrator_->getSolutionHistory(); }
172 virtual Teuchos::RCP<SolutionHistory<Scalar> > getNonConstSolutionHistory() override
173 { return integrator_->getNonConstSolutionHistory(); }
175 virtual void setSolutionHistory(
176 Teuchos::RCP<SolutionHistory<Scalar> > sh = Teuchos::null)
177 { integrator_->setSolutionHistory(sh); }
179 virtual Teuchos::RCP<const TimeStepControl<Scalar> > getTimeStepControl() const override
180 { return integrator_->getTimeStepControl(); }
181 virtual Teuchos::RCP<TimeStepControl<Scalar> > getNonConstTimeStepControl() override
182 { return integrator_->getNonConstTimeStepControl(); }
184 virtual void setTimeStepControl(
185 Teuchos::RCP<TimeStepControl<Scalar> > tsc = Teuchos::null)
186 { integrator_->setTimeStepControl(tsc); }
188 virtual Teuchos::RCP<IntegratorObserver<Scalar> > getObserver()
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(); }
197 virtual Teuchos::RCP<Teuchos::Time> getIntegratorTimer() const override
198 { return integrator_->getIntegratorTimer(); }
199 virtual Teuchos::RCP<Teuchos::Time> getStepperTimer() const override
200 { return integrator_->getStepperTimer(); }
201
212 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getX() const;
213
215 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > getDxDp() const;
222 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getXDot() const;
223 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > getDXDotDp() const;
232 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getXDotDot() const;
233 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > getDXDotDotDp() const;
234
236 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getG() const;
238 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > getDgDp() 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
257
258protected:
259
260 Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> model_;
261 Teuchos::RCP<IntegratorBasic<Scalar>> integrator_;
262 Teuchos::RCP<SensitivityModelEvaluatorBase<Scalar>> sens_model_;
263 Teuchos::RCP<StepperStaggeredForwardSensitivity<Scalar>> sens_stepper_;
265};
266
268
283template <class Scalar>
284Teuchos::RCP<IntegratorForwardSensitivity<Scalar>>
286 Teuchos::RCP<Teuchos::ParameterList> pList,
287 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &model,
288 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &sens_residual_model,
289 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &sens_solve_model);
290
292
306template <class Scalar>
307Teuchos::RCP<IntegratorForwardSensitivity<Scalar>>
309 Teuchos::RCP<Teuchos::ParameterList> pList,
310 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &model,
311 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &sens_residual_model)
312{
314 pList, model, sens_residual_model, sens_residual_model);
315}
316
318
331template <class Scalar>
332Teuchos::RCP<IntegratorForwardSensitivity<Scalar>>
334 Teuchos::RCP<Teuchos::ParameterList> pList,
335 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &model)
336{
337 return createIntegratorForwardSensitivity(pList, model, model, model);
338}
339
341
349template <class Scalar>
350Teuchos::RCP<IntegratorForwardSensitivity<Scalar>>
352
353} // namespace Tempus
354
355#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.
Thyra Base interface for time integrators. Time integrators are designed to advance the solution from...
Status
Status for the Integrator, the Stepper and the SolutionState.
Teuchos::RCP< IntegratorForwardSensitivity< Scalar > > createIntegratorForwardSensitivity()
Nonmember constructor.