Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Types | Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Private Attributes | 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 >:
Inheritance graph
[legend]

Public Types

typedef Thyra::VectorBase< Scalar > Vector
 
typedef Thyra::MultiVectorBase
< Scalar > 
MultiVector
 
- Public Types inherited from Thyra::ModelEvaluator< class >
enum  EInArgsMembers
 
enum  EInArgs_p_mp
 
enum  EEvalType
 
enum  EDerivativeMultiVectorOrientation
 
enum  EDerivativeLinearOp
 
enum  EDerivativeLinearity
 
enum  ERankStatus
 
enum  EOutArgsMembers
 
enum  EOutArgsDfDp
 
enum  EOutArgsDgDx_dot
 
enum  EOutArgsDgDx
 
enum  EOutArgsDgDp
 
enum  EOutArgs_hess_vec_prod_f_xx
 
enum  EOutArgs_hess_vec_prod_f_xp
 
enum  EOutArgs_hess_vec_prod_f_px
 
enum  EOutArgs_hess_vec_prod_f_pp
 
enum  EOutArgs_hess_vec_prod_g_xx
 
enum  EOutArgs_hess_vec_prod_g_xp
 
enum  EOutArgs_hess_vec_prod_g_px
 
enum  EOutArgs_hess_vec_prod_g_pp
 
enum  EOutArgs_hess_f_xx
 
enum  EOutArgs_hess_f_xp
 
enum  EOutArgs_hess_f_pp
 
enum  EOutArgs_hess_g_xx
 
enum  EOutArgs_hess_g_xp
 
enum  EOutArgs_hess_g_pp
 
enum  EOutArgs_H_xx
 
enum  EOutArgs_H_xp
 
enum  EOutArgs_H_pp
 
enum  EOutArgsDfDp_mp
 
enum  EOutArgs_g_mp
 
enum  EOutArgsDgDx_dot_mp
 
enum  EOutArgsDgDx_mp
 
enum  EOutArgsDgDp_mp
 
typedef Teuchos::ScalarTraits
< Scalar >::magnitudeType 
ScalarMag
 

Public Member Functions

 AdjointAuxSensitivityModelEvaluator (const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, const Scalar &t_final, const Teuchos::RCP< const Teuchos::ParameterList > &pList=Teuchos::null)
 Constructor. More...
 
Teuchos::RCP< const
Thyra::ModelEvaluator< Scalar > > 
getModel () const
 Get the underlying model 'f'. More...
 
void setForwardSolutionHistory (const Teuchos::RCP< const Tempus::SolutionHistory< Scalar > > &sh)
 Set solution history from forward evaluation. More...
 
- Public Member Functions inherited from Thyra::StateFuncModelEvaluatorBase< Scalar >
RCP< const VectorSpaceBase
< Scalar > > 
get_p_space (int l) const
 
RCP< const Teuchos::Array
< std::string > > 
get_p_names (int l) const
 
RCP< const VectorSpaceBase
< Scalar > > 
get_g_space (int j) const
 
Teuchos::ArrayView< const
std::string > 
get_g_names (int j) const
 
ModelEvaluatorBase::InArgs
< Scalar > 
getNominalValues () const
 
ModelEvaluatorBase::InArgs
< Scalar > 
getLowerBounds () const
 
ModelEvaluatorBase::InArgs
< Scalar > 
getUpperBounds () const
 
RCP< LinearOpBase< Scalar > > create_W_op () const
 
RCP< PreconditionerBase< Scalar > > create_W_prec () const
 
RCP< const
LinearOpWithSolveFactoryBase
< Scalar > > 
get_W_factory () const
 
void reportFinalPoint (const ModelEvaluatorBase::InArgs< Scalar > &finalPoint, const bool wasSolved)
 
- Public Member Functions inherited from Thyra::ModelEvaluator< class >
virtual int Np () const =0
 
virtual int Ng () const =0
 
virtual RCP< const
VectorSpaceBase< Scalar > > 
get_f_multiplier_space () const =0
 
virtual RCP< const
VectorSpaceBase< Scalar > > 
get_g_multiplier_space (int j) const =0
 
virtual RCP
< LinearOpWithSolveBase
< Scalar > > 
create_W () const =0
 
virtual RCP< LinearOpBase
< Scalar > > 
create_DfDp_op (int l) const =0
 
