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 
19 namespace Tempus {
20 
21 
59 template<class Scalar>
61  : virtual public Tempus::Integrator<Scalar>,
62  virtual public Teuchos::ParameterListAcceptor
63 {
64 public:
65 
98  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_residual_model,
99  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_solve_model);
100 
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 
113  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_model);
114 
119  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_model,
120  std::string stepperType);
121 
131 
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;
182  virtual void setObserver(
183  Teuchos::RCP<IntegratorObserver<Scalar> > obs = Teuchos::null);
186  {return state_integrator_->getIntegratorTimer();}
188  {return state_integrator_->getStepperTimer();}
189 
191 
193  virtual void initializeSolutionHistory(
194  Scalar t0,
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 
208 
215 
220 
222 
224  override;
227 
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 
250 protected:
252 
253  // Create sensitivity model evaluator from application 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 
261  void buildSolutionHistory();
262 
275 };
276 
278 template<class Scalar>
283 
285 template<class Scalar>
289  std::string stepperType);
290 
292 template<class Scalar>
297  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_model);
298 
300 template<class Scalar>
304  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_model,
305  std::string stepperType);
306 
308 template<class Scalar>
313  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_residual_model,
314  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_solve_model);
315 
317 template<class Scalar>
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 
326 template<class Scalar>
329 
330 } // namespace Tempus
331 
332 #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.