more changes to new polygon/hedron docs and command names

This commit is contained in:
Steven J. Plimpton 2018-07-18 08:49:42 -06:00
parent de69e24551
commit 843b96e8dd
8 changed files with 81 additions and 92 deletions

View File

@ -664,6 +664,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,
@ -914,7 +916,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

@ -286,12 +286,10 @@ 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.
TRUNG: What are the special cases allowed for 3d, if any? Similar to
the N=1 (sphere) and N=2 (rod) special cases for 2d, descibed in
previous section.
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"_#Wang.

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

@ -28,11 +28,11 @@ pair_coeff 1 1 100.0 1.0 :pre
Style {body/rounded/polygon} is for use with 2d models of body
particles of style {rounded/polygon}. It calculates pairwise
body/body interactions as well as interactions between body and point
particles (modeled as 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.
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"_#Fraige, where a polygon does not have sharp corners, but is
@ -51,8 +51,21 @@ 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 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:
@ -61,25 +74,10 @@ are given by:
:c,image(JPG/pair_body_rounded.jpg)
TRUNG: The diagram label "cohesive regions" confuses me. Are you
saying there is some distance d for which the force is attractive,
i.e. the particles are cohesive? I think when d > Ri + Rj, since Ri +
Rj is the surface/surface overlap discussed above? If so, then the
discussion above about the specified cutoff is wrong? I.e. you can
specify a large cutoff than the surface/surface overlap to get
cohesive interactions? If so, this should be explained up above.
But an additional confusion is that the specied cutoff (Rc in diagram?)
is a single number, but depedning on the orientiation of the 2
particles they might have a suface/surface overlap at a much
smaller value of Ri + Rj. So what is Rc then? - I added
the following paragraph to address this.
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.
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"_#Fraige, the tangential friction force between two
particles that are in contact is modeled differently prior to gross
@ -92,7 +90,6 @@ 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:
@ -101,12 +98,8 @@ 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. (TRUNG: is this sentence correct? - it should read delta_n,
instead of r)
TRUNG: reminder to copy any change in this file
to the pair polyhedron file as well (and vice versa)
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]:

View File

@ -28,28 +28,11 @@ pair_coeff 1 1 100.0 1.0 :pre
Style {body/rounded/polygon} is for use with 3d models of body
particles of style {rounded/polyhedron}. It calculates pairwise
body/body interactions as well as interactions between body and
point-particles (modeled as 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.
TRUNG: I think we need a paragraph here about how body/sphere
interactions are handled. Does this pair style only do body/body but
allow for a body = sphere or rod or some other degenerate case? Or
does this pair style allow you to model a simulation of mixed body and
point particles, where point particles are spheroids. If so, does
this pair style do body/body and body/point, and you use one of the
other granular pair styles to do point/point? I.e. a pair hybrid
model? Or does everything have to be defined as bodies. Actually
this paragraph would make more sense in the body.txt file about how to
create a model that includes non-body particles (spheres). And in
this pair style file just a couple lines about which part of the
interactions this pair style computes. Ditto in the pair body polygon
file. - The pair style supports body/sphere and sphere/sphere
given that all the atoms should be of body rounded/polyhedron.
I updated the above paragraph and added examples in body.txt for
specifying the special objects (i.e. spheres and rods).
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"_#Wang, where a polyhedron does not have sharp corners and
@ -61,7 +44,6 @@ 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
@ -69,8 +51,21 @@ 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 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:
@ -97,9 +92,8 @@ 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. (TRUNG: is this sentence correct? - it should read delta_n,
instead of r)
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]:

View File

@ -8,7 +8,7 @@ read_data data.body
velocity all create 1.44 87287 loop geom
pair_style body 5.0
pair_style body/nparticle 5.0
pair_coeff * * 1.0 1.0
neighbor 0.5 bin

View File