virtual RCP< LinearOpBase
< Scalar > > 
create_DgDx_dot_op (int j) const =0
 
virtual RCP< LinearOpBase
< Scalar > > 
create_DgDx_op (int j) const =0
 
virtual RCP< LinearOpBase
< Scalar > > 
create_DgDp_op (int j, int l) const =0
 
virtual RCP< LinearOpBase
< Scalar > > 
create_hess_f_xx () const =0
 
virtual RCP< LinearOpBase
< Scalar > > 
create_hess_f_xp (int l) const =0
 
virtual RCP< LinearOpBase
< Scalar > > 
create_hess_f_pp (int l1, int l2) const =0
 
virtual RCP< LinearOpBase
< Scalar > > 
create_hess_g_xx (int j) const =0
 
virtual RCP< LinearOpBase
< Scalar > > 
create_hess_g_xp (int j, int l) const =0
 
virtual RCP< LinearOpBase
< Scalar > > 
create_hess_g_pp (int j, int l1, int l2) const =0
 
virtual
ModelEvaluatorBase::OutArgs
< Scalar > 
createOutArgs () const =0
 
virtual void evalModel (const ModelEvaluatorBase::InArgs< Scalar > &inArgs, const ModelEvaluatorBase::OutArgs< Scalar > &outArgs) const =0
 
 ModelEvaluatorBase ()
 
std::string toString (ModelEvaluatorBase::EInArgsMembers)
 
std::string toString (ModelEvaluatorBase::EOutArgsMembers)
 
std::string toString (ModelEvaluatorBase::EDerivativeMultiVectorOrientation orientation)
 
ModelEvaluatorBase::EDerivativeMultiVectorOrientation getOtherDerivativeMultiVectorOrientation (ModelEvaluatorBase::EDerivativeMultiVectorOrientation orientation)
 
- Public Member Functions inherited from Teuchos::Describable
virtual std::string description () const
 
virtual void describe (FancyOStream &out, const EVerbosityLevel verbLevel=verbLevel_default) const
 
void describe (std::ostream &out, const EVerbosityLevel verbLevel=verbLevel_default) const
 
virtual ~Describable ()
 
 LabeledObject ()
 
virtual ~LabeledObject ()
 
virtual void setObjectLabel (const std::string &objectLabel)
 
virtual std::string getObjectLabel () const
 
DescribableStreamManipulatorState describe (const Describable &describable, const EVerbosityLevel verbLevel=Describable::verbLevel_default)
 
std::ostream & operator<< (std::ostream &os, const DescribableStreamManipulatorState &d)
 

Static Public Member Functions

static Teuchos::RCP< const
Teuchos::ParameterList
getValidParameters ()
 

Private Types

typedef
Thyra::DefaultProductVectorSpace
< Scalar > 
DPVS
 
typedef
Thyra::DefaultProductVector
< Scalar > 
DPV
 
typedef
Thyra::DefaultMultiVectorProductVectorSpace
< Scalar > 
DMVPVS
 
typedef
Thyra::DefaultMultiVectorProductVector
< Scalar > 
DMVPV
 

Private Member Functions

Thyra::ModelEvaluatorBase::OutArgs
< Scalar > 
createOutArgsImpl () const
 
void evalModelImpl (const Thyra::ModelEvaluatorBase::InArgs< Scalar > &inArgs, const Thyra::ModelEvaluatorBase::OutArgs< Scalar > &outArgs) const
 

Private Attributes

Thyra::ModelEvaluatorBase::InArgs
< Scalar > 
prototypeInArgs_
 
Thyra::ModelEvaluatorBase::OutArgs
< Scalar > 
prototypeOutArgs_
 
Teuchos::RCP< const
Thyra::ModelEvaluator< Scalar > > 
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_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_
 

Public functions overridden from ModelEvaulator.

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
 

Additional Inherited Members

- Static Public Attributes inherited from Thyra::ModelEvaluator< class >
static const int NUM_E_IN_ARGS_MEMBERS
 
static const int NUM_E_OUT_ARGS_MEMBERS
 
- Static Public Attributes inherited from Teuchos::Describable
static const EVerbosityLevel verbLevel_default
 

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

