-
Notifications
You must be signed in to change notification settings - Fork 35
Add support for writing rigid bodies when converting to HOOMD formats. #850
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
for more information, see https://pre-commit.ci
A remaining question to figure out: What if only some molecules are rigid in a hoomd simulation? How does the list of rigid body indices change? |
rigid_id
field to Atom
and handle rigid bodies when converting to HOOMD formats.
Was playing around with the rigid bodies in HOOMD. Got a working simulation with some rigid particles and some non-rigid particles. Looks like the body argument, shown now in line, get's a tag of -1 if the particle is not rigid. The rigid particles get the rigid ID for that particle, and the rigid COM particle, named "dimer" here, also get's that same ID. |
for more information, see https://pre-commit.ci
The simulations with rigid bodies seem to be working as expected. Here is a Gist of the notebook I'm using to run them if you want to try it. A couple thoughts.
This technically breaks the old behavior, since these methods now return 3 objects instead of 2. Also, being required to create a variable or placeholder for this in workflows that don't use rigid bodies might be awkward. We could add a bool parameter to these methods. Something like
the non-bonded force objects need to include parameters between the rigid particles and their constituent particles. Also, the neighbor list exclusions are different for rigid body simulations than those without. The gist handles these manually after calling |
I've been testing this out a bit. It works with multiple types of rigid molecules (e.g., a system with rigid benzene and rigid ethane), and it works with a mix of rigid and non-rigid molecules (e.g., rigid benzene and flexible ethane), BUT the rigid molecules have to come first in the compound/topology hierarchy. We can discuss more on a dev call, but there are still some questions. I think the gsd writers should also build the Do we make it so the So:
where or
The other thing to think about is what behavior we want in
Or, do we just return the complete forcefield as is, and leave it to the user to handle these things? In this case, we could make sure to create a thorough tutorial in the documentation, and provide some examples in a notebook. One idea is possibly having a wrapper around the hoomd writers specific to rigid body stuff, so that the existing writers stay true to form as much as possible. Maybe something like |
rigid IDs are
ints
assigned to particles/atoms that signal which rigid body they belong to which is needed when recording rigid body information in HOOMD Frames and/or GSD files. The mBuild hoomd writers handled this, but we still need to implement them here.In mBuild, rigid_id is a property at the particle level, so we can treat it the same here, at the site level.
This is a draft for now. Remaining TODOs are: