Skip to content

Commit 1c235f9

Browse files
authored
Merge pull request #257 from tlunet/contrib-2
Second draft for contribution guide
2 parents eadf81c + eee723c commit 1c235f9

22 files changed

+6829
-250
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,3 +152,6 @@ Temporary Items
152152

153153
# jupyter
154154
.ipynb_checkpoints
155+
156+
# VSCode
157+
.vscode

CHANGELOG.md

Lines changed: 230 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,230 @@
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

Comments
 (0)