Merge branch 'develop' into collected-small-fixes

This commit is contained in:
Axel Kohlmeyer
2025-03-08 22:28:31 -05:00
23 changed files with 3651 additions and 26 deletions

View File

@ -23,6 +23,7 @@ OPT.
*
* :doc:`bpm/rotational <bond_bpm_rotational>`
* :doc:`bpm/spring <bond_bpm_spring>`
* :doc:`bpm/spring/plastic <bond_bpm_spring_plastic>`
* :doc:`class2 (ko) <bond_class2>`
* :doc:`fene (iko) <bond_fene>`
* :doc:`fene/expand (o) <bond_fene_expand>`

View File

@ -54,7 +54,7 @@ Lowercase directories
+-------------+------------------------------------------------------------------+
| body | body particles, 2d system |
+-------------+------------------------------------------------------------------+
| bpm | BPM simulations of pouring elastic grains and plate impact |
| bpm | simulations of solid elastic/plastic deformation and fracture |
+-------------+------------------------------------------------------------------+
| cmap | CMAP 5-body contributions to CHARMM force field |
+-------------+------------------------------------------------------------------+

View File

@ -42,12 +42,14 @@ such as those created by pouring grains using :doc:`fix pour
----------
Currently, there are two types of bonds included in the BPM package. The
Currently, there are three 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. An optional multibody term can be used to adjust the network's
Poisson's ratio. Alternatively, the second bond style, :doc:`bond bpm/rotational
Poisson's ratio. The :doc:`bpm/spring/plastic <bond_bpm_spring_plastic>`
bond style is similar except it adds a plastic yield strain.
Alternatively, the third 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

View File

@ -10,7 +10,7 @@ Syntax
bond_style bpm/spring keyword value attribute1 attribute2 ...
* optional keyword = *overlay/pair* or *store/local* or *smooth* or *break* or *volume/factor*
* optional keyword = *overlay/pair* or *store/local* or *smooth* or *normalize* or *break* or *volume/factor*
.. parsed-literal::
@ -141,7 +141,8 @@ calculated using bond lengths squared and the cube root in the above equation
is accordingly replaced with a square root. This approximation assumes bonds
are evenly distributed on a spherical surface and neglects constant prefactors
which are irrelevant since only the ratio of volumes matters. This term may be
used to adjust the Poisson's ratio.
used to adjust the Poisson's ratio. See the simulation in the
examples/bpm/poissons_ratio directory for a demonstration of this effect.
If a bond is broken (or created), :math:`V_{0,i}` is updated by subtracting
(or adding) that bond's contribution.
@ -214,11 +215,11 @@ for an overview of LAMMPS output options.
The vector or array will be floating point values that correspond to
the specified attribute.
The single() function of this bond style returns 0.0 for the energy
of a bonded interaction, since energy is not conserved in these
dissipative potentials. The single() function also calculates an
extra bond quantity, the initial distance :math:`r_0`. This
extra quantity can be accessed by the
The potential energy and the single() function of this bond style return
:math:`k (r - r_0)^2 / 2` as a proxy of the energy of a bonded interaction,
ignoring any volumetric/smoothing factors or dissipative forces. The single()
function also calculates an extra bond quantity, the initial distance
:math:`r_0`. This extra quantity can be accessed by the
:doc:`compute bond/local <compute_bond_local>` command as *b1*\ .
Restrictions

View File

@ -0,0 +1,183 @@
.. index:: bond_style bpm/spring/plastic
bond_style bpm/spring/plastic command
=====================================
Syntax
""""""
.. code-block:: LAMMPS
bond_style bpm/spring/plastic keyword value attribute1 attribute2 ...
* optional keyword = *overlay/pair* or *store/local* or *smooth* or *normalize* or *break*
.. parsed-literal::
*store/local* values = fix_ID N attributes ...
* fix_ID = ID of associated internal fix to store data
* N = prepare data for output every this many timesteps
* attributes = zero or more of the below attributes may be appended
*id1, id2* = IDs of two atoms in the bond
*time* = the timestep the bond broke
*x, y, z* = the center of mass position of the two atoms when the bond broke (distance units)
*x/ref, y/ref, z/ref* = the initial center of mass position of the two atoms (distance units)
*overlay/pair* value = *yes* or *no*
bonded particles will still interact with pair forces
*smooth* value = *yes* or *no*
smooths bond forces near the breaking point
*normalize* value = *yes* or *no*
normalizes bond forces by the reference length
*break* value = *yes* or *no*
indicates whether bonds break during a run
Examples
""""""""
.. code-block:: LAMMPS
bond_style bpm/spring/plastic
bond_coeff 1 1.0 0.05 0.1 0.02
bond_style bpm/spring/plastic myfix 1000 time id1 id2
dump 1 all local 1000 dump.broken f_myfix[1] f_myfix[2] f_myfix[3]
dump_modify 1 write_header no
Description
"""""""""""
.. versionadded:: TBD
The *bpm/spring/plastic* bond style computes forces based on
deviations from the initial reference state of the two atoms and the
strain history. The reference length of the bond :math:`r_0` is stored
by each bond when it is first computed in the setup of a run. Initially,
the equilibrium length of each bond :math:`r_\mathrm{eq}` is set equal
to :math:`r_0` but can evolve. data is then preserved across run commands
and is written to :doc:`binary restart files <restart>` such that restarting
the system will not modify either of these quantities.
This bond style only applies central-body forces which conserve the
translational and rotational degrees of freedom of a bonded set of
particles. The force has a magnitude of
.. math::
F = -k (r_\mathrm{eq} - r) w
where :math:`k` is a stiffness, :math:`r` is the current distance between
the two particles, and :math:`w` is an optional smoothing factor discussed
below. If the bond stretches beyond a strain of :math:`\epsilon_p` in compression
or extension, it will plastically activate and :math:`r_\mathrm{eq}` will evolve
to ensure :math:`|(r-r_\mathrm{eq})/r_\mathrm{eq}|` never exceeds :math:`\epsilon_p`.
Therefore, if a bond is continually loaded in either tension or compression, the
force will initially grow elastically before plateauing. See
:ref:`(Clemmer) <plastic-Clemmer>` for more details on these mechanics.
Bonds will break at a strain of :math:`\epsilon_c`. This is done by setting
the bond type to 0 such that forces are no longer computed.
An additional damping force is applied to the bonded
particles. This forces is proportional to the difference in the
normal velocity of particles:
.. math::
F_D = - \gamma w (\hat{r} \bullet \vec{v})
where :math:`\gamma` is the damping strength, :math:`\hat{r}` is the
radial normal vector, and :math:`\vec{v}` is the velocity difference
between the two particles.
The smoothing factor :math:`w` is constructed such that forces smoothly
go to zero, avoiding discontinuities, as bonds approach the critical
breaking strain
.. math::
w = 1.0 - \left( \frac{r - r_0}{r_0 \epsilon_c} \right)^8 .
The following coefficients must be defined for each bond type via the
:doc:`bond_coeff <bond_coeff>` command as in the example above, or in
the data file or restart files read by the :doc:`read_data
<read_data>` or :doc:`read_restart <read_restart>` commands:
* :math:`k` (force/distance units)
* :math:`\epsilon_c` (unit less)
* :math:`\gamma` (force/velocity units)
* :math:`\epsilon_p (unit less)
See the :doc:`bpm/spring doc page <bond_bpm_spring>` for information on
the *smooth*, *normalize*, *break*, *overlay/pair*, and *store/local*
keywords.
Note that when unbroken bonds are dumped to a file via the
:doc:`dump local <dump>` command, bonds with type 0 (broken bonds)
are not included.
The :doc:`delete_bonds <delete_bonds>` command can also be used to
query the status of broken bonds or permanently delete them, e.g.:
.. code-block:: LAMMPS
delete_bonds all stats
delete_bonds all bond 0 remove
----------
Restart and other info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
This bond style writes the reference state and plastic history of each
bond to :doc:`binary restart files <restart>`. Loading a restart
file will properly restore bonds. However, the reference state is NOT
written to data files. Therefore reading a data file will not
restore bonds and will cause their reference states to be redefined.
The potential energy and the single() function of this bond style returns zero.
The single() function also calculates two extra bond quantities, the initial
distance :math:`r_0` and the current equilbrium length :math:`r_eq`. These extra
quantities can be accessed by the :doc:`compute bond/local <compute_bond_local>`
command as *b1* and *b2*, respectively.
Restrictions
""""""""""""
This bond style is part of the BPM package. It is only enabled if
LAMMPS was built with that package. See the :doc:`Build package
<Build_package>` page for more info.
By default if pair interactions between bonded atoms are to be disabled,
this bond style requires setting
.. code-block:: LAMMPS
special_bonds lj 0 1 1 coul 1 1 1
and :doc:`newton <newton>` must be set to bond off. If the *overlay/pair*
keyword is set to *yes*, this bond style alternatively requires setting
.. code-block:: LAMMPS
special_bonds lj/coul 1 1 1
Related commands
""""""""""""""""
:doc:`bond_coeff <bond_coeff>`, :doc:`bond bpm/spring <bond_bpm_spring>`
Default
"""""""
The option defaults are *overlay/pair* = *no*, *smooth* = *yes*, *normalize* = *no*, and *break* = *yes*
----------
.. _plastic-Clemmer:
**(Clemmer)** Clemmer and Lechman, Powder Technology (2025).

View File

@ -10,7 +10,7 @@ Syntax
bond_style style args
* style = *none* or *zero* or *hybrid* or *bpm/rotational* or *bpm/spring* or *class2* or *fene* or *fene/expand* or *fene/nm* or *gaussian* or *gromos* or *harmonic* or *harmonic/restrain* *harmonic/shift* or *harmonic/shift/cut* or *lepton* or *morse* or *nonlinear* or *oxdna/fene* or *oxdena2/fene* or *oxrna2/fene* or *quartic* or *special* or *table*
* style = *none* or *zero* or *hybrid* or *bpm/rotational* or *bpm/spring* or *bpm/spring/plastic* or *class2* or *fene* or *fene/expand* or *fene/nm* or *gaussian* or *gromos* or *harmonic* or *harmonic/restrain* *harmonic/shift* or *harmonic/shift/cut* or *lepton* or *morse* or *nonlinear* or *oxdna/fene* or *oxdena2/fene* or *oxrna2/fene* or *quartic* or *special* or *table*
* args = none for any style except *hybrid*
@ -86,6 +86,7 @@ accelerated styles exist.
* :doc:`bpm/rotational <bond_bpm_rotational>` - breakable bond with forces and torques based on deviation from reference state
* :doc:`bpm/spring <bond_bpm_spring>` - breakable bond with forces based on deviation from reference length
* :doc:`bpm/spring/plastic <bond_bpm_spring_plastic>` - a similar breakable bond with plastic yield
* :doc:`class2 <bond_class2>` - COMPASS (class 2) bond
* :doc:`fene <bond_fene>` - FENE (finite-extensible non-linear elastic) bond
* :doc:`fene/expand <bond_fene_expand>` - FENE bonds with variable size particles

