10#ifndef Tempus_IntegratorPseudoTransientAdjointSensitivity_decl_hpp 
   11#define Tempus_IntegratorPseudoTransientAdjointSensitivity_decl_hpp 
   13#include "Tempus_config.hpp" 
   14#include "Tempus_IntegratorBasic.hpp" 
   15#include "Tempus_AdjointSensitivityModelEvaluator.hpp" 
   17#include "Tempus_StepperStaggeredForwardSensitivity.hpp"   
   58template <
class Scalar>
 
   61    virtual public Teuchos::ParameterListAcceptor {
 
   93      Teuchos::RCP<Teuchos::ParameterList> pList,
 
   96          adjoint_residual_model,
 
  104          adjoint_residual_model,
 
  106      std::string stepperType);
 
  111      Teuchos::RCP<Teuchos::ParameterList> pList,
 
  120      std::string stepperType);
 
  129      Teuchos::RCP<Teuchos::ParameterList> pList,
 
  140      std::string stepperType);
 
  156  virtual bool advanceTime(
const Scalar timeFinal) 
override;
 
  158  virtual Scalar 
getTime() 
const override;
 
  160  virtual int getIndex() 
const override;
 
  166  virtual Teuchos::RCP<Stepper<Scalar> > 
getStepper() 
const override;
 
  185  virtual Teuchos::RCP<IntegratorObserver<Scalar> > 
getObserver();
 
  212  virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > 
getX() 
const;
 
  214  virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > 
getXDot() 
const;
 
  216  virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > 
getXDotDot() 
const;
 
  219  virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > 
getY() 
const;
 
  221  virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > 
getYDot() 
const;
 
  223  virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > 
getYDotDot()
 
  227  virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > 
getG() 
const;
 
  229  virtual Teuchos::RCP<const Thyra::MultiVectorBase<Scalar> > 
getDgDp() 
const;
 
  234      const Teuchos::RCP<Teuchos::ParameterList>& pl) 
override;
 
  245  void describe(Teuchos::FancyOStream& out,
 
  246                const Teuchos::EVerbosityLevel verbLevel) 
const override;
 
  261  typedef Thyra::DefaultMultiVectorProductVector<Scalar> 
DMVPV;
 
  264  Teuchos::RCP<AdjointSensitivityModelEvaluator<Scalar> >
 
  268          adjoint_residual_model,
 
  270      const Teuchos::RCP<Teuchos::ParameterList>& inputPL);
 
  274  Teuchos::RCP<Thyra::ModelEvaluator<Scalar> > 
model_;
 
  277  Teuchos::RCP<AdjointSensitivityModelEvaluator<Scalar> > 
sens_model_;
 
  281  Teuchos::RCP<Thyra::VectorBase<Scalar> > 
g_;
 
 
  289template <
class Scalar>
 
  290Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
 
  292    Teuchos::RCP<Teuchos::ParameterList> pList,
 
  296template <
class Scalar>
 
  297Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
 
  300    std::string stepperType);
 
  303template <
class Scalar>
 
  304Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
 
  306    Teuchos::RCP<Teuchos::ParameterList> pList,
 
  311template <
class Scalar>
 
  312Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
 
  316    std::string stepperType);
 
  319template <
class Scalar>
 
  320Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
 
  322    Teuchos::RCP<Teuchos::ParameterList> pList,
 
  328template <
class Scalar>
 
  329Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
 
  334    std::string stepperType);
 
  337template <
class Scalar>
 
  338Teuchos::RCP<Tempus::IntegratorPseudoTransientAdjointSensitivity<Scalar> >
 
IntegratorObserver class for time integrators.
 
Time integrator suitable for pseudotransient adjoint sensitivity analysis.
 
virtual Teuchos::RCP< SolutionHistory< Scalar > > getNonConstSolutionHistory() override
Get the SolutionHistory.
 
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getY() const
Get the current adjoint solution, y.
 
Teuchos::RCP< Stepper< Scalar > > getSensStepper() const
 
virtual Scalar getTime() const override
Get current time.
 
SensitivityStepMode getStepMode() const
What mode the current time integration step is in.
 
