Tempus  Version of the Day
Time Integration
Tempus_StepperIMEX_RK_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_StepperIMEX_RK_decl_hpp
10 #define Tempus_StepperIMEX_RK_decl_hpp
11 
12 #include "Tempus_config.hpp"
14 #include "Tempus_StepperImplicit.hpp"
15 #include "Tempus_WrapperModelEvaluatorPairIMEX_Basic.hpp"
17 
18 
19 namespace Tempus {
20 
21 /** \brief Implicit-Explicit Runge-Kutta (IMEX-RK) time stepper.
22  *
23  * For the implicit ODE system, \f$ \mathcal{F}(\dot{x},x,t) = 0 \f$,
24  * we need to specialize this in order to separate the explicit, implicit,
25  * and temporal terms for the IMEX-RK time stepper,
26  * \f{eqnarray*}{
27  * M(x,t)\, \dot{x}(x,t) + G(x,t) + F(x,t) & = & 0, \\
28  * \mathcal{G}(\dot{x},x,t) + F(x,t) & = & 0,
29  * \f}
30  * where \f$\mathcal{G}(\dot{x},x,t) = M(x,t)\, \dot{x} + G(x,t)\f$,
31  * \f$M(x,t)\f$ is the mass matrix, \f$F(x,t)\f$ is the operator
32  * representing the "slow" physics (and is evolved explicitly), and
33  * \f$G(x,t)\f$ is the operator representing the "fast" physics (and is
34  * evolved implicitly). Additionally, we assume that the mass matrix is
35  * invertible, so that
36  * \f[
37  * \dot{x}(x,t) + g(x,t) + f(x,t) = 0
38  * \f]
39  * where \f$f(x,t) = M(x,t)^{-1}\, F(x,t)\f$, and
40  * \f$g(x,t) = M(x,t)^{-1}\, G(x,t)\f$. Using Butcher tableaus for the
41  * explicit terms
42  * \f[ \begin{array}{c|c}
43  * \hat{c} & \hat{A} \\ \hline
44  * & \hat{b}^T
45  * \end{array}
46  * \;\;\;\; \mbox{ and for implicit terms } \;\;\;\;
47  * \begin{array}{c|c}
48  * c & A \\ \hline
49  * & b^T
50  * \end{array}, \f]
51  * the basic IMEX-RK method for \f$s\f$-stages can be written as
52  * \f[ \begin{array}{rcll}
53  * X_i & = & x_{n-1}
54  * - \Delta t \sum_{j=1}^{i-1} \hat{a}_{ij}\, f(X_j,\hat{t}_j)
55  * - \Delta t \sum_{j=1}^i a_{ij}\, g(X_j,t_j)
56  * & \mbox{for } i=1\ldots s, \\
57  * x_n & = & x_{n-1}
58  * - \Delta t \sum_{i=1}^s \hat{b}_{i}\, f(X_i,\hat{t}_i)
59  * - \Delta t \sum_{i=1}^s b_{i}\, g(X_i,t_i) &
60  * \end{array} \f]
61  * where \f$\hat{t}_i = t_{n-1}+\hat{c}_i\Delta t\f$ and
62  * \f$t_i = t_{n-1}+c_i\Delta t\f$. For iterative solvers, it is useful to
63  * write the stage solutions as
64  * \f[
65  * X_i = \tilde{X} - a_{ii} \Delta t\, g(X_i,t_i)
66  * \f]
67  * where
68  * \f[
69  * \tilde{X} = x_{n-1} - \Delta t \sum_{j=1}^{i-1}
70  * \left(\hat{a}_{ij}\, f(X_j,\hat{t}_j) + a_{ij}\, g(X_j,t_j)\right)
71  * \f]
72  * Rearranging to solve for the implicit term
73  * \f[
74  * g(X_i,t_i) = - \frac{X_i - \tilde{X}}{a_{ii} \Delta t}
75  * \f]
76  * We can use this to determine the time derivative at each stage for the
77  * implicit solve.
78  * \f[
79  * \dot{X}_i(X_i,t_i) + g(X_i,t_i) + f(X_i,t_i) = 0
80  * \f]
81  * Note that the explicit term, \f$f(X_i,t_i)\f$, is evaluated at the implicit
82  * stage time, \f$t_i\f$.
83  * We can form the time derivative
84  * \f{eqnarray*}{
85  * \dot{X}(X_i,t_i) & = & - g(X_i,t_i) - f(X_i,t_i) \\
86  * \dot{X}(X_i,t_i) & = &
87  * \frac{X_i - \tilde{X}}{a_{ii} \Delta t} - f(X_i,t_i) \\
88  * \dot{X}(X_i,t_i) & = &
89  * \frac{X_i - \tilde{X}}{a_{ii} \Delta t} -M(X_i, t_i)^{-1}\, F(X_i,t_i)\\
90  * \f}
91  * Returning to the governing equation
92  * \f{eqnarray*}{
93  * M(X_i,t_i)\, \dot{X}(X_i,t_i) + G(X_i,t_i) + F(X_i,t_i) & = & 0 \\
94  * M(X_i,t_i)\, \left[
95  * \frac{X_i - \tilde{X}}{a_{ii} \Delta t} - M(X_i, t_i)^{-1}\, F(X_i,t_i)
96  * \right] + G(X_i,t_i) + F(X_i,t_i) & = & 0 \\
97  * M(X_i,t_i)\, \left[ \frac{X_i - \tilde{X}}{a_{ii} \Delta t} \right]
98  * + G(X_i,t_i) & = & 0 \\
99  * \f}
100  * Recall \f$\mathcal{G}(\dot{x},x,t) = M(x,t)\, \dot{x} + G(x,t)\f$ and if we
101  * define a pseudo time derivative,
102  * \f[
103  * \tilde{\dot{X}} = \frac{X_i - \tilde{X}}{a_{ii} \Delta t} = - g(X_i,t_i),
104  * \f]
105  * we can write
106  * \f[
107  * \mathcal{G}(\tilde{\dot{X}},X_i,t_i) =
108  * M(X_i,t_i)\, \tilde{\dot{X}} + G(X_i,t_i) = 0
109  * \f]
110  *
111  * For the case when \f$a_{ii}=0\f$, we need the time derivative for the
112  * plain explicit case. Thus the stage solution is
113  * \f[
114  * X_i = x_{n-1} - \Delta t\,\sum_{j=1}^{i-1} \left(
115  * \hat{a}_{ij}\, f_j + a_{ij}\, g_j \right) = \tilde{X}
116  * \f]
117  * and we can simply evaluate
118  * \f{eqnarray*}{
119  * f_i & = & M(X_i,\hat{t}_i)^{-1}\, F(X_i,\hat{t}_i) \\
120  * g_i & = & M(X_i, t_i)^{-1}\, G(X_i, t_i)
121  * \f}
122  * We can then form the time derivative as
123  * \f[
124  * \dot{X}_i(X_i,t_i) = - g(X_i,t_i) - f(X_i,t_i)
125  * \f]
126  * but again note that the explicit term, \f$f(X_i,t_i)\f$, is evaluated
127  * at the implicit stage time, \f$t_i\f$.
128  *
129  * <b> IMEX-RK Algorithm </b>
130  *
131  * The single-timestep algorithm for IMEX-RK using the real time derivative,
132  * \f$\dot{X}(X_i,t_i)\f$, is
133  * - \f$X_1 \leftarrow x_{n-1}\f$
134  * - for \f$i = 1 \ldots s\f$ do
135  * - \f$\tilde{X} \leftarrow x_{n-1} - \Delta t\,\sum_{j=1}^{i-1} \left(
136  * \hat{a}_{ij}\, f_j + a_{ij}\, g_j \right) \f$
137  * - if \f$a_{ii} = 0\f$
138  * - \f$X_i \leftarrow \tilde{X}\f$
139  * - \f$g_i \leftarrow M(X_i, t_i)^{-1}\, G(X_i, t_i)\f$
140  * - else
141  * - Define \f$\dot{X}(X_i,t_i)
142  * = \frac{X_i-\tilde{X}}{a_{ii} \Delta t}
143  * - M(X_i,t_i)^{-1}\, F(X_i,t_i) \f$
144  * - Solve \f$\mathcal{G}\left(\dot{X}(X_i,t_i),X_i,t_i\right)
145  * + F(X_i,t_i) = 0\f$ for \f$X_i\f$
146  * - \f$g_i \leftarrow - \frac{X_i-\tilde{X}}{a_{ii} \Delta t}\f$
147  * - \f$f_i \leftarrow M(X_i,\hat{t}_i)^{-1}\, F(X_i,\hat{t}_i)\f$
148  * - \f$\dot{X}_i = - g_i - M(X_i,t_i)^{-1}\,F(X_i,t_i)\f$ [Optional]
149  * - end for
150  * - \f$x_n \leftarrow x_{n-1} - \Delta t\,\sum_{i=1}^{s}\hat{b}_i\,f_i
151  * - \Delta t\,\sum_{i=1}^{s} b_i\,g_i\f$
152  * - Solve \f$M(x_n)\, \dot{x}_n + F(x_n,t_n) + G(x_n,t_n) = 0\f$
153  * for \f$\dot{x}_n\f$ [Optional]
154  *
155  * The single-timestep algorithm for IMEX-RK using the pseudo time derivative,
156  * \f$\tilde{\dot{X}}\f$, is (which is currently implemented)
157  * - \f$X_1 \leftarrow x_{n-1}\f$
158  * - for \f$i = 1 \ldots s\f$ do
159  * - \f$\tilde{X} \leftarrow x_{n-1} - \Delta t\,\sum_{j=1}^{i-1} \left(
160  * \hat{a}_{ij}\, f_j + a_{ij}\, g_j \right) \f$
161  * - if \f$a_{ii} = 0\f$
162  * - \f$X_i \leftarrow \tilde{X}\f$
163  * - \f$g_i \leftarrow M(X_i, t_i)^{-1}\, G(X_i, t_i)\f$
164  * - else
165  * - Define \f$\tilde{\dot{X}}
166  * = \frac{X_i-\tilde{X}}{a_{ii} \Delta t} \f$
167  * - Solve \f$\mathcal{G}\left(\tilde{\dot{X}},X_i,t_i\right) = 0\f$
168  * for \f$X_i\f$
169  * - \f$g_i \leftarrow - \tilde{\dot{X}}\f$
170  * - \f$f_i \leftarrow M(X_i,\hat{t}_i)^{-1}\, F(X_i,\hat{t}_i)\f$
171  * - \f$\dot{X}_i = - g_i - M(X_i,t_i)^{-1}\,F(X_i,t_i)\f$ [Optional]
172  * - end for
173  * - \f$x_n \leftarrow x_{n-1} - \Delta t\,\sum_{i=1}^{s}\hat{b}_i\,f_i
174  * - \Delta t\,\sum_{i=1}^{s} b_i\,g_i\f$
175  * - Solve \f$M(x_n)\, \dot{x}_n + F(x_n,t_n) + G(x_n,t_n) = 0\f$
176  * for \f$\dot{x}_n\f$ [Optional]
177  *
178  * The following table contains the pre-coded IMEX-RK tableaus.
179  * <table>
180  * <caption id="multi_row">IMEX-RK Tableaus</caption>
181  * <tr><th> Name <th> Order <th> Implicit Tableau <th> Explicit Tableau
182  * <tr><td> IMEX RK 1st order <td> 1st
183  * <td> \f[ \begin{array}{c|cc}
184  * 0 & 0 & 0 \\
185  * 1 & 0 & 1 \\ \hline
186  * & 0 & 1
187  * \end{array} \f]
188  * <td> \f[ \begin{array}{c|cc}
189  * 0 & 0 & 0 \\
190  * 1 & 1 & 0 \\ \hline
191  * & 1 & 0
192  * \end{array} \f]
193  * <tr><td> IMEX RK SSP2\n \f$\gamma = 1-1/\sqrt{2}\f$ <td> 2nd
194  * <td> \f[ \begin{array}{c|cc}
195  * \gamma & \gamma & 0 \\
196  * 1-\gamma & 1-2\gamma & \gamma \\ \hline
197  * & 1/2 & 1/2
198  * \end{array} \f]
199  * <td> \f[ \begin{array}{c|cc}
200  * 0 & 0 & 0 \\
201  * 1 & 1 & 0 \\ \hline
202  * & 1/2 & 1/2
203  * \end{array} \f]
204  * <tr><td> IMEX RK ARS 233\n \f$\gamma = (3+\sqrt{3})/6\f$ <td> 3rd
205  * <td> \f[ \begin{array}{c|ccc}
206  * 0 & 0 & 0 & 0 \\
207  * \gamma & 0 & \gamma & 0 \\
208  * 1-\gamma & 0 & 1-2\gamma & \gamma \\ \hline
209  * & 0 & 1/2 & 1/2
210  * \end{array} \f]
211  * <td> \f[ \begin{array}{c|ccc}
212  * 0 & 0 & 0 & 0 \\
213  * \gamma & \gamma & 0 & 0 \\
214  * 1-\gamma & \gamma-1 & 2-2\gamma & 0 \\ \hline
215  * & 0 & 1/2 & 1/2
216  * \end{array} \f]
217  * </table>
218  *
219  * #### References
220  * -# Ascher, Ruuth, Spiteri, "Implicit-explicit Runge-Kutta methods for
221  * time-dependent partial differential equations", Applied Numerical
222  * Mathematics 25 (1997) 151-167.
223  * -# Cyr, "IMEX Lagrangian Methods", SAND2015-3745C.
224  * -# Shadid, Cyr, Pawlowski, Widley, Scovazzi, Zeng, Phillips, Conde,
225  * Chuadhry, Hensinger, Fischer, Robinson, Rider, Niederhaus, Sanchez,
226  * "Towards an IMEX Monolithic ALE Method with Integrated UQ for
227  * Multiphysics Shock-hydro", SAND2016-11353, 2016, pp. 21-28.
228  */
229 template<class Scalar>
230 class StepperIMEX_RK : virtual public Tempus::StepperImplicit<Scalar>
231 {
232 public:
233 
234  /// Constructor to use default Stepper parameters.
236  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel,
237  std::string stepperType = "IMEX RK SSP2");
238 
239  /// Constructor to specialize Stepper parameters.
241  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel,
242  Teuchos::RCP<Teuchos::ParameterList> pList);
243 
244  /// Constructor for StepperFactory.
246  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& models,
247  std::string stepperType, Teuchos::RCP<Teuchos::ParameterList> pList);
248 
249  /// \name Basic stepper methods
250  //@{
251  /// Set both the explicit and implicit tableau from ParameterList
252  virtual void setTableaus(Teuchos::RCP<Teuchos::ParameterList> pList,
253  std::string stepperType = "");
254 
255  /// Set the explicit tableau from ParameterList
256  virtual void setExplicitTableau(std::string stepperType,
257  Teuchos::RCP<Teuchos::ParameterList> pList);
258 
259  /// Set the explicit tableau from tableau
260  virtual void setExplicitTableau(
261  Teuchos::RCP<const RKButcherTableau<Scalar> > explicitTableau);
262 
263  /// Set the implicit tableau from ParameterList
264  virtual void setImplicitTableau(std::string stepperType,
265  Teuchos::RCP<Teuchos::ParameterList> pList);
266 
267  /// Set the implicit tableau from tableau
268  virtual void setImplicitTableau(
269  Teuchos::RCP<const RKButcherTableau<Scalar> > implicitTableau);
270 
271  virtual void setModel(
272  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel);
273 
274  virtual Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > getModel()
275  { return this->wrapperModel_; }
276 
277  virtual void setModelPair(
278  const Teuchos::RCP<WrapperModelEvaluatorPairIMEX_Basic<Scalar> >& mePair);
279 
280  virtual void setModelPair(
281  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& explicitModel,
282  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& implicitModel);
283 
284  virtual void setObserver(
285  Teuchos::RCP<StepperObserver<Scalar> > obs = Teuchos::null);
286 
287  /// Initialize during construction and after changing input parameters.
288  virtual void initialize();
289 
290  /// Pass initial guess to Newton solver (only relevant for implicit solvers)
291  virtual void setInitialGuess(Teuchos::RCP<const Thyra::VectorBase<Scalar> > initial_guess)
292  {initial_guess_ = initial_guess;}
293 
294  /// Take the specified timestep, dt, and return true if successful.
295  virtual void takeStep(
296  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory);
297 
298  virtual Teuchos::RCP<Tempus::StepperState<Scalar> >getDefaultStepperState();
299  virtual Scalar getOrder()const { return order_; }
300  virtual Scalar getOrderMin()const { return order_; }
301  virtual Scalar getOrderMax()const { return order_; }
302 
303  virtual bool isExplicit() const {return true;}
304  virtual bool isImplicit() const {return true;}
305  virtual bool isExplicitImplicit() const
306  {return isExplicit() and isImplicit();}
307  virtual bool isOneStepMethod() const {return true;}
308  virtual bool isMultiStepMethod() const {return !isOneStepMethod();}
309  //@}
310 
311  /// \name ParameterList methods
312  //@{
313  void setParameterList(const Teuchos::RCP<Teuchos::ParameterList> & pl);
314  Teuchos::RCP<Teuchos::ParameterList> getNonconstParameterList();
315  Teuchos::RCP<Teuchos::ParameterList> unsetParameterList();
316  Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
317  Teuchos::RCP<Teuchos::ParameterList> getDefaultParameters() const;
318  //@}
319 
320  /// \name Overridden from Teuchos::Describable
321  //@{
322  virtual std::string description() const;
323  virtual void describe(Teuchos::FancyOStream & out,
324  const Teuchos::EVerbosityLevel verbLevel) const;
325  //@}
326 
328  const Teuchos::RCP<const Thyra::VectorBase<Scalar> > & X,
329  Scalar time, Scalar stepSize, Scalar stageNumber,
330  const Teuchos::RCP<Thyra::VectorBase<Scalar> > & G) const;
331 
332  void evalExplicitModel(
333  const Teuchos::RCP<const Thyra::VectorBase<Scalar> > & X,
334  Scalar time, Scalar stepSize, Scalar stageNumber,
335  const Teuchos::RCP<Thyra::VectorBase<Scalar> > & F) const;
336 
337 private:
338 
339  /// Default Constructor -- not allowed
340  StepperIMEX_RK();
341 
342 protected:
343 
344  std::string description_;
345 
346  Teuchos::RCP<const RKButcherTableau<Scalar> > explicitTableau_;
347  Teuchos::RCP<const RKButcherTableau<Scalar> > implicitTableau_;
348 
349  Scalar order_;
350 
351  Teuchos::RCP<Thyra::VectorBase<Scalar> > stageX_;
352  std::vector<Teuchos::RCP<Thyra::VectorBase<Scalar> > > stageF_;
353  std::vector<Teuchos::RCP<Thyra::VectorBase<Scalar> > > stageG_;
354 
355  Teuchos::RCP<Thyra::VectorBase<Scalar> > xTilde_;
356 
357  Teuchos::RCP<StepperObserver<Scalar> > stepperObserver_;
358  Teuchos::RCP<StepperIMEX_RKObserver<Scalar> > stepperIMEX_RKObserver_;
359  Teuchos::RCP<const Thyra::VectorBase<Scalar> > initial_guess_;
360 
361 };
362 
363 
364 /** \brief Time-derivative interface for IMEX RK.
365  *
366  * Given the stage state \f$X_i\f$ and
367  * \f[
368  * \tilde{X} = x_{n-1} +\Delta t \sum_{j=1}^{i-1} a_{ij}\,\dot{X}_{j},
369  * \f]
370  * compute the IMEX RK stage time-derivative,
371  * \f[
372  * \dot{X}_i = \frac{X_{i} - \tilde{X}}{a_{ii} \Delta t}
373  * \f]
374  * \f$\ddot{x}\f$ is not used and set to null.
375  */
376 template <typename Scalar>
378  : virtual public Tempus::TimeDerivative<Scalar>
379 {
380 public:
381 
382  /// Constructor
384  Scalar s, Teuchos::RCP<const Thyra::VectorBase<Scalar> > xTilde)
385  { initialize(s, xTilde); }
386 
387  /// Destructor
389 
390  /// Compute the time derivative.
391  virtual void compute(
392  Teuchos::RCP<const Thyra::VectorBase<Scalar> > x,
393  Teuchos::RCP< Thyra::VectorBase<Scalar> > xDot,
394  Teuchos::RCP< Thyra::VectorBase<Scalar> > xDotDot = Teuchos::null)
395  {
396  xDotDot = Teuchos::null;
397 
398  // ith stage
399  // s = 1/(dt*a_ii)
400  // xOld = solution at beginning of time step
401  // xTilde = xOld + dt*(Sum_{j=1}^{i-1} a_ij x_dot_j)
402  // xDotTilde = - (s*x_i - s*xTilde)
403  Thyra::V_StVpStV(xDot.ptr(),s_,*x,-s_,*xTilde_);
404  }
405 
406  virtual void initialize(Scalar s,
407  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xTilde)
408  { s_ = s; xTilde_ = xTilde; }
409 
410 private:
411 
412  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xTilde_;
413  Scalar s_; // = 1/(dt*a_ii)
414 };
415 
416 
417 } // namespace Tempus
418 #endif // Tempus_StepperIMEX_RK_decl_hpp
Tempus::RKButcherTableau
Runge-Kutta methods.
Definition: Tempus_RKButcherTableau.hpp:53
Tempus::StepperIMEX_RK::setModel
virtual void setModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel)
Definition: Tempus_StepperIMEX_RK_impl.hpp:269
Tempus::WrapperModelEvaluatorPairIMEX_Basic
ModelEvaluator pair for implicit and explicit (IMEX) evaulations.
Definition: Tempus_WrapperModelEvaluatorPairIMEX_Basic_decl.hpp:38
Tempus::StepperIMEX_RK::setObserver
virtual void setObserver(Teuchos::RCP< StepperObserver< Scalar > > obs=Teuchos::null)
Set Observer.
Definition: Tempus_StepperIMEX_RK_impl.hpp:337
Tempus::solutionHistory
Teuchos::RCP< SolutionHistory< Scalar > > solutionHistory(Teuchos::RCP< Teuchos::ParameterList > pList=Teuchos::null)
Nonmember constructor.
Definition: Tempus_SolutionHistory_impl.hpp:504
Tempus::StepperIMEX_RKTimeDerivative::s_
Scalar s_
Definition: Tempus_StepperIMEX_RK_decl.hpp:413
Tempus::StepperIMEX_RK::setParameterList
void setParameterList(const Teuchos::RCP< Teuchos::ParameterList > &pl)
Definition: Tempus_StepperIMEX_RK_impl.hpp:627
Tempus::StepperIMEX_RKTimeDerivative::initialize
virtual void initialize(Scalar s, Teuchos::RCP< const Thyra::VectorBase< Scalar > > xTilde)
Definition: Tempus_StepperIMEX_RK_decl.hpp:406
Tempus::StepperIMEX_RK::getOrderMax
virtual Scalar getOrderMax() const
Definition: Tempus_StepperIMEX_RK_decl.hpp:301
Tempus::StepperIMEX_RK::getDefaultParameters
Teuchos::RCP< Teuchos::ParameterList > getDefaultParameters() const
Definition: Tempus_StepperIMEX_RK_impl.hpp:657
Tempus::StepperIMEX_RKTimeDerivative::compute
virtual void compute(Teuchos::RCP< const Thyra::VectorBase< Scalar > > x, Teuchos::RCP< Thyra::VectorBase< Scalar > > xDot, Teuchos::RCP< Thyra::VectorBase< Scalar > > xDotDot=Teuchos::null)
Compute the time derivative.
Definition: Tempus_StepperIMEX_RK_decl.hpp:391
Tempus::StepperIMEX_RK::isImplicit
virtual bool isImplicit() const
Definition: Tempus_StepperIMEX_RK_decl.hpp:304
Tempus::StepperIMEX_RKTimeDerivative::~StepperIMEX_RKTimeDerivative
virtual ~StepperIMEX_RKTimeDerivative()
Destructor.
Definition: Tempus_StepperIMEX_RK_decl.hpp:388
Tempus::StepperIMEX_RK::isMultiStepMethod
virtual bool isMultiStepMethod() const
Definition: Tempus_StepperIMEX_RK_decl.hpp:308
Tempus::StepperIMEX_RK::setExplicitTableau
virtual void setExplicitTableau(std::string stepperType, Teuchos::RCP< Teuchos::ParameterList > pList)
Set the explicit tableau from ParameterList.
Definition: Tempus_StepperIMEX_RK_impl.hpp:217
Tempus
Definition: Tempus_AdjointAuxSensitivityModelEvaluator_decl.hpp:20
Tempus::StepperIMEX_RK::takeStep
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Take the specified timestep, dt, and return true if successful.
Definition: Tempus_StepperIMEX_RK_impl.hpp:461
Tempus::StepperIMEX_RK::initialize
virtual void initialize()
Initialize during construction and after changing input parameters.
Definition: Tempus_StepperIMEX_RK_impl.hpp:359
Tempus::StepperIMEX_RK::stepperObserver_
Teuchos::RCP< StepperObserver< Scalar > > stepperObserver_
Definition: Tempus_StepperIMEX_RK_decl.hpp:357
Tempus::StepperIMEX_RK::getOrderMin
virtual Scalar getOrderMin() const
Definition: Tempus_StepperIMEX_RK_decl.hpp:300
Tempus::StepperIMEX_RK::isExplicit
virtual bool isExplicit() const
Definition: Tempus_StepperIMEX_RK_decl.hpp:303
Tempus::StepperIMEX_RK::stageF_
std::vector< Teuchos::RCP< Thyra::VectorBase< Scalar > > > stageF_
Definition: Tempus_StepperIMEX_RK_decl.hpp:352
Tempus_RKButcherTableau.hpp
Tempus::StepperIMEX_RK::stepperIMEX_RKObserver_
Teuchos::RCP< StepperIMEX_RKObserver< Scalar > > stepperIMEX_RKObserver_
Definition: Tempus_StepperIMEX_RK_decl.hpp:358
Tempus::StepperIMEX_RK::setInitialGuess
virtual void setInitialGuess(Teuchos::RCP< const Thyra::VectorBase< Scalar > > initial_guess)
Pass initial guess to Newton solver (only relevant for implicit solvers)
Definition: Tempus_StepperIMEX_RK_decl.hpp:291
Tempus::StepperIMEX_RK::getValidParameters
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
Definition: Tempus_StepperIMEX_RK_impl.hpp:643
Tempus::StepperIMEX_RK::setImplicitTableau
virtual void setImplicitTableau(std::string stepperType, Teuchos::RCP< Teuchos::ParameterList > pList)
Set the implicit tableau from ParameterList.
Definition: Tempus_StepperIMEX_RK_impl.hpp:242
Tempus::StepperIMEX_RK::getNonconstParameterList
Teuchos::RCP< Teuchos::ParameterList > getNonconstParameterList()
Definition: Tempus_StepperIMEX_RK_impl.hpp:672
Tempus::StepperObserver
StepperObserver class for Stepper class.
Definition: Tempus_StepperObserver.hpp:38
Tempus::StepperIMEX_RK::getDefaultStepperState
virtual Teuchos::RCP< Tempus::StepperState< Scalar > > getDefaultStepperState()
Provide a StepperState to the SolutionState. This Stepper does not have any special state data,...
Definition: Tempus_StepperIMEX_RK_impl.hpp:597
Tempus::StepperIMEX_RK::setModelPair
virtual void setModelPair(const Teuchos::RCP< WrapperModelEvaluatorPairIMEX_Basic< Scalar > > &mePair)
Create WrapperModelPairIMEX from user-supplied ModelEvaluator pair.
Definition: Tempus_StepperIMEX_RK_impl.hpp:296
Tempus::StepperImplicit
Thyra Base interface for implicit time steppers.
Definition: Tempus_StepperImplicit_decl.hpp:24
Tempus::SolutionHistory
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Definition: Tempus_Integrator.hpp:25
Tempus::StepperIMEX_RKTimeDerivative
Time-derivative interface for IMEX RK.
Definition: Tempus_StepperIMEX_RK_decl.hpp:377
Tempus::StepperIMEX_RK
Implicit-Explicit Runge-Kutta (IMEX-RK) time stepper.
Definition: Tempus_StepperIMEX_RK_decl.hpp:230
Tempus::StepperIMEX_RK::isOneStepMethod
virtual bool isOneStepMethod() const
Definition: Tempus_StepperIMEX_RK_decl.hpp:307
Tempus::StepperIMEX_RK::stageG_
std::vector< Teuchos::RCP< Thyra::VectorBase< Scalar > > > stageG_
Definition: Tempus_StepperIMEX_RK_decl.hpp:353
Tempus::StepperIMEX_RK::setTableaus
virtual void setTableaus(Teuchos::RCP< Teuchos::ParameterList > pList, std::string stepperType="")
Set both the explicit and implicit tableau from ParameterList.
Definition: Tempus_StepperIMEX_RK_impl.hpp:65
Tempus::TimeDerivative
This interface defines the time derivative connection between an implicit Stepper and WrapperModelEva...
Definition: Tempus_TimeDerivative.hpp:32
Tempus::StepperIMEX_RK::evalImplicitModelExplicitly
void evalImplicitModelExplicitly(const Teuchos::RCP< const Thyra::VectorBase< Scalar > > &X, Scalar time, Scalar stepSize, Scalar stageNumber, const Teuchos::RCP< Thyra::VectorBase< Scalar > > &G) const
Definition: Tempus_StepperIMEX_RK_impl.hpp:394
Tempus::StepperIMEX_RK::isExplicitImplicit
virtual bool isExplicitImplicit() const
Definition: Tempus_StepperIMEX_RK_decl.hpp:305
Tempus::StepperIMEX_RK::order_
Scalar order_
Definition: Tempus_StepperIMEX_RK_decl.hpp:349
Tempus::StepperIMEX_RKTimeDerivative::xTilde_
Teuchos::RCP< const Thyra::VectorBase< Scalar > > xTilde_
Definition: Tempus_StepperIMEX_RK_decl.hpp:412
Tempus::StepperIMEX_RK::initial_guess_
Teuchos::RCP< const Thyra::VectorBase< Scalar > > initial_guess_
Definition: Tempus_StepperIMEX_RK_decl.hpp:359
Tempus::StepperIMEX_RK::explicitTableau_
Teuchos::RCP< const RKButcherTableau< Scalar > > explicitTableau_
Definition: Tempus_StepperIMEX_RK_decl.hpp:346
Tempus::StepperIMEX_RK::unsetParameterList
Teuchos::RCP< Teuchos::ParameterList > unsetParameterList()
Definition: Tempus_StepperIMEX_RK_impl.hpp:680
Tempus::StepperIMEX_RK::description
virtual std::string description() const
Definition: Tempus_StepperIMEX_RK_impl.hpp:606
Tempus::StepperIMEX_RK::StepperIMEX_RK
StepperIMEX_RK()
Default Constructor – not allowed.
Tempus::StepperIMEX_RK::stageX_
Teuchos::RCP< Thyra::VectorBase< Scalar > > stageX_
Definition: Tempus_StepperIMEX_RK_decl.hpp:351
Tempus::StepperIMEX_RK::getOrder
virtual Scalar getOrder() const
Definition: Tempus_StepperIMEX_RK_decl.hpp:299
Tempus::StepperIMEX_RK::xTilde_
Teuchos::RCP< Thyra::VectorBase< Scalar > > xTilde_
Definition: Tempus_StepperIMEX_RK_decl.hpp:355
Tempus::StepperIMEX_RK::evalExplicitModel
void evalExplicitModel(const Teuchos::RCP< const Thyra::VectorBase< Scalar > > &X, Scalar time, Scalar stepSize, Scalar stageNumber, const Teuchos::RCP< Thyra::VectorBase< Scalar > > &F) const
Definition: Tempus_StepperIMEX_RK_impl.hpp:426
Tempus::StepperIMEX_RK::implicitTableau_
Teuchos::RCP< const RKButcherTableau< Scalar > > implicitTableau_
Definition: Tempus_StepperIMEX_RK_decl.hpp:347
Tempus::StepperIMEX_RK::description_
std::string description_
Definition: Tempus_StepperIMEX_RK_decl.hpp:344
Tempus::StepperIMEX_RK::getModel
virtual Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > getModel()
Definition: Tempus_StepperIMEX_RK_decl.hpp:274
Tempus::StepperIMEX_RKTimeDerivative::StepperIMEX_RKTimeDerivative
StepperIMEX_RKTimeDerivative(Scalar s, Teuchos::RCP< const Thyra::VectorBase< Scalar > > xTilde)
Constructor.
Definition: Tempus_StepperIMEX_RK_decl.hpp:383
Tempus::StepperImplicit::wrapperModel_
Teuchos::RCP< WrapperModelEvaluator< Scalar > > wrapperModel_
Definition: Tempus_StepperImplicit_decl.hpp:74
Tempus_StepperIMEX_RKObserver.hpp
Tempus::StepperIMEX_RK::describe
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
Definition: Tempus_StepperIMEX_RK_impl.hpp:613