Tempus Version of the Day
Time Integration
Loading...
Searching...
No Matches
Tempus_IntegratorAdjointSensitivity_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_IntegratorAdjointSensitivity_decl_hpp
11#define Tempus_IntegratorAdjointSensitivity_decl_hpp
12
13// Tempus
14#include "Tempus_config.hpp"
15#include "Tempus_IntegratorBasic.hpp"
16#include "Tempus_AdjointAuxSensitivityModelEvaluator.hpp"
17
18#include "Tempus_StepperStaggeredForwardSensitivity.hpp" // For SensitivityStepMode
19
20namespace Tempus {
21
51template <class Scalar>
52class IntegratorAdjointSensitivity : virtual public Tempus::Integrator<Scalar> {
53 public:
114 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &model,
115 const Teuchos::RCP<IntegratorBasic<Scalar>> &state_integrator,
116 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &adjoint_model,
118 &adjoint_aux_model,
119 const Teuchos::RCP<IntegratorBasic<Scalar>> &adjoint_integrator,
120 const Teuchos::RCP<SolutionHistory<Scalar>> &solution_history,
121 const int p_index, const int g_index, const bool g_depends_on_p,
122 const bool f_depends_on_p, const bool ic_depends_on_p,
123 const bool mass_matrix_is_identity);
124
128
131
133
134
136 virtual bool advanceTime();
138 virtual bool advanceTime(const Scalar timeFinal) override;
140 virtual Scalar getTime() const override;
142 virtual int getIndex() const override;
144 virtual Status getStatus() const override;
146 virtual void setStatus(const Status st) override;
148 virtual Teuchos::RCP<Stepper<Scalar>> getStepper() const override;
150 virtual Teuchos::RCP<const SolutionHistory<Scalar>> getSolutionHistory()
151 const override;
152 Teuchos::RCP<const SolutionHistory<Scalar>> getStateSolutionHistory() const;
153 Teuchos::RCP<const SolutionHistory<Scalar>> getSensSolutionHistory() const;
155 virtual Teuchos::RCP<SolutionHistory<Scalar>> getNonConstSolutionHistory()
156 override;
158 virtual Teuchos::RCP<const TimeStepControl<Scalar>> getTimeStepControl()
159 const override;
160 virtual Teuchos::RCP<TimeStepControl<Scalar>> getNonConstTimeStepControl()
161 override;
162 Teuchos::RCP<TimeStepControl<Scalar>> getStateNonConstTimeStepControl();
163 Teuchos::RCP<TimeStepControl<Scalar>> getSensNonConstTimeStepControl();
165 virtual Teuchos::RCP<Teuchos::Time> getIntegratorTimer() const override
166 {
167 return state_integrator_->getIntegratorTimer();
168 }
169 virtual Teuchos::RCP<Teuchos::Time> getStepperTimer() const override
170 {
171 return state_integrator_->getStepperTimer();
172 }
173
175
177 virtual void initializeSolutionHistory(
178 Scalar t0, Teuchos::RCP<const Thyra::VectorBase<Scalar>> x0,
179 Teuchos::RCP<const Thyra::VectorBase<Scalar>> xdot0 = Teuchos::null,
180 Teuchos::RCP<const Thyra::VectorBase<Scalar>> xdotdot0 = Teuchos::null,
181 Teuchos::RCP<const Thyra::MultiVectorBase<Scalar>> DxDp0 = Teuchos::null,
182 Teuchos::RCP<const Thyra::MultiVectorBase<Scalar>> DxdotDp0 =
183 Teuchos::null,
184 Teuchos::RCP<const Thyra::MultiVectorBase<Scalar>> DxdotdotDp0 =
185 Teuchos::null);
186
188 virtual Teuchos::RCP<IntegratorObserver<Scalar>> getObserver();
190 virtual void setObserver(
191 Teuchos::RCP<IntegratorObserver<Scalar>> obs = Teuchos::null);
193 virtual void initialize();
194
196 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar>> getX() const;
198 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar>> getXDot() const;
200 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar>> getXDotDot() const;
201
203 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar>> getY() const;
205 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar>> getYDot() const;
207 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar>> getYDotDot() const;
208
210 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar>> getDgDp() const;
211
212 Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> getAdjointModel() const
213 {
214 return adjoint_model_;
215 };
216
218
219 std::string description() const override;
220 void describe(Teuchos::FancyOStream &out,
221 const Teuchos::EVerbosityLevel verbLevel) const override;
223
226
227 protected:
228 // Create sensitivity model evaluator from application model
229 Teuchos::RCP<AdjointAuxSensitivityModelEvaluator<Scalar>> createAdjointModel(
230 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &model,
231 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &adjoint_model,
232 const Teuchos::RCP<Teuchos::ParameterList> &inputPL);
233
235 const Teuchos::RCP<const SolutionHistory<Scalar>> &state_solution_history,
236 const Teuchos::RCP<const SolutionHistory<Scalar>>
237 &adjoint_solution_history);
238
239 Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> model_;
240 Teuchos::RCP<IntegratorBasic<Scalar>> state_integrator_;
241 Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> adjoint_model_;
242 Teuchos::RCP<AdjointAuxSensitivityModelEvaluator<Scalar>> adjoint_aux_model_;
243 Teuchos::RCP<IntegratorBasic<Scalar>> adjoint_integrator_;
244 Teuchos::RCP<SolutionHistory<Scalar>> solutionHistory_;
251 Teuchos::RCP<const Thyra::MultiVectorBase<Scalar>> dxdp_init_;
252 Teuchos::RCP<Thyra::MultiVectorBase<Scalar>> dgdp_;
254};
255
257
273template <class Scalar>
274Teuchos::RCP<IntegratorAdjointSensitivity<Scalar>>
276 Teuchos::RCP<Teuchos::ParameterList> pList,
277 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &model,
278 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &adjoint_model =
279 Teuchos::null);
280
282template <class Scalar>
283Teuchos::RCP<IntegratorAdjointSensitivity<Scalar>>
285
286} // namespace Tempus
287
288#endif // Tempus_IntegratorAdjointSensitivity_decl_hpp
ModelEvaluator for forming adjoint sensitivity equations.
Time integrator suitable for adjoint sensitivity analysis.
Teuchos::RCP< const SolutionHistory< Scalar > > getSensSolutionHistory() const
virtual Teuchos::RCP< SolutionHistory< Scalar > > getNonConstSolutionHistory() override
Get the SolutionHistory.
virtual Teuchos::RCP< Teuchos::Time > getStepperTimer() const override
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getYDot() const
Get the current time derivative of the adjoint solution, ydot.
virtual void setObserver(Teuchos::RCP< IntegratorObserver< Scalar > > obs=Teuchos::null)
Set the Observer.
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getXDotDot() const
Get the current second time derivative of the solution, xdotdot.
virtual Scalar getTime() const override
Get current time.
virtual int getIndex() const override
Get current index.
virtual Teuchos::RCP< const SolutionHistory< Scalar > > getSolutionHistory() const override
Get the SolutionHistory.
void buildSolutionHistory(const Teuchos::RCP< const SolutionHistory< Scalar > > &state_solution_history, const Teuchos::RCP< const SolutionHistory< Scalar > > &adjoint_solution_history)
Teuchos::RCP< TimeStepControl< Scalar > > getSensNonConstTimeStepControl()
virtual void initialize()
Initializes the Integrator after set* function calls.
IntegratorAdjointSensitivity()
Constructor that requires a subsequent setParameterList, setStepper, and initialize calls.
virtual Teuchos::RCP< Teuchos::Time > getIntegratorTimer() const override
Returns the IntegratorTimer_ for this Integrator.
Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > model_
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getX() const
Get the current solution, x.
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getYDotDot() const
Get the current second time derivative of the adjoint solution, ydotdot.
Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > dxdp_init_
virtual bool advanceTime()
Advance the solution to timeMax, and return true if successful.
Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > adjoint_model_
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getXDot() const
Get the current time derivative of the solution, xdot.
virtual void setStatus(const Status st) override
Set Status.
SensitivityStepMode getStepMode() const
What mode the current time integration step is in.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const override
virtual Teuchos::RCP< const TimeStepControl< Scalar > > getTimeStepControl() const override
Get the TimeStepControl.
virtual Teuchos::RCP< TimeStepControl< Scalar > > getNonConstTimeStepControl() override
virtual void initializeSolutionHistory(Scalar t0, Teuchos::RCP< const Thyra::VectorBase< Scalar > > x0, Teuchos::RCP< const Thyra::VectorBase< Scalar > > xdot0=Teuchos::null, Teuchos::RCP< const Thyra::VectorBase< Scalar > > xdotdot0=Teuchos::null, Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > DxDp0=Teuchos::null, Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > DxdotDp0=Teuchos::null, Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > DxdotdotDp0=Teuchos::null)
Set the initial state from Thyra::VectorBase(s)
virtual Teuchos::RCP< Stepper< Scalar > > getStepper() const override
Get the Stepper.
Teuchos::RCP< Thyra::MultiVectorBase< Scalar > > dgdp_
Teuchos::RCP< const SolutionHistory< Scalar > > getStateSolutionHistory() const
Teuchos::RCP< IntegratorBasic< Scalar > > adjoint_integrator_
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getDgDp() const
Return adjoint sensitivity stored in gradient format.
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getY() const
Get the current adjoint solution, y.
virtual Teuchos::RCP< IntegratorObserver< Scalar > > getObserver()
Get the Observer.
Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > getAdjointModel() const
Teuchos::RCP< SolutionHistory< Scalar > > solutionHistory_
Teuchos::RCP< IntegratorBasic< Scalar > > state_integrator_
Teuchos::RCP< TimeStepControl< Scalar > > getStateNonConstTimeStepControl()
Teuchos::RCP< AdjointAuxSensitivityModelEvaluator< Scalar > > createAdjointModel(const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &model, const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &adjoint_model, const Teuchos::RCP< Teuchos::ParameterList > &inputPL)
Teuchos::RCP< AdjointAuxSensitivityModelEvaluator< Scalar > > adjoint_aux_model_
IntegratorObserver class for time integrators.
Thyra Base interface for time integrators. Time integrators are designed to advance the solution from...
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Status
Status for the Integrator, the Stepper and the SolutionState.
Teuchos::RCP< IntegratorAdjointSensitivity< Scalar > > createIntegratorAdjointSensitivity()
Nonmember constructor.