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: 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_IntegratorPseudoTransientAdjointSensitivity_decl_hpp
11#define Tempus_IntegratorPseudoTransientAdjointSensitivity_decl_hpp
12
13#include "Tempus_config.hpp"
14#include "Tempus_IntegratorBasic.hpp"
15#include "Tempus_AdjointSensitivityModelEvaluator.hpp"
16
17#include "Tempus_StepperStaggeredForwardSensitivity.hpp" // For SensitivityStepMode
18
19namespace Tempus {
20
58template <class Scalar>
60 : virtual public Tempus::Integrator<Scalar>,
61 virtual public Teuchos::ParameterListAcceptor {
62 public:
93 Teuchos::RCP<Teuchos::ParameterList> pList,
94 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
95 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >&
96 adjoint_residual_model,
97 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_solve_model);
98
102 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
103 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >&
104 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
146
149
151
152
154 virtual bool advanceTime();
156 virtual bool advanceTime(const Scalar timeFinal) override;
158 virtual Scalar getTime() const override;
160 virtual int getIndex() const override;
162 virtual Status getStatus() const override;
164 virtual void setStatus(const Status st) override;
166 virtual Teuchos::RCP<Stepper<Scalar> > getStepper() const override;
167 Teuchos::RCP<Stepper<Scalar> > getStateStepper() const;
168 Teuchos::RCP<Stepper<Scalar> > getSensStepper() const;
170 virtual Teuchos::RCP<const SolutionHistory<Scalar> > getSolutionHistory()
171 const override;
172 Teuchos::RCP<const SolutionHistory<Scalar> > getStateSolutionHistory() const;
173 Teuchos::RCP<const SolutionHistory<Scalar> > getSensSolutionHistory() const;
175 virtual Teuchos::RCP<SolutionHistory<Scalar> > getNonConstSolutionHistory()
176 override;
178 virtual Teuchos::RCP<const TimeStepControl<Scalar> > getTimeStepControl()
179 const override;
180 virtual Teuchos::RCP<TimeStepControl<Scalar> > getNonConstTimeStepControl()
181 override;
182 Teuchos::RCP<TimeStepControl<Scalar> > getStateNonConstTimeStepControl();
183 Teuchos::RCP<TimeStepControl<Scalar> > getSensNonConstTimeStepControl();
185 virtual Teuchos::RCP<IntegratorObserver<Scalar> > getObserver();
187 virtual void setObserver(
188 Teuchos::RCP<IntegratorObserver<Scalar> > obs = Teuchos::null);
190 virtual Teuchos::RCP<Teuchos::Time> getIntegratorTimer() const override
191 {
192 return state_integrator_->getIntegratorTimer();
193 }
194 virtual Teuchos::RCP<Teuchos::Time> getStepperTimer() const override
195 {
196 return state_integrator_->getStepperTimer();
197 }
198
200
202 virtual void initializeSolutionHistory(
203 Scalar t0, Teuchos::RCP<const Thyra::VectorBase<Scalar> > x0,
204 Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdot0 = Teuchos::null,
205 Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdotdot0 = Teuchos::null,
206 Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > y0 = Teuchos::null,
207 Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > ydot0 = Teuchos::null,
208 Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > ydotdot0 =
209 Teuchos::null);
210
212 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getX() const;
214 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getXDot() const;
216 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getXDotDot() const;
217
219 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > getY() const;
221 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > getYDot() const;
223 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > getYDotDot()
224 const;
225
227 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getG() const;
229 virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > getDgDp() const;
230
232
233 void setParameterList(
234 const Teuchos::RCP<Teuchos::ParameterList>& pl) override;
235 Teuchos::RCP<Teuchos::ParameterList> getNonconstParameterList() override;
236 Teuchos::RCP<Teuchos::ParameterList> unsetParameterList() override;
237
238 Teuchos::RCP<const Teuchos::ParameterList> getValidParameters()
239 const override;
241
243
244 std::string description() const override;
245 void describe(Teuchos::FancyOStream& out,
246 const Teuchos::EVerbosityLevel verbLevel) const override;
248
251
255
259
260 protected:
261 typedef Thyra::DefaultMultiVectorProductVector<Scalar> DMVPV;
262
263 // Create sensitivity model evaluator from application model
264 Teuchos::RCP<AdjointSensitivityModelEvaluator<Scalar> >
266 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
267 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >&
268 adjoint_residual_model,
269 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_solve_model,
270 const Teuchos::RCP<Teuchos::ParameterList>& inputPL);
271
273
274 Teuchos::RCP<Thyra::ModelEvaluator<Scalar> > model_;
275 Teuchos::RCP<Thyra::ModelEvaluator<Scalar> > adjoint_residual_model_;
276 Teuchos::RCP<Thyra::ModelEvaluator<Scalar> > adjoint_solve_model_;
277 Teuchos::RCP<AdjointSensitivityModelEvaluator<Scalar> > sens_model_;
278 Teuchos::RCP<IntegratorBasic<Scalar> > state_integrator_;
279 Teuchos::RCP<IntegratorBasic<Scalar> > sens_integrator_;
280 Teuchos::RCP<SolutionHistory<Scalar> > solutionHistory_;
281 Teuchos::RCP<Thyra::VectorBase<Scalar> > g_;
282 Teuchos::RCP<DMVPV> dgdp_;
286};
287
289template <class Scalar>
290Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
292 Teuchos::RCP<Teuchos::ParameterList> pList,
293 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model);
294
296template <class Scalar>
297Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
299 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
300 std::string stepperType);
301
303template <class Scalar>
304Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
306 Teuchos::RCP<Teuchos::ParameterList> pList,
307 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
308 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_model);
309
311template <class Scalar>
312Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
314 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
315 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_model,
316 std::string stepperType);
317
319template <class Scalar>
320Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
322 Teuchos::RCP<Teuchos::ParameterList> pList,
323 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
324 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_residual_model,
325 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_solve_model);
326
328template <class Scalar>
329Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
331 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
332 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_residual_model,
333 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_solve_model,
334 std::string stepperType);
335
337template <class Scalar>
338Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
340
341} // namespace Tempus
342
343#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.