vector acceleration (particle, ensemble) {
if singleton(ensemble)
acc = newton_acc (particle, theelement(ensemble))
else if
( diameter(ensemble) / distance(particle, centroid(ensemble))
< theta )
acc = newton_acc (particle, centroid(ensemble))
else foreach(e, ensemble,
acc = sum_vector (acc, acceleration (particle, e)) );
return acc;
}