Implementation of PFASST module and tidy-up of the Driver class/subclasses.
Issue/feature addressed
Implementation of PFASST (parallel full approximation scheme in space and time) algorithm in Nektar++. PFASST is a parallel-in-time algorithm based on both Parareal and SDC (spectral deferred correction method). Interested readers are referred to:
https://msp.org/camcos/2012/7-1/camcos-v7-n1-p04-s.pdf
https://link.springer.com/article/10.1007/s10543-014-0517-x
https://onlinelibrary.wiley.com/doi/epdf/10.1002/nla.2110
https://www.sciencedirect.com/sdfe/reader/pii/S0021999119309155/pdf
Implementation
The proposed implementation re-use components developed for the Parareal driver and the SDC time-integration algorithm. Although multi-level PFASST algorithms have been suggested in the literature, the current implementation only assume two level (coarse/fine) as in the original Parareal method. The implementation of the PFASST driver follows the algorithms described in the reference mentioned above.
Additionally, while provision for both time and space coarsening have been provided. The scheme is currently being tested with time coarsening only.
Additionally the following changes have been made:
-
Polylib.cpp
has been slightly tidy-up by removing unused and/or duplicate function declaration. - The
InterpExp1ToExp2
has been removed fromInterpolator.cpp
and moved toDriverParallelInTime.cpp
- The
TimeIntegrationSchemeOperators
objectop
has been added as member variablem_op
across the TimeIntegration class/subclasses. - The Driver class and subclasses have been tidy-up.
Tests
The following test has been added:
solvers/ADRSolver/Tests/PFASSTDriverUnsteadyAdvection1D.tst
Suggested reviewers
Please suggest any people who would be appropriate to review your code.
Notes
Checklist
-
Functions and classes, or changes to them, are documented. [ ] User guide/documentation is updated.-
Changelog is updated. -
Suitable tests added for new functionality. -
Contributed code is correctly formatted. (See the contributing guidelines). -
License added to any new files. -
No extraneous files have been added (e.g. compiler output or test data files).