Tempus Version of the Day
Time Integration
Loading...
Searching...
No Matches
Public Types | Public Member Functions | List of all members
Tempus::AdjointAuxSensitivityModelEvaluator< Scalar > Class Template Reference

ModelEvaluator for forming adjoint sensitivity equations. More...

#include <Tempus_AdjointAuxSensitivityModelEvaluator_decl.hpp>

Inheritance diagram for Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >:

Public Types

typedef Thyra::VectorBase< Scalar > Vector
 
typedef Thyra::MultiVectorBase< Scalar > MultiVector
 

Public Member Functions

 AdjointAuxSensitivityModelEvaluator (const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &adjoint_model, const Scalar &t_init, const Scalar &t_final, const Teuchos::RCP< const Teuchos::ParameterList > &pList=Teuchos::null)
 Constructor.
 
Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > getModel () const
 Get the underlying model 'f'.
 
Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > getAdjointModel () const
 Get the underlying adjoint model.
 
void setFinalTime (const Scalar t_final)
 Set the final time from the forward evaluation.
 
void setForwardSolutionHistory (const Teuchos::RCP< const Tempus::SolutionHistory< Scalar > > &sh)
 Set solution history from forward evaluation.
 

Public functions overridden from ModelEvaulator.

typedef Thyra::DefaultProductVectorSpace< Scalar > DPVS
 
typedef Thyra::DefaultProductVector< Scalar > DPV
 
typedef Thyra::DefaultMultiVectorProductVectorSpace< Scalar > DMVPVS
 
typedef Thyra::DefaultMultiVectorProductVector< Scalar > DMVPV
 
Thyra::ModelEvaluatorBase::InArgs< Scalar > prototypeInArgs_
 
Thyra::ModelEvaluatorBase::OutArgs< Scalar > prototypeOutArgs_
 
Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > model_
 
Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > adjoint_model_
 
Teuchos::RCP< const DMVPVSadjoint_space_
 
Teuchos::RCP< const DMVPVSresidual_space_
 
Teuchos::RCP< const DMVPVSresponse_space_
 
Teuchos::RCP< const DPVSx_prod_space_
 
Teuchos::RCP< const DPVSf_prod_space_
 
Teuchos::RCP< const Tempus::SolutionHistory< Scalar > > sh_
 
Scalar t_init_
 
Scalar t_final_
 
bool mass_matrix_is_constant_
 
bool mass_matrix_is_identity_
 
int p_index_
 
int g_index_
 
int num_adjoint_
 
bool mass_matrix_is_computed_
 
Teuchos::RCP< Thyra::LinearOpBase< Scalar > > my_dfdx_
 
Teuchos::RCP< Thyra::LinearOpBase< Scalar > > my_dfdxdot_
 
Teuchos::RCP< Thyra::LinearOpBase< Scalar > > my_dfdp_op_
 
Teuchos::RCP< Thyra::MultiVectorBase< Scalar > > my_dfdp_mv_
 
Teuchos::RCP< Tempus::SolutionState< Scalar > > forward_state_
 
Scalar t_interp_
 
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_p_space (int p) const
 
Teuchos::RCP< const Teuchos::Array< std::string > > get_p_names (int p) const
 
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_x_space () const
 
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_f_space () const
 
Teuchos::RCP< Thyra::LinearOpBase< Scalar > > create_W_op () const
 
Teuchos::RCP< const Thyra::LinearOpWithSolveFactoryBase< Scalar > > get_W_factory () const
 
Thyra::ModelEvaluatorBase::InArgs< Scalar > createInArgs () const
 
Thyra::ModelEvaluatorBase::InArgs< Scalar > getNominalValues () const
 
static Teuchos::RCP< const Teuchos::ParameterList > getValidParameters ()
 
Thyra::ModelEvaluatorBase::OutArgs< Scalar > createOutArgsImpl () const
 
void evalModelImpl (const Thyra::ModelEvaluatorBase::InArgs< Scalar > &inArgs, const Thyra::ModelEvaluatorBase::OutArgs< Scalar > &outArgs) const
 

Detailed Description

template<typename Scalar>
class Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >

ModelEvaluator for forming adjoint sensitivity equations.

