Skip to content

Commit 7f99ae0

Browse files
author
Matthew Emmett
committed
doc: Fix explanation of impl_solv.
1 parent 000d376 commit 7f99ae0

File tree

1 file changed

+36
-35
lines changed

1 file changed

+36
-35
lines changed

include/pfasst/encap/imex_sweeper.hpp

Lines changed: 36 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,16 @@ namespace pfasst
2424
/**
2525
* interface for an semi-implicit sweeper
2626
*
27-
* Given an ODE \\( \\frac{\\partial}{\\partial t}u(t) = F(t,u) \\) where the function of the
27+
* Given an ODE \\( \\frac{\\partial}{\\partial t}u(t) = F(t,u) \\) where the function of the
2828
* right hand side \\( F(t,u) \\) can be split into a non-stiff and a stiff part.
2929
* To reduce complexity and computational efford one would want to solve the non-stiff part
3030
* explicitly and the stiff part implicitly.
3131
* Therefore, we define the splitting \\( F(t,u) = F_{expl}(t,u) + F_{impl}(t,u) \\).
3232
*
3333
* This sweeper provides an interface for such ODEs were the implicit part can be computed by
34-
* an external implicit solver without actually evaluating \\( F_{impl}(t,u) \\), which is
34+
* an external implicit solver without actually evaluating \\( F_{impl}(t,u) \\), which is
3535
* possibly very expensive.
36-
*
36+
*
3737
* @tparam time precision type of the time dimension
3838
*/
3939
template<typename time = time_precision>
@@ -43,37 +43,37 @@ namespace pfasst
4343
protected:
4444
//! @{
4545
/**
46-
* solution values \\( u(\\tau) \\) at all time nodes \\( \\tau \\in [0, M-1] \\) of the
46+
* solution values \\( u(\\tau) \\) at all time nodes \\( \\tau \\in [0, M-1] \\) of the
4747
* current iteration
4848
*/
4949
vector<shared_ptr<Encapsulation<time>>> us;
5050

5151
/**
52-
* solution values \\( u(t) \\) at all time nodes \\( t \\in [0, M-1] \\) of the
52+
* solution values \\( u(t) \\) at all time nodes \\( t \\in [0, M-1] \\) of the
5353
* previous iteration
5454
*/
5555
vector<shared_ptr<Encapsulation<time>>> previous_us;
5656

5757
/**
58-
* node-to-node integrated values of \\( F(t,u) \\) at all time nodes \\( t \\in
58+
* node-to-node integrated values of \\( F(t,u) \\) at all time nodes \\( t \\in
5959
* [0, M-1] \\) of the current iteration
6060
*/
6161
vector<shared_ptr<Encapsulation<time>>> s_integrals;
6262

6363
/**
64-
* FAS corrections \\( \\tau_t \\) at all time nodes \\( t \\in [0, M-1] \\) of the current
64+
* FAS corrections \\( \\tau_t \\) at all time nodes \\( t \\in [0, M-1] \\) of the current
6565
* iteration
6666
*/
6767
vector<shared_ptr<Encapsulation<time>>> fas_corrections;
6868

6969
/**
70-
* values of the explicit part of the right hand side \\( F_{expl}(t,u) \\) at all time
70+
* values of the explicit part of the right hand side \\( F_{expl}(t,u) \\) at all time
7171
* nodes \\( t \\in [0, M-1] \\) of the current iteration
7272
*/
7373
vector<shared_ptr<Encapsulation<time>>> fs_expl;
7474

