I wanted to share something I've done that may be of relevance. I'm up for critique, as it's quite a big claim. If it is worth it, then I wonder if Michael could consider adding in a toggleable feature that's officially built into the framework?
First off, let me describe the set-up. I am simulating 899 bunches in Diamond-II, with an ideal Harmonic Cavity, and I'm interested in driving one bunch (and later, a few). I of course want to understand what the resulting effect of driving this one bunch is on the bunch itself. However, I could imagine that other researchers may only need the information, for whatever reason, from one bunch as it might provide enough of an explanation for their research questions.
It's nothing complicated, I literally just disable the processing of the short range impedance for any bunch that I'm not interested in via an IF statement. For 20k turns, ILMatrix, 1 thread, with 1250*899 particles I get 100:05:19 vs 08:53:37. Obviously it cannot be identical to the normal simulation, but as an example here are two meaningful quantities I care for in my work:
For the speedup gained, I can't seem justify running the full simulation. Hence, constructive critique wanted!

(The code changes I made are in the zip files; I should technically note that the 'pristine' run used a well-tested modification to RFDF to enable me to drive only the particles I wanted. If there was no coupling between the bunches - IE: they are independent - then you can see how this change is identical to running an unmodified RFDF. With coupling, it obviously becomes important that if I only want to drive one bunch, I only drive one bunch!
These changes for the impedance files is pretty much just line 147 and line 135 in zlongit.c and ztransverse.c respectively)