Tempus  Version of the Day
Time Integration
Tempus_StepperIMEX_RK_Partition_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_Partition_decl_hpp
10 #define Tempus_StepperIMEX_RK_Partition_decl_hpp
11 
12 #include "Tempus_config.hpp"
14 #include "Tempus_StepperImplicit.hpp"
15 #include "Tempus_WrapperModelEvaluatorPairPartIMEX_Basic.hpp"
17 
18 
19 namespace Tempus {
20 
21 /** \brief Partitioned Implicit-Explicit Runge-Kutta (IMEX-RK) time stepper.
22  *
23  * Partitioned IMEX-RK is similar to the IMEX-RK (StepperIMEX_RK),
24  * except a portion of the solution only requires explicit integration,
25  * and should not be part of the implicit solution to reduce computational
26  * costs. Again our ODE can be written as
27  * \f{eqnarray*}{
28  * M(z,t)\, \dot{z} + G(z,t) + F(z,t) & = & 0, \\
29  * \mathcal{G}(\dot{z},z,t) + F(z,t) & = & 0,
30  * \f}
31  * but now
32  * \f[
33  * z =\left\{\begin{array}{c} y\\ x \end{array}\right\},\;
34  * F(z,t)=\left\{\begin{array}{c} F^y(x,y,t)\\ F^x(x,y,t)\end{array}\right\},
35  * \mbox{ and }
36  * G(z,t)=\left\{\begin{array}{c} 0\\ G^x(x,y,t) \end{array}\right\}
37  * \f]
38  * where \f$z\f$ is the product vector of \f$y\f$ and \f$x\f$,
39  * \f$F(z,t)\f$ is still the "slow" physics (and evolved explicitly),
40  * and \f$G(z,t)\f$ is still the "fast" physics (and evolved implicitly),
41  * but a portion of the solution vector, \f$y\f$, is "explicit-only"
42  * and is only evolved by \f$F^y(x,y,t)\f$, while \f$x\f$ is the
43  * Implicit/Explicit (IMEX) solution vector, and is evolved explicitly by
44  * \f$F^x(x,y,t)\f$ evolved implicitly by \f$G^x(x,y,t)\f$.
45  * Note we can expand this to explicitly show all the terms as
46  * \f{eqnarray*}{
47  * & & M^y(x,y,t)\: \dot{y} + F^y(x,y,t) = 0, \\
48  * & & M^x(x,y,t)\: \dot{x} + F^x(x,y,t) + G^x(x,y,t) = 0, \\
49  * \f}
50  * or
51  * \f[
52  * \left\{ \begin{array}{c} \dot{y} \\ \dot{x} \end{array}\right\}
53  * + \left\{ \begin{array}{c} f^y \\ f^x \end{array}\right\}
54  * + \left\{ \begin{array}{c} 0 \\ g^x \end{array}\right\} = 0
55  * \f]
56  * where \f$f^y(x,y,t) = M^y(x,y,t)^{-1}\, F^y(x,y,t)\f$,
57  * \f$f^x(x,y,t) = M^x(x,y,t)^{-1}\, F^x(x,y,t)\f$, and
58  * \f$g^x(x,y,t) = M^x(x,y,t)^{-1}\, G^x(x,y,t)\f$,
59  * or
60  * \f[
61  * \dot{z} + f(x,y,t) + g(x,y,t) = 0,
62  * \f]
63  * where \f$f(x,y,t) = M(x,y,t)^{-1}\, F(x,y,t)\f$, and
64  * \f$g(x,y,t) = M(x,y,t)^{-1}\, G(x,y,t)\f$.
65  * Using Butcher tableaus for the
66  * explicit terms
67  * \f[ \begin{array}{c|c}
68  * \hat{c} & \hat{A} \\ \hline
69  * & \hat{b}^T
70  * \end{array}
71  * \;\;\;\; \mbox{ and for implicit terms } \;\;\;\;
72  * \begin{array}{c|c}
73  * c & A \\ \hline
74  * & b^T
75  * \end{array}, \f]
76  * the basic scheme for this partitioned, \f$s\f$-stage, IMEX-RK is
77  * \f[ \begin{array}{rcll}
78  * Z_i & = & Z_{n-1}
79  * - \Delta t \sum_{j=1}^{i-1} \hat{a}_{ij}\; f(Z_j,\hat{t}_j)
80  * - \Delta t \sum_{j=1}^i a_{ij}\; g(Z_j, t_j)
81  * & \mbox{for } i=1\ldots s, \\
82  * z_n & = & z_{n-1}
83  * - \Delta t \sum_{i=1}^s \left[ \hat{b}_i\; f(Z_i,\hat{t}_i)
84  * + b_i\; g(Z_i, t_i) \right] &
85  * \end{array} \f]
86  * or expanded
87  * \f[ \begin{array}{rcll}
88  * Y_i & = & y_{n-1}
89  * - \Delta t \sum_{j=1}^{i-1} \hat{a}_{ij}\; f^y(Z_j,\hat{t}_j)
90  * & \mbox{for } i=1\ldots s,\\
91  * X_i & = & x_{n-1}
92  * - \Delta t \sum_{j=1}^{i-1} \hat{a}_{ij}\; f^x(Z_j,\hat{t}_j)
93  * - \Delta t \sum_{j=1}^i a_{ij}\; g^x(Z_j, t_j)
94  * & \mbox{for } i=1\ldots s, \\
95  * y_n & = & y_{n-1}
96  * - \Delta t \sum_{i=1}^s \hat{b}_{i}\; f^y(X_i,Y_i,\hat{t}_i) & \\
97  * x_n & = & x_{n-1}
98  * - \Delta t \sum_{i=1}^s \left[ \hat{b}_i\; f^x(Z_i,\hat{t}_i)
99  * + b_i\; g^x(Z_i, t_i) \right] &
100  * \end{array} \f]
101  * where \f$\hat{t}_i = t_{n-1}+\hat{c}_i\Delta t\f$ and
102  * \f$t_i = t_{n-1}+c_i\Delta t\f$.
103  *
104  * For iterative solvers, it is useful to write the stage solutions as
105  * \f[
106  * Z_i = \tilde{Z} - a_{ii} \Delta t\, g(Z_i,t_i)
107  * \f]
108  * or expanded as
109  * \f[
110  * \left\{ \begin{array}{c} Y_i \\ X_i \end{array}\right\} =
111  * \left\{ \begin{array}{c} \tilde{Y} \\ \tilde{X}_i \end{array}\right\}
112  * - a_{ii} \Delta t
113  * \left\{ \begin{array}{c} 0 \\ g^x(Z_i,t_i) \end{array}\right\}
114  * \f]
115  * where
116  * \f{eqnarray*}{
117  * \tilde{Z} & = & z_{n-1} - \Delta t \sum_{j=1}^{i-1}
118  * \left[\hat{a}_{ij}\, f(Z_j,\hat{t}_j) + a_{ij}\, g(Z_j, t_j)\right] \\
119  * \tilde{Y} & = & y_{n-1} - \Delta t \sum_{j=1}^{i-1}
120  * \left[\hat{a}_{ij}\, f^y(Z_j,\hat{t}_j)\right] \\
121  * \tilde{X} & = & x_{n-1} - \Delta t \sum_{j=1}^{i-1}
122  * \left[\hat{a}_{ij}\, f^x(Z_j,\hat{t}_j) +a_{ij}\, g^x(Z_j,t_j)\right] \\
123  * \f}
124  * and note that \f$Y_i = \tilde{Y}\f$. Rearranging to solve for the
125  * implicit term
126  * \f{eqnarray*}{
127  * g (Z_i,t_i) & = & - \frac{Z_i - \tilde{Z}}{a_{ii} \Delta t} \\
128  * g^x(Z_i,t_i) & = & - \frac{X_i - \tilde{X}}{a_{ii} \Delta t}
129  * \f}
130  * We additionally need the time derivative at each stage for the implicit
131  * solve. Let us define the following time derivative for \f$x\f$ portion
132  * of the solution
133  * \f[
134  * \dot{X}_i(X_i,Y_i,t_i) + f^x(X_i,Y_i,t_i) + g^x(X_i,Y_i,t_i) = 0
135  * \f]
136  * where we split \f$Z_i\f$ arguments into \f$X_i\f$ and \f$Y_i\f$ to
137  * emphasize that \f$X_i\f$ is the solution for the implicit solve and
138  * \f$Y_i\f$ are parameters in this set of equations. The above time
139  * derivative, \f$\dot{X}_i\f$, is NOT likely the same as the real time
140  * derivative, \f$\dot{x}(x(t_i), y(t_i), t_i)\f$, unless
141  * \f$\hat{c}_i = c_i \rightarrow \hat{t}_i = t_i\f$
142  * (Reasoning: \f$x(t_i) \neq X_i\f$ and \f$y(t_i) \neq Y_i\f$ unless
143  * \f$\hat{t}_i = t_i\f$). Also note that the explicit term,
144  * \f$f^x(X_i,Y_i,t_i)\f$, is evaluated at the implicit stage time, \f$t_i\f$.
145  *
146  * We can form the time derivative
147  * \f{eqnarray*}{
148  * \dot{X}(X_i,Y_i,t_i) & = & - g^x(X_i,Y_i,t_i) - f^x(X_i,Y_i,t_i) \\
149  * \dot{X}(X_i,Y_i,t_i) & = &
150  * \frac{X_i - \tilde{X}}{a_{ii} \Delta t} - f^x(X_i,Y_i,t_i) \\
151  * \f}
152  * Returning to the governing equation for the IMEX solution vector, \f$X_i\f$
153  * \f{eqnarray*}{
154  * M^x(X_i,Y_i,t_i)\,
155  * \dot{X}(X_i,Y_i,t_i) + F^x(X_i,Y_i,t_i) + G^x(X_i,Y_i,t_i) & = & 0 \\
156  * M^x(X_i,Y_i,t_i)\,
157  * \left[ \frac{X_i - \tilde{X}}{a_{ii} \Delta t} - f^x(X_i,Y_i,t_i) \right]
158  * + F^x(X_i,Y_i,t_i) + G^x(X_i,Y_i,t_i) & = & 0 \\
159  * M^x(X_i,Y_i,t_i)\,
160  * \left[ \frac{X_i - \tilde{X}}{a_{ii} \Delta t} \right]
161  * + G(X_i,Y_i,t_i) & = & 0 \\
162  * \f}
163  * Recall \f$\mathcal{G}^x(\dot{x},x,y,t) = M^x(x,y,t)\,\dot{x} + G^x(x,y,t)\f$
164  * and if we define a pseudo time derivative, which is equivalent to the
165  * time derivative for the implicit solve,
166  * \f[
167  * \tilde{\dot{X}} = \frac{X_i - \tilde{X}}{a_{ii} \Delta t},
168  * \f]
169  * we can write
170  * \f[
171  * \mathcal{G}^x(\tilde{\dot{X}},X_i,Y_i,t_i) =
172  * M^x(X_i,Y_i,t_i)\, \tilde{\dot{X}} + G^x(X_i,Y_i,t_i) = 0
173  * \f]
174  *
175  * For general DIRK methods, we need to also handle the case when
176  * \f$a_{ii}=0\f$. The IMEX stage values can be simply evaluated
177  * similiar to the "explicit-only" stage values, e.g.,
178  * \f[
179  * X_i = \tilde{X} = x_{n-1} - \Delta t\,\sum_{j=1}^{i-1} \left(
180  * \hat{a}_{ij}\, f^x_j + a_{ij}\, g^x_j \right)
181  * \f]
182  * and then we can simply evaluate
183  * \f{eqnarray*}{
184  * f_i & = & f (Z_i,\hat{t}_i) \\
185  * g^x_i & = & g^x(X_i,Y_i, t_i)
186  * \f}
187  * We can then form the time derivative as
188  * \f[
189  * \dot{X}_i = - g^x(X_i,Y_i,t_i) - f^x(X_i,Y_i,t_i)
190  * \f]
191  * but again note that the explicit term, \f$f^x(X_i,Y_i,t_i)\f$,
192  * is evaluated at the implicit stage time, \f$t_i\f$.
193  *
194  * <b> Partitioned IMEX-RK Algorithm </b>
195  * The single-timestep algorithm for the partitioned IMEX-RK is
196  * - \f$Z_1 \leftarrow z_{n-1}\f$ (Recall \f$Z_i = \{Y_i,X_i\}^T\f$)
197  * - for \f$i = 1 \ldots s\f$ do
198  * - \f$Y_i = y_{n-1} -\Delta t \sum_{j=1}^{i-1} \hat{a}_{ij}\;f^y_j\f$
199  * - \f$\tilde{X} \leftarrow x_{n-1} - \Delta t\,\sum_{j=1}^{i-1} \left[
200  * \hat{a}_{ij}\, f^x_j + a_{ij}\, g^x_j \right] \f$
201  * - if \f$a_{ii} = 0\f$
202  * - \f$X_i \leftarrow \tilde{X}\f$
203  * - \f$g^x_i \leftarrow g^x(X_i,Y_i,t_i)\f$
204  * - else
205  * - Define \f$\tilde{\dot{X}}(X_i,Y_i,t_i)
206  * = \frac{X_i-\tilde{X}}{a_{ii} \Delta t}\f$
207  * - Solve \f$\mathcal{G}^x(\tilde{\dot{X}},X_i,Y_i,t_i) = 0\f$
208  * for \f$X_i\f$ where \f$Y_i\f$ are known parameters
209  * - \f$g^x_i \leftarrow - \tilde{\dot{X}}\f$
210  * - \f$f_i \leftarrow f(Z_i,\hat{t}_i)\f$
211  * - \f$\dot{X}_i
212  * = - g^x_i - f^x(Z_i,t_i)\f$ [Optional]
213  * - \f$\dot{Y}_i = - f^y_i \f$ [Optional]
214  * - end for
215  * - \f$z_n = z_{n-1} - \Delta t\,\sum_{i=1}^{s}\hat{b}_i\, f_i\f$
216  * - \f$x_n \mathrel{+{=}} - \Delta t\,\sum_{i=1}^{s} b_i\, g^x_i\f$
217  * - Solve \f$M(z_n) \dot{z}_n + F(z_n,t_n) + G(z_n,t_n) = 0\f$
218  * for \f$\dot{z}_n\f$ [Optional]
219  *
220  * #### References
221  * -# Shadid, Cyr, Pawlowski, Widley, Scovazzi, Zeng, Phillips, Conde,
222  * Chuadhry, Hensinger, Fischer, Robinson, Rider, Niederhaus, Sanchez,
223  * "Towards an IMEX Monolithic ALE Method with Integrated UQ for
224  * Multiphysics Shock-hydro", SAND2016-11353, 2016, pp. 21-28.
225  * -# Cyr, "IMEX Lagrangian Methods", SAND2015-3745C.
226  */
227 template<class Scalar>
228 class StepperIMEX_RK_Partition : virtual public Tempus::StepperImplicit<Scalar>
229 {
230 public:
231 
232  /// Constructor to use default Stepper parameters.
234  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel,
235  std::string stepperType = "Partitioned IMEX RK SSP2");
236 
237  /// Constructor to specialize Stepper parameters.
239  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel,
240  Teuchos::RCP<Teuchos::ParameterList> pList);
241 
242  /// Constructor for StepperFactory.
244  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& models,
245  std::string stepperType, Teuchos::RCP<Teuchos::ParameterList> pList);
246 
247  /// \name Basic stepper methods
248  //@{
249  /// Set both the explicit and implicit tableau from ParameterList
250  virtual void setTableaus(Teuchos::RCP<Teuchos::ParameterList> pList,
251  std::string stepperType = "");
252 
253  /// Set the explicit tableau from ParameterList
254  virtual void setExplicitTableau(std::string stepperType,
255  Teuchos::RCP<Teuchos::ParameterList> pList);
256 
257  /// Set the explicit tableau from tableau
258  virtual void setExplicitTableau(
259  Teuchos::RCP<const RKButcherTableau<Scalar> > explicitTableau);
260 
261  /// Set the implicit tableau from ParameterList
262  virtual void setImplicitTableau(std::string stepperType,
263  Teuchos::RCP<Teuchos::ParameterList> pList);
264 
265  /// Set the implicit tableau from tableau
266  virtual void setImplicitTableau(
267  Teuchos::RCP<const RKButcherTableau<Scalar> > implicitTableau);
268 
269  virtual void setModel(
270  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& appModel);
271 
272  virtual Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> > getModel()
273  { return this->wrapperModel_; }
274 
275  virtual void setModelPair(
277  modelPair);
278 
279  virtual void setModelPair(
280  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& explicitModel,
281  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& implicitModel);
282 
283  virtual void setObserver(
284  Teuchos::RCP<StepperObserver<Scalar> > obs = Teuchos::null);
285 
286  /// Initialize during construction and after changing input parameters.
287  virtual void initialize();
288 
289  /// Take the specified timestep, dt, and return true if successful.
290  virtual void takeStep(
291  const Teuchos::RCP<SolutionHistory<Scalar> >& solutionHistory);
292 
293  virtual Teuchos::RCP<Tempus::StepperState<Scalar> >getDefaultStepperState();
294  virtual Scalar getOrder()const { return order_; }
295  virtual Scalar getOrderMin()const { return order_; }
296  virtual Scalar getOrderMax()const { return order_; }
297 
298  virtual bool isExplicit() const {return true;}
299  virtual bool isImplicit() const {return true;}
300  virtual bool isExplicitImplicit() const
301  {return isExplicit() and isImplicit();}
302  virtual bool isOneStepMethod() const {return true;}
303  virtual bool isMultiStepMethod() const {return !isOneStepMethod();}
304 
305  //@}
306 
307  /// Pass initial guess to Newton solver (only relevant for implicit solvers)
308  virtual void setInitialGuess(Teuchos::RCP<const Thyra::VectorBase<Scalar> > initial_guess)
309  {initial_guess_ = initial_guess;}
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  const Teuchos::RCP<const Thyra::VectorBase<Scalar> > & Y,
330  Scalar time, Scalar stepSize, Scalar stageNumber,
331  const Teuchos::RCP<Thyra::VectorBase<Scalar> > & G) const;
332 
333  void evalExplicitModel(
334  const Teuchos::RCP<const Thyra::VectorBase<Scalar> > & X,
335  Scalar time, Scalar stepSize, Scalar stageNumber,
336  const Teuchos::RCP<Thyra::VectorBase<Scalar> > & F) const;
337 
338 private:
339 
340  /// Default Constructor -- not allowed
342 
343 protected:
344 
345  std::string description_;
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> > stageZ_;
352  std::vector<Teuchos::RCP<Thyra::VectorBase<Scalar> > > stageF_;
353  std::vector<Teuchos::RCP<Thyra::VectorBase<Scalar> > > stageGx_;
354 
355  Teuchos::RCP<Thyra::VectorBase<Scalar> > xTilde_;
356 
357  Teuchos::RCP<StepperObserver<Scalar> > stepperObserver_;
358  Teuchos::RCP<StepperIMEX_RKPartObserver<Scalar> > stepperIMEX_RKPartObserver_;
359 
360  Teuchos::RCP<const Thyra::VectorBase<Scalar> > initial_guess_;
361 
362 };
363 
364 
365 /** \brief Time-derivative interface for Partitioned IMEX RK.
366  *
367  * Given the stage state \f$X_i\f$ and
368  * \f[
369  * \tilde{X} = x_{n-1} +\Delta t \sum_{j=1}^{i-1} a_{ij}\,\dot{X}_{j},
370  * \f]
371  * compute the IMEX RK stage time-derivative,
372  * \f[
373  * \dot{X}_i = \frac{X_{i} - \tilde{X}}{a_{ii} \Delta t}
374  * \f]
375  * \f$\ddot{x}\f$ is not used and set to null.
376  */
377 template <typename Scalar>
379  : virtual public Tempus::TimeDerivative<Scalar>
380 {
381 public:
382 
383  /// Constructor
385  Scalar s, Teuchos::RCP<const Thyra::VectorBase<Scalar> > xTilde)
386  { initialize(s, xTilde); }
387 
388  /// Destructor
390 
391  /// Compute the time derivative.
392  virtual void compute(
393  Teuchos::RCP<const Thyra::VectorBase<Scalar> > x,
394  Teuchos::RCP< Thyra::VectorBase<Scalar> > xDot,
395  Teuchos::RCP< Thyra::VectorBase<Scalar> > xDotDot = Teuchos::null)
396  {
397  xDotDot = Teuchos::null;
398 
399  // ith stage
400  // s = 1/(dt*a_ii)
401  // xOld = solution at beginning of time step
402  // xTilde = xOld + dt*(Sum_{j=1}^{i-1} a_ij x_dot_j)
403  // xDotTilde = - (s*x_i - s*xTilde)
404  Thyra::V_StVpStV(xDot.ptr(),s_,*x,-s_,*xTilde_);
405  }
406 
407  virtual void initialize(Scalar s,
408  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xTilde)
409  { s_ = s; xTilde_ = xTilde; }
410 
411 private:
412 
413  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xTilde_;
414  Scalar s_; // = 1/(dt*a_ii)
415 };
416 
417 
418 } // namespace Tempus
419 #endif // Tempus_StepperIMEX_RK_Partition_decl_hpp
Tempus_StepperIMEX_RKPartObserver.hpp
Tempus::RKButcherTableau
Runge-Kutta methods.
Definition: Tempus_RKButcherTableau.hpp:53
Tempus::StepperIMEX_RK_Partition::isExplicit
virtual bool isExplicit() const
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:298
Tempus::StepperIMEX_RK_Partition::description
virtual std::string description() const
Definition: Tempus_StepperIMEX_RK_Partition_impl.hpp:639
Tempus::StepperIMEX_RK_Partition::getOrderMin
virtual Scalar getOrderMin() const
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:295
Tempus::StepperIMEX_RK_Partition::setParameterList
void setParameterList(const Teuchos::RCP< Teuchos::ParameterList > &pl)
Definition: Tempus_StepperIMEX_RK_Partition_impl.hpp:657
Tempus::StepperIMEX_RK_Partition::isMultiStepMethod
virtual bool isMultiStepMethod() const
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:303
Tempus::StepperIMEX_RK_Partition::describe
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
Definition: Tempus_StepperIMEX_RK_Partition_impl.hpp:646
Tempus::StepperIMEX_RK_Partition::getDefaultParameters
Teuchos::RCP< Teuchos::ParameterList > getDefaultParameters() const
Definition: Tempus_StepperIMEX_RK_Partition_impl.hpp:687
Tempus::StepperIMEX_RK_Partition::stepperObserver_
Teuchos::RCP< StepperObserver< Scalar > > stepperObserver_
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:357
Tempus::WrapperModelEvaluatorPairPartIMEX_Basic
ModelEvaluator pair for implicit and explicit (IMEX) evaulations.
Definition: Tempus_WrapperModelEvaluatorPairPartIMEX_Basic_decl.hpp:37
Tempus::solutionHistory
Teuchos::RCP< SolutionHistory< Scalar > > solutionHistory(Teuchos::RCP< Teuchos::ParameterList > pList=Teuchos::null)
Nonmember constructor.
Definition: Tempus_SolutionHistory_impl.hpp:504
Tempus::StepperIMEX_RK_Partition::order_
Scalar order_
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:349
Tempus::StepperIMEX_RKPartTimeDerivative::initialize
virtual void initialize(Scalar s, Teuchos::RCP< const Thyra::VectorBase< Scalar > > xTilde)
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:407
Tempus::StepperIMEX_RKPartTimeDerivative
Time-derivative interface for Partitioned IMEX RK.
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:378
Tempus::StepperIMEX_RK_Partition::getOrderMax
virtual Scalar getOrderMax() const
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:296
Tempus::StepperIMEX_RK_Partition::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_Partition_impl.hpp:64
Tempus::StepperIMEX_RKPartTimeDerivative::StepperIMEX_RKPartTimeDerivative
StepperIMEX_RKPartTimeDerivative(Scalar s, Teuchos::RCP< const Thyra::VectorBase< Scalar > > xTilde)
Constructor.
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:384
Tempus::StepperIMEX_RKPartTimeDerivative::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_Partition_decl.hpp:392
Tempus::StepperIMEX_RK_Partition::setObserver
virtual void setObserver(Teuchos::RCP< StepperObserver< Scalar > > obs=Teuchos::null)
Set Observer.
Definition: Tempus_StepperIMEX_RK_Partition_impl.hpp:330
Tempus
Definition: Tempus_AdjointAuxSensitivityModelEvaluator_decl.hpp:20
Tempus::StepperIMEX_RK_Partition::implicitTableau_
Teuchos::RCP< const RKButcherTableau< Scalar > > implicitTableau_
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:347
Tempus::StepperIMEX_RK_Partition::setModelPair
virtual void setModelPair(const Teuchos::RCP< WrapperModelEvaluatorPairPartIMEX_Basic< Scalar > > &modelPair)
Create WrapperModelPairIMEX from user-supplied ModelEvaluator pair.
Definition: Tempus_StepperIMEX_RK_Partition_impl.hpp:295
Tempus::StepperIMEX_RK_Partition::evalImplicitModelExplicitly
void evalImplicitModelExplicitly(const Teuchos::RCP< const Thyra::VectorBase< Scalar > > &X, const Teuchos::RCP< const Thyra::VectorBase< Scalar > > &Y, Scalar time, Scalar stepSize, Scalar stageNumber, const Teuchos::RCP< Thyra::VectorBase< Scalar > > &G) const
Definition: Tempus_StepperIMEX_RK_Partition_impl.hpp:394
Tempus_RKButcherTableau.hpp
Tempus::StepperIMEX_RK_Partition::getModel
virtual Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > getModel()
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:272
Tempus::StepperIMEX_RK_Partition
Partitioned Implicit-Explicit Runge-Kutta (IMEX-RK) time stepper.
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:228
Tempus::StepperIMEX_RK_Partition::getNonconstParameterList
Teuchos::RCP< Teuchos::ParameterList > getNonconstParameterList()
Definition: Tempus_StepperIMEX_RK_Partition_impl.hpp:702
Tempus::StepperIMEX_RK_Partition::getValidParameters
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
Definition: Tempus_StepperIMEX_RK_Partition_impl.hpp:673
Tempus::StepperIMEX_RKPartTimeDerivative::~StepperIMEX_RKPartTimeDerivative
virtual ~StepperIMEX_RKPartTimeDerivative()
Destructor.
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:389
Tempus::StepperIMEX_RK_Partition::isOneStepMethod
virtual bool isOneStepMethod() const
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:302
Tempus::StepperIMEX_RK_Partition::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_Partition_impl.hpp:429
Tempus::StepperIMEX_RK_Partition::setModel
virtual void setModel(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &appModel)
Definition: Tempus_StepperIMEX_RK_Partition_impl.hpp:269
Tempus::StepperObserver
StepperObserver class for Stepper class.
Definition: Tempus_StepperObserver.hpp:38
Tempus::StepperIMEX_RK_Partition::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_Partition_impl.hpp:630
Tempus::StepperIMEX_RK_Partition::unsetParameterList
Teuchos::RCP< Teuchos::ParameterList > unsetParameterList()
Definition: Tempus_StepperIMEX_RK_Partition_impl.hpp:710
Tempus::StepperIMEX_RK_Partition::stageGx_
std::vector< Teuchos::RCP< Thyra::VectorBase< Scalar > > > stageGx_
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:353
Tempus::StepperIMEX_RKPartTimeDerivative::xTilde_
Teuchos::RCP< const Thyra::VectorBase< Scalar > > xTilde_
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:413
Tempus::StepperImplicit
Thyra Base interface for implicit time steppers.
Definition: Tempus_StepperImplicit_decl.hpp:24
Tempus::StepperIMEX_RK_Partition::stepperIMEX_RKPartObserver_
Teuchos::RCP< StepperIMEX_RKPartObserver< Scalar > > stepperIMEX_RKPartObserver_
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:358
Tempus::StepperIMEX_RK_Partition::setImplicitTableau
virtual void setImplicitTableau(std::string stepperType, Teuchos::RCP< Teuchos::ParameterList > pList)
Set the implicit tableau from ParameterList.
Definition: Tempus_StepperIMEX_RK_Partition_impl.hpp:242
Tempus::StepperIMEX_RK_Partition::getOrder
virtual Scalar getOrder() const
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:294
Tempus::StepperIMEX_RK_Partition::takeStep
virtual void takeStep(const Teuchos::RCP< SolutionHistory< Scalar > > &solutionHistory)
Take the specified timestep, dt, and return true if successful.
Definition: Tempus_StepperIMEX_RK_Partition_impl.hpp:465
Tempus::SolutionHistory
SolutionHistory is basically a container of SolutionStates. SolutionHistory maintains a collection of...
Definition: Tempus_Integrator.hpp:25
Tempus::StepperIMEX_RK_Partition::xTilde_
Teuchos::RCP< Thyra::VectorBase< Scalar > > xTilde_
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:355
Tempus::TimeDerivative
This interface defines the time derivative connection between an implicit Stepper and WrapperModelEva...
Definition: Tempus_TimeDerivative.hpp:32
Tempus::StepperIMEX_RK_Partition::isExplicitImplicit
virtual bool isExplicitImplicit() const
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:300
Tempus::StepperIMEX_RK_Partition::StepperIMEX_RK_Partition
StepperIMEX_RK_Partition()
Default Constructor – not allowed.
Tempus::StepperIMEX_RK_Partition::stageF_
std::vector< Teuchos::RCP< Thyra::VectorBase< Scalar > > > stageF_
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:352
Tempus::StepperIMEX_RK_Partition::initial_guess_
Teuchos::RCP< const Thyra::VectorBase< Scalar > > initial_guess_
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:360
Tempus::StepperIMEX_RKPartTimeDerivative::s_
Scalar s_
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:414
Tempus::StepperIMEX_RK_Partition::explicitTableau_
Teuchos::RCP< const RKButcherTableau< Scalar > > explicitTableau_
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:346
Tempus::StepperIMEX_RK_Partition::initialize
virtual void initialize()
Initialize during construction and after changing input parameters.
Definition: Tempus_StepperIMEX_RK_Partition_impl.hpp:352
Tempus::StepperIMEX_RK_Partition::description_
std::string description_
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:345
Tempus::StepperIMEX_RK_Partition::setExplicitTableau
virtual void setExplicitTableau(std::string stepperType, Teuchos::RCP< Teuchos::ParameterList > pList)
Set the explicit tableau from ParameterList.
Definition: Tempus_StepperIMEX_RK_Partition_impl.hpp:217
Tempus::StepperIMEX_RK_Partition::stageZ_
Teuchos::RCP< Thyra::VectorBase< Scalar > > stageZ_
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:351
Tempus::StepperIMEX_RK_Partition::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_Partition_decl.hpp:308
Tempus::StepperImplicit::wrapperModel_
Teuchos::RCP< WrapperModelEvaluator< Scalar > > wrapperModel_
Definition: Tempus_StepperImplicit_decl.hpp:74
Tempus::StepperIMEX_RK_Partition::isImplicit
virtual bool isImplicit() const
Definition: Tempus_StepperIMEX_RK_Partition_decl.hpp:299