This class wraps a given ModelEvalutor encapsulating f(x_dot,x,p) and creates a new "residual" for the adjoint sensitivity equations: F(y,z) = [ d/dt( df/dx_dot^T*y ) - df/dx^T*y ] = 0 [ dz/dt - df/dp^T*y ] where y is the adjoint variable and z is an auxiliary variable. Nominally y is a multi-vector belonging to the vector space of the residual f and a given number of columns and z is a multi-vector beling to the vector space p and the same number of columns. To satisfy the model evaluator interface, y and z are converted to a product vector formed by their columns. This is the form of the adjoint equations suitable for computing sensitivities of a response function g(x(T),p).

To compute adjoint sensitivities, the equations f(x_dot,x,p) = 0 are integrated forward in time to some final time T, with the adjoint equations above integrated backward in time starting at T. Since the tempus integrator can only integrate forward in time, we define tau = T - t and transform the adjoint equations to: F(y) = d/dtau( df/dx_dot^T*y ) + df/dx^T*y = 0. The initial conditions at t = T for y are y(T) = df/dx_dot(x_dot(T),x(T),p)^{-T} * dg/dx(x(T),p)^T. along with z(T) = 0. The sensitivity of g(T) is then dg/dp(T) - int_{0}^T(df/dp^T*y)dt + dx/dp(0)^T*df/dx_dot(0)^T*y(0) = dg/dp(T) - z(0) + dx/dp(0)^T*df/dx_dot(0)^T*y(0)

This model evaluator supports both implicit and explict forms of the governing equations. However it assumes df/dx_dot is constant with respect to x_dot, x, and t so that the adjoint equations become F(y) = df/dxdot^T*y_dot + df/dx^T*y = 0. Moving beyond this assumption will require modifications to the steppers in how they generate time-derivative terms.

Definition at line 57 of file Tempus_AdjointAuxSensitivityModelEvaluator_decl.hpp.

Member Typedef Documentation

◆ Vector

template<typename Scalar >
typedef Thyra::VectorBase<Scalar> Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::Vector

◆ MultiVector

template<typename Scalar >
typedef Thyra::MultiVectorBase<Scalar> Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::MultiVector

◆ DPVS

template<typename Scalar >
typedef Thyra::DefaultProductVectorSpace<Scalar> Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::DPVS
private

◆ DPV

template<typename Scalar >
typedef Thyra::DefaultProductVector<Scalar> Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::DPV
private

◆ DMVPVS

template<typename Scalar >
typedef Thyra::DefaultMultiVectorProductVectorSpace<Scalar> Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::DMVPVS
private

◆ DMVPV

template<typename Scalar >
typedef Thyra::DefaultMultiVectorProductVector<Scalar> Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::DMVPV
private

Constructor & Destructor Documentation

◆ AdjointAuxSensitivityModelEvaluator()

template<typename Scalar >
Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::AdjointAuxSensitivityModelEvaluator ( const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > & model,
const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > & adjoint_model,
const Scalar & t_init,
const Scalar & t_final,
const Teuchos::RCP< const Teuchos::ParameterList > & pList = Teuchos::null )

Constructor.

t_final is the final integration time used to implement the time transformation described above. num_adjoint is the number of adjoint variables defining the number of columns in y, which is determined by the number of elements in the vector space for the response g. The optionally supplied parameter list supports the following options:

  • "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 24 of file Tempus_AdjointAuxSensitivityModelEvaluator_impl.hpp.

Member Function Documentation

◆ getModel()

template<typename Scalar >
Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::getModel ( ) const
inline

Get the underlying model 'f'.

Definition at line 90 of file Tempus_AdjointAuxSensitivityModelEvaluator_decl.hpp.

◆ getAdjointModel()

template<typename Scalar >
Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::getAdjointModel ( ) const
inline

Get the underlying adjoint model.

Definition at line 94 of file Tempus_AdjointAuxSensitivityModelEvaluator_decl.hpp.

◆ setFinalTime()

template<typename Scalar >
void Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::setFinalTime ( const Scalar t_final)

Set the final time from the forward evaluation.

Definition at line 115 of file Tempus_AdjointAuxSensitivityModelEvaluator_impl.hpp.

◆ setForwardSolutionHistory()

template<typename Scalar >
void Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::setForwardSolutionHistory ( const Teuchos::RCP< const Tempus::SolutionHistory< Scalar > > & sh)

Set solution history from forward evaluation.

Definition at line 123 of file Tempus_AdjointAuxSensitivityModelEvaluator_impl.hpp.

◆ get_p_space()

template<typename Scalar >
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::get_p_space ( int p) const

◆ get_p_names()

