Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar > Class Template Reference

Time integrator suitable for pseudotransient adjoint sensitivity analysis. More...

#include <Tempus_IntegratorPseudoTransientAdjointSensitivity_decl.hpp>

Inheritance diagram for Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >:
Tempus::Integrator< Scalar >

Public Member Functions

 IntegratorPseudoTransientAdjointSensitivity (Teuchos::RCP< Teuchos::ParameterList > pList, const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &model)
 Constructor with ParameterList and model, and will be fully initialized. More...
 
 IntegratorPseudoTransientAdjointSensitivity (const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &model, std::string stepperType)
 Constructor with model and "Stepper Type" and is fully initialized with default settings. More...
 
 IntegratorPseudoTransientAdjointSensitivity ()
 Destructor. More...
 
virtual ~IntegratorPseudoTransientAdjointSensitivity ()
 Destructor. More...
 
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) More...
 
virtual Teuchos::RCP< const
Thyra::VectorBase< Scalar > > 
getX () const
 Get current the solution, x. More...
 
virtual Teuchos::RCP< const
Thyra::VectorBase< Scalar > > 
getXdot () const
 Get current the time derivative of the solution, xdot. More...
 
virtual Teuchos::RCP< const
Thyra::VectorBase< Scalar > > 
getXdotdot () const
 Get current the second time derivative of the solution, xdotdot. More...
 
virtual Teuchos::RCP< const
Thyra::MultiVectorBase< Scalar > > 
getDgDp () const
 Return adjoint sensitivity stored in gradient format. More...
 
Basic integrator methods
virtual bool advanceTime ()
 Advance the solution to timeMax, and return true if successful. More...
 
virtual bool advanceTime (const Scalar timeFinal) override
 Advance the solution to timeFinal, and return true if successful. More...
 
virtual Scalar getTime () const override
 Get current time. More...
 
virtual int getIndex () const override
 Get current index. More...
 
virtual Status getStatus () const override
 Get Status. More...
 
virtual Teuchos::RCP< Stepper
< Scalar > > 
getStepper () const override
 Get the Stepper. More...
 
virtual Teuchos::RCP
< Teuchos::ParameterList > 
getTempusParameterList () override
 Return a copy of the Tempus ParameterList. More...
 
virtual void setTempusParameterList (Teuchos::RCP< Teuchos::ParameterList > pl) override
 
virtual Teuchos::RCP< const
SolutionHistory< Scalar > > 
getSolutionHistory () const override
 Get the SolutionHistory. More...
 
virtual Teuchos::RCP< const
TimeStepControl< Scalar > > 
getTimeStepControl () const override
 Get the TimeStepControl. More...
 
virtual Teuchos::RCP
< TimeStepControl< Scalar > > 
getNonConstTimeStepControl () override
 
virtual Teuchos::RCP
< Teuchos::Time > 
getIntegratorTimer () const override
 Returns the IntegratorTimer_ for this Integrator. More...
 
virtual Teuchos::RCP
< Teuchos::Time > 
getStepperTimer () const override
 
Overridden from Teuchos::ParameterListAcceptor
void setParameterList (const Teuchos::RCP< Teuchos::ParameterList > &pl) override
 
Teuchos::RCP
< Teuchos::ParameterList > 
getNonconstParameterList () override
 
Teuchos::RCP
< Teuchos::ParameterList > 
unsetParameterList () override
 
Teuchos::RCP< const
Teuchos::ParameterList > 
getValidParameters () const override
 
Overridden from Teuchos::Describable
std::string description () const override
 
