Extending functionality of parallel replica dynamics (PRD)

I wish to extend the functionality of parallel replica dynamics (PRD) so that it’s possible to simulate driven systems. The theory of PRD was extended to driven systems in “Parallel replica dynamics for driven systems: Derivation and application to strained nanotubes” [1] and used in, for example, [2] and [3].

Specifically, I’d like to be able to use fix move in a PRD simulation.

I’ve seen this where @sjplimp has some suggestions to what needs to happen:

insure that PRD does not continue to apply deformations during de-phasing
and quenching.
This would likely require some additional logic be added to prd.cpp to allow
for turning off certain fixes at certain stages

How do I programmatically turn on and off a fix?

b) write a new event detection compute which accounts for events occurring
in a system undergoing active strain. I imagine the vanilla compute we
provide could be broken by strain.

Not entirely sure, but I would imagine that the current event detection compute can still work even for a system undergoing deformation. Whether atoms have moved above the event detection threshold due to the external driving or the molecular dynamics simulation itself should not matter. Either leads to a change in state. So, if I understand correctly, I don’t think this needs to be implemented.

For driven PRD to be valid, the following is noted in [1]:

Note that one must now proceed with the first transition to occur in MD time, which requires that all replicas run at least up to the putative first transition time before it can be certified as the true first transition.

From what I understand from the documentation and the code, this requirement will be upheld if the time value is steps , but please correct me if I’m wrong. Otherwise, I’d need to make the necessary changes to the code.

I believe these are the “only” changes that needs to happen. If not, I’d like to know what else needs to change

For discussion about the science, you need to hope that @sjplimp has time to comment and advise. I can only give you the following “technical” advice (with an example from the “prd” command).

This line
adds a fix instance of the internal PRD/EVENT fix style and stores a pointer to it in the member variable fix_event.
This line deletes that fix again.
A (cleaner) alternative would be to use the fix pointer like this:

   modify->delete_fix(fix_event->id);
1 Like

Awesome, thanks for the quick reply!