Tempus Version of the Day
Time Integration
Loading...
Searching...
No Matches
Tempus_CombinedForwardSensitivityModelEvaluator_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_CombinedForwardSensitivityModelEvaluator_decl_hpp
10#define Tempus_CombinedForwardSensitivityModelEvaluator_decl_hpp
11
12#include "Tempus_config.hpp"
14#include "Thyra_StateFuncModelEvaluatorBase.hpp"
15#include "Thyra_DefaultMultiVectorProductVectorSpace.hpp"
16#include "Thyra_DefaultMultiVectorProductVector.hpp"
17
18namespace Tempus {
19
38template <typename Scalar>
40 public Thyra::StateFuncModelEvaluatorBase<Scalar>,
41 public SensitivityModelEvaluatorBase<Scalar> {
42public:
45
47
74 const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > & model,
75 const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > & sens_residual_model,
76 const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > & sens_solve_model,
77 const Teuchos::RCP<const Teuchos::ParameterList>& pList = Teuchos::null,
78 const Teuchos::RCP<MultiVector>& dxdp_init = Teuchos::null,
79 const Teuchos::RCP<MultiVector>& dx_dotdp_init = Teuchos::null,
80 const Teuchos::RCP<MultiVector>& dx_dotdot_dp_init = Teuchos::null);
81
84
86 Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > getForwardModel() const
87 { return model_; }
88
90
92 int getSensitivityParamIndex() const { return p_index_; }
93
96
97 Teuchos::RCP<const Thyra::VectorSpaceBase<Scalar> > get_p_space(int p) const;
98
99 Teuchos::RCP<const Teuchos::Array<std::string> > get_p_names(int p) const;
100
101 Teuchos::RCP<const Thyra::VectorSpaceBase<Scalar> > get_x_space() const;
102
103 Teuchos::RCP<const Thyra::VectorSpaceBase<Scalar> > get_f_space() const;
104
105 Teuchos::RCP<const Thyra::VectorSpaceBase<Scalar> > get_g_space(int j) const;
106
107 Teuchos::ArrayView<const std::string> get_g_names(int j) const;
108
109 Teuchos::RCP<Thyra::LinearOpBase<Scalar> > create_W_op() const;
110
111 Teuchos::RCP<Thyra::LinearOpBase<Scalar> > create_DgDx_dot_op(int j) const;
112
113 Teuchos::RCP<Thyra::LinearOpBase<Scalar> > create_DgDx_op(int j) const;
114
115 Teuchos::RCP<Thyra::LinearOpBase<Scalar> > create_DgDp_op(int j, int l) const;
116
117 Teuchos::RCP<const Thyra::LinearOpWithSolveFactoryBase<Scalar> >
118 get_W_factory() const;
119
120 Thyra::ModelEvaluatorBase::InArgs<Scalar> createInArgs() const;
121
122 Thyra::ModelEvaluatorBase::InArgs<Scalar> getNominalValues() const;
123
125
126 static Teuchos::RCP<const Teuchos::ParameterList> getValidParameters();
127
128private:
129
130 typedef Thyra::DefaultMultiVectorProductVectorSpace<Scalar> DMVPVS;
131
132 Thyra::ModelEvaluatorBase::OutArgs<Scalar> createOutArgsImpl() const;
133
134 void evalModelImpl(
135 const Thyra::ModelEvaluatorBase::InArgs<Scalar> &inArgs,
136 const Thyra::ModelEvaluatorBase::OutArgs<Scalar> &outArgs) const;
137
138
139 Thyra::ModelEvaluatorBase::InArgs<Scalar> prototypeInArgs_;
140 Thyra::ModelEvaluatorBase::OutArgs<Scalar> prototypeOutArgs_;
141
142 Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > model_;
143 Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > sens_residual_model_;
144 Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > sens_solve_model_;
145 Teuchos::RCP<MultiVector> dxdp_init_;
146 Teuchos::RCP<MultiVector> dx_dotdp_init_;
147 Teuchos::RCP<MultiVector> dx_dotdotdp_init_;
155
159 Teuchos::RCP<const DMVPVS> dxdp_space_;
160 Teuchos::RCP<const DMVPVS> x_dxdp_space_;
161 Teuchos::RCP<const DMVPVS> dfdp_space_;
162 Teuchos::RCP<const DMVPVS> f_dfdp_space_;
163 Teuchos::RCP<const DMVPVS> dgdp_space_;
164
165 mutable Teuchos::RCP<Thyra::LinearOpBase<Scalar> > my_dfdx_;
166 mutable Teuchos::RCP<Thyra::LinearOpBase<Scalar> > my_dfdxdot_;
167 mutable Teuchos::RCP<Thyra::LinearOpBase<Scalar> > my_dfdxdotdot_;
168 mutable Teuchos::RCP<Thyra::LinearOpBase<Scalar> > my_dgdx_;
169 mutable Teuchos::RCP<Thyra::MultiVectorBase<Scalar> > my_dgdx_mv_;
170};
171
172} // namespace Tempus
173
174#endif
Transform a ModelEvaluator's sensitivity equations to its residual.
Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > getForwardModel() const
Get the underlying model 'f'.
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_g_space(int j) const
Teuchos::RCP< Thyra::LinearOpBase< Scalar > > create_DgDx_op(int j) const
Teuchos::RCP< const Thyra::LinearOpWithSolveFactoryBase< Scalar > > get_W_factory() const
void evalModelImpl(const Thyra::ModelEvaluatorBase::InArgs< Scalar > &inArgs, const Thyra::ModelEvaluatorBase::OutArgs< Scalar > &outArgs) const
Teuchos::RCP< Thyra::LinearOpBase< Scalar > > create_DgDp_op(int j, int l) const
Teuchos::RCP< Thyra::LinearOpBase< Scalar > > create_DgDx_dot_op(int j) const
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_f_space() const
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_x_space() const
A ModelEvaluator decorator for sensitivity analysis.