void describe (Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const override
 
Basic integrator methods

Protected Types

typedef
Thyra::DefaultMultiVectorProductVector
< Scalar > 
DMVPV
 

Protected Member Functions

Teuchos::RCP
< AdjointSensitivityModelEvaluator
< Scalar > > 
createSensitivityModel (const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &model, const Teuchos::RCP< Teuchos::ParameterList > &inputPL)
 
void buildSolutionHistory ()
 

Protected Attributes

Teuchos::RCP
< Thyra::ModelEvaluator
< Scalar > > 
model_
 
Teuchos::RCP
< AdjointSensitivityModelEvaluator
< Scalar > > 
sens_model_
 
Teuchos::RCP< IntegratorBasic
< Scalar > > 
state_integrator_
 
Teuchos::RCP< IntegratorBasic
< Scalar > > 
sens_integrator_
 
Teuchos::RCP< SolutionHistory
< Scalar > > 
solutionHistory_
 
Teuchos::RCP< DMVPVdgdp_
 

Detailed Description

template<class Scalar>
class Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >

Time integrator suitable for pseudotransient adjoint sensitivity analysis.

For some problems, time integrators are used to compute steady-state solutions (also known as pseudo-transient solvers). When computing sensitivities, it is not necessary in these cases to propagate sensitivities all the way through the forward time integration. Instead the steady-state is first computed as usual, and then the sensitivities are computed using a similar pseudo-transient time integration applied to the adjoint sensitivity equations with the state frozen to the computed steady-state. This integrator specializes the transient sensitivity methods implemented by Tempus::IntegratorAdjointSensitivity to this case.

Consider an implicit ODE f(x_dot,x,p) = 0 with a stable steady-state solution x = x^s, x_dot = 0 where f(0,x^s,p) = 0 and all of the eigenvalues of df/dx(0,x^s,p) are in the right half-plane (for an explicit ODE, the eigenvalues must be in the left half-plane). In the pseudo-transient method a time-integrator is applied to f(x_dot,x,p) = 0 until x_dot is sufficiently small. Now consider the adjoint sensitivity equations for some response function g(x,p): df/dx_dot^T*y_dot + df/dx^T*y - dg/dx^T = 0 after the transformation tau = T - t has been applied, where T is the final time. For pseudo-transient adjoint sensitivities, the above is integrated from y(0) = 0 until y_dot is sufficiently small, in which case y^s = (df/dx)^{-T}*(dg/dx)^T. Then the final sensitivity of g is dg/dp^T - df/dp^T*y^s. One can see that y^s is the only steady-state solution of the adjoint equations, since df/dx and dg/dx are constant, and must be linearly stable (since the eigenvalues of df/dx^T are the same as df/dx).

Definition at line 51 of file Tempus_IntegratorPseudoTransientAdjointSensitivity_decl.hpp.

Member Typedef Documentation

template<class Scalar >
typedef Thyra::DefaultMultiVectorProductVector<Scalar> Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::DMVPV
protected

Constructor & Destructor Documentation

template<class Scalar >
Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::IntegratorPseudoTransientAdjointSensitivity ( Teuchos::RCP< Teuchos::ParameterList >  pList,
const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &  model 
)

Constructor with ParameterList and model, and will be fully initialized.

In addition to all of the regular integrator options, the supplied parameter list supports the following options contained within a sublist "Sensitivities" from the top-level parameter list:

  • "Sensitivity Parameter Index", (default: 0) The model evaluator parameter index for which sensitivities will be computed.
  • "Response Function Index", (default: 0) The model evaluator response index for which sensitivities will be computed.
  • "Mass Matrix Is Constant" (default: true) Whether the mass matrix df/dx_dot is a constant matrix. As describe above, this is currently required to be true.
  • "Mass Matrix Is Identity" (default: false) Whether the mass matrix is the identity matrix, in which some computations can be skipped.

Definition at line 22 of file Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp.

template<class Scalar >
Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::IntegratorPseudoTransientAdjointSensitivity ( const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &  model,
std::string  stepperType 
)

Constructor with model and "Stepper Type" and is fully initialized with default settings.

Definition at line 34 of file Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp.

Destructor.

Constructor that requires a subsequent setParameterList, setStepper, and initialize calls.

Definition at line 46 of file Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp.

template<class Scalar >
virtual Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::~IntegratorPseudoTransientAdjointSensitivity ( )
inlinevirtual

Destructor.

Definition at line 88 of file Tempus_IntegratorPseudoTransientAdjointSensitivity_decl.hpp.

Member Function Documentation

template<class Scalar >
bool Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::advanceTime ( )
virtual

Advance the solution to timeMax, and return true if successful.

Definition at line 55 of file Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp.

template<class Scalar >
bool Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::advanceTime ( const Scalar  timeFinal)
overridevirtual

Advance the solution to timeFinal, and return true if successful.

Implements Tempus::Integrator< Scalar >.

Definition at line 65 of file Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp.

template<class Scalar >
void Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::buildSolutionHistory ( )
protected
template<class Scalar >
Teuchos::RCP< Tempus::AdjointSensitivityModelEvaluator< Scalar > > Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::createSensitivityModel ( const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &  model,
const Teuchos::RCP< Teuchos::ParameterList > &  inputPL 
)
protected
template<class Scalar >
void Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::describe ( Teuchos::FancyOStream &  out,
const Teuchos::EVerbosityLevel  verbLevel 
) const
override
template<class Scalar >
std::string Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::description ( ) const
override
template<class Scalar >
Teuchos::RCP< const Thyra::MultiVectorBase< Scalar > > Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::getDgDp ( ) const
virtual

Return adjoint sensitivity stored in gradient format.

Definition at line 257 of file Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp.

template<class Scalar >
int Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::getIndex ( ) const
overridevirtual

Get current index.

Implements Tempus::Integrator< Scalar >.

Definition at line 115 of file Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp.

template<class Scalar >
virtual Teuchos::RCP<Teuchos::Time> Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::getIntegratorTimer ( ) const
inlineoverridevirtual

Returns the IntegratorTimer_ for this Integrator.

Implements Tempus::Integrator< Scalar >.

Definition at line 114 of file Tempus_IntegratorPseudoTransientAdjointSensitivity_decl.hpp.

template<class Scalar >
Teuchos::RCP< Teuchos::ParameterList > Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::getNonconstParameterList ( )
override
template<class Scalar >
Teuchos::RCP< TimeStepControl< Scalar > > Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::getNonConstTimeStepControl ( )
overridevirtual
template<class Scalar >
Teuchos::RCP< const SolutionHistory< Scalar > > Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::getSolutionHistory ( ) const
overridevirtual
template<class Scalar >
Status Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::getStatus ( ) const
overridevirtual
template<class Scalar >
Teuchos::RCP< Stepper< Scalar > > Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::getStepper ( ) const
overridevirtual
template<class Scalar >
virtual Teuchos::RCP<Teuchos::Time> Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::getStepperTimer ( ) const
inlineoverridevirtual
template<class Scalar >
Teuchos::RCP< Teuchos::ParameterList > Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::getTempusParameterList ( )
overridevirtual

Return a copy of the Tempus ParameterList.

Implements Tempus::Integrator< Scalar >.

Definition at line 145 of file Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp.

template<class Scalar >
Scalar Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::getTime ( ) const
overridevirtual

Get current time.

Implements Tempus::Integrator< Scalar >.

Definition at line 107 of file Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp.

template<class Scalar >
Teuchos::RCP< const TimeStepControl< Scalar > > Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::getTimeStepControl ( ) const
overridevirtual
template<class Scalar >
Teuchos::RCP< const Teuchos::ParameterList > Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::getValidParameters ( ) const
override
template<class Scalar >
Teuchos::RCP< const Thyra::VectorBase< Scalar > > Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::getX ( ) const
virtual

Get current the solution, x.

Definition at line 233 of file Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp.

template<class Scalar >
Teuchos::RCP< const Thyra::VectorBase< Scalar > > Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::getXdot ( ) const
virtual

Get current the time derivative of the solution, xdot.

Definition at line 241 of file Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp.

template<class Scalar >
Teuchos::RCP< const Thyra::VectorBase< Scalar > > Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::getXdotdot ( ) const
virtual

Get current the second time derivative of the solution, xdotdot.

Definition at line 249 of file Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp.

template<class Scalar >
void Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::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 
)
virtual