7575
/**
76-
* values of the explicit part of the right hand side \\( F_{impl}(t,u) \\) at all time
76+
* values of the explicit part of the right hand side \\( F_{impl}(t,u) \\) at all time
7777
* nodes \\( t \\in [0, M-1] \\) of the current iteration
7878
*/
7979
vector<shared_ptr<Encapsulation<time>>> fs_impl;
@@ -132,30 +132,30 @@ namespace pfasst
132132
/**
133133
* @copydoc ISweeper::setup(bool)
134134
*
135-
* To reduce computational overhead, we precompute the partial integration matrices
136-
* IMEXSweeper::s_mat_expl \\( (\\tilde{s}^{expl})_{m,j} \\) and IMEXSweeper::s_mat_impl
135+
* To reduce computational overhead, we precompute the partial integration matrices
136+
* IMEXSweeper::s_mat_expl \\( (\\tilde{s}^{expl})_{m,j} \\) and IMEXSweeper::s_mat_impl
137137
* \\( (\\tilde{s}^{impl})_{m,j} \\) by incorporating known values of the SDC sweep
138138
* equation.
139139
*
140-
* Let \\( F = F_{impl} + F_{expl} \\), \\( f = F_{impl} \\), \\( g = F_{expl} \\) and
140+
* Let \\( F = F_{impl} + F_{expl} \\), \\( f = F_{impl} \\), \\( g = F_{expl} \\) and
141141
* \\( \\Delta t_m = t_{m+1} - t_m \\).
142142
* @f{eqnarray*}{
143-
* u_{m+1}^{k+1} &=& u_m^k + \Delta t_m \left( f_{m+1}^{k+1} - f_{m+1}^k \right)
144-
* + \Delta t_m \left( g_m^{k+1} - g_m^k \right)
143+
* u_{m+1}^{k+1} &=& u_m^k + \Delta t_m \left( f_{m+1}^{k+1} - f_{m+1}^k \right)
144+
* + \Delta t_m \left( g_m^{k+1} - g_m^k \right)
145145
* + \sum_{j=1}^M s_{m,j} F_j^k \\
146-
* &=& u_m^k + \Delta t_m f_{m+1}^{k+1} + \Delta t_m g_m^{k+1}
147-
* + \sum_{j=1}^M s_{m,j} F_j^k
146+
* &=& u_m^k + \Delta t_m f_{m+1}^{k+1} + \Delta t_m g_m^{k+1}
147+
* + \sum_{j=1}^M s_{m,j} F_j^k
148148
* - \Delta t_m \left( f_{m+1}^k - g_m^k \right) \\
149-
* &=& u_m^k + \Delta t_m f_{m+1}^{k+1} + \Delta t_m g_m^{k+1}
149+
* &=& u_m^k + \Delta t_m f_{m+1}^{k+1} + \Delta t_m g_m^{k+1}
150150
* + \sum_{j=1}^M s_{m,j} f_j^k - \Delta t_m f_{m+1}^k
151151
* + \sum_{j=1}^M s_{m,j} g_j^k - \Delta t_m g_m^k \\
152-
* &=& u_m^k + \Delta t_m f_{m+1}^{k+1} + \Delta t_m g_m^{k+1}
152+
* &=& u_m^k + \Delta t_m f_{m+1}^{k+1} + \Delta t_m g_m^{k+1}
153153
* + \sum_{j=1}^M \tilde{s}_{m,j}^{impl} f_j^k
154154
* + \sum_{j=1}^M \tilde{s}_{m,j}^{expl} g_j^k
155155
* @f}
156156
* with
157157
* @f[
158-
* \tilde{s}_{m,j}^{impl} =
158+
* \tilde{s}_{m,j}^{impl} =
159159
* \begin{cases}
160160
* s_{m,j} - \Delta t_m &\mbox{if } j \equiv m+1 \\
161161
* s_{m,j} &\mbox{else}
@@ -298,10 +298,10 @@ namespace pfasst
298298

299299
//! @{
300300
/**
301-
* evaluates the explicit part of the right hand side at given time
301+
* Evaluates the explicit part of the right hand side at the given time.
302302
*
303303
* @param[in,out] f_expl Encapsulation to store the evaluated right hand side
304-
* @param[in] u Encapsulation storing the solution values to use for computing the explicit
304+
* @param[in] u Encapsulation storing the solution values to use for computing the explicit
305305
* part of the right hand side
306306
* @param[in] t time point of the evaluation
307307
*
@@ -316,10 +316,13 @@ namespace pfasst
316316
}
317317

318318
/**
319-
* evaluates the implicit part of the right hand side at given time
319+
* Evaluates the implicit part of the right hand side at the given time.
320+
*
321+
* This is typically called to compute the implicit part of the right hand side at the first
322+
* collocation node, and on all nodes after restriction or interpolation.
320323
*
321324
* @param[in,out] f_impl Encapsulation to store the evaluated right hand side
322-
* @param[in] u Encapsulation storing the solution values to use for computing the implicit
325+
* @param[in] u Encapsulation storing the solution values to use for computing the implicit
323326
* part of the right hand side
324327
* @param[in] t time point of the evaluation
325328
*
@@ -334,20 +337,18 @@ namespace pfasst
334337
}
335338

336339
/**
337-
* solves for the implicit part of the right hand side without evaluating it directly
338-
*
339-
* This is an alternative to IMEXSweeper::f_impl_eval when the full right hand side of the
340-
* previous time node is already known.
341-
* Usually one would want to implement an implicit space solver here or some FFT tricks to
342-
* compute the implicit part of the right hand side without evaluating it directly:
343-
* \\[ u - \\Delta t f_{impl}(t, u) = rhs \\]
340+
* Solves \\( U - \\Delta t f_{\\rm impl}(U) = RHS \\) for \\(U\\).
344341
*
342+
* During an IMEX SDC sweep, the correction equation is evolved using a forward-Euler
343+
* stepper for the explicit piece, and a backward-Euler stepper for the implicit piece.
344+
* This routine (implemented by the user) performs the solve required to perform one
345+
* backward-Euler sub-step, and also returns \\(f_{\\rm impl}(U)\\).
346+
*
345347
* @param[in,out] f_impl Encapsulation to store the evaluated right hand side
346-
* @param[in,out] u Encapsulation to store intermediate values for use in computation of
347-
* the implicit part of the right hand side
348-
* @param[in] t time point of the evaluation
349-
* @param[in] dt distance of `t` to the previous time node (\\( \\Delta t \\))
350-
* @param[in] rhs Encapsulation storing the full right hand side of the previous time node
348+
* @param[in,out] u Encapsulation to store the solution of the backward-Euler sub-step
349+
* @param[in] t time point (of \\(RHS\\))
350+
* @param[in] dt sub-step size to the previous time point (\\(\\Delta t \\))
351+
* @param[in] rhs Encapsulation storing \\(RHS\\)
351352
*
352353
* @note This method must be implemented in derived sweepers.
353354
*/

0 commit comments

Comments
 (0)