View File

@ -117,6 +117,10 @@ This pair style can only be used via the *pair* keyword of the
:doc:`run_style respa <run_style>` command. It does not support the
*inner*, *middle*, *outer* keywords.
The potential energy and the single() function of this pair style returns
:math:`k (r - r_c)^2 / 2 + k_a (r - r_c)^4 / 4` for a proxy
of the energy of a pair interaction, ignoring any smoothing or dissipative forces.
----------
Restrictions

View File

@ -0,0 +1,103 @@
# Load then unload four cantilevers with different plastic yield strains
# model from DOI: 10.1016/j.powtec.2024.120563
units lj
dimension 3
boundary p s s
atom_style bond
special_bonds lj 0.0 1.0 1.0 coul 0.0 1.0 1.0
newton on off
comm_modify vel yes cutoff 2.6
lattice fcc 1.41
region box block 0 20 -1 41 -5 5 units box
create_box 4 box bond/types 4 extra/bond/per/atom 20 extra/special/per/atom 50
mass * 1.0
# Create initial disordered geometry somewhat near jamming
region cantilever block 3.0 12.0 0 40 -2.5 2.5 units box
region cantileverw block 2.0 13.0 -1 41 -3.5 3.5 units box
create_atoms 1 region cantilever
velocity all create 0.1 345910
pair_style bpm/spring
pair_coeff * * 1.0 1.0 1.0
fix 1 all nve
fix wtemp all wall/region cantileverw harmonic 1.0 1.0 1.0
thermo_style custom step ke pe pxx pyy pzz
thermo 100
timestep 0.1
run 20000
unfix wtemp
# Replicate cylinder and add bonds
replicate 4 1 1
region r1 block 0.0 20.0 EDGE EDGE EDGE EDGE side in units box
region r2 block 20.0 40.0 EDGE EDGE EDGE EDGE side in units box
region r3 block 40.0 60.0 EDGE EDGE EDGE EDGE side in units box
region r4 block 60.0 80.0 EDGE EDGE EDGE EDGE side in units box
group c1 region r1
group c2 region r2
group c3 region r3
group c4 region r4
set group c2 type 2
set group c3 type 3
set group c4 type 4
velocity all set 0.0 0.0 0.0
neighbor 1.0 bin
create_bonds many c1 c1 1 0.0 1.5
create_bonds many c2 c2 2 0.0 1.5
create_bonds many c3 c3 3 0.0 1.5
create_bonds many c4 c4 4 0.0 1.5
neighbor 0.3 bin
special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0
bond_style bpm/spring/plastic break no smooth no
bond_coeff 1 1.0 0 1.0 1.0
bond_coeff 2 1.0 0 1.0 0.022
bond_coeff 3 1.0 0 1.0 0.0185
bond_coeff 4 1.0 0 1.0 0.017
# apply load
region anchor block EDGE EDGE EDGE 2.0 EDGE EDGE units box
region load block EDGE EDGE 38.0 EDGE EDGE EDGE units box
group anchor region anchor
group load region load
variable fload equal ramp(0.0,-0.0005)
fix 2 anchor setforce 0.0 0.0 0.0
fix 3 load addforce 0.0 0.0 v_fload
fix 4 all viscous 0.0016
compute zmin1 c1 reduce min z
compute zmin2 c2 reduce min z
compute zmin3 c3 reduce min z
compute zmin4 c4 reduce min z
thermo_style custom step ke c_zmin1 c_zmin2 c_zmin3 c_zmin4
#dump 1 all custom 1000 atomDump id type x y z
run 30000
# hold load
unfix 3
fix 3 load addforce 0.0 0.0 -0.0005
run 50000
# remove load
unfix 3
run 60000

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,90 @@
# Squish four pillars with different Poisson's ratios
# going from nearly incompressible to auxetic
# from left to right, nu ~ 0.5, 0.25, 0, <0
# calibration from DOI: 10.1039/d3sm01373a
units lj
dimension 3
boundary p p s
atom_style bond
special_bonds lj 0.0 1.0 1.0 coul 0.0 1.0 1.0
newton on off
comm_modify vel yes cutoff 2.6
lattice fcc 1.41
region box block 0 20 -10 10 -1 21 units box
create_box 4 box bond/types 4 extra/bond/per/atom 20 extra/special/per/atom 50
mass * 1.0
# Create initial disordered geometry somewhat near jamming
region pillar cylinder z 10.0 0.0 7.0 0.0 20.0 units box
region pillarw cylinder z 10.0 0.0 8.0 -1.0 21.0 units box
create_atoms 1 region pillar
velocity all create 0.1 345910
pair_style bpm/spring
pair_coeff * * 1.0 1.0 1.0
fix 1 all nve
fix wtemp all wall/region pillarw harmonic 1.0 1.0 1.0
thermo_style custom step ke pe pxx pyy pzz
thermo 100
timestep 0.1
run 20000
unfix wtemp
# Replicate cylinder and add bonds
replicate 4 1 1
region r1 block 0.0 20.0 EDGE EDGE EDGE EDGE side in units box
region r2 block 20.0 40.0 EDGE EDGE EDGE EDGE side in units box
region r3 block 40.0 60.0 EDGE EDGE EDGE EDGE side in units box
region r4 block 60.0 80.0 EDGE EDGE EDGE EDGE side in units box
group p1 region r1
group p2 region r2
group p3 region r3
group p4 region r4
set group p2 type 2
set group p3 type 3
set group p4 type 4
velocity all set 0.0 0.0 0.0
neighbor 1.0 bin
create_bonds many p1 p1 1 0.0 1.5
create_bonds many p2 p2 2 0.0 1.5
create_bonds many p3 p3 3 0.0 1.5
create_bonds many p4 p4 4 0.0 1.5
neighbor 0.3 bin
special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0
bond_style bpm/spring break no smooth no volume/factor yes
bond_coeff 1 1.0 0 1.0 -0.8
bond_coeff 2 1.0 0 1.0 0.0
bond_coeff 3 1.0 0 1.0 2.0
bond_coeff 4 1.0 0 1.0 10.0
# squish
region b block EDGE EDGE EDGE EDGE -1.0 2.0 units box
region t block EDGE EDGE EDGE EDGE 18.0 21.0 units box
group bot region b
group top region t
velocity top set 0.0 0.0 -0.0025
fix 2 bot setforce 0.0 0.0 0.0
fix 3 top setforce 0.0 0.0 0.0
compute zmax all reduce max z
thermo_style custom step ke pe pxx pyy pzz c_zmax
#dump 1 all custom 100 atomDump id type x y z
run 10000

View File