template<typename Scalar >
Teuchos::RCP< const Teuchos::Array< std::string > > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::get_p_names ( int p) const

◆ get_x_space()

template<typename Scalar >
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::get_x_space ( ) const

◆ get_f_space()

template<typename Scalar >
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::get_f_space ( ) const

◆ create_W_op()

template<typename Scalar >
Teuchos::RCP< Thyra::LinearOpBase< Scalar > > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::create_W_op ( ) const

◆ get_W_factory()

template<typename Scalar >
Teuchos::RCP< const Thyra::LinearOpWithSolveFactoryBase< Scalar > > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::get_W_factory ( ) const

◆ createInArgs()

template<typename Scalar >
Thyra::ModelEvaluatorBase::InArgs< Scalar > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::createInArgs ( ) const

◆ getNominalValues()

template<typename Scalar >
Thyra::ModelEvaluatorBase::InArgs< Scalar > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::getNominalValues ( ) const

◆ getValidParameters()

template<class Scalar >
Teuchos::RCP< const Teuchos::ParameterList > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::getValidParameters ( )
static

◆ createOutArgsImpl()

template<typename Scalar >
Thyra::ModelEvaluatorBase::OutArgs< Scalar > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::createOutArgsImpl ( ) const
private

◆ evalModelImpl()

template<typename Scalar >
void Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::evalModelImpl ( const Thyra::ModelEvaluatorBase::InArgs< Scalar > & inArgs,
const Thyra::ModelEvaluatorBase::OutArgs< Scalar > & outArgs ) const
private

Member Data Documentation

◆ prototypeInArgs_

template<typename Scalar >
Thyra::ModelEvaluatorBase::InArgs<Scalar> Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::prototypeInArgs_
private

◆ prototypeOutArgs_

template<typename Scalar >
Thyra::ModelEvaluatorBase::OutArgs<Scalar> Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::prototypeOutArgs_
private

◆ model_

template<typename Scalar >
Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::model_
private

◆ adjoint_model_

template<typename Scalar >
Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::adjoint_model_
private

◆ adjoint_space_

template<typename Scalar >
Teuchos::RCP<const DMVPVS> Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::adjoint_space_
private

◆ residual_space_

template<typename Scalar >
Teuchos::RCP<const DMVPVS> Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::residual_space_
private

◆ response_space_

template<typename Scalar >
Teuchos::RCP<const DMVPVS> Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::response_space_
private

◆ x_prod_space_

template<typename Scalar >
Teuchos::RCP<const DPVS> Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::x_prod_space_
private

◆ f_prod_space_

template<typename Scalar >
Teuchos::RCP<const DPVS> Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::f_prod_space_
private

◆ sh_

template<typename Scalar >
Teuchos::RCP<const Tempus::SolutionHistory<Scalar> > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::sh_
private

◆ t_init_

template<typename Scalar >
Scalar Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::t_init_
private

◆ t_final_

template<typename Scalar >
Scalar Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::t_final_
private

◆ mass_matrix_is_constant_

template<typename Scalar >
bool Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::mass_matrix_is_constant_
private

◆ mass_matrix_is_identity_

template<typename Scalar >
bool Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::mass_matrix_is_identity_
private

◆ p_index_

template<typename Scalar >
int Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::p_index_
private

◆ g_index_

template<typename Scalar >
int Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::g_index_
private

◆ num_adjoint_

template<typename Scalar >
int Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::num_adjoint_
private

◆ mass_matrix_is_computed_

template<typename Scalar >
bool Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::mass_matrix_is_computed_
mutableprivate

◆ my_dfdx_

template<typename Scalar >
Teuchos::RCP<Thyra::LinearOpBase<Scalar> > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::my_dfdx_
mutableprivate

◆ my_dfdxdot_

template<typename Scalar >
Teuchos::RCP<Thyra::LinearOpBase<Scalar> > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::my_dfdxdot_
mutableprivate

◆ my_dfdp_op_

template<typename Scalar >
Teuchos::RCP<Thyra::LinearOpBase<Scalar> > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::my_dfdp_op_
mutableprivate

◆ my_dfdp_mv_

template<typename Scalar >
Teuchos::RCP<Thyra::MultiVectorBase<Scalar> > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::my_dfdp_mv_
mutableprivate

◆ forward_state_

template<typename Scalar >
Teuchos::RCP<Tempus::SolutionState<Scalar> > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::forward_state_
mutableprivate

◆ t_interp_

template<typename Scalar >
Scalar Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::t_interp_
mutableprivate

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