GROMACS version: 2024-dev-20250310-fb7d05abbd-dirty-unknown
Starting commit: Enable multisim for modular simulator (84a5f710) · Commits · GROMACS / GROMACS · GitLab
I’m implementing the path MD algorithm in GROMACS (see <A href="https://gitlab.com/gromacs/gromacs/-/issues/4571">Gromacs issue #4571 </A> - HackMD). The algorithm computes the product of the Hessian of potential and a position-like vector via central differences. For this, I need to call do_force
twice (sequentially) additionally in every step. The parameters here are basically x + e and x - e where x is the positions vector and e is a perturbation.
I see that t_forcerec
is a mutable parameter to do_force
, so I decided to clone it, to be sure. For this, I’m basically calling the same init. functions in runner.cpp. These are (apart from some constructors) init_forcerec
and init_nb_verlet
. I see that the latter creates an ExclusionChecker
that adds a subscriber to ObservablesReducerBuilder
. Since I have no idea what these structures do exactly (apart from what Perplexity could tell me), I was wondering what dependencies and “handshakes” I’m omitting to acknowledge.
On a side note, is it possible to call do_force
twice for the central differences computation using the same t_forcerec
knowing that the perturbation is “small”? Here, it would be interesting to know how to handle the domain decomposition (re-partitioning, neighbour search) aspect as well.
I would be very grateful for any ideas, guidance, tips etc that you could give me regarding the matter of “cloning the t_forcerec” or generally the problem at hand.
Looking forward to hearing from you, thanks in advance,
Nitin Malapally