Merge pull request #962 from ndtrung81/body-dem

Discrete element models for the BODY package
This commit is contained in:
Steve Plimpton
2018-07-20 14:37:41 -06:00
committed by GitHub
43 changed files with 9777 additions and 67 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

View File

@ -0,0 +1,13 @@
\documentstyle[12pt]{article}
\begin{document}
\begin{eqnarray*}
F_n &=& k_n \delta_n - c_n v_n, \qquad \delta_n \le 0 \\
&=& -k_{na} \delta_n - c_n v_n, \qquad 0 < \delta_n \le r_c \\
&=& 0 \qquad \qquad \qquad \qquad \delta_n > r_c \\
F_t &=& \mu k_n \delta_n - c_t v_t, \qquad \delta_n \le 0 \\
&=& 0 \qquad \qquad \qquad \qquad \delta_n > 0
\end{eqnarray*}
\end{document}

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

View File

@ -678,6 +678,8 @@ USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT.
"vector"_fix_vector.html,
"viscosity"_fix_viscosity.html,
"viscous"_fix_viscous.html,
"wall/body/polygon"_fix_wall_body_polygon.html,
"wall/body/polyhedron"_fix_wall_body_polyhedron.html,
"wall/colloid"_fix_wall.html,
"wall/gran"_fix_wall_gran.html,
"wall/gran/region"_fix_wall_gran_region.html,
@ -930,7 +932,9 @@ KOKKOS, o = USER-OMP, t = OPT.
"airebo (oi)"_pair_airebo.html,
"airebo/morse (oi)"_pair_airebo.html,
"beck (go)"_pair_beck.html,
"body"_pair_body.html,
"body/nparticle"_pair_body_nparticle.html,
"body/rounded/polygon"_pair_body_rounded/polygon.html,
"body/rounded/polyhedron"_pair_body_rounded/polyhedron.html,
"bop"_pair_bop.html,
"born (go)"_pair_born.html,
"born/coul/dsf"_pair_born.html,

View File

