Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 namespace Tempus {
19 
57 template <class Scalar>
59  : virtual public Tempus::Integrator<Scalar>,
60  virtual public Teuchos::ParameterListAcceptor {
61  public:
95  adjoint_residual_model,
96  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_solve_model);
97 
103  adjoint_residual_model,
104  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_solve_model,
105  std::string stepperType);
106 
112  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_model);
113 
118  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_model,
119  std::string stepperType);
120 
130 
139  std::string stepperType);
140 
142 
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;
170  const override;
175  override;
178  const override;
180  override;
186  virtual void setObserver(
187  Teuchos::RCP<IntegratorObserver<Scalar> > obs = Teuchos::null);
190  {
191  return state_integrator_->getIntegratorTimer();
192  }
194  {
195  return state_integrator_->getStepperTimer();
196  }
197 
199 
201  virtual void initializeSolutionHistory(
202  Scalar t0, Teuchos::RCP<const Thyra::VectorBase<Scalar> > x0,
203  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdot0 = Teuchos::null,
204  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdotdot0 = Teuchos::null,
205  Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > y0 = Teuchos::null,
206  Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > ydot0 = Teuchos::null,
208  Teuchos::null);
209 
216 
223  const;
224 
229 
231 
232  void setParameterList(
233  const Teuchos::RCP<Teuchos::ParameterList>& pl) override;
236 
238  const override;
240 
242 
243  std::string description() const override;
245  const Teuchos::EVerbosityLevel verbLevel) const override;
247 
250 
254 
258 
259  protected:
261 
262  // Create sensitivity model evaluator from application model
267  adjoint_residual_model,
268  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_solve_model,
269  const Teuchos::RCP<Teuchos::ParameterList>& inputPL);
270 
271  void buildSolutionHistory();
272 
285 };
286 
288 template <class Scalar>
293 
295 template <class Scalar>
299  std::string stepperType);
300 
302 template <class Scalar>
307  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_model);
308 
310 template <class Scalar>
314  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_model,
315  std::string stepperType);
316 
318 template <class Scalar>
323  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_residual_model,
324  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_solve_model);
325 
327 template <class Scalar>
331  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_residual_model,
332  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_solve_model,
333  std::string stepperType);
334 
336 template <class Scalar>
339 
340 } // namespace Tempus
341 
342 #endif // Tempus_IntegratorPseudoTransientAdjointSensitivity_decl_hpp
void setParameterList(const Teuchos::RCP< Teuchos::ParameterList > &pl) override
virtual Teuchos::RCP< Teuchos::Time > getIntegratorTimer() const override
Returns the IntegratorTimer_ for this Integrator.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const override
virtual Teuchos::RCP< IntegratorObserver< Scalar > > getObserver()
Get the Observer.
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getY() const
Get the current adjoint solution, y.
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getXDot() const
Get the current time derivative of the solution, xdot.
Teuchos::RCP< Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar > > integratorPseudoTransientAdjointSensitivity(Teuchos::RCP< Teuchos::ParameterList > pList, const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &model)
Nonmember constructor.
void setDoAdjointIntegration(const bool f)
Set/get whether to do the adjoint integration.
virtual void setObserver(Teuchos::RCP< IntegratorObserver< Scalar > > obs=Teuchos::null)
Set the Observer.
virtual Teuchos::RCP< SolutionHistory< Scalar > > getNonConstSolutionHistory() override
Get the SolutionHistory.
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const override
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getDgDp() const
Return adjoint sensitivity stored in gradient format.
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getYDot() const
Get the current time derivative of the adjoint solution, ydot.
Time integrator suitable for pseudotransient adjoint sensitivity analysis.
SensitivityStepMode getStepMode() const
What mode the current time integration step is in.
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getG() const
Return response function g.
void setDoForwardIntegration(const bool f)
Set/get whether to do the forward integration.
virtual Teuchos::RCP< TimeStepControl< Scalar > > getNonConstTimeStepControl() override
Status
Status for the Integrator, the Stepper and the SolutionState.
IntegratorObserver class for time integrators.
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getXDotDot() const
Get the current second time derivative of the solution, xdotdot.
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::MultiVectorBase< Scalar > > getYDotDot() const
Get the current second time derivative of the adjoint solution, ydotdot.
Thyra Base interface for time integrators. Time integrators are designed to advance the solution from...
virtual Teuchos::RCP< Stepper< Scalar > > getStepper() const override
Get the Stepper.
virtual Teuchos::RCP< const SolutionHistory< Scalar > > getSolutionHistory() const override
Get the SolutionHistory.
virtual Teuchos::RCP< const TimeStepControl< Scalar > > getTimeStepControl() const override
Get the TimeStepControl.
virtual bool advanceTime()
Advance the solution to timeMax, and return true if successful.
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 > > getX() const
Get the current solution, x.