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: Time Integration and Sensitivity Analysis Package
4//
5// Copyright 2017 NTESS and the Tempus contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8//@HEADER
9
10#ifndef Tempus_StepperOperatorSplit_decl_hpp
11#define Tempus_StepperOperatorSplit_decl_hpp
12
13#include "Tempus_config.hpp"
14#include "Tempus_Stepper.hpp"
16
17namespace Tempus {
18
62template <class Scalar>
63class StepperOperatorSplit : virtual public Tempus::Stepper<Scalar> {
64 public:
71
74 std::vector<Teuchos::RCP<const Thyra::ModelEvaluator<Scalar>>> appModels,
75 std::vector<Teuchos::RCP<Stepper<Scalar>>> subStepperList, bool useFSAL,
76 std::string ICConsistency, bool ICConsistencyCheck, int order,
77 int orderMin, int orderMax,
78 const Teuchos::RCP<StepperOperatorSplitAppAction<Scalar>>&
79 stepperOSAppAction);
80
82
83 virtual void setModel(
84 const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar>>& appModel);
85
86 virtual Teuchos::RCP<const Thyra::ModelEvaluator<Scalar>> getModel() const;
87
88 virtual void setSolver(
89 Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar>> solver);
90
91 virtual Teuchos::RCP<Thyra::NonlinearSolverBase<Scalar>> getSolver() const
92 {
93 return Teuchos::null;
94 }
95
96 virtual void setAppAction(
97 Teuchos::RCP<StepperOperatorSplitAppAction<Scalar>> appAction);
98
99 virtual Teuchos::RCP<StepperOperatorSplitAppAction<Scalar>> getAppAction()
100 const
101 {
102 return stepperOSAppAction_;
103 }
104
105 virtual void setTempState(Teuchos::RCP<Tempus::SolutionState<Scalar>> state)
106 {
107 tempState_ = state;
108 }
109
111 virtual void initialize();
112
114 virtual void setInitialConditions(
115 const Teuchos::RCP<SolutionHistory<Scalar>>& solutionHistory);
116
118 virtual void takeStep(
119 const Teuchos::RCP<SolutionHistory<Scalar>>& solutionHistory);
120
122 virtual void setInitialGuess(
123 Teuchos::RCP<const Thyra::VectorBase<Scalar>> /* initial_guess */)
124 {
125 }
126
128 virtual Teuchos::RCP<Tempus::StepperState<Scalar>> getDefaultStepperState();
129 virtual Scalar getOrder() const { return order_; }
130 virtual Scalar getOrderMin() const { return orderMin_; }
131 virtual Scalar getOrderMax() const { return orderMax_; }
132
133 virtual Scalar getInitTimeStep(
134 const Teuchos::RCP<SolutionHistory<Scalar>>& /* solutionHistory */) const
135 {
136 return Scalar(1.0e+99);
137 }
138 virtual void setOrder(Scalar o) { order_ = o; }
139 virtual void setOrderMin(Scalar o) { orderMin_ = o; }
140 virtual void setOrderMax(Scalar o) { orderMax_ = o; }
141
142 virtual bool isExplicit() const
143 {
144 bool isExplicit = false;
145 typename std::vector<Teuchos::RCP<Stepper<Scalar>>>::const_iterator
146 subStepperIter = subStepperList_.begin();
147 for (; subStepperIter < subStepperList_.end(); subStepperIter++) {
148 if ((*subStepperIter)->isExplicit()) isExplicit = true;
149 }
150 return isExplicit;
151 }
152 virtual bool isImplicit() const
153 {
154 bool isImplicit = false;
155 typename std::vector<Teuchos::RCP<Stepper<Scalar>>>::const_iterator
156 subStepperIter = subStepperList_.begin();
157 for (; subStepperIter < subStepperList_.end(); subStepperIter++) {
158 if ((*subStepperIter)->isImplicit()) isImplicit = true;
159 }
160 return isImplicit;
161 }
162 virtual bool isExplicitImplicit() const
163 {
164 return isExplicit() && isImplicit();
165 }
166 virtual bool isOneStepMethod() const
167 {
168 bool isOneStepMethod = true;
169 typename std::vector<Teuchos::RCP<Stepper<Scalar>>>::const_iterator
170 subStepperIter = subStepperList_.begin();
171 for (; subStepperIter < subStepperList_.end(); subStepperIter++) {
172 if (!(*subStepperIter)->isOneStepMethod()) isOneStepMethod = false;
173 }
174 return isOneStepMethod;
175 }
176 virtual bool isMultiStepMethod() const { return !isOneStepMethod(); }
177 virtual void setUseFSAL(bool a)
178 {
179 this->useFSAL_ = a;
180 this->isInitialized_ = false;
181 }
182 virtual OrderODE getOrderODE() const { return FIRST_ORDER_ODE; }
184
185 Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
186
188 std::vector<Teuchos::RCP<const Thyra::ModelEvaluator<Scalar>>> appModels,
189 Teuchos::RCP<Teuchos::ParameterList> pl);
190
192
193 virtual void describe(Teuchos::FancyOStream& out,
194 const Teuchos::EVerbosityLevel verbLevel) const;
196
197 virtual bool isValidSetup(Teuchos::FancyOStream& out) const;
198
199 virtual std::vector<Teuchos::RCP<Stepper<Scalar>>> getStepperList() const
200 {
201 return subStepperList_;
202 }
203 virtual void setStepperList(std::vector<Teuchos::RCP<Stepper<Scalar>>> sl)
204 {
205 subStepperList_ = sl;
206 }
207
213 virtual void addStepper(Teuchos::RCP<Stepper<Scalar>> stepper,
214 bool useFSAL = false);
215
216 virtual void setSubStepperList(
217 std::vector<Teuchos::RCP<Stepper<Scalar>>> subStepperList);
218
219 virtual void clearSubStepperList() { subStepperList_.clear(); }
220
221 virtual void setModels(
222 std::vector<Teuchos::RCP<const Thyra::ModelEvaluator<Scalar>>> appModels);
223
224 protected:
225 Scalar order_;
226 Scalar orderMin_;
227 Scalar orderMax_;
228
229 std::vector<Teuchos::RCP<Stepper<Scalar>>> subStepperList_;
230 Teuchos::RCP<SolutionHistory<Scalar>> OpSpSolnHistory_;
231 Teuchos::RCP<SolutionState<Scalar>> tempState_;
232 Teuchos::RCP<StepperOperatorSplitAppAction<Scalar>> stepperOSAppAction_;
233};
234
236// ------------------------------------------------------------------------
237template <class Scalar>
238Teuchos::RCP<StepperOperatorSplit<Scalar>> createStepperOperatorSplit(
239 std::vector<Teuchos::RCP<const Thyra::ModelEvaluator<Scalar>>> appModels,
240 Teuchos::RCP<Teuchos::ParameterList> pl);
241
242} // namespace Tempus
243
244#endif // Tempus_StepperOperatorSplit_decl_hpp
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Solution state for integrators and steppers.
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.