125 lines
5.5 KiB
ReStructuredText
125 lines
5.5 KiB
ReStructuredText
Bonded particle models
|
|
===============
|
|
|
|
The BPM package implements bonded particle models which can be used to
|
|
simulate mesoscale solids. Solids are constructed as a collection of
|
|
|
|
particles which each represent a coarse-grained region of space much
|
|
larger than the atomistic scale. Particles within a solid region are
|
|
then connected by a network of bonds to provide solid elasticity.
|
|
|
|
Unlike traditional bonds in molecular dynamics, the equilibrium bond
|
|
length can vary between bonds. Bonds store the reference state. This
|
|
includes setting the equilibrium length equal to the initial distance
|
|
between the two particles but can also include data on the bond
|
|
orientation for rotational models. This produces a stress free initial
|
|
state. Furthermore, bonds are allowed to break under large strains
|
|
producing fracture. The examples/bpm directory has sample input scripts
|
|
for simulations of the fragmentation of an impacted plate and the
|
|
pouring of extended, elastic bodies.
|
|
|
|
----------
|
|
|
|
Bonds can be created using a :doc:`read data <read_data>` or
|
|
:doc:`create bond <create_bond>` command. Alternatively, a
|
|
:doc:`molecule <molecule>` template with bonds can be used with
|
|
:doc:`fix deposit <fix_deposit>` or :doc:`fix pour <fix_pour>` to
|
|
create solid grains.
|
|
|
|
In this implementation, bonds store their reference state when they are
|
|
first computed in the setup of the first simulation run. Data is then
|
|
preserved across run commands and is written to :doc:`binary restart
|
|
files <restart>` such that restarting the system will not reset the
|
|
reference state of a bond. Bonds that are created midway into a run,
|
|
such as those created by pouring grains using :doc:`fix pour
|
|
<fix_pour>`, are initialized on that timestep.
|
|
|
|
As bonds can be broken between neighbor list builds, the
|
|
:doc:`special_bonds <special_bonds>` command works differently for BPM
|
|
bond styles. There are two possible settings which determine how pair
|
|
interactions work between bonded particles. First, one can turn off
|
|
all pair interactions between bonded particles. Unlike :doc:`bond
|
|
quartic <bond_quartic>`, this is not done by subtracting pair forces
|
|
during the bond computation but rather by dynamically updating the
|
|
special bond list. This is the default behavior of BPM bond styles and
|
|
is done by updating the 1-2 special bond list as bonds break. To do
|
|
this, LAMMPS requires :doc:`newton <newton>` bond off such that all
|
|
processors containing an atom know when a bond breaks. Additionally,
|
|
one must do either (A) or (B).
|
|
|
|
(A)
|
|
|
|
Use the following special bond settings
|
|
|
|
.. code-block:: LAMMPS
|
|
|
|
special_bonds lj 0 1 1 coul 1 1 1
|
|
|
|
These settings accomplish two goals. First, they turn off 1-3 and 1-4
|
|
special bond lists, which are not currently supported for BPMs. As
|
|
BPMs often have dense bond networks, generating 1-3 and 1-4 special
|
|
bond lists is expensive. By setting the lj weight for 1-2 bonds to
|
|
zero, this turns off pairwise interactions. Even though there are no
|
|
charges in BPM models, setting a nonzero coul weight for 1-2 bonds
|
|
ensures all bonded neighbors are still included in the neighbor list
|
|
in case bonds break between neighbor list builds.
|
|
|
|
(B)
|
|
|
|
Alternatively, one can simply overlay pair interactions such that all
|
|
bonded particles also feel pair interactions. This can be accomplished
|
|
by using the *overlay/pair* keyword present in all bpm bond styles and
|
|
by using the following special bond settings
|
|
|
|
.. code-block:: LAMMPS
|
|
|
|
special_bonds lj/coul 1 1 1
|
|
|
|
See the :doc:`Howto <Howto_broken_bonds>` page on broken bonds for
|
|
more information.
|
|
|
|
----------
|
|
|
|
Currently there are two types of bonds included in the BPM
|
|
package. The first bond style, :doc:`bond bpm/spring
|
|
<bond_bpm_spring>`, only applies pairwise, central body forces. Point
|
|
particles must have :doc:`bond atom style <atom_style>` and may be
|
|
thought of as nodes in a spring network. Alternatively, the second
|
|
bond style, :doc:`bond bpm/rotational <bond_bpm_rotational>`, resolves
|
|
tangential forces and torques arising with the shearing, bending, and
|
|
twisting of the bond due to rotation or displacement of particles.
|
|
Particles are similar to those used in the :doc:`granular package
|
|
<Howto_granular>`, :doc:`atom style sphere <atom_style>`. However,
|
|
they must also track the current orientation of particles and
|
|
therefore use a derived :doc:`atom style sphere/bpm <atom_style>`.
|
|
This also requires a unique integrator :doc:`fix nve/sphere/bpm
|
|
<fix_nve_sphere_bpm>` which numerically integrates orientation similar
|
|
to :doc:`fix nve/asphere <fix_nve_asphere>`.
|
|
|
|
To monitor the fracture of bonds in the system, all BPM bond styles
|
|
can be associated with an instance of :doc:`fix store/local
|
|
<fix_store_local>` to record all instances of bond breakage for
|
|
output. Additionally, one can use :doc:`compute nbond/atom
|
|
<compute_nbond_atom>` to tally the current number of bonds per atom.
|
|
|
|
In addition to bond styles, a new pair style :doc:`pair bpm/spring
|
|
<pair_bpm_spring>` was added to accompany the bpm/spring bond
|
|
style. This pair style is simply a hookean repulsion with similar
|
|
velocity damping as its sister bond style.
|
|
|
|
----------
|
|
|
|
While LAMMPS has many untilites to create and delete bonds, the
|
|
following are currently compatible with BPM bond styles:
|
|
|
|
* :doc:`create_bonds <create_bonds>`
|
|
* :doc:`delete_bonds <delete_bonds>`
|
|
* :doc:`fix bond/create <fix_bond_create>`
|
|
* :doc:`fix bond/break <fix_bond_break>`
|
|
* :doc:`fix bond/swap <fix_bond_swap>`
|
|
|
|
Note :doc:`bond_create <bond_create>` requires certain special_bonds settings.
|
|
To subtract pair interactions, one will need to switch between different
|
|
special_bonds settings in the input script. An example is found in
|
|
examples/bpm/impact.
|