Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Tempus_StepperOperatorSplit_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_StepperOperatorSplit_decl_hpp
10 #define Tempus_StepperOperatorSplit_decl_hpp
11 
12 #include "Tempus_config.hpp"
13 #include "Tempus_Stepper.hpp"
15 
16 namespace Tempus {
17 
61 template <class Scalar>
62 class StepperOperatorSplit : virtual public Tempus::Stepper<Scalar> {
63  public:
70 
73  std::vector<Teuchos::RCP<const Thyra::ModelEvaluator<Scalar>>> appModels,
74  std::vector<Teuchos::RCP<Stepper<Scalar>>> subStepperList, bool useFSAL,
75  std::string ICConsistency, bool ICConsistencyCheck, int order,
76  int orderMin, int orderMax,
78  stepperOSAppAction);
79 
81 
82  virtual void setModel(
83  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar>>& appModel);
84 
86 
87  virtual void setSolver(
89 
91  {
92  return Teuchos::null;
93  }
94 
95  virtual void setAppAction(
97 
99  const
100  {
101  return stepperOSAppAction_;
102  }
103 
105  {
106  tempState_ = state;
107  }
108 
110  virtual void initialize();
111 
113  virtual void setInitialConditions(
114  const Teuchos::RCP<SolutionHistory<Scalar>>& solutionHistory);
115 
117  virtual void takeStep(
118  const Teuchos::RCP<SolutionHistory<Scalar>>& solutionHistory);
119 
121  virtual void setInitialGuess(
122  Teuchos::RCP<const Thyra::VectorBase<Scalar>> /* initial_guess */)
123  {
124  }
125 
128  virtual Scalar getOrder() const { return order_; }
129  virtual Scalar getOrderMin() const { return orderMin_; }
130  virtual Scalar getOrderMax() const { return orderMax_; }
131 
132  virtual Scalar getInitTimeStep(
133  const Teuchos::RCP<SolutionHistory<Scalar>>& /* solutionHistory */) const
134  {
135  return Scalar(1.0e+99);
136  }
137  virtual void setOrder(Scalar o) { order_ = o; }
138  virtual void setOrderMin(Scalar o) { orderMin_ = o; }
139  virtual void setOrderMax(Scalar o) { orderMax_ = o; }
140 
141  virtual bool isExplicit() const
142  {
143  bool isExplicit = false;
144  typename std::vector<Teuchos::RCP<Stepper<Scalar>>>::const_iterator
145  subStepperIter = subStepperList_.begin();
146  for (; subStepperIter < subStepperList_.end(); subStepperIter++) {
147  if ((*subStepperIter)->isExplicit()) isExplicit = true;
148  }
149  return isExplicit;
150  }
151  virtual bool isImplicit() const
152  {
153  bool isImplicit = false;
154  typename std::vector<Teuchos::RCP<Stepper<Scalar>>>::const_iterator
155  subStepperIter = subStepperList_.begin();
156  for (; subStepperIter < subStepperList_.end(); subStepperIter++) {
157  if ((*subStepperIter)->isImplicit()) isImplicit = true;
158  }
159  return isImplicit;
160  }
161  virtual bool isExplicitImplicit() const
162  {
163  return isExplicit() && isImplicit();
164  }
165  virtual bool isOneStepMethod() const
166  {
167  bool isOneStepMethod = true;
168  typename std::vector<Teuchos::RCP<Stepper<Scalar>>>::const_iterator
169  subStepperIter = subStepperList_.begin();
170  for (; subStepperIter < subStepperList_.end(); subStepperIter++) {
171  if (!(*subStepperIter)->isOneStepMethod()) isOneStepMethod = false;
172  }
173  return isOneStepMethod;
174  }
175  virtual bool isMultiStepMethod() const { return !isOneStepMethod(); }
176  virtual void setUseFSAL(bool a)
177  {
178  this->useFSAL_ = a;
179  this->isInitialized_ = false;
180  }
181  virtual OrderODE getOrderODE() const { return FIRST_ORDER_ODE; }
183 
185 
186  void createSubSteppers(
187  std::vector<Teuchos::RCP<const Thyra::ModelEvaluator<Scalar>>> appModels,
189 
191 
192  virtual void describe(Teuchos::FancyOStream& out,
193  const Teuchos::EVerbosityLevel verbLevel) const;
195 
196  virtual bool isValidSetup(Teuchos::FancyOStream& out) const;
197 
198  virtual std::vector<Teuchos::RCP<Stepper<Scalar>>> getStepperList() const
199  {
200  return subStepperList_;
201  }
202  virtual void setStepperList(std::vector<Teuchos::RCP<Stepper<Scalar>>> sl)
203  {
204  subStepperList_ = sl;
205  }
206 
212  virtual void addStepper(Teuchos::RCP<Stepper<Scalar>> stepper,
213  bool useFSAL = false);
214 
215  virtual void setSubStepperList(
216  std::vector<Teuchos::RCP<Stepper<Scalar>>> subStepperList);
217 
218  virtual void clearSubStepperList() { subStepperList_.clear(); }
219 
220  virtual void setModels(
221  std::vector<Teuchos::RCP<const Thyra::ModelEvaluator<Scalar>>> appModels);
222 
223  protected:
224  Scalar order_;
225  Scalar orderMin_;
226  Scalar orderMax_;
227 
228  std::vector<Teuchos::RCP<Stepper<Scalar>>> subStepperList_;
232 };
233 
235 // ------------------------------------------------------------------------
236 template <class Scalar>
238  std::vector<Teuchos::RCP<const Thyra::ModelEvaluator<Scalar>>> appModels,
240 
241 } // namespace Tempus
242 
243 #endif // Tempus_StepperOperatorSplit_decl_hpp
virtual void setAppAction(Teuchos::RCP< StepperOperatorSplitAppAction< Scalar >> appAction)
virtual Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > getSolver() const
Get solver.
virtual Teuchos::RCP< StepperOperatorSplitAppAction< Scalar > > getAppAction() const
virtual void setInitialGuess(Teuchos::RCP< const Thyra::VectorBase< Scalar >>)
Pass initial guess to Newton solver.
std::vector< Teuchos::RCP< Stepper< Scalar > > > subStepperList_
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
virtual void setSubStepperList(std::vector< Teuchos::RCP< Stepper< Scalar >>> subStepperList)
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState()
Get a default (initial) StepperState.
bool isInitialized_
True if stepper&#39;s member data is initialized.
virtual void setStepperList(std::vector< Teuchos::RCP< Stepper< Scalar >>> sl)
OperatorSplit stepper loops through the Stepper list.
Thyra Base interface for time steppers.
virtual void setModels(std::vector< Teuchos::RCP< const Thyra::ModelEvaluator< Scalar >>> appModels)
Teuchos::RCP< SolutionState< Scalar > > tempState_
virtual void setTempState(Teuchos::RCP< Tempus::SolutionState< Scalar >> state)
bool useFSAL_
Use First-Same-As-Last (FSAL) principle.
virtual void setInitialConditions(const Teuchos::RCP< SolutionHistory< Scalar >> &solutionHistory)
Set the initial conditions and make them consistent.
virtual Scalar getInitTimeStep(const Teuchos::RCP< SolutionHistory< Scalar >> &) const
Teuchos::RCP< StepperOperatorSplitAppAction< Scalar > > stepperOSAppAction_
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
void createSubSteppers(std::vector< Teuchos::RCP< const Thyra::ModelEvaluator< Scalar >>> appModels, Teuchos::RCP< Teuchos::ParameterList > pl)
virtual Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > getModel() const
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Teuchos::RCP< SolutionHistory< Scalar > > OpSpSolnHistory_
Stepper integrates first-order ODEs.
Teuchos::RCP< StepperOperatorSplit< Scalar > > createStepperOperatorSplit(std::vector< Teuchos::RCP< const Thyra::ModelEvaluator< Scalar >>> appModels, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar >> &solutionHistory)
Take the specified timestep, dt, and return true if successful.
StepperOperatorSplitAppAction class for StepperOperatorSplit.
virtual bool isValidSetup(Teuchos::FancyOStream &out) const
virtual void setSolver(Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar >> solver)
virtual void initialize()
Initialize during construction and after changing input parameters.
Solution state for integrators and steppers.
virtual void addStepper(Teuchos::RCP< Stepper< Scalar >> stepper, bool useFSAL=false)
Add Stepper to subStepper list. In most cases, subSteppers cannot use xDotOld (thus the default)...
virtual std::vector< Teuchos::RCP< Stepper< Scalar > > > getStepperList() const
virtual void setModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar >> &appModel)