Tempus Version of the Day
Time Integration
Loading...
Searching...
No Matches
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
16namespace Tempus {
17
64template<class Scalar>
65class StepperOperatorSplit : virtual public Tempus::Stepper<Scalar>
66{
67public:
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
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
209protected:
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// ------------------------------------------------------------------------
225template<class Scalar>
226Teuchos::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
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Solution state for integrators and steppers. SolutionState contains the metadata for solutions and th...
StepperOperatorSplitAppAction class for StepperOperatorSplit.
OperatorSplit stepper loops through the Stepper list.
std::vector< Teuchos::RCP< Stepper< Scalar > > > subStepperList_
virtual void setModels(std::vector< Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > > appModels)
virtual bool isValidSetup(Teuchos::FancyOStream &out) const
virtual void setAppAction(Teuchos::RCP< StepperOperatorSplitAppAction< Scalar > > appAction)
virtual void initialize()
Initialize during construction and after changing input parameters.
virtual void setSolver(Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > solver)
Set solver.
virtual void setStepperList(std::vector< Teuchos::RCP< Stepper< Scalar > > > sl)
virtual Teuchos::RCP< StepperOperatorSplitAppAction< Scalar > > getAppAction() const
virtual std::vector< Teuchos::RCP< Stepper< Scalar > > > getStepperList() const
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Take the specified timestep, dt, and return true if successful.
virtual void setSubStepperList(std::vector< Teuchos::RCP< Stepper< Scalar > > > subStepperList)
Teuchos::RCP< StepperOperatorSplitAppAction< Scalar > > stepperOSAppAction_
void createSubSteppers(std::vector< Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > > appModels, Teuchos::RCP< Teuchos::ParameterList > pl)
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
virtual Scalar getInitTimeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &) const
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
virtual void setInitialConditions(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Set the initial conditions and make them consistent.
Teuchos::RCP< SolutionState< Scalar > > tempState_
Teuchos::RCP< SolutionHistory< Scalar > > OpSpSolnHistory_
virtual void setInitialGuess(Teuchos::RCP< const Thyra::VectorBase< Scalar > >)
Pass initial guess to Newton solver.
virtual Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > getModel() const
virtual void setModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel)
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState()
Get a default (initial) StepperState.
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 Teuchos::RCP< Thyra::NonlinearSolverBase< Scalar > > getSolver() const
Get solver.
virtual void setTempState(Teuchos::RCP< Tempus::SolutionState< Scalar > > state)
Thyra Base interface for time steppers.
bool isInitialized_
True if stepper's member data is initialized.
bool useFSAL_
Use First-Same-As-Last (FSAL) principle.
Teuchos::RCP< StepperOperatorSplit< Scalar > > createStepperOperatorSplit(std::vector< Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > > appModels, Teuchos::RCP< Teuchos::ParameterList > pl)
Nonmember constructor - ModelEvaluator and ParameterList.
@ FIRST_ORDER_ODE
Stepper integrates first-order ODEs.