Tempus Version of the Day
Time Integration
Loading...
Searching...
No Matches
Tempus_StepperStaggeredForwardSensitivity_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_StepperStaggeredForwardSensitivity_decl_hpp
10#define Tempus_StepperStaggeredForwardSensitivity_decl_hpp
11
12#include "Tempus_config.hpp"
13#include "Tempus_Stepper.hpp"
15
16
17namespace Tempus {
18
20 Forward,
24};
25
37template<class Scalar>
39 virtual public Tempus::Stepper<Scalar>,
40 virtual public Teuchos::ParameterListAcceptor
41{
42public:
43
50
52
84 const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel,
85 const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& sens_residual_model,
86 const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& sens_solve_model,
87 const Teuchos::RCP<Teuchos::ParameterList>& pList = Teuchos::null,
88 const Teuchos::RCP<Teuchos::ParameterList>& sens_pList = Teuchos::null);
89
91
92 virtual void setModel(
93 const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel)
94 { setModel(appModel, appModel, appModel); }
95 virtual void setModel(
96 const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel,
97 const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& sens_residual_model,
98 const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& sens_solve_model);
99 virtual Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > getModel() const;
100
101 virtual void setSolver(
102 Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar> > solver = Teuchos::null);
103 virtual Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar> > getSolver() const
104 { return stateStepper_->getSolver(); }
105
107 virtual void setInitialConditions (
108 const Teuchos::RCP<SolutionHistory<Scalar> >& /* solutionHistory */){}
109
111 virtual void takeStep(
112 const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory);
113
115 virtual Teuchos::RCP<Tempus::StepperState<Scalar> >
117 virtual Scalar getOrder() const {return stateStepper_->getOrder();}
118 virtual Scalar getOrderMin() const {return stateStepper_->getOrderMin();}
119 virtual Scalar getOrderMax() const {return stateStepper_->getOrderMax();}
120 virtual Scalar getInitTimeStep(
121 const Teuchos::RCP<SolutionHistory<Scalar> >& /* solutionHistory */) const
122 {return Scalar(1.0e+99);}
123
124 virtual bool isExplicit() const
125 {return stateStepper_->isExplicit() || sensitivityStepper_->isExplicit();}
126 virtual bool isImplicit() const
127 {return stateStepper_->isImplicit() || sensitivityStepper_->isImplicit();}
128 virtual bool isExplicitImplicit() const
129 {return isExplicit() && isImplicit();}
130
131 virtual bool isOneStepMethod() const
132 {return stateStepper_->isOneStepMethod() &&
133 sensitivityStepper_->isOneStepMethod();}
134 virtual bool isMultiStepMethod() const {return !isOneStepMethod();}
135
136 virtual OrderODE getOrderODE() const {return FIRST_ORDER_ODE;}
137
138 virtual void setUseFSAL(bool a) {stepperPL_->set<bool>("Use FSAL", a);}
139 virtual bool getUseFSAL() const
140 {return stepperPL_->get<bool>("Use FSAL", false);}
141
142 virtual void setICConsistency(std::string s)
143 {stepperPL_->set<std::string>("Initial Condition Consistency", s);}
144 virtual std::string getICConsistency() const
145 {return stepperPL_->get<std::string>("Initial Condition Consistency",
146 "None");}
147
148 virtual void setICConsistencyCheck(bool c)
149 {stepperPL_->set<bool>("Initial Condition Consistency Check", c);}
150 virtual bool getICConsistencyCheck() const
151 {return stepperPL_->get<bool>("Initial Condition Consistency Check",
152 false);}
154
156 virtual void setInitialGuess(
157 Teuchos::RCP<const Thyra::VectorBase<Scalar> > /* initial_guess */){}
158
160
161 void setParameterList(const Teuchos::RCP<Teuchos::ParameterList> & pl);
162 Teuchos::RCP<Teuchos::ParameterList> getNonconstParameterList();
163 Teuchos::RCP<Teuchos::ParameterList> unsetParameterList();
164 Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
165 Teuchos::RCP<Teuchos::ParameterList> getDefaultParameters() const;
167
169
170 virtual std::string description() const
171 { return "StepperStaggeredForwardSensitivity"; }
172 virtual void describe(Teuchos::FancyOStream & out,
173 const Teuchos::EVerbosityLevel verbLevel) const;
175
176 virtual bool isValidSetup(Teuchos::FancyOStream & out) const;
177
178 Teuchos::RCP<const Thyra::VectorSpaceBase<Scalar> > get_x_space() const;
179
180 virtual Teuchos::RCP<const Teuchos::ParameterList> getParameterList() const
181 { return stepperPL_; }
182
185
186private:
187
188 void setParams(const Teuchos::RCP<Teuchos::ParameterList> & pl,
189 const Teuchos::RCP<Teuchos::ParameterList> & spl);
190
191protected:
192
193 Teuchos::RCP<Teuchos::ParameterList> stepperPL_;
194 Teuchos::RCP<Teuchos::ParameterList> sensPL_;
195 Teuchos::RCP<Stepper<Scalar> > stateStepper_;
196 Teuchos::RCP<Stepper<Scalar> > sensitivityStepper_;
197 Teuchos::RCP<SensitivityModelEvaluatorBase<Scalar> > combined_fsa_model_;
198 Teuchos::RCP<SensitivityModelEvaluatorBase<Scalar> > fsa_model_;
199 Teuchos::RCP<SolutionHistory<Scalar> > stateSolutionHistory_;
200 Teuchos::RCP<SolutionHistory<Scalar> > sensSolutionHistory_;
204
205};
206
207} // namespace Tempus
208
209#endif // Tempus_StepperStaggeredForwardSensitivity_decl_hpp
A stepper implementing staggered forward sensitivity analysis.
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
virtual Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > getModel() const
virtual void setInitialConditions(const Teuchos::RCP< SolutionHistory< Scalar > > &)
Set the initial conditions and make them consistent.
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState()
Get a default (initial) StepperState.
SensitivityStepMode getStepMode() const
What mode the current time integration step is in.
virtual Teuchos::RCP< const Teuchos::ParameterList > getParameterList() const
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
void setParams(const Teuchos::RCP< Teuchos::ParameterList > &pl, const Teuchos::RCP< Teuchos::ParameterList > &spl)
void setParameterList(const Teuchos::RCP< Teuchos::ParameterList > &pl)
virtual void setInitialGuess(Teuchos::RCP< const Thyra::VectorBase< Scalar > >)
Pass initial guess to Newton solver.
Teuchos::RCP< Teuchos::ParameterList > getDefaultParameters() const
virtual Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > getSolver() const
Get solver.
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Take the specified timestep, dt, and return true if successful.
virtual Scalar getInitTimeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &) const
Teuchos::RCP< SensitivityModelEvaluatorBase< Scalar > > fsa_model_
virtual void setModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel)
Teuchos::RCP< SensitivityModelEvaluatorBase< Scalar > > combined_fsa_model_
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_x_space() const
virtual void setSolver(Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > solver=Teuchos::null)
Set solver.
Thyra Base interface for time steppers.
@ FIRST_ORDER_ODE
Stepper integrates first-order ODEs.