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: Time Integration and Sensitivity Analysis Package
4//
5// Copyright 2017 NTESS and the Tempus contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8//@HEADER
9
10#ifndef Tempus_CombinedForwardSensitivityModelEvaluator_decl_hpp
11#define Tempus_CombinedForwardSensitivityModelEvaluator_decl_hpp
12
13#include "Tempus_config.hpp"
15#include "Thyra_StateFuncModelEvaluatorBase.hpp"
16#include "Thyra_DefaultMultiVectorProductVectorSpace.hpp"
17#include "Thyra_DefaultMultiVectorProductVector.hpp"
18
19namespace Tempus {
20
39template <typename Scalar>
41 : public Thyra::StateFuncModelEvaluatorBase<Scalar>,
42 public SensitivityModelEvaluatorBase<Scalar> {
43 public:
46
48
75 const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& model,
76 const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >&
77 sens_residual_model,
78 const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >&
79 sens_solve_model,
80 const Teuchos::RCP<const Teuchos::ParameterList>& pList = Teuchos::null,
81 const Teuchos::RCP<MultiVector>& dxdp_init = Teuchos::null,
82 const Teuchos::RCP<MultiVector>& dx_dotdp_init = Teuchos::null,
83 const Teuchos::RCP<MultiVector>& dx_dotdot_dp_init = Teuchos::null);
84
87
89 Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > getForwardModel() const
90 {
91 return model_;
92 }
93
95
97 int getSensitivityParamIndex() const { return p_index_; }
98
101
102 Teuchos::RCP<const Thyra::VectorSpaceBase<Scalar> > get_p_space(int p) const;
103
104 Teuchos::RCP<const Teuchos::Array<std::string> > get_p_names(int p) const;
105
106 Teuchos::RCP<const Thyra::VectorSpaceBase<Scalar> > get_x_space() const;
107
108 Teuchos::RCP<const Thyra::VectorSpaceBase<Scalar> > get_f_space() const;
109
110 Teuchos::RCP<const Thyra::VectorSpaceBase<Scalar> > get_g_space(int j) const;
111
112 Teuchos::ArrayView<const std::string> get_g_names(int j) const;
113
114 Teuchos::RCP<Thyra::LinearOpBase<Scalar> > create_W_op() const;
115
116 Teuchos::RCP<Thyra::LinearOpBase<Scalar> > create_DgDx_dot_op(int j) const;
117
118 Teuchos::RCP<Thyra::LinearOpBase<Scalar> > create_DgDx_op(int j) const;
119
120 Teuchos::RCP<Thyra::LinearOpBase<Scalar> > create_DgDp_op(int j, int l) const;
121
122 Teuchos::RCP<const Thyra::LinearOpWithSolveFactoryBase<Scalar> >
123 get_W_factory() const;
124
125 Thyra::ModelEvaluatorBase::InArgs<Scalar> createInArgs() const;
126
127 Thyra::ModelEvaluatorBase::InArgs<Scalar> getNominalValues() const;
128
130
131 static Teuchos::RCP<const Teuchos::ParameterList> getValidParameters();
132
133 private:
134 typedef Thyra::DefaultMultiVectorProductVectorSpace<Scalar> DMVPVS;
135
136 Thyra::ModelEvaluatorBase::OutArgs<Scalar> createOutArgsImpl() const;
137
138 void evalModelImpl(
139 const Thyra::ModelEvaluatorBase::InArgs<Scalar>& inArgs,
140 const Thyra::ModelEvaluatorBase::OutArgs<Scalar>& outArgs) const;
141
142 Thyra::ModelEvaluatorBase::InArgs<Scalar> prototypeInArgs_;
143 Thyra::ModelEvaluatorBase::OutArgs<Scalar> prototypeOutArgs_;
144
145 Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > model_;
146 Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > sens_residual_model_;
147 Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > sens_solve_model_;
148 Teuchos::RCP<MultiVector> dxdp_init_;
149 Teuchos::RCP<MultiVector> dx_dotdp_init_;
150 Teuchos::RCP<MultiVector> dx_dotdotdp_init_;
158
162 Teuchos::RCP<const DMVPVS> dxdp_space_;
163 Teuchos::RCP<const DMVPVS> x_dxdp_space_;
164 Teuchos::RCP<const DMVPVS> dfdp_space_;
165 Teuchos::RCP<const DMVPVS> f_dfdp_space_;
166 Teuchos::RCP<const DMVPVS> dgdp_space_;
167
168 mutable Teuchos::RCP<Thyra::LinearOpBase<Scalar> > my_dfdx_;
169 mutable Teuchos::RCP<Thyra::LinearOpBase<Scalar> > my_dfdxdot_;
170 mutable Teuchos::RCP<Thyra::LinearOpBase<Scalar> > my_dfdxdotdot_;
171 mutable Teuchos::RCP<Thyra::LinearOpBase<Scalar> > my_dgdx_;
172 mutable Teuchos::RCP<Thyra::MultiVectorBase<Scalar> > my_dgdx_mv_;
173};
174
175} // namespace Tempus
176
177#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.