Tempus Version of the Day
Time Integration
Loading...
Searching...
No Matches
Tempus_IntegratorPseudoTransientAdjointSensitivity_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_IntegratorPseudoTransientAdjointSensitivity_decl_hpp
10#define Tempus_IntegratorPseudoTransientAdjointSensitivity_decl_hpp
11
12#include "Tempus_config.hpp"
13#include "Tempus_IntegratorBasic.hpp"
14#include "Tempus_AdjointSensitivityModelEvaluator.hpp"
15
16#include "Tempus_StepperStaggeredForwardSensitivity.hpp" // For SensitivityStepMode
17
18
19namespace Tempus {
20
21
59template<class Scalar>
61 : virtual public Tempus::Integrator<Scalar>,
62 virtual public Teuchos::ParameterListAcceptor
63{
64public:
65
96 Teuchos::RCP<Teuchos::ParameterList> pList,
97 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
98 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_residual_model,
99 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_solve_model);
100
103 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
104 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_residual_model,
105 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_solve_model,
106 std::string stepperType);
107
111 Teuchos::RCP<Teuchos::ParameterList> pList,
112 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
113 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_model);
114
118 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
119 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_model,
120 std::string stepperType);
121
129 Teuchos::RCP<Teuchos::ParameterList> pList,
130 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model);
131
139 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
140 std::string stepperType);
141
143
145
148
150
151
153 virtual bool advanceTime();
155 virtual bool advanceTime(const Scalar timeFinal) override;
157 virtual Scalar getTime() const override;
159 virtual int getIndex() const override;
161 virtual Status getStatus() const override;
163 virtual void setStatus(const Status st) override;
165 virtual Teuchos::RCP<Stepper<Scalar> > getStepper() const override;
166 Teuchos::RCP<Stepper<Scalar> > getStateStepper() const;
167 Teuchos::RCP<Stepper<Scalar> > getSensStepper() const;
169 virtual Teuchos::RCP<const SolutionHistory<Scalar> > getSolutionHistory() const override;
170 Teuchos::RCP<const SolutionHistory<Scalar> > getStateSolutionHistory() const;
171 Teuchos::RCP<const SolutionHistory<Scalar> > getSensSolutionHistory() const;
173 virtual Teuchos::RCP<SolutionHistory<Scalar> > getNonConstSolutionHistory() override;
175 virtual Teuchos::RCP<const TimeStepControl<Scalar> > getTimeStepControl() const override;
176 virtual Teuchos::RCP<TimeStepControl<Scalar> > getNonConstTimeStepControl() override;
177 Teuchos::RCP<TimeStepControl<Scalar> > getStateNonConstTimeStepControl();
178 Teuchos::RCP<TimeStepControl<Scalar> > getSensNonConstTimeStepControl();
180 virtual Teuchos::RCP<IntegratorObserver<Scalar> > getObserver();
182 virtual void setObserver(
183 Teuchos::RCP<IntegratorObserver<Scalar> > obs = Teuchos::null);
185 virtual Teuchos::RCP<Teuchos::Time> getIntegratorTimer() const override
186 {return state_integrator_->getIntegratorTimer();}
187 virtual Teuchos::RCP<Teuchos::Time> getStepperTimer() const override
188 {return state_integrator_->getStepperTimer();}
189
191
193 virtual void initializeSolutionHistory(
194 Scalar t0,
195 Teuchos::RCP<const Thyra::VectorBase<Scalar> > x0,
196 Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdot0 = Teuchos::null,
197 Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdotdot0 = Teuchos::null,
198 Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > y0 = Teuchos::null,
199 Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > ydot0 = Teuchos::null,
200 Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > ydotdot0 = Teuchos::null);
201
203 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getX() const;
205 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getXDot() const;
207 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getXDotDot() const;
208
210 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > getY() const;
212 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > getYDot() const;
214 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > getYDotDot() const;
215
217 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getG() const;
219 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > getDgDp() const;
220
222
223 void setParameterList(const Teuchos::RCP<Teuchos::ParameterList> & pl)
224 override;
225 Teuchos::RCP<Teuchos::ParameterList> getNonconstParameterList() override;
226 Teuchos::RCP<Teuchos::ParameterList> unsetParameterList() override;
227
228 Teuchos::RCP<const Teuchos::ParameterList> getValidParameters()
229 const override;
231
233
234 std::string description() const override;
235 void describe(Teuchos::FancyOStream & out,
236 const Teuchos::EVerbosityLevel verbLevel) const override;
238
241
245
249
250protected:
251 typedef Thyra::DefaultMultiVectorProductVector<Scalar> DMVPV;
252
253 // Create sensitivity model evaluator from application model
254 Teuchos::RCP<AdjointSensitivityModelEvaluator<Scalar> >
256 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
257 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_residual_model,
258 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_solve_model,
259 const Teuchos::RCP<Teuchos::ParameterList>& inputPL);
260
262
263 Teuchos::RCP<Thyra::ModelEvaluator<Scalar> > model_;
264 Teuchos::RCP<Thyra::ModelEvaluator<Scalar> > adjoint_residual_model_;
265 Teuchos::RCP<Thyra::ModelEvaluator<Scalar> > adjoint_solve_model_;
266 Teuchos::RCP<AdjointSensitivityModelEvaluator<Scalar> > sens_model_;
267 Teuchos::RCP<IntegratorBasic<Scalar> > state_integrator_;
268 Teuchos::RCP<IntegratorBasic<Scalar> > sens_integrator_;
269 Teuchos::RCP<SolutionHistory<Scalar> > solutionHistory_;
270 Teuchos::RCP<Thyra::VectorBase<Scalar> > g_;
271 Teuchos::RCP<DMVPV> dgdp_;
275};
276
278template<class Scalar>
279Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
281 Teuchos::RCP<Teuchos::ParameterList> pList,
282 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model);
283
285template<class Scalar>
286Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
288 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
289 std::string stepperType);
290
292template<class Scalar>
293Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
295 Teuchos::RCP<Teuchos::ParameterList> pList,
296 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
297 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_model);
298
300template<class Scalar>
301Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
303 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
304 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_model,
305 std::string stepperType);
306
308template<class Scalar>
309Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
311 Teuchos::RCP<Teuchos::ParameterList> pList,
312 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
313 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_residual_model,
314 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_solve_model);
315
317template<class Scalar>
318Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
320 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
321 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_residual_model,
322 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_solve_model,
323 std::string stepperType);
324
326template<class Scalar>
327Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
329
330} // namespace Tempus
331
332#endif // Tempus_IntegratorPseudoTransientAdjointSensitivity_decl_hpp
IntegratorObserver class for time integrators.
Time integrator suitable for pseudotransient adjoint sensitivity analysis.
virtual Teuchos::RCP< SolutionHistory< Scalar > > getNonConstSolutionHistory() override
Get the SolutionHistory.
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getY() const
Get the current adjoint solution, y.
SensitivityStepMode getStepMode() const
What mode the current time integration step is in.
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getYDot() const
Get the current time derivative of the adjoint solution, ydot.
virtual Teuchos::RCP< Teuchos::Time > getIntegratorTimer() const override
Returns the IntegratorTimer_ for this Integrator.
Teuchos::RCP< AdjointSensitivityModelEvaluator< Scalar > > createSensitivityModel(const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &model, const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &adjoint_residual_model, const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &adjoint_solve_model, const Teuchos::RCP< Teuchos::ParameterList > &inputPL)
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getXDotDot() const
Get the current second time derivative of the solution, xdotdot.
void setDoAdjointIntegration(const bool f)
Set/get whether to do the adjoint integration.
virtual Teuchos::RCP< Stepper< Scalar > > getStepper() const override
Get the Stepper.
virtual Teuchos::RCP< const TimeStepControl< Scalar > > getTimeStepControl() const override
Get the TimeStepControl.
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getG() const
Return response function g.
virtual void setObserver(Teuchos::RCP< IntegratorObserver< Scalar > > obs=Teuchos::null)
Set the Observer.
void setDoForwardIntegration(const bool f)
Set/get whether to do the forward integration.
virtual Teuchos::RCP< const SolutionHistory< Scalar > > getSolutionHistory() const override
Get the SolutionHistory.
virtual Teuchos::RCP< IntegratorObserver< Scalar > > getObserver()
Get the Observer.
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 > > y0=Teuchos::null, Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > ydot0=Teuchos::null, Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > ydotdot0=Teuchos::null)
Set the initial state from Thyra::VectorBase(s)
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getXDot() const
Get the current time derivative of the solution, xdot.
void setParameterList(const Teuchos::RCP< Teuchos::ParameterList > &pl) override
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getDgDp() const
Return adjoint sensitivity stored in gradient format.
virtual Teuchos::RCP< TimeStepControl< Scalar > > getNonConstTimeStepControl() override
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.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const override
virtual bool advanceTime()
Advance the solution to timeMax, and return true if successful.
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const override
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< Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar > > integratorPseudoTransientAdjointSensitivity()
Nonmember constructor.