# Overview¶

PyPFASST is an object-orientated implementation of the PFASST algorithm.

User interactions with PyPFASST are typically marshaled through the
`PFASST` class. This class acts as the
overall controller of the algorithm. Implementing a PDE solver in
PyPFASST generally consists of the following steps:

- Instantiate the
`PFASST`controller. - Add each level of the grid/solver hierarchy, along with appropriate interpolation and restriction operations, to the controller.
- Call the
`run()`method of the controller.

Note that if you add only level, then the PFASST algorithm reduces to a serial SDC integrator. In this case it does not make sense to use multiple time processors. If you add multiple levels but only one time processors, then the PFASST algorithm reduces to a space/time multigrid version of SDC (MGSDC).

## Levels¶

Each level of the grid hierarchy consists of:

A SDC itegrator. PyPFASST includes once pre-packaged general purpose IMEX SDC integrator:

`IMEXSDC`for implicit/explicit schemes.

Users are free to provide their own SDC integrators as extensions of the

`SDC`class.A function evaluator. These are loosely coupled to the SDC integrator used for the level. For the pre-packaged SDC integrators mentioned above, the user should extend the

`IMEXFEval`to provide their function evaluations.Spatial interpolation and restriction operators.

Levels are added to the controller from finest (level 0) to coarsest
using the controllers `add_level()`
method. Internally, each level is represented by an instance of the
`Level` class.

## SDC integrators¶

Each level has an associated SDC integrator. The SDC integrators are
implemented as extensions of the base `SDC`
class. User implementations must override the
`sweep()` method.

The constructor of the base `SDC` class uses the
`quadrature` module to load precomputed SDC
integration matrices. The base class also provides a
`residual()` method for computing residuals.

## Function evaluators¶

Each level has an associated function evaluator. The function
evaluators are implemented as extensions of the base
`FEval` class, but are typically implemented
as extensions of either the `IMEXFEval` class
or as dictated by the SDC integrator.

Each function evaluation class must set its *shape* and *size*
attributes appropriately (see `FEval`).

## Interpolation and restriction operators¶

XXX: description of how the interpolation and restriction routines are called.

## Time interpolation and restriction¶

XXX: description of how time interpolation and restriction is done.

## Runtime hooks¶

XXX: description of hooks, state etc.