Tempus  Version of the Day
Time Integration
Tempus_IntegratorPseudoTransientForwardSensitivity_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_IntegratorPseudoTransientForwardSensitivity_decl_hpp
10 #define Tempus_IntegratorPseudoTransientForwardSensitivity_decl_hpp
11 
12 // Tempus
13 #include "Tempus_config.hpp"
14 #include "Tempus_IntegratorBasic.hpp"
16 
17 namespace Tempus {
18 
19 
55 template<class Scalar>
57  : virtual public Tempus::Integrator<Scalar>
58 {
59 public:
60 
96  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model,
97  const Teuchos::RCP<SensitivityModelEvaluatorBase<Scalar> >&sens_model,
98  const Teuchos::RCP<IntegratorBasic<Scalar> > &fwd_integrator,
99  const Teuchos::RCP<IntegratorBasic<Scalar> > &sens_integrator,
100  const bool reuse_solver, const bool force_W_update);
101 
103 
105 
108 
110 
111 
113  virtual bool advanceTime();
115  virtual bool advanceTime(const Scalar timeFinal) override;
117  virtual Scalar getTime() const override;
119  virtual int getIndex() const override;
121  virtual Status getStatus() const override;
123  virtual void setStatus(const Status st) override;
125  virtual Teuchos::RCP<Stepper<Scalar> > getStepper() const override;
127  virtual Teuchos::RCP<Teuchos::ParameterList> getTempusParameterList() override
128  { return state_integrator_->getTempusParameterList(); }
129  virtual void setTempusParameterList(Teuchos::RCP<Teuchos::ParameterList> pl) override
130  { state_integrator_->setTempusParameterList(pl); }
132  virtual Teuchos::RCP<const SolutionHistory<Scalar> > getSolutionHistory() const override;
134  virtual Teuchos::RCP<SolutionHistory<Scalar> > getNonConstSolutionHistory() override;
136  virtual Teuchos::RCP<const TimeStepControl<Scalar> > getTimeStepControl() const override;
137  virtual Teuchos::RCP<TimeStepControl<Scalar> > getNonConstTimeStepControl() override;
138  virtual Teuchos::RCP<Teuchos::Time> getIntegratorTimer() const override
139  {return state_integrator_->getIntegratorTimer();}
140  virtual Teuchos::RCP<Teuchos::Time> getStepperTimer() const override
141  {return state_integrator_->getStepperTimer();}
142 
144 
146  virtual void initializeSolutionHistory(
147  Scalar t0,
148  Teuchos::RCP<const Thyra::VectorBase<Scalar> > x0,
149  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdot0 = Teuchos::null,
150  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdotdot0 = Teuchos::null,
151  Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > DxDp0 = Teuchos::null,
152  Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > DxdotDp0 = Teuchos::null,
153  Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > DxdotdotDp0 = Teuchos::null);
154 
156  virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getX() const;
157  virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > getDxDp() const;
159  virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getXDot() const;
160  virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > getDXDotDp() const;
162  virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getXDotDot() const;
163  virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > getDXDotDotDp() const;
164 
166 
167  std::string description() const override;
168  void describe(Teuchos::FancyOStream & out,
169  const Teuchos::EVerbosityLevel verbLevel) const override;
171 
172 protected:
173 
174  void buildSolutionHistory();
175 
176  Teuchos::RCP<Thyra::ModelEvaluator<Scalar>> model_;
177  Teuchos::RCP<SensitivityModelEvaluatorBase<Scalar>> sens_model_;
178  Teuchos::RCP<IntegratorBasic<Scalar>> state_integrator_;
179  Teuchos::RCP<IntegratorBasic<Scalar>> sens_integrator_;
180  Teuchos::RCP<SolutionHistory<Scalar>> solutionHistory_;
183 };
184 
186 
195 template<class Scalar>
196 Teuchos::RCP<Tempus::IntegratorPseudoTransientForwardSensitivity<Scalar> >
198  Teuchos::RCP<Teuchos::ParameterList> pList,
199  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& model);
200 
202 
210 template<class Scalar>
211 Teuchos::RCP<Tempus::IntegratorPseudoTransientForwardSensitivity<Scalar> >
213 
214 } // namespace Tempus
215 
216 #endif // Tempus_IntegratorPseudoTransientForwardSensitivity_decl_hpp
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getX() const
Get current the solution, x.
virtual Teuchos::RCP< Stepper< Scalar > > getStepper() const override
Get the Stepper.
virtual void setTempusParameterList(Teuchos::RCP< Teuchos::ParameterList > pl) override
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getDXDotDp() const
virtual Teuchos::RCP< const SolutionHistory< Scalar > > getSolutionHistory() const override
Get the SolutionHistory.
virtual Teuchos::RCP< TimeStepControl< Scalar > > getNonConstTimeStepControl() override
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getXDot() const
Get current the time derivative of the solution, xdot.
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getDxDp() const
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 bool advanceTime()
Advance the solution to timeMax, and return true if successful.
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getXDotDot() const
Get current the second time derivative of the solution, xdotdot.
Status
Status for the Integrator, the Stepper and the SolutionState.
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< Teuchos::ParameterList > getTempusParameterList() override
Return a copy of the Tempus ParameterList.
Time integrator suitable for pseudotransient forward sensitivity analysis.
Thyra Base interface for time integrators. Time integrators are designed to advance the solution from...
Teuchos::RCP< Tempus::IntegratorPseudoTransientForwardSensitivity< Scalar > > createIntegratorPseudoTransientForwardSensitivity(Teuchos::RCP< Teuchos::ParameterList > pList, const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &model)
Nonmember constructor.
virtual Teuchos::RCP< const TimeStepControl< Scalar > > getTimeStepControl() const override
Get the TimeStepControl.
virtual Teuchos::RCP< SolutionHistory< Scalar > > getNonConstSolutionHistory() override
Get the SolutionHistory.
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getDXDotDotDp() const
A ModelEvaluator decorator for sensitivity analysis.