Sweeper for scalar test equation. More...
#include <scalar_sweeper.hpp>
Public Member Functions | |
ScalarSweeper (const complex< double > &lambda, const complex< double > &u0) | |
generic constructor; initialize all function call counters with zero. More... | |
virtual | ~ScalarSweeper () |
upon destruction, report final error and number of function calls More... | |
void | echo_error (time t) |
compute error between last state and exact solution at time tand print it to cout More... | |
double | get_errors () |
returns error, but does not update it! More... | |
void | post_predict () override |
post prediction step, update of error. More... | |
void | post_sweep () override |
post sweep, update error. More... | |
void | exact (complex_vector_type &q, time t) |
computes the exact solution \( u_0 \exp \left( \lambda*t \right) \) at a given time t. More... | |
void | exact (shared_ptr< encap_type > q_encap, time t) |
void | f_expl_eval (shared_ptr< encap_type > f_encap, shared_ptr< encap_type > q_encap, time t) override |
evaluate the explicit part of the right hand side: Multiply with \( \text{imag}(\lambda) \) More... | |
void | f_impl_eval (shared_ptr< encap_type > f_encap, shared_ptr< encap_type > q_encap, time t) override |
evaluate the implicit part of the right hand side: Multiply with \( \text{real}(\lambda) \) More... | |
void | impl_solve (shared_ptr< encap_type > f_encap, shared_ptr< encap_type > q_encap, time t, time dt, shared_ptr< encap_type > rhs_encap) override |
for given \( b \), solve \( \left( \mathbb{I}_d - \Delta t \text{real}(\lambda) \right) u = b \) for \( u \) and set f_encap to \( \text{real}(\lambda) u \) More... | |
![]() | |
IMEXSweeper ()=default | |
virtual | ~IMEXSweeper ()=default |
virtual void | setup (bool coarse) override |
Setup (allocate etc) the sweeper. More... | |
virtual void | predict (bool initial) override |
Compute low-order provisional solution. More... | |
virtual void | sweep () override |
Perform one SDC sweep/iteration. More... | |
virtual void | advance () override |
Advance the end solution to start solution. More... | |
virtual void | reevaluate (bool initial_only) override |
Re-evaluate function values. More... | |
virtual void | integrate (time dt, vector< shared_ptr< Encapsulation< time >>> dst) const override |
Integrates values of right hand side at all time nodes \( t \in [0,M-1] \) simultaneously. More... | |
virtual void | residual (time dt, vector< shared_ptr< Encapsulation< time >>> dst) const override |
Compute residual at each SDC node (including FAS corrections). More... | |
virtual void | f_expl_eval (shared_ptr< Encapsulation< time >> f_expl_encap, shared_ptr< Encapsulation< time >> u_encap, time t) |
Evaluate the explicit part of the ODE. More... | |
virtual void | f_impl_eval (shared_ptr< Encapsulation< time >> f_impl_encap, shared_ptr< Encapsulation< time >> u_encap, time t) |
Evaluate the implicit part of the ODE. More... | |
virtual void | impl_solve (shared_ptr< Encapsulation< time >> f_encap, shared_ptr< Encapsulation< time >> u_encap, time t, time dt, shared_ptr< Encapsulation< time >> rhs_encap) |
Solve \( U - \Delta t F_{\rm impl}(U) = RHS \) for \( U \). More... | |
![]() | |
EncapSweeper () | |
virtual shared_ptr< Encapsulation< time > > | get_state (size_t m) const |
Retrieve solution values of current iteration at time node index m . More... | |
virtual shared_ptr< Encapsulation< time > > | get_tau (size_t m) const |
Retrieve FAS correction of current iteration at time node index m . More... | |
virtual shared_ptr< Encapsulation< time > > | get_saved_state (size_t m) const |
Retrieve solution values of previous iteration at time node index m . More... | |
virtual void | set_options () override |
Set options from command line etc. More... | |
virtual void | spread () override |
Initialize solution values at all time nodes with meaningful values. More... | |
virtual void | save (bool initial_only) override |
Save states (and/or function values) at all nodes. More... | |
virtual void | set_quadrature (shared_ptr< IQuadrature< time >> quadrature) |
virtual shared_ptr< const IQuadrature< time > > | get_quadrature () const |
virtual const vector< time > | get_nodes () const |
virtual void | set_factory (shared_ptr< EncapFactory< time >> factory) |
virtual shared_ptr< EncapFactory< time > > | get_factory () const |
virtual shared_ptr< Encapsulation< time > > | get_start_state () const |
virtual shared_ptr< Encapsulation< time > > | get_end_state () |
void | set_residual_tolerances (time abs_residual_tol, time rel_residual_tol, int order=0) |
Set residual tolerances for convergence checking. More... | |
virtual bool | converged () override |
Return convergence status. More... | |
virtual void | post (ICommunicator *comm, int tag) override |
virtual void | send (ICommunicator *comm, int tag, bool blocking) override |
virtual void | recv (ICommunicator *comm, int tag, bool blocking) override |
virtual void | broadcast (ICommunicator *comm) override |
![]() | |
ISweeper () | |
virtual | ~ISweeper () |
virtual void | set_controller (Controller< time > *ctrl) |
Set the sweepers controller. More... | |
virtual Controller< time > * | get_controller () |
Accessor to the controller managing this sweeper. More... | |
virtual void | post_step () |
Hook automatically run after each completed time step. More... | |
Private Types | |
typedef encap::Encapsulation< time > | encap_type |
typedef encap::VectorEncapsulation< complex< double > > | complex_vector_type |
define a type for a complex PFASST vector encapsulation. More... | |
Private Attributes | |
complex< double > | lambda |
parameter lambda and initial value \( u_0 \) More... | |
complex< double > | u0 |
const complex< double > | i_complex = complex<double>(0, 1) |
the complex unit \( i = \sqrt{-1} \) More... | |
double | error |
error at the final time. For the scalar example, an analytical solution is known. More... | |
size_t | n_f_expl_eval |
counters for how often f_expl_eval , f_impl_eval and impl_solve are called. More... | |
size_t | n_f_impl_eval |
size_t | n_impl_solve |
Additional Inherited Members | |
![]() | |
virtual void | integrate_end_state (time dt) |
Set end state to \( U_0 + \int F_{expl} + F_{expl} \). More... | |
![]() | |
vector< shared_ptr< Encapsulation< time > > > | s_integrals |
Node-to-node integrals of \( F(t,u) \) at all time nodes of the current iteration. More... | |
vector< shared_ptr< Encapsulation< time > > > | fs_expl |
Values of the explicit part of the right hand side \( F_{expl}(t,u) \) at all time nodes of the current iteration. More... | |
shared_ptr< Encapsulation< time > > | fs_expl_start |
vector< shared_ptr< Encapsulation< time > > > | fs_impl |
Values of the implicit part of the right hand side \( F_{impl}(t,u) \) at all time nodes of the current iteration. More... | |
![]() | |
string | FORMAT_STR |
shared_ptr< IQuadrature< time > > | quadrature |
shared_ptr< EncapFactory< time > > | factory |
Encapsulation data structure factory. More... | |
shared_ptr< Encapsulation< time > > | start_state |
Separate start state, i.e. initial condition for the sweeper's current time step. More... | |
shared_ptr< Encapsulation< time > > | end_state |
Current solution at \( T_{end} \). More... | |
vector< shared_ptr< Encapsulation< time > > > | residuals |
Place for the residuals at the different time nodes. More... | |
vector< shared_ptr< Encapsulation< time > > > | state |
Solution values \( U \) at all time nodes of the current iteration. More... | |
vector< shared_ptr< Encapsulation< time > > > | saved_state |
Solution values \( U \) at all time nodes of the previous iteration. More... | |
vector< shared_ptr< Encapsulation< time > > > | fas_corrections |
FAS corrections \( \tau \) at all time nodes of the current iteration. More... | |
int | residual_norm_order |
time | abs_residual_tol |
Tolerance for absolute residual. More... | |
time | rel_residual_tol |
Tolerance for relative residual. More... | |
![]() | |
Controller< time > * | controller |
Backreference to the controller managing the sweeper instance. More... | |
Sweeper for scalar test equation.
\[ u' = \lambda*u \quad\text{ , } u(0) = u_0 \] with complex lambda using an IMEX scheme.
Definition at line 51 of file scalar_sweeper.hpp.
|
private |
define a type for a complex PFASST vector encapsulation.
Definition at line 58 of file scalar_sweeper.hpp.
|
private |
Definition at line 55 of file scalar_sweeper.hpp.
|
inline |
generic constructor; initialize all function call counters with zero.
[in] | lambda | coefficient in test equation |
[in] | u0 | initial value at \( t=0 \) |
Definition at line 79 of file scalar_sweeper.hpp.
|
inlinevirtual |
upon destruction, report final error and number of function calls
Definition at line 91 of file scalar_sweeper.hpp.
References ML_LOG.
|
inline |
compute error between last state and exact solution at time tand print it to cout
[in] | t | Time |
Definition at line 104 of file scalar_sweeper.hpp.
References ML_LOG.
|
inline |
computes the exact solution \( u_0 \exp \left( \lambda*t \right) \) at a given time t.
[in] | t | Time |
Definition at line 149 of file scalar_sweeper.hpp.
|
inline |
Definition at line 154 of file scalar_sweeper.hpp.
|
inlineoverride |
evaluate the explicit part of the right hand side: Multiply with \( \text{imag}(\lambda) \)
Definition at line 163 of file scalar_sweeper.hpp.
References UNUSED.
|
inlineoverride |
evaluate the implicit part of the right hand side: Multiply with \( \text{real}(\lambda) \)
Definition at line 179 of file scalar_sweeper.hpp.
References UNUSED.
|
inline |
returns error, but does not update it!
Definition at line 119 of file scalar_sweeper.hpp.
|
inlineoverride |
for given \( b \), solve \( \left( \mathbb{I}_d - \Delta t \text{real}(\lambda) \right) u = b \) for \( u \) and set f_encap to \( \text{real}(\lambda) u \)
Definition at line 197 of file scalar_sweeper.hpp.
References UNUSED.
|
inlineoverridevirtual |
post prediction step, update of error.
Reimplemented from pfasst::ISweeper< time >.
Definition at line 127 of file scalar_sweeper.hpp.
|
inlineoverridevirtual |
post sweep, update error.
Reimplemented from pfasst::ISweeper< time >.
Definition at line 137 of file scalar_sweeper.hpp.
|
private |
error at the final time. For the scalar example, an analytical solution is known.
Definition at line 67 of file scalar_sweeper.hpp.
|
private |
the complex unit \( i = \sqrt{-1} \)
Definition at line 64 of file scalar_sweeper.hpp.
|
private |
parameter lambda and initial value \( u_0 \)
Definition at line 61 of file scalar_sweeper.hpp.
|
private |
counters for how often f_expl_eval
, f_impl_eval
and impl_solve
are called.
Definition at line 70 of file scalar_sweeper.hpp.
|
private |
Definition at line 70 of file scalar_sweeper.hpp.
|
private |
Definition at line 70 of file scalar_sweeper.hpp.
|
private |
Definition at line 61 of file scalar_sweeper.hpp.