Tempus Version of the Day
Time Integration
Loading...
Searching...
No Matches
Tempus_StaggeredForwardSensitivityModelEvaluator_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_StaggeredForwardSensitivityModelEvaluator_decl_hpp
10#define Tempus_StaggeredForwardSensitivityModelEvaluator_decl_hpp
11
12#include "Thyra_StateFuncModelEvaluatorBase.hpp"
13#include "Thyra_DefaultMultiVectorProductVectorSpace.hpp"
14#include "NOX_Thyra.H"
15
16#include "Tempus_config.hpp"
17#include "Tempus_SolutionHistory.hpp"
19
20namespace Tempus {
21
48template <typename Scalar>
50 public Thyra::StateFuncModelEvaluatorBase<Scalar>,
51 public SensitivityModelEvaluatorBase<Scalar> {
52public:
55
57
84 const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > & model,
85 const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > & sens_residual_model,
86 const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > & sens_solve_model,
87 const bool is_pseudotransient,
88 const Teuchos::RCP<const Teuchos::ParameterList>& pList = Teuchos::null,
89 const Teuchos::RCP<MultiVector>& dxdp_init = Teuchos::null,
90 const Teuchos::RCP<MultiVector>& dx_dotdp_init = Teuchos::null,
91 const Teuchos::RCP<MultiVector>& dx_dotdot_dp_init = Teuchos::null);
92
95
97 Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > getForwardModel() const
98 { return model_; }
99
102 const Teuchos::RCP<const Tempus::SolutionHistory<Scalar> >& sh);
103
105 virtual void setForwardSolutionState(
106 const Teuchos::RCP<const Tempus::SolutionState<Scalar> >& s);
107
109 virtual void setSolver(
110 const Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar> >& solver,
111 const bool force_W_update) {
112 auto nox_solver =
113 Teuchos::rcp_dynamic_cast<Thyra::NOXNonlinearSolver>(solver,true);
114 lo_ = nox_solver->get_nonconst_W_op(force_W_update);
115 po_ = nox_solver->get_nonconst_prec_op();
116 }
117
119
122
123 Teuchos::RCP<const Thyra::VectorSpaceBase<Scalar> > get_p_space(int p) const;
124
125 Teuchos::RCP<const Teuchos::Array<std::string> > get_p_names(int p) const;
126
127 Teuchos::RCP<const Thyra::VectorSpaceBase<Scalar> > get_x_space() const;
128
129 Teuchos::RCP<const Thyra::VectorSpaceBase<Scalar> > get_f_space() const;
130
131 Teuchos::RCP<const Thyra::VectorSpaceBase<Scalar> > get_g_space(int j) const;
132
133 Teuchos::ArrayView<const std::string> get_g_names(int j) const;
134
135 Teuchos::RCP<Thyra::LinearOpBase<Scalar> > create_W_op() const;
136
137 Teuchos::RCP<Thyra::LinearOpBase<Scalar> > create_DgDx_dot_op(int j) const;
138
139 Teuchos::RCP<Thyra::LinearOpBase<Scalar> > create_DgDx_op(int j) const;
140
141 Teuchos::RCP<Thyra::LinearOpBase<Scalar> > create_DgDp_op(int j, int l) const;
142
143 Teuchos::RCP<const Thyra::LinearOpWithSolveFactoryBase<Scalar> >
144 get_W_factory() const;
145
146 Thyra::ModelEvaluatorBase::InArgs<Scalar> createInArgs() const;
147
148 Thyra::ModelEvaluatorBase::InArgs<Scalar> getNominalValues() const;
149
151
152 static Teuchos::RCP<const Teuchos::ParameterList> getValidParameters();
153
154private:
155
156 typedef Thyra::DefaultMultiVectorProductVectorSpace<Scalar> DMVPVS;
157
158 Thyra::ModelEvaluatorBase::OutArgs<Scalar> createOutArgsImpl() const;
159
160 void evalModelImpl(
161 const Thyra::ModelEvaluatorBase::InArgs<Scalar> &inArgs,
162 const Thyra::ModelEvaluatorBase::OutArgs<Scalar> &outArgs) const;
163
164
165 Thyra::ModelEvaluatorBase::InArgs<Scalar> prototypeInArgs_;
166 Thyra::ModelEvaluatorBase::OutArgs<Scalar> prototypeOutArgs_;
167
168 Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > model_;
169 Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > sens_residual_model_;
170 Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > sens_solve_model_;
171 Teuchos::RCP<MultiVector> dxdp_init_;
172 Teuchos::RCP<MultiVector> dx_dotdp_init_;
173 Teuchos::RCP<MultiVector> dx_dotdotdp_init_;
181
185 Teuchos::RCP<const DMVPVS> dxdp_space_;
186 Teuchos::RCP<const DMVPVS> dfdp_space_;
187 Teuchos::RCP<const DMVPVS> dgdp_space_;
188 Teuchos::RCP<const Tempus::SolutionHistory<Scalar> > sh_;
189
190 Teuchos::RCP<Thyra::LinearOpBase<Scalar> > lo_;
191 Teuchos::RCP<Thyra::PreconditionerBase<Scalar> > po_;
192
198 mutable Teuchos::RCP<Thyra::LinearOpBase<Scalar> > my_dfdx_;
199 mutable Teuchos::RCP<Thyra::LinearOpBase<Scalar> > my_dfdxdot_;
200 mutable Teuchos::RCP<Thyra::LinearOpBase<Scalar> > my_dfdxdotdot_;
201 mutable Teuchos::RCP<Thyra::MultiVectorBase<Scalar> > my_dfdp_;
202 mutable Teuchos::RCP<Thyra::LinearOpBase<Scalar> > my_dgdx_;
203 mutable Teuchos::RCP<Thyra::MultiVectorBase<Scalar> > my_dgdx_mv_;
204 mutable Teuchos::RCP<const Tempus::SolutionState<Scalar> > forward_state_;
205 mutable Teuchos::RCP<Tempus::SolutionState<Scalar> > nc_forward_state_;
206 mutable Scalar t_interp_;
207};
208
209} // namespace Tempus
210
211#endif
A ModelEvaluator decorator for sensitivity analysis.
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Solution state for integrators and steppers. SolutionState contains the metadata for solutions and th...
Transform a ModelEvaluator's sensitivity equations to its residual.
Teuchos::RCP< const Thyra::LinearOpWithSolveFactoryBase< Scalar > > get_W_factory() const
Teuchos::RCP< Thyra::LinearOpBase< Scalar > > create_DgDx_op(int j) const
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_x_space() const
Teuchos::RCP< Thyra::LinearOpBase< Scalar > > create_DgDx_dot_op(int j) const
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_p_space(int p) const
StaggeredForwardSensitivityModelEvaluator(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &sens_residual_model, const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &sens_solve_model, const bool is_pseudotransient, const Teuchos::RCP< const Teuchos::ParameterList > &pList=Teuchos::null, const Teuchos::RCP< MultiVector > &dxdp_init=Teuchos::null, const Teuchos::RCP< MultiVector > &dx_dotdp_init=Teuchos::null, const Teuchos::RCP< MultiVector > &dx_dotdot_dp_init=Teuchos::null)
Constructor.
Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > getForwardModel() const
Get the underlying model 'f'.
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_f_space() const
Teuchos::RCP< Thyra::LinearOpBase< Scalar > > create_DgDp_op(int j, int l) const
void setForwardSolutionHistory(const Teuchos::RCP< const Tempus::SolutionHistory< Scalar > > &sh)
Set solution history from forward state evaluation (for interpolation)
virtual void setSolver(const Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > &solver, const bool force_W_update)
Set the solver of the underlying model if you want to reuse it.
void evalModelImpl(const Thyra::ModelEvaluatorBase::InArgs< Scalar > &inArgs, const Thyra::ModelEvaluatorBase::OutArgs< Scalar > &outArgs) const
Teuchos::RCP< const Teuchos::Array< std::string > > get_p_names(int p) const
virtual void setForwardSolutionState(const Teuchos::RCP< const Tempus::SolutionState< Scalar > > &s)
Set solution state from forward state evaluation (for frozen state)
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_g_space(int j) const