Tempus  Version of the Day
Time Integration
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 
93  virtual Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > getModel() const;
94 
95  virtual void setSolver(
96  Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar> > solver);
97 
98  virtual Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar> > getSolver() const
99  { return Teuchos::null; }
100 
101  virtual void setAppAction(Teuchos::RCP<StepperOperatorSplitAppAction<Scalar> > appAction);
102 
103  virtual Teuchos::RCP<StepperOperatorSplitAppAction<Scalar> > getAppAction() const
104  { return stepperOSAppAction_; }
105 
106  virtual void setTempState(Teuchos::RCP<Tempus::SolutionState<Scalar>> state)
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 
125  virtual Teuchos::RCP<Tempus::StepperState<Scalar> > getDefaultStepperState();
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 
174  Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
175 
176  void createSubSteppers(
177  std::vector<Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > > appModels,
178  Teuchos::RCP<Teuchos::ParameterList> pl);
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_;
216  Teuchos::RCP<SolutionHistory<Scalar> > OpSpSolnHistory_;
217  Teuchos::RCP<SolutionState<Scalar> > tempState_;
218  Teuchos::RCP<StepperOperatorSplitAppAction<Scalar> > stepperOSAppAction_;
219 
220 };
221 
222 
224 // ------------------------------------------------------------------------
225 template<class Scalar>
226 Teuchos::RCP<StepperOperatorSplit<Scalar> >
228  std::vector<Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > > appModels,
229  Teuchos::RCP<Teuchos::ParameterList> pl);
230 
231 
232 } // namespace Tempus
233 
234 #endif // Tempus_StepperOperatorSplit_decl_hpp
virtual void setInitialGuess(Teuchos::RCP< const Thyra::VectorBase< Scalar > >)
Pass initial guess to Newton solver.
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 void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
virtual Teuchos::RCP< StepperOperatorSplitAppAction< Scalar > > getAppAction() const
virtual Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > getModel() const
std::vector< Teuchos::RCP< Stepper< Scalar > > > subStepperList_
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 Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > getSolver() const
Get solver.
virtual void setAppAction(Teuchos::RCP< StepperOperatorSplitAppAction< Scalar > > appAction)
virtual void setTempState(Teuchos::RCP< Tempus::SolutionState< Scalar >> state)
virtual Scalar getInitTimeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &) const
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_
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.
virtual std::vector< Teuchos::RCP< Stepper< Scalar > > > getStepperList() const
StepperOperatorSplitAppAction class for StepperOperatorSplit.
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() 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. SolutionState contains the metadata for solutions and th...
virtual bool isValidSetup(Teuchos::FancyOStream &out) const
virtual void setSubStepperList(std::vector< Teuchos::RCP< Stepper< Scalar > > > subStepperList)