Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Tempus_IntegratorAdjointSensitivity_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_IntegratorAdjointSensitivity_decl_hpp
10 #define Tempus_IntegratorAdjointSensitivity_decl_hpp
11 
12 // Tempus
13 #include "Tempus_config.hpp"
14 #include "Tempus_IntegratorBasic.hpp"
15 #include "Tempus_AdjointAuxSensitivityModelEvaluator.hpp"
16 
17 #include "Tempus_StepperStaggeredForwardSensitivity.hpp" // For SensitivityStepMode
18 
19 namespace Tempus {
20 
21 
51 template<class Scalar>
53  virtual public Tempus::Integrator<Scalar>
54 {
55 public:
56 
116  const Teuchos::RCP<IntegratorBasic<Scalar> > &state_integrator,
117  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> > &adjoint_model,
119  const Teuchos::RCP<IntegratorBasic<Scalar> > &adjoint_integrator,
120  const Teuchos::RCP<SolutionHistory<Scalar> > &solution_history,
121  const int p_index,
122  const int g_index,
123  const bool g_depends_on_p,
124  const bool f_depends_on_p,
125  const bool ic_depends_on_p,
126  const bool mass_matrix_is_identity);
127 
130 
133 
135 
136 
138  virtual bool advanceTime();
140  virtual bool advanceTime(const Scalar timeFinal) override;
142  virtual Scalar getTime() const override;
144  virtual int getIndex() const override;
146  virtual Status getStatus() const override;
148  virtual void setStatus(const Status st) override;
150  virtual Teuchos::RCP<Stepper<Scalar> > getStepper() const override;
164  { return state_integrator_->getIntegratorTimer();}
166  { return state_integrator_->getStepperTimer();}
167 
169 
171  virtual void initializeSolutionHistory(
172  Scalar t0,
174  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdot0 = Teuchos::null,
175  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdotdot0 = Teuchos::null,
176  Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > DxDp0 = Teuchos::null,
177  Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > DxdotDp0 = Teuchos::null,
178  Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > DxdotdotDp0 = Teuchos::null);
179 
183  virtual void setObserver(
184  Teuchos::RCP<IntegratorObserver<Scalar> > obs = Teuchos::null);
186  virtual void initialize();
187 
194 
201 
204 
206 
207  std::string description() const override;
208  void describe(Teuchos::FancyOStream & out,
209  const Teuchos::EVerbosityLevel verbLevel) const override;
211 
214 
215 protected:
216 
217  // Create sensitivity model evaluator from application model
221  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_model,
222  const Teuchos::RCP<Teuchos::ParameterList>& inputPL);
223 
225  const Teuchos::RCP<const SolutionHistory<Scalar> >& state_solution_history,
226  const Teuchos::RCP<const SolutionHistory<Scalar> >& adjoint_solution_history);
227 
234  int p_index_;
235  int g_index_;
243 };
244 
246 
262 template <class Scalar>
267  ,const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_model=Teuchos::null);
268 
270 template<class Scalar>
273 
274 } // namespace Tempus
275 
276 #endif // Tempus_IntegratorAdjointSensitivity_decl_hpp
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const override
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getYDot() const
Get the current time derivative of the adjoint solution, ydot.
SensitivityStepMode getStepMode() const
What mode the current time integration step is in.
Teuchos::RCP< Thyra::MultiVectorBase< Scalar > > dgdp_
virtual Teuchos::RCP< TimeStepControl< Scalar > > getNonConstTimeStepControl() override
Teuchos::RCP< IntegratorAdjointSensitivity< Scalar > > createIntegratorAdjointSensitivity(Teuchos::RCP< Teuchos::ParameterList > pList, const Teuchos::RCP< Thyra::ModelEvaluator< Scalar >> &model, const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &adjoint_model=Teuchos::null)
Nonmember constructor.
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getXDotDot() const
Get the current second time derivative of the solution, xdotdot.
virtual void setStatus(const Status st) override
Set Status.
Teuchos::RCP< AdjointAuxSensitivityModelEvaluator< Scalar > > adjoint_aux_model_
virtual Teuchos::RCP< SolutionHistory< Scalar > > getNonConstSolutionHistory() override
Get the SolutionHistory.
ModelEvaluator for forming adjoint sensitivity equations.
virtual Teuchos::RCP< Teuchos::Time > getStepperTimer() const override
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getXDot() const
Get the current time derivative of the solution, xdot.
Teuchos::RCP< SolutionHistory< Scalar > > solutionHistory_
void buildSolutionHistory(const Teuchos::RCP< const SolutionHistory< Scalar > > &state_solution_history, const Teuchos::RCP< const SolutionHistory< Scalar > > &adjoint_solution_history)
virtual Teuchos::RCP< IntegratorObserver< Scalar > > getObserver()
Get the Observer.
Teuchos::RCP< IntegratorBasic< Scalar > > adjoint_integrator_
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getX() const
Get the current solution, x.
virtual Teuchos::RCP< Teuchos::Time > getIntegratorTimer() const override
Returns the IntegratorTimer_ for this Integrator.
virtual Teuchos::RCP< const SolutionHistory< Scalar > > getSolutionHistory() const override
Get the SolutionHistory.
Status
Status for the Integrator, the Stepper and the SolutionState.
Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > dxdp_init_
IntegratorObserver class for time integrators.
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getYDotDot() const
Get the current second time derivative of the adjoint solution, ydotdot.
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 > > DxDp0=Teuchos::null, Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > DxdotDp0=Teuchos::null, Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > DxdotdotDp0=Teuchos::null)
Set the initial state from Thyra::VectorBase(s)
virtual Teuchos::RCP< const TimeStepControl< Scalar > > getTimeStepControl() const override
Get the TimeStepControl.
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
virtual bool advanceTime()
Advance the solution to timeMax, and return true if successful.
Teuchos::RCP< TimeStepControl< Scalar > > getSensNonConstTimeStepControl()
Teuchos::RCP< const SolutionHistory< Scalar > > getSensSolutionHistory() const
virtual void setObserver(Teuchos::RCP< IntegratorObserver< Scalar > > obs=Teuchos::null)
Set the Observer.
Teuchos::RCP< IntegratorBasic< Scalar > > state_integrator_
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getY() const
Get the current adjoint solution, y.
Teuchos::RCP< const SolutionHistory< Scalar > > getStateSolutionHistory() const
Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > model_
Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > adjoint_model_
Thyra Base interface for time integrators. Time integrators are designed to advance the solution from...
Time integrator suitable for adjoint sensitivity analysis.
virtual int getIndex() const override
Get current index.
Teuchos::RCP< TimeStepControl< Scalar > > getStateNonConstTimeStepControl()
Teuchos::RCP< AdjointAuxSensitivityModelEvaluator< Scalar > > createAdjointModel(const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &model, const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &adjoint_model, const Teuchos::RCP< Teuchos::ParameterList > &inputPL)
virtual Scalar getTime() const override
Get current time.
virtual Status getStatus() const override
Get Status.
virtual void initialize()
Initializes the Integrator after set* function calls.
virtual Teuchos::RCP< Stepper< Scalar > > getStepper() const override
Get the Stepper.
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getDgDp() const
Return adjoint sensitivity stored in gradient format.
IntegratorAdjointSensitivity()
Constructor that requires a subsequent setParameterList, setStepper, and initialize calls...