@ -27,18 +27,16 @@ styles supported by LAMMPS are as follows. The name in the first
column is used as the {bstyle} argument for the "atom_style
body"_atom_style.html command.
{nparticle} | rigid body with N sub-particles |
{rounded/polygon} | 2d convex polygon with N vertices :tb(c=2,s=|)
{nparticle} : rigid body with N sub-particles
{rounded/polygon} : 2d polygons with N vertices
{rounded/polyhedron} : 3d polyhedra with N vertices, E edges and F faces :tb(s=:)
The body style determines what attributes are stored for each body and
thus how they can be used to compute pairwise body/body or
bond/non-body (point particle) interactions. More details of each
style are described below.
NOTE: The rounded/polygon style listed in the table above and
described below has not yet been relesed in LAMMPS. It will be soon.
We hope to add more styles in the future. See "Section
More styles may be added in the future. See "Section
10.12"_Section_modify.html#mod_12 for details on how to add a new body
style to the code.
@ -61,7 +59,7 @@ the simple particles.
By contrast, when body particles are used, LAMMPS treats an entire
body as a single particle for purposes of computing pairwise
interactions, building neighbor lists, migrating particles between
processors, outputting particles to a dump file, etc. This means that
processors, output of particles to a dump file, etc. This means that
interactions between pairs of bodies or between a body and non-body
(point) particle need to be encoded in an appropriate pair style. If
such a pair style were to mimic the "fix rigid"_fix_rigid.html model,
@ -72,17 +70,20 @@ single body/body interaction was computed.
Thus it only makes sense to use body particles and develop such a pair
style, when particle/particle interactions are more complex than what
the "fix rigid"_fix_rigid.html command can already calculate. For
example, if particles have one or more of the following attributes:
example, consider particles with one or more of the following
attributes:
represented by a surface mesh
represented by a collection of geometric entities (e.g. planes + spheres)
deformable
internal stress that induces fragmentation :ul
then the interaction between pairs of particles is likely to be more
complex than the summation of simple sub-particle interactions. An
example is contact or frictional forces between particles with planar
surfaces that inter-penetrate.
For these models, the interaction between pairs of particles is likely
to be more complex than the summation of simple pairwise interactions.
An example is contact or frictional forces between particles with
planar surfaces that inter-penetrate. Likewise, the body particle may
store internal state, such as a stress tensor used to compute a
fracture criterion.
These are additional LAMMPS commands that can be used with body
particles of different styles
@ -130,7 +131,9 @@ x1 y1 z1
...
xN yN zN :pre
N is the number of sub-particles in the body particle. M = 6 + 3*N.
where M = 6 + 3*N, and N is the number of sub-particles in the body
particle.
The integer line has a single value N. The floating point line(s)
list 6 moments of inertia followed by the coordinates of the N
sub-particles (x1 to zN) as 3N values. These values can be listed on
@ -175,15 +178,18 @@ The {bflag2} argument is ignored.
[Specifics of body style rounded/polygon:]
NOTE: Aug 2016 - This body style has not yet been added to LAMMPS.
The info below is a placeholder.
The {rounded/polygon} body style represents body particles as a 2d
polygon with a variable number of N vertices. This style can only be
used for 2d models; see the "boundary"_boundary.html command. See the
"pair_style body/rounded/polygon" doc page for a diagram of two
squares with rounded circles at the vertices. Special cases for N = 1
(circle) and N = 2 (rod with rounded ends) can also be specified.
The {rounded/polygon} body style represents body particles as a convex
polygon with a variable number N > 2 of vertices, which can only be
used for 2d models. One example use of this body style is for 2d
discrete element models, as described in "Fraige"_#Fraige. Similar to
body style {nparticle}, the atom_style body command for this body
style takes two additional arguments:
One use of this body style is for 2d discrete element models, as
described in "Fraige"_#body-Fraige.
Similar to body style {nparticle}, the atom_style body command for
this body style takes two additional arguments:
atom_style body rounded/polygon Nmin Nmax
Nmin = minimum # of vertices in any body in the system
@ -203,17 +209,20 @@ x1 y1 z1
...
xN yN zN
i j j k k ...
radius :pre
diameter :pre
N is the number of vertices in the body particle. M = 6 + 3*N + 2*N +
1. The integer line has a single value N. The floating point line(s)
where M = 6 + 3*N + 2*N + 1, and N is the number of vertices in the
body particle.
The integer line has a single value N. The floating point line(s)
list 6 moments of inertia followed by the coordinates of the N
vertices (x1 to zN) as 3N values, followed by 2N vertex indices
corresponding to the end points of the N edges, followed by a single
radius value = the smallest circle encompassing the polygon. That
last value is used to facilitate the body/body contact detection.
These floating-point values can be listed on as many lines as you
wish; see the "read_data"_read_data.html command for more details.
vertices (x1 to zN) as 3N values (with z = 0.0 for each), followed by
2N vertex indices corresponding to the end points of the N edges,
followed by a single diameter value = the rounded diameter of the
circle that surrounds each vertex. The diameter value can be different
for each body particle. These floating-point values can be listed on
as many lines as you wish; see the "read_data"_read_data.html command
for more details.
The 6 moments of inertia (ixx,iyy,izz,ixy,ixz,iyz) should be the
values consistent with the current orientation of the rigid body
@ -225,8 +234,11 @@ from the center-of-mass of the body particle. The center-of-mass
position of the particle is specified by the x,y,z values in the
{Atoms} section of the data file.
For example, the following information would specify a square
particles whose edge length is sqrt(2):
For example, the following information would specify a square particle
whose edge length is sqrt(2) and rounded diameter is 1.0. The
orientation of the square is aligned with the xy coordinate axes which
is consistent with the 6 moments of inertia: ixx iyy izz ixy ixz iyz =
1 1 4 0 0 0. Note that only Izz matters in 2D simulations.
3 1 27
4
@ -235,12 +247,178 @@ particles whose edge length is sqrt(2):
-0.7071 0.7071 0
0.7071 0.7071 0
0.7071 -0.7071 0
0 1 1 2 2 3 3 0
0 1
1 2
2 3
3 0
1.0 :pre
A rod in 2D, whose length is 4.0, mass 1.0, rounded at two ends
by circles of diameter 0.5, is specified as follows:
1 1 13
2
1 1 1.33333 0 0 0
-2 0 0
2 0 0
0.5 :pre
A disk, whose diameter is 3.0, mass 1.0, is specified as follows:
1 1 10
1
1 1 4.5 0 0 0
0 0 0
3.0 :pre
The "pair_style body/rounded/polygon"_pair_body_rounded_polygon.html
command can be used with this body style to compute body/body
interactions.
interactions. The "fix wall/body/polygon"_fix_wall_body_polygon.html
command can be used with this body style to compute the interaction of
body particles with a wall.
:line
[Specifics of body style rounded/polyhedron:]
The {rounded/polyhedron} body style represents body particles as a 3d
polyhedron with a variable number of N vertices, E edges and F faces.
This style can only be used for 3d models; see the
"boundary"_boundary.html command. See the "pair_style
body/rounded/polygon" doc page for a diagram of a two 2d squares with
rounded circles at the vertices. A 3d cube with rounded spheres at
the 8 vertices and 12 rounded edges would be similar. Special cases
for N = 1 (sphere) and N = 2 (rod with rounded ends) can also be
specified.
This body style is for 3d discrete element models, as described in
"Wang"_#body-Wang.
Similar to body style {rounded/polygon}, the atom_style body command
for this body style takes two additional arguments:
atom_style body rounded/polyhedron Nmin Nmax
Nmin = minimum # of vertices in any body in the system
Nmax = maximum # of vertices in any body in the system :pre
The Nmin and Nmax arguments are used to bound the size of data
structures used internally by each particle.
When the "read_data"_read_data.html command reads a data file for this
body style, the following information must be provided for each entry
in the {Bodies} section of the data file:
atom-ID 3 M
N E F
ixx iyy izz ixy ixz iyz
x1 y1 z1
...
xN yN zN
0 1
1 2
2 3
...
0 1 2 -1
0 2 3 -1
...
1 2 3 4
diameter :pre
where M = 6 + 3*N + 2*E + 4*F + 1, and N is the number of vertices in
the body particle, E = number of edges, F = number of faces.
The integer line has three values: number of vertices (N), number of
edges (E) and number of faces (F). The floating point line(s) list 6
moments of inertia followed by the coordinates of the N vertices (x1
to zN) as 3N values, followed by 2N vertex indices corresponding to
the end points of the E edges, then 4*F vertex indices defining F
faces. The last value is the diameter value = the rounded diameter of
the sphere that surrounds each vertex. The diameter value can be
different for each body particle. These floating-point values can be
listed on as many lines as you wish; see the
"read_data"_read_data.html command for more details. Because the
maxmimum vertices per face is hard-coded to be 4
(i.e. quadrilaterals), faces with more than 4 vertices need to be
split into triangles or quadrilaterals. For triangular faces, the
last vertex index should be set to -1.
The ordering of the 4 vertices within a face should follow
the right-hand rule so that the normal vector of the face points
outwards from the center of mass.
The 6 moments of inertia (ixx,iyy,izz,ixy,ixz,iyz) should be the
values consistent with the current orientation of the rigid body
around its center of mass. The values are with respect to the
simulation box XYZ axes, not with respect to the principal axes of the
rigid body itself. LAMMPS performs the latter calculation internally.
The coordinates of each vertex are specified as its x,y,z displacement
from the center-of-mass of the body particle. The center-of-mass
position of the particle is specified by the x,y,z values in the
{Atoms} section of the data file.
For example, the following information would specify a cubic particle
whose edge length is 2.0 and rounded diameter is 0.5.
The orientation of the cube is aligned with the xyz coordinate axes
which is consistent with the 6 moments of inertia: ixx iyy izz ixy ixz
iyz = 0.667 0.667 0.667 0 0 0.
1 3 79
8 12 6
0.667 0.667 0.667 0 0 0
1 1 1
1 -1 1
-1 -1 1
-1 1 1
1 1 -1
1 -1 -1
-1 -1 -1
-1 1 -1
0 1
1 2
2 3
3 0
4 5
5 6
6 7
7 4
0 4
1 5
2 6
3 7
0 1 2 3
4 5 6 7
0 1 5 4
1 2 6 5
2 3 7 6
3 0 4 7
0.5 :pre
A rod in 3D, whose length is 4.0, mass 1.0 and rounded at two ends
by circles of diameter 0.5, is specified as follows:
1 1 13
2
0 1.33333 1.33333 0 0 0
-2 0 0
2 0 0
0.5 :pre
A sphere whose diameter is 3.0 and mass 1.0, is specified as follows:
1 1 10
1
0.9 0.9 0.9 0 0 0
0 0 0
3.0 :pre
The "pair_style
body/rounded/polhedron"_pair_body_rounded_polyhedron.html command can
be used with this body style to compute body/body interactions. The
"fix wall/body/polyhedron"_fix_wall_body_polygon.html command can be
used with this body style to compute the interaction of body particles
with a wall.
:line
For output purposes via the "compute
body/local"_compute_body_local.html and "dump local"_dump.html
@ -257,10 +435,10 @@ the body particle itself. These values are calculated using the
current COM and orientation of the body particle.
For images created by the "dump image"_dump_image.html command, if the
{body} keyword is set, then each body particle is drawn as a convex
polygon consisting of N line segments. Note that the line segments
are drawn between the N vertices, which does not correspond exactly to
the physical extent of the body (because the "pair_style
{body} keyword is set, then each body particle is drawn as a polygon
consisting of N line segments. Note that the line segments are drawn
between the N vertices, which does not correspond exactly to the
physical extent of the body (because the "pair_style
rounded/polygon"_pair_body_rounded_polygon.html defines finite-size
spheres at those point and the line segments between the spheres are
tangent to the spheres). The drawn diameter of each line segment is
@ -269,6 +447,10 @@ determined by the {bflag1} parameter for the {body} keyword. The
:line
:link(Fraige)
:link(body-Fraige)
[(Fraige)] F. Y. Fraige, P. A. Langston, A. J. Matchett, J. Dodds,
Particuology, 6, 455 (2008).
:link(body-Wang)
[(Wang)] J. Wang, H. S. Yu, P. A. Langston, F. Y. Fraige, Granular
Matter, 13, 1 (2011).

View File

@ -0,0 +1,104 @@
"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c
:link(lws,http://lammps.sandia.gov)
:link(ld,Manual.html)
:link(lc,Section_commands.html#comm)
:line
fix wall/body/polygon command :h3
[Syntax:]
fix ID group-ID wall/body/polygon k_n c_n c_t wallstyle args keyword values ... :pre
ID, group-ID are documented in "fix"_fix.html command :ulb,l
wall/body/polygon = style name of this fix command :l
k_n = normal repulsion strength (force/distance or pressure units) :l
c_n = normal damping coefficient (force/distance or pressure units) :l
c_t = tangential damping coefficient (force/distance or pressure units) :l
wallstyle = {xplane} or {yplane} or {zplane} or {zcylinder} :l
args = list of arguments for a particular style :l
{xplane} or {yplane} args = lo hi
lo,hi = position of lower and upper plane (distance units), either can be NULL)
{zcylinder} args = radius
radius = cylinder radius (distance units) :pre
zero or more keyword/value pairs may be appended to args :l
keyword = {wiggle} :l
{wiggle} values = dim amplitude period
dim = {x} or {y} or {z}
amplitude = size of oscillation (distance units)
period = time of oscillation (time units) :pre
:ule
[Examples:]
fix 1 all wall/body/polygon 1000.0 20.0 5.0 xplane -10.0 10.0
[Description:]
This fix is for use with 2d models of body particles of style
{rounded/polygon}. It bounds the simulation domain with wall(s). All
particles in the group interact with the wall when they are close
enough to touch it. The nature of the interaction between the wall
and the polygon particles is the same as that between the polygon
particles themselves, which is similar to a Hookean potential. See
"Section 6.14"_Section_howto.html#howto_14 of the manual and the
"body"_body.html doc page for more details on using body particles.
The parameters {k_n}, {c_n}, {c_t} have the same meaning and units as
those specified with the "pair_style
body/rounded/polygon"_pair_body_rounded_polygon.html command.
The {wallstyle} can be planar or cylindrical. The 2 planar options
specify a pair of walls in a dimension. Wall positions are given by
{lo} and {hi}. Either of the values can be specified as NULL if a
single wall is desired. For a {zcylinder} wallstyle, the cylinder's
axis is at x = y = 0.0, and the radius of the cylinder is specified.
Optionally, the wall can be moving, if the {wiggle} keyword is
appended.
For the {wiggle} keyword, the wall oscillates sinusoidally, similar to
the oscillations of particles which can be specified by the "fix
move"_fix_move.html command. This is useful in packing simulations of
particles. The arguments to the {wiggle} keyword specify a dimension
for the motion, as well as it's {amplitude} and {period}. Note that
if the dimension is in the plane of the wall, this is effectively a
shearing motion. If the dimension is perpendicular to the wall, it is
more of a shaking motion. A {zcylinder} wall can only be wiggled in
the z dimension.
Each timestep, the position of a wiggled wall in the appropriate {dim}
is set according to this equation:
position = coord + A - A cos (omega * delta) :pre
where {coord} is the specified initial position of the wall, {A} is
the {amplitude}, {omega} is 2 PI / {period}, and {delta} is the time
elapsed since the fix was specified. The velocity of the wall is set
to the derivative of this expression.
[Restart, fix_modify, output, run start/stop, minimize info:]
None of the "fix_modify"_fix_modify.html options are relevant to this
fix. No global or per-atom quantities are stored by this fix for
access by various "output commands"_Section_howto.html#howto_15. No
parameter of this fix can be used with the {start/stop} keywords of
the "run"_run.html command. This fix is not invoked during "energy
minimization"_minimize.html.
[Restrictions:]
This fix is part of the BODY package. It is only enabled if LAMMPS
was built with that package. See the "Making
LAMMPS"_Section_start.html#start_3 section for more info.
Any dimension (xy) that has a wall must be non-periodic.
[Related commands:]
"atom_style body"_atom_style.html, "pair_style
body/rounded/polygon"_pair_body_rounded_polygon.html
[Default:] none

View File

@ -0,0 +1,103 @@
"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c
:link(lws,http://lammps.sandia.gov)
:link(ld,Manual.html)
:link(lc,Section_commands.html#comm)
:line
fix wall/body/polyhedron command :h3
[Syntax:]
fix ID group-ID wall/body/polyhedron k_n c_n c_t wallstyle args keyword values ... :pre
ID, group-ID are documented in "fix"_fix.html command :ulb,l
wall/body/polyhedron = style name of this fix command :l
k_n = normal repulsion strength (force/distance units or pressure units - see discussion below) :l
c_n = normal damping coefficient (force/distance units or pressure units - see discussion below) :l
c_t = tangential damping coefficient (force/distance units or pressure units - see discussion below) :l
wallstyle = {xplane} or {yplane} or {zplane} or {zcylinder} :l
args = list of arguments for a particular style :l
{xplane} or {yplane} args = lo hi
lo,hi = position of lower and upper plane (distance units), either can be NULL)
{zcylinder} args = radius
radius = cylinder radius (distance units) :pre
zero or more keyword/value pairs may be appended to args :l
keyword = {wiggle} :l
{wiggle} values = dim amplitude period
dim = {x} or {y} or {z}
amplitude = size of oscillation (distance units)
period = time of oscillation (time units) :pre
:ule
[Examples:]
fix 1 all wall/body/polyhedron 1000.0 20.0 5.0 xplane -10.0 10.0
[Description:]
This fix is for use with 3d models of body particles of style
{rounded/polyhedron}. It bounds the simulation domain with wall(s).
All particles in the group interact with the wall when they are close
enough to touch it. The nature of the interaction between the wall
and the polygon particles is the same as that between the polygon
particles themselves, which is similar to a Hookean potential. See
"Section 6.14"_Section_howto.html#howto_14 of the manual and the
"body"_body.html doc page for more details on using body particles.
The parameters {k_n}, {c_n}, {c_t} have the same meaning and units as
those specified with the "pair_style
body/rounded/polyhedron"_pair_body_rounded_polyhedron.html command.
The {wallstyle} can be planar or cylindrical. The 3 planar options
specify a pair of walls in a dimension. Wall positions are given by
{lo} and {hi}. Either of the values can be specified as NULL if a
single wall is desired. For a {zcylinder} wallstyle, the cylinder's
axis is at x = y = 0.0, and the radius of the cylinder is specified.
Optionally, the wall can be moving, if the {wiggle} keyword is appended.
For the {wiggle} keyword, the wall oscillates sinusoidally, similar to
the oscillations of particles which can be specified by the "fix
move"_fix_move.html command. This is useful in packing simulations of
particles. The arguments to the {wiggle} keyword specify a dimension
for the motion, as well as it's {amplitude} and {period}. Note that
if the dimension is in the plane of the wall, this is effectively a
shearing motion. If the dimension is perpendicular to the wall, it is
more of a shaking motion. A {zcylinder} wall can only be wiggled in
the z dimension.
Each timestep, the position of a wiggled wall in the appropriate {dim}
is set according to this equation:
position = coord + A - A cos (omega * delta) :pre
where {coord} is the specified initial position of the wall, {A} is
the {amplitude}, {omega} is 2 PI / {period}, and {delta} is the time
elapsed since the fix was specified. The velocity of the wall is set
to the derivative of this expression.
[Restart, fix_modify, output, run start/stop, minimize info:]
None of the "fix_modify"_fix_modify.html options are relevant to this
fix. No global or per-atom quantities are stored by this fix for
access by various "output commands"_Section_howto.html#howto_15. No
parameter of this fix can be used with the {start/stop} keywords of
the "run"_run.html command. This fix is not invoked during "energy
minimization"_minimize.html.
[Restrictions:]
This fix is part of the BODY package. It is only enabled if
LAMMPS was built with that package. See the "Making
LAMMPS"_Section_start.html#start_3 section for more info.
Any dimension (xyz) that has a wall must be non-periodic.
[Related commands:]
"atom_style body"_atom_style.html, "pair_style
body/rounded/polyhedron"_pair_body_rounded_polyhedron.html
[Default:] none

View File

@ -283,6 +283,8 @@ fix_vector.html
fix_viscosity.html
fix_viscous.html
fix_wall.html
fix_wall_body_polygon.html
fix_wall_body_polyhedron.html
fix_wall_ees.html
fix_wall_gran.html
fix_wall_gran_region.html
@ -424,8 +426,9 @@ pair_agni.html
pair_airebo.html
pair_awpmd.html
pair_beck.html
pair_body.html
pair_body_nparticle.html
pair_body_rounded_polygon.html
pair_body_rounded_polyhedron.html
pair_bop.html
pair_born.html
pair_brownian.html

View File

@ -10,21 +10,21 @@ pair_style body command :h3
[Syntax:]
pair_style body cutoff :pre
pair_style body/nparticle cutoff :pre
cutoff = global cutoff for interactions (distance units)
[Examples:]
pair_style body 3.0
pair_style body/nparticle 3.0
pair_coeff * * 1.0 1.0
pair_coeff 1 1 1.0 1.5 2.5 :pre
[Description:]
Style {body} is for use with body particles and calculates pairwise
body/body interactions as well as interactions between body and
point-particles. See "Section 6.14"_Section_howto.html#howto_14
Style {body/nparticle} is for use with body particles and calculates
pairwise body/body interactions as well as interactions between body
and point-particles. See "Section 6.14"_Section_howto.html#howto_14
of the manual and the "body"_body.html doc page for more details on
using body particles.

View File

@ -8,12 +8,127 @@
pair_style body/rounded/polygon command :h3
[Syntax:]
pair_style body/rounded/polygon c_n c_t mu delta_ua cutoff :pre
c_n = normal damping coefficient
c_t = tangential damping coefficient
mu = normal friction coefficient during gross sliding
delta_ua = multiple contact scaling factor
cutoff = global separation cutoff for interactions (distance units), see below for definition :pre
[Examples:]
pair_style body/rounded/polygon 20.0 5.0 0.0 1.0 0.5
pair_coeff * * 100.0 1.0
pair_coeff 1 1 100.0 1.0 :pre
[Description:]
Note: This feature is not yet implemented.
Style {body/rounded/polygon} is for use with 2d models of body
particles of style {rounded/polygon}. It calculates pairwise
body/body interactions which can include body particles modeled as
1-vertex circular disks with a specified diameter. See "Section
6.14"_Section_howto.html#howto_14 of the manual and the
"body"_body.html doc page for more details on using body
rounded/polygon particles.
This pairwise interaction between rounded polygons is described in
"Fraige"_#pair-Fraige, where a polygon does not have sharp corners,
but is rounded at its vertices by circles centered on each vertex with
a specified diameter. The edges of the polygon are defined between
pairs of adjacent vertices. The circle diameter for each polygon is
specified in the data file read by the "read data"_read_data.html
command. This is a 2d discrete element model (DEM) which allows for
multiple contact points.
Note that when two particles interact, the effective surface of each
polygon particle is displaced outward from each of its vertices and
edges by half its circle diameter (as in the diagram below of a gray
and yellow square particle). The interaction forces and energies
between two particles are defined with respect to the separation of
their respective rounded surfaces, not by the separation of the
vertices and edges themselves.
This means that the specified cutoff in the pair_style command is the
cutoff distance, r_c, for the surface separation, \delta_n (see figure
below). This is the distance at which two particles no longer
interact. If r_c is specified as 0.0, then it is a contact-only
interaction. I.e. the two particles must overlap in order to exert a
repulsive force on each other. If r_c > 0.0, then the force between
two particles will be attractive for surface separations from 0 to
r_c, and repulsive once the particles overlap.
Note that unlike for other pair styles, the specified cutoff is not
the distance between the centers of two particles at which they stop
interacting. This center-to-center distance depends on the shape and
size of the two particles and their relative orientation. LAMMPS
takes that into account when computing the surface separation distance
and applying the r_c cutoff.
The forces between vertex-vertex, vertex-edge, and edge-edge overlaps
are given by:
:c,image(Eqs/pair_body_rounded.jpg)
:c,image(JPG/pair_body_rounded.jpg)
Note that F_n and F_t are functions of the surface separation \delta_n
= d - (R_i + R_j). In this model, when (R_i + R_j) < d < (R_i + R_j)
+ r_c, that is, 0 < \delta_n < r_c, the cohesive region of the two
surfaces overlap and the two surfaces are attractive to each other.
In "Fraige"_#pair-Fraige, the tangential friction force between two
particles that are in contact is modeled differently prior to gross
sliding (i.e. static friction) and during gross-sliding (kinetic
friction). The latter takes place when the tangential deformation
exceeds the Coulomb frictional limit. In the current implementation,
however, we do not take into account frictional history, i.e. we do
not keep track of how many time steps the two particles have been in
contact nor calculate the tangential deformation. Instead, we assume
that gross sliding takes place as soon as two particles are in
contact.
The following coefficients must be defined for each pair of atom types
via the "pair_coeff"_pair_coeff.html command as in the examples above,
or in the data file read by the "read_data"_read_data.html command:
k_n (energy/distance^2 units)
k_na (energy/distance^2 units) :ul
Effectively, k_n and k_na are the slopes of the red lines in the plot
above for force versus surface separation, for \delta_n < 0 and 0 <
\delta_n < r_c respectively.
[Mixing, shift, table, tail correction, restart, rRESPA info]:
This pair style does not support the "pair_modify"_pair_modify.html
mix, shift, table, and tail options.
This pair style does not write its information to "binary restart
files"_restart.html. Thus, you need to re-specify the pair_style and
pair_coeff commands in an input script that reads a restart file.
This pair style can only be used via the {pair} keyword of the
"run_style respa"_run_style.html command. It does not support the
{inner}, {middle}, {outer} keywords.
[Restrictions:]
These pair styles are part of the BODY package. They are only enabled
if LAMMPS was built with that package. See the "Making
LAMMPS"_Section_start.html#start_3 section for more info.
This pair style requires the "newton"_newton.html setting to be "on"
for pair interactions.
[Related commands:]
"pair_style body"_pair_body.html
"pair_coeff"_pair_coeff.html
[Default:] none
:link(pair-Fraige)
[(Fraige)] F. Y. Fraige, P. A. Langston, A. J. Matchett, J. Dodds,
Particuology, 6, 455 (2008).

View File

@ -0,0 +1,130 @@
"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c
:link(lws,http://lammps.sandia.gov)
:link(ld,Manual.html)
:link(lc,Section_commands.html#comm)
:line
pair_style body/rounded/polyhedron command :h3
[Syntax:]
pair_style body/rounded/polyhedron c_n c_t mu delta_ua cutoff :pre
c_n = normal damping coefficient
c_t = tangential damping coefficient
mu = normal friction coefficient during gross sliding
delta_ua = multiple contact scaling factor
cutoff = global separation cutoff for interactions (distance units), see below for definition :pre
[Examples:]
pair_style body/rounded/polyhedron 20.0 5.0 0.0 1.0 0.5
pair_coeff * * 100.0 1.0
pair_coeff 1 1 100.0 1.0 :pre
[Description:]
Style {body/rounded/polygon} is for use with 3d models of body
particles of style {rounded/polyhedron}. It calculates pairwise
body/body interactions which can include body particles modeled as
1-vertex spheres with a specified diameter. See "Section
6.14"_Section_howto.html#howto_14 of the manual and the
"body"_body.html doc page for more details on using body
rounded/polyhedron particles.
This pairwise interaction between the rounded polyhedra is described
in "Wang"_#pair-Wang, where a polyhedron does not have sharp corners
and edges, but is rounded at its vertices and edges by spheres
centered on each vertex with a specified diameter. The edges if the
polyhedron are defined between pairs of adjacent vertices. Its faces
are defined by a loop of edges. The sphere diameter for each polygon
is specified in the data file read by the "read data"_read_data.html
command. This is a discrete element model (DEM) which allows for
multiple contact points.
Note that when two particles interact, the effective surface of each
polyhedron particle is displaced outward from each of its vertices,
edges, and faces by half its sphere diameter. The interaction forces
and energies between two particles are defined with respect to the
separation of their respective rounded surfaces, not by the separation
of the vertices, edges, and faces themselves.
This means that the specified cutoff in the pair_style command is the
cutoff distance, r_c, for the surface separation, \delta_n (see figure
below). This is the distance at which two particles no longer
interact. If r_c is specified as 0.0, then it is a contact-only
interaction. I.e. the two particles must overlap in order to exert a
repulsive force on each other. If r_c > 0.0, then the force between
two particles will be attractive for surface separations from 0 to
r_c, and repulsive once the particles overlap.
Note that unlike for other pair styles, the specified cutoff is not
the distance between the centers of two particles at which they stop
interacting. This center-to-center distance depends on the shape and
size of the two particles and their relative orientation. LAMMPS
takes that into account when computing the surface separation distance
and applying the r_c cutoff.
The forces between vertex-vertex, vertex-edge, vertex-face, edge-edge,
and edge-face overlaps are given by:
:c,image(Eqs/pair_body_rounded.jpg)
:c,image(JPG/pair_body_rounded.jpg)
In "Wang"_#pair-Wang, the tangential friction force between two
particles that are in contact is modeled differently prior to gross
sliding (i.e. static friction) and during gross-sliding (kinetic
friction). The latter takes place when the tangential deformation
exceeds the Coulomb frictional limit. In the current implementation,
however, we do not take into account frictional history, i.e. we do
not keep track of how many time steps the two particles have been in
contact nor calculate the tangential deformation. Instead, we assume
that gross sliding takes place as soon as two particles are in
contact.
The following coefficients must be defined for each pair of atom types
via the "pair_coeff"_pair_coeff.html command as in the examples above,
or in the data file read by the "read_data"_read_data.html command:
k_n (energy/distance^2 units)
k_na (energy/distance^2 units) :ul
Effectively, k_n and k_na are the slopes of the red lines in the plot
above for force versus surface separation, for \delta_n < 0 and 0 <
\delta_n < r_c respectively.
[Mixing, shift, table, tail correction, restart, rRESPA info]:
This pair style does not support the "pair_modify"_pair_modify.html
mix, shift, table, and tail options.
This pair style does not write its information to "binary restart
files"_restart.html. Thus, you need to re-specify the pair_style and
pair_coeff commands in an input script that reads a restart file.
This pair style can only be used via the {pair} keyword of the
"run_style respa"_run_style.html command. It does not support the
{inner}, {middle}, {outer} keywords.
[Restrictions:]
These pair styles are part of the BODY package. They are only enabled
if LAMMPS was built with that package. See the "Making
LAMMPS"_Section_start.html#start_3 section for more info.
This pair style requires the "newton"_newton.html setting to be "on"
for pair interactions.
[Related commands:]
"pair_coeff"_pair_coeff.html
[Default:] none
:link(pair-Wang)
[(Wang)] J. Wang, H. S. Yu, P. A. Langston, F. Y. Fraige, Granular
Matter, 13, 1 (2011).