Schematic view of the tree code (left) and FMM (right). The tree code approximates the force from a source particle (blue star) at a sink position (red star) using the P2M and M2M kernels (green arrows) to compute the multipoles at the cell centres (blue circles) followed by the M2P kernel (pink arrow). The P2M and M2M kernels are called once per source particle and cell, respectively, while the M2P kernel is called many times for each sink position. FMM replaces many calls to the M2P kernel by a single call to the M2L kernel (red arrow) followed by the L2L and L2P kernels (green arrows). Again, the L2L and L2P kernels are called once per sink cell and particle, respectively, but a single M2L kernel replaces many M2P kernels of the tree code, because it accounts for all sink positions within the sink cell.