radii $r_{\rm max}$ and $r_{\rm
  crit}$, and specific quadrupole moments ${\tilde{\sf M}{}^{2}}$ of each cell are computed in a recursive way from the properties of the child nodes.

A new Generic Tree-Walk Algorithm {#sec:walk}
---------------------------------

One important new feature of our code is the mutual treatment of all interactions: both interacting nodes are source and sink simultaneously. The standard tree-walk, as for instance implemented by the generic algorithm given in [@WS], as well as the the usual FMM coefficient accumulation algorithm, e.g. in [@FMMb], contain an inherent asymmetry between sinks and sources, and thus cannot be used for our purposes. Instead, our algorithm approximates the forces in two steps: an [*interaction phase*]{}, incorporating [equation [(\[coeffs\])]{}]{}, and an [*evaluation phase*]{}, incorporating [equation [(\[local-expn\])]{}]{}.

### The Interaction Phase {#sec:iact}

Because of the mutuality of the interactions, we cannot accumulate the Taylor coefficients ${\tilde{{\mbox{\boldmath$\sf C$}}}{}^{n}}$ ‘on the walk’, but each node must accumulate the coefficients of all its interactions in its own private memory. Cells need storage for ${\tilde{{\mbox{\boldmath$\sf C$}}}{}^{0}}$ to ${\tilde{{\mbox{\boldmath$\sf C$}}}{}^{3}}$, while bodies only need to accumulate ${\tilde{{\mbox{\boldmath$\sf C$}}}{}^{0}}$ and ${\tilde{{\mbox{\boldmath$\sf C$}}}{}^{1}}$, i.e. potential and acceleration. The accumulation of these coefficients is done by the following algorithm with the root cell 