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 
64 template<class Scalar>
65 class StepperOperatorSplit : virtual public Tempus::Stepper<Scalar>
66 {
67 public:
68 
75 
78  std::vector<Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > > appModels,
79  std::vector<Teuchos::RCP<Stepper<Scalar> > > subStepperList,
80  bool useFSAL,
81  std::string ICConsistency,
82  bool ICConsistencyCheck,
83  int order,
84  int orderMin,
85  int orderMax,
86  const Teuchos::RCP<StepperOperatorSplitAppAction<Scalar> >& stepperOSAppAction);
87 
89 
90  virtual void setModel(
91  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel);
92 
94 
95  virtual void setSolver(
97 
99  { return Teuchos::null; }
100 
102 
104  { return stepperOSAppAction_; }
105 
107  { tempState_ = state; }
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 
126  virtual Scalar getOrder() const {return order_;}
127  virtual Scalar getOrderMin() const {return orderMin_;}
128  virtual Scalar getOrderMax() const {return orderMax_;}
129 
130  virtual Scalar getInitTimeStep(
131  const Teuchos::RCP<SolutionHistory<Scalar> >& /* solutionHistory */) const
132  {return Scalar(1.0e+99);}
133  virtual void setOrder (Scalar o) { order_ = o;}
134  virtual void setOrderMin(Scalar o) { orderMin_ = o;}
135  virtual void setOrderMax(Scalar o) { orderMax_ = o;}
136 
137  virtual bool isExplicit() const
138  {
139  bool isExplicit = false;
140  typename std::vector<Teuchos::RCP<Stepper<Scalar> > >::const_iterator
141  subStepperIter = subStepperList_.begin();
142  for (; subStepperIter < subStepperList_.end(); subStepperIter++) {
143  if ( (*subStepperIter)->isExplicit() ) isExplicit = true;
144  }
145  return isExplicit;
146  }
147  virtual bool isImplicit() const
148  {
149  bool isImplicit = false;
150  typename std::vector<Teuchos::RCP<Stepper<Scalar> > >::const_iterator
151  subStepperIter = subStepperList_.begin();
152  for (; subStepperIter < subStepperList_.end(); subStepperIter++) {
153  if ( (*subStepperIter)->isImplicit() ) isImplicit = true;
154  }
155  return isImplicit;
156  }
157  virtual bool isExplicitImplicit() const
158  {return isExplicit() && isImplicit();}
159  virtual bool isOneStepMethod() const
160  {
161  bool isOneStepMethod = true;
162  typename std::vector<Teuchos::RCP<Stepper<Scalar> > >::const_iterator
163  subStepperIter = subStepperList_.begin();
164  for (; subStepperIter < subStepperList_.end(); subStepperIter++) {
165  if ( !(*subStepperIter)->isOneStepMethod() ) isOneStepMethod = false;
166  }
167  return isOneStepMethod;
168  }
169  virtual bool isMultiStepMethod() const {return !isOneStepMethod();}
170  virtual void setUseFSAL(bool a) { this->useFSAL_ = a; this->isInitialized_ = false; }
171  virtual OrderODE getOrderODE() const {return FIRST_ORDER_ODE;}
173 
175 
176  void createSubSteppers(
177  std::vector<Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > > appModels,
179 
181 
182  virtual void describe(Teuchos::FancyOStream & out,
183  const Teuchos::EVerbosityLevel verbLevel) const;
185 
186  virtual bool isValidSetup(Teuchos::FancyOStream & out) const;
187 
188  virtual std::vector<Teuchos::RCP<Stepper<Scalar> > > getStepperList() const
189  { return subStepperList_; }
190  virtual void setStepperList(std::vector<Teuchos::RCP<Stepper<Scalar> > > sl)
191  { subStepperList_ = sl; }
192 
198  virtual void addStepper(Teuchos::RCP<Stepper<Scalar> > stepper,
199  bool useFSAL = false);
200 
201  virtual void setSubStepperList(
202  std::vector<Teuchos::RCP<Stepper<Scalar> > > subStepperList);
203 
204  virtual void clearSubStepperList() { subStepperList_.clear(); }
205 
206  virtual void setModels(
207  std::vector<Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > > appModels);
208 
209 protected:
210 
211  Scalar order_;
212  Scalar orderMin_;
213  Scalar orderMax_;
214 
215  std::vector<Teuchos::RCP<Stepper<Scalar> > > subStepperList_;
219 
220 };
221 
222 
224 // ------------------------------------------------------------------------
225 template<class Scalar>
228  std::vector<Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > > appModels,
230 
231 
232 } // namespace Tempus
233 
234 #endif // Tempus_StepperOperatorSplit_decl_hpp
virtual Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > getSolver() const
Get solver.
virtual void setInitialGuess(Teuchos::RCP< const Thyra::VectorBase< Scalar > >)
Pass initial guess to Newton solver.
virtual Teuchos::RCP< StepperOperatorSplitAppAction< Scalar > > getAppAction() const
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 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 Scalar getInitTimeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &) const
std::vector< Teuchos::RCP< Stepper< Scalar > > > subStepperList_
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
virtual void setModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel)
virtual void setSolver(Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > solver)
Set solver.
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState()
Get a default (initial) StepperState.
virtual void setModels(std::vector< Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > > appModels)
bool isInitialized_
True if stepper&#39;s member data is initialized.
OperatorSplit stepper loops through the Stepper list.
Thyra Base interface for time steppers.
Teuchos::RCP< SolutionState< Scalar > > tempState_
virtual void setAppAction(Teuchos::RCP< StepperOperatorSplitAppAction< Scalar > > appAction)
virtual void setTempState(Teuchos::RCP< Tempus::SolutionState< Scalar >> state)
void createSubSteppers(std::vector< Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > > appModels, Teuchos::RCP< Teuchos::ParameterList > pl)
bool useFSAL_
Use First-Same-As-Last (FSAL) principle.
Teuchos::RCP< StepperOperatorSplitAppAction< Scalar > > stepperOSAppAction_
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
virtual Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > getModel() const
virtual void setStepperList(std::vector< Teuchos::RCP< Stepper< Scalar > > > sl)
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
virtual void setInitialConditions(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Set the initial conditions and make them consistent.
Teuchos::RCP< SolutionHistory< Scalar > > OpSpSolnHistory_
Stepper integrates first-order ODEs.
StepperOperatorSplitAppAction class for StepperOperatorSplit.
virtual bool isValidSetup(Teuchos::FancyOStream &out) const
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Take the specified timestep, dt, and return true if successful.
virtual void initialize()
Initialize during construction and after changing input parameters.
Solution state for integrators and steppers.
virtual std::vector< Teuchos::RCP< Stepper< Scalar > > > getStepperList() const
virtual void setSubStepperList(std::vector< Teuchos::RCP< Stepper< Scalar > > > subStepperList)