@ -0,0 +1,635 @@
LAMMPS (19 Nov 2024 - Development - patch_19Nov2024-1028-g800a5f6310-modified)
# Squish three pillars with different Poisson's ratios
# from left to right, nu ~ 0.5, nu = 0.25 nu ~ 0, nu << 0
units lj
dimension 3
boundary p p s
atom_style bond
special_bonds lj 0.0 1.0 1.0 coul 0.0 1.0 1.0
newton on off
comm_modify vel yes cutoff 2.6
lattice fcc 1.41
Lattice spacing in x,y,z = 1.4156209 1.4156209 1.4156209
region box block 0 20 -10 10 -1 21 units box
create_box 4 box bond/types 4 extra/bond/per/atom 20 extra/special/per/atom 50
Created orthogonal box = (0 -10 -1) to (20 10 21)
1 by 1 by 1 MPI processor grid
mass * 1.0
# Create roughly jammed initial disordered geometry
region pillar cylinder z 10.0 0.0 7.0 0.0 20.0 units box
region pillarw cylinder z 10.0 0.0 8.0 -1.0 21.0 units box
create_atoms 1 region pillar
Created 4348 atoms
using lattice units in orthogonal box = (0 -10 -1.0022) to (20 10 21.0022)
create_atoms CPU = 0.001 seconds
velocity all create 0.1 345910
pair_style bpm/spring
pair_coeff * * 1.0 1.0 1.0
fix 1 all nve
fix wtemp all wall/region pillarw harmonic 1.0 1.0 1.0
thermo_style custom step ke pe pxx pyy pzz
thermo 100
timestep 0.1
run 20000
Generated 0 of 6 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 1.3
ghost atom cutoff = 2.6
binsize = 0.65, bins = 31 31 34
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair bpm/spring, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 9.863 | 9.863 | 9.863 Mbytes
Step KinEng PotEng Pxx Pyy Pzz
0 0.1499655 0 0.055275974 0.054026613 0.05516469
100 0.0045460156 0.0041409796 0.020750379 0.02025897 0.02055488
200 0.0013178069 0.0013493823 0.011925094 0.011431479 0.012133526
300 0.00061239509 0.00063111128 0.0078970462 0.0079941921 0.0081233289
400 0.00035752073 0.00035219764 0.0058819816 0.0058434966 0.0059449021
500 0.00024124423 0.00021786035 0.0046674184 0.0045620932 0.0045613656
600 0.00016811016 0.0001529395 0.0037258758 0.0038555361 0.0038576669
700 0.00012945096 0.00010987332 0.0031369246 0.0032615013 0.0032031682
800 0.00010709448 8.0430402e-05 0.0026895825 0.0027732167 0.0027501992
900 8.7153735e-05 6.3865397e-05 0.0024057711 0.0024050424 0.0024818746
1000 7.3842889e-05 5.1564094e-05 0.0021520507 0.0021316601 0.0022291678
1100 6.3710979e-05 4.3417308e-05 0.0019865788 0.0019506967 0.0020247423
1200 5.6443217e-05 3.5839723e-05 0.0018116278 0.0017780415 0.0018009974
1300 5.2117104e-05 2.9304564e-05 0.0016091295 0.001640217 0.0016494854
1400 4.7722691e-05 2.4720323e-05 0.0014728954 0.0014850638 0.0015059012
1500 4.3462545e-05 2.1647487e-05 0.0013643988 0.001374924 0.0013860842
1600 4.0536322e-05 1.8288037e-05 0.0012573942 0.0012444583 0.0012755521
1700 3.775762e-05 1.6253386e-05 0.0011940081 0.0011936534 0.0011875306
1800 3.5608024e-05 1.4169135e-05 0.0011046597 0.0011124609 0.0011233068
1900 3.3550883e-05 1.2504042e-05 0.0010287232 0.0010521058 0.0010397415
2000 3.1777303e-05 1.1341947e-05 0.00099021486 0.000998969 0.0009824298
2100 3.0397425e-05 1.0197816e-05 0.00093175155 0.0009356076 0.00093587614
2200 2.9415297e-05 9.1442693e-06 0.00087450395 0.00088005632 0.00090292439
2300 2.8707506e-05 8.0867687e-06 0.00083155793 0.00084280783 0.00081915094
2400 2.8087223e-05 7.1902632e-06 0.0007805398 0.00077693415 0.00079586919
2500 2.7412036e-05 6.5329159e-06 0.00074113675 0.00075460667 0.00075182142
2600 2.679767e-05 5.9994917e-06 0.00071331838 0.00071107795 0.00071851862
2700 2.635836e-05 5.4669016e-06 0.00067864938 0.00067012596 0.00068378851
2800 2.5965243e-05 4.949289e-06 0.00064702706 0.00064070457 0.00065886675
2900 2.559065e-05 4.5456845e-06 0.0006226747 0.00061715852 0.00061944402
3000 2.5250954e-05 4.1940249e-06 0.00059390621 0.00060635122 0.00059577814
3100 2.4986177e-05 3.8098655e-06 0.00057100922 0.00056783357 0.00056395219
3200 2.4747099e-05 3.5558624e-06 0.00054231559 0.00054795569 0.00055365101
3300 2.4583172e-05 3.2301482e-06 0.00052359125 0.00052829803 0.00051398925
3400 2.4465352e-05 2.9399683e-06 0.000501977 0.00050484541 0.00050034857
3500 2.4292908e-05 2.7427543e-06 0.00048102359 0.00048510374 0.00047731201
3600 2.4101584e-05 2.5764805e-06 0.00045636206 0.00047866627 0.00046659816
3700 2.3996774e-05 2.3958219e-06 0.00045065226 0.00045184729 0.0004429641
3800 2.3876498e-05 2.2130338e-06 0.00043775075 0.00043861927 0.00042506898
3900 2.3795887e-05 2.0489788e-06 0.00041988245 0.00041826647 0.00040894442
4000 2.3728265e-05 1.8872709e-06 0.0004011638 0.00040340239 0.00039261217
4100 2.361572e-05 1.8065046e-06 0.00038335165 0.00039918443 0.00037720392
4200 2.3535095e-05 1.6942677e-06 0.00037114826 0.00038329691 0.0003685779
4300 2.3470549e-05 1.5919892e-06 0.00036932669 0.00036792338 0.00034946519
4400 2.3435028e-05 1.4707935e-06 0.00035224849 0.00035387592 0.00033687303
4500 2.3379331e-05 1.3699313e-06 0.00033731606 0.00034141019 0.00032655896
4600 2.3319696e-05 1.3018783e-06 0.0003294574 0.00032975202 0.00031755058
4700 2.3261329e-05 1.2276139e-06 0.00031109085 0.00032618425 0.00030828008
4800 2.3223647e-05 1.140323e-06 0.00030403794 0.00030819264 0.00029880154
4900 2.3159354e-05 1.1062118e-06 0.00029932089 0.00031023756 0.0002883218
5000 2.3107215e-05 1.0481984e-06 0.00028703077 0.00029791419 0.00028428891
5100 2.3059227e-05 9.9631603e-07 0.00028386337 0.00029449929 0.00027691149
5200 2.2992218e-05 9.7498165e-07 0.00028122064 0.00029160621 0.00026605841
5300 2.2965927e-05 9.089863e-07 0.00026898334 0.00027744029 0.00025999853
5400 2.2917228e-05 8.6905288e-07 0.00026737748 0.00026872859 0.00025247197
5500 2.2888721e-05 8.1654344e-07 0.00025981052 0.00025927594 0.00024538697
5600 2.2858634e-05 7.7918083e-07 0.00024981244 0.00025588577 0.00023814373
5700 2.281493e-05 7.5493879e-07 0.00024608832 0.0002484983 0.00024049134
5800 2.2768424e-05 7.3151987e-07 0.00024270273 0.00024299121 0.00022677616
5900 2.2732815e-05 7.074362e-07 0.00023856426 0.00024317059 0.00022163128
6000 2.2709157e-05 6.6558163e-07 0.00023134432 0.00023530205 0.00022005083
6100 2.2662747e-05 6.5786116e-07 0.0002266164 0.00023346154 0.0002204147
6200 2.2633078e-05 6.2893457e-07 0.00022245338 0.00022992048 0.00021358332
6300 2.2609503e-05 5.9395689e-07 0.00021957435 0.00022236534 0.00020603821
6400 2.2569287e-05 5.8419818e-07 0.00021444329 0.00022008074 0.00020680001
6500 2.2558171e-05 5.5154822e-07 0.00020972278 0.00021475404 0.0001968296
6600 2.2537593e-05 5.2835018e-07 0.00020614625 0.00021023961 0.00019204871
6700 2.2502584e-05 5.1813436e-07 0.00020503279 0.00020643962 0.00019037754
6800 2.2478356e-05 4.9790083e-07 0.00020102604 0.00020156032 0.00018515076
6900 2.2455758e-05 4.8193847e-07 0.00019951327 0.00019687965 0.00017945937
7000 2.2451788e-05 4.5334026e-07 0.00019179079 0.00019105513 0.00018131892
7100 2.242032e-05 4.4768512e-07 0.00018785677 0.00019138466 0.00017575316
7200 2.2399735e-05 4.3736624e-07 0.00018626883 0.00019360748 0.00017301675
7300 2.2389231e-05 4.15585e-07 0.00018246126 0.00018633267 0.00016724368
7400 2.2380183e-05 3.9716485e-07 0.00017807282 0.00017911936 0.00016526154
7500 2.2360502e-05 3.8572453e-07 0.00017941834 0.00017481595 0.00016562917
7600 2.2352618e-05 3.6544203e-07 0.0001738664 0.00017168235 0.00015859374
7700 2.2334806e-05 3.607199e-07 0.00017225216 0.00017080992 0.00015661869
7800 2.2324987e-05 3.4379759e-07 0.00016927498 0.00016663572 0.00015055472
7900 2.2312673e-05 3.3388048e-07 0.00016641481 0.00016711678 0.00014572442
8000 2.2301157e-05 3.2411769e-07 0.00016240031 0.00016423398 0.00014745631
8100 2.2289999e-05 3.1300113e-07 0.00015980907 0.00016023173 0.00014648402
8200 2.2290743e-05 2.9256755e-07 0.00015325928 0.00015691336 0.00013999402
8300 2.2281125e-05 2.8428888e-07 0.00015228905 0.00015083585 0.00013859409
8400 2.2276417e-05 2.7196488e-07 0.00014803522 0.00014827108 0.00013276633
8500 2.2270336e-05 2.6090967e-07 0.00014433988 0.00014599154 0.00013300747
8600 2.2263872e-05 2.4958292e-07 0.00013831677 0.00014270235 0.00012905707
8700 2.2248712e-05 2.4963205e-07 0.00013872459 0.0001439154 0.00012481041
8800 2.2250741e-05 2.3462546e-07 0.00013718378 0.00013836506 0.00012339897
8900 2.224156e-05 2.2671444e-07 0.00013600425 0.00013296456 0.00011974963
9000 2.223534e-05 2.2123093e-07 0.00013416263 0.00013296441 0.00011589796
9100 2.2228222e-05 2.1383104e-07 0.00013107675 0.00012912031 0.0001145627
9200 2.2227286e-05 2.0166229e-07 0.00012779654 0.00012790731 0.00011151855
9300 2.2220754e-05 1.9643141e-07 0.00012495065 0.0001246298 0.00010931293
9400 2.221898e-05 1.8787396e-07 0.00012142128 0.0001220759 0.00010842013
9500 2.2213967e-05 1.8124491e-07 0.00011804877 0.00012238176 0.00010366211
9600 2.2207421e-05 1.7767413e-07 0.00011648229 0.00012054702 0.00010322444
9700 2.2204058e-05 1.7056842e-07 0.00011554095 0.00011498299 9.977342e-05
9800 2.2199188e-05 1.6522097e-07 0.0001128848 0.00011236078 9.9036502e-05
9900 2.2197504e-05 1.5746927e-07 0.00010946504 0.00010989886 9.6727132e-05
10000 2.2192316e-05 1.5304623e-07 0.00010594185 0.00010914699 9.528986e-05
10100 2.2184947e-05 1.5244045e-07 0.00010752432 0.00010893017 9.4551907e-05
10200 2.2178334e-05 1.4903759e-07 0.00010714254 0.00010631136 9.3781244e-05
10300 2.2176545e-05 1.4377101e-07 0.00010349821 0.00010615276 9.0627052e-05
10400 2.2170858e-05 1.4070094e-07 0.00010356274 0.00010425909 8.9700967e-05
10500 2.216613e-05 1.3820877e-07 0.00010184809 0.00010281562 8.9244415e-05
10600 2.2164055e-05 1.3216024e-07 0.00010308437 9.8578026e-05 8.5149176e-05
10700 2.2159491e-05 1.2984075e-07 9.8219521e-05 9.9602891e-05 8.4157228e-05
10800 2.2154477e-05 1.2630119e-07 9.6387929e-05 9.8518691e-05 8.4474815e-05
10900 2.2154048e-05 1.2065173e-07 9.7781796e-05 9.576565e-05 8.154014e-05
11000 2.2149114e-05 1.1781869e-07 9.2783199e-05 9.5117475e-05 8.0363701e-05
11100 2.2141212e-05 1.1917239e-07 9.5852588e-05 9.4366973e-05 8.1109475e-05
11200 2.2137916e-05 1.1552597e-07 9.3462537e-05 9.3233749e-05 8.1109707e-05
11300 2.213658e-05 1.1008603e-07 9.0556648e-05 9.0476596e-05 7.9879738e-05
11400 2.2132896e-05 1.0849193e-07 9.0387656e-05 8.8771879e-05 7.7878167e-05
11500 2.2131699e-05 1.0493084e-07 8.8911234e-05 8.9360083e-05 7.6820653e-05
11600 2.212882e-05 1.0226714e-07 8.7730933e-05 8.9073361e-05 7.4566523e-05
11700 2.2124982e-05 9.9910102e-08 8.477437e-05 8.7806303e-05 7.4307427e-05
11800 2.2122352e-05 9.7448554e-08 8.7713138e-05 8.4813396e-05 7.2459814e-05
11900 2.2115306e-05 9.9205622e-08 8.6813079e-05 8.772968e-05 7.320007e-05
12000 2.211193e-05 9.6005824e-08 8.5655613e-05 8.5316917e-05 7.2326687e-05
12100 2.2111397e-05 9.2687716e-08 8.307622e-05 8.4586949e-05 7.1199156e-05
12200 2.2109506e-05 9.0349635e-08 8.3196249e-05 8.0047918e-05 7.1459883e-05
12300 2.210352e-05 9.1828777e-08 8.3023487e-05 8.298801e-05 7.0680887e-05
12400 2.2102016e-05 8.8266841e-08 8.1237167e-05 8.0897688e-05 6.8984427e-05
12500 2.2100818e-05 8.4451868e-08 8.1241577e-05 7.9056657e-05 6.717288e-05
12600 2.2099153e-05 8.2172667e-08 8.1099692e-05 7.7228294e-05 6.5679604e-05
12700 2.2096311e-05 8.1609526e-08 7.8279774e-05 7.7218651e-05 6.5855028e-05
12800 2.2092745e-05 8.0724331e-08 7.7558727e-05 7.7608398e-05 6.3769835e-05
12900 2.2092691e-05 7.7030815e-08 7.6375935e-05 7.5224855e-05 6.3459282e-05
13000 2.2090024e-05 7.6060223e-08 7.7017264e-05 7.4786591e-05 6.3026033e-05
13100 2.2087518e-05 7.4543793e-08 7.6332555e-05 7.3188101e-05 6.1356128e-05
13200 2.2084857e-05 7.418719e-08 7.6669987e-05 7.404012e-05 6.2432396e-05
13300 2.2082212e-05 7.2196183e-08 7.4038422e-05 7.4260224e-05 6.1635001e-05
13400 2.2080736e-05 7.0711865e-08 7.2995841e-05 7.2774089e-05 5.8837968e-05
13500 2.2078436e-05 7.0246025e-08 7.2080944e-05 7.1699053e-05 6.0562467e-05
13600 2.2076176e-05 6.8496408e-08 7.3283243e-05 7.0444762e-05 5.8434239e-05
13700 2.207464e-05 6.6747696e-08 7.0510931e-05 7.0209957e-05 5.8512753e-05
13800 2.2073094e-05 6.4951584e-08 7.221483e-05 6.8194771e-05 5.8326554e-05
13900 2.2069993e-05 6.4329747e-08 7.108122e-05 6.7692383e-05 5.6975473e-05
14000 2.2068384e-05 6.3826074e-08 7.0821331e-05 6.6802334e-05 5.68441e-05
14100 2.2066879e-05 6.1895531e-08 6.9341143e-05 6.788505e-05 5.5082465e-05
14200 2.2065117e-05 6.1337212e-08 6.9233584e-05 6.8817889e-05 5.5574272e-05
14300 2.2064837e-05 5.8643765e-08 6.5620482e-05 6.5164345e-05 5.5025535e-05
14400 2.2063445e-05 5.7670706e-08 6.5693047e-05 6.5227069e-05 5.3546255e-05
14500 2.2062593e-05 5.538514e-08 6.696964e-05 6.4489522e-05 5.186144e-05
14600 2.2059889e-05 5.6128076e-08 6.6606975e-05 6.3318574e-05 5.3065953e-05
14700 2.2058311e-05 5.4197187e-08 6.5636138e-05 6.2862183e-05 5.1216722e-05
14800 2.2056992e-05 5.3753302e-08 6.4166876e-05 6.2347682e-05 5.1644619e-05
14900 2.2055144e-05 5.3731475e-08 6.2886449e-05 6.2665027e-05 5.1085737e-05
15000 2.2055534e-05 5.1421678e-08 6.3216438e-05 6.2497955e-05 4.9420052e-05
15100 2.2053654e-05 5.02402e-08 6.185253e-05 6.1020856e-05 4.8961501e-05
15200 2.2052236e-05 4.9076779e-08 6.1894516e-05 5.8658526e-05 4.9270802e-05
15300 2.2050986e-05 4.8464692e-08 6.1632248e-05 5.939126e-05 4.7954422e-05
15400 2.2050221e-05 4.7362506e-08 5.9932389e-05 5.8619584e-05 4.8571134e-05
15500 2.2049702e-05 4.5776499e-08 5.9343369e-05 5.6908271e-05 4.5799128e-05
15600 2.2046842e-05 4.6074337e-08 6.0035433e-05 5.8667997e-05 4.6172612e-05
15700 2.2046262e-05 4.542862e-08 5.8703316e-05 5.7704418e-05 4.6189812e-05
15800 2.204616e-05 4.3329814e-08 5.6689179e-05 5.6845301e-05 4.5918735e-05
15900 2.2044466e-05 4.3332045e-08 5.806419e-05 5.6030356e-05 4.5166944e-05
16000 2.2043425e-05 4.2921122e-08 5.6716404e-05 5.5927539e-05 4.5500189e-05
16100 2.2041966e-05 4.1774604e-08 5.6210966e-05 5.4580522e-05 4.4615956e-05
16200 2.2041126e-05 4.1198995e-08 5.6314084e-05 5.5538584e-05 4.3793702e-05
16300 2.2040394e-05 4.0405671e-08 5.6049147e-05 5.5461464e-05 4.1884999e-05
16400 2.2040538e-05 3.8384306e-08 5.4398726e-05 5.3601303e-05 4.2580325e-05
16500 2.2039103e-05 3.8153339e-08 5.46254e-05 5.3390447e-05 4.2089044e-05
16600 2.2036976e-05 3.8358477e-08 5.2955748e-05 5.3742853e-05 4.1975739e-05
16700 2.20354e-05 3.8227046e-08 5.3241934e-05 5.2684751e-05 4.1815545e-05
16800 2.2034486e-05 3.7612842e-08 5.3915367e-05 5.3101063e-05 3.9996576e-05
16900 2.2033757e-05 3.6901749e-08 5.324896e-05 5.2020981e-05 4.0209668e-05
17000 2.2032483e-05 3.631797e-08 5.2504044e-05 5.1532024e-05 4.1841265e-05
17100 2.2031907e-05 3.5761725e-08 5.2177113e-05 5.1853522e-05 4.0475234e-05
17200 2.2030622e-05 3.5615934e-08 5.2153967e-05 5.1680185e-05 4.0255138e-05
17300 2.2028906e-05 3.5769817e-08 5.3276095e-05 5.1713123e-05 3.9429947e-05
17400 2.2027982e-05 3.5279634e-08 5.1720769e-05 5.1071287e-05 3.946136e-05
17500 2.2027385e-05 3.4532852e-08 5.0897208e-05 5.0132128e-05 3.9770047e-05
17600 2.2025743e-05 3.4705869e-08 5.1921573e-05 4.9849618e-05 3.9250188e-05
17700 2.202442e-05 3.4664237e-08 5.1037538e-05 5.1309699e-05 3.8699028e-05
17800 2.2024041e-05 3.3230639e-08 5.0676543e-05 4.9676967e-05 3.6992319e-05
17900 2.2024009e-05 3.2185399e-08 4.9624741e-05 4.8805054e-05 3.8163917e-05
18000 2.2023291e-05 3.1901464e-08 4.9090832e-05 4.9184392e-05 3.7458065e-05
18100 2.202221e-05 3.1698456e-08 4.9178905e-05 4.8243736e-05 3.7166662e-05
18200 2.2021437e-05 3.1022506e-08 4.8457604e-05 4.8875433e-05 3.5824097e-05
18300 2.2020792e-05 3.0064688e-08 4.909522e-05 4.7180933e-05 3.5355876e-05
18400 2.2021113e-05 2.9279611e-08 4.7111226e-05 4.7747191e-05 3.4625046e-05
18500 2.2019843e-05 2.9077485e-08 4.7131195e-05 4.633375e-05 3.5061152e-05
18600 2.201863e-05 2.9334156e-08 4.7778742e-05 4.7369011e-05 3.4559728e-05
18700 2.2018219e-05 2.862088e-08 4.7260131e-05 4.5881586e-05 3.4305681e-05
18800 2.2018393e-05 2.7165913e-08 4.6456933e-05 4.5912824e-05 3.3022256e-05
18900 2.201532e-05 2.8873682e-08 4.7138874e-05 4.6487853e-05 3.5130117e-05
19000 2.2014497e-05 2.8430782e-08 4.7563112e-05 4.6760097e-05 3.3226263e-05
19100 2.2014081e-05 2.8050044e-08 4.6431839e-05 4.6219284e-05 3.4248177e-05
19200 2.2013576e-05 2.7201031e-08 4.5709989e-05 4.5916792e-05 3.3897641e-05
19300 2.2012609e-05 2.7374842e-08 4.561715e-05 4.5693439e-05 3.4284473e-05
19400 2.2010667e-05 2.8105102e-08 4.6663945e-05 4.6539017e-05 3.3608877e-05
19500 2.2010486e-05 2.6897595e-08 4.5576796e-05 4.6292499e-05 3.2656892e-05
19600 2.2010302e-05 2.6248669e-08 4.4996903e-05 4.3675939e-05 3.4540503e-05
19700 2.2009254e-05 2.6450724e-08 4.4868007e-05 4.5628545e-05 3.3413034e-05
19800 2.2007283e-05 2.721852e-08 4.5939302e-05 4.5327011e-05 3.3411556e-05
19900 2.2007538e-05 2.6295204e-08 4.5722301e-05 4.441743e-05 3.4023953e-05
20000 2.2006515e-05 2.6089093e-08 4.4621124e-05 4.5449725e-05 3.2126359e-05
Loop time of 7.03939 on 1 procs for 20000 steps with 4348 atoms
Performance: 24547586.015 tau/day, 2841.156 timesteps/s, 12.353 Matom-step/s
99.8% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 4.55 | 4.55 | 4.55 | 0.0 | 64.64
Bond | 0.00067765 | 0.00067765 | 0.00067765 | 0.0 | 0.01
Neigh | 0.3745 | 0.3745 | 0.3745 | 0.0 | 5.32
Comm | 0.013687 | 0.013687 | 0.013687 | 0.0 | 0.19
Output | 0.006889 | 0.006889 | 0.006889 | 0.0 | 0.10
Modify | 1.9222 | 1.9222 | 1.9222 | 0.0 | 27.31
Other | | 0.1715 | | | 2.44
Nlocal: 4348 ave 4348 max 4348 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 23350 ave 23350 max 23350 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 23350
Ave neighs/atom = 5.3702852
Ave special neighs/atom = 0
Neighbor list builds = 222
Dangerous builds = 0
unfix wtemp
# Replicate cylinder and add bonds
replicate 4 1 1
Replication is creating a 4x1x1 = 4 times larger system...
orthogonal box = (0 -10 -0.0025658844) to (80 10 20.002511)
1 by 1 by 1 MPI processor grid
17392 atoms
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 1 1
special bond factors coul: 0 1 1
0 = max # of 1-2 neighbors
101 = max # of special neighbors
special bonds CPU = 0.001 seconds
replicate CPU = 0.003 seconds
region r1 block 0.0 20.0 EDGE EDGE EDGE EDGE side in units box
region r2 block 20.0 40.0 EDGE EDGE EDGE EDGE side in units box
region r3 block 40.0 60.0 EDGE EDGE EDGE EDGE side in units box
region r4 block 60.0 80.0 EDGE EDGE EDGE EDGE side in units box
group p1 region r1
4348 atoms in group p1
group p2 region r2
4348 atoms in group p2
group p3 region r3
4348 atoms in group p3
group p4 region r4
4348 atoms in group p4
set group p2 type 2
Setting atom values ...
4348 settings made for type
set group p3 type 3
Setting atom values ...
4348 settings made for type
set group p4 type 4
Setting atom values ...
4348 settings made for type
velocity all set 0.0 0.0 0.0
neighbor 1.0 bin
create_bonds many p1 p1 1 0.0 1.5
Generated 0 of 6 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 2
ghost atom cutoff = 2.6
binsize = 1, bins = 80 20 21
2 neighbor lists, perpetual/occasional/extra = 1 1 0
(1) command create_bonds, occasional
attributes: full, newton on
pair build: full/bin
stencil: full/bin/3d
bin: standard
(2) pair bpm/spring, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Added 29229 bonds, new total = 29229
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 1 1
special bond factors coul: 0 1 1
19 = max # of 1-2 neighbors
101 = max # of special neighbors
special bonds CPU = 0.002 seconds
create_bonds many p2 p2 2 0.0 1.5
Generated 0 of 6 mixed pair_coeff terms from geometric mixing rule
WARNING: Bonds are defined but no bond style is set (../force.cpp:197)
WARNING: Likewise 1-2 special neighbor interactions != 1.0 (../force.cpp:199)
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 2
ghost atom cutoff = 2.6
binsize = 1, bins = 80 20 21
2 neighbor lists, perpetual/occasional/extra = 1 1 0
(1) command create_bonds, occasional
attributes: full, newton on
pair build: full/bin
stencil: full/bin/3d
bin: standard
(2) pair bpm/spring, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Added 29229 bonds, new total = 58458
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 1 1
special bond factors coul: 0 1 1
19 = max # of 1-2 neighbors
101 = max # of special neighbors
special bonds CPU = 0.003 seconds
create_bonds many p3 p3 3 0.0 1.5
Generated 0 of 6 mixed pair_coeff terms from geometric mixing rule
WARNING: Bonds are defined but no bond style is set (../force.cpp:197)
WARNING: Likewise 1-2 special neighbor interactions != 1.0 (../force.cpp:199)
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 2
ghost atom cutoff = 2.6
binsize = 1, bins = 80 20 21
2 neighbor lists, perpetual/occasional/extra = 1 1 0
(1) command create_bonds, occasional
attributes: full, newton on
pair build: full/bin
stencil: full/bin/3d
bin: standard
(2) pair bpm/spring, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Added 29229 bonds, new total = 87687
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 1 1
special bond factors coul: 0 1 1
19 = max # of 1-2 neighbors
101 = max # of special neighbors
special bonds CPU = 0.004 seconds
create_bonds many p4 p4 4 0.0 1.5
Generated 0 of 6 mixed pair_coeff terms from geometric mixing rule
WARNING: Bonds are defined but no bond style is set (../force.cpp:197)
WARNING: Likewise 1-2 special neighbor interactions != 1.0 (../force.cpp:199)
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 2
ghost atom cutoff = 2.6
binsize = 1, bins = 80 20 21
2 neighbor lists, perpetual/occasional/extra = 1 1 0
(1) command create_bonds, occasional
attributes: full, newton on
pair build: full/bin
stencil: full/bin/3d
bin: standard
(2) pair bpm/spring, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Added 29229 bonds, new total = 116916
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 1 1
special bond factors coul: 0 1 1
19 = max # of 1-2 neighbors
101 = max # of special neighbors
special bonds CPU = 0.005 seconds
neighbor 0.3 bin
special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0
bond_style bpm/spring break no smooth no volume/factor yes
bond_coeff 1 1.0 0 1.0 -0.8
bond_coeff 2 1.0 0 1.0 0.0
bond_coeff 3 1.0 0 1.0 2.0
bond_coeff 4 1.0 0 1.0 10.0
# squish
region b block EDGE EDGE EDGE EDGE -1.0 2.0 units box
region t block EDGE EDGE EDGE EDGE 18.0 21.0 units box
group bot region b
2040 atoms in group bot
group top region t
2036 atoms in group top
velocity top set 0.0 0.0 -0.0025
fix 2 bot setforce 0.0 0.0 0.0
fix 3 top setforce 0.0 0.0 0.0
compute zmax all reduce max z
thermo_style custom step ke pe pxx pyy pzz c_zmax
dump 1 all custom 100 atomDump id type x y z
run 10000
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- BPM bond style: doi:10.1039/D3SM01373A
@Article{Clemmer2024,
author = {Clemmer, Joel T. and Monti, Joseph M. and Lechman, Jeremy B.},
title = {A soft departure from jamming: the compaction of deformable
granular matter under high pressures},
journal = {Soft Matter},
year = 2024,
volume = 20,
number = 8,
pages = {1702--1718}
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Generated 0 of 6 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 1.3
ghost atom cutoff = 2.6
binsize = 0.65, bins = 124 31 31
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair bpm/spring, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 33.55 | 33.55 | 33.55 Mbytes
Step KinEng PotEng Pxx Pyy Pzz c_zmax
20000 7.3311514e-07 0 5.5082149e-05 5.6035691e-05 0.00016879881 20.000342
20100 3.1226194e-06 4.1766539e-06 -0.00013996263 -0.00014393529 0.0029331928 19.964952
20200 2.5567295e-06 1.4988852e-05 -0.00027674096 -0.00027610139 0.0056641847 19.929561
20300 2.5665365e-06 3.3513395e-05 -0.00042198157 -0.0004191815 0.0083802213 19.894171
20400 2.4143831e-06 5.9638373e-05 -0.00055373017 -0.00055236369 0.011083701 19.85878
20500 2.2440232e-06 9.3155125e-05 -0.00070411826 -0.00070166982 0.013871936 19.82339
20600 2.3036882e-06 0.00013415012 -0.00084108079 -0.00084004876 0.016564858 19.787999
20700 2.4894579e-06 0.00018252868 -0.00098164122 -0.00097848101 0.019243173 19.752609
20800 2.3533488e-06 0.0002383092 -0.0011196916 -0.0011163409 0.021906836 19.717218
20900 2.3312562e-06 0.000301439 -0.0012662271 -0.0012625903 0.024743687 19.681828
21000 2.3806649e-06 0.00037188609 -0.0014035798 -0.0013992731 0.02739958 19.646437
21100 2.3212779e-06 0.00044964779 -0.0015396059 -0.0015348733 0.030041098 19.611047
21200 2.3908442e-06 0.00053469194 -0.001674797 -0.0016694993 0.03266844 19.575656
21300 2.3622478e-06 0.00062699617 -0.001822934 -0.0018167895 0.035552232 19.540266
21400 2.349964e-06 0.00072653051 -0.0019569691 -0.0019503123 0.038170924 19.504875
21500 2.3567592e-06 0.00083327134 -0.0020899915 -0.0020827032 0.040775314 19.469484
21600 2.3616263e-06 0.00094719631 -0.0022220661 -0.0022140075 0.043365368 19.434094
21700 2.353721e-06 0.0010682808 -0.0023711759 -0.0023623886 0.046296241 19.398703
21800 2.3646799e-06 0.0011965 -0.0025021157 -0.0024925265 0.048877326 19.363313
21900 2.3550746e-06 0.0013318277 -0.0026319662 -0.0026215842 0.051443901 19.327922
22000 2.3552825e-06 0.0014742397 -0.0027607166 -0.0027495396 0.053995979 19.292532
22100 2.3588762e-06 0.0016237112 -0.0028884164 -0.0028763855 0.05653356 19.257141
22200 2.3566445e-06 0.0017802179 -0.0030385388 -0.0030255211 0.05951687 19.221751
22300 2.3569128e-06 0.0019437341 -0.0031650443 -0.0031511287 0.062044959 19.18636
22400 2.3573615e-06 0.0021142342 -0.0032904648 -0.0032756057 0.064558413 19.15097
22500 2.3556792e-06 0.0022916926 -0.003414791 -0.0033989599 0.067057238 19.115579
22600 2.3559622e-06 0.0024760839 -0.0035658051 -0.0035488398 0.070087637 19.080189
22700 2.3565188e-06 0.0026673826 -0.0036888874 -0.0036708796 0.072576558 19.044798
22800 2.3554654e-06 0.0028655631 -0.0038108556 -0.0037917743 0.075050709 19.009408
22900 2.3556755e-06 0.0030705996 -0.0039317038 -0.0039115206 0.07751008 18.974017
23000 2.3553906e-06 0.0032824663 -0.0040835075 -0.0040620186 0.080587643 18.938627
23100 2.3549893e-06 0.0035011372 -0.0042030492 -0.0041803845 0.08303667 18.903236
23200 2.3549869e-06 0.0037265864 -0.0043214571 -0.004297582 0.085470779 18.867846
23300 2.3548674e-06 0.0039587875 -0.0044387217 -0.004413608 0.087889956 18.832455
23400 2.3544804e-06 0.0041977141 -0.0045911895 -0.0045645946 0.091014737 18.797065
23500 2.3543814e-06 0.0044433399 -0.0047070844 -0.0046791718 0.093423108 18.761674
23600 2.3541461e-06 0.0046956382 -0.0048218198 -0.0047925569 0.09581641 18.726284
23700 2.3539051e-06 0.0049545823 -0.0049353928 -0.0049047458 0.098194634 18.690893
23800 2.3537612e-06 0.0052201456 -0.0050478006 -0.0050157354 0.10055777 18.655502
23900 2.3535618e-06 0.0054923012 -0.0052005398 -0.0051667526 0.10373359 18.620112
24000 2.353333e-06 0.005771022 -0.0053114912 -0.0052762067 0.10608529 18.584721
24100 2.3531619e-06 0.006056281 -0.0054212598 -0.0053844406 0.10842176 18.549331
24200 2.3529697e-06 0.0063480511 -0.0055298409 -0.0054914515 0.11074298 18.51394
24300 2.352776e-06 0.0066463046 -0.0056829436 -0.0056426256 0.11396569 18.47855
24400 2.3526011e-06 0.0069510143 -0.0057899993 -0.0057480274 0.11627496 18.443159
24500 2.3524078e-06 0.0072621525 -0.0058958481 -0.0058521853 0.11856882 18.407769
24600 2.3522128e-06 0.0075796913 -0.0060004865 -0.0059550957 0.12084728 18.372378
24700 2.3520292e-06 0.0079036029 -0.0061538145 -0.0061062726 0.12411681 18.336988
24800 2.3518453e-06 0.0082338593 -0.0062568585 -0.0062074978 0.12638278 18.301597
24900 2.3516643e-06 0.0085704324 -0.0063586718 -0.0063074546 0.12863317 18.266207
25000 2.3514892e-06 0.0089132938 -0.0064592514 -0.0064061393 0.13086797 18.230816
25100 2.3513106e-06 0.0092624151 -0.0066126575 -0.0065571568 0.13418421 18.195426
25200 2.3511362e-06 0.0096177679 -0.0067115701 -0.0066540785 0.13640596 18.160035
25300 2.3509678e-06 0.0099793234 -0.0068092292 -0.0067497066 0.13861195 18.124645
25400 2.3508006e-06 0.010347053 -0.0069056318 -0.0068440373 0.14080217 18.089254
25500 2.3506356e-06 0.010720927 -0.0070007749 -0.0069370671 0.14297661 18.053864
25600 2.3504737e-06 0.011100917 -0.0071536223 -0.0070872122 0.14634153 18.018473
25700 2.3503117e-06 0.011486993 -0.007247006 -0.0071783805 0.14850216 17.983083
25800 2.3501529e-06 0.011879126 -0.0073391102 -0.0072682259 0.15064682 17.947692
25900 2.3499998e-06 0.012277287 -0.0074299315 -0.0073567446 0.1527755 17.912302
26000 2.3498505e-06 0.012681445 -0.0075824884 -0.0075063219 0.15618632 17.876911
26100 2.3497046e-06 0.013091571 -0.0076714736 -0.0075928957 0.15830056 17.84152
26200 2.3495632e-06 0.013507634 -0.0077591555 -0.0076781204 0.16039862 17.80613
26300 2.349426e-06 0.013929604 -0.0078455309 -0.0077619923 0.1624805 17.770739
26400 2.3492932e-06 0.014357451 -0.0079976262 -0.0079108096 0.16593692 17.735349
26500 2.349166e-06 0.014791144 -0.008082087 -0.0079926504 0.16800369 17.699958
26600 2.3490444e-06 0.015230653 -0.0081652207 -0.0080731154 0.17005406 17.664568
26700 2.3489277e-06 0.015675946 -0.008247024 -0.0081522008 0.17208804 17.629177
26800 2.3488161e-06 0.016126992 -0.0083984781 -0.008300055 0.17558967 17.593787
26900 2.3487105e-06 0.016583761 -0.0084782861 -0.0083770201 0.17760782 17.558396
27000 2.3486117e-06 0.017046219 -0.0085567431 -0.008452582 0.17960935 17.523006
27100 2.3485201e-06 0.017514336 -0.0086338458 -0.0085267367 0.18159424 17.487615
27200 2.3484365e-06 0.017988079 -0.0087095911 -0.0085994803 0.18356247 17.452225
27300 2.3483611e-06 0.018467417 -0.008859495 -0.0087453549 0.18710893 17.416834
27400 2.3482941e-06 0.018952317 -0.0089331441 -0.0088158653 0.18906038 17.381444
27500 2.3482362e-06 0.019442747 -0.0090054148 -0.0088849402 0.19099494 17.346053
27600 2.3481885e-06 0.019938673 -0.009076304 -0.0089525756 0.19291257 17.310663
27700 2.3481517e-06 0.020440063 -0.0092251203 -0.0090969772 0.19650266 17.275272
27800 2.3481263e-06 0.020946883 -0.0092938279 -0.0091622823 0.1984027 17.239882
27900 2.3481132e-06 0.0214591 -0.0093611327 -0.0092261226 0.20028558 17.204491
28000 2.3481132e-06 0.02197668 -0.0094270316 -0.0092884939 0.20215126 17.169101
28100 2.3481274e-06 0.02249959 -0.0095745512 -0.0094311779 0.20578425 17.13371
28200 2.348157e-06 0.023027794 -0.0096381809 -0.0094911175 0.20763145 17.09832
28300 2.3482036e-06 0.023561259 -0.0097003831 -0.0095495617 0.20946119 17.062929
28400 2.3482687e-06 0.024099949 -0.0097611548 -0.0096065059 0.21127344 17.027538
28500 2.3480319e-06 0.024643805 -0.0099071195 -0.0097471709 0.21494867 16.992148
28600 2.3475123e-06 0.025192783 -0.0099654368 -0.0098014823 0.21674185 16.956757
28700 2.3465283e-06 0.02574682 -0.010022297 -0.0098542782 0.21851751 16.921367
28800 2.3462245e-06 0.026305935 -0.010077643 -0.0099055665 0.2202753 16.885976
28900 2.3465001e-06 0.026870106 -0.010131548 -0.0099553377 0.22201519 16.850586
29000 2.3468383e-06 0.027439281 -0.010274668 -0.010092595 0.22572932 16.815195
29100 2.3470511e-06 0.028013406 -0.010326047 -0.010139547 0.22744875 16.779805
29200 2.3477211e-06 0.02859243 -0.010375939 -0.01018496 0.22915025 16.744414
29300 2.348195e-06 0.029176333 -0.010424252 -0.010228763 0.23083364 16.709024
29400 2.3486217e-06 0.02976508 -0.010565133 -0.010363233 0.2345875 16.673633
29500 2.3494547e-06 0.030358578 -0.010610824 -0.010404093 0.2362499 16.638243
29600 2.350246e-06 0.030956806 -0.010654741 -0.010443743 0.23789521 16.602852
29700 2.350645e-06 0.031559783 -0.010697062 -0.01048188 0.23952237 16.567462
29800 2.3513205e-06 0.032167468 -0.010835186 -0.010613742 0.24331694 16.532071
29900 2.3500682e-06 0.03277985 -0.010874694 -0.010649336 0.2449217 16.496681
30000 2.348814e-06 0.033396866 -0.010912585 -0.010683036 0.24650812 16.46129
Loop time of 96.3898 on 1 procs for 10000 steps with 17392 atoms
Performance: 896360.661 tau/day, 103.745 timesteps/s, 1.804 Matom-step/s
99.8% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 2.4048 | 2.4048 | 2.4048 | 0.0 | 2.49
Bond | 89.472 | 89.472 | 89.472 | 0.0 | 92.82
Neigh | 0.25526 | 0.25526 | 0.25526 | 0.0 | 0.26
Comm | 0.0489 | 0.0489 | 0.0489 | 0.0 | 0.05
Output | 1.6355 | 1.6355 | 1.6355 | 0.0 | 1.70
Modify | 1.8578 | 1.8578 | 1.8578 | 0.0 | 1.93
Other | | 0.7153 | | | 0.74
Nlocal: 17392 ave 17392 max 17392 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 77 ave 77 max 77 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 102662 ave 102662 max 102662 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 102662
Ave neighs/atom = 5.9028289
Ave special neighs/atom = 13.444802
Neighbor list builds = 23
Dangerous builds = 0
10000
ERROR: Unknown command: 10000 (../input.cpp:314)
Last input line: 10000

2
src/.gitignore vendored
View File

@ -374,6 +374,8 @@
/bond_bpm_rotational.h
/bond_bpm_spring.cpp
/bond_bpm_spring.h
/bond_bpm_spring_plastic.cpp
/bond_bpm_spring_plastic.h
/compute_nbond_atom.cpp
/compute_nbond_atom.h
/fix_nve_bpm_sphere.cpp

View File

@ -11,6 +11,10 @@
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Joel Clemmer (SNL)
------------------------------------------------------------------------- */
#include "atom_vec_bpm_sphere.h"
#include "atom.h"

View File

@ -11,6 +11,10 @@
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Joel Clemmer (SNL)
------------------------------------------------------------------------- */
#include "bond_bpm.h"
#include "atom.h"

View File

@ -11,6 +11,10 @@
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Joel Clemmer (SNL)
------------------------------------------------------------------------- */
#include "bond_bpm_rotational.h"
#include "atom.h"
@ -154,7 +158,7 @@ void BondBPMRotational::store_data()
type = bond_type[i][m];
//Skip if bond was turned off
if (type < 0) continue;
if (type <= 0) continue;
// map to find index n for tag
j = atom->map(atom->bond_atom[i][m]);
@ -775,7 +779,6 @@ void BondBPMRotational::read_restart_settings(FILE *fp)
double BondBPMRotational::single(int type, double rsq, int i, int j, double &fforce)
{
// Not yet enabled
if (type <= 0) return 0.0;
int flipped = 0;

View File

@ -11,6 +11,10 @@
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Joel Clemmer (SNL)
------------------------------------------------------------------------- */
#include "bond_bpm_spring.h"
#include "atom.h"
@ -124,7 +128,7 @@ void BondBPMSpring::store_data()
type = bond_type[i][m];
//Skip if bond was turned off
if (type < 0) continue;
if (type <= 0) continue;
// map to find index n
j = atom->map(atom->bond_atom[i][m]);
@ -197,7 +201,7 @@ void BondBPMSpring::compute(int eflag, int vflag)
int i1, i2, itmp, n, type;
double delx, dely, delz, delvx, delvy, delvz;
double e, rsq, r, r0, rinv, smooth, fbond, dot;
double e, rsq, r, r0, rinv, smooth, fbond, ebond, dot;
double vol_sum, vol0_sum, vol_temp;
ev_init(eflag, vflag);
@ -264,7 +268,9 @@ void BondBPMSpring::compute(int eflag, int vflag)
if (normalize_flag)
fbond = -k[type] * e;
else
fbond = k[type] * (r0 - r);
fbond = -k[type] * (r - r0);
if (eflag) ebond = -0.5 * fbond * (r - r0);
if (volume_flag) {
vol_sum = vol[i1] + vol[i2];
@ -300,7 +306,7 @@ void BondBPMSpring::compute(int eflag, int vflag)
f[i2][2] -= delz * fbond;
}
if (evflag) ev_tally(i1, i2, nlocal, newton_bond, 0.0, fbond, delx, dely, delz);
if (evflag) ev_tally(i1, i2, nlocal, newton_bond, ebond, fbond, delx, dely, delz);
}
// Update vol0 to account for any broken bonds
@ -574,7 +580,9 @@ double BondBPMSpring::single(int type, double rsq, int i, int j, double &fforce)
if (normalize_flag)
fforce = -k[type] * e;
else
fforce = k[type] * (r0 - r);
fforce = -k[type] * (r - r0);
double ebond = -0.5 * fforce * (r - r0);
if (volume_flag) {
double invdim = 1.0 / domain->dimension;
@ -610,7 +618,7 @@ double BondBPMSpring::single(int type, double rsq, int i, int j, double &fforce)
svector[0] = r0;
return 0.0;
return ebond;
}
/* ---------------------------------------------------------------------- */

View File

@ -0,0 +1,477 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
LAMMPS development team: developers@lammps.org
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Joel Clemmer (SNL)
------------------------------------------------------------------------- */
#include "bond_bpm_spring_plastic.h"
#include "atom.h"
#include "citeme.h"
#include "comm.h"
#include "domain.h"
#include "error.h"
#include "fix_bond_history.h"
#include "force.h"
#include "memory.h"
#include "neighbor.h"
#include <cmath>
#include <cstring>
static constexpr double EPSILON = 1e-10;
using namespace LAMMPS_NS;
static const char cite_bpm_plastic[] =
"BPM/spring/plastic bond style: doi:10.1016/j.powtec.2024.120563\n\n"
"@Article{Clemmer2025,\n"
" author = {Clemmer, Joel T. and Lechman, Jeremy B.},\n"
" title = {Onset and impact of plastic deformation in granular compaction},\n"
" journal = {Powder Technology},\n"
" year = 2025,\n"
" volume = 452,\n"
" number = 28,\n"
" pages = {120563}\n"
"}\n\n";
/* ---------------------------------------------------------------------- */
BondBPMSpringPlastic::BondBPMSpringPlastic(LAMMPS *_lmp) :
BondBPM(_lmp), k(nullptr), eplastic(nullptr), ecrit(nullptr), gamma(nullptr)
{
partial_flag = 1;
smooth_flag = 1;
normalize_flag = 0;
writedata = 0;
nhistory = 2;
update_flag = 1;
id_fix_bond_history = utils::strdup("HISTORY_BPM_SPRING_PLASTIC");
single_extra = 2;
svector = new double[2];
if (lmp->citeme) lmp->citeme->add(cite_bpm_plastic);
}
/* ---------------------------------------------------------------------- */
BondBPMSpringPlastic::~BondBPMSpringPlastic()
{
delete[] svector;
if (allocated) {
memory->destroy(setflag);
memory->destroy(k);
memory->destroy(ecrit);
memory->destroy(gamma);
memory->destroy(eplastic);
}
}
/* ----------------------------------------------------------------------
Store data for a single bond - if bond added after LAMMPS init (e.g. pour)
------------------------------------------------------------------------- */
double BondBPMSpringPlastic::store_bond(int n, int i, int j)
{
double delx, dely, delz, r;
double **x = atom->x;
double **bondstore = fix_bond_history->bondstore;
tagint *tag = atom->tag;
delx = x[i][0] - x[j][0];
dely = x[i][1] - x[j][1];
delz = x[i][2] - x[j][2];
r = sqrt(delx * delx + dely * dely + delz * delz);
bondstore[n][0] = r;
if (i < atom->nlocal) {
for (int m = 0; m < atom->num_bond[i]; m++) {
if (atom->bond_atom[i][m] == tag[j]) {
fix_bond_history->update_atom_value(i, m, 0, r);
fix_bond_history->update_atom_value(i, m, 1, 0);
}
}
}
if (j < atom->nlocal) {
for (int m = 0; m < atom->num_bond[j]; m++) {
if (atom->bond_atom[j][m] == tag[i]) {
fix_bond_history->update_atom_value(j, m, 0, r);
fix_bond_history->update_atom_value(j, m, 1, 0);
}
}
}
return r;
}
/* ----------------------------------------------------------------------
Store data for all bonds called once
------------------------------------------------------------------------- */
void BondBPMSpringPlastic::store_data()
{
int i, j, m, type;
double delx, dely, delz, r;
double **x = atom->x;
int **bond_type = atom->bond_type;
for (i = 0; i < atom->nlocal; i++) {
for (m = 0; m < atom->num_bond[i]; m++) {
type = bond_type[i][m];
//Skip if bond was turned off
if (type <= 0) continue;
// map to find index n
j = atom->map(atom->bond_atom[i][m]);
if (j == -1) error->one(FLERR, "Atom missing in BPM bond");
delx = x[i][0] - x[j][0];
dely = x[i][1] - x[j][1];
delz = x[i][2] - x[j][2];
// Get closest image in case bonded with ghost
domain->minimum_image(delx, dely, delz);
r = sqrt(delx * delx + dely * dely + delz * delz);
fix_bond_history->update_atom_value(i, m, 0, r);
fix_bond_history->update_atom_value(i, m, 1, 0);
}
}
fix_bond_history->post_neighbor();
}
/* ---------------------------------------------------------------------- */
void BondBPMSpringPlastic::compute(int eflag, int vflag)
{
if (!fix_bond_history->stored_flag) {
fix_bond_history->stored_flag = true;
store_data();
}
if (hybrid_flag) fix_bond_history->compress_history();
int i1, i2, itmp, n, type;
double delx, dely, delz, delvx, delvy, delvz;
double e, ep, rsq, r, r0, rinv, smooth, fbond, dot;
ev_init(eflag, vflag);
double **x = atom->x;
double **v = atom->v;
double **f = atom->f;
tagint *tag = atom->tag;
int **bondlist = neighbor->bondlist;
int nbondlist = neighbor->nbondlist;
int nlocal = atom->nlocal;
int newton_bond = force->newton_bond;
double **bondstore = fix_bond_history->bondstore;
for (n = 0; n < nbondlist; n++) {
// skip bond if already broken
if (bondlist[n][2] <= 0) continue;
i1 = bondlist[n][0];
i2 = bondlist[n][1];
type = bondlist[n][2];
r0 = bondstore[n][0];
ep = bondstore[n][1];
// Ensure pair is always ordered to ensure numerical operations
// are identical to minimize the possibility that a bond straddling
// an mpi grid (newton off) doesn't break on one proc but not the other
if (tag[i2] < tag[i1]) {
itmp = i1;
i1 = i2;
i2 = itmp;
}
// If bond hasn't been set - should be initialized to zero
if (r0 < EPSILON || std::isnan(r0)) r0 = store_bond(n, i1, i2);
delx = x[i1][0] - x[i2][0];
dely = x[i1][1] - x[i2][1];
delz = x[i1][2] - x[i2][2];
rsq = delx * delx + dely * dely + delz * delz;
r = sqrt(rsq);
e = (r - r0) / r0;
if ((fabs(e) > ecrit[type]) && break_flag) {
bondlist[n][2] = 0;
process_broken(i1, i2);
continue;
}
if (e > (ep + eplastic[type])) {
ep = e - eplastic[type];
bondstore[n][1] = ep;
}
if (e < (ep - eplastic[type])) {
ep = e + eplastic[type];
bondstore[n][1] = ep;
}
rinv = 1.0 / r;
if (normalize_flag)
fbond = -k[type] * (e - ep);
else
fbond = -k[type] * (r - (1.0 + ep) * r0);
delvx = v[i1][0] - v[i2][0];
delvy = v[i1][1] - v[i2][1];
delvz = v[i1][2] - v[i2][2];
dot = delx * delvx + dely * delvy + delz * delvz;
fbond -= gamma[type] * dot * rinv;
fbond *= rinv;
if (smooth_flag) {
smooth = (r - r0) / (r0 * ecrit[type]);
smooth *= smooth;
smooth *= smooth;
smooth *= smooth;
smooth = 1 - smooth;
fbond *= smooth;
}
if (newton_bond || i1 < nlocal) {
f[i1][0] += delx * fbond;
f[i1][1] += dely * fbond;
f[i1][2] += delz * fbond;
}
if (newton_bond || i2 < nlocal) {
f[i2][0] -= delx * fbond;
f[i2][1] -= dely * fbond;
f[i2][2] -= delz * fbond;
}
if (evflag) ev_tally(i1, i2, nlocal, newton_bond, 0.0, fbond, delx, dely, delz);
}
if (hybrid_flag) fix_bond_history->uncompress_history();
}
/* ---------------------------------------------------------------------- */
void BondBPMSpringPlastic::allocate()
{
allocated = 1;
const int np1 = atom->nbondtypes + 1;
memory->create(k, np1, "bond:k");
memory->create(ecrit, np1, "bond:ecrit");
memory->create(gamma, np1, "bond:gamma");
memory->create(eplastic, np1, "bond:eplastic");
memory->create(setflag, np1, "bond:setflag");
for (int i = 1; i < np1; i++) setflag[i] = 0;
}
/* ----------------------------------------------------------------------
set coeffs for one or more types
------------------------------------------------------------------------- */
void BondBPMSpringPlastic::coeff(int narg, char **arg)
{
if (narg != 5)
error->all(FLERR, "Incorrect args for bond coefficients");
if (!allocated) allocate();
int ilo, ihi;
utils::bounds(FLERR, arg[0], 1, atom->nbondtypes, ilo, ihi, error);
double k_one = utils::numeric(FLERR, arg[1], false, lmp);
double ecrit_one = utils::numeric(FLERR, arg[2], false, lmp);
double gamma_one = utils::numeric(FLERR, arg[3], false, lmp);
double eplastic_one = utils::numeric(FLERR, arg[4], false, lmp);
int count = 0;
for (int i = ilo; i <= ihi; i++) {
k[i] = k_one;
ecrit[i] = ecrit_one;
gamma[i] = gamma_one;
eplastic[i] = eplastic_one;
setflag[i] = 1;
count++;
if (1.0 + ecrit[i] > max_stretch) max_stretch = 1.0 + ecrit[i];
}
if (count == 0) error->all(FLERR, "Incorrect args for bond coefficients");
}
/* ----------------------------------------------------------------------
check for correct settings and create fix
------------------------------------------------------------------------- */
void BondBPMSpringPlastic::init_style()
{
BondBPM::init_style();
if (comm->ghost_velocity == 0)
error->all(FLERR, "Bond bpm/spring requires ghost atoms store velocity");
}
/* ---------------------------------------------------------------------- */
void BondBPMSpringPlastic::settings(int narg, char **arg)
{
BondBPM::settings(narg, arg);
int iarg;
for (std::size_t i = 0; i < leftover_iarg.size(); i++) {
iarg = leftover_iarg[i];
if (strcmp(arg[iarg], "smooth") == 0) {
if (iarg + 1 > narg) error->all(FLERR, "Illegal bond bpm command, missing option for smooth");
smooth_flag = utils::logical(FLERR, arg[iarg + 1], false, lmp);
i += 1;
} else if (strcmp(arg[iarg], "normalize") == 0) {
if (iarg + 1 > narg)
error->all(FLERR, "Illegal bond bpm command, missing option for normalize");
normalize_flag = utils::logical(FLERR, arg[iarg + 1], false, lmp);
i += 1;
} else {
error->all(FLERR, "Illegal bond bpm command, invalid argument {}", arg[iarg]);
}
}
if (smooth_flag && !break_flag)
error->all(FLERR, "Illegal bond bpm command, must turn off smoothing with break no option");
}
/* ----------------------------------------------------------------------
proc 0 writes out coeffs to restart file
------------------------------------------------------------------------- */
void BondBPMSpringPlastic::write_restart(FILE *fp)
{
BondBPM::write_restart(fp);
write_restart_settings(fp);
fwrite(&k[1], sizeof(double), atom->nbondtypes, fp);
fwrite(&ecrit[1], sizeof(double), atom->nbondtypes, fp);
fwrite(&gamma[1], sizeof(double), atom->nbondtypes, fp);
fwrite(&eplastic[1], sizeof(double), atom->nbondtypes, fp);
}
/* ----------------------------------------------------------------------
proc 0 reads coeffs from restart file, bcasts them
------------------------------------------------------------------------- */
void BondBPMSpringPlastic::read_restart(FILE *fp)
{
BondBPM::read_restart(fp);
read_restart_settings(fp);
allocate();
if (comm->me == 0) {
utils::sfread(FLERR, &k[1], sizeof(double), atom->nbondtypes, fp, nullptr, error);
utils::sfread(FLERR, &ecrit[1], sizeof(double), atom->nbondtypes, fp, nullptr, error);
utils::sfread(FLERR, &gamma[1], sizeof(double), atom->nbondtypes, fp, nullptr, error);
utils::sfread(FLERR, &eplastic[1], sizeof(double), atom->nbondtypes, fp, nullptr, error);
}
MPI_Bcast(&k[1], atom->nbondtypes, MPI_DOUBLE, 0, world);
MPI_Bcast(&ecrit[1], atom->nbondtypes, MPI_DOUBLE, 0, world);
MPI_Bcast(&gamma[1], atom->nbondtypes, MPI_DOUBLE, 0, world);
MPI_Bcast(&eplastic[1], atom->nbondtypes, MPI_DOUBLE, 0, world);
for (int i = 1; i <= atom->nbondtypes; i++) setflag[i] = 1;
}
/* ----------------------------------------------------------------------
proc 0 writes to restart file
------------------------------------------------------------------------- */
void BondBPMSpringPlastic::write_restart_settings(FILE *fp)
{
fwrite(&smooth_flag, sizeof(int), 1, fp);
fwrite(&normalize_flag, sizeof(int), 1, fp);
}
/* ----------------------------------------------------------------------
proc 0 reads from restart file, bcasts
------------------------------------------------------------------------- */
void BondBPMSpringPlastic::read_restart_settings(FILE *fp)
{
if (comm->me == 0) {
utils::sfread(FLERR, &smooth_flag, sizeof(int), 1, fp, nullptr, error);
utils::sfread(FLERR, &normalize_flag, sizeof(int), 1, fp, nullptr, error);
}
MPI_Bcast(&smooth_flag, 1, MPI_INT, 0, world);
MPI_Bcast(&normalize_flag, 1, MPI_INT, 0, world);
}
/* ---------------------------------------------------------------------- */
double BondBPMSpringPlastic::single(int type, double rsq, int i, int j, double &fforce)
{
if (type <= 0) return 0.0;
double r0, ep;
for (int n = 0; n < atom->num_bond[i]; n++) {
if (atom->bond_atom[i][n] == atom->tag[j]) {
r0 = fix_bond_history->get_atom_value(i, n, 0);
ep = fix_bond_history->get_atom_value(i, n, 1);
}
}
double r = sqrt(rsq);
double rinv = 1.0 / r;
double e = (r - r0) / r0;
if (normalize_flag)
fforce = -k[type] * (e - ep);
else
fforce = -k[type] * (r - (1.0 + ep) * r0);
double **x = atom->x;
double **v = atom->v;
double delx = x[i][0] - x[j][0];
double dely = x[i][1] - x[j][1];
double delz = x[i][2] - x[j][2];
double delvx = v[i][0] - v[j][0];
double delvy = v[i][1] - v[j][1];
double delvz = v[i][2] - v[j][2];
double dot = delx * delvx + dely * delvy + delz * delvz;
fforce -= gamma[type] * dot * rinv;
fforce *= rinv;
if (smooth_flag) {
double smooth = (r - r0) / (r0 * ecrit[type]);
smooth *= smooth;
smooth *= smooth;
smooth *= smooth;
smooth = 1 - smooth;
fforce *= smooth;
}
// set single_extra quantities
svector[0] = r0;
svector[0] = (1.0 + ep) * r0;
return 0.0;
}

View File

@ -0,0 +1,53 @@
/* -*- c++ -*- ----------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
LAMMPS development team: developers@lammps.org
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#ifdef BOND_CLASS
// clang-format off
BondStyle(bpm/spring/plastic,BondBPMSpringPlastic);
// clang-format on
#else
#ifndef LMP_BOND_BPM_SPRING_PLASTIC_H
#define LMP_BOND_BPM_SPRING_PLASTIC_H
#include "bond_bpm.h"
namespace LAMMPS_NS {
class BondBPMSpringPlastic : public BondBPM {
public:
BondBPMSpringPlastic(class LAMMPS *);
~BondBPMSpringPlastic() override;
void compute(int, int) override;
void coeff(int, char **) override;
void init_style() override;
void settings(int, char **) override;
void write_restart(FILE *) override;
void read_restart(FILE *) override;
void write_restart_settings(FILE *) override;
void read_restart_settings(FILE *) override;
double single(int, double, int, int, double &) override;
protected:
double *k, *eplastic, *ecrit, *gamma;
int smooth_flag, normalize_flag;
void allocate();
void store_data();
double store_bond(int, int, int);
};
} // namespace LAMMPS_NS
#endif
#endif

View File

@ -11,6 +11,10 @@
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Joel Clemmer (SNL)
------------------------------------------------------------------------- */
#include "compute_nbond_atom.h"
#include "atom.h"

View File

@ -11,6 +11,10 @@
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Joel Clemmer (SNL)
------------------------------------------------------------------------- */
#include "fix_nve_bpm_sphere.h"
#include "atom.h"

View File

@ -11,6 +11,10 @@
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Joel Clemmer (SNL)
------------------------------------------------------------------------- */
#include "fix_update_special_bonds.h"
#include "atom.h"

View File

@ -11,6 +11,10 @@
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Joel Clemmer (SNL)
------------------------------------------------------------------------- */
#include "pair_bpm_spring.h"
#include "atom.h"
@ -54,7 +58,7 @@ void PairBPMSpring::compute(int eflag, int vflag)
{
int i, j, ii, jj, inum, jnum, itype, jtype;
double xtmp, ytmp, ztmp, delx, dely, delz, dr, evdwl, fpair;
double r, rsq, rinv, factor_lj;
double r, rsq, rinv, fa, factor_lj;
int *ilist, *jlist, *numneigh, **firstneigh;
double vxtmp, vytmp, vztmp, delvx, delvy, delvz, dot, smooth;
@ -112,8 +116,12 @@ void PairBPMSpring::compute(int eflag, int vflag)
dr = r - cut[itype][jtype];
fpair = -k[itype][jtype] * dr;
if (anharmonic_flag)
fpair += -ka[itype][jtype] * dr * dr * dr;
if (eflag) evdwl = -0.5 * fpair * dr;
if (anharmonic_flag) {
fa = -ka[itype][jtype] * dr * dr * dr;
fpair += fa;
if (eflag) evdwl += -0.25 * fa * dr;
}
smooth = rsq / cutsq[itype][jtype];
smooth *= smooth;
@ -126,7 +134,7 @@ void PairBPMSpring::compute(int eflag, int vflag)
fpair -= gamma[itype][jtype] * dot * smooth * rinv;
fpair *= factor_lj * rinv;
if (eflag) evdwl = 0.0;
if (eflag) evdwl *= factor_lj;
f[i][0] += delx * fpair;
f[i][1] += dely * fpair;
@ -378,8 +386,13 @@ double PairBPMSpring::single(int i, int j, int itype, int jtype, double rsq, dou
dr = r - cut[itype][jtype];
fpair = -k[itype][jtype] * dr;
if (anharmonic_flag)
fpair += -ka[itype][jtype] * dr * dr * dr;
double energy = -0.5 * fpair * dr;
if (anharmonic_flag) {
double fa = -ka[itype][jtype] * dr * dr * dr;
fpair += fa;
energy += -0.25 * fa * dr;
}
smooth = rsq / cutsq[itype][jtype];
smooth *= smooth;
@ -394,7 +407,8 @@ double PairBPMSpring::single(int i, int j, int itype, int jtype, double rsq, dou
fpair -= gamma[itype][jtype] * dot * rinv * smooth;
fpair *= factor_lj;
energy *= factor_lj;
fforce = fpair;
return 0.0;
return energy;
}

View File

@ -11,6 +11,10 @@
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Joel Clemmer (SNL)
------------------------------------------------------------------------- */
#include "fix_bond_history.h"
#include "atom.h"