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: Copyright (2017) Sandia Corporation
4//
5// Distributed under BSD 3-clause license (See accompanying file Copyright.txt)
6// ****************************************************************************
7// @HEADER
8
9#ifndef Tempus_IntegratorAdjointSensitivity_decl_hpp
10#define Tempus_IntegratorAdjointSensitivity_decl_hpp
11
12// Tempus
13#include "Tempus_config.hpp"
14#include "Tempus_IntegratorBasic.hpp"
15#include "Tempus_AdjointAuxSensitivityModelEvaluator.hpp"
16
17#include "Tempus_StepperStaggeredForwardSensitivity.hpp" // For SensitivityStepMode
18
19namespace Tempus {
20
21
51template<class Scalar>
53 virtual public Tempus::Integrator<Scalar>
54{
55public:
56
115 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> > &model,
116 const Teuchos::RCP<IntegratorBasic<Scalar> > &state_integrator,
117 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> > &adjoint_model,
118 const Teuchos::RCP<AdjointAuxSensitivityModelEvaluator<Scalar> > &adjoint_aux_model,
119 const Teuchos::RCP<IntegratorBasic<Scalar> > &adjoint_integrator,
120 const Teuchos::RCP<SolutionHistory<Scalar> > &solution_history,
121 const int p_index,
122 const int g_index,
123 const bool g_depends_on_p,
124 const bool f_depends_on_p,
125 const bool ic_depends_on_p,
126 const bool mass_matrix_is_identity);
127
130
133
135
136
138 virtual bool advanceTime();
140 virtual bool advanceTime(const Scalar timeFinal) override;
142 virtual Scalar getTime() const override;
144 virtual int getIndex() const override;
146 virtual Status getStatus() const override;
148 virtual void setStatus(const Status st) override;
150 virtual Teuchos::RCP<Stepper<Scalar> > getStepper() const override;
152 virtual Teuchos::RCP<const SolutionHistory<Scalar> > getSolutionHistory() const override;
153 Teuchos::RCP<const SolutionHistory<Scalar> > getStateSolutionHistory() const;
154 Teuchos::RCP<const SolutionHistory<Scalar> > getSensSolutionHistory() const;
156 virtual Teuchos::RCP<SolutionHistory<Scalar> > getNonConstSolutionHistory() override;
158 virtual Teuchos::RCP<const TimeStepControl<Scalar> > getTimeStepControl() const override;
159 virtual Teuchos::RCP<TimeStepControl<Scalar> > getNonConstTimeStepControl() override;
160 Teuchos::RCP<TimeStepControl<Scalar> > getStateNonConstTimeStepControl();
161 Teuchos::RCP<TimeStepControl<Scalar> > getSensNonConstTimeStepControl();
163 virtual Teuchos::RCP<Teuchos::Time> getIntegratorTimer() const override
164 { return state_integrator_->getIntegratorTimer();}
165 virtual Teuchos::RCP<Teuchos::Time> getStepperTimer() const override
166 { return state_integrator_->getStepperTimer();}
167
169
171 virtual void initializeSolutionHistory(
172 Scalar t0,
173 Teuchos::RCP<const Thyra::VectorBase<Scalar> > x0,
174 Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdot0 = Teuchos::null,
175 Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdotdot0 = Teuchos::null,
176 Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > DxDp0 = Teuchos::null,
177 Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > DxdotDp0 = Teuchos::null,
178 Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > DxdotdotDp0 = Teuchos::null);
179
181 virtual Teuchos::RCP<IntegratorObserver<Scalar> > getObserver();
183 virtual void setObserver(
184 Teuchos::RCP<IntegratorObserver<Scalar> > obs = Teuchos::null);
186 virtual void initialize();
187
189 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getX() const;
191 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getXDot() const;
193 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getXDotDot() const;
194
196 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > getY() const;
198 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > getYDot() const;
200 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > getYDotDot() const;
201
203 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > getDgDp() const;
204
206
207 std::string description() const override;
208 void describe(Teuchos::FancyOStream & out,
209 const Teuchos::EVerbosityLevel verbLevel) const override;
211
214
215protected:
216
217 // Create sensitivity model evaluator from application model
218 Teuchos::RCP<AdjointAuxSensitivityModelEvaluator<Scalar> >
220 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
221 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_model,
222 const Teuchos::RCP<Teuchos::ParameterList>& inputPL);
223
225 const Teuchos::RCP<const SolutionHistory<Scalar> >& state_solution_history,
226 const Teuchos::RCP<const SolutionHistory<Scalar> >& adjoint_solution_history);
227
228 Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> model_;
229 Teuchos::RCP<IntegratorBasic<Scalar>> state_integrator_;
230 Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> adjoint_model_;
231 Teuchos::RCP<AdjointAuxSensitivityModelEvaluator<Scalar> > adjoint_aux_model_;
232 Teuchos::RCP<IntegratorBasic<Scalar>> adjoint_integrator_;
233 Teuchos::RCP<SolutionHistory<Scalar>> solutionHistory_;
240 Teuchos::RCP<const Thyra::MultiVectorBase<Scalar>> dxdp_init_;
241 Teuchos::RCP<Thyra::MultiVectorBase<Scalar>> dgdp_;
243};
244
246
262template <class Scalar>
263Teuchos::RCP<IntegratorAdjointSensitivity<Scalar>>
265 Teuchos::RCP<Teuchos::ParameterList> pList,
266 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &model
267 ,const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_model=Teuchos::null);
268
270template<class Scalar>
271Teuchos::RCP<IntegratorAdjointSensitivity<Scalar> >
273
274} // namespace Tempus
275
276#endif // Tempus_IntegratorAdjointSensitivity_decl_hpp
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< 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_
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< IntegratorAdjointSensitivity< Scalar > > createIntegratorAdjointSensitivity()
Nonmember constructor.