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
272 // Parameters of the adjoint integrator: a copy of the parameters without
273 // the objects of the forward problem stored by its nonlinear solver
274 static Teuchos::RCP<Teuchos::ParameterList> adjointParameters(
275 const Teuchos::RCP<Teuchos::ParameterList>& inputPL);
276
278
279 Teuchos::RCP<Thyra::ModelEvaluator<Scalar> > model_;
280 Teuchos::RCP<Thyra::ModelEvaluator<Scalar> > adjoint_residual_model_;
281 Teuchos::RCP<Thyra::ModelEvaluator<Scalar> > adjoint_solve_model_;
282 Teuchos::RCP<AdjointSensitivityModelEvaluator<Scalar> > sens_model_;
283 Teuchos::RCP<IntegratorBasic<Scalar> > state_integrator_;
284 Teuchos::RCP<IntegratorBasic<Scalar> > sens_integrator_;
285 Teuchos::RCP<SolutionHistory<Scalar> > solutionHistory_;
286 Teuchos::RCP<Thyra::VectorBase<Scalar> > g_;
287 Teuchos::RCP<DMVPV> dgdp_;
291};
292
294template <class Scalar>
295Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
297 Teuchos::RCP<Teuchos::ParameterList> pList,
298 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model);
299
301template <class Scalar>
302Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
304 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& 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_model);
314
316template <class Scalar>
317Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
319 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
320 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_model,
321 std::string stepperType);
322
324template <class Scalar>
325Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
327 Teuchos::RCP<Teuchos::ParameterList> pList,
328 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
329 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_residual_model,
330 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_solve_model);
331
333template <class Scalar>
334Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
336 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
337 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_residual_model,
338 const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_solve_model,
339 std::string stepperType);
340
342template <class Scalar>
343Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
345
346} // namespace Tempus
347
348#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.
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.
IntegratorPseudoTransientAdjointSensitivity(Teuchos::RCP< Teuchos::ParameterList > pList, 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)
Constructor with ParameterList and model, and will be fully initialized.
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
static Teuchos::RCP< Teuchos::ParameterList > adjointParameters(const Teuchos::RCP< Teuchos::ParameterList > &inputPL)
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.