if you want to track the positions of the planets in the solar system over
time, then deal.II is clearly not your right tool. On the other hand, if
this evolution is due to the interaction with the solution of partial differential
-equation, then deal.II has support for you.
+equation, or if having a mesh to determine which particles interact
+with others (such as in the
+[smoothed particle hydrodynamics (SMH)](https://en.wikipedia.org/wiki/Smoothed-particle_hydrodynamics)
+method), then deal.II has support for you.
The case we will consider here is how electrically charged particles move through
an electric field. As motivation, we will consider
This corresponds to a simple forward-Euler time discretization -- a method of
first order accuracy in the time step size $\Delta t$ that we know we should
avoid because we can do better. Rather, one might want to consider a scheme such
-as the leapfrog scheme, or even better a Runge-Kutta integrator.
+as the
+[leapfrog scheme](https://en.wikipedia.org/wiki/Leapfrog_integration)
+or more generally
+[symplectic integrators](https://en.wikipedia.org/wiki/Symplectic_integrator)
+such as the
+[Verlet scheme](https://en.wikipedia.org/wiki/Verlet_integration).
<h4> Parallelization </h4>
// @ref GlossBoundaryIndicator "boundary indicators"
// for the various parts of the geometry, as well as the physical properties
// of electrons and other specifics of the setup we use here.
+//
+// For the boundary indicators, let us start enumerating at some
+// random value 101. The principle here is to use numbers that are
+// *uncommon*. If there are pre-defined boundary indicators previously
+// set by the `GridGenerator` functions, they will likely be small
+// integers starting from zero, but not in this rather randomly chosen
+// range. Using numbers such as those below avoids the possibility for
+// conflicts, and also reduces the temptation to just spell these
+// numbers out in the program (because you will probably never
+// remember which is which, whereas you might have been tempted if
+// they had started at 0).
namespace Step19
{
namespace BoundaryIds
// each particle has and that the Particles::ParticleHandler class
// automatically and always makes sure are available; in particular,
// these are the current location of a particle, the cell it is on,
- // and a particle's ID.
+ // it's reference location within that cell, and the particle's ID.
//
// The only other variable of interest is `time`, an object of type
// DiscreteTime. It keeps track of the current time we are in a