@@ -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
340+ * Solves \\( U - \\Delta t f_{\\rm impl}(U) = RHS \\) for \\(U\\).
338341 *
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 \\]
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)\\).
344346 *
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