Confusion Regarding Damping Coefficient in Hertz Model

I have created a two-atom model to test the collision time and restitution coefficient between particles and used the following parameters:

  • Particle diameter: 0.0001 m
  • Particle density: 2500 kg/m³
  • Contact style: pair_style granular
  • Contact parameters:
    pair_coeff * * hertz kn gamma_n tangential linear_history kt gamma_t 0
    Where:
    kn = 37e9
    kt = 45e9
    gamman = 95468
    gammat = 47734

For the simulation, I fixed one atom and applied an initial velocity of 10 m/s to the other atom:

velocity nve_group set 0 0 10

From the simulation results, the collision time is 2.8e-7s, and the restitution coefficient (post-collision velocity/initial velocity) is 1.

However, after performing an integration using the following equation (derived from the Hertz contact model):

y1, y2 = y
dydt = [y2, -E * np.sqrt(2 * deff) / (3 * meff * (1 - v0**2)) * (y1**(3/2) + 3/2 * A * np.sqrt(y1) * y2)]

where y1 is displacement and y2 is velocity, I calculated the collision time to be 2.3e-07s and the restitution coefficient to be 0.5.

for the granular simulation, I only get an approximate restitution coefficient of 0.5 after scaling the Damping Coefficient by a factor of 30,000,000.

Can anyone help me identify what might be wrong in my calculations or if there is a misunderstanding of the concepts involved?

The input file and the result file


#! bin/bash
# file header  
atom_style  sphere
atom_modify	map array
dimension   3    
boundary	 p p f
newton		 off
comm_modify	 vel yes
units		 si     

region		 reg block 0 0.001 0 0.001 -0.0001 0.0005 units box 
create_box	 1 reg
neighbor	 0.0001 bin
neigh_modify every 1 delay 0     

pair_style gran/hertz/history 36630036630.03663 45248868778.28054 95468.99737449684 47734.49868724842 0.5 1
pair_coeff * *

create_atoms 1 single 0.0 0.0 0.0004
create_atoms 1 single 0.0 0.0 0.0001

group fixed id 1
group nve_group id 2

velocity        fixed zero linear
velocity        fixed zero angular

velocity nve_group set 0 0 10

timestep 2.3430273328382426e-09

set group all diameter 0.0001 density 2500

fix integr nve_group nve/sphere

compute 1 nve_group com
fix		brlc nve_group aveforce NULL NULL NULL

thermo_style custom step atoms f_brlc[3] c_1[3]
thermo 17
thermo_modify lost ignore norm no

shell mkdir post
shell mkdir restart

variable m_time equal time
variable m_atoms equal atoms

fix ave_data all ave/time 1 10 10 v_m_time f_brlc[3] c_1[3] file plate.txt title1 "" title2 "step time nf y"

dump dmp all cfg 1707 post/dump*.cfg mass type xs ys zs id type x y z vx vy vz fx fy fz radius 

run 1

run 17071 upto             

granular_model
is attached.
integration

I can’t comment on what might be wrong with your equation (nor am I quite sure what the variables in it are), but I’ll point out that your input script is actually using pair gran/hertz/history not pair granular. Are you sure it’s applying the damping forces you expect it to (viscoelastic vs. mass_velocity)?

Pair granular also now has a coeff_restitution damping option which lets you specify the coefficient of restitution using a Tsuji form of damping forces. Maybe this might be more helpful?

Thank you for your reminder. It made me re-examine my model, and I found that I had some misunderstandings about certain parameters in my model: the second parameter of linear_history should be the multiplier for the normal damping. However, the issue still persists. In fact, the two definitions I am using are equivalent:

pair_style granular
pair_coeff * * hertz {kn} {gamman} tangential linear_history {kt} 0.5 0.5
by default damping = viscoelastic

And the Hertz model, where gammat = 0.5 * gamman

pair_style gran/hertz/history {kn} {kt} {gamman} {gammat} 0.5 1
pair_coeff * *

According to the documentation, they correspond to the following equation,

According to the above equation, I saw the following integral equation in the paper to calculate the collision time and recovery coefficient
integration equation
A

My expectation is that the results calculated by LAMMPS should be consistent with the results I compute using the equations.

But as mentioned above, when I take the following parameters:

kn kt gamma_n gamma_t
36630036630 45248868778 95468 47734

The calculated result of the equation is e=0.5, while the simulated result is e=1.0

What is the paper you are referring to?

Your expression looks similar (but maybe not exact) to Eq. 18 in Brilliantov et al. 1996 so I’m guessing you mean that paper. If so, why do you set his viscous constants \eta_{1/2} equal to the LAMMPS damping constants \gamma_{n/t}?

If it’s purely normal contact, wouldn’t the dynamics be independent of \gamma_t?

Thank you for the reminder. It is indeed an issue with the integral equation. This is equation (12) from the paper 10.1029/2019JB019016, but it uses the same symbols, gamma_n and gamma_t, as the contact force equations (8) and (9), which has indeed caused confusion.

I noticed that the coeff_restitution model you mentioned allows specifying the restitution coefficient, and I have also tested this model. I found that it achieves the same restitution coefficient at different speeds, but the measured restitution coefficient is usually higher than the specified one. Is this normal?
damping coefficient

For the paper you cited, you might try contacting the authors to figure out variables.

For the coeff_restitution model, you might be getting a small shift because you’re only integrating one particle’s position which could affect dynamics. Namely, one particle effectively has infinite mass which is not accounted for in the calculation of the damping coefficient. There is an example script included in LAMMPS, examples/granular/in.restitution, which might be helpful to compare to.