Dear all,
I am implementing a granular simulation, where the rattlers are identified and removed to test the force balance. After utilizing “compute rattlers/atom”, I label the non-rattler particles and group them together for later computing, as shown below
compute rat all rattlers/atom radius 4 10000
run 0
variable pp atom "c_rat == 0"
group nonrattler variable pp
compute f nonrattler pair/local force
compute af nonrattler property/atom fx fy fz
I have tested these commands with a sample containing 100 particles (with 99 being non-rattlers). I have confirmed that group nonrattler does contain 99 particles. However, using “compute af nonrattler …” and “aforce = lmp.numpy.extract_compute(‘af’, 1, 2)”, I will obtain an array with 100 elements, instead of 99 elements. Specifically, one element corresponding to the rattler particle is exactly zero vector.
Now I want to calculate the mean total force of non-rattler particles and mean force of neighbor pairs (should be non-rattler particles), and the termination for new packing generation is set to be
npair = lmp.extract_compute('f', 2, 0)
nonRat = lmp.get_natoms() - int(lmp.extract_compute('rat',0, 0))
For new packing generation, some thing weird happened: when system is nearly jammed, both pair force and total force of particles within nonrattlers are zero. For example,
compute af all property/atom fx fy fz
compute f all pair/local force
then
average pair force: 9.600610516428262e-07 average total force: 1.500483357014579e-07
compute af nonrattler property/atom fx fy fz
compute f all pair/local force
then
average pair force: 1.0062173713140847e-06 average total force: 0.0
compute af nonrattler property/atom fx fy fz
compute f nonrattler pair/local force
then
npair ==0, average total force: 0.0
Could you please help me solve the problem?