Description
Description
Description
Currently, HOOMD-blue 5.1.0 does not provide functionality to apply a constant force directly to walls. This feature is essential for the following DEM simulation use cases:
- Simulating compressive deformation of particle systems under constant pressure in the Z direction
- Modeling interactions where forces applied to walls move them until force equilibrium is reached with particles
- Simulating realistic physical compression processes (applying constant force rather than constant displacement)
At present, we can only apply forces directly to particles or change the box size over time (using BoxResize), but these approaches do not accurately model the physics of applying constant forces to walls.
Proposed solution
-
Add a mechanism to apply forces to
hoomd.wall.WallGeometry
classes (Plane, Sphere, Cylinder, etc.):- Introduce properties to set force vectors on wall objects (e.g.,
wall.force = (0, 0, -1000)
) - Enable the physics engine to dynamically update wall positions based on applied forces
- Introduce properties to set force vectors on wall objects (e.g.,
-
Improve the interface for handling wall-particle interactions:
- Calculate the balance between forces applied to walls and repulsive forces from particles
- Update wall positions as a result of these forces
- Include damping elements to prevent oscillations in wall movement
Additional context
This functionality would be valuable for DEM (Discrete Element Method) simulations, material compression tests, soil mechanics, and various fields studying particle system responses to pressure. Currently, we must resort to applying forces directly to particles as a workaround, but this does not provide physically accurate modeling.
I have attempted to implement test cases for this functionality but was unable to apply forces directly to walls due to API limitations. Any guidance on developing custom components to achieve this would also be greatly appreciated.
Thank you for considering this feature request. It would significantly enhance the capabilities of HOOMD-blue for realistic physical simulations.
Proposed solution
- User-friendly API example:
# Example code wall = hoomd.wall.Plane(origin=(0, 0, L/2), normal=(0, 0, -1)) wall_force = hoomd.wall.ConstantForce(walls=[wall]) wall_force.forces['wall_0'] = (0, 0, -pressure * area) # Force due to pressure
Additional context
No response