|
| 1 | +# Changelog |
| 2 | + |
| 3 | +:arrow_left: [Back to main page](./README.md) |
| 4 | + |
| 5 | +- October 7, 2022: Version 5 comes with many changes, both visible and |
| 6 | + invisible ones. Some of those break the existing API, but if you are |
| 7 | + using tests, you should be fine. Major changes include: |
| 8 | + |
| 9 | + - **New convergence controllers**: Checking whether a step has |
| 10 | + converged can be tricky, so we made separate modules out of |
| 11 | + these checks. This makes features like adaptivity easier to |
| 12 | + implement. Also, the controllers have been streamlined a bit to |
| 13 | + make them more readable/digestible. Thanks to |
| 14 | + [\@brownbaerchen](https://github.com/brownbaerchen)! |
| 15 | + - **Adaptivity and error estimators**: SDC now comes with |
| 16 | + adaptivity and error estimation, leveraging the new convergence |
| 17 | + controllers out of the box. Thanks to |
| 18 | + [\@brownbaerchen](https://github.com/brownbaerchen)! |
| 19 | + - **New collocation classes**: We completely rewrote the way |
| 20 | + collocation nodes and weights are computed. It is now faster, |
| 21 | + more reliable, shorter, better. But: this **breaks the API**, |
| 22 | + since the old collocation classes do not exist anymore. The |
| 23 | + projects, tutorials, tests and most of the playgrounds have been |
| 24 | + adapted, so have a look over there to see [what to |
| 25 | + change](https://github.com/Parallel-in-Time/pySDC/commit/01ffabf71a8d71d33b74809271e8ad5a7b03ac5e#diff-adf74297b6c64d320f4da0f1d5528eda6229803a6615baf5d54c418032543681). |
| 26 | + Thanks to [\@tlunet](https://github.com/tlunet)! |
| 27 | + - **New projects**: Resilience and energy grid simulations are |
| 28 | + ready to play with and are waiting for more ideas! We used this |
| 29 | + effort to condense and clean up the problem classes a bit, |
| 30 | + reducing the number of files and classes with only marginal |
| 31 | + differences significantly. This could potentially **break your |
| 32 | + code**, too, if you rely on any of those affected ones. Thanks |
| 33 | + to [\@brownbaerchen](https://github.com/brownbaerchen) and |
| 34 | + [\@lisawim](https://github.com/lisawim)! |
| 35 | + - **Toward GPU computing**: We included a new data type based on |
| 36 | + [CuPy](https://cupy.dev/) making GPU computing possible. Thanks |
| 37 | + to [\@timo2705](https://github.com/timo2705)! |
| 38 | + - **Better testing**: The CI pipeline got a complete overhaul |
| 39 | + (again), now enabling simultaneous tests, faster/earlier |
| 40 | + linting, benchmarking (at least, in principal), separate |
| 41 | + environments and so on. The code is tested under Ubuntu and |
| 42 | + MacOS. |
| 43 | + - **Better code formatting**: `pySDC` now uses |
| 44 | + [black](https://black.readthedocs.io) and |
| 45 | + [flakeheaven](https://flakeheaven.readthedocs.io) for cleaner |
| 46 | + source code. After complaints here and there about linting |
| 47 | + \"errors\" the recommended way now is to run `black` before |
| 48 | + submission. |
| 49 | + |
| 50 | +- December 13, 2021: Version 4.2 brings compatibility with Python 3.9, |
| 51 | + including some code cleanup. The CI test suite seems to run faster |
| 52 | + now, since sorting out the dependencies is faster. Tested |
| 53 | + [mamba](https://github.com/mamba-org/mamba), which for now makes the |
| 54 | + CI pipeline much faster. Also, the CI workflow can now run locally |
| 55 | + using [act](https://github.com/nektos/act). We introduced markers |
| 56 | + for soem of the tests in preparation of distributed tests on |
| 57 | + different platforms. And finally, a LaTeX installation is no longer |
| 58 | + needed use plotting (but recommended). |
| 59 | + |
| 60 | +- August 11, 2021: Version 4.1 has some more changes under the hood, |
| 61 | + most of them with no significant impact to users. The CI pipeline |
| 62 | + has been completely rewritten, porting the code to [Github |
| 63 | + Actions](https://github.com/features/actions) (away from [Travis |
| 64 | + CI](https://travis-ci.com/)), to [flake8](https://flake8.pycqa.org) |
| 65 | + and to [pytest](https://pytest.org) (away from |
| 66 | + [nose](https://nose.readthedocs.io)). One thing that may have an |
| 67 | + impact on users is that following the changes made in Version 4.0, |
| 68 | + the PETSc data structures are now much easier, removing a lot of |
| 69 | + unnecessary boilerplate code. |
| 70 | + |
| 71 | +- May 4, 2021: Long time, no see, but this major release 4.0 marks |
| 72 | + some improvements under the hood: |
| 73 | + |
| 74 | + - **Rewrote `mesh` and `particle` data type**: |
| 75 | + Creation of new arrays for each operation is now avoided by |
| 76 | + directly subclassing Numpy\'s `ndarray`. Somewhat faster, |
| 77 | + definitively better, less code, future-proof, but also breaking |
| 78 | + the API. If you use `pySDC` for your project, make |
| 79 | + sure you adapt to the new data types (or don\'t upgrade). |
| 80 | + - **Faster quadrature**: Thanks to |
| 81 | + [tlunet](https://github.com/tlunet) the computation of the |
| 82 | + weights is now faster and (even) more reliable. No breaking of |
| 83 | + any API here\... |
| 84 | + - **Bugfixing and version pushes**: The code should run without |
| 85 | + (many) complaints with Python 3.6, 3.7 and potentially above. |
| 86 | + Also, the plotting routines have been adapted to work with |
| 87 | + recent versions of `matplotlib`. |
| 88 | + |
| 89 | + This is not much (yet) and if it were not for the API changes, this |
| 90 | + would have been a minor release. |
| 91 | + |
| 92 | +- August 30, 2019: Version 3.1 adds many more examples like the |
| 93 | + nonlinear Schrödinger equation, more on Gray-Scott and in particular |
| 94 | + Allen-Cahn. Those are many implemented using the parallel FFT |
| 95 | + library |
| 96 | + [mpi4pi-fft](https://bitbucket.org/mpi4py/mpi4py-fft/src/master/), |
| 97 | + which can now be used with `pySDC`. There are now 8 |
| 98 | + tutorials, where step 7 shows the usage of three external libraries |
| 99 | + with `pySDC`: mpi4py, FEniCS and petsc4py. The MPI controller has |
| 100 | + been improved after performaning a detailed performance analysis |
| 101 | + using [Score-P](https://www.vi-hps.org/projects/score-p/) and |
| 102 | + [Extrae](https://www.vi-hps.org/Tools/Extrae.html). Finally: first |
| 103 | + steps towards error/iteration estimators are taken, too. |
| 104 | + |
| 105 | +- February 14, 2019: Released version 3 of `pySDC`. This |
| 106 | + release is accompanied by the **ACM TOMS paper** |
| 107 | + ["pySDC -- Prototyping spectral deferred corrections"](https://doi.org/10.1145/3310410). |
| 108 | + It release contains some breaking changes to the API. In detail: |
| 109 | + |
| 110 | + - **Dropped Python 2 support**: Starting with this version, |
| 111 | + `pySDC` relies on Python 3. Various incompabilities |
| 112 | + led to inconsistent treatment of dependencies, so that parts of |
| 113 | + the code had to use Python 2 while other relied on Python 3 or |
| 114 | + could do both. We follow [A pledge to migrate to Python |
| 115 | + 3](https://python3statement.org/) with this decision, as most |
| 116 | + prominent dependencies of `pySDC` already do. |
| 117 | + - **Unified controllers**: Instead of providing (and maintaining) |
| 118 | + four different controllers, this release only has one for |
| 119 | + emulated and one for MPI-based time-parallelization |
| 120 | + (`controller_nonMPI` and `controller_MPI`). This should avoid |
| 121 | + further confusion and makes the code easier to maintain. Both |
| 122 | + controllers use the multigrid perspective for the algorithm |
| 123 | + (first exchange data, than compute updates), but the classical |
| 124 | + way of determining when to stop locally (each time-step is |
| 125 | + stopped when ready, if the previous one is ready, too). The |
| 126 | + complete multigrid behavior can be restored using a flag. All |
| 127 | + included projects and tutorials have been adapted to this. |
| 128 | + - **No more data types in the front-ends**: The redundant use of |
| 129 | + data type specifications in the description dictionaries has |
| 130 | + been removed. Data types are now declared within each problem |
| 131 | + class (more precisely, in the header of the `__init__`-method to |
| 132 | + allow inhertiance). All included projects and tutorials have |
| 133 | + been adapted to this. |
| 134 | + - **Renewed FEniCS support**: This release revives the deprecated |
| 135 | + [FEniCS](https://fenicsproject.org/) support, now requiring at |
| 136 | + least FEniCS 2018.1. The integration is tested using Travis-CI. |
| 137 | + - **More consistent handling of local initial conditions**: The |
| 138 | + treatment of `u[0]` and `f[0]` has been fixed and made |
| 139 | + consistent throughout the code. |
| 140 | + - As usual, many bugs have been discovered and fixed. |
| 141 | + |
| 142 | +- May 23, 3018: Version 2.4 adds support for |
| 143 | + [petsc4py](https://bitbucket.org/petsc/petsc4py)! You can now use |
| 144 | + [PETSc](http://www.mcs.anl.gov/petsc/) data types |
| 145 | + (`pySDC` ships with DMDA for distributed structured |
| 146 | + grids) and parallel solvers right from your examples and problem |
| 147 | + classes. There is also a new tutorial (7.C) showing this in a bit |
| 148 | + more detail, including communicator splitting for parallelization in |
| 149 | + space and time. Warning: in order to get this to work you need to |
| 150 | + install petsc4py and mpi4py first! Make sure both use MPICH3 |
| 151 | + bindings. Downloading `pySDC` from PyPI does not include |
| 152 | + these packages. |
| 153 | + |
| 154 | +- February 8, 2018: Ever got annoyed at `pySDC`\'s |
| 155 | + incredibly slow setup phase when multiple time-steps are used? |
| 156 | + Version 2.3 changes this by copying the data structure of the first |
| 157 | + step to all other steps using the [dill |
| 158 | + Package](https://pypi.python.org/pypi/dill). Setup times could be |
| 159 | + reduced by 90% and more for certain problems. We also increase the |
| 160 | + speed for certain calculations, in particular for the Penning trap |
| 161 | + example. |
| 162 | + |
| 163 | +- November 7, 2017: Version 2.2 contains matrix-based versions of |
| 164 | + PFASST within the project `matrixPFASST`. This involved quite a few |
| 165 | + changes in more or less unexpected places, e.g. in the multigrid |
| 166 | + controller and the transfer base class. The impact of these changes |
| 167 | + on other projects should be negligible, though. |
| 168 | + |
| 169 | +- October 25, 2017: For the [6th Workshop on Parallel-in-Time |
| 170 | + Integration](https://www.ics.usi.ch/index.php/6th-workshop-on-parallel-in-time-methods) |
| 171 | + `pySDC` has been updated to version 2.1. It is now |
| 172 | + available on PyPI - the Python Package Index, see |
| 173 | + <https://pypi.python.org/pypi/pySDC> and can be installed simply by |
| 174 | + using `pip install pySDC`. Naturally, this release contains a lot of |
| 175 | + bugfixes and minor improvements. Most notably, the file structure |
| 176 | + has been changed again to meet the standards for Python packaging |
| 177 | + (at least a bit). |
| 178 | + |
| 179 | +- November 24, 2016: Released version 2 of `pySDC`. This |
| 180 | + release contains major changes to the code and its structure: |
| 181 | + |
| 182 | + - **Complete redesign of code structure**: The `core` part of |
| 183 | + `pySDC` only contains the core modules and classes, |
| 184 | + while `implementations` contains the actual implementations |
| 185 | + necessary to run something. This now includes separate files for |
| 186 | + all collocation classes, as well as a collection of problems, |
| 187 | + transfer classes and so on. Most examples have been ported to |
| 188 | + either `tutorials`, `playgrounds` or `projects`. |
| 189 | + - **Introduction of tutorials**: We added a tutorial (see below) |
| 190 | + to explain many of pySDC\'s features in a step-by-step fashion. |
| 191 | + We start with a simple spatial discretization and collocation |
| 192 | + formulations and move step by step to SDC, MLSDC and PFASST. All |
| 193 | + tutorials are accompanied by tests. |
| 194 | + - **New all-inclusive controllers**: Instead of having two PFASST |
| 195 | + controllers which could also do SDC and MLSDC (and more), we now |
| 196 | + have four generic controllers which can do all these methods, |
| 197 | + depending on the input. They are split into two by two class: |
| 198 | + `MPI` and `NonMPI` for real or virtual |
| 199 | + parallelisim as well as `classic` and |
| 200 | + `multigrid` for the standard and multigrid-like |
| 201 | + implementation of PFASST and the likes. Initialization has been |
| 202 | + simplified a lot, too. |
| 203 | + - **Collocation-based coarsening** As the standard PFASST |
| 204 | + libraries [libpfasst](https://bitbucket.org/memmett/libpfasst) |
| 205 | + and [PFASST++](https://github.com/Parallel-in-Time/PFASST) |
| 206 | + `pySDC` now offers collocation-based coarsening, |
| 207 | + i.e. the number of collocation nodes can be reduced during |
| 208 | + coarsening. Also, time-step coarsening is in preparation, but |
| 209 | + not implemented yet. |
| 210 | + - **Testing and documentation** The core, implementations and |
| 211 | + plugin packages and their subpackages are fully documented using |
| 212 | + sphinx-apidoc, see below. This documentation as well as this |
| 213 | + website are generated automatically using |
| 214 | + [Travis-CI](https://travis-ci.org/Parallel-in-Time/pySDC). Most |
| 215 | + of the code is supported by tests, mainly realized by using the |
| 216 | + tutorial as the test routines with clearly defined results. |
| 217 | + Also, projects are accompanied by tests. |
| 218 | + - Further, minor changes: |
| 219 | + - Switched to more stable barycentric interpolation for the |
| 220 | + quadrature weights |
| 221 | + - New collocation class: `EquidistantSpline_Right` |
| 222 | + for spline-based quadrature |
| 223 | + - Collocation tests are realized by generators and not by |
| 224 | + classes |
| 225 | + - Multi-step SDC (aka single-level PFASST) now works as |
| 226 | + expected |
| 227 | + - Reworked many of the internal structures for consistency and |
| 228 | + simplicity |
| 229 | + |
| 230 | +:arrow_left: [Back to main page](./README.md) |
0 commit comments