template<typename Scalar >
typedef Thyra::VectorBase<Scalar> Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::Vector
template<typename Scalar >
typedef Thyra::MultiVectorBase<Scalar> Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::MultiVector
template<typename Scalar >
typedef Thyra::DefaultProductVectorSpace<Scalar> Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::DPVS
private
template<typename Scalar >
typedef Thyra::DefaultProductVector<Scalar> Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::DPV
private
template<typename Scalar >
typedef Thyra::DefaultMultiVectorProductVectorSpace<Scalar> Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::DMVPVS
private
template<typename Scalar >
typedef Thyra::DefaultMultiVectorProductVector<Scalar> Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::DMVPV
private

Constructor & Destructor Documentation

template<typename Scalar >
Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::AdjointAuxSensitivityModelEvaluator ( const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &  model,
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 28 of file Tempus_AdjointAuxSensitivityModelEvaluator_impl.hpp.

Member Function Documentation

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

Get the underlying model 'f'.

Definition at line 88 of file Tempus_AdjointAuxSensitivityModelEvaluator_decl.hpp.

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 111 of file Tempus_AdjointAuxSensitivityModelEvaluator_impl.hpp.

template<typename Scalar >
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::get_p_space ( int  p) const
virtual
template<typename Scalar >
Teuchos::RCP< const Teuchos::Array< std::string > > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::get_p_names ( int  p) const
virtual
template<typename Scalar >
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::get_x_space ( ) const
virtual
template<typename Scalar >
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::get_f_space ( ) const
virtual
template<typename Scalar >
Teuchos::RCP< Thyra::LinearOpBase< Scalar > > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::create_W_op ( ) const
virtual
template<typename Scalar >
Teuchos::RCP< const Thyra::LinearOpWithSolveFactoryBase< Scalar > > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::get_W_factory ( ) const
virtual
template<typename Scalar >
Thyra::ModelEvaluatorBase::InArgs< Scalar > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::createInArgs ( ) const
virtual
template<typename Scalar >
Thyra::ModelEvaluatorBase::InArgs< Scalar > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::getNominalValues ( ) const
virtual
template<class Scalar >
Teuchos::RCP< const Teuchos::ParameterList > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::getValidParameters ( )
static
template<typename Scalar >
Thyra::ModelEvaluatorBase::OutArgs< Scalar > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::createOutArgsImpl ( ) const
private
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

template<typename Scalar >
Thyra::ModelEvaluatorBase::InArgs<Scalar> Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::prototypeInArgs_
private
template<typename Scalar >
Thyra::ModelEvaluatorBase::OutArgs<Scalar> Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::prototypeOutArgs_
private
template<typename Scalar >
Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::model_
private
template<typename Scalar >
Teuchos::RCP<const DMVPVS> Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::adjoint_space_
private
template<typename Scalar >
Teuchos::RCP<const DMVPVS> Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::residual_space_
private
template<typename Scalar >
Teuchos::RCP<const DMVPVS> Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::response_space_
private
template<typename Scalar >
Teuchos::RCP<const DPVS> Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::x_prod_space_
private
template<typename Scalar >
Teuchos::RCP<const DPVS> Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::f_prod_space_
private
template<typename Scalar >
Teuchos::RCP<const Tempus::SolutionHistory<Scalar> > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::sh_
private
template<typename Scalar >
Scalar Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::t_final_
private
template<typename Scalar >
bool Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::mass_matrix_is_constant_
private
template<typename Scalar >
bool Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::mass_matrix_is_identity_
private
template<typename Scalar >
int Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::p_index_
private
template<typename Scalar >
int Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::g_index_
private
template<typename Scalar >
int Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::num_adjoint_
private
template<typename Scalar >
bool Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::mass_matrix_is_computed_
mutableprivate
template<typename Scalar >
Teuchos::RCP<Thyra::LinearOpBase<Scalar> > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::my_dfdx_
mutableprivate
template<typename Scalar >
Teuchos::RCP<Thyra::LinearOpBase<Scalar> > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::my_dfdxdot_
mutableprivate
template<typename Scalar >
Teuchos::RCP<Thyra::LinearOpBase<Scalar> > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::my_dfdp_op_
mutableprivate
template<typename Scalar >
Teuchos::RCP<Thyra::MultiVectorBase<Scalar> > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::my_dfdp_mv_
mutableprivate
template<typename Scalar >
Teuchos::RCP<Tempus::SolutionState<Scalar> > Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::forward_state_
mutableprivate
template<typename Scalar >
Scalar Tempus::AdjointAuxSensitivityModelEvaluator< Scalar >::t_interp_
mutableprivate

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