Tempus  Version of the Day
Time Integration
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_Stepper.hpp"
14 
15 namespace Tempus {
16 
17 /** \brief A stepper implementing staggered forward sensitivity analysis.
18  */
19 /**
20  * It constructs two internal steppers, one for the state equations as usual
21  * and one for the sensitivity equations using
22  * Tempus::StaggeredForwardSensitivityModelEvaluator. It's implementation
23  * of takeStep() first takes a step using the state stepper, updates the
24  * sensitivity model evaluator with the compute state solution and time
25  * derivatives, and then takes a step using the sensitivity stepper. It
26  * optionally can reuse the state solver for the sensitivity equations as well.
27  */
28 template<class Scalar>
30  virtual public Tempus::Stepper<Scalar>
31 {
32 public:
33 
34  /// Constructor
35  /*!
36  * The first parameter list argument supplies supplies regular stepper
37  * options, while the second provides sensitivity specific options:
38  * <ul>
39  * <li> "Reuse State Linear Solver" (default: false) Whether to reuse the
40  * model's W matrix, solver, and preconditioner when solving the
41  * sensitivity equations. If they can be reused, substantial savings
42  * in compute time are possible.
43  * <li> "Force W Update" (default: false) When reusing the solver as above
44  * whether to force recomputation of W. This can be necessary when
45  * the solver overwrites it during the solve-phase (e.g., by a
46  * factorization).
47  * <li> "Use DfDp as Tangent" (default: false) Reinterpret the df/dp
48  * out-arg as the tangent vector (df/dx)(x,p) * dx/dp + df/dp(x,p)
49  * as described in the Tempus::CombinedForwardSensitivityModelEvaluator
50  * documentation.
51  * <li> "Sensitivity Parameter Index" (default: 0) Model evaluator
52  * parameter index for which sensitivities will be computed.
53  * <li> "Sensitivity X Tangent Index" (default: 1) If "Use DfDp as Tangent"
54  * is true, the model evaluator parameter index for passing dx/dp
55  * as a Thyra::DefaultMultiVectorProductVector.
56  * <li> "Sensitivity X-Dot Tangent Index" (default: 2) If
57  * "Use DfDp as Tangent" is true, the model evaluator parameter index
58  * for passing dx_dot/dp as a Thyra::DefaultMultiVectorProductVector.
59  * <li> "Sensitivity X-Dot-Dot Tangent Index" (default: 3) If
60  * "Use DfDp as Tangent" is true, the model evaluator parameter index
61  * for passing dx_dot_dot/dp as a
62  * Thyra::DefaultMultiVectorProductVector (if the model supports
63  * x_dot_dot).
64  * </ul>
65  */
67  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel,
68  const Teuchos::RCP<Teuchos::ParameterList>& pList = Teuchos::null,
69  const Teuchos::RCP<Teuchos::ParameterList>& sens_pList = Teuchos::null);
70 
71  /// \name Basic stepper methods
72  //@{
73  virtual void setModel(
74  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel);
75  virtual void setNonConstModel(
76  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& appModel);
77  virtual Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > getModel();
78 
79  virtual void setSolver(std::string solverName);
80  virtual void setSolver(
81  Teuchos::RCP<Teuchos::ParameterList> solverPL=Teuchos::null);
82  virtual void setSolver(
83  Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar> > solver);
84  virtual Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar> > getSolver() const
85  { return stateStepper_->getSolver(); }
86 
87  /// Set Observer
88  virtual void setObserver(
89  Teuchos::RCP<StepperObserver<Scalar> > obs = Teuchos::null){}
90 
91  /// Initialize during construction and after changing input parameters.
92  virtual void initialize();
93 
94  /// Take the specified timestep, dt, and return true if successful.
95  virtual void takeStep(
96  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory);
97 
98  virtual std::string getStepperType() const
99  { return stepperPL_->get<std::string>("Stepper Type"); }
100 
101  /// Get a default (initial) StepperState
102  virtual Teuchos::RCP<Tempus::StepperState<Scalar> >
104  virtual Scalar getOrder() const {return stateStepper_->getOrder();}
105  virtual Scalar getOrderMin() const {return stateStepper_->getOrderMin();}
106  virtual Scalar getOrderMax() const {return stateStepper_->getOrderMax();}
107  virtual Scalar getInitTimeStep(
108  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory) const
109  {return std::numeric_limits<Scalar>::max();}
110 
111  virtual bool isExplicit() const
112  {return stateStepper_->isExplicit() or sensitivityStepper_->isExplicit();}
113  virtual bool isImplicit() const
114  {return stateStepper_->isImplicit() or sensitivityStepper_->isImplicit();}
115  virtual bool isExplicitImplicit() const
116  {return isExplicit() and isImplicit();}
117 
118  virtual bool isOneStepMethod() const
119  {return stateStepper_->isOneStepMethod() and
120  sensitivityStepper_->isOneStepMethod();}
121  virtual bool isMultiStepMethod() const {return !isOneStepMethod();}
122 
123  //@}
124 
125  /// Pass initial guess to Newton solver (only relevant for explicit schemes)
126  virtual void setInitialGuess(Teuchos::RCP<const Thyra::VectorBase<Scalar> > initial_guess)
127  {initial_guess_ = initial_guess;}
128 
129  /// \name ParameterList methods
130  //@{
131  void setParameterList(const Teuchos::RCP<Teuchos::ParameterList> & pl);
132  Teuchos::RCP<Teuchos::ParameterList> getNonconstParameterList();
133  Teuchos::RCP<Teuchos::ParameterList> unsetParameterList();
134  Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
135  Teuchos::RCP<Teuchos::ParameterList> getDefaultParameters() const;
136  //@}
137 
138  /// \name Overridden from Teuchos::Describable
139  //@{
140  virtual std::string description() const;
141  virtual void describe(Teuchos::FancyOStream & out,
142  const Teuchos::EVerbosityLevel verbLevel) const;
143  //@}
144 
145  Teuchos::RCP<const Thyra::VectorSpaceBase<Scalar> > get_x_space() const;
146 
147 private:
148 
149  /// Default Constructor -- not allowed
151 
152  void setParams(const Teuchos::RCP<Teuchos::ParameterList> & pl,
153  const Teuchos::RCP<Teuchos::ParameterList> & spl);
154 
155 private:
156 
157  Teuchos::RCP<Teuchos::ParameterList> stepperPL_;
158  Teuchos::RCP<Teuchos::ParameterList> sensPL_;
159  Teuchos::RCP<Stepper<Scalar> > stateStepper_;
160  Teuchos::RCP<Stepper<Scalar> > sensitivityStepper_;
161  Teuchos::RCP<SensitivityModelEvaluatorBase<Scalar> > combined_fsa_model_;
162  Teuchos::RCP<SensitivityModelEvaluatorBase<Scalar> > fsa_model_;
163  Teuchos::RCP<SolutionHistory<Scalar> > stateSolutionHistory_;
164  Teuchos::RCP<SolutionHistory<Scalar> > sensSolutionHistory_;
167  Teuchos::RCP<const Thyra::VectorBase<Scalar> > initial_guess_;
168 };
169 
170 } // namespace Tempus
171 
172 #endif // Tempus_StepperStaggeredForwardSensitivity_decl_hpp
Tempus::StepperStaggeredForwardSensitivity::get_x_space
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_x_space() const
Definition: Tempus_StepperStaggeredForwardSensitivity_impl.hpp:395
Tempus::StepperStaggeredForwardSensitivity::sensSolutionHistory_
Teuchos::RCP< SolutionHistory< Scalar > > sensSolutionHistory_
Definition: Tempus_StepperStaggeredForwardSensitivity_decl.hpp:164
Tempus::StepperStaggeredForwardSensitivity::setParameterList
void setParameterList(const Teuchos::RCP< Teuchos::ParameterList > &pl)
Definition: Tempus_StepperStaggeredForwardSensitivity_impl.hpp:316
Tempus::StepperStaggeredForwardSensitivity::sensPL_
Teuchos::RCP< Teuchos::ParameterList > sensPL_
Definition: Tempus_StepperStaggeredForwardSensitivity_decl.hpp:158
Tempus::StepperStaggeredForwardSensitivity
A stepper implementing staggered forward sensitivity analysis.
Definition: Tempus_StepperStaggeredForwardSensitivity_decl.hpp:29
Tempus::StepperStaggeredForwardSensitivity::initialize
virtual void initialize()
Initialize during construction and after changing input parameters.
Definition: Tempus_StepperStaggeredForwardSensitivity_impl.hpp:127
Tempus::StepperStaggeredForwardSensitivity::getOrderMin
virtual Scalar getOrderMin() const
Definition: Tempus_StepperStaggeredForwardSensitivity_decl.hpp:105
Tempus::StepperStaggeredForwardSensitivity::takeStep
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Take the specified timestep, dt, and return true if successful.
Definition: Tempus_StepperStaggeredForwardSensitivity_impl.hpp:135
Tempus::solutionHistory
Teuchos::RCP< SolutionHistory< Scalar > > solutionHistory(Teuchos::RCP< Teuchos::ParameterList > pList=Teuchos::null)
Nonmember constructor.
Definition: Tempus_SolutionHistory_impl.hpp:504
Tempus::StepperStaggeredForwardSensitivity::description
virtual std::string description() const
Definition: Tempus_StepperStaggeredForwardSensitivity_impl.hpp:294
Tempus::StepperStaggeredForwardSensitivity::setSolver
virtual void setSolver(std::string solverName)
Set solver via ParameterList solver name.
Definition: Tempus_StepperStaggeredForwardSensitivity_impl.hpp:90
Tempus_SensitivityModelEvaluatorBase.hpp
Tempus::StepperStaggeredForwardSensitivity::fsa_model_
Teuchos::RCP< SensitivityModelEvaluatorBase< Scalar > > fsa_model_
Definition: Tempus_StepperStaggeredForwardSensitivity_decl.hpp:162
Tempus::StepperStaggeredForwardSensitivity::getInitTimeStep
virtual Scalar getInitTimeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory) const
Definition: Tempus_StepperStaggeredForwardSensitivity_decl.hpp:107
Tempus::StepperStaggeredForwardSensitivity::combined_fsa_model_
Teuchos::RCP< SensitivityModelEvaluatorBase< Scalar > > combined_fsa_model_
Definition: Tempus_StepperStaggeredForwardSensitivity_decl.hpp:161
Tempus::StepperStaggeredForwardSensitivity::unsetParameterList
Teuchos::RCP< Teuchos::ParameterList > unsetParameterList()
Definition: Tempus_StepperStaggeredForwardSensitivity_impl.hpp:360
Tempus::StepperStaggeredForwardSensitivity::getNonconstParameterList
Teuchos::RCP< Teuchos::ParameterList > getNonconstParameterList()
Definition: Tempus_StepperStaggeredForwardSensitivity_impl.hpp:351
Tempus
Definition: Tempus_AdjointAuxSensitivityModelEvaluator_decl.hpp:20
Tempus::StepperStaggeredForwardSensitivity::setParams
void setParams(const Teuchos::RCP< Teuchos::ParameterList > &pl, const Teuchos::RCP< Teuchos::ParameterList > &spl)
Definition: Tempus_StepperStaggeredForwardSensitivity_impl.hpp:370
Tempus::StepperStaggeredForwardSensitivity::isExplicit
virtual bool isExplicit() const
Definition: Tempus_StepperStaggeredForwardSensitivity_decl.hpp:111
Tempus::StepperStaggeredForwardSensitivity::setObserver
virtual void setObserver(Teuchos::RCP< StepperObserver< Scalar > > obs=Teuchos::null)
Set Observer.
Definition: Tempus_StepperStaggeredForwardSensitivity_decl.hpp:88
Tempus::StepperStaggeredForwardSensitivity::force_W_update_
bool force_W_update_
Definition: Tempus_StepperStaggeredForwardSensitivity_decl.hpp:166
Tempus::StepperStaggeredForwardSensitivity::getValidParameters
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
Definition: Tempus_StepperStaggeredForwardSensitivity_impl.hpp:333
Tempus::StepperStaggeredForwardSensitivity::stateStepper_
Teuchos::RCP< Stepper< Scalar > > stateStepper_
Definition: Tempus_StepperStaggeredForwardSensitivity_decl.hpp:159
Tempus::StepperStaggeredForwardSensitivity::setNonConstModel
virtual void setNonConstModel(const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &appModel)
Definition: Tempus_StepperStaggeredForwardSensitivity_impl.hpp:81
Tempus::StepperStaggeredForwardSensitivity::getModel
virtual Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > getModel()
Definition: Tempus_StepperStaggeredForwardSensitivity_impl.hpp:99
Tempus::StepperStaggeredForwardSensitivity::isExplicitImplicit
virtual bool isExplicitImplicit() const
Definition: Tempus_StepperStaggeredForwardSensitivity_decl.hpp:115
Tempus::StepperStaggeredForwardSensitivity::sensitivityStepper_
Teuchos::RCP< Stepper< Scalar > > sensitivityStepper_
Definition: Tempus_StepperStaggeredForwardSensitivity_decl.hpp:160
Tempus::StepperStaggeredForwardSensitivity::getOrder
virtual Scalar getOrder() const
Definition: Tempus_StepperStaggeredForwardSensitivity_decl.hpp:104
Tempus::StepperObserver
StepperObserver class for Stepper class.
Definition: Tempus_StepperObserver.hpp:38
Tempus::StepperStaggeredForwardSensitivity::getStepperType
virtual std::string getStepperType() const
Definition: Tempus_StepperStaggeredForwardSensitivity_decl.hpp:98
Tempus::StepperStaggeredForwardSensitivity::StepperStaggeredForwardSensitivity
StepperStaggeredForwardSensitivity()
Default Constructor – not allowed.
Tempus::StepperStaggeredForwardSensitivity::initial_guess_
Teuchos::RCP< const Thyra::VectorBase< Scalar > > initial_guess_
Definition: Tempus_StepperStaggeredForwardSensitivity_decl.hpp:167
Tempus::StepperStaggeredForwardSensitivity::reuse_solver_
bool reuse_solver_
Definition: Tempus_StepperStaggeredForwardSensitivity_decl.hpp:165
Tempus_Stepper.hpp
Tempus::StepperStaggeredForwardSensitivity::stepperPL_
Teuchos::RCP< Teuchos::ParameterList > stepperPL_
Definition: Tempus_StepperStaggeredForwardSensitivity_decl.hpp:157
Tempus::StepperStaggeredForwardSensitivity::getDefaultStepperState
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState()
Get a default (initial) StepperState.
Definition: Tempus_StepperStaggeredForwardSensitivity_impl.hpp:282
Tempus::StepperStaggeredForwardSensitivity::isImplicit
virtual bool isImplicit() const
Definition: Tempus_StepperStaggeredForwardSensitivity_decl.hpp:113
Tempus::SolutionHistory
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Definition: Tempus_Integrator.hpp:25
Tempus::Stepper
Thyra Base interface for time steppers.
Definition: Tempus_Integrator.hpp:24
Tempus::StepperStaggeredForwardSensitivity::setModel
virtual void setModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel)
Definition: Tempus_StepperStaggeredForwardSensitivity_impl.hpp:46
Tempus::StepperStaggeredForwardSensitivity::stateSolutionHistory_
Teuchos::RCP< SolutionHistory< Scalar > > stateSolutionHistory_
Definition: Tempus_StepperStaggeredForwardSensitivity_decl.hpp:163
Tempus::StepperStaggeredForwardSensitivity::isMultiStepMethod
virtual bool isMultiStepMethod() const
Definition: Tempus_StepperStaggeredForwardSensitivity_decl.hpp:121
Tempus::StepperStaggeredForwardSensitivity::getDefaultParameters
Teuchos::RCP< Teuchos::ParameterList > getDefaultParameters() const
Definition: Tempus_StepperStaggeredForwardSensitivity_impl.hpp:342
Tempus::StepperStaggeredForwardSensitivity::getSolver
virtual Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > getSolver() const
Get solver.
Definition: Tempus_StepperStaggeredForwardSensitivity_decl.hpp:84
Tempus::StepperStaggeredForwardSensitivity::setInitialGuess
virtual void setInitialGuess(Teuchos::RCP< const Thyra::VectorBase< Scalar > > initial_guess)
Pass initial guess to Newton solver (only relevant for explicit schemes)
Definition: Tempus_StepperStaggeredForwardSensitivity_decl.hpp:126
Tempus::StepperStaggeredForwardSensitivity::isOneStepMethod
virtual bool isOneStepMethod() const
Definition: Tempus_StepperStaggeredForwardSensitivity_decl.hpp:118
Tempus::StepperStaggeredForwardSensitivity::describe
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
Definition: Tempus_StepperStaggeredForwardSensitivity_impl.hpp:303
Tempus::StepperStaggeredForwardSensitivity::getOrderMax
virtual Scalar getOrderMax() const
Definition: Tempus_StepperStaggeredForwardSensitivity_decl.hpp:106