Tempus  Version of the Day
Time Integration
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 namespace Tempus {
18 
19 
49 template<class Scalar>
51  virtual public Tempus::Integrator<Scalar>
52 {
53 public:
54 
112  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &model,
113  const Teuchos::RCP<IntegratorBasic<Scalar>> &state_integrator,
114  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &adjoint_model,
115  const Teuchos::RCP<AdjointAuxSensitivityModelEvaluator<Scalar> > &adjoint_aux_model,
116  const Teuchos::RCP<IntegratorBasic<Scalar>> &ajoint_integrator,
117  const Teuchos::RCP<SolutionHistory<Scalar> > &solution_history,
118  const int p_index,
119  const int g_index,
120  const bool g_depends_on_p,
121  const bool f_depends_on_p,
122  const bool ic_depends_on_p,
123  const bool mass_matrix_is_identity);
124 
127 
130 
132 
133 
135  virtual bool advanceTime();
137  virtual bool advanceTime(const Scalar timeFinal) override;
139  virtual Scalar getTime() const override;
141  virtual int getIndex() const override;
143  virtual Status getStatus() const override;
145  virtual void setStatus(const Status st) override;
147  virtual Teuchos::RCP<Stepper<Scalar> > getStepper() const override;
149  virtual Teuchos::RCP<Teuchos::ParameterList> getTempusParameterList() override;
150  virtual void setTempusParameterList(Teuchos::RCP<Teuchos::ParameterList> pl) override;
152  virtual Teuchos::RCP<const SolutionHistory<Scalar> > getSolutionHistory() const override;
154  virtual Teuchos::RCP<SolutionHistory<Scalar> > getNonConstSolutionHistory() override;
156  virtual Teuchos::RCP<const TimeStepControl<Scalar> > getTimeStepControl() const override;
157  virtual Teuchos::RCP<TimeStepControl<Scalar> > getNonConstTimeStepControl() override;
159  virtual Teuchos::RCP<Teuchos::Time> getIntegratorTimer() const override
160  { return state_integrator_->getIntegratorTimer();}
161  virtual Teuchos::RCP<Teuchos::Time> getStepperTimer() const override
162  { return state_integrator_->getStepperTimer();}
163 
165 
167  virtual void initializeSolutionHistory(
168  Scalar t0,
169  Teuchos::RCP<const Thyra::VectorBase<Scalar> > x0,
170  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdot0 = Teuchos::null,
171  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdotdot0 = Teuchos::null,
172  Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > DxDp0 = Teuchos::null,
173  Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > DxdotDp0 = Teuchos::null,
174  Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > DxdotdotDp0 = Teuchos::null);
175 
177  virtual void setObserver(
178  Teuchos::RCP<IntegratorObserver<Scalar> > obs = Teuchos::null);
180  virtual void initialize();
181 
183  virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getX() const;
185  virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getXDot() const;
187  virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getXDotDot() const;
188 
190  virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > getDgDp() const;
191 
193 
194  std::string description() const override;
195  void describe(Teuchos::FancyOStream & out,
196  const Teuchos::EVerbosityLevel verbLevel) const override;
198 
199 protected:
200 
201  // Create sensitivity model evaluator from application model
202  Teuchos::RCP<AdjointAuxSensitivityModelEvaluator<Scalar> >
204  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
205  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_model,
206  const Teuchos::RCP<Teuchos::ParameterList>& inputPL);
207 
209  const Teuchos::RCP<const SolutionHistory<Scalar> >& state_solution_history,
210  const Teuchos::RCP<const SolutionHistory<Scalar> >& adjoint_solution_history);
211 
212  Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> model_;
213  Teuchos::RCP<IntegratorBasic<Scalar>> state_integrator_;
214  Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> adjoint_model_;
215  Teuchos::RCP<AdjointAuxSensitivityModelEvaluator<Scalar> > adjoint_aux_model_;
216  Teuchos::RCP<IntegratorBasic<Scalar>> adjoint_integrator_;
217  Teuchos::RCP<SolutionHistory<Scalar>> solutionHistory_;
218  int p_index_;
219  int g_index_;
224  Teuchos::RCP<const Thyra::MultiVectorBase<Scalar>> dxdp_init_;
225  Teuchos::RCP<Thyra::MultiVectorBase<Scalar>> dgdp_;
226 };
227 
229 
245 template <class Scalar>
246 Teuchos::RCP<IntegratorAdjointSensitivity<Scalar>>
248  Teuchos::RCP<Teuchos::ParameterList> pList,
249  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> &model
250  ,const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& adjoint_model=Teuchos::null);
251 
253 template<class Scalar>
254 Teuchos::RCP<IntegratorAdjointSensitivity<Scalar> >
256 
257 } // namespace Tempus
258 
259 #endif // Tempus_IntegratorAdjointSensitivity_decl_hpp
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const override
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::MultiVectorBase< Scalar > > getDgDp() const
Return adjoint sensitivity stored in gradient format.
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
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< const Thyra::VectorBase< Scalar > > getX() const
Get current the solution, x.
Teuchos::RCP< IntegratorBasic< Scalar > > adjoint_integrator_
virtual Teuchos::RCP< Teuchos::Time > getIntegratorTimer() const override
Returns the IntegratorTimer_ for this Integrator.
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getXDot() const
Get current the time derivative of the solution, xdot.
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_
virtual Teuchos::RCP< Teuchos::ParameterList > getTempusParameterList() override
Return a copy of the Tempus ParameterList.
IntegratorObserver class for time integrators.
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.
virtual void setTempusParameterList(Teuchos::RCP< Teuchos::ParameterList > pl) override
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.
virtual void setObserver(Teuchos::RCP< IntegratorObserver< Scalar > > obs=Teuchos::null)
Set the Observer.
Teuchos::RCP< IntegratorBasic< Scalar > > state_integrator_
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< 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 Teuchos::RCP< const Thyra::VectorBase< Scalar > > getXDotDot() const
Get current the second time derivative of the solution, xdotdot.
virtual void initialize()
Initializes the Integrator after set* function calls.
virtual Teuchos::RCP< Stepper< Scalar > > getStepper() const override
Get the Stepper.
IntegratorAdjointSensitivity()
Constructor that requires a subsequent setParameterList, setStepper, and initialize calls...