DEM model¶
Inputs for the discrete element method (DEM), used when solids.model = dem
(see particle options). Every type listed in
solids is a DEM type.
Contact model¶
The following input is defined with the prefix dem:
Description |
Type |
Default |
|
|---|---|---|---|
contact_model |
Contact model for particle-particle and particle-wall collisions. Options:
|
String |
lsd |
The linear spring-dashpot model takes the following inputs, defined with the
prefix dem.lsd:
Description |
Type |
Default |
|
|---|---|---|---|
spring_const.pp |
Normal spring constant :: particle to particle collisions [required] |
Real |
0 |
spring_const.pw |
Normal spring constant :: particle to wall collisions [required] |
Real |
0 |
spring_tang_fac.pp |
Tangential-to-normal spring constant factor :: particle to particle collisions |
Real |
0.2857 |
spring_tang_fac.pw |
Tangential-to-normal spring constant factor :: particle to wall collisions |
Real |
0.2857 |
damping_tang_fac.pp |
Factor relating the tangential damping coefficient to the normal damping coefficient :: particle to particle collisions |
Real |
0.5 |
damping_tang_fac.pw |
Factor relating the tangential damping coefficient to the normal damping coefficient :: particle to wall collisions |
Real |
0.5 |
The Hertz-Mindlin model [TTI92] stiffens as particles overlap. For a contact with
effective radius \(R^*\), effective mass \(m^*\) and overlap \(\delta\), the normal
force is \(\frac{4}{3} E^* \sqrt{R^*} \delta^{3/2}\) and the tangential stiffness is
\(8 G^* \sqrt{R^* \delta}\), where \(E^*\) and \(G^*\) are the effective Young’s and
shear moduli of the two materials. The normal damping is set from the restitution coefficient
so that it holds at every impact velocity. The tangential stiffness and damping act only with
dem.tan_history. Each contact uses its own particles’ radii and masses, so particles of
different sizes within a type are handled exactly. The model takes the following inputs, defined
with the prefix dem.hertz:
Description |
Type |
Default |
|
|---|---|---|---|
youngs_modulus.[dem_solid] |
Young’s modulus of the type’s particles (Pa) [required] |
Real |
None |
youngs_modulus.wall |
Young’s modulus of the walls (Pa) [required] |
Real |
None |
poisson_ratio.[dem_solid] |
Poisson ratio of the type’s particles, greater than -1 and at most 0.5 [required] |
Real |
None |
poisson_ratio.wall |
Poisson ratio of the walls, greater than -1 and at most 0.5 [required] |
Real |
None |
damping_tang_fac.pp |
Factor relating the tangential damping coefficient to the normal damping coefficient :: particle to particle collisions |
Real |
0.5 |
damping_tang_fac.pw |
Factor relating the tangential damping coefficient to the normal damping coefficient :: particle to wall collisions |
Real |
0.5 |
The solids time step is set differently by the two models: from the collision time with lsd,
and from the Rayleigh time with hertz (see DEM time step).
Restitution coefficients¶
The following inputs use the solids type names from solids to define restitution
coefficients and are defined with the prefix dem.restitution_coeff. They must be
defined for every solid-solid and solid-wall combination.
Description |
Type |
Default |
|
|---|---|---|---|
[dem_solid].[dem_solid2] |
Specifies the restitution coefficient between DEM solids.
Order is not important and this could be defined as
|
Real |
0 |
[dem_solid].wall |
Specifies the restitution coefficient between solid and the wall.
Order is not important and this could be defined as
|
Real |
0 |
Friction and tangential history¶
The following inputs apply to every contact model and are defined with the prefix dem:
Description |
Type |
Default |
|
|---|---|---|---|
friction_coeff.pp |
Friction coefficient :: particle to particle collisions [required] |
Real |
0 |
friction_coeff.pw |
Friction coefficient :: particle to wall collisions [required] |
Real |
0 |
tan_history |
Include tangential history force in the collision model. |
Bool |
false |
tan_history.max_contacts |
Maximum number of contacts per particle tracked at any point when tangential history is enabled. |
Int |
10 |
rolling_friction |
Rolling friction model [ACRO11, BVB+19, WK12, ZWY+99] Options:
|
String |
None |
rolling_friction.coefficient |
Rolling friction coefficient when using a rolling friction model |
Real |
0 |
Example¶
Below is an example for specifying the inputs for two DEM solids.
solids = sand char
solids.model = dem
dem.contact_model = lsd
dem.lsd.spring_const.pp = 100.0
dem.lsd.spring_const.pw = 100.0
dem.lsd.spring_tang_fac.pp = 0.2857
dem.lsd.spring_tang_fac.pw = 0.2857
dem.lsd.damping_tang_fac.pp = 0.5
dem.lsd.damping_tang_fac.pw = 0.5
dem.friction_coeff.pp = 0.25
dem.friction_coeff.pw = 0.15
dem.restitution_coeff.sand.sand = 0.85
dem.restitution_coeff.sand.char = 0.88
dem.restitution_coeff.char.char = 0.90
dem.restitution_coeff.sand.wall = 0.85
dem.restitution_coeff.char.wall = 0.89
The same solids with the Hertz-Mindlin model:
dem.contact_model = hertz
dem.hertz.youngs_modulus.sand = 7.0e10
dem.hertz.youngs_modulus.char = 5.0e9
dem.hertz.youngs_modulus.wall = 2.0e11
dem.hertz.poisson_ratio.sand = 0.25
dem.hertz.poisson_ratio.char = 0.3
dem.hertz.poisson_ratio.wall = 0.3
The friction and restitution coefficients are given as for lsd.
Implicit drag¶
By default (solids.momentum.update = explicit), the fluid-particle drag force is applied
explicitly to particles,
where \(u_p\) is the p-th particle velocity at the indicated time level, \(\beta^n\) is the drag coefficient, \(u_f^{n+1}\) is the fluid velocity, \(\mathcal{F}_p\) are all non-drag forces (e.g., gravitational, buoyancy, collision etc.), and \(m_p\) is particle mass. Terms exist at different time levels due in part to how the fluid and particle models are coupled and partly because particles typically sub-step in time. Specifically, a time step advances the fluid from \(t^n\) to \(t^{n+1}\), then particles take multiple smaller time steps to traverse the same total time. In the above equation, prime markers differentiate quantities updated at each DEM sub-step.
The updated particle velocity, \(u_p^{n^{\prime}+1}\), is substituted into the drag expression when
solids.momentum.update = implicit.
By using the updated velocity, the drag force computed for the fluid and particles is inconsistent, and interphase momentum is not conserved. However, implicit drag may be needed for numerical stability when the particle density is much less than the fluid (such as bubbles). The implicit update is required when virtual mass is included, and the virtual mass coefficient is added to the particle mass in the denominator.