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 
17 namespace Tempus {
18 
19 /** \brief OperatorSplit stepper loops through the Stepper list.
20  *
21  * OperatorSplit stepper loops through the provided list of SubSteppers,
22  * and passes the SolutionHistory sequentially between them. This is
23  * simply a first-order splitting. It should be noted that specially
24  * constructed sequence of SubSteppers could obtain higher orders.
25  *
26  * The OperatorSplit Stepper does not have any model, but the SubSteppers
27  * do. The OperatorSplit Stepper does not have a solver either, but the
28  * SubSteppers may or may not have a solver depending if they are implicit
29  * or explicit.
30  *
31  * Operator Split is only defined for one-step methods, so multi-step
32  * methods (e.g., BDF) should not be used with StepperOperatorSplit.
33  */
34 template<class Scalar>
35 class StepperOperatorSplit : virtual public Tempus::Stepper<Scalar>
36 {
37 public:
38 
39  /// Constructor
41  std::vector<Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > > appModels,
42  Teuchos::RCP<Teuchos::ParameterList> pList);
43 
44  /// Constructor which is setup except for models and steppers (i.e., addStepper()), and an initialize() before being used.
46 
47  /// \name Basic stepper methods
48  //@{
49  virtual void setModel(
50  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel);
51  virtual void setNonConstModel(
52  const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> >& appModel);
53  virtual Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >
54  getModel();
55 
56  virtual void setSolver(std::string solverName);
57  virtual void setSolver(
58  Teuchos::RCP<Teuchos::ParameterList> solverPL=Teuchos::null);
59  virtual void setSolver(
60  Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar> > solver);
61  virtual Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar> > getSolver() const
62  { return Teuchos::null; }
63  virtual void setObserver(
64  Teuchos::RCP<StepperObserver<Scalar> > obs = Teuchos::null);
65  virtual void setTempState(Teuchos::RCP<Tempus::SolutionState<Scalar>> state)
66  { tempState_ = state; }
67 
68  /// Initialize during construction and after changing input parameters.
69  virtual void initialize();
70 
71  /// Take the specified timestep, dt, and return true if successful.
72  virtual void takeStep(
73  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory);
74 
75  /// Pass initial guess to Newton solver (only relevant for explicit schemes)
76  virtual void setInitialGuess(
77  Teuchos::RCP<const Thyra::VectorBase<Scalar> > initial_guess)
78  {initial_guess_ = initial_guess;}
79 
80  virtual std::string getStepperType() const
81  { return stepperPL_->get<std::string>("Stepper Type"); }
82 
83  /// Get a default (initial) StepperState
84  virtual Teuchos::RCP<Tempus::StepperState<Scalar> > getDefaultStepperState();
85  virtual Scalar getOrder() const
86  {return stepperPL_->get<int>("Order");}
87  virtual Scalar getOrderMin() const
88  {return stepperPL_->get<int>("Minimum Order");}
89  virtual Scalar getOrderMax() const
90  {return stepperPL_->get<int>("Maximum Order");}
91  virtual Scalar getInitTimeStep(
92  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory) const
93  {return std::numeric_limits<Scalar>::max();}
94  virtual void setOrder (Scalar ord)
95  {stepperPL_->set<int>("Order", ord);}
96  virtual void setOrderMin(Scalar ord)
97  {stepperPL_->set<int>("Minimum Order", ord);}
98  virtual void setOrderMax(Scalar ord)
99  {stepperPL_->set<int>("Maximum Order", ord);}
100 
101  virtual bool isExplicit() const
102  {
103  bool isExplicit = false;
104  typename std::vector<Teuchos::RCP<Stepper<Scalar> > >::const_iterator
105  subStepperIter = subStepperList_.begin();
106  for (; subStepperIter < subStepperList_.end(); subStepperIter++) {
107  if ( (*subStepperIter)->isExplicit() ) isExplicit = true;
108  }
109  return isExplicit;
110  }
111  virtual bool isImplicit() const
112  {
113  bool isImplicit = false;
114  typename std::vector<Teuchos::RCP<Stepper<Scalar> > >::const_iterator
115  subStepperIter = subStepperList_.begin();
116  for (; subStepperIter < subStepperList_.end(); subStepperIter++) {
117  if ( (*subStepperIter)->isImplicit() ) isImplicit = true;
118  }
119  return isImplicit;
120  }
121  virtual bool isExplicitImplicit() const
122  {return isExplicit() and isImplicit();}
123  virtual bool isOneStepMethod() const
124  {
125  bool isOneStepMethod = true;
126  typename std::vector<Teuchos::RCP<Stepper<Scalar> > >::const_iterator
127  subStepperIter = subStepperList_.begin();
128  for (; subStepperIter < subStepperList_.end(); subStepperIter++) {
129  if ( !(*subStepperIter)->isOneStepMethod() ) isOneStepMethod = false;
130  }
131  return isOneStepMethod;
132  }
133  virtual bool isMultiStepMethod() const {return !isOneStepMethod();}
134  //@}
135 
136  /// \name ParameterList methods
137  //@{
138  void setParameterList(const Teuchos::RCP<Teuchos::ParameterList> & pl);
139  Teuchos::RCP<Teuchos::ParameterList> getNonconstParameterList();
140  Teuchos::RCP<Teuchos::ParameterList> unsetParameterList();
141  Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
142  Teuchos::RCP<Teuchos::ParameterList> getDefaultParameters() const;
143  //@}
144 
145  /// \name Overridden from Teuchos::Describable
146  //@{
147  virtual std::string description() const;
148  virtual void describe(Teuchos::FancyOStream & out,
149  const Teuchos::EVerbosityLevel verbLevel) const;
150  //@}
151 
152  virtual std::vector<Teuchos::RCP<Stepper<Scalar> > > getStepperList() const
153  { return subStepperList_; }
154  virtual void setStepperList(std::vector<Teuchos::RCP<Stepper<Scalar> > > sl)
155  { subStepperList_ = sl; }
156  virtual void addStepper(Teuchos::RCP<Stepper<Scalar> > stepper)
157  { subStepperList_.push_back(stepper); }
158  virtual void clearStepperList() { subStepperList_.clear(); }
159  /// Take models and ParameterList and create subSteppers
160  virtual void createSubSteppers(
161  std::vector<Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > > appModels);
162 
163 protected:
164 
165  Teuchos::RCP<Teuchos::ParameterList> stepperPL_;
166  std::vector<Teuchos::RCP<Stepper<Scalar> > > subStepperList_;
167  Teuchos::RCP<SolutionHistory<Scalar> > OpSpSolnHistory_;
168  Teuchos::RCP<SolutionState<Scalar> > tempState_;
169  Teuchos::RCP<StepperOperatorSplitObserver<Scalar> > stepperOSObserver_;
170  Teuchos::RCP<const Thyra::VectorBase<Scalar> > initial_guess_;
171 
172 };
173 
174 } // namespace Tempus
175 
176 #endif // Tempus_StepperOperatorSplit_decl_hpp
Tempus::StepperOperatorSplit::getSolver
virtual Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > getSolver() const
Get solver.
Definition: Tempus_StepperOperatorSplit_decl.hpp:61
Tempus::StepperOperatorSplit::getDefaultParameters
Teuchos::RCP< Teuchos::ParameterList > getDefaultParameters() const
Definition: Tempus_StepperOperatorSplit_impl.hpp:366
Tempus::solutionHistory
Teuchos::RCP< SolutionHistory< Scalar > > solutionHistory(Teuchos::RCP< Teuchos::ParameterList > pList=Teuchos::null)
Nonmember constructor.
Definition: Tempus_SolutionHistory_impl.hpp:504
Tempus::StepperOperatorSplit::OpSpSolnHistory_
Teuchos::RCP< SolutionHistory< Scalar > > OpSpSolnHistory_
Definition: Tempus_StepperOperatorSplit_decl.hpp:167
Tempus::StepperOperatorSplit::stepperOSObserver_
Teuchos::RCP< StepperOperatorSplitObserver< Scalar > > stepperOSObserver_
Definition: Tempus_StepperOperatorSplit_decl.hpp:169
Tempus::StepperOperatorSplit::setOrder
virtual void setOrder(Scalar ord)
Definition: Tempus_StepperOperatorSplit_decl.hpp:94
Tempus::StepperOperatorSplit::getStepperType
virtual std::string getStepperType() const
Definition: Tempus_StepperOperatorSplit_decl.hpp:80
Tempus::StepperOperatorSplit::isImplicit
virtual bool isImplicit() const
Definition: Tempus_StepperOperatorSplit_decl.hpp:111
Tempus::StepperOperatorSplit::initial_guess_
Teuchos::RCP< const Thyra::VectorBase< Scalar > > initial_guess_
Definition: Tempus_StepperOperatorSplit_decl.hpp:170
Tempus::StepperOperatorSplit::getStepperList
virtual std::vector< Teuchos::RCP< Stepper< Scalar > > > getStepperList() const
Definition: Tempus_StepperOperatorSplit_decl.hpp:152
Tempus
Definition: Tempus_AdjointAuxSensitivityModelEvaluator_decl.hpp:20
Tempus::StepperOperatorSplit::tempState_
Teuchos::RCP< SolutionState< Scalar > > tempState_
Definition: Tempus_StepperOperatorSplit_decl.hpp:168
Tempus::StepperOperatorSplit::setSolver
virtual void setSolver(std::string solverName)
Set solver via ParameterList solver name.
Definition: Tempus_StepperOperatorSplit_impl.hpp:90
Tempus::StepperOperatorSplit::getModel
virtual Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > getModel()
Definition: Tempus_StepperOperatorSplit_impl.hpp:70
Tempus::StepperOperatorSplit::getOrder
virtual Scalar getOrder() const
Definition: Tempus_StepperOperatorSplit_decl.hpp:85
Tempus::StepperOperatorSplit::describe
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
Definition: Tempus_StepperOperatorSplit_impl.hpp:311
Tempus::StepperOperatorSplit::subStepperList_
std::vector< Teuchos::RCP< Stepper< Scalar > > > subStepperList_
Definition: Tempus_StepperOperatorSplit_decl.hpp:166
Tempus::StepperOperatorSplit::setModel
virtual void setModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel)
Definition: Tempus_StepperOperatorSplit_impl.hpp:43
Tempus::StepperOperatorSplit::initialize
virtual void initialize()
Initialize during construction and after changing input parameters.
Definition: Tempus_StepperOperatorSplit_impl.hpp:183
Tempus::StepperOperatorSplit::setNonConstModel
virtual void setNonConstModel(const Teuchos::RCP< Thyra::ModelEvaluator< Scalar > > &appModel)
Definition: Tempus_StepperOperatorSplit_impl.hpp:56
Tempus::StepperObserver
StepperObserver class for Stepper class.
Definition: Tempus_StepperObserver.hpp:38
Tempus::StepperOperatorSplit::createSubSteppers
virtual void createSubSteppers(std::vector< Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > > appModels)
Take models and ParameterList and create subSteppers.
Definition: Tempus_StepperOperatorSplit_impl.hpp:138
Tempus::SolutionState
Solution state for integrators and steppers. SolutionState contains the metadata for solutions and th...
Definition: Tempus_SolutionState_decl.hpp:56
Tempus::StepperOperatorSplit::getNonconstParameterList
Teuchos::RCP< Teuchos::ParameterList > getNonconstParameterList()
Definition: Tempus_StepperOperatorSplit_impl.hpp:376
Tempus::StepperOperatorSplit
OperatorSplit stepper loops through the Stepper list.
Definition: Tempus_StepperOperatorSplit_decl.hpp:35
Tempus::StepperOperatorSplit::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_StepperOperatorSplit_decl.hpp:76
Tempus::StepperOperatorSplit::stepperPL_
Teuchos::RCP< Teuchos::ParameterList > stepperPL_
Definition: Tempus_StepperOperatorSplit_decl.hpp:165
Tempus::StepperOperatorSplit::setOrderMax
virtual void setOrderMax(Scalar ord)
Definition: Tempus_StepperOperatorSplit_decl.hpp:98
Tempus_Stepper.hpp
Tempus::StepperOperatorSplit::StepperOperatorSplit
StepperOperatorSplit()
Constructor which is setup except for models and steppers (i.e., addStepper()), and an initialize() b...
Definition: Tempus_StepperOperatorSplit_impl.hpp:32
Tempus::StepperOperatorSplit::setObserver
virtual void setObserver(Teuchos::RCP< StepperObserver< Scalar > > obs=Teuchos::null)
Set Observer.
Definition: Tempus_StepperOperatorSplit_impl.hpp:122
Tempus::StepperOperatorSplit::isExplicit
virtual bool isExplicit() const
Definition: Tempus_StepperOperatorSplit_decl.hpp:101
Tempus::StepperOperatorSplit::getValidParameters
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
Definition: Tempus_StepperOperatorSplit_impl.hpp:344
Tempus::StepperOperatorSplit::unsetParameterList
Teuchos::RCP< Teuchos::ParameterList > unsetParameterList()
Definition: Tempus_StepperOperatorSplit_impl.hpp:384
Tempus::StepperOperatorSplit::addStepper
virtual void addStepper(Teuchos::RCP< Stepper< Scalar > > stepper)
Definition: Tempus_StepperOperatorSplit_decl.hpp:156
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::StepperOperatorSplit::getDefaultStepperState
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState()
Get a default (initial) StepperState.
Definition: Tempus_StepperOperatorSplit_impl.hpp:294
Tempus::StepperOperatorSplit::isOneStepMethod
virtual bool isOneStepMethod() const
Definition: Tempus_StepperOperatorSplit_decl.hpp:123
Tempus::StepperOperatorSplit::takeStep
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Take the specified timestep, dt, and return true if successful.
Definition: Tempus_StepperOperatorSplit_impl.hpp:220
Tempus::StepperOperatorSplit::setStepperList
virtual void setStepperList(std::vector< Teuchos::RCP< Stepper< Scalar > > > sl)
Definition: Tempus_StepperOperatorSplit_decl.hpp:154
Tempus::StepperOperatorSplit::getInitTimeStep
virtual Scalar getInitTimeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory) const
Definition: Tempus_StepperOperatorSplit_decl.hpp:91
Tempus::StepperOperatorSplit::clearStepperList
virtual void clearStepperList()
Definition: Tempus_StepperOperatorSplit_decl.hpp:158
Tempus::StepperOperatorSplit::setParameterList
void setParameterList(const Teuchos::RCP< Teuchos::ParameterList > &pl)
Definition: Tempus_StepperOperatorSplit_impl.hpp:320
Tempus::StepperOperatorSplit::getOrderMax
virtual Scalar getOrderMax() const
Definition: Tempus_StepperOperatorSplit_decl.hpp:89
Tempus_StepperOperatorSplitObserver.hpp
Tempus::StepperOperatorSplit::isMultiStepMethod
virtual bool isMultiStepMethod() const
Definition: Tempus_StepperOperatorSplit_decl.hpp:133
Tempus::StepperOperatorSplit::setTempState
virtual void setTempState(Teuchos::RCP< Tempus::SolutionState< Scalar >> state)
Definition: Tempus_StepperOperatorSplit_decl.hpp:65
Tempus::StepperOperatorSplit::setOrderMin
virtual void setOrderMin(Scalar ord)
Definition: Tempus_StepperOperatorSplit_decl.hpp:96
Tempus::StepperOperatorSplit::description
virtual std::string description() const
Definition: Tempus_StepperOperatorSplit_impl.hpp:303
Tempus::StepperOperatorSplit::getOrderMin
virtual Scalar getOrderMin() const
Definition: Tempus_StepperOperatorSplit_decl.hpp:87
Tempus::StepperOperatorSplit::isExplicitImplicit
virtual bool isExplicitImplicit() const
Definition: Tempus_StepperOperatorSplit_decl.hpp:121