IntegratorPseudoTransientAdjointSensitivity()
Destructor.
 
bool getDoForwardIntegration() const
 
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getYDot() const
Get the current time derivative of the adjoint solution, ydot.
 
Teuchos::RCP< Teuchos::ParameterList > getNonconstParameterList() override
 
SensitivityStepMode stepMode_
 
virtual Teuchos::RCP< Teuchos::Time > getIntegratorTimer() const override
Returns the IntegratorTimer_ for this Integrator.
 
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 > > getXDotDot() const
Get the current second time derivative of the solution, xdotdot.
 
void setDoAdjointIntegration(const bool f)
Set/get whether to do the adjoint integration.
 
Teuchos::RCP< const SolutionHistory< Scalar > > getSensSolutionHistory() const
 
virtual Teuchos::RCP< Stepper< Scalar > > getStepper() const override
Get the Stepper.
 
virtual Teuchos::RCP< const TimeStepControl< Scalar > > getTimeStepControl() const override
Get the TimeStepControl.
 
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getG() const
Return response function g.
 
Teuchos::RCP< IntegratorBasic< Scalar > > state_integrator_
 
Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > adjoint_residual_model_
 
Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > model_
 
virtual void setObserver(Teuchos::RCP< IntegratorObserver< Scalar > > obs=Teuchos::null)
Set the Observer.
 
bool do_adjoint_integration_
 
void setDoForwardIntegration(const bool f)
Set/get whether to do the forward integration.
 
Teuchos::RCP< IntegratorBasic< Scalar > > sens_integrator_
 
Teuchos::RCP< Thyra::VectorBase< Scalar > > g_
 
virtual Teuchos::RCP< const SolutionHistory< Scalar > > getSolutionHistory() const override
Get the SolutionHistory.
 
Teuchos::RCP< Teuchos::ParameterList > unsetParameterList() override
 
virtual Teuchos::RCP< IntegratorObserver< Scalar > > getObserver()
Get the Observer.
 
virtual ~IntegratorPseudoTransientAdjointSensitivity()
Destructor.
 
Teuchos::RCP< Stepper< Scalar > > getStateStepper() 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 > > 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)
 
Teuchos::RCP< DMVPV > dgdp_
 
Teuchos::RCP< TimeStepControl< Scalar > > getSensNonConstTimeStepControl()
 
bool do_forward_integration_
 
Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > adjoint_solve_model_
 
Thyra::DefaultMultiVectorProductVector< Scalar > DMVPV
 
Teuchos::RCP< TimeStepControl< Scalar > > getStateNonConstTimeStepControl()
 
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getXDot() const
Get the current time derivative of the solution, xdot.
 
void setParameterList(const Teuchos::RCP< Teuchos::ParameterList > &pl) override
 
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getDgDp() const
Return adjoint sensitivity stored in gradient format.
 
virtual Teuchos::RCP< TimeStepControl< Scalar > > getNonConstTimeStepControl() override
 
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getX() const
Get the current solution, x.
 
Teuchos::RCP< AdjointSensitivityModelEvaluator< Scalar > > sens_model_
 
void buildSolutionHistory()
 
virtual Status getStatus() const override
Get Status.
 
virtual Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > getYDotDot() const
Get the current second time derivative of the adjoint solution, ydotdot.
 
bool getDoAdjointIntegration() const
 
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const override
 
Teuchos::RCP< SolutionHistory< Scalar > > solutionHistory_
 
virtual bool advanceTime()
Advance the solution to timeMax, and return true if successful.
 
virtual Teuchos::RCP< Teuchos::Time > getStepperTimer() const override
 
virtual void setStatus(const Status st) override
Set Status.
 
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const override
 
Teuchos::RCP< const SolutionHistory< Scalar > > getStateSolutionHistory() const
 
virtual int getIndex() const override
Get current index.
 
std::string description() const override
 
Thyra Base interface for time integrators. Time integrators are designed to advance the solution from...
 
Status
Status for the Integrator, the Stepper and the SolutionState.
 
Teuchos::RCP< Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar > > integratorPseudoTransientAdjointSensitivity()
Nonmember constructor.