Looks like this is something I might be implement to do as a nice exercise. The "hmc" code is pretty much as simple as I suspected, and provides me some nice guidance for good ways to implement saving positions and forces between HMC steps.
A question I'm wondering regarding the implementation:
The "hmc" code I was sent only allows for MD moves to be accepted/rejected per the MC rules. However, I think it'd be best to allow the user the flexibility to add on other MC moves to that list, e.g., to be able to do translate, rotate, insert/delete, and MD moves, or a subset of their choice. The former moves are already implemented in "fix gcmc" and I think it wouldn't be clean if MC moves are implemented twice in two different fixes.
So should HMC be implemented as an extension to the existing "fix gcmc"? In my opinion, "fix gcmc" is somewhat of a misnomer, since that fix can also be used to do just translation/rotation MC as well. So to me, "fix gcmc" is just an umbrella fix for any types of MC moves. If we define it that way, it makes sense for that umbrella to also allow MD as an additional type of MC move.
That said, I'd also understand if the "fix gcmc" implementer wanted me to keep my hands off.