Set the initial state from Thyra::VectorBase(s)

Definition at line 185 of file Tempus_IntegratorPseudoTransientAdjointSensitivity_impl.hpp.

template<class Scalar >
void Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::setParameterList ( const Teuchos::RCP< Teuchos::ParameterList > &  pl)
override
template<class Scalar >
void Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::setTempusParameterList ( Teuchos::RCP< Teuchos::ParameterList >  pl)
overridevirtual
template<class Scalar >
Teuchos::RCP< Teuchos::ParameterList > Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::unsetParameterList ( )
override

Member Data Documentation

template<class Scalar >
Teuchos::RCP<DMVPV> Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::dgdp_
protected
template<class Scalar >
Teuchos::RCP<Thyra::ModelEvaluator<Scalar> > Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::model_
protected
template<class Scalar >
Teuchos::RCP<IntegratorBasic<Scalar> > Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::sens_integrator_
protected
template<class Scalar >
Teuchos::RCP<AdjointSensitivityModelEvaluator<Scalar> > Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::sens_model_
protected
template<class Scalar >
Teuchos::RCP<SolutionHistory<Scalar> > Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::solutionHistory_
protected
template<class Scalar >
Teuchos::RCP<IntegratorBasic<Scalar> > Tempus::IntegratorPseudoTransientAdjointSensitivity< Scalar >::state_integrator_
protected

The documentation for this class was generated from the following files: