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.cpphas been slightly tidy-up by removing unused and/or duplicate function declaration. - The
InterpExp1ToExp2has been removed fromInterpolator.cppand moved toDriverParallelInTime.cpp - The
TimeIntegrationSchemeOperatorsobjectophas been added as member variablem_opacross 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).