@ -15,7 +15,7 @@
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include "pair_body.h"
#include "pair_body_nparticle.h"
#include "math_extra.h"
#include "atom.h"
#include "atom_vec_body.h"
@ -32,7 +32,7 @@ using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
PairBody::PairBody(LAMMPS *lmp) : Pair(lmp)
PairBodyNparticle::PairBodyNparticle(LAMMPS *lmp) : Pair(lmp)
{
dmax = nmax = 0;
discrete = NULL;
@ -44,7 +44,7 @@ PairBody::PairBody(LAMMPS *lmp) : Pair(lmp)
/* ---------------------------------------------------------------------- */
PairBody::~PairBody()
PairBodyNparticle::~PairBodyNparticle()
{
memory->destroy(discrete);
memory->destroy(dnum);
@ -66,7 +66,7 @@ PairBody::~PairBody()
/* ---------------------------------------------------------------------- */
void PairBody::compute(int eflag, int vflag)
void PairBodyNparticle::compute(int eflag, int vflag)
{
int i,j,ii,jj,inum,jnum,itype,jtype;
int ni,nj,npi,npj,ifirst,jfirst;
@ -336,7 +336,7 @@ void PairBody::compute(int eflag, int vflag)
allocate all arrays
------------------------------------------------------------------------- */
void PairBody::allocate()
void PairBodyNparticle::allocate()
{
allocated = 1;
int n = atom->ntypes;
@ -361,7 +361,7 @@ void PairBody::allocate()
global settings
------------------------------------------------------------------------- */
void PairBody::settings(int narg, char **arg)
void PairBodyNparticle::settings(int narg, char **arg)
{
if (narg != 1) error->all(FLERR,"Illegal pair_style command");
@ -381,7 +381,7 @@ void PairBody::settings(int narg, char **arg)
set coeffs for one or more type pairs
------------------------------------------------------------------------- */
void PairBody::coeff(int narg, char **arg)
void PairBodyNparticle::coeff(int narg, char **arg)
{
if (narg < 4 || narg > 5)
error->all(FLERR,"Incorrect args for pair coefficients");
@ -415,12 +415,12 @@ void PairBody::coeff(int narg, char **arg)
init specific to this pair style
------------------------------------------------------------------------- */
void PairBody::init_style()
void PairBodyNparticle::init_style()
{
avec = (AtomVecBody *) atom->style_match("body");
if (!avec) error->all(FLERR,"Pair body requires atom style body");
if (!avec) error->all(FLERR,"Pair body/nparticle requires atom style body");
if (strcmp(avec->bptr->style,"nparticle") != 0)
error->all(FLERR,"Pair body requires body style nparticle");
error->all(FLERR,"Pair body/nparticle requires body style nparticle");
bptr = (BodyNparticle *) avec->bptr;
neighbor->request(this,instance_me);
@ -430,7 +430,7 @@ void PairBody::init_style()
init for one type pair i,j and corresponding j,i
------------------------------------------------------------------------- */
double PairBody::init_one(int i, int j)
double PairBodyNparticle::init_one(int i, int j)
{
if (setflag[i][j] == 0) {
epsilon[i][j] = mix_energy(epsilon[i][i],epsilon[j][j],
@ -459,7 +459,7 @@ double PairBody::init_one(int i, int j)
store sub-particle space-frame displacements from COM in discrete list
------------------------------------------------------------------------- */
void PairBody::body2space(int i)
void PairBodyNparticle::body2space(int i)
{
int ibonus = atom->body[i];
AtomVecBody::Bonus *bonus = &avec->bonus[ibonus];

View File

@ -13,21 +13,21 @@
#ifdef PAIR_CLASS
PairStyle(body,PairBody)
PairStyle(body/nparticle,PairBodyNparticle)
#else
#ifndef LMP_PAIR_BODY_H
#define LMP_PAIR_BODY_H
#ifndef LMP_PAIR_BODY_NPARTICLE_H
#define LMP_PAIR_BODY_NPARTICLE_H
#include "pair.h"
namespace LAMMPS_NS {
class PairBody : public Pair {
class PairBodyNparticle : public Pair {
public:
PairBody(class LAMMPS *);
~PairBody();
PairBodyNparticle(class LAMMPS *);
~PairBodyNparticle();
void compute(int, int);
void settings(int, char **);
void coeff(int, char **);