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
Thyra Base interface for time integrators. Time integrators are designed to advance the solution from...
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
Status
Status for the Integrator, the Stepper and the SolutionState.
Teuchos::RCP< Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar > > integratorPseudoTransientAdjointSensitivity()
Nonmember constructor.