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_config.hpp"
13 #include "Tempus_Stepper.hpp"
15 
16 
17 namespace Tempus {
18 
30 template<class Scalar>
32  virtual public Tempus::Stepper<Scalar>,
33  virtual public Teuchos::ParameterListAcceptor
34 {
35 public:
36 
43 
45 
77  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel,
78  const Teuchos::RCP<Teuchos::ParameterList>& pList = Teuchos::null,
79  const Teuchos::RCP<Teuchos::ParameterList>& sens_pList = Teuchos::null);
80 
82 
83  virtual void setModel(
84  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel);
85  virtual Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > getModel() const;
86 
87  virtual void setSolver(
88  Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar> > solver = Teuchos::null);
89  virtual Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar> > getSolver() const
90  { return stateStepper_->getSolver(); }
91 
93  virtual void setInitialConditions (
94  const Teuchos::RCP<SolutionHistory<Scalar> >& /* solutionHistory */){}
95 
97  virtual void takeStep(
98  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory);
99 
101  virtual Teuchos::RCP<Tempus::StepperState<Scalar> >
103  virtual Scalar getOrder() const {return stateStepper_->getOrder();}
104  virtual Scalar getOrderMin() const {return stateStepper_->getOrderMin();}
105  virtual Scalar getOrderMax() const {return stateStepper_->getOrderMax();}
106  virtual Scalar getInitTimeStep(
107  const Teuchos::RCP<SolutionHistory<Scalar> >& /* solutionHistory */) const
108  {return Scalar(1.0e+99);}
109 
110  virtual bool isExplicit() const
111  {return stateStepper_->isExplicit() || sensitivityStepper_->isExplicit();}
112  virtual bool isImplicit() const
113  {return stateStepper_->isImplicit() || sensitivityStepper_->isImplicit();}
114  virtual bool isExplicitImplicit() const
115  {return isExplicit() && isImplicit();}
116 
117  virtual bool isOneStepMethod() const
118  {return stateStepper_->isOneStepMethod() &&
119  sensitivityStepper_->isOneStepMethod();}
120  virtual bool isMultiStepMethod() const {return !isOneStepMethod();}
121 
122  virtual OrderODE getOrderODE() const {return FIRST_ORDER_ODE;}
123 
124  virtual void setUseFSAL(bool a) {stepperPL_->set<bool>("Use FSAL", a);}
125  virtual bool getUseFSAL() const
126  {return stepperPL_->get<bool>("Use FSAL", false);}
127 
128  virtual void setICConsistency(std::string s)
129  {stepperPL_->set<std::string>("Initial Condition Consistency", s);}
130  virtual std::string getICConsistency() const
131  {return stepperPL_->get<std::string>("Initial Condition Consistency",
132  "None");}
133 
134  virtual void setICConsistencyCheck(bool c)
135  {stepperPL_->set<bool>("Initial Condition Consistency Check", c);}
136  virtual bool getICConsistencyCheck() const
137  {return stepperPL_->get<bool>("Initial Condition Consistency Check",
138  false);}
140 
142  virtual void setInitialGuess(
143  Teuchos::RCP<const Thyra::VectorBase<Scalar> > /* initial_guess */){}
144 
146 
147  void setParameterList(const Teuchos::RCP<Teuchos::ParameterList> & pl);
148  Teuchos::RCP<Teuchos::ParameterList> getNonconstParameterList();
149  Teuchos::RCP<Teuchos::ParameterList> unsetParameterList();
150  Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
151  Teuchos::RCP<Teuchos::ParameterList> getDefaultParameters() const;
153 
155 
156  virtual std::string description() const
157  { return "StepperStaggeredForwardSensitivity"; }
158  virtual void describe(Teuchos::FancyOStream & out,
159  const Teuchos::EVerbosityLevel verbLevel) const;
161 
162  virtual bool isValidSetup(Teuchos::FancyOStream & out) const;
163 
164  Teuchos::RCP<const Thyra::VectorSpaceBase<Scalar> > get_x_space() const;
165 
166  virtual Teuchos::RCP<const Teuchos::ParameterList> getParameterList() const
167  { return stepperPL_; }
168 
169 private:
170 
171  void setParams(const Teuchos::RCP<Teuchos::ParameterList> & pl,
172  const Teuchos::RCP<Teuchos::ParameterList> & spl);
173 
174 protected:
175 
176  Teuchos::RCP<Teuchos::ParameterList> stepperPL_;
177  Teuchos::RCP<Teuchos::ParameterList> sensPL_;
178  Teuchos::RCP<Stepper<Scalar> > stateStepper_;
179  Teuchos::RCP<Stepper<Scalar> > sensitivityStepper_;
180  Teuchos::RCP<SensitivityModelEvaluatorBase<Scalar> > combined_fsa_model_;
181  Teuchos::RCP<SensitivityModelEvaluatorBase<Scalar> > fsa_model_;
182  Teuchos::RCP<SolutionHistory<Scalar> > stateSolutionHistory_;
183  Teuchos::RCP<SolutionHistory<Scalar> > sensSolutionHistory_;
186 
187 };
188 
189 } // namespace Tempus
190 
191 #endif // Tempus_StepperStaggeredForwardSensitivity_decl_hpp
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > get_x_space() const
Teuchos::RCP< Teuchos::ParameterList > getDefaultParameters() const
virtual void setInitialConditions(const Teuchos::RCP< SolutionHistory< Scalar > > &)
Set the initial conditions and make them consistent.
virtual Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > getModel() const
A stepper implementing staggered forward sensitivity analysis.
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Take the specified timestep, dt, and return true if successful.
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
Teuchos::RCP< SensitivityModelEvaluatorBase< Scalar > > combined_fsa_model_
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState()
Get a default (initial) StepperState.
Thyra Base interface for time steppers.
virtual void setModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel)
Teuchos::RCP< SensitivityModelEvaluatorBase< Scalar > > fsa_model_
virtual Teuchos::RCP< const Teuchos::ParameterList > getParameterList() const
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Stepper integrates first-order ODEs.
virtual Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > getSolver() const
Get solver.
virtual Scalar getInitTimeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &) const
void setParams(const Teuchos::RCP< Teuchos::ParameterList > &pl, const Teuchos::RCP< Teuchos::ParameterList > &spl)
virtual void setInitialGuess(Teuchos::RCP< const Thyra::VectorBase< Scalar > >)
Pass initial guess to Newton solver.
virtual void setSolver(Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > solver=Teuchos::null)
Set solver.
void setParameterList(const Teuchos::RCP< Teuchos::ParameterList > &pl)