From 40258f8b9a2dff959f49dd670303060c4e2d18ec Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Fri, 3 Dec 2021 16:12:31 -0700 Subject: [PATCH] Adding Steve's edits in documenation + associated changes in files --- doc/src/Commands_bond.rst | 1 + doc/src/Howto_bpm.rst | 139 +++++--- doc/src/Howto_broken_bonds.rst | 5 + doc/src/bond_bpm_rotational.rst | 99 +++--- doc/src/bond_bpm_spring.rst | 85 ++--- doc/src/compute_nbonds_atom.rst | 15 +- doc/src/fix.rst | 2 +- doc/src/fix_nve_sphere_bpm.rst | 35 +- doc/src/fix_store_local.rst | 60 ++-- doc/src/pair_bpm_spring.rst | 23 +- doc/src/pair_tracker.rst | 151 ++++---- ...ional_bpm.lmp => in.bpm.impact.rotational} | 0 ...ct_spring_bpm.lmp => in.bpm.impact.spring} | 0 .../bpm/pour/{pour_bpm.lmp => in.bpm.pour} | 0 src/BPM/bond_bpm.cpp | 2 +- src/BPM/bond_bpm_rotational.h | 152 ++++---- src/BPM/bond_bpm_spring.cpp | 12 +- src/BPM/bond_bpm_spring.h | 148 ++++---- src/MISC/pair_tracker.cpp | 59 ++-- src/MISC/pair_tracker.h | 3 +- src/fix_store_local.cpp | 327 +++++++----------- src/fix_store_local.h | 145 ++++---- src/npair_half_size_bin_newtoff.cpp | 1 - src/npair_half_size_bin_newton.cpp | 2 - src/npair_half_size_bin_newton_tri.cpp | 1 - src/npair_half_size_multi_newtoff.cpp | 1 - src/npair_half_size_multi_newton.cpp | 2 - src/npair_half_size_multi_newton_tri.cpp | 1 - src/npair_half_size_multi_old_newtoff.cpp | 1 - src/npair_half_size_multi_old_newton.cpp | 2 - src/npair_half_size_multi_old_newton_tri.cpp | 1 - src/npair_half_size_nsq_newtoff.cpp | 1 - src/npair_half_size_nsq_newton.cpp | 1 - 33 files changed, 745 insertions(+), 732 deletions(-) create mode 100755 doc/src/Howto_broken_bonds.rst rename examples/bpm/impact/{impact_rotational_bpm.lmp => in.bpm.impact.rotational} (100%) rename examples/bpm/impact/{impact_spring_bpm.lmp => in.bpm.impact.spring} (100%) rename examples/bpm/pour/{pour_bpm.lmp => in.bpm.pour} (100%) diff --git a/doc/src/Commands_bond.rst b/doc/src/Commands_bond.rst index b79e8ee174..c28c9db864 100644 --- a/doc/src/Commands_bond.rst +++ b/doc/src/Commands_bond.rst @@ -33,6 +33,7 @@ OPT. * * * :doc:`bpm/rotational ` + * :doc:`bpm/spring ` * :doc:`class2 (ko) ` * :doc:`fene (iko) ` * :doc:`fene/expand (o) ` diff --git a/doc/src/Howto_bpm.rst b/doc/src/Howto_bpm.rst index 4474e17058..3416aa10c0 100644 --- a/doc/src/Howto_bpm.rst +++ b/doc/src/Howto_bpm.rst @@ -1,81 +1,106 @@ Bonded particle models =============== -Bonded particle models are 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. +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. +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 ` -or :doc:`create bond ` command. Alternatively, a +---------- + +Bonds can be created using a :doc:`read data ` or +:doc:`create bond ` command. Alternatively, a :doc:`molecule ` template with bonds can be used with :doc:`fix deposit ` or :doc:`fix pour ` to -create solid grains. -In this implementation, bonds store their reference state when they -are first computed in the setup of a simulation run. Data is then -preserved across run commands and is written to :doc:`binary restart files ` -such that restarting the system will not reset the reference state of a bond. +create solid grains. -As bonds can be broken between neighbor list builds, :doc:`special_bonds ` -work differently for BPM bond styles. There are two possible settings -which determine how pair interactions work between bonded -particles. -First, one can censor all pair interactions between bonded particles. -Unlike :doc:`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 ` bond off such that all +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 ` 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 +`, are initialized on that timestep. + +As bonds can be broken between neighbor list builds, the +:doc:`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 `, 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 ` bond off such that all processors containing an atom know when a bond breaks. Additionally, -one must use the following special bond settings +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 turns 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 censors pairwise interactions. -By 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. +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 in the bond settings and by -using the following special bond settings +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 -Currently there are two types of bonds included in this package. The first -bond style, :doc:`bond bpm/spring `, only applies pairwise, -central body forces. Point particles must have :doc:`bond atom style ` -and may be thought of as nodes in a spring network. Alternatively, -the second bond style, :doc:`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 `, -:doc:`atom style sphere `. However, they must also track the -current orientation of particles and therefore use a derived :doc:`atom style sphere/bpm `. -This also requires a unique integrator :doc:`fix nve/sphere/bpm ` -which numerically integrates orientation similar to :doc:`fix nve/asphere `. +---------- + +Currently there are two types of bonds included in the BPM +package. The first bond style, :doc:`bond bpm/spring +`, only applies pairwise, central body forces. Point +particles must have :doc:`bond atom style ` and may be +thought of as nodes in a spring network. Alternatively, the second +bond style, :doc:`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 +`, :doc:`atom style sphere `. However, +they must also track the current orientation of particles and +therefore use a derived :doc:`atom style sphere/bpm `. +This also requires a unique integrator :doc:`fix nve/sphere/bpm +` which numerically integrates orientation similar +to :doc:`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 ` -to record all instances of bond breakage for output. Additionally, one can use -:doc:`compute nbond/atom ` to tally the current number of bonds per atom. +can be associated with an instance of :doc:`fix store/local +` to record all instances of bond breakage for +output. Additionally, one can use :doc:`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 ` 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. +In addition to bond styles, a new pair style :doc:`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. diff --git a/doc/src/Howto_broken_bonds.rst b/doc/src/Howto_broken_bonds.rst new file mode 100755 index 0000000000..23509dffdb --- /dev/null +++ b/doc/src/Howto_broken_bonds.rst @@ -0,0 +1,5 @@ +Broken Bonds +=============== + + + diff --git a/doc/src/bond_bpm_rotational.rst b/doc/src/bond_bpm_rotational.rst index 8a151accf4..ad2c4ad265 100644 --- a/doc/src/bond_bpm_rotational.rst +++ b/doc/src/bond_bpm_rotational.rst @@ -17,10 +17,12 @@ Syntax *store/local* values = ID of associated fix store/local followed by one or more attributes *id1, id2* = IDs of 2 atoms in the bond - *time* = the time the bond broke - *x, y, z* = the center of mass position of the 2 atoms when the bond broke - *x/ref, y/ref, z/ref* = the inintial center of mass position of the 2 atoms + *time* = the timestep the bond broke + *x, y, z* = the center of mass position of the 2 atoms when the bond broke (distance units) + *x/ref, y/ref, z/ref* = the initial center of mass position of the 2 atoms (distance units) + *overlay/pair* value = none + bonded particles will still interact with pair forces Examples """""""" @@ -38,11 +40,11 @@ Examples Description """"""""""" -The *bpm/rotational* bond style computes forces and torques based -on deviations from the initial reference state of the two atoms. -The reference state is stored by each bond when it is first computed -in the setup of a run. Data is then preserved across run commands and -is written to :doc:`binary restart files ` such that restarting +The *bpm/rotational* bond style computes forces and torques based on +deviations from the initial reference state of the two atoms. The +reference state is stored by each bond when it is first computed in +the setup of a run. Data is then preserved across run commands and is +written to :doc:`binary restart files ` such that restarting the system will not reset the reference state of a bond. Forces include a normal and tangential component. The base normal force @@ -56,13 +58,14 @@ where :math:`k_r` is a stiffness and :math:`r` is the current distance and :math:`r_0` is the initial distance between the two particles. A tangential force is applied perpendicular to the normal direction -which is proportional to the tangential shear displacement with a stiffness -of :math:`k_s`. This tangential force also induces a torque. -In addition, bending and twisting torques are also applied to particles -which are proportional to angular bending and twisting displacements with -stiffnesses of :math`k_b` and :math:`k_t`, respectively. -Details on the calculations of shear displacements and angular displacements -can be found in :ref:`(Wang) ` and :ref:`(Wang and Mora) `. +which is proportional to the tangential shear displacement with a +stiffness of :math:`k_s`. This tangential force also induces a torque. +In addition, bending and twisting torques are also applied to +particles which are proportional to angular bending and twisting +displacements with stiffnesses of :math`k_b` and :math:`k_t', +respectively. Details on the calculations of shear displacements and +angular displacements can be found in :ref:`(Wang) ` and +:ref:`(Wang and Mora) `. Bonds will break under sufficient stress. A breaking criteria is calculated @@ -72,18 +75,18 @@ Bonds will break under sufficient stress. A breaking criteria is calculated \frac{|\tau_b|}{\tau_{b,c}} + \frac{|\tau_t|}{\tau_{t,c}} \} where :math:`|f_s|` is the magnitude of the shear force and -:math:`|\tau_b|` and :math:`|\tau_t|` are the magnitudes of the bending and -twisting forces, respectively. The corresponding variables :math:`f_{r,c}` -:math:`f_{s,c}`, :math:`\tau_{b,c}`, and :math:`\tau_{t,c}` are critical -limits to each force or torque. -If :math:`B` is ever equal to or exceeds one, the bond will break. -This is done by setting by setting its type to 0 such that forces and +:math:`|\tau_b|` and :math:`|\tau_t|` are the magnitudes of the +bending and twisting forces, respectively. The corresponding variables +:math:`f_{r,c}` :math:`f_{s,c}`, :math:`\tau_{b,c}`, and +:math:`\tau_{t,c}` are critical limits to each force or torque. If +:math:`B` is ever equal to or exceeds one, the bond will break. This +is done by setting by setting its type to 0 such that forces and torques are no longer computed. -After computing the base magnitudes of the forces and torques, they are -all multiplied by an extra factor :math:`w` to smoothly interpolate -forces and torques to zero as the bond breaks. This term is calculated -as :math:`w = (1.0 - B^4)`. +After computing the base magnitudes of the forces and torques, they +are all multiplied by an extra factor :math:`w` to smoothly +interpolate forces and torques to zero as the bond breaks. This term +is calculated as :math:`w = (1.0 - B^4)`. Finally, additional damping forces and torques are applied to the two particles. A force is applied proportional to the difference in the @@ -97,11 +100,12 @@ dissipative particle dynamics (:ref:`(Groot) `): where :math:`\gamma_n` is the damping strength, :math:`\hat{r}` is the radial normal vector, and :math:`\vec{v}` is the velocity difference between the two particles. Similarly, tangential forces are applied to -each atom proportional to the relative differences in sliding velocities -with a constant prefactor :math:`\gamma_s` (:ref:`(Wang et al.) `) -along with their associated torques. The rolling and twisting components of -the relative angular velocities of the two atoms are also damped by applying -torques with prefactors of :math:`\gamma_r` and :math:`\gamma_t`, respectively. +each atom proportional to the relative differences in sliding +velocities with a constant prefactor :math:`\gamma_s` (:ref:`(Wang et +al.) ) along with their associated torques. The rolling and +twisting components of the relative angular velocities of the two +atoms are also damped by applying torques with prefactors of +:math:`\gamma_r` and :math:`\gamma_t`, respectively. The following coefficients must be defined for each bond type via the :doc:`bond_coeff ` command as in the example above, or in @@ -122,14 +126,16 @@ or :doc:`read_restart ` commands: * :math:`\gamma_t` (distance*force/seconds/radians units) By default, pair forces are not calculated between bonded particles. -Pair forces can alternatively be overlaid on top of bond forces -using the *overlay/pair* keyword. These settings require specific -:doc:`special_bonds ` settings described in the restrictions. -Further details can be found in the `:doc: how to ` page on BPMs. +Pair forces can alternatively be overlaid on top of bond forces using +the *overlay/pair* keyword. These settings require specific +:doc:`special_bonds ` settings described in the +restrictions. Further details can be found in the `:doc: how to +` page on BPMs. -This bond style tracks broken bonds and can record them using an instance of -:doc:`fix store/local ` if the *store/local* keyword is -used followed by the ID of the fix and then a series of bond attributes. +This bond style tracks broken bonds and can record them using an +instance of :doc:`fix store/local ` if the +*store/local* keyword is used followed by the ID of the fix and then a +series of bond attributes. Note that when bonds are dumped to a file via the :doc:`dump local ` command, bonds with type 0 (broken bonds) are not included. The @@ -148,24 +154,26 @@ Restart """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" This bond style writes the reference state of each bond to -:doc:`binary restart files `. Loading a restart -file will properly resume bonds. +:doc:`binary restart files `. Loading a restart file will +properly resume bonds. Restrictions """""""""""" This bond style can only be used if LAMMPS was built with the BPM -package. See the :doc:`Build package ` doc page for more -info. +package. See the :doc:`Build package ` doc page for +more info. -By default if pair interactions are censored, this bond style requires setting +By default if pair interactions 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 ` must be set to bond off. -If the *overlay/pair* option is used, this bond style alternatively requires setting +and :doc:`newton ` must be set to bond off. If the +*overlay/pair* option is used, this bond style alternatively requires +setting .. code-block:: LAMMPS @@ -184,6 +192,7 @@ Default none +---------- .. _Wang2009: @@ -203,4 +212,4 @@ p 117-127 (2009). **(Wang et al, 2015)** Wang, Y., Alonso-Marroquin, F., & Guo, W. W. (2015). Rolling and sliding in 3-D discrete element -models. Particuology, 23, 49-55. \ No newline at end of file +models. Particuology, 23, 49-55. diff --git a/doc/src/bond_bpm_spring.rst b/doc/src/bond_bpm_spring.rst index 0235fb52bc..c0624d7d35 100644 --- a/doc/src/bond_bpm_spring.rst +++ b/doc/src/bond_bpm_spring.rst @@ -17,10 +17,12 @@ Syntax *store/local* values = ID of associated fix store/local followed by one or more attributes *id1, id2* = IDs of 2 atoms in the bond - *time* = the time the bond broke - *x, y, z* = the center of mass position of the 2 atoms when the bond broke - *x/ref, y/ref, z/ref* = the inintial center of mass position of the 2 atoms + *time* = the timestep the bond broke + *x, y, z* = the center of mass position of the 2 atoms when the bond broke (distance units) + *x/ref, y/ref, z/ref* = the initial center of mass position of the 2 atoms (distance units) + *overlay/pair* value = none + bonded particles will still interact with pair forces Examples """""""" @@ -38,36 +40,35 @@ Examples Description """"""""""" -The *bpm/spring* bond style computes forces and torques based -on deviations from the initial reference state of the two atoms. -The reference state is stored by each bond when it is first computed -in the setup of a run. Data is then preserved across run commands and -is written to :doc:`binary restart files ` such that restarting +The *bpm/spring* bond style computes forces and torques based on +deviations from the initial reference state of the two atoms. The +reference state is stored by each bond when it is first computed in +the setup of a run. Data is then preserved across run commands and is +written to :doc:`binary restart files ` such that restarting the system will not reset the reference state of a bond. -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 +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 - r_0) w -where :math:`k_r` is a stiffness, :math:`r` is the current distance and -:math:`r_0` is the initial distance between the two particles, and :math:`w` -is a smoothing factor. -Bonds will break at a strain of :math:`\epsilon_c`. -This is done by setting by setting its type to 0 such that forces are -no longer computed. -The smoothing factor :math:`w` is constructed such that forces smoothly -go to zero, avoiding discontinuities, as bonds approach the critical strain +where :math:`k_r` is a stiffness, :math:`r` is the current distance +and :math:`r_0` is the initial distance between the two particles, and +:math:`w` is a smoothing factor. Bonds will break at a strain of +:math:`\epsilon_c`. This is done by setting by setting its type to 0 +such that forces are no longer computed. The smoothing factor +:math:`w` is constructed such that forces smoothly go to zero, +avoiding discontinuities, as bonds approach the critical strain .. math:: w = 1.0 - \left( \frac{r - r_0}{r_0 \epsilon_c} \right)^8 . -Finally, an additional damping force is applied to the bonded particles. -This forces is proportional to the difference in the +Finally, an additional damping force is applied to the bonded +particles. This forces is proportional to the difference in the normal velocity of particles using a similar construction as dissipative particle dynamics (:ref:`(Groot) `): @@ -81,34 +82,35 @@ between the two particles. The following coefficients must be defined for each bond type via the :doc:`bond_coeff ` command as in the example above, or in -the data file or restart files read by the :doc:`read_data ` -or :doc:`read_restart ` commands: +the data file or restart files read by the :doc:`read_data +` or :doc:`read_restart ` commands: * :math:`k` (force/distance units) * :math:`\epsilon_c` (unit less) * :math:`\gamma` (force/velocity units) By default, pair forces are not calculated between bonded particles. -Pair forces can alternatively be overlaid on top of bond forces -using the *overlay/pair* keyword. These settings require specific -:doc:`special_bonds ` settings described in the restrictions. -Further details can be found in the `:doc: how to ` page on BPMs. +Pair forces can alternatively be overlaid on top of bond forces using +the *overlay/pair* keyword. These settings require specific +:doc:`special_bonds ` settings described in the +restrictions. Further details can be found in the `:doc: how to +` page on BPMs. -This bond style tracks broken bonds and can record them using an instance of -:doc:`fix store/local ` if the *store/local* keyword is -used followed by the ID of the fix and then a series of bond attributes. +This bond style tracks broken bonds and can record them using an +instance of :doc:`fix store/local ` if the +*store/local* keyword is used followed by the ID of the fix and then a +series of bond attributes. -Note that when bonds are dumped to a file via the :doc:`dump local ` -command, bonds with type 0 (broken bonds) are not included. The -:doc:`delete_bonds ` command can also be used to query the -status of broken bonds or permanently delete them, e.g.: +Note that when bonds are dumped to a file via the :doc:`dump local +` command, bonds with type 0 (broken bonds) are not included. +The :doc:`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 @@ -122,17 +124,19 @@ Restrictions """""""""""" This bond style can only be used if LAMMPS was built with the BPM -package. See the :doc:`Build package ` doc page for more -info. +package. See the :doc:`Build package ` doc page for +more info. -By default if pair interactions are censored, this bond style requires setting +By default if pair interactions 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 ` must be set to bond off. -If the *overlay/pair* option is used, this bond style alternatively requires setting +and :doc:`newton ` must be set to bond off. If the +*overlay/pair* option is used, this bond style alternatively requires +setting .. code-block:: LAMMPS @@ -149,6 +153,7 @@ Default none +---------- .. _Groot1: diff --git a/doc/src/compute_nbonds_atom.rst b/doc/src/compute_nbonds_atom.rst index 5b7fce1bbc..3a8ea0577f 100644 --- a/doc/src/compute_nbonds_atom.rst +++ b/doc/src/compute_nbonds_atom.rst @@ -23,11 +23,11 @@ Examples Description """"""""""" -Define a computation that computes the number of bonds per-atom. -Bonds which are broken are not counted in the tally. -See :doc:`bond_style quartic ` or the -:doc:`Howto bpm ` page. The number of bonds will be zero -for atoms not in the specified compute group. +Define a computation that computes the number of bonds each atom is +part of. Bonds which are broken are not counted in the tally. See +the :doc:`Howto broken bonds ` page for more information. +The number of bonds will be zero for atoms not in the specified +compute group. This compute does not depend on Newton bond settings. Output info """"""""""" @@ -40,9 +40,8 @@ LAMMPS output options. Restrictions """""""""""" -This fix can only be used if LAMMPS was built with the BPM -package. See the :doc:`Build package ` doc page for more -info. +This fix can only be used if LAMMPS was built with the BPM package. +See the :doc:`Build package ` doc page for more info. Related commands """""""""""""""" diff --git a/doc/src/fix.rst b/doc/src/fix.rst index 5957261c34..2f3287fc36 100644 --- a/doc/src/fix.rst +++ b/doc/src/fix.rst @@ -285,7 +285,7 @@ accelerated styles exist. * :doc:`nve/manifold/rattle ` - * :doc:`nve/noforce ` - NVE without forces (v only) * :doc:`nve/sphere ` - NVE for spherical particles -* :doc:`nve/sphere/bpm ` - NVE for spherical particles used in bonded particle models +* :doc:`nve/sphere/bpm ` - NVE for spherical particles used in the BPM package * :doc:`nve/spin ` - NVE for a spin or spin-lattice system * :doc:`nve/tri ` - NVE for triangles * :doc:`nvk ` - constant kinetic energy time integration diff --git a/doc/src/fix_nve_sphere_bpm.rst b/doc/src/fix_nve_sphere_bpm.rst index ce493f708c..7183174bfb 100644 --- a/doc/src/fix_nve_sphere_bpm.rst +++ b/doc/src/fix_nve_sphere_bpm.rst @@ -30,15 +30,18 @@ Examples Description """"""""""" -Perform constant NVE integration to update position, velocity, angular velocity, -and quaternion orientation for finite-size spherical particles in the group each -timestep. V is volume; E is energy. This creates a system trajectory -consistent with the microcanonical ensemble. +Perform constant NVE integration to update position, velocity, angular +velocity, and quaternion orientation for finite-size spherical +particles in the group each timestep. V is volume; E is energy. This +creates a system trajectory consistent with the microcanonical +ensemble. This fix differs from the :doc:`fix nve ` command, which assumes point particles and only updates their position and velocity. -It also differs from the :doc:`fix nve/sphere ` command, which -does not evaluate a particles orientation or quaternion. +It also differs from the :doc:`fix nve/sphere ` +command which assumes finite-size spheroid particles which do not +store a quaternion. It thus does not update a particle's orientation +or quaternion. If the *disc* keyword is used, then each particle is treated as a 2d disc (circle) instead of as a sphere. This is only possible for 2d @@ -51,21 +54,23 @@ moment of inertia, as used in the time integration. Restart, fix_modify, output, run start/stop, minimize info """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" -No information about this fix is written to :doc:`binary restart files `. None of the :doc:`fix_modify ` options -are relevant to this fix. No global or per-atom quantities are stored -by this fix for access by various :doc:`output commands `. +No information about this fix is written to :doc:`binary restart files +`. None of the :doc:`fix_modify ` options are +relevant to this fix. No global or per-atom quantities are stored by +this fix for access by various :doc:`output commands `. No parameter of this fix can be used with the *start/stop* keywords of -the :doc:`run ` command. This fix is not invoked during :doc:`energy minimization `. +the :doc:`run ` command. This fix is not invoked during +:doc:`energy minimization `. Restrictions """""""""""" -This fix requires that atoms store torque, angular velocity (omega), -a radius, and a quaternion as defined by the :doc:`atom_style sphere/bpm ` -command. +This fix requires that atoms store torque, angular velocity (omega), a +radius, and a quaternion as defined by the :doc:`atom_style sphere/bpm +` command. -All particles in the group must be finite-size spheres with quaternions. They cannot -be point particles. +All particles in the group must be finite-size spheres with +quaternions. They cannot be point particles. Use of the *disc* keyword is only allowed for 2d simulations, as defined by the :doc:`dimension ` keyword. diff --git a/doc/src/fix_store_local.rst b/doc/src/fix_store_local.rst index 6048222754..0f0ebc5ce6 100644 --- a/doc/src/fix_store_local.rst +++ b/doc/src/fix_store_local.rst @@ -20,49 +20,69 @@ Examples .. code-block:: LAMMPS + bond_style bpm/simple store/local 1 id1 id2 fix 1 all store/local 1000 2 dump 1 all local 1000 dump.local f_1[1] f_1[2] + dump_modify 1 write_header no + + pair_style hybrid/overlay tracker 1 x y z lj/cut 2.5 + fix 1 all store/local 1000 3 + dump 1 all local 1000 dump.local f_1[1] f_1[2] f_1[3] Description """"""""""" -This fix provides the ability to store local data produced by -some LAMMPS commands including some pair and bond styles so it can be output. -Data is accumulated over a span of *N* timesteps before being deleted. -The number of datums generated, aggregated across all processors, depends on -the associated commands. Data is only included if it is generated from atoms -within the fix group-ID. +This fix provides the ability to store local data generated by another +LAMMPS command, including some pair and bond styles, so it can be +output. One examples, shown above, is the +:doc:`bpm/simple bondstyle ` which allows bonds to +break and passes information on the broken bonds to this fix. A +:doc:`dump local ` command can then output the list of +broken bonds + +This fix continuously accumulates local data over intervals of *N* +timesteps. At the end of each interval, all of the saved accumulated +data is deleted to make room for new data. Individual datum may +therefore persist anywhere between *1* to *N* timesteps depending on +when they are saved. This data can be accessed by a +:doc:`dump local ` command. To ensure all data is output, +the dump frequency should correspond to the same interval of *N* +timesteps. A dump frequency of an integer multiple of *N* can be used +to regularly output a sample of the accumulated data. ---------- Restart, fix_modify, run start/stop, minimize info """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" -Accumulated local data is written to :doc:`binary restart files `. -None of the :doc:`fix_modify ` options are -relevant to this fix. -No parameter of this fix can be used with the *start/stop* keywords of -the :doc:`run ` command. +Accumulated local data is written to :doc:`binary restart files +`. None of the :doc:`fix_modify ` options are + +relevant to this fix. No parameter of this fix can be used with the +*start/stop* keywords of the :doc:`run ` command. Output info """"""""""" This compute calculates a local vector or local array depending on the number of input values. The length of the vector or number of rows in -the array is the number of recorded, lost interactions. If a single input is -specified, a local vector is produced. If two or more inputs are -specified, a local array is produced where the number of columns = the -number of inputs. The vector or array can be accessed by any command -that uses local values from a compute as input. See the :doc:`Howto output ` page for an overview of LAMMPS output -options. +the array is the number of recorded, lost interactions. If a single +input is specified, a local vector is produced. If two or more inputs +are specified, a local array is produced where the number of columns = +the number of inputs. The vector or array can be accessed by any +command that uses local values from a compute as input. See the +:doc:`Howto output ` page for an overview of LAMMPS +output options. -The vector or array values will be doubles that correspond to the -specified attribute. +The vector or array will be floating point values that correspond to +the specified attribute. Restrictions """""""""""" -Must be used in conjunction with another LAMMPS class which outputs local data. +This fix must be used in conjunction with another LAMMPS command which +generates local data and passes it to this fix. See the related +commands below for examples of such commands. Related commands """""""""""""""" diff --git a/doc/src/pair_bpm_spring.rst b/doc/src/pair_bpm_spring.rst index 33883f05ef..ea5451b78d 100755 --- a/doc/src/pair_bpm_spring.rst +++ b/doc/src/pair_bpm_spring.rst @@ -48,12 +48,22 @@ given by w = 1.0 - \left( \frac{r}{r_c} \right)^8 . -This pair style is designed for use in a spring-based bonded particle model. -It mirrors the construction of the :doc:`bpm/spring ` bond style. +This pair style is designed for use in a spring-based bonded particle +model. It mirrors the construction of the :doc:`bpm/spring +` bond style. + +This pair interaction is always applied to pairs of nonbonded particles +that are within the interaction distance. For pairs of bonded particles +that are within the interaction distance, there is the option to either +include this pair interaction and overlay the pair force over the bond +force or to exclude this pair interaction such that the two particles +only interact via the bond force. See discussion of the *overlay/pair* +option for BPM bond styles and the :doc:`special_bonds ` +command in the `:doc: how to ` page on BPMs for more details. The following coefficients must be defined for each pair of atom types -via the :doc:`pair_coeff ` command as in the examples above, -or in the data file or restart files read by the +via the :doc:`pair_coeff ` command as in the examples +above, or in the data file or restart files read by the :doc:`read_data ` or :doc:`read_restart ` commands, or by mixing as described below: @@ -79,8 +89,9 @@ shift option, since the pair interaction goes to 0.0 at the cutoff. The :doc:`pair_modify ` table and tail options are not relevant for this pair style. -This pair style writes its information to :doc:`binary restart files `, so pair_style and pair_coeff commands do not need -to be specified in an input script that reads a restart file. +This pair style writes its information to :doc:`binary restart files +`, so pair_style and pair_coeff commands do not need to be +specified in an input script that reads a restart file. This pair style can only be used via the *pair* keyword of the :doc:`run_style respa ` command. It does not support the diff --git a/doc/src/pair_tracker.rst b/doc/src/pair_tracker.rst index dc14e8d7b2..c3d53bcc54 100644 --- a/doc/src/pair_tracker.rst +++ b/doc/src/pair_tracker.rst @@ -19,9 +19,9 @@ Syntax *finite* value = none pair style uses atomic diameters to identify contacts *time/min* value = T - T = minimum interaction time - *type/include* value = arg1 arg2 - arg = separate lists of types (see below) + T = minimum number of timesteps of interaction + *type/include* value = list1 list2 + list1,list2 = separate lists of types (see below) * one or more attributes may be appended @@ -33,22 +33,22 @@ Syntax .. parsed-literal:: id1, id2 = IDs of the 2 atoms in each pair interaction - time/created = the time that the 2 atoms began interacting - time/broken = the time that the 2 atoms stopped interacting - time/total = the total time the 2 atoms interacted - r/min = the minimum radial distance between the 2 atoms during the interaction - r/ave = the average radial distance between the 2 atoms during the interaction - x, y, z = the center of mass position of the 2 atoms when they stopped interacting + time/created = the timestep that the 2 atoms began interacting + time/broken = the timestep that the 2 atoms stopped interacting + time/total = the total number of timesteps the 2 atoms interacted + r/min = the minimum radial distance between the 2 atoms during the interaction (distance units) + r/ave = the average radial distance between the 2 atoms during the interaction (distance units) + x, y, z = the center of mass position of the 2 atoms when they stopped interacting (distance units) Examples """""""" .. code-block:: LAMMPS - pair_style hybrid/overlay tracker myfix id1 id2 type/include 1 * type/include 2 3,4 + pair_style hybrid/overlay tracker myfix id1 id2 type/include 1 * type/include 2 3,4 lj/cut 2.5 pair_coeff 1 1 tracker 2.0 - pair_style hybrid/overlay tracker myfix finite x y z time/min 100 + pair_style hybrid/overlay tracker myfix finite x y z time/min 100 granular pair_coeff * * tracker fix myfix all store/local 1000 3 @@ -58,59 +58,91 @@ Examples Description """"""""""" -Style *tracker* monitors information about pairwise interactions. -It does not calculate any forces on atoms. -:doc:`Pair hybrid/overlay ` can be used to combine this pair -style with another pair style. Style *tracker* must be used in conjunction -with :doc:`fix store/local ` which contains -information on outputting data. Whenever two neighboring atoms move beyond -the interaction cutoffPairwise data is processed and transferred to the associated -instance of :doc:`fix store/local `. Additional filters can -be applied using the *time/min* or *type/include* keywords described below. +Style *tracker* monitors information about pairwise interactions. It +does not calculate any forces on atoms. :doc:`Pair hybrid/overlay +` can be used to combine this pair style with any other +pair style, as shown in the examples above. Style *tracker* must also +be used in conjunction with the :doc:`fix store/local +` command which stores the pairise information so it +can be accessed as local data by other LAMMPS commands, e.g. by the +:doc:`dump local ` command for output. + -If the *finite* keyword is not defined, the following coefficients must be -defined for each pair of atom types via the :doc:`pair_coeff ` -command as in the examples above, or in the data file or restart files -read by the :doc:`read_data ` or :doc:`read_restart ` -commands, or by mixing as described below: +At each timestep, if two neighboring atoms move beyond the interaction +cutoff, pairwise data is processed and transferred to the associated +instance of :doc:`fix store/local `. Additional +filters can be applied using the *time/min* or *type/include* keywords +described below. Note that this is the interaction cutoff defined by +this pair style, not the short-range cutoff defined by the pair style +that is calculating forces on atoms. + +Following any optional keyword/value arguments, a list of one or more +attributes is specified. These include the IDs of the two atoms in +the pair. The other attributes for the pair of atoms are for the +duration of time they were "interacting" or at the point in time they +started or stopped interacting. In this context, "interacting" means +the time window during which the two atoms were closer than the +interaction cutoff distance. The attributes for time/* refer to +timesteps. + +---------- + +The following optional keywords may be used. + +If the *finite* keyword is not used, the following coefficients must +be defined for each pair of atom types via the :doc:`pair_coeff +` command as in the examples above, or in the data file or +restart files read by the :doc:`read_data ` or +:doc:`read_restart ` commands, or by mixing as described +below: * cutoff (distance units) -If the *finite* keyword is defined, no coefficients may be defined. -Interaction cutoffs are alternatively calculated based on the -diameter of finite particles. +If the *finite* keyword is used, there are no additional coefficients +to set for each pair of atom types via the +:doc:`pair_coeff ` command. Interaction cutoffs are +instead calculated based on the diameter of finite particles. However +you must still use the :doc:`pair_coeff ` for all atom +types. For example the command -.. note:: +.. code-block:: LAMMPS - For extremely long-lived interactions, the calculation of *r/ave* may not be - correct due to double overflow. + pair_coeff * * -The *time/min* keyword sets a minimum amount of time that an interaction must -persist to be included. This setting can be used to censor short-lived interactions. -The *type/include* keyword filters interactions based on the types of the two atoms. -Data is only saved for interactions between atoms with types in the two lists. -Each list consists of a series of type -ranges separated by commas. The range can be specified as a -single numeric value, or a wildcard asterisk can be used to specify a range -of values. This takes the form "\*" or "\*n" or "n\*" or "m\*n". For -example, if M = the number of atom types, then an asterisk with no numeric -values means all types from 1 to M. A leading asterisk means all types -from 1 to n (inclusive). A trailing asterisk means all types from n to M -(inclusive). A middle asterisk means all types from m to n (inclusive). -Multiple *type/include* keywords may be added. +should be used. + +The *time/min* keyword sets a minimum amount of time that an +interaction must persist to be included. This setting can be used to +censor short-lived interactions. + +The *type/include* keyword filters interactions based on the types of +the two atoms. Data is only saved for interactions between atoms +whose two atom types appear in *list1* and *list2*. Atom type 1 must +be in list1 and atom type 2 in list2. Or vice versa. + +Each type list consists of a series of type ranges separated by +commas. Each range can be specified as a single numeric value, or a +wildcard asterisk can be used to specify a range of values. This +takes the form "\*" or "\*n" or "n\*" or "m\*n". For example, if M = +the number of atom types, then an asterisk with no numeric values +means all types from 1 to M. A leading asterisk means all types from +1 to n (inclusive). A trailing asterisk means all types from n to M +(inclusive). A middle asterisk means all types from m to n +(inclusive). Note that the *type/include* keyword can be specified +multiple times. Mixing, shift, table, tail correction, restart, rRESPA info """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" For atom type pairs I,J and I != J, the cutoff coefficient and cutoff -distance for this pair style can be mixed. The cutoff is always mixed via a -*geometric* rule. The cutoff is mixed according to the pair_modify -mix value. The default mix value is *geometric*\ . See the -"pair_modify" command for details. +distance for this pair style can be mixed. The cutoff is always mixed +via a *geometric* rule. The cutoff is mixed according to the +pair_modify mix value. The default mix value is *geometric*\ . See +the "pair_modify" command for details. -This pair style writes its information to :doc:`binary restart files `, so -pair_style and pair_coeff commands do not need -to be specified in an input script that reads a restart file. +This pair style writes its information to :doc:`binary restart files +`, so pair_style and pair_coeff commands do not need to be +specified in an input script that reads a restart file. The :doc:`pair_modify ` shift, table, and tail options are not relevant for this pair style. @@ -120,19 +152,20 @@ are not relevant for this pair style. Restrictions """""""""""" -A corresponding :doc:`fix pair_tracker ` must be defined -to use this pair style. - -This pair style is currently incompatible with granular pair styles that extend -beyond the contact (e.g. JKR and DMT). - This fix is part of the MISC package. It is only enabled if LAMMPS -was built with that package. See the :doc:`Build package ` page for more info. +was built with that package. See the :doc:`Build package +` page for more info. + +A corresponding :doc:`fix store_local ` must be +defined to use this pair style. + +This pair style is currently incompatible with granular pair styles +that extend beyond the contact (e.g. JKR and DMT). Related commands """""""""""""""" -:doc:`fix pair_tracker ` +:doc:`fix store_local ` Default """"""" diff --git a/examples/bpm/impact/impact_rotational_bpm.lmp b/examples/bpm/impact/in.bpm.impact.rotational similarity index 100% rename from examples/bpm/impact/impact_rotational_bpm.lmp rename to examples/bpm/impact/in.bpm.impact.rotational diff --git a/examples/bpm/impact/impact_spring_bpm.lmp b/examples/bpm/impact/in.bpm.impact.spring similarity index 100% rename from examples/bpm/impact/impact_spring_bpm.lmp rename to examples/bpm/impact/in.bpm.impact.spring diff --git a/examples/bpm/pour/pour_bpm.lmp b/examples/bpm/pour/in.bpm.pour similarity index 100% rename from examples/bpm/pour/pour_bpm.lmp rename to examples/bpm/pour/in.bpm.pour diff --git a/src/BPM/bond_bpm.cpp b/src/BPM/bond_bpm.cpp index df5bad4cda..5cdd8cbdea 100644 --- a/src/BPM/bond_bpm.cpp +++ b/src/BPM/bond_bpm.cpp @@ -112,7 +112,7 @@ void BondBPM::init_style() if (id_fix_dummy) { id_fix_update = utils::strdup("BPM_update_special_bonds"); fix_update_special_bonds = (FixUpdateSpecialBonds *) modify->replace_fix(id_fix_dummy, - fmt::format("{} all update/special/bonds", id_fix_update),1); + fmt::format("{} all UPDATE/SPECIAL/BONDS", id_fix_update),1); delete [] id_fix_dummy; id_fix_dummy = nullptr; } diff --git a/src/BPM/bond_bpm_rotational.h b/src/BPM/bond_bpm_rotational.h index 14105f11a0..de3ea29240 100644 --- a/src/BPM/bond_bpm_rotational.h +++ b/src/BPM/bond_bpm_rotational.h @@ -1,76 +1,76 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - https://www.lammps.org/, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - 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/rotational,BondBPMRotational) -// clang-format on -#else - -#ifndef LMP_BOND_BPM_ROTATIONAL_H -#define LMP_BOND_BPM_ROTATIONAL_H - -#include "bond_bpm.h" - -namespace LAMMPS_NS { - -class BondBPMRotational : public BondBPM { - public: - BondBPMRotational(class LAMMPS *); - virtual ~BondBPMRotational(); - virtual void compute(int, int); - void coeff(int, char **); - void init_style(); - void write_restart(FILE *); - void read_restart(FILE *); - void write_data(FILE *); - double single(int, double, int, int, double &); - - protected: - double *Kr, *Ks, *Kt, *Kb, *gnorm, *gslide, *groll, *gtwist; - double *Fcr, *Fcs, *Tct, *Tcb; - double acos_limit(double); - - void allocate(); - void store_data(); - double store_bond(int, int, int); -}; - -} // namespace LAMMPS_NS - -#endif -#endif - -/* ERROR/WARNING messages: - -E: Atom missing in BPM bond - -Bonded atom cannot be found - -E: Incorrect args for bond coefficients - -Self-explanatory. Check the input script or data file. - -E: Bond bpm/rotational requires atom style sphere/bpm - -Self-explanatory. - -E: Bond style bpm requires 1-3 and 1-4 special weights of 1.0 - -Self-explanatory. - -W: Bond style bpm/rotational not intended for 2d use, may be inefficient - -This bond style will perform a lot of unnecessary calculations in 2d - -*/ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + 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/rotational,BondBPMRotational) +// clang-format on +#else + +#ifndef LMP_BOND_BPM_ROTATIONAL_H +#define LMP_BOND_BPM_ROTATIONAL_H + +#include "bond_bpm.h" + +namespace LAMMPS_NS { + +class BondBPMRotational : public BondBPM { + public: + BondBPMRotational(class LAMMPS *); + virtual ~BondBPMRotational(); + virtual void compute(int, int); + void coeff(int, char **); + void init_style(); + void write_restart(FILE *); + void read_restart(FILE *); + void write_data(FILE *); + double single(int, double, int, int, double &); + + protected: + double *Kr, *Ks, *Kt, *Kb, *gnorm, *gslide, *groll, *gtwist; + double *Fcr, *Fcs, *Tct, *Tcb; + double acos_limit(double); + + void allocate(); + void store_data(); + double store_bond(int, int, int); +}; + +} // namespace LAMMPS_NS + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Atom missing in BPM bond + +Bonded atom cannot be found + +E: Incorrect args for bond coefficients + +Self-explanatory. Check the input script or data file. + +E: Bond bpm/rotational requires atom style sphere/bpm + +Self-explanatory. + +E: Bond style bpm requires 1-3 and 1-4 special weights of 1.0 + +Self-explanatory. + +W: Bond style bpm/rotational not intended for 2d use, may be inefficient + +This bond style will perform a lot of unnecessary calculations in 2d + +*/ diff --git a/src/BPM/bond_bpm_spring.cpp b/src/BPM/bond_bpm_spring.cpp index b418a19583..be4b7d6fc3 100644 --- a/src/BPM/bond_bpm_spring.cpp +++ b/src/BPM/bond_bpm_spring.cpp @@ -134,7 +134,7 @@ void BondBPMSpring::compute(int eflag, int vflag) store_data(); } - int i1,i2,m,n,type,itype,jtype; + int i1,i2,itmp,m,n,type,itype,jtype; double delx, dely, delz, delvx, delvy, delvz; double e, rsq, r, r0, rinv, smooth, fbond, ebond, dot; @@ -143,6 +143,7 @@ void BondBPMSpring::compute(int eflag, int 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; @@ -160,6 +161,15 @@ void BondBPMSpring::compute(int eflag, int vflag) type = bondlist[n][2]; r0 = bondstore[n][0]; + // 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); diff --git a/src/BPM/bond_bpm_spring.h b/src/BPM/bond_bpm_spring.h index 284e32dce1..2b28723fc1 100644 --- a/src/BPM/bond_bpm_spring.h +++ b/src/BPM/bond_bpm_spring.h @@ -1,74 +1,74 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - https://www.lammps.org/, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - 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,BondBPMSpring) -// clang-format on -#else - -#ifndef LMP_BOND_BPM_SPRING_H -#define LMP_BOND_BPM_SPRING_H - -#include "bond_bpm.h" - -namespace LAMMPS_NS { - -class BondBPMSpring : public BondBPM { - public: - BondBPMSpring(class LAMMPS *); - virtual ~BondBPMSpring(); - virtual void compute(int, int); - void coeff(int, char **); - void init_style(); - void write_restart(FILE *); - void read_restart(FILE *); - void write_data(FILE *); - double single(int, double, int, int, double &); - - protected: - double *k, *ecrit, *gamma; - - void allocate(); - void store_data(); - double store_bond(int, int, int); -}; - -} // namespace LAMMPS_NS - -#endif -#endif - -/* ERROR/WARNING messages: - -E: Atom missing in BPM bond - -Bonded atom cannot be found - -E: Incorrect args for bond coefficients - -Self-explanatory. Check the input script or data file. - -E: Bond bpm/rotational requires atom style sphere/bpm - -Self-explanatory. - -E: Bond style bpm requires 1-3 and 1-4 special weights of 1.0 - -Self-explanatory. - -W: Bond style bpm/rotational not intended for 2d use, may be inefficient - -This bond style will perform a lot of unnecessary calculations in 2d - -*/ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + 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,BondBPMSpring) +// clang-format on +#else + +#ifndef LMP_BOND_BPM_SPRING_H +#define LMP_BOND_BPM_SPRING_H + +#include "bond_bpm.h" + +namespace LAMMPS_NS { + +class BondBPMSpring : public BondBPM { + public: + BondBPMSpring(class LAMMPS *); + virtual ~BondBPMSpring(); + virtual void compute(int, int); + void coeff(int, char **); + void init_style(); + void write_restart(FILE *); + void read_restart(FILE *); + void write_data(FILE *); + double single(int, double, int, int, double &); + + protected: + double *k, *ecrit, *gamma; + + void allocate(); + void store_data(); + double store_bond(int, int, int); +}; + +} // namespace LAMMPS_NS + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Atom missing in BPM bond + +Bonded atom cannot be found + +E: Incorrect args for bond coefficients + +Self-explanatory. Check the input script or data file. + +E: Bond bpm/rotational requires atom style sphere/bpm + +Self-explanatory. + +E: Bond style bpm requires 1-3 and 1-4 special weights of 1.0 + +Self-explanatory. + +W: Bond style bpm/rotational not intended for 2d use, may be inefficient + +This bond style will perform a lot of unnecessary calculations in 2d + +*/ diff --git a/src/MISC/pair_tracker.cpp b/src/MISC/pair_tracker.cpp index cd6ed67615..3864ba6be7 100644 --- a/src/MISC/pair_tracker.cpp +++ b/src/MISC/pair_tracker.cpp @@ -44,7 +44,7 @@ PairTracker::PairTracker(LAMMPS *lmp) : neighprev = 0; history = 1; - size_history = 4; + size_history = 3; nondefault_history_transfer = 1; finitecutflag = 0; @@ -96,7 +96,7 @@ PairTracker::~PairTracker() void PairTracker::compute(int eflag, int vflag) { int i, j, ii, jj, inum, jnum, itype, jtype; - double xtmp, ytmp, ztmp, delx, dely, delz, time; + double xtmp, ytmp, ztmp, delx, dely, delz; double radi, radj, radsum, rsq, r; int *ilist, *jlist, *numneigh, **firstneigh; int *touch, **firsttouch; @@ -152,23 +152,20 @@ void PairTracker::compute(int eflag, int vflag) } touch[jj] = 0; - data[0] = 0.0; // initial time - data[1] = 0.0; // initial timestep - data[2] = 0.0; // sum of r, may overflow - data[3] = 0.0; // min of r + data[0] = 0.0; // initial timestep + data[1] = 0.0; // sum of r, may be inaccurate over long times + data[2] = 0.0; // min of r } else { data = &alldata[size_history * jj]; if (touch[jj] == 0) { - time = update->atime + (update->ntimestep - update->atimestep) * update->dt; - data[0] = time; - data[1] = (double) update->ntimestep; + data[0] = (double) update->ntimestep; + data[1] = r; data[2] = r; - data[3] = r; } else if (updateflag) { - data[2] += r; - if (data[3] > r) data[3] = r; + data[1] += r; + if (data[2] > r) data[2] = r; } touch[jj] = 1; } @@ -182,23 +179,20 @@ void PairTracker::compute(int eflag, int vflag) } touch[jj] = 0; - data[0] = 0.0; // initial time - data[1] = 0.0; // initial timestep - data[2] = 0.0; // sum of r, may overflow - data[3] = 0.0; // min of r + data[0] = 0.0; // initial timestep + data[1] = 0.0; // sum of r, may be inaccurate over long times + data[2] = 0.0; // min of r } else { data = &alldata[size_history * jj]; if (touch[jj] == 0) { - time = update->atime + (update->ntimestep - update->atimestep) * update->dt; - data[0] = time; - data[1] = (double) update->ntimestep; + data[0] = (double) update->ntimestep; + data[1] = r; data[2] = r; - data[3] = r; } else if (updateflag) { - data[2] += r; - if (data[3] > r) data[3] = r; + data[1] += r; + if (data[2] > r) data[2] = r; } touch[jj] = 1; } @@ -570,9 +564,7 @@ double PairTracker::radii2cut(double r1, double r2) void PairTracker::process_data(int i, int j, double * input_data) { - double time = update->atime + (update->ntimestep - update->atimestep) * update->dt; - int time_initial = (int) input_data[0]; - if ((time - time_initial) < tmin) return; + if ((update->ntimestep - input_data[0]) < tmin) return; if (type_filter) { int *type = atom->type; @@ -590,25 +582,21 @@ void PairTracker::process_data(int i, int j, double * input_data) void PairTracker::pack_time_created(int n, int i, int j, double * data) { - double time_initial = data[0]; - output_data[n] = time_initial; + output_data[n] = data[0]; } /* ---------------------------------------------------------------------- */ void PairTracker::pack_time_broken(int n, int i, int j, double * data) { - double time = update->atime + (update->ntimestep - update->atimestep) * update->dt; - output_data[n] = time; + output_data[n] = update->ntimestep; } /* ---------------------------------------------------------------------- */ void PairTracker::pack_time_total(int n, int i, int j, double * data) { - double time = update->atime + (update->ntimestep - update->atimestep) * update->dt; - double time_initial = data[0]; - output_data[n] = time - time_initial; + output_data[n] = update->ntimestep - data[0]; } /* ---------------------------------------------------------------------- */ @@ -655,15 +643,12 @@ void PairTracker::pack_z(int n, int i, int j, double * data) void PairTracker::pack_rmin(int n, int i, int j, double * data) { - double rmin = data[3]; - output_data[n] = rmin; + output_data[n] = data[2]; } /* ---------------------------------------------------------------------- */ void PairTracker::pack_rave(int n, int i, int j, double * data) { - double rsum = data[2]; - double nstep_initial = data[1]; - output_data[n] = rsum / (update->ntimestep - nstep_initial); + output_data[n] = data[1] / (update->ntimestep - data[0]); } \ No newline at end of file diff --git a/src/MISC/pair_tracker.h b/src/MISC/pair_tracker.h index 3cb9344212..3be7e7ebc0 100644 --- a/src/MISC/pair_tracker.h +++ b/src/MISC/pair_tracker.h @@ -40,6 +40,7 @@ class PairTracker : public Pair { virtual double single(int, int, int, int, double, double, double, double &); double atom2cut(int); double radii2cut(double, double); + void transfer_history(double *, double *); protected: int sizeflag; @@ -75,8 +76,6 @@ class PairTracker : public Pair { void pack_rmin(int, int, int, double *); void pack_rave(int, int, int, double *); - void transfer_data(int, int); - void transfer_history(double *, double *); void process_data(int, int, double *); void allocate(); }; diff --git a/src/fix_store_local.cpp b/src/fix_store_local.cpp index 775dc05b66..6ccadc8e02 100644 --- a/src/fix_store_local.cpp +++ b/src/fix_store_local.cpp @@ -1,201 +1,126 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - https://www.lammps.org/ Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - 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. -------------------------------------------------------------------------- */ - -#include "fix_store_local.h" - -#include "atom.h" -#include "comm.h" -#include "error.h" -#include "memory.h" -#include "update.h" - -using namespace LAMMPS_NS; -using namespace FixConst; - -#define DELTA 1000 - -/* ---------------------------------------------------------------------- */ - -FixStoreLocal::FixStoreLocal(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg), nvalues(0), vector(nullptr), array(nullptr) -{ - if (narg != 5) error->all(FLERR, "Illegal fix store/local command"); - local_flag = 1; - - nevery = utils::inumeric(FLERR, arg[3], false, lmp); - if (nevery <= 0) error->all(FLERR, "Illegal fix store/local command"); - local_freq = nevery; - - nvalues = utils::inumeric(FLERR, arg[4], false, lmp); - - if (nvalues <= 0) error->all(FLERR, "Illegal fix store/local command"); - if (nvalues == 1) - size_local_cols = 0; - else - size_local_cols = nvalues; - size_local_rows = 0; - - vector = nullptr; - array = nullptr; - nmax = 0; - ncount = 0; -} - -/* ---------------------------------------------------------------------- */ - -FixStoreLocal::~FixStoreLocal() -{ - memory->destroy(vector); - memory->destroy(array); -} - -/* ---------------------------------------------------------------------- */ - -int FixStoreLocal::setmask() -{ - int mask = 0; - mask |= POST_FORCE; - return mask; -} - -/* ---------------------------------------------------------------------- */ - -void FixStoreLocal::add_data(double *input_data, int i, int j) -{ - int *mask = atom->mask; - if (!(mask[i] & groupbit)) return; - if (!(mask[j] & groupbit)) return; - - if (ncount >= nmax) reallocate(ncount); - - // fill vector or array with local values - if (nvalues == 1) { - vector[ncount] = input_data[0]; - } else { - for (int i = 0; i < nvalues; i++) array[ncount][i] = input_data[i]; - } - - ncount += 1; -} - -/* ---------------------------------------------------------------------- */ - -void FixStoreLocal::post_force(int /*vflag*/) -{ - if (update->ntimestep % nevery == 0) { - size_local_rows = ncount; - ncount = 0; - } -} - -/* ---------------------------------------------------------------------- */ - -void FixStoreLocal::reallocate(int n) -{ - // grow vector or array - while (nmax <= n) nmax += DELTA; - - if (nvalues == 1) { - memory->grow(vector, nmax, "fix_store_local:vector"); - vector_local = vector; - } else { - memory->grow(array, nmax, nvalues, "fix_store_local:array"); - array_local = array; - } -} - -/* ---------------------------------------------------------------------- - write global array to restart file -------------------------------------------------------------------------- */ - -void FixStoreLocal::write_restart(FILE *fp) -{ - // fill rbuf with size and vec/array values - - rbuf[0] = nmax; - rbuf[1] = nvalues; - if (nvalues == 1) memcpy(&rbuf[2], vector, sizeof(double) * nmax); - else memcpy(&rbuf[2], &array[0][0], sizeof(double) * nmax * nvalues); - - int n = nmax * nvalues + 2; - if (comm->me == 0) { - int size = n * sizeof(double); - fwrite(&size, sizeof(int), 1, fp); - fwrite(rbuf, sizeof(double), n, fp); - } -} - -/* ---------------------------------------------------------------------- - use global array from restart file to restart the Fix -------------------------------------------------------------------------- */ - -void FixStoreLocal::restart(char *buf) -{ - // first 2 values in buf are vec/array sizes - - double *dbuf = (double *) buf; - int nrow_restart = dbuf[0]; - int ncol_restart = dbuf[1]; - - // if size of vec/array has changed, - // means the restart file is setting size of vec or array and doing init - // because caller did not know size at time this fix was instantiated - // reallocate vector or array accordingly - - if (nmax != nrow_restart || nvalues != ncol_restart) { - memory->destroy(vector); - memory->destroy(array); - memory->destroy(rbuf); - vector = nullptr; - array = nullptr; - - nmax = nrow_restart; - nvalues = ncol_restart; - if (nvalues == 1) memory->create(vector, nmax, "fix/store/local:vector"); - else memory->create(array, nmax, nvalues, "fix/store/local:array"); - memory->create(rbuf, nmax * nvalues + 2, "fix/store:rbuf"); - } - - int n = nmax*nvalues; - if (nvalues == 1) memcpy(vector, &dbuf[2], n * sizeof(double)); - else memcpy(&array[0][0], &dbuf[2], n * sizeof(double)); -} - -/* ---------------------------------------------------------------------- - maxsize of any atom's restart data -------------------------------------------------------------------------- */ - -int FixStoreLocal::maxsize_restart() -{ - return nvalues + 1; -} - -/* ---------------------------------------------------------------------- - size of atom nlocal's restart data -------------------------------------------------------------------------- */ - -int FixStoreLocal::size_restart(int /*nlocal*/) -{ - return nvalues + 1; -} - -/* ---------------------------------------------------------------------- - memory usage of local data -------------------------------------------------------------------------- */ - -double FixStoreLocal::memory_usage() -{ - double bytes = (double) nmax * (double) nvalues * sizeof(double); - return bytes; -} - +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + 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. +------------------------------------------------------------------------- */ + +#include "fix_store_local.h" + +#include "atom.h" +#include "comm.h" +#include "error.h" +#include "memory.h" +#include "update.h" + +using namespace LAMMPS_NS; +using namespace FixConst; + +#define DELTA 1000 + +/* ---------------------------------------------------------------------- */ + +FixStoreLocal::FixStoreLocal(LAMMPS *lmp, int narg, char **arg) : + Fix(lmp, narg, arg), nvalues(0), vector(nullptr), array(nullptr) +{ + if (narg != 5) error->all(FLERR, "Illegal fix store/local command"); + local_flag = 1; + + nevery = utils::inumeric(FLERR, arg[3], false, lmp); + if (nevery <= 0) error->all(FLERR, "Illegal fix store/local command"); + local_freq = nevery; + + nvalues = utils::inumeric(FLERR, arg[4], false, lmp); + + if (nvalues <= 0) error->all(FLERR, "Illegal fix store/local command"); + if (nvalues == 1) + size_local_cols = 0; + else + size_local_cols = nvalues; + size_local_rows = 0; + + vector = nullptr; + array = nullptr; + nmax = 0; + ncount = 0; +} + +/* ---------------------------------------------------------------------- */ + +FixStoreLocal::~FixStoreLocal() +{ + memory->destroy(vector); + memory->destroy(array); +} + +/* ---------------------------------------------------------------------- */ + +int FixStoreLocal::setmask() +{ + int mask = 0; + mask |= POST_FORCE; + return mask; +} + +/* ---------------------------------------------------------------------- */ + +void FixStoreLocal::add_data(double *input_data, int i, int j) +{ + int *mask = atom->mask; + if (!(mask[i] & groupbit)) return; + if (!(mask[j] & groupbit)) return; + + if (ncount >= nmax) reallocate(ncount); + + // fill vector or array with local values + if (nvalues == 1) { + vector[ncount] = input_data[0]; + } else { + for (int i = 0; i < nvalues; i++) array[ncount][i] = input_data[i]; + } + + ncount += 1; +} + +/* ---------------------------------------------------------------------- */ + +void FixStoreLocal::post_force(int /*vflag*/) +{ + if (update->ntimestep % nevery == 0) { + size_local_rows = ncount; + ncount = 0; + } +} + +/* ---------------------------------------------------------------------- */ + +void FixStoreLocal::reallocate(int n) +{ + // grow vector or array + while (nmax <= n) nmax += DELTA; + + if (nvalues == 1) { + memory->grow(vector, nmax, "fix_store_local:vector"); + vector_local = vector; + } else { + memory->grow(array, nmax, nvalues, "fix_store_local:array"); + array_local = array; + } +} + +/* ---------------------------------------------------------------------- + memory usage of local data +------------------------------------------------------------------------- */ + +double FixStoreLocal::memory_usage() +{ + double bytes = (double) nmax * (double) nvalues * sizeof(double); + return bytes; +} + diff --git a/src/fix_store_local.h b/src/fix_store_local.h index 4102c88f37..3552b55a60 100644 --- a/src/fix_store_local.h +++ b/src/fix_store_local.h @@ -1,75 +1,70 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - https://www.lammps.org/ Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - 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 FIX_CLASS -// clang-format off -FixStyle(store/local,FixStoreLocal); -// clang-format on -#else - -#ifndef LMP_FIX_STORE_LOCAL_H -#define LMP_FIX_STORE_LOCAL_H - -#include "fix.h" - -namespace LAMMPS_NS { - -class FixStoreLocal : public Fix { - public: - FixStoreLocal(class LAMMPS *, int, char **); - ~FixStoreLocal(); - int setmask(); - void post_force(int); - void write_restart(FILE *); - void restart(char *); - int size_restart(int); - int maxsize_restart(); - double memory_usage(); - void add_data(double *, int, int); - int nvalues; - - private: - int nmax; - - double *vector; - double **array; - - int ncount; - - void reallocate(int); - double *rbuf; // restart buffer for GLOBAL vec/array -}; - -} // namespace LAMMPS_NS - -#endif -#endif - -/* ERROR/WARNING messages: - -E: Illegal ... command - -Self-explanatory. Check the input script syntax and compare to the -documentation for the command. You can use -echo screen as a -command-line option when running LAMMPS to see the offending line. - -E: Invalid keyword in fix store/local command - -Self-explanatory. - -E: Unused instance of fix store/local - -Instance of fix store/local is not associated with any other LAMMPS -class such as a bond style, pair style, etc. - -*/ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + 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 FIX_CLASS +// clang-format off +FixStyle(store/local,FixStoreLocal); +// clang-format on +#else + +#ifndef LMP_FIX_STORE_LOCAL_H +#define LMP_FIX_STORE_LOCAL_H + +#include "fix.h" + +namespace LAMMPS_NS { + +class FixStoreLocal : public Fix { + public: + FixStoreLocal(class LAMMPS *, int, char **); + ~FixStoreLocal(); + int setmask(); + void post_force(int); + double memory_usage(); + void add_data(double *, int, int); + int nvalues; + + private: + int nmax; + + double *vector; + double **array; + + int ncount; + + void reallocate(int); +}; + +} // namespace LAMMPS_NS + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Invalid keyword in fix store/local command + +Self-explanatory. + +E: Unused instance of fix store/local + +Instance of fix store/local is not associated with any other LAMMPS +class such as a bond style, pair style, etc. + +*/ diff --git a/src/npair_half_size_bin_newtoff.cpp b/src/npair_half_size_bin_newtoff.cpp index 001d1281c9..de063c1eb9 100644 --- a/src/npair_half_size_bin_newtoff.cpp +++ b/src/npair_half_size_bin_newtoff.cpp @@ -121,7 +121,6 @@ void NPairHalfSizeBinNewtoff::build(NeighList *list) else if (domain->minimum_image_check(delx,dely,delz)) neighptr[n++] = jh; else if (which > 0) neighptr[n++] = jh ^ (which << SBBITS); - // OLD: if (which >= 0) neighptr[n++] = j ^ (which << SBBITS); } else neighptr[n++] = jh; } } diff --git a/src/npair_half_size_bin_newton.cpp b/src/npair_half_size_bin_newton.cpp index b3b1f3216d..fbf5ce14d4 100644 --- a/src/npair_half_size_bin_newton.cpp +++ b/src/npair_half_size_bin_newton.cpp @@ -124,7 +124,6 @@ void NPairHalfSizeBinNewton::build(NeighList *list) else if (domain->minimum_image_check(delx,dely,delz)) neighptr[n++] = jh; else if (which > 0) neighptr[n++] = jh ^ (which << SBBITS); - // OLD: if (which >= 0) neighptr[n++] = j ^ (which << SBBITS); } else neighptr[n++] = jh; } } @@ -160,7 +159,6 @@ void NPairHalfSizeBinNewton::build(NeighList *list) else if (domain->minimum_image_check(delx,dely,delz)) neighptr[n++] = jh; else if (which > 0) neighptr[n++] = jh ^ (which << SBBITS); - // OLD: if (which >= 0) neighptr[n++] = j ^ (which << SBBITS); } else neighptr[n++] = jh; } } diff --git a/src/npair_half_size_bin_newton_tri.cpp b/src/npair_half_size_bin_newton_tri.cpp index 2704c809ba..15728a596a 100644 --- a/src/npair_half_size_bin_newton_tri.cpp +++ b/src/npair_half_size_bin_newton_tri.cpp @@ -130,7 +130,6 @@ void NPairHalfSizeBinNewtonTri::build(NeighList *list) else if (domain->minimum_image_check(delx,dely,delz)) neighptr[n++] = jh; else if (which > 0) neighptr[n++] = jh ^ (which << SBBITS); - // OLD: if (which >= 0) neighptr[n++] = j ^ (which << SBBITS); } else neighptr[n++] = jh; } } diff --git a/src/npair_half_size_multi_newtoff.cpp b/src/npair_half_size_multi_newtoff.cpp index e902578465..ecb70cd6c4 100644 --- a/src/npair_half_size_multi_newtoff.cpp +++ b/src/npair_half_size_multi_newtoff.cpp @@ -142,7 +142,6 @@ void NPairHalfSizeMultiNewtoff::build(NeighList *list) else if (domain->minimum_image_check(delx,dely,delz)) neighptr[n++] = jh; else if (which > 0) neighptr[n++] = jh ^ (which << SBBITS); - // OLD: if (which >= 0) neighptr[n++] = j ^ (which << SBBITS); } else neighptr[n++] = jh; } } diff --git a/src/npair_half_size_multi_newton.cpp b/src/npair_half_size_multi_newton.cpp index 6a5491247a..ee100596bc 100644 --- a/src/npair_half_size_multi_newton.cpp +++ b/src/npair_half_size_multi_newton.cpp @@ -151,7 +151,6 @@ void NPairHalfSizeMultiNewton::build(NeighList *list) else if (domain->minimum_image_check(delx,dely,delz)) neighptr[n++] = jh; else if (which > 0) neighptr[n++] = jh ^ (which << SBBITS); - // OLD: if (which >= 0) neighptr[n++] = j ^ (which << SBBITS); } else neighptr[n++] = jh; } } @@ -196,7 +195,6 @@ void NPairHalfSizeMultiNewton::build(NeighList *list) else if (domain->minimum_image_check(delx,dely,delz)) neighptr[n++] = jh; else if (which > 0) neighptr[n++] = jh ^ (which << SBBITS); - // OLD: if (which >= 0) neighptr[n++] = j ^ (which << SBBITS); } else neighptr[n++] = jh; } } diff --git a/src/npair_half_size_multi_newton_tri.cpp b/src/npair_half_size_multi_newton_tri.cpp index ecb0036e02..9a170948b9 100644 --- a/src/npair_half_size_multi_newton_tri.cpp +++ b/src/npair_half_size_multi_newton_tri.cpp @@ -154,7 +154,6 @@ void NPairHalfSizeMultiNewtonTri::build(NeighList *list) else if (domain->minimum_image_check(delx,dely,delz)) neighptr[n++] = jh; else if (which > 0) neighptr[n++] = jh ^ (which << SBBITS); - // OLD: if (which >= 0) neighptr[n++] = j ^ (which << SBBITS); } else neighptr[n++] = jh; } } diff --git a/src/npair_half_size_multi_old_newtoff.cpp b/src/npair_half_size_multi_old_newtoff.cpp index ef6a826f83..4f8e4a8078 100644 --- a/src/npair_half_size_multi_old_newtoff.cpp +++ b/src/npair_half_size_multi_old_newtoff.cpp @@ -132,7 +132,6 @@ void NPairHalfSizeMultiOldNewtoff::build(NeighList *list) else if (domain->minimum_image_check(delx,dely,delz)) neighptr[n++] = jh; else if (which > 0) neighptr[n++] = jh ^ (which << SBBITS); - // OLD: if (which >= 0) neighptr[n++] = j ^ (which << SBBITS); } else neighptr[n++] = jh; } } diff --git a/src/npair_half_size_multi_old_newton.cpp b/src/npair_half_size_multi_old_newton.cpp index 413090448c..753c8c7d44 100644 --- a/src/npair_half_size_multi_old_newton.cpp +++ b/src/npair_half_size_multi_old_newton.cpp @@ -128,7 +128,6 @@ void NPairHalfSizeMultiOldNewton::build(NeighList *list) else if (domain->minimum_image_check(delx,dely,delz)) neighptr[n++] = jh; else if (which > 0) neighptr[n++] = jh ^ (which << SBBITS); - // OLD: if (which >= 0) neighptr[n++] = j ^ (which << SBBITS); } else neighptr[n++] = jh; } } @@ -171,7 +170,6 @@ void NPairHalfSizeMultiOldNewton::build(NeighList *list) else if (domain->minimum_image_check(delx,dely,delz)) neighptr[n++] = j; else if (which > 0) neighptr[n++] = j ^ (which << SBBITS); - // OLD: if (which >= 0) neighptr[n++] = j ^ (which << SBBITS); } else neighptr[n++] = j; } } diff --git a/src/npair_half_size_multi_old_newton_tri.cpp b/src/npair_half_size_multi_old_newton_tri.cpp index 9117e1449d..ee7a11a36e 100644 --- a/src/npair_half_size_multi_old_newton_tri.cpp +++ b/src/npair_half_size_multi_old_newton_tri.cpp @@ -139,7 +139,6 @@ void NPairHalfSizeMultiOldNewtonTri::build(NeighList *list) else if (domain->minimum_image_check(delx,dely,delz)) neighptr[n++] = jh; else if (which > 0) neighptr[n++] = jh ^ (which << SBBITS); - // OLD: if (which >= 0) neighptr[n++] = j ^ (which << SBBITS); } else neighptr[n++] = jh; } } diff --git a/src/npair_half_size_nsq_newtoff.cpp b/src/npair_half_size_nsq_newtoff.cpp index 0a127f3886..9ace347901 100644 --- a/src/npair_half_size_nsq_newtoff.cpp +++ b/src/npair_half_size_nsq_newtoff.cpp @@ -120,7 +120,6 @@ void NPairHalfSizeNsqNewtoff::build(NeighList *list) else if (domain->minimum_image_check(delx,dely,delz)) neighptr[n++] = jh; else if (which > 0) neighptr[n++] = jh ^ (which << SBBITS); - // OLD: if (which >= 0) neighptr[n++] = j ^ (which << SBBITS); } else neighptr[n++] = jh; } } diff --git a/src/npair_half_size_nsq_newton.cpp b/src/npair_half_size_nsq_newton.cpp index 866165c12e..05409a0bab 100644 --- a/src/npair_half_size_nsq_newton.cpp +++ b/src/npair_half_size_nsq_newton.cpp @@ -138,7 +138,6 @@ void NPairHalfSizeNsqNewton::build(NeighList *list) else if (domain->minimum_image_check(delx,dely,delz)) neighptr[n++] = jh; else if (which > 0) neighptr[n++] = jh ^ (which << SBBITS); - // OLD: if (which >= 0) neighptr[n++] = j ^ (which << SBBITS); } else neighptr[n++] = jh; } }