From bb720626e35a4e80acea5ebd4f31c7d47096d244 Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Fri, 27 Aug 2021 09:22:56 -0600 Subject: [PATCH 01/40] Adding files for BPM --- cmake/CMakeLists.txt | 1 + doc/src/Commands_bond.rst | 1 + doc/src/Commands_compute.rst | 1 + doc/src/Commands_fix.rst | 3 + doc/src/Examples.rst | 2 + doc/src/Howto_bpm.rst | 77 ++ doc/src/Packages_details.rst | 28 +- doc/src/Packages_list.rst | 5 + doc/src/atom_style.rst | 18 +- doc/src/bond_bpm_rotational.rst | 197 +++++ doc/src/compute.rst | 1 + doc/src/compute_nbonds_atom.rst | 56 ++ doc/src/fix.rst | 4 +- doc/src/fix_nve_sphere_bpm.rst | 82 ++ doc/src/fix_pair_tracker.rst | 124 --- doc/src/fix_store_local.rst | 77 ++ doc/src/fix_update_special_bonds.rst | 55 ++ doc/src/pair_tracker.rst | 61 +- src/.gitignore | 19 +- src/BPM/atom_vec_sphere_bpm.cpp | 254 ++++++ src/BPM/atom_vec_sphere_bpm.h | 83 ++ src/BPM/bond_bpm.cpp | 349 +++++++++ src/BPM/bond_bpm.h | 90 +++ src/BPM/bond_bpm_rotational.cpp | 727 ++++++++++++++++++ src/BPM/bond_bpm_rotational.h | 77 ++ src/BPM/compute_nbond_atom.cpp | 147 ++++ src/BPM/compute_nbond_atom.h | 61 ++ src/BPM/fix_bond_history.cpp | 294 +++++++ src/BPM/fix_bond_history.h | 80 ++ src/BPM/fix_nve_sphere_bpm.cpp | 161 ++++ src/BPM/fix_nve_sphere_bpm.h | 71 ++ src/BPM/fix_update_special_bonds.cpp | 235 ++++++ src/BPM/fix_update_special_bonds.h | 76 ++ src/GRANULAR/pair_gran_hertz_history.cpp | 11 +- src/GRANULAR/pair_gran_hooke.cpp | 11 +- src/GRANULAR/pair_gran_hooke_history.cpp | 11 +- src/GRANULAR/pair_granular.cpp | 23 +- src/MISC/fix_pair_tracker.cpp | 369 --------- src/MISC/pair_tracker.cpp | 245 +++++- src/MISC/pair_tracker.h | 45 +- src/MOLECULE/bond_quartic.cpp | 1 + src/Makefile | 4 +- src/OPENMP/fix_neigh_history_omp.cpp | 2 +- .../npair_half_size_bin_newtoff_omp.cpp | 41 +- src/OPENMP/npair_half_size_bin_newton_omp.cpp | 60 +- .../npair_half_size_bin_newton_tri_omp.cpp | 41 +- .../npair_half_size_multi_newtoff_omp.cpp | 70 +- .../npair_half_size_multi_newton_omp.cpp | 110 ++- .../npair_half_size_multi_newton_tri_omp.cpp | 72 +- .../npair_half_size_multi_old_newtoff_omp.cpp | 40 +- .../npair_half_size_multi_old_newton_omp.cpp | 59 +- ...air_half_size_multi_old_newton_tri_omp.cpp | 40 +- .../npair_half_size_nsq_newtoff_omp.cpp | 42 +- src/OPENMP/npair_half_size_nsq_newton_omp.cpp | 43 +- src/atom.cpp | 10 + src/atom.h | 3 +- src/atom_vec_sphere.cpp | 2 +- src/bond.cpp | 3 + src/bond.h | 9 + src/comm.cpp | 4 + src/comm.h | 2 + src/comm_brick.cpp | 74 ++ src/comm_brick.h | 2 + src/comm_tiled.cpp | 94 +++ src/comm_tiled.h | 2 + src/compute_property_atom.cpp | 60 +- src/fix_neigh_history.cpp | 2 +- src/fix_neigh_history.h | 3 +- src/fix_property_atom.cpp | 42 +- src/fix_store_local.cpp | 200 +++++ .../fix_pair_tracker.h => fix_store_local.h} | 160 ++-- src/lmptype.h | 6 +- src/math_extra.cpp | 52 ++ src/math_extra.h | 25 + src/neighbor.cpp | 7 +- src/npair_half_size_bin_newtoff.cpp | 42 +- src/npair_half_size_bin_newton.cpp | 62 +- src/npair_half_size_bin_newton_tri.cpp | 42 +- src/npair_half_size_multi_newtoff.cpp | 69 +- src/npair_half_size_multi_newton.cpp | 125 ++- src/npair_half_size_multi_newton_tri.cpp | 43 +- src/npair_half_size_multi_old_newtoff.cpp | 42 +- src/npair_half_size_multi_old_newton.cpp | 60 +- src/npair_half_size_multi_old_newton_tri.cpp | 42 +- src/npair_half_size_nsq_newtoff.cpp | 42 +- src/npair_half_size_nsq_newton.cpp | 41 +- src/set.cpp | 68 +- 87 files changed, 5392 insertions(+), 905 deletions(-) create mode 100755 doc/src/Howto_bpm.rst create mode 100644 doc/src/bond_bpm_rotational.rst create mode 100644 doc/src/compute_nbonds_atom.rst create mode 100644 doc/src/fix_nve_sphere_bpm.rst delete mode 100644 doc/src/fix_pair_tracker.rst create mode 100644 doc/src/fix_store_local.rst create mode 100755 doc/src/fix_update_special_bonds.rst create mode 100644 src/BPM/atom_vec_sphere_bpm.cpp create mode 100644 src/BPM/atom_vec_sphere_bpm.h create mode 100644 src/BPM/bond_bpm.cpp create mode 100644 src/BPM/bond_bpm.h create mode 100644 src/BPM/bond_bpm_rotational.cpp create mode 100644 src/BPM/bond_bpm_rotational.h create mode 100644 src/BPM/compute_nbond_atom.cpp create mode 100644 src/BPM/compute_nbond_atom.h create mode 100644 src/BPM/fix_bond_history.cpp create mode 100644 src/BPM/fix_bond_history.h create mode 100644 src/BPM/fix_nve_sphere_bpm.cpp create mode 100644 src/BPM/fix_nve_sphere_bpm.h create mode 100644 src/BPM/fix_update_special_bonds.cpp create mode 100644 src/BPM/fix_update_special_bonds.h delete mode 100644 src/MISC/fix_pair_tracker.cpp create mode 100644 src/fix_store_local.cpp rename src/{MISC/fix_pair_tracker.h => fix_store_local.h} (60%) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index a778c89d42..8dd5da17db 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -145,6 +145,7 @@ set(STANDARD_PACKAGES AWPMD BOCS BODY + BPM BROWNIAN CG-DNA CG-SDK diff --git a/doc/src/Commands_bond.rst b/doc/src/Commands_bond.rst index 1a0876e88f..b79e8ee174 100644 --- a/doc/src/Commands_bond.rst +++ b/doc/src/Commands_bond.rst @@ -32,6 +32,7 @@ OPT. * * * + * :doc:`bpm/rotational ` * :doc:`class2 (ko) ` * :doc:`fene (iko) ` * :doc:`fene/expand (o) ` diff --git a/doc/src/Commands_compute.rst b/doc/src/Commands_compute.rst index 9dfb28fa8b..4254c4f65c 100644 --- a/doc/src/Commands_compute.rst +++ b/doc/src/Commands_compute.rst @@ -89,6 +89,7 @@ KOKKOS, o = OPENMP, t = OPT. * :doc:`msd ` * :doc:`msd/chunk ` * :doc:`msd/nongauss ` + * :doc:`nbond/atom ` * :doc:`omega/chunk ` * :doc:`orientorder/atom (k) ` * :doc:`pair ` diff --git a/doc/src/Commands_fix.rst b/doc/src/Commands_fix.rst index 45a75ff394..ef9c666751 100644 --- a/doc/src/Commands_fix.rst +++ b/doc/src/Commands_fix.rst @@ -140,6 +140,7 @@ OPT. * :doc:`nve/manifold/rattle ` * :doc:`nve/noforce ` * :doc:`nve/sphere (ko) ` + * :doc:`nve/sphere/bpm ` * :doc:`nve/spin ` * :doc:`nve/tri ` * :doc:`nvk ` @@ -221,6 +222,7 @@ OPT. * :doc:`spring/rg ` * :doc:`spring/self ` * :doc:`srd ` + * :doc:`store/local ` * :doc:`store/force ` * :doc:`store/state ` * :doc:`tdpd/source ` @@ -238,6 +240,7 @@ OPT. * :doc:`ttm ` * :doc:`ttm/mod ` * :doc:`tune/kspace ` + * :doc:`update/special/bonds ` * :doc:`vector ` * :doc:`viscosity ` * :doc:`viscous ` diff --git a/doc/src/Examples.rst b/doc/src/Examples.rst index 649be52ab7..159de8aea5 100644 --- a/doc/src/Examples.rst +++ b/doc/src/Examples.rst @@ -54,6 +54,8 @@ Lowercase directories +-------------+------------------------------------------------------------------+ | body | body particles, 2d system | +-------------+------------------------------------------------------------------+ +| bpm | bonded particle models of pouring, crushing, and fracture | ++-------------+------------------------------------------------------------------+ | cmap | CMAP 5-body contributions to CHARMM force field | +-------------+------------------------------------------------------------------+ | colloid | big colloid particles in a small particle solvent, 2d system | diff --git a/doc/src/Howto_bpm.rst b/doc/src/Howto_bpm.rst new file mode 100755 index 0000000000..24dc77d44b --- /dev/null +++ b/doc/src/Howto_bpm.rst @@ -0,0 +1,77 @@ +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. + +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. + +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. + +As bonds can be broken between neighbor list builds, :doc:`special_bonds ` +work differently for BPM bond styles. There are two possible special +bond settings which determine how pair interactions work between bonded +particles. First, one can simply overlay pair interactions such that all +bonded particles also feel pair interactions. This can be accomplished by +simply turning off all special bonds by setting + +.. code-block:: LAMMPS + + special_bonds lj/coul 1 1 1 + +Alternatively, 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. To do this, one must both define an instance of +:doc:`fix update/special/bonds ` and have the special bond +settings + +.. code-block:: LAMMPS + + special_bonds lj 0 1 1 coul 1 1 1 + +This fix ensures the 1-2 special bond list remains updated as bonds break. The fix +also requires :doc:`newton ` bond off such that whena bond breaks between +atoms across multiple processors, all processors are aware of the event. +The special bond settings then accomplish two tasks. 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. +However, setting a nonzero coul weight for 1-2 bonds ensures all bonded +neighbors are included in the neighbor list. All bonded neighbors must be included +in neighbor lists as they could become unbonded at any timestep. + +Currently there are two types of bonds included in this package. The first +bond style, :doc:`bond bpm/simple `, 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. diff --git a/doc/src/Packages_details.rst b/doc/src/Packages_details.rst index b4e50fad75..e788da552d 100644 --- a/doc/src/Packages_details.rst +++ b/doc/src/Packages_details.rst @@ -32,6 +32,7 @@ page gives those details. * :ref:`AWPMD ` * :ref:`BOCS ` * :ref:`BODY ` + * :ref:`BPM ` * :ref:`BROWNIAN ` * :ref:`CG-DNA ` * :ref:`CG-SDK ` @@ -284,6 +285,32 @@ overview. ---------- +.. _PKG-BPM: + +BPM package +------------ + +**Contents:** + +Pair styles, bond styles, fixes, and computes for bonded particle +models for mesoscale simulations of solids and fracture. See the +:doc:`Howto bpm ` page for an overview. + +**Authors:** Joel T. Clemmer (Sandia National Labs) + +**Supporting info:** + +* src/BPM filenames -> commands +* :doc:`Howto_bpm ` +* :doc:`atom_style sphere/bpm ` +* :doc:`bond_style bpm/rotational ` +* :doc:`compute nbonds/atom ` +* :doc:`fix nve/sphere/bpm ` +* :doc:`fix update/special/bonds ` +* examples/bpm + +---------- + .. _PKG-BROWNIAN: BROWNIAN package @@ -1564,7 +1591,6 @@ listing, "ls src/MISC", to see the list of commands. * :doc:`pair_style list ` * :doc:`pair_style srp ` * :doc:`pair_style tracker ` -* :doc:`fix pair/tracker ` ---------- diff --git a/doc/src/Packages_list.rst b/doc/src/Packages_list.rst index 22dfa2c69e..4ab3f179e7 100644 --- a/doc/src/Packages_list.rst +++ b/doc/src/Packages_list.rst @@ -58,6 +58,11 @@ whether an extra library is needed to build and use the package: - :doc:`Howto body ` - body - no + * - :ref:`BPM ` + - bonded particle models + - :doc:`Howto bpm ` + - bpm + - no * - :ref:`BROWNIAN ` - Brownian dynamics, self-propelled particles - :doc:`fix brownian `, :doc:`fix propel/self ` diff --git a/doc/src/atom_style.rst b/doc/src/atom_style.rst index bade8c2f79..09eca474ae 100644 --- a/doc/src/atom_style.rst +++ b/doc/src/atom_style.rst @@ -10,7 +10,7 @@ Syntax atom_style style args -* style = *angle* or *atomic* or *body* or *bond* or *charge* or *dipole* or *dpd* or *edpd* or *electron* or *ellipsoid* or *full* or *line* or *mdpd* or *molecular* or *oxdna* or *peri* or *smd* or *sph* or *sphere* or *spin* or *tdpd* or *tri* or *template* or *hybrid* +* style = *angle* or *atomic* or *body* or *bond* or *charge* or *dipole* or *dpd* or *edpd* or *electron* or *ellipsoid* or *full* or *line* or *mdpd* or *molecular* or *oxdna* or *peri* or *smd* or *sph* or *sphere* or *sphere/bpm* or *spin* or *tdpd* or *tri* or *template* or *hybrid* .. parsed-literal:: @@ -21,6 +21,7 @@ Syntax see the :doc:`Howto body ` doc page for details *sphere* arg = 0/1 (optional) for static/dynamic particle radii + *sphere/bpm* arg = 0/1 (optional) for static/dynamic particle radii *tdpd* arg = Nspecies Nspecies = # of chemical species *template* arg = template-ID @@ -120,6 +121,8 @@ quantities. +--------------+-----------------------------------------------------+--------------------------------------+ | *sphere* | diameter, mass, angular velocity | granular models | +--------------+-----------------------------------------------------+--------------------------------------+ +| *sphere/bpm* | diameter, mass, angular velocity, quaternion | granular bonded particle models (bpm)| ++--------------+-----------------------------------------------------+--------------------------------------+ | *spin* | magnetic moment | system with magnetic particles | +--------------+-----------------------------------------------------+--------------------------------------+ | *tdpd* | chemical concentration | tDPD particles | @@ -141,8 +144,9 @@ quantities. output the custom values. All of the above styles define point particles, except the *sphere*, -*ellipsoid*, *electron*, *peri*, *wavepacket*, *line*, *tri*, and -*body* styles, which define finite-size particles. See the :doc:`Howto spherical ` page for an overview of using +*sphere/bpm*, *ellipsoid*, *electron*, *peri*, *wavepacket*, *line*, +*tri*, and *body* styles, which define finite-size particles. See the +:doc:`Howto spherical ` page for an overview of using finite-size particle models with LAMMPS. All of the point-particle styles assign mass to particles on a @@ -150,15 +154,15 @@ per-type basis, using the :doc:`mass ` command, The finite-size particle styles assign mass to individual particles on a per-particle basis. -For the *sphere* style, the particles are spheres and each stores a +For the *sphere* and *sphere/bpm* styles, the particles are spheres and each stores a per-particle diameter and mass. If the diameter > 0.0, the particle is a finite-size sphere. If the diameter = 0.0, it is a point particle. Note that by use of the *disc* keyword with the :doc:`fix nve/sphere `, :doc:`fix nvt/sphere `, :doc:`fix nph/sphere `, :doc:`fix npt/sphere -` commands, spheres can be effectively treated as 2d +` commands for the *sphere* style, spheres can be effectively treated as 2d discs for a 2d simulation if desired. See also the :doc:`set -density/disc ` command. The *sphere* style takes an optional 0 +density/disc ` command. The *sphere* and *sphere/bpm* styles take an optional 0 or 1 argument. A value of 0 means the radius of each sphere is constant for the duration of the simulation. A value of 1 means the radii may vary dynamically during the simulation, e.g. due to use of @@ -195,6 +199,8 @@ position, which is represented by the eradius = electron size. For the *peri* style, the particles are spherical and each stores a per-particle mass and volume. +The *sphere/bpm* style is part of the BPM package. + The *oxdna* style is for coarse-grained nucleotides and stores the 3'-to-5' polarity of the nucleotide strand, which is set through the bond topology in the data file. The first (second) atom in a diff --git a/doc/src/bond_bpm_rotational.rst b/doc/src/bond_bpm_rotational.rst new file mode 100644 index 0000000000..632e340da6 --- /dev/null +++ b/doc/src/bond_bpm_rotational.rst @@ -0,0 +1,197 @@ +.. index:: bond_style bpm/rotational + +bond_style bpm/rotational command +========================== + +Syntax +"""""" + +.. code-block:: LAMMPS + + bond_style bpm/rotational keyword value attribute1 attribute2 ... + +* optional keyword = *store/local* + + .. parsed-literal:: + + *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 + + +Examples +"""""""" + +.. code-block:: LAMMPS + + bond_style bpm/rotational + bond_coeff 1 + + bond_style bpm/rotational myfix time id1 id2 + fix myfix all store/local 1000 3 + dump 1 all local 1000 dump.broken f_myfix[1] f_myfix[2] f_myfix[3] + dump_modify 1 write_header no + +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 system will not reset the reference state of a bond. + +Forces include a normal and tangential component. The base normal force +has a magnitude of + +.. math:: + + F_r = K_r (r - r_0) + +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) `. + +Bonds will break under sufficient stress. A breaking criteria is calculated + +.. math:: + + B = \alpha(r, r_0) \frac{F_r}{F_{r,c}} + \frac{F_s}{F_{s,c}} + + \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. The term :math:`\alpha` is simply one in +extension and zero in compression such that the normal force component +does not contribute to the breaking criteria in compression. +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)^2`. + +Finally, additional damping forces and torques are applied to the two +particles. A force is applied proportional to the difference in the +normal velocity of particles using a similar construction as +dissipative particle dynamics (:ref:`(Groot) `): + +.. math:: + + F_D = - \gamma_n w (\hat{r} \bullet \vec{v}) + +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. + +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: + +* :math:`K_r` (force/distance units) +* :math:`K_s` (force/distance units) +* :math:`K_t` (force units) +* :math:`K_b` (force units) +* :math:`F_{r,c}` (force units) +* :math:`F_{s,c}` (force units) +* :math:`\tau_{b,c}` (force*distance units) +* :math:`\tau_{t,c}` (force*distance units) +* :math:`\gamma_n` (force/velocity units) +* :math:`\gamma_s` (force/velocity units) +* :math:`\gamma_r` (distance*force/seconds/radians units) +* :math:`\gamma_t` (distance*force/seconds/radians units) + +As bonds can be broken between neighbor list builds, particular +:doc:`special_bonds ` are required. See the `:doc: how to ` +page on BPMs or `:doc: fix update/special/bonds ` +for details. + +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.: + +.. code-block:: LAMMPS + + delete_bonds all stats + delete_bonds all bond 0 remove + + +---------- + +Restart +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +This bond style writes the reference state of each bond to +: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. + +The *bpm/rotational* style requires 1-3 and 1-4 :doc:`special_bonds ` +be turned off using the :doc:`special_bonds ` command. + +The *bpm/rotational* style requires :doc:`atom style sphere/bpm `. + +Related commands +"""""""""""""""" + +:doc:`bond_coeff `, :doc:`fix store/local `, +:doc:`fix nve/sphere/bpm ` + +Default +""""""" + +none + + +.. _Wang2009: + +**(Wang)** Wang, Acta Geotechnica, 4, +p 117-127 (2009). + +.. _Wang2009b: + +**(Wang and Mora)** Wang, Mora, Advances in Geocomputing, +119, p 183-228 (2009). + +.. _Groot1: + +**(Groot)** Groot and Warren, J Chem Phys, 107, 4423-35 (1997). + +.. _Wang2015: + +**(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 diff --git a/doc/src/compute.rst b/doc/src/compute.rst index 71d3bada76..0b8249cc7d 100644 --- a/doc/src/compute.rst +++ b/doc/src/compute.rst @@ -234,6 +234,7 @@ The individual style names on the :doc:`Commands compute ` pag * :doc:`msd ` - mean-squared displacement of group of atoms * :doc:`msd/chunk ` - mean-squared displacement for each chunk * :doc:`msd/nongauss ` - MSD and non-Gaussian parameter of group of atoms +* :doc:`nbond/atom ` - calculates number of bonds per atom * :doc:`omega/chunk ` - angular velocity for each chunk * :doc:`orientorder/atom ` - Steinhardt bond orientational order parameters Ql * :doc:`pair ` - values computed by a pair style diff --git a/doc/src/compute_nbonds_atom.rst b/doc/src/compute_nbonds_atom.rst new file mode 100644 index 0000000000..fd7ff4f8a9 --- /dev/null +++ b/doc/src/compute_nbonds_atom.rst @@ -0,0 +1,56 @@ +.. index:: compute nbonds/atom + +compute nbonds/atom command +======================= + +Syntax +"""""" + +.. parsed-literal:: + + compute ID group-ID nbonds/atom + +* ID, group-ID are documented in :doc:`compute ` command +* nbonds/atom = style name of this compute command + +Examples +"""""""" + +.. code-block:: LAMMPS + + compute 1 all nbonds/atom + +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. + +Output info +""""""""""" + +This compute calculates a per-atom vector, which can be accessed by +any command that uses per-atom values from a compute as input. See +the :doc:`Howto output ` doc page for an overview of +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. + +Related commands +"""""""""""""""" + +Default +""""""" + +none + +---------- + diff --git a/doc/src/fix.rst b/doc/src/fix.rst index 81c0c87320..9c749b2f38 100644 --- a/doc/src/fix.rst +++ b/doc/src/fix.rst @@ -283,6 +283,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/spin ` - NVE for a spin or spin-lattice system * :doc:`nve/tri ` - NVE for triangles * :doc:`nvk ` - constant kinetic energy time integration @@ -300,7 +301,6 @@ accelerated styles exist. * :doc:`orient/fcc ` - add grain boundary migration force for FCC * :doc:`orient/eco ` - add generalized grain boundary migration force * :doc:`pafi ` - constrained force averages on hyper-planes to compute free energies (PAFI) -* :doc:`pair/tracker ` - track properties of pairwise interactions * :doc:`phonon ` - calculate dynamical matrix from MD simulations * :doc:`pimd ` - Feynman path integral molecular dynamics * :doc:`planeforce ` - constrain atoms to move in a plane @@ -364,6 +364,7 @@ accelerated styles exist. * :doc:`spring/rg ` - spring on radius of gyration of group of atoms * :doc:`spring/self ` - spring from each atom to its origin * :doc:`srd ` - stochastic rotation dynamics (SRD) +* :doc:`store/local ` - store local data for output * :doc:`store/force ` - store force on each atom * :doc:`store/state ` - store attributes for each atom * :doc:`tdpd/source ` - @@ -381,6 +382,7 @@ accelerated styles exist. * :doc:`ttm ` - two-temperature model for electronic/atomic coupling * :doc:`ttm/mod ` - enhanced two-temperature model with additional options * :doc:`tune/kspace ` - auto-tune KSpace parameters +* :doc:`update/special/bonds ` - update special bond lists for BPM bond styles that allow for bond breakage * :doc:`vector ` - accumulate a global vector every N timesteps * :doc:`viscosity ` - Muller-Plathe momentum exchange for viscosity calculation * :doc:`viscous ` - viscous damping for granular simulations diff --git a/doc/src/fix_nve_sphere_bpm.rst b/doc/src/fix_nve_sphere_bpm.rst new file mode 100644 index 0000000000..1afa53a4de --- /dev/null +++ b/doc/src/fix_nve_sphere_bpm.rst @@ -0,0 +1,82 @@ +.. index:: fix nve/sphere/bpm + +fix nve/sphere/bpm command +====================== + +Syntax +"""""" + +.. parsed-literal:: + + fix ID group-ID nve/sphere/bpm + +* ID, group-ID are documented in :doc:`fix ` command +* nve/sphere/bpm = style name of this fix command +* zero or more keyword/value pairs may be appended +* keyword = *disc* + + .. parsed-literal:: + + *disc* value = none = treat particles as 2d discs, not spheres + +Examples +"""""""" + +.. code-block:: LAMMPS + + fix 1 all nve/sphere/bpm + fix 1 all nve/sphere/bpm disc + +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. + +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. + +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 +simulations, as defined by the :doc:`dimension ` keyword. +The only difference between discs and spheres in this context is their +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 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 `. + +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. + +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. + +Related commands +"""""""""""""""" + +:doc:`fix nve `, :doc:`fix nve/sphere ` + +Default +""""""" + +none + diff --git a/doc/src/fix_pair_tracker.rst b/doc/src/fix_pair_tracker.rst deleted file mode 100644 index 5c2ecf5774..0000000000 --- a/doc/src/fix_pair_tracker.rst +++ /dev/null @@ -1,124 +0,0 @@ -.. index:: fix pair/tracker - -fix pair/tracker command -======================== - -Syntax -"""""" - -.. parsed-literal:: - - fix ID group-ID pair/tracker N attribute1 attribute2 ... keyword values ... - -* ID, group-ID are documented in :doc:`fix ` command -* pair/tracker = style name of this fix command -* N = prepare data for output every this many timesteps -* one or more attributes may be appended - - .. parsed-literal:: - - possible attributes = id1 id2 time/created time/broken time/total - rmin rave x y z - - .. 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 - -* zero or more keyword/value pairs may be appended -* keyword = *time/min* or *type/include* - - .. parsed-literal:: - - *time/min* value = T - T = minimum interaction time - *type/include* value = arg1 arg2 - arg = separate lists of types (see below) - -Examples -"""""""" - -.. code-block:: LAMMPS - - fix 1 all pair/tracker 1000 id1 id2 time/min 100 - fix 1 all pair/tracker 1000 time/created time/broken type/include 1 * type/include 2 3,4 - -Description -""""""""""" - -Tracks properties of pairwise interactions between two atoms and records data -whenever the atoms move beyond the interaction cutoff. -Must be used in conjunction with :doc:`pair tracker `. -Data is accumulated over a span of *N* timesteps before being deleted. -The number of datums generated, aggregated across all processors, equals -the number of broken interactions. Interactions are only included if both -atoms are included in the specified fix group. Additional filters can be -applied using the *time/min* or *type/include* keywords described below. - -.. note:: - - For extremely long-lived interactions, the calculation of *r/ave* may not be - correct due to double overflow. - -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. - ----------- - -Restart, fix_modify, 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 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 vector or array values will be doubles that correspond to the -specified attribute. - -Restrictions -"""""""""""" - -Must be used in conjunction with :doc:`pair style tracker `. - -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. - -Related commands -"""""""""""""""" - -:doc:`pair tracker ` - -Default -""""""" - -none diff --git a/doc/src/fix_store_local.rst b/doc/src/fix_store_local.rst new file mode 100644 index 0000000000..6048222754 --- /dev/null +++ b/doc/src/fix_store_local.rst @@ -0,0 +1,77 @@ +.. index:: fix store/local + +fix store/local command +======================== + +Syntax +"""""" + +.. parsed-literal:: + + fix ID group-ID store/local N nvalues + +* ID, group-ID are documented in :doc:`fix ` command +* store/local = style name of this fix command +* N = prepare data for output every this many timesteps +* nvalues = number of values stored by this fix + +Examples +"""""""" + +.. code-block:: LAMMPS + + fix 1 all store/local 1000 2 + dump 1 all local 1000 dump.local f_1[1] f_1[2] + +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. + +---------- + +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. + +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 vector or array values will be doubles that correspond to the +specified attribute. + +Restrictions +"""""""""""" + +Must be used in conjunction with another LAMMPS class which outputs local data. + +Related commands +"""""""""""""""" + +:doc:`pair tracker ` +:doc:`bond bpm/rotational ` +:doc:`dump local ` + +Default +""""""" + +none diff --git a/doc/src/fix_update_special_bonds.rst b/doc/src/fix_update_special_bonds.rst new file mode 100755 index 0000000000..f129b537d6 --- /dev/null +++ b/doc/src/fix_update_special_bonds.rst @@ -0,0 +1,55 @@ +.. index:: fix update/special/bonds + +fix update/special/bonds command +====================== + +Syntax +"""""" + +.. parsed-literal:: + + fix ID group-ID update/special/bonds + +* ID, group-ID are documented in :doc:`fix ` command +* update/special/bonds = style name of this fix command + +Examples +"""""""" + +.. code-block:: LAMMPS + + fix 1 all update/special/bonds + +Description +""""""""""" + +This fix is used to update the 1-2 special bond list for BPM bond styles. +This feature is used to censor pair forces between bonded particles. +See the :doc:`BPM how to ` for more information. + +---------- + +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 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 `. + +Restrictions +"""""""""""" + +This fix requires :doc:`newton ` bond off. + +Related commands +"""""""""""""""" + +:doc:`bond bpm/rotational ` + +Default +""""""" + +none + diff --git a/doc/src/pair_tracker.rst b/doc/src/pair_tracker.rst index d2cee1d879..c176c6d132 100644 --- a/doc/src/pair_tracker.rst +++ b/doc/src/pair_tracker.rst @@ -8,29 +8,51 @@ Syntax .. code-block:: LAMMPS - pair_style tracker keyword + pair_style tracker fix_ID keyword values attribute1 attribute2 ... -* zero or more keyword/arg pairs may be appended -* keyword = *finite* +* fix_ID = ID of associated fix store/local +* zero or more keywords may be appended +* keyword = *finite* or *time/min* or *type/include* .. parsed-literal:: *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) + +* one or more attributes may be appended + + .. parsed-literal:: + + possible attributes = id1 id2 time/created time/broken time/total + r/min r/ave x y z + + .. 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 Examples """""""" .. code-block:: LAMMPS - pair_style hybrid/overlay tracker ... + pair_style hybrid/overlay tracker myfix id1 id2 type/include 1 * type/include 2 3,4 pair_coeff 1 1 tracker 2.0 - pair_style hybrid/overlay tracker finite ... + pair_style hybrid/overlay tracker myfix finite x y z time/min 100 pair_coeff * * tracker - fix 1 all pair/tracker 1000 time/created time/broken - dump 1 all local 1000 dump.local f_1[1] f_1[2] + fix myfix all store/local 1000 3 + dump 1 all local 1000 dump.local f_myfix[1] f_myfix[2] f_myfix[3] dump_modify 1 write_header no Description @@ -40,8 +62,11 @@ 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 about :doc:`fix pair_tracker ` which contains -information on what data can be output. +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. If the *finite* keyword is not defined, the following coefficients must be defined for each pair of atom types via the :doc:`pair_coeff ` @@ -55,6 +80,24 @@ If the *finite* keyword is defined, no coefficients may be defined. Interaction cutoffs are alternatively calculated based on the diameter of finite particles. +.. note:: + + For extremely long-lived interactions, the calculation of *r/ave* may not be + correct due to double overflow. + +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. Mixing, shift, table, tail correction, restart, rRESPA info """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" diff --git a/src/.gitignore b/src/.gitignore index 6c0a838c1b..1ed30868ab 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -251,6 +251,23 @@ /pair_mesont_tpm.cpp /pair_mesont_tpm.h +/atom_vec_sphere_bpm.cpp +/atom_vec_sphere_bpm.h +/bond_bpm.cpp +/bond_bpm.h +/bond_bpm_rotational.cpp +/bond_bpm_rotational.h +/bond_bpm_simple.cpp +/bond_bpm_simple.h +/compute_nbond_atom.cpp +/compute_nbond_atom.h +/fix_bond_history.cpp +/fix_bond_history.h +/fix_nve_sphere_bpm.cpp +/fix_nve_sphere_bpm.h +/fix_update_special_bonds.cpp +/fix_update_special_bonds.h + /compute_adf.cpp /compute_adf.h /compute_contact_atom.cpp @@ -779,8 +796,6 @@ /fix_orient_eco.h /fix_orient_fcc.cpp /fix_orient_fcc.h -/fix_pair_tracker.cpp -/fix_pair_tracker.h /fix_peri_neigh.cpp /fix_peri_neigh.h /fix_phonon.cpp diff --git a/src/BPM/atom_vec_sphere_bpm.cpp b/src/BPM/atom_vec_sphere_bpm.cpp new file mode 100644 index 0000000000..3fe372e340 --- /dev/null +++ b/src/BPM/atom_vec_sphere_bpm.cpp @@ -0,0 +1,254 @@ +// clang-format off +/* ---------------------------------------------------------------------- + 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 "atom_vec_sphere_bpm.h" + +#include "atom.h" +#include "error.h" +#include "fix.h" +#include "fix_adapt.h" +#include "math_const.h" +#include "modify.h" +#include "utils.h" + +#include + +using namespace LAMMPS_NS; +using namespace MathConst; + +/* ---------------------------------------------------------------------- */ + +AtomVecSphereBPM::AtomVecSphereBPM(LAMMPS *lmp) : AtomVec(lmp) +{ + mass_type = PER_ATOM; + molecular = Atom::MOLECULAR; + bonds_allow = 1; + + atom->molecule_flag = 1; + atom->sphere_flag = 1; + atom->radius_flag = atom->rmass_flag = atom->omega_flag = + atom->torque_flag = atom->quat_flag = 1; + + // strings with peratom variables to include in each AtomVec method + // strings cannot contain fields in corresponding AtomVec default strings + // order of fields in a string does not matter + // except: fields_data_atom & fields_data_vel must match data file + + fields_grow = (char *) + "molecule num_bond bond_type bond_atom nspecial special radius rmass omega torque quat"; + fields_copy = (char *) + "molecule num_bond bond_type bond_atom nspecial special radius rmass omega quat"; + fields_comm = (char *) ""; + fields_comm_vel = (char *) "omega quat"; + fields_reverse = (char *) "torque"; + fields_border = (char *) "molecule radius rmass"; + fields_border_vel = (char *) "molecule radius rmass omega quat"; + fields_exchange = (char *) + "molecule num_bond bond_type bond_atom nspecial special radius rmass omega quat"; + fields_restart = (char *) + "molecule num_bond bond_type bond_atom radius rmass omega quat"; + fields_create = (char *) + "molecule num_bond nspecial radius rmass omega quat"; + fields_data_atom = (char *) "id molecule type radius rmass x"; + fields_data_vel = (char *) "id v omega"; + + bond_per_atom = 0; + bond_negative = NULL; +} + +/* ---------------------------------------------------------------------- + process sub-style args + optional arg = 0/1 for static/dynamic particle radii +------------------------------------------------------------------------- */ + +void AtomVecSphereBPM::process_args(int narg, char **arg) +{ + if (narg != 0 && narg != 1) + error->all(FLERR,"Illegal atom_style sphere/bpm command"); + + radvary = 0; + if (narg == 1) { + radvary = utils::numeric(FLERR,arg[0],true,lmp); + if (radvary < 0 || radvary > 1) + error->all(FLERR,"Illegal atom_style sphere/bpm command"); + } + + // dynamic particle radius and mass must be communicated every step + + if (radvary) { + fields_comm = (char *) "radius rmass"; + fields_comm_vel = (char *) "radius rmass omega"; + } + + // delay setting up of fields until now + + setup_fields(); +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecSphereBPM::init() +{ + AtomVec::init(); + + // check if optional radvary setting should have been set to 1 + + for (int i = 0; i < modify->nfix; i++) + if (strcmp(modify->fix[i]->style,"adapt") == 0) { + FixAdapt *fix = (FixAdapt *) modify->fix[i]; + if (fix->diamflag && radvary == 0) + error->all(FLERR,"Fix adapt changes particle radii " + "but atom_style sphere is not dynamic"); + } +} + +/* ---------------------------------------------------------------------- + set local copies of all grow ptrs used by this class, except defaults + needed in replicate when 2 atom classes exist and it calls pack_restart() +------------------------------------------------------------------------- */ + +void AtomVecSphereBPM::grow_pointers() +{ + radius = atom->radius; + rmass = atom->rmass; + omega = atom->omega; + quat = atom->quat; + + num_bond = atom->num_bond; + bond_type = atom->bond_type; + nspecial = atom->nspecial; +} + + +/* ---------------------------------------------------------------------- + initialize non-zero atom quantities +------------------------------------------------------------------------- */ + +void AtomVecSphereBPM::create_atom_post(int ilocal) +{ + radius[ilocal] = 0.5; + rmass[ilocal] = 4.0*MY_PI/3.0 * 0.5*0.5*0.5; + + quat[ilocal][0] = 1.0; + quat[ilocal][1] = 0.0; + quat[ilocal][2] = 0.0; + quat[ilocal][3] = 0.0; + +} + +/* ---------------------------------------------------------------------- + modify values for AtomVec::pack_restart() to pack +------------------------------------------------------------------------- */ + +void AtomVecSphereBPM::pack_restart_pre(int ilocal) +{ + // insure bond_negative vector is needed length + + if (bond_per_atom < atom->bond_per_atom) { + delete [] bond_negative; + bond_per_atom = atom->bond_per_atom; + bond_negative = new int[bond_per_atom]; + } + + // flip any negative types to positive and flag which ones + + any_bond_negative = 0; + for (int m = 0; m < num_bond[ilocal]; m++) { + if (bond_type[ilocal][m] < 0) { + bond_negative[m] = 1; + bond_type[ilocal][m] = -bond_type[ilocal][m]; + any_bond_negative = 1; + } else bond_negative[m] = 0; + } +} + +/* ---------------------------------------------------------------------- + unmodify values packed by AtomVec::pack_restart() +------------------------------------------------------------------------- */ + +void AtomVecSphereBPM::pack_restart_post(int ilocal) +{ + // restore the flagged types to their negative values + + if (any_bond_negative) { + for (int m = 0; m < num_bond[ilocal]; m++) + if (bond_negative[m]) bond_type[ilocal][m] = -bond_type[ilocal][m]; + } +} + +/* ---------------------------------------------------------------------- + initialize other atom quantities after AtomVec::unpack_restart() +------------------------------------------------------------------------- */ + +void AtomVecSphereBPM::unpack_restart_init(int ilocal) +{ + nspecial[ilocal][0] = 0; + nspecial[ilocal][1] = 0; + nspecial[ilocal][2] = 0; +} + +/* ---------------------------------------------------------------------- + modify what AtomVec::data_atom() just unpacked + or initialize other atom quantities +------------------------------------------------------------------------- */ + +void AtomVecSphereBPM::data_atom_post(int ilocal) +{ + radius_one = 0.5 * atom->radius[ilocal]; + radius[ilocal] = radius_one; + if (radius_one > 0.0) + rmass[ilocal] *= 4.0*MY_PI/3.0 * radius_one*radius_one*radius_one; + + if (rmass[ilocal] <= 0.0) + error->one(FLERR,"Invalid density in Atoms section of data file"); + + omega[ilocal][0] = 0.0; + omega[ilocal][1] = 0.0; + omega[ilocal][2] = 0.0; + + quat[ilocal][0] = 1.0; + quat[ilocal][1] = 0.0; + quat[ilocal][2] = 0.0; + quat[ilocal][3] = 0.0; + + num_bond[ilocal] = 0; + nspecial[ilocal][0] = 0; + nspecial[ilocal][1] = 0; + nspecial[ilocal][2] = 0; +} + +/* ---------------------------------------------------------------------- + modify values for AtomVec::pack_data() to pack +------------------------------------------------------------------------- */ + +void AtomVecSphereBPM::pack_data_pre(int ilocal) +{ + radius_one = radius[ilocal]; + rmass_one = rmass[ilocal]; + + radius[ilocal] *= 2.0; + if (radius_one!= 0.0) + rmass[ilocal] = + rmass_one / (4.0*MY_PI/3.0 * radius_one*radius_one*radius_one); +} + +/* ---------------------------------------------------------------------- + unmodify values packed by AtomVec::pack_data() +------------------------------------------------------------------------- */ + +void AtomVecSphereBPM::pack_data_post(int ilocal) +{ + radius[ilocal] = radius_one; + rmass[ilocal] = rmass_one; +} diff --git a/src/BPM/atom_vec_sphere_bpm.h b/src/BPM/atom_vec_sphere_bpm.h new file mode 100644 index 0000000000..3a84e3999e --- /dev/null +++ b/src/BPM/atom_vec_sphere_bpm.h @@ -0,0 +1,83 @@ +/* -*- 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 ATOM_CLASS +// clang-format off +AtomStyle(sphere/bpm,AtomVecSphereBPM) +// clang-format on +#else + +#ifndef LMP_ATOM_VEC_SPHERE_BPM_H +#define LMP_ATOM_VEC_SPHERE_BPM_H + +#include "atom_vec.h" + +namespace LAMMPS_NS { + +class AtomVecSphereBPM : public AtomVec { + public: + AtomVecSphereBPM(class LAMMPS *); + void process_args(int, char **); + void init(); + + void grow_pointers(); + void create_atom_post(int); + void pack_restart_pre(int); + void pack_restart_post(int); + void unpack_restart_init(int); + void data_atom_post(int); + void pack_data_pre(int); + void pack_data_post(int); + + + private: + int *num_bond; + int **bond_type; + int **nspecial; + + double *radius,*rmass; + double **omega, **torque, **quat; + + int any_bond_negative; + int bond_per_atom; + int *bond_negative; + + int radvary; + double radius_one,rmass_one; +}; + +} // namespace LAMMPS_NS + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Per-processor system is too big + +The number of owned atoms plus ghost atoms on a single +processor must fit in 32-bit integer. + +E: Invalid atom type in Atoms section of data file + +Atom types must range from 1 to specified # of types. + +E: Invalid radius in Atoms section of data file + +Radius must be >= 0.0. + +E: Invalid density in Atoms section of data file + +Density value cannot be <= 0.0. + +*/ diff --git a/src/BPM/bond_bpm.cpp b/src/BPM/bond_bpm.cpp new file mode 100644 index 0000000000..7a0d4fedd6 --- /dev/null +++ b/src/BPM/bond_bpm.cpp @@ -0,0 +1,349 @@ +// clang-format off +/* ---------------------------------------------------------------------- + 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 "bond_bpm.h" + +#include "atom.h" +#include "domain.h" +#include "error.h" +#include "fix_store_local.h" +#include "fix_update_special_bonds.h" +#include "force.h" +#include "memory.h" +#include "modify.h" +#include "update.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +BondBPM::BondBPM(LAMMPS *lmp) : Bond(lmp) +{ + id_fix_store_local = nullptr; + id_fix_prop_atom = nullptr; + fix_store_local = nullptr; + fix_update_special_bonds = nullptr; + + prop_atom_flag = 0; + nvalues = 0; + output_data = nullptr; + pack_choice = nullptr; + + r0_max_estimate = 0.0; + max_stretch = 1.0; +} + +/* ---------------------------------------------------------------------- */ + +BondBPM::~BondBPM() +{ + delete [] pack_choice; + delete [] id_fix_store_local; + delete [] id_fix_prop_atom; + memory->destroy(output_data); +} + +/* ---------------------------------------------------------------------- */ + +void BondBPM::init_style() +{ + int ifix; + if (id_fix_store_local) { + ifix = modify->find_fix(id_fix_store_local); + if (ifix < 0) error->all(FLERR, "Cannot find fix store/local"); + if (strcmp(modify->fix[ifix]->style, "store/local") != 0) + error->all(FLERR, "Incorrect fix style matched, not store/local"); + fix_store_local = (FixStoreLocal *) modify->fix[ifix]; + fix_store_local->nvalues = nvalues; + } + + ifix = modify->find_fix_by_style("update/special/bonds"); + if (ifix >= 0) + fix_update_special_bonds = (FixUpdateSpecialBonds *) modify->fix[ifix]; + else + fix_update_special_bonds = nullptr; + + + if (force->angle || force->dihedral || force->improper) + error->all(FLERR, + "Bond style bpm cannot be used with 3,4-body interactions"); + if (atom->molecular == 2) + error->all(FLERR, + "Bond style bpm cannot be used with atom style template"); + + // special 1-3 and 1-4 weights must be 1 to prevent building 1-3 and 1-4 special bond lists + if (force->special_lj[2] != 1.0 || force->special_lj[3] != 1.0 || + force->special_coul[2] != 1.0 || force->special_coul[3] != 1.0) + error->all(FLERR,"Bond style bpm requires 1-3 and 1-4 special weights of 1.0"); +} + +/* ---------------------------------------------------------------------- + global settings + All args before store/local command are saved for potential args + for specific bond BPM substyles + All args after optional store/local command are variables stored + in the compute store/local +------------------------------------------------------------------------- */ + +void BondBPM::settings(int narg, char **arg) +{ + int iarg = 0; + while (iarg < narg) { + if (id_fix_store_local) { + if (strcmp(arg[iarg], "id1") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_id1; + } else if (strcmp(arg[iarg], "id2") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_id2; + } else if (strcmp(arg[iarg], "time") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_time; + } else if (strcmp(arg[iarg], "x") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_x; + } else if (strcmp(arg[iarg], "y") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_y; + } else if (strcmp(arg[iarg], "z") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_z; + } else if (strcmp(arg[iarg], "x/ref") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_x_ref; + prop_atom_flag = 1; + } else if (strcmp(arg[iarg], "y/ref") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_y_ref; + prop_atom_flag = 1; + } else if (strcmp(arg[iarg], "z/ref") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_z_ref; + prop_atom_flag = 1; + } else { + error->all(FLERR, "Illegal bond_style command"); + } + } else if (strcmp(arg[iarg], "store/local") == 0) { + id_fix_store_local = utils::strdup(arg[iarg+1]); + iarg ++; + nvalues = 0; + pack_choice = new FnPtrPack[narg - iarg - 1]; + } + iarg ++; + } + + if (id_fix_store_local) { + if (nvalues == 0) error->all(FLERR, + "Bond style bpm/rotational must include at least one value to output"); + memory->create(output_data, nvalues, "bond/bpm:output_data"); + + // Use store property to save reference positions as it can transfer to ghost atoms + if (prop_atom_flag == 1) { + + id_fix_prop_atom = utils::strdup("BPM_PROPERTY_ATOM"); + int ifix = modify->find_fix(id_fix_prop_atom); + if (ifix < 0) { + modify->add_fix(fmt::format("{} all property/atom " + "d_BPM_X_REF d_BPM_Y_REF d_BPM_Z_REF ghost yes", id_fix_prop_atom)); + ifix = modify->find_fix(id_fix_prop_atom); + } + + int type_flag; + int col_flag; + index_x_ref = atom->find_custom("BPM_X_REF", type_flag, col_flag); + index_y_ref = atom->find_custom("BPM_Y_REF", type_flag, col_flag); + index_z_ref = atom->find_custom("BPM_Z_REF", type_flag, col_flag); + + if (modify->fix[ifix]->restart_reset) { + modify->fix[ifix]->restart_reset = 0; + } else { + double *x_ref = atom->dvector[index_x_ref]; + double *y_ref = atom->dvector[index_y_ref]; + double *z_ref = atom->dvector[index_z_ref]; + + double **x = atom->x; + for (int i = 0; i < atom->nlocal; i++) { + x_ref[i] = x[i][0]; + y_ref[i] = x[i][1]; + z_ref[i] = x[i][2]; + } + } + } + } +} + +/* ---------------------------------------------------------------------- + used to check bond communiction cutoff - not perfect, estimates based on local-local only +------------------------------------------------------------------------- */ + +double BondBPM::equilibrium_distance(int i) +{ + // Ghost atoms may not yet be communicated, this may only be an estimate + if (r0_max_estimate == 0) { + int type, j; + double delx, dely, delz, r; + double **x = atom->x; + for (int i = 0; i < atom->nlocal; i ++) { + for (int m = 0; m < atom->num_bond[i]; m ++) { + type = atom->bond_type[i][m]; + if (type == 0) continue; + + j = atom->map(atom->bond_atom[i][m]); + if(j == -1) continue; + + delx = x[i][0] - x[j][0]; + dely = x[i][1] - x[j][1]; + delz = x[i][2] - x[j][2]; + domain->minimum_image(delx, dely, delz); + + r = sqrt(delx*delx + dely*dely + delz*delz); + if(r > r0_max_estimate) r0_max_estimate = r; + } + } + + double temp; + MPI_Allreduce(&r0_max_estimate,&temp,1,MPI_DOUBLE,MPI_MAX,world); + r0_max_estimate = temp; + + //if (comm->me == 0) + // utils::logmesg(lmp,fmt::format("Estimating longest bond = {}\n",r0_max_estimate)); + } + + // Divide out heuristic prefactor added in comm class + return max_stretch*r0_max_estimate/1.5; +} + +/* ---------------------------------------------------------------------- */ + +void BondBPM::process_broken(int i, int j) +{ + if (fix_store_local) { + for (int n = 0; n < nvalues; n++) + (this->*pack_choice[n])(n, i, j); + + fix_store_local->add_data(output_data, i, j); + } + + if (fix_update_special_bonds) + fix_update_special_bonds->add_broken_bond(i, j); + + // Manually search and remove from atom arrays + // need to remove in case special bonds arrays rebuilt + int m, n; + int nlocal = atom->nlocal; + + tagint *tag = atom->tag; + tagint **bond_atom = atom->bond_atom; + int **bond_type = atom->bond_type; + int *num_bond = atom->num_bond; + + if (i < nlocal) { + for (m = 0; m < num_bond[i]; m++) { + // if(tag[i] == 25 or tag[j] == 25) printf("\t 1 ATOM LOOP %d-%d, %d/%d \n", tag[i], bond_atom[i][m], m, num_bond[i]); + if (bond_atom[i][m] == tag[j]) { + // if(tag[i] == 25 or tag[j] == 25) printf("\t DELETED\n"); + bond_type[i][m] = 0; + n = num_bond[i]; + bond_type[i][m] = bond_type[i][n-1]; + bond_atom[i][m] = bond_atom[i][n-1]; + num_bond[i]--; + break; + } + } + } + + if (j < nlocal) { + for (m = 0; m < num_bond[j]; m++) { + // if(tag[i] == 25 or tag[j] == 25) printf("\t 2 ATOM LOOP %d-%d, %d/%d \n", tag[j], bond_atom[j][m], m, num_bond[j]); + if (bond_atom[j][m] == tag[i]) { + // if(tag[j] == 25 or tag[j] == 25) printf("\t DELETED\n"); + bond_type[j][m] = 0; + n = num_bond[j]; + bond_type[j][m] = bond_type[j][n-1]; + bond_atom[j][m] = bond_atom[j][n-1]; + num_bond[j]--; + break; + } + } + } + + // if((tag[i] == 10 and tag[j] == 23)or (tag[i] == 23 and tag[j] == 10)) printf("Broken bond %d-%d (%d %d/%d)\n", tag[i], tag[j], i, j, nlocal); + +} + +/* ---------------------------------------------------------------------- + one method for every keyword bond bpm can output + the atom property is packed into array or vector +------------------------------------------------------------------------- */ + +void BondBPM::pack_id1(int n, int i, int j) +{ + tagint *tag = atom->tag; + output_data[n] = tag[i]; +} + +/* ---------------------------------------------------------------------- */ + +void BondBPM::pack_id2(int n, int i, int j) +{ + tagint *tag = atom->tag; + output_data[n] = tag[j]; +} + +/* ---------------------------------------------------------------------- */ + +void BondBPM::pack_time(int n, int i, int j) +{ + bigint time = update->ntimestep; + output_data[n] = time; +} + +/* ---------------------------------------------------------------------- */ + +void BondBPM::pack_x(int n, int i, int j) +{ + double **x = atom->x; + output_data[n] = (x[i][0] + x[j][0])*0.5; +} + +/* ---------------------------------------------------------------------- */ + +void BondBPM::pack_y(int n, int i, int j) +{ + double **x = atom->x; + output_data[n] = (x[i][1] + x[j][1])*0.5; +} + +/* ---------------------------------------------------------------------- */ + +void BondBPM::pack_z(int n, int i, int j) +{ + double **x = atom->x; + output_data[n] = (x[i][2] + x[j][2])*0.5; +} + +/* ---------------------------------------------------------------------- */ + +void BondBPM::pack_x_ref(int n, int i, int j) +{ + double *x = atom->dvector[index_x_ref]; + output_data[n] = (x[i] + x[j])*0.5; +} + +/* ---------------------------------------------------------------------- */ + +void BondBPM::pack_y_ref(int n, int i, int j) +{ + double *y = atom->dvector[index_y_ref]; + output_data[n] = (y[i] + y[j])*0.5; +} + +/* ---------------------------------------------------------------------- */ + +void BondBPM::pack_z_ref(int n, int i, int j) +{ + double *z = atom->dvector[index_z_ref]; + output_data[n] = (z[i] + z[j])*0.5; +} diff --git a/src/BPM/bond_bpm.h b/src/BPM/bond_bpm.h new file mode 100644 index 0000000000..d77e44e1d6 --- /dev/null +++ b/src/BPM/bond_bpm.h @@ -0,0 +1,90 @@ +/* -*- 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. +------------------------------------------------------------------------- */ + +#ifndef LMP_BOND_BPM_H +#define LMP_BOND_BPM_H + +#include "bond.h" + +namespace LAMMPS_NS { + +class BondBPM : public Bond { + public: + BondBPM(class LAMMPS *); + virtual ~BondBPM(); + virtual void compute(int, int) = 0; + virtual void coeff(int, char **) = 0; + virtual void init_style(); + void settings(int, char **); + double equilibrium_distance(int); + void write_restart(FILE *){}; + void read_restart(FILE *){}; + void write_data(FILE *) {}; + double single(int, double, int, int, double &) = 0; + + protected: + double r0_max_estimate; + double max_stretch; + + char *id_fix_store_local, *id_fix_prop_atom; + class FixStoreLocal *fix_store_local; + class FixUpdateSpecialBonds *fix_update_special_bonds; + + void process_broken(int, int); + typedef void (BondBPM::*FnPtrPack)(int,int,int); + FnPtrPack *pack_choice; // ptrs to pack functions + double *output_data; + + int prop_atom_flag, nvalues; + int index_x_ref, index_y_ref, index_z_ref; + + void pack_id1(int,int,int); + void pack_id2(int,int,int); + void pack_time(int,int,int); + void pack_x(int,int,int); + void pack_y(int,int,int); + void pack_z(int,int,int); + void pack_x_ref(int,int,int); + void pack_y_ref(int,int,int); + void pack_z_ref(int,int,int); +}; + +} // namespace LAMMPS_NS + +#endif + +/* ERROR/WARNING messages: + +E: Cannot find fix store/local + +Fix id cannot be found. + +E: Illegal bond_style command + +Self-explanatory. + +E: Bond style bpm/rotational must include at least one value to output + +Must include at least one bond property to store in fix store/local + +E: Bond style bpm/rotational cannot be used with 3,4-body interactions + +No angle, dihedral, or improper styles can be defined when using +bond style bpm/rotational. + +E: Bond style bpm/rotational cannot be used with atom style template + +This bond style can change the bond topology which is not +allowed with this atom style. + +*/ diff --git a/src/BPM/bond_bpm_rotational.cpp b/src/BPM/bond_bpm_rotational.cpp new file mode 100644 index 0000000000..bee7a69b6a --- /dev/null +++ b/src/BPM/bond_bpm_rotational.cpp @@ -0,0 +1,727 @@ +// clang-format off +/* ---------------------------------------------------------------------- + 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 "bond_bpm_rotational.h" + +#include "atom.h" +#include "comm.h" +#include "domain.h" +#include "error.h" +#include "fix_bond_history.h" +#include "force.h" +#include "math_const.h" +#include "math_extra.h" +#include "memory.h" +#include "modify.h" +#include "neighbor.h" +#include "pair.h" + +#include +#include +#include + +#define EPSILON 1e-10 + +using namespace LAMMPS_NS; +using namespace MathExtra; + + + + + +#include "update.h" +/* ---------------------------------------------------------------------- */ + +BondBPMRotational::BondBPMRotational(LAMMPS *lmp) : BondBPM(lmp) +{ + partial_flag = 1; + fix_bond_history = nullptr; +} + +/* ---------------------------------------------------------------------- */ + +BondBPMRotational::~BondBPMRotational() +{ + if(fix_bond_history) modify->delete_fix("BOND_HISTORY_BPM_ROTATIONAL"); + + if (allocated) { + memory->destroy(setflag); + memory->destroy(Kr); + memory->destroy(Ks); + memory->destroy(Kt); + memory->destroy(Kb); + memory->destroy(Fcr); + memory->destroy(Fcs); + memory->destroy(Tct); + memory->destroy(Tcb); + memory->destroy(gnorm); + memory->destroy(gslide); + memory->destroy(groll); + memory->destroy(gtwist); + } +} + +/* ---------------------------------------------------------------------- */ + +double BondBPMRotational::acos_limit(double c) +{ + if (c > 1.0) c = 1.0; + if (c < -1.0) c = -1.0; + return acos(c); +} + +/* ---------------------------------------------------------------------- + Store data for a single bond - if bond added after LAMMPS init (e.g. pour) +------------------------------------------------------------------------- */ + +double BondBPMRotational::store_bond(int n,int i,int j) +{ + int m,k; + double delx, dely, delz, r, rinv; + double **x = atom->x; + tagint *tag = atom->tag; + double **bondstore = fix_bond_history->bondstore; + + if (tag[i] < tag[j]) { + delx = x[i][0] - x[j][0]; + dely = x[i][1] - x[j][1]; + delz = x[i][2] - x[j][2]; + } else { + delx = x[j][0] - x[i][0]; + dely = x[j][1] - x[i][1]; + delz = x[j][2] - x[i][2]; + } + + r = sqrt(delx*delx + dely*dely + delz*delz); + rinv = 1.0/r; + + bondstore[n][0] = r; + bondstore[n][1] = delx*rinv; + bondstore[n][2] = dely*rinv; + bondstore[n][3] = delz*rinv; + + if (i < atom->nlocal) { + for (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, delx*rinv); + fix_bond_history->update_atom_value(i, m, 2, dely*rinv); + fix_bond_history->update_atom_value(i, m, 3, delz*rinv); + } + } + } + + if (j < atom->nlocal) { + for (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, delx*rinv); + fix_bond_history->update_atom_value(j, m, 2, dely*rinv); + fix_bond_history->update_atom_value(j, m, 3, delz*rinv); + } + } + } + + return r; +} + +/* ---------------------------------------------------------------------- + Store data for all bonds called once +------------------------------------------------------------------------- */ + +void BondBPMRotational::store_data() +{ + int i, j, m, type; + double delx, dely, delz, r, rinv; + double **x = atom->x; + int **bond_type = atom->bond_type; + tagint *tag = atom->tag; + + 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 for tag + j = atom->map(atom->bond_atom[i][m]); + if(j == -1) error->one(FLERR, "Atom missing in BPM bond"); + + // Save orientation as pointing towards small tag + if(tag[i] < tag[j]){ + delx = x[i][0] - x[j][0]; + dely = x[i][1] - x[j][1]; + delz = x[i][2] - x[j][2]; + } else { + delx = x[j][0] - x[i][0]; + dely = x[j][1] - x[i][1]; + delz = x[j][2] - x[i][2]; + } + + // Get closest image in case bonded with ghost + domain->minimum_image(delx, dely, delz); + + r = sqrt(delx*delx + dely*dely + delz*delz); + rinv = 1.0/r; + fix_bond_history->update_atom_value(i, m, 0, r); + fix_bond_history->update_atom_value(i, m, 1, delx*rinv); + fix_bond_history->update_atom_value(i, m, 2, dely*rinv); + fix_bond_history->update_atom_value(i, m, 3, delz*rinv); + } + } + + fix_bond_history->post_neighbor(); +} + +/* ---------------------------------------------------------------------- */ + +void BondBPMRotational::compute(int eflag, int vflag) +{ + + if (! fix_bond_history->stored_flag) { + fix_bond_history->stored_flag = true; + store_data(); + } + + int i1,i2,itmp,m,n,type,itype,jtype; + double evdwl,fpair,rsq,ebond; + double q1[4], q2[4], r[3], r0[3]; + double r0_mag, r_mag, r_mag_inv, Fr_mag, Fs_mag; + double Tt_mag, Tb_mag; + double force1on2[3], torque1on2[3], torque2on1[3]; + double breaking, smooth, smooth_sq; + double rhat[3], wn1[3], wn2[3], wxn1[3], wxn2[3], vroll[3]; + double w1dotr, w2dotr, v1dotr, v2dotr; + double vn1[3], vn2[3], vt1[3], vt2[3], tmp[3], s1[3], s2[3], tdamp[3]; + double tor1, tor2, tor3, fs1, fs2, fs3; + + double q2inv[4], rb[3], rb_x_r0[3], s[3], t[3], Fs[3]; + double q21[4], qp21[4], Tbp[3], Ttp[3]; + double Tsp[3], Fsp[3], Tt[3], Tb[3], Ts[3], F_rot[3], T_rot[3]; + double mq[4], mqinv[4], Ttmp[3], Ftmp[3], qtmp[4]; + double r0_dot_rb, gamma, c, psi, theta, sin_phi, cos_phi, temp, mag_in_plane, mag_out_plane; + + ev_init(eflag,vflag); + + if (vflag_global == 2) + force->pair->vflag_either = force->pair->vflag_global = 1; + + double **cutsq = force->pair->cutsq; + double **x = atom->x; + double **v = atom->v; + double **omega = atom->omega; + double **f = atom->f; + double **torque = atom->torque; + double *radius = atom->radius; + double **quat = atom->quat; + 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_mag = bondstore[n][0]; + + // Ensure pair is always ordered such that r0 points in + // a consistent direction and 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_mag < EPSILON || std::isnan(r0_mag)) + r0_mag = store_bond(n,i1,i2); + + r0[0] = bondstore[n][1]; + r0[1] = bondstore[n][2]; + r0[2] = bondstore[n][3]; + MathExtra::scale3(r0_mag, r0); + + q1[0] = quat[i1][0]; + q1[1] = quat[i1][1]; + q1[2] = quat[i1][2]; + q1[3] = quat[i1][3]; + + q2[0] = quat[i2][0]; + q2[1] = quat[i2][1]; + q2[2] = quat[i2][2]; + q2[3] = quat[i2][3]; + + // Note this is the reverse of Mora & Wang + MathExtra::sub3(x[i1], x[i2], r); + + rsq = MathExtra::lensq3(r); + r_mag = sqrt(rsq); + r_mag_inv = 1.0/r_mag; + MathExtra::scale3(r_mag_inv, r, rhat); + + // ------------------------------------------------------// + // Calculate forces using formulation in: + // 1) Y. Wang Acta Geotechnica 2009 + // 2) P. Mora & Y. Wang Advances in Geomcomputing 2009 + // ------------------------------------------------------// + + // Calculate normal forces, rb = bond vector in particle 1's frame + MathExtra::qconjugate(q2, q2inv); + MathExtra::quatrotvec(q2inv, r, rb); + Fr_mag = Kr[type]*(r_mag - r0_mag); + + MathExtra::scale3(Fr_mag*r_mag_inv, rb, F_rot); + + // Calculate forces due to tangential displacements (no rotation) + r0_dot_rb = dot3(r0, rb); + c = r0_dot_rb*r_mag_inv/r0_mag; + gamma = acos_limit(c); + + MathExtra::cross3(rb, r0, rb_x_r0); + MathExtra::cross3(rb, rb_x_r0, s); + MathExtra::norm3(s); + + MathExtra::scale3(Ks[type]*r_mag*gamma, s, Fs); + + // Calculate torque due to tangential displacements + MathExtra::cross3(r0, rb, t); + MathExtra::norm3(t); + + MathExtra::scale3(0.5*r_mag*Ks[type]*r_mag*gamma, t, Ts); + + // Relative rotation force/torque + // Use representation of X'Y'Z' rotations from Wang, Mora 2009 + temp = r_mag + rb[2]; + if (temp < 0.0) temp = 0.0; + mq[0] = sqrt(2)*0.5*sqrt(temp*r_mag_inv); + + temp = sqrt(rb[0]*rb[0]+rb[1]*rb[1]); + if (temp != 0.0) { + mq[1] = -sqrt(2)*0.5/temp; + temp = r_mag - rb[2]; + if (temp < 0.0) temp = 0.0; + mq[1] *= sqrt(temp*r_mag_inv); + mq[2] = -mq[1]; + mq[1] *= rb[1]; + mq[2] *= rb[0]; + } else { + // If aligned along z axis, x,y terms zero (r_mag-rb[2] = 0) + mq[1] = 0.0; + mq[2] = 0.0; + } + mq[3] = 0.0; + + // qp21 = opposite of r^\circ_21 in Wang + // q21 = opposite of r_21 in Wang + MathExtra::quatquat(q2inv, q1, qp21); + MathExtra::qconjugate(mq, mqinv); + MathExtra::quatquat(mqinv,qp21,qtmp); + MathExtra::quatquat(qtmp,mq,q21); + + temp = sqrt(q21[0]*q21[0] + q21[3]*q21[3]); + if (temp != 0.0) { + c = q21[0]/temp; + psi = 2.0*acos_limit(c); + } else { + c = 0.0; + psi = 0.0; + } + + // Map negative rotations + if (q21[3] < 0.0) // sin = q21[3]/temp + psi = -psi; + + if (q21[3] == 0.0) + psi = 0.0; + + c = q21[0]*q21[0] - q21[1]*q21[1] - q21[2]*q21[2] + q21[3]*q21[3]; + theta = acos_limit(c); + + // Separately calculte magnitude of quaternion in x-y and out of x-y planes + // to avoid dividing by zero + mag_out_plane = (q21[0]*q21[0] + q21[3]*q21[3]); + mag_in_plane = (q21[1]*q21[1] + q21[2]*q21[2]); + + if (mag_in_plane == 0.0) { + // No rotation => no bending/shear torque or extra shear force + // achieve by setting cos/sin = 0 + cos_phi = 0.0; + sin_phi = 0.0; + } else if (mag_out_plane == 0.0) { + // Calculate angle in plane + cos_phi = q21[2]/sqrt(mag_in_plane); + sin_phi = -q21[1]/sqrt(mag_in_plane); + } else { + // Default equations in Mora, Wang 2009 + cos_phi = q21[1]*q21[3] + q21[0]*q21[2]; + sin_phi = q21[2]*q21[3] - q21[0]*q21[1]; + + cos_phi /= sqrt(mag_out_plane*mag_in_plane); + sin_phi /= sqrt(mag_out_plane*mag_in_plane); + } + + Tbp[0] = -Kb[type]*theta*sin_phi; + Tbp[1] = Kb[type]*theta*cos_phi; + Tbp[2] = 0.0; + + Ttp[0] = 0.0; + Ttp[1] = 0.0; + Ttp[2] = Kt[type]*psi; + + Fsp[0] = -0.5*Ks[type]*r_mag*theta*cos_phi; + Fsp[1] = -0.5*Ks[type]*r_mag*theta*sin_phi; + Fsp[2] = 0.0; + + Tsp[0] = 0.25*Ks[type]*r_mag*r_mag*theta*sin_phi; + Tsp[1] = -0.25*Ks[type]*r_mag*r_mag*theta*cos_phi; + Tsp[2] = 0.0; + + // Rotate forces/torques back to 1st particle's frame + + MathExtra::quatrotvec(mq, Fsp, Ftmp); + MathExtra::quatrotvec(mq, Tsp, Ttmp); + for (m = 0; m < 3; m++) { + Fs[m] += Ftmp[m]; + Ts[m] += Ttmp[m]; + } + + MathExtra::quatrotvec(mq, Tbp, Tb); + MathExtra::quatrotvec(mq, Ttp, Tt); + + // Sum forces and calculate magnitudes + F_rot[0] += Fs[0]; + F_rot[1] += Fs[1]; + F_rot[2] += Fs[2]; + MathExtra::quatrotvec(q2, F_rot, force1on2); + + T_rot[0] = Ts[0] + Tt[0] + Tb[0]; + T_rot[1] = Ts[1] + Tt[1] + Tb[1]; + T_rot[2] = Ts[2] + Tt[2] + Tb[2]; + MathExtra::quatrotvec(q2, T_rot, torque1on2); + + T_rot[0] = Ts[0] - Tt[0] - Tb[0]; + T_rot[1] = Ts[1] - Tt[1] - Tb[1]; + T_rot[2] = Ts[2] - Tt[2] - Tb[2]; + MathExtra::quatrotvec(q2, T_rot, torque2on1); + + Fs_mag = MathExtra::len3(Fs); + Tt_mag = MathExtra::len3(Tt); + Tb_mag = MathExtra::len3(Tb); + + // ------------------------------------------------------// + // Check if bond breaks + // ------------------------------------------------------// + + if (r_mag < r0_mag) + breaking = Fs_mag/Fcs[type] + Tb_mag/Tcb[type] + Tt_mag/Tct[type]; + else + breaking = Fr_mag/Fcr[type] + Fs_mag/Fcs[type] + Tb_mag/Tcb[type] + Tt_mag/Tct[type]; + + if (breaking >= 1.0) { + bondlist[n][2] = 0; + process_broken(i1, i2); + continue; + } + + smooth = 1.0 - breaking; + smooth_sq = smooth*smooth; + + // Not actual energy, just a handy metric + if (eflag) ebond = -smooth_sq; + + // ------------------------------------------------------// + // Calculate damping using formulation in + // Y. Wang, F. Alonso-Marroquin, W. Guo 2015 + // ------------------------------------------------------// + // Note: n points towards 1 vs pointing towards 2 + + // Damp normal velocity difference + v1dotr = MathExtra::dot3(v[i1],rhat); + v2dotr = MathExtra::dot3(v[i2],rhat); + + MathExtra::scale3(v1dotr, rhat, vn1); + MathExtra::scale3(v2dotr, rhat, vn2); + + MathExtra::sub3(vn1, vn2, tmp); + MathExtra::scale3(gnorm[type], tmp); + MathExtra::add3(force1on2, tmp, force1on2); + + // Damp tangential objective velocities + MathExtra::sub3(v[i1], vn1, vt1); + MathExtra::sub3(v[i2], vn2, vt2); + + MathExtra::sub3(vt2, vt1, tmp); + MathExtra::scale3(-0.5, tmp); + + MathExtra::cross3(omega[i1], r, s1); + MathExtra::scale3(0.5, s1); + MathExtra::sub3(s1, tmp, s1); // Eq 12 + + MathExtra::cross3(omega[i2], r, s2); + MathExtra::scale3(-0.5,s2); + MathExtra::add3(s2, tmp, s2); // Eq 13 + MathExtra::scale3(-0.5,s2); + + MathExtra::sub3(s1, s2, tmp); + MathExtra::scale3(gslide[type], tmp); + MathExtra::add3(force1on2, tmp, force1on2); + + // Apply corresponding torque + MathExtra::cross3(r,tmp,tdamp); + MathExtra::scale3(-0.5, tdamp); // 0.5*r points from particle 2 to midpoint + MathExtra::add3(torque1on2, tdamp, torque1on2); + MathExtra::add3(torque2on1, tdamp, torque2on1); + + // Damp rolling + MathExtra::cross3(omega[i1], rhat, wxn1); + MathExtra::cross3(omega[i2], rhat, wxn2); + MathExtra::sub3(wxn1, wxn2, vroll); // Eq. 31 + MathExtra::cross3(r, vroll, tdamp); + + MathExtra::scale3(0.5*groll[type], tdamp); + MathExtra::add3(torque1on2, tdamp, torque1on2); + MathExtra::scale3(-1.0, tdamp); + MathExtra::add3(torque2on1, tdamp, torque2on1); + + // Damp twist + w1dotr = MathExtra::dot3(omega[i1],rhat); + w2dotr = MathExtra::dot3(omega[i2],rhat); + + MathExtra::scale3(w1dotr, rhat, wn1); + MathExtra::scale3(w2dotr, rhat, wn2); + + MathExtra::sub3(wn1, wn2, tdamp); // Eq. 38 + MathExtra::scale3(0.5*gtwist[type], tdamp); + MathExtra::add3(torque1on2, tdamp, torque1on2); + MathExtra::scale3(-1.0, tdamp); + MathExtra::add3(torque2on1, tdamp, torque2on1); + + // ------------------------------------------------------// + // Apply forces and torques to particles + // ------------------------------------------------------// + + if (newton_bond || i1 < nlocal) { + f[i1][0] -= force1on2[0]*smooth_sq; + f[i1][1] -= force1on2[1]*smooth_sq; + f[i1][2] -= force1on2[2]*smooth_sq; + + torque[i1][0] += torque2on1[0]*smooth_sq; + torque[i1][1] += torque2on1[1]*smooth_sq; + torque[i1][2] += torque2on1[2]*smooth_sq; + } + + if (newton_bond || i2 < nlocal) { + f[i2][0] += force1on2[0]*smooth_sq; + f[i2][1] += force1on2[1]*smooth_sq; + f[i2][2] += force1on2[2]*smooth_sq; + + torque[i2][0] += torque1on2[0]*smooth_sq; + torque[i2][1] += torque1on2[1]*smooth_sq; + torque[i2][2] += torque1on2[2]*smooth_sq; + } + + if (evflag) ev_tally(i1,i2,nlocal,newton_bond,ebond,Fr_mag,r[0],r[1],r[2]); + } +} + +/* ---------------------------------------------------------------------- */ + +void BondBPMRotational::allocate() +{ + allocated = 1; + int n = atom->nbondtypes; + + memory->create(Kr,n+1,"bond:Kr"); + memory->create(Ks,n+1,"bond:Ks"); + memory->create(Kt,n+1,"bond:Kt"); + memory->create(Kb,n+1,"bond:Kb"); + memory->create(Fcr,n+1,"bond:Fcr"); + memory->create(Fcs,n+1,"bond:Fcs"); + memory->create(Tct,n+1,"bond:Tct"); + memory->create(Tcb,n+1,"bond:Tcb"); + memory->create(gnorm,n+1,"bond:gnorm"); + memory->create(gslide,n+1,"bond:gslide"); + memory->create(groll,n+1,"bond:groll"); + memory->create(gtwist,n+1,"bond:gtwist"); + + memory->create(setflag,n+1,"bond:setflag"); + for (int i = 1; i <= n; i++) setflag[i] = 0; +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more types +------------------------------------------------------------------------- */ + +void BondBPMRotational::coeff(int narg, char **arg) +{ + if (narg != 13) 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 Kr_one = utils::numeric(FLERR,arg[1],false,lmp); + double Ks_one = utils::numeric(FLERR,arg[2],false,lmp); + double Kt_one = utils::numeric(FLERR,arg[3],false,lmp); + double Kb_one = utils::numeric(FLERR,arg[4],false,lmp); + double Fcr_one = utils::numeric(FLERR,arg[5],false,lmp); + double Fcs_one = utils::numeric(FLERR,arg[6],false,lmp); + double Tct_one = utils::numeric(FLERR,arg[7],false,lmp); + double Tcb_one = utils::numeric(FLERR,arg[8],false,lmp); + double gnorm_one = utils::numeric(FLERR,arg[9],false,lmp); + double gslide_one = utils::numeric(FLERR,arg[10],false,lmp); + double groll_one = utils::numeric(FLERR,arg[11],false,lmp); + double gtwist_one = utils::numeric(FLERR,arg[12],false,lmp); + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + Kr[i] = Kr_one; + Ks[i] = Ks_one; + Kt[i] = Kt_one; + Kb[i] = Kb_one; + Fcr[i] = Fcr_one; + Fcs[i] = Fcs_one; + Tct[i] = Tct_one; + Tcb[i] = Tcb_one; + gnorm[i] = gnorm_one; + gslide[i] = gslide_one; + groll[i] = groll_one; + gtwist[i] = gtwist_one; + setflag[i] = 1; + count++; + + if (Fcr[i]/Kr[i] > max_stretch) max_stretch = Fcr[i]/Kr[i]; + } + + if (count == 0) error->all(FLERR,"Incorrect args for bond coefficients"); +} + +/* ---------------------------------------------------------------------- + check if pair defined and special_bond settings are valid +------------------------------------------------------------------------- */ + +void BondBPMRotational::init_style() +{ + BondBPM::init_style(); + + if (!atom->quat_flag || !atom->sphere_flag) + error->all(FLERR,"Bond bpm/rotational requires atom style sphere/bpm"); + if (comm->ghost_velocity == 0) + error->all(FLERR,"Bond bpm/rotational requires ghost atoms store velocity"); + + if(domain->dimension == 2) + error->warning(FLERR, "Bond style bpm/rotational not intended for 2d use"); + + if (!fix_bond_history) + fix_bond_history = (FixBondHistory *) modify->add_fix( + "BOND_HISTORY_BPM_ROTATIONAL all BOND_HISTORY 0 4"); +} + +/* ---------------------------------------------------------------------- + proc 0 writes out coeffs to restart file +------------------------------------------------------------------------- */ + +void BondBPMRotational::write_restart(FILE *fp) +{ + fwrite(&Kr[1],sizeof(double),atom->nbondtypes,fp); + fwrite(&Ks[1],sizeof(double),atom->nbondtypes,fp); + fwrite(&Kt[1],sizeof(double),atom->nbondtypes,fp); + fwrite(&Kb[1],sizeof(double),atom->nbondtypes,fp); + fwrite(&Fcr[1],sizeof(double),atom->nbondtypes,fp); + fwrite(&Fcs[1],sizeof(double),atom->nbondtypes,fp); + fwrite(&Tct[1],sizeof(double),atom->nbondtypes,fp); + fwrite(&Tcb[1],sizeof(double),atom->nbondtypes,fp); + fwrite(&gnorm[1],sizeof(double),atom->nbondtypes,fp); + fwrite(&gslide[1],sizeof(double),atom->nbondtypes,fp); + fwrite(&groll[1],sizeof(double),atom->nbondtypes,fp); + fwrite(>wist[1],sizeof(double),atom->nbondtypes,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads coeffs from restart file, bcasts them +------------------------------------------------------------------------- */ + +void BondBPMRotational::read_restart(FILE *fp) +{ + allocate(); + + if (comm->me == 0) { + utils::sfread(FLERR,&Kr[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); + utils::sfread(FLERR,&Ks[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); + utils::sfread(FLERR,&Kt[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); + utils::sfread(FLERR,&Kb[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); + utils::sfread(FLERR,&Fcr[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); + utils::sfread(FLERR,&Fcs[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); + utils::sfread(FLERR,&Tct[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); + utils::sfread(FLERR,&Tcb[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); + utils::sfread(FLERR,&gnorm[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); + utils::sfread(FLERR,&gslide[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); + utils::sfread(FLERR,&groll[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); + utils::sfread(FLERR,>wist[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); + } + MPI_Bcast(&Kr[1],atom->nbondtypes,MPI_DOUBLE,0,world); + MPI_Bcast(&Ks[1],atom->nbondtypes,MPI_DOUBLE,0,world); + MPI_Bcast(&Kt[1],atom->nbondtypes,MPI_DOUBLE,0,world); + MPI_Bcast(&Kb[1],atom->nbondtypes,MPI_DOUBLE,0,world); + MPI_Bcast(&Fcr[1],atom->nbondtypes,MPI_DOUBLE,0,world); + MPI_Bcast(&Fcs[1],atom->nbondtypes,MPI_DOUBLE,0,world); + MPI_Bcast(&Tct[1],atom->nbondtypes,MPI_DOUBLE,0,world); + MPI_Bcast(&Tcb[1],atom->nbondtypes,MPI_DOUBLE,0,world); + MPI_Bcast(&gnorm[1],atom->nbondtypes,MPI_DOUBLE,0,world); + MPI_Bcast(&gslide[1],atom->nbondtypes,MPI_DOUBLE,0,world); + MPI_Bcast(&groll[1],atom->nbondtypes,MPI_DOUBLE,0,world); + MPI_Bcast(>wist[1],atom->nbondtypes,MPI_DOUBLE,0,world); + + for (int i = 1; i <= atom->nbondtypes; i++) setflag[i] = 1; +} + +/* ---------------------------------------------------------------------- + proc 0 writes to data file +------------------------------------------------------------------------- */ + +void BondBPMRotational::write_data(FILE *fp) +{ + for (int i = 1; i <= atom->nbondtypes; i++) + fprintf(fp,"%d %g %g %g %g %g %g %g %g %g %g %g %g\n", + i,Kr[i],Ks[i],Kt[i],Kb[i],Fcr[i], Fcs[i], Tct[i], + Tcb[i], gnorm[i], gslide[i], groll[i], gtwist[i]); +} + +/* ---------------------------------------------------------------------- */ + +double BondBPMRotational::single(int type, double rsq, int i, int j, + double &fforce) +{ + // Not yet enabled + if (type <= 0) return 0.0; + + //double r0; + //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); + // } + //} +} diff --git a/src/BPM/bond_bpm_rotational.h b/src/BPM/bond_bpm_rotational.h new file mode 100644 index 0000000000..838226f0ff --- /dev/null +++ b/src/BPM/bond_bpm_rotational.h @@ -0,0 +1,77 @@ +/* -*- 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); + class FixBondHistory *fix_bond_history; +}; + +} // 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/compute_nbond_atom.cpp b/src/BPM/compute_nbond_atom.cpp new file mode 100644 index 0000000000..ec39da9c5a --- /dev/null +++ b/src/BPM/compute_nbond_atom.cpp @@ -0,0 +1,147 @@ +/* ---------------------------------------------------------------------- + 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 "compute_nbond_atom.h" + +#include "atom.h" +#include "comm.h" +#include "error.h" +#include "force.h" +#include "memory.h" +#include "update.h" + +#include + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +ComputeNBondAtom::ComputeNBondAtom(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg), + nbond(nullptr) +{ + if (narg < 3) error->all(FLERR,"Illegal compute nbond/atom command"); + + peratom_flag = 1; + size_peratom_cols = 0; + peatomflag = 1; + timeflag = 1; + comm_reverse = 1; + + nmax = 0; +} + +/* ---------------------------------------------------------------------- */ + +ComputeNBondAtom::~ComputeNBondAtom() +{ + memory->destroy(nbond); +} + +/* ---------------------------------------------------------------------- */ + +void ComputeNBondAtom::compute_peratom() +{ + + invoked_peratom = update->ntimestep; + if (update->eflag_atom != invoked_peratom) + error->all(FLERR,"Per-atom nbond was not tallied on needed timestep"); + + // grow local nbond array if necessary + // needs to be atom->nmax in length + + if (atom->nmax > nmax) { + memory->destroy(nbond); + nmax = atom->nmax; + memory->create(nbond, nmax,"nbond/atom:nbond"); + vector_atom = nbond; + } + + // npair includes ghosts if either newton flag is set + // b/c some bonds/dihedrals call pair::ev_tally with pairwise info + // nbond includes ghosts if newton_bond is set + // ntotal includes ghosts if either newton flag is set + // KSpace includes ghosts if tip4pflag is set + + int nlocal = atom->nlocal; + tagint **bond_atom = atom->bond_atom; + int **bond_type = atom->bond_type; + + int ntotal = nlocal; + if (force->newton) ntotal += atom->nghost; + + // set local nbond array + int i, j, k; + int *num_bond = atom->num_bond; + int newton_bond = force->newton_bond; + + for (i = 0; i < ntotal; i++) nbond[i] = 0; + + for (i = 0; i < nlocal; i++) { + for (j = 0; j map(bond_atom[i][j]); + if (k < 0) continue; + + nbond[i] += 1; + if (newton_bond) nbond[k] += 1; + } + } + + // communicate ghost nbond between neighbor procs + if (force->newton) + comm->reverse_comm_compute(this); + + // zero nbond of atoms not in group + // only do this after comm since ghost contributions must be included + int *mask = atom->mask; + + for (i = 0; i < nlocal; i++) + if (!(mask[i] & groupbit)) nbond[i] = 0.0; +} + +/* ---------------------------------------------------------------------- */ + +int ComputeNBondAtom::pack_reverse_comm(int n, int first, double *buf) +{ + int i,m,last; + + m = 0; + last = first + n; + for (i = first; i < last; i++) buf[m++] = nbond[i]; + return m; +} + +/* ---------------------------------------------------------------------- */ + +void ComputeNBondAtom::unpack_reverse_comm(int n, int *list, double *buf) +{ + int i,j,m; + + m = 0; + for (i = 0; i < n; i++) { + j = list[i]; + nbond[j] += buf[m++]; + } +} + +/* ---------------------------------------------------------------------- + memory usage of local atom-based array +------------------------------------------------------------------------- */ + +double ComputeNBondAtom::memory_usage() +{ + double bytes = nmax * sizeof(double); + return bytes; +} diff --git a/src/BPM/compute_nbond_atom.h b/src/BPM/compute_nbond_atom.h new file mode 100644 index 0000000000..3f92ef99c8 --- /dev/null +++ b/src/BPM/compute_nbond_atom.h @@ -0,0 +1,61 @@ +/* -*- 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 COMPUTE_CLASS +// clang-format off +ComputeStyle(nbond/atom,ComputeNBondAtom) +// clang-format on +#else + +#ifndef LMP_COMPUTE_NBOND_ATOM_H +#define LMP_COMPUTE_NBOND_ATOM_H + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputeNBondAtom : public Compute { + public: + ComputeNBondAtom(class LAMMPS *, int, char **); + ~ComputeNBondAtom(); + void init() {} + void compute_peratom(); + int pack_reverse_comm(int, int, double *); + void unpack_reverse_comm(int, int *, double *); + double memory_usage(); + + private: + int nmax; + double *nbond; +}; + +} // 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: Per-atom energy was not tallied on needed timestep + +You are using a thermo keyword that requires potentials to +have tallied energy, but they didn't on this timestep. See the +variable doc page for ideas on how to make this work. + +*/ diff --git a/src/BPM/fix_bond_history.cpp b/src/BPM/fix_bond_history.cpp new file mode 100644 index 0000000000..b0f046f43f --- /dev/null +++ b/src/BPM/fix_bond_history.cpp @@ -0,0 +1,294 @@ +// clang-format off +/* ---------------------------------------------------------------------- + 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_bond_history.h" + +#include "atom.h" +#include "comm.h" +#include "error.h" +#include "force.h" +#include "group.h" +#include "memory.h" +#include "modify.h" +#include "neighbor.h" +#include "string.h" + +#include +#include + +using namespace LAMMPS_NS; +using namespace FixConst; + +#define LB_FACTOR 1.5 +#define DELTA 10000 + +/* ---------------------------------------------------------------------- */ + +FixBondHistory::FixBondHistory(LAMMPS *lmp, int narg, char **arg) : + Fix(lmp, narg, arg) +{ + if (narg != 5) error->all(FLERR,"Illegal fix bond/history command"); + update_flag = utils::inumeric(FLERR,arg[3],false,lmp); + ndata = utils::inumeric(FLERR,arg[4],false,lmp); + nbond = atom->bond_per_atom; + + if (nbond == 0) + error->all(FLERR, "Cannot store bond variables without any bonds"); + + stored_flag = false; + restart_global = 1; + create_attribute = 1; + + bondstore = nullptr; + maxbond = 0; + allocate(); + + new_fix_id = nullptr; + array_id = nullptr; +} + +/* ---------------------------------------------------------------------- */ + +FixBondHistory::~FixBondHistory() +{ + if (new_fix_id && modify->nfix) modify->delete_fix(new_fix_id); + delete [] new_fix_id; + delete [] array_id; + + memory->destroy(bondstore); +} + +/* ---------------------------------------------------------------------- */ + +int FixBondHistory::setmask() +{ + int mask = 0; + mask |= PRE_EXCHANGE; + mask |= POST_NEIGHBOR; + return mask; +} + +/* ---------------------------------------------------------------------- */ + +void FixBondHistory::post_constructor() +{ + // Store saved bond quantities for each atom using fix property atom + char **newarg = new char*[5]; + int nvalue = 0; + int tmp1, tmp2; + + int nn = strlen(id) + strlen("_FIX_PROP_ATOM") + 1; + new_fix_id = new char[nn]; + strcpy(new_fix_id, "FIX_PROP_ATOM_"); + strcat(new_fix_id, id); + + nn = strlen(id) + 4 ; + array_id = new char[nn]; + strcpy(array_id, "d2_"); + strcat(array_id, id); + + char ncols[16]; + sprintf(ncols,"%d",nbond*ndata); + newarg[0] = new_fix_id; + newarg[1] = group->names[igroup]; + newarg[2] = (char *) "property/atom"; + newarg[3] = array_id; + newarg[4] = ncols; + + modify->add_fix(5,newarg); + index = atom->find_custom(&array_id[3],tmp1,tmp2); + + delete [] newarg; +} + +/* ---------------------------------------------------------------------- */ + +void FixBondHistory::update_atom_value(int i, int m, int idata, double value) +{ + if (idata >= ndata || m > nbond) error->all(FLERR, "Index exceeded in fix bond history"); + atom->darray[index][i][m*ndata+idata] = value; +} + +/* ---------------------------------------------------------------------- */ + +double FixBondHistory::get_atom_value(int i, int m, int idata) +{ + if (idata >= ndata || m > nbond) error->all(FLERR, "Index exceeded in fix bond history"); + return atom->darray[index][i][m*ndata+idata]; +} + +/* ---------------------------------------------------------------------- + If stored values are updated, need to copy to atom arrays before exchanging + Always called before neighborlist rebuilt + Also call prior to irregular communication in other fixes (e.g. deform) +------------------------------------------------------------------------- */ + +void FixBondHistory::pre_exchange() +{ + if (!update_flag) return; + + int i1, i2, n, m, idata; + int **bondlist = neighbor->bondlist; + int nbondlist = neighbor->nbondlist; + double **stored = atom->darray[index]; + + int nlocal = atom->nlocal; + tagint **bond_atom = atom->bond_atom; + int *num_bond = atom->num_bond; + tagint *tag = atom->tag; + + for (n = 0; n < nbondlist; n++) { + i1 = bondlist[n][0]; + i2 = bondlist[n][1]; + + // skip bond if already broken + if (bondlist[n][2] <= 0) { + continue; + } + + if (i1 < nlocal) { + for (m = 0; m < num_bond[i1]; m++) { + if (bond_atom[i1][m] == tag[i2]) { + for (idata = 0; idata < ndata; idata++) { + stored[i1][m*ndata+idata] = bondstore[n][idata]; + } + } + } + } + + if (i2 < nlocal) { + for (m = 0; m < num_bond[i2]; m++) { + if (bond_atom[i2][m] == tag[i1]) { + for (idata = 0; idata < ndata; idata++) { + stored[i1][m*ndata+idata] = bondstore[n][idata]; + } + } + } + } + } +} + +/* ---------------------------------------------------------------------- */ + +void FixBondHistory::allocate() +{ + //Ideally would just ask ntopo for maxbond, but protected + if (comm->nprocs == 1) maxbond = atom->nbonds; + else maxbond = static_cast (LB_FACTOR * atom->nbonds / comm->nprocs); + memory->create(bondstore,maxbond,ndata,"fix_bond_store:bondstore"); +} + +/* ---------------------------------------------------------------------- */ + +void FixBondHistory::setup_post_neighbor() +{ + post_neighbor(); +} + +/* ---------------------------------------------------------------------- + called after neighbor list is build + build array of stored bond quantities from fix property atom +------------------------------------------------------------------------- */ + +void FixBondHistory::post_neighbor() +{ + //Grow array if number of bonds has increased + while (neighbor->nbondlist >= maxbond) { + maxbond += DELTA; + memory->grow(bondstore,maxbond,ndata,"fix_bond_store:bondstore"); + } + + int i1, i2, n, m, idata; + int **bondlist = neighbor->bondlist; + int nbondlist = neighbor->nbondlist; + double **stored = atom->darray[index]; + + int nlocal = atom->nlocal; + tagint **bond_atom = atom->bond_atom; + int *num_bond = atom->num_bond; + tagint *tag = atom->tag; + + for (n = 0; n < nbondlist; n++) { + i1 = bondlist[n][0]; + i2 = bondlist[n][1]; + + // skip bond if already broken + if (bondlist[n][2] <= 0) { + continue; + } + + if (i1 < nlocal) { + for (m = 0; m < num_bond[i1]; m++) { + if (bond_atom[i1][m] == tag[i2]) { + for (idata = 0; idata < ndata; idata++) { + bondstore[n][idata] = stored[i1][m*ndata+idata]; + } + } + } + } + + if (i2 < nlocal){ + for (m = 0; m < num_bond[i2]; m++) { + if (bond_atom[i2][m] == tag[i1]) { + for (idata = 0; idata < ndata; idata++) { + bondstore[n][idata] = stored[i2][m*ndata+idata]; + } + } + } + } + } +} + +/* ---------------------------------------------------------------------- */ + +double FixBondHistory::memory_usage() +{ + return maxbond * ndata * sizeof(double); +} + +/* ---------------------------------------------------------------------- */ + +void FixBondHistory::write_restart(FILE *fp) +{ + int n = 0; + double list[1]; + list[n++] = stored_flag; + + if (comm->me == 0) { + int size = n * sizeof(double); + fwrite(&size,sizeof(int),1,fp); + fwrite(list,sizeof(double),n,fp); + } +} + +/* ---------------------------------------------------------------------- */ + +void FixBondHistory::restart(char *buf) +{ + int n = 0; + double *list = (double *) buf; + stored_flag = static_cast (list[n++]); +} + +/* ---------------------------------------------------------------------- + initialize bond values to zero, called when atom is created +------------------------------------------------------------------------- */ + +void FixBondHistory::set_arrays(int i) +{ + double **stored = atom->darray[index]; + for (int m = 0; m < nbond; m++) + for (int idata = 0; idata < ndata; idata++) + stored[i][m*ndata+idata] = 0.0; +} \ No newline at end of file diff --git a/src/BPM/fix_bond_history.h b/src/BPM/fix_bond_history.h new file mode 100644 index 0000000000..0219e5de02 --- /dev/null +++ b/src/BPM/fix_bond_history.h @@ -0,0 +1,80 @@ +/* -*- 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 FIX_CLASS +// clang-format off +FixStyle(BOND_HISTORY,FixBondHistory) +// clang-format on +#else + +#ifndef LMP_FIX_BOND_HISTORY_H +#define LMP_FIX_BOND_HISTORY_H + +#include "fix.h" + +namespace LAMMPS_NS { + +class FixBondHistory : public Fix { + public: + + FixBondHistory(class LAMMPS *, int, char **); + ~FixBondHistory(); + int setmask(); + void post_constructor(); + void setup_post_neighbor(); + void post_neighbor(); + void pre_exchange(); + double memory_usage(); + void write_restart(FILE *fp); + void restart(char *buf); + void set_arrays(int); + + void update_atom_value(int, int, int, double); + double get_atom_value(int, int, int); + double **bondstore; + int stored_flag; + + protected: + + void allocate(); + + int update_flag; + int nbond, maxbond, ndata; + int index; + char *new_fix_id; + char *array_id; +}; + +} // namespace LAMMPS_NS + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +UNDOCUMENTED + +E: Index exceeded in fix bond history + +Bond requested non-existant data + +E: Cannot store bond variables without any bonds + +Atoms must have a nonzero number of bonds to store data + + + +*/ + diff --git a/src/BPM/fix_nve_sphere_bpm.cpp b/src/BPM/fix_nve_sphere_bpm.cpp new file mode 100644 index 0000000000..66801cc0b6 --- /dev/null +++ b/src/BPM/fix_nve_sphere_bpm.cpp @@ -0,0 +1,161 @@ +// clang-format off +/* ---------------------------------------------------------------------- + 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_nve_sphere_bpm.h" + +#include "atom.h" +#include "atom_vec.h" +#include "domain.h" +#include "error.h" +#include "force.h" +#include "math_extra.h" + +#include +#include + +using namespace LAMMPS_NS; +using namespace FixConst; +using namespace MathExtra; + + +/* ---------------------------------------------------------------------- */ + +FixNVESphereBPM::FixNVESphereBPM(LAMMPS *lmp, int narg, char **arg) : + FixNVE(lmp, narg, arg) +{ + if (narg < 3) error->all(FLERR,"Illegal fix nve/sphere/bpm command"); + + time_integrate = 1; + + // process extra keywords + // inertia = moment of inertia prefactor for sphere or disc + + inertia = 0.4; + + int iarg = 3; + while (iarg < narg) { + if (strcmp(arg[iarg],"disc")==0) { + inertia = 0.5; + if (domain->dimension != 2) + error->all(FLERR,"Fix nve/sphere/bpm disc requires 2d simulation"); + iarg++; + } + else error->all(FLERR,"Illegal fix nve/sphere/bpm command"); + } + + inv_inertia = 1.0/inertia; + + // error checks + + if (!atom->quat_flag || !atom->sphere_flag) + error->all(FLERR,"Fix nve/sphere/bpm requires atom style sphere/bpm"); +} + +/* ---------------------------------------------------------------------- */ + +void FixNVESphereBPM::init() +{ + FixNVE::init(); + + // check that all particles are finite-size spheres + // no point particles allowed + + double *radius = atom->radius; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) + if (radius[i] == 0.0) + error->one(FLERR,"Fix nve/sphere/bpm requires extended particles"); +} + +/* ---------------------------------------------------------------------- */ + +void FixNVESphereBPM::initial_integrate(int /*vflag*/) +{ + double dtq,dtfm,dtirotate,particle_inertia; + + double **x = atom->x; + double **v = atom->v; + double **f = atom->f; + double **omega = atom->omega; + double **torque = atom->torque; + double **quat = atom->quat; + double *radius = atom->radius; + double *rmass = atom->rmass; + int *mask = atom->mask; + int nlocal = atom->nlocal; + if (igroup == atom->firstgroup) nlocal = atom->nfirst; + + // set timestep here since dt may have changed or come via rRESPA + dtq = 0.5 * dtv; + + // update v,x,omega,quat for all particles + // d_omega/dt = torque / inertia + + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) { + dtfm = dtf / rmass[i]; + v[i][0] += dtfm * f[i][0]; + v[i][1] += dtfm * f[i][1]; + v[i][2] += dtfm * f[i][2]; + x[i][0] += dtv * v[i][0]; + x[i][1] += dtv * v[i][1]; + x[i][2] += dtv * v[i][2]; + + particle_inertia = inertia*(radius[i]*radius[i]*rmass[i]); + dtirotate = dtf / particle_inertia; + omega[i][0] += dtirotate * torque[i][0]; + omega[i][1] += dtirotate * torque[i][1]; + omega[i][2] += dtirotate * torque[i][2]; + + MathExtra::richardson_sphere(quat[i],omega[i],dtq); + } + } +} + +/* ---------------------------------------------------------------------- */ + +void FixNVESphereBPM::final_integrate() +{ + double dtfm,dtirotate,particle_inertia; + + double **v = atom->v; + double **f = atom->f; + double **omega = atom->omega; + double **torque = atom->torque; + double *rmass = atom->rmass; + double *radius = atom->radius; + int *mask = atom->mask; + int nlocal = atom->nlocal; + if (igroup == atom->firstgroup) nlocal = atom->nfirst; + + // update v,omega for all particles + // d_omega/dt = torque / inertia + + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + dtfm = dtf / rmass[i]; + v[i][0] += dtfm * f[i][0]; + v[i][1] += dtfm * f[i][1]; + v[i][2] += dtfm * f[i][2]; + + particle_inertia = inertia*(radius[i]*radius[i]*rmass[i]); + dtirotate = dtf / particle_inertia; + omega[i][0] += dtirotate * torque[i][0]; + omega[i][1] += dtirotate * torque[i][1]; + omega[i][2] += dtirotate * torque[i][2]; + } +} diff --git a/src/BPM/fix_nve_sphere_bpm.h b/src/BPM/fix_nve_sphere_bpm.h new file mode 100644 index 0000000000..8e4d89ad67 --- /dev/null +++ b/src/BPM/fix_nve_sphere_bpm.h @@ -0,0 +1,71 @@ +/* -*- 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 FIX_CLASS +// clang-format off +FixStyle(nve/sphere/bpm,FixNVESphereBPM) +// clang-format on +#else + +#ifndef LMP_FIX_NVE_SPHERE_BPM_H +#define LMP_FIX_NVE_SPHERE_BPM_H + +#include "fix_nve.h" + +namespace LAMMPS_NS { + +class FixNVESphereBPM : public FixNVE { + public: + FixNVESphereBPM(class LAMMPS *, int, char **); + virtual ~FixNVESphereBPM() {} + void init(); + virtual void initial_integrate(int); + virtual void final_integrate(); + + protected: + double inertia, inv_inertia; + int extra; + int dlm; +}; + +} // 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: Fix nve/sphere/bpm disc requires 2d simulation + +UNDOCUMENTED + +E: Fix nve/sphere/bpm requires atom style sphere/bpm + +Self-explanatory. + +E: Fix nve/sphere/bpm update dipole requires atom attribute mu + +An atom style with this attribute is needed. + +E: Fix nve/sphere/bpm requires extended particles + +This fix can only be used for particles of a finite size. + + +*/ diff --git a/src/BPM/fix_update_special_bonds.cpp b/src/BPM/fix_update_special_bonds.cpp new file mode 100644 index 0000000000..3fa9b84cd0 --- /dev/null +++ b/src/BPM/fix_update_special_bonds.cpp @@ -0,0 +1,235 @@ +// clang-format off +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://lammps.sandia.gov/, 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_update_special_bonds.h" + +#include "atom.h" +#include "atom_vec.h" +#include "comm.h" +#include "error.h" +#include "force.h" +#include "neighbor.h" +#include "neigh_list.h" +#include "pair.h" + +#include +#include +#include + +using namespace LAMMPS_NS; +using namespace FixConst; + +/* ---------------------------------------------------------------------- */ + +FixUpdateSpecialBonds::FixUpdateSpecialBonds(LAMMPS *lmp, int narg, char **arg) : + Fix(lmp, narg, arg) +{ + if (narg != 3) error->all(FLERR,"Illegal fix update/special/bonds command"); + comm_forward = 1+atom->maxspecial; +} + +/* ---------------------------------------------------------------------- */ + +FixUpdateSpecialBonds::~FixUpdateSpecialBonds() +{ +} + +/* ---------------------------------------------------------------------- */ + +int FixUpdateSpecialBonds::setmask() +{ + int mask = 0; + mask |= PRE_EXCHANGE; + mask |= PRE_FORCE; + return mask; +} + +/* ---------------------------------------------------------------------- */ + +void FixUpdateSpecialBonds::setup(int /*vflag*/) +{ + // Require atoms know about all of their bonds and if they break + if (force->newton_bond) + error->all(FLERR,"Fix update/special/bonds requires Newton bond off"); + + if (!atom->avec->bonds_allow) + error->all(FLERR,"Fix update/special/bonds requires atom bonds"); + + // special lj must be 0 1 1 to censor pair forces between bonded particles + // special coulomb must be 1 1 1 to ensure all pairs are included in the + // neighbor list and 1-3 and 1-4 special bond lists are skipped + if (force->special_lj[1] != 0.0 || force->special_lj[2] != 1.0 || + force->special_lj[3] != 1.0) + error->all(FLERR,"Fix update/special/bonds requires special LJ weights = 0,1,1"); + if (force->special_coul[1] != 1.0 || force->special_coul[2] != 1.0 || + force->special_coul[3] != 1.0) + error->all(FLERR,"Fix update/special/bonds requires special Coulomb weights = 1,1,1"); + + broken_pairs.clear(); +} + +/* ---------------------------------------------------------------------- + Update special bond list and atom bond arrays, empty broken bond list +------------------------------------------------------------------------- */ + +void FixUpdateSpecialBonds::pre_exchange() +{ + int i, j, key, m, n1, n3; + tagint min_tag, max_tag; + int nlocal = atom->nlocal; + + tagint *tag = atom->tag; + tagint *slist; + int **nspecial = atom->nspecial; + tagint **special = atom->special; + + for (auto const &key : broken_pairs) { + min_tag = key.first; + max_tag = key.second; + + i = atom->map(min_tag); + j = atom->map(max_tag); + + // remove i from special bond list for atom j and vice versa + if (i < nlocal) { + slist = special[i]; + n1 = nspecial[i][0]; + for (m = 0; m < n1; m++) + if (slist[m] == max_tag) break; + n3 = nspecial[i][2]; + for (; m < n3-1; m++) slist[m] = slist[m+1]; + nspecial[i][0]--; + nspecial[i][1]--; + nspecial[i][2]--; + } + + if (j < nlocal) { + slist = special[j]; + n1 = nspecial[j][0]; + for (m = 0; m < n1; m++) + if (slist[m] == min_tag) break; + n3 = nspecial[j][2]; + for (; m < n3-1; m++) slist[m] = slist[m+1]; + nspecial[j][0]--; + nspecial[j][1]--; + nspecial[j][2]--; + } + } + + // Forward updated special bond list + comm->forward_comm_fix(this); + + broken_pairs.clear(); +} + +/* ---------------------------------------------------------------------- + Loop neighbor list and update special bond lists for recently broken bonds +------------------------------------------------------------------------- */ + +void FixUpdateSpecialBonds::pre_force(int /*vflag*/) +{ + int i,j,n,m,ii,jj,inum,jnum; + int *ilist,*jlist,*numneigh,**firstneigh; + tagint min_tag, max_tag; + std::pair key; + + int **bond_type = atom->bond_type; + int *num_bond = atom->num_bond; + tagint **bond_atom = atom->bond_atom; + int nlocal = atom->nlocal; + + tagint *tag = atom->tag; + NeighList *list = force->pair->list; + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + + min_tag = tag[i]; + max_tag = tag[j]; + if (max_tag < min_tag) { + min_tag = tag[j]; + max_tag = tag[i]; + } + key = std::make_pair(min_tag, max_tag); + + if (broken_pairs.find(key) != broken_pairs.end()) + jlist[jj] = j; // Clear special bond bits + } + } +} + +/* ---------------------------------------------------------------------- */ + +int FixUpdateSpecialBonds::pack_forward_comm(int n, int *list, double *buf, + int /*pbc_flag*/, int * /*pbc*/) +{ + int i,j,k,m,ns; + int **nspecial = atom->nspecial; + tagint **special = atom->special; + + m = 0; + for (i = 0; i < n; i++) { + j = list[i]; + ns = nspecial[j][0]; + buf[m++] = ubuf(ns).d; + for (k = 0; k < ns; k++) + buf[m++] = ubuf(special[j][k]).d; + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +void FixUpdateSpecialBonds::unpack_forward_comm(int n, int first, double *buf) +{ + int i,j,m,ns,last; + int **nspecial = atom->nspecial; + tagint **special = atom->special; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + ns = (int) ubuf(buf[m++]).i; + nspecial[i][0] = ns; + for (j = 0; j < ns; j++) + special[i][j] = (tagint) ubuf(buf[m++]).i; + } +} + +/* ---------------------------------------------------------------------- */ + +void FixUpdateSpecialBonds::add_broken_bond(int i, int j) +{ + tagint *tag = atom->tag; + + tagint min_tag = tag[i]; + tagint max_tag = tag[j]; + if (max_tag < min_tag) { + min_tag = tag[j]; + max_tag = tag[i]; + } + std::pair key = std::make_pair(min_tag, max_tag); + + broken_pairs.insert(key); +} diff --git a/src/BPM/fix_update_special_bonds.h b/src/BPM/fix_update_special_bonds.h new file mode 100644 index 0000000000..ff47dd4d9b --- /dev/null +++ b/src/BPM/fix_update_special_bonds.h @@ -0,0 +1,76 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, 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(update/special/bonds,FixUpdateSpecialBonds) +// clang-format on +#else + +#ifndef LMP_FIX_UPDATE_SPECIAL_BONDS_H +#define LMP_FIX_UPDATE_SPECIAL_BONDS_H + +#include "fix.h" + +#include +#include + +namespace LAMMPS_NS { + +class FixUpdateSpecialBonds : public Fix { + public: + FixUpdateSpecialBonds(class LAMMPS *, int, char **); + ~FixUpdateSpecialBonds(); + int setmask(); + void setup(int); + void pre_exchange(); + void pre_force(int); + int pack_forward_comm(int, int *, double *, int, int *); + void unpack_forward_comm(int, int, double *); + void add_broken_bond(int,int); + + protected: + std::set > broken_pairs; + inline int sbmask(int j) const { + return j >> SBBITS & 3; + } +}; + +} // namespace LAMMPS_NS + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal fix censor/bonded/pairs command + +Self-explanatory. + +E: Fix censor/bonded/pairs requires Newton bond off + +Self-explanatory. + +E: Fix censor/bonded/pairs requires atom bonds + +Self-explanatory. + +E: Fix censor/bonded/pairs must be used without special bonds + +Self-explanatory. Look at the atom modify special command. + +E: Fix censor/bonded/pairs requires special_bonds = 0,0,0 + +Self-explanatory. + +*/ diff --git a/src/GRANULAR/pair_gran_hertz_history.cpp b/src/GRANULAR/pair_gran_hertz_history.cpp index 2fa0f5acb8..c45b535d6f 100644 --- a/src/GRANULAR/pair_gran_hertz_history.cpp +++ b/src/GRANULAR/pair_gran_hertz_history.cpp @@ -43,7 +43,7 @@ void PairGranHertzHistory::compute(int eflag, int vflag) { int i,j,ii,jj,inum,jnum; double xtmp,ytmp,ztmp,delx,dely,delz,fx,fy,fz; - double radi,radj,radsum,rsq,r,rinv,rsqinv; + double radi,radj,radsum,rsq,r,rinv,rsqinv,factor_lj; double vr1,vr2,vr3,vnnr,vn1,vn2,vn3,vt1,vt2,vt3; double wr1,wr2,wr3; double vtr1,vtr2,vtr3,vrel; @@ -112,8 +112,11 @@ void PairGranHertzHistory::compute(int eflag, int vflag) for (jj = 0; jj < jnum; jj++) { j = jlist[jj]; + factor_lj = special_lj[sbmask(j)]; j &= NEIGHMASK; + if (factor_lj == 0) continue; + delx = xtmp - x[j][0]; dely = ytmp - x[j][1]; delz = ztmp - x[j][2]; @@ -244,6 +247,9 @@ void PairGranHertzHistory::compute(int eflag, int vflag) fx = delx*ccel + fs1; fy = dely*ccel + fs2; fz = delz*ccel + fs3; + fx *= factor_lj; + fy *= factor_lj; + fz *= factor_lj; f[i][0] += fx; f[i][1] += fy; f[i][2] += fz; @@ -251,6 +257,9 @@ void PairGranHertzHistory::compute(int eflag, int vflag) tor1 = rinv * (dely*fs3 - delz*fs2); tor2 = rinv * (delz*fs1 - delx*fs3); tor3 = rinv * (delx*fs2 - dely*fs1); + tor1 *= factor_lj; + tor2 *= factor_lj; + tor3 *= factor_lj; torque[i][0] -= radi*tor1; torque[i][1] -= radi*tor2; torque[i][2] -= radi*tor3; diff --git a/src/GRANULAR/pair_gran_hooke.cpp b/src/GRANULAR/pair_gran_hooke.cpp index 1ef69e041d..11c867cd81 100644 --- a/src/GRANULAR/pair_gran_hooke.cpp +++ b/src/GRANULAR/pair_gran_hooke.cpp @@ -42,7 +42,7 @@ void PairGranHooke::compute(int eflag, int vflag) { int i,j,ii,jj,inum,jnum; double xtmp,ytmp,ztmp,delx,dely,delz,fx,fy,fz; - double radi,radj,radsum,rsq,r,rinv,rsqinv; + double radi,radj,radsum,rsq,r,rinv,rsqinv,factor_lj; double vr1,vr2,vr3,vnnr,vn1,vn2,vn3,vt1,vt2,vt3; double wr1,wr2,wr3; double vtr1,vtr2,vtr3,vrel; @@ -101,8 +101,11 @@ void PairGranHooke::compute(int eflag, int vflag) for (jj = 0; jj < jnum; jj++) { j = jlist[jj]; + factor_lj = special_lj[sbmask(j)]; j &= NEIGHMASK; + if (factor_lj == 0) continue; + delx = xtmp - x[j][0]; dely = ytmp - x[j][1]; delz = ztmp - x[j][2]; @@ -187,6 +190,9 @@ void PairGranHooke::compute(int eflag, int vflag) fx = delx*ccel + fs1; fy = dely*ccel + fs2; fz = delz*ccel + fs3; + fx *= factor_lj; + fy *= factor_lj; + fz *= factor_lj; f[i][0] += fx; f[i][1] += fy; f[i][2] += fz; @@ -194,6 +200,9 @@ void PairGranHooke::compute(int eflag, int vflag) tor1 = rinv * (dely*fs3 - delz*fs2); tor2 = rinv * (delz*fs1 - delx*fs3); tor3 = rinv * (delx*fs2 - dely*fs1); + tor1 *= factor_lj; + tor2 *= factor_lj; + tor3 *= factor_lj; torque[i][0] -= radi*tor1; torque[i][1] -= radi*tor2; torque[i][2] -= radi*tor3; diff --git a/src/GRANULAR/pair_gran_hooke_history.cpp b/src/GRANULAR/pair_gran_hooke_history.cpp index e6013b9940..9cd5f1085e 100644 --- a/src/GRANULAR/pair_gran_hooke_history.cpp +++ b/src/GRANULAR/pair_gran_hooke_history.cpp @@ -101,7 +101,7 @@ void PairGranHookeHistory::compute(int eflag, int vflag) { int i,j,ii,jj,inum,jnum; double xtmp,ytmp,ztmp,delx,dely,delz,fx,fy,fz; - double radi,radj,radsum,rsq,r,rinv,rsqinv; + double radi,radj,radsum,rsq,r,rinv,rsqinv,factor_lj; double vr1,vr2,vr3,vnnr,vn1,vn2,vn3,vt1,vt2,vt3; double wr1,wr2,wr3; double vtr1,vtr2,vtr3,vrel; @@ -170,8 +170,11 @@ void PairGranHookeHistory::compute(int eflag, int vflag) for (jj = 0; jj < jnum; jj++) { j = jlist[jj]; + factor_lj = special_lj[sbmask(j)]; j &= NEIGHMASK; + if (factor_lj == 0) continue; + delx = xtmp - x[j][0]; dely = ytmp - x[j][1]; delz = ztmp - x[j][2]; @@ -301,6 +304,9 @@ void PairGranHookeHistory::compute(int eflag, int vflag) fx = delx*ccel + fs1; fy = dely*ccel + fs2; fz = delz*ccel + fs3; + fx *= factor_lj; + fy *= factor_lj; + fz *= factor_lj; f[i][0] += fx; f[i][1] += fy; f[i][2] += fz; @@ -308,6 +314,9 @@ void PairGranHookeHistory::compute(int eflag, int vflag) tor1 = rinv * (dely*fs3 - delz*fs2); tor2 = rinv * (delz*fs1 - delx*fs3); tor3 = rinv * (delx*fs2 - dely*fs1); + tor1 *= factor_lj; + tor2 *= factor_lj; + tor3 *= factor_lj; torque[i][0] -= radi*tor1; torque[i][1] -= radi*tor2; torque[i][2] -= radi*tor3; diff --git a/src/GRANULAR/pair_granular.cpp b/src/GRANULAR/pair_granular.cpp index 2846403e4c..d82423b05e 100644 --- a/src/GRANULAR/pair_granular.cpp +++ b/src/GRANULAR/pair_granular.cpp @@ -150,7 +150,7 @@ void PairGranular::compute(int eflag, int vflag) { int i,j,ii,jj,inum,jnum,itype,jtype; double xtmp,ytmp,ztmp,delx,dely,delz,fx,fy,fz,nx,ny,nz; - double radi,radj,radsum,rsq,r,rinv; + double radi,radj,radsum,rsq,r,rinv,factor_lj; double Reff, delta, dR, dR2, dist_to_contact; double vr1,vr2,vr3,vnnr,vn1,vn2,vn3,vt1,vt2,vt3; @@ -249,8 +249,11 @@ void PairGranular::compute(int eflag, int vflag) for (jj = 0; jj < jnum; jj++) { j = jlist[jj]; + factor_lj = special_lj[sbmask(j)]; j &= NEIGHMASK; + if (factor_lj == 0) continue; + delx = xtmp - x[j][0]; dely = ytmp - x[j][1]; delz = ztmp - x[j][2]; @@ -651,6 +654,9 @@ void PairGranular::compute(int eflag, int vflag) fx = nx*Fntot + fs1; fy = ny*Fntot + fs2; fz = nz*Fntot + fs3; + fx *= factor_lj; + fy *= factor_lj; + fz *= factor_lj; f[i][0] += fx; f[i][1] += fy; @@ -659,6 +665,9 @@ void PairGranular::compute(int eflag, int vflag) tor1 = ny*fs3 - nz*fs2; tor2 = nz*fs1 - nx*fs3; tor3 = nx*fs2 - ny*fs1; + tor1 *= factor_lj; + tor2 *= factor_lj; + tor3 *= factor_lj; dist_to_contact = radi-0.5*delta; torque[i][0] -= dist_to_contact*tor1; @@ -666,9 +675,9 @@ void PairGranular::compute(int eflag, int vflag) torque[i][2] -= dist_to_contact*tor3; if (twist_model[itype][jtype] != TWIST_NONE) { - tortwist1 = magtortwist * nx; - tortwist2 = magtortwist * ny; - tortwist3 = magtortwist * nz; + tortwist1 = magtortwist * nx * factor_lj; + tortwist2 = magtortwist * ny * factor_lj; + tortwist3 = magtortwist * nz * factor_lj; torque[i][0] += tortwist1; torque[i][1] += tortwist2; @@ -676,9 +685,9 @@ void PairGranular::compute(int eflag, int vflag) } if (roll_model[itype][jtype] != ROLL_NONE) { - torroll1 = Reff*(ny*fr3 - nz*fr2); // n cross fr - torroll2 = Reff*(nz*fr1 - nx*fr3); - torroll3 = Reff*(nx*fr2 - ny*fr1); + torroll1 = Reff*(ny*fr3 - nz*fr2) * factor_lj; // n cross fr + torroll2 = Reff*(nz*fr1 - nx*fr3) * factor_lj; + torroll3 = Reff*(nx*fr2 - ny*fr1) * factor_lj; torque[i][0] += torroll1; torque[i][1] += torroll2; diff --git a/src/MISC/fix_pair_tracker.cpp b/src/MISC/fix_pair_tracker.cpp deleted file mode 100644 index 755025baed..0000000000 --- a/src/MISC/fix_pair_tracker.cpp +++ /dev/null @@ -1,369 +0,0 @@ -/* ---------------------------------------------------------------------- - 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_pair_tracker.h" -#include "atom.h" -#include "atom_vec.h" -#include "error.h" -#include "group.h" -#include "memory.h" -#include "modify.h" -#include "tokenizer.h" -#include "update.h" - -#include - -using namespace LAMMPS_NS; -using namespace FixConst; - -#define DELTA 1000 - -/* ---------------------------------------------------------------------- */ - -FixPairTracker::FixPairTracker(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg), nvalues(0), vector(NULL), array(NULL), pack_choice(NULL) -{ - if (narg < 3) error->all(FLERR, "Illegal fix pair/tracker command"); - local_flag = 1; - - nevery = utils::inumeric(FLERR, arg[3], false, lmp); - if (nevery <= 0) error->all(FLERR, "Illegal fix pair/tracker command"); - local_freq = nevery; - - // If optional arguments included, this will be oversized - nvalues = narg - 4; - pack_choice = new FnPtrPack[nvalues]; - - tmin = -1; - type_filter = nullptr; - int iarg = 4; - nvalues = 0; - while (iarg < narg) { - if (strcmp(arg[iarg], "id1") == 0) { - pack_choice[nvalues++] = &FixPairTracker::pack_id1; - } else if (strcmp(arg[iarg], "id2") == 0) { - pack_choice[nvalues++] = &FixPairTracker::pack_id2; - - } else if (strcmp(arg[iarg], "time/created") == 0) { - pack_choice[nvalues++] = &FixPairTracker::pack_time_created; - } else if (strcmp(arg[iarg], "time/broken") == 0) { - pack_choice[nvalues++] = &FixPairTracker::pack_time_broken; - } else if (strcmp(arg[iarg], "time/total") == 0) { - pack_choice[nvalues++] = &FixPairTracker::pack_time_total; - - } else if (strcmp(arg[iarg], "x") == 0) { - pack_choice[nvalues++] = &FixPairTracker::pack_x; - } else if (strcmp(arg[iarg], "y") == 0) { - pack_choice[nvalues++] = &FixPairTracker::pack_y; - } else if (strcmp(arg[iarg], "z") == 0) { - pack_choice[nvalues++] = &FixPairTracker::pack_z; - - } else if (strcmp(arg[iarg], "r/min") == 0) { - pack_choice[nvalues++] = &FixPairTracker::pack_rmin; - } else if (strcmp(arg[iarg], "r/ave") == 0) { - pack_choice[nvalues++] = &FixPairTracker::pack_rave; - - } else if (strcmp(arg[iarg], "time/min") == 0) { - if (iarg + 1 >= narg) error->all(FLERR, "Invalid keyword in fix pair/tracker command"); - tmin = utils::numeric(FLERR, arg[iarg + 1], false, lmp); - iarg++; - - } else if (strcmp(arg[iarg], "type/include") == 0) { - if (iarg + 1 >= narg) error->all(FLERR, "Invalid keyword in fix pair/tracker command"); - int ntypes = atom->ntypes; - - int i, j, itype, jtype, in, jn, infield, jnfield; - int inlo, inhi, jnlo, jnhi; - char *istr, *jstr; - if (!type_filter) { - memory->create(type_filter, ntypes + 1, ntypes + 1, "fix/pair/tracker:type_filter"); - - for (i = 0; i <= ntypes; i++) { - for (j = 0; j <= ntypes; j++) { type_filter[i][j] = 0; } - } - } - - in = strlen(arg[iarg + 1]) + 1; - istr = new char[in]; - strcpy(istr, arg[iarg + 1]); - std::vector iwords = Tokenizer(istr, ",").as_vector(); - infield = iwords.size(); - - jn = strlen(arg[iarg + 2]) + 1; - jstr = new char[jn]; - strcpy(jstr, arg[iarg + 2]); - std::vector jwords = Tokenizer(jstr, ",").as_vector(); - jnfield = jwords.size(); - - for (i = 0; i < infield; i++) { - const char *ifield = iwords[i].c_str(); - utils::bounds(FLERR, ifield, 1, ntypes, inlo, inhi, error); - - for (j = 0; j < jnfield; j++) { - const char *jfield = jwords[j].c_str(); - utils::bounds(FLERR, jfield, 1, ntypes, jnlo, jnhi, error); - - for (itype = inlo; itype <= inhi; itype++) { - for (jtype = jnlo; jtype <= jnhi; jtype++) { - type_filter[itype][jtype] = 1; - type_filter[jtype][itype] = 1; - } - } - } - } - - delete[] istr; - delete[] jstr; - - iarg += 2; - - } else - error->all(FLERR, "Invalid keyword in fix pair/tracker command"); - - iarg++; - } - - if (nvalues == 1) - size_local_cols = 0; - else - size_local_cols = nvalues; - - nmax = 0; - ncount = 0; - vector = NULL; - array = NULL; -} - -/* ---------------------------------------------------------------------- */ - -FixPairTracker::~FixPairTracker() -{ - delete[] pack_choice; - - memory->destroy(vector); - memory->destroy(array); - memory->destroy(type_filter); -} - -/* ---------------------------------------------------------------------- */ - -int FixPairTracker::setmask() -{ - int mask = 0; - mask |= POST_FORCE; - return mask; -} - -/* ---------------------------------------------------------------------- */ - -void FixPairTracker::init() -{ - // Set size of array/vector - ncount = 0; - - if (ncount > nmax) reallocate(ncount); - - size_local_rows = ncount; -} - -/* ---------------------------------------------------------------------- */ - -void FixPairTracker::lost_contact(int i, int j, double time_tmp, double nstep_tmp, double rsum_tmp, - double rmin_tmp) -{ - - double time = update->atime + (update->ntimestep - update->atimestep) * update->dt; - if ((time - time_tmp) < tmin) return; - - if (type_filter) { - int *type = atom->type; - if (type_filter[type[i]][type[j]] == 0) return; - } - - int *mask = atom->mask; - if (!(mask[i] & groupbit)) return; - if (!(mask[j] & groupbit)) return; - - if (ncount == nmax) reallocate(ncount); - - index_i = i; - index_j = j; - - rmin = rmin_tmp; - rsum = rsum_tmp; - time_initial = time_tmp; - nstep_initial = nstep_tmp; - - // fill vector or array with local values - if (nvalues == 1) { - (this->*pack_choice[0])(0); - } else { - for (int k = 0; k < nvalues; k++) { (this->*pack_choice[k])(k); } - } - - ncount += 1; -} - -/* ---------------------------------------------------------------------- */ - -void FixPairTracker::post_force(int /*vflag*/) -{ - if (update->ntimestep % nevery == 0) { - size_local_rows = ncount; - ncount = 0; - } -} - -/* ---------------------------------------------------------------------- */ - -void FixPairTracker::reallocate(int n) -{ - // grow vector or array - while (nmax <= n) nmax += DELTA; - - if (nvalues == 1) { - memory->grow(vector, nmax, "fix_pair_tracker:vector"); - vector_local = vector; - } else { - memory->grow(array, nmax, nvalues, "fix_pair_tracker:array"); - array_local = array; - } -} - -/* ---------------------------------------------------------------------- - memory usage of local data -------------------------------------------------------------------------- */ - -double FixPairTracker::memory_usage() -{ - double bytes = nmax * (double) nvalues * sizeof(double); - bytes += nmax * 2 * sizeof(int); - return bytes; -} - -/* ---------------------------------------------------------------------- - one method for every keyword fix pair/tracker can output - the atom property is packed into a local vector or array -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- */ - -void FixPairTracker::pack_time_created(int n) -{ - if (nvalues == 1) - vector[ncount] = time_initial; - else - array[ncount][n] = time_initial; -} - -/* ---------------------------------------------------------------------- */ - -void FixPairTracker::pack_time_broken(int n) -{ - double time = update->atime + (update->ntimestep - update->atimestep) * update->dt; - if (nvalues == 1) - vector[ncount] = time; - else - array[ncount][n] = time; -} - -/* ---------------------------------------------------------------------- */ - -void FixPairTracker::pack_time_total(int n) -{ - double time = update->atime + (update->ntimestep - update->atimestep) * update->dt; - if (nvalues == 1) - vector[ncount] = time - time_initial; - else - array[ncount][n] = time - time_initial; -} - -/* ---------------------------------------------------------------------- */ - -void FixPairTracker::pack_id1(int n) -{ - tagint *tag = atom->tag; - - if (nvalues == 1) - vector[ncount] = tag[index_i]; - else - array[ncount][n] = tag[index_i]; -} - -/* ---------------------------------------------------------------------- */ - -void FixPairTracker::pack_id2(int n) -{ - tagint *tag = atom->tag; - - if (nvalues == 1) - vector[ncount] = tag[index_j]; - else - array[ncount][n] = tag[index_j]; -} - -/* ---------------------------------------------------------------------- */ - -void FixPairTracker::pack_x(int n) -{ - double **x = atom->x; - - if (nvalues == 1) - vector[ncount] = (x[index_i][0] + x[index_j][0]) / 2; - else - array[ncount][n] = (x[index_i][0] + x[index_j][0]) / 2; -} - -/* ---------------------------------------------------------------------- */ - -void FixPairTracker::pack_y(int n) -{ - double **x = atom->x; - - if (nvalues == 1) - vector[ncount] = (x[index_i][1] + x[index_j][1]) / 2; - else - array[ncount][n] = (x[index_i][1] + x[index_j][1]) / 2; -} - -/* ---------------------------------------------------------------------- */ - -void FixPairTracker::pack_z(int n) -{ - double **x = atom->x; - - if (nvalues == 1) - vector[ncount] = (x[index_i][2] + x[index_j][2]) / 2; - else - array[ncount][n] = (x[index_i][2] + x[index_j][2]) / 2; -} - -/* ---------------------------------------------------------------------- */ - -void FixPairTracker::pack_rmin(int n) -{ - if (nvalues == 1) - vector[ncount] = rmin; - else - array[ncount][n] = rmin; -} - -/* ---------------------------------------------------------------------- */ - -void FixPairTracker::pack_rave(int n) -{ - if (nvalues == 1) - vector[ncount] = rsum / (update->ntimestep - nstep_initial); - else - array[ncount][n] = rsum / (update->ntimestep - nstep_initial); -} diff --git a/src/MISC/pair_tracker.cpp b/src/MISC/pair_tracker.cpp index f2fdb71081..d98d462ab6 100644 --- a/src/MISC/pair_tracker.cpp +++ b/src/MISC/pair_tracker.cpp @@ -19,20 +19,23 @@ #include "fix.h" #include "fix_dummy.h" #include "fix_neigh_history.h" -#include "fix_pair_tracker.h" +#include "fix_store_local.h" #include "force.h" #include "memory.h" #include "modify.h" #include "neigh_list.h" #include "neigh_request.h" #include "neighbor.h" +#include "tokenizer.h" +#include "utils.h" #include "update.h" using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -PairTracker::PairTracker(LAMMPS *lmp) : Pair(lmp) +PairTracker::PairTracker(LAMMPS *lmp) : + Pair(lmp), pack_choice(NULL) { single_enable = 1; no_virial_fdotr_compute = 1; @@ -43,6 +46,7 @@ PairTracker::PairTracker(LAMMPS *lmp) : Pair(lmp) nondefault_history_transfer = 1; finitecutflag = 0; + tmin = -1; // create dummy fix as placeholder for FixNeighHistory // this is so final order of Modify:fix will conform to input script @@ -50,6 +54,12 @@ PairTracker::PairTracker(LAMMPS *lmp) : Pair(lmp) fix_history = nullptr; modify->add_fix("NEIGH_HISTORY_TRACK_DUMMY all DUMMY"); fix_dummy = (FixDummy *) modify->fix[modify->nfix - 1]; + + fix_store_local = nullptr; + + output_data = nullptr; + pack_choice = nullptr; + type_filter = nullptr; } /* ---------------------------------------------------------------------- */ @@ -71,6 +81,12 @@ PairTracker::~PairTracker() delete[] maxrad_dynamic; delete[] maxrad_frozen; } + + delete[] pack_choice; + + delete [] id_fix_store_local; + memory->destroy(output_data); + memory->destroy(type_filter); } /* ---------------------------------------------------------------------- */ @@ -130,8 +146,9 @@ void PairTracker::compute(int eflag, int vflag) data = &alldata[size_history * jj]; if (touch[jj] == 1) { - fix_pair_tracker->lost_contact(i, j, data[0], data[1], data[2], data[3]); + process_data(i, j, data); } + touch[jj] = 0; data[0] = 0.0; // initial time data[1] = 0.0; // initial timestep @@ -159,7 +176,7 @@ void PairTracker::compute(int eflag, int vflag) data = &alldata[size_history * jj]; if (touch[jj] == 1) { - fix_pair_tracker->lost_contact(i, j, data[0], data[1], data[2], data[3]); + process_data(i, j, data); } touch[jj] = 0; @@ -216,14 +233,98 @@ void PairTracker::allocate() void PairTracker::settings(int narg, char **arg) { - if (narg != 0 && narg != 1) error->all(FLERR, "Illegal pair_style command"); + if (narg < 1) error->all(FLERR, "Illegal pair_style command"); - if (narg == 1) { - if (strcmp(arg[0], "finite") == 0) + id_fix_store_local = utils::strdup(arg[0]); + + // If optional arguments included, this will be oversized + pack_choice = new FnPtrPack[narg - 1]; + + nvalues = 0; + int iarg = 1; + while (iarg < narg) { + if (strcmp(arg[iarg], "finite") == 0) { finitecutflag = 1; - else + } else if (strcmp(arg[iarg], "id1") == 0) { + pack_choice[nvalues++] = &PairTracker::pack_id1; + } else if (strcmp(arg[iarg], "id2") == 0) { + pack_choice[nvalues++] = &PairTracker::pack_id2; + } else if (strcmp(arg[iarg], "time/created") == 0) { + pack_choice[nvalues++] = &PairTracker::pack_time_created; + } else if (strcmp(arg[iarg], "time/broken") == 0) { + pack_choice[nvalues++] = &PairTracker::pack_time_broken; + } else if (strcmp(arg[iarg], "time/total") == 0) { + pack_choice[nvalues++] = &PairTracker::pack_time_total; + } else if (strcmp(arg[iarg], "x") == 0) { + pack_choice[nvalues++] = &PairTracker::pack_x; + } else if (strcmp(arg[iarg], "y") == 0) { + pack_choice[nvalues++] = &PairTracker::pack_y; + } else if (strcmp(arg[iarg], "z") == 0) { + pack_choice[nvalues++] = &PairTracker::pack_z; + } else if (strcmp(arg[iarg], "r/min") == 0) { + pack_choice[nvalues++] = &PairTracker::pack_rmin; + } else if (strcmp(arg[iarg], "r/ave") == 0) { + pack_choice[nvalues++] = &PairTracker::pack_rave; + } else if (strcmp(arg[iarg], "time/min") == 0) { + if (iarg + 1 >= narg) error->all(FLERR, "Invalid keyword in pair tracker command"); + tmin = utils::numeric(FLERR, arg[iarg + 1], false, lmp); + iarg++; + + } else if (strcmp(arg[iarg], "type/include") == 0) { + if (iarg + 1 >= narg) error->all(FLERR, "Invalid keyword in pair tracker command"); + int ntypes = atom->ntypes; + + int i, j, itype, jtype, in, jn, infield, jnfield; + int inlo, inhi, jnlo, jnhi; + char *istr, *jstr; + if (!type_filter) { + memory->create(type_filter, ntypes + 1, ntypes + 1, "pair/tracker:type_filter"); + + for (i = 0; i <= ntypes; i++) { + for (j = 0; j <= ntypes; j++) type_filter[i][j] = 0; + } + } + + in = strlen(arg[iarg + 1]) + 1; + istr = new char[in]; + strcpy(istr, arg[iarg + 1]); + std::vector iwords = Tokenizer(istr, ",").as_vector(); + infield = iwords.size(); + + jn = strlen(arg[iarg + 2]) + 1; + jstr = new char[jn]; + strcpy(jstr, arg[iarg + 2]); + std::vector jwords = Tokenizer(jstr, ",").as_vector(); + jnfield = jwords.size(); + + for (i = 0; i < infield; i++) { + const char *ifield = iwords[i].c_str(); + utils::bounds(FLERR, ifield, 1, ntypes, inlo, inhi, error); + + for (j = 0; j < jnfield; j++) { + const char *jfield = jwords[j].c_str(); + utils::bounds(FLERR, jfield, 1, ntypes, jnlo, jnhi, error); + + for (itype = inlo; itype <= inhi; itype++) { + for (jtype = jnlo; jtype <= jnhi; jtype++) { + type_filter[itype][jtype] = 1; + type_filter[jtype][itype] = 1; + } + } + } + } + delete[] istr; + delete[] jstr; + iarg += 2; + + } else { error->all(FLERR, "Illegal pair_style command"); + } + iarg ++; } + + if (nvalues == 0) error->all(FLERR, "Must request at least one value to output"); + memory->create(output_data, nvalues, "pair/tracker:output_data"); } /* ---------------------------------------------------------------------- @@ -262,7 +363,6 @@ void PairTracker::coeff(int narg, char **arg) void PairTracker::init_style() { int i; - // error and warning checks if (!atom->radius_flag && finitecutflag) @@ -275,7 +375,7 @@ void PairTracker::init_style() neighbor->requests[irequest]->size = 1; neighbor->requests[irequest]->history = 1; // history flag won't affect results, but match granular pairstyles - // so neighborlist can be copied to reduce overhead + // to copy neighbor list and reduce overhead } // if history is stored and first init, create Fix to store history @@ -284,7 +384,7 @@ void PairTracker::init_style() if (fix_history == nullptr) { modify->replace_fix("NEIGH_HISTORY_TRACK_DUMMY", - fmt::format("NEIGH_HISTORY_TRACK all NEIGH_HISTORY {}", size_history), 1); + fmt::format("NEIGH_HISTORY_TRACK all NEIGH_HISTORY {}", size_history), 1); int ifix = modify->find_fix("NEIGH_HISTORY_TRACK"); fix_history = (FixNeighHistory *) modify->fix[ifix]; fix_history->pair = this; @@ -295,9 +395,14 @@ void PairTracker::init_style() if (force->pair->beyond_contact) error->all(FLERR, - "Pair tracker incompatible with granular pairstyles that extend beyond contact"); - // check for FixPour and FixDeposit so can extract particle radii + "Pair tracker incompatible with granular pairstyles that extend beyond contact"); + // check for FixFreeze and set freeze_group_bit + int ifix = modify->find_fix_by_style("^freeze"); + if (ifix < 0) freeze_group_bit = 0; + else freeze_group_bit = modify->fix[ifix]->groupbit; + + // check for FixPour and FixDeposit so can extract particle radii int ipour; for (ipour = 0; ipour < modify->nfix; ipour++) if (strcmp(modify->fix[ipour]->style, "pour") == 0) break; @@ -310,7 +415,6 @@ void PairTracker::init_style() // set maxrad_dynamic and maxrad_frozen for each type // include future FixPour and FixDeposit particles as dynamic - int itype; for (i = 1; i <= atom->ntypes; i++) { onerad_dynamic[i] = onerad_frozen[i] = 0.0; @@ -343,9 +447,13 @@ void PairTracker::init_style() if (ifix < 0) error->all(FLERR, "Could not find pair fix neigh history ID"); fix_history = (FixNeighHistory *) modify->fix[ifix]; - ifix = modify->find_fix_by_style("pair/tracker"); - if (ifix < 0) error->all(FLERR, "Cannot use pair tracker without fix pair/tracker"); - fix_pair_tracker = (FixPairTracker *) modify->fix[ifix]; + ifix = modify->find_fix(id_fix_store_local); + if (ifix < 0) error->all(FLERR, "Cannot find fix store/local"); + if (strcmp(modify->fix[ifix]->style, "store/local") != 0) + error->all(FLERR, "Incorrect fix style matched, not store/local"); + fix_store_local = (FixStoreLocal *) modify->fix[ifix]; + if (fix_store_local->nvalues != nvalues) + error->all(FLERR, "Inconsistent number of output variables in fix store/local"); } /* ---------------------------------------------------------------------- @@ -357,7 +465,6 @@ double PairTracker::init_one(int i, int j) if (!allocated) allocate(); // always mix prefactors geometrically - if (setflag[i][j] == 0) { cut[i][j] = mix_distance(cut[i][i], cut[j][j]); } cut[j][i] = cut[i][j]; @@ -469,3 +576,105 @@ double PairTracker::radii2cut(double r1, double r2) double cut = r1 + r2; return cut; } + +/* ---------------------------------------------------------------------- */ + +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 (type_filter) { + int *type = atom->type; + if (type_filter[type[i]][type[j]] == 0) return; + } + + for (int k = 0; k < nvalues; k++) (this->*pack_choice[k])(k, i, j, input_data); + fix_store_local->add_data(output_data, i, j); +} + +/* ---------------------------------------------------------------------- + one method for every keyword fix pair/tracker can output + the atom property is packed into a local vector or array +------------------------------------------------------------------------- */ + +void PairTracker::pack_time_created(int n, int i, int j, double * data) +{ + double time_initial = data[0]; + output_data[n] = time_initial; +} + +/* ---------------------------------------------------------------------- */ + +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; +} + +/* ---------------------------------------------------------------------- */ + +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; +} + +/* ---------------------------------------------------------------------- */ + +void PairTracker::pack_id1(int n, int i, int j, double * data) +{ + tagint *tag = atom->tag; + output_data[n] = tag[i]; +} + +/* ---------------------------------------------------------------------- */ + +void PairTracker::pack_id2(int n, int i, int j, double * data) +{ + tagint *tag = atom->tag; + output_data[n] = tag[j]; +} + +/* ---------------------------------------------------------------------- */ + +void PairTracker::pack_x(int n, int i, int j, double * data) +{ + double **x = atom->x; + output_data[n] = (x[i][0] + x[j][0])*0.5; +} + +/* ---------------------------------------------------------------------- */ + +void PairTracker::pack_y(int n, int i, int j, double * data) +{ + double **x = atom->x; + output_data[n] = (x[i][1] + x[j][1])*0.5; +} + +/* ---------------------------------------------------------------------- */ + +void PairTracker::pack_z(int n, int i, int j, double * data) +{ + double **x = atom->x; + output_data[n] = (x[i][2] + x[j][2])*0.5; +} + +/* ---------------------------------------------------------------------- */ + +void PairTracker::pack_rmin(int n, int i, int j, double * data) +{ + double rmin = data[3]; + output_data[n] = rmin; +} + +/* ---------------------------------------------------------------------- */ + +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); +} \ No newline at end of file diff --git a/src/MISC/pair_tracker.h b/src/MISC/pair_tracker.h index c6825c410e..3cb9344212 100644 --- a/src/MISC/pair_tracker.h +++ b/src/MISC/pair_tracker.h @@ -51,11 +51,33 @@ class PairTracker : public Pair { double *maxrad_dynamic, *maxrad_frozen; int freeze_group_bit; + char *id_fix_store_local; class FixDummy *fix_dummy; class FixNeighHistory *fix_history; - class FixPairTracker *fix_pair_tracker; + class FixStoreLocal *fix_store_local; + int **type_filter; + double tmin; + + int nvalues, ncount; + double *output_data; + typedef void (PairTracker::*FnPtrPack)(int, int, int, double *); + FnPtrPack *pack_choice; // ptrs to pack functions + + void pack_id1(int, int, int, double *); + void pack_id2(int, int, int, double *); + void pack_time_created(int, int, int, double *); + void pack_time_broken(int, int, int, double *); + void pack_time_total(int, int, int, double *); + void pack_x(int, int, int, double *); + void pack_y(int, int, int, double *); + void pack_z(int, int, int, double *); + 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(); }; @@ -72,20 +94,37 @@ 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 pair tracker command + +Self-explanatory. + E: Incorrect args for pair coefficients Self-explanatory. Check the input script or data file. +E: Must request at least one value to output + +Must include at least one bond property to store in fix store/local + E: Pair tracker requires atom attribute radius for finite cutoffs The atom style defined does not have these attributes. +E: Pair tracker incompatible with granular pairstyles that extend beyond contact + +Self-explanatory. + E: Could not find pair fix neigh history ID The associated fix neigh/history is missing -E: Cannot use pair tracker without fix pair/tracker +E: Cannot use pair tracker without fix store/local -This pairstyle requires one to define a pair/tracker fix +The associated fix store/local does not exist + +E: Inconsistent number of output variables in fix store/local + +The number of values specified in fix store/local disagrees with +the number of values requested in pair tracker */ diff --git a/src/MOLECULE/bond_quartic.cpp b/src/MOLECULE/bond_quartic.cpp index b3eea79064..40e2583e63 100644 --- a/src/MOLECULE/bond_quartic.cpp +++ b/src/MOLECULE/bond_quartic.cpp @@ -34,6 +34,7 @@ using namespace LAMMPS_NS; BondQuartic::BondQuartic(LAMMPS *lmp) : Bond(lmp) { + partial_flag = 1; TWO_1_3 = pow(2.0,(1.0/3.0)); } diff --git a/src/Makefile b/src/Makefile index 1527adfd07..015a96775a 100644 --- a/src/Makefile +++ b/src/Makefile @@ -53,6 +53,7 @@ PACKAGE = \ awpmd \ bocs \ body \ + bpm \ brownian \ cg-dna \ cg-sdk \ @@ -147,7 +148,8 @@ PACKMOST = \ asphere \ bocs \ body \ - brownian \ + bpm + brownian \ cg-dna \ cg-sdk \ class2 \ diff --git a/src/OPENMP/fix_neigh_history_omp.cpp b/src/OPENMP/fix_neigh_history_omp.cpp index 50599b2669..086ddb1c4f 100644 --- a/src/OPENMP/fix_neigh_history_omp.cpp +++ b/src/OPENMP/fix_neigh_history_omp.cpp @@ -576,7 +576,7 @@ void FixNeighHistoryOMP::post_neighbor() for (jj = 0; jj < jnum; jj++) { j = jlist[jj]; - rflag = sbmask(j); + rflag = histmask(j); j &= NEIGHMASK; jlist[jj] = j; diff --git a/src/OPENMP/npair_half_size_bin_newtoff_omp.cpp b/src/OPENMP/npair_half_size_bin_newtoff_omp.cpp index 445c2ff286..07082868f6 100644 --- a/src/OPENMP/npair_half_size_bin_newtoff_omp.cpp +++ b/src/OPENMP/npair_half_size_bin_newtoff_omp.cpp @@ -15,7 +15,10 @@ #include "npair_half_size_bin_newtoff_omp.h" #include "atom.h" +#include "atom_vec.h" +#include "domain.h" #include "error.h" +#include "molecule.h" #include "my_page.h" #include "neigh_list.h" #include "npair_omp.h" @@ -40,8 +43,10 @@ NPairHalfSizeBinNewtoffOmp::NPairHalfSizeBinNewtoffOmp(LAMMPS *lmp) : void NPairHalfSizeBinNewtoffOmp::build(NeighList *list) { const int nlocal = (includegroup) ? atom->nfirst : atom->nlocal; + const int molecular = atom->molecular; + const int moltemplate = (molecular == Atom::TEMPLATE) ? 1 : 0; const int history = list->history; - const int mask_history = 3 << SBBITS; + const int mask_history = 1 << HISTBITS; NPAIR_OMP_INIT; @@ -50,7 +55,8 @@ void NPairHalfSizeBinNewtoffOmp::build(NeighList *list) #endif NPAIR_OMP_SETUP(nlocal); - int i,j,k,n,ibin; + int i,j,jh,k,n,ibin,which,imol,iatom; + tagint tagprev; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; double radi,radsum,cutsq; int *neighptr; @@ -61,7 +67,14 @@ void NPairHalfSizeBinNewtoffOmp::build(NeighList *list) double *radius = atom->radius; int *type = atom->type; int *mask = atom->mask; + tagint *tag = atom->tag; tagint *molecule = atom->molecule; + tagint **special = atom->special; + int **nspecial = atom->nspecial; + + int *molindex = atom->molindex; + int *molatom = atom->molatom; + Molecule **onemols = atom->avec->onemols; int *ilist = list->ilist; int *numneigh = list->numneigh; @@ -81,6 +94,11 @@ void NPairHalfSizeBinNewtoffOmp::build(NeighList *list) ztmp = x[i][2]; radi = radius[i]; ibin = atom2bin[i]; + if (moltemplate) { + imol = molindex[i]; + iatom = molatom[i]; + tagprev = tag[i] - iatom - 1; + } // loop over all atoms in surrounding bins in stencil including self // only store pair if i < j @@ -100,10 +118,23 @@ void NPairHalfSizeBinNewtoffOmp::build(NeighList *list) cutsq = (radsum+skin) * (radsum+skin); if (rsq <= cutsq) { + jh = j; if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; + jh = jh ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >=0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = jh; + else if (domain->minimum_image_check(delx,dely,delz)) + neighptr[n++] = jh; + else if (which > 0) neighptr[n++] = jh ^ (which << SBBITS); + } else neighptr[n++] = jh; } } } diff --git a/src/OPENMP/npair_half_size_bin_newton_omp.cpp b/src/OPENMP/npair_half_size_bin_newton_omp.cpp index be110f07e0..42a74f13aa 100644 --- a/src/OPENMP/npair_half_size_bin_newton_omp.cpp +++ b/src/OPENMP/npair_half_size_bin_newton_omp.cpp @@ -15,7 +15,10 @@ #include "npair_half_size_bin_newton_omp.h" #include "atom.h" +#include "atom_vec.h" +#include "domain.h" #include "error.h" +#include "molecule.h" #include "my_page.h" #include "neigh_list.h" #include "npair_omp.h" @@ -39,8 +42,10 @@ NPairHalfSizeBinNewtonOmp::NPairHalfSizeBinNewtonOmp(LAMMPS *lmp) : void NPairHalfSizeBinNewtonOmp::build(NeighList *list) { const int nlocal = (includegroup) ? atom->nfirst : atom->nlocal; + const int molecular = atom->molecular; + const int moltemplate = (molecular == Atom::TEMPLATE) ? 1 : 0; const int history = list->history; - const int mask_history = 3 << SBBITS; + const int mask_history = 1 << HISTBITS; NPAIR_OMP_INIT; @@ -49,7 +54,8 @@ void NPairHalfSizeBinNewtonOmp::build(NeighList *list) #endif NPAIR_OMP_SETUP(nlocal); - int i,j,k,n,ibin; + int i,j,jh,k,n,ibin,which,imol,iatom; + tagint tagprev; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; double radi,radsum,cutsq; int *neighptr; @@ -58,7 +64,14 @@ void NPairHalfSizeBinNewtonOmp::build(NeighList *list) double *radius = atom->radius; int *type = atom->type; int *mask = atom->mask; + tagint *tag = atom->tag; tagint *molecule = atom->molecule; + tagint **special = atom->special; + int **nspecial = atom->nspecial; + + int *molindex = atom->molindex; + int *molatom = atom->molatom; + Molecule **onemols = atom->avec->onemols; int *ilist = list->ilist; int *numneigh = list->numneigh; @@ -77,6 +90,11 @@ void NPairHalfSizeBinNewtonOmp::build(NeighList *list) ytmp = x[i][1]; ztmp = x[i][2]; radi = radius[i]; + if (moltemplate) { + imol = molindex[i]; + iatom = molatom[i]; + tagprev = tag[i] - iatom - 1; + } // loop over rest of atoms in i's bin, ghosts are at end of linked list // if j is owned atom, store it, since j is beyond i in linked list @@ -101,10 +119,23 @@ void NPairHalfSizeBinNewtonOmp::build(NeighList *list) cutsq = (radsum+skin) * (radsum+skin); if (rsq <= cutsq) { + jh = j; if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; + jh = jh ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >=0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = jh; + else if (domain->minimum_image_check(delx,dely,delz)) + neighptr[n++] = jh; + else if (which > 0) neighptr[n++] = jh ^ (which << SBBITS); + } else neighptr[n++] = jh; } } @@ -123,10 +154,23 @@ void NPairHalfSizeBinNewtonOmp::build(NeighList *list) cutsq = (radsum+skin) * (radsum+skin); if (rsq <= cutsq) { + jh = j; if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; + jh = jh ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >=0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = jh; + else if (domain->minimum_image_check(delx,dely,delz)) + neighptr[n++] = jh; + else if (which > 0) neighptr[n++] = jh ^ (which << SBBITS); + } else neighptr[n++] = jh; } } } diff --git a/src/OPENMP/npair_half_size_bin_newton_tri_omp.cpp b/src/OPENMP/npair_half_size_bin_newton_tri_omp.cpp index bc3bda1181..5a77de0796 100644 --- a/src/OPENMP/npair_half_size_bin_newton_tri_omp.cpp +++ b/src/OPENMP/npair_half_size_bin_newton_tri_omp.cpp @@ -15,7 +15,10 @@ #include "npair_half_size_bin_newton_tri_omp.h" #include "atom.h" +#include "atom_vec.h" +#include "domain.h" #include "error.h" +#include "molecule.h" #include "my_page.h" #include "neigh_list.h" #include "npair_omp.h" @@ -39,8 +42,10 @@ NPairHalfSizeBinNewtonTriOmp::NPairHalfSizeBinNewtonTriOmp(LAMMPS *lmp) : void NPairHalfSizeBinNewtonTriOmp::build(NeighList *list) { const int nlocal = (includegroup) ? atom->nfirst : atom->nlocal; + const int molecular = atom->molecular; + const int moltemplate = (molecular == Atom::TEMPLATE) ? 1 : 0; const int history = list->history; - const int mask_history = 3 << SBBITS; + const int mask_history = 1 << HISTBITS; NPAIR_OMP_INIT; #if defined(_OPENMP) @@ -48,7 +53,8 @@ void NPairHalfSizeBinNewtonTriOmp::build(NeighList *list) #endif NPAIR_OMP_SETUP(nlocal); - int i,j,k,n,ibin; + int i,j,jh,k,n,ibin,which,imol,iatom; + tagint tagprev; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; double radi,radsum,cutsq; int *neighptr; @@ -59,7 +65,14 @@ void NPairHalfSizeBinNewtonTriOmp::build(NeighList *list) double *radius = atom->radius; int *type = atom->type; int *mask = atom->mask; + tagint *tag = atom->tag; tagint *molecule = atom->molecule; + tagint **special = atom->special; + int **nspecial = atom->nspecial; + + int *molindex = atom->molindex; + int *molatom = atom->molatom; + Molecule **onemols = atom->avec->onemols; int *ilist = list->ilist; int *numneigh = list->numneigh; @@ -78,6 +91,11 @@ void NPairHalfSizeBinNewtonTriOmp::build(NeighList *list) ytmp = x[i][1]; ztmp = x[i][2]; radi = radius[i]; + if (moltemplate) { + imol = molindex[i]; + iatom = molatom[i]; + tagprev = tag[i] - iatom - 1; + } // loop over all atoms in bins in stencil // pairs for atoms j "below" i are excluded @@ -107,10 +125,23 @@ void NPairHalfSizeBinNewtonTriOmp::build(NeighList *list) cutsq = (radsum+skin) * (radsum+skin); if (rsq <= cutsq) { + jh = j; if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; + jh = jh ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >=0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = jh; + else if (domain->minimum_image_check(delx,dely,delz)) + neighptr[n++] = jh; + else if (which > 0) neighptr[n++] = jh ^ (which << SBBITS); + } else neighptr[n++] = jh; } } } diff --git a/src/OPENMP/npair_half_size_multi_newtoff_omp.cpp b/src/OPENMP/npair_half_size_multi_newtoff_omp.cpp index da2d7a7590..d58d250209 100644 --- a/src/OPENMP/npair_half_size_multi_newtoff_omp.cpp +++ b/src/OPENMP/npair_half_size_multi_newtoff_omp.cpp @@ -15,7 +15,10 @@ #include "npair_half_size_multi_newtoff_omp.h" #include "atom.h" +#include "atom_vec.h" +#include "domain.h" #include "error.h" +#include "molecule.h" #include "my_page.h" #include "neighbor.h" #include "neigh_list.h" @@ -41,8 +44,10 @@ NPairHalfSizeMultiNewtoffOmp::NPairHalfSizeMultiNewtoffOmp(LAMMPS *lmp) : NPair( void NPairHalfSizeMultiNewtoffOmp::build(NeighList *list) { const int nlocal = (includegroup) ? atom->nfirst : atom->nlocal; + const int molecular = atom->molecular; + const int moltemplate = (molecular == Atom::TEMPLATE) ? 1 : 0; const int history = list->history; - const int mask_history = 3 << SBBITS; + const int mask_history = 1 << HISTBITS; NPAIR_OMP_INIT; #if defined(_OPENMP) @@ -50,7 +55,9 @@ void NPairHalfSizeMultiNewtoffOmp::build(NeighList *list) #endif NPAIR_OMP_SETUP(nlocal); - int i,j,k,n,itype,jtype,icollection,jcollection,ibin,jbin,ns; + int i,j,jh,k,n,itype,jtype,icollection,jcollection,ibin,jbin,ns; + int which,imol,iatom; + tagint tagprev; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; double radi,radsum,cutdistsq; int *neighptr,*s; @@ -63,7 +70,14 @@ void NPairHalfSizeMultiNewtoffOmp::build(NeighList *list) double *radius = atom->radius; int *type = atom->type; int *mask = atom->mask; + tagint *tag = atom->tag; tagint *molecule = atom->molecule; + tagint **special = atom->special; + int **nspecial = atom->nspecial; + + int *molindex = atom->molindex; + int *molatom = atom->molatom; + Molecule **onemols = atom->avec->onemols; int *ilist = list->ilist; int *numneigh = list->numneigh; @@ -84,6 +98,11 @@ void NPairHalfSizeMultiNewtoffOmp::build(NeighList *list) ytmp = x[i][1]; ztmp = x[i][2]; radi = radius[i]; + if (moltemplate) { + imol = molindex[i]; + iatom = molatom[i]; + tagprev = tag[i] - iatom - 1; + } ibin = atom2bin[i]; @@ -104,27 +123,40 @@ void NPairHalfSizeMultiNewtoffOmp::build(NeighList *list) ns = nstencil_multi[icollection][jcollection]; for (k = 0; k < ns; k++) { - js = binhead_multi[jcollection][jbin + s[k]]; - for (j = js; j >=0; j = bins[j]) { - if (j <= i) continue; + js = binhead_multi[jcollection][jbin + s[k]]; + for (j = js; j >=0; j = bins[j]) { + if (j <= i) continue; jtype = type[j]; - if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue; + if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue; - delx = xtmp - x[j][0]; - dely = ytmp - x[j][1]; - delz = ztmp - x[j][2]; - rsq = delx*delx + dely*dely + delz*delz; - radsum = radi + radius[j]; - cutdistsq = (radsum+skin) * (radsum+skin); + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + radsum = radi + radius[j]; + cutdistsq = (radsum+skin) * (radsum+skin); - if (rsq <= cutdistsq) { - if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; - } - } + if (rsq <= cutdistsq) { + jh = j; + if (history && rsq < radsum*radsum) + jh = jh ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >=0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = jh; + else if (domain->minimum_image_check(delx,dely,delz)) + neighptr[n++] = jh; + else if (which > 0) neighptr[n++] = jh ^ (which << SBBITS); + } else neighptr[n++] = jh; + } + } } } diff --git a/src/OPENMP/npair_half_size_multi_newton_omp.cpp b/src/OPENMP/npair_half_size_multi_newton_omp.cpp index cdc68e1b42..df3d7abc9f 100644 --- a/src/OPENMP/npair_half_size_multi_newton_omp.cpp +++ b/src/OPENMP/npair_half_size_multi_newton_omp.cpp @@ -15,7 +15,10 @@ #include "npair_half_size_multi_newton_omp.h" #include "atom.h" +#include "atom_vec.h" +#include "domain.h" #include "error.h" +#include "molecule.h" #include "my_page.h" #include "neighbor.h" #include "neigh_list.h" @@ -40,8 +43,10 @@ NPairHalfSizeMultiNewtonOmp::NPairHalfSizeMultiNewtonOmp(LAMMPS *lmp) : NPair(lm void NPairHalfSizeMultiNewtonOmp::build(NeighList *list) { const int nlocal = (includegroup) ? atom->nfirst : atom->nlocal; + const int molecular = atom->molecular; + const int moltemplate = (molecular == Atom::TEMPLATE) ? 1 : 0; const int history = list->history; - const int mask_history = 3 << SBBITS; + const int mask_history = 1 << HISTBITS; NPAIR_OMP_INIT; #if defined(_OPENMP) @@ -49,7 +54,9 @@ void NPairHalfSizeMultiNewtonOmp::build(NeighList *list) #endif NPAIR_OMP_SETUP(nlocal); - int i,j,k,n,itype,jtype,icollection,jcollection,ibin,jbin,ns; + int i,j,jh,k,n,itype,jtype,icollection,jcollection,ibin,jbin,ns; + int which,imol,iatom; + tagint tagprev; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; double radi,radsum,cutdistsq; int *neighptr,*s; @@ -62,7 +69,14 @@ void NPairHalfSizeMultiNewtonOmp::build(NeighList *list) double *radius = atom->radius; int *type = atom->type; int *mask = atom->mask; + tagint *tag = atom->tag; tagint *molecule = atom->molecule; + tagint **special = atom->special; + int **nspecial = atom->nspecial; + + int *molindex = atom->molindex; + int *molatom = atom->molatom; + Molecule **onemols = atom->avec->onemols; int *ilist = list->ilist; int *numneigh = list->numneigh; @@ -83,6 +97,11 @@ void NPairHalfSizeMultiNewtonOmp::build(NeighList *list) ytmp = x[i][1]; ztmp = x[i][2]; radi = radius[i]; + if (moltemplate) { + imol = molindex[i]; + iatom = molatom[i]; + tagprev = tag[i] - iatom - 1; + } ibin = atom2bin[i]; @@ -107,7 +126,7 @@ void NPairHalfSizeMultiNewtonOmp::build(NeighList *list) // if j is owned atom, store it if j > i // if j is ghost, only store if j coords are "above and to the right" of i - for (j = js; j >= 0; j = bins[j]) { + for (j = js; j >= 0; j = bins[j]) { if(icollection != jcollection and j < i) continue; if (j >= nlocal) { @@ -121,19 +140,32 @@ void NPairHalfSizeMultiNewtonOmp::build(NeighList *list) jtype = type[j]; if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue; - delx = xtmp - x[j][0]; - dely = ytmp - x[j][1]; - delz = ztmp - x[j][2]; - rsq = delx*delx + dely*dely + delz*delz; - radsum = radi + radius[j]; - cutdistsq = (radsum+skin) * (radsum+skin); + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + radsum = radi + radius[j]; + cutdistsq = (radsum+skin) * (radsum+skin); - if (rsq <= cutdistsq) { - if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; - } + if (rsq <= cutdistsq) { + jh = j; + if (history && rsq < radsum*radsum) + jh = jh ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >=0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = jh; + else if (domain->minimum_image_check(delx,dely,delz)) + neighptr[n++] = jh; + else if (which > 0) neighptr[n++] = jh ^ (which << SBBITS); + } else neighptr[n++] = jh; + } } } @@ -142,31 +174,43 @@ void NPairHalfSizeMultiNewtonOmp::build(NeighList *list) // stencil is half if i same size as j // stencil is full if i smaller than j - s = stencil_multi[icollection][jcollection]; - ns = nstencil_multi[icollection][jcollection]; + s = stencil_multi[icollection][jcollection]; + ns = nstencil_multi[icollection][jcollection]; - for (k = 0; k < ns; k++) { - js = binhead_multi[jcollection][jbin + s[k]]; - for (j = js; j >= 0; j = bins[j]) { + for (k = 0; k < ns; k++) { + js = binhead_multi[jcollection][jbin + s[k]]; + for (j = js; j >= 0; j = bins[j]) { jtype = type[j]; - if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue; + if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue; delx = xtmp - x[j][0]; - dely = ytmp - x[j][1]; - delz = ztmp - x[j][2]; - rsq = delx*delx + dely*dely + delz*delz; - radsum = radi + radius[j]; - cutdistsq = (radsum+skin) * (radsum+skin); + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + radsum = radi + radius[j]; + cutdistsq = (radsum+skin) * (radsum+skin); - if (rsq <= cutdistsq) { - if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; - } - } + if (rsq <= cutdistsq) { + if (history && rsq < radsum*radsum) + j = j ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >=0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = j; + else if (domain->minimum_image_check(delx,dely,delz)) + neighptr[n++] = j; + else if (which > 0) neighptr[n++] = j ^ (which << SBBITS); + } else neighptr[n++] = j; } + } + } } ilist[i] = i; diff --git a/src/OPENMP/npair_half_size_multi_newton_tri_omp.cpp b/src/OPENMP/npair_half_size_multi_newton_tri_omp.cpp index d38e52fe18..717e023f4a 100644 --- a/src/OPENMP/npair_half_size_multi_newton_tri_omp.cpp +++ b/src/OPENMP/npair_half_size_multi_newton_tri_omp.cpp @@ -15,7 +15,10 @@ #include "npair_half_size_multi_newton_tri_omp.h" #include "atom.h" +#include "atom_vec.h" +#include "domain.h" #include "error.h" +#include "molecule.h" #include "my_page.h" #include "neighbor.h" #include "neigh_list.h" @@ -41,8 +44,10 @@ NPairHalfSizeMultiNewtonTriOmp::NPairHalfSizeMultiNewtonTriOmp(LAMMPS *lmp) : void NPairHalfSizeMultiNewtonTriOmp::build(NeighList *list) { const int nlocal = (includegroup) ? atom->nfirst : atom->nlocal; + const int molecular = atom->molecular; + const int moltemplate = (molecular == Atom::TEMPLATE) ? 1 : 0; const int history = list->history; - const int mask_history = 3 << SBBITS; + const int mask_history = 1 << HISTBITS; NPAIR_OMP_INIT; #if defined(_OPENMP) @@ -50,7 +55,9 @@ void NPairHalfSizeMultiNewtonTriOmp::build(NeighList *list) #endif NPAIR_OMP_SETUP(nlocal); - int i,j,k,n,itype,jtype,icollection,jcollection,ibin,jbin,ns; + int i,j,jh,k,n,itype,jtype,icollection,jcollection,ibin,jbin,ns; + int which,imol,iatom; + tagint tagprev; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; double radi,radsum,cutdistsq; int *neighptr,*s; @@ -63,7 +70,14 @@ void NPairHalfSizeMultiNewtonTriOmp::build(NeighList *list) double *radius = atom->radius; int *type = atom->type; int *mask = atom->mask; + tagint *tag = atom->tag; tagint *molecule = atom->molecule; + tagint **special = atom->special; + int **nspecial = atom->nspecial; + + int *molindex = atom->molindex; + int *molatom = atom->molatom; + Molecule **onemols = atom->avec->onemols; int *ilist = list->ilist; int *numneigh = list->numneigh; @@ -84,6 +98,11 @@ void NPairHalfSizeMultiNewtonTriOmp::build(NeighList *list) ytmp = x[i][1]; ztmp = x[i][2]; radi = radius[i]; + if (moltemplate) { + imol = molindex[i]; + iatom = molatom[i]; + tagprev = tag[i] - iatom - 1; + } ibin = atom2bin[i]; @@ -104,12 +123,12 @@ void NPairHalfSizeMultiNewtonTriOmp::build(NeighList *list) // (equal zyx and j <= i) // latter excludes self-self interaction but allows superposed atoms - s = stencil_multi[icollection][jcollection]; - ns = nstencil_multi[icollection][jcollection]; + s = stencil_multi[icollection][jcollection]; + ns = nstencil_multi[icollection][jcollection]; - for (k = 0; k < ns; k++) { - js = binhead_multi[jcollection][jbin + s[k]]; - for (j = js; j >= 0; j = bins[j]) { + for (k = 0; k < ns; k++) { + js = binhead_multi[jcollection][jbin + s[k]]; + for (j = js; j >= 0; j = bins[j]) { // if same size (same collection), use half stencil if(cutcollectionsq[icollection][icollection] == cutcollectionsq[jcollection][jcollection]){ @@ -126,21 +145,34 @@ void NPairHalfSizeMultiNewtonTriOmp::build(NeighList *list) jtype = type[j]; if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue; - delx = xtmp - x[j][0]; - dely = ytmp - x[j][1]; - delz = ztmp - x[j][2]; - rsq = delx*delx + dely*dely + delz*delz; - radsum = radi + radius[j]; - cutdistsq = (radsum+skin) * (radsum+skin); + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + radsum = radi + radius[j]; + cutdistsq = (radsum+skin) * (radsum+skin); - if (rsq <= cutdistsq) { - if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; - } - } + if (rsq <= cutdistsq) { + jh = j; + if (history && rsq < radsum*radsum) + jh = jh ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >=0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = jh; + else if (domain->minimum_image_check(delx,dely,delz)) + neighptr[n++] = jh; + else if (which > 0) neighptr[n++] = jh ^ (which << SBBITS); + } else neighptr[n++] = jh; } + } + } } ilist[i] = i; diff --git a/src/OPENMP/npair_half_size_multi_old_newtoff_omp.cpp b/src/OPENMP/npair_half_size_multi_old_newtoff_omp.cpp index eadcde2154..39210f1231 100644 --- a/src/OPENMP/npair_half_size_multi_old_newtoff_omp.cpp +++ b/src/OPENMP/npair_half_size_multi_old_newtoff_omp.cpp @@ -18,6 +18,8 @@ #include "neigh_list.h" #include "atom.h" #include "atom_vec.h" +#include "domain.h" +#include "molecule.h" #include "my_page.h" #include "error.h" @@ -40,8 +42,10 @@ NPairHalfSizeMultiOldNewtoffOmp::NPairHalfSizeMultiOldNewtoffOmp(LAMMPS *lmp) : void NPairHalfSizeMultiOldNewtoffOmp::build(NeighList *list) { const int nlocal = (includegroup) ? atom->nfirst : atom->nlocal; + const int molecular = atom->molecular; + const int moltemplate = (molecular == Atom::TEMPLATE) ? 1 : 0; const int history = list->history; - const int mask_history = 3 << SBBITS; + const int mask_history = 1 << HISTBITS; NPAIR_OMP_INIT; #if defined(_OPENMP) @@ -49,7 +53,8 @@ void NPairHalfSizeMultiOldNewtoffOmp::build(NeighList *list) #endif NPAIR_OMP_SETUP(nlocal); - int i,j,k,n,itype,jtype,ibin,ns; + int i,j,jh,k,n,itype,jtype,ibin,ns,which,imol,iatom; + tagint tagprev; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; double radi,radsum,cutdistsq; int *neighptr,*s; @@ -59,7 +64,14 @@ void NPairHalfSizeMultiOldNewtoffOmp::build(NeighList *list) double *radius = atom->radius; int *type = atom->type; int *mask = atom->mask; + tagint *tag = atom->tag; tagint *molecule = atom->molecule; + tagint **special = atom->special; + int **nspecial = atom->nspecial; + + int *molindex = atom->molindex; + int *molatom = atom->molatom; + Molecule **onemols = atom->avec->onemols; int *ilist = list->ilist; int *numneigh = list->numneigh; @@ -79,6 +91,11 @@ void NPairHalfSizeMultiOldNewtoffOmp::build(NeighList *list) ytmp = x[i][1]; ztmp = x[i][2]; radi = radius[i]; + if (moltemplate) { + imol = molindex[i]; + iatom = molatom[i]; + tagprev = tag[i] - iatom - 1; + } // loop over all atoms in other bins in stencil including self // only store pair if i < j @@ -107,10 +124,23 @@ void NPairHalfSizeMultiOldNewtoffOmp::build(NeighList *list) cutdistsq = (radsum+skin) * (radsum+skin); if (rsq <= cutdistsq) { + jh = j; if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; + jh = jh ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >=0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = jh; + else if (domain->minimum_image_check(delx,dely,delz)) + neighptr[n++] = jh; + else if (which > 0) neighptr[n++] = jh ^ (which << SBBITS); + } else neighptr[n++] = jh; } } } diff --git a/src/OPENMP/npair_half_size_multi_old_newton_omp.cpp b/src/OPENMP/npair_half_size_multi_old_newton_omp.cpp index eb154dce3a..11a2441990 100644 --- a/src/OPENMP/npair_half_size_multi_old_newton_omp.cpp +++ b/src/OPENMP/npair_half_size_multi_old_newton_omp.cpp @@ -18,6 +18,8 @@ #include "neigh_list.h" #include "atom.h" #include "atom_vec.h" +#include "domain.h" +#include "molecule.h" #include "my_page.h" #include "error.h" @@ -39,8 +41,10 @@ NPairHalfSizeMultiOldNewtonOmp::NPairHalfSizeMultiOldNewtonOmp(LAMMPS *lmp) : void NPairHalfSizeMultiOldNewtonOmp::build(NeighList *list) { const int nlocal = (includegroup) ? atom->nfirst : atom->nlocal; + const int molecular = atom->molecular; + const int moltemplate = (molecular == Atom::TEMPLATE) ? 1 : 0; const int history = list->history; - const int mask_history = 3 << SBBITS; + const int mask_history = 1 << HISTBITS; NPAIR_OMP_INIT; #if defined(_OPENMP) @@ -48,7 +52,8 @@ void NPairHalfSizeMultiOldNewtonOmp::build(NeighList *list) #endif NPAIR_OMP_SETUP(nlocal); - int i,j,k,n,itype,jtype,ibin,ns; + int i,j,jh,k,n,itype,jtype,ibin,ns,which,imol,iatom; + tagint tagprev; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; double radi,radsum,cutdistsq; int *neighptr,*s; @@ -58,7 +63,14 @@ void NPairHalfSizeMultiOldNewtonOmp::build(NeighList *list) double *radius = atom->radius; int *type = atom->type; int *mask = atom->mask; + tagint *tag = atom->tag; tagint *molecule = atom->molecule; + tagint **special = atom->special; + int **nspecial = atom->nspecial; + + int *molindex = atom->molindex; + int *molatom = atom->molatom; + Molecule **onemols = atom->avec->onemols; int *ilist = list->ilist; int *numneigh = list->numneigh; @@ -78,6 +90,11 @@ void NPairHalfSizeMultiOldNewtonOmp::build(NeighList *list) ytmp = x[i][1]; ztmp = x[i][2]; radi = radius[i]; + if (moltemplate) { + imol = molindex[i]; + iatom = molatom[i]; + tagprev = tag[i] - iatom - 1; + } // loop over rest of atoms in i's bin, ghosts are at end of linked list // if j is owned atom, store it, since j is beyond i in linked list @@ -102,10 +119,23 @@ void NPairHalfSizeMultiOldNewtonOmp::build(NeighList *list) cutdistsq = (radsum+skin) * (radsum+skin); if (rsq <= cutdistsq) { + jh = j; if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; + jh = jh ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >=0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = jh; + else if (domain->minimum_image_check(delx,dely,delz)) + neighptr[n++] = jh; + else if (which > 0) neighptr[n++] = jh ^ (which << SBBITS); + } else neighptr[n++] = jh; } } @@ -132,10 +162,23 @@ void NPairHalfSizeMultiOldNewtonOmp::build(NeighList *list) cutdistsq = (radsum+skin) * (radsum+skin); if (rsq <= cutdistsq) { + jh = j; if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; + jh = jh ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >=0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = jh; + else if (domain->minimum_image_check(delx,dely,delz)) + neighptr[n++] = jh; + else if (which > 0) neighptr[n++] = jh ^ (which << SBBITS); + } else neighptr[n++] = jh; } } } diff --git a/src/OPENMP/npair_half_size_multi_old_newton_tri_omp.cpp b/src/OPENMP/npair_half_size_multi_old_newton_tri_omp.cpp index e67c1463f7..03f9f6f8eb 100644 --- a/src/OPENMP/npair_half_size_multi_old_newton_tri_omp.cpp +++ b/src/OPENMP/npair_half_size_multi_old_newton_tri_omp.cpp @@ -18,6 +18,8 @@ #include "neigh_list.h" #include "atom.h" #include "atom_vec.h" +#include "domain.h" +#include "molecule.h" #include "my_page.h" #include "error.h" @@ -39,8 +41,10 @@ NPairHalfSizeMultiOldNewtonTriOmp::NPairHalfSizeMultiOldNewtonTriOmp(LAMMPS *lmp void NPairHalfSizeMultiOldNewtonTriOmp::build(NeighList *list) { const int nlocal = (includegroup) ? atom->nfirst : atom->nlocal; + const int molecular = atom->molecular; + const int moltemplate = (molecular == Atom::TEMPLATE) ? 1 : 0; const int history = list->history; - const int mask_history = 3 << SBBITS; + const int mask_history = 1 << HISTBITS; NPAIR_OMP_INIT; #if defined(_OPENMP) @@ -48,7 +52,8 @@ void NPairHalfSizeMultiOldNewtonTriOmp::build(NeighList *list) #endif NPAIR_OMP_SETUP(nlocal); - int i,j,k,n,itype,jtype,ibin,ns; + int i,j,jh,k,n,itype,jtype,ibin,ns,which,imol,iatom; + tagint tagprev; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; double radi,radsum,cutdistsq; int *neighptr,*s; @@ -58,7 +63,14 @@ void NPairHalfSizeMultiOldNewtonTriOmp::build(NeighList *list) double *radius = atom->radius; int *type = atom->type; int *mask = atom->mask; + tagint *tag = atom->tag; tagint *molecule = atom->molecule; + tagint **special = atom->special; + int **nspecial = atom->nspecial; + + int *molindex = atom->molindex; + int *molatom = atom->molatom; + Molecule **onemols = atom->avec->onemols; int *ilist = list->ilist; int *numneigh = list->numneigh; @@ -78,6 +90,11 @@ void NPairHalfSizeMultiOldNewtonTriOmp::build(NeighList *list) ytmp = x[i][1]; ztmp = x[i][2]; radi = radius[i]; + if (moltemplate) { + imol = molindex[i]; + iatom = molatom[i]; + tagprev = tag[i] - iatom - 1; + } // loop over all atoms in bins, including self, in stencil // skip if i,j neighbor cutoff is less than bin distance @@ -115,10 +132,23 @@ void NPairHalfSizeMultiOldNewtonTriOmp::build(NeighList *list) cutdistsq = (radsum+skin) * (radsum+skin); if (rsq <= cutdistsq) { + jh = j; if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; + jh = jh ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >=0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = jh; + else if (domain->minimum_image_check(delx,dely,delz)) + neighptr[n++] = jh; + else if (which > 0) neighptr[n++] = jh ^ (which << SBBITS); + } else neighptr[n++] = jh; } } } diff --git a/src/OPENMP/npair_half_size_nsq_newtoff_omp.cpp b/src/OPENMP/npair_half_size_nsq_newtoff_omp.cpp index f182492efe..7f4b22e729 100644 --- a/src/OPENMP/npair_half_size_nsq_newtoff_omp.cpp +++ b/src/OPENMP/npair_half_size_nsq_newtoff_omp.cpp @@ -15,7 +15,10 @@ #include "npair_half_size_nsq_newtoff_omp.h" #include "atom.h" +#include "atom_vec.h" +#include "domain.h" #include "error.h" +#include "molecule.h" #include "group.h" #include "my_page.h" #include "neigh_list.h" @@ -42,8 +45,10 @@ void NPairHalfSizeNsqNewtoffOmp::build(NeighList *list) { const int nlocal = (includegroup) ? atom->nfirst : atom->nlocal; const int bitmask = (includegroup) ? group->bitmask[includegroup] : 0; + const int molecular = atom->molecular; + const int moltemplate = (molecular == Atom::TEMPLATE) ? 1 : 0; const int history = list->history; - const int mask_history = 3 << SBBITS; + const int mask_history = 1 << HISTBITS; NPAIR_OMP_INIT; @@ -52,7 +57,8 @@ void NPairHalfSizeNsqNewtoffOmp::build(NeighList *list) #endif NPAIR_OMP_SETUP(nlocal); - int i,j,n; + int i,j,jh,n,which,imol,iatom; + tagint tagprev; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; double radi,radsum,cutsq; int *neighptr; @@ -61,9 +67,17 @@ void NPairHalfSizeNsqNewtoffOmp::build(NeighList *list) double *radius = atom->radius; int *type = atom->type; int *mask = atom->mask; + tagint *tag = atom->tag; tagint *molecule = atom->molecule; + tagint **special = atom->special; + int **nspecial = atom->nspecial; + int nall = atom->nlocal + atom->nghost; + int *molindex = atom->molindex; + int *molatom = atom->molatom; + Molecule **onemols = atom->avec->onemols; + int *ilist = list->ilist; int *numneigh = list->numneigh; int **firstneigh = list->firstneigh; @@ -81,6 +95,11 @@ void NPairHalfSizeNsqNewtoffOmp::build(NeighList *list) ytmp = x[i][1]; ztmp = x[i][2]; radi = radius[i]; + if (moltemplate) { + imol = molindex[i]; + iatom = molatom[i]; + tagprev = tag[i] - iatom - 1; + } // loop over remaining atoms, owned and ghost @@ -96,10 +115,23 @@ void NPairHalfSizeNsqNewtoffOmp::build(NeighList *list) cutsq = (radsum+skin) * (radsum+skin); if (rsq <= cutsq) { + jh = j; if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; + jh = jh ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >=0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = jh; + else if (domain->minimum_image_check(delx,dely,delz)) + neighptr[n++] = jh; + else if (which > 0) neighptr[n++] = jh ^ (which << SBBITS); + } else neighptr[n++] = jh; } } diff --git a/src/OPENMP/npair_half_size_nsq_newton_omp.cpp b/src/OPENMP/npair_half_size_nsq_newton_omp.cpp index fdea8f4468..9262b869af 100644 --- a/src/OPENMP/npair_half_size_nsq_newton_omp.cpp +++ b/src/OPENMP/npair_half_size_nsq_newton_omp.cpp @@ -15,7 +15,10 @@ #include "npair_half_size_nsq_newton_omp.h" #include "atom.h" +#include "atom_vec.h" +#include "domain.h" #include "error.h" +#include "molecule.h" #include "group.h" #include "my_page.h" #include "neigh_list.h" @@ -42,9 +45,11 @@ NPairHalfSizeNsqNewtonOmp::NPairHalfSizeNsqNewtonOmp(LAMMPS *lmp) : void NPairHalfSizeNsqNewtonOmp::build(NeighList *list) { const int nlocal = (includegroup) ? atom->nfirst : atom->nlocal; - const int bitmask = (includegroup) ? group->bitmask[includegroup] : 0;; + const int bitmask = (includegroup) ? group->bitmask[includegroup] : 0; + const int molecular = atom->molecular; + const int moltemplate = (molecular == Atom::TEMPLATE) ? 1 : 0; const int history = list->history; - const int mask_history = 3 << SBBITS; + const int mask_history = 1 << HISTBITS; NPAIR_OMP_INIT; @@ -53,7 +58,8 @@ void NPairHalfSizeNsqNewtonOmp::build(NeighList *list) #endif NPAIR_OMP_SETUP(nlocal); - int i,j,n,itag,jtag; + int i,j,jh,n,itag,jtag,which,imol,iatom; + tagint tagprev; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; double radi,radsum,cutsq; int *neighptr; @@ -64,6 +70,13 @@ void NPairHalfSizeNsqNewtonOmp::build(NeighList *list) int *type = atom->type; int *mask = atom->mask; tagint *molecule = atom->molecule; + tagint **special = atom->special; + int **nspecial = atom->nspecial; + + int *molindex = atom->molindex; + int *molatom = atom->molatom; + Molecule **onemols = atom->avec->onemols; + int nall = atom->nlocal + atom->nghost; int *ilist = list->ilist; @@ -84,6 +97,11 @@ void NPairHalfSizeNsqNewtonOmp::build(NeighList *list) ytmp = x[i][1]; ztmp = x[i][2]; radi = radius[i]; + if (moltemplate) { + imol = molindex[i]; + iatom = molatom[i]; + tagprev = tag[i] - iatom - 1; + } // loop over remaining atoms, owned and ghost @@ -115,10 +133,23 @@ void NPairHalfSizeNsqNewtonOmp::build(NeighList *list) cutsq = (radsum+skin) * (radsum+skin); if (rsq <= cutsq) { + jh = j; if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; + jh = jh ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >=0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = jh; + else if (domain->minimum_image_check(delx,dely,delz)) + neighptr[n++] = jh; + else if (which > 0) neighptr[n++] = jh ^ (which << SBBITS); + } else neighptr[n++] = jh; } } diff --git a/src/atom.cpp b/src/atom.cpp index 4135298673..ed7e95fe64 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -122,6 +122,7 @@ Atom::Atom(LAMMPS *lmp) : Pointers(lmp) omega = angmom = torque = nullptr; radius = rmass = nullptr; ellipsoid = line = tri = body = nullptr; + quat = nullptr; // molecular systems @@ -419,6 +420,8 @@ void Atom::peratom_create() add_peratom("tri",&tri,INT,0); add_peratom("body",&body,INT,0); + add_peratom("quat",&quat,DOUBLE,4); + // MOLECULE package add_peratom("molecule",&molecule,tagintsize,0); @@ -639,6 +642,7 @@ void Atom::set_atomflag_defaults() // identical list as 2nd customization in atom.h sphere_flag = ellipsoid_flag = line_flag = tri_flag = body_flag = 0; + quat_flag = 0; peri_flag = electron_flag = 0; wavepacket_flag = sph_flag = 0; molecule_flag = molindex_flag = molatom_flag = 0; @@ -2660,6 +2664,10 @@ length of the data area, and a short description. - int - 1 - 1 if the particle is a body particle, 0 if not + * - quat + - double + - 4 + - four quaternion components of the particles * - i_name - int - 1 @@ -2715,6 +2723,7 @@ void *Atom::extract(const char *name) if (strcmp(name,"line") == 0) return (void *) line; if (strcmp(name,"tri") == 0) return (void *) tri; if (strcmp(name,"body") == 0) return (void *) body; + if (strcmp(name,"quat") == 0) return (void *) quat; if (strcmp(name,"vfrac") == 0) return (void *) vfrac; if (strcmp(name,"s0") == 0) return (void *) s0; @@ -2837,6 +2846,7 @@ int Atom::extract_datatype(const char *name) if (strcmp(name,"line") == 0) return LAMMPS_INT; if (strcmp(name,"tri") == 0) return LAMMPS_INT; if (strcmp(name,"body") == 0) return LAMMPS_INT; + if (strcmp(name,"quat") == 0) return LAMMPS_DOUBLE_2D; if (strcmp(name,"vfrac") == 0) return LAMMPS_DOUBLE; if (strcmp(name,"s0") == 0) return LAMMPS_DOUBLE; diff --git a/src/atom.h b/src/atom.h index a16f1e2752..7e80151ef4 100644 --- a/src/atom.h +++ b/src/atom.h @@ -79,6 +79,7 @@ class Atom : protected Pointers { double *radius; double **omega, **angmom, **torque; int *ellipsoid, *line, *tri, *body; + double **quat; // molecular systems @@ -180,7 +181,7 @@ class Atom : protected Pointers { int molecule_flag, molindex_flag, molatom_flag; int q_flag, mu_flag; - int rmass_flag, radius_flag, omega_flag, torque_flag, angmom_flag; + int rmass_flag, radius_flag, omega_flag, torque_flag, angmom_flag, quat_flag; int vfrac_flag, spin_flag, eradius_flag, ervel_flag, erforce_flag; int cs_flag, csforce_flag, vforce_flag, ervelforce_flag, etag_flag; int rho_flag, esph_flag, cv_flag, vest_flag; diff --git a/src/atom_vec_sphere.cpp b/src/atom_vec_sphere.cpp index 5a69944501..02db644a2b 100644 --- a/src/atom_vec_sphere.cpp +++ b/src/atom_vec_sphere.cpp @@ -6,7 +6,7 @@ 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 distributead under + 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. diff --git a/src/bond.cpp b/src/bond.cpp index cc13ad6b86..e07e184cc9 100644 --- a/src/bond.cpp +++ b/src/bond.cpp @@ -42,8 +42,11 @@ Bond::Bond(LAMMPS *lmp) : Pointers(lmp) virial[0] = virial[1] = virial[2] = virial[3] = virial[4] = virial[5] = 0.0; writedata = 1; + comm_forward = comm_reverse = comm_reverse_off = 0; + allocated = 0; suffix_flag = Suffix::NONE; + partial_flag = 0; maxeatom = maxvatom = 0; eatom = nullptr; diff --git a/src/bond.h b/src/bond.h index b2b2008b9e..ea213da476 100644 --- a/src/bond.h +++ b/src/bond.h @@ -25,11 +25,16 @@ class Bond : protected Pointers { public: int allocated; int *setflag; + int partial_flag; // 1 if bond type can be set to 0 and deleted int writedata; // 1 if writes coeffs to data file double energy; // accumulated energies double virial[6]; // accumulated virial: xx,yy,zz,xy,xz,yz double *eatom, **vatom; // accumulated per-atom energy/virial + int comm_forward; // size of forward communication (0 if none) + int comm_reverse; // size of reverse communication (0 if none) + int comm_reverse_off; // size of reverse comm even if newton off + int reinitflag; // 1 if compatible with fix adapt and alike // KOKKOS host/device flag and data masks @@ -55,6 +60,10 @@ class Bond : protected Pointers { virtual double memory_usage(); virtual void *extract(const char *, int &) { return nullptr; } virtual void reinit(); + virtual int pack_forward_comm(int, int *, double *, int, int *) {return 0;} + virtual void unpack_forward_comm(int, int, double *) {} + virtual int pack_reverse_comm(int, int, double *) {return 0;} + virtual void unpack_reverse_comm(int, int *, double *) {} void write_file(int, char **); diff --git a/src/comm.cpp b/src/comm.cpp index 2dddba11c2..16127b37e3 100644 --- a/src/comm.cpp +++ b/src/comm.cpp @@ -217,6 +217,9 @@ void Comm::init() if (force->pair) maxforward = MAX(maxforward,force->pair->comm_forward); if (force->pair) maxreverse = MAX(maxreverse,force->pair->comm_reverse); + if (force->bond) maxforward = MAX(maxforward,force->bond->comm_forward); + if (force->bond) maxreverse = MAX(maxreverse,force->bond->comm_reverse); + for (int i = 0; i < modify->nfix; i++) { maxforward = MAX(maxforward,modify->fix[i]->comm_forward); maxreverse = MAX(maxreverse,modify->fix[i]->comm_reverse); @@ -234,6 +237,7 @@ void Comm::init() if (force->newton == 0) maxreverse = 0; if (force->pair) maxreverse = MAX(maxreverse,force->pair->comm_reverse_off); + if (force->bond) maxreverse = MAX(maxreverse,force->bond->comm_reverse_off); // maxexchange_atom = size of an exchanged atom, set by AtomVec // only needs to be set if size > BUFEXTRA diff --git a/src/comm.h b/src/comm.h index bc5faa49f4..14253603b5 100644 --- a/src/comm.h +++ b/src/comm.h @@ -84,6 +84,8 @@ class Comm : protected Pointers { virtual void forward_comm_pair(class Pair *) = 0; virtual void reverse_comm_pair(class Pair *) = 0; + virtual void forward_comm_bond(class Bond *) = 0; + virtual void reverse_comm_bond(class Bond *) = 0; virtual void forward_comm_fix(class Fix *, int size = 0) = 0; virtual void reverse_comm_fix(class Fix *, int size = 0) = 0; virtual void reverse_comm_fix_variable(class Fix *) = 0; diff --git a/src/comm_brick.cpp b/src/comm_brick.cpp index ab1b27f1b2..8dacdfb29b 100644 --- a/src/comm_brick.cpp +++ b/src/comm_brick.cpp @@ -20,6 +20,7 @@ #include "atom.h" #include "atom_vec.h" +#include "bond.h" #include "compute.h" #include "domain.h" #include "dump.h" @@ -1074,6 +1075,79 @@ void CommBrick::reverse_comm_pair(Pair *pair) } } +/* ---------------------------------------------------------------------- + forward communication invoked by a Bond + nsize used only to set recv buffer limit +------------------------------------------------------------------------- */ + +void CommBrick::forward_comm_bond(Bond *bond) +{ + int iswap,n; + double *buf; + MPI_Request request; + + int nsize = bond->comm_forward; + + for (iswap = 0; iswap < nswap; iswap++) { + + // pack buffer + + n = bond->pack_forward_comm(sendnum[iswap],sendlist[iswap], + buf_send,pbc_flag[iswap],pbc[iswap]); + + // exchange with another proc + // if self, set recv buffer to send buffer + + if (sendproc[iswap] != me) { + if (recvnum[iswap]) + MPI_Irecv(buf_recv,nsize*recvnum[iswap],MPI_DOUBLE, + recvproc[iswap],0,world,&request); + if (sendnum[iswap]) + MPI_Send(buf_send,n,MPI_DOUBLE,sendproc[iswap],0,world); + if (recvnum[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); + buf = buf_recv; + } else buf = buf_send; + + // unpack buffer + + bond->unpack_forward_comm(recvnum[iswap],firstrecv[iswap],buf); + } +} + +/* ---------------------------------------------------------------------- + reverse communication invoked by a Bond + nsize used only to set recv buffer limit +------------------------------------------------------------------------- */ + +void CommBrick::reverse_comm_bond(Bond *bond) +{ + int iswap,n; + double *buf; + MPI_Request request; + + int nsize = MAX(bond->comm_reverse,bond->comm_reverse_off); + + for (iswap = nswap-1; iswap >= 0; iswap--) { + + // pack buffer + + n = bond->pack_reverse_comm(recvnum[iswap],firstrecv[iswap],buf_send); + + // exchange with another proc + // if self, set recv buffer to send buffer + + if (sendproc[iswap] != me) { + if (sendnum[iswap]) + MPI_Irecv(buf_recv,nsize*sendnum[iswap],MPI_DOUBLE,sendproc[iswap],0, + world,&request); + if (recvnum[iswap]) + MPI_Send(buf_send,n,MPI_DOUBLE,recvproc[iswap],0,world); + if (sendnum[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); + buf = buf_recv; + } else buf = buf_send; + } +} + /* ---------------------------------------------------------------------- forward communication invoked by a Fix size/nsize used only to set recv buffer limit diff --git a/src/comm_brick.h b/src/comm_brick.h index 9ff177837d..48863864d9 100644 --- a/src/comm_brick.h +++ b/src/comm_brick.h @@ -33,6 +33,8 @@ class CommBrick : public Comm { virtual void forward_comm_pair(class Pair *); // forward comm from a Pair virtual void reverse_comm_pair(class Pair *); // reverse comm from a Pair + virtual void forward_comm_bond(class Bond *); // forward comm from a Bond + virtual void reverse_comm_bond(class Bond *); // reverse comm from a Bond virtual void forward_comm_fix(class Fix *, int size = 0); // forward comm from a Fix virtual void reverse_comm_fix(class Fix *, int size = 0); diff --git a/src/comm_tiled.cpp b/src/comm_tiled.cpp index e9175094f8..9267ac3c69 100644 --- a/src/comm_tiled.cpp +++ b/src/comm_tiled.cpp @@ -21,6 +21,7 @@ #include "atom.h" #include "atom_vec.h" +#include "bond.h" #include "compute.h" #include "domain.h" #include "dump.h" @@ -1464,6 +1465,99 @@ void CommTiled::reverse_comm_pair(Pair *pair) } } +/* ---------------------------------------------------------------------- + forward communication invoked by a Bond + nsize used only to set recv buffer limit +------------------------------------------------------------------------- */ + +void CommTiled::forward_comm_bond(Bond *bond) +{ + int i,irecv,n,nsend,nrecv; + + int nsize = bond->comm_forward; + + for (int iswap = 0; iswap < nswap; iswap++) { + nsend = nsendproc[iswap] - sendself[iswap]; + nrecv = nrecvproc[iswap] - sendself[iswap]; + + if (recvother[iswap]) { + for (i = 0; i < nrecv; i++) + MPI_Irecv(&buf_recv[nsize*forward_recv_offset[iswap][i]], + nsize*recvnum[iswap][i], + MPI_DOUBLE,recvproc[iswap][i],0,world,&requests[i]); + } + + if (sendother[iswap]) { + for (i = 0; i < nsend; i++) { + n = bond->pack_forward_comm(sendnum[iswap][i],sendlist[iswap][i], + buf_send,pbc_flag[iswap][i],pbc[iswap][i]); + MPI_Send(buf_send,n,MPI_DOUBLE,sendproc[iswap][i],0,world); + } + } + + if (sendself[iswap]) { + bond->pack_forward_comm(sendnum[iswap][nsend],sendlist[iswap][nsend], + buf_send,pbc_flag[iswap][nsend], + pbc[iswap][nsend]); + bond->unpack_forward_comm(recvnum[iswap][nrecv],firstrecv[iswap][nrecv], + buf_send); + } + if (recvother[iswap]) { + for (i = 0; i < nrecv; i++) { + MPI_Waitany(nrecv,requests,&irecv,MPI_STATUS_IGNORE); + bond->unpack_forward_comm(recvnum[iswap][irecv],firstrecv[iswap][irecv], + &buf_recv[nsize* + forward_recv_offset[iswap][irecv]]); + } + } + } +} + +/* ---------------------------------------------------------------------- + reverse communication invoked by a Bond + nsize used only to set recv buffer limit +------------------------------------------------------------------------- */ + +void CommTiled::reverse_comm_bond(Bond *bond) +{ + int i,irecv,n,nsend,nrecv; + + int nsize = MAX(bond->comm_reverse,bond->comm_reverse_off); + + for (int iswap = nswap-1; iswap >= 0; iswap--) { + nsend = nsendproc[iswap] - sendself[iswap]; + nrecv = nrecvproc[iswap] - sendself[iswap]; + + if (sendother[iswap]) { + for (i = 0; i < nsend; i++) + MPI_Irecv(&buf_recv[nsize*reverse_recv_offset[iswap][i]], + nsize*sendnum[iswap][i],MPI_DOUBLE, + sendproc[iswap][i],0,world,&requests[i]); + } + if (recvother[iswap]) { + for (i = 0; i < nrecv; i++) { + n = bond->pack_reverse_comm(recvnum[iswap][i],firstrecv[iswap][i], + buf_send); + MPI_Send(buf_send,n,MPI_DOUBLE,recvproc[iswap][i],0,world); + } + } + if (sendself[iswap]) { + bond->pack_reverse_comm(recvnum[iswap][nrecv],firstrecv[iswap][nrecv], + buf_send); + bond->unpack_reverse_comm(sendnum[iswap][nsend],sendlist[iswap][nsend], + buf_send); + } + if (sendother[iswap]) { + for (i = 0; i < nsend; i++) { + MPI_Waitany(nsend,requests,&irecv,MPI_STATUS_IGNORE); + bond->unpack_reverse_comm(sendnum[iswap][irecv],sendlist[iswap][irecv], + &buf_recv[nsize* + reverse_recv_offset[iswap][irecv]]); + } + } + } +} + /* ---------------------------------------------------------------------- forward communication invoked by a Fix size/nsize used only to set recv buffer limit diff --git a/src/comm_tiled.h b/src/comm_tiled.h index 75109e097d..ec43b50787 100644 --- a/src/comm_tiled.h +++ b/src/comm_tiled.h @@ -33,6 +33,8 @@ class CommTiled : public Comm { virtual void forward_comm_pair(class Pair *); // forward comm from a Pair virtual void reverse_comm_pair(class Pair *); // reverse comm from a Pair + virtual void forward_comm_bond(class Bond *); // forward comm from a Bond + virtual void reverse_comm_bond(class Bond *); // reverse comm from a Bond virtual void forward_comm_fix(class Fix *, int size = 0); // forward comm from a Fix virtual void reverse_comm_fix(class Fix *, int size = 0); diff --git a/src/compute_property_atom.cpp b/src/compute_property_atom.cpp index d4cec70fe4..e7c9b9a40c 100644 --- a/src/compute_property_atom.cpp +++ b/src/compute_property_atom.cpp @@ -231,25 +231,25 @@ ComputePropertyAtom::ComputePropertyAtom(LAMMPS *lmp, int narg, char **arg) : } else if (strcmp(arg[iarg],"quatw") == 0) { avec_ellipsoid = (AtomVecEllipsoid *) atom->style_match("ellipsoid"); avec_body = (AtomVecBody *) atom->style_match("body"); - if (!avec_ellipsoid && !avec_body) + if (!avec_ellipsoid && !avec_body && !atom->quat_flag) error->all(FLERR,"Compute property/atom for atom property that isn't allocated"); pack_choice[i] = &ComputePropertyAtom::pack_quatw; } else if (strcmp(arg[iarg],"quati") == 0) { avec_ellipsoid = (AtomVecEllipsoid *) atom->style_match("ellipsoid"); avec_body = (AtomVecBody *) atom->style_match("body"); - if (!avec_ellipsoid && !avec_body) + if (!avec_ellipsoid && !avec_body && !atom->quat_flag) error->all(FLERR,"Compute property/atom for atom property that isn't allocated"); pack_choice[i] = &ComputePropertyAtom::pack_quati; } else if (strcmp(arg[iarg],"quatj") == 0) { avec_ellipsoid = (AtomVecEllipsoid *) atom->style_match("ellipsoid"); avec_body = (AtomVecBody *) atom->style_match("body"); - if (!avec_ellipsoid && !avec_body) + if (!avec_ellipsoid && !avec_body && !atom->quat_flag) error->all(FLERR,"Compute property/atom for atom property that isn't allocated"); pack_choice[i] = &ComputePropertyAtom::pack_quatj; } else if (strcmp(arg[iarg],"quatk") == 0) { avec_ellipsoid = (AtomVecEllipsoid *) atom->style_match("ellipsoid"); avec_body = (AtomVecBody *) atom->style_match("body"); - if (!avec_ellipsoid && !avec_body) + if (!avec_ellipsoid && !avec_body && !atom->quat_flag) error->all(FLERR,"Compute property/atom for atom property that isn't allocated"); pack_choice[i] = &ComputePropertyAtom::pack_quatk; @@ -1334,7 +1334,7 @@ void ComputePropertyAtom::pack_quatw(int n) n += nvalues; } - } else { + } else if (avec_body) { AtomVecBody::Bonus *bonus = avec_body->bonus; int *body = atom->body; int *mask = atom->mask; @@ -1346,6 +1346,17 @@ void ComputePropertyAtom::pack_quatw(int n) else buf[n] = 0.0; n += nvalues; } + } else { + double **quat = atom->quat; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) + buf[n] = quat[i][0]; + else buf[n] = 0.0; + n += nvalues; + } } } @@ -1366,7 +1377,7 @@ void ComputePropertyAtom::pack_quati(int n) n += nvalues; } - } else { + } else if (avec_body) { AtomVecBody::Bonus *bonus = avec_body->bonus; int *body = atom->body; int *mask = atom->mask; @@ -1378,6 +1389,17 @@ void ComputePropertyAtom::pack_quati(int n) else buf[n] = 0.0; n += nvalues; } + } else { + double **quat = atom->quat; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) + buf[n] = quat[i][1]; + else buf[n] = 0.0; + n += nvalues; + } } } @@ -1398,7 +1420,7 @@ void ComputePropertyAtom::pack_quatj(int n) n += nvalues; } - } else { + } else if (avec_body) { AtomVecBody::Bonus *bonus = avec_body->bonus; int *body = atom->body; int *mask = atom->mask; @@ -1410,6 +1432,17 @@ void ComputePropertyAtom::pack_quatj(int n) else buf[n] = 0.0; n += nvalues; } + } else { + double **quat = atom->quat; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) + buf[n] = quat[i][2]; + else buf[n] = 0.0; + n += nvalues; + } } } @@ -1430,7 +1463,7 @@ void ComputePropertyAtom::pack_quatk(int n) n += nvalues; } - } else { + } else if (avec_body) { AtomVecBody::Bonus *bonus = avec_body->bonus; int *body = atom->body; int *mask = atom->mask; @@ -1442,6 +1475,17 @@ void ComputePropertyAtom::pack_quatk(int n) else buf[n] = 0.0; n += nvalues; } + } else { + double **quat = atom->quat; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) + buf[n] = quat[i][3]; + else buf[n] = 0.0; + n += nvalues; + } } } diff --git a/src/fix_neigh_history.cpp b/src/fix_neigh_history.cpp index 4ff7e7841b..2e5c15d7ba 100644 --- a/src/fix_neigh_history.cpp +++ b/src/fix_neigh_history.cpp @@ -627,7 +627,7 @@ void FixNeighHistory::post_neighbor() j = jlist[jj]; if (use_bit_flag) { - rflag = sbmask(j) | pair->beyond_contact; + rflag = histmask(j) | pair->beyond_contact; j &= NEIGHMASK; jlist[jj] = j; } else { diff --git a/src/fix_neigh_history.h b/src/fix_neigh_history.h index 1405c05731..f382207541 100644 --- a/src/fix_neigh_history.h +++ b/src/fix_neigh_history.h @@ -93,7 +93,8 @@ class FixNeighHistory : public Fix { virtual void pre_exchange_no_newton(); void allocate_pages(); - inline int sbmask(int j) const { return j >> SBBITS & 3; } + // Shift by HISTBITS and check the first bit + inline int histmask(int j) const { return j >> HISTBITS & 1; } }; } // namespace LAMMPS_NS diff --git a/src/fix_property_atom.cpp b/src/fix_property_atom.cpp index 1e583a4ec9..558e44de48 100644 --- a/src/fix_property_atom.cpp +++ b/src/fix_property_atom.cpp @@ -550,18 +550,24 @@ void FixPropertyAtom::copy_arrays(int i, int j, int /*delflag*/) atom->q[j] = atom->q[i]; else if (style[nv] == RMASS) atom->rmass[j] = atom->rmass[i]; - else if (style[nv] == IVEC) + else if (style[nv] == IVEC) { atom->ivector[index[nv]][j] = atom->ivector[index[nv]][i]; - else if (style[nv] == DVEC) + atom->ivector[index[nv]][i] = 0; + } else if (style[nv] == DVEC) { atom->dvector[index[nv]][j] = atom->dvector[index[nv]][i]; - else if (style[nv] == IARRAY) { + atom->dvector[index[nv]][i] = 0.0; + } else if (style[nv] == IARRAY) { ncol = cols[nv]; - for (k = 0; k < ncol; k++) - atom->iarray[index[nv]][j][k] = atom->iarray[index[nv]][i][k]; + for (k = 0; k < ncol; k++) { + atom->iarray[index[nv]][j][k] = atom->iarray[index[nv]][i][k]; + atom->iarray[index[nv]][i][k] = 0; + } } else if (style[nv] == DARRAY) { ncol = cols[nv]; - for (k = 0; k < ncol; k++) - atom->darray[index[nv]][j][k] = atom->darray[index[nv]][i][k]; + for (k = 0; k < ncol; k++) { + atom->darray[index[nv]][j][k] = atom->darray[index[nv]][i][k]; + atom->darray[index[nv]][i][k] = 0.0; + } } } } @@ -696,16 +702,24 @@ int FixPropertyAtom::pack_exchange(int i, double *buf) if (style[nv] == MOLECULE) buf[m++] = ubuf(atom->molecule[i]).d; else if (style[nv] == CHARGE) buf[m++] = atom->q[i]; else if (style[nv] == RMASS) buf[m++] = atom->rmass[i]; - else if (style[nv] == IVEC) buf[m++] = ubuf(atom->ivector[index[nv]][i]).d; - else if (style[nv] == DVEC) buf[m++] = atom->dvector[index[nv]][i]; - else if (style[nv] == IARRAY) { + else if (style[nv] == IVEC) { + buf[m++] = ubuf(atom->ivector[index[nv]][i]).d; + atom->ivector[index[nv]][i] = 0; + } else if (style[nv] == DVEC) { + buf[m++] = atom->dvector[index[nv]][i]; + atom->dvector[index[nv]][i] = 0; + } else if (style[nv] == IARRAY) { ncol = cols[nv]; - for (k = 0; k < ncol; k++) - buf[m++] = ubuf(atom->iarray[index[nv]][i][k]).d; + for (k = 0; k < ncol; k++) { + buf[m++] = ubuf(atom->iarray[index[nv]][i][k]).d; + atom->iarray[index[nv]][i][k] = 0; + } } else if (style[nv] == DARRAY) { ncol = cols[nv]; - for (k = 0; k < ncol; k++) - buf[m++] = atom->darray[index[nv]][i][k]; + for (k = 0; k < ncol; k++) { + buf[m++] = atom->darray[index[nv]][i][k]; + atom->darray[index[nv]][i][k] = 0.0; + } } } diff --git a/src/fix_store_local.cpp b/src/fix_store_local.cpp new file mode 100644 index 0000000000..7067d83ed1 --- /dev/null +++ b/src/fix_store_local.cpp @@ -0,0 +1,200 @@ +/* ---------------------------------------------------------------------- + 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; +} + diff --git a/src/MISC/fix_pair_tracker.h b/src/fix_store_local.h similarity index 60% rename from src/MISC/fix_pair_tracker.h rename to src/fix_store_local.h index 7c2e3ff322..4102c88f37 100644 --- a/src/MISC/fix_pair_tracker.h +++ b/src/fix_store_local.h @@ -1,85 +1,75 @@ -/* ---------------------------------------------------------------------- - 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(pair/tracker,FixPairTracker); -// clang-format on -#else - -#ifndef LMP_FIX_PAIR_TRACKING_H -#define LMP_FIX_PAIR_TRACKING_H - -#include "fix.h" - -namespace LAMMPS_NS { - -class FixPairTracker : public Fix { - public: - FixPairTracker(class LAMMPS *, int, char **); - ~FixPairTracker(); - int setmask(); - void init(); - void post_force(int); - double memory_usage(); - void lost_contact(int, int, double, double, double, double); - - private: - int nvalues, nmax; - int index_i, index_j; - double tmin, rmin, rsum, time_initial, nstep_initial; - - double *vector; - double **array; - int **type_filter; - - int ncount; - - void reallocate(int); - - typedef void (FixPairTracker::*FnPtrPack)(int); - FnPtrPack *pack_choice; // ptrs to pack functions - - void pack_id1(int); - void pack_id2(int); - - void pack_time_created(int); - void pack_time_broken(int); - void pack_time_total(int); - - void pack_x(int); - void pack_y(int); - void pack_z(int); - - void pack_rmin(int); - void pack_rave(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 pair/tracker command - -Self-explanatory. - -*/ +/* ---------------------------------------------------------------------- + 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. + +*/ diff --git a/src/lmptype.h b/src/lmptype.h index 871bf5ff6c..b188e4b7e7 100644 --- a/src/lmptype.h +++ b/src/lmptype.h @@ -56,10 +56,12 @@ namespace LAMMPS_NS { // reserve 2 hi bits in molecular system neigh list for special bonds flag -// max local + ghost atoms per processor = 2^30 - 1 +// reserve 3rd last bit in neigh list for fix neigh/history flag +// max local + ghost atoms per processor = 2^29 - 1 #define SBBITS 30 -#define NEIGHMASK 0x3FFFFFFF +#define HISTBITS 29 +#define NEIGHMASK 0x1FFFFFFF // default to 32-bit smallint and other ints, 64-bit bigint diff --git a/src/math_extra.cpp b/src/math_extra.cpp index 54f6204182..15d6e472c9 100644 --- a/src/math_extra.cpp +++ b/src/math_extra.cpp @@ -143,6 +143,58 @@ void richardson(double *q, double *m, double *w, double *moments, double dtq) MathExtra::qnormalize(q); } +/* ---------------------------------------------------------------------- + Richardson iteration to update quaternion from angular velocity + return new normalized quaternion q + also returns updated omega at 1/2 step + Assumes spherical particles - no need to rotate to match moments +------------------------------------------------------------------------- */ + +void richardson_sphere(double *q, double *w, double dtq) +{ + // full update from dq/dt = 1/2 w q + + double wq[4]; + MathExtra::vecquat(w,q,wq); + + double qfull[4]; + qfull[0] = q[0] + dtq * wq[0]; + qfull[1] = q[1] + dtq * wq[1]; + qfull[2] = q[2] + dtq * wq[2]; + qfull[3] = q[3] + dtq * wq[3]; + MathExtra::qnormalize(qfull); + + // 1st half update from dq/dt = 1/2 w q + + double qhalf[4]; + qhalf[0] = q[0] + 0.5*dtq * wq[0]; + qhalf[1] = q[1] + 0.5*dtq * wq[1]; + qhalf[2] = q[2] + 0.5*dtq * wq[2]; + qhalf[3] = q[3] + 0.5*dtq * wq[3]; + MathExtra::qnormalize(qhalf); + + // re-compute q at 1/2 step + // recompute wq + + MathExtra::vecquat(w,qhalf,wq); + + // 2nd half update from dq/dt = 1/2 w q + + qhalf[0] += 0.5*dtq * wq[0]; + qhalf[1] += 0.5*dtq * wq[1]; + qhalf[2] += 0.5*dtq * wq[2]; + qhalf[3] += 0.5*dtq * wq[3]; + MathExtra::qnormalize(qhalf); + + // corrected Richardson update + + q[0] = 2.0*qhalf[0] - qfull[0]; + q[1] = 2.0*qhalf[1] - qfull[1]; + q[2] = 2.0*qhalf[2] - qfull[2]; + q[3] = 2.0*qhalf[3] - qfull[3]; + MathExtra::qnormalize(q); +} + /* ---------------------------------------------------------------------- apply evolution operators to quat, quat momentum Miller et al., J Chem Phys. 116, 8649-8659 (2002) diff --git a/src/math_extra.h b/src/math_extra.h index 7c71e4c11b..55d680b0f2 100644 --- a/src/math_extra.h +++ b/src/math_extra.h @@ -76,6 +76,7 @@ void write3(const double mat[3][3]); int mldivide3(const double mat[3][3], const double *vec, double *ans); void rotate(double matrix[3][3], int i, int j, int k, int l, double s, double tau); void richardson(double *q, double *m, double *w, double *moments, double dtq); +void richardson_sphere(double *q, double *w, double dtq); void no_squish_rotate(int k, double *p, double *q, double *inertia, double dt); // shape matrix operations @@ -91,6 +92,7 @@ inline void vecquat(double *a, double *b, double *c); inline void quatvec(double *a, double *b, double *c); inline void quatquat(double *a, double *b, double *c); inline void invquatvec(double *a, double *b, double *c); +inline void quatrotvec(double *a, double *b, double *c); inline void axisangle_to_quat(const double *v, const double angle, double *quat); void angmom_to_omega(double *m, double *ex, double *ey, double *ez, double *idiag, double *w); @@ -651,6 +653,29 @@ inline void MathExtra::invquatvec(double *a, double *b, double *c) c[2] = -a[3] * b[0] + a[2] * b[1] - a[1] * b[2] + a[0] * b[3]; } +/* ---------------------------------------------------------------------- + quaternion rotation of vector: c = a*b*conj(a) + a is a quaternion + b is a three component vector + c is a three component vector +------------------------------------------------------------------------- */ + +inline void MathExtra::quatrotvec(double *a, double *b, double *c) +{ + double temp[4]; + + // temp = a*b + temp[0] = -a[1]*b[0] - a[2]*b[1] - a[3]*b[2]; + temp[1] = a[0]*b[0] + a[2]*b[2] - a[3]*b[1]; + temp[2] = a[0]*b[1] + a[3]*b[0] - a[1]*b[2]; + temp[3] = a[0]*b[2] + a[1]*b[1] - a[2]*b[0]; + + // c = temp*conj(a) + c[0] = -a[1]*temp[0] + a[0]*temp[1] - a[3]*temp[2] + a[2]*temp[3]; + c[1] = -a[2]*temp[0] + a[3]*temp[1] + a[0]*temp[2] - a[1]*temp[3]; + c[2] = -a[3]*temp[0] - a[2]*temp[1] + a[1]*temp[2] + a[0]*temp[3]; +} + /* ---------------------------------------------------------------------- compute quaternion from axis-angle rotation v MUST be a unit vector diff --git a/src/neighbor.cpp b/src/neighbor.cpp index b7217926ca..d2fab58c24 100644 --- a/src/neighbor.cpp +++ b/src/neighbor.cpp @@ -21,6 +21,7 @@ #include "atom.h" #include "atom_vec.h" +#include "bond.h" #include "citeme.h" #include "comm.h" #include "compute.h" @@ -1444,7 +1445,7 @@ void Neighbor::init_topology() // bonds,etc can only be broken for atom->molecular = Atom::MOLECULAR, not Atom::TEMPLATE // SHAKE sets bonds and angles negative // gcmc sets all bonds, angles, etc negative - // bond_quartic sets bonds to 0 + // partial_flag sets bonds to 0 // delete_bonds sets all interactions negative int bond_off = 0; @@ -1453,7 +1454,9 @@ void Neighbor::init_topology() if (utils::strmatch(modify->fix[i]->style,"^shake") || utils::strmatch(modify->fix[i]->style,"^rattle")) bond_off = angle_off = 1; - if (force->bond && force->bond_match("quartic")) bond_off = 1; + if (force->bond) + if (force->bond->partial_flag) + bond_off = 1; if (atom->avec->bonds_allow && atom->molecular == Atom::MOLECULAR) { for (i = 0; i < atom->nlocal; i++) { diff --git a/src/npair_half_size_bin_newtoff.cpp b/src/npair_half_size_bin_newtoff.cpp index e836503190..001d1281c9 100644 --- a/src/npair_half_size_bin_newtoff.cpp +++ b/src/npair_half_size_bin_newtoff.cpp @@ -15,7 +15,10 @@ #include "npair_half_size_bin_newtoff.h" #include "atom.h" +#include "atom_vec.h" +#include "domain.h" #include "error.h" +#include "molecule.h" #include "my_page.h" #include "neigh_list.h" @@ -35,7 +38,8 @@ NPairHalfSizeBinNewtoff::NPairHalfSizeBinNewtoff(LAMMPS *lmp) : NPair(lmp) {} void NPairHalfSizeBinNewtoff::build(NeighList *list) { - int i,j,k,n,ibin; + int i,j,jh,k,n,ibin,which,imol,iatom,moltemplate; + tagint tagprev; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; double radi,radsum,cutsq; int *neighptr; @@ -44,17 +48,26 @@ void NPairHalfSizeBinNewtoff::build(NeighList *list) double *radius = atom->radius; int *type = atom->type; int *mask = atom->mask; + tagint *tag = atom->tag; tagint *molecule = atom->molecule; + tagint **special = atom->special; + int **nspecial = atom->nspecial; int nlocal = atom->nlocal; if (includegroup) nlocal = atom->nfirst; + int *molindex = atom->molindex; + int *molatom = atom->molatom; + Molecule **onemols = atom->avec->onemols; + if (molecular == Atom::TEMPLATE) moltemplate = 1; + else moltemplate = 0; + int history = list->history; int *ilist = list->ilist; int *numneigh = list->numneigh; int **firstneigh = list->firstneigh; MyPage *ipage = list->ipage; - int mask_history = 3 << SBBITS; + int mask_history = 1 << HISTBITS; int inum = 0; ipage->reset(); @@ -68,6 +81,11 @@ void NPairHalfSizeBinNewtoff::build(NeighList *list) ztmp = x[i][2]; radi = radius[i]; ibin = atom2bin[i]; + if (moltemplate) { + imol = molindex[i]; + iatom = molatom[i]; + tagprev = tag[i] - iatom - 1; + } // loop over all atoms in surrounding bins in stencil including self // only store pair if i < j @@ -87,10 +105,24 @@ void NPairHalfSizeBinNewtoff::build(NeighList *list) cutsq = (radsum+skin) * (radsum+skin); if (rsq <= cutsq) { + jh = j; if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; + jh = jh ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >= 0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = jh; + 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 b6a786b0cf..b3b1f3216d 100644 --- a/src/npair_half_size_bin_newton.cpp +++ b/src/npair_half_size_bin_newton.cpp @@ -15,7 +15,10 @@ #include "npair_half_size_bin_newton.h" #include "atom.h" +#include "atom_vec.h" +#include "domain.h" #include "error.h" +#include "molecule.h" #include "my_page.h" #include "neigh_list.h" @@ -34,7 +37,8 @@ NPairHalfSizeBinNewton::NPairHalfSizeBinNewton(LAMMPS *lmp) : NPair(lmp) {} void NPairHalfSizeBinNewton::build(NeighList *list) { - int i,j,k,n,ibin; + int i,j,jh,k,n,ibin,which,imol,iatom,moltemplate; + tagint tagprev; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; double radi,radsum,cutsq; int *neighptr; @@ -43,17 +47,26 @@ void NPairHalfSizeBinNewton::build(NeighList *list) double *radius = atom->radius; int *type = atom->type; int *mask = atom->mask; + tagint *tag = atom->tag; tagint *molecule = atom->molecule; + tagint **special = atom->special; + int **nspecial = atom->nspecial; int nlocal = atom->nlocal; if (includegroup) nlocal = atom->nfirst; + int *molindex = atom->molindex; + int *molatom = atom->molatom; + Molecule **onemols = atom->avec->onemols; + if (molecular == Atom::TEMPLATE) moltemplate = 1; + else moltemplate = 0; + int history = list->history; int *ilist = list->ilist; int *numneigh = list->numneigh; int **firstneigh = list->firstneigh; MyPage *ipage = list->ipage; - int mask_history = 3 << SBBITS; + int mask_history = 1 << HISTBITS; int inum = 0; ipage->reset(); @@ -66,6 +79,11 @@ void NPairHalfSizeBinNewton::build(NeighList *list) ytmp = x[i][1]; ztmp = x[i][2]; radi = radius[i]; + if (moltemplate) { + imol = molindex[i]; + iatom = molatom[i]; + tagprev = tag[i] - iatom - 1; + } // loop over rest of atoms in i's bin, ghosts are at end of linked list // if j is owned atom, store it, since j is beyond i in linked list @@ -90,10 +108,24 @@ void NPairHalfSizeBinNewton::build(NeighList *list) cutsq = (radsum+skin) * (radsum+skin); if (rsq <= cutsq) { + jh = j; if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; + jh = jh ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >= 0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = jh; + 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; } } @@ -112,10 +144,24 @@ void NPairHalfSizeBinNewton::build(NeighList *list) cutsq = (radsum+skin) * (radsum+skin); if (rsq <= cutsq) { + jh = j; if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; + jh = jh ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >= 0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = jh; + 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 a86feb6f40..2704c809ba 100644 --- a/src/npair_half_size_bin_newton_tri.cpp +++ b/src/npair_half_size_bin_newton_tri.cpp @@ -15,7 +15,10 @@ #include "npair_half_size_bin_newton_tri.h" #include "atom.h" +#include "atom_vec.h" +#include "domain.h" #include "error.h" +#include "molecule.h" #include "my_page.h" #include "neigh_list.h" @@ -35,7 +38,8 @@ NPairHalfSizeBinNewtonTri::NPairHalfSizeBinNewtonTri(LAMMPS *lmp) : void NPairHalfSizeBinNewtonTri::build(NeighList *list) { - int i,j,k,n,ibin; + int i,j,jh,k,n,ibin,which,imol,iatom,moltemplate; + tagint tagprev; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; double radi,radsum,cutsq; int *neighptr; @@ -44,17 +48,26 @@ void NPairHalfSizeBinNewtonTri::build(NeighList *list) double *radius = atom->radius; int *type = atom->type; int *mask = atom->mask; + tagint *tag = atom->tag; tagint *molecule = atom->molecule; + tagint **special = atom->special; + int **nspecial = atom->nspecial; int nlocal = atom->nlocal; if (includegroup) nlocal = atom->nfirst; + int *molindex = atom->molindex; + int *molatom = atom->molatom; + Molecule **onemols = atom->avec->onemols; + if (molecular == Atom::TEMPLATE) moltemplate = 1; + else moltemplate = 0; + int history = list->history; int *ilist = list->ilist; int *numneigh = list->numneigh; int **firstneigh = list->firstneigh; MyPage *ipage = list->ipage; - int mask_history = 3 << SBBITS; + int mask_history = 1 << HISTBITS; int inum = 0; ipage->reset(); @@ -67,6 +80,11 @@ void NPairHalfSizeBinNewtonTri::build(NeighList *list) ytmp = x[i][1]; ztmp = x[i][2]; radi = radius[i]; + if (moltemplate) { + imol = molindex[i]; + iatom = molatom[i]; + tagprev = tag[i] - iatom - 1; + } // loop over all atoms in bins in stencil // pairs for atoms j "below" i are excluded @@ -96,10 +114,24 @@ void NPairHalfSizeBinNewtonTri::build(NeighList *list) cutsq = (radsum+skin) * (radsum+skin); if (rsq <= cutsq) { + jh = j; if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; + jh = jh ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >= 0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = jh; + 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 cb06ddfb6f..ab57a5b76e 100644 --- a/src/npair_half_size_multi_newtoff.cpp +++ b/src/npair_half_size_multi_newtoff.cpp @@ -16,7 +16,10 @@ es certain rights in this software. This software is distributed under #include "npair_half_size_multi_newtoff.h" #include "atom.h" +#include "atom_vec.h" +#include "domain.h" #include "error.h" +#include "molecule.h" #include "my_page.h" #include "neighbor.h" #include "neigh_list.h" @@ -38,7 +41,9 @@ NPairHalfSizeMultiNewtoff::NPairHalfSizeMultiNewtoff(LAMMPS *lmp) : NPair(lmp) { void NPairHalfSizeMultiNewtoff::build(NeighList *list) { - int i,j,k,n,itype,jtype,icollection,jcollection,ibin,jbin,ns; + int i,j,jh,k,n,itype,jtype,icollection,jcollection,ibin,jbin,ns; + int which,imol,iatom,moltemplate; + tagint tagprev; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; double radi,radsum,cutdistsq; int *neighptr,*s; @@ -49,17 +54,26 @@ void NPairHalfSizeMultiNewtoff::build(NeighList *list) double *radius = atom->radius; int *type = atom->type; int *mask = atom->mask; + tagint *tag = atom->tag; tagint *molecule = atom->molecule; + tagint **special = atom->special; + int **nspecial = atom->nspecial; int nlocal = atom->nlocal; if (includegroup) nlocal = atom->nfirst; + int *molindex = atom->molindex; + int *molatom = atom->molatom; + Molecule **onemols = atom->avec->onemols; + if (molecular == Atom::TEMPLATE) moltemplate = 1; + else moltemplate = 0; + int history = list->history; int *ilist = list->ilist; int *numneigh = list->numneigh; int **firstneigh = list->firstneigh; MyPage *ipage = list->ipage; - int mask_history = 3 << SBBITS; + int mask_history = 1 << HISTBITS; int inum = 0; ipage->reset(); @@ -73,6 +87,11 @@ void NPairHalfSizeMultiNewtoff::build(NeighList *list) ytmp = x[i][1]; ztmp = x[i][2]; radi = radius[i]; + if (moltemplate) { + imol = molindex[i]; + iatom = molatom[i]; + tagprev = tag[i] - iatom - 1; + } ibin = atom2bin[i]; @@ -93,27 +112,41 @@ void NPairHalfSizeMultiNewtoff::build(NeighList *list) ns = nstencil_multi[icollection][jcollection]; for (k = 0; k < ns; k++) { - js = binhead_multi[jcollection][jbin + s[k]]; - for (j = js; j >= 0; j = bins[j]) { - if (j <= i) continue; + js = binhead_multi[jcollection][jbin + s[k]]; + for (j = js; j >= 0; j = bins[j]) { + if (j <= i) continue; jtype = type[j]; if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue; - delx = xtmp - x[j][0]; - dely = ytmp - x[j][1]; - delz = ztmp - x[j][2]; - rsq = delx*delx + dely*dely + delz*delz; - radsum = radi + radius[j]; - cutdistsq = (radsum+skin) * (radsum+skin); + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + radsum = radi + radius[j]; + cutdistsq = (radsum+skin) * (radsum+skin); - if (rsq <= cutdistsq) { - if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; - } - } + if (rsq <= cutdistsq) { + jh = j; + if (history && rsq < radsum*radsum) + jh = jh ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >= 0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = jh; + 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 8af60aa435..6a5491247a 100644 --- a/src/npair_half_size_multi_newton.cpp +++ b/src/npair_half_size_multi_newton.cpp @@ -15,7 +15,10 @@ #include "npair_half_size_multi_newton.h" #include "atom.h" +#include "atom_vec.h" +#include "domain.h" #include "error.h" +#include "molecule.h" #include "my_page.h" #include "neighbor.h" #include "neigh_list.h" @@ -36,7 +39,9 @@ NPairHalfSizeMultiNewton::NPairHalfSizeMultiNewton(LAMMPS *lmp) : NPair(lmp) {} void NPairHalfSizeMultiNewton::build(NeighList *list) { - int i,j,k,n,itype,jtype,icollection,jcollection,ibin,jbin,ns,js; + int i,j,jh,k,n,itype,jtype,icollection,jcollection,ibin,jbin,ns,js; + int which,imol,iatom,moltemplate; + tagint tagprev; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; double radi,radsum,cutdistsq; int *neighptr,*s; @@ -46,17 +51,26 @@ void NPairHalfSizeMultiNewton::build(NeighList *list) double *radius = atom->radius; int *type = atom->type; int *mask = atom->mask; + tagint *tag = atom->tag; tagint *molecule = atom->molecule; + tagint **special = atom->special; + int **nspecial = atom->nspecial; int nlocal = atom->nlocal; if (includegroup) nlocal = atom->nfirst; + int *molindex = atom->molindex; + int *molatom = atom->molatom; + Molecule **onemols = atom->avec->onemols; + if (molecular == Atom::TEMPLATE) moltemplate = 1; + else moltemplate = 0; + int history = list->history; int *ilist = list->ilist; int *numneigh = list->numneigh; int **firstneigh = list->firstneigh; MyPage *ipage = list->ipage; - int mask_history = 3 << SBBITS; + int mask_history = 1 << HISTBITS; int inum = 0; ipage->reset(); @@ -70,6 +84,11 @@ void NPairHalfSizeMultiNewton::build(NeighList *list) ytmp = x[i][1]; ztmp = x[i][2]; radi = radius[i]; + if (moltemplate) { + imol = molindex[i]; + iatom = molatom[i]; + tagprev = tag[i] - iatom - 1; + } ibin = atom2bin[i]; @@ -94,33 +113,47 @@ void NPairHalfSizeMultiNewton::build(NeighList *list) // if j is owned atom, store it if j > i // if j is ghost, only store if j coords are "above and to the right" of i - for (j = js; j >= 0; j = bins[j]) { + for (j = js; j >= 0; j = bins[j]) { if ((icollection != jcollection) && (j < i)) continue; - if (j >= nlocal) { - if (x[j][2] < ztmp) continue; - if (x[j][2] == ztmp) { - if (x[j][1] < ytmp) continue; - if (x[j][1] == ytmp && x[j][0] < xtmp) continue; - } - } + if (j >= nlocal) { + if (x[j][2] < ztmp) continue; + if (x[j][2] == ztmp) { + if (x[j][1] < ytmp) continue; + if (x[j][1] == ytmp && x[j][0] < xtmp) continue; + } + } jtype = type[j]; if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue; - delx = xtmp - x[j][0]; - dely = ytmp - x[j][1]; - delz = ztmp - x[j][2]; - rsq = delx*delx + dely*dely + delz*delz; - radsum = radi + radius[j]; - cutdistsq = (radsum+skin) * (radsum+skin); + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + radsum = radi + radius[j]; + cutdistsq = (radsum+skin) * (radsum+skin); - if (rsq <= cutdistsq) { - if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; - } + if (rsq <= cutdistsq) { + jh = j; + if (history && rsq < radsum*radsum) + jh = jh ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >= 0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = jh; + 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; + } } } @@ -129,30 +162,44 @@ void NPairHalfSizeMultiNewton::build(NeighList *list) // stencil is half if i same size as j // stencil is full if i smaller than j - s = stencil_multi[icollection][jcollection]; - ns = nstencil_multi[icollection][jcollection]; + s = stencil_multi[icollection][jcollection]; + ns = nstencil_multi[icollection][jcollection]; - for (k = 0; k < ns; k++) { - js = binhead_multi[jcollection][jbin + s[k]]; - for (j = js; j >= 0; j = bins[j]) { + for (k = 0; k < ns; k++) { + js = binhead_multi[jcollection][jbin + s[k]]; + for (j = js; j >= 0; j = bins[j]) { jtype = type[j]; if (exclude && exclusion(i,j,itype,jtype,mask,molecule)) continue; delx = xtmp - x[j][0]; - dely = ytmp - x[j][1]; - delz = ztmp - x[j][2]; - rsq = delx*delx + dely*dely + delz*delz; - radsum = radi + radius[j]; - cutdistsq = (radsum+skin) * (radsum+skin); + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + radsum = radi + radius[j]; + cutdistsq = (radsum+skin) * (radsum+skin); - if (rsq <= cutdistsq) { - if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; - } - } + if (rsq <= cutdistsq) { + jh = j; + if (history && rsq < radsum*radsum) + jh = jh ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >= 0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = jh; + 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 20d4d8b421..ecb0036e02 100644 --- a/src/npair_half_size_multi_newton_tri.cpp +++ b/src/npair_half_size_multi_newton_tri.cpp @@ -15,7 +15,10 @@ #include "npair_half_size_multi_newton_tri.h" #include "atom.h" +#include "atom_vec.h" +#include "domain.h" #include "error.h" +#include "molecule.h" #include "my_page.h" #include "neighbor.h" #include "neigh_list.h" @@ -36,7 +39,9 @@ NPairHalfSizeMultiNewtonTri::NPairHalfSizeMultiNewtonTri(LAMMPS *lmp) : NPair(lm void NPairHalfSizeMultiNewtonTri::build(NeighList *list) { - int i,j,k,n,itype,jtype,icollection,jcollection,ibin,jbin,ns,js; + int i,j,jh,k,n,itype,jtype,icollection,jcollection,ibin,jbin,ns,js; + int which,imol,iatom,moltemplate; + tagint tagprev; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; double radi,radsum,cutdistsq; int *neighptr,*s; @@ -46,17 +51,26 @@ void NPairHalfSizeMultiNewtonTri::build(NeighList *list) double *radius = atom->radius; int *type = atom->type; int *mask = atom->mask; + tagint *tag = atom->tag; tagint *molecule = atom->molecule; + tagint **special = atom->special; + int **nspecial = atom->nspecial; int nlocal = atom->nlocal; if (includegroup) nlocal = atom->nfirst; + int *molindex = atom->molindex; + int *molatom = atom->molatom; + Molecule **onemols = atom->avec->onemols; + if (molecular == Atom::TEMPLATE) moltemplate = 1; + else moltemplate = 0; + int history = list->history; int *ilist = list->ilist; int *numneigh = list->numneigh; int **firstneigh = list->firstneigh; MyPage *ipage = list->ipage; - int mask_history = 3 << SBBITS; + int mask_history = 1 << HISTBITS; int inum = 0; ipage->reset(); @@ -70,6 +84,11 @@ void NPairHalfSizeMultiNewtonTri::build(NeighList *list) ytmp = x[i][1]; ztmp = x[i][2]; radi = radius[i]; + if (moltemplate) { + imol = molindex[i]; + iatom = molatom[i]; + tagprev = tag[i] - iatom - 1; + } ibin = atom2bin[i]; @@ -119,10 +138,24 @@ void NPairHalfSizeMultiNewtonTri::build(NeighList *list) cutdistsq = (radsum+skin) * (radsum+skin); if (rsq <= cutdistsq) { + jh = j; if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; + jh = jh ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >= 0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = jh; + 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 26bde10b0e..77781b7266 100644 --- a/src/npair_half_size_multi_old_newtoff.cpp +++ b/src/npair_half_size_multi_old_newtoff.cpp @@ -15,8 +15,11 @@ #include "npair_half_size_multi_old_newtoff.h" #include "atom.h" +#include "atom_vec.h" +#include "domain.h" #include "error.h" #include "molecule.h" +#include "molecule.h" #include "my_page.h" #include "neigh_list.h" @@ -37,7 +40,8 @@ NPairHalfSizeMultiOldNewtoff::NPairHalfSizeMultiOldNewtoff(LAMMPS *lmp) : NPair( void NPairHalfSizeMultiOldNewtoff::build(NeighList *list) { - int i,j,k,n,itype,jtype,ibin,ns; + int i,j,jh,k,n,itype,jtype,ibin,ns,which,imol,iatom,moltemplate; + tagint tagprev; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; double radi,radsum,cutdistsq; int *neighptr,*s; @@ -47,17 +51,26 @@ void NPairHalfSizeMultiOldNewtoff::build(NeighList *list) double *radius = atom->radius; int *type = atom->type; int *mask = atom->mask; + tagint *tag = atom->tag; tagint *molecule = atom->molecule; + tagint **special = atom->special; + int **nspecial = atom->nspecial; int nlocal = atom->nlocal; if (includegroup) nlocal = atom->nfirst; + int *molindex = atom->molindex; + int *molatom = atom->molatom; + Molecule **onemols = atom->avec->onemols; + if (molecular == Atom::TEMPLATE) moltemplate = 1; + else moltemplate = 0; + int history = list->history; int *ilist = list->ilist; int *numneigh = list->numneigh; int **firstneigh = list->firstneigh; MyPage *ipage = list->ipage; - int mask_history = 3 << SBBITS; + int mask_history = 1 << HISTBITS; int inum = 0; ipage->reset(); @@ -71,6 +84,11 @@ void NPairHalfSizeMultiOldNewtoff::build(NeighList *list) ytmp = x[i][1]; ztmp = x[i][2]; radi = radius[i]; + if (moltemplate) { + imol = molindex[i]; + iatom = molatom[i]; + tagprev = tag[i] - iatom - 1; + } // loop over all atoms in other bins in stencil including self // only store pair if i < j @@ -99,10 +117,24 @@ void NPairHalfSizeMultiOldNewtoff::build(NeighList *list) cutdistsq = (radsum+skin) * (radsum+skin); if (rsq <= cutdistsq) { + jh = j; if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; + jh = jh ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >= 0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = jh; + 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 7f63679bc1..413090448c 100644 --- a/src/npair_half_size_multi_old_newton.cpp +++ b/src/npair_half_size_multi_old_newton.cpp @@ -15,6 +15,8 @@ #include "npair_half_size_multi_old_newton.h" #include "atom.h" +#include "atom_vec.h" +#include "domain.h" #include "error.h" #include "molecule.h" #include "my_page.h" @@ -36,7 +38,8 @@ NPairHalfSizeMultiOldNewton::NPairHalfSizeMultiOldNewton(LAMMPS *lmp) : NPair(lm void NPairHalfSizeMultiOldNewton::build(NeighList *list) { - int i,j,k,n,itype,jtype,ibin,ns; + int i,j,jh,k,n,itype,jtype,ibin,ns,which,imol,iatom,moltemplate; + tagint tagprev; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; double radi,radsum,cutdistsq; int *neighptr,*s; @@ -46,17 +49,26 @@ void NPairHalfSizeMultiOldNewton::build(NeighList *list) double *radius = atom->radius; int *type = atom->type; int *mask = atom->mask; + tagint *tag = atom->tag; tagint *molecule = atom->molecule; + tagint **special = atom->special; + int **nspecial = atom->nspecial; int nlocal = atom->nlocal; if (includegroup) nlocal = atom->nfirst; + int *molindex = atom->molindex; + int *molatom = atom->molatom; + Molecule **onemols = atom->avec->onemols; + if (molecular == Atom::TEMPLATE) moltemplate = 1; + else moltemplate = 0; + int history = list->history; int *ilist = list->ilist; int *numneigh = list->numneigh; int **firstneigh = list->firstneigh; MyPage *ipage = list->ipage; - int mask_history = 3 << SBBITS; + int mask_history = 1 << HISTBITS; int inum = 0; ipage->reset(); @@ -70,6 +82,11 @@ void NPairHalfSizeMultiOldNewton::build(NeighList *list) ytmp = x[i][1]; ztmp = x[i][2]; radi = radius[i]; + if (moltemplate) { + imol = molindex[i]; + iatom = molatom[i]; + tagprev = tag[i] - iatom - 1; + } // loop over rest of atoms in i's bin, ghosts are at end of linked list // if j is owned atom, store it, since j is beyond i in linked list @@ -95,10 +112,24 @@ void NPairHalfSizeMultiOldNewton::build(NeighList *list) cutdistsq = (radsum+skin) * (radsum+skin); if (rsq <= cutdistsq) { + jh = j; if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; + jh = jh ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >= 0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = jh; + 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; } } @@ -125,10 +156,23 @@ void NPairHalfSizeMultiOldNewton::build(NeighList *list) cutdistsq = (radsum+skin) * (radsum+skin); if (rsq <= cutdistsq) { - if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else + if (history && rsq < radsum*radsum) + j = j ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >= 0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = j; + 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 f71a470479..9117e1449d 100644 --- a/src/npair_half_size_multi_old_newton_tri.cpp +++ b/src/npair_half_size_multi_old_newton_tri.cpp @@ -15,6 +15,8 @@ #include "npair_half_size_multi_old_newton_tri.h" #include "atom.h" +#include "atom_vec.h" +#include "domain.h" #include "error.h" #include "molecule.h" #include "my_page.h" @@ -35,7 +37,8 @@ NPairHalfSizeMultiOldNewtonTri::NPairHalfSizeMultiOldNewtonTri(LAMMPS *lmp) : NP void NPairHalfSizeMultiOldNewtonTri::build(NeighList *list) { - int i,j,k,n,itype,jtype,ibin,ns; + int i,j,jh,k,n,itype,jtype,ibin,ns,which,imol,iatom,moltemplate; + tagint tagprev; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; double radi,radsum,cutdistsq; int *neighptr,*s; @@ -45,17 +48,26 @@ void NPairHalfSizeMultiOldNewtonTri::build(NeighList *list) double *radius = atom->radius; int *type = atom->type; int *mask = atom->mask; + tagint *tag = atom->tag; tagint *molecule = atom->molecule; + tagint **special = atom->special; + int **nspecial = atom->nspecial; int nlocal = atom->nlocal; if (includegroup) nlocal = atom->nfirst; + int *molindex = atom->molindex; + int *molatom = atom->molatom; + Molecule **onemols = atom->avec->onemols; + if (molecular == Atom::TEMPLATE) moltemplate = 1; + else moltemplate = 0; + int history = list->history; int *ilist = list->ilist; int *numneigh = list->numneigh; int **firstneigh = list->firstneigh; MyPage *ipage = list->ipage; - int mask_history = 3 << SBBITS; + int mask_history = 1 << HISTBITS; int inum = 0; ipage->reset(); @@ -69,7 +81,11 @@ void NPairHalfSizeMultiOldNewtonTri::build(NeighList *list) ytmp = x[i][1]; ztmp = x[i][2]; radi = radius[i]; - + if (moltemplate) { + imol = molindex[i]; + iatom = molatom[i]; + tagprev = tag[i] - iatom - 1; + } // loop over all atoms in bins, including self, in stencil // skip if i,j neighbor cutoff is less than bin distance @@ -107,10 +123,24 @@ void NPairHalfSizeMultiOldNewtonTri::build(NeighList *list) cutdistsq = (radsum+skin) * (radsum+skin); if (rsq <= cutdistsq) { + jh = j; if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; + jh = jh ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >= 0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = jh; + 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 e8eac6f54b..0a127f3886 100644 --- a/src/npair_half_size_nsq_newtoff.cpp +++ b/src/npair_half_size_nsq_newtoff.cpp @@ -15,7 +15,10 @@ #include "npair_half_size_nsq_newtoff.h" #include "atom.h" +#include "atom_vec.h" +#include "domain.h" #include "error.h" +#include "molecule.h" #include "group.h" #include "my_page.h" #include "neigh_list.h" @@ -35,7 +38,8 @@ NPairHalfSizeNsqNewtoff::NPairHalfSizeNsqNewtoff(LAMMPS *lmp) : NPair(lmp) {} void NPairHalfSizeNsqNewtoff::build(NeighList *list) { - int i,j,n,bitmask; + int i,j,jh,n,bitmask,which,imol,iatom,moltemplate; + tagint tagprev; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; double radi,radsum,cutsq; int *neighptr; @@ -44,7 +48,10 @@ void NPairHalfSizeNsqNewtoff::build(NeighList *list) double *radius = atom->radius; int *type = atom->type; int *mask = atom->mask; + tagint *tag = atom->tag; tagint *molecule = atom->molecule; + tagint **special = atom->special; + int **nspecial = atom->nspecial; int nlocal = atom->nlocal; int nall = nlocal + atom->nghost; if (includegroup) { @@ -52,13 +59,19 @@ void NPairHalfSizeNsqNewtoff::build(NeighList *list) bitmask = group->bitmask[includegroup]; } + int *molindex = atom->molindex; + int *molatom = atom->molatom; + Molecule **onemols = atom->avec->onemols; + if (molecular == Atom::TEMPLATE) moltemplate = 1; + else moltemplate = 0; + int history = list->history; int *ilist = list->ilist; int *numneigh = list->numneigh; int **firstneigh = list->firstneigh; MyPage *ipage = list->ipage; - int mask_history = 3 << SBBITS; + int mask_history = 1 << HISTBITS; int inum = 0; ipage->reset(); @@ -71,6 +84,11 @@ void NPairHalfSizeNsqNewtoff::build(NeighList *list) ytmp = x[i][1]; ztmp = x[i][2]; radi = radius[i]; + if (moltemplate) { + imol = molindex[i]; + iatom = molatom[i]; + tagprev = tag[i] - iatom - 1; + } // loop over remaining atoms, owned and ghost @@ -86,10 +104,24 @@ void NPairHalfSizeNsqNewtoff::build(NeighList *list) cutsq = (radsum+skin) * (radsum+skin); if (rsq <= cutsq) { + jh = j; if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; + jh = jh ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >= 0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = jh; + 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 7f90596755..866165c12e 100644 --- a/src/npair_half_size_nsq_newton.cpp +++ b/src/npair_half_size_nsq_newton.cpp @@ -15,7 +15,10 @@ #include "npair_half_size_nsq_newton.h" #include "atom.h" +#include "atom_vec.h" +#include "domain.h" #include "error.h" +#include "molecule.h" #include "group.h" #include "my_page.h" #include "neigh_list.h" @@ -36,7 +39,8 @@ NPairHalfSizeNsqNewton::NPairHalfSizeNsqNewton(LAMMPS *lmp) : NPair(lmp) {} void NPairHalfSizeNsqNewton::build(NeighList *list) { - int i,j,n,itag,jtag,bitmask; + int i,j,jh,n,itag,jtag,bitmask,which,imol,iatom,moltemplate; + tagint tagprev; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; double radi,radsum,cutsq; int *neighptr; @@ -47,6 +51,8 @@ void NPairHalfSizeNsqNewton::build(NeighList *list) int *type = atom->type; int *mask = atom->mask; tagint *molecule = atom->molecule; + tagint **special = atom->special; + int **nspecial = atom->nspecial; int nlocal = atom->nlocal; int nall = nlocal + atom->nghost; if (includegroup) { @@ -54,13 +60,19 @@ void NPairHalfSizeNsqNewton::build(NeighList *list) bitmask = group->bitmask[includegroup]; } + int *molindex = atom->molindex; + int *molatom = atom->molatom; + Molecule **onemols = atom->avec->onemols; + if (molecular == Atom::TEMPLATE) moltemplate = 1; + else moltemplate = 0; + int history = list->history; int *ilist = list->ilist; int *numneigh = list->numneigh; int **firstneigh = list->firstneigh; MyPage *ipage = list->ipage; - int mask_history = 3 << SBBITS; + int mask_history = 1 << HISTBITS; int inum = 0; ipage->reset(); @@ -74,6 +86,11 @@ void NPairHalfSizeNsqNewton::build(NeighList *list) ytmp = x[i][1]; ztmp = x[i][2]; radi = radius[i]; + if (moltemplate) { + imol = molindex[i]; + iatom = molatom[i]; + tagprev = tag[i] - iatom - 1; + } // loop over remaining atoms, owned and ghost @@ -105,10 +122,24 @@ void NPairHalfSizeNsqNewton::build(NeighList *list) cutsq = (radsum+skin) * (radsum+skin); if (rsq <= cutsq) { + jh = j; if (history && rsq < radsum*radsum) - neighptr[n++] = j ^ mask_history; - else - neighptr[n++] = j; + jh = jh ^ mask_history; + + if (molecular != Atom::ATOMIC) { + if (!moltemplate) + which = find_special(special[i],nspecial[i],tag[j]); + else if (imol >= 0) + which = find_special(onemols[imol]->special[iatom], + onemols[imol]->nspecial[iatom], + tag[j]-tagprev); + else which = 0; + if (which == 0) neighptr[n++] = jh; + 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/set.cpp b/src/set.cpp index 2966106345..5f0d1dbec1 100644 --- a/src/set.cpp +++ b/src/set.cpp @@ -303,7 +303,7 @@ void Set::command(int narg, char **arg) else zvalue = utils::numeric(FLERR,arg[iarg+3],false,lmp); if (utils::strmatch(arg[iarg+4],"^v_")) varparse(arg[iarg+4],4); else wvalue = utils::numeric(FLERR,arg[iarg+4],false,lmp); - if (!atom->ellipsoid_flag && !atom->tri_flag && !atom->body_flag) + if (!atom->ellipsoid_flag && !atom->tri_flag && !atom->body_flag && !atom->quat_flag) error->all(FLERR,"Cannot set this attribute for this atom style"); set(QUAT); iarg += 5; @@ -311,7 +311,7 @@ void Set::command(int narg, char **arg) } else if (strcmp(arg[iarg],"quat/random") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal set command"); ivalue = utils::inumeric(FLERR,arg[iarg+1],false,lmp); - if (!atom->ellipsoid_flag && !atom->tri_flag && !atom->body_flag) + if (!atom->ellipsoid_flag && !atom->tri_flag && !atom->body_flag && !atom->quat_flag) error->all(FLERR,"Cannot set this attribute for this atom style"); if (ivalue <= 0) error->all(FLERR,"Invalid random number seed in set command"); @@ -937,18 +937,20 @@ void Set::set(int keyword) sp[i][3] = dvalue; } - // set quaternion orientation of ellipsoid or tri or body particle - // set quaternion orientation of ellipsoid or tri or body particle + // set quaternion orientation of ellipsoid or tri or body particle or sphere/bpm // enforce quat rotation vector in z dir for 2d systems else if (keyword == QUAT) { double *quat = nullptr; + double **quat2 = nullptr; if (avec_ellipsoid && atom->ellipsoid[i] >= 0) quat = avec_ellipsoid->bonus[atom->ellipsoid[i]].quat; else if (avec_tri && atom->tri[i] >= 0) quat = avec_tri->bonus[atom->tri[i]].quat; else if (avec_body && atom->body[i] >= 0) quat = avec_body->bonus[atom->body[i]].quat; + else if (atom->quat_flag) + quat2 = atom->quat; else error->one(FLERR,"Cannot set quaternion for atom that has none"); if (domain->dimension == 2 && (xvalue != 0.0 || yvalue != 0.0)) @@ -957,11 +959,24 @@ void Set::set(int keyword) double theta2 = MY_PI2 * wvalue/180.0; double sintheta2 = sin(theta2); - quat[0] = cos(theta2); - quat[1] = xvalue * sintheta2; - quat[2] = yvalue * sintheta2; - quat[3] = zvalue * sintheta2; - MathExtra::qnormalize(quat); + if (atom->quat_flag) { + double temp[4]; + temp[0] = cos(theta2); + temp[1] = xvalue * sintheta2; + temp[2] = yvalue * sintheta2; + temp[3] = zvalue * sintheta2; + MathExtra::qnormalize(temp); + quat2[i][0] = temp[0]; + quat2[i][1] = temp[1]; + quat2[i][2] = temp[2]; + quat2[i][3] = temp[3]; + } else { + quat[0] = cos(theta2); + quat[1] = xvalue * sintheta2; + quat[2] = yvalue * sintheta2; + quat[3] = zvalue * sintheta2; + MathExtra::qnormalize(quat); + } } // set theta of line particle @@ -1223,6 +1238,7 @@ void Set::setrandom(int keyword) } else if (keyword == QUAT_RANDOM) { int nlocal = atom->nlocal; double *quat; + double **quat2; if (domain->dimension == 3) { double s,t1,t2,theta1,theta2; @@ -1234,6 +1250,8 @@ void Set::setrandom(int keyword) quat = avec_tri->bonus[atom->tri[i]].quat; else if (avec_body && atom->body[i] >= 0) quat = avec_body->bonus[atom->body[i]].quat; + else if (atom->quat_flag) + quat2 = atom->quat; else error->one(FLERR,"Cannot set quaternion for atom that has none"); @@ -1243,10 +1261,17 @@ void Set::setrandom(int keyword) t2 = sqrt(s); theta1 = 2.0*MY_PI*ranpark->uniform(); theta2 = 2.0*MY_PI*ranpark->uniform(); - quat[0] = cos(theta2)*t2; - quat[1] = sin(theta1)*t1; - quat[2] = cos(theta1)*t1; - quat[3] = sin(theta2)*t2; + if (atom->quat_flag) { + quat2[i][0] = cos(theta2)*t2; + quat2[i][1] = sin(theta1)*t1; + quat2[i][2] = cos(theta1)*t1; + quat2[i][3] = sin(theta2)*t2; + } else { + quat[0] = cos(theta2)*t2; + quat[1] = sin(theta1)*t1; + quat[2] = cos(theta1)*t1; + quat[3] = sin(theta2)*t2; + } count++; } @@ -1258,15 +1283,24 @@ void Set::setrandom(int keyword) quat = avec_ellipsoid->bonus[atom->ellipsoid[i]].quat; else if (avec_body && atom->body[i] >= 0) quat = avec_body->bonus[atom->body[i]].quat; + else if (atom->quat_flag) + quat2 = atom->quat; else error->one(FLERR,"Cannot set quaternion for atom that has none"); ranpark->reset(seed,x[i]); theta2 = MY_PI*ranpark->uniform(); - quat[0] = cos(theta2); - quat[1] = 0.0; - quat[2] = 0.0; - quat[3] = sin(theta2); + if (atom->quat_flag) { + quat2[i][0] = cos(theta2); + quat2[i][1] = 0.0; + quat2[i][2] = 0.0; + quat2[i][3] = sin(theta2); + } else { + quat[0] = cos(theta2); + quat[1] = 0.0; + quat[2] = 0.0; + quat[3] = sin(theta2); + } count++; } } From 0e72aae0a32a01797868055f7e68ac70fd75f6aa Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Wed, 8 Sep 2021 18:39:56 -0600 Subject: [PATCH 02/40] Adding examples and misc bug fixes --- doc/src/bond_bpm_rotational.rst | 34 +- examples/bpm/impact/impact_bpm.lmp | 52 + examples/bpm/impact/log.30Jul2021.pour.g++1.4 | 202 +++ examples/bpm/pour/log.30Jul2021.pour.g++.1 | 1090 +++++++++++++++++ examples/bpm/pour/pour_bpm.lmp | 36 + examples/bpm/pour/rect.mol | 568 +++++++++ src/BPM/bond_bpm_rotational.cpp | 54 +- src/GRANULAR/pair_gran_hertz_history.cpp | 1 + src/GRANULAR/pair_gran_hooke.cpp | 1 + src/GRANULAR/pair_gran_hooke_history.cpp | 1 + src/GRANULAR/pair_granular.cpp | 1 + src/Makefile | 6 +- src/fix_neigh_history.cpp | 6 +- src/fix_property_atom.cpp | 2 +- src/lmptype.h | 1 + 15 files changed, 2002 insertions(+), 53 deletions(-) create mode 100644 examples/bpm/impact/impact_bpm.lmp create mode 100644 examples/bpm/impact/log.30Jul2021.pour.g++1.4 create mode 100644 examples/bpm/pour/log.30Jul2021.pour.g++.1 create mode 100644 examples/bpm/pour/pour_bpm.lmp create mode 100644 examples/bpm/pour/rect.mol diff --git a/doc/src/bond_bpm_rotational.rst b/doc/src/bond_bpm_rotational.rst index 632e340da6..a88fa6f6bf 100644 --- a/doc/src/bond_bpm_rotational.rst +++ b/doc/src/bond_bpm_rotational.rst @@ -50,17 +50,17 @@ has a magnitude of .. math:: - F_r = K_r (r - r_0) + f_r = k_r (r - r_0) -where :math:`K_r` is a stiffness and :math:`r` is the current distance and +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. +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. +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) `. @@ -68,13 +68,13 @@ Bonds will break under sufficient stress. A breaking criteria is calculated .. math:: - B = \alpha(r, r_0) \frac{F_r}{F_{r,c}} + \frac{F_s}{F_{s,c}} + - \frac{\tau_b}{\tau_{b,c}} + \frac{\tau_t}{\tau_{t,c}} + B = \alpha(r, r_0) \frac{f_r}{f_{r,c}} + \frac{|f_s|}{f_{s,c}} + + \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 +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. The term :math:`\alpha` is simply one in extension and zero in compression such that the normal force component does not contribute to the breaking criteria in compression. @@ -85,7 +85,7 @@ 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)^2`. +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 @@ -110,12 +110,12 @@ The following coefficients must be defined for each bond type via the the data file or restart files read by the :doc:`read_data ` or :doc:`read_restart ` commands: -* :math:`K_r` (force/distance units) -* :math:`K_s` (force/distance units) -* :math:`K_t` (force units) -* :math:`K_b` (force units) -* :math:`F_{r,c}` (force units) -* :math:`F_{s,c}` (force units) +* :math:`k_r` (force/distance units) +* :math:`k_s` (force/distance units) +* :math:`k_t` (force units) +* :math:`k_b` (force units) +* :math:`f_{r,c}` (force units) +* :math:`f_{s,c}` (force units) * :math:`\tau_{b,c}` (force*distance units) * :math:`\tau_{t,c}` (force*distance units) * :math:`\gamma_n` (force/velocity units) diff --git a/examples/bpm/impact/impact_bpm.lmp b/examples/bpm/impact/impact_bpm.lmp new file mode 100644 index 0000000000..9eb04829bb --- /dev/null +++ b/examples/bpm/impact/impact_bpm.lmp @@ -0,0 +1,52 @@ +units lj +dimension 3 +boundary m m m +atom_style sphere/bpm +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.0 +region box block -5 15 -20 20 -20 20 +create_box 1 box bond/types 2 extra/bond/per/atom 20 extra/special/per/atom 50 + +region disk cylinder x 0.0 0.0 20.0 -0.5 0.5 +create_atoms 1 region disk +group plate region disk + +region ball sphere 8.0 0.0 0.0 6.0 +create_atoms 1 region ball +group projectile region ball + +displace_atoms all random 0.1 0.1 0.1 134598738 + +neighbor 1.0 bin +pair_style gran/hooke/history 1.0 NULL 0.5 NULL 0.1 1 +bond_style bpm/rotational store/local 2 time id1 id2 +pair_coeff 1 1 +bond_coeff 1 1.0 0.2 0.02 0.02 0.05 0.01 0.005 0.005 0.1 0.02 0.002 0.002 +bond_coeff 2 1.0 0.2 0.02 0.02 0.20 0.04 0.020 0.020 0.1 0.02 0.002 0.002 + +fix 1 all nve/sphere/bpm +fix 2 all store/local 100 3 +fix 3 all update/special/bonds + +create_bonds many plate plate 1 0.0 1.5 +create_bonds many projectile projectile 2 0.0 1.5 +change_box all boundary s s s + +neighbor 0.3 bin +special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0 + +velocity projectile set -0.05 0.0 0.0 +compute nbond all nbond/atom +compute tbond all reduce sum c_nbond + +timestep 0.05 +thermo_style custom step ke pe pxx pyy pzz c_tbond +thermo 100 +#dump 1 all custom 100 atomDump id radius x y z c_nbond + +dump 2 all local 100 brokenDump f_2[1] f_2[2] f_2[3] +dump_modify 2 header no + +run 6000 diff --git a/examples/bpm/impact/log.30Jul2021.pour.g++1.4 b/examples/bpm/impact/log.30Jul2021.pour.g++1.4 new file mode 100644 index 0000000000..50d90788c6 --- /dev/null +++ b/examples/bpm/impact/log.30Jul2021.pour.g++1.4 @@ -0,0 +1,202 @@ +LAMMPS (30 Jul 2021) +units lj +dimension 3 +boundary m m m +atom_style sphere/bpm +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.0 +Lattice spacing in x,y,z = 1.5874011 1.5874011 1.5874011 +region box block -5 15 -20 20 -20 20 +create_box 1 box bond/types 2 extra/bond/per/atom 20 extra/special/per/atom 50 +Created orthogonal box = (-7.9370053 -31.748021 -31.748021) to (23.811016 31.748021 31.748021) + 1 by 2 by 2 MPI processor grid + +region disk cylinder x 0.0 0.0 20.0 -0.5 0.5 +create_atoms 1 region disk +Created 7527 atoms + using lattice units in orthogonal box = (-7.9370053 -31.748021 -31.748021) to (23.811016 31.748021 31.748021) + create_atoms CPU = 0.002 seconds +group plate region disk +7527 atoms in group plate + +region ball sphere 8.0 0.0 0.0 6.0 +create_atoms 1 region ball +Created 3589 atoms + using lattice units in orthogonal box = (-7.9370053 -31.748021 -31.748021) to (23.811016 31.748021 31.748021) + create_atoms CPU = 0.001 seconds +group projectile region ball +3589 atoms in group projectile + +displace_atoms all random 0.1 0.1 0.1 134598738 +Displacing atoms ... + +neighbor 1.0 bin +pair_style gran/hooke/history 1.0 NULL 0.5 NULL 0.1 1 +bond_style bpm/rotational store/local 2 time id1 id2 +pair_coeff 1 1 +bond_coeff 1 1.0 0.2 0.02 0.02 0.05 0.01 0.005 0.005 0.1 0.02 0.002 0.002 +bond_coeff 2 1.0 0.2 0.02 0.02 0.20 0.04 0.020 0.020 0.1 0.02 0.002 0.002 + +fix 1 all nve/sphere/bpm +fix 2 all store/local 100 3 +fix 3 all update/special/bonds + +create_bonds many plate plate 1 0.0 1.5 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2.6 + binsize = 1, bins = 32 64 64 + 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 gran/hooke/history, perpetual + attributes: half, newton on, size, history + pair build: half/size/bin/newton + stencil: half/bin/3d + bin: standard +Added 38551 bonds, new total = 38551 +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 15 = max # of 1-2 neighbors + 101 = max # of special neighbors + special bonds CPU = 0.001 seconds +create_bonds many projectile projectile 2 0.0 1.5 +Added 21869 bonds, new total = 60420 +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 16 = max # of 1-2 neighbors + 101 = max # of special neighbors + special bonds CPU = 0.002 seconds +change_box all boundary s s s +Changing box ... + +neighbor 0.3 bin +special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0 + +velocity projectile set -0.05 0.0 0.0 +compute nbond all nbond/atom +compute tbond all reduce sum c_nbond + +timestep 0.05 +thermo_style custom step ke pe pxx pyy pzz c_tbond +thermo 100 +dump 1 all custom 100 atomDump id radius x y z c_nbond + +dump 2 all local 100 brokenDump f_2[1] f_2[2] f_2[3] +dump_modify 2 header no + +run 6000 +Neighbor list info ... + update every 1 steps, delay 10 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 = 36 97 97 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gran/hooke/history, perpetual + attributes: half, newton on, size, history + pair build: half/size/bin/newton + stencil: half/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 34.27 | 34.28 | 34.28 Mbytes +Step KinEng PotEng Pxx Pyy Pzz c_tbond + 0 0.00053248439 -5.4354084 0.00012848545 -1.0639387e-19 1.5819554e-19 10.870817 + 100 0.00053248439 -5.4354084 0.00013017373 1.1334839e-12 1.784281e-12 10.870817 + 200 0.00053248439 -5.4354084 0.00013279102 1.6787387e-12 5.4953548e-13 10.870817 + 300 0.00053248439 -5.4354084 0.00013459514 3.0577302e-12 -1.2088316e-12 10.870817 + 400 0.00053248439 -5.4354084 0.00013739515 9.7326931e-13 1.1562543e-12 10.870817 + 500 0.0005311195 -5.4353511 0.00013532545 -1.8468866e-06 -1.6585907e-06 10.870817 + 600 0.00051833989 -5.4288362 7.1725873e-05 -1.6444182e-05 -1.9715516e-05 10.860022 + 700 0.00050552886 -5.3985398 -2.3212715e-05 -1.3937832e-05 -1.9091149e-05 10.805955 + 800 0.00050518224 -5.3616112 8.2515921e-05 2.6973287e-05 2.0513255e-05 10.735516 + 900 0.00050396335 -5.3458995 0.00019263348 -3.7564641e-05 -4.5902247e-05 10.699172 + 1000 0.00049399705 -5.3356803 8.3780211e-05 -3.900811e-05 -3.7974569e-05 10.677852 + 1100 0.00047949984 -5.3177445 -3.3039707e-05 7.3302691e-05 9.1425255e-05 10.645196 + 1200 0.0004778277 -5.2918722 2.5525662e-05 -7.3957522e-06 -1.0428816e-06 10.596168 + 1300 0.00047175855 -5.2622229 0.00016622071 -7.5895427e-05 -7.3668463e-05 10.536884 + 1400 0.00047346655 -5.2357068 0.00013088251 3.8629925e-05 4.7370005e-05 10.484257 + 1500 0.00047030222 -5.2110028 2.0138342e-05 0.00014344934 0.00014572537 10.43289 + 1600 0.00047120889 -5.1944302 8.0308725e-05 9.7652665e-05 9.2786939e-05 10.397265 + 1700 0.00046169345 -5.1800484 0.00015698427 -1.2415417e-05 -2.2822524e-05 10.370457 + 1800 0.00045838981 -5.1581008 6.4666951e-05 -2.044593e-05 -3.1699628e-05 10.327726 + 1900 0.00045723383 -5.1435986 7.4830972e-06 2.8528283e-05 9.5685497e-06 10.29615 + 2000 0.00045822947 -5.1339093 8.8355461e-05 2.4391936e-05 2.6856807e-06 10.276268 + 2100 0.00045635704 -5.123239 0.00014447351 -1.885824e-05 -2.5038419e-05 10.252789 + 2200 0.0004531016 -5.1193556 4.9062089e-05 -4.1290134e-05 -2.8125502e-05 10.245682 + 2300 0.00044750986 -5.1059583 -1.3106261e-05 -6.3125644e-05 -3.3287217e-05 10.221303 + 2400 0.00044828631 -5.08466 9.1580692e-05 -3.8583903e-05 -5.1373805e-05 10.177942 + 2500 0.00044674619 -5.0736124 0.00011856396 4.6266072e-06 -1.5907979e-05 10.153203 + 2600 0.00044727275 -5.0614096 5.295308e-05 6.0578952e-05 5.7167864e-05 10.128553 + 2700 0.00044110051 -5.0507956 1.8440804e-05 5.4883922e-05 6.3982178e-05 10.106153 + 2800 0.00043633042 -5.0426937 8.1816485e-05 -1.5431256e-06 -1.855006e-05 10.08996 + 2900 0.00043176823 -5.0356307 0.00012046457 4.4651701e-05 2.7620283e-06 10.075387 + 3000 0.00043218951 -5.027846 3.2574549e-05 7.4433525e-05 4.6834269e-05 10.059554 + 3100 0.00043256828 -5.0161104 3.3101063e-05 4.6551359e-05 5.6531167e-05 10.036164 + 3200 0.0004332929 -5.0068366 8.9512897e-05 -5.7060048e-06 -2.5891142e-06 10.018172 + 3300 0.00043157298 -5.0008275 8.4139723e-05 -3.6940688e-05 -5.1910847e-05 10.005218 + 3400 0.000431398 -4.9965161 2.5625084e-05 1.1433716e-05 6.4926012e-06 9.9965815 + 3500 0.00043011473 -4.9928073 2.7095736e-05 -7.7339585e-06 7.844574e-06 9.9891148 + 3600 0.00042888594 -4.9847529 7.7453653e-05 -4.6984476e-05 -3.5038838e-05 9.9747211 + 3700 0.00042753057 -4.9765311 6.8775078e-05 -3.1077337e-05 -3.3804378e-05 9.9585282 + 3800 0.00042500059 -4.9705379 1.4686991e-05 -2.1799517e-05 -1.2214392e-05 9.9471033 + 3900 0.00042443518 -4.9635965 2.9590319e-05 -7.5174838e-06 9.4138716e-06 9.9336092 + 4000 0.00042354431 -4.9575067 7.497612e-05 -2.241558e-05 -1.7795282e-05 9.9216445 + 4100 0.00042603308 -4.937097 4.8886365e-05 -1.065802e-05 -2.4723829e-05 9.8824217 + 4200 0.00042476916 -4.926145 1.9200413e-05 1.0927038e-05 3.1855248e-06 9.8600216 + 4300 0.00042485728 -4.918146 3.0086129e-05 -8.6292641e-06 2.1921266e-06 9.8440986 + 4400 0.00042494366 -4.9099091 6.2777705e-05 -5.4921818e-06 -7.6169646e-06 9.8263764 + 4500 0.0004275409 -4.8995178 4.7617152e-05 2.1335231e-06 1.1579137e-06 9.8055056 + 4600 0.00042662895 -4.8820208 1.084188e-05 -1.5696264e-06 1.1310734e-05 9.7706909 + 4700 0.00042734689 -4.8725198 3.7425941e-05 -4.439827e-06 1.13299e-05 9.7511695 + 4800 0.00042900821 -4.8540514 5.4751797e-05 -1.1417464e-05 -8.8084486e-06 9.7147355 + 4900 0.00043023872 -4.8363433 3.3053643e-05 3.2468406e-06 -6.4727375e-06 9.6776718 + 5000 0.00043199875 -4.8198092 1.8345516e-05 8.4946117e-06 5.6309681e-06 9.6456459 + 5100 0.00044223594 -4.7778052 3.0243074e-05 -5.0316681e-06 -3.9518237e-06 9.5634221 + 5200 0.00044479909 -4.7640293 4.8598154e-05 -6.7947105e-06 -1.5950295e-05 9.5343649 + 5300 0.0004454718 -4.755521 2.7021591e-05 4.8540854e-06 -5.1116404e-06 9.5168226 + 5400 0.00044509902 -4.7442744 1.5098441e-05 9.1872595e-06 1.0269456e-05 9.4952321 + 5500 0.00044706883 -4.7308865 3.2631779e-05 1.097946e-06 5.8901266e-06 9.4690536 + 5600 0.00045084112 -4.7115078 3.7164777e-05 -2.2594948e-06 -5.1676349e-06 9.4311803 + 5700 0.00045327828 -4.6989042 2.2566508e-05 2.2741586e-06 8.6663706e-07 9.404552 + 5800 0.00046103079 -4.6780119 1.4582664e-05 1.2169813e-06 8.2506998e-06 9.3626304 + 5900 0.00046315911 -4.6539134 2.7960455e-05 -5.7750919e-06 1.1483488e-08 9.313692 + 6000 0.00046381574 -4.6376345 3.2506838e-05 -1.1407228e-07 -5.8332064e-06 9.2804066 +Loop time of 26.8573 on 4 procs for 6000 steps with 11116 atoms + +Performance: 965099.761 tau/day, 223.403 timesteps/s +98.4% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.24862 | 0.26655 | 0.28715 | 3.1 | 0.99 +Bond | 18.756 | 20.055 | 21.432 | 25.3 | 74.67 +Neigh | 0.68191 | 0.68601 | 0.69029 | 0.4 | 2.55 +Comm | 1.6547 | 3.1706 | 4.5875 | 69.7 | 11.81 +Output | 0.3381 | 0.33879 | 0.34058 | 0.2 | 1.26 +Modify | 2.0658 | 2.1974 | 2.3512 | 7.6 | 8.18 +Other | | 0.1428 | | | 0.53 + +Nlocal: 2779.00 ave 3444 max 2189 min +Histogram: 1 0 1 0 0 0 1 0 0 1 +Nghost: 1160.25 ave 1335 max 985 min +Histogram: 1 0 1 0 0 0 0 1 0 1 +Neighs: 10709.5 ave 13715 max 8243 min +Histogram: 2 0 0 0 0 0 0 1 0 1 + +Total # of neighbors = 42838 +Ave neighs/atom = 3.8537244 +Ave special neighs/atom = 9.2786974 +Neighbor list builds = 402 +Dangerous builds = 0 + +Total wall time: 0:00:26 diff --git a/examples/bpm/pour/log.30Jul2021.pour.g++.1 b/examples/bpm/pour/log.30Jul2021.pour.g++.1 new file mode 100644 index 0000000000..eec316e8ae --- /dev/null +++ b/examples/bpm/pour/log.30Jul2021.pour.g++.1 @@ -0,0 +1,1090 @@ +LAMMPS (30 Jul 2021) +units lj +dimension 3 +boundary m m m +atom_style sphere/bpm +special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0 +newton on off +comm_modify vel yes cutoff 3.3 +region box block -15 15 -15 15 0 60.0 +create_box 1 box bond/types 1 extra/bond/per/atom 15 extra/special/per/atom 50 +Created orthogonal box = (-15.000000 -15.000000 0.0000000) to (15.000000 15.000000 60.000000) + 1 by 1 by 1 MPI processor grid + +molecule my_mol "rect.mol" +Read molecule template my_mol: + 1 molecules + 63 atoms with max type 1 + 297 bonds with max type 1 + 0 angles with max type 0 + 0 dihedrals with max type 0 + 0 impropers with max type 0 +region wall_cyl cylinder z 0.0 0.0 10.0 EDGE EDGE side in +region dropzone cylinder z 0.0 0.0 10.0 40.0 50.0 side in + +pair_style gran/hertz/history 1.0 NULL 0.5 NULL 0.1 1 +bond_style bpm/rotational +pair_coeff 1 1 +bond_coeff 1 1.0 0.2 0.01 0.01 2.0 0.4 0.02 0.02 0.2 0.04 0.002 0.002 + +compute nbond all nbond/atom +compute tbond all reduce sum c_nbond +compute_modify thermo_temp dynamic/dof yes + +fix 1 all wall/gran hertz/history 1.0 NULL 0.5 NULL 0.1 1 zplane 0.0 NULL +fix 2 all wall/gran/region hertz/history 1.0 NULL 0.5 NULL 0.1 1 region wall_cyl +fix 3 all gravity 1e-4 vector 0 0 -1 +fix 4 all deposit 40 0 1500 712511343 mol my_mol region dropzone near 2.0 vz -0.05 -0.05 +fix 5 all nve/sphere/bpm +fix 6 all update/special/bonds + +timestep 0.05 +thermo_style custom step ke pe pxx pyy pzz c_tbond +thermo 100 +dump 1 all custom 500 atomDump id radius x y z c_nbond mol + +run 100000 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.3 + ghost atom cutoff = 3.3 + binsize = 0.65, bins = 47 47 93 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gran/hertz/history, perpetual + attributes: half, newton on, size, history + pair build: half/size/bin/newton + stencil: half/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.510 | 7.510 | 7.510 Mbytes +Step KinEng PotEng Pxx Pyy Pzz c_tbond + 0 -0 0 0 0 0 0 + 100 0.0018350004 -4.7142847 -1.4952358e-05 -1.3419249e-05 -1.2232534e-06 9.4285714 + 200 0.0026448865 -4.7142836 2.4009175e-06 3.4985286e-06 4.4774541e-06 9.4285714 + 300 0.0037671165 -4.71428 7.7868315e-06 4.3344542e-06 5.2003707e-06 9.4285714 + 400 0.0060866155 -4.7142466 -2.6407137e-05 -4.6012096e-06 -7.2652236e-06 9.4285714 + 500 0.0074581085 -4.7142677 2.91441e-05 2.1596938e-05 1.7547302e-05 9.4285714 + 600 0.0078583344 -4.7142826 -1.5003346e-06 1.4512508e-05 2.9703819e-06 9.4285714 + 700 0.0075360513 -4.7142727 -2.5876771e-06 1.2941955e-05 1.8800678e-06 9.4285714 + 800 0.0073708697 -4.7142811 2.342014e-05 1.3677972e-05 1.7951529e-05 9.4285714 + 900 0.0075293135 -4.7142781 -1.0363878e-05 1.3616086e-05 -4.4997782e-06 9.4285714 + 1000 0.0075664914 -4.7142805 9.7952433e-06 1.4238252e-05 1.0500218e-05 9.4285714 + 1100 0.0075487959 -4.7142816 1.3144826e-05 1.4347122e-05 1.3503414e-05 9.4285714 + 1200 0.0075161044 -4.714269 -5.7314502e-06 9.4758079e-06 -3.9561706e-06 9.4285714 + 1300 0.0075736256 -4.7142839 1.1243108e-05 1.7774357e-05 1.3346305e-05 9.4285714 + 1400 0.0076065814 -4.7142688 6.0289115e-06 1.4598083e-05 8.0109348e-06 9.4285714 + 1500 0.0075850039 -4.7142836 9.8106843e-07 7.3175578e-06 1.3244496e-06 9.4285714 + 1600 0.0059673005 -4.7142772 5.4481504e-06 2.0461455e-05 1.0148563e-05 9.4285714 + 1700 0.008060977 -4.7142767 2.9012609e-06 2.2950155e-05 1.3486974e-06 9.4285714 + 1800 0.0087747918 -4.7142819 7.4904656e-06 3.6100052e-05 1.7017909e-05 9.4285714 + 1900 0.0087089259 -4.7142751 8.357802e-06 4.0019544e-05 1.680366e-05 9.4285714 + 2000 0.0087016626 -4.7142836 6.3761243e-06 2.3991468e-05 6.5215381e-06 9.4285714 + 2100 0.008427332 -4.7142785 9.6989453e-06 3.2889581e-05 1.6275771e-05 9.4285714 + 2200 0.0083664952 -4.7142818 7.176817e-06 3.0276432e-05 5.9757096e-06 9.4285714 + 2300 0.0083480746 -4.7142791 1.0583095e-05 2.448771e-05 1.3325786e-05 9.4285714 + 2400 0.0082989793 -4.7142829 1.2568526e-05 3.5256163e-05 1.3898753e-05 9.4285714 + 2500 0.0083834043 -4.714283 8.1815532e-06 2.6950039e-05 7.3853891e-06 9.4285714 + 2600 0.0084024866 -4.7142832 1.0774493e-05 2.8041987e-05 1.4089582e-05 9.4285714 + 2700 0.0083048258 -4.7142846 1.2046208e-05 3.1705653e-05 1.325036e-05 9.4285714 + 2800 0.0073772986 -4.7142715 8.6198824e-06 1.9039864e-05 1.1085512e-05 9.4285714 + 2900 0.0072860451 -4.7142624 1.1891652e-05 1.8218987e-05 1.3595365e-05 9.4285714 + 3000 0.0073542744 -4.7142745 9.9651799e-06 1.6285545e-05 1.2546119e-05 9.4285714 + 3100 0.0050337959 -4.7142816 -8.4319836e-06 5.6227207e-06 1.2853509e-05 9.4285714 + 3200 0.0046668635 -4.7142709 -1.6368072e-05 -3.17067e-07 9.9751699e-06 9.4285714 + 3300 0.0047886997 -4.7142803 2.0946846e-06 8.6138403e-06 1.5568577e-05 9.4285714 + 3400 0.0048926937 -4.7142823 1.1568093e-05 1.6320968e-05 1.9143213e-05 9.4285714 + 3500 0.0048678488 -4.7142781 1.3448921e-05 1.7493352e-05 1.9488121e-05 9.4285714 + 3600 0.0047353657 -4.7142828 1.1700456e-05 1.2677209e-05 1.755821e-05 9.4285714 + 3700 0.0045834985 -4.7142758 9.7774984e-06 1.6781792e-05 1.3416903e-05 9.4285714 + 3800 0.0045915482 -4.7142684 7.1884339e-06 1.4354611e-05 1.4317569e-05 9.4285714 + 3900 0.0048205935 -4.7142818 9.8986884e-06 1.1854311e-05 1.8746075e-05 9.4285714 + 4000 0.0049853192 -4.7142848 1.0167455e-05 1.760873e-05 1.6284384e-05 9.4285714 + 4100 0.0047076001 -4.7142778 6.2590136e-06 1.4085782e-05 2.0992834e-05 9.4285714 + 4200 0.0035992627 -4.7142804 -3.1373644e-05 -2.9347298e-05 9.2692347e-06 9.4285714 + 4300 0.0033651005 -4.7142802 -2.3099597e-05 -1.8493562e-05 7.0898163e-06 9.4285714 + 4400 0.0034474965 -4.7142725 1.2094981e-05 1.4622497e-05 2.7835335e-05 9.4285714 + 4500 0.0035102662 -4.71428 2.1633007e-06 6.2829581e-06 1.5722415e-05 9.4285714 + 4600 0.0030538555 -4.7142808 3.1538558e-06 4.2505368e-06 1.8124067e-05 9.4285714 + 4700 0.0031841314 -4.7142823 1.2203554e-05 1.1505239e-05 3.6458167e-05 9.4285714 + 4800 0.0032104065 -4.7142829 8.6830164e-06 7.7853357e-06 2.7983239e-05 9.4285714 + 4900 0.0030545791 -4.7142805 4.4562634e-06 -2.300673e-06 1.8723151e-05 9.4285714 + 5000 0.0030341587 -4.7142811 4.1470981e-06 -1.3422263e-05 3.0241014e-05 9.4285714 + 5100 0.0031218351 -4.7142847 4.3294152e-06 -1.5226843e-05 3.037912e-05 9.4285714 + 5200 0.0031075791 -4.7142824 6.2396634e-06 -1.026582e-06 2.8474574e-05 9.4285714 + 5300 0.0030971804 -4.714278 5.7184274e-06 2.7343244e-06 2.1969834e-05 9.4285714 + 5400 0.0032655886 -4.714285 6.4600436e-06 6.366647e-06 2.7999963e-05 9.4285714 + 5500 0.0033078344 -4.7142841 7.9290988e-06 1.2254361e-05 3.9482333e-05 9.4285714 + 5600 0.0032364471 -4.7142798 6.1234404e-06 4.9884485e-06 2.363239e-05 9.4285714 + 5700 0.0033181477 -4.7142846 6.386863e-06 7.6799651e-06 2.444522e-05 9.4285714 + 5800 0.0033361278 -4.7142841 9.3031619e-06 1.3982741e-05 3.4805953e-05 9.4285714 + 5900 0.0033067687 -4.7142831 5.4827276e-06 4.141946e-06 2.7482332e-05 9.4285714 + 6000 0.0027689817 -4.7142794 -7.4605788e-06 -8.0999927e-06 1.4793631e-05 9.4285714 + 6100 0.0026613204 -4.7142826 -1.2246381e-05 -1.2089415e-05 1.5993189e-05 9.4285714 + 6200 0.0026407622 -4.7142625 1.2228456e-05 1.4925079e-05 3.1009041e-05 9.4285714 + 6300 0.0025129843 -4.7142773 -1.7041068e-05 -1.0967132e-05 2.3688216e-05 9.4285714 + 6400 0.0034367476 -4.7142804 -1.5599931e-05 -2.5715524e-05 1.1133846e-05 9.4285714 + 6500 0.0039526936 -4.7142767 1.9551919e-05 1.6372803e-05 2.995376e-05 9.4285714 + 6600 0.0039178785 -4.7142686 9.6832405e-06 2.2172442e-05 3.0932177e-05 9.4285714 + 6700 0.00381646 -4.714273 -2.7077443e-07 5.6194835e-06 2.0136301e-05 9.4285714 + 6800 0.0038317282 -4.7142761 3.1330438e-05 1.9879281e-05 4.1770652e-05 9.4285714 + 6900 0.0036860192 -4.7142791 1.3672502e-05 -2.315116e-06 4.0287029e-05 9.4285714 + 7000 0.0031397302 -4.7142682 6.1230533e-06 -3.634782e-05 2.0113033e-05 9.4285714 + 7100 0.0031062646 -4.7142578 9.7891866e-06 -1.1903464e-05 3.8487858e-05 9.4285714 + 7200 0.0035310624 -4.7142779 2.1104359e-05 -1.4279228e-05 5.0866682e-05 9.4285714 + 7300 0.0037256457 -4.714283 3.209857e-05 5.3366904e-06 4.9924463e-05 9.4285714 + 7400 0.0036183763 -4.714269 -2.9036232e-06 1.8212626e-05 3.5625423e-05 9.4285714 + 7500 0.0037194131 -4.714276 3.5400579e-06 6.0425587e-06 3.3391206e-05 9.4285714 + 7600 0.0034998963 -4.714285 2.0840607e-05 2.0232103e-05 4.2628317e-05 9.4285714 + 7700 0.0034901962 -4.7142769 1.1001749e-05 1.8069835e-05 3.6347915e-05 9.4285714 + 7800 0.0036523545 -4.7142779 3.3425415e-06 1.0599205e-05 3.4510975e-05 9.4285714 + 7900 0.0040250594 -4.7142817 4.059014e-06 1.8176788e-05 3.2156906e-05 9.4285714 + 8000 0.0044512121 -4.7142811 2.8026081e-05 1.583968e-05 3.5880238e-05 9.4285714 + 8100 0.0049660908 -4.7142813 2.6616418e-05 1.1210326e-05 3.3793064e-05 9.4285714 + 8200 0.0051394397 -4.7142785 2.5104155e-05 -3.9596979e-06 3.722421e-05 9.4285714 + 8300 0.0050953458 -4.7142772 3.4855062e-05 -4.1583281e-06 3.9814268e-05 9.4285714 + 8400 0.0052765129 -4.7142833 4.1717465e-05 7.8419525e-06 3.5098869e-05 9.4285714 + 8500 0.0053422344 -4.714283 3.5875791e-05 8.7167378e-06 5.6556334e-05 9.4285714 + 8600 0.0051949467 -4.7142757 2.8680914e-05 1.2039892e-05 5.1463281e-05 9.4285714 + 8700 0.0052661124 -4.7142818 3.3742171e-05 1.3900348e-05 3.4296617e-05 9.4285714 + 8800 0.0054374336 -4.714285 3.0744041e-05 8.9686419e-06 6.0174371e-05 9.4285714 + 8900 0.0053756411 -4.7142806 3.2270678e-05 1.4601555e-05 5.4690431e-05 9.4285714 + 9000 0.0053513602 -4.7142825 3.2707594e-05 1.3622959e-05 4.2467194e-05 9.4285714 + 9100 0.0048583462 -4.7142844 3.3544037e-05 1.4560902e-05 5.7876331e-05 9.4285714 + 9200 0.0049036455 -4.7142829 3.7043389e-05 1.8906672e-05 5.4239393e-05 9.4285714 + 9300 0.0048728297 -4.714284 3.0272074e-05 1.0439597e-05 5.8502965e-05 9.4285714 + 9400 0.004695311 -4.7142839 2.6574458e-05 1.8727884e-05 5.7158486e-05 9.4285714 + 9500 0.0046368525 -4.7142821 2.6890322e-05 2.233081e-05 5.7305818e-05 9.4285714 + 9600 0.0045731106 -4.714275 3.376527e-05 1.6278618e-05 7.4839206e-05 9.4285714 + 9700 0.0045210556 -4.7142752 1.6911434e-05 1.5671756e-05 5.5103883e-05 9.4285714 + 9800 0.004669058 -4.7142788 2.1211826e-05 1.754775e-05 5.4285693e-05 9.4285714 + 9900 0.0048475458 -4.7142841 4.1292334e-05 2.3525582e-05 6.7587269e-05 9.4285714 + 10000 0.0047748556 -4.714284 1.8549207e-05 1.024854e-05 5.5518527e-05 9.4285714 + 10100 0.004607819 -4.7142795 1.3431866e-05 4.4653347e-06 5.1605148e-05 9.4285714 + 10200 0.0046058541 -4.7142818 9.3186734e-06 7.8432738e-06 5.8052962e-05 9.4285714 + 10300 0.0045744643 -4.7142845 -1.6192412e-05 -3.1703566e-06 5.7296626e-05 9.4285714 + 10400 0.0042916807 -4.7142768 -4.236192e-05 1.7976385e-05 5.76178e-05 9.4285714 + 10500 0.0043073933 -4.7142753 -4.0059842e-05 1.0921413e-05 5.6207624e-05 9.4285714 + 10600 0.0045612673 -4.7142821 1.0170099e-05 2.331982e-05 4.8364557e-05 9.4285714 + 10700 0.0054866392 -4.7142815 2.2257739e-05 7.2976211e-05 6.560597e-05 9.4285714 + 10800 0.0058051726 -4.7142773 8.8744762e-06 2.5329518e-05 7.1155805e-05 9.4285714 + 10900 0.0057009262 -4.714281 1.0142709e-05 2.1247162e-05 6.298131e-05 9.4285714 + 11000 0.0057842643 -4.714283 1.391631e-05 7.0910303e-05 7.4720703e-05 9.4285714 + 11100 0.0057980972 -4.7142798 1.6509238e-05 4.6643484e-05 7.0715006e-05 9.4285714 + 11200 0.0057183542 -4.7142743 1.5309415e-05 3.805824e-05 6.9294024e-05 9.4285714 + 11300 0.0054292945 -4.7142815 9.5894752e-06 3.546016e-05 4.2324372e-05 9.4285714 + 11400 0.0052373967 -4.7142793 1.1355496e-05 3.836308e-06 1.0078659e-05 9.4285714 + 11500 0.0053496759 -4.7142584 1.2217701e-05 5.2477138e-05 7.1219435e-05 9.4285714 + 11600 0.0054219323 -4.7142776 1.209997e-05 5.5427326e-05 6.361181e-05 9.4285714 + 11700 0.0054476705 -4.7142841 7.7643649e-06 2.0350139e-05 5.1808602e-05 9.4285714 + 11800 0.0051968972 -4.7142775 1.3078814e-05 4.9366102e-05 5.3887386e-05 9.4285714 + 11900 0.0050226144 -4.7142762 1.022748e-05 -9.3277927e-07 5.2839528e-05 9.4285714 + 12000 0.0051468502 -4.7142786 8.1695713e-06 2.5695194e-05 5.2808343e-05 9.4285714 + 12100 0.0048714487 -4.7142831 1.1192092e-05 5.8121129e-05 4.0491175e-05 9.4285714 + 12200 0.0048727463 -4.714281 9.5527097e-06 2.4531028e-05 5.3861009e-05 9.4285714 + 12300 0.0048677682 -4.7142745 1.5986509e-05 4.2562572e-05 6.8718914e-05 9.4285714 + 12400 0.0050652333 -4.714284 1.3602349e-05 6.718973e-05 5.5249685e-05 9.4285714 + 12500 0.0050841332 -4.7142842 2.5307064e-05 5.5840292e-05 8.0668188e-05 9.4285714 + 12600 0.0047212717 -4.7142811 1.4622117e-05 2.1694817e-05 5.1597662e-05 9.4285714 + 12700 0.0042675085 -4.7142798 -8.883711e-06 -3.3482335e-05 2.6280041e-05 9.4285714 + 12800 0.0043068913 -4.7142813 2.203984e-05 1.7751116e-05 8.5428604e-05 9.4285714 + 12900 0.0042641798 -4.7142768 3.5402247e-05 5.043008e-05 7.2889153e-05 9.4285714 + 13000 0.004115505 -4.7142793 -5.6465558e-06 2.704517e-05 3.5342748e-05 9.4285714 + 13100 0.0041665721 -4.7142794 2.3933885e-05 2.8848877e-05 -5.878205e-06 9.4285714 + 13200 0.0041738593 -4.7142813 2.967576e-05 3.6377865e-05 2.7985848e-05 9.4285714 + 13300 0.0042583152 -4.7142821 1.0917336e-05 2.6345256e-05 5.201179e-05 9.4285714 + 13400 0.0042690979 -4.7142768 1.9938874e-05 3.4580763e-05 5.692194e-05 9.4285714 + 13500 0.0043443987 -4.7142829 6.3848177e-06 4.2214607e-05 9.9667904e-05 9.4285714 + 13600 0.0039435204 -4.7142828 3.1227709e-05 7.4517788e-06 7.119048e-05 9.4285714 + 13700 0.0035798612 -4.7142655 2.8503134e-05 9.0281553e-06 3.856119e-05 9.4285714 + 13800 0.0038259598 -4.714251 -4.1095874e-06 1.0604198e-05 4.6382375e-05 9.4285714 + 13900 0.0041863923 -4.7142604 3.7109027e-05 9.4562422e-06 6.6705568e-05 9.4285714 + 14000 0.0048136864 -4.7142843 3.955162e-05 4.7195598e-05 6.4860798e-05 9.4285714 + 14100 0.0047855362 -4.7142783 2.3925039e-05 4.2311403e-05 7.0388388e-05 9.4285714 + 14200 0.0046304353 -4.7142637 3.0826655e-05 4.160884e-05 6.3336345e-05 9.4285714 + 14300 0.0048180942 -4.7142794 2.7923714e-05 3.9069628e-05 6.0256985e-05 9.4285714 + 14400 0.0049176536 -4.7142822 4.4432245e-05 5.0881492e-05 7.9720745e-05 9.4285714 + 14500 0.0048369572 -4.7142805 3.6700439e-05 4.5648908e-05 6.7882029e-05 9.4285714 + 14600 0.004748273 -4.7142767 1.7350598e-05 3.4347128e-05 6.239678e-05 9.4285714 + 14700 0.0047523428 -4.7142753 3.6350522e-05 4.0389958e-05 6.5314142e-05 9.4285714 + 14800 0.0045197221 -4.7142808 3.954212e-05 4.7289855e-05 7.8265961e-05 9.4285714 + 14900 0.0040736002 -4.7142707 2.6277456e-05 5.8765446e-07 7.3462619e-05 9.4285714 + 15000 0.0040273962 -4.7142587 2.3488124e-05 -3.0315146e-06 5.1210568e-05 9.4285714 + 15100 0.0042753796 -4.7142724 2.0011495e-05 5.0182014e-05 7.8578926e-05 9.4285714 + 15200 0.0049225323 -4.7142803 6.2130422e-05 3.0587976e-05 9.2876858e-05 9.4285714 + 15300 0.0050318348 -4.7142682 4.3973037e-05 2.019748e-05 6.5105276e-05 9.4285714 + 15400 0.0051120536 -4.7142698 4.2494018e-05 2.5627284e-05 9.5301829e-05 9.4285714 + 15500 0.0053207781 -4.7142812 6.7664456e-05 3.5141602e-05 8.8309309e-05 9.4285714 + 15600 0.005293582 -4.7142818 6.7400773e-05 3.721021e-05 8.38008e-05 9.4285714 + 15700 0.0050946068 -4.7142745 3.8999283e-05 2.379051e-05 9.3280853e-05 9.4285714 + 15800 0.0051580439 -4.7142805 4.4758499e-05 2.1718368e-05 6.9739549e-05 9.4285714 + 15900 0.0049767732 -4.7142814 6.2228722e-05 2.2014722e-05 8.9513151e-05 9.4285714 + 16000 0.0047976208 -4.7142791 3.7394549e-05 2.5834739e-05 7.246238e-05 9.4285714 + 16100 0.0045923945 -4.7142692 6.2030899e-05 2.6444418e-05 6.4534889e-05 9.4285714 + 16200 0.0046918948 -4.714276 6.5106723e-05 2.1993576e-05 8.6979154e-05 9.4285714 + 16300 0.0048586219 -4.7142811 4.358005e-05 3.3873352e-05 6.6312622e-05 9.4285714 + 16400 0.0045897569 -4.7142781 5.7502612e-05 3.3279368e-05 8.3391302e-05 9.4285714 + 16500 0.0045256391 -4.7142783 3.2746026e-05 1.651973e-05 7.1351015e-05 9.4285714 + 16600 0.0042464205 -4.7142765 5.8682379e-05 1.0077021e-06 6.8327201e-05 9.4285714 + 16700 0.0041670304 -4.7142755 5.7066092e-05 3.6833707e-05 4.5806783e-05 9.4285714 + 16800 0.0042144967 -4.714277 6.8927591e-05 2.9260513e-05 5.7005856e-05 9.4285714 + 16900 0.0042354962 -4.7142753 7.6245331e-05 2.3551827e-06 7.9522994e-05 9.4285714 + 17000 0.0043689146 -4.7142773 4.8522901e-05 1.3460475e-05 4.4744287e-05 9.4285714 + 17100 0.0043626594 -4.71428 2.7962223e-05 -3.2439675e-05 6.2331938e-05 9.4285714 + 17200 0.0043193718 -4.714277 1.5338188e-05 -3.4456276e-05 3.9732476e-05 9.4285714 + 17300 0.0043545657 -4.7142639 4.6810884e-05 1.1882665e-05 4.7903825e-05 9.4285714 + 17400 0.004407318 -4.7142675 4.6665325e-05 6.2862841e-05 6.1079437e-05 9.4285714 + 17500 0.0047322304 -4.7142807 6.7216967e-05 4.2909797e-05 5.5328869e-05 9.4285714 + 17600 0.0045864683 -4.7142798 8.071462e-05 6.134346e-05 7.0790924e-05 9.4285714 + 17700 0.0043299704 -4.7142742 1.9793903e-05 4.6606138e-05 4.5705282e-05 9.4285714 + 17800 0.0043786073 -4.7142787 4.3956203e-05 2.1763527e-05 3.7119067e-05 9.4285714 + 17900 0.0044120236 -4.7142817 7.0249694e-05 7.5100161e-05 6.6748598e-05 9.4285714 + 18000 0.0041959005 -4.7142755 2.3128343e-05 5.4018284e-05 5.8999433e-05 9.4285714 + 18100 0.0034544232 -4.7142721 1.7391126e-05 2.4815145e-05 6.7493902e-05 9.4285714 + 18200 0.0034583247 -4.7142767 1.9580653e-05 5.0168254e-05 3.8599969e-05 9.4285714 + 18300 0.0036769652 -4.7142812 3.1999935e-05 4.626352e-05 3.6820432e-05 9.4285714 + 18400 0.003542457 -4.7142799 4.96431e-05 2.5172922e-05 5.3111097e-05 9.4285714 + 18500 0.0034434392 -4.7142764 1.4234643e-05 3.8687269e-05 1.952651e-06 9.4285714 + 18600 0.0035112886 -4.7142757 2.3701022e-05 3.7405649e-05 3.9268284e-05 9.4285714 + 18700 0.0035441894 -4.7142759 4.5523843e-05 5.0096854e-05 7.8557351e-05 9.4285714 + 18800 0.0034522581 -4.7142807 1.9172827e-05 4.1369571e-05 3.5306122e-05 9.4285714 + 18900 0.0033330564 -4.7142759 2.6222336e-05 1.6111907e-05 4.3437486e-05 9.4285714 + 19000 0.0034602509 -4.7142777 3.9354073e-05 4.7635319e-05 5.321042e-05 9.4285714 + 19100 0.0035373952 -4.7142827 2.149967e-05 5.7529336e-05 5.4662962e-05 9.4285714 + 19200 0.0031974269 -4.7142795 4.6521393e-06 1.3385357e-05 6.2178217e-05 9.4285714 + 19300 0.0027305756 -4.7142781 2.4635662e-06 -6.5118569e-07 4.9518368e-05 9.4285714 + 19400 0.0029207784 -4.7142775 -8.0421471e-06 2.5186899e-05 5.068164e-05 9.4285714 + 19500 0.0030859179 -4.7142753 5.4212731e-05 3.2771826e-05 6.8624416e-05 9.4285714 + 19600 0.0029520352 -4.7142823 1.8998847e-05 3.1417972e-05 6.3433962e-05 9.4285714 + 19700 0.0029232933 -4.714282 2.9106866e-05 2.6763373e-05 5.1690381e-05 9.4285714 + 19800 0.0029362558 -4.7142801 4.9086206e-05 4.1563066e-05 5.6566562e-05 9.4285714 + 19900 0.0029590979 -4.7142823 2.1729461e-06 3.6336745e-05 6.063653e-05 9.4285714 + 20000 0.0029737109 -4.7142835 4.7984894e-05 2.8608401e-05 6.5087684e-05 9.4285714 + 20100 0.0029124921 -4.7142825 4.3292067e-05 3.3551479e-05 5.4062394e-05 9.4285714 + 20200 0.0028933318 -4.7142815 7.4943307e-06 3.3595541e-05 6.1416099e-05 9.4285714 + 20300 0.0029129466 -4.7142819 3.7458402e-05 4.3567905e-05 7.6913433e-05 9.4285714 + 20400 0.0028983167 -4.7142818 2.9674595e-05 2.8173485e-05 6.116006e-05 9.4285714 + 20500 0.0028459511 -4.7142834 2.3328156e-05 -1.7229926e-06 5.8656938e-05 9.4285714 + 20600 0.0028751302 -4.7142822 3.1074779e-05 1.8736637e-05 6.9578993e-05 9.4285714 + 20700 0.002912501 -4.7142815 2.1939627e-05 3.5323362e-05 6.5913158e-05 9.4285714 + 20800 0.0029477103 -4.714284 3.3392853e-05 2.1554741e-05 6.1003016e-05 9.4285714 + 20900 0.0029066998 -4.7142839 3.5066527e-05 3.9798806e-05 6.0715847e-05 9.4285714 + 21000 0.0028720361 -4.7142818 1.299136e-05 3.8575051e-05 6.3982307e-05 9.4285714 + 21100 0.0028631244 -4.7142836 1.2940523e-05 1.5176819e-05 6.8206902e-05 9.4285714 + 21200 0.0030751291 -4.7142825 2.7942565e-05 3.0293027e-05 5.353623e-05 9.4285714 + 21300 0.0031225596 -4.7142824 3.1264357e-05 3.5236412e-05 5.815032e-05 9.4285714 + 21400 0.0032060457 -4.7142831 3.0198813e-05 3.4004434e-05 7.9522139e-05 9.4285714 + 21500 0.0032314386 -4.7142837 4.2168756e-05 4.2748112e-05 7.3721407e-05 9.4285714 + 21600 0.0032381818 -4.7142841 4.3007552e-05 3.1045264e-05 6.4676682e-05 9.4285714 + 21700 0.003191823 -4.7142844 2.9358292e-05 3.0811279e-05 6.2153923e-05 9.4285714 + 21800 0.0031599553 -4.7142834 3.3291992e-05 3.4104204e-05 7.0812317e-05 9.4285714 + 21900 0.0030277794 -4.7142814 3.2809732e-05 2.9278292e-05 5.5900196e-05 9.4285714 + 22000 0.002992521 -4.714281 3.0857187e-05 3.4566662e-05 4.266216e-05 9.4285714 + 22100 0.0029952499 -4.7142811 5.0522009e-05 3.7581727e-05 7.8085708e-05 9.4285714 + 22200 0.0030054809 -4.7142833 3.9474037e-05 3.5047639e-05 7.7641919e-05 9.4285714 + 22300 0.0028928883 -4.7142806 3.4705229e-05 3.6401017e-05 6.8793827e-05 9.4285714 + 22400 0.0029681852 -4.714281 3.932701e-05 3.7633139e-05 6.6542066e-05 9.4285714 + 22500 0.0030011148 -4.7142828 3.2892224e-05 3.6494394e-05 7.5573152e-05 9.4285714 + 22600 0.0027783154 -4.7142807 4.0444718e-05 2.3277662e-05 6.2547993e-05 9.4285714 + 22700 0.0027124275 -4.7142795 3.3266655e-05 2.1915817e-05 4.1423897e-05 9.4285714 + 22800 0.0026798805 -4.7142803 2.5711421e-05 2.3653033e-05 8.4468009e-05 9.4285714 + 22900 0.0026860018 -4.7142827 3.2749424e-05 2.5990453e-05 5.4254077e-05 9.4285714 + 23000 0.0025151181 -4.7142817 2.0931812e-05 1.2682344e-05 5.595496e-05 9.4285714 + 23100 0.0025681365 -4.7142821 1.2919397e-05 1.5309647e-05 6.7663059e-05 9.4285714 + 23200 0.0026138217 -4.7142844 2.9198308e-05 8.9145293e-06 4.5927536e-05 9.4285714 + 23300 0.0025538605 -4.7142825 1.5601701e-05 2.5666261e-06 5.9681871e-05 9.4285714 + 23400 0.0025780035 -4.7142831 1.5531381e-05 1.6262089e-05 4.8391933e-05 9.4285714 + 23500 0.0026290842 -4.7142841 4.0007382e-05 1.9358699e-05 5.6391547e-05 9.4285714 + 23600 0.0026374898 -4.7142837 4.2415924e-05 2.6680034e-05 7.8943366e-05 9.4285714 + 23700 0.0026600397 -4.7142848 3.1274054e-05 2.2858836e-05 5.5844499e-05 9.4285714 + 23800 0.0026286487 -4.7142843 3.134401e-05 1.673325e-05 6.7045383e-05 9.4285714 + 23900 0.0025976907 -4.7142836 1.1211156e-05 1.4847731e-05 7.4660624e-05 9.4285714 + 24000 0.0026608146 -4.7142848 3.4603723e-05 1.6499341e-05 7.2216335e-05 9.4285714 + 24100 0.0025633506 -4.7142845 3.867442e-05 1.8925086e-05 6.9530966e-05 9.4285714 + 24200 0.0024959363 -4.7142826 5.2079204e-06 1.0677147e-05 6.603799e-05 9.4285714 + 24300 0.0025191041 -4.714284 3.0854418e-05 1.4458004e-05 6.5175572e-05 9.4285714 + 24400 0.0025404144 -4.7142826 1.3366155e-05 -4.7869877e-06 4.6604495e-05 9.4285714 + 24500 0.0025477199 -4.7142819 1.1761444e-05 7.3869528e-06 7.5972407e-05 9.4285714 + 24600 0.0025244957 -4.7142816 2.8340904e-05 1.5797684e-05 6.745716e-05 9.4285714 + 24700 0.0025185405 -4.7142829 6.3525812e-06 -1.861306e-06 3.7757722e-05 9.4285714 + 24800 0.0026096035 -4.7142839 5.3593865e-06 2.4075645e-05 6.1381074e-05 9.4285714 + 24900 0.0026941689 -4.714282 4.4823733e-05 1.0968127e-05 4.7995958e-05 9.4285714 + 25000 0.0028612504 -4.7142813 3.1779718e-05 4.6401335e-06 5.9636383e-05 9.4285714 + 25100 0.0029181859 -4.7142834 3.4700092e-05 2.940514e-05 3.1353865e-05 9.4285714 + 25200 0.0029224272 -4.7142826 9.1589943e-05 1.8532249e-05 7.721286e-05 9.4285714 + 25300 0.002896007 -4.7142825 5.4987938e-05 2.1036261e-05 6.1020184e-05 9.4285714 + 25400 0.0028840407 -4.7142828 5.2461637e-05 2.2639868e-05 3.9655802e-05 9.4285714 + 25500 0.0028947555 -4.7142823 6.0070762e-05 1.4897035e-05 8.1181913e-05 9.4285714 + 25600 0.0027503944 -4.7142838 5.382631e-05 1.7016987e-05 3.6531721e-05 9.4285714 + 25700 0.0026220358 -4.7142836 3.6259657e-05 7.8097408e-06 -7.743362e-06 9.4285714 + 25800 0.0025995028 -4.7142824 4.5919012e-05 1.8985254e-05 2.1266372e-05 9.4285714 + 25900 0.0026400508 -4.7142834 7.8221551e-05 2.1685052e-05 3.375709e-06 9.4285714 + 26000 0.0026732923 -4.7142842 4.2424928e-05 1.4779009e-05 4.7297805e-05 9.4285714 + 26100 0.0026767819 -4.7142836 7.0730603e-05 1.9979803e-05 6.8708873e-05 9.4285714 + 26200 0.002650245 -4.7142843 6.0850536e-05 1.6042762e-05 4.4384559e-05 9.4285714 + 26300 0.0025062537 -4.7142839 1.4572509e-05 7.9903454e-06 5.184762e-05 9.4285714 + 26400 0.0024172951 -4.7142831 6.1665145e-05 4.9829603e-06 5.0750958e-05 9.4285714 + 26500 0.0023386008 -4.7142839 4.1311309e-05 1.6532049e-05 6.4687303e-05 9.4285714 + 26600 0.0023151314 -4.7142829 2.8226825e-05 9.0988804e-06 5.6839283e-05 9.4285714 + 26700 0.0023872935 -4.7142831 4.738766e-05 2.87305e-05 8.4124285e-05 9.4285714 + 26800 0.0024275675 -4.7142842 4.1135282e-05 2.8283742e-05 8.1646594e-05 9.4285714 + 26900 0.0020975864 -4.714275 2.6836629e-05 1.645633e-05 6.2255043e-05 9.4285714 + 27000 0.0020402023 -4.7142818 1.8310395e-05 8.992553e-06 4.3117342e-05 9.4285714 + 27100 0.0021349194 -4.7142824 2.0107723e-05 2.0222274e-05 6.3805186e-05 9.4285714 + 27200 0.0023583687 -4.7142804 4.0475906e-05 2.7939063e-05 7.4028577e-05 9.4285714 + 27300 0.0025352287 -4.7142774 4.2897099e-05 2.978683e-05 5.1518492e-05 9.4285714 + 27400 0.0028050653 -4.7142818 3.6391121e-05 3.8847268e-05 8.1460126e-05 9.4285714 + 27500 0.0028863158 -4.7142832 5.2601052e-05 4.0863801e-05 8.7762512e-05 9.4285714 + 27600 0.0028308376 -4.7142819 4.7296005e-05 4.3501715e-05 6.6548716e-05 9.4285714 + 27700 0.0027984116 -4.7142811 2.9571674e-05 3.2909608e-05 5.0440713e-05 9.4285714 + 27800 0.0028443021 -4.7142838 3.7690095e-05 3.0629256e-05 7.6163383e-05 9.4285714 + 27900 0.00284377 -4.7142843 3.5741455e-05 3.3311851e-05 7.6325626e-05 9.4285714 + 28000 0.0028100241 -4.714283 2.871843e-05 3.3668529e-05 5.0680812e-05 9.4285714 + 28100 0.0027775459 -4.7142823 3.9667012e-05 4.1705107e-05 6.036307e-05 9.4285714 + 28200 0.0028012784 -4.7142842 3.8156857e-05 3.816107e-05 6.6808076e-05 9.4285714 + 28300 0.002502375 -4.7142826 7.9398404e-06 1.8421485e-05 6.8121847e-05 9.4285714 + 28400 0.0023868548 -4.7142792 2.1732644e-05 5.1673961e-05 5.472121e-05 9.4285714 + 28500 0.0023877437 -4.7142788 2.7548393e-05 4.6161956e-05 7.2252138e-05 9.4285714 + 28600 0.0024451809 -4.7142815 1.6230163e-05 2.9597851e-05 6.8265446e-05 9.4285714 + 28700 0.0027979284 -4.7142831 1.9506346e-05 5.0386331e-05 5.6085779e-05 9.4285714 + 28800 0.003009447 -4.7142775 4.8258711e-05 6.3218653e-05 6.934896e-05 9.4285714 + 28900 0.0030828448 -4.7142827 3.5946746e-05 4.9162887e-05 5.8028208e-05 9.4285714 + 29000 0.0031005706 -4.7142842 3.1476476e-05 6.9185234e-05 8.8534963e-05 9.4285714 + 29100 0.003061663 -4.7142825 4.6087127e-05 7.749818e-05 5.7869214e-05 9.4285714 + 29200 0.0030582507 -4.7142832 3.3694132e-05 4.7958517e-05 6.2421415e-05 9.4285714 + 29300 0.0029543259 -4.7142808 3.1011808e-05 7.0670305e-05 8.8289008e-05 9.4285714 + 29400 0.0028586151 -4.7142752 3.5326543e-05 7.1883576e-05 0.00011274673 9.4285714 + 29500 0.0027931723 -4.7142697 2.0496543e-05 6.5564361e-08 9.504846e-05 9.4285714 + 29600 0.0027116711 -4.7142792 1.5446304e-05 -2.530487e-05 6.4204764e-05 9.4285714 + 29700 0.0027519538 -4.7142806 3.1467228e-05 3.8772121e-05 0.00011463793 9.4285714 + 29800 0.002802004 -4.7142796 2.0539135e-05 4.1810858e-05 0.0001022407 9.4285714 + 29900 0.0027921232 -4.7142775 2.9673597e-05 4.0325534e-05 9.264009e-05 9.4285714 + 30000 0.0027309729 -4.7142797 4.152538e-05 5.5912151e-05 8.414807e-05 9.4285714 + 30100 0.0028440623 -4.714283 -6.2560053e-07 2.7300419e-05 7.5487323e-05 9.4285714 + 30200 0.0031114091 -4.714279 5.7769758e-05 3.2816731e-05 9.3038434e-05 9.4285714 + 30300 0.0030967216 -4.7142777 4.2053562e-05 3.3595539e-05 8.9149665e-05 9.4285714 + 30400 0.003136759 -4.7142829 4.8148157e-06 1.2989104e-05 0.00010526859 9.4285714 + 30500 0.0031681914 -4.7142824 5.7738657e-05 3.0146395e-05 0.00013409568 9.4285714 + 30600 0.003185083 -4.7142802 5.5516857e-05 4.3949172e-05 6.7520541e-05 9.4285714 + 30700 0.0031962787 -4.7142803 5.9678032e-05 4.7772498e-05 6.6299764e-05 9.4285714 + 30800 0.0031573709 -4.7142829 6.7771329e-05 4.8345321e-05 9.5254522e-05 9.4285714 + 30900 0.0031540974 -4.7142832 4.9181662e-05 2.9425984e-05 6.1685621e-05 9.4285714 + 31000 0.0031023807 -4.7142808 6.3802037e-05 4.5171377e-05 8.5650305e-05 9.4285714 + 31100 0.003050491 -4.7142815 5.3448201e-05 2.9535474e-05 9.2083422e-05 9.4285714 + 31200 0.0028462626 -4.7142819 2.1997466e-05 3.7212604e-06 6.1538569e-05 9.4285714 + 31300 0.0026361131 -4.7142728 3.8495549e-05 3.4255075e-05 5.9684116e-05 9.4285714 + 31400 0.0024398662 -4.7142283 4.5354411e-05 1.7503834e-05 7.3393371e-05 9.4285714 + 31500 0.0023575511 -4.7142271 1.6654731e-05 1.1752412e-05 6.4901081e-05 9.4285714 + 31600 0.0024828741 -4.7142687 2.2864038e-05 1.1507713e-05 5.4631888e-05 9.4285714 + 31700 0.0026535335 -4.7142802 2.3106661e-05 9.3638517e-06 7.5698037e-05 9.4285714 + 31800 0.0028100049 -4.7142835 1.6600484e-05 3.3168141e-05 6.5518256e-05 9.4285714 + 31900 0.0027556447 -4.7142806 3.8406344e-05 3.263271e-05 5.3054876e-05 9.4285714 + 32000 0.0026748424 -4.714281 4.41324e-05 1.8897102e-05 5.1821768e-05 9.4285714 + 32100 0.0026090836 -4.714283 4.1900487e-05 2.1110951e-05 1.8521323e-05 9.4285714 + 32200 0.0024109991 -4.714283 -1.321517e-05 2.1620678e-06 1.5338728e-05 9.4285714 + 32300 0.0023139624 -4.7142817 2.8549202e-06 3.0807691e-05 6.2846029e-05 9.4285714 + 32400 0.0023065246 -4.7142787 6.1050102e-06 2.7023287e-05 5.793899e-05 9.4285714 + 32500 0.0023303104 -4.7142812 2.2984319e-05 1.979181e-05 3.6783994e-05 9.4285714 + 32600 0.0023697804 -4.7142826 5.3709627e-05 5.195328e-05 0.00010240312 9.4285714 + 32700 0.0023747324 -4.7142818 3.4441081e-05 3.3381035e-05 5.7702411e-05 9.4285714 + 32800 0.0023469734 -4.7142827 2.1058788e-05 2.0210891e-05 4.866378e-05 9.4285714 + 32900 0.0023692101 -4.7142843 3.505222e-05 3.693323e-05 8.8776465e-05 9.4285714 + 33000 0.0023269079 -4.7142842 5.2006631e-05 4.2858249e-05 1.2173041e-05 9.4285714 + 33100 0.0022536897 -4.7142832 3.3447444e-05 2.7888763e-05 5.7406933e-05 9.4285714 + 33200 0.0022884991 -4.7142831 3.11584e-05 2.8785623e-05 7.0736425e-05 9.4285714 + 33300 0.0022872148 -4.7142837 4.7302143e-05 3.4825585e-05 3.908954e-05 9.4285714 + 33400 0.0021441208 -4.7142832 3.4956123e-05 2.0137529e-05 7.3621795e-05 9.4285714 + 33500 0.0021250759 -4.7142791 2.7860008e-05 3.1096735e-05 8.6989863e-05 9.4285714 + 33600 0.0020144547 -4.7142758 8.9491543e-06 3.0873393e-06 3.5821372e-05 9.4285714 + 33700 0.0019601325 -4.714282 -3.1961693e-05 2.8309268e-06 2.7474911e-05 9.4285714 + 33800 0.0019781964 -4.7142836 -1.6432954e-05 4.5532318e-05 5.6180871e-05 9.4285714 + 33900 0.0019362184 -4.7142802 4.4876558e-05 3.5607305e-05 5.5256986e-05 9.4285714 + 34000 0.0018925936 -4.7142772 2.6126162e-05 4.0727261e-05 4.4072383e-05 9.4285714 + 34100 0.0019612538 -4.7142817 1.9711423e-05 3.5292876e-05 5.208739e-05 9.4285714 + 34200 0.0018786841 -4.714283 5.9452613e-05 2.2750167e-05 6.0041189e-05 9.4285714 + 34300 0.0016921132 -4.7142826 -1.9705284e-05 2.7417698e-06 3.5807778e-05 9.4285714 + 34400 0.0015917931 -4.7142715 -8.2912337e-06 6.0058896e-06 4.3767171e-05 9.4285714 + 34500 0.0016313876 -4.714266 2.680046e-05 3.0445446e-05 5.2729086e-05 9.4285714 + 34600 0.0017598223 -4.7142836 2.6680572e-05 1.2800533e-05 4.0769721e-05 9.4285714 + 34700 0.0017113812 -4.7142782 5.1966667e-05 3.8936233e-05 8.7902817e-05 9.4285714 + 34800 0.0016049388 -4.7142731 1.1306618e-05 8.7073772e-06 4.7122089e-05 9.4285714 + 34900 0.0016955115 -4.7142823 2.1303404e-05 6.8274717e-06 2.244299e-05 9.4285714 + 35000 0.00165119 -4.7142758 4.8047362e-05 4.6052136e-05 0.0001287016 9.4285714 + 35100 0.0015817845 -4.7142805 7.4130076e-06 6.5116689e-06 3.4751007e-05 9.4285714 + 35200 0.0015810133 -4.71428 1.6323213e-05 2.5685469e-05 4.4142256e-05 9.4285714 + 35300 0.0015719448 -4.7142785 4.4351148e-05 3.1396033e-05 0.00010629058 9.4285714 + 35400 0.0015567136 -4.7142819 2.0021454e-05 1.9357793e-05 5.0610549e-05 9.4285714 + 35500 0.0015066735 -4.7142813 3.194888e-05 2.6415958e-05 6.1853881e-05 9.4285714 + 35600 0.0014852521 -4.71428 2.4631682e-05 2.5128929e-05 6.3800433e-05 9.4285714 + 35700 0.0014927124 -4.7142812 1.4434624e-05 2.0514828e-05 5.0086984e-05 9.4285714 + 35800 0.0015122965 -4.7142838 3.9102785e-05 3.0076065e-05 8.8360064e-05 9.4285714 + 35900 0.0014880427 -4.7142829 2.0535252e-05 2.5697467e-05 5.0890428e-05 9.4285714 + 36000 0.0014928641 -4.7142817 3.0167149e-05 2.1444226e-05 4.1207355e-05 9.4285714 + 36100 0.001527336 -4.7142841 2.902147e-05 1.4685093e-05 6.5284342e-05 9.4285714 + 36200 0.0015171821 -4.7142843 8.6980069e-06 1.3248493e-05 3.6676445e-05 9.4285714 + 36300 0.0014568435 -4.7142832 2.4741939e-05 2.2778924e-05 2.3227379e-05 9.4285714 + 36400 0.0014373198 -4.7142833 1.7025491e-05 9.2441442e-06 9.2796272e-06 9.4285714 + 36500 0.0014933797 -4.7142841 2.2436188e-05 2.3634423e-05 4.0115013e-05 9.4285714 + 36600 0.0014790058 -4.7142844 2.7847663e-05 2.3033587e-05 6.0153541e-05 9.4285714 + 36700 0.0014215142 -4.7142831 7.4626544e-06 8.4267558e-06 3.3532356e-05 9.4285714 + 36800 0.0014687242 -4.7142834 3.0609847e-05 2.0091509e-05 3.7453289e-05 9.4285714 + 36900 0.0015197322 -4.7142845 4.1412958e-05 1.768941e-05 6.1647851e-05 9.4285714 + 37000 0.0014718289 -4.7142848 9.2181276e-06 1.7771984e-05 4.241779e-05 9.4285714 + 37100 0.0014397493 -4.7142836 1.0070698e-05 1.7128636e-05 4.2549681e-05 9.4285714 + 37200 0.0014802189 -4.7142842 2.0289418e-05 1.8203382e-05 6.7159826e-05 9.4285714 + 37300 0.0015016643 -4.7142853 2.2894506e-05 2.4626017e-05 6.8449216e-05 9.4285714 + 37400 0.001454552 -4.7142845 3.252577e-05 2.2500138e-05 6.8110196e-05 9.4285714 + 37500 0.0014053533 -4.714284 2.1759203e-05 1.0574981e-05 5.6185641e-05 9.4285714 + 37600 0.0014769453 -4.7142846 3.0404851e-05 1.7089339e-05 6.9727868e-05 9.4285714 + 37700 0.0015739223 -4.7142831 2.1426542e-05 3.42621e-05 7.6366086e-05 9.4285714 + 37800 0.0015866458 -4.7142802 1.3835002e-05 2.9698398e-05 5.349542e-05 9.4285714 + 37900 0.0018060673 -4.714283 2.3290467e-05 4.8866722e-05 5.3624377e-05 9.4285714 + 38000 0.0018698613 -4.7142837 1.9661483e-05 5.0745362e-05 0.00010062119 9.4285714 + 38100 0.001806521 -4.7142829 1.7173185e-05 3.4623595e-05 7.3269368e-05 9.4285714 + 38200 0.0017414785 -4.7142831 2.0149042e-05 4.3263226e-05 4.8223324e-05 9.4285714 + 38300 0.0017862585 -4.7142839 -3.1617028e-06 5.0284194e-05 6.8226326e-05 9.4285714 + 38400 0.0018432124 -4.7142847 1.3383822e-05 4.8708694e-05 7.893613e-05 9.4285714 + 38500 0.0018219565 -4.714284 2.4613434e-05 4.7605171e-05 6.6619238e-05 9.4285714 + 38600 0.0017879667 -4.7142838 8.3985015e-06 4.1358479e-05 5.9213827e-05 9.4285714 + 38700 0.0016645668 -4.7142843 2.0981576e-05 3.5962752e-05 6.9118026e-05 9.4285714 + 38800 0.0015532388 -4.7142823 2.352083e-05 4.823541e-05 8.651807e-05 9.4285714 + 38900 0.0014906945 -4.7142804 1.0611406e-05 2.1329584e-05 5.7515699e-05 9.4285714 + 39000 0.0015434414 -4.7142812 8.5061097e-06 2.0153002e-05 4.9215664e-05 9.4285714 + 39100 0.0015840866 -4.7142841 -3.3923334e-07 1.6268478e-05 5.6133584e-05 9.4285714 + 39200 0.0016466039 -4.7142842 1.1839246e-05 1.4932718e-05 7.5184382e-05 9.4285714 + 39300 0.001662635 -4.7142831 1.7421815e-05 3.0733588e-05 6.3898988e-05 9.4285714 + 39400 0.0016178486 -4.7142823 1.3301052e-05 2.8477132e-05 5.941381e-05 9.4285714 + 39500 0.0016786051 -4.7142845 6.7444487e-06 2.8892101e-05 7.2101782e-05 9.4285714 + 39600 0.0016838866 -4.7142848 2.885404e-05 4.6288447e-05 7.6791053e-05 9.4285714 + 39700 0.0016207991 -4.7142835 1.7857683e-05 3.0894371e-05 6.9699154e-05 9.4285714 + 39800 0.0016261068 -4.7142842 5.3181092e-06 1.8564464e-05 6.4314421e-05 9.4285714 + 39900 0.0016951434 -4.7142852 2.4549529e-05 3.6717866e-05 7.5544172e-05 9.4285714 + 40000 0.0016615493 -4.7142849 2.279282e-05 4.9849117e-05 7.1546959e-05 9.4285714 + 40100 0.0015706688 -4.7142837 1.2404708e-05 2.0497875e-05 3.5648913e-05 9.4285714 + 40200 0.0015895978 -4.7142843 1.5043771e-05 1.875925e-05 4.7159872e-05 9.4285714 + 40300 0.0015929756 -4.714285 1.8443939e-05 3.1342615e-05 8.0865403e-05 9.4285714 + 40400 0.0015188289 -4.7142849 1.3805874e-05 1.4407485e-05 4.5193974e-05 9.4285714 + 40500 0.0014142713 -4.7142838 1.8482317e-06 -1.070707e-05 3.1263445e-05 9.4285714 + 40600 0.0013953814 -4.7142832 -2.3166167e-07 1.6611366e-05 4.4618584e-05 9.4285714 + 40700 0.001415077 -4.7142824 1.8129009e-05 4.5414377e-05 6.4636266e-05 9.4285714 + 40800 0.0014138155 -4.7142837 1.060765e-05 6.4546877e-06 3.4072047e-05 9.4285714 + 40900 0.0014693332 -4.7142835 -1.7784606e-06 1.3961184e-05 6.1557637e-05 9.4285714 + 41000 0.0015736689 -4.7142844 1.8601794e-06 1.8476059e-05 6.1179877e-05 9.4285714 + 41100 0.0016541827 -4.7142842 2.1678758e-05 1.0891839e-05 4.5599878e-05 9.4285714 + 41200 0.0017038452 -4.7142841 1.3231109e-05 2.8759274e-05 9.0053712e-05 9.4285714 + 41300 0.0016644832 -4.714284 1.0713539e-06 -9.1261161e-06 4.8251094e-05 9.4285714 + 41400 0.0016962923 -4.7142837 1.6404025e-05 -3.3298656e-06 6.0616767e-05 9.4285714 + 41500 0.0016885952 -4.7142841 3.7079931e-05 4.8590437e-05 7.2398732e-05 9.4285714 + 41600 0.0016509383 -4.7142843 3.2822352e-05 2.5492134e-05 5.5315007e-05 9.4285714 + 41700 0.0016234839 -4.7142838 1.9340094e-05 9.1999445e-07 5.9365294e-05 9.4285714 + 41800 0.0015943508 -4.7142842 3.6720434e-05 2.6567585e-05 2.5556112e-05 9.4285714 + 41900 0.0015714166 -4.7142843 2.7615414e-05 2.6447346e-05 2.1698634e-05 9.4285714 + 42000 0.0015421224 -4.7142844 1.6764021e-05 6.0391503e-07 4.4529107e-05 9.4285714 + 42100 0.0015071161 -4.7142846 1.6199656e-05 1.3826919e-05 6.1714716e-05 9.4285714 + 42200 0.0015198787 -4.7142846 2.3123818e-05 1.6785097e-05 5.3275617e-05 9.4285714 + 42300 0.0014983415 -4.7142843 3.7692088e-05 1.9658462e-05 3.2518877e-05 9.4285714 + 42400 0.0014071355 -4.7142842 4.1190884e-05 7.2842001e-06 4.1096707e-05 9.4285714 + 42500 0.0013022808 -4.7142837 1.3146116e-05 -1.5421963e-05 2.5801425e-05 9.4285714 + 42600 0.0013470366 -4.7142836 1.3584089e-05 1.9218153e-06 9.6729008e-06 9.4285714 + 42700 0.0013910091 -4.7142849 3.7784878e-05 1.4670527e-05 2.6364864e-05 9.4285714 + 42800 0.0014014966 -4.714285 2.1845518e-05 2.9117451e-05 4.3087627e-05 9.4285714 + 42900 0.0013733676 -4.7142848 1.4001755e-05 1.7988978e-05 3.2280506e-05 9.4285714 + 43000 0.0013517268 -4.7142849 1.4307541e-05 1.7559777e-07 3.4839804e-05 9.4285714 + 43100 0.0013740884 -4.7142851 1.0781187e-05 2.3199114e-05 4.3544073e-05 9.4285714 + 43200 0.0013899917 -4.7142853 1.9752629e-05 1.5754375e-05 4.0495086e-05 9.4285714 + 43300 0.0013591753 -4.714285 1.7097046e-05 1.5458697e-05 4.3522182e-05 9.4285714 + 43400 0.0013610826 -4.714285 9.9700923e-06 2.1966114e-05 3.7559347e-05 9.4285714 + 43500 0.0013931122 -4.7142854 2.0823321e-05 9.7449225e-06 4.7553728e-05 9.4285714 + 43600 0.0014106574 -4.7142852 1.8012822e-05 1.7643108e-05 3.9965229e-05 9.4285714 + 43700 0.0014643496 -4.7142851 1.0503719e-05 1.0375579e-05 2.9638501e-05 9.4285714 + 43800 0.0014941312 -4.7142851 2.1685281e-05 2.3181612e-05 6.4949433e-05 9.4285714 + 43900 0.0015090635 -4.7142853 1.6758041e-05 3.1022306e-05 4.8366553e-05 9.4285714 + 44000 0.00147309 -4.714285 2.2739697e-05 1.8693279e-05 4.0652545e-05 9.4285714 + 44100 0.0014483812 -4.7142847 1.7676479e-05 1.6083745e-05 6.0019861e-05 9.4285714 + 44200 0.0014457794 -4.7142852 1.2765388e-05 1.3464192e-05 4.2906017e-05 9.4285714 + 44300 0.0014371658 -4.7142853 1.1200897e-06 2.3278076e-05 4.086685e-05 9.4285714 + 44400 0.0013803973 -4.7142849 -7.1280222e-06 2.4628501e-05 3.9610367e-05 9.4285714 + 44500 0.0013488729 -4.7142847 4.9719923e-07 1.3646926e-05 3.4823323e-05 9.4285714 + 44600 0.0013656769 -4.7142848 2.4369762e-06 2.3453695e-05 4.1758664e-05 9.4285714 + 44700 0.0013518184 -4.7142848 6.7909288e-06 2.5779362e-05 3.8309701e-05 9.4285714 + 44800 0.0013048932 -4.7142846 2.4879741e-06 2.9653315e-05 4.3656829e-05 9.4285714 + 44900 0.0012854105 -4.7142833 8.7416075e-06 1.682229e-05 1.9921476e-05 9.4285714 + 45000 0.001286558 -4.7142847 1.4303042e-05 1.7290427e-05 3.8131755e-05 9.4285714 + 45100 0.0013592533 -4.7142851 1.2616705e-05 2.4001138e-05 4.5820457e-05 9.4285714 + 45200 0.0014362294 -4.714283 2.1561121e-05 1.8577567e-05 2.1706723e-05 9.4285714 + 45300 0.0015766327 -4.7142832 2.1027604e-05 3.0848781e-05 1.6514286e-05 9.4285714 + 45400 0.001687552 -4.7142845 1.9352364e-05 4.1348267e-05 2.5080527e-05 9.4285714 + 45500 0.0016699457 -4.7142847 1.0615491e-05 1.1413962e-05 6.9101187e-05 9.4285714 + 45600 0.0016172361 -4.7142836 7.0964609e-06 4.821012e-06 2.6760796e-05 9.4285714 + 45700 0.0015761709 -4.7142825 1.4298238e-05 3.51784e-05 1.5636845e-05 9.4285714 + 45800 0.0015925483 -4.7142843 9.3672191e-06 2.8941821e-05 5.6272239e-05 9.4285714 + 45900 0.0015805499 -4.7142847 2.0693446e-05 2.3601313e-05 4.9790055e-05 9.4285714 + 46000 0.0014924043 -4.7142819 3.0482545e-06 2.7482064e-05 5.2242811e-05 9.4285714 + 46100 0.0014461422 -4.7142816 -1.3840829e-06 2.1086859e-05 1.9791507e-05 9.4285714 + 46200 0.0011784526 -4.7142835 1.3993066e-05 1.3269187e-05 5.0583058e-05 9.4285714 + 46300 0.0011606851 -4.7142829 3.6366292e-05 6.5672239e-06 7.5120292e-05 9.4285714 + 46400 0.0011759787 -4.7142801 2.2275954e-05 2.0173532e-05 5.1560571e-05 9.4285714 + 46500 0.0011858836 -4.7142835 2.1223742e-06 1.483095e-06 3.6388044e-05 9.4285714 + 46600 0.0011743104 -4.7142827 2.1646618e-05 -5.4740894e-06 6.2072633e-05 9.4285714 + 46700 0.0012033793 -4.7142843 1.7866294e-05 -5.3760931e-06 4.5468891e-05 9.4285714 + 46800 0.0011942689 -4.7142835 -5.5442881e-06 4.0902609e-06 4.4849969e-05 9.4285714 + 46900 0.0012623727 -4.7142827 1.7020992e-05 1.0229188e-05 5.5659516e-05 9.4285714 + 47000 0.0013644294 -4.7142852 2.381855e-05 9.9614126e-06 6.24726e-05 9.4285714 + 47100 0.0013870071 -4.7142848 8.4784512e-06 -6.915815e-06 5.1797793e-05 9.4285714 + 47200 0.0014203784 -4.7142837 1.5590847e-05 -1.0219736e-07 3.1034433e-05 9.4285714 + 47300 0.001538236 -4.7142848 2.6362645e-05 1.3548787e-05 5.557325e-05 9.4285714 + 47400 0.0015648549 -4.7142843 3.5415707e-05 2.2521363e-06 5.7281834e-05 9.4285714 + 47500 0.001494784 -4.7142832 2.5993648e-05 1.5282594e-06 3.9287268e-05 9.4285714 + 47600 0.0014656893 -4.714279 2.7837149e-05 3.3381636e-05 4.4295836e-05 9.4285714 + 47700 0.0014938875 -4.7142812 3.4246701e-05 2.272226e-05 4.1375306e-05 9.4285714 + 47800 0.001511092 -4.7142849 2.9752157e-05 1.5860227e-05 2.1235494e-05 9.4285714 + 47900 0.001469112 -4.7142836 3.7936135e-05 6.1200092e-05 2.8587372e-05 9.4285714 + 48000 0.0014306661 -4.714282 2.4421246e-05 -1.3535776e-05 3.061047e-05 9.4285714 + 48100 0.0014548885 -4.7142836 2.6735487e-05 -7.3180122e-06 3.3948436e-05 9.4285714 + 48200 0.0015061314 -4.7142829 4.140276e-05 5.1543803e-05 5.1029222e-05 9.4285714 + 48300 0.0015267745 -4.714284 2.037327e-05 -2.5168447e-07 3.499232e-05 9.4285714 + 48400 0.0015440644 -4.7142815 2.0273946e-05 1.439501e-05 2.6023951e-05 9.4285714 + 48500 0.001657659 -4.7142832 3.6933655e-05 3.0213713e-05 4.8179094e-05 9.4285714 + 48600 0.001777997 -4.7142842 4.1509486e-05 2.4145889e-05 4.0406442e-05 9.4285714 + 48700 0.0018122614 -4.7142837 5.0474665e-05 5.009846e-05 3.6128039e-05 9.4285714 + 48800 0.0017357102 -4.7142832 4.1632778e-05 1.8302719e-05 4.4357947e-05 9.4285714 + 48900 0.0017008067 -4.7142792 3.5969083e-05 3.0003211e-05 4.4818722e-05 9.4285714 + 49000 0.0016560566 -4.7142816 3.8378714e-05 3.5773889e-05 6.9904455e-05 9.4285714 + 49100 0.0013858365 -4.7142834 -2.7662832e-05 -1.9017793e-05 2.3310318e-05 9.4285714 + 49200 0.0013029643 -4.7142819 -9.4036627e-06 3.243001e-05 3.4731685e-05 9.4285714 + 49300 0.0014017081 -4.7142819 1.9868651e-05 6.3079574e-06 6.795426e-05 9.4285714 + 49400 0.0014679145 -4.7142832 1.5452213e-05 1.1115231e-05 4.4330358e-05 9.4285714 + 49500 0.0014506585 -4.7142838 3.0950939e-05 5.7847777e-05 4.8499958e-05 9.4285714 + 49600 0.0014570027 -4.7142829 3.7765443e-05 1.655906e-05 4.784843e-05 9.4285714 + 49700 0.0015840061 -4.7142825 2.5088722e-05 2.5801192e-05 4.8215019e-05 9.4285714 + 49800 0.0017175254 -4.7142825 4.4566914e-05 5.0186512e-05 3.7860964e-05 9.4285714 + 49900 0.0015288378 -4.7142821 5.5467128e-06 4.8144498e-05 3.7009159e-05 9.4285714 + 50000 0.0013741478 -4.7142812 3.7298499e-06 5.4006679e-05 6.7840456e-05 9.4285714 + 50100 0.0014577044 -4.7142813 2.392739e-05 3.5823648e-05 8.4679333e-05 9.4285714 + 50200 0.0014533645 -4.7142806 2.6568576e-05 2.8632159e-05 7.3253043e-05 9.4285714 + 50300 0.0014378857 -4.7142796 1.2631564e-05 3.7062154e-05 6.1919405e-05 9.4285714 + 50400 0.0014673626 -4.7142833 3.3476007e-05 3.4512954e-05 5.2231385e-05 9.4285714 + 50500 0.0014389539 -4.7142833 2.6513699e-05 2.5971299e-05 7.7926264e-05 9.4285714 + 50600 0.0013845835 -4.7142818 8.3728219e-06 1.7702343e-05 4.6752162e-05 9.4285714 + 50700 0.0013239108 -4.7142818 3.3435677e-06 2.0150041e-05 4.3728286e-05 9.4285714 + 50800 0.0013271805 -4.714284 8.7252941e-06 2.2918968e-05 6.0498568e-05 9.4285714 + 50900 0.0012488786 -4.7142764 3.1117606e-05 1.4209574e-05 4.1671621e-05 9.4285714 + 51000 0.0012529071 -4.7142804 1.2963298e-05 1.4299315e-05 5.8097821e-05 9.4285714 + 51100 0.001319065 -4.7142826 1.9700618e-05 2.6226178e-06 5.9155615e-05 9.4285714 + 51200 0.0013744785 -4.7142832 3.4998136e-05 3.0473998e-05 6.0861969e-05 9.4285714 + 51300 0.0013161904 -4.7142823 1.2630597e-05 1.861303e-05 7.3073801e-05 9.4285714 + 51400 0.0012815665 -4.7142805 4.3416968e-07 1.3135234e-06 4.9501072e-05 9.4285714 + 51500 0.0013214475 -4.7142836 3.3681889e-05 2.6425866e-05 6.2518922e-05 9.4285714 + 51600 0.0012171442 -4.7142837 3.2027485e-05 9.0591083e-06 5.9418979e-05 9.4285714 + 51700 0.0011790522 -4.7142826 -6.1159994e-06 7.1630124e-07 2.5740297e-05 9.4285714 + 51800 0.0012039843 -4.7142824 1.0995427e-05 2.6054476e-05 5.5748633e-05 9.4285714 + 51900 0.0012565415 -4.7142844 1.9400182e-05 2.5494508e-05 6.1277559e-05 9.4285714 + 52000 0.0012276679 -4.7142844 1.6616787e-05 4.1938123e-05 5.0132658e-05 9.4285714 + 52100 0.0011626948 -4.7142824 -1.0687558e-05 1.1349676e-05 3.6394166e-05 9.4285714 + 52200 0.0011241924 -4.714284 -5.4161964e-05 -2.4459046e-05 1.3186978e-05 9.4285714 + 52300 0.0011578999 -4.7142844 1.200652e-05 2.2111927e-05 6.7993857e-05 9.4285714 + 52400 0.0011557789 -4.7142843 2.4940167e-05 2.9720848e-05 7.358605e-05 9.4285714 + 52500 0.0011161797 -4.7142843 -1.6357992e-05 8.993132e-06 1.7706318e-05 9.4285714 + 52600 0.0010966226 -4.7142829 -1.2988176e-05 3.5093634e-06 6.654378e-05 9.4285714 + 52700 0.0011432225 -4.7142843 -1.6191878e-05 1.9253948e-06 4.8162147e-05 9.4285714 + 52800 0.0011363674 -4.7142848 6.2082109e-06 2.0401562e-05 3.9851134e-05 9.4285714 + 52900 0.0010514167 -4.7142835 -3.8258655e-05 6.8080385e-06 4.2066359e-05 9.4285714 + 53000 0.0011496826 -4.7142835 4.4571341e-06 1.4796753e-05 -3.4246555e-06 9.4285714 + 53100 0.0011921684 -4.7142837 3.344801e-05 2.856294e-05 8.3368759e-05 9.4285714 + 53200 0.0011770058 -4.7142843 -7.3014849e-06 3.3673043e-06 3.8040757e-05 9.4285714 + 53300 0.001147192 -4.714284 2.4343505e-05 6.6428364e-06 1.8856837e-06 9.4285714 + 53400 0.0011590693 -4.7142848 1.6470648e-05 3.0495876e-06 6.9929497e-05 9.4285714 + 53500 0.0011430794 -4.7142846 1.6587072e-05 -6.6680943e-06 2.7910402e-05 9.4285714 + 53600 0.0011087622 -4.7142834 2.5094369e-05 3.0799765e-06 2.4953557e-05 9.4285714 + 53700 0.0011205481 -4.7142845 2.1637477e-05 2.193595e-06 4.7249366e-05 9.4285714 + 53800 0.0011280562 -4.7142848 3.4346512e-05 -4.617164e-07 2.7232129e-05 9.4285714 + 53900 0.0010988683 -4.7142844 2.5923912e-05 -9.9731324e-06 4.1399146e-05 9.4285714 + 54000 0.0010830581 -4.7142845 3.345101e-06 -2.7639517e-05 3.9564896e-05 9.4285714 + 54100 0.0011234194 -4.7142848 1.9740958e-05 -1.2111329e-05 3.2830048e-05 9.4285714 + 54200 0.0011582518 -4.7142845 2.9401158e-05 5.5629213e-06 3.1610007e-05 9.4285714 + 54300 0.0012079798 -4.7142845 1.1797073e-05 -1.0996608e-05 4.1360239e-05 9.4285714 + 54400 0.0012759379 -4.7142845 2.4474721e-05 5.4773406e-06 3.5496741e-05 9.4285714 + 54500 0.0013710939 -4.7142848 2.8767103e-05 2.1233306e-05 5.7305899e-05 9.4285714 + 54600 0.001351372 -4.7142844 2.2558984e-05 1.2286433e-05 5.5134807e-05 9.4285714 + 54700 0.0013179832 -4.7142838 2.6774379e-05 1.4542111e-05 3.9898608e-05 9.4285714 + 54800 0.0013524804 -4.7142847 2.229707e-05 1.4562092e-05 6.2487718e-05 9.4285714 + 54900 0.0013864891 -4.7142852 4.239521e-05 3.3034994e-05 6.5465301e-05 9.4285714 + 55000 0.0013728684 -4.714285 3.4900995e-05 2.8728561e-05 5.1207349e-05 9.4285714 + 55100 0.0013602987 -4.7142847 1.6039517e-05 2.6888845e-05 5.7202129e-05 9.4285714 + 55200 0.0013730674 -4.7142852 3.2011111e-05 4.001012e-05 5.9143948e-05 9.4285714 + 55300 0.0013573904 -4.7142853 2.79438e-05 2.5418155e-05 5.0386473e-05 9.4285714 + 55400 0.0013146923 -4.714285 5.6985755e-06 1.6124421e-05 3.647185e-05 9.4285714 + 55500 0.0012802617 -4.7142849 4.7098361e-06 1.8150458e-05 3.2791104e-05 9.4285714 + 55600 0.0012561881 -4.7142847 6.4880601e-06 1.4866046e-05 4.810369e-05 9.4285714 + 55700 0.0011926069 -4.7142845 5.2020054e-06 1.6988814e-05 4.0673736e-05 9.4285714 + 55800 0.0011078803 -4.7142843 -1.4214396e-05 1.1003816e-05 3.5370009e-05 9.4285714 + 55900 0.0011623337 -4.7142849 -7.961811e-06 9.816216e-06 3.6997949e-05 9.4285714 + 56000 0.0011768674 -4.7142849 3.3611095e-05 2.8961294e-05 5.7414124e-05 9.4285714 + 56100 0.0010918545 -4.7142845 9.6623883e-06 2.6190607e-05 2.5265414e-05 9.4285714 + 56200 0.0010366064 -4.7142833 1.9468714e-05 1.6588408e-05 8.9933949e-06 9.4285714 + 56300 0.0010690499 -4.7142843 2.0757709e-05 2.2349282e-05 3.1730279e-05 9.4285714 + 56400 0.0010922106 -4.7142852 2.2913268e-05 3.2651009e-05 2.4373889e-05 9.4285714 + 56500 0.00097948932 -4.7142845 1.047186e-05 4.5511398e-06 1.4271133e-05 9.4285714 + 56600 0.00083953218 -4.7142838 -5.3166638e-05 -6.071921e-05 8.8415821e-06 9.4285714 + 56700 0.00087323578 -4.714284 -1.04371e-05 -4.6280915e-06 2.0472043e-05 9.4285714 + 56800 0.00088053575 -4.7142838 2.8520329e-05 4.1269508e-05 6.2902721e-05 9.4285714 + 56900 0.00089158441 -4.7142847 7.6734414e-06 2.4539278e-06 1.7166604e-05 9.4285714 + 57000 0.00087273365 -4.7142842 1.0179876e-05 1.4493204e-05 4.1903669e-05 9.4285714 + 57100 0.00096131522 -4.7142844 5.609322e-07 1.1485085e-05 5.772773e-05 9.4285714 + 57200 0.0010539501 -4.7142843 3.6802393e-05 2.945748e-05 3.347874e-05 9.4285714 + 57300 0.0010962451 -4.7142842 -1.3637211e-05 3.3450113e-05 6.1125508e-05 9.4285714 + 57400 0.0010990407 -4.7142841 8.1925364e-06 2.3600052e-05 1.7167437e-05 9.4285714 + 57500 0.001113105 -4.7142847 3.6246911e-05 2.358066e-05 4.2173807e-05 9.4285714 + 57600 0.0011148744 -4.7142851 -4.8216672e-06 3.0665785e-05 6.6024491e-05 9.4285714 + 57700 0.0010722388 -4.7142846 1.7000744e-05 2.688002e-05 2.3075994e-05 9.4285714 + 57800 0.0010623092 -4.7142849 1.3590756e-05 1.6744682e-05 3.8353208e-05 9.4285714 + 57900 0.0010649053 -4.7142853 -3.3010653e-07 2.6373145e-05 2.9983485e-05 9.4285714 + 58000 0.0010495177 -4.7142851 7.6119035e-06 2.1836033e-05 1.265221e-05 9.4285714 + 58100 0.0010307882 -4.7142852 -7.7502389e-06 1.3378696e-05 1.0969839e-05 9.4285714 + 58200 0.0010412592 -4.7142852 4.3928647e-06 3.0416542e-05 1.6769362e-05 9.4285714 + 58300 0.0010229406 -4.7142844 6.529523e-06 2.3200768e-05 2.5072671e-05 9.4285714 + 58400 0.0010260268 -4.7142851 -2.8809788e-06 1.5756224e-05 1.7951865e-05 9.4285714 + 58500 0.0010327233 -4.7142853 1.5652252e-05 2.7587369e-05 2.9959245e-05 9.4285714 + 58600 0.00103292 -4.7142851 -7.8391453e-07 1.2493944e-05 4.0429013e-05 9.4285714 + 58700 0.0010231015 -4.714285 -1.2910372e-05 1.0965102e-05 2.5523576e-05 9.4285714 + 58800 0.0010232909 -4.7142851 -2.3625838e-06 2.5304336e-05 3.4549235e-05 9.4285714 + 58900 0.0010239323 -4.7142853 -1.089027e-05 2.0495207e-05 3.7315687e-05 9.4285714 + 59000 0.001016459 -4.7142853 -1.1354057e-05 1.3532685e-05 3.9797641e-05 9.4285714 + 59100 0.0010036847 -4.7142851 -7.9191139e-06 1.4300652e-05 4.3609301e-05 9.4285714 + 59200 0.0010132328 -4.7142851 -1.1555113e-05 1.5968238e-05 3.5674565e-05 9.4285714 + 59300 0.00099580602 -4.7142855 2.1165333e-06 8.5335199e-06 3.9049778e-05 9.4285714 + 59400 0.00087949872 -4.714285 -3.1482576e-05 -4.8205545e-05 3.9269324e-05 9.4285714 + 59500 0.00081320317 -4.714284 -3.3284401e-05 -3.2799397e-05 3.3461703e-05 9.4285714 + 59600 0.00085690123 -4.7142842 1.9191454e-05 1.6528234e-06 3.40213e-05 9.4285714 + 59700 0.00089260686 -4.7142849 2.9582825e-05 1.6636838e-05 4.3583431e-05 9.4285714 + 59800 0.00089861372 -4.7142851 1.7997571e-05 4.3257201e-06 4.2378883e-05 9.4285714 + 59900 0.00087665775 -4.7142849 1.6192919e-05 -1.4496426e-06 3.5942313e-05 9.4285714 + 60000 0.00089299421 -4.7142851 1.8510939e-05 1.0890382e-05 4.2010858e-05 9.4285714 + 60100 0.00091043761 -4.7142853 3.2870349e-05 1.4301938e-05 5.2194116e-05 9.4285714 + 60200 0.00089398431 -4.7142854 2.5398237e-05 1.0088628e-05 4.7529466e-05 9.4285714 + 60300 0.00086293835 -4.7142848 3.830022e-06 9.7143886e-07 2.9037407e-05 9.4285714 + 60400 0.00087367533 -4.7142851 3.0430953e-05 -2.3380418e-06 4.0623961e-05 9.4285714 + 60500 0.0008996466 -4.7142854 3.7942217e-05 2.39568e-05 5.3475884e-05 9.4285714 + 60600 0.00088006389 -4.7142852 2.0133938e-05 2.3682003e-05 2.9732827e-05 9.4285714 + 60700 0.00086354544 -4.714285 2.1009182e-05 1.2211596e-05 2.3850413e-05 9.4285714 + 60800 0.00086600787 -4.7142852 2.0591502e-05 1.8785414e-05 3.9466827e-05 9.4285714 + 60900 0.00084908513 -4.7142854 1.7991821e-05 -2.5625702e-06 3.6168481e-05 9.4285714 + 61000 0.00081848444 -4.714285 1.1743841e-05 -1.0039731e-06 2.3813715e-05 9.4285714 + 61100 0.00081030579 -4.7142849 3.537404e-06 1.3507543e-05 2.1577202e-05 9.4285714 + 61200 0.0008287085 -4.7142855 -1.6578114e-05 -2.3836004e-06 3.0510342e-05 9.4285714 + 61300 0.00082838076 -4.7142854 -4.4895287e-06 1.6704188e-05 2.7075219e-05 9.4285714 + 61400 0.00080635705 -4.7142853 -5.4913681e-06 4.2983871e-06 2.6647122e-05 9.4285714 + 61500 0.00078672062 -4.7142852 -2.1193729e-06 -6.3943736e-06 2.7752606e-05 9.4285714 + 61600 0.00072454867 -4.7142852 2.3083142e-05 1.358121e-05 1.6623515e-05 9.4285714 + 61700 0.00072238545 -4.7142852 2.2896501e-05 2.2719452e-05 2.3146939e-05 9.4285714 + 61800 0.0006846567 -4.7142847 -1.5935741e-05 7.6170365e-06 6.7191353e-06 9.4285714 + 61900 0.00068969078 -4.714285 -3.9847748e-06 -5.6268141e-06 1.8910588e-05 9.4285714 + 62000 0.00070410522 -4.7142851 2.8052932e-05 1.5347721e-05 2.0591592e-05 9.4285714 + 62100 0.00069755306 -4.7142852 -1.0113933e-06 1.1265584e-05 5.6059725e-06 9.4285714 + 62200 0.0006790829 -4.7142849 -2.81478e-06 2.7325019e-06 3.0085158e-05 9.4285714 + 62300 0.00069847905 -4.7142853 1.4161519e-05 1.7888353e-05 2.2412947e-05 9.4285714 + 62400 0.00071123227 -4.7142855 3.9545518e-06 6.9576173e-06 3.4248552e-05 9.4285714 + 62500 0.00068462445 -4.7142853 1.0944869e-06 1.7850058e-06 3.43231e-05 9.4285714 + 62600 0.00067550903 -4.7142852 -9.4968789e-07 8.4420549e-06 5.2556093e-06 9.4285714 + 62700 0.0006877517 -4.7142855 -4.9368602e-06 3.3785727e-06 2.7617497e-05 9.4285714 + 62800 0.00068787326 -4.7142856 6.9994384e-06 9.9201491e-06 2.0772847e-05 9.4285714 + 62900 0.00062152508 -4.7142852 -5.4677176e-06 2.5080768e-08 1.1878067e-05 9.4285714 + 63000 0.00055861328 -4.7142838 -1.3977915e-05 -2.6988581e-05 2.8486912e-05 9.4285714 + 63100 0.000571832 -4.7142837 4.551111e-06 -1.6248709e-05 1.3759456e-05 9.4285714 + 63200 0.00057347056 -4.7142828 3.9287266e-06 1.7547618e-05 2.1044407e-05 9.4285714 + 63300 0.00058501123 -4.7142851 -2.7238264e-08 9.750124e-07 3.0448189e-05 9.4285714 + 63400 0.00057267694 -4.7142844 3.5348342e-06 1.4501946e-05 1.1962887e-05 9.4285714 + 63500 0.00059047897 -4.7142846 -3.4842035e-06 -1.1490494e-05 1.8515316e-05 9.4285714 + 63600 0.00059993163 -4.7142851 7.2853972e-06 -6.5680277e-06 3.0811491e-05 9.4285714 + 63700 0.00060109859 -4.7142854 -2.4914767e-06 3.1509102e-05 1.5224907e-05 9.4285714 + 63800 0.00057519486 -4.7142853 -5.2164121e-06 -9.3087189e-06 1.6521312e-05 9.4285714 + 63900 0.00055443844 -4.7142845 -7.3004841e-07 -1.1968621e-05 1.1797888e-05 9.4285714 + 64000 0.00056759204 -4.7142849 -7.7518818e-06 1.4912178e-06 2.0091469e-05 9.4285714 + 64100 0.00058663661 -4.7142855 -2.7113076e-06 -3.5925569e-06 2.8062773e-05 9.4285714 + 64200 0.00057347788 -4.7142852 5.1754545e-06 9.7180322e-06 2.1389084e-05 9.4285714 + 64300 0.00053337032 -4.7142845 5.2663075e-06 -9.1712228e-06 1.6519126e-05 9.4285714 + 64400 0.00052859542 -4.7142849 5.142087e-06 -3.2702459e-06 1.0079362e-05 9.4285714 + 64500 0.00053552942 -4.714285 1.0823772e-05 1.503423e-05 1.2411924e-05 9.4285714 + 64600 0.00052627698 -4.7142844 2.2423208e-06 -3.8647492e-06 2.1010357e-05 9.4285714 + 64700 0.00052323283 -4.7142849 8.9865404e-06 -5.6885729e-06 1.3637208e-05 9.4285714 + 64800 0.00051390523 -4.7142853 1.2239859e-05 2.6754326e-06 -2.6032069e-06 9.4285714 + 64900 0.00048966963 -4.7142851 -6.0061958e-06 -7.8807214e-06 -6.6382282e-06 9.4285714 + 65000 0.00049053421 -4.7142851 1.2848234e-07 9.22648e-06 -3.5744044e-06 9.4285714 + 65100 0.00048846101 -4.7142849 8.1510666e-06 1.1083499e-06 2.0109464e-06 9.4285714 + 65200 0.00048131013 -4.7142852 -4.8975302e-06 -5.1633147e-06 5.4699239e-06 9.4285714 + 65300 0.00048872409 -4.7142853 4.7142401e-06 1.691024e-05 2.7883986e-06 9.4285714 + 65400 0.00048129656 -4.7142849 1.2223399e-05 8.3036545e-06 1.0122916e-05 9.4285714 + 65500 0.00046912517 -4.714285 -7.4865593e-06 4.6436236e-06 5.5770682e-06 9.4285714 + 65600 0.00047002254 -4.7142854 8.2862648e-06 7.8419235e-06 8.0541998e-06 9.4285714 + 65700 0.00047362561 -4.7142854 9.2771772e-06 -8.7987309e-06 1.0741198e-05 9.4285714 + 65800 0.00046227466 -4.7142853 -4.2420817e-07 -7.1296538e-06 7.083119e-06 9.4285714 + 65900 0.00043700346 -4.7142852 -1.9682929e-07 -9.3003721e-06 -1.1250915e-05 9.4285714 + 66000 0.00043749205 -4.7142855 -1.7014799e-07 -3.4411821e-05 -1.6851488e-06 9.4285714 + 66100 0.00043689448 -4.7142855 -3.3209087e-07 -1.2097596e-05 1.5080218e-05 9.4285714 + 66200 0.00043083336 -4.7142854 -1.7492644e-05 -9.2539272e-06 3.3081943e-06 9.4285714 + 66300 0.00039899596 -4.7142853 -1.8156849e-05 -2.5702661e-05 2.0083272e-06 9.4285714 + 66400 0.0003823885 -4.7142853 -2.7443056e-05 -9.0180933e-06 -2.0852934e-05 9.4285714 + 66500 0.00037207285 -4.7142854 -2.8173941e-05 -8.4639761e-06 -8.986547e-06 9.4285714 + 66600 0.00035144773 -4.7142851 -1.9397453e-05 -1.9569426e-05 -1.5926815e-05 9.4285714 + 66700 0.00035197974 -4.7142851 -1.6202598e-05 -1.0829668e-05 -2.0125823e-05 9.4285714 + 66800 0.00035739386 -4.7142852 -1.5574074e-05 -1.0986852e-05 1.6508639e-06 9.4285714 + 66900 0.00035170689 -4.7142855 -1.1747641e-05 -2.4351774e-05 -9.5474172e-06 9.4285714 + 67000 0.00033774919 -4.7142854 -1.2637598e-05 -2.2908028e-05 -1.5217687e-05 9.4285714 + 67100 0.00032101959 -4.7142853 -1.1767862e-05 -2.1311081e-05 -1.0304648e-05 9.4285714 + 67200 0.00031233812 -4.7142854 -5.2236053e-06 -2.068718e-05 -2.0484918e-05 9.4285714 + 67300 0.00030816613 -4.7142854 -4.8807838e-06 -1.6873987e-05 -1.6336161e-05 9.4285714 + 67400 0.00029867883 -4.7142851 -8.0147212e-06 -1.7083508e-05 -1.2550645e-05 9.4285714 + 67500 0.00030042709 -4.7142854 -6.5309243e-06 -9.405081e-06 -1.1252551e-05 9.4285714 + 67600 0.00030033817 -4.7142856 -1.3073314e-05 -9.7861246e-06 -3.2277767e-06 9.4285714 + 67700 0.00028787515 -4.7142855 -2.8280563e-06 -2.9020905e-05 -1.7597895e-05 9.4285714 + 67800 0.00026979448 -4.7142853 -3.2183943e-06 -3.0103384e-05 -2.0251666e-05 9.4285714 + 67900 0.00026965138 -4.7142854 -1.3254428e-05 -2.464949e-05 -9.6257374e-06 9.4285714 + 68000 0.00027265196 -4.7142855 -1.3646014e-06 -2.5322882e-05 -1.1489172e-05 9.4285714 + 68100 0.00026796678 -4.7142855 -4.3450692e-06 -1.7087787e-05 -3.45311e-06 9.4285714 + 68200 0.00027058601 -4.7142855 -1.2509866e-05 -1.456611e-05 -4.9446896e-06 9.4285714 + 68300 0.00026650382 -4.7142856 1.5461585e-06 -1.0810222e-05 -9.7288585e-06 9.4285714 + 68400 0.00025514566 -4.7142856 -9.542593e-06 -1.0978326e-05 -6.4652966e-06 9.4285714 + 68500 0.00024429737 -4.7142854 -1.7699917e-05 -1.3594012e-05 -6.6520818e-06 9.4285714 + 68600 0.00024181324 -4.7142856 -1.5094148e-05 -7.2040295e-06 -5.9906355e-06 9.4285714 + 68700 0.00024284694 -4.7142856 -2.0541404e-05 -1.3071844e-05 -7.1285798e-06 9.4285714 + 68800 0.00023812698 -4.7142856 -1.4200497e-05 -1.7171545e-05 -1.0660295e-05 9.4285714 + 68900 0.00023135089 -4.7142856 -6.1565648e-06 -1.9243568e-05 -7.270452e-06 9.4285714 + 69000 0.00022446839 -4.7142856 -1.0440396e-05 -2.1626098e-05 -1.4130622e-05 9.4285714 + 69100 0.00021400573 -4.7142856 -1.4206929e-05 -1.3377465e-05 -1.9587581e-05 9.4285714 + 69200 0.00019818105 -4.7142856 -2.8789277e-05 -1.0308046e-05 -1.7211724e-05 9.4285714 + 69300 0.00018965025 -4.7142855 -2.6173805e-05 -2.8280101e-05 -2.5218621e-05 9.4285714 + 69400 0.0001714065 -4.7142855 -1.654127e-05 -2.450988e-05 -2.1495299e-05 9.4285714 + 69500 0.0001763348 -4.7142856 -2.0780592e-05 -2.2639566e-05 -1.5576573e-05 9.4285714 + 69600 0.0001481171 -4.7142849 -1.8034675e-05 -1.5957678e-05 -2.1787547e-05 9.4285714 + 69700 0.00013447409 -4.7142845 -1.1970586e-05 -2.9094417e-05 -2.5174934e-05 9.4285714 + 69800 0.00014657885 -4.7142853 -1.5683311e-05 -1.6309919e-05 -2.0075974e-05 9.4285714 + 69900 0.00015609082 -4.7142855 -1.1426177e-05 -1.8313975e-06 -1.9875019e-05 9.4285714 + 70000 0.0001480329 -4.7142856 -1.2460666e-05 -1.6447231e-05 -1.9642105e-05 9.4285714 + 70100 0.00015151702 -4.7142856 -1.4628461e-05 -1.6409935e-05 -1.9122647e-05 9.4285714 + 70200 0.00015877941 -4.7142857 -7.583808e-06 -1.897031e-06 -1.4857946e-05 9.4285714 + 70300 0.00014843274 -4.7142856 -9.1839092e-06 -7.3723263e-06 -1.5486576e-05 9.4285714 + 70400 0.00012694866 -4.7142856 -1.4818342e-05 -1.1732793e-05 -1.9540803e-05 9.4285714 + 70500 0.0001223062 -4.7142855 -1.2766657e-05 -1.6306363e-05 -1.5815847e-05 9.4285714 + 70600 0.00012882541 -4.7142854 -1.0363823e-05 -1.4184553e-05 -1.3482073e-05 9.4285714 + 70700 0.00013355021 -4.7142856 -7.5351905e-06 -5.6878873e-06 -1.1428653e-05 9.4285714 + 70800 0.00011387212 -4.7142856 -1.3103633e-05 -2.1838499e-05 -1.422713e-05 9.4285714 + 70900 0.00010690897 -4.7142853 -1.5031273e-05 -1.6353644e-05 -1.1271084e-05 9.4285714 + 71000 0.00011592297 -4.7142856 -1.4028573e-05 -6.1554701e-06 -7.9135279e-06 9.4285714 + 71100 0.00011480819 -4.7142856 -8.8339375e-06 -1.7095536e-05 -1.3153708e-05 9.4285714 + 71200 0.00011120425 -4.7142855 -6.3415803e-06 -1.0844146e-05 -1.5933361e-05 9.4285714 + 71300 0.00010999134 -4.7142857 -1.1832122e-05 -9.8135256e-06 -1.0796306e-05 9.4285714 + 71400 0.0001085994 -4.7142856 -9.072296e-06 -1.4684027e-05 -9.3398805e-06 9.4285714 + 71500 0.00010229715 -4.7142856 -7.6834343e-06 -5.2923684e-06 -1.091418e-05 9.4285714 + 71600 9.4045037e-05 -4.7142857 -1.6042239e-05 -1.1911182e-05 -1.1726277e-05 9.4285714 + 71700 9.2582606e-05 -4.7142856 -1.8154264e-05 -1.4568798e-05 -1.261618e-05 9.4285714 + 71800 9.23704e-05 -4.7142856 -1.4790168e-05 -8.7882081e-06 -1.1151042e-05 9.4285714 + 71900 8.9370153e-05 -4.7142856 -9.6603935e-06 -1.3566313e-05 -9.2462067e-06 9.4285714 + 72000 8.8174192e-05 -4.7142856 -1.2556141e-05 -1.3025408e-05 -8.3693662e-06 9.4285714 + 72100 9.1354655e-05 -4.7142856 -1.1871034e-05 -7.7464864e-06 -8.3559765e-06 9.4285714 + 72200 8.8834445e-05 -4.7142857 -6.7700163e-06 -9.9481658e-06 -9.4504477e-06 9.4285714 + 72300 8.163427e-05 -4.7142856 -1.2590992e-05 -1.0543915e-05 -1.3015395e-05 9.4285714 + 72400 8.0170063e-05 -4.7142856 -1.4705482e-05 -1.0584579e-05 -1.3600996e-05 9.4285714 + 72500 8.2334351e-05 -4.7142857 -1.2255382e-05 -5.6324588e-06 -1.2861579e-05 9.4285714 + 72600 7.6158453e-05 -4.7142857 -1.404568e-05 -6.6959869e-06 -1.3883356e-05 9.4285714 + 72700 7.1631795e-05 -4.7142856 -1.428209e-05 -1.1695775e-05 -1.4770011e-05 9.4285714 + 72800 6.9815111e-05 -4.7142857 -1.4476332e-05 -7.4094047e-06 -1.0100618e-05 9.4285714 + 72900 7.3869581e-05 -4.7142857 -1.2372765e-05 -3.2032157e-06 -1.2462988e-05 9.4285714 + 73000 7.0229308e-05 -4.7142857 -1.1037948e-05 -5.4138776e-06 -1.3008661e-05 9.4285714 + 73100 6.7552754e-05 -4.7142857 -1.1569726e-05 -6.9374044e-06 -9.3561648e-06 9.4285714 + 73200 6.6289551e-05 -4.7142857 -8.9190387e-06 -2.2952683e-06 -1.2693116e-05 9.4285714 + 73300 6.1711122e-05 -4.7142857 -6.0766618e-06 -2.1366673e-06 -8.8565442e-06 9.4285714 + 73400 5.5466978e-05 -4.7142857 -1.2606476e-05 -7.0593008e-06 -1.1039131e-05 9.4285714 + 73500 5.2403589e-05 -4.7142857 -1.1774366e-05 -1.3796567e-05 -1.7407153e-05 9.4285714 + 73600 5.0884606e-05 -4.7142857 -9.7604748e-06 -1.9004056e-05 -1.2518873e-05 9.4285714 + 73700 5.1102772e-05 -4.7142857 -1.1986927e-05 -2.0827959e-05 -1.4278695e-05 9.4285714 + 73800 4.7646924e-05 -4.7142857 -1.1079416e-05 -2.2274544e-05 -1.6447968e-05 9.4285714 + 73900 4.6300272e-05 -4.7142857 -1.2183886e-05 -2.2431792e-05 -1.4069425e-05 9.4285714 + 74000 4.7954367e-05 -4.7142857 -1.100451e-05 -1.9739909e-05 -1.6995223e-05 9.4285714 + 74100 4.8138479e-05 -4.7142857 -1.0555876e-05 -1.5430426e-05 -1.7057843e-05 9.4285714 + 74200 4.641655e-05 -4.7142857 -1.3347942e-05 -1.0923304e-05 -1.5273804e-05 9.4285714 + 74300 4.631402e-05 -4.7142857 -1.4944003e-05 -7.6247122e-06 -1.591211e-05 9.4285714 + 74400 4.7671679e-05 -4.7142857 -1.6008685e-05 -7.9381768e-06 -1.3142685e-05 9.4285714 + 74500 4.3091565e-05 -4.7142857 -1.5455148e-05 -9.5212084e-06 -1.2939349e-05 9.4285714 + 74600 3.8457508e-05 -4.7142857 -1.5121742e-05 -1.189886e-05 -1.6042127e-05 9.4285714 + 74700 3.9395526e-05 -4.7142857 -1.5995559e-05 -1.5001987e-05 -1.3933931e-05 9.4285714 + 74800 4.103613e-05 -4.7142857 -1.4637418e-05 -1.1943921e-05 -1.2291116e-05 9.4285714 + 74900 4.0591823e-05 -4.7142857 -1.4880028e-05 -1.1128494e-05 -1.354326e-05 9.4285714 + 75000 3.8580406e-05 -4.7142857 -1.413257e-05 -1.3876756e-05 -1.266037e-05 9.4285714 + 75100 4.0291191e-05 -4.7142857 -1.165215e-05 -1.1135144e-05 -1.2679168e-05 9.4285714 + 75200 4.0333708e-05 -4.7142857 -1.178826e-05 -1.2994513e-05 -1.5283298e-05 9.4285714 + 75300 3.8347008e-05 -4.7142857 -1.0978061e-05 -1.633751e-05 -1.460824e-05 9.4285714 + 75400 3.8633982e-05 -4.7142857 -1.0936006e-05 -1.3715951e-05 -1.4335084e-05 9.4285714 + 75500 3.7903905e-05 -4.7142857 -1.2985963e-05 -1.520996e-05 -1.5932056e-05 9.4285714 + 75600 3.5004324e-05 -4.7142857 -1.3234858e-05 -1.3993442e-05 -1.6880321e-05 9.4285714 + 75700 3.4332643e-05 -4.7142857 -1.3104988e-05 -1.1652753e-05 -1.6206646e-05 9.4285714 + 75800 3.4663353e-05 -4.7142857 -1.4931844e-05 -1.5330977e-05 -1.4922537e-05 9.4285714 + 75900 3.39391e-05 -4.7142857 -1.6867182e-05 -1.4943354e-05 -1.500024e-05 9.4285714 + 76000 3.278412e-05 -4.7142857 -1.6658044e-05 -1.4199689e-05 -1.4792111e-05 9.4285714 + 76100 3.1166814e-05 -4.7142857 -1.308461e-05 -1.6339554e-05 -1.440781e-05 9.4285714 + 76200 2.9933872e-05 -4.7142857 -1.0687114e-05 -1.4194673e-05 -1.3954334e-05 9.4285714 + 76300 3.1422641e-05 -4.7142857 -1.0917609e-05 -1.1569941e-05 -1.2815093e-05 9.4285714 + 76400 3.0754581e-05 -4.7142857 -1.0853277e-05 -1.3296864e-05 -1.1515583e-05 9.4285714 + 76500 2.9024215e-05 -4.7142857 -1.2056388e-05 -1.3169585e-05 -1.2258476e-05 9.4285714 + 76600 2.7473571e-05 -4.7142857 -1.4305578e-05 -1.3641621e-05 -1.3588762e-05 9.4285714 + 76700 2.7118998e-05 -4.7142857 -1.431701e-05 -1.4460584e-05 -1.4573318e-05 9.4285714 + 76800 2.5718995e-05 -4.7142857 -1.3268142e-05 -1.5339464e-05 -1.2625212e-05 9.4285714 + 76900 2.5017639e-05 -4.7142857 -1.2780904e-05 -1.8673025e-05 -1.3087177e-05 9.4285714 + 77000 2.5750768e-05 -4.7142857 -1.2369744e-05 -1.7361658e-05 -1.3649753e-05 9.4285714 + 77100 2.6187016e-05 -4.7142857 -1.162578e-05 -1.3664446e-05 -1.2382019e-05 9.4285714 + 77200 2.5631995e-05 -4.7142857 -1.0419397e-05 -1.2996254e-05 -1.5044551e-05 9.4285714 + 77300 2.4696214e-05 -4.7142857 -1.0244805e-05 -1.4615777e-05 -1.5127621e-05 9.4285714 + 77400 2.4553284e-05 -4.7142857 -1.2204481e-05 -1.6264852e-05 -1.3619953e-05 9.4285714 + 77500 2.2797706e-05 -4.7142857 -1.340907e-05 -1.8171911e-05 -1.5862747e-05 9.4285714 + 77600 2.2171226e-05 -4.7142857 -1.3486916e-05 -1.8450579e-05 -1.5371287e-05 9.4285714 + 77700 2.253978e-05 -4.7142857 -1.5266008e-05 -1.8044476e-05 -1.4291304e-05 9.4285714 + 77800 2.1060799e-05 -4.7142857 -1.5324528e-05 -1.7624234e-05 -1.8346195e-05 9.4285714 + 77900 2.0523503e-05 -4.7142857 -1.4965705e-05 -1.6987754e-05 -1.8433091e-05 9.4285714 + 78000 2.0333762e-05 -4.7142857 -1.5645332e-05 -1.7825746e-05 -1.5138649e-05 9.4285714 + 78100 1.9991709e-05 -4.7142857 -1.63199e-05 -1.7374474e-05 -1.6194737e-05 9.4285714 + 78200 1.9011748e-05 -4.7142857 -1.7571324e-05 -1.5937247e-05 -1.7129556e-05 9.4285714 + 78300 1.7452493e-05 -4.7142857 -1.8472289e-05 -1.8185251e-05 -1.6906318e-05 9.4285714 + 78400 1.6922045e-05 -4.7142857 -1.9571229e-05 -1.7381686e-05 -1.7176184e-05 9.4285714 + 78500 1.6749859e-05 -4.7142857 -1.9888844e-05 -1.3779843e-05 -1.6434381e-05 9.4285714 + 78600 1.5533985e-05 -4.7142857 -1.7731773e-05 -1.4423452e-05 -1.6570257e-05 9.4285714 + 78700 1.6001708e-05 -4.7142857 -1.7195797e-05 -1.4572687e-05 -1.6806883e-05 9.4285714 + 78800 1.6443082e-05 -4.7142857 -1.6704891e-05 -1.4293232e-05 -1.561369e-05 9.4285714 + 78900 1.5513588e-05 -4.7142857 -1.598409e-05 -1.593261e-05 -1.5624319e-05 9.4285714 + 79000 1.4695976e-05 -4.7142857 -1.698324e-05 -1.5288966e-05 -1.4638475e-05 9.4285714 + 79100 1.479743e-05 -4.7142857 -1.6125153e-05 -1.2827596e-05 -1.2616114e-05 9.4285714 + 79200 1.55577e-05 -4.7142857 -1.557531e-05 -1.2552924e-05 -1.3990744e-05 9.4285714 + 79300 1.4870035e-05 -4.7142857 -1.5804097e-05 -1.3084783e-05 -1.5763936e-05 9.4285714 + 79400 1.407294e-05 -4.7142857 -1.5106607e-05 -1.1445875e-05 -1.5502237e-05 9.4285714 + 79500 1.4958231e-05 -4.7142857 -1.4765877e-05 -1.1751226e-05 -1.4966677e-05 9.4285714 + 79600 1.4736524e-05 -4.7142857 -1.3947974e-05 -1.2887404e-05 -1.4416364e-05 9.4285714 + 79700 1.3928261e-05 -4.7142857 -1.4198053e-05 -1.2965799e-05 -1.4443335e-05 9.4285714 + 79800 1.3972387e-05 -4.7142857 -1.5355989e-05 -1.5100663e-05 -1.4131894e-05 9.4285714 + 79900 1.3811564e-05 -4.7142857 -1.4835591e-05 -1.4815966e-05 -1.3869381e-05 9.4285714 + 80000 1.2957672e-05 -4.7142857 -1.5062602e-05 -1.45292e-05 -1.4891301e-05 9.4285714 + 80100 1.2563865e-05 -4.7142857 -1.5169994e-05 -1.4546799e-05 -1.3765274e-05 9.4285714 + 80200 1.3022287e-05 -4.7142857 -1.3763722e-05 -1.3208951e-05 -1.2723976e-05 9.4285714 + 80300 1.3584684e-05 -4.7142857 -1.3004687e-05 -1.4331205e-05 -1.3734168e-05 9.4285714 + 80400 1.2367299e-05 -4.7142857 -1.2946676e-05 -1.5953744e-05 -1.3874706e-05 9.4285714 + 80500 1.1149314e-05 -4.7142857 -1.3763549e-05 -1.8354674e-05 -1.4422516e-05 9.4285714 + 80600 1.1310076e-05 -4.7142857 -1.4352942e-05 -1.8196343e-05 -1.4380524e-05 9.4285714 + 80700 1.1762402e-05 -4.7142857 -1.4320877e-05 -1.5912122e-05 -1.4152813e-05 9.4285714 + 80800 1.1709271e-05 -4.7142857 -1.456974e-05 -1.5795666e-05 -1.6150824e-05 9.4285714 + 80900 1.1245245e-05 -4.7142857 -1.3817494e-05 -1.5518817e-05 -1.6397017e-05 9.4285714 + 81000 1.1164538e-05 -4.7142857 -1.3696962e-05 -1.6226212e-05 -1.6916834e-05 9.4285714 + 81100 1.1502669e-05 -4.7142857 -1.3828506e-05 -1.6835139e-05 -1.8154461e-05 9.4285714 + 81200 1.1833191e-05 -4.7142857 -1.2706063e-05 -1.5821428e-05 -1.6742871e-05 9.4285714 + 81300 1.2211644e-05 -4.7142857 -1.27375e-05 -1.4579716e-05 -1.6472811e-05 9.4285714 + 81400 1.2622004e-05 -4.7142857 -1.3634996e-05 -1.3090653e-05 -1.6380222e-05 9.4285714 + 81500 1.2584806e-05 -4.7142857 -1.4674952e-05 -1.3052279e-05 -1.5020578e-05 9.4285714 + 81600 1.2124271e-05 -4.7142857 -1.5487136e-05 -1.3656557e-05 -1.5664484e-05 9.4285714 + 81700 1.2115025e-05 -4.7142857 -1.5327873e-05 -1.3487752e-05 -1.5331047e-05 9.4285714 + 81800 1.2759869e-05 -4.7142857 -1.5382456e-05 -1.3610465e-05 -1.446284e-05 9.4285714 + 81900 1.2785583e-05 -4.7142857 -1.5214877e-05 -1.4182825e-05 -1.5119828e-05 9.4285714 + 82000 1.1934364e-05 -4.7142857 -1.5067498e-05 -1.4838559e-05 -1.5137992e-05 9.4285714 + 82100 1.1214178e-05 -4.7142857 -1.5439424e-05 -1.5802947e-05 -1.5782085e-05 9.4285714 + 82200 1.0543709e-05 -4.7142857 -1.5446821e-05 -1.7103774e-05 -1.6302123e-05 9.4285714 + 82300 1.0325745e-05 -4.7142857 -1.6189094e-05 -1.8974598e-05 -1.5529736e-05 9.4285714 + 82400 1.0566514e-05 -4.7142857 -1.7082526e-05 -2.0057555e-05 -1.5728261e-05 9.4285714 + 82500 1.0668163e-05 -4.7142857 -1.7396752e-05 -1.9951884e-05 -1.5992504e-05 9.4285714 + 82600 1.0279796e-05 -4.7142857 -1.738787e-05 -2.0196256e-05 -1.6446196e-05 9.4285714 + 82700 9.980952e-06 -4.7142857 -1.6578404e-05 -1.9270528e-05 -1.6117223e-05 9.4285714 + 82800 9.8737345e-06 -4.7142857 -1.6651516e-05 -1.7426784e-05 -1.5866862e-05 9.4285714 + 82900 9.9880551e-06 -4.7142857 -1.5586743e-05 -1.6422642e-05 -1.6574528e-05 9.4285714 + 83000 9.6470033e-06 -4.7142857 -1.4253159e-05 -1.6267654e-05 -1.7503416e-05 9.4285714 + 83100 9.0263055e-06 -4.7142857 -1.5582075e-05 -1.6909101e-05 -1.9323241e-05 9.4285714 + 83200 9.0247993e-06 -4.7142857 -1.5263754e-05 -1.7003035e-05 -1.9783892e-05 9.4285714 + 83300 9.3459571e-06 -4.7142857 -1.4154495e-05 -1.5460975e-05 -1.8363556e-05 9.4285714 + 83400 9.3818016e-06 -4.7142857 -1.4641459e-05 -1.3929953e-05 -1.7287384e-05 9.4285714 + 83500 9.5609985e-06 -4.7142857 -1.430942e-05 -1.4416098e-05 -1.6177161e-05 9.4285714 + 83600 1.0113881e-05 -4.7142857 -1.4581875e-05 -1.4843248e-05 -1.5551195e-05 9.4285714 + 83700 1.0162089e-05 -4.7142857 -1.5663427e-05 -1.50393e-05 -1.6048905e-05 9.4285714 + 83800 9.7016327e-06 -4.7142857 -1.5969816e-05 -1.5433063e-05 -1.6529399e-05 9.4285714 + 83900 9.7311674e-06 -4.7142857 -1.6005713e-05 -1.4689451e-05 -1.6800833e-05 9.4285714 + 84000 9.9358855e-06 -4.7142857 -1.6127949e-05 -1.3534531e-05 -1.6554794e-05 9.4285714 + 84100 9.9289786e-06 -4.7142857 -1.5631642e-05 -1.3181885e-05 -1.5877599e-05 9.4285714 + 84200 1.0123274e-05 -4.7142857 -1.5073331e-05 -1.4238795e-05 -1.5974051e-05 9.4285714 + 84300 1.0321305e-05 -4.7142857 -1.4652704e-05 -1.5586652e-05 -1.6327106e-05 9.4285714 + 84400 1.0247248e-05 -4.7142857 -1.4779839e-05 -1.6731849e-05 -1.6548643e-05 9.4285714 + 84500 1.0094063e-05 -4.7142857 -1.4910909e-05 -1.676092e-05 -1.6793125e-05 9.4285714 + 84600 9.9763053e-06 -4.7142857 -1.5162097e-05 -1.6033207e-05 -1.6486257e-05 9.4285714 + 84700 9.5206838e-06 -4.7142857 -1.5042672e-05 -1.5152256e-05 -1.588935e-05 9.4285714 + 84800 8.9062383e-06 -4.7142857 -1.3733548e-05 -1.4935078e-05 -1.5219473e-05 9.4285714 + 84900 8.4608755e-06 -4.7142857 -1.3253611e-05 -1.5916662e-05 -1.4614583e-05 9.4285714 + 85000 8.0192365e-06 -4.7142857 -1.3126327e-05 -1.637167e-05 -1.4350742e-05 9.4285714 + 85100 7.9761033e-06 -4.7142857 -1.3069074e-05 -1.7220389e-05 -1.4062888e-05 9.4285714 + 85200 8.0835543e-06 -4.7142857 -1.3569794e-05 -1.7069744e-05 -1.3778454e-05 9.4285714 + 85300 8.1275735e-06 -4.7142857 -1.3941408e-05 -1.5997547e-05 -1.4117292e-05 9.4285714 + 85400 8.4459009e-06 -4.7142857 -1.456328e-05 -1.5611744e-05 -1.4354375e-05 9.4285714 + 85500 8.4541663e-06 -4.7142857 -1.5168197e-05 -1.5148273e-05 -1.4773075e-05 9.4285714 + 85600 8.2004746e-06 -4.7142857 -1.5073675e-05 -1.4767822e-05 -1.5143245e-05 9.4285714 + 85700 8.0342592e-06 -4.7142857 -1.4947534e-05 -1.4826325e-05 -1.5088549e-05 9.4285714 + 85800 7.8659332e-06 -4.7142857 -1.5065529e-05 -1.4518711e-05 -1.5370922e-05 9.4285714 + 85900 7.6306796e-06 -4.7142857 -1.5176879e-05 -1.4435433e-05 -1.5766931e-05 9.4285714 + 86000 7.5972918e-06 -4.7142857 -1.5131279e-05 -1.4502293e-05 -1.6022005e-05 9.4285714 + 86100 7.8659318e-06 -4.7142857 -1.4967443e-05 -1.4559529e-05 -1.6326507e-05 9.4285714 + 86200 7.8709138e-06 -4.7142857 -1.4770291e-05 -1.5549814e-05 -1.6473316e-05 9.4285714 + 86300 7.6478157e-06 -4.7142857 -1.4930937e-05 -1.6666543e-05 -1.6677668e-05 9.4285714 + 86400 7.7317444e-06 -4.7142857 -1.4847182e-05 -1.6915668e-05 -1.655259e-05 9.4285714 + 86500 7.8872355e-06 -4.7142857 -1.4360701e-05 -1.6696103e-05 -1.6422615e-05 9.4285714 + 86600 7.9467186e-06 -4.7142857 -1.3959124e-05 -1.5997647e-05 -1.6288514e-05 9.4285714 + 86700 7.9278254e-06 -4.7142857 -1.354331e-05 -1.5394874e-05 -1.5935042e-05 9.4285714 + 86800 7.8774016e-06 -4.7142857 -1.3217858e-05 -1.532048e-05 -1.5803438e-05 9.4285714 + 86900 7.775588e-06 -4.7142857 -1.3559543e-05 -1.5026482e-05 -1.5813378e-05 9.4285714 + 87000 7.4582028e-06 -4.7142857 -1.4246545e-05 -1.4764601e-05 -1.5623165e-05 9.4285714 + 87100 6.8371197e-06 -4.7142857 -1.4558367e-05 -1.5100383e-05 -1.5191477e-05 9.4285714 + 87200 6.2680068e-06 -4.7142857 -1.4700384e-05 -1.5351267e-05 -1.476608e-05 9.4285714 + 87300 5.8516912e-06 -4.7142857 -1.4911344e-05 -1.5738952e-05 -1.4528332e-05 9.4285714 + 87400 5.4549865e-06 -4.7142857 -1.5792681e-05 -1.7003657e-05 -1.4715333e-05 9.4285714 + 87500 4.9665221e-06 -4.7142857 -1.7029481e-05 -1.7522718e-05 -1.5420292e-05 9.4285714 + 87600 4.5178563e-06 -4.7142857 -1.650202e-05 -1.7440246e-05 -1.5235233e-05 9.4285714 + 87700 4.345985e-06 -4.7142857 -1.5495038e-05 -1.7432267e-05 -1.5108386e-05 9.4285714 + 87800 4.5412609e-06 -4.7142857 -1.4815021e-05 -1.6753147e-05 -1.5158632e-05 9.4285714 + 87900 4.5642217e-06 -4.7142857 -1.4175945e-05 -1.6362257e-05 -1.5144615e-05 9.4285714 + 88000 4.5540927e-06 -4.7142857 -1.4388451e-05 -1.5619622e-05 -1.5668186e-05 9.4285714 + 88100 4.4196823e-06 -4.7142857 -1.4738254e-05 -1.5132678e-05 -1.6518346e-05 9.4285714 + 88200 3.9574103e-06 -4.7142857 -1.4890034e-05 -1.5307772e-05 -1.7179767e-05 9.4285714 + 88300 3.5222487e-06 -4.7142857 -1.510225e-05 -1.5338999e-05 -1.7416889e-05 9.4285714 + 88400 3.165884e-06 -4.7142857 -1.4760001e-05 -1.5715198e-05 -1.7366111e-05 9.4285714 + 88500 2.9083225e-06 -4.7142857 -1.4658219e-05 -1.55297e-05 -1.7109038e-05 9.4285714 + 88600 2.7400176e-06 -4.7142857 -1.4777364e-05 -1.4923406e-05 -1.6629238e-05 9.4285714 + 88700 2.5251673e-06 -4.7142857 -1.4727405e-05 -1.4871968e-05 -1.6249056e-05 9.4285714 + 88800 2.3826746e-06 -4.7142857 -1.5230979e-05 -1.4709511e-05 -1.6124211e-05 9.4285714 + 88900 2.1768687e-06 -4.7142857 -1.5409575e-05 -1.4606505e-05 -1.6265793e-05 9.4285714 + 89000 1.8236564e-06 -4.7142857 -1.4891077e-05 -1.4374433e-05 -1.6290261e-05 9.4285714 + 89100 1.7278097e-06 -4.7142857 -1.4766014e-05 -1.4698173e-05 -1.629142e-05 9.4285714 + 89200 1.7898696e-06 -4.7142857 -1.4680311e-05 -1.5447769e-05 -1.6234869e-05 9.4285714 + 89300 1.6235898e-06 -4.7142857 -1.4619946e-05 -1.5353355e-05 -1.5935208e-05 9.4285714 + 89400 1.4453719e-06 -4.7142857 -1.5077313e-05 -1.5256516e-05 -1.5760859e-05 9.4285714 + 89500 1.527574e-06 -4.7142857 -1.5228139e-05 -1.5150839e-05 -1.5329339e-05 9.4285714 + 89600 1.5597904e-06 -4.7142857 -1.5206651e-05 -1.4952764e-05 -1.469008e-05 9.4285714 + 89700 1.4754946e-06 -4.7142857 -1.5417012e-05 -1.5114832e-05 -1.4373909e-05 9.4285714 + 89800 1.4411527e-06 -4.7142857 -1.5208876e-05 -1.5296763e-05 -1.4098277e-05 9.4285714 + 89900 1.502323e-06 -4.7142857 -1.4827425e-05 -1.5396237e-05 -1.3859086e-05 9.4285714 + 90000 1.5830978e-06 -4.7142857 -1.4309229e-05 -1.5122624e-05 -1.3769174e-05 9.4285714 + 90100 1.5804557e-06 -4.7142857 -1.3861992e-05 -1.4518884e-05 -1.3724813e-05 9.4285714 + 90200 1.5634629e-06 -4.7142857 -1.3826434e-05 -1.422755e-05 -1.3763402e-05 9.4285714 + 90300 1.6024078e-06 -4.7142857 -1.3630179e-05 -1.4108354e-05 -1.3946447e-05 9.4285714 + 90400 1.5977837e-06 -4.7142857 -1.356028e-05 -1.4344669e-05 -1.4260334e-05 9.4285714 + 90500 1.5141386e-06 -4.7142857 -1.3857977e-05 -1.5201516e-05 -1.4518829e-05 9.4285714 + 90600 1.4576706e-06 -4.7142857 -1.3999155e-05 -1.5886239e-05 -1.4615598e-05 9.4285714 + 90700 1.429486e-06 -4.7142857 -1.419224e-05 -1.6426855e-05 -1.4489664e-05 9.4285714 + 90800 1.3235743e-06 -4.7142857 -1.44774e-05 -1.6912648e-05 -1.4218881e-05 9.4285714 + 90900 1.1910677e-06 -4.7142857 -1.4714565e-05 -1.6726698e-05 -1.3993324e-05 9.4285714 + 91000 1.1413105e-06 -4.7142857 -1.5100515e-05 -1.6536692e-05 -1.3871364e-05 9.4285714 + 91100 1.1451671e-06 -4.7142857 -1.5305607e-05 -1.656882e-05 -1.3686713e-05 9.4285714 + 91200 1.1323551e-06 -4.7142857 -1.5286666e-05 -1.6462418e-05 -1.361651e-05 9.4285714 + 91300 1.1255554e-06 -4.7142857 -1.5404388e-05 -1.6630294e-05 -1.3793667e-05 9.4285714 + 91400 1.2378762e-06 -4.7142857 -1.5510436e-05 -1.6724052e-05 -1.3925227e-05 9.4285714 + 91500 1.4005544e-06 -4.7142857 -1.5509174e-05 -1.6384764e-05 -1.4041048e-05 9.4285714 + 91600 1.3953038e-06 -4.7142857 -1.5420434e-05 -1.6185723e-05 -1.4225674e-05 9.4285714 + 91700 1.3106567e-06 -4.7142857 -1.5056173e-05 -1.594025e-05 -1.4320215e-05 9.4285714 + 91800 1.3340271e-06 -4.7142857 -1.4654593e-05 -1.5633558e-05 -1.4315921e-05 9.4285714 + 91900 1.3522582e-06 -4.7142857 -1.4498864e-05 -1.5494489e-05 -1.4458407e-05 9.4285714 + 92000 1.3158871e-06 -4.7142857 -1.4491876e-05 -1.5514912e-05 -1.4653442e-05 9.4285714 + 92100 1.3643585e-06 -4.7142857 -1.453065e-05 -1.5710343e-05 -1.4811466e-05 9.4285714 + 92200 1.4729997e-06 -4.7142857 -1.4690811e-05 -1.5971338e-05 -1.5095179e-05 9.4285714 + 92300 1.5358294e-06 -4.7142857 -1.4914728e-05 -1.6032194e-05 -1.5448421e-05 9.4285714 + 92400 1.5170825e-06 -4.7142857 -1.5249304e-05 -1.6217016e-05 -1.581467e-05 9.4285714 + 92500 1.5226394e-06 -4.7142857 -1.5593531e-05 -1.6344887e-05 -1.6143519e-05 9.4285714 + 92600 1.5654443e-06 -4.7142857 -1.559349e-05 -1.5992274e-05 -1.6231767e-05 9.4285714 + 92700 1.4702831e-06 -4.7142857 -1.5734905e-05 -1.5835612e-05 -1.640086e-05 9.4285714 + 92800 1.2729797e-06 -4.7142857 -1.601544e-05 -1.58833e-05 -1.6617643e-05 9.4285714 + 92900 1.1993055e-06 -4.7142857 -1.6370313e-05 -1.6035241e-05 -1.6710816e-05 9.4285714 + 93000 1.103877e-06 -4.7142857 -1.676123e-05 -1.6053346e-05 -1.6779897e-05 9.4285714 + 93100 9.766923e-07 -4.7142857 -1.6867719e-05 -1.605566e-05 -1.6723947e-05 9.4285714 + 93200 1.0109827e-06 -4.7142857 -1.6676395e-05 -1.5946366e-05 -1.6627526e-05 9.4285714 + 93300 1.0527596e-06 -4.7142857 -1.6257661e-05 -1.554464e-05 -1.6513078e-05 9.4285714 + 93400 9.8053255e-07 -4.7142857 -1.5807503e-05 -1.5445853e-05 -1.6341358e-05 9.4285714 + 93500 9.1694875e-07 -4.7142857 -1.5533112e-05 -1.5516565e-05 -1.6228406e-05 9.4285714 + 93600 8.8303951e-07 -4.7142857 -1.5069959e-05 -1.5529544e-05 -1.6132536e-05 9.4285714 + 93700 8.2246174e-07 -4.7142857 -1.472233e-05 -1.6179351e-05 -1.6113594e-05 9.4285714 + 93800 7.4646055e-07 -4.7142857 -1.4618489e-05 -1.6810345e-05 -1.6177715e-05 9.4285714 + 93900 6.9678557e-07 -4.7142857 -1.4437826e-05 -1.7139561e-05 -1.6194232e-05 9.4285714 + 94000 6.9952571e-07 -4.7142857 -1.43724e-05 -1.732509e-05 -1.620084e-05 9.4285714 + 94100 6.9465388e-07 -4.7142857 -1.426563e-05 -1.6905551e-05 -1.6207167e-05 9.4285714 + 94200 6.534208e-07 -4.7142857 -1.4215548e-05 -1.6577799e-05 -1.6283956e-05 9.4285714 + 94300 6.3618037e-07 -4.7142857 -1.4523483e-05 -1.653617e-05 -1.64375e-05 9.4285714 + 94400 6.2939519e-07 -4.7142857 -1.4685124e-05 -1.6404885e-05 -1.6365934e-05 9.4285714 + 94500 5.8077775e-07 -4.7142857 -1.4919583e-05 -1.646521e-05 -1.6155952e-05 9.4285714 + 94600 5.5073819e-07 -4.7142857 -1.5396415e-05 -1.6362774e-05 -1.5992816e-05 9.4285714 + 94700 5.2312334e-07 -4.7142857 -1.5511011e-05 -1.6117244e-05 -1.5722347e-05 9.4285714 + 94800 4.3781721e-07 -4.7142857 -1.5578497e-05 -1.6104756e-05 -1.5517678e-05 9.4285714 + 94900 3.7231868e-07 -4.7142857 -1.555009e-05 -1.6057524e-05 -1.5346006e-05 9.4285714 + 95000 3.6663445e-07 -4.7142857 -1.5290067e-05 -1.6097112e-05 -1.5071108e-05 9.4285714 + 95100 3.7586183e-07 -4.7142857 -1.5105309e-05 -1.6192294e-05 -1.4871355e-05 9.4285714 + 95200 3.8418758e-07 -4.7142857 -1.4861047e-05 -1.6053586e-05 -1.4728481e-05 9.4285714 + 95300 3.9338354e-07 -4.7142857 -1.4584146e-05 -1.5916531e-05 -1.4597814e-05 9.4285714 + 95400 4.1470007e-07 -4.7142857 -1.4406666e-05 -1.5799083e-05 -1.4509796e-05 9.4285714 + 95500 4.1217771e-07 -4.7142857 -1.4216838e-05 -1.572919e-05 -1.4450868e-05 9.4285714 + 95600 3.7339985e-07 -4.7142857 -1.4085441e-05 -1.5855742e-05 -1.4482855e-05 9.4285714 + 95700 3.6224929e-07 -4.7142857 -1.395535e-05 -1.5867623e-05 -1.4507753e-05 9.4285714 + 95800 3.6700427e-07 -4.7142857 -1.3811124e-05 -1.5872957e-05 -1.4523805e-05 9.4285714 + 95900 3.5928171e-07 -4.7142857 -1.3872826e-05 -1.600523e-05 -1.4590433e-05 9.4285714 + 96000 3.613478e-07 -4.7142857 -1.4044344e-05 -1.6103734e-05 -1.4662603e-05 9.4285714 + 96100 3.7441468e-07 -4.7142857 -1.4197803e-05 -1.6194892e-05 -1.4788716e-05 9.4285714 + 96200 3.6782696e-07 -4.7142857 -1.4369157e-05 -1.6198825e-05 -1.4994034e-05 9.4285714 + 96300 3.366289e-07 -4.7142857 -1.4548485e-05 -1.6105141e-05 -1.5216323e-05 9.4285714 + 96400 3.1488125e-07 -4.7142857 -1.4852391e-05 -1.6071107e-05 -1.5417112e-05 9.4285714 + 96500 3.1962522e-07 -4.7142857 -1.5196988e-05 -1.6060678e-05 -1.5546629e-05 9.4285714 + 96600 3.2545372e-07 -4.7142857 -1.5474772e-05 -1.6056875e-05 -1.560179e-05 9.4285714 + 96700 3.2075147e-07 -4.7142857 -1.5663715e-05 -1.6024881e-05 -1.5608974e-05 9.4285714 + 96800 3.1900741e-07 -4.7142857 -1.5627356e-05 -1.5884542e-05 -1.5557193e-05 9.4285714 + 96900 3.0937398e-07 -4.7142857 -1.5541895e-05 -1.5824716e-05 -1.5490677e-05 9.4285714 + 97000 2.888521e-07 -4.7142857 -1.5532377e-05 -1.5849941e-05 -1.5408808e-05 9.4285714 + 97100 2.8062675e-07 -4.7142857 -1.5424709e-05 -1.5789425e-05 -1.5344008e-05 9.4285714 + 97200 2.7259018e-07 -4.7142857 -1.525213e-05 -1.5742591e-05 -1.5351193e-05 9.4285714 + 97300 2.5079618e-07 -4.7142857 -1.493221e-05 -1.5647665e-05 -1.5377934e-05 9.4285714 + 97400 2.3092654e-07 -4.7142857 -1.4505065e-05 -1.5570683e-05 -1.5393542e-05 9.4285714 + 97500 2.1183478e-07 -4.7142857 -1.4200896e-05 -1.5596033e-05 -1.5370916e-05 9.4285714 + 97600 1.923775e-07 -4.7142857 -1.402574e-05 -1.5643771e-05 -1.5326364e-05 9.4285714 + 97700 1.8014686e-07 -4.7142857 -1.4007076e-05 -1.5714621e-05 -1.5292616e-05 9.4285714 + 97800 1.6753369e-07 -4.7142857 -1.4231796e-05 -1.5816585e-05 -1.5277392e-05 9.4285714 + 97900 1.5488872e-07 -4.7142857 -1.4550906e-05 -1.5989734e-05 -1.5306236e-05 9.4285714 + 98000 1.5029351e-07 -4.7142857 -1.4825876e-05 -1.6149927e-05 -1.5326564e-05 9.4285714 + 98100 1.5505857e-07 -4.7142857 -1.5020894e-05 -1.6204111e-05 -1.5368077e-05 9.4285714 + 98200 1.6761414e-07 -4.7142857 -1.5104049e-05 -1.615858e-05 -1.5429562e-05 9.4285714 + 98300 1.827265e-07 -4.7142857 -1.5148942e-05 -1.6006424e-05 -1.5463864e-05 9.4285714 + 98400 1.9319974e-07 -4.7142857 -1.5208115e-05 -1.5889727e-05 -1.5534896e-05 9.4285714 + 98500 1.9088949e-07 -4.7142857 -1.5199072e-05 -1.5861978e-05 -1.5589091e-05 9.4285714 + 98600 1.7799024e-07 -4.7142857 -1.5153971e-05 -1.5845374e-05 -1.5615417e-05 9.4285714 + 98700 1.650016e-07 -4.7142857 -1.5071686e-05 -1.5871434e-05 -1.5646712e-05 9.4285714 + 98800 1.5381591e-07 -4.7142857 -1.4976039e-05 -1.5916557e-05 -1.5639779e-05 9.4285714 + 98900 1.4561701e-07 -4.7142857 -1.4948048e-05 -1.5942893e-05 -1.5591273e-05 9.4285714 + 99000 1.409876e-07 -4.7142857 -1.4938783e-05 -1.5964216e-05 -1.552527e-05 9.4285714 + 99100 1.3647033e-07 -4.7142857 -1.4929778e-05 -1.5954524e-05 -1.5435251e-05 9.4285714 + 99200 1.3362811e-07 -4.7142857 -1.493995e-05 -1.5899959e-05 -1.536751e-05 9.4285714 + 99300 1.332697e-07 -4.7142857 -1.4901845e-05 -1.5823408e-05 -1.5288535e-05 9.4285714 + 99400 1.3246942e-07 -4.7142857 -1.4863126e-05 -1.58044e-05 -1.5177726e-05 9.4285714 + 99500 1.2902143e-07 -4.7142857 -1.4839913e-05 -1.5850368e-05 -1.5096824e-05 9.4285714 + 99600 1.2026e-07 -4.7142857 -1.4783678e-05 -1.5936741e-05 -1.5045878e-05 9.4285714 + 99700 1.0682618e-07 -4.7142857 -1.4722651e-05 -1.6094168e-05 -1.5037704e-05 9.4285714 + 99800 1.0135835e-07 -4.7142857 -1.4653152e-05 -1.6166665e-05 -1.5083701e-05 9.4285714 + 99900 1.0408582e-07 -4.7142857 -1.4564358e-05 -1.6121388e-05 -1.5103438e-05 9.4285714 + 100000 1.0680034e-07 -4.7142857 -1.4507587e-05 -1.604874e-05 -1.5136253e-05 9.4285714 +Loop time of 290.919 on 1 procs for 100000 steps with 2520 atoms + +Performance: 1484950.148 tau/day, 343.738 timesteps/s +100.0% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 5.4111 | 5.4111 | 5.4111 | 0.0 | 1.86 +Bond | 255.11 | 255.11 | 255.11 | 0.0 | 87.69 +Neigh | 4.7124 | 4.7124 | 4.7124 | 0.0 | 1.62 +Comm | 0.12616 | 0.12616 | 0.12616 | 0.0 | 0.04 +Output | 0.61128 | 0.61128 | 0.61128 | 0.0 | 0.21 +Modify | 24.262 | 24.262 | 24.262 | 0.0 | 8.34 +Other | | 0.6856 | | | 0.24 + +Nlocal: 2520.00 ave 2520 max 2520 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0.00000 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 9690.00 ave 9690 max 9690 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 9690 +Ave neighs/atom = 3.8452381 +Ave special neighs/atom = 36.317460 +Neighbor list builds = 5077 +Dangerous builds = 354 +Total wall time: 0:04:50 diff --git a/examples/bpm/pour/pour_bpm.lmp b/examples/bpm/pour/pour_bpm.lmp new file mode 100644 index 0000000000..bb582413c3 --- /dev/null +++ b/examples/bpm/pour/pour_bpm.lmp @@ -0,0 +1,36 @@ +units lj +dimension 3 +boundary m m m +atom_style sphere/bpm +special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0 +newton on off +comm_modify vel yes cutoff 3.3 +region box block -15 15 -15 15 0 60.0 +create_box 1 box bond/types 1 extra/bond/per/atom 15 extra/special/per/atom 50 + +molecule my_mol "rect.mol" +region wall_cyl cylinder z 0.0 0.0 10.0 EDGE EDGE side in +region dropzone cylinder z 0.0 0.0 10.0 40.0 50.0 side in + +pair_style gran/hertz/history 1.0 NULL 0.5 NULL 0.1 1 +bond_style bpm/rotational +pair_coeff 1 1 +bond_coeff 1 1.0 0.2 0.01 0.01 2.0 0.4 0.02 0.02 0.2 0.04 0.002 0.002 + +compute nbond all nbond/atom +compute tbond all reduce sum c_nbond +compute_modify thermo_temp dynamic/dof yes + +fix 1 all wall/gran hertz/history 1.0 NULL 0.5 NULL 0.1 1 zplane 0.0 NULL +fix 2 all wall/gran/region hertz/history 1.0 NULL 0.5 NULL 0.1 1 region wall_cyl +fix 3 all gravity 1e-4 vector 0 0 -1 +fix 4 all deposit 40 0 1500 712511343 mol my_mol region dropzone near 2.0 vz -0.05 -0.05 +fix 5 all nve/sphere/bpm +fix 6 all update/special/bonds + +timestep 0.05 +thermo_style custom step ke pe pxx pyy pzz c_tbond +thermo 100 +#dump 1 all custom 500 atomDump id radius x y z c_nbond mol + +run 100000 diff --git a/examples/bpm/pour/rect.mol b/examples/bpm/pour/rect.mol new file mode 100644 index 0000000000..16edb17682 --- /dev/null +++ b/examples/bpm/pour/rect.mol @@ -0,0 +1,568 @@ +#Made with create_mol.py + +63 atoms +297 bonds + +Coords +#ID x y z +1 0.0 0.0 0.0 +2 0.7348518971806154 0.7348518971806154 0.0 +3 0.7348518971806154 0.0 0.7348518971806154 +4 0.0 0.7348518971806154 0.7348518971806154 +5 1.4697037943612308 0.0 0.0 +6 1.4697037943612308 0.7348518971806154 0.7348518971806154 +7 0.0 1.4697037943612308 0.0 +8 0.7348518971806154 1.4697037943612308 0.7348518971806154 +9 1.4697037943612308 1.4697037943612308 0.0 +10 0.0 0.0 1.4697037943612308 +11 0.7348518971806154 0.7348518971806154 1.4697037943612308 +12 0.7348518971806154 0.0 2.204555691541846 +13 0.0 0.7348518971806154 2.204555691541846 +14 1.4697037943612308 0.0 1.4697037943612308 +15 1.4697037943612308 0.7348518971806154 2.204555691541846 +16 0.0 1.4697037943612308 1.4697037943612308 +17 0.7348518971806154 1.4697037943612308 2.204555691541846 +18 1.4697037943612308 1.4697037943612308 1.4697037943612308 +19 0.0 0.0 2.9394075887224616 +20 0.7348518971806154 0.7348518971806154 2.9394075887224616 +21 0.7348518971806154 0.0 3.674259485903077 +22 0.0 0.7348518971806154 3.674259485903077 +23 1.4697037943612308 0.0 2.9394075887224616 +24 1.4697037943612308 0.7348518971806154 3.674259485903077 +25 0.0 1.4697037943612308 2.9394075887224616 +26 0.7348518971806154 1.4697037943612308 3.674259485903077 +27 1.4697037943612308 1.4697037943612308 2.9394075887224616 +28 0.0 0.0 4.409111383083692 +29 0.7348518971806154 0.7348518971806154 4.409111383083692 +30 0.7348518971806154 0.0 5.143963280264308 +31 0.0 0.7348518971806154 5.143963280264308 +32 1.4697037943612308 0.0 4.409111383083692 +33 1.4697037943612308 0.7348518971806154 5.143963280264308 +34 0.0 1.4697037943612308 4.409111383083692 +35 0.7348518971806154 1.4697037943612308 5.143963280264308 +36 1.4697037943612308 1.4697037943612308 4.409111383083692 +37 0.0 0.0 5.878815177444923 +38 0.7348518971806154 0.7348518971806154 5.878815177444923 +39 0.7348518971806154 0.0 6.613667074625538 +40 0.0 0.7348518971806154 6.613667074625538 +41 1.4697037943612308 0.0 5.878815177444923 +42 1.4697037943612308 0.7348518971806154 6.613667074625538 +43 0.0 1.4697037943612308 5.878815177444923 +44 0.7348518971806154 1.4697037943612308 6.613667074625538 +45 1.4697037943612308 1.4697037943612308 5.878815177444923 +46 0.0 0.0 7.348518971806154 +47 0.7348518971806154 0.7348518971806154 7.348518971806154 +48 0.7348518971806154 0.0 8.08337086898677 +49 0.0 0.7348518971806154 8.08337086898677 +50 1.4697037943612308 0.0 7.348518971806154 +51 1.4697037943612308 0.7348518971806154 8.08337086898677 +52 0.0 1.4697037943612308 7.348518971806154 +53 0.7348518971806154 1.4697037943612308 8.08337086898677 +54 1.4697037943612308 1.4697037943612308 7.348518971806154 +55 0.0 0.0 8.818222766167384 +56 0.7348518971806154 0.7348518971806154 8.818222766167384 +57 0.7348518971806154 0.0 9.553074663348 +58 0.0 0.7348518971806154 9.553074663348 +59 1.4697037943612308 0.0 8.818222766167384 +60 1.4697037943612308 0.7348518971806154 9.553074663348 +61 0.0 1.4697037943612308 8.818222766167384 +62 0.7348518971806154 1.4697037943612308 9.553074663348 +63 1.4697037943612308 1.4697037943612308 8.818222766167384 + +Types +#ID type +1 1 +2 1 +3 1 +4 1 +5 1 +6 1 +7 1 +8 1 +9 1 +10 1 +11 1 +12 1 +13 1 +14 1 +15 1 +16 1 +17 1 +18 1 +19 1 +20 1 +21 1 +22 1 +23 1 +24 1 +25 1 +26 1 +27 1 +28 1 +29 1 +30 1 +31 1 +32 1 +33 1 +34 1 +35 1 +36 1 +37 1 +38 1 +39 1 +40 1 +41 1 +42 1 +43 1 +44 1 +45 1 +46 1 +47 1 +48 1 +49 1 +50 1 +51 1 +52 1 +53 1 +54 1 +55 1 +56 1 +57 1 +58 1 +59 1 +60 1 +61 1 +62 1 +63 1 + +Diameters +#ID diameter +1 1 +2 1 +3 1 +4 1 +5 1 +6 1 +7 1 +8 1 +9 1 +10 1 +11 1 +12 1 +13 1 +14 1 +15 1 +16 1 +17 1 +18 1 +19 1 +20 1 +21 1 +22 1 +23 1 +24 1 +25 1 +26 1 +27 1 +28 1 +29 1 +30 1 +31 1 +32 1 +33 1 +34 1 +35 1 +36 1 +37 1 +38 1 +39 1 +40 1 +41 1 +42 1 +43 1 +44 1 +45 1 +46 1 +47 1 +48 1 +49 1 +50 1 +51 1 +52 1 +53 1 +54 1 +55 1 +56 1 +57 1 +58 1 +59 1 +60 1 +61 1 +62 1 +63 1 + +Masses +#ID mass +1 1 +2 1 +3 1 +4 1 +5 1 +6 1 +7 1 +8 1 +9 1 +10 1 +11 1 +12 1 +13 1 +14 1 +15 1 +16 1 +17 1 +18 1 +19 1 +20 1 +21 1 +22 1 +23 1 +24 1 +25 1 +26 1 +27 1 +28 1 +29 1 +30 1 +31 1 +32 1 +33 1 +34 1 +35 1 +36 1 +37 1 +38 1 +39 1 +40 1 +41 1 +42 1 +43 1 +44 1 +45 1 +46 1 +47 1 +48 1 +49 1 +50 1 +51 1 +52 1 +53 1 +54 1 +55 1 +56 1 +57 1 +58 1 +59 1 +60 1 +61 1 +62 1 +63 1 + +Bonds +#ID type atom1 atom2 +1 1 1 2 +2 1 1 3 +3 1 1 4 +4 1 1 5 +5 1 1 7 +6 1 1 10 +7 1 2 3 +8 1 2 4 +9 1 2 5 +10 1 2 6 +11 1 2 7 +12 1 2 8 +13 1 2 9 +14 1 2 11 +15 1 3 4 +16 1 3 5 +17 1 3 6 +18 1 3 8 +19 1 3 10 +20 1 3 11 +21 1 3 12 +22 1 3 14 +23 1 4 6 +24 1 4 7 +25 1 4 8 +26 1 4 10 +27 1 4 11 +28 1 4 13 +29 1 4 16 +30 1 5 6 +31 1 5 9 +32 1 5 14 +33 1 6 8 +34 1 6 9 +35 1 6 11 +36 1 6 14 +37 1 6 18 +38 1 7 8 +39 1 7 9 +40 1 7 16 +41 1 8 9 +42 1 8 11 +43 1 8 16 +44 1 8 17 +45 1 8 18 +46 1 9 18 +47 1 10 11 +48 1 10 12 +49 1 10 13 +50 1 10 14 +51 1 10 16 +52 1 10 19 +53 1 11 12 +54 1 11 13 +55 1 11 14 +56 1 11 15 +57 1 11 16 +58 1 11 17 +59 1 11 18 +60 1 12 13 +61 1 12 14 +62 1 12 15 +63 1 12 17 +64 1 12 19 +65 1 12 20 +66 1 12 21 +67 1 12 23 +68 1 13 15 +69 1 13 16 +70 1 13 17 +71 1 13 19 +72 1 13 20 +73 1 13 22 +74 1 13 25 +75 1 14 15 +76 1 14 18 +77 1 14 23 +78 1 15 17 +79 1 15 18 +80 1 15 20 +81 1 15 23 +82 1 15 27 +83 1 16 17 +84 1 16 18 +85 1 16 25 +86 1 17 18 +87 1 17 20 +88 1 17 25 +89 1 17 27 +90 1 18 27 +91 1 19 20 +92 1 19 21 +93 1 19 22 +94 1 19 23 +95 1 19 25 +96 1 19 28 +97 1 20 21 +98 1 20 22 +99 1 20 23 +100 1 20 24 +101 1 20 25 +102 1 20 26 +103 1 20 27 +104 1 20 29 +105 1 21 22 +106 1 21 23 +107 1 21 24 +108 1 21 26 +109 1 21 28 +110 1 21 29 +111 1 21 30 +112 1 21 32 +113 1 22 24 +114 1 22 25 +115 1 22 26 +116 1 22 28 +117 1 22 29 +118 1 22 34 +119 1 23 24 +120 1 23 27 +121 1 23 32 +122 1 24 26 +123 1 24 27 +124 1 24 29 +125 1 24 32 +126 1 24 36 +127 1 25 26 +128 1 25 27 +129 1 25 34 +130 1 26 27 +131 1 26 29 +132 1 26 34 +133 1 26 35 +134 1 26 36 +135 1 27 36 +136 1 28 29 +137 1 28 30 +138 1 28 31 +139 1 28 32 +140 1 28 34 +141 1 28 37 +142 1 29 30 +143 1 29 31 +144 1 29 32 +145 1 29 33 +146 1 29 34 +147 1 29 35 +148 1 29 36 +149 1 29 38 +150 1 30 31 +151 1 30 32 +152 1 30 33 +153 1 30 35 +154 1 30 37 +155 1 30 38 +156 1 30 41 +157 1 31 33 +158 1 31 34 +159 1 31 35 +160 1 31 37 +161 1 31 38 +162 1 31 40 +163 1 31 43 +164 1 32 33 +165 1 32 36 +166 1 32 41 +167 1 33 35 +168 1 33 36 +169 1 33 38 +170 1 33 41 +171 1 33 42 +172 1 33 45 +173 1 34 35 +174 1 34 36 +175 1 34 43 +176 1 35 36 +177 1 35 38 +178 1 35 43 +179 1 35 45 +180 1 36 45 +181 1 37 38 +182 1 37 39 +183 1 37 40 +184 1 37 41 +185 1 37 43 +186 1 37 46 +187 1 38 39 +188 1 38 40 +189 1 38 41 +190 1 38 42 +191 1 38 43 +192 1 38 44 +193 1 38 45 +194 1 38 47 +195 1 39 40 +196 1 39 41 +197 1 39 42 +198 1 39 44 +199 1 39 46 +200 1 39 47 +201 1 39 50 +202 1 40 42 +203 1 40 43 +204 1 40 44 +205 1 40 46 +206 1 40 47 +207 1 40 52 +208 1 41 42 +209 1 41 45 +210 1 41 50 +211 1 42 44 +212 1 42 45 +213 1 42 47 +214 1 42 50 +215 1 42 51 +216 1 42 54 +217 1 43 44 +218 1 43 45 +219 1 43 52 +220 1 44 45 +221 1 44 47 +222 1 44 52 +223 1 44 53 +224 1 44 54 +225 1 45 54 +226 1 46 47 +227 1 46 48 +228 1 46 49 +229 1 46 50 +230 1 46 52 +231 1 46 55 +232 1 47 48 +233 1 47 49 +234 1 47 50 +235 1 47 51 +236 1 47 52 +237 1 47 53 +238 1 47 54 +239 1 47 56 +240 1 48 49 +241 1 48 50 +242 1 48 51 +243 1 48 53 +244 1 48 55 +245 1 48 56 +246 1 48 57 +247 1 48 59 +248 1 49 51 +249 1 49 52 +250 1 49 53 +251 1 49 55 +252 1 49 56 +253 1 49 58 +254 1 49 61 +255 1 50 51 +256 1 50 54 +257 1 50 59 +258 1 51 53 +259 1 51 54 +260 1 51 56 +261 1 51 59 +262 1 51 63 +263 1 52 53 +264 1 52 54 +265 1 52 61 +266 1 53 54 +267 1 53 56 +268 1 53 61 +269 1 53 62 +270 1 53 63 +271 1 54 63 +272 1 55 56 +273 1 55 57 +274 1 55 58 +275 1 55 59 +276 1 55 61 +277 1 56 57 +278 1 56 58 +279 1 56 59 +280 1 56 60 +281 1 56 61 +282 1 56 62 +283 1 56 63 +284 1 57 58 +285 1 57 59 +286 1 57 60 +287 1 57 62 +288 1 58 60 +289 1 58 61 +290 1 58 62 +291 1 59 60 +292 1 59 63 +293 1 60 62 +294 1 60 63 +295 1 61 62 +296 1 61 63 +297 1 62 63 diff --git a/src/BPM/bond_bpm_rotational.cpp b/src/BPM/bond_bpm_rotational.cpp index bee7a69b6a..4268655ca1 100644 --- a/src/BPM/bond_bpm_rotational.cpp +++ b/src/BPM/bond_bpm_rotational.cpp @@ -36,11 +36,6 @@ using namespace LAMMPS_NS; using namespace MathExtra; - - - - -#include "update.h" /* ---------------------------------------------------------------------- */ BondBPMRotational::BondBPMRotational(LAMMPS *lmp) : BondBPM(lmp) @@ -199,10 +194,10 @@ void BondBPMRotational::compute(int eflag, int vflag) int i1,i2,itmp,m,n,type,itype,jtype; double evdwl,fpair,rsq,ebond; double q1[4], q2[4], r[3], r0[3]; - double r0_mag, r_mag, r_mag_inv, Fr_mag, Fs_mag; + double r0_mag, r_mag, r_mag_inv, Fr, Fs_mag; double Tt_mag, Tb_mag; double force1on2[3], torque1on2[3], torque2on1[3]; - double breaking, smooth, smooth_sq; + double breaking, smooth; double rhat[3], wn1[3], wn2[3], wxn1[3], wxn2[3], vroll[3]; double w1dotr, w2dotr, v1dotr, v2dotr; double vn1[3], vn2[3], vt1[3], vt2[3], tmp[3], s1[3], s2[3], tdamp[3]; @@ -212,7 +207,8 @@ void BondBPMRotational::compute(int eflag, int vflag) double q21[4], qp21[4], Tbp[3], Ttp[3]; double Tsp[3], Fsp[3], Tt[3], Tb[3], Ts[3], F_rot[3], T_rot[3]; double mq[4], mqinv[4], Ttmp[3], Ftmp[3], qtmp[4]; - double r0_dot_rb, gamma, c, psi, theta, sin_phi, cos_phi, temp, mag_in_plane, mag_out_plane; + double r0_dot_rb, gamma, c, psi, theta, sin_phi, cos_phi, temp; + double mag_in_plane, mag_out_plane; ev_init(eflag,vflag); @@ -291,9 +287,9 @@ void BondBPMRotational::compute(int eflag, int vflag) // Calculate normal forces, rb = bond vector in particle 1's frame MathExtra::qconjugate(q2, q2inv); MathExtra::quatrotvec(q2inv, r, rb); - Fr_mag = Kr[type]*(r_mag - r0_mag); + Fr = Kr[type]*(r_mag - r0_mag); - MathExtra::scale3(Fr_mag*r_mag_inv, rb, F_rot); + MathExtra::scale3(Fr*r_mag_inv, rb, F_rot); // Calculate forces due to tangential displacements (no rotation) r0_dot_rb = dot3(r0, rb); @@ -435,10 +431,8 @@ void BondBPMRotational::compute(int eflag, int vflag) // Check if bond breaks // ------------------------------------------------------// - if (r_mag < r0_mag) - breaking = Fs_mag/Fcs[type] + Tb_mag/Tcb[type] + Tt_mag/Tct[type]; - else - breaking = Fr_mag/Fcr[type] + Fs_mag/Fcs[type] + Tb_mag/Tcb[type] + Tt_mag/Tct[type]; + breaking = Fs_mag/Fcs[type] + Tb_mag/Tcb[type] + Tt_mag/Tct[type]; + if (Fr > 0.0) breaking += Fr/Fcr[type]; if (breaking >= 1.0) { bondlist[n][2] = 0; @@ -446,11 +440,11 @@ void BondBPMRotational::compute(int eflag, int vflag) continue; } - smooth = 1.0 - breaking; - smooth_sq = smooth*smooth; + smooth = breaking*breaking; + smooth = 1.0 - smooth*smooth; // Not actual energy, just a handy metric - if (eflag) ebond = -smooth_sq; + if (eflag) ebond = -smooth; // ------------------------------------------------------// // Calculate damping using formulation in @@ -524,26 +518,26 @@ void BondBPMRotational::compute(int eflag, int vflag) // ------------------------------------------------------// if (newton_bond || i1 < nlocal) { - f[i1][0] -= force1on2[0]*smooth_sq; - f[i1][1] -= force1on2[1]*smooth_sq; - f[i1][2] -= force1on2[2]*smooth_sq; + f[i1][0] -= force1on2[0]*smooth; + f[i1][1] -= force1on2[1]*smooth; + f[i1][2] -= force1on2[2]*smooth; - torque[i1][0] += torque2on1[0]*smooth_sq; - torque[i1][1] += torque2on1[1]*smooth_sq; - torque[i1][2] += torque2on1[2]*smooth_sq; + torque[i1][0] += torque2on1[0]*smooth; + torque[i1][1] += torque2on1[1]*smooth; + torque[i1][2] += torque2on1[2]*smooth; } if (newton_bond || i2 < nlocal) { - f[i2][0] += force1on2[0]*smooth_sq; - f[i2][1] += force1on2[1]*smooth_sq; - f[i2][2] += force1on2[2]*smooth_sq; + f[i2][0] += force1on2[0]*smooth; + f[i2][1] += force1on2[1]*smooth; + f[i2][2] += force1on2[2]*smooth; - torque[i2][0] += torque1on2[0]*smooth_sq; - torque[i2][1] += torque1on2[1]*smooth_sq; - torque[i2][2] += torque1on2[2]*smooth_sq; + torque[i2][0] += torque1on2[0]*smooth; + torque[i2][1] += torque1on2[1]*smooth; + torque[i2][2] += torque1on2[2]*smooth; } - if (evflag) ev_tally(i1,i2,nlocal,newton_bond,ebond,Fr_mag,r[0],r[1],r[2]); + if (evflag) ev_tally(i1,i2,nlocal,newton_bond,ebond,Fr*smooth,r[0],r[1],r[2]); } } diff --git a/src/GRANULAR/pair_gran_hertz_history.cpp b/src/GRANULAR/pair_gran_hertz_history.cpp index c45b535d6f..85cbb51f90 100644 --- a/src/GRANULAR/pair_gran_hertz_history.cpp +++ b/src/GRANULAR/pair_gran_hertz_history.cpp @@ -89,6 +89,7 @@ void PairGranHertzHistory::compute(int eflag, int vflag) int *mask = atom->mask; int nlocal = atom->nlocal; int newton_pair = force->newton_pair; + double *special_lj = force->special_lj; inum = list->inum; ilist = list->ilist; diff --git a/src/GRANULAR/pair_gran_hooke.cpp b/src/GRANULAR/pair_gran_hooke.cpp index 11c867cd81..5efa43b03e 100644 --- a/src/GRANULAR/pair_gran_hooke.cpp +++ b/src/GRANULAR/pair_gran_hooke.cpp @@ -82,6 +82,7 @@ void PairGranHooke::compute(int eflag, int vflag) int *mask = atom->mask; int nlocal = atom->nlocal; int newton_pair = force->newton_pair; + double *special_lj = force->special_lj; inum = list->inum; ilist = list->ilist; diff --git a/src/GRANULAR/pair_gran_hooke_history.cpp b/src/GRANULAR/pair_gran_hooke_history.cpp index 5732619616..4dd2147d39 100644 --- a/src/GRANULAR/pair_gran_hooke_history.cpp +++ b/src/GRANULAR/pair_gran_hooke_history.cpp @@ -151,6 +151,7 @@ void PairGranHookeHistory::compute(int eflag, int vflag) int *mask = atom->mask; int nlocal = atom->nlocal; int newton_pair = force->newton_pair; + double *special_lj = force->special_lj; inum = list->inum; ilist = list->ilist; diff --git a/src/GRANULAR/pair_granular.cpp b/src/GRANULAR/pair_granular.cpp index d82423b05e..ccfbea5b1f 100644 --- a/src/GRANULAR/pair_granular.cpp +++ b/src/GRANULAR/pair_granular.cpp @@ -222,6 +222,7 @@ void PairGranular::compute(int eflag, int vflag) double *rmass = atom->rmass; int *mask = atom->mask; int nlocal = atom->nlocal; + double *special_lj = force->special_lj; inum = list->inum; ilist = list->ilist; diff --git a/src/Makefile b/src/Makefile index 808476979a..cb0256167b 100644 --- a/src/Makefile +++ b/src/Makefile @@ -53,7 +53,7 @@ PACKAGE = \ awpmd \ bocs \ body \ - bpm \ + bpm \ brownian \ cg-dna \ cg-sdk \ @@ -148,8 +148,8 @@ PACKMOST = \ asphere \ bocs \ body \ - bpm - brownian \ + bpm \ + brownian \ cg-dna \ cg-sdk \ class2 \ diff --git a/src/fix_neigh_history.cpp b/src/fix_neigh_history.cpp index 2e5c15d7ba..6f35ea73e6 100644 --- a/src/fix_neigh_history.cpp +++ b/src/fix_neigh_history.cpp @@ -628,12 +628,14 @@ void FixNeighHistory::post_neighbor() if (use_bit_flag) { rflag = histmask(j) | pair->beyond_contact; - j &= NEIGHMASK; + j &= HISTMASK; jlist[jj] = j; } else { rflag = 1; - j &= NEIGHMASK; } + + // Remove special bond bits + j &= NEIGHMASK; // rflag = 1 if r < radsum in npair_size() method or if pair interactions extend further // preserve neigh history info if tag[j] is in old-neigh partner list diff --git a/src/fix_property_atom.cpp b/src/fix_property_atom.cpp index 63023f110e..605e25525e 100644 --- a/src/fix_property_atom.cpp +++ b/src/fix_property_atom.cpp @@ -553,7 +553,7 @@ void FixPropertyAtom::copy_arrays(int i, int j, int /*delflag*/) else if (styles[nv] == IVEC) { atom->ivector[index[nv]][j] = atom->ivector[index[nv]][i]; atom->ivector[index[nv]][i] = 0; - } else if (styles[nv] == DVEC) + } else if (styles[nv] == DVEC) { atom->dvector[index[nv]][j] = atom->dvector[index[nv]][i]; atom->dvector[index[nv]][i] = 0.0; } else if (styles[nv] == IARRAY) { diff --git a/src/lmptype.h b/src/lmptype.h index b188e4b7e7..7cfa2d66ea 100644 --- a/src/lmptype.h +++ b/src/lmptype.h @@ -62,6 +62,7 @@ namespace LAMMPS_NS { #define SBBITS 30 #define HISTBITS 29 #define NEIGHMASK 0x1FFFFFFF +#define HISTMASK 0xDFFFFFFF // default to 32-bit smallint and other ints, 64-bit bigint From f9a972220e30d4303e572ec18c8d141bfd9b3a06 Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Thu, 9 Sep 2021 09:00:21 -0600 Subject: [PATCH 03/40] Fixing data compression in history, small update to model --- doc/src/bond_bpm_rotational.rst | 8 +- doc/src/read_data.rst | 2 + examples/bpm/impact/impact_bpm.lmp | 6 +- examples/bpm/impact/log.30Jul2021.pour.g++1.4 | 201 ++- src/BPM/bond_bpm.cpp | 695 ++++---- src/BPM/bond_bpm.h | 181 +-- src/BPM/bond_bpm_rotational.cpp | 1436 ++++++++--------- src/BPM/bond_bpm_rotational.h | 1 - src/BPM/fix_bond_history.cpp | 12 + src/BPM/fix_bond_history.h | 1 + 10 files changed, 1293 insertions(+), 1250 deletions(-) diff --git a/doc/src/bond_bpm_rotational.rst b/doc/src/bond_bpm_rotational.rst index a88fa6f6bf..bfa07041b3 100644 --- a/doc/src/bond_bpm_rotational.rst +++ b/doc/src/bond_bpm_rotational.rst @@ -68,16 +68,14 @@ Bonds will break under sufficient stress. A breaking criteria is calculated .. math:: - B = \alpha(r, r_0) \frac{f_r}{f_{r,c}} + \frac{|f_s|}{f_{s,c}} + - \frac{|\tau_b|}{\tau_{b,c}} + \frac{|\tau_t|}{\tau_{t,c}} + B = \mathrm{max}\{0, \frac{f_r}{f_{r,c}} + \frac{|f_s|}{f_{s,c}} + + \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. The term :math:`\alpha` is simply one in -extension and zero in compression such that the normal force component -does not contribute to the breaking criteria in compression. +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. diff --git a/doc/src/read_data.rst b/doc/src/read_data.rst index 5b5c951688..e4cf2eff0f 100644 --- a/doc/src/read_data.rst +++ b/doc/src/read_data.rst @@ -648,6 +648,8 @@ of analysis. - atom-ID atom-type rho esph cv x y z * - sphere - atom-ID atom-type diameter density x y z + * - sphere/bpm + - atom-ID molecule-ID atom-type diameter density x y z * - spin - atom-ID atom-type x y z spx spy spz sp * - tdpd diff --git a/examples/bpm/impact/impact_bpm.lmp b/examples/bpm/impact/impact_bpm.lmp index 9eb04829bb..de975fb956 100644 --- a/examples/bpm/impact/impact_bpm.lmp +++ b/examples/bpm/impact/impact_bpm.lmp @@ -23,8 +23,8 @@ neighbor 1.0 bin pair_style gran/hooke/history 1.0 NULL 0.5 NULL 0.1 1 bond_style bpm/rotational store/local 2 time id1 id2 pair_coeff 1 1 -bond_coeff 1 1.0 0.2 0.02 0.02 0.05 0.01 0.005 0.005 0.1 0.02 0.002 0.002 -bond_coeff 2 1.0 0.2 0.02 0.02 0.20 0.04 0.020 0.020 0.1 0.02 0.002 0.002 +bond_coeff 1 1.0 0.2 0.02 0.02 0.05 0.01 0.01 0.01 0.1 0.02 0.002 0.002 +bond_coeff 2 1.0 0.2 0.02 0.02 0.20 0.04 0.04 0.04 0.1 0.02 0.002 0.002 fix 1 all nve/sphere/bpm fix 2 all store/local 100 3 @@ -49,4 +49,4 @@ thermo 100 dump 2 all local 100 brokenDump f_2[1] f_2[2] f_2[3] dump_modify 2 header no -run 6000 +run 10000 diff --git a/examples/bpm/impact/log.30Jul2021.pour.g++1.4 b/examples/bpm/impact/log.30Jul2021.pour.g++1.4 index 50d90788c6..300ac271eb 100644 --- a/examples/bpm/impact/log.30Jul2021.pour.g++1.4 +++ b/examples/bpm/impact/log.30Jul2021.pour.g++1.4 @@ -36,8 +36,8 @@ neighbor 1.0 bin pair_style gran/hooke/history 1.0 NULL 0.5 NULL 0.1 1 bond_style bpm/rotational store/local 2 time id1 id2 pair_coeff 1 1 -bond_coeff 1 1.0 0.2 0.02 0.02 0.05 0.01 0.005 0.005 0.1 0.02 0.002 0.002 -bond_coeff 2 1.0 0.2 0.02 0.02 0.20 0.04 0.020 0.020 0.1 0.02 0.002 0.002 +bond_coeff 1 1.0 0.2 0.02 0.02 0.05 0.01 0.01 0.01 0.1 0.02 0.002 0.002 +bond_coeff 2 1.0 0.2 0.02 0.02 0.20 0.04 0.04 0.04 0.1 0.02 0.002 0.002 fix 1 all nve/sphere/bpm fix 2 all store/local 100 3 @@ -67,7 +67,7 @@ Finding 1-2 1-3 1-4 neighbors ... special bond factors coul: 0 1 1 15 = max # of 1-2 neighbors 101 = max # of special neighbors - special bonds CPU = 0.001 seconds + special bonds CPU = 0.002 seconds create_bonds many projectile projectile 2 0.0 1.5 Added 21869 bonds, new total = 60420 Finding 1-2 1-3 1-4 neighbors ... @@ -94,7 +94,7 @@ dump 1 all custom 100 atomDump id radius x y z c_nbond dump 2 all local 100 brokenDump f_2[1] f_2[2] f_2[3] dump_modify 2 header no -run 6000 +run 10000 Neighbor list info ... update every 1 steps, delay 10 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -114,89 +114,128 @@ Step KinEng PotEng Pxx Pyy Pzz c_tbond 200 0.00053248439 -5.4354084 0.00013279102 1.6787387e-12 5.4953548e-13 10.870817 300 0.00053248439 -5.4354084 0.00013459514 3.0577302e-12 -1.2088316e-12 10.870817 400 0.00053248439 -5.4354084 0.00013739515 9.7326931e-13 1.1562543e-12 10.870817 - 500 0.0005311195 -5.4353511 0.00013532545 -1.8468866e-06 -1.6585907e-06 10.870817 - 600 0.00051833989 -5.4288362 7.1725873e-05 -1.6444182e-05 -1.9715516e-05 10.860022 - 700 0.00050552886 -5.3985398 -2.3212715e-05 -1.3937832e-05 -1.9091149e-05 10.805955 - 800 0.00050518224 -5.3616112 8.2515921e-05 2.6973287e-05 2.0513255e-05 10.735516 - 900 0.00050396335 -5.3458995 0.00019263348 -3.7564641e-05 -4.5902247e-05 10.699172 - 1000 0.00049399705 -5.3356803 8.3780211e-05 -3.900811e-05 -3.7974569e-05 10.677852 - 1100 0.00047949984 -5.3177445 -3.3039707e-05 7.3302691e-05 9.1425255e-05 10.645196 - 1200 0.0004778277 -5.2918722 2.5525662e-05 -7.3957522e-06 -1.0428816e-06 10.596168 - 1300 0.00047175855 -5.2622229 0.00016622071 -7.5895427e-05 -7.3668463e-05 10.536884 - 1400 0.00047346655 -5.2357068 0.00013088251 3.8629925e-05 4.7370005e-05 10.484257 - 1500 0.00047030222 -5.2110028 2.0138342e-05 0.00014344934 0.00014572537 10.43289 - 1600 0.00047120889 -5.1944302 8.0308725e-05 9.7652665e-05 9.2786939e-05 10.397265 - 1700 0.00046169345 -5.1800484 0.00015698427 -1.2415417e-05 -2.2822524e-05 10.370457 - 1800 0.00045838981 -5.1581008 6.4666951e-05 -2.044593e-05 -3.1699628e-05 10.327726 - 1900 0.00045723383 -5.1435986 7.4830972e-06 2.8528283e-05 9.5685497e-06 10.29615 - 2000 0.00045822947 -5.1339093 8.8355461e-05 2.4391936e-05 2.6856807e-06 10.276268 - 2100 0.00045635704 -5.123239 0.00014447351 -1.885824e-05 -2.5038419e-05 10.252789 - 2200 0.0004531016 -5.1193556 4.9062089e-05 -4.1290134e-05 -2.8125502e-05 10.245682 - 2300 0.00044750986 -5.1059583 -1.3106261e-05 -6.3125644e-05 -3.3287217e-05 10.221303 - 2400 0.00044828631 -5.08466 9.1580692e-05 -3.8583903e-05 -5.1373805e-05 10.177942 - 2500 0.00044674619 -5.0736124 0.00011856396 4.6266072e-06 -1.5907979e-05 10.153203 - 2600 0.00044727275 -5.0614096 5.295308e-05 6.0578952e-05 5.7167864e-05 10.128553 - 2700 0.00044110051 -5.0507956 1.8440804e-05 5.4883922e-05 6.3982178e-05 10.106153 - 2800 0.00043633042 -5.0426937 8.1816485e-05 -1.5431256e-06 -1.855006e-05 10.08996 - 2900 0.00043176823 -5.0356307 0.00012046457 4.4651701e-05 2.7620283e-06 10.075387 - 3000 0.00043218951 -5.027846 3.2574549e-05 7.4433525e-05 4.6834269e-05 10.059554 - 3100 0.00043256828 -5.0161104 3.3101063e-05 4.6551359e-05 5.6531167e-05 10.036164 - 3200 0.0004332929 -5.0068366 8.9512897e-05 -5.7060048e-06 -2.5891142e-06 10.018172 - 3300 0.00043157298 -5.0008275 8.4139723e-05 -3.6940688e-05 -5.1910847e-05 10.005218 - 3400 0.000431398 -4.9965161 2.5625084e-05 1.1433716e-05 6.4926012e-06 9.9965815 - 3500 0.00043011473 -4.9928073 2.7095736e-05 -7.7339585e-06 7.844574e-06 9.9891148 - 3600 0.00042888594 -4.9847529 7.7453653e-05 -4.6984476e-05 -3.5038838e-05 9.9747211 - 3700 0.00042753057 -4.9765311 6.8775078e-05 -3.1077337e-05 -3.3804378e-05 9.9585282 - 3800 0.00042500059 -4.9705379 1.4686991e-05 -2.1799517e-05 -1.2214392e-05 9.9471033 - 3900 0.00042443518 -4.9635965 2.9590319e-05 -7.5174838e-06 9.4138716e-06 9.9336092 - 4000 0.00042354431 -4.9575067 7.497612e-05 -2.241558e-05 -1.7795282e-05 9.9216445 - 4100 0.00042603308 -4.937097 4.8886365e-05 -1.065802e-05 -2.4723829e-05 9.8824217 - 4200 0.00042476916 -4.926145 1.9200413e-05 1.0927038e-05 3.1855248e-06 9.8600216 - 4300 0.00042485728 -4.918146 3.0086129e-05 -8.6292641e-06 2.1921266e-06 9.8440986 - 4400 0.00042494366 -4.9099091 6.2777705e-05 -5.4921818e-06 -7.6169646e-06 9.8263764 - 4500 0.0004275409 -4.8995178 4.7617152e-05 2.1335231e-06 1.1579137e-06 9.8055056 - 4600 0.00042662895 -4.8820208 1.084188e-05 -1.5696264e-06 1.1310734e-05 9.7706909 - 4700 0.00042734689 -4.8725198 3.7425941e-05 -4.439827e-06 1.13299e-05 9.7511695 - 4800 0.00042900821 -4.8540514 5.4751797e-05 -1.1417464e-05 -8.8084486e-06 9.7147355 - 4900 0.00043023872 -4.8363433 3.3053643e-05 3.2468406e-06 -6.4727375e-06 9.6776718 - 5000 0.00043199875 -4.8198092 1.8345516e-05 8.4946117e-06 5.6309681e-06 9.6456459 - 5100 0.00044223594 -4.7778052 3.0243074e-05 -5.0316681e-06 -3.9518237e-06 9.5634221 - 5200 0.00044479909 -4.7640293 4.8598154e-05 -6.7947105e-06 -1.5950295e-05 9.5343649 - 5300 0.0004454718 -4.755521 2.7021591e-05 4.8540854e-06 -5.1116404e-06 9.5168226 - 5400 0.00044509902 -4.7442744 1.5098441e-05 9.1872595e-06 1.0269456e-05 9.4952321 - 5500 0.00044706883 -4.7308865 3.2631779e-05 1.097946e-06 5.8901266e-06 9.4690536 - 5600 0.00045084112 -4.7115078 3.7164777e-05 -2.2594948e-06 -5.1676349e-06 9.4311803 - 5700 0.00045327828 -4.6989042 2.2566508e-05 2.2741586e-06 8.6663706e-07 9.404552 - 5800 0.00046103079 -4.6780119 1.4582664e-05 1.2169813e-06 8.2506998e-06 9.3626304 - 5900 0.00046315911 -4.6539134 2.7960455e-05 -5.7750919e-06 1.1483488e-08 9.313692 - 6000 0.00046381574 -4.6376345 3.2506838e-05 -1.1407228e-07 -5.8332064e-06 9.2804066 -Loop time of 26.8573 on 4 procs for 6000 steps with 11116 atoms + 500 0.00053111833 -5.4353812 0.00013532154 -1.8602155e-06 -1.6702711e-06 10.870817 + 600 0.00051558884 -5.4335908 5.8899364e-05 -2.4651157e-05 -2.6584555e-05 10.868838 + 700 0.0005013055 -5.4216397 -7.255462e-05 -2.8970044e-05 -4.1925574e-05 10.850846 + 800 0.00049878634 -5.3947446 5.6196335e-05 1.8649508e-05 8.9976433e-06 10.803706 + 900 0.00049589843 -5.3619596 0.00020821095 -7.7726675e-05 -8.6749853e-05 10.737855 + 1000 0.00049487709 -5.3376233 0.00017638288 -2.8676423e-05 -4.5487748e-05 10.683879 + 1100 0.00048720924 -5.3283688 4.0171402e-05 0.0001406456 0.00014483 10.662648 + 1200 0.00048274004 -5.3195134 7.4824656e-06 7.4411513e-05 0.00010365246 10.643397 + 1300 0.00047990668 -5.3127593 0.00018114159 -2.9205108e-05 1.1366149e-05 10.629723 + 1400 0.00048034109 -5.3084824 0.000147425 -6.2432251e-05 -3.8277687e-05 10.620187 + 1500 0.00047225373 -5.3024141 8.6252599e-07 2.4082822e-05 3.049023e-05 10.608492 + 1600 0.00045698513 -5.2972292 1.0763242e-05 4.1148987e-05 2.83019e-05 10.599676 + 1700 0.00044854655 -5.2896066 0.00010217014 -6.9430229e-05 -9.6661607e-05 10.587262 + 1800 0.00044929529 -5.2775304 0.00010981512 -8.0553726e-05 -0.00011931185 10.562972 + 1900 0.00044441992 -5.2650251 1.8882842e-05 1.0491309e-05 -3.879472e-05 10.540842 + 2000 0.00043947002 -5.2484561 4.4869915e-05 6.8824059e-05 3.5808833e-05 10.511155 + 2100 0.00043372382 -5.2265524 0.00013970367 1.6484426e-05 2.2785645e-05 10.469054 + 2200 0.00043174768 -5.2069377 9.4662371e-05 2.2278647e-06 3.5962708e-05 10.427852 + 2300 0.0004270123 -5.1924656 2.3188212e-05 6.1522399e-06 7.4262622e-05 10.396006 + 2400 0.00042569191 -5.1848751 5.7811979e-05 2.7124197e-05 0.0001072424 10.378733 + 2500 0.00042259717 -5.1758217 0.00013069307 3.3656662e-05 0.00010197635 10.359482 + 2600 0.00042271375 -5.1700793 9.5183077e-05 5.3232578e-05 8.9912385e-05 10.347787 + 2700 0.00042252395 -5.1628759 2.6305437e-05 6.7644983e-05 7.7095778e-05 10.332674 + 2800 0.00042123755 -5.1549973 6.5875753e-05 2.8392569e-05 2.8079356e-05 10.315941 + 2900 0.00042132346 -5.1508594 0.00011264272 6.3410829e-06 -2.1983564e-05 10.306405 + 3000 0.00042343054 -5.1495182 7.3503612e-05 3.8773748e-05 -9.519275e-06 10.301547 + 3100 0.00042220412 -5.1483831 2.5233575e-05 5.0076476e-05 3.938746e-06 10.299568 + 3200 0.00042303815 -5.1466902 6.1939664e-05 -9.1346169e-06 -2.5920911e-05 10.29651 + 3300 0.00042000178 -5.144782 9.8814555e-05 -4.04749e-05 -4.2876825e-05 10.292371 + 3400 0.00041874209 -5.1416065 5.1246647e-05 -2.7877246e-05 -3.225052e-05 10.286254 + 3500 0.00041582277 -5.1397016 2.0053694e-05 -3.5797833e-05 -1.536015e-05 10.282296 + 3600 0.00041607097 -5.139236 6.0675623e-05 -5.7232123e-05 -3.1162791e-05 10.281036 + 3700 0.00041445536 -5.1373913 8.7909083e-05 -4.1136114e-05 -5.2627526e-05 10.277978 + 3800 0.0004147342 -5.1323122 4.6324048e-05 7.0253754e-06 -3.3511914e-05 10.268442 + 3900 0.00041446917 -5.1294358 2.8646507e-05 1.5201733e-05 -1.13759e-05 10.262504 + 4000 0.00041346205 -5.1250314 6.540586e-05 -1.17595e-05 -2.8050171e-05 10.254948 + 4100 0.00041230785 -5.1219436 7.9364924e-05 -4.1504333e-06 -2.2530525e-05 10.248111 + 4200 0.00041198555 -5.1177883 4.3515184e-05 1.5227343e-05 -6.3707934e-06 10.240014 + 4300 0.0004111489 -5.1134893 2.8350236e-05 2.0718016e-06 1.2010375e-05 10.231558 + 4400 0.00041090623 -5.1104369 6.2460747e-05 -2.5959985e-05 7.8242641e-07 10.224901 + 4500 0.00040944466 -5.1085221 6.7135567e-05 -1.7699087e-05 -4.7022089e-06 10.220943 + 4600 0.00040810594 -5.1065034 3.5212952e-05 1.3568365e-05 1.3875486e-05 10.217704 + 4700 0.00040810646 -5.1039941 3.3409499e-05 1.7215022e-05 2.8204859e-05 10.212487 + 4800 0.0004074837 -5.1015741 5.5792503e-05 1.9563116e-06 1.823506e-06 10.207089 + 4900 0.00040677077 -5.0987121 5.6695901e-05 8.2729584e-06 -1.2713008e-05 10.201871 + 5000 0.00040636045 -5.0961728 3.0704198e-05 2.2141861e-05 8.2099332e-06 10.196474 + 5100 0.00040606831 -5.0947673 3.1281394e-05 7.0864149e-06 2.0262936e-05 10.193055 + 5200 0.00040652265 -5.0940213 5.2610835e-05 -1.2888854e-05 3.0894446e-06 10.191076 + 5300 0.00040642029 -5.0931407 4.6148958e-05 -9.5544284e-06 -6.047443e-06 10.189457 + 5400 0.00040642806 -5.0915733 2.59528e-05 -3.3035524e-06 1.026995e-05 10.186038 + 5500 0.00040686546 -5.0908 2.9026708e-05 -9.0382082e-06 1.4643294e-05 10.184059 + 5600 0.0004064361 -5.0908057 4.6731327e-05 -1.2664731e-05 -2.6232887e-06 10.183339 + 5700 0.00040629203 -5.0903044 4.0856223e-05 -1.2201759e-06 -1.3169401e-05 10.18262 + 5800 0.00040637688 -5.0890571 2.2625249e-05 8.7645385e-06 -6.2486963e-06 10.180281 + 5900 0.00040613721 -5.0874767 2.8382883e-05 2.4072343e-06 2.0419388e-07 10.176862 + 6000 0.00040668084 -5.0865465 4.3602089e-05 -5.4962058e-06 -4.5087421e-06 10.174523 + 6100 0.00040707325 -5.0865389 3.4958823e-05 -2.0750124e-06 -1.6708517e-06 10.174343 + 6200 0.00040691768 -5.0863974 2.1602821e-05 3.1566836e-06 1.0526645e-05 10.174343 + 6300 0.00040705673 -5.0862887 2.9412395e-05 9.2283412e-07 1.4273225e-05 10.173983 + 6400 0.00040648035 -5.0860509 3.9684464e-05 -1.663237e-06 3.9771927e-06 10.173624 + 6500 0.00040710623 -5.0861041 3.1078617e-05 1.732822e-06 3.4003409e-06 10.173624 + 6600 0.00040665879 -5.0857907 2.0693771e-05 3.3053846e-06 1.2181329e-05 10.173264 + 6700 0.00040650151 -5.0854203 2.8479998e-05 2.7244033e-06 9.7566436e-06 10.172364 + 6800 0.00040635649 -5.0851816 3.5150661e-05 1.6906684e-06 -6.155957e-06 10.171644 + 6900 0.00040670804 -5.0848974 2.4632227e-05 2.9367001e-06 -1.0691056e-05 10.171105 + 7000 0.00040693354 -5.0843039 1.8740741e-05 6.024808e-06 4.2065619e-07 10.169665 + 7100 0.00040728228 -5.0843393 2.7137965e-05 5.5506702e-06 5.5908974e-06 10.169665 + 7200 0.0004074084 -5.0842875 3.0307934e-05 2.0170793e-06 -2.4296651e-06 10.169485 + 7300 0.00040723509 -5.0843468 2.1465618e-05 1.9642493e-06 -3.6022271e-06 10.169485 + 7400 0.00040756027 -5.0843623 1.6801323e-05 -1.9748948e-06 1.4205345e-06 10.169306 + 7500 0.00040829979 -5.0843202 2.4772881e-05 -6.1251363e-06 2.0247483e-06 10.169126 + 7600 0.00040822994 -5.0843182 2.7272667e-05 -3.0357928e-06 4.894101e-07 10.169126 + 7700 0.00040831723 -5.0843052 1.9410405e-05 3.6094291e-06 1.5451381e-06 10.169126 + 7800 0.00040868149 -5.0843706 1.6484224e-05 3.3901782e-06 3.9911363e-06 10.169126 + 7900 0.00040872521 -5.0843735 2.2844838e-05 2.8813595e-06 1.4869802e-06 10.169126 + 8000 0.00040853749 -5.0843239 2.3537039e-05 5.1951501e-06 -1.2448734e-06 10.169126 + 8100 0.00040812899 -5.0842554 1.6947117e-05 7.5128919e-06 -1.0877933e-06 10.168946 + 8200 0.00040812313 -5.0842813 1.5639254e-05 3.6719094e-06 -9.3497783e-07 10.168946 + 8300 0.00040817027 -5.0842752 2.0634335e-05 2.5358492e-07 -3.2726598e-06 10.168946 + 8400 0.00040774138 -5.084215 2.0224447e-05 1.3696075e-06 -3.3568279e-06 10.168766 + 8500 0.00040760502 -5.0842 1.4541525e-05 9.3556598e-07 1.1823477e-06 10.168766 + 8600 0.00040756971 -5.0841463 1.4460781e-05 -2.7822738e-06 4.3070092e-06 10.168766 + 8700 0.00040706312 -5.0840255 1.8278276e-05 -5.20189e-06 1.0784628e-06 10.168766 + 8800 0.00040670111 -5.0839094 1.7116511e-05 -9.4769204e-07 -3.2089738e-06 10.168586 + 8900 0.00040617439 -5.0838164 1.3315166e-05 3.2313582e-06 -2.3144297e-06 10.168586 + 9000 0.00040576758 -5.0837468 1.3898828e-05 1.5947021e-06 -2.0719014e-06 10.168586 + 9100 0.00040577217 -5.0837244 1.6547097e-05 1.1667189e-06 -3.2056138e-06 10.168406 + 9200 0.00040615545 -5.0837984 1.4946269e-05 4.3601683e-06 -2.1585248e-06 10.168406 + 9300 0.00040638526 -5.083836 1.1737091e-05 5.1607613e-06 7.2161152e-07 10.168406 + 9400 0.0004062125 -5.0838558 1.2486756e-05 1.9996225e-06 1.6192477e-06 10.168406 + 9500 0.00040627984 -5.0839239 1.441806e-05 -6.6274154e-07 -2.9396969e-07 10.168406 + 9600 0.0004065461 -5.0839109 1.3189089e-05 -5.1486848e-07 4.6653236e-07 10.168406 + 9700 0.00040642188 -5.0838722 1.0626956e-05 -1.7580535e-06 2.8200944e-06 10.168226 + 9800 0.0004061705 -5.0838326 1.1280802e-05 -3.4868266e-06 2.7287279e-06 10.168226 + 9900 0.00040666798 -5.0835647 1.2432396e-05 -2.8727154e-06 1.4556152e-07 10.167686 + 10000 0.00040675506 -5.0831833 1.0832242e-05 4.3061564e-07 -4.1422229e-07 10.166967 +Loop time of 48.2068 on 4 procs for 10000 steps with 11116 atoms -Performance: 965099.761 tau/day, 223.403 timesteps/s -98.4% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 896139.501 tau/day, 207.440 timesteps/s +97.7% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.24862 | 0.26655 | 0.28715 | 3.1 | 0.99 -Bond | 18.756 | 20.055 | 21.432 | 25.3 | 74.67 -Neigh | 0.68191 | 0.68601 | 0.69029 | 0.4 | 2.55 -Comm | 1.6547 | 3.1706 | 4.5875 | 69.7 | 11.81 -Output | 0.3381 | 0.33879 | 0.34058 | 0.2 | 1.26 -Modify | 2.0658 | 2.1974 | 2.3512 | 7.6 | 8.18 -Other | | 0.1428 | | | 0.53 +Pair | 0.39096 | 0.42232 | 0.45519 | 4.6 | 0.88 +Bond | 30.522 | 33.954 | 38.166 | 51.7 | 70.43 +Neigh | 1.1822 | 1.1872 | 1.1915 | 0.3 | 2.46 +Comm | 3.4201 | 7.9545 | 11.664 | 115.6 | 16.50 +Output | 1.0078 | 1.0085 | 1.0099 | 0.1 | 2.09 +Modify | 3.0972 | 3.3841 | 3.7307 | 14.3 | 7.02 +Other | | 0.2958 | | | 0.61 -Nlocal: 2779.00 ave 3444 max 2189 min -Histogram: 1 0 1 0 0 0 1 0 0 1 -Nghost: 1160.25 ave 1335 max 985 min -Histogram: 1 0 1 0 0 0 0 1 0 1 -Neighs: 10709.5 ave 13715 max 8243 min +Nlocal: 2779.00 ave 4159 max 1635 min Histogram: 2 0 0 0 0 0 0 1 0 1 +Nghost: 1002.00 ave 1229 max 800 min +Histogram: 1 1 0 0 0 0 0 1 0 1 +Neighs: 11431.8 ave 18381 max 6059 min +Histogram: 2 0 0 0 0 0 1 0 0 1 -Total # of neighbors = 42838 -Ave neighs/atom = 3.8537244 -Ave special neighs/atom = 9.2786974 -Neighbor list builds = 402 +Total # of neighbors = 45727 +Ave neighs/atom = 4.1136200 +Ave special neighs/atom = 10.166967 +Neighbor list builds = 637 Dangerous builds = 0 - -Total wall time: 0:00:26 +Total wall time: 0:00:48 diff --git a/src/BPM/bond_bpm.cpp b/src/BPM/bond_bpm.cpp index 7a0d4fedd6..a6e5d4583c 100644 --- a/src/BPM/bond_bpm.cpp +++ b/src/BPM/bond_bpm.cpp @@ -1,349 +1,346 @@ -// clang-format off -/* ---------------------------------------------------------------------- - 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 "bond_bpm.h" - -#include "atom.h" -#include "domain.h" -#include "error.h" -#include "fix_store_local.h" -#include "fix_update_special_bonds.h" -#include "force.h" -#include "memory.h" -#include "modify.h" -#include "update.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -BondBPM::BondBPM(LAMMPS *lmp) : Bond(lmp) -{ - id_fix_store_local = nullptr; - id_fix_prop_atom = nullptr; - fix_store_local = nullptr; - fix_update_special_bonds = nullptr; - - prop_atom_flag = 0; - nvalues = 0; - output_data = nullptr; - pack_choice = nullptr; - - r0_max_estimate = 0.0; - max_stretch = 1.0; -} - -/* ---------------------------------------------------------------------- */ - -BondBPM::~BondBPM() -{ - delete [] pack_choice; - delete [] id_fix_store_local; - delete [] id_fix_prop_atom; - memory->destroy(output_data); -} - -/* ---------------------------------------------------------------------- */ - -void BondBPM::init_style() -{ - int ifix; - if (id_fix_store_local) { - ifix = modify->find_fix(id_fix_store_local); - if (ifix < 0) error->all(FLERR, "Cannot find fix store/local"); - if (strcmp(modify->fix[ifix]->style, "store/local") != 0) - error->all(FLERR, "Incorrect fix style matched, not store/local"); - fix_store_local = (FixStoreLocal *) modify->fix[ifix]; - fix_store_local->nvalues = nvalues; - } - - ifix = modify->find_fix_by_style("update/special/bonds"); - if (ifix >= 0) - fix_update_special_bonds = (FixUpdateSpecialBonds *) modify->fix[ifix]; - else - fix_update_special_bonds = nullptr; - - - if (force->angle || force->dihedral || force->improper) - error->all(FLERR, - "Bond style bpm cannot be used with 3,4-body interactions"); - if (atom->molecular == 2) - error->all(FLERR, - "Bond style bpm cannot be used with atom style template"); - - // special 1-3 and 1-4 weights must be 1 to prevent building 1-3 and 1-4 special bond lists - if (force->special_lj[2] != 1.0 || force->special_lj[3] != 1.0 || - force->special_coul[2] != 1.0 || force->special_coul[3] != 1.0) - error->all(FLERR,"Bond style bpm requires 1-3 and 1-4 special weights of 1.0"); -} - -/* ---------------------------------------------------------------------- - global settings - All args before store/local command are saved for potential args - for specific bond BPM substyles - All args after optional store/local command are variables stored - in the compute store/local -------------------------------------------------------------------------- */ - -void BondBPM::settings(int narg, char **arg) -{ - int iarg = 0; - while (iarg < narg) { - if (id_fix_store_local) { - if (strcmp(arg[iarg], "id1") == 0) { - pack_choice[nvalues++] = &BondBPM::pack_id1; - } else if (strcmp(arg[iarg], "id2") == 0) { - pack_choice[nvalues++] = &BondBPM::pack_id2; - } else if (strcmp(arg[iarg], "time") == 0) { - pack_choice[nvalues++] = &BondBPM::pack_time; - } else if (strcmp(arg[iarg], "x") == 0) { - pack_choice[nvalues++] = &BondBPM::pack_x; - } else if (strcmp(arg[iarg], "y") == 0) { - pack_choice[nvalues++] = &BondBPM::pack_y; - } else if (strcmp(arg[iarg], "z") == 0) { - pack_choice[nvalues++] = &BondBPM::pack_z; - } else if (strcmp(arg[iarg], "x/ref") == 0) { - pack_choice[nvalues++] = &BondBPM::pack_x_ref; - prop_atom_flag = 1; - } else if (strcmp(arg[iarg], "y/ref") == 0) { - pack_choice[nvalues++] = &BondBPM::pack_y_ref; - prop_atom_flag = 1; - } else if (strcmp(arg[iarg], "z/ref") == 0) { - pack_choice[nvalues++] = &BondBPM::pack_z_ref; - prop_atom_flag = 1; - } else { - error->all(FLERR, "Illegal bond_style command"); - } - } else if (strcmp(arg[iarg], "store/local") == 0) { - id_fix_store_local = utils::strdup(arg[iarg+1]); - iarg ++; - nvalues = 0; - pack_choice = new FnPtrPack[narg - iarg - 1]; - } - iarg ++; - } - - if (id_fix_store_local) { - if (nvalues == 0) error->all(FLERR, - "Bond style bpm/rotational must include at least one value to output"); - memory->create(output_data, nvalues, "bond/bpm:output_data"); - - // Use store property to save reference positions as it can transfer to ghost atoms - if (prop_atom_flag == 1) { - - id_fix_prop_atom = utils::strdup("BPM_PROPERTY_ATOM"); - int ifix = modify->find_fix(id_fix_prop_atom); - if (ifix < 0) { - modify->add_fix(fmt::format("{} all property/atom " - "d_BPM_X_REF d_BPM_Y_REF d_BPM_Z_REF ghost yes", id_fix_prop_atom)); - ifix = modify->find_fix(id_fix_prop_atom); - } - - int type_flag; - int col_flag; - index_x_ref = atom->find_custom("BPM_X_REF", type_flag, col_flag); - index_y_ref = atom->find_custom("BPM_Y_REF", type_flag, col_flag); - index_z_ref = atom->find_custom("BPM_Z_REF", type_flag, col_flag); - - if (modify->fix[ifix]->restart_reset) { - modify->fix[ifix]->restart_reset = 0; - } else { - double *x_ref = atom->dvector[index_x_ref]; - double *y_ref = atom->dvector[index_y_ref]; - double *z_ref = atom->dvector[index_z_ref]; - - double **x = atom->x; - for (int i = 0; i < atom->nlocal; i++) { - x_ref[i] = x[i][0]; - y_ref[i] = x[i][1]; - z_ref[i] = x[i][2]; - } - } - } - } -} - -/* ---------------------------------------------------------------------- - used to check bond communiction cutoff - not perfect, estimates based on local-local only -------------------------------------------------------------------------- */ - -double BondBPM::equilibrium_distance(int i) -{ - // Ghost atoms may not yet be communicated, this may only be an estimate - if (r0_max_estimate == 0) { - int type, j; - double delx, dely, delz, r; - double **x = atom->x; - for (int i = 0; i < atom->nlocal; i ++) { - for (int m = 0; m < atom->num_bond[i]; m ++) { - type = atom->bond_type[i][m]; - if (type == 0) continue; - - j = atom->map(atom->bond_atom[i][m]); - if(j == -1) continue; - - delx = x[i][0] - x[j][0]; - dely = x[i][1] - x[j][1]; - delz = x[i][2] - x[j][2]; - domain->minimum_image(delx, dely, delz); - - r = sqrt(delx*delx + dely*dely + delz*delz); - if(r > r0_max_estimate) r0_max_estimate = r; - } - } - - double temp; - MPI_Allreduce(&r0_max_estimate,&temp,1,MPI_DOUBLE,MPI_MAX,world); - r0_max_estimate = temp; - - //if (comm->me == 0) - // utils::logmesg(lmp,fmt::format("Estimating longest bond = {}\n",r0_max_estimate)); - } - - // Divide out heuristic prefactor added in comm class - return max_stretch*r0_max_estimate/1.5; -} - -/* ---------------------------------------------------------------------- */ - -void BondBPM::process_broken(int i, int j) -{ - if (fix_store_local) { - for (int n = 0; n < nvalues; n++) - (this->*pack_choice[n])(n, i, j); - - fix_store_local->add_data(output_data, i, j); - } - - if (fix_update_special_bonds) - fix_update_special_bonds->add_broken_bond(i, j); - - // Manually search and remove from atom arrays - // need to remove in case special bonds arrays rebuilt - int m, n; - int nlocal = atom->nlocal; - - tagint *tag = atom->tag; - tagint **bond_atom = atom->bond_atom; - int **bond_type = atom->bond_type; - int *num_bond = atom->num_bond; - - if (i < nlocal) { - for (m = 0; m < num_bond[i]; m++) { - // if(tag[i] == 25 or tag[j] == 25) printf("\t 1 ATOM LOOP %d-%d, %d/%d \n", tag[i], bond_atom[i][m], m, num_bond[i]); - if (bond_atom[i][m] == tag[j]) { - // if(tag[i] == 25 or tag[j] == 25) printf("\t DELETED\n"); - bond_type[i][m] = 0; - n = num_bond[i]; - bond_type[i][m] = bond_type[i][n-1]; - bond_atom[i][m] = bond_atom[i][n-1]; - num_bond[i]--; - break; - } - } - } - - if (j < nlocal) { - for (m = 0; m < num_bond[j]; m++) { - // if(tag[i] == 25 or tag[j] == 25) printf("\t 2 ATOM LOOP %d-%d, %d/%d \n", tag[j], bond_atom[j][m], m, num_bond[j]); - if (bond_atom[j][m] == tag[i]) { - // if(tag[j] == 25 or tag[j] == 25) printf("\t DELETED\n"); - bond_type[j][m] = 0; - n = num_bond[j]; - bond_type[j][m] = bond_type[j][n-1]; - bond_atom[j][m] = bond_atom[j][n-1]; - num_bond[j]--; - break; - } - } - } - - // if((tag[i] == 10 and tag[j] == 23)or (tag[i] == 23 and tag[j] == 10)) printf("Broken bond %d-%d (%d %d/%d)\n", tag[i], tag[j], i, j, nlocal); - -} - -/* ---------------------------------------------------------------------- - one method for every keyword bond bpm can output - the atom property is packed into array or vector -------------------------------------------------------------------------- */ - -void BondBPM::pack_id1(int n, int i, int j) -{ - tagint *tag = atom->tag; - output_data[n] = tag[i]; -} - -/* ---------------------------------------------------------------------- */ - -void BondBPM::pack_id2(int n, int i, int j) -{ - tagint *tag = atom->tag; - output_data[n] = tag[j]; -} - -/* ---------------------------------------------------------------------- */ - -void BondBPM::pack_time(int n, int i, int j) -{ - bigint time = update->ntimestep; - output_data[n] = time; -} - -/* ---------------------------------------------------------------------- */ - -void BondBPM::pack_x(int n, int i, int j) -{ - double **x = atom->x; - output_data[n] = (x[i][0] + x[j][0])*0.5; -} - -/* ---------------------------------------------------------------------- */ - -void BondBPM::pack_y(int n, int i, int j) -{ - double **x = atom->x; - output_data[n] = (x[i][1] + x[j][1])*0.5; -} - -/* ---------------------------------------------------------------------- */ - -void BondBPM::pack_z(int n, int i, int j) -{ - double **x = atom->x; - output_data[n] = (x[i][2] + x[j][2])*0.5; -} - -/* ---------------------------------------------------------------------- */ - -void BondBPM::pack_x_ref(int n, int i, int j) -{ - double *x = atom->dvector[index_x_ref]; - output_data[n] = (x[i] + x[j])*0.5; -} - -/* ---------------------------------------------------------------------- */ - -void BondBPM::pack_y_ref(int n, int i, int j) -{ - double *y = atom->dvector[index_y_ref]; - output_data[n] = (y[i] + y[j])*0.5; -} - -/* ---------------------------------------------------------------------- */ - -void BondBPM::pack_z_ref(int n, int i, int j) -{ - double *z = atom->dvector[index_z_ref]; - output_data[n] = (z[i] + z[j])*0.5; -} +// clang-format off +/* ---------------------------------------------------------------------- + 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 "bond_bpm.h" + +#include "atom.h" +#include "domain.h" +#include "error.h" +#include "fix_bond_history.h" +#include "fix_store_local.h" +#include "fix_update_special_bonds.h" +#include "force.h" +#include "memory.h" +#include "modify.h" +#include "update.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +BondBPM::BondBPM(LAMMPS *lmp) : Bond(lmp) +{ + id_fix_store_local = nullptr; + id_fix_prop_atom = nullptr; + fix_store_local = nullptr; + fix_update_special_bonds = nullptr; + fix_bond_history = nullptr; + + prop_atom_flag = 0; + nvalues = 0; + output_data = nullptr; + pack_choice = nullptr; + + r0_max_estimate = 0.0; + max_stretch = 1.0; +} + +/* ---------------------------------------------------------------------- */ + +BondBPM::~BondBPM() +{ + delete [] pack_choice; + delete [] id_fix_store_local; + delete [] id_fix_prop_atom; + memory->destroy(output_data); +} + +/* ---------------------------------------------------------------------- */ + +void BondBPM::init_style() +{ + int ifix; + if (id_fix_store_local) { + ifix = modify->find_fix(id_fix_store_local); + if (ifix < 0) error->all(FLERR, "Cannot find fix store/local"); + if (strcmp(modify->fix[ifix]->style, "store/local") != 0) + error->all(FLERR, "Incorrect fix style matched, not store/local"); + fix_store_local = (FixStoreLocal *) modify->fix[ifix]; + fix_store_local->nvalues = nvalues; + } + + ifix = modify->find_fix_by_style("update/special/bonds"); + if (ifix >= 0) + fix_update_special_bonds = (FixUpdateSpecialBonds *) modify->fix[ifix]; + else + fix_update_special_bonds = nullptr; + + + if (force->angle || force->dihedral || force->improper) + error->all(FLERR, + "Bond style bpm cannot be used with 3,4-body interactions"); + if (atom->molecular == 2) + error->all(FLERR, + "Bond style bpm cannot be used with atom style template"); + + // special 1-3 and 1-4 weights must be 1 to prevent building 1-3 and 1-4 special bond lists + if (force->special_lj[2] != 1.0 || force->special_lj[3] != 1.0 || + force->special_coul[2] != 1.0 || force->special_coul[3] != 1.0) + error->all(FLERR,"Bond style bpm requires 1-3 and 1-4 special weights of 1.0"); +} + +/* ---------------------------------------------------------------------- + global settings + All args before store/local command are saved for potential args + for specific bond BPM substyles + All args after optional store/local command are variables stored + in the compute store/local +------------------------------------------------------------------------- */ + +void BondBPM::settings(int narg, char **arg) +{ + int iarg = 0; + while (iarg < narg) { + if (id_fix_store_local) { + if (strcmp(arg[iarg], "id1") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_id1; + } else if (strcmp(arg[iarg], "id2") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_id2; + } else if (strcmp(arg[iarg], "time") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_time; + } else if (strcmp(arg[iarg], "x") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_x; + } else if (strcmp(arg[iarg], "y") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_y; + } else if (strcmp(arg[iarg], "z") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_z; + } else if (strcmp(arg[iarg], "x/ref") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_x_ref; + prop_atom_flag = 1; + } else if (strcmp(arg[iarg], "y/ref") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_y_ref; + prop_atom_flag = 1; + } else if (strcmp(arg[iarg], "z/ref") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_z_ref; + prop_atom_flag = 1; + } else { + error->all(FLERR, "Illegal bond_style command"); + } + } else if (strcmp(arg[iarg], "store/local") == 0) { + id_fix_store_local = utils::strdup(arg[iarg+1]); + iarg ++; + nvalues = 0; + pack_choice = new FnPtrPack[narg - iarg - 1]; + } + iarg ++; + } + + if (id_fix_store_local) { + if (nvalues == 0) error->all(FLERR, + "Bond style bpm/rotational must include at least one value to output"); + memory->create(output_data, nvalues, "bond/bpm:output_data"); + + // Use store property to save reference positions as it can transfer to ghost atoms + if (prop_atom_flag == 1) { + + id_fix_prop_atom = utils::strdup("BPM_PROPERTY_ATOM"); + int ifix = modify->find_fix(id_fix_prop_atom); + if (ifix < 0) { + modify->add_fix(fmt::format("{} all property/atom " + "d_BPM_X_REF d_BPM_Y_REF d_BPM_Z_REF ghost yes", id_fix_prop_atom)); + ifix = modify->find_fix(id_fix_prop_atom); + } + + int type_flag; + int col_flag; + index_x_ref = atom->find_custom("BPM_X_REF", type_flag, col_flag); + index_y_ref = atom->find_custom("BPM_Y_REF", type_flag, col_flag); + index_z_ref = atom->find_custom("BPM_Z_REF", type_flag, col_flag); + + if (modify->fix[ifix]->restart_reset) { + modify->fix[ifix]->restart_reset = 0; + } else { + double *x_ref = atom->dvector[index_x_ref]; + double *y_ref = atom->dvector[index_y_ref]; + double *z_ref = atom->dvector[index_z_ref]; + + double **x = atom->x; + for (int i = 0; i < atom->nlocal; i++) { + x_ref[i] = x[i][0]; + y_ref[i] = x[i][1]; + z_ref[i] = x[i][2]; + } + } + } + } +} + +/* ---------------------------------------------------------------------- + used to check bond communiction cutoff - not perfect, estimates based on local-local only +------------------------------------------------------------------------- */ + +double BondBPM::equilibrium_distance(int i) +{ + // Ghost atoms may not yet be communicated, this may only be an estimate + if (r0_max_estimate == 0) { + int type, j; + double delx, dely, delz, r; + double **x = atom->x; + for (int i = 0; i < atom->nlocal; i ++) { + for (int m = 0; m < atom->num_bond[i]; m ++) { + type = atom->bond_type[i][m]; + if (type == 0) continue; + + j = atom->map(atom->bond_atom[i][m]); + if(j == -1) continue; + + delx = x[i][0] - x[j][0]; + dely = x[i][1] - x[j][1]; + delz = x[i][2] - x[j][2]; + domain->minimum_image(delx, dely, delz); + + r = sqrt(delx*delx + dely*dely + delz*delz); + if(r > r0_max_estimate) r0_max_estimate = r; + } + } + + double temp; + MPI_Allreduce(&r0_max_estimate,&temp,1,MPI_DOUBLE,MPI_MAX,world); + r0_max_estimate = temp; + + //if (comm->me == 0) + // utils::logmesg(lmp,fmt::format("Estimating longest bond = {}\n",r0_max_estimate)); + } + + // Divide out heuristic prefactor added in comm class + return max_stretch*r0_max_estimate/1.5; +} + +/* ---------------------------------------------------------------------- */ + +void BondBPM::process_broken(int i, int j) +{ + if (fix_store_local) { + for (int n = 0; n < nvalues; n++) + (this->*pack_choice[n])(n, i, j); + + fix_store_local->add_data(output_data, i, j); + } + + if (fix_update_special_bonds) + fix_update_special_bonds->add_broken_bond(i, j); + + // Manually search and remove from atom arrays + // need to remove in case special bonds arrays rebuilt + int m, n; + int nlocal = atom->nlocal; + + tagint *tag = atom->tag; + tagint **bond_atom = atom->bond_atom; + int **bond_type = atom->bond_type; + int *num_bond = atom->num_bond; + + if (i < nlocal) { + for (m = 0; m < num_bond[i]; m++) { + if (bond_atom[i][m] == tag[j]) { + bond_type[i][m] = 0; + n = num_bond[i]; + bond_type[i][m] = bond_type[i][n-1]; + bond_atom[i][m] = bond_atom[i][n-1]; + fix_bond_history->delete_bond(i, m); + num_bond[i]--; + break; + } + } + } + + if (j < nlocal) { + for (m = 0; m < num_bond[j]; m++) { + if (bond_atom[j][m] == tag[i]) { + bond_type[j][m] = 0; + n = num_bond[j]; + bond_type[j][m] = bond_type[j][n-1]; + bond_atom[j][m] = bond_atom[j][n-1]; + fix_bond_history->delete_bond(j, m); + num_bond[j]--; + break; + } + } + } +} + +/* ---------------------------------------------------------------------- + one method for every keyword bond bpm can output + the atom property is packed into array or vector +------------------------------------------------------------------------- */ + +void BondBPM::pack_id1(int n, int i, int j) +{ + tagint *tag = atom->tag; + output_data[n] = tag[i]; +} + +/* ---------------------------------------------------------------------- */ + +void BondBPM::pack_id2(int n, int i, int j) +{ + tagint *tag = atom->tag; + output_data[n] = tag[j]; +} + +/* ---------------------------------------------------------------------- */ + +void BondBPM::pack_time(int n, int i, int j) +{ + bigint time = update->ntimestep; + output_data[n] = time; +} + +/* ---------------------------------------------------------------------- */ + +void BondBPM::pack_x(int n, int i, int j) +{ + double **x = atom->x; + output_data[n] = (x[i][0] + x[j][0])*0.5; +} + +/* ---------------------------------------------------------------------- */ + +void BondBPM::pack_y(int n, int i, int j) +{ + double **x = atom->x; + output_data[n] = (x[i][1] + x[j][1])*0.5; +} + +/* ---------------------------------------------------------------------- */ + +void BondBPM::pack_z(int n, int i, int j) +{ + double **x = atom->x; + output_data[n] = (x[i][2] + x[j][2])*0.5; +} + +/* ---------------------------------------------------------------------- */ + +void BondBPM::pack_x_ref(int n, int i, int j) +{ + double *x = atom->dvector[index_x_ref]; + output_data[n] = (x[i] + x[j])*0.5; +} + +/* ---------------------------------------------------------------------- */ + +void BondBPM::pack_y_ref(int n, int i, int j) +{ + double *y = atom->dvector[index_y_ref]; + output_data[n] = (y[i] + y[j])*0.5; +} + +/* ---------------------------------------------------------------------- */ + +void BondBPM::pack_z_ref(int n, int i, int j) +{ + double *z = atom->dvector[index_z_ref]; + output_data[n] = (z[i] + z[j])*0.5; +} diff --git a/src/BPM/bond_bpm.h b/src/BPM/bond_bpm.h index d77e44e1d6..53a202802d 100644 --- a/src/BPM/bond_bpm.h +++ b/src/BPM/bond_bpm.h @@ -1,90 +1,91 @@ -/* -*- 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. -------------------------------------------------------------------------- */ - -#ifndef LMP_BOND_BPM_H -#define LMP_BOND_BPM_H - -#include "bond.h" - -namespace LAMMPS_NS { - -class BondBPM : public Bond { - public: - BondBPM(class LAMMPS *); - virtual ~BondBPM(); - virtual void compute(int, int) = 0; - virtual void coeff(int, char **) = 0; - virtual void init_style(); - void settings(int, char **); - double equilibrium_distance(int); - void write_restart(FILE *){}; - void read_restart(FILE *){}; - void write_data(FILE *) {}; - double single(int, double, int, int, double &) = 0; - - protected: - double r0_max_estimate; - double max_stretch; - - char *id_fix_store_local, *id_fix_prop_atom; - class FixStoreLocal *fix_store_local; - class FixUpdateSpecialBonds *fix_update_special_bonds; - - void process_broken(int, int); - typedef void (BondBPM::*FnPtrPack)(int,int,int); - FnPtrPack *pack_choice; // ptrs to pack functions - double *output_data; - - int prop_atom_flag, nvalues; - int index_x_ref, index_y_ref, index_z_ref; - - void pack_id1(int,int,int); - void pack_id2(int,int,int); - void pack_time(int,int,int); - void pack_x(int,int,int); - void pack_y(int,int,int); - void pack_z(int,int,int); - void pack_x_ref(int,int,int); - void pack_y_ref(int,int,int); - void pack_z_ref(int,int,int); -}; - -} // namespace LAMMPS_NS - -#endif - -/* ERROR/WARNING messages: - -E: Cannot find fix store/local - -Fix id cannot be found. - -E: Illegal bond_style command - -Self-explanatory. - -E: Bond style bpm/rotational must include at least one value to output - -Must include at least one bond property to store in fix store/local - -E: Bond style bpm/rotational cannot be used with 3,4-body interactions - -No angle, dihedral, or improper styles can be defined when using -bond style bpm/rotational. - -E: Bond style bpm/rotational cannot be used with atom style template - -This bond style can change the bond topology which is not -allowed with this atom style. - -*/ +/* -*- 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. +------------------------------------------------------------------------- */ + +#ifndef LMP_BOND_BPM_H +#define LMP_BOND_BPM_H + +#include "bond.h" + +namespace LAMMPS_NS { + +class BondBPM : public Bond { + public: + BondBPM(class LAMMPS *); + virtual ~BondBPM(); + virtual void compute(int, int) = 0; + virtual void coeff(int, char **) = 0; + virtual void init_style(); + void settings(int, char **); + double equilibrium_distance(int); + void write_restart(FILE *){}; + void read_restart(FILE *){}; + void write_data(FILE *) {}; + double single(int, double, int, int, double &) = 0; + + protected: + double r0_max_estimate; + double max_stretch; + + char *id_fix_store_local, *id_fix_prop_atom; + class FixStoreLocal *fix_store_local; + class FixUpdateSpecialBonds *fix_update_special_bonds; + class FixBondHistory *fix_bond_history; + + void process_broken(int, int); + typedef void (BondBPM::*FnPtrPack)(int,int,int); + FnPtrPack *pack_choice; // ptrs to pack functions + double *output_data; + + int prop_atom_flag, nvalues; + int index_x_ref, index_y_ref, index_z_ref; + + void pack_id1(int,int,int); + void pack_id2(int,int,int); + void pack_time(int,int,int); + void pack_x(int,int,int); + void pack_y(int,int,int); + void pack_z(int,int,int); + void pack_x_ref(int,int,int); + void pack_y_ref(int,int,int); + void pack_z_ref(int,int,int); +}; + +} // namespace LAMMPS_NS + +#endif + +/* ERROR/WARNING messages: + +E: Cannot find fix store/local + +Fix id cannot be found. + +E: Illegal bond_style command + +Self-explanatory. + +E: Bond style bpm/rotational must include at least one value to output + +Must include at least one bond property to store in fix store/local + +E: Bond style bpm/rotational cannot be used with 3,4-body interactions + +No angle, dihedral, or improper styles can be defined when using +bond style bpm/rotational. + +E: Bond style bpm/rotational cannot be used with atom style template + +This bond style can change the bond topology which is not +allowed with this atom style. + +*/ diff --git a/src/BPM/bond_bpm_rotational.cpp b/src/BPM/bond_bpm_rotational.cpp index 4268655ca1..adc4f596c5 100644 --- a/src/BPM/bond_bpm_rotational.cpp +++ b/src/BPM/bond_bpm_rotational.cpp @@ -1,721 +1,715 @@ -// clang-format off -/* ---------------------------------------------------------------------- - 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 "bond_bpm_rotational.h" - -#include "atom.h" -#include "comm.h" -#include "domain.h" -#include "error.h" -#include "fix_bond_history.h" -#include "force.h" -#include "math_const.h" -#include "math_extra.h" -#include "memory.h" -#include "modify.h" -#include "neighbor.h" -#include "pair.h" - -#include -#include -#include - -#define EPSILON 1e-10 - -using namespace LAMMPS_NS; -using namespace MathExtra; - -/* ---------------------------------------------------------------------- */ - -BondBPMRotational::BondBPMRotational(LAMMPS *lmp) : BondBPM(lmp) -{ - partial_flag = 1; - fix_bond_history = nullptr; -} - -/* ---------------------------------------------------------------------- */ - -BondBPMRotational::~BondBPMRotational() -{ - if(fix_bond_history) modify->delete_fix("BOND_HISTORY_BPM_ROTATIONAL"); - - if (allocated) { - memory->destroy(setflag); - memory->destroy(Kr); - memory->destroy(Ks); - memory->destroy(Kt); - memory->destroy(Kb); - memory->destroy(Fcr); - memory->destroy(Fcs); - memory->destroy(Tct); - memory->destroy(Tcb); - memory->destroy(gnorm); - memory->destroy(gslide); - memory->destroy(groll); - memory->destroy(gtwist); - } -} - -/* ---------------------------------------------------------------------- */ - -double BondBPMRotational::acos_limit(double c) -{ - if (c > 1.0) c = 1.0; - if (c < -1.0) c = -1.0; - return acos(c); -} - -/* ---------------------------------------------------------------------- - Store data for a single bond - if bond added after LAMMPS init (e.g. pour) -------------------------------------------------------------------------- */ - -double BondBPMRotational::store_bond(int n,int i,int j) -{ - int m,k; - double delx, dely, delz, r, rinv; - double **x = atom->x; - tagint *tag = atom->tag; - double **bondstore = fix_bond_history->bondstore; - - if (tag[i] < tag[j]) { - delx = x[i][0] - x[j][0]; - dely = x[i][1] - x[j][1]; - delz = x[i][2] - x[j][2]; - } else { - delx = x[j][0] - x[i][0]; - dely = x[j][1] - x[i][1]; - delz = x[j][2] - x[i][2]; - } - - r = sqrt(delx*delx + dely*dely + delz*delz); - rinv = 1.0/r; - - bondstore[n][0] = r; - bondstore[n][1] = delx*rinv; - bondstore[n][2] = dely*rinv; - bondstore[n][3] = delz*rinv; - - if (i < atom->nlocal) { - for (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, delx*rinv); - fix_bond_history->update_atom_value(i, m, 2, dely*rinv); - fix_bond_history->update_atom_value(i, m, 3, delz*rinv); - } - } - } - - if (j < atom->nlocal) { - for (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, delx*rinv); - fix_bond_history->update_atom_value(j, m, 2, dely*rinv); - fix_bond_history->update_atom_value(j, m, 3, delz*rinv); - } - } - } - - return r; -} - -/* ---------------------------------------------------------------------- - Store data for all bonds called once -------------------------------------------------------------------------- */ - -void BondBPMRotational::store_data() -{ - int i, j, m, type; - double delx, dely, delz, r, rinv; - double **x = atom->x; - int **bond_type = atom->bond_type; - tagint *tag = atom->tag; - - 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 for tag - j = atom->map(atom->bond_atom[i][m]); - if(j == -1) error->one(FLERR, "Atom missing in BPM bond"); - - // Save orientation as pointing towards small tag - if(tag[i] < tag[j]){ - delx = x[i][0] - x[j][0]; - dely = x[i][1] - x[j][1]; - delz = x[i][2] - x[j][2]; - } else { - delx = x[j][0] - x[i][0]; - dely = x[j][1] - x[i][1]; - delz = x[j][2] - x[i][2]; - } - - // Get closest image in case bonded with ghost - domain->minimum_image(delx, dely, delz); - - r = sqrt(delx*delx + dely*dely + delz*delz); - rinv = 1.0/r; - fix_bond_history->update_atom_value(i, m, 0, r); - fix_bond_history->update_atom_value(i, m, 1, delx*rinv); - fix_bond_history->update_atom_value(i, m, 2, dely*rinv); - fix_bond_history->update_atom_value(i, m, 3, delz*rinv); - } - } - - fix_bond_history->post_neighbor(); -} - -/* ---------------------------------------------------------------------- */ - -void BondBPMRotational::compute(int eflag, int vflag) -{ - - if (! fix_bond_history->stored_flag) { - fix_bond_history->stored_flag = true; - store_data(); - } - - int i1,i2,itmp,m,n,type,itype,jtype; - double evdwl,fpair,rsq,ebond; - double q1[4], q2[4], r[3], r0[3]; - double r0_mag, r_mag, r_mag_inv, Fr, Fs_mag; - double Tt_mag, Tb_mag; - double force1on2[3], torque1on2[3], torque2on1[3]; - double breaking, smooth; - double rhat[3], wn1[3], wn2[3], wxn1[3], wxn2[3], vroll[3]; - double w1dotr, w2dotr, v1dotr, v2dotr; - double vn1[3], vn2[3], vt1[3], vt2[3], tmp[3], s1[3], s2[3], tdamp[3]; - double tor1, tor2, tor3, fs1, fs2, fs3; - - double q2inv[4], rb[3], rb_x_r0[3], s[3], t[3], Fs[3]; - double q21[4], qp21[4], Tbp[3], Ttp[3]; - double Tsp[3], Fsp[3], Tt[3], Tb[3], Ts[3], F_rot[3], T_rot[3]; - double mq[4], mqinv[4], Ttmp[3], Ftmp[3], qtmp[4]; - double r0_dot_rb, gamma, c, psi, theta, sin_phi, cos_phi, temp; - double mag_in_plane, mag_out_plane; - - ev_init(eflag,vflag); - - if (vflag_global == 2) - force->pair->vflag_either = force->pair->vflag_global = 1; - - double **cutsq = force->pair->cutsq; - double **x = atom->x; - double **v = atom->v; - double **omega = atom->omega; - double **f = atom->f; - double **torque = atom->torque; - double *radius = atom->radius; - double **quat = atom->quat; - 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_mag = bondstore[n][0]; - - // Ensure pair is always ordered such that r0 points in - // a consistent direction and 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_mag < EPSILON || std::isnan(r0_mag)) - r0_mag = store_bond(n,i1,i2); - - r0[0] = bondstore[n][1]; - r0[1] = bondstore[n][2]; - r0[2] = bondstore[n][3]; - MathExtra::scale3(r0_mag, r0); - - q1[0] = quat[i1][0]; - q1[1] = quat[i1][1]; - q1[2] = quat[i1][2]; - q1[3] = quat[i1][3]; - - q2[0] = quat[i2][0]; - q2[1] = quat[i2][1]; - q2[2] = quat[i2][2]; - q2[3] = quat[i2][3]; - - // Note this is the reverse of Mora & Wang - MathExtra::sub3(x[i1], x[i2], r); - - rsq = MathExtra::lensq3(r); - r_mag = sqrt(rsq); - r_mag_inv = 1.0/r_mag; - MathExtra::scale3(r_mag_inv, r, rhat); - - // ------------------------------------------------------// - // Calculate forces using formulation in: - // 1) Y. Wang Acta Geotechnica 2009 - // 2) P. Mora & Y. Wang Advances in Geomcomputing 2009 - // ------------------------------------------------------// - - // Calculate normal forces, rb = bond vector in particle 1's frame - MathExtra::qconjugate(q2, q2inv); - MathExtra::quatrotvec(q2inv, r, rb); - Fr = Kr[type]*(r_mag - r0_mag); - - MathExtra::scale3(Fr*r_mag_inv, rb, F_rot); - - // Calculate forces due to tangential displacements (no rotation) - r0_dot_rb = dot3(r0, rb); - c = r0_dot_rb*r_mag_inv/r0_mag; - gamma = acos_limit(c); - - MathExtra::cross3(rb, r0, rb_x_r0); - MathExtra::cross3(rb, rb_x_r0, s); - MathExtra::norm3(s); - - MathExtra::scale3(Ks[type]*r_mag*gamma, s, Fs); - - // Calculate torque due to tangential displacements - MathExtra::cross3(r0, rb, t); - MathExtra::norm3(t); - - MathExtra::scale3(0.5*r_mag*Ks[type]*r_mag*gamma, t, Ts); - - // Relative rotation force/torque - // Use representation of X'Y'Z' rotations from Wang, Mora 2009 - temp = r_mag + rb[2]; - if (temp < 0.0) temp = 0.0; - mq[0] = sqrt(2)*0.5*sqrt(temp*r_mag_inv); - - temp = sqrt(rb[0]*rb[0]+rb[1]*rb[1]); - if (temp != 0.0) { - mq[1] = -sqrt(2)*0.5/temp; - temp = r_mag - rb[2]; - if (temp < 0.0) temp = 0.0; - mq[1] *= sqrt(temp*r_mag_inv); - mq[2] = -mq[1]; - mq[1] *= rb[1]; - mq[2] *= rb[0]; - } else { - // If aligned along z axis, x,y terms zero (r_mag-rb[2] = 0) - mq[1] = 0.0; - mq[2] = 0.0; - } - mq[3] = 0.0; - - // qp21 = opposite of r^\circ_21 in Wang - // q21 = opposite of r_21 in Wang - MathExtra::quatquat(q2inv, q1, qp21); - MathExtra::qconjugate(mq, mqinv); - MathExtra::quatquat(mqinv,qp21,qtmp); - MathExtra::quatquat(qtmp,mq,q21); - - temp = sqrt(q21[0]*q21[0] + q21[3]*q21[3]); - if (temp != 0.0) { - c = q21[0]/temp; - psi = 2.0*acos_limit(c); - } else { - c = 0.0; - psi = 0.0; - } - - // Map negative rotations - if (q21[3] < 0.0) // sin = q21[3]/temp - psi = -psi; - - if (q21[3] == 0.0) - psi = 0.0; - - c = q21[0]*q21[0] - q21[1]*q21[1] - q21[2]*q21[2] + q21[3]*q21[3]; - theta = acos_limit(c); - - // Separately calculte magnitude of quaternion in x-y and out of x-y planes - // to avoid dividing by zero - mag_out_plane = (q21[0]*q21[0] + q21[3]*q21[3]); - mag_in_plane = (q21[1]*q21[1] + q21[2]*q21[2]); - - if (mag_in_plane == 0.0) { - // No rotation => no bending/shear torque or extra shear force - // achieve by setting cos/sin = 0 - cos_phi = 0.0; - sin_phi = 0.0; - } else if (mag_out_plane == 0.0) { - // Calculate angle in plane - cos_phi = q21[2]/sqrt(mag_in_plane); - sin_phi = -q21[1]/sqrt(mag_in_plane); - } else { - // Default equations in Mora, Wang 2009 - cos_phi = q21[1]*q21[3] + q21[0]*q21[2]; - sin_phi = q21[2]*q21[3] - q21[0]*q21[1]; - - cos_phi /= sqrt(mag_out_plane*mag_in_plane); - sin_phi /= sqrt(mag_out_plane*mag_in_plane); - } - - Tbp[0] = -Kb[type]*theta*sin_phi; - Tbp[1] = Kb[type]*theta*cos_phi; - Tbp[2] = 0.0; - - Ttp[0] = 0.0; - Ttp[1] = 0.0; - Ttp[2] = Kt[type]*psi; - - Fsp[0] = -0.5*Ks[type]*r_mag*theta*cos_phi; - Fsp[1] = -0.5*Ks[type]*r_mag*theta*sin_phi; - Fsp[2] = 0.0; - - Tsp[0] = 0.25*Ks[type]*r_mag*r_mag*theta*sin_phi; - Tsp[1] = -0.25*Ks[type]*r_mag*r_mag*theta*cos_phi; - Tsp[2] = 0.0; - - // Rotate forces/torques back to 1st particle's frame - - MathExtra::quatrotvec(mq, Fsp, Ftmp); - MathExtra::quatrotvec(mq, Tsp, Ttmp); - for (m = 0; m < 3; m++) { - Fs[m] += Ftmp[m]; - Ts[m] += Ttmp[m]; - } - - MathExtra::quatrotvec(mq, Tbp, Tb); - MathExtra::quatrotvec(mq, Ttp, Tt); - - // Sum forces and calculate magnitudes - F_rot[0] += Fs[0]; - F_rot[1] += Fs[1]; - F_rot[2] += Fs[2]; - MathExtra::quatrotvec(q2, F_rot, force1on2); - - T_rot[0] = Ts[0] + Tt[0] + Tb[0]; - T_rot[1] = Ts[1] + Tt[1] + Tb[1]; - T_rot[2] = Ts[2] + Tt[2] + Tb[2]; - MathExtra::quatrotvec(q2, T_rot, torque1on2); - - T_rot[0] = Ts[0] - Tt[0] - Tb[0]; - T_rot[1] = Ts[1] - Tt[1] - Tb[1]; - T_rot[2] = Ts[2] - Tt[2] - Tb[2]; - MathExtra::quatrotvec(q2, T_rot, torque2on1); - - Fs_mag = MathExtra::len3(Fs); - Tt_mag = MathExtra::len3(Tt); - Tb_mag = MathExtra::len3(Tb); - - // ------------------------------------------------------// - // Check if bond breaks - // ------------------------------------------------------// - - breaking = Fs_mag/Fcs[type] + Tb_mag/Tcb[type] + Tt_mag/Tct[type]; - if (Fr > 0.0) breaking += Fr/Fcr[type]; - - if (breaking >= 1.0) { - bondlist[n][2] = 0; - process_broken(i1, i2); - continue; - } - - smooth = breaking*breaking; - smooth = 1.0 - smooth*smooth; - - // Not actual energy, just a handy metric - if (eflag) ebond = -smooth; - - // ------------------------------------------------------// - // Calculate damping using formulation in - // Y. Wang, F. Alonso-Marroquin, W. Guo 2015 - // ------------------------------------------------------// - // Note: n points towards 1 vs pointing towards 2 - - // Damp normal velocity difference - v1dotr = MathExtra::dot3(v[i1],rhat); - v2dotr = MathExtra::dot3(v[i2],rhat); - - MathExtra::scale3(v1dotr, rhat, vn1); - MathExtra::scale3(v2dotr, rhat, vn2); - - MathExtra::sub3(vn1, vn2, tmp); - MathExtra::scale3(gnorm[type], tmp); - MathExtra::add3(force1on2, tmp, force1on2); - - // Damp tangential objective velocities - MathExtra::sub3(v[i1], vn1, vt1); - MathExtra::sub3(v[i2], vn2, vt2); - - MathExtra::sub3(vt2, vt1, tmp); - MathExtra::scale3(-0.5, tmp); - - MathExtra::cross3(omega[i1], r, s1); - MathExtra::scale3(0.5, s1); - MathExtra::sub3(s1, tmp, s1); // Eq 12 - - MathExtra::cross3(omega[i2], r, s2); - MathExtra::scale3(-0.5,s2); - MathExtra::add3(s2, tmp, s2); // Eq 13 - MathExtra::scale3(-0.5,s2); - - MathExtra::sub3(s1, s2, tmp); - MathExtra::scale3(gslide[type], tmp); - MathExtra::add3(force1on2, tmp, force1on2); - - // Apply corresponding torque - MathExtra::cross3(r,tmp,tdamp); - MathExtra::scale3(-0.5, tdamp); // 0.5*r points from particle 2 to midpoint - MathExtra::add3(torque1on2, tdamp, torque1on2); - MathExtra::add3(torque2on1, tdamp, torque2on1); - - // Damp rolling - MathExtra::cross3(omega[i1], rhat, wxn1); - MathExtra::cross3(omega[i2], rhat, wxn2); - MathExtra::sub3(wxn1, wxn2, vroll); // Eq. 31 - MathExtra::cross3(r, vroll, tdamp); - - MathExtra::scale3(0.5*groll[type], tdamp); - MathExtra::add3(torque1on2, tdamp, torque1on2); - MathExtra::scale3(-1.0, tdamp); - MathExtra::add3(torque2on1, tdamp, torque2on1); - - // Damp twist - w1dotr = MathExtra::dot3(omega[i1],rhat); - w2dotr = MathExtra::dot3(omega[i2],rhat); - - MathExtra::scale3(w1dotr, rhat, wn1); - MathExtra::scale3(w2dotr, rhat, wn2); - - MathExtra::sub3(wn1, wn2, tdamp); // Eq. 38 - MathExtra::scale3(0.5*gtwist[type], tdamp); - MathExtra::add3(torque1on2, tdamp, torque1on2); - MathExtra::scale3(-1.0, tdamp); - MathExtra::add3(torque2on1, tdamp, torque2on1); - - // ------------------------------------------------------// - // Apply forces and torques to particles - // ------------------------------------------------------// - - if (newton_bond || i1 < nlocal) { - f[i1][0] -= force1on2[0]*smooth; - f[i1][1] -= force1on2[1]*smooth; - f[i1][2] -= force1on2[2]*smooth; - - torque[i1][0] += torque2on1[0]*smooth; - torque[i1][1] += torque2on1[1]*smooth; - torque[i1][2] += torque2on1[2]*smooth; - } - - if (newton_bond || i2 < nlocal) { - f[i2][0] += force1on2[0]*smooth; - f[i2][1] += force1on2[1]*smooth; - f[i2][2] += force1on2[2]*smooth; - - torque[i2][0] += torque1on2[0]*smooth; - torque[i2][1] += torque1on2[1]*smooth; - torque[i2][2] += torque1on2[2]*smooth; - } - - if (evflag) ev_tally(i1,i2,nlocal,newton_bond,ebond,Fr*smooth,r[0],r[1],r[2]); - } -} - -/* ---------------------------------------------------------------------- */ - -void BondBPMRotational::allocate() -{ - allocated = 1; - int n = atom->nbondtypes; - - memory->create(Kr,n+1,"bond:Kr"); - memory->create(Ks,n+1,"bond:Ks"); - memory->create(Kt,n+1,"bond:Kt"); - memory->create(Kb,n+1,"bond:Kb"); - memory->create(Fcr,n+1,"bond:Fcr"); - memory->create(Fcs,n+1,"bond:Fcs"); - memory->create(Tct,n+1,"bond:Tct"); - memory->create(Tcb,n+1,"bond:Tcb"); - memory->create(gnorm,n+1,"bond:gnorm"); - memory->create(gslide,n+1,"bond:gslide"); - memory->create(groll,n+1,"bond:groll"); - memory->create(gtwist,n+1,"bond:gtwist"); - - memory->create(setflag,n+1,"bond:setflag"); - for (int i = 1; i <= n; i++) setflag[i] = 0; -} - -/* ---------------------------------------------------------------------- - set coeffs for one or more types -------------------------------------------------------------------------- */ - -void BondBPMRotational::coeff(int narg, char **arg) -{ - if (narg != 13) 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 Kr_one = utils::numeric(FLERR,arg[1],false,lmp); - double Ks_one = utils::numeric(FLERR,arg[2],false,lmp); - double Kt_one = utils::numeric(FLERR,arg[3],false,lmp); - double Kb_one = utils::numeric(FLERR,arg[4],false,lmp); - double Fcr_one = utils::numeric(FLERR,arg[5],false,lmp); - double Fcs_one = utils::numeric(FLERR,arg[6],false,lmp); - double Tct_one = utils::numeric(FLERR,arg[7],false,lmp); - double Tcb_one = utils::numeric(FLERR,arg[8],false,lmp); - double gnorm_one = utils::numeric(FLERR,arg[9],false,lmp); - double gslide_one = utils::numeric(FLERR,arg[10],false,lmp); - double groll_one = utils::numeric(FLERR,arg[11],false,lmp); - double gtwist_one = utils::numeric(FLERR,arg[12],false,lmp); - - int count = 0; - for (int i = ilo; i <= ihi; i++) { - Kr[i] = Kr_one; - Ks[i] = Ks_one; - Kt[i] = Kt_one; - Kb[i] = Kb_one; - Fcr[i] = Fcr_one; - Fcs[i] = Fcs_one; - Tct[i] = Tct_one; - Tcb[i] = Tcb_one; - gnorm[i] = gnorm_one; - gslide[i] = gslide_one; - groll[i] = groll_one; - gtwist[i] = gtwist_one; - setflag[i] = 1; - count++; - - if (Fcr[i]/Kr[i] > max_stretch) max_stretch = Fcr[i]/Kr[i]; - } - - if (count == 0) error->all(FLERR,"Incorrect args for bond coefficients"); -} - -/* ---------------------------------------------------------------------- - check if pair defined and special_bond settings are valid -------------------------------------------------------------------------- */ - -void BondBPMRotational::init_style() -{ - BondBPM::init_style(); - - if (!atom->quat_flag || !atom->sphere_flag) - error->all(FLERR,"Bond bpm/rotational requires atom style sphere/bpm"); - if (comm->ghost_velocity == 0) - error->all(FLERR,"Bond bpm/rotational requires ghost atoms store velocity"); - - if(domain->dimension == 2) - error->warning(FLERR, "Bond style bpm/rotational not intended for 2d use"); - - if (!fix_bond_history) - fix_bond_history = (FixBondHistory *) modify->add_fix( - "BOND_HISTORY_BPM_ROTATIONAL all BOND_HISTORY 0 4"); -} - -/* ---------------------------------------------------------------------- - proc 0 writes out coeffs to restart file -------------------------------------------------------------------------- */ - -void BondBPMRotational::write_restart(FILE *fp) -{ - fwrite(&Kr[1],sizeof(double),atom->nbondtypes,fp); - fwrite(&Ks[1],sizeof(double),atom->nbondtypes,fp); - fwrite(&Kt[1],sizeof(double),atom->nbondtypes,fp); - fwrite(&Kb[1],sizeof(double),atom->nbondtypes,fp); - fwrite(&Fcr[1],sizeof(double),atom->nbondtypes,fp); - fwrite(&Fcs[1],sizeof(double),atom->nbondtypes,fp); - fwrite(&Tct[1],sizeof(double),atom->nbondtypes,fp); - fwrite(&Tcb[1],sizeof(double),atom->nbondtypes,fp); - fwrite(&gnorm[1],sizeof(double),atom->nbondtypes,fp); - fwrite(&gslide[1],sizeof(double),atom->nbondtypes,fp); - fwrite(&groll[1],sizeof(double),atom->nbondtypes,fp); - fwrite(>wist[1],sizeof(double),atom->nbondtypes,fp); -} - -/* ---------------------------------------------------------------------- - proc 0 reads coeffs from restart file, bcasts them -------------------------------------------------------------------------- */ - -void BondBPMRotational::read_restart(FILE *fp) -{ - allocate(); - - if (comm->me == 0) { - utils::sfread(FLERR,&Kr[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); - utils::sfread(FLERR,&Ks[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); - utils::sfread(FLERR,&Kt[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); - utils::sfread(FLERR,&Kb[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); - utils::sfread(FLERR,&Fcr[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); - utils::sfread(FLERR,&Fcs[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); - utils::sfread(FLERR,&Tct[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); - utils::sfread(FLERR,&Tcb[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); - utils::sfread(FLERR,&gnorm[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); - utils::sfread(FLERR,&gslide[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); - utils::sfread(FLERR,&groll[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); - utils::sfread(FLERR,>wist[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); - } - MPI_Bcast(&Kr[1],atom->nbondtypes,MPI_DOUBLE,0,world); - MPI_Bcast(&Ks[1],atom->nbondtypes,MPI_DOUBLE,0,world); - MPI_Bcast(&Kt[1],atom->nbondtypes,MPI_DOUBLE,0,world); - MPI_Bcast(&Kb[1],atom->nbondtypes,MPI_DOUBLE,0,world); - MPI_Bcast(&Fcr[1],atom->nbondtypes,MPI_DOUBLE,0,world); - MPI_Bcast(&Fcs[1],atom->nbondtypes,MPI_DOUBLE,0,world); - MPI_Bcast(&Tct[1],atom->nbondtypes,MPI_DOUBLE,0,world); - MPI_Bcast(&Tcb[1],atom->nbondtypes,MPI_DOUBLE,0,world); - MPI_Bcast(&gnorm[1],atom->nbondtypes,MPI_DOUBLE,0,world); - MPI_Bcast(&gslide[1],atom->nbondtypes,MPI_DOUBLE,0,world); - MPI_Bcast(&groll[1],atom->nbondtypes,MPI_DOUBLE,0,world); - MPI_Bcast(>wist[1],atom->nbondtypes,MPI_DOUBLE,0,world); - - for (int i = 1; i <= atom->nbondtypes; i++) setflag[i] = 1; -} - -/* ---------------------------------------------------------------------- - proc 0 writes to data file -------------------------------------------------------------------------- */ - -void BondBPMRotational::write_data(FILE *fp) -{ - for (int i = 1; i <= atom->nbondtypes; i++) - fprintf(fp,"%d %g %g %g %g %g %g %g %g %g %g %g %g\n", - i,Kr[i],Ks[i],Kt[i],Kb[i],Fcr[i], Fcs[i], Tct[i], - Tcb[i], gnorm[i], gslide[i], groll[i], gtwist[i]); -} - -/* ---------------------------------------------------------------------- */ - -double BondBPMRotational::single(int type, double rsq, int i, int j, - double &fforce) -{ - // Not yet enabled - if (type <= 0) return 0.0; - - //double r0; - //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); - // } - //} -} +// clang-format off +/* ---------------------------------------------------------------------- + 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 "bond_bpm_rotational.h" + +#include "atom.h" +#include "comm.h" +#include "domain.h" +#include "error.h" +#include "fix_bond_history.h" +#include "force.h" +#include "math_const.h" +#include "math_extra.h" +#include "memory.h" +#include "modify.h" +#include "neighbor.h" +#include "pair.h" + +#include +#include +#include + +#define EPSILON 1e-10 + +using namespace LAMMPS_NS; +using namespace MathExtra; + +/* ---------------------------------------------------------------------- */ + +BondBPMRotational::BondBPMRotational(LAMMPS *lmp) : BondBPM(lmp) +{ + partial_flag = 1; +} + +/* ---------------------------------------------------------------------- */ + +BondBPMRotational::~BondBPMRotational() +{ + if (fix_bond_history) modify->delete_fix("BOND_HISTORY_BPM_ROTATIONAL"); + + if (allocated) { + memory->destroy(setflag); + memory->destroy(Kr); + memory->destroy(Ks); + memory->destroy(Kt); + memory->destroy(Kb); + memory->destroy(Fcr); + memory->destroy(Fcs); + memory->destroy(Tct); + memory->destroy(Tcb); + memory->destroy(gnorm); + memory->destroy(gslide); + memory->destroy(groll); + memory->destroy(gtwist); + } +} + +/* ---------------------------------------------------------------------- */ + +double BondBPMRotational::acos_limit(double c) +{ + if (c > 1.0) c = 1.0; + if (c < -1.0) c = -1.0; + return acos(c); +} + +/* ---------------------------------------------------------------------- + Store data for a single bond - if bond added after LAMMPS init (e.g. pour) +------------------------------------------------------------------------- */ + +double BondBPMRotational::store_bond(int n,int i,int j) +{ + int m,k; + double delx, dely, delz, r, rinv; + double **x = atom->x; + tagint *tag = atom->tag; + double **bondstore = fix_bond_history->bondstore; + + if (tag[i] < tag[j]) { + delx = x[i][0] - x[j][0]; + dely = x[i][1] - x[j][1]; + delz = x[i][2] - x[j][2]; + } else { + delx = x[j][0] - x[i][0]; + dely = x[j][1] - x[i][1]; + delz = x[j][2] - x[i][2]; + } + + r = sqrt(delx*delx + dely*dely + delz*delz); + rinv = 1.0/r; + + bondstore[n][0] = r; + bondstore[n][1] = delx*rinv; + bondstore[n][2] = dely*rinv; + bondstore[n][3] = delz*rinv; + + if (i < atom->nlocal) { + for (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, delx*rinv); + fix_bond_history->update_atom_value(i, m, 2, dely*rinv); + fix_bond_history->update_atom_value(i, m, 3, delz*rinv); + } + } + } + + if (j < atom->nlocal) { + for (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, delx*rinv); + fix_bond_history->update_atom_value(j, m, 2, dely*rinv); + fix_bond_history->update_atom_value(j, m, 3, delz*rinv); + } + } + } + + return r; +} + +/* ---------------------------------------------------------------------- + Store data for all bonds called once +------------------------------------------------------------------------- */ + +void BondBPMRotational::store_data() +{ + int i, j, m, type; + double delx, dely, delz, r, rinv; + double **x = atom->x; + int **bond_type = atom->bond_type; + tagint *tag = atom->tag; + + 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 for tag + j = atom->map(atom->bond_atom[i][m]); + if(j == -1) error->one(FLERR, "Atom missing in BPM bond"); + + // Save orientation as pointing towards small tag + if(tag[i] < tag[j]){ + delx = x[i][0] - x[j][0]; + dely = x[i][1] - x[j][1]; + delz = x[i][2] - x[j][2]; + } else { + delx = x[j][0] - x[i][0]; + dely = x[j][1] - x[i][1]; + delz = x[j][2] - x[i][2]; + } + + // Get closest image in case bonded with ghost + domain->minimum_image(delx, dely, delz); + + r = sqrt(delx*delx + dely*dely + delz*delz); + rinv = 1.0/r; + fix_bond_history->update_atom_value(i, m, 0, r); + fix_bond_history->update_atom_value(i, m, 1, delx*rinv); + fix_bond_history->update_atom_value(i, m, 2, dely*rinv); + fix_bond_history->update_atom_value(i, m, 3, delz*rinv); + } + } + + fix_bond_history->post_neighbor(); +} + +/* ---------------------------------------------------------------------- */ + +void BondBPMRotational::compute(int eflag, int vflag) +{ + + if (! fix_bond_history->stored_flag) { + fix_bond_history->stored_flag = true; + store_data(); + } + + int i1,i2,itmp,m,n,type,itype,jtype; + double q1[4], q2[4], r[3], r0[3]; + double rsq, r0_mag, r_mag, r_mag_inv, Fr, Fs_mag; + double Tt_mag, Tb_mag, breaking, smooth; + double force1on2[3], torque1on2[3], torque2on1[3]; + double rhat[3], wn1[3], wn2[3], wxn1[3], wxn2[3], vroll[3]; + double w1dotr, w2dotr, v1dotr, v2dotr; + double vn1[3], vn2[3], vt1[3], vt2[3], tmp[3], s1[3], s2[3], tdamp[3]; + double tor1, tor2, tor3, fs1, fs2, fs3; + + double q2inv[4], rb[3], rb_x_r0[3], s[3], t[3], Fs[3]; + double q21[4], qp21[4], Tbp[3], Ttp[3]; + double Tsp[3], Fsp[3], Tt[3], Tb[3], Ts[3], F_rot[3], T_rot[3]; + double mq[4], mqinv[4], Ttmp[3], Ftmp[3], qtmp[4]; + double r0_dot_rb, gamma, c, psi, theta, sin_phi, cos_phi, temp; + double mag_in_plane, mag_out_plane; + + ev_init(eflag,vflag); + + if (vflag_global == 2) + force->pair->vflag_either = force->pair->vflag_global = 1; + + double **cutsq = force->pair->cutsq; + double **x = atom->x; + double **v = atom->v; + double **omega = atom->omega; + double **f = atom->f; + double **torque = atom->torque; + double *radius = atom->radius; + double **quat = atom->quat; + 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_mag = bondstore[n][0]; + + // Ensure pair is always ordered such that r0 points in + // a consistent direction and 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_mag < EPSILON || std::isnan(r0_mag)) + r0_mag = store_bond(n,i1,i2); + + r0[0] = bondstore[n][1]; + r0[1] = bondstore[n][2]; + r0[2] = bondstore[n][3]; + MathExtra::scale3(r0_mag, r0); + + q1[0] = quat[i1][0]; + q1[1] = quat[i1][1]; + q1[2] = quat[i1][2]; + q1[3] = quat[i1][3]; + + q2[0] = quat[i2][0]; + q2[1] = quat[i2][1]; + q2[2] = quat[i2][2]; + q2[3] = quat[i2][3]; + + // Note this is the reverse of Mora & Wang + MathExtra::sub3(x[i1], x[i2], r); + + rsq = MathExtra::lensq3(r); + r_mag = sqrt(rsq); + r_mag_inv = 1.0/r_mag; + MathExtra::scale3(r_mag_inv, r, rhat); + + // ------------------------------------------------------// + // Calculate forces using formulation in: + // 1) Y. Wang Acta Geotechnica 2009 + // 2) P. Mora & Y. Wang Advances in Geomcomputing 2009 + // ------------------------------------------------------// + + // Calculate normal forces, rb = bond vector in particle 1's frame + MathExtra::qconjugate(q2, q2inv); + MathExtra::quatrotvec(q2inv, r, rb); + Fr = Kr[type]*(r_mag - r0_mag); + + MathExtra::scale3(Fr*r_mag_inv, rb, F_rot); + + // Calculate forces due to tangential displacements (no rotation) + r0_dot_rb = dot3(r0, rb); + c = r0_dot_rb*r_mag_inv/r0_mag; + gamma = acos_limit(c); + + MathExtra::cross3(rb, r0, rb_x_r0); + MathExtra::cross3(rb, rb_x_r0, s); + MathExtra::norm3(s); + + MathExtra::scale3(Ks[type]*r_mag*gamma, s, Fs); + + // Calculate torque due to tangential displacements + MathExtra::cross3(r0, rb, t); + MathExtra::norm3(t); + + MathExtra::scale3(0.5*r_mag*Ks[type]*r_mag*gamma, t, Ts); + + // Relative rotation force/torque + // Use representation of X'Y'Z' rotations from Wang, Mora 2009 + temp = r_mag + rb[2]; + if (temp < 0.0) temp = 0.0; + mq[0] = sqrt(2)*0.5*sqrt(temp*r_mag_inv); + + temp = sqrt(rb[0]*rb[0]+rb[1]*rb[1]); + if (temp != 0.0) { + mq[1] = -sqrt(2)*0.5/temp; + temp = r_mag - rb[2]; + if (temp < 0.0) temp = 0.0; + mq[1] *= sqrt(temp*r_mag_inv); + mq[2] = -mq[1]; + mq[1] *= rb[1]; + mq[2] *= rb[0]; + } else { + // If aligned along z axis, x,y terms zero (r_mag-rb[2] = 0) + mq[1] = 0.0; + mq[2] = 0.0; + } + mq[3] = 0.0; + + // qp21 = opposite of r^\circ_21 in Wang + // q21 = opposite of r_21 in Wang + MathExtra::quatquat(q2inv, q1, qp21); + MathExtra::qconjugate(mq, mqinv); + MathExtra::quatquat(mqinv,qp21,qtmp); + MathExtra::quatquat(qtmp,mq,q21); + + temp = sqrt(q21[0]*q21[0] + q21[3]*q21[3]); + if (temp != 0.0) { + c = q21[0]/temp; + psi = 2.0*acos_limit(c); + } else { + c = 0.0; + psi = 0.0; + } + + // Map negative rotations + if (q21[3] < 0.0) // sin = q21[3]/temp + psi = -psi; + + if (q21[3] == 0.0) + psi = 0.0; + + c = q21[0]*q21[0] - q21[1]*q21[1] - q21[2]*q21[2] + q21[3]*q21[3]; + theta = acos_limit(c); + + // Separately calculte magnitude of quaternion in x-y and out of x-y planes + // to avoid dividing by zero + mag_out_plane = (q21[0]*q21[0] + q21[3]*q21[3]); + mag_in_plane = (q21[1]*q21[1] + q21[2]*q21[2]); + + if (mag_in_plane == 0.0) { + // No rotation => no bending/shear torque or extra shear force + // achieve by setting cos/sin = 0 + cos_phi = 0.0; + sin_phi = 0.0; + } else if (mag_out_plane == 0.0) { + // Calculate angle in plane + cos_phi = q21[2]/sqrt(mag_in_plane); + sin_phi = -q21[1]/sqrt(mag_in_plane); + } else { + // Default equations in Mora, Wang 2009 + cos_phi = q21[1]*q21[3] + q21[0]*q21[2]; + sin_phi = q21[2]*q21[3] - q21[0]*q21[1]; + + cos_phi /= sqrt(mag_out_plane*mag_in_plane); + sin_phi /= sqrt(mag_out_plane*mag_in_plane); + } + + Tbp[0] = -Kb[type]*theta*sin_phi; + Tbp[1] = Kb[type]*theta*cos_phi; + Tbp[2] = 0.0; + + Ttp[0] = 0.0; + Ttp[1] = 0.0; + Ttp[2] = Kt[type]*psi; + + Fsp[0] = -0.5*Ks[type]*r_mag*theta*cos_phi; + Fsp[1] = -0.5*Ks[type]*r_mag*theta*sin_phi; + Fsp[2] = 0.0; + + Tsp[0] = 0.25*Ks[type]*r_mag*r_mag*theta*sin_phi; + Tsp[1] = -0.25*Ks[type]*r_mag*r_mag*theta*cos_phi; + Tsp[2] = 0.0; + + // Rotate forces/torques back to 1st particle's frame + + MathExtra::quatrotvec(mq, Fsp, Ftmp); + MathExtra::quatrotvec(mq, Tsp, Ttmp); + for (m = 0; m < 3; m++) { + Fs[m] += Ftmp[m]; + Ts[m] += Ttmp[m]; + } + + MathExtra::quatrotvec(mq, Tbp, Tb); + MathExtra::quatrotvec(mq, Ttp, Tt); + + // Sum forces and calculate magnitudes + F_rot[0] += Fs[0]; + F_rot[1] += Fs[1]; + F_rot[2] += Fs[2]; + MathExtra::quatrotvec(q2, F_rot, force1on2); + + T_rot[0] = Ts[0] + Tt[0] + Tb[0]; + T_rot[1] = Ts[1] + Tt[1] + Tb[1]; + T_rot[2] = Ts[2] + Tt[2] + Tb[2]; + MathExtra::quatrotvec(q2, T_rot, torque1on2); + + T_rot[0] = Ts[0] - Tt[0] - Tb[0]; + T_rot[1] = Ts[1] - Tt[1] - Tb[1]; + T_rot[2] = Ts[2] - Tt[2] - Tb[2]; + MathExtra::quatrotvec(q2, T_rot, torque2on1); + + Fs_mag = MathExtra::len3(Fs); + Tt_mag = MathExtra::len3(Tt); + Tb_mag = MathExtra::len3(Tb); + + // ------------------------------------------------------// + // Check if bond breaks + // ------------------------------------------------------// + + breaking = Fr/Fcr[type] + Fs_mag/Fcs[type] + Tb_mag/Tcb[type] + Tt_mag/Tct[type]; + if (breaking < 0.0) breaking = 0.0; + + if (breaking >= 1.0) { + bondlist[n][2] = 0; + process_broken(i1, i2); + continue; + } + + smooth = breaking*breaking; + smooth = 1.0 - smooth*smooth; + + // ------------------------------------------------------// + // Calculate damping using formulation in + // Y. Wang, F. Alonso-Marroquin, W. Guo 2015 + // ------------------------------------------------------// + // Note: n points towards 1 vs pointing towards 2 + + // Damp normal velocity difference + v1dotr = MathExtra::dot3(v[i1],rhat); + v2dotr = MathExtra::dot3(v[i2],rhat); + + MathExtra::scale3(v1dotr, rhat, vn1); + MathExtra::scale3(v2dotr, rhat, vn2); + + MathExtra::sub3(vn1, vn2, tmp); + MathExtra::scale3(gnorm[type], tmp); + MathExtra::add3(force1on2, tmp, force1on2); + + // Damp tangential objective velocities + MathExtra::sub3(v[i1], vn1, vt1); + MathExtra::sub3(v[i2], vn2, vt2); + + MathExtra::sub3(vt2, vt1, tmp); + MathExtra::scale3(-0.5, tmp); + + MathExtra::cross3(omega[i1], r, s1); + MathExtra::scale3(0.5, s1); + MathExtra::sub3(s1, tmp, s1); // Eq 12 + + MathExtra::cross3(omega[i2], r, s2); + MathExtra::scale3(-0.5,s2); + MathExtra::add3(s2, tmp, s2); // Eq 13 + MathExtra::scale3(-0.5,s2); + + MathExtra::sub3(s1, s2, tmp); + MathExtra::scale3(gslide[type], tmp); + MathExtra::add3(force1on2, tmp, force1on2); + + // Apply corresponding torque + MathExtra::cross3(r,tmp,tdamp); + MathExtra::scale3(-0.5, tdamp); // 0.5*r points from particle 2 to midpoint + MathExtra::add3(torque1on2, tdamp, torque1on2); + MathExtra::add3(torque2on1, tdamp, torque2on1); + + // Damp rolling + MathExtra::cross3(omega[i1], rhat, wxn1); + MathExtra::cross3(omega[i2], rhat, wxn2); + MathExtra::sub3(wxn1, wxn2, vroll); // Eq. 31 + MathExtra::cross3(r, vroll, tdamp); + + MathExtra::scale3(0.5*groll[type], tdamp); + MathExtra::add3(torque1on2, tdamp, torque1on2); + MathExtra::scale3(-1.0, tdamp); + MathExtra::add3(torque2on1, tdamp, torque2on1); + + // Damp twist + w1dotr = MathExtra::dot3(omega[i1],rhat); + w2dotr = MathExtra::dot3(omega[i2],rhat); + + MathExtra::scale3(w1dotr, rhat, wn1); + MathExtra::scale3(w2dotr, rhat, wn2); + + MathExtra::sub3(wn1, wn2, tdamp); // Eq. 38 + MathExtra::scale3(0.5*gtwist[type], tdamp); + MathExtra::add3(torque1on2, tdamp, torque1on2); + MathExtra::scale3(-1.0, tdamp); + MathExtra::add3(torque2on1, tdamp, torque2on1); + + // ------------------------------------------------------// + // Apply forces and torques to particles + // ------------------------------------------------------// + + if (newton_bond || i1 < nlocal) { + f[i1][0] -= force1on2[0]*smooth; + f[i1][1] -= force1on2[1]*smooth; + f[i1][2] -= force1on2[2]*smooth; + + torque[i1][0] += torque2on1[0]*smooth; + torque[i1][1] += torque2on1[1]*smooth; + torque[i1][2] += torque2on1[2]*smooth; + } + + if (newton_bond || i2 < nlocal) { + f[i2][0] += force1on2[0]*smooth; + f[i2][1] += force1on2[1]*smooth; + f[i2][2] += force1on2[2]*smooth; + + torque[i2][0] += torque1on2[0]*smooth; + torque[i2][1] += torque1on2[1]*smooth; + torque[i2][2] += torque1on2[2]*smooth; + } + + if (evflag) ev_tally(i1,i2,nlocal,newton_bond,0.0,Fr*smooth,r[0],r[1],r[2]); + } +} + +/* ---------------------------------------------------------------------- */ + +void BondBPMRotational::allocate() +{ + allocated = 1; + int n = atom->nbondtypes; + + memory->create(Kr,n+1,"bond:Kr"); + memory->create(Ks,n+1,"bond:Ks"); + memory->create(Kt,n+1,"bond:Kt"); + memory->create(Kb,n+1,"bond:Kb"); + memory->create(Fcr,n+1,"bond:Fcr"); + memory->create(Fcs,n+1,"bond:Fcs"); + memory->create(Tct,n+1,"bond:Tct"); + memory->create(Tcb,n+1,"bond:Tcb"); + memory->create(gnorm,n+1,"bond:gnorm"); + memory->create(gslide,n+1,"bond:gslide"); + memory->create(groll,n+1,"bond:groll"); + memory->create(gtwist,n+1,"bond:gtwist"); + + memory->create(setflag,n+1,"bond:setflag"); + for (int i = 1; i <= n; i++) setflag[i] = 0; +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more types +------------------------------------------------------------------------- */ + +void BondBPMRotational::coeff(int narg, char **arg) +{ + if (narg != 13) 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 Kr_one = utils::numeric(FLERR,arg[1],false,lmp); + double Ks_one = utils::numeric(FLERR,arg[2],false,lmp); + double Kt_one = utils::numeric(FLERR,arg[3],false,lmp); + double Kb_one = utils::numeric(FLERR,arg[4],false,lmp); + double Fcr_one = utils::numeric(FLERR,arg[5],false,lmp); + double Fcs_one = utils::numeric(FLERR,arg[6],false,lmp); + double Tct_one = utils::numeric(FLERR,arg[7],false,lmp); + double Tcb_one = utils::numeric(FLERR,arg[8],false,lmp); + double gnorm_one = utils::numeric(FLERR,arg[9],false,lmp); + double gslide_one = utils::numeric(FLERR,arg[10],false,lmp); + double groll_one = utils::numeric(FLERR,arg[11],false,lmp); + double gtwist_one = utils::numeric(FLERR,arg[12],false,lmp); + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + Kr[i] = Kr_one; + Ks[i] = Ks_one; + Kt[i] = Kt_one; + Kb[i] = Kb_one; + Fcr[i] = Fcr_one; + Fcs[i] = Fcs_one; + Tct[i] = Tct_one; + Tcb[i] = Tcb_one; + gnorm[i] = gnorm_one; + gslide[i] = gslide_one; + groll[i] = groll_one; + gtwist[i] = gtwist_one; + setflag[i] = 1; + count++; + + if (Fcr[i]/Kr[i] > max_stretch) max_stretch = Fcr[i]/Kr[i]; + } + + if (count == 0) error->all(FLERR,"Incorrect args for bond coefficients"); +} + +/* ---------------------------------------------------------------------- + check if pair defined and special_bond settings are valid +------------------------------------------------------------------------- */ + +void BondBPMRotational::init_style() +{ + BondBPM::init_style(); + + if (!atom->quat_flag || !atom->sphere_flag) + error->all(FLERR,"Bond bpm/rotational requires atom style sphere/bpm"); + if (comm->ghost_velocity == 0) + error->all(FLERR,"Bond bpm/rotational requires ghost atoms store velocity"); + + if(domain->dimension == 2) + error->warning(FLERR, "Bond style bpm/rotational not intended for 2d use"); + + if (!fix_bond_history) + fix_bond_history = (FixBondHistory *) modify->add_fix( + "BOND_HISTORY_BPM_ROTATIONAL all BOND_HISTORY 0 4"); +} + +/* ---------------------------------------------------------------------- + proc 0 writes out coeffs to restart file +------------------------------------------------------------------------- */ + +void BondBPMRotational::write_restart(FILE *fp) +{ + fwrite(&Kr[1],sizeof(double),atom->nbondtypes,fp); + fwrite(&Ks[1],sizeof(double),atom->nbondtypes,fp); + fwrite(&Kt[1],sizeof(double),atom->nbondtypes,fp); + fwrite(&Kb[1],sizeof(double),atom->nbondtypes,fp); + fwrite(&Fcr[1],sizeof(double),atom->nbondtypes,fp); + fwrite(&Fcs[1],sizeof(double),atom->nbondtypes,fp); + fwrite(&Tct[1],sizeof(double),atom->nbondtypes,fp); + fwrite(&Tcb[1],sizeof(double),atom->nbondtypes,fp); + fwrite(&gnorm[1],sizeof(double),atom->nbondtypes,fp); + fwrite(&gslide[1],sizeof(double),atom->nbondtypes,fp); + fwrite(&groll[1],sizeof(double),atom->nbondtypes,fp); + fwrite(>wist[1],sizeof(double),atom->nbondtypes,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads coeffs from restart file, bcasts them +------------------------------------------------------------------------- */ + +void BondBPMRotational::read_restart(FILE *fp) +{ + allocate(); + + if (comm->me == 0) { + utils::sfread(FLERR,&Kr[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); + utils::sfread(FLERR,&Ks[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); + utils::sfread(FLERR,&Kt[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); + utils::sfread(FLERR,&Kb[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); + utils::sfread(FLERR,&Fcr[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); + utils::sfread(FLERR,&Fcs[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); + utils::sfread(FLERR,&Tct[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); + utils::sfread(FLERR,&Tcb[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); + utils::sfread(FLERR,&gnorm[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); + utils::sfread(FLERR,&gslide[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); + utils::sfread(FLERR,&groll[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); + utils::sfread(FLERR,>wist[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); + } + MPI_Bcast(&Kr[1],atom->nbondtypes,MPI_DOUBLE,0,world); + MPI_Bcast(&Ks[1],atom->nbondtypes,MPI_DOUBLE,0,world); + MPI_Bcast(&Kt[1],atom->nbondtypes,MPI_DOUBLE,0,world); + MPI_Bcast(&Kb[1],atom->nbondtypes,MPI_DOUBLE,0,world); + MPI_Bcast(&Fcr[1],atom->nbondtypes,MPI_DOUBLE,0,world); + MPI_Bcast(&Fcs[1],atom->nbondtypes,MPI_DOUBLE,0,world); + MPI_Bcast(&Tct[1],atom->nbondtypes,MPI_DOUBLE,0,world); + MPI_Bcast(&Tcb[1],atom->nbondtypes,MPI_DOUBLE,0,world); + MPI_Bcast(&gnorm[1],atom->nbondtypes,MPI_DOUBLE,0,world); + MPI_Bcast(&gslide[1],atom->nbondtypes,MPI_DOUBLE,0,world); + MPI_Bcast(&groll[1],atom->nbondtypes,MPI_DOUBLE,0,world); + MPI_Bcast(>wist[1],atom->nbondtypes,MPI_DOUBLE,0,world); + + for (int i = 1; i <= atom->nbondtypes; i++) setflag[i] = 1; +} + +/* ---------------------------------------------------------------------- + proc 0 writes to data file +------------------------------------------------------------------------- */ + +void BondBPMRotational::write_data(FILE *fp) +{ + for (int i = 1; i <= atom->nbondtypes; i++) + fprintf(fp,"%d %g %g %g %g %g %g %g %g %g %g %g %g\n", + i,Kr[i],Ks[i],Kt[i],Kb[i],Fcr[i], Fcs[i], Tct[i], + Tcb[i], gnorm[i], gslide[i], groll[i], gtwist[i]); +} + +/* ---------------------------------------------------------------------- */ + +double BondBPMRotational::single(int type, double rsq, int i, int j, + double &fforce) +{ + // Not yet enabled + if (type <= 0) return 0.0; + + //double r0; + //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); + // } + //} +} diff --git a/src/BPM/bond_bpm_rotational.h b/src/BPM/bond_bpm_rotational.h index 838226f0ff..14105f11a0 100644 --- a/src/BPM/bond_bpm_rotational.h +++ b/src/BPM/bond_bpm_rotational.h @@ -44,7 +44,6 @@ class BondBPMRotational : public BondBPM { void allocate(); void store_data(); double store_bond(int, int, int); - class FixBondHistory *fix_bond_history; }; } // namespace LAMMPS_NS diff --git a/src/BPM/fix_bond_history.cpp b/src/BPM/fix_bond_history.cpp index b0f046f43f..d66dec5643 100644 --- a/src/BPM/fix_bond_history.cpp +++ b/src/BPM/fix_bond_history.cpp @@ -291,4 +291,16 @@ void FixBondHistory::set_arrays(int i) for (int m = 0; m < nbond; m++) for (int idata = 0; idata < ndata; idata++) stored[i][m*ndata+idata] = 0.0; +} + +/* ---------------------------------------------------------------------- + Remove all data for row by compressing data +------------------------------------------------------------------------- */ + +void FixBondHistory::delete_bond(int i, int m) +{ + double **stored = atom->darray[index]; + int n = atom->num_bond[i]; + for (int idata = 0; idata < ndata; idata ++) + stored[i][m*ndata+idata] = stored[i][(n-1)*ndata+idata]; } \ No newline at end of file diff --git a/src/BPM/fix_bond_history.h b/src/BPM/fix_bond_history.h index 0219e5de02..63102f123c 100644 --- a/src/BPM/fix_bond_history.h +++ b/src/BPM/fix_bond_history.h @@ -41,6 +41,7 @@ class FixBondHistory : public Fix { void update_atom_value(int, int, int, double); double get_atom_value(int, int, int); + void delete_bond(int,int); double **bondstore; int stored_flag; From 5e0c754d0454753a915eb6dc79564b932578d873 Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Thu, 9 Sep 2021 14:17:39 -0600 Subject: [PATCH 04/40] Fixing style issues --- doc/src/Howto_bpm.rst | 62 ++++++++++++------------ doc/src/bond_bpm_rotational.rst | 54 ++++++++++----------- doc/src/compute_nbonds_atom.rst | 4 +- doc/src/fix_nve_sphere_bpm.rst | 4 +- doc/src/fix_update_special_bonds.rst | 6 +-- doc/src/pair_tracker.rst | 4 +- src/BPM/fix_bond_history.cpp | 2 +- src/BPM/fix_update_special_bonds.cpp | 40 +++++++-------- src/BPM/fix_update_special_bonds.h | 2 +- src/GRANULAR/pair_gran_hooke_history.cpp | 4 +- src/fix_neigh_history.cpp | 2 +- src/fix_property_atom.cpp | 2 +- 12 files changed, 93 insertions(+), 93 deletions(-) mode change 100755 => 100644 doc/src/Howto_bpm.rst mode change 100755 => 100644 doc/src/fix_update_special_bonds.rst diff --git a/doc/src/Howto_bpm.rst b/doc/src/Howto_bpm.rst old mode 100755 new mode 100644 index 24dc77d44b..af4c1d20a0 --- a/doc/src/Howto_bpm.rst +++ b/doc/src/Howto_bpm.rst @@ -4,33 +4,33 @@ 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. +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 +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. -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 +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 +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 ` +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. -As bonds can be broken between neighbor list builds, :doc:`special_bonds ` -work differently for BPM bond styles. There are two possible special -bond settings which determine how pair interactions work between bonded -particles. First, one can simply overlay pair interactions such that all -bonded particles also feel pair interactions. This can be accomplished by -simply turning off all special bonds by setting +As bonds can be broken between neighbor list builds, :doc:`special_bonds ` +work differently for BPM bond styles. There are two possible special +bond settings which determine how pair interactions work between bonded +particles. First, one can simply overlay pair interactions such that all +bonded particles also feel pair interactions. This can be accomplished by +simply turning off all special bonds by setting .. code-block:: LAMMPS @@ -39,31 +39,31 @@ simply turning off all special bonds by setting Alternatively, 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. To do this, one must both define an instance of -:doc:`fix update/special/bonds ` and have the special bond +the special bond list. To do this, one must both define an instance of +:doc:`fix update/special/bonds ` and have the special bond settings .. code-block:: LAMMPS special_bonds lj 0 1 1 coul 1 1 1 - + This fix ensures the 1-2 special bond list remains updated as bonds break. The fix also requires :doc:`newton ` bond off such that whena bond breaks between atoms across multiple processors, all processors are aware of the event. -The special bond settings then accomplish two tasks. First, they turns off 1-3 and -1-4 special bond lists, which are not currently supported for BPMs. As BPMs often +The special bond settings then accomplish two tasks. 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. -However, setting a nonzero coul weight for 1-2 bonds ensures all bonded +However, setting a nonzero coul weight for 1-2 bonds ensures all bonded neighbors are included in the neighbor list. All bonded neighbors must be included -in neighbor lists as they could become unbonded at any timestep. +in neighbor lists as they could become unbonded at any timestep. Currently there are two types of bonds included in this package. The first -bond style, :doc:`bond bpm/simple `, only applies pairwise, +bond style, :doc:`bond bpm/simple `, 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, +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 @@ -72,6 +72,6 @@ This also requires a unique integrator :doc:`fix nve/sphere/bpm `. To monitor the fracture of bonds in the system, all BPM bond styles -can be associated with an instance of :doc:`fix store/local ` +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. +:doc:`compute nbond/atom ` to tally the current number of bonds per atom. diff --git a/doc/src/bond_bpm_rotational.rst b/doc/src/bond_bpm_rotational.rst index bfa07041b3..9ba2bb54c5 100644 --- a/doc/src/bond_bpm_rotational.rst +++ b/doc/src/bond_bpm_rotational.rst @@ -28,7 +28,7 @@ Examples .. code-block:: LAMMPS bond_style bpm/rotational - bond_coeff 1 + bond_coeff 1 bond_style bpm/rotational myfix time id1 id2 fix myfix all store/local 1000 3 @@ -38,7 +38,7 @@ Examples Description """"""""""" -The *bpm/rotational* bond style computes forces and torques based +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 @@ -51,17 +51,17 @@ has a magnitude of .. math:: f_r = k_r (r - r_0) - -where :math:`k_r` is a stiffness and :math:`r` is the current distance and + +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 +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 +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 @@ -70,36 +70,36 @@ Bonds will break under sufficient stress. A breaking criteria is calculated B = \mathrm{max}\{0, \frac{f_r}{f_{r,c}} + \frac{|f_s|}{f_{s,c}} + \frac{|\tau_b|}{\tau_{b,c}} + \frac{|\tau_t|}{\tau_{t,c}} \} - -where :math:`|f_s|` is the magnitude of the shear force and + +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 +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 +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 -normal velocity of particles using a similar construction as +normal velocity of particles using a similar construction as dissipative particle dynamics (:ref:`(Groot) `): .. math:: F_D = - \gamma_n w (\hat{r} \bullet \vec{v}) - -where :math:`\gamma_n` is the damping strength, :math:`\hat{r}` is the + +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 +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 +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. @@ -121,16 +121,16 @@ or :doc:`read_restart ` commands: * :math:`\gamma_r` (distance*force/seconds/radians units) * :math:`\gamma_t` (distance*force/seconds/radians units) -As bonds can be broken between neighbor list builds, particular +As bonds can be broken between neighbor list builds, particular :doc:`special_bonds ` are required. See the `:doc: how to ` page on BPMs or `:doc: fix update/special/bonds ` for details. -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 ` +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.: @@ -146,7 +146,7 @@ status of broken bonds or permanently delete them, e.g.: Restart """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" -This bond style writes the reference state of each bond to +This bond style writes the reference state of each bond to :doc:`binary restart files `. Loading a restart file will properly resume bonds. @@ -158,7 +158,7 @@ package. See the :doc:`Build package ` doc page for more info. The *bpm/rotational* style requires 1-3 and 1-4 :doc:`special_bonds ` -be turned off using the :doc:`special_bonds ` command. +be turned off using the :doc:`special_bonds ` command. The *bpm/rotational* style requires :doc:`atom style sphere/bpm `. @@ -181,7 +181,7 @@ p 117-127 (2009). .. _Wang2009b: -**(Wang and Mora)** Wang, Mora, Advances in Geocomputing, +**(Wang and Mora)** Wang, Mora, Advances in Geocomputing, 119, p 183-228 (2009). .. _Groot1: diff --git a/doc/src/compute_nbonds_atom.rst b/doc/src/compute_nbonds_atom.rst index fd7ff4f8a9..5b7fce1bbc 100644 --- a/doc/src/compute_nbonds_atom.rst +++ b/doc/src/compute_nbonds_atom.rst @@ -8,7 +8,7 @@ Syntax .. parsed-literal:: - compute ID group-ID nbonds/atom + compute ID group-ID nbonds/atom * ID, group-ID are documented in :doc:`compute ` command * nbonds/atom = style name of this compute command @@ -26,7 +26,7 @@ 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 +:doc:`Howto bpm ` page. The number of bonds will be zero for atoms not in the specified compute group. Output info diff --git a/doc/src/fix_nve_sphere_bpm.rst b/doc/src/fix_nve_sphere_bpm.rst index 1afa53a4de..ce493f708c 100644 --- a/doc/src/fix_nve_sphere_bpm.rst +++ b/doc/src/fix_nve_sphere_bpm.rst @@ -26,7 +26,7 @@ Examples fix 1 all nve/sphere/bpm fix 1 all nve/sphere/bpm disc - + Description """"""""""" @@ -62,7 +62,7 @@ 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. +command. All particles in the group must be finite-size spheres with quaternions. They cannot be point particles. diff --git a/doc/src/fix_update_special_bonds.rst b/doc/src/fix_update_special_bonds.rst old mode 100755 new mode 100644 index f129b537d6..be693118cd --- a/doc/src/fix_update_special_bonds.rst +++ b/doc/src/fix_update_special_bonds.rst @@ -19,11 +19,11 @@ Examples .. code-block:: LAMMPS fix 1 all update/special/bonds - + Description """"""""""" -This fix is used to update the 1-2 special bond list for BPM bond styles. +This fix is used to update the 1-2 special bond list for BPM bond styles. This feature is used to censor pair forces between bonded particles. See the :doc:`BPM how to ` for more information. @@ -41,7 +41,7 @@ the :doc:`run ` command. This fix is not invoked during :doc:`energy minim Restrictions """""""""""" -This fix requires :doc:`newton ` bond off. +This fix requires :doc:`newton ` bond off. Related commands """""""""""""""" diff --git a/doc/src/pair_tracker.rst b/doc/src/pair_tracker.rst index c176c6d132..dc14e8d7b2 100644 --- a/doc/src/pair_tracker.rst +++ b/doc/src/pair_tracker.rst @@ -63,8 +63,8 @@ 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 +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. diff --git a/src/BPM/fix_bond_history.cpp b/src/BPM/fix_bond_history.cpp index d66dec5643..f60661ef2f 100644 --- a/src/BPM/fix_bond_history.cpp +++ b/src/BPM/fix_bond_history.cpp @@ -110,7 +110,7 @@ void FixBondHistory::post_constructor() index = atom->find_custom(&array_id[3],tmp1,tmp2); delete [] newarg; -} +} /* ---------------------------------------------------------------------- */ diff --git a/src/BPM/fix_update_special_bonds.cpp b/src/BPM/fix_update_special_bonds.cpp index 3fa9b84cd0..19b72e06a7 100644 --- a/src/BPM/fix_update_special_bonds.cpp +++ b/src/BPM/fix_update_special_bonds.cpp @@ -1,7 +1,7 @@ // clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - https://lammps.sandia.gov/, Sandia National Laboratories + https://www.lammps.org/, Sandia National Laboratories Steve Plimpton, sjplimp@sandia.gov Copyright (2003) Sandia Corporation. Under the terms of Contract @@ -36,7 +36,7 @@ FixUpdateSpecialBonds::FixUpdateSpecialBonds(LAMMPS *lmp, int narg, char **arg) Fix(lmp, narg, arg) { if (narg != 3) error->all(FLERR,"Illegal fix update/special/bonds command"); - comm_forward = 1+atom->maxspecial; + comm_forward = 1+atom->maxspecial; } /* ---------------------------------------------------------------------- */ @@ -67,15 +67,15 @@ void FixUpdateSpecialBonds::setup(int /*vflag*/) error->all(FLERR,"Fix update/special/bonds requires atom bonds"); // special lj must be 0 1 1 to censor pair forces between bonded particles - // special coulomb must be 1 1 1 to ensure all pairs are included in the - // neighbor list and 1-3 and 1-4 special bond lists are skipped + // special coulomb must be 1 1 1 to ensure all pairs are included in the + // neighbor list and 1-3 and 1-4 special bond lists are skipped if (force->special_lj[1] != 0.0 || force->special_lj[2] != 1.0 || force->special_lj[3] != 1.0) error->all(FLERR,"Fix update/special/bonds requires special LJ weights = 0,1,1"); if (force->special_coul[1] != 1.0 || force->special_coul[2] != 1.0 || force->special_coul[3] != 1.0) error->all(FLERR,"Fix update/special/bonds requires special Coulomb weights = 1,1,1"); - + broken_pairs.clear(); } @@ -88,19 +88,19 @@ void FixUpdateSpecialBonds::pre_exchange() int i, j, key, m, n1, n3; tagint min_tag, max_tag; int nlocal = atom->nlocal; - - tagint *tag = atom->tag; + + tagint *tag = atom->tag; tagint *slist; int **nspecial = atom->nspecial; tagint **special = atom->special; - + for (auto const &key : broken_pairs) { min_tag = key.first; max_tag = key.second; - + i = atom->map(min_tag); j = atom->map(max_tag); - + // remove i from special bond list for atom j and vice versa if (i < nlocal) { slist = special[i]; @@ -113,7 +113,7 @@ void FixUpdateSpecialBonds::pre_exchange() nspecial[i][1]--; nspecial[i][2]--; } - + if (j < nlocal) { slist = special[j]; n1 = nspecial[j][0]; @@ -126,10 +126,10 @@ void FixUpdateSpecialBonds::pre_exchange() nspecial[j][2]--; } } - + // Forward updated special bond list comm->forward_comm_fix(this); - + broken_pairs.clear(); } @@ -143,14 +143,14 @@ void FixUpdateSpecialBonds::pre_force(int /*vflag*/) int *ilist,*jlist,*numneigh,**firstneigh; tagint min_tag, max_tag; std::pair key; - + int **bond_type = atom->bond_type; int *num_bond = atom->num_bond; tagint **bond_atom = atom->bond_atom; int nlocal = atom->nlocal; - + tagint *tag = atom->tag; - NeighList *list = force->pair->list; + NeighList *list = force->pair->list; inum = list->inum; ilist = list->ilist; numneigh = list->numneigh; @@ -164,7 +164,7 @@ void FixUpdateSpecialBonds::pre_force(int /*vflag*/) for (jj = 0; jj < jnum; jj++) { j = jlist[jj]; j &= NEIGHMASK; - + min_tag = tag[i]; max_tag = tag[j]; if (max_tag < min_tag) { @@ -173,9 +173,9 @@ void FixUpdateSpecialBonds::pre_force(int /*vflag*/) } key = std::make_pair(min_tag, max_tag); - if (broken_pairs.find(key) != broken_pairs.end()) + if (broken_pairs.find(key) != broken_pairs.end()) jlist[jj] = j; // Clear special bond bits - } + } } } @@ -222,7 +222,7 @@ void FixUpdateSpecialBonds::unpack_forward_comm(int n, int first, double *buf) void FixUpdateSpecialBonds::add_broken_bond(int i, int j) { tagint *tag = atom->tag; - + tagint min_tag = tag[i]; tagint max_tag = tag[j]; if (max_tag < min_tag) { diff --git a/src/BPM/fix_update_special_bonds.h b/src/BPM/fix_update_special_bonds.h index ff47dd4d9b..6fe0834c82 100644 --- a/src/BPM/fix_update_special_bonds.h +++ b/src/BPM/fix_update_special_bonds.h @@ -1,6 +1,6 @@ /* -*- c++ -*- ---------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories + https://www.lammps.org/, Sandia National Laboratories Steve Plimpton, sjplimp@sandia.gov Copyright (2003) Sandia Corporation. Under the terms of Contract diff --git a/src/GRANULAR/pair_gran_hooke_history.cpp b/src/GRANULAR/pair_gran_hooke_history.cpp index 4dd2147d39..d4ffbf5e93 100644 --- a/src/GRANULAR/pair_gran_hooke_history.cpp +++ b/src/GRANULAR/pair_gran_hooke_history.cpp @@ -311,7 +311,7 @@ void PairGranHookeHistory::compute(int eflag, int vflag) fz = delz * ccel + fs3; fx *= factor_lj; fy *= factor_lj; - fz *= factor_lj; + fz *= factor_lj; f[i][0] += fx; f[i][1] += fy; f[i][2] += fz; @@ -321,7 +321,7 @@ void PairGranHookeHistory::compute(int eflag, int vflag) tor3 = rinv * (delx * fs2 - dely * fs1); tor1 *= factor_lj; tor2 *= factor_lj; - tor3 *= factor_lj; + tor3 *= factor_lj; torque[i][0] -= radi * tor1; torque[i][1] -= radi * tor2; torque[i][2] -= radi * tor3; diff --git a/src/fix_neigh_history.cpp b/src/fix_neigh_history.cpp index 6f35ea73e6..b3d3e1d196 100644 --- a/src/fix_neigh_history.cpp +++ b/src/fix_neigh_history.cpp @@ -633,7 +633,7 @@ void FixNeighHistory::post_neighbor() } else { rflag = 1; } - + // Remove special bond bits j &= NEIGHMASK; diff --git a/src/fix_property_atom.cpp b/src/fix_property_atom.cpp index 605e25525e..3f5ee9fb1f 100644 --- a/src/fix_property_atom.cpp +++ b/src/fix_property_atom.cpp @@ -566,7 +566,7 @@ void FixPropertyAtom::copy_arrays(int i, int j, int /*delflag*/) ncol = cols[nv]; for (k = 0; k < ncol; k++) { atom->darray[index[nv]][j][k] = atom->darray[index[nv]][i][k]; - atom->darray[index[nv]][i][k] = 0.0; + atom->darray[index[nv]][i][k] = 0.0; } } } From 18f0d2e1b5700cc2af6b2a7edd1d1f1903c981cd Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer Date: Mon, 20 Sep 2021 18:06:10 -0600 Subject: [PATCH 05/40] Adding spring bondstyle --- doc/src/Howto_bpm.rst | 2 +- doc/src/Packages_details.rst | 1 + doc/src/bond_bpm_rotational.rst | 2 +- doc/src/bond_bpm_spring.rst | 143 ++++++++ ...pact_bpm.lmp => impact_rotational_bpm.lmp} | 8 +- examples/bpm/impact/impact_spring_bpm.lmp | 54 +++ .../log.30Jul2021.impact_rotational.g++1.4 | 215 +++++++++++ .../impact/log.30Jul2021.impact_simple.g++1.4 | 220 ++++++++++++ examples/bpm/impact/log.30Jul2021.pour.g++1.4 | 241 ------------- src/.gitignore | 4 +- src/BPM/bond_bpm_spring.cpp | 338 ++++++++++++++++++ src/BPM/bond_bpm_spring.h | 74 ++++ 12 files changed, 1053 insertions(+), 249 deletions(-) create mode 100644 doc/src/bond_bpm_spring.rst rename examples/bpm/impact/{impact_bpm.lmp => impact_rotational_bpm.lmp} (89%) create mode 100644 examples/bpm/impact/impact_spring_bpm.lmp create mode 100644 examples/bpm/impact/log.30Jul2021.impact_rotational.g++1.4 create mode 100644 examples/bpm/impact/log.30Jul2021.impact_simple.g++1.4 delete mode 100644 examples/bpm/impact/log.30Jul2021.pour.g++1.4 create mode 100644 src/BPM/bond_bpm_spring.cpp create mode 100644 src/BPM/bond_bpm_spring.h diff --git a/doc/src/Howto_bpm.rst b/doc/src/Howto_bpm.rst index af4c1d20a0..38ae021cc3 100644 --- a/doc/src/Howto_bpm.rst +++ b/doc/src/Howto_bpm.rst @@ -59,7 +59,7 @@ neighbors are included in the neighbor list. All bonded neighbors must be includ in neighbor lists as they could become unbonded at any timestep. Currently there are two types of bonds included in this package. The first -bond style, :doc:`bond bpm/simple `, only applies pairwise, +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 `, diff --git a/doc/src/Packages_details.rst b/doc/src/Packages_details.rst index e788da552d..2a2d9a2412 100644 --- a/doc/src/Packages_details.rst +++ b/doc/src/Packages_details.rst @@ -304,6 +304,7 @@ models for mesoscale simulations of solids and fracture. See the * :doc:`Howto_bpm ` * :doc:`atom_style sphere/bpm ` * :doc:`bond_style bpm/rotational ` +* :doc:`bond_style bpm/spring ` * :doc:`compute nbonds/atom ` * :doc:`fix nve/sphere/bpm ` * :doc:`fix update/special/bonds ` diff --git a/doc/src/bond_bpm_rotational.rst b/doc/src/bond_bpm_rotational.rst index 9ba2bb54c5..3fcc3d49ec 100644 --- a/doc/src/bond_bpm_rotational.rst +++ b/doc/src/bond_bpm_rotational.rst @@ -28,7 +28,7 @@ Examples .. code-block:: LAMMPS bond_style bpm/rotational - bond_coeff 1 + bond_coeff 1 1.0 0.2 0.02 0.02 0.20 0.04 0.04 0.04 0.1 0.02 0.002 0.002 bond_style bpm/rotational myfix time id1 id2 fix myfix all store/local 1000 3 diff --git a/doc/src/bond_bpm_spring.rst b/doc/src/bond_bpm_spring.rst new file mode 100644 index 0000000000..52954c4fd2 --- /dev/null +++ b/doc/src/bond_bpm_spring.rst @@ -0,0 +1,143 @@ +.. index:: bond_style bpm/spring + +bond_style bpm/spring command +========================== + +Syntax +"""""" + +.. code-block:: LAMMPS + + bond_style bpm/spring keyword value attribute1 attribute2 ... + +* optional keyword = *store/local* + + .. parsed-literal:: + + *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 + + +Examples +"""""""" + +.. code-block:: LAMMPS + + bond_style bpm/spring + bond_coeff 1 1.0 0.05 0.1 + + bond_style bpm/spring myfix time id1 id2 + fix myfix all store/local 1000 3 + dump 1 all local 1000 dump.broken f_myfix[1] f_myfix[2] f_myfix[3] + dump_modify 1 write_header no + +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 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 + +.. 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 + +.. math:: + + w = 1.0 - \left( \frac{r - r_0}{r_0 \epsilon_c} \right^4 . + +Finally, additional damping forces and torques are applied to the two +particles. A force is applied proportional to the difference in the +normal velocity of particles using a similar construction as +dissipative particle dynamics (:ref:`(Groot) `): + +.. math:: + + F_D = - \gamma_n w (\hat{r} \bullet \vec{v}) + +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. + +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: + +* :math:`k` (force/distance units) +* :math:`\epsilon_c` (unit less) +* :math:`\gamma` (force/velocity units) + +As bonds can be broken between neighbor list builds, particular +:doc:`special_bonds ` are required. See the `:doc: how to ` +page on BPMs or `:doc: fix update/special/bonds ` +for details. + +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.: + +.. code-block:: LAMMPS + + delete_bonds all stats + delete_bonds all bond 0 remove + + +---------- + +Restart +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +This bond style writes the reference state of each bond to +: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. + +The *bpm/spring* style requires 1-3 and 1-4 :doc:`special_bonds ` +be turned off using the :doc:`special_bonds ` command. + +Related commands +"""""""""""""""" + +:doc:`bond_coeff `, :doc:`fix store/local ` + +Default +""""""" + +none + + +.. _Groot1: + +**(Groot)** Groot and Warren, J Chem Phys, 107, 4423-35 (1997). diff --git a/examples/bpm/impact/impact_bpm.lmp b/examples/bpm/impact/impact_rotational_bpm.lmp similarity index 89% rename from examples/bpm/impact/impact_bpm.lmp rename to examples/bpm/impact/impact_rotational_bpm.lmp index de975fb956..f79a72fd9f 100644 --- a/examples/bpm/impact/impact_bpm.lmp +++ b/examples/bpm/impact/impact_rotational_bpm.lmp @@ -1,12 +1,12 @@ units lj dimension 3 -boundary m m m +boundary f f f atom_style sphere/bpm 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.0 -region box block -5 15 -20 20 -20 20 +region box block -25 15 -22 22 -22 22 create_box 1 box bond/types 2 extra/bond/per/atom 20 extra/special/per/atom 50 region disk cylinder x 0.0 0.0 20.0 -0.5 0.5 @@ -32,7 +32,6 @@ fix 3 all update/special/bonds create_bonds many plate plate 1 0.0 1.5 create_bonds many projectile projectile 2 0.0 1.5 -change_box all boundary s s s neighbor 0.3 bin special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0 @@ -44,9 +43,10 @@ compute tbond all reduce sum c_nbond timestep 0.05 thermo_style custom step ke pe pxx pyy pzz c_tbond thermo 100 +thermo_modify lost ignore lost/bond ignore #dump 1 all custom 100 atomDump id radius x y z c_nbond dump 2 all local 100 brokenDump f_2[1] f_2[2] f_2[3] dump_modify 2 header no -run 10000 +run 7500 diff --git a/examples/bpm/impact/impact_spring_bpm.lmp b/examples/bpm/impact/impact_spring_bpm.lmp new file mode 100644 index 0000000000..09c474c61e --- /dev/null +++ b/examples/bpm/impact/impact_spring_bpm.lmp @@ -0,0 +1,54 @@ +units lj +dimension 3 +boundary f f f +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.0 +region box block -25 15 -22 22 -22 22 +create_box 1 box bond/types 2 extra/bond/per/atom 20 extra/special/per/atom 50 + +region disk cylinder x 0.0 0.0 20.0 -0.5 0.5 +create_atoms 1 region disk +group plate region disk + +region ball sphere 8.0 0.0 0.0 6.0 +create_atoms 1 region ball +group projectile region ball + +displace_atoms all random 0.1 0.1 0.1 134598738 + +mass 1 1.0 + +neighbor 1.0 bin +pair_style lj/cut 1.0 +bond_style bpm/spring store/local 2 time id1 id2 +pair_coeff 1 1 $(1/(18*PI)) $(2^(-1/6)) 1.0 +bond_coeff 1 1.0 0.04 1.0 +bond_coeff 2 1.0 0.20 1.0 + +fix 1 all nve +fix 2 all store/local 100 3 +fix 3 all update/special/bonds + +create_bonds many plate plate 1 0.0 1.5 +create_bonds many projectile projectile 2 0.0 1.5 + +neighbor 0.3 bin +special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0 + +velocity projectile set -0.05 0.0 0.0 +compute nbond all nbond/atom +compute tbond all reduce sum c_nbond + +timestep 0.1 +thermo_style custom step ke pe pxx pyy pzz c_tbond +thermo 100 +thermo_modify lost ignore lost/bond ignore +#dump 1 all custom 100 atomDump id x y z c_nbond + +dump 2 all local 100 brokenDump f_2[1] f_2[2] f_2[3] +dump_modify 2 header no + +run 7500 diff --git a/examples/bpm/impact/log.30Jul2021.impact_rotational.g++1.4 b/examples/bpm/impact/log.30Jul2021.impact_rotational.g++1.4 new file mode 100644 index 0000000000..b81abac877 --- /dev/null +++ b/examples/bpm/impact/log.30Jul2021.impact_rotational.g++1.4 @@ -0,0 +1,215 @@ +LAMMPS (30 Jul 2021) +units lj +dimension 3 +boundary f f f +atom_style sphere/bpm +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.0 +Lattice spacing in x,y,z = 1.5874011 1.5874011 1.5874011 +region box block -25 15 -22 22 -22 22 +create_box 1 box bond/types 2 extra/bond/per/atom 20 extra/special/per/atom 50 +Created orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) + 1 by 1 by 1 MPI processor grid + +region disk cylinder x 0.0 0.0 20.0 -0.5 0.5 +create_atoms 1 region disk +Created 7529 atoms + using lattice units in orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) + create_atoms CPU = 0.004 seconds +group plate region disk +7529 atoms in group plate + +region ball sphere 8.0 0.0 0.0 6.0 +create_atoms 1 region ball +Created 3589 atoms + using lattice units in orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) + create_atoms CPU = 0.002 seconds +group projectile region ball +3589 atoms in group projectile + +displace_atoms all random 0.1 0.1 0.1 134598738 +Displacing atoms ... + +neighbor 1.0 bin +pair_style gran/hooke/history 1.0 NULL 0.5 NULL 0.1 1 +bond_style bpm/rotational store/local 2 time id1 id2 +pair_coeff 1 1 +bond_coeff 1 1.0 0.2 0.02 0.02 0.05 0.01 0.01 0.01 0.1 0.02 0.002 0.002 +bond_coeff 2 1.0 0.2 0.02 0.02 0.20 0.04 0.04 0.04 0.1 0.02 0.002 0.002 + +fix 1 all nve/sphere/bpm +fix 2 all store/local 100 3 +fix 3 all update/special/bonds + +create_bonds many plate plate 1 0.0 1.5 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2.6 + binsize = 1, bins = 64 70 70 + 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 gran/hooke/history, perpetual + attributes: half, newton on, size, history + pair build: half/size/bin/newton + stencil: half/bin/3d + bin: standard +Added 38559 bonds, new total = 38559 +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 15 = max # of 1-2 neighbors + 101 = max # of special neighbors + special bonds CPU = 0.007 seconds +create_bonds many projectile projectile 2 0.0 1.5 +Added 21869 bonds, new total = 60428 +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 16 = max # of 1-2 neighbors + 101 = max # of special neighbors + special bonds CPU = 0.010 seconds + +neighbor 0.3 bin +special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0 + +velocity projectile set -0.05 0.0 0.0 +compute nbond all nbond/atom +compute tbond all reduce sum c_nbond + +timestep 0.05 +thermo_style custom step ke pe pxx pyy pzz c_tbond +thermo 100 +thermo_modify lost ignore lost/bond ignore +#dump 1 all custom 100 atomDump id radius x y z c_nbond + +dump 2 all local 100 brokenDump f_2[1] f_2[2] f_2[3] +dump_modify 2 header no + +run 7500 +Neighbor list info ... + update every 1 steps, delay 10 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 = 98 108 108 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gran/hooke/history, perpetual + attributes: half, newton on, size, history + pair build: half/size/bin/newton + stencil: half/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 39.18 | 39.18 | 39.18 Mbytes +Step KinEng PotEng Pxx Pyy Pzz c_tbond + 0 0.00053238861 0 3.8217307e-05 0 0 10.8703 + 100 0.00053238861 0 3.8217307e-05 3.7024766e-13 -2.6107956e-13 10.8703 + 200 0.00053238861 0 3.8217307e-05 -4.6764996e-13 5.7734804e-13 10.8703 + 300 0.00053238861 0 3.8217308e-05 -6.6404932e-13 -1.4463201e-13 10.8703 + 400 0.00053238861 0 3.8217307e-05 -1.5842255e-13 3.2646699e-14 10.8703 + 500 0.00053102307 0 3.6857657e-05 -5.0613842e-07 -4.5464639e-07 10.8703 + 600 0.00051549565 0 1.5836226e-05 -6.6250357e-06 -7.1458399e-06 10.868322 + 700 0.00050120381 0 -1.9467767e-05 -7.7209878e-06 -1.121158e-05 10.850333 + 800 0.00049861454 0 1.5365076e-05 5.214591e-06 2.7950985e-06 10.803742 + 900 0.00049582022 0 5.7445368e-05 -2.1846154e-05 -2.3927093e-05 10.738082 + 1000 0.00049342915 0 4.9596969e-05 -8.1907786e-06 -1.3269952e-05 10.688433 + 1100 0.00048639213 0 1.0822487e-05 3.9352339e-05 4.0409565e-05 10.667026 + 1200 0.000483091 0 3.8492853e-06 2.2015581e-05 3.1490077e-05 10.646159 + 1300 0.00047987023 0 5.8429983e-05 -7.8096854e-06 3.9318833e-06 10.631229 + 1400 0.00048104927 0 4.6603937e-05 -1.2320299e-05 -1.010841e-05 10.619536 + 1500 0.00047270384 0 -1.622772e-06 1.5996657e-05 1.5652658e-05 10.606944 + 1600 0.00045720595 0 1.64434e-06 1.0627449e-05 7.2901589e-06 10.597949 + 1700 0.00044826095 0 3.3113848e-05 -3.1886382e-05 -4.1076437e-05 10.584458 + 1800 0.00044859158 0 3.8589858e-05 -3.217135e-05 -4.4394932e-05 10.554236 + 1900 0.00044410417 0 1.6071124e-06 3.469787e-06 -1.172431e-05 10.528153 + 2000 0.00043690537 0 1.8298385e-05 3.2800463e-05 2.3766026e-05 10.49955 + 2100 0.00043113053 0 5.5169319e-05 1.0337577e-05 6.8334001e-06 10.449541 + 2200 0.00042795839 0 3.3555532e-05 -7.8682107e-06 1.4501739e-06 10.40277 + 2300 0.0004240013 0 8.8868452e-06 1.8196289e-06 2.755748e-05 10.362115 + 2400 0.00042426888 0 2.3953861e-05 1.7614888e-05 4.2827512e-05 10.340529 + 2500 0.00041903776 0 5.1969184e-05 2.5725967e-05 4.2229194e-05 10.324879 + 2600 0.00042070944 0 4.0633614e-05 2.6089786e-05 3.2212886e-05 10.313006 + 2700 0.00041907255 0 1.0826647e-05 2.7725133e-05 3.3535626e-05 10.301673 + 2800 0.00041823551 0 2.7757924e-05 1.462054e-05 1.629062e-05 10.288001 + 2900 0.00041833009 0 5.016926e-05 2.1116657e-06 -9.0474367e-06 10.276129 + 3000 0.0004200714 0 2.9312093e-05 8.0995894e-06 -1.427634e-05 10.266954 + 3100 0.00041930877 0 8.2905585e-06 2.5106255e-06 -6.0475079e-06 10.259039 + 3200 0.00042002824 0 2.7415565e-05 -2.5467008e-05 -1.1758229e-05 10.249146 + 3300 0.00041772304 0 4.7010143e-05 -3.2166248e-05 -2.3740064e-05 10.245728 + 3400 0.00041567147 0 2.265559e-05 -1.4994351e-05 -1.4387458e-05 10.244828 + 3500 0.00041264993 0 9.4675076e-06 -1.2940542e-05 -2.6164909e-06 10.243929 + 3600 0.00041296772 0 3.2135436e-05 -2.3723233e-05 -1.1358132e-05 10.243029 + 3700 0.00041218299 0 4.3546104e-05 -1.6744403e-05 -2.1466737e-05 10.240871 + 3800 0.00041196427 0 2.4626877e-05 8.2428335e-06 -9.6621514e-06 10.236913 + 3900 0.00041061174 0 1.5527454e-05 1.4796165e-05 8.5041818e-06 10.229718 + 4000 0.00041008163 0 3.6758236e-05 -4.1693239e-06 -2.3638032e-07 10.221083 + 4100 0.00040807476 0 4.2903311e-05 -8.7361319e-06 -9.2843568e-06 10.211909 + 4200 0.00040749974 0 2.1764542e-05 -1.5964475e-07 1.1116464e-06 10.205972 + 4300 0.00040585168 0 1.6398189e-05 -6.2081757e-07 1.4245018e-05 10.203454 + 4400 0.00040614156 0 3.8921994e-05 -1.0816449e-05 8.8070462e-06 10.198237 + 4500 0.00040550623 0 4.1195875e-05 -4.4468565e-06 -4.5109048e-06 10.19356 + 4600 0.00040471568 0 1.9924175e-05 8.0584659e-06 2.8014197e-06 10.186904 + 4700 0.00040443998 0 2.0848233e-05 7.2219213e-06 8.5736771e-06 10.182947 + 4800 0.00040411017 0 3.8995426e-05 -3.5139599e-06 -1.7346701e-06 10.17773 + 4900 0.00040369283 0 3.8616558e-05 -3.8837458e-07 -6.5227651e-06 10.174492 + 5000 0.00040347603 0 1.957792e-05 5.3591428e-06 5.0851337e-06 10.171074 + 5100 0.00040318 0 2.0628515e-05 -6.133528e-06 8.9227218e-06 10.166217 + 5200 0.00040396442 0 3.9097282e-05 -1.3317561e-05 -2.4599499e-06 10.158842 + 5300 0.00040420662 0 3.5316538e-05 -1.4346009e-06 -5.7802302e-06 10.154704 + 5400 0.00040419432 0 1.9706975e-05 6.6651292e-06 3.0821293e-06 10.148768 + 5500 0.00040500025 0 2.2492943e-05 -8.2260426e-06 4.6721228e-06 10.14463 + 5600 0.00040447185 0 3.8628198e-05 -8.844675e-06 -6.7043678e-07 10.143191 + 5700 0.00040435949 0 3.5236357e-05 5.3512632e-06 -2.9663861e-07 10.141752 + 5800 0.00040356839 0 1.8078404e-05 7.7468465e-06 4.1618489e-06 10.141045 + 5900 0.00040255066 0 2.5803838e-05 9.5521231e-07 3.4211797e-06 10.14251 + 6000 0.00040255799 0 3.8202776e-05 -3.5222942e-06 -7.4050996e-06 10.14233 + 6100 0.00040280742 0 3.0004475e-05 2.0612828e-06 -7.0155478e-06 10.14197 + 6200 0.00040180209 0 1.8453425e-05 2.5937959e-06 6.019204e-06 10.142703 + 6300 0.00040159364 0 2.6608078e-05 -3.4326767e-06 6.5089502e-06 10.142163 + 6400 0.00039963271 0 3.7746341e-05 -1.3954533e-06 -6.6816781e-06 10.143076 + 6500 0.0003995975 0 2.7758521e-05 6.370558e-06 -8.535581e-06 10.143076 + 6600 0.00039973428 0 1.8062746e-05 6.3493548e-06 1.2970441e-06 10.143076 + 6700 0.00039987367 0 2.7872598e-05 2.9794629e-07 3.1449123e-06 10.143988 + 6800 0.00039942046 0 3.6871697e-05 4.4181241e-07 -3.7266658e-06 10.146188 + 6900 0.00039937936 0 2.73304e-05 6.4090146e-06 1.1834424e-06 10.147835 + 7000 0.00039934517 0 2.0161434e-05 5.3875016e-06 1.141564e-05 10.147835 + 7100 0.00039884824 0 3.0603701e-05 7.327098e-07 5.1369462e-06 10.148402 + 7200 0.00039774709 0 3.5965545e-05 3.6906864e-06 -5.6506465e-06 10.148969 + 7300 0.00039642146 0 2.4883695e-05 7.2866197e-06 -8.2009411e-07 10.151379 + 7400 0.00039605388 0 2.0790699e-05 2.6616664e-06 1.1522615e-05 10.152321 + 7500 0.00039471805 0 3.0911798e-05 -4.6441697e-06 5.9470361e-06 10.154748 +Loop time of 114.934 on 1 procs for 7500 steps with 11089 atoms + +Performance: 281901.613 tau/day, 65.255 timesteps/s +99.7% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.2383 | 1.2383 | 1.2383 | 0.0 | 1.08 +Bond | 101.4 | 101.4 | 101.4 | 0.0 | 88.22 +Neigh | 2.7723 | 2.7723 | 2.7723 | 0.0 | 2.41 +Comm | 0.075342 | 0.075342 | 0.075342 | 0.0 | 0.07 +Output | 0.06732 | 0.06732 | 0.06732 | 0.0 | 0.06 +Modify | 9.1154 | 9.1154 | 9.1154 | 0.0 | 7.93 +Other | | 0.2695 | | | 0.23 + +Nlocal: 11089.0 ave 11089 max 11089 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0.00000 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 45554.0 ave 45554 max 45554 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 45554 +Ave neighs/atom = 4.1080350 +Ave special neighs/atom = 10.156101 +Neighbor list builds = 467 +Dangerous builds = 0 +Total wall time: 0:01:55 diff --git a/examples/bpm/impact/log.30Jul2021.impact_simple.g++1.4 b/examples/bpm/impact/log.30Jul2021.impact_simple.g++1.4 new file mode 100644 index 0000000000..adb843ba93 --- /dev/null +++ b/examples/bpm/impact/log.30Jul2021.impact_simple.g++1.4 @@ -0,0 +1,220 @@ +LAMMPS (30 Jul 2021) +units lj +dimension 3 +boundary f f f +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.0 +Lattice spacing in x,y,z = 1.5874011 1.5874011 1.5874011 +region box block -25 15 -22 22 -22 22 +create_box 1 box bond/types 2 extra/bond/per/atom 20 extra/special/per/atom 50 +Created orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) + 1 by 1 by 1 MPI processor grid + +region disk cylinder x 0.0 0.0 20.0 -0.5 0.5 +create_atoms 1 region disk +Created 7529 atoms + using lattice units in orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) + create_atoms CPU = 0.003 seconds +group plate region disk +7529 atoms in group plate + +region ball sphere 8.0 0.0 0.0 6.0 +create_atoms 1 region ball +Created 3589 atoms + using lattice units in orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) + create_atoms CPU = 0.002 seconds +group projectile region ball +3589 atoms in group projectile + +displace_atoms all random 0.1 0.1 0.1 134598738 +Displacing atoms ... + +mass 1 1.0 + +neighbor 1.0 bin +pair_style lj/cut 1.0 +bond_style bpm/spring store/local 2 time id1 id2 +pair_coeff 1 1 $(1/(18*PI)) $(2^(-1/6)) 1.0 +pair_coeff 1 1 0.017683882565766150669 $(2^(-1/6)) 1.0 +pair_coeff 1 1 0.017683882565766150669 0.89089871814033927411 1.0 +bond_coeff 1 1.0 0.04 1.0 +bond_coeff 2 1.0 0.20 1.0 + +fix 1 all nve +fix 2 all store/local 100 3 +fix 3 all update/special/bonds + +create_bonds many plate plate 1 0.0 1.5 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2.6 + binsize = 1, bins = 64 70 70 + 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 lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d + bin: standard +Added 38559 bonds, new total = 38559 +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 15 = max # of 1-2 neighbors + 101 = max # of special neighbors + special bonds CPU = 0.006 seconds +create_bonds many projectile projectile 2 0.0 1.5 +WARNING: Communication cutoff 2.6 is shorter than a bond length based estimate of 2.799982026012842. This may lead to errors. (../comm.cpp:734) +Added 21869 bonds, new total = 60428 +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 16 = max # of 1-2 neighbors + 101 = max # of special neighbors + special bonds CPU = 0.008 seconds + +neighbor 0.3 bin +special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0 + +velocity projectile set -0.05 0.0 0.0 +compute nbond all nbond/atom +compute tbond all reduce sum c_nbond + +timestep 0.1 +thermo_style custom step ke pe pxx pyy pzz c_tbond +thermo 100 +thermo_modify lost ignore lost/bond ignore +#dump 1 all custom 100 atomDump id x y z c_nbond + +dump 2 all local 100 brokenDump f_2[1] f_2[2] f_2[3] +dump_modify 2 header no + +run 7500 +Neighbor list info ... + update every 1 steps, delay 10 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 = 98 108 108 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 22.50 | 22.50 | 22.50 Mbytes +Step KinEng PotEng Pxx Pyy Pzz c_tbond + 0 0.0010167873 0 7.298968e-05 0 0 10.8703 + 100 0.0010167873 0 7.298968e-05 -8.7429897e-20 -8.8470837e-20 10.8703 + 200 0.0010167873 0 7.298968e-05 -7.2809565e-20 -8.0915788e-20 10.8703 + 300 0.0010019973 -5.3291343e-05 0.00010093361 8.6373038e-06 9.8886169e-06 10.862565 + 400 0.00096754254 -0.00013445443 0.00012114639 -1.0451037e-05 -1.3102312e-05 10.814535 + 500 0.00098230681 -0.0001559819 8.1573507e-05 1.0019714e-05 6.6044989e-06 10.765785 + 600 0.00099346016 -0.00021242987 7.8181991e-05 5.3246616e-06 6.7747639e-06 10.711999 + 700 0.00097743083 -0.00022519088 9.2593451e-05 -1.3368324e-05 -9.1024741e-06 10.683037 + 800 0.00097657062 -0.00025160598 7.6171833e-05 -3.6699488e-06 -3.156595e-06 10.648858 + 900 0.00096573642 -0.00030010781 7.221088e-05 2.7980135e-06 8.3953748e-06 10.602806 + 1000 0.00088967922 -0.00026225991 7.2273749e-05 -3.3180725e-06 1.7000133e-06 10.571429 + 1100 0.00086637472 -0.00028264644 6.1827699e-05 -2.5263518e-06 -8.804488e-07 10.550198 + 1200 0.00084322002 -0.00030067163 5.3193544e-05 -5.4186506e-06 -7.4414952e-07 10.528787 + 1300 0.00082546285 -0.00029621074 5.8387607e-05 -5.4986846e-07 2.1039469e-06 10.507017 + 1400 0.0008157657 -0.00031617563 5.8009972e-05 7.3256966e-06 4.560414e-06 10.481288 + 1500 0.00083393604 -0.00030638038 5.2255981e-05 1.4804765e-05 9.4914663e-06 10.451961 + 1600 0.00081285118 -0.00035496629 5.312358e-05 1.4502252e-05 1.3433953e-05 10.426849 + 1700 0.00078740406 -0.00034224637 5.0152957e-05 1.0822543e-05 1.1601587e-05 10.406767 + 1800 0.00076088167 -0.00039346684 5.0685628e-05 1.4591838e-05 6.8909935e-06 10.396831 + 1900 0.00073852613 -0.00040295897 4.9940437e-05 2.2598772e-06 -1.0055633e-05 10.381741 + 2000 0.00071844253 -0.00038465525 4.9242922e-05 -2.3157129e-05 -1.7381528e-05 10.36989 + 2100 0.00070212224 -0.00039396945 4.380536e-05 -3.3139297e-05 -2.5812742e-05 10.359806 + 2200 0.00068509947 -0.00038059464 4.1430464e-05 -2.8642858e-05 -3.0274798e-05 10.348131 + 2300 0.00066204726 -0.00037290268 4.0755035e-05 -2.4099531e-05 -2.31417e-05 10.341529 + 2400 0.00066390231 -0.00040132712 3.7909178e-05 -1.1313567e-05 -4.0596624e-06 10.325887 + 2500 0.00067466471 -0.00036822838 3.3769672e-05 8.9955187e-06 7.2249524e-06 10.307692 + 2600 0.00063522312 -0.00040169247 3.3473414e-05 1.7842262e-05 1.8667217e-05 10.294388 + 2700 0.00071914116 -0.00044796394 4.069137e-05 2.9483289e-05 4.2250507e-05 10.234934 + 2800 0.00070369013 -0.00044931969 3.1275752e-05 2.9033491e-05 3.9770684e-05 10.200721 + 2900 0.00070512114 -0.00042845959 3.0186471e-05 2.5771984e-05 2.4348678e-05 10.177838 + 3000 0.00069482317 -0.00044283829 3.3405984e-05 2.3415957e-05 2.2902999e-05 10.142896 + 3100 0.00066723285 -0.00047945243 3.209325e-05 1.0654925e-05 2.0497587e-05 10.122195 + 3200 0.00064836823 -0.00051480546 3.036046e-05 3.5029031e-06 1.1456758e-05 10.099135 + 3300 0.00062844846 -0.0005036651 2.8409131e-05 -9.8098376e-06 -4.684996e-06 10.090311 + 3400 0.00060808824 -0.00051335015 2.8585528e-05 -1.299304e-05 -1.042155e-05 10.085279 + 3500 0.00060141771 -0.00053944948 3.3073003e-05 -1.4007198e-05 -1.4890004e-05 10.076632 + 3600 0.00058955439 -0.00058831267 3.3193604e-05 -1.4717218e-05 -2.0169028e-05 10.067983 + 3700 0.00057562588 -0.00053594395 3.1855934e-05 -1.2759241e-05 -1.778831e-05 10.06007 + 3800 0.00056288488 -0.0005584841 3.0312862e-05 -9.7942798e-06 -1.5748733e-05 10.058818 + 3900 0.0005587151 -0.00057123887 3.0257207e-05 -7.8343432e-06 -1.1945945e-05 10.056117 + 4000 0.00055252357 -0.00056341012 3.0643644e-05 -3.5123196e-06 -7.6221264e-06 10.055766 + 4100 0.00054746835 -0.0006001176 3.0871838e-05 3.1185521e-06 -2.7579162e-06 10.053254 + 4200 0.00055406659 -0.00058858425 3.4129718e-05 1.0050578e-05 5.7346642e-06 10.040079 + 4300 0.00055197755 -0.00060160199 3.2641549e-05 1.5817736e-05 9.4864214e-06 10.035028 + 4400 0.00054566896 -0.00064016609 3.3944385e-05 2.157204e-05 6.1187523e-06 10.036121 + 4500 0.00054060111 -0.00065952834 3.3119093e-05 2.4172484e-05 4.9459325e-06 10.03685 + 4600 0.00054065729 -0.00066744113 3.223805e-05 2.3503537e-05 9.0427401e-06 10.035405 + 4700 0.00054098427 -0.00064504776 3.2037001e-05 1.926565e-05 1.0546415e-05 10.034501 + 4800 0.00054141253 -0.00068174982 3.1935667e-05 1.2727978e-05 8.8624733e-06 10.033418 + 4900 0.00054027919 -0.00064378606 3.1759404e-05 7.3709768e-06 8.0812107e-06 10.035601 + 5000 0.00053821803 -0.00064717177 3.1834908e-05 5.5119444e-06 5.2280812e-06 10.036692 + 5100 0.00053536579 -0.00066007859 3.2403937e-05 4.0857527e-06 -1.5295741e-07 10.037419 + 5200 0.00053648695 -0.00063942795 3.2383043e-05 1.6197156e-07 -4.7369656e-06 10.038326 + 5300 0.00053622807 -0.00064591007 3.329864e-05 -1.7924131e-06 -6.7951652e-06 10.039233 + 5400 0.00053960407 -0.0006173041 3.3993069e-05 -1.7932927e-06 -6.0531078e-06 10.03779 + 5500 0.00053796949 -0.00063172209 3.4211179e-05 -3.0279549e-06 -6.3779479e-06 10.036344 + 5600 0.00053754609 -0.00065574707 3.4750932e-05 -5.5906378e-06 -8.8682325e-06 10.03689 + 5700 0.00053800964 -0.00067017804 3.4577555e-05 -8.2489481e-06 -1.0448862e-05 10.036528 + 5800 0.00053783078 -0.00062551374 3.516311e-05 -9.7501091e-06 -1.0484624e-05 10.037074 + 5900 0.00053771802 -0.00063683303 3.536403e-05 -1.0978806e-05 -1.1331075e-05 10.038889 + 6000 0.00053818926 -0.0006480219 3.556216e-05 -1.1313579e-05 -1.2936664e-05 10.038889 + 6100 0.00053847422 -0.0006368473 3.5618731e-05 -9.846739e-06 -1.2685058e-05 10.038709 + 6200 0.00053845201 -0.00063840856 3.5837807e-05 -7.1875428e-06 -1.1762856e-05 10.038709 + 6300 0.00053667612 -0.00066242577 3.6073709e-05 -4.7480116e-06 -1.1847933e-05 10.039616 + 6400 0.00053622069 -0.00068157063 3.6102907e-05 -2.6083138e-06 -1.0659141e-05 10.039616 + 6500 0.00053523267 -0.00069280776 3.6305856e-05 6.3043373e-07 -7.1642325e-06 10.041433 + 6600 0.0005330839 -0.00066567528 3.6114434e-05 3.5272096e-06 -2.960556e-06 10.042888 + 6700 0.00053197306 -0.00066248792 3.6043626e-05 5.2775896e-06 2.4477165e-07 10.043254 + 6800 0.00053144495 -0.00069604723 3.6046963e-05 6.4421403e-06 5.1877078e-07 10.040901 + 6900 0.00053079408 -0.00068001276 3.5639415e-05 7.9689078e-06 -4.083361e-07 10.040177 + 7000 0.00053012176 -0.00068635527 3.5599595e-05 8.9040006e-06 -4.4296434e-07 10.039996 + 7100 0.00052958544 -0.00067840066 3.5846725e-05 8.6942859e-06 2.6834024e-06 10.040543 + 7200 0.00052858813 -0.00068968438 3.5554886e-05 6.0568352e-06 4.7776634e-06 10.041271 + 7300 0.00052845993 -0.00070888583 3.5468591e-05 1.4110758e-06 5.6592858e-06 10.040909 + 7400 0.00052678004 -0.00072652527 3.5417511e-05 -2.0145276e-06 6.3632678e-06 10.041818 + 7500 0.00052676205 -0.00072008847 3.5601092e-05 -4.5673532e-06 7.3467401e-06 10.041455 +Loop time of 17.1712 on 1 procs for 7500 steps with 11048 atoms + +Performance: 3773764.428 tau/day, 436.778 timesteps/s +99.5% 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.3271 | 2.3271 | 2.3271 | 0.0 | 13.55 +Bond | 5.8378 | 5.8378 | 5.8378 | 0.0 | 34.00 +Neigh | 4.42 | 4.42 | 4.42 | 0.0 | 25.74 +Comm | 0.07213 | 0.07213 | 0.07213 | 0.0 | 0.42 +Output | 0.064105 | 0.064105 | 0.064105 | 0.0 | 0.37 +Modify | 4.3202 | 4.3202 | 4.3202 | 0.0 | 25.16 +Other | | 0.1298 | | | 0.76 + +Nlocal: 11048.0 ave 11048 max 11048 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0.00000 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 46555.0 ave 46555 max 46555 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 46555 +Ave neighs/atom = 4.2138849 +Ave special neighs/atom = 10.041455 +Neighbor list builds = 732 +Dangerous builds = 710 +Total wall time: 0:00:17 diff --git a/examples/bpm/impact/log.30Jul2021.pour.g++1.4 b/examples/bpm/impact/log.30Jul2021.pour.g++1.4 deleted file mode 100644 index 300ac271eb..0000000000 --- a/examples/bpm/impact/log.30Jul2021.pour.g++1.4 +++ /dev/null @@ -1,241 +0,0 @@ -LAMMPS (30 Jul 2021) -units lj -dimension 3 -boundary m m m -atom_style sphere/bpm -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.0 -Lattice spacing in x,y,z = 1.5874011 1.5874011 1.5874011 -region box block -5 15 -20 20 -20 20 -create_box 1 box bond/types 2 extra/bond/per/atom 20 extra/special/per/atom 50 -Created orthogonal box = (-7.9370053 -31.748021 -31.748021) to (23.811016 31.748021 31.748021) - 1 by 2 by 2 MPI processor grid - -region disk cylinder x 0.0 0.0 20.0 -0.5 0.5 -create_atoms 1 region disk -Created 7527 atoms - using lattice units in orthogonal box = (-7.9370053 -31.748021 -31.748021) to (23.811016 31.748021 31.748021) - create_atoms CPU = 0.002 seconds -group plate region disk -7527 atoms in group plate - -region ball sphere 8.0 0.0 0.0 6.0 -create_atoms 1 region ball -Created 3589 atoms - using lattice units in orthogonal box = (-7.9370053 -31.748021 -31.748021) to (23.811016 31.748021 31.748021) - create_atoms CPU = 0.001 seconds -group projectile region ball -3589 atoms in group projectile - -displace_atoms all random 0.1 0.1 0.1 134598738 -Displacing atoms ... - -neighbor 1.0 bin -pair_style gran/hooke/history 1.0 NULL 0.5 NULL 0.1 1 -bond_style bpm/rotational store/local 2 time id1 id2 -pair_coeff 1 1 -bond_coeff 1 1.0 0.2 0.02 0.02 0.05 0.01 0.01 0.01 0.1 0.02 0.002 0.002 -bond_coeff 2 1.0 0.2 0.02 0.02 0.20 0.04 0.04 0.04 0.1 0.02 0.002 0.002 - -fix 1 all nve/sphere/bpm -fix 2 all store/local 100 3 -fix 3 all update/special/bonds - -create_bonds many plate plate 1 0.0 1.5 -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2.6 - binsize = 1, bins = 32 64 64 - 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 gran/hooke/history, perpetual - attributes: half, newton on, size, history - pair build: half/size/bin/newton - stencil: half/bin/3d - bin: standard -Added 38551 bonds, new total = 38551 -Finding 1-2 1-3 1-4 neighbors ... - special bond factors lj: 0 1 1 - special bond factors coul: 0 1 1 - 15 = max # of 1-2 neighbors - 101 = max # of special neighbors - special bonds CPU = 0.002 seconds -create_bonds many projectile projectile 2 0.0 1.5 -Added 21869 bonds, new total = 60420 -Finding 1-2 1-3 1-4 neighbors ... - special bond factors lj: 0 1 1 - special bond factors coul: 0 1 1 - 16 = max # of 1-2 neighbors - 101 = max # of special neighbors - special bonds CPU = 0.002 seconds -change_box all boundary s s s -Changing box ... - -neighbor 0.3 bin -special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0 - -velocity projectile set -0.05 0.0 0.0 -compute nbond all nbond/atom -compute tbond all reduce sum c_nbond - -timestep 0.05 -thermo_style custom step ke pe pxx pyy pzz c_tbond -thermo 100 -dump 1 all custom 100 atomDump id radius x y z c_nbond - -dump 2 all local 100 brokenDump f_2[1] f_2[2] f_2[3] -dump_modify 2 header no - -run 10000 -Neighbor list info ... - update every 1 steps, delay 10 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 = 36 97 97 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair gran/hooke/history, perpetual - attributes: half, newton on, size, history - pair build: half/size/bin/newton - stencil: half/bin/3d - bin: standard -Per MPI rank memory allocation (min/avg/max) = 34.27 | 34.28 | 34.28 Mbytes -Step KinEng PotEng Pxx Pyy Pzz c_tbond - 0 0.00053248439 -5.4354084 0.00012848545 -1.0639387e-19 1.5819554e-19 10.870817 - 100 0.00053248439 -5.4354084 0.00013017373 1.1334839e-12 1.784281e-12 10.870817 - 200 0.00053248439 -5.4354084 0.00013279102 1.6787387e-12 5.4953548e-13 10.870817 - 300 0.00053248439 -5.4354084 0.00013459514 3.0577302e-12 -1.2088316e-12 10.870817 - 400 0.00053248439 -5.4354084 0.00013739515 9.7326931e-13 1.1562543e-12 10.870817 - 500 0.00053111833 -5.4353812 0.00013532154 -1.8602155e-06 -1.6702711e-06 10.870817 - 600 0.00051558884 -5.4335908 5.8899364e-05 -2.4651157e-05 -2.6584555e-05 10.868838 - 700 0.0005013055 -5.4216397 -7.255462e-05 -2.8970044e-05 -4.1925574e-05 10.850846 - 800 0.00049878634 -5.3947446 5.6196335e-05 1.8649508e-05 8.9976433e-06 10.803706 - 900 0.00049589843 -5.3619596 0.00020821095 -7.7726675e-05 -8.6749853e-05 10.737855 - 1000 0.00049487709 -5.3376233 0.00017638288 -2.8676423e-05 -4.5487748e-05 10.683879 - 1100 0.00048720924 -5.3283688 4.0171402e-05 0.0001406456 0.00014483 10.662648 - 1200 0.00048274004 -5.3195134 7.4824656e-06 7.4411513e-05 0.00010365246 10.643397 - 1300 0.00047990668 -5.3127593 0.00018114159 -2.9205108e-05 1.1366149e-05 10.629723 - 1400 0.00048034109 -5.3084824 0.000147425 -6.2432251e-05 -3.8277687e-05 10.620187 - 1500 0.00047225373 -5.3024141 8.6252599e-07 2.4082822e-05 3.049023e-05 10.608492 - 1600 0.00045698513 -5.2972292 1.0763242e-05 4.1148987e-05 2.83019e-05 10.599676 - 1700 0.00044854655 -5.2896066 0.00010217014 -6.9430229e-05 -9.6661607e-05 10.587262 - 1800 0.00044929529 -5.2775304 0.00010981512 -8.0553726e-05 -0.00011931185 10.562972 - 1900 0.00044441992 -5.2650251 1.8882842e-05 1.0491309e-05 -3.879472e-05 10.540842 - 2000 0.00043947002 -5.2484561 4.4869915e-05 6.8824059e-05 3.5808833e-05 10.511155 - 2100 0.00043372382 -5.2265524 0.00013970367 1.6484426e-05 2.2785645e-05 10.469054 - 2200 0.00043174768 -5.2069377 9.4662371e-05 2.2278647e-06 3.5962708e-05 10.427852 - 2300 0.0004270123 -5.1924656 2.3188212e-05 6.1522399e-06 7.4262622e-05 10.396006 - 2400 0.00042569191 -5.1848751 5.7811979e-05 2.7124197e-05 0.0001072424 10.378733 - 2500 0.00042259717 -5.1758217 0.00013069307 3.3656662e-05 0.00010197635 10.359482 - 2600 0.00042271375 -5.1700793 9.5183077e-05 5.3232578e-05 8.9912385e-05 10.347787 - 2700 0.00042252395 -5.1628759 2.6305437e-05 6.7644983e-05 7.7095778e-05 10.332674 - 2800 0.00042123755 -5.1549973 6.5875753e-05 2.8392569e-05 2.8079356e-05 10.315941 - 2900 0.00042132346 -5.1508594 0.00011264272 6.3410829e-06 -2.1983564e-05 10.306405 - 3000 0.00042343054 -5.1495182 7.3503612e-05 3.8773748e-05 -9.519275e-06 10.301547 - 3100 0.00042220412 -5.1483831 2.5233575e-05 5.0076476e-05 3.938746e-06 10.299568 - 3200 0.00042303815 -5.1466902 6.1939664e-05 -9.1346169e-06 -2.5920911e-05 10.29651 - 3300 0.00042000178 -5.144782 9.8814555e-05 -4.04749e-05 -4.2876825e-05 10.292371 - 3400 0.00041874209 -5.1416065 5.1246647e-05 -2.7877246e-05 -3.225052e-05 10.286254 - 3500 0.00041582277 -5.1397016 2.0053694e-05 -3.5797833e-05 -1.536015e-05 10.282296 - 3600 0.00041607097 -5.139236 6.0675623e-05 -5.7232123e-05 -3.1162791e-05 10.281036 - 3700 0.00041445536 -5.1373913 8.7909083e-05 -4.1136114e-05 -5.2627526e-05 10.277978 - 3800 0.0004147342 -5.1323122 4.6324048e-05 7.0253754e-06 -3.3511914e-05 10.268442 - 3900 0.00041446917 -5.1294358 2.8646507e-05 1.5201733e-05 -1.13759e-05 10.262504 - 4000 0.00041346205 -5.1250314 6.540586e-05 -1.17595e-05 -2.8050171e-05 10.254948 - 4100 0.00041230785 -5.1219436 7.9364924e-05 -4.1504333e-06 -2.2530525e-05 10.248111 - 4200 0.00041198555 -5.1177883 4.3515184e-05 1.5227343e-05 -6.3707934e-06 10.240014 - 4300 0.0004111489 -5.1134893 2.8350236e-05 2.0718016e-06 1.2010375e-05 10.231558 - 4400 0.00041090623 -5.1104369 6.2460747e-05 -2.5959985e-05 7.8242641e-07 10.224901 - 4500 0.00040944466 -5.1085221 6.7135567e-05 -1.7699087e-05 -4.7022089e-06 10.220943 - 4600 0.00040810594 -5.1065034 3.5212952e-05 1.3568365e-05 1.3875486e-05 10.217704 - 4700 0.00040810646 -5.1039941 3.3409499e-05 1.7215022e-05 2.8204859e-05 10.212487 - 4800 0.0004074837 -5.1015741 5.5792503e-05 1.9563116e-06 1.823506e-06 10.207089 - 4900 0.00040677077 -5.0987121 5.6695901e-05 8.2729584e-06 -1.2713008e-05 10.201871 - 5000 0.00040636045 -5.0961728 3.0704198e-05 2.2141861e-05 8.2099332e-06 10.196474 - 5100 0.00040606831 -5.0947673 3.1281394e-05 7.0864149e-06 2.0262936e-05 10.193055 - 5200 0.00040652265 -5.0940213 5.2610835e-05 -1.2888854e-05 3.0894446e-06 10.191076 - 5300 0.00040642029 -5.0931407 4.6148958e-05 -9.5544284e-06 -6.047443e-06 10.189457 - 5400 0.00040642806 -5.0915733 2.59528e-05 -3.3035524e-06 1.026995e-05 10.186038 - 5500 0.00040686546 -5.0908 2.9026708e-05 -9.0382082e-06 1.4643294e-05 10.184059 - 5600 0.0004064361 -5.0908057 4.6731327e-05 -1.2664731e-05 -2.6232887e-06 10.183339 - 5700 0.00040629203 -5.0903044 4.0856223e-05 -1.2201759e-06 -1.3169401e-05 10.18262 - 5800 0.00040637688 -5.0890571 2.2625249e-05 8.7645385e-06 -6.2486963e-06 10.180281 - 5900 0.00040613721 -5.0874767 2.8382883e-05 2.4072343e-06 2.0419388e-07 10.176862 - 6000 0.00040668084 -5.0865465 4.3602089e-05 -5.4962058e-06 -4.5087421e-06 10.174523 - 6100 0.00040707325 -5.0865389 3.4958823e-05 -2.0750124e-06 -1.6708517e-06 10.174343 - 6200 0.00040691768 -5.0863974 2.1602821e-05 3.1566836e-06 1.0526645e-05 10.174343 - 6300 0.00040705673 -5.0862887 2.9412395e-05 9.2283412e-07 1.4273225e-05 10.173983 - 6400 0.00040648035 -5.0860509 3.9684464e-05 -1.663237e-06 3.9771927e-06 10.173624 - 6500 0.00040710623 -5.0861041 3.1078617e-05 1.732822e-06 3.4003409e-06 10.173624 - 6600 0.00040665879 -5.0857907 2.0693771e-05 3.3053846e-06 1.2181329e-05 10.173264 - 6700 0.00040650151 -5.0854203 2.8479998e-05 2.7244033e-06 9.7566436e-06 10.172364 - 6800 0.00040635649 -5.0851816 3.5150661e-05 1.6906684e-06 -6.155957e-06 10.171644 - 6900 0.00040670804 -5.0848974 2.4632227e-05 2.9367001e-06 -1.0691056e-05 10.171105 - 7000 0.00040693354 -5.0843039 1.8740741e-05 6.024808e-06 4.2065619e-07 10.169665 - 7100 0.00040728228 -5.0843393 2.7137965e-05 5.5506702e-06 5.5908974e-06 10.169665 - 7200 0.0004074084 -5.0842875 3.0307934e-05 2.0170793e-06 -2.4296651e-06 10.169485 - 7300 0.00040723509 -5.0843468 2.1465618e-05 1.9642493e-06 -3.6022271e-06 10.169485 - 7400 0.00040756027 -5.0843623 1.6801323e-05 -1.9748948e-06 1.4205345e-06 10.169306 - 7500 0.00040829979 -5.0843202 2.4772881e-05 -6.1251363e-06 2.0247483e-06 10.169126 - 7600 0.00040822994 -5.0843182 2.7272667e-05 -3.0357928e-06 4.894101e-07 10.169126 - 7700 0.00040831723 -5.0843052 1.9410405e-05 3.6094291e-06 1.5451381e-06 10.169126 - 7800 0.00040868149 -5.0843706 1.6484224e-05 3.3901782e-06 3.9911363e-06 10.169126 - 7900 0.00040872521 -5.0843735 2.2844838e-05 2.8813595e-06 1.4869802e-06 10.169126 - 8000 0.00040853749 -5.0843239 2.3537039e-05 5.1951501e-06 -1.2448734e-06 10.169126 - 8100 0.00040812899 -5.0842554 1.6947117e-05 7.5128919e-06 -1.0877933e-06 10.168946 - 8200 0.00040812313 -5.0842813 1.5639254e-05 3.6719094e-06 -9.3497783e-07 10.168946 - 8300 0.00040817027 -5.0842752 2.0634335e-05 2.5358492e-07 -3.2726598e-06 10.168946 - 8400 0.00040774138 -5.084215 2.0224447e-05 1.3696075e-06 -3.3568279e-06 10.168766 - 8500 0.00040760502 -5.0842 1.4541525e-05 9.3556598e-07 1.1823477e-06 10.168766 - 8600 0.00040756971 -5.0841463 1.4460781e-05 -2.7822738e-06 4.3070092e-06 10.168766 - 8700 0.00040706312 -5.0840255 1.8278276e-05 -5.20189e-06 1.0784628e-06 10.168766 - 8800 0.00040670111 -5.0839094 1.7116511e-05 -9.4769204e-07 -3.2089738e-06 10.168586 - 8900 0.00040617439 -5.0838164 1.3315166e-05 3.2313582e-06 -2.3144297e-06 10.168586 - 9000 0.00040576758 -5.0837468 1.3898828e-05 1.5947021e-06 -2.0719014e-06 10.168586 - 9100 0.00040577217 -5.0837244 1.6547097e-05 1.1667189e-06 -3.2056138e-06 10.168406 - 9200 0.00040615545 -5.0837984 1.4946269e-05 4.3601683e-06 -2.1585248e-06 10.168406 - 9300 0.00040638526 -5.083836 1.1737091e-05 5.1607613e-06 7.2161152e-07 10.168406 - 9400 0.0004062125 -5.0838558 1.2486756e-05 1.9996225e-06 1.6192477e-06 10.168406 - 9500 0.00040627984 -5.0839239 1.441806e-05 -6.6274154e-07 -2.9396969e-07 10.168406 - 9600 0.0004065461 -5.0839109 1.3189089e-05 -5.1486848e-07 4.6653236e-07 10.168406 - 9700 0.00040642188 -5.0838722 1.0626956e-05 -1.7580535e-06 2.8200944e-06 10.168226 - 9800 0.0004061705 -5.0838326 1.1280802e-05 -3.4868266e-06 2.7287279e-06 10.168226 - 9900 0.00040666798 -5.0835647 1.2432396e-05 -2.8727154e-06 1.4556152e-07 10.167686 - 10000 0.00040675506 -5.0831833 1.0832242e-05 4.3061564e-07 -4.1422229e-07 10.166967 -Loop time of 48.2068 on 4 procs for 10000 steps with 11116 atoms - -Performance: 896139.501 tau/day, 207.440 timesteps/s -97.7% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.39096 | 0.42232 | 0.45519 | 4.6 | 0.88 -Bond | 30.522 | 33.954 | 38.166 | 51.7 | 70.43 -Neigh | 1.1822 | 1.1872 | 1.1915 | 0.3 | 2.46 -Comm | 3.4201 | 7.9545 | 11.664 | 115.6 | 16.50 -Output | 1.0078 | 1.0085 | 1.0099 | 0.1 | 2.09 -Modify | 3.0972 | 3.3841 | 3.7307 | 14.3 | 7.02 -Other | | 0.2958 | | | 0.61 - -Nlocal: 2779.00 ave 4159 max 1635 min -Histogram: 2 0 0 0 0 0 0 1 0 1 -Nghost: 1002.00 ave 1229 max 800 min -Histogram: 1 1 0 0 0 0 0 1 0 1 -Neighs: 11431.8 ave 18381 max 6059 min -Histogram: 2 0 0 0 0 0 1 0 0 1 - -Total # of neighbors = 45727 -Ave neighs/atom = 4.1136200 -Ave special neighs/atom = 10.166967 -Neighbor list builds = 637 -Dangerous builds = 0 -Total wall time: 0:00:48 diff --git a/src/.gitignore b/src/.gitignore index 1ed30868ab..a9de0c355a 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -257,8 +257,8 @@ /bond_bpm.h /bond_bpm_rotational.cpp /bond_bpm_rotational.h -/bond_bpm_simple.cpp -/bond_bpm_simple.h +/bond_bpm_spring.cpp +/bond_bpm_spring.h /compute_nbond_atom.cpp /compute_nbond_atom.h /fix_bond_history.cpp diff --git a/src/BPM/bond_bpm_spring.cpp b/src/BPM/bond_bpm_spring.cpp new file mode 100644 index 0000000000..7effb8ae48 --- /dev/null +++ b/src/BPM/bond_bpm_spring.cpp @@ -0,0 +1,338 @@ +// clang-format off +/* ---------------------------------------------------------------------- + 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 "bond_bpm_spring.h" + +#include "atom.h" +#include "comm.h" +#include "domain.h" +#include "error.h" +#include "fix_bond_history.h" +#include "force.h" +#include "math_const.h" +#include "math_extra.h" +#include "memory.h" +#include "modify.h" +#include "neighbor.h" +#include "pair.h" + +#include +#include +#include + +#define EPSILON 1e-10 + +using namespace LAMMPS_NS; +using namespace MathExtra; + +/* ---------------------------------------------------------------------- */ + +BondBPMSpring::BondBPMSpring(LAMMPS *lmp) : BondBPM(lmp) +{ + partial_flag = 1; +} + +/* ---------------------------------------------------------------------- */ + +BondBPMSpring::~BondBPMSpring() +{ + if (fix_bond_history) modify->delete_fix("BOND_HISTORY_BPM_SPRING"); + + if (allocated) { + memory->destroy(setflag); + memory->destroy(k); + memory->destroy(ecrit); + memory->destroy(gamma); + } +} + +/* ---------------------------------------------------------------------- + Store data for a single bond - if bond added after LAMMPS init (e.g. pour) +------------------------------------------------------------------------- */ + +double BondBPMSpring::store_bond(int n,int i,int j) +{ + int m,k; + 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 (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); + } + } + } + + if (j < atom->nlocal) { + for (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); + } + } + } + + return r; +} + +/* ---------------------------------------------------------------------- + Store data for all bonds called once +------------------------------------------------------------------------- */ + +void BondBPMSpring::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->post_neighbor(); +} + +/* ---------------------------------------------------------------------- */ + +void BondBPMSpring::compute(int eflag, int vflag) +{ + + if (! fix_bond_history->stored_flag) { + fix_bond_history->stored_flag = true; + store_data(); + } + + int i1,i2,itmp,m,n,type,itype,jtype; + double delx, dely, delz, delvx, delvy, delvz; + double e, rsq, r, r0, rinv, smooth, fbond, dot; + + ev_init(eflag,vflag); + + if (vflag_global == 2) + force->pair->vflag_either = force->pair->vflag_global = 1; + + double **cutsq = force->pair->cutsq; + 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]; + + 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]) { + bondlist[n][2] = 0; + process_broken(i1, i2); + continue; + } + + rinv = 1.0/r; + fbond = -k[type]*(r-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; + + smooth = (r-r0)/(r0*ecrit[type]); + smooth *= smooth; + smooth *= smooth; + smooth = 1 - smooth; + + fbond *= rinv*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); + } +} + +/* ---------------------------------------------------------------------- */ + +void BondBPMSpring::allocate() +{ + allocated = 1; + int n = atom->nbondtypes; + + memory->create(k,n+1,"bond:k"); + memory->create(ecrit,n+1,"bond:ecrit"); + memory->create(gamma,n+1,"bond:gamma"); + + memory->create(setflag,n+1,"bond:setflag"); + for (int i = 1; i <= n; i++) setflag[i] = 0; +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more types +------------------------------------------------------------------------- */ + +void BondBPMSpring::coeff(int narg, char **arg) +{ + if (narg != 4) 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); + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + k[i] = k_one; + ecrit[i] = ecrit_one; + gamma[i] = gamma_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 if pair defined and special_bond settings are valid +------------------------------------------------------------------------- */ + +void BondBPMSpring::init_style() +{ + BondBPM::init_style(); + + if (comm->ghost_velocity == 0) + error->all(FLERR,"Bond bpm/spring requires ghost atoms store velocity"); + + if (!fix_bond_history) + fix_bond_history = (FixBondHistory *) modify->add_fix( + "BOND_HISTORY_BPM_SPRING all BOND_HISTORY 0 1"); +} + +/* ---------------------------------------------------------------------- + proc 0 writes out coeffs to restart file +------------------------------------------------------------------------- */ + +void BondBPMSpring::write_restart(FILE *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); +} + +/* ---------------------------------------------------------------------- + proc 0 reads coeffs from restart file, bcasts them +------------------------------------------------------------------------- */ + +void BondBPMSpring::read_restart(FILE *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); + } + 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); + + for (int i = 1; i <= atom->nbondtypes; i++) setflag[i] = 1; +} + +/* ---------------------------------------------------------------------- + proc 0 writes to data file +------------------------------------------------------------------------- */ + +void BondBPMSpring::write_data(FILE *fp) +{ + for (int i = 1; i <= atom->nbondtypes; i++) + fprintf(fp,"%d %g %g %g\n", i,k[i],ecrit[i],gamma[i]); +} + +/* ---------------------------------------------------------------------- */ + +double BondBPMSpring::single(int type, double rsq, int i, int j, + double &fforce) +{ + // Not yet enabled + if (type <= 0) return 0.0; + + //double r0; + //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); + // } + //} +} diff --git a/src/BPM/bond_bpm_spring.h b/src/BPM/bond_bpm_spring.h new file mode 100644 index 0000000000..284e32dce1 --- /dev/null +++ b/src/BPM/bond_bpm_spring.h @@ -0,0 +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 + +*/ From 0f2bebdb9b07127f070b3657410cad6ddaf354fd Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Fri, 24 Sep 2021 10:45:46 -0600 Subject: [PATCH 06/40] Adding bpm/spring pairstyle, misc small edits --- doc/src/Howto_bpm.rst | 4 + doc/src/Packages_details.rst | 1 + doc/src/bond_bpm_spring.rst | 13 +- doc/src/pair_bpm_spring.rst | 96 +++++ examples/bpm/impact/impact_spring_bpm.lmp | 4 +- .../impact/log.30Jul2021.impact_simple.g++1.4 | 220 ----------- .../impact/log.30Jul2021.impact_spring.g++1.4 | 218 +++++++++++ src/.gitignore | 3 + src/BPM/bond_bpm_rotational.cpp | 3 - src/BPM/bond_bpm_spring.cpp | 16 +- src/BPM/pair_bpm_spring.cpp | 344 ++++++++++++++++++ src/BPM/pair_bpm_spring.h | 64 ++++ 12 files changed, 746 insertions(+), 240 deletions(-) create mode 100755 doc/src/pair_bpm_spring.rst delete mode 100644 examples/bpm/impact/log.30Jul2021.impact_simple.g++1.4 create mode 100644 examples/bpm/impact/log.30Jul2021.impact_spring.g++1.4 create mode 100644 src/BPM/pair_bpm_spring.cpp create mode 100644 src/BPM/pair_bpm_spring.h diff --git a/doc/src/Howto_bpm.rst b/doc/src/Howto_bpm.rst index 38ae021cc3..020b57821a 100644 --- a/doc/src/Howto_bpm.rst +++ b/doc/src/Howto_bpm.rst @@ -75,3 +75,7 @@ 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. + +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/Packages_details.rst b/doc/src/Packages_details.rst index 2a2d9a2412..fed33a054e 100644 --- a/doc/src/Packages_details.rst +++ b/doc/src/Packages_details.rst @@ -308,6 +308,7 @@ models for mesoscale simulations of solids and fracture. See the * :doc:`compute nbonds/atom ` * :doc:`fix nve/sphere/bpm ` * :doc:`fix update/special/bonds ` +* :doc:`pair_style bpm/spring ` * examples/bpm ---------- diff --git a/doc/src/bond_bpm_spring.rst b/doc/src/bond_bpm_spring.rst index 52954c4fd2..1a67c09a70 100644 --- a/doc/src/bond_bpm_spring.rst +++ b/doc/src/bond_bpm_spring.rst @@ -51,7 +51,7 @@ has a magnitude of .. math:: - f = k (r - r_0) w + 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` @@ -66,16 +66,16 @@ go to zero, avoiding discontinuities, as bonds approach the critical strain w = 1.0 - \left( \frac{r - r_0}{r_0 \epsilon_c} \right^4 . -Finally, additional damping forces and torques are applied to the two -particles. A force is applied 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) `): .. math:: - F_D = - \gamma_n w (\hat{r} \bullet \vec{v}) + F_D = - \gamma w (\hat{r} \bullet \vec{v}) -where :math:`\gamma_n` is the damping strength, :math:`\hat{r}` is the +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. @@ -130,7 +130,8 @@ be turned off using the :doc:`special_bonds ` command. Related commands """""""""""""""" -:doc:`bond_coeff `, :doc:`fix store/local ` +:doc:`bond_coeff `, :doc:`fix store/local `, +:doc:`pair bpm/spring ` Default """"""" diff --git a/doc/src/pair_bpm_spring.rst b/doc/src/pair_bpm_spring.rst new file mode 100755 index 0000000000..19bb987ae3 --- /dev/null +++ b/doc/src/pair_bpm_spring.rst @@ -0,0 +1,96 @@ +.. index:: pair_style bpm/spring + +pair_style bpm/spring command +======================= + +Syntax +"""""" + +.. code-block:: LAMMPS + + pair_style bpm/spring + +Examples +"""""""" + +.. code-block:: LAMMPS + + pair_style bpm/spring + pair_coeff * * 1.0 1.0 1.0 + pair_coeff 1 1 1.0 1.0 1.0 + +Description +""""""""""" + +Style *bpm/spring* computes pairwise forces with the formula + +.. math:: + + F = k (r - r_c) + +where :math:`k` is a stiffness and :math:`r_c` is the cutoff length. +An additional damping force is also applied to interacting +particles. The force 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. + +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. + +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: + +* :math:`k` (force/distance units) +* :math:`r_c` (distance units) +* :math:`\gamma` (force/velocity units) + + +---------- + +Mixing, shift, table, tail correction, restart, rRESPA info +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +For atom type pairs I,J and I != J, the A coefficient and cutoff +distance for this pair style can be mixed. A 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 does not support the :doc:`pair_modify ` +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 can only be used via the *pair* keyword of the +:doc:`run_style respa ` command. It does not support the +*inner*, *middle*, *outer* keywords. + +---------- + +Restrictions +"""""""""""" + none + +Related commands +"""""""""""""""" + +:doc:`pair_coeff `, :doc:`bond bpm/spring ` + +Default +""""""" + +none diff --git a/examples/bpm/impact/impact_spring_bpm.lmp b/examples/bpm/impact/impact_spring_bpm.lmp index 09c474c61e..bbb968bee2 100644 --- a/examples/bpm/impact/impact_spring_bpm.lmp +++ b/examples/bpm/impact/impact_spring_bpm.lmp @@ -22,9 +22,9 @@ displace_atoms all random 0.1 0.1 0.1 134598738 mass 1 1.0 neighbor 1.0 bin -pair_style lj/cut 1.0 +pair_style bpm/spring bond_style bpm/spring store/local 2 time id1 id2 -pair_coeff 1 1 $(1/(18*PI)) $(2^(-1/6)) 1.0 +pair_coeff 1 1 1.0 1.0 1.0 bond_coeff 1 1.0 0.04 1.0 bond_coeff 2 1.0 0.20 1.0 diff --git a/examples/bpm/impact/log.30Jul2021.impact_simple.g++1.4 b/examples/bpm/impact/log.30Jul2021.impact_simple.g++1.4 deleted file mode 100644 index adb843ba93..0000000000 --- a/examples/bpm/impact/log.30Jul2021.impact_simple.g++1.4 +++ /dev/null @@ -1,220 +0,0 @@ -LAMMPS (30 Jul 2021) -units lj -dimension 3 -boundary f f f -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.0 -Lattice spacing in x,y,z = 1.5874011 1.5874011 1.5874011 -region box block -25 15 -22 22 -22 22 -create_box 1 box bond/types 2 extra/bond/per/atom 20 extra/special/per/atom 50 -Created orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) - 1 by 1 by 1 MPI processor grid - -region disk cylinder x 0.0 0.0 20.0 -0.5 0.5 -create_atoms 1 region disk -Created 7529 atoms - using lattice units in orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) - create_atoms CPU = 0.003 seconds -group plate region disk -7529 atoms in group plate - -region ball sphere 8.0 0.0 0.0 6.0 -create_atoms 1 region ball -Created 3589 atoms - using lattice units in orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) - create_atoms CPU = 0.002 seconds -group projectile region ball -3589 atoms in group projectile - -displace_atoms all random 0.1 0.1 0.1 134598738 -Displacing atoms ... - -mass 1 1.0 - -neighbor 1.0 bin -pair_style lj/cut 1.0 -bond_style bpm/spring store/local 2 time id1 id2 -pair_coeff 1 1 $(1/(18*PI)) $(2^(-1/6)) 1.0 -pair_coeff 1 1 0.017683882565766150669 $(2^(-1/6)) 1.0 -pair_coeff 1 1 0.017683882565766150669 0.89089871814033927411 1.0 -bond_coeff 1 1.0 0.04 1.0 -bond_coeff 2 1.0 0.20 1.0 - -fix 1 all nve -fix 2 all store/local 100 3 -fix 3 all update/special/bonds - -create_bonds many plate plate 1 0.0 1.5 -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2.6 - binsize = 1, bins = 64 70 70 - 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 lj/cut, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/3d - bin: standard -Added 38559 bonds, new total = 38559 -Finding 1-2 1-3 1-4 neighbors ... - special bond factors lj: 0 1 1 - special bond factors coul: 0 1 1 - 15 = max # of 1-2 neighbors - 101 = max # of special neighbors - special bonds CPU = 0.006 seconds -create_bonds many projectile projectile 2 0.0 1.5 -WARNING: Communication cutoff 2.6 is shorter than a bond length based estimate of 2.799982026012842. This may lead to errors. (../comm.cpp:734) -Added 21869 bonds, new total = 60428 -Finding 1-2 1-3 1-4 neighbors ... - special bond factors lj: 0 1 1 - special bond factors coul: 0 1 1 - 16 = max # of 1-2 neighbors - 101 = max # of special neighbors - special bonds CPU = 0.008 seconds - -neighbor 0.3 bin -special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0 - -velocity projectile set -0.05 0.0 0.0 -compute nbond all nbond/atom -compute tbond all reduce sum c_nbond - -timestep 0.1 -thermo_style custom step ke pe pxx pyy pzz c_tbond -thermo 100 -thermo_modify lost ignore lost/bond ignore -#dump 1 all custom 100 atomDump id x y z c_nbond - -dump 2 all local 100 brokenDump f_2[1] f_2[2] f_2[3] -dump_modify 2 header no - -run 7500 -Neighbor list info ... - update every 1 steps, delay 10 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 = 98 108 108 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/cut, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/3d - bin: standard -Per MPI rank memory allocation (min/avg/max) = 22.50 | 22.50 | 22.50 Mbytes -Step KinEng PotEng Pxx Pyy Pzz c_tbond - 0 0.0010167873 0 7.298968e-05 0 0 10.8703 - 100 0.0010167873 0 7.298968e-05 -8.7429897e-20 -8.8470837e-20 10.8703 - 200 0.0010167873 0 7.298968e-05 -7.2809565e-20 -8.0915788e-20 10.8703 - 300 0.0010019973 -5.3291343e-05 0.00010093361 8.6373038e-06 9.8886169e-06 10.862565 - 400 0.00096754254 -0.00013445443 0.00012114639 -1.0451037e-05 -1.3102312e-05 10.814535 - 500 0.00098230681 -0.0001559819 8.1573507e-05 1.0019714e-05 6.6044989e-06 10.765785 - 600 0.00099346016 -0.00021242987 7.8181991e-05 5.3246616e-06 6.7747639e-06 10.711999 - 700 0.00097743083 -0.00022519088 9.2593451e-05 -1.3368324e-05 -9.1024741e-06 10.683037 - 800 0.00097657062 -0.00025160598 7.6171833e-05 -3.6699488e-06 -3.156595e-06 10.648858 - 900 0.00096573642 -0.00030010781 7.221088e-05 2.7980135e-06 8.3953748e-06 10.602806 - 1000 0.00088967922 -0.00026225991 7.2273749e-05 -3.3180725e-06 1.7000133e-06 10.571429 - 1100 0.00086637472 -0.00028264644 6.1827699e-05 -2.5263518e-06 -8.804488e-07 10.550198 - 1200 0.00084322002 -0.00030067163 5.3193544e-05 -5.4186506e-06 -7.4414952e-07 10.528787 - 1300 0.00082546285 -0.00029621074 5.8387607e-05 -5.4986846e-07 2.1039469e-06 10.507017 - 1400 0.0008157657 -0.00031617563 5.8009972e-05 7.3256966e-06 4.560414e-06 10.481288 - 1500 0.00083393604 -0.00030638038 5.2255981e-05 1.4804765e-05 9.4914663e-06 10.451961 - 1600 0.00081285118 -0.00035496629 5.312358e-05 1.4502252e-05 1.3433953e-05 10.426849 - 1700 0.00078740406 -0.00034224637 5.0152957e-05 1.0822543e-05 1.1601587e-05 10.406767 - 1800 0.00076088167 -0.00039346684 5.0685628e-05 1.4591838e-05 6.8909935e-06 10.396831 - 1900 0.00073852613 -0.00040295897 4.9940437e-05 2.2598772e-06 -1.0055633e-05 10.381741 - 2000 0.00071844253 -0.00038465525 4.9242922e-05 -2.3157129e-05 -1.7381528e-05 10.36989 - 2100 0.00070212224 -0.00039396945 4.380536e-05 -3.3139297e-05 -2.5812742e-05 10.359806 - 2200 0.00068509947 -0.00038059464 4.1430464e-05 -2.8642858e-05 -3.0274798e-05 10.348131 - 2300 0.00066204726 -0.00037290268 4.0755035e-05 -2.4099531e-05 -2.31417e-05 10.341529 - 2400 0.00066390231 -0.00040132712 3.7909178e-05 -1.1313567e-05 -4.0596624e-06 10.325887 - 2500 0.00067466471 -0.00036822838 3.3769672e-05 8.9955187e-06 7.2249524e-06 10.307692 - 2600 0.00063522312 -0.00040169247 3.3473414e-05 1.7842262e-05 1.8667217e-05 10.294388 - 2700 0.00071914116 -0.00044796394 4.069137e-05 2.9483289e-05 4.2250507e-05 10.234934 - 2800 0.00070369013 -0.00044931969 3.1275752e-05 2.9033491e-05 3.9770684e-05 10.200721 - 2900 0.00070512114 -0.00042845959 3.0186471e-05 2.5771984e-05 2.4348678e-05 10.177838 - 3000 0.00069482317 -0.00044283829 3.3405984e-05 2.3415957e-05 2.2902999e-05 10.142896 - 3100 0.00066723285 -0.00047945243 3.209325e-05 1.0654925e-05 2.0497587e-05 10.122195 - 3200 0.00064836823 -0.00051480546 3.036046e-05 3.5029031e-06 1.1456758e-05 10.099135 - 3300 0.00062844846 -0.0005036651 2.8409131e-05 -9.8098376e-06 -4.684996e-06 10.090311 - 3400 0.00060808824 -0.00051335015 2.8585528e-05 -1.299304e-05 -1.042155e-05 10.085279 - 3500 0.00060141771 -0.00053944948 3.3073003e-05 -1.4007198e-05 -1.4890004e-05 10.076632 - 3600 0.00058955439 -0.00058831267 3.3193604e-05 -1.4717218e-05 -2.0169028e-05 10.067983 - 3700 0.00057562588 -0.00053594395 3.1855934e-05 -1.2759241e-05 -1.778831e-05 10.06007 - 3800 0.00056288488 -0.0005584841 3.0312862e-05 -9.7942798e-06 -1.5748733e-05 10.058818 - 3900 0.0005587151 -0.00057123887 3.0257207e-05 -7.8343432e-06 -1.1945945e-05 10.056117 - 4000 0.00055252357 -0.00056341012 3.0643644e-05 -3.5123196e-06 -7.6221264e-06 10.055766 - 4100 0.00054746835 -0.0006001176 3.0871838e-05 3.1185521e-06 -2.7579162e-06 10.053254 - 4200 0.00055406659 -0.00058858425 3.4129718e-05 1.0050578e-05 5.7346642e-06 10.040079 - 4300 0.00055197755 -0.00060160199 3.2641549e-05 1.5817736e-05 9.4864214e-06 10.035028 - 4400 0.00054566896 -0.00064016609 3.3944385e-05 2.157204e-05 6.1187523e-06 10.036121 - 4500 0.00054060111 -0.00065952834 3.3119093e-05 2.4172484e-05 4.9459325e-06 10.03685 - 4600 0.00054065729 -0.00066744113 3.223805e-05 2.3503537e-05 9.0427401e-06 10.035405 - 4700 0.00054098427 -0.00064504776 3.2037001e-05 1.926565e-05 1.0546415e-05 10.034501 - 4800 0.00054141253 -0.00068174982 3.1935667e-05 1.2727978e-05 8.8624733e-06 10.033418 - 4900 0.00054027919 -0.00064378606 3.1759404e-05 7.3709768e-06 8.0812107e-06 10.035601 - 5000 0.00053821803 -0.00064717177 3.1834908e-05 5.5119444e-06 5.2280812e-06 10.036692 - 5100 0.00053536579 -0.00066007859 3.2403937e-05 4.0857527e-06 -1.5295741e-07 10.037419 - 5200 0.00053648695 -0.00063942795 3.2383043e-05 1.6197156e-07 -4.7369656e-06 10.038326 - 5300 0.00053622807 -0.00064591007 3.329864e-05 -1.7924131e-06 -6.7951652e-06 10.039233 - 5400 0.00053960407 -0.0006173041 3.3993069e-05 -1.7932927e-06 -6.0531078e-06 10.03779 - 5500 0.00053796949 -0.00063172209 3.4211179e-05 -3.0279549e-06 -6.3779479e-06 10.036344 - 5600 0.00053754609 -0.00065574707 3.4750932e-05 -5.5906378e-06 -8.8682325e-06 10.03689 - 5700 0.00053800964 -0.00067017804 3.4577555e-05 -8.2489481e-06 -1.0448862e-05 10.036528 - 5800 0.00053783078 -0.00062551374 3.516311e-05 -9.7501091e-06 -1.0484624e-05 10.037074 - 5900 0.00053771802 -0.00063683303 3.536403e-05 -1.0978806e-05 -1.1331075e-05 10.038889 - 6000 0.00053818926 -0.0006480219 3.556216e-05 -1.1313579e-05 -1.2936664e-05 10.038889 - 6100 0.00053847422 -0.0006368473 3.5618731e-05 -9.846739e-06 -1.2685058e-05 10.038709 - 6200 0.00053845201 -0.00063840856 3.5837807e-05 -7.1875428e-06 -1.1762856e-05 10.038709 - 6300 0.00053667612 -0.00066242577 3.6073709e-05 -4.7480116e-06 -1.1847933e-05 10.039616 - 6400 0.00053622069 -0.00068157063 3.6102907e-05 -2.6083138e-06 -1.0659141e-05 10.039616 - 6500 0.00053523267 -0.00069280776 3.6305856e-05 6.3043373e-07 -7.1642325e-06 10.041433 - 6600 0.0005330839 -0.00066567528 3.6114434e-05 3.5272096e-06 -2.960556e-06 10.042888 - 6700 0.00053197306 -0.00066248792 3.6043626e-05 5.2775896e-06 2.4477165e-07 10.043254 - 6800 0.00053144495 -0.00069604723 3.6046963e-05 6.4421403e-06 5.1877078e-07 10.040901 - 6900 0.00053079408 -0.00068001276 3.5639415e-05 7.9689078e-06 -4.083361e-07 10.040177 - 7000 0.00053012176 -0.00068635527 3.5599595e-05 8.9040006e-06 -4.4296434e-07 10.039996 - 7100 0.00052958544 -0.00067840066 3.5846725e-05 8.6942859e-06 2.6834024e-06 10.040543 - 7200 0.00052858813 -0.00068968438 3.5554886e-05 6.0568352e-06 4.7776634e-06 10.041271 - 7300 0.00052845993 -0.00070888583 3.5468591e-05 1.4110758e-06 5.6592858e-06 10.040909 - 7400 0.00052678004 -0.00072652527 3.5417511e-05 -2.0145276e-06 6.3632678e-06 10.041818 - 7500 0.00052676205 -0.00072008847 3.5601092e-05 -4.5673532e-06 7.3467401e-06 10.041455 -Loop time of 17.1712 on 1 procs for 7500 steps with 11048 atoms - -Performance: 3773764.428 tau/day, 436.778 timesteps/s -99.5% 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.3271 | 2.3271 | 2.3271 | 0.0 | 13.55 -Bond | 5.8378 | 5.8378 | 5.8378 | 0.0 | 34.00 -Neigh | 4.42 | 4.42 | 4.42 | 0.0 | 25.74 -Comm | 0.07213 | 0.07213 | 0.07213 | 0.0 | 0.42 -Output | 0.064105 | 0.064105 | 0.064105 | 0.0 | 0.37 -Modify | 4.3202 | 4.3202 | 4.3202 | 0.0 | 25.16 -Other | | 0.1298 | | | 0.76 - -Nlocal: 11048.0 ave 11048 max 11048 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0.00000 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 46555.0 ave 46555 max 46555 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 46555 -Ave neighs/atom = 4.2138849 -Ave special neighs/atom = 10.041455 -Neighbor list builds = 732 -Dangerous builds = 710 -Total wall time: 0:00:17 diff --git a/examples/bpm/impact/log.30Jul2021.impact_spring.g++1.4 b/examples/bpm/impact/log.30Jul2021.impact_spring.g++1.4 new file mode 100644 index 0000000000..e3df7fbdd4 --- /dev/null +++ b/examples/bpm/impact/log.30Jul2021.impact_spring.g++1.4 @@ -0,0 +1,218 @@ +LAMMPS (30 Jul 2021) +units lj +dimension 3 +boundary f f f +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.0 +Lattice spacing in x,y,z = 1.5874011 1.5874011 1.5874011 +region box block -25 15 -22 22 -22 22 +create_box 1 box bond/types 2 extra/bond/per/atom 20 extra/special/per/atom 50 +Created orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) + 1 by 1 by 1 MPI processor grid + +region disk cylinder x 0.0 0.0 20.0 -0.5 0.5 +create_atoms 1 region disk +Created 7529 atoms + using lattice units in orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) + create_atoms CPU = 0.002 seconds +group plate region disk +7529 atoms in group plate + +region ball sphere 8.0 0.0 0.0 6.0 +create_atoms 1 region ball +Created 3589 atoms + using lattice units in orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) + create_atoms CPU = 0.001 seconds +group projectile region ball +3589 atoms in group projectile + +displace_atoms all random 0.1 0.1 0.1 134598738 +Displacing atoms ... + +mass 1 1.0 + +neighbor 1.0 bin +pair_style bpm/spring +bond_style bpm/spring store/local 2 time id1 id2 +pair_coeff 1 1 1.0 1.0 1.0 +bond_coeff 1 1.0 0.04 1.0 +bond_coeff 2 1.0 0.20 1.0 + +fix 1 all nve +fix 2 all store/local 100 3 +fix 3 all update/special/bonds + +create_bonds many plate plate 1 0.0 1.5 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2.6 + binsize = 1, bins = 64 70 70 + 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 38559 bonds, new total = 38559 +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 15 = max # of 1-2 neighbors + 101 = max # of special neighbors + special bonds CPU = 0.004 seconds +create_bonds many projectile projectile 2 0.0 1.5 +WARNING: Communication cutoff 2.6 is shorter than a bond length based estimate of 2.799982026012842. This may lead to errors. (../comm.cpp:734) +Added 21869 bonds, new total = 60428 +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 16 = 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 + +velocity projectile set -0.05 0.0 0.0 +compute nbond all nbond/atom +compute tbond all reduce sum c_nbond + +timestep 0.1 +thermo_style custom step ke pe pxx pyy pzz c_tbond +thermo 100 +thermo_modify lost ignore lost/bond ignore +dump 1 all custom 100 atomDump id x y z c_nbond + +dump 2 all local 100 brokenDump f_2[1] f_2[2] f_2[3] +dump_modify 2 header no + +run 7500 +Neighbor list info ... + update every 1 steps, delay 10 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 = 98 108 108 + 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) = 24.30 | 24.30 | 24.30 Mbytes +Step KinEng PotEng Pxx Pyy Pzz c_tbond + 0 0.0010167873 0 7.298968e-05 0 0 10.8703 + 100 0.0010167873 0 7.298968e-05 -8.7429897e-20 -8.8470837e-20 10.8703 + 200 0.0010167873 0 7.298968e-05 -7.2809565e-20 -8.0915788e-20 10.8703 + 300 0.00099636578 -7.0816681e-06 9.8353035e-05 8.4642384e-06 8.0469072e-06 10.867242 + 400 0.00095644407 -4.9965293e-06 0.00012441378 -1.2397227e-05 -1.4980269e-05 10.839719 + 500 0.00092977183 -3.86131e-06 7.8605818e-05 -2.7329699e-06 -7.396399e-06 10.799424 + 600 0.00089787559 -2.9680488e-06 6.335469e-05 2.1448463e-06 4.5296678e-07 10.768663 + 700 0.00087244204 -2.6549464e-06 8.7340708e-05 -4.5516627e-06 -1.8690112e-06 10.74186 + 800 0.00084695959 -3.8045185e-06 8.0745955e-05 -4.5691607e-06 -1.6326641e-06 10.715237 + 900 0.00082108378 -3.7632176e-06 6.6501438e-05 -4.9020688e-06 3.5594859e-06 10.691131 + 1000 0.00079998853 -4.8468066e-06 6.5750228e-05 -8.3521669e-06 5.2266599e-06 10.66127 + 1100 0.00077368031 -2.5220164e-06 5.8210276e-05 2.6426591e-06 4.938121e-06 10.643461 + 1200 0.00074855587 -2.9570391e-06 5.2368186e-05 1.6897526e-06 2.4286268e-06 10.622054 + 1300 0.00072611594 -3.7109651e-06 5.8006188e-05 -2.6857728e-06 -5.6178729e-06 10.595611 + 1400 0.00070923315 -4.2629754e-06 5.3503366e-05 4.7475371e-06 -7.7268696e-06 10.569347 + 1500 0.00069740085 -3.0765543e-06 4.6753588e-05 1.2633383e-05 2.5315165e-06 10.540925 + 1600 0.00068657492 -3.0455076e-06 5.1582206e-05 1.4017258e-05 8.8044278e-06 10.519338 + 1700 0.00067656011 -3.4280513e-06 5.0396015e-05 8.4547122e-06 8.0820402e-06 10.50045 + 1800 0.00066870293 -3.4484153e-06 4.815639e-05 7.5212913e-07 1.1483891e-06 10.488217 + 1900 0.00065786507 -4.2634733e-06 4.9330522e-05 -1.108344e-05 -7.4259153e-06 10.474726 + 2000 0.00064106212 -4.7031033e-06 4.552393e-05 -1.7535521e-05 -1.6263295e-05 10.453139 + 2100 0.00062134889 -3.5304279e-06 3.809727e-05 -2.2412517e-05 -2.2946813e-05 10.433891 + 2200 0.00059830887 -3.2395481e-06 3.5740566e-05 -1.796758e-05 -1.8599386e-05 10.417881 + 2300 0.00057522207 -2.9905465e-06 3.4002427e-05 -6.7236311e-06 -1.4718938e-05 10.401511 + 2400 0.00055324818 -4.519622e-06 2.8286989e-05 5.379357e-06 -2.3963109e-06 10.383342 + 2500 0.00053140276 -4.5450401e-06 2.6655404e-05 1.4698667e-05 1.5782329e-05 10.362835 + 2600 0.00051144636 -4.1683588e-06 2.4944253e-05 2.5072313e-05 2.3558987e-05 10.33837 + 2700 0.00049421672 -5.8949891e-06 2.0313469e-05 2.4375973e-05 2.3609392e-05 10.320921 + 2800 0.00047936442 -5.7929485e-06 1.8523402e-05 1.6894086e-05 2.34875e-05 10.29016 + 2900 0.00046579117 -6.7340102e-06 1.8239135e-05 1.9583159e-05 1.821014e-05 10.266954 + 3000 0.00045439794 -5.5845157e-06 1.7413232e-05 2.0937177e-05 1.0934407e-05 10.246447 + 3100 0.00044541881 -5.1519292e-06 1.6153079e-05 1.4874654e-05 4.1969429e-06 10.233495 + 3200 0.00043791644 -5.0105552e-06 2.0005341e-05 4.7318756e-06 1.4446699e-08 10.223961 + 3300 0.00043012829 -4.8924048e-06 2.275482e-05 -6.5889472e-07 2.8411666e-06 10.212448 + 3400 0.00042478693 -4.7736643e-06 1.8655218e-05 -1.0408543e-05 -2.5097213e-06 10.203814 + 3500 0.00041885602 -4.1938783e-06 1.6924096e-05 -1.6723773e-05 -1.0907364e-05 10.197158 + 3600 0.00041470126 -4.4256374e-06 2.1660002e-05 -1.2589975e-05 -8.9195821e-06 10.191042 + 3700 0.00041103162 -4.0558298e-06 2.1463315e-05 -1.1052983e-05 -1.1288374e-05 10.186185 + 3800 0.0004064031 -4.085737e-06 2.1186979e-05 -7.6827664e-06 -8.4420523e-06 10.182407 + 3900 0.00040439659 -3.8043843e-06 2.2246535e-05 -9.8091295e-06 -6.337729e-06 10.179169 + 4000 0.00040248064 -5.207414e-06 2.4991678e-05 -8.9269116e-06 -1.3269351e-06 10.175931 + 4100 0.00039984629 -3.9470913e-06 2.0638508e-05 -1.0311727e-05 -7.0570926e-07 10.171973 + 4200 0.00039748539 -4.1530392e-06 2.2201704e-05 -1.9419136e-06 3.9363863e-06 10.169995 + 4300 0.00039699527 -4.4361889e-06 2.4637559e-05 3.0466639e-06 2.6075192e-06 10.167836 + 4400 0.00039577202 -4.5243252e-06 2.3254304e-05 9.3960261e-06 7.0976687e-06 10.165138 + 4500 0.00039438637 -4.4623531e-06 2.5479152e-05 1.3111125e-05 9.1080155e-06 10.163699 + 4600 0.00039279153 -4.3667553e-06 2.4372973e-05 1.6089732e-05 8.9825485e-06 10.162439 + 4700 0.00039304328 -4.0850029e-06 2.3031657e-05 1.4377571e-05 1.0046115e-05 10.161 + 4800 0.0003930794 -4.2247499e-06 2.3528523e-05 8.7677526e-06 1.1123548e-05 10.16082 + 4900 0.00039357048 -4.0441827e-06 2.2238523e-05 7.0463814e-06 1.0318253e-05 10.160281 + 5000 0.00039305174 -4.0989874e-06 2.3082845e-05 4.7559622e-06 9.1784689e-06 10.159561 + 5100 0.00039281446 -3.9654637e-06 2.4406601e-05 6.6792841e-07 3.9479578e-06 10.158662 + 5200 0.00039266969 -3.7000839e-06 2.3342952e-05 -4.0814362e-07 -1.7091512e-07 10.157762 + 5300 0.00039179548 -3.6041015e-06 2.2308731e-05 -2.3038721e-06 -7.7478695e-06 10.156863 + 5400 0.00039126557 -3.3816417e-06 2.5032837e-05 -4.2112558e-06 -1.0544895e-05 10.155244 + 5500 0.00039013707 -3.2015334e-06 2.4333377e-05 -9.4600548e-06 -8.164991e-06 10.153985 + 5600 0.00038863118 -3.2457645e-06 2.5234836e-05 -1.3025121e-05 -4.212353e-06 10.152545 + 5700 0.00038755505 -3.1192824e-06 2.4611567e-05 -1.7034285e-05 -7.4484904e-06 10.150926 + 5800 0.00038682794 -3.159343e-06 2.4790374e-05 -2.1244353e-05 -9.5959604e-06 10.150027 + 5900 0.00038514658 -3.1365816e-06 2.4775049e-05 -2.013337e-05 -8.7609997e-06 10.147688 + 6000 0.00038273205 -3.5768746e-06 2.4513287e-05 -1.7197146e-05 -7.7627989e-06 10.14553 + 6100 0.00038118307 -3.2886293e-06 2.4104512e-05 -1.1683647e-05 -9.0156319e-06 10.144091 + 6200 0.00037877747 -3.5457022e-06 2.546258e-05 -5.3008572e-06 -1.0680602e-05 10.142292 + 6300 0.00037631131 -3.7852195e-06 2.4823247e-05 -5.9313668e-06 -8.837521e-06 10.141033 + 6400 0.00037412558 -4.1058533e-06 2.434972e-05 -5.8192486e-06 -1.9415666e-06 10.139773 + 6500 0.00037259808 -4.0091084e-06 2.4652474e-05 -4.5769183e-06 -2.9449568e-06 10.137974 + 6600 0.00037090733 -4.1292855e-06 2.4417194e-05 -4.1646449e-06 8.6273141e-07 10.134916 + 6700 0.00036992828 -4.0221056e-06 2.3588901e-05 -6.8333754e-06 -2.5804065e-07 10.133477 + 6800 0.00036883832 -4.0617393e-06 2.4407327e-05 -4.6933138e-06 5.9097433e-07 10.131319 + 6900 0.00036806181 -3.98881e-06 2.5070794e-05 -1.8839397e-06 1.8686666e-06 10.129879 + 7000 0.00036759453 -3.8395938e-06 2.499485e-05 5.8078766e-06 5.491628e-06 10.12844 + 7100 0.00036661989 -3.807276e-06 2.3841577e-05 9.8514185e-06 2.8498309e-06 10.125922 + 7200 0.0003643494 -3.8754489e-06 2.4003718e-05 6.4101669e-06 -1.0308979e-06 10.124483 + 7300 0.00036261161 -3.8682002e-06 2.345457e-05 6.5773508e-06 1.0241788e-06 10.123583 + 7400 0.00036215882 -3.8404085e-06 2.2989219e-05 1.3012853e-05 5.3465279e-06 10.122324 + 7500 0.00036219767 -3.7430511e-06 2.6189702e-05 1.3646428e-05 7.8525122e-06 10.121065 +Loop time of 17.1159 on 1 procs for 7500 steps with 11118 atoms + +Performance: 3785956.989 tau/day, 438.189 timesteps/s +97.1% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.1678 | 1.1678 | 1.1678 | 0.0 | 6.82 +Bond | 7.299 | 7.299 | 7.299 | 0.0 | 42.64 +Neigh | 3.105 | 3.105 | 3.105 | 0.0 | 18.14 +Comm | 0.049905 | 0.049905 | 0.049905 | 0.0 | 0.29 +Output | 1.4391 | 1.4391 | 1.4391 | 0.0 | 8.41 +Modify | 3.8866 | 3.8866 | 3.8866 | 0.0 | 22.71 +Other | | 0.1685 | | | 0.98 + +Nlocal: 11118.0 ave 11118 max 11118 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0.00000 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 47063.0 ave 47063 max 47063 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 47063 +Ave neighs/atom = 4.2330455 +Ave special neighs/atom = 10.121065 +Neighbor list builds = 464 +Dangerous builds = 1 +Total wall time: 0:00:17 diff --git a/src/.gitignore b/src/.gitignore index a9de0c355a..5d8d00500e 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -267,6 +267,8 @@ /fix_nve_sphere_bpm.h /fix_update_special_bonds.cpp /fix_update_special_bonds.h +/pair_bpm_spring.cpp +/pair_bpm_spring.h /compute_adf.cpp /compute_adf.h @@ -1512,3 +1514,4 @@ /pair_smtbq.h /pair_vashishta*.cpp /pair_vashishta*.h + diff --git a/src/BPM/bond_bpm_rotational.cpp b/src/BPM/bond_bpm_rotational.cpp index adc4f596c5..aa7de10c13 100644 --- a/src/BPM/bond_bpm_rotational.cpp +++ b/src/BPM/bond_bpm_rotational.cpp @@ -209,9 +209,6 @@ void BondBPMRotational::compute(int eflag, int vflag) ev_init(eflag,vflag); - if (vflag_global == 2) - force->pair->vflag_either = force->pair->vflag_global = 1; - double **cutsq = force->pair->cutsq; double **x = atom->x; double **v = atom->v; diff --git a/src/BPM/bond_bpm_spring.cpp b/src/BPM/bond_bpm_spring.cpp index 7effb8ae48..028c972500 100644 --- a/src/BPM/bond_bpm_spring.cpp +++ b/src/BPM/bond_bpm_spring.cpp @@ -111,12 +111,12 @@ void BondBPMSpring::store_data() type = bond_type[i][m]; //Skip if bond was turned off - if(type < 0) + 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"); + 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]; @@ -144,13 +144,10 @@ void BondBPMSpring::compute(int eflag, int vflag) int i1,i2,itmp,m,n,type,itype,jtype; 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; ev_init(eflag,vflag); - if (vflag_global == 2) - force->pair->vflag_either = force->pair->vflag_global = 1; - double **cutsq = force->pair->cutsq; double **x = atom->x; double **v = atom->v; @@ -188,7 +185,8 @@ void BondBPMSpring::compute(int eflag, int vflag) } rinv = 1.0/r; - fbond = -k[type]*(r-r0); + fbond = k[type]*(r0-r); + if (eflag) ebond = -0.5*fbond*(r0-r); delvx = v[i1][0] - v[i2][0]; delvy = v[i1][1] - v[i2][1]; @@ -215,7 +213,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); } } @@ -318,7 +316,7 @@ void BondBPMSpring::read_restart(FILE *fp) void BondBPMSpring::write_data(FILE *fp) { for (int i = 1; i <= atom->nbondtypes; i++) - fprintf(fp,"%d %g %g %g\n", i,k[i],ecrit[i],gamma[i]); + fprintf(fp,"%d %g %g %g\n", i,k[i],ecrit[i],gamma[i]); } /* ---------------------------------------------------------------------- */ diff --git a/src/BPM/pair_bpm_spring.cpp b/src/BPM/pair_bpm_spring.cpp new file mode 100644 index 0000000000..29ea1c0f66 --- /dev/null +++ b/src/BPM/pair_bpm_spring.cpp @@ -0,0 +1,344 @@ +// clang-format off +/* ---------------------------------------------------------------------- + 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 "pair_bpm_spring.h" + +#include +#include +#include +#include "atom.h" +#include "atom_vec.h" +#include "comm.h" +#include "force.h" +#include "neighbor.h" +#include "neigh_list.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +PairBPMSpring::PairBPMSpring(LAMMPS *lmp) : Pair(lmp) +{ + writedata = 1; +} + +/* ---------------------------------------------------------------------- */ + +PairBPMSpring::~PairBPMSpring() +{ + if (allocated) { + memory->destroy(setflag); + memory->destroy(cutsq); + + memory->destroy(k); + memory->destroy(cut); + memory->destroy(gamma); + } +} + +/* ---------------------------------------------------------------------- */ + +void PairBPMSpring::compute(int eflag, int vflag) +{ + int i,j,m,ii,jj,inum,jnum,itype,jtype; + tagint tagi, tagj; + int bond_flag; + double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fpair; + double r,rsq,rinv,r2inv,factor_lj; + int *ilist,*jlist,*numneigh,**firstneigh; + double vxtmp,vytmp,vztmp,delvx,delvy,delvz,dot,smooth; + + evdwl = 0.0; + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = vflag_fdotr = 0; + + tagint *tag = atom->tag; + double **x = atom->x; + double **v = atom->v; + double **f = atom->f; + int *type = atom->type; + int **bond_type = atom->bond_type; + int *num_bond = atom->num_bond; + tagint **bond_atom = atom->bond_atom; + int nlocal = atom->nlocal; + int newton_pair = force->newton_pair; + double *special_lj = force->special_lj; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // loop over neighbors of my atoms + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + tagi = tag[i]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + vxtmp = v[i][0]; + vytmp = v[i][1]; + vztmp = v[i][2]; + itype = type[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + factor_lj = special_lj[sbmask(j)]; + + if (factor_lj == 0) continue; + + j &= NEIGHMASK; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + jtype = type[j]; + + if (rsq < cutsq[itype][jtype]) { + r = sqrt(rsq); + + rinv = 1.0/r; + fpair = k[itype][jtype]*(cut[itype][jtype]-r); + if (eflag) + evdwl = -0.5*k[itype][jtype]*(cut[itype][jtype]-r)*(cut[itype][jtype]-r); + + smooth = rsq/cutsq[itype][jtype]; + smooth *= smooth; + smooth = 1.0 - smooth; + delvx = vxtmp - v[j][0]; + delvy = vytmp - v[j][1]; + delvz = vztmp - v[j][2]; + dot = delx*delvx + dely*delvy + delz*delvz; + fpair -= gamma[itype][jtype]*dot*smooth; + + fpair *= factor_lj*rinv; + + f[i][0] += delx*fpair; + f[i][1] += dely*fpair; + f[i][2] += delz*fpair; + + if (newton_pair || j < nlocal) { + f[j][0] -= delx*fpair; + f[j][1] -= dely*fpair; + f[j][2] -= delz*fpair; + } + + if (evflag) ev_tally(i,j,nlocal,newton_pair, + evdwl,0.0,fpair,delx,dely,delz); + } + } + } + + if (vflag_fdotr) virial_fdotr_compute(); +} + +/* ---------------------------------------------------------------------- + allocate all arrays +------------------------------------------------------------------------- */ + +void PairBPMSpring::allocate() +{ + allocated = 1; + int n = atom->ntypes; + + memory->create(setflag,n+1,n+1,"pair:setflag"); + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + setflag[i][j] = 0; + + memory->create(cutsq,n+1,n+1,"pair:cutsq"); + + memory->create(k,n+1,n+1,"pair:k"); + memory->create(cut,n+1,n+1,"pair:cut"); + memory->create(gamma,n+1,n+1,"pair:gamma"); +} + +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairBPMSpring::settings(int narg, char **arg) +{ + if (narg != 0) error->all(FLERR,"Illegal pair_style command"); +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more type pairs +------------------------------------------------------------------------- */ + +void PairBPMSpring::coeff(int narg, char **arg) +{ + if (narg != 5) + error->all(FLERR,"Incorrect args for pair coefficients"); + if (!allocated) allocate(); + + int ilo,ihi,jlo,jhi; + utils::bounds(FLERR,arg[0],1,atom->nbondtypes,ilo,ihi,error); + utils::bounds(FLERR,arg[1],1,atom->nbondtypes,jlo,jhi,error); + + double k_one = utils::numeric(FLERR,arg[2],false,lmp); + double cut_one = utils::numeric(FLERR,arg[3],false,lmp); + double gamma_one = utils::numeric(FLERR,arg[4],false,lmp); + + if (cut_one <= 0.0) error->all(FLERR,"Incorrect args for pair coefficients"); + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + for (int j = MAX(jlo,i); j <= jhi; j++) { + k[i][j] = k_one; + cut[i][j] = cut_one; + gamma[i][j] = gamma_one; + + setflag[i][j] = 1; + count++; + } + } + + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); +} + +/* ---------------------------------------------------------------------- + init for one type pair i,j and corresponding j,i +------------------------------------------------------------------------- */ + +double PairBPMSpring::init_one(int i, int j) +{ + if (setflag[i][j] == 0) { + cut[i][j] = mix_distance(cut[i][i],cut[j][j]); + k[i][j] = mix_energy(k[i][i],k[j][j], + cut[i][i],cut[j][j]); + gamma[i][j] = mix_energy(gamma[i][i],gamma[j][j], + cut[i][i],cut[j][j]); + } + + cut[j][i] = cut[i][j]; + k[j][i] = k[i][j]; + gamma[j][i] = gamma[i][j]; + + return cut[i][j]; +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairBPMSpring::write_restart(FILE *fp) +{ + write_restart_settings(fp); + + int i,j; + for (i = 1; i <= atom->ntypes; i++) + for (j = i; j <= atom->ntypes; j++) { + fwrite(&setflag[i][j],sizeof(int),1,fp); + if (setflag[i][j]) { + fwrite(&k[i][j],sizeof(double),1,fp); + fwrite(&cut[i][j],sizeof(double),1,fp); + fwrite(&gamma[i][j],sizeof(double),1,fp); + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairBPMSpring::read_restart(FILE *fp) +{ + read_restart_settings(fp); + allocate(); + + int i,j; + int me = comm->me; + for (i = 1; i <= atom->ntypes; i++) + for (j = i; j <= atom->ntypes; j++) { + if (me == 0) fread(&setflag[i][j],sizeof(int),1,fp); + MPI_Bcast(&setflag[i][j],1,MPI_INT,0,world); + if (setflag[i][j]) { + if (me == 0) { + fread(&k[i][j],sizeof(double),1,fp); + fread(&cut[i][j],sizeof(double),1,fp); + fread(&gamma[i][j],sizeof(double),1,fp); + } + MPI_Bcast(&k[i][j],1,MPI_DOUBLE,0,world); + MPI_Bcast(&cut[i][j],1,MPI_DOUBLE,0,world); + MPI_Bcast(&gamma[i][j],1,MPI_DOUBLE,0,world); + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 writes to data file +------------------------------------------------------------------------- */ + +void PairBPMSpring::write_data(FILE *fp) +{ + for (int i = 1; i <= atom->ntypes; i++) + fprintf(fp,"%d %g %g %g\n",i,k[i][i],cut[i][i],gamma[i][i]); +} + +/* ---------------------------------------------------------------------- + proc 0 writes all pairs to data file +------------------------------------------------------------------------- */ + +void PairBPMSpring::write_data_all(FILE *fp) +{ + for (int i = 1; i <= atom->ntypes; i++) + for (int j = i; j <= atom->ntypes; j++) + fprintf(fp,"%d %d %g %g %g\n",i,j, + k[i][j],cut[i][j],gamma[i][j]); +} + +/* ---------------------------------------------------------------------- */ + +double PairBPMSpring::single(int i, int j, int itype, int jtype, double rsq, + double factor_coul, double factor_lj, + double &fforce) +{ + double fpair,philj,r,rinv; + double delx, dely, delz, delvx, delvy, delvz, dot, smooth; + + if(rsq > cutsq[itype][jtype]) return 0.0; + + double **x = atom->x; + double **v = atom->v; + + r = sqrt(rsq); + rinv = 1.0/r; + + fpair = k[itype][jtype]*(cut[itype][jtype]-r); + philj = -0.5*k[itype][jtype]*(cut[itype][jtype]-r)*(cut[itype][jtype]-r); + + smooth = rsq/cutsq[itype][jtype]; + smooth *= smooth; + smooth = 1.0 - smooth; + delx = x[i][0] - x[j][0]; + dely = x[i][1] - x[j][1]; + delz = x[i][2] - x[j][2]; + delvx = v[i][0] - v[j][0]; + delvy = v[i][1] - v[j][1]; + delvz = v[i][2] - v[j][2]; + dot = delx*delvx + dely*delvy + delz*delvz; + fpair -= gamma[itype][jtype]*dot*rinv*smooth; + + fpair *= factor_lj; + fforce = fpair; + + return philj; +} diff --git a/src/BPM/pair_bpm_spring.h b/src/BPM/pair_bpm_spring.h new file mode 100644 index 0000000000..86be2a9867 --- /dev/null +++ b/src/BPM/pair_bpm_spring.h @@ -0,0 +1,64 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, 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 PAIR_CLASS + +PairStyle(bpm/spring,PairBPMSpring) + +#else + +#ifndef LMP_PAIR_BPM_SPRING_H +#define LMP_PAIR_BPM_SPRING_H + +#include "pair.h" + +namespace LAMMPS_NS { + +class PairBPMSpring : public Pair { + public: + PairBPMSpring(class LAMMPS *); + virtual ~PairBPMSpring(); + virtual void compute(int, int); + void settings(int, char **); + void coeff(int, char **); + double init_one(int, int); + void write_restart(FILE *); + void read_restart(FILE *); + void write_data(FILE *); + void write_data_all(FILE *); + double single(int, int, int, int, double, double, double, double &); + + protected: + double **k,**cut,**gamma; + + void allocate(); +}; + +} + +#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: Incorrect args for pair coefficients + +Self-explanatory. Check the input script or data file. + +*/ From 69e600c40483f29d66c32f51e2cbfccd0fa255d5 Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Wed, 6 Oct 2021 14:13:48 -0600 Subject: [PATCH 07/40] Misc updates and style fixes --- doc/src/bond_bpm_spring.rst | 2 +- doc/src/pair_bpm_spring.rst | 11 +++++++++-- src/BPM/bond_bpm.cpp | 7 +++++-- src/BPM/bond_bpm_rotational.cpp | 9 ++------- src/BPM/bond_bpm_spring.cpp | 21 ++++++++------------- src/BPM/fix_bond_history.cpp | 2 +- src/BPM/pair_bpm_spring.cpp | 18 +++++++----------- src/BPM/pair_bpm_spring.h | 4 ++-- 8 files changed, 35 insertions(+), 39 deletions(-) diff --git a/doc/src/bond_bpm_spring.rst b/doc/src/bond_bpm_spring.rst index 1a67c09a70..e149a45d2e 100644 --- a/doc/src/bond_bpm_spring.rst +++ b/doc/src/bond_bpm_spring.rst @@ -64,7 +64,7 @@ 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^4 . + 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 diff --git a/doc/src/pair_bpm_spring.rst b/doc/src/pair_bpm_spring.rst index 19bb987ae3..33883f05ef 100755 --- a/doc/src/pair_bpm_spring.rst +++ b/doc/src/pair_bpm_spring.rst @@ -38,8 +38,15 @@ normal velocity of particles 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. +radial normal vector, :math:`\vec{v}` is the velocity difference +between the two particles, and :math:`w` is a smoothing factor. +This smoothing factor is constructed such that damping forces go to zero +as particles come out of contact to avoid discontinuities. It is +given by + +.. math:: + + 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. diff --git a/src/BPM/bond_bpm.cpp b/src/BPM/bond_bpm.cpp index a6e5d4583c..eacfd064e5 100644 --- a/src/BPM/bond_bpm.cpp +++ b/src/BPM/bond_bpm.cpp @@ -73,9 +73,12 @@ void BondBPM::init_style() ifix = modify->find_fix_by_style("update/special/bonds"); if (ifix >= 0) fix_update_special_bonds = (FixUpdateSpecialBonds *) modify->fix[ifix]; - else + else { fix_update_special_bonds = nullptr; - + if (force->special_lj[1] != 1.0) + error->all(FLERR, "Without fix update/special/bonds, BPM bond styles " + "require special_bonds weight of 1.0 for first neighbors"); + } if (force->angle || force->dihedral || force->improper) error->all(FLERR, diff --git a/src/BPM/bond_bpm_rotational.cpp b/src/BPM/bond_bpm_rotational.cpp index aa7de10c13..0f62d88966 100644 --- a/src/BPM/bond_bpm_rotational.cpp +++ b/src/BPM/bond_bpm_rotational.cpp @@ -25,11 +25,8 @@ #include "memory.h" #include "modify.h" #include "neighbor.h" -#include "pair.h" -#include #include -#include #define EPSILON 1e-10 @@ -147,8 +144,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]); @@ -167,9 +163,9 @@ void BondBPMRotational::store_data() // Get closest image in case bonded with ghost domain->minimum_image(delx, dely, delz); - r = sqrt(delx*delx + dely*dely + delz*delz); rinv = 1.0/r; + fix_bond_history->update_atom_value(i, m, 0, r); fix_bond_history->update_atom_value(i, m, 1, delx*rinv); fix_bond_history->update_atom_value(i, m, 2, dely*rinv); @@ -209,7 +205,6 @@ void BondBPMRotational::compute(int eflag, int vflag) ev_init(eflag,vflag); - double **cutsq = force->pair->cutsq; double **x = atom->x; double **v = atom->v; double **omega = atom->omega; diff --git a/src/BPM/bond_bpm_spring.cpp b/src/BPM/bond_bpm_spring.cpp index 028c972500..b418a19583 100644 --- a/src/BPM/bond_bpm_spring.cpp +++ b/src/BPM/bond_bpm_spring.cpp @@ -20,21 +20,13 @@ #include "error.h" #include "fix_bond_history.h" #include "force.h" -#include "math_const.h" -#include "math_extra.h" #include "memory.h" #include "modify.h" #include "neighbor.h" -#include "pair.h" - -#include -#include -#include #define EPSILON 1e-10 using namespace LAMMPS_NS; -using namespace MathExtra; /* ---------------------------------------------------------------------- */ @@ -111,8 +103,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]); @@ -125,6 +116,7 @@ void BondBPMSpring::store_data() // 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); } } @@ -142,17 +134,15 @@ void BondBPMSpring::compute(int eflag, int vflag) store_data(); } - int i1,i2,itmp,m,n,type,itype,jtype; + int i1,i2,m,n,type,itype,jtype; double delx, dely, delz, delvx, delvy, delvz; double e, rsq, r, r0, rinv, smooth, fbond, ebond, dot; ev_init(eflag,vflag); - double **cutsq = force->pair->cutsq; 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; @@ -170,6 +160,10 @@ void BondBPMSpring::compute(int eflag, int vflag) type = bondlist[n][2]; r0 = bondstore[n][0]; + // 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]; @@ -197,6 +191,7 @@ void BondBPMSpring::compute(int eflag, int vflag) smooth = (r-r0)/(r0*ecrit[type]); smooth *= smooth; smooth *= smooth; + smooth *= smooth; smooth = 1 - smooth; fbond *= rinv*smooth; diff --git a/src/BPM/fix_bond_history.cpp b/src/BPM/fix_bond_history.cpp index f60661ef2f..5184882961 100644 --- a/src/BPM/fix_bond_history.cpp +++ b/src/BPM/fix_bond_history.cpp @@ -171,7 +171,7 @@ void FixBondHistory::pre_exchange() for (m = 0; m < num_bond[i2]; m++) { if (bond_atom[i2][m] == tag[i1]) { for (idata = 0; idata < ndata; idata++) { - stored[i1][m*ndata+idata] = bondstore[n][idata]; + stored[i2][m*ndata+idata] = bondstore[n][idata]; } } } diff --git a/src/BPM/pair_bpm_spring.cpp b/src/BPM/pair_bpm_spring.cpp index 29ea1c0f66..abaf868313 100644 --- a/src/BPM/pair_bpm_spring.cpp +++ b/src/BPM/pair_bpm_spring.cpp @@ -14,17 +14,13 @@ #include "pair_bpm_spring.h" -#include -#include -#include #include "atom.h" -#include "atom_vec.h" #include "comm.h" +#include "error.h" #include "force.h" +#include "memory.h" #include "neighbor.h" #include "neigh_list.h" -#include "memory.h" -#include "error.h" using namespace LAMMPS_NS; @@ -116,17 +112,17 @@ void PairBPMSpring::compute(int eflag, int vflag) rinv = 1.0/r; fpair = k[itype][jtype]*(cut[itype][jtype]-r); - if (eflag) - evdwl = -0.5*k[itype][jtype]*(cut[itype][jtype]-r)*(cut[itype][jtype]-r); + if (eflag) evdwl = -0.5 * fpair * (cut[itype][jtype]-r) * factor_lj; smooth = rsq/cutsq[itype][jtype]; smooth *= smooth; + smooth *= smooth; smooth = 1.0 - smooth; delvx = vxtmp - v[j][0]; delvy = vytmp - v[j][1]; delvz = vztmp - v[j][2]; dot = delx*delvx + dely*delvy + delz*delvz; - fpair -= gamma[itype][jtype]*dot*smooth; + fpair -= gamma[itype][jtype]*dot*smooth*rinv; fpair *= factor_lj*rinv; @@ -190,8 +186,8 @@ void PairBPMSpring::coeff(int narg, char **arg) if (!allocated) allocate(); int ilo,ihi,jlo,jhi; - utils::bounds(FLERR,arg[0],1,atom->nbondtypes,ilo,ihi,error); - utils::bounds(FLERR,arg[1],1,atom->nbondtypes,jlo,jhi,error); + utils::bounds(FLERR,arg[0],1,atom->ntypes,ilo,ihi,error); + utils::bounds(FLERR,arg[1],1,atom->ntypes,jlo,jhi,error); double k_one = utils::numeric(FLERR,arg[2],false,lmp); double cut_one = utils::numeric(FLERR,arg[3],false,lmp); diff --git a/src/BPM/pair_bpm_spring.h b/src/BPM/pair_bpm_spring.h index 86be2a9867..216fd0a9dc 100644 --- a/src/BPM/pair_bpm_spring.h +++ b/src/BPM/pair_bpm_spring.h @@ -12,9 +12,9 @@ ------------------------------------------------------------------------- */ #ifdef PAIR_CLASS - +// clang-format off PairStyle(bpm/spring,PairBPMSpring) - +// clang-format on #else #ifndef LMP_PAIR_BPM_SPRING_H From 679132b607abda6d879077e03d75fb4d1ce0c9dc Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Tue, 2 Nov 2021 12:10:20 -0600 Subject: [PATCH 08/40] Replacing some needed header files --- src/OPENMP/npair_half_size_multi_old_newtoff_omp.cpp | 1 + src/OPENMP/npair_half_size_multi_old_newton_omp.cpp | 1 + src/OPENMP/npair_half_size_multi_old_newton_tri_omp.cpp | 1 + src/npair_half_size_multi_old_newton.cpp | 1 + src/npair_half_size_multi_old_newton_tri.cpp | 1 + 5 files changed, 5 insertions(+) diff --git a/src/OPENMP/npair_half_size_multi_old_newtoff_omp.cpp b/src/OPENMP/npair_half_size_multi_old_newtoff_omp.cpp index a87bfe8a5d..37dbe9cc53 100644 --- a/src/OPENMP/npair_half_size_multi_old_newtoff_omp.cpp +++ b/src/OPENMP/npair_half_size_multi_old_newtoff_omp.cpp @@ -15,6 +15,7 @@ #include "npair_half_size_multi_old_newtoff_omp.h" #include "atom.h" +#include "atom_vec.h" #include "domain.h" #include "error.h" #include "molecule.h" diff --git a/src/OPENMP/npair_half_size_multi_old_newton_omp.cpp b/src/OPENMP/npair_half_size_multi_old_newton_omp.cpp index 38159d7d97..789ed33e6b 100644 --- a/src/OPENMP/npair_half_size_multi_old_newton_omp.cpp +++ b/src/OPENMP/npair_half_size_multi_old_newton_omp.cpp @@ -15,6 +15,7 @@ #include "npair_half_size_multi_old_newton_omp.h" #include "atom.h" +#include "atom_vec.h" #include "domain.h" #include "error.h" #include "molecule.h" diff --git a/src/OPENMP/npair_half_size_multi_old_newton_tri_omp.cpp b/src/OPENMP/npair_half_size_multi_old_newton_tri_omp.cpp index 32710bc32f..8302d9fab2 100644 --- a/src/OPENMP/npair_half_size_multi_old_newton_tri_omp.cpp +++ b/src/OPENMP/npair_half_size_multi_old_newton_tri_omp.cpp @@ -15,6 +15,7 @@ #include "npair_half_size_multi_old_newton_tri_omp.h" #include "atom.h" +#include "atom_vec.h" #include "domain.h" #include "error.h" #include "molecule.h" diff --git a/src/npair_half_size_multi_old_newton.cpp b/src/npair_half_size_multi_old_newton.cpp index e835874c3a..413090448c 100644 --- a/src/npair_half_size_multi_old_newton.cpp +++ b/src/npair_half_size_multi_old_newton.cpp @@ -18,6 +18,7 @@ #include "atom_vec.h" #include "domain.h" #include "error.h" +#include "molecule.h" #include "my_page.h" #include "neigh_list.h" diff --git a/src/npair_half_size_multi_old_newton_tri.cpp b/src/npair_half_size_multi_old_newton_tri.cpp index 3fb4c333ea..9117e1449d 100644 --- a/src/npair_half_size_multi_old_newton_tri.cpp +++ b/src/npair_half_size_multi_old_newton_tri.cpp @@ -18,6 +18,7 @@ #include "atom_vec.h" #include "domain.h" #include "error.h" +#include "molecule.h" #include "my_page.h" #include "neigh_list.h" From acb1c8e7f28858d81a9501424dedd53488d0f2bd Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Sun, 7 Nov 2021 17:55:53 -0700 Subject: [PATCH 09/40] Moving update/special/bonds into bond style to ensure correct fix ordering --- doc/src/Commands_fix.rst | 1 - doc/src/Howto_bpm.rst | 42 +++---- doc/src/Packages_details.rst | 1 - doc/src/bond_bpm_rotational.rst | 25 ++-- doc/src/bond_bpm_spring.rst | 25 ++-- doc/src/fix_update_special_bonds.rst | 55 --------- examples/bpm/impact/impact_rotational_bpm.lmp | 1 - examples/bpm/impact/impact_spring_bpm.lmp | 1 - examples/bpm/pour/pour_bpm.lmp | 1 - src/BPM/bond_bpm.cpp | 116 ++++++++++++------ src/BPM/bond_bpm.h | 13 +- src/MISC/pair_tracker.cpp | 32 ++--- 12 files changed, 161 insertions(+), 152 deletions(-) delete mode 100644 doc/src/fix_update_special_bonds.rst diff --git a/doc/src/Commands_fix.rst b/doc/src/Commands_fix.rst index 14cabc6c27..b7b5089aed 100644 --- a/doc/src/Commands_fix.rst +++ b/doc/src/Commands_fix.rst @@ -243,7 +243,6 @@ OPT. * :doc:`ttm/grid ` * :doc:`ttm/mod ` * :doc:`tune/kspace ` - * :doc:`update/special/bonds ` * :doc:`vector ` * :doc:`viscosity ` * :doc:`viscous ` diff --git a/doc/src/Howto_bpm.rst b/doc/src/Howto_bpm.rst index 020b57821a..4474e17058 100644 --- a/doc/src/Howto_bpm.rst +++ b/doc/src/Howto_bpm.rst @@ -26,37 +26,37 @@ preserved across run commands and is written to :doc:`binary restart files ` -work differently for BPM bond styles. There are two possible special -bond settings which determine how pair interactions work between bonded -particles. First, one can simply overlay pair interactions such that all -bonded particles also feel pair interactions. This can be accomplished by -simply turning off all special bonds by setting - -.. code-block:: LAMMPS - - special_bonds lj/coul 1 1 1 - -Alternatively, one can censor all pair interactions between bonded particles. +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. To do this, one must both define an instance of -:doc:`fix update/special/bonds ` and have the special bond -settings +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 .. code-block:: LAMMPS special_bonds lj 0 1 1 coul 1 1 1 -This fix ensures the 1-2 special bond list remains updated as bonds break. The fix -also requires :doc:`newton ` bond off such that whena bond breaks between -atoms across multiple processors, all processors are aware of the event. -The special bond settings then accomplish two tasks. First, they turns off 1-3 and +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. -However, setting a nonzero coul weight for 1-2 bonds ensures all bonded -neighbors are included in the neighbor list. All bonded neighbors must be included -in neighbor lists as they could become unbonded at any timestep. +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. + +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 + +.. 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, diff --git a/doc/src/Packages_details.rst b/doc/src/Packages_details.rst index 281c853eb0..e5e548a341 100644 --- a/doc/src/Packages_details.rst +++ b/doc/src/Packages_details.rst @@ -307,7 +307,6 @@ models for mesoscale simulations of solids and fracture. See the * :doc:`bond_style bpm/spring ` * :doc:`compute nbonds/atom ` * :doc:`fix nve/sphere/bpm ` -* :doc:`fix update/special/bonds ` * :doc:`pair_style bpm/spring ` * examples/bpm diff --git a/doc/src/bond_bpm_rotational.rst b/doc/src/bond_bpm_rotational.rst index 3fcc3d49ec..bffcf0d142 100644 --- a/doc/src/bond_bpm_rotational.rst +++ b/doc/src/bond_bpm_rotational.rst @@ -10,7 +10,7 @@ Syntax bond_style bpm/rotational keyword value attribute1 attribute2 ... -* optional keyword = *store/local* +* optional keyword = *overlay/pair* or *store/local* .. parsed-literal:: @@ -121,10 +121,11 @@ or :doc:`read_restart ` commands: * :math:`\gamma_r` (distance*force/seconds/radians units) * :math:`\gamma_t` (distance*force/seconds/radians units) -As bonds can be broken between neighbor list builds, particular -:doc:`special_bonds ` are required. See the `:doc: how to ` -page on BPMs or `:doc: fix update/special/bonds ` -for details. +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. This bond style tracks broken bonds and can record them using an instance of :doc:`fix store/local ` if the *store/local* keyword is @@ -157,8 +158,18 @@ 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. -The *bpm/rotational* style requires 1-3 and 1-4 :doc:`special_bonds ` -be turned off using the :doc:`special_bonds ` command. +By default if pair interactions are censored, 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 + +.. code-block:: LAMMPS + + special_bonds lj/coul 1 1 1 The *bpm/rotational* style requires :doc:`atom style sphere/bpm `. diff --git a/doc/src/bond_bpm_spring.rst b/doc/src/bond_bpm_spring.rst index e149a45d2e..0235fb52bc 100644 --- a/doc/src/bond_bpm_spring.rst +++ b/doc/src/bond_bpm_spring.rst @@ -10,7 +10,7 @@ Syntax bond_style bpm/spring keyword value attribute1 attribute2 ... -* optional keyword = *store/local* +* optional keyword = *overlay/pair* or *store/local* .. parsed-literal:: @@ -88,10 +88,11 @@ or :doc:`read_restart ` commands: * :math:`\epsilon_c` (unit less) * :math:`\gamma` (force/velocity units) -As bonds can be broken between neighbor list builds, particular -:doc:`special_bonds ` are required. See the `:doc: how to ` -page on BPMs or `:doc: fix update/special/bonds ` -for details. +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. This bond style tracks broken bonds and can record them using an instance of :doc:`fix store/local ` if the *store/local* keyword is @@ -124,8 +125,18 @@ 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. -The *bpm/spring* style requires 1-3 and 1-4 :doc:`special_bonds ` -be turned off using the :doc:`special_bonds ` command. +By default if pair interactions are censored, 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 + +.. code-block:: LAMMPS + + special_bonds lj/coul 1 1 1 Related commands """""""""""""""" diff --git a/doc/src/fix_update_special_bonds.rst b/doc/src/fix_update_special_bonds.rst deleted file mode 100644 index be693118cd..0000000000 --- a/doc/src/fix_update_special_bonds.rst +++ /dev/null @@ -1,55 +0,0 @@ -.. index:: fix update/special/bonds - -fix update/special/bonds command -====================== - -Syntax -"""""" - -.. parsed-literal:: - - fix ID group-ID update/special/bonds - -* ID, group-ID are documented in :doc:`fix ` command -* update/special/bonds = style name of this fix command - -Examples -"""""""" - -.. code-block:: LAMMPS - - fix 1 all update/special/bonds - -Description -""""""""""" - -This fix is used to update the 1-2 special bond list for BPM bond styles. -This feature is used to censor pair forces between bonded particles. -See the :doc:`BPM how to ` for more information. - ----------- - -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 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 `. - -Restrictions -"""""""""""" - -This fix requires :doc:`newton ` bond off. - -Related commands -"""""""""""""""" - -:doc:`bond bpm/rotational ` - -Default -""""""" - -none - diff --git a/examples/bpm/impact/impact_rotational_bpm.lmp b/examples/bpm/impact/impact_rotational_bpm.lmp index f79a72fd9f..3c4667ca1b 100644 --- a/examples/bpm/impact/impact_rotational_bpm.lmp +++ b/examples/bpm/impact/impact_rotational_bpm.lmp @@ -28,7 +28,6 @@ bond_coeff 2 1.0 0.2 0.02 0.02 0.20 0.04 0.04 0.04 0.1 0.02 0.002 0.002 fix 1 all nve/sphere/bpm fix 2 all store/local 100 3 -fix 3 all update/special/bonds create_bonds many plate plate 1 0.0 1.5 create_bonds many projectile projectile 2 0.0 1.5 diff --git a/examples/bpm/impact/impact_spring_bpm.lmp b/examples/bpm/impact/impact_spring_bpm.lmp index bbb968bee2..ef5506218c 100644 --- a/examples/bpm/impact/impact_spring_bpm.lmp +++ b/examples/bpm/impact/impact_spring_bpm.lmp @@ -30,7 +30,6 @@ bond_coeff 2 1.0 0.20 1.0 fix 1 all nve fix 2 all store/local 100 3 -fix 3 all update/special/bonds create_bonds many plate plate 1 0.0 1.5 create_bonds many projectile projectile 2 0.0 1.5 diff --git a/examples/bpm/pour/pour_bpm.lmp b/examples/bpm/pour/pour_bpm.lmp index bb582413c3..98dca9d3a7 100644 --- a/examples/bpm/pour/pour_bpm.lmp +++ b/examples/bpm/pour/pour_bpm.lmp @@ -26,7 +26,6 @@ fix 2 all wall/gran/region hertz/history 1.0 NULL 0.5 NULL 0.1 1 reg fix 3 all gravity 1e-4 vector 0 0 -1 fix 4 all deposit 40 0 1500 712511343 mol my_mol region dropzone near 2.0 vz -0.05 -0.05 fix 5 all nve/sphere/bpm -fix 6 all update/special/bonds timestep 0.05 thermo_style custom step ke pe pxx pyy pzz c_tbond diff --git a/src/BPM/bond_bpm.cpp b/src/BPM/bond_bpm.cpp index eacfd064e5..df5bad4cda 100644 --- a/src/BPM/bond_bpm.cpp +++ b/src/BPM/bond_bpm.cpp @@ -33,10 +33,11 @@ BondBPM::BondBPM(LAMMPS *lmp) : Bond(lmp) { id_fix_store_local = nullptr; id_fix_prop_atom = nullptr; + id_fix_update = nullptr; fix_store_local = nullptr; - fix_update_special_bonds = nullptr; fix_bond_history = nullptr; + overlay_flag = 0; prop_atom_flag = 0; nvalues = 0; output_data = nullptr; @@ -44,6 +45,12 @@ BondBPM::BondBPM(LAMMPS *lmp) : Bond(lmp) r0_max_estimate = 0.0; max_stretch = 1.0; + + // create dummy fix as placeholder for FixUpdateSpecialBonds + // this is so final order of Modify:fix will conform to input script + + id_fix_dummy = utils::strdup("BPM_DUMMY"); + modify->add_fix(fmt::format("{} all DUMMY ", id_fix_dummy)); } /* ---------------------------------------------------------------------- */ @@ -53,6 +60,13 @@ BondBPM::~BondBPM() delete [] pack_choice; delete [] id_fix_store_local; delete [] id_fix_prop_atom; + + if (id_fix_dummy) modify->delete_fix(id_fix_dummy); + if (id_fix_update) modify->delete_fix(id_fix_update); + + delete [] id_fix_dummy; + delete [] id_fix_update; + memory->destroy(output_data); } @@ -70,14 +84,38 @@ void BondBPM::init_style() fix_store_local->nvalues = nvalues; } - ifix = modify->find_fix_by_style("update/special/bonds"); - if (ifix >= 0) - fix_update_special_bonds = (FixUpdateSpecialBonds *) modify->fix[ifix]; - else { - fix_update_special_bonds = nullptr; + + if (overlay_flag) { if (force->special_lj[1] != 1.0) - error->all(FLERR, "Without fix update/special/bonds, BPM bond styles " + error->all(FLERR, "With overlay/pair, BPM bond styles " "require special_bonds weight of 1.0 for first neighbors"); + if (id_fix_update) { + modify->delete_fix(id_fix_update); + delete [] id_fix_update; + id_fix_update = nullptr; + } + } else { + // Require atoms know about all of their bonds and if they break + if (force->newton_bond) + error->all(FLERR,"Without overlay/pair, BPM bond sytles require Newton bond off"); + + // special lj must be 0 1 1 to censor pair forces between bonded particles + // special coulomb must be 1 1 1 to ensure all pairs are included in the + // neighbor list and 1-3 and 1-4 special bond lists are skipped + if (force->special_lj[1] != 0.0 || force->special_lj[2] != 1.0 || + force->special_lj[3] != 1.0) + error->all(FLERR,"Without overlay/pair, BPM bond sytles requires special LJ weights = 0,1,1"); + if (force->special_coul[1] != 1.0 || force->special_coul[2] != 1.0 || + force->special_coul[3] != 1.0) + error->all(FLERR,"Without overlay/pair, BPM bond sytles requires special Coulomb weights = 1,1,1"); + + 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); + delete [] id_fix_dummy; + id_fix_dummy = nullptr; + } } if (force->angle || force->dihedral || force->improper) @@ -105,38 +143,44 @@ void BondBPM::settings(int narg, char **arg) { int iarg = 0; while (iarg < narg) { - if (id_fix_store_local) { - if (strcmp(arg[iarg], "id1") == 0) { - pack_choice[nvalues++] = &BondBPM::pack_id1; - } else if (strcmp(arg[iarg], "id2") == 0) { - pack_choice[nvalues++] = &BondBPM::pack_id2; - } else if (strcmp(arg[iarg], "time") == 0) { - pack_choice[nvalues++] = &BondBPM::pack_time; - } else if (strcmp(arg[iarg], "x") == 0) { - pack_choice[nvalues++] = &BondBPM::pack_x; - } else if (strcmp(arg[iarg], "y") == 0) { - pack_choice[nvalues++] = &BondBPM::pack_y; - } else if (strcmp(arg[iarg], "z") == 0) { - pack_choice[nvalues++] = &BondBPM::pack_z; - } else if (strcmp(arg[iarg], "x/ref") == 0) { - pack_choice[nvalues++] = &BondBPM::pack_x_ref; - prop_atom_flag = 1; - } else if (strcmp(arg[iarg], "y/ref") == 0) { - pack_choice[nvalues++] = &BondBPM::pack_y_ref; - prop_atom_flag = 1; - } else if (strcmp(arg[iarg], "z/ref") == 0) { - pack_choice[nvalues++] = &BondBPM::pack_z_ref; - prop_atom_flag = 1; - } else { - error->all(FLERR, "Illegal bond_style command"); - } - } else if (strcmp(arg[iarg], "store/local") == 0) { + if (strcmp(arg[iarg], "store/local") == 0) { id_fix_store_local = utils::strdup(arg[iarg+1]); - iarg ++; nvalues = 0; pack_choice = new FnPtrPack[narg - iarg - 1]; + iarg += 2; + while (iarg < narg) { + if (strcmp(arg[iarg], "id1") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_id1; + } else if (strcmp(arg[iarg], "id2") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_id2; + } else if (strcmp(arg[iarg], "time") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_time; + } else if (strcmp(arg[iarg], "x") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_x; + } else if (strcmp(arg[iarg], "y") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_y; + } else if (strcmp(arg[iarg], "z") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_z; + } else if (strcmp(arg[iarg], "x/ref") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_x_ref; + prop_atom_flag = 1; + } else if (strcmp(arg[iarg], "y/ref") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_y_ref; + prop_atom_flag = 1; + } else if (strcmp(arg[iarg], "z/ref") == 0) { + pack_choice[nvalues++] = &BondBPM::pack_z_ref; + prop_atom_flag = 1; + } else { + break; + } + iarg ++; + } + } else if (strcmp(arg[iarg], "overlay/pair") == 0) { + overlay_flag = 1; + iarg ++; + } else { + error->all(FLERR, "Illegal pair_style command"); } - iarg ++; } if (id_fix_store_local) { @@ -147,7 +191,7 @@ void BondBPM::settings(int narg, char **arg) // Use store property to save reference positions as it can transfer to ghost atoms if (prop_atom_flag == 1) { - id_fix_prop_atom = utils::strdup("BPM_PROPERTY_ATOM"); + id_fix_prop_atom = utils::strdup("BPM_property_atom"); int ifix = modify->find_fix(id_fix_prop_atom); if (ifix < 0) { modify->add_fix(fmt::format("{} all property/atom " diff --git a/src/BPM/bond_bpm.h b/src/BPM/bond_bpm.h index 53a202802d..4836a08a64 100644 --- a/src/BPM/bond_bpm.h +++ b/src/BPM/bond_bpm.h @@ -25,7 +25,7 @@ class BondBPM : public Bond { virtual void compute(int, int) = 0; virtual void coeff(int, char **) = 0; virtual void init_style(); - void settings(int, char **); + void settings(int, char **); double equilibrium_distance(int); void write_restart(FILE *){}; void read_restart(FILE *){}; @@ -35,18 +35,19 @@ class BondBPM : public Bond { protected: double r0_max_estimate; double max_stretch; - + + char *id_fix_dummy, *id_fix_update; char *id_fix_store_local, *id_fix_prop_atom; class FixStoreLocal *fix_store_local; - class FixUpdateSpecialBonds *fix_update_special_bonds; class FixBondHistory *fix_bond_history; + class FixUpdateSpecialBonds *fix_update_special_bonds; - void process_broken(int, int); + void process_broken(int, int); typedef void (BondBPM::*FnPtrPack)(int,int,int); FnPtrPack *pack_choice; // ptrs to pack functions double *output_data; - int prop_atom_flag, nvalues; + int prop_atom_flag, nvalues, overlay_flag; int index_x_ref, index_y_ref, index_z_ref; void pack_id1(int,int,int); @@ -57,7 +58,7 @@ class BondBPM : public Bond { void pack_z(int,int,int); void pack_x_ref(int,int,int); void pack_y_ref(int,int,int); - void pack_z_ref(int,int,int); + void pack_z_ref(int,int,int); }; } // namespace LAMMPS_NS diff --git a/src/MISC/pair_tracker.cpp b/src/MISC/pair_tracker.cpp index 0297cbc938..cd6ed67615 100644 --- a/src/MISC/pair_tracker.cpp +++ b/src/MISC/pair_tracker.cpp @@ -385,33 +385,35 @@ void PairTracker::init_style() "Pair tracker incompatible with granular pairstyles that extend beyond contact"); // check for FixFreeze and set freeze_group_bit - int ifix = modify->find_fix_by_style("^freeze"); - if (ifix < 0) freeze_group_bit = 0; - else freeze_group_bit = modify->fix[ifix]->groupbit; + + auto fixlist = modify->get_fix_by_style("^freeze"); + if (fixlist.size() == 0) + freeze_group_bit = 0; + else if (fixlist.size() > 1) + error->all(FLERR, "Only one fix freeze command at a time allowed"); + else + freeze_group_bit = fixlist.front()->groupbit; // check for FixPour and FixDeposit so can extract particle radii - int ipour; - for (ipour = 0; ipour < modify->nfix; ipour++) - if (strcmp(modify->fix[ipour]->style, "pour") == 0) break; - if (ipour == modify->nfix) ipour = -1; - int idep; - for (idep = 0; idep < modify->nfix; idep++) - if (strcmp(modify->fix[idep]->style, "deposit") == 0) break; - if (idep == modify->nfix) idep = -1; + auto pours = modify->get_fix_by_style("^pour"); + auto deps = modify->get_fix_by_style("^deposit"); // set maxrad_dynamic and maxrad_frozen for each type // include future FixPour and FixDeposit particles as dynamic + int itype; for (i = 1; i <= atom->ntypes; i++) { onerad_dynamic[i] = onerad_frozen[i] = 0.0; - if (ipour >= 0) { + for (auto &ipour : pours) { itype = i; - onerad_dynamic[i] = *((double *) modify->fix[ipour]->extract("radius", itype)); + double maxrad = *((double *) ipour->extract("radius", itype)); + if (maxrad > 0.0) onerad_dynamic[i] = maxrad; } - if (idep >= 0) { + for (auto &idep : deps) { itype = i; - onerad_dynamic[i] = *((double *) modify->fix[idep]->extract("radius", itype)); + double maxrad = *((double *) idep->extract("radius", itype)); + if (maxrad > 0.0) onerad_dynamic[i] = maxrad; } } From 5fa185bfdaf2d3e6b18e5a150cca9bf3afeb0e8b Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Mon, 29 Nov 2021 14:04:07 -0700 Subject: [PATCH 10/40] Fixing bug in failing to update values across runs --- src/BPM/fix_bond_history.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/BPM/fix_bond_history.cpp b/src/BPM/fix_bond_history.cpp index 5184882961..439c1131fe 100644 --- a/src/BPM/fix_bond_history.cpp +++ b/src/BPM/fix_bond_history.cpp @@ -130,13 +130,14 @@ double FixBondHistory::get_atom_value(int i, int m, int idata) /* ---------------------------------------------------------------------- If stored values are updated, need to copy to atom arrays before exchanging - Always called before neighborlist rebuilt + If bondstore array has been allocated, call before nlist rebuild Also call prior to irregular communication in other fixes (e.g. deform) ------------------------------------------------------------------------- */ void FixBondHistory::pre_exchange() { if (!update_flag) return; + if (!bondstore) return; int i1, i2, n, m, idata; int **bondlist = neighbor->bondlist; @@ -193,6 +194,7 @@ void FixBondHistory::allocate() void FixBondHistory::setup_post_neighbor() { + pre_exchange(); post_neighbor(); } From 7113334f997543da7419d74cae8f2e5528e755e5 Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Mon, 29 Nov 2021 16:19:45 -0700 Subject: [PATCH 11/40] Fixing typos in documentation --- doc/src/bond_bpm_rotational.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/bond_bpm_rotational.rst b/doc/src/bond_bpm_rotational.rst index bffcf0d142..8a151accf4 100644 --- a/doc/src/bond_bpm_rotational.rst +++ b/doc/src/bond_bpm_rotational.rst @@ -60,7 +60,7 @@ 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. +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) `. @@ -98,7 +98,7 @@ 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.) ) +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. From 40258f8b9a2dff959f49dd670303060c4e2d18ec Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Fri, 3 Dec 2021 16:12:31 -0700 Subject: [PATCH 12/40] 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; } } From f3eac179e6a0a8115a1057c0856bfe8e89985739 Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Mon, 6 Dec 2021 17:27:25 -0700 Subject: [PATCH 13/40] Expanding broken bonds documentation, adding support for more create/delete bond commands, misc small edits --- doc/src/Howto_bpm.rst | 19 +++++++++- doc/src/Howto_broken_bonds.rst | 41 +++++++++++++++++++++ doc/src/bond_quartic.rst | 3 +- doc/src/fix_bond_break.rst | 3 ++ src/.gitignore | 2 - src/BPM/bond_bpm.cpp | 2 +- src/BPM/fix_update_special_bonds.h | 2 +- src/BPM/pair_bpm_spring.h | 2 +- src/MC/fix_bond_break.cpp | 12 ++++++ src/delete_bonds.cpp | 9 +++++ src/{BPM => }/fix_bond_history.cpp | 59 ++++++++++++++++-------------- src/{BPM => }/fix_bond_history.h | 1 + src/fix_store_local.cpp | 10 ++--- src/fix_store_local.h | 1 + 14 files changed, 126 insertions(+), 40 deletions(-) rename src/{BPM => }/fix_bond_history.cpp (86%) rename src/{BPM => }/fix_bond_history.h (98%) diff --git a/doc/src/Howto_bpm.rst b/doc/src/Howto_bpm.rst index 3416aa10c0..5929dbc962 100644 --- a/doc/src/Howto_bpm.rst +++ b/doc/src/Howto_bpm.rst @@ -38,7 +38,6 @@ 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 @@ -76,6 +75,9 @@ by using the following special bond settings special_bonds lj/coul 1 1 1 +See the :doc:`Howto ` page on broken bonds for +more information. + ---------- Currently there are two types of bonds included in the BPM @@ -104,3 +106,18 @@ 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. + +---------- + +While LAMMPS has many untilites to create and delete bonds, only a +select few are compatible with BPM bond styles. They include: + +* :doc:`create_bonds ` +* :doc:`delete_bonds ` +* :doc:`fix bond/create ` +* :doc:`fix bond/break ` + +Note :doc:`bond_create ` requires certain special_bonds settings. +To subtract pair interactions, one will need to switch between different +special_bonds settings in the input script. An example is found in +examples/bpm/impact. diff --git a/doc/src/Howto_broken_bonds.rst b/doc/src/Howto_broken_bonds.rst index 23509dffdb..f7a6df6580 100755 --- a/doc/src/Howto_broken_bonds.rst +++ b/doc/src/Howto_broken_bonds.rst @@ -1,5 +1,46 @@ Broken Bonds =============== +Typically, bond interactions persist for the duration of a simulation +in LAMMPS. However, there are some exceptions that allow for bonds to +break includung the :doc:`quartic bond style ` and the +bond styles in the :doc:`BPM package ` which contains the +:doc:`bpm/spring ` and +:doc:`bpm/rotational ` bond styles. In these cases, +a bond can be broken if it is stretched beyond a user-defined threshold. +LAMMPS accomplishes this by setting the bond type to zero such that the +bond force is no longer computed. +Users are normally able to weight the contribution of pair forces to atoms +that are bonded using the :doc:`special_bonds command `. +When bonds break, this is not always the case. For the quartic bond style, +pair forces are always turned off between bonded particles. LAMMPS does +this via a computational sleight-of-hand. It subtracts the pairwise +interaction as part of the bond computation. When the bond breaks, the +subtraction stops. For this to work, the pairwise interaction must always +be computed by the :doc:`pair_style ` command, whether the bond +is broken or not. This means that :doc:`special_bonds ` must +be set to 1,1,1. After the bond breaks, the pairwise interaction between the +two atoms is turned on, since they are no longer bonded. +In the BPM package, one can either turn off all pair interactions between +bonded particles or leave them on, overlaying pair forces on top of bond +forces. To remove pair forces, the special bond list is dynamically +updated. More details can be found on the :doc:`Howto BPM ` +page. + +Bonds can also be broken by fixes which change bond topology, including +:doc:`fix bond/break ` and +:doc:`fix bond/react `. + +Note that when bonds are dumped to a file via the :doc:`dump local ` command, bonds with type 0 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 + +The compute :doc:`nbonds/atom ` can also be used +to tally the current number of bonds per atom, excluding broken bonds. \ No newline at end of file diff --git a/doc/src/bond_quartic.rst b/doc/src/bond_quartic.rst index 89c33607ac..1f9f9bf4e9 100644 --- a/doc/src/bond_quartic.rst +++ b/doc/src/bond_quartic.rst @@ -67,7 +67,8 @@ local maximum. If a bond length ever becomes :math:`> R_c`, LAMMPS "breaks" the bond, which means two things. First, the bond potential is turned off by setting its type to 0, and is no longer computed. Second, a pairwise interaction between the two atoms is turned on, since they -are no longer bonded. +are no longer bonded. See the :doc:`Howto ` page +on broken bonds for more information. LAMMPS does the second task via a computational sleight-of-hand. It subtracts the pairwise interaction as part of the bond computation. diff --git a/doc/src/fix_bond_break.rst b/doc/src/fix_bond_break.rst index 9538fa8ef3..ba12e154c5 100644 --- a/doc/src/fix_bond_break.rst +++ b/doc/src/fix_bond_break.rst @@ -113,6 +113,9 @@ You can dump out snapshots of the current bond topology via the :doc:`dump local may need to thermostat your system to compensate for energy changes resulting from broken bonds (and angles, dihedrals, impropers). +See the :doc:`Howto ` page on broken bonds for more +information on related features in LAMMPS. + ---------- Restart, fix_modify, output, run start/stop, minimize info diff --git a/src/.gitignore b/src/.gitignore index a590048622..19c5295576 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -263,8 +263,6 @@ /bond_bpm_spring.h /compute_nbond_atom.cpp /compute_nbond_atom.h -/fix_bond_history.cpp -/fix_bond_history.h /fix_nve_sphere_bpm.cpp /fix_nve_sphere_bpm.h /fix_update_special_bonds.cpp diff --git a/src/BPM/bond_bpm.cpp b/src/BPM/bond_bpm.cpp index 5cdd8cbdea..00a5ebc6e4 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/fix_update_special_bonds.h b/src/BPM/fix_update_special_bonds.h index 6fe0834c82..600b226b71 100644 --- a/src/BPM/fix_update_special_bonds.h +++ b/src/BPM/fix_update_special_bonds.h @@ -13,7 +13,7 @@ #ifdef FIX_CLASS // clang-format off -FixStyle(update/special/bonds,FixUpdateSpecialBonds) +FixStyle(UPDATE_SPECIAL_BONDS,FixUpdateSpecialBonds) // clang-format on #else diff --git a/src/BPM/pair_bpm_spring.h b/src/BPM/pair_bpm_spring.h index 216fd0a9dc..da1d887cf6 100644 --- a/src/BPM/pair_bpm_spring.h +++ b/src/BPM/pair_bpm_spring.h @@ -1,6 +1,6 @@ /* -*- c++ -*- ---------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories + https://www.lammps.org/, Sandia National Laboratories Steve Plimpton, sjplimp@sandia.gov Copyright (2003) Sandia Corporation. Under the terms of Contract diff --git a/src/MC/fix_bond_break.cpp b/src/MC/fix_bond_break.cpp index f1860ba3ec..7973add89d 100644 --- a/src/MC/fix_bond_break.cpp +++ b/src/MC/fix_bond_break.cpp @@ -18,11 +18,13 @@ #include "update.h" #include "respa.h" #include "atom.h" +#include "fix_bond_history.h" #include "force.h" #include "comm.h" #include "neighbor.h" #include "random_mars.h" #include "memory.h" +#include "modify.h" #include "error.h" using namespace LAMMPS_NS; @@ -261,6 +263,10 @@ void FixBondBreak::post_integrate() commflag = 1; comm->forward_comm_fix(this,2); + // find instances of bond history to delete data + auto histories = modify->get_fix_by_style("BOND_HISTORY"); + int n_histories = histories.size(); + // break bonds // if both atoms list each other as winning bond partner // and probability constraint is satisfied @@ -295,7 +301,13 @@ void FixBondBreak::post_integrate() for (k = m; k < num_bond[i]-1; k++) { bond_atom[i][k] = bond_atom[i][k+1]; bond_type[i][k] = bond_type[i][k+1]; + if (n_histories > 0) + for (auto &ihistory: histories) + ((FixBondHistory *) ihistory)->shift_bond(i,k,k+1); } + if (n_histories > 0) + for (auto &ihistory: histories) + ((FixBondHistory *) ihistory)->delete_bond(i,num_bond[i]-1); num_bond[i]--; break; } diff --git a/src/delete_bonds.cpp b/src/delete_bonds.cpp index 9947434da3..682a4476b5 100644 --- a/src/delete_bonds.cpp +++ b/src/delete_bonds.cpp @@ -19,8 +19,10 @@ #include "comm.h" #include "domain.h" #include "error.h" +#include "fix_bond_history.h" #include "force.h" #include "group.h" +#include "modify.h" #include "special.h" #include @@ -116,6 +118,10 @@ void DeleteBonds::command(int narg, char **arg) iarg++; } + // find instances of bond history to delete data + auto histories = modify->get_fix_by_style("BOND_HISTORY"); + int n_histories = histories.size(); + // border swap to insure type and mask is current for off-proc atoms // enforce PBC before in case atoms are outside box @@ -331,6 +337,9 @@ void DeleteBonds::command(int narg, char **arg) n = atom->num_bond[i]; atom->bond_type[i][m] = atom->bond_type[i][n-1]; atom->bond_atom[i][m] = atom->bond_atom[i][n-1]; + if (n_histories > 0) + for (auto &ihistory: histories) + ((FixBondHistory *) ihistory)->delete_bond(i,m); atom->num_bond[i]--; } else m++; } else m++; diff --git a/src/BPM/fix_bond_history.cpp b/src/fix_bond_history.cpp similarity index 86% rename from src/BPM/fix_bond_history.cpp rename to src/fix_bond_history.cpp index 439c1131fe..6a187ca56b 100644 --- a/src/BPM/fix_bond_history.cpp +++ b/src/fix_bond_history.cpp @@ -31,7 +31,7 @@ using namespace LAMMPS_NS; using namespace FixConst; #define LB_FACTOR 1.5 -#define DELTA 10000 +#define DELTA 8192 /* ---------------------------------------------------------------------- */ @@ -84,32 +84,13 @@ int FixBondHistory::setmask() void FixBondHistory::post_constructor() { // Store saved bond quantities for each atom using fix property atom - char **newarg = new char*[5]; - int nvalue = 0; + + char *id_fix = utils::strdup(id + std::string("_FIX_PROP_ATOM")); + char *id_array = utils::strdup(std::string("d2_") + id); + modify->add_fix(fmt::format("{} {} property/atom {} {}", + id_fix, group->names[igroup], id_array, nbond*ndata)); int tmp1, tmp2; - - int nn = strlen(id) + strlen("_FIX_PROP_ATOM") + 1; - new_fix_id = new char[nn]; - strcpy(new_fix_id, "FIX_PROP_ATOM_"); - strcat(new_fix_id, id); - - nn = strlen(id) + 4 ; - array_id = new char[nn]; - strcpy(array_id, "d2_"); - strcat(array_id, id); - - char ncols[16]; - sprintf(ncols,"%d",nbond*ndata); - newarg[0] = new_fix_id; - newarg[1] = group->names[igroup]; - newarg[2] = (char *) "property/atom"; - newarg[3] = array_id; - newarg[4] = ncols; - - modify->add_fix(5,newarg); - index = atom->find_custom(&array_id[3],tmp1,tmp2); - - delete [] newarg; + index = atom->find_custom(&id_array[3],tmp1,tmp2); } /* ---------------------------------------------------------------------- */ @@ -137,6 +118,7 @@ double FixBondHistory::get_atom_value(int i, int m, int idata) void FixBondHistory::pre_exchange() { if (!update_flag) return; + if (!stored_flag) return; if (!bondstore) return; int i1, i2, n, m, idata; @@ -194,6 +176,12 @@ void FixBondHistory::allocate() void FixBondHistory::setup_post_neighbor() { + //Grow array if number of bonds has increased + while (neighbor->nbondlist >= maxbond) { + maxbond += DELTA; + memory->grow(bondstore,maxbond,ndata,"fix_bond_store:bondstore"); + } + pre_exchange(); post_neighbor(); } @@ -296,13 +284,28 @@ void FixBondHistory::set_arrays(int i) } /* ---------------------------------------------------------------------- - Remove all data for row by compressing data + Remove all data for row by compressing data - moving last element ------------------------------------------------------------------------- */ void FixBondHistory::delete_bond(int i, int m) { double **stored = atom->darray[index]; int n = atom->num_bond[i]; + if (m != n-1) shift_bond(i, m, n-1); + for (int idata = 0; idata < ndata; idata ++) - stored[i][m*ndata+idata] = stored[i][(n-1)*ndata+idata]; + stored[i][(n-1)*ndata+idata] = 0.0; +} + +/* ---------------------------------------------------------------------- + Shift bond data to a new location + Used by some fixes that delete bonds which don't move last element +------------------------------------------------------------------------- */ + +void FixBondHistory::shift_bond(int i, int m, int k) +{ + double **stored = atom->darray[index]; + int n = atom->num_bond[i]; + for (int idata = 0; idata < ndata; idata ++) + stored[i][m*ndata+idata] = stored[i][k*ndata+idata]; } \ No newline at end of file diff --git a/src/BPM/fix_bond_history.h b/src/fix_bond_history.h similarity index 98% rename from src/BPM/fix_bond_history.h rename to src/fix_bond_history.h index 63102f123c..58c40c2f36 100644 --- a/src/BPM/fix_bond_history.h +++ b/src/fix_bond_history.h @@ -42,6 +42,7 @@ class FixBondHistory : public Fix { void update_atom_value(int, int, int, double); double get_atom_value(int, int, int); void delete_bond(int,int); + void shift_bond(int,int,int); double **bondstore; int stored_flag; diff --git a/src/fix_store_local.cpp b/src/fix_store_local.cpp index 6ccadc8e02..be5e007231 100644 --- a/src/fix_store_local.cpp +++ b/src/fix_store_local.cpp @@ -22,7 +22,7 @@ using namespace LAMMPS_NS; using namespace FixConst; -#define DELTA 1000 +#define DELTA 1024 /* ---------------------------------------------------------------------- */ @@ -32,9 +32,9 @@ FixStoreLocal::FixStoreLocal(LAMMPS *lmp, int narg, char **arg) : 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; + nreset = utils::inumeric(FLERR, arg[3], false, lmp); + if (nreset <= 0) error->all(FLERR, "Illegal fix store/local command"); + local_freq = nreset; nvalues = utils::inumeric(FLERR, arg[4], false, lmp); @@ -92,7 +92,7 @@ void FixStoreLocal::add_data(double *input_data, int i, int j) void FixStoreLocal::post_force(int /*vflag*/) { - if (update->ntimestep % nevery == 0) { + if (update->ntimestep % nreset == 0) { size_local_rows = ncount; ncount = 0; } diff --git a/src/fix_store_local.h b/src/fix_store_local.h index 3552b55a60..0be752ff52 100644 --- a/src/fix_store_local.h +++ b/src/fix_store_local.h @@ -41,6 +41,7 @@ class FixStoreLocal : public Fix { double **array; int ncount; + int nreset; void reallocate(int); }; From 455cb09cf4bf9ac2e051f26263bffecb950d3171 Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Wed, 8 Dec 2021 16:47:42 -0700 Subject: [PATCH 14/40] Adding compatability with MC fixes, set_array to property/atom, faster update/special/bonds, single methods, and misc small changes --- doc/src/Howto_bpm.rst | 13 +- doc/src/Howto_broken_bonds.rst | 4 +- doc/src/bond_bpm_rotational.rst | 7 +- doc/src/bond_bpm_spring.rst | 6 +- examples/bpm/impact/in.bpm.impact.rotational | 103 ++-- examples/bpm/impact/in.bpm.impact.spring | 107 ++-- examples/bpm/pour/in.bpm.pour | 70 +-- src/.gitignore | 2 - src/BPM/bond_bpm.cpp | 47 +- src/BPM/bond_bpm.h | 4 + src/BPM/bond_bpm_rotational.cpp | 577 +++++++++++-------- src/BPM/bond_bpm_rotational.h | 6 + src/BPM/bond_bpm_spring.cpp | 56 +- src/BPM/bond_bpm_spring.h | 1 + src/BPM/pair_bpm_spring.cpp | 7 +- src/bond.cpp | 6 + src/bond.h | 3 + src/fix_bond_history.cpp | 2 +- src/fix_bond_history.h | 2 +- src/fix_property_atom.cpp | 59 +- src/fix_property_atom.h | 1 + src/fix_store_local.h | 2 +- src/{BPM => }/fix_update_special_bonds.cpp | 130 ++--- src/{BPM => }/fix_update_special_bonds.h | 14 +- src/lmptype.h | 5 +- 25 files changed, 681 insertions(+), 553 deletions(-) rename src/{BPM => }/fix_update_special_bonds.cpp (64%) rename src/{BPM => }/fix_update_special_bonds.h (85%) diff --git a/doc/src/Howto_bpm.rst b/doc/src/Howto_bpm.rst index 5929dbc962..893486c989 100644 --- a/doc/src/Howto_bpm.rst +++ b/doc/src/Howto_bpm.rst @@ -3,7 +3,7 @@ Bonded particle models The BPM package implements bonded particle models which can be used to simulate mesoscale solids. Solids are constructed as a collection of - + particles which each represent a coarse-grained region of space much larger than the atomistic scale. Particles within a solid region are then connected by a network of bonds to provide solid elasticity. @@ -24,7 +24,7 @@ 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. +create solid grains. In this implementation, bonds store their reference state when they are first computed in the setup of the first simulation run. Data is then @@ -47,7 +47,7 @@ this, LAMMPS requires :doc:`newton ` bond off such that all processors containing an atom know when a bond breaks. Additionally, one must do either (A) or (B). -(A) +(A) Use the following special bond settings @@ -64,7 +64,7 @@ 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) +(B) Alternatively, one can simply overlay pair interactions such that all bonded particles also feel pair interactions. This can be accomplished @@ -109,13 +109,14 @@ velocity damping as its sister bond style. ---------- -While LAMMPS has many untilites to create and delete bonds, only a -select few are compatible with BPM bond styles. They include: +While LAMMPS has many untilites to create and delete bonds, the +following are currently compatible with BPM bond styles: * :doc:`create_bonds ` * :doc:`delete_bonds ` * :doc:`fix bond/create ` * :doc:`fix bond/break ` +* :doc:`fix bond/swap ` Note :doc:`bond_create ` requires certain special_bonds settings. To subtract pair interactions, one will need to switch between different diff --git a/doc/src/Howto_broken_bonds.rst b/doc/src/Howto_broken_bonds.rst index f7a6df6580..bf82088dec 100755 --- a/doc/src/Howto_broken_bonds.rst +++ b/doc/src/Howto_broken_bonds.rst @@ -31,7 +31,9 @@ page. Bonds can also be broken by fixes which change bond topology, including :doc:`fix bond/break ` and -:doc:`fix bond/react `. +:doc:`fix bond/react `. These fixes will automatically +trigger a rebuild of the neighbor list and update special bond data structures +when bonds are broken. Note that when bonds are dumped to a file via the :doc:`dump local ` command, bonds with type 0 are not included. The :doc:`delete_bonds ` command can also be used to query the diff --git a/doc/src/bond_bpm_rotational.rst b/doc/src/bond_bpm_rotational.rst index ad2c4ad265..fd6b448f24 100644 --- a/doc/src/bond_bpm_rotational.rst +++ b/doc/src/bond_bpm_rotational.rst @@ -150,13 +150,18 @@ status of broken bonds or permanently delete them, e.g.: ---------- -Restart +Restart and other info """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" This bond style writes the reference state of each bond to :doc:`binary restart files `. Loading a restart file will properly resume bonds. +The single() function of these pair styles returns 0.0 for the energy +of a pairwise interaction, since energy is not conserved in these +dissipative potentials. It also returns only the normal component of +the pairwise interaction force. + Restrictions """""""""""" diff --git a/doc/src/bond_bpm_spring.rst b/doc/src/bond_bpm_spring.rst index c0624d7d35..4bd73d6af0 100644 --- a/doc/src/bond_bpm_spring.rst +++ b/doc/src/bond_bpm_spring.rst @@ -113,13 +113,17 @@ query the status of broken bonds or permanently delete them, e.g.: ---------- -Restart +Restart and other info """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" This bond style writes the reference state of each bond to :doc:`binary restart files `. Loading a restart file will properly resume bonds. +The single() function of these pair styles returns 0.0 for the energy +of a pairwise interaction, since energy is not conserved in these +dissipative potentials. + Restrictions """""""""""" diff --git a/examples/bpm/impact/in.bpm.impact.rotational b/examples/bpm/impact/in.bpm.impact.rotational index 3c4667ca1b..34443fca6f 100644 --- a/examples/bpm/impact/in.bpm.impact.rotational +++ b/examples/bpm/impact/in.bpm.impact.rotational @@ -1,51 +1,52 @@ -units lj -dimension 3 -boundary f f f -atom_style sphere/bpm -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.0 -region box block -25 15 -22 22 -22 22 -create_box 1 box bond/types 2 extra/bond/per/atom 20 extra/special/per/atom 50 - -region disk cylinder x 0.0 0.0 20.0 -0.5 0.5 -create_atoms 1 region disk -group plate region disk - -region ball sphere 8.0 0.0 0.0 6.0 -create_atoms 1 region ball -group projectile region ball - -displace_atoms all random 0.1 0.1 0.1 134598738 - -neighbor 1.0 bin -pair_style gran/hooke/history 1.0 NULL 0.5 NULL 0.1 1 -bond_style bpm/rotational store/local 2 time id1 id2 -pair_coeff 1 1 -bond_coeff 1 1.0 0.2 0.02 0.02 0.05 0.01 0.01 0.01 0.1 0.02 0.002 0.002 -bond_coeff 2 1.0 0.2 0.02 0.02 0.20 0.04 0.04 0.04 0.1 0.02 0.002 0.002 - -fix 1 all nve/sphere/bpm -fix 2 all store/local 100 3 - -create_bonds many plate plate 1 0.0 1.5 -create_bonds many projectile projectile 2 0.0 1.5 - -neighbor 0.3 bin -special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0 - -velocity projectile set -0.05 0.0 0.0 -compute nbond all nbond/atom -compute tbond all reduce sum c_nbond - -timestep 0.05 -thermo_style custom step ke pe pxx pyy pzz c_tbond -thermo 100 -thermo_modify lost ignore lost/bond ignore -#dump 1 all custom 100 atomDump id radius x y z c_nbond - -dump 2 all local 100 brokenDump f_2[1] f_2[2] f_2[3] -dump_modify 2 header no - -run 7500 +units lj +dimension 3 +boundary f f f +atom_style sphere/bpm +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.0 +region box block -25 15 -22 22 -22 22 +create_box 1 box bond/types 2 extra/bond/per/atom 20 extra/special/per/atom 50 + +region disk cylinder x 0.0 0.0 20.0 -0.5 0.5 +create_atoms 1 region disk +group plate region disk + +region ball sphere 8.0 0.0 0.0 6.0 +create_atoms 1 region ball +group projectile region ball + +displace_atoms all random 0.1 0.1 0.1 134598738 + +neighbor 1.0 bin +pair_style gran/hooke/history 1.0 NULL 0.5 NULL 0.1 1 +pair_coeff 1 1 + +fix 1 all nve/sphere/bpm +fix 2 all store/local 100 3 + +create_bonds many plate plate 1 0.0 1.5 +create_bonds many projectile projectile 2 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/rotational store/local 2 time id1 id2 +bond_coeff 1 1.0 0.2 0.02 0.02 0.05 0.01 0.01 0.01 0.1 0.02 0.002 0.002 +bond_coeff 2 1.0 0.2 0.02 0.02 0.20 0.04 0.04 0.04 0.1 0.02 0.002 0.002 + +velocity projectile set -0.05 0.0 0.0 +compute nbond all nbond/atom +compute tbond all reduce sum c_nbond + +timestep 0.05 +thermo_style custom step ke pe pxx pyy pzz c_tbond +thermo 100 +thermo_modify lost ignore lost/bond ignore +#dump 1 all custom 100 atomDump id radius x y z c_nbond + +dump 2 all local 100 brokenDump f_2[1] f_2[2] f_2[3] +dump_modify 2 header no + +run 7500 diff --git a/examples/bpm/impact/in.bpm.impact.spring b/examples/bpm/impact/in.bpm.impact.spring index ef5506218c..60822cde01 100644 --- a/examples/bpm/impact/in.bpm.impact.spring +++ b/examples/bpm/impact/in.bpm.impact.spring @@ -1,53 +1,54 @@ -units lj -dimension 3 -boundary f f f -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.0 -region box block -25 15 -22 22 -22 22 -create_box 1 box bond/types 2 extra/bond/per/atom 20 extra/special/per/atom 50 - -region disk cylinder x 0.0 0.0 20.0 -0.5 0.5 -create_atoms 1 region disk -group plate region disk - -region ball sphere 8.0 0.0 0.0 6.0 -create_atoms 1 region ball -group projectile region ball - -displace_atoms all random 0.1 0.1 0.1 134598738 - -mass 1 1.0 - -neighbor 1.0 bin -pair_style bpm/spring -bond_style bpm/spring store/local 2 time id1 id2 -pair_coeff 1 1 1.0 1.0 1.0 -bond_coeff 1 1.0 0.04 1.0 -bond_coeff 2 1.0 0.20 1.0 - -fix 1 all nve -fix 2 all store/local 100 3 - -create_bonds many plate plate 1 0.0 1.5 -create_bonds many projectile projectile 2 0.0 1.5 - -neighbor 0.3 bin -special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0 - -velocity projectile set -0.05 0.0 0.0 -compute nbond all nbond/atom -compute tbond all reduce sum c_nbond - -timestep 0.1 -thermo_style custom step ke pe pxx pyy pzz c_tbond -thermo 100 -thermo_modify lost ignore lost/bond ignore -#dump 1 all custom 100 atomDump id x y z c_nbond - -dump 2 all local 100 brokenDump f_2[1] f_2[2] f_2[3] -dump_modify 2 header no - -run 7500 +units lj +dimension 3 +boundary f f f +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.0 +region box block -25 15 -22 22 -22 22 +create_box 1 box bond/types 2 extra/bond/per/atom 20 extra/special/per/atom 50 + +region disk cylinder x 0.0 0.0 20.0 -0.5 0.5 +create_atoms 1 region disk +group plate region disk + +region ball sphere 8.0 0.0 0.0 6.0 +create_atoms 1 region ball +group projectile region ball + +displace_atoms all random 0.1 0.1 0.1 134598738 + +mass 1 1.0 + +neighbor 1.0 bin +pair_style bpm/spring +pair_coeff 1 1 1.0 1.0 1.0 + +fix 1 all nve +fix 2 all store/local 100 3 + +create_bonds many plate plate 1 0.0 1.5 +create_bonds many projectile projectile 2 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 store/local 2 time id1 id2 +bond_coeff 1 1.0 0.04 1.0 +bond_coeff 2 1.0 0.20 1.0 + +velocity projectile set -0.05 0.0 0.0 +compute nbond all nbond/atom +compute tbond all reduce sum c_nbond + +timestep 0.1 +thermo_style custom step ke pe pxx pyy pzz c_tbond +thermo 100 +thermo_modify lost ignore lost/bond ignore +#dump 1 all custom 100 atomDump id x y z c_nbond + +dump 2 all local 100 brokenDump f_2[1] f_2[2] f_2[3] +dump_modify 2 header no + +run 7500 diff --git a/examples/bpm/pour/in.bpm.pour b/examples/bpm/pour/in.bpm.pour index 98dca9d3a7..c6bb288d30 100644 --- a/examples/bpm/pour/in.bpm.pour +++ b/examples/bpm/pour/in.bpm.pour @@ -1,35 +1,35 @@ -units lj -dimension 3 -boundary m m m -atom_style sphere/bpm -special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0 -newton on off -comm_modify vel yes cutoff 3.3 -region box block -15 15 -15 15 0 60.0 -create_box 1 box bond/types 1 extra/bond/per/atom 15 extra/special/per/atom 50 - -molecule my_mol "rect.mol" -region wall_cyl cylinder z 0.0 0.0 10.0 EDGE EDGE side in -region dropzone cylinder z 0.0 0.0 10.0 40.0 50.0 side in - -pair_style gran/hertz/history 1.0 NULL 0.5 NULL 0.1 1 -bond_style bpm/rotational -pair_coeff 1 1 -bond_coeff 1 1.0 0.2 0.01 0.01 2.0 0.4 0.02 0.02 0.2 0.04 0.002 0.002 - -compute nbond all nbond/atom -compute tbond all reduce sum c_nbond -compute_modify thermo_temp dynamic/dof yes - -fix 1 all wall/gran hertz/history 1.0 NULL 0.5 NULL 0.1 1 zplane 0.0 NULL -fix 2 all wall/gran/region hertz/history 1.0 NULL 0.5 NULL 0.1 1 region wall_cyl -fix 3 all gravity 1e-4 vector 0 0 -1 -fix 4 all deposit 40 0 1500 712511343 mol my_mol region dropzone near 2.0 vz -0.05 -0.05 -fix 5 all nve/sphere/bpm - -timestep 0.05 -thermo_style custom step ke pe pxx pyy pzz c_tbond -thermo 100 -#dump 1 all custom 500 atomDump id radius x y z c_nbond mol - -run 100000 +units lj +dimension 3 +boundary m m m +atom_style sphere/bpm +special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0 +newton on off +comm_modify vel yes cutoff 3.3 +region box block -15 15 -15 15 0 60.0 +create_box 1 box bond/types 1 extra/bond/per/atom 15 extra/special/per/atom 50 + +molecule my_mol "rect.mol" +region wall_cyl cylinder z 0.0 0.0 10.0 EDGE EDGE side in +region dropzone cylinder z 0.0 0.0 10.0 40.0 50.0 side in + +pair_style gran/hertz/history 1.0 NULL 0.5 NULL 0.1 1 +bond_style bpm/rotational +pair_coeff 1 1 +bond_coeff 1 1.0 0.2 0.01 0.01 2.0 0.4 0.02 0.02 0.2 0.04 0.002 0.002 + +compute nbond all nbond/atom +compute tbond all reduce sum c_nbond +compute_modify thermo_temp dynamic/dof yes + +fix 1 all wall/gran hertz/history 1.0 NULL 0.5 NULL 0.1 1 zplane 0.0 NULL +fix 2 all wall/gran/region hertz/history 1.0 NULL 0.5 NULL 0.1 1 region wall_cyl +fix 3 all gravity 1e-4 vector 0 0 -1 +fix 4 all deposit 40 0 1500 712511343 mol my_mol region dropzone near 2.0 vz -0.05 -0.05 +fix 5 all nve/sphere/bpm + +timestep 0.05 +thermo_style custom step ke pe pxx pyy pzz c_tbond +thermo 100 +#dump 1 all custom 500 atomDump id radius x y z c_nbond mol + +run 100000 diff --git a/src/.gitignore b/src/.gitignore index 19c5295576..0c6c893234 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -265,8 +265,6 @@ /compute_nbond_atom.h /fix_nve_sphere_bpm.cpp /fix_nve_sphere_bpm.h -/fix_update_special_bonds.cpp -/fix_update_special_bonds.h /pair_bpm_spring.cpp /pair_bpm_spring.h diff --git a/src/BPM/bond_bpm.cpp b/src/BPM/bond_bpm.cpp index 00a5ebc6e4..7ff883a140 100644 --- a/src/BPM/bond_bpm.cpp +++ b/src/BPM/bond_bpm.cpp @@ -25,6 +25,9 @@ #include "modify.h" #include "update.h" +#include +#include + using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ @@ -49,7 +52,7 @@ BondBPM::BondBPM(LAMMPS *lmp) : Bond(lmp) // create dummy fix as placeholder for FixUpdateSpecialBonds // this is so final order of Modify:fix will conform to input script - id_fix_dummy = utils::strdup("BPM_DUMMY"); + id_fix_dummy = utils::strdup("BPM_DUMMY" + std::to_string(instance_me)); modify->add_fix(fmt::format("{} all DUMMY ", id_fix_dummy)); } @@ -58,14 +61,16 @@ BondBPM::BondBPM(LAMMPS *lmp) : Bond(lmp) BondBPM::~BondBPM() { delete [] pack_choice; - delete [] id_fix_store_local; - delete [] id_fix_prop_atom; if (id_fix_dummy) modify->delete_fix(id_fix_dummy); if (id_fix_update) modify->delete_fix(id_fix_update); + if (id_fix_store_local) modify->delete_fix(id_fix_store_local); + if (id_fix_prop_atom) modify->delete_fix(id_fix_prop_atom); delete [] id_fix_dummy; delete [] id_fix_update; + delete [] id_fix_store_local; + delete [] id_fix_prop_atom; memory->destroy(output_data); } @@ -110,7 +115,7 @@ void BondBPM::init_style() error->all(FLERR,"Without overlay/pair, BPM bond sytles requires special Coulomb weights = 1,1,1"); if (id_fix_dummy) { - id_fix_update = utils::strdup("BPM_update_special_bonds"); + id_fix_update = utils::strdup("BPM_update_special_bonds" + std::to_string(instance_me)); fix_update_special_bonds = (FixUpdateSpecialBonds *) modify->replace_fix(id_fix_dummy, fmt::format("{} all UPDATE_SPECIAL_BONDS", id_fix_update),1); delete [] id_fix_dummy; @@ -141,11 +146,14 @@ void BondBPM::init_style() void BondBPM::settings(int narg, char **arg) { + leftover_args.clear(); + + int local_freq; int iarg = 0; while (iarg < narg) { if (strcmp(arg[iarg], "store/local") == 0) { - id_fix_store_local = utils::strdup(arg[iarg+1]); nvalues = 0; + local_freq = utils::inumeric(FLERR, arg[iarg+1], false, lmp); pack_choice = new FnPtrPack[narg - iarg - 1]; iarg += 2; while (iarg < narg) { @@ -179,31 +187,44 @@ void BondBPM::settings(int narg, char **arg) overlay_flag = 1; iarg ++; } else { - error->all(FLERR, "Illegal pair_style command"); + leftover_args.push_back(iarg); + iarg ++; } } - if (id_fix_store_local) { + if (nvalues != 0 && !id_fix_store_local) { + //Todo, assign ID and create fix id_fix_store_local = utils::strdup(arg[iarg+1]); + if (nvalues == 0) error->all(FLERR, "Bond style bpm/rotational must include at least one value to output"); memory->create(output_data, nvalues, "bond/bpm:output_data"); // Use store property to save reference positions as it can transfer to ghost atoms + // This won't work for instances where bonds are added (e.g. fix pour) but in those cases + // a reference state isn't well defined if (prop_atom_flag == 1) { - id_fix_prop_atom = utils::strdup("BPM_property_atom"); + id_fix_prop_atom = utils::strdup("BPM_property_atom" + std::to_string(instance_me)); int ifix = modify->find_fix(id_fix_prop_atom); + + char *x_ref_id = utils::strdup("BPM_X_REF" + std::to_string(instance_me)); + char *y_ref_id = utils::strdup("BPM_Y_REF" + std::to_string(instance_me)); + char *z_ref_id = utils::strdup("BPM_Z_REF" + std::to_string(instance_me)); if (ifix < 0) { - modify->add_fix(fmt::format("{} all property/atom " - "d_BPM_X_REF d_BPM_Y_REF d_BPM_Z_REF ghost yes", id_fix_prop_atom)); + modify->add_fix(fmt::format("{} all property/atom {} {} {} ghost yes", + id_fix_prop_atom, x_ref_id, y_ref_id, z_ref_id)); ifix = modify->find_fix(id_fix_prop_atom); } int type_flag; int col_flag; - index_x_ref = atom->find_custom("BPM_X_REF", type_flag, col_flag); - index_y_ref = atom->find_custom("BPM_Y_REF", type_flag, col_flag); - index_z_ref = atom->find_custom("BPM_Z_REF", type_flag, col_flag); + index_x_ref = atom->find_custom(x_ref_id, type_flag, col_flag); + index_y_ref = atom->find_custom(y_ref_id, type_flag, col_flag); + index_z_ref = atom->find_custom(z_ref_id, type_flag, col_flag); + + delete [] x_ref_id; + delete [] y_ref_id; + delete [] z_ref_id; if (modify->fix[ifix]->restart_reset) { modify->fix[ifix]->restart_reset = 0; diff --git a/src/BPM/bond_bpm.h b/src/BPM/bond_bpm.h index 4836a08a64..3f71aefa45 100644 --- a/src/BPM/bond_bpm.h +++ b/src/BPM/bond_bpm.h @@ -16,6 +16,8 @@ #include "bond.h" +#include + namespace LAMMPS_NS { class BondBPM : public Bond { @@ -36,6 +38,8 @@ class BondBPM : public Bond { double r0_max_estimate; double max_stretch; + std::vector leftover_args; + char *id_fix_dummy, *id_fix_update; char *id_fix_store_local, *id_fix_prop_atom; class FixStoreLocal *fix_store_local; diff --git a/src/BPM/bond_bpm_rotational.cpp b/src/BPM/bond_bpm_rotational.cpp index 0f62d88966..80fff550ee 100644 --- a/src/BPM/bond_bpm_rotational.cpp +++ b/src/BPM/bond_bpm_rotational.cpp @@ -176,6 +176,270 @@ void BondBPMRotational::store_data() fix_bond_history->post_neighbor(); } +/* ---------------------------------------------------------------------- + Calculate forces using formulation in: + 1) Y. Wang Acta Geotechnica 2009 + 2) P. Mora & Y. Wang Advances in Geomcomputing 2009 +---------------------------------------------------------------------- */ + +double BondBPMRotational::elastic_forces(int i1, int i2, int type, double& Fr, + double r_mag, double r0_mag, double r_mag_inv, double* rhat, double* r, + double* r0, double* force1on2, double* torque1on2, double* torque2on1) +{ + int m; + double breaking, temp, r0_dot_rb, c, gamma; + double psi, theta, cos_phi, sin_phi; + double mag_in_plane, mag_out_plane; + double Fs_mag, Tt_mag, Tb_mag; + + double q1[4], q2[4]; + double q2inv[4], mq[4], mqinv[4], qp21[4], q21[4], qtmp[4]; + double rb[3], rb_x_r0[3], s[3], t[3]; + double Fs[3], Fsp[3], F_rot[3], Ftmp[3]; + double Ts[3], Tb[3], Tt[3], Tbp[3], Ttp[3], Tsp[3], T_rot[3], Ttmp[3]; + + double **quat = atom->quat; + + q1[0] = quat[i1][0]; + q1[1] = quat[i1][1]; + q1[2] = quat[i1][2]; + q1[3] = quat[i1][3]; + + q2[0] = quat[i2][0]; + q2[1] = quat[i2][1]; + q2[2] = quat[i2][2]; + q2[3] = quat[i2][3]; + + // Calculate normal forces, rb = bond vector in particle 1's frame + MathExtra::qconjugate(q2, q2inv); + MathExtra::quatrotvec(q2inv, r, rb); + Fr = Kr[type]*(r_mag - r0_mag); + + MathExtra::scale3(Fr*r_mag_inv, rb, F_rot); + + // Calculate forces due to tangential displacements (no rotation) + r0_dot_rb = dot3(r0, rb); + c = r0_dot_rb*r_mag_inv/r0_mag; + gamma = acos_limit(c); + + MathExtra::cross3(rb, r0, rb_x_r0); + MathExtra::cross3(rb, rb_x_r0, s); + MathExtra::norm3(s); + + MathExtra::scale3(Ks[type]*r_mag*gamma, s, Fs); + + // Calculate torque due to tangential displacements + MathExtra::cross3(r0, rb, t); + MathExtra::norm3(t); + + MathExtra::scale3(0.5*r_mag*Ks[type]*r_mag*gamma, t, Ts); + + // Relative rotation force/torque + // Use representation of X'Y'Z' rotations from Wang, Mora 2009 + temp = r_mag + rb[2]; + if (temp < 0.0) temp = 0.0; + mq[0] = sqrt(2)*0.5*sqrt(temp*r_mag_inv); + + temp = sqrt(rb[0]*rb[0]+rb[1]*rb[1]); + if (temp != 0.0) { + mq[1] = -sqrt(2)*0.5/temp; + temp = r_mag - rb[2]; + if (temp < 0.0) temp = 0.0; + mq[1] *= sqrt(temp*r_mag_inv); + mq[2] = -mq[1]; + mq[1] *= rb[1]; + mq[2] *= rb[0]; + } else { + // If aligned along z axis, x,y terms zero (r_mag-rb[2] = 0) + mq[1] = 0.0; + mq[2] = 0.0; + } + mq[3] = 0.0; + + // qp21 = opposite of r^\circ_21 in Wang + // q21 = opposite of r_21 in Wang + MathExtra::quatquat(q2inv, q1, qp21); + MathExtra::qconjugate(mq, mqinv); + MathExtra::quatquat(mqinv,qp21,qtmp); + MathExtra::quatquat(qtmp,mq,q21); + + temp = sqrt(q21[0]*q21[0] + q21[3]*q21[3]); + if (temp != 0.0) { + c = q21[0]/temp; + psi = 2.0*acos_limit(c); + } else { + c = 0.0; + psi = 0.0; + } + + // Map negative rotations + if (q21[3] < 0.0) // sin = q21[3]/temp + psi = -psi; + + if (q21[3] == 0.0) + psi = 0.0; + + c = q21[0]*q21[0] - q21[1]*q21[1] - q21[2]*q21[2] + q21[3]*q21[3]; + theta = acos_limit(c); + + // Separately calculte magnitude of quaternion in x-y and out of x-y planes + // to avoid dividing by zero + mag_out_plane = (q21[0]*q21[0] + q21[3]*q21[3]); + mag_in_plane = (q21[1]*q21[1] + q21[2]*q21[2]); + + if (mag_in_plane == 0.0) { + // No rotation => no bending/shear torque or extra shear force + // achieve by setting cos/sin = 0 + cos_phi = 0.0; + sin_phi = 0.0; + } else if (mag_out_plane == 0.0) { + // Calculate angle in plane + cos_phi = q21[2]/sqrt(mag_in_plane); + sin_phi = -q21[1]/sqrt(mag_in_plane); + } else { + // Default equations in Mora, Wang 2009 + cos_phi = q21[1]*q21[3] + q21[0]*q21[2]; + sin_phi = q21[2]*q21[3] - q21[0]*q21[1]; + + cos_phi /= sqrt(mag_out_plane*mag_in_plane); + sin_phi /= sqrt(mag_out_plane*mag_in_plane); + } + + Tbp[0] = -Kb[type]*theta*sin_phi; + Tbp[1] = Kb[type]*theta*cos_phi; + Tbp[2] = 0.0; + + Ttp[0] = 0.0; + Ttp[1] = 0.0; + Ttp[2] = Kt[type]*psi; + + Fsp[0] = -0.5*Ks[type]*r_mag*theta*cos_phi; + Fsp[1] = -0.5*Ks[type]*r_mag*theta*sin_phi; + Fsp[2] = 0.0; + + Tsp[0] = 0.25*Ks[type]*r_mag*r_mag*theta*sin_phi; + Tsp[1] = -0.25*Ks[type]*r_mag*r_mag*theta*cos_phi; + Tsp[2] = 0.0; + + // Rotate forces/torques back to 1st particle's frame + + MathExtra::quatrotvec(mq, Fsp, Ftmp); + MathExtra::quatrotvec(mq, Tsp, Ttmp); + for (m = 0; m < 3; m++) { + Fs[m] += Ftmp[m]; + Ts[m] += Ttmp[m]; + } + + MathExtra::quatrotvec(mq, Tbp, Tb); + MathExtra::quatrotvec(mq, Ttp, Tt); + + // Sum forces and calculate magnitudes + F_rot[0] += Fs[0]; + F_rot[1] += Fs[1]; + F_rot[2] += Fs[2]; + MathExtra::quatrotvec(q2, F_rot, force1on2); + + T_rot[0] = Ts[0] + Tt[0] + Tb[0]; + T_rot[1] = Ts[1] + Tt[1] + Tb[1]; + T_rot[2] = Ts[2] + Tt[2] + Tb[2]; + MathExtra::quatrotvec(q2, T_rot, torque1on2); + + T_rot[0] = Ts[0] - Tt[0] - Tb[0]; + T_rot[1] = Ts[1] - Tt[1] - Tb[1]; + T_rot[2] = Ts[2] - Tt[2] - Tb[2]; + MathExtra::quatrotvec(q2, T_rot, torque2on1); + + Fs_mag = MathExtra::len3(Fs); + Tt_mag = MathExtra::len3(Tt); + Tb_mag = MathExtra::len3(Tb); + + breaking = Fr/Fcr[type] + Fs_mag/Fcs[type] + Tb_mag/Tcb[type] + Tt_mag/Tct[type]; + if (breaking < 0.0) breaking = 0.0; + + return breaking; +} + +/* ---------------------------------------------------------------------- + Calculate damping using formulation in + Y. Wang, F. Alonso-Marroquin, W. Guo 2015 + Note: n points towards 1 vs pointing towards 2 +---------------------------------------------------------------------- */ + +void BondBPMRotational::damping_forces(int i1, int i2, int type, double& Fr, + double* rhat, double* r, double* force1on2, double* torque1on2, + double* torque2on1) +{ + double v1dotr, v2dotr, w1dotr, w2dotr; + double s1[3], s2[3], tdamp[3], tmp[3]; + double vn1[3], vn2[3], vt1[3], vt2[3], vroll[3]; + double wxn1[3], wxn2[3], wn1[3], wn2[3]; + + double **v = atom->v; + double **omega = atom->omega; + + // Damp normal velocity difference + v1dotr = MathExtra::dot3(v[i1],rhat); + v2dotr = MathExtra::dot3(v[i2],rhat); + + MathExtra::scale3(v1dotr, rhat, vn1); + MathExtra::scale3(v2dotr, rhat, vn2); + + MathExtra::sub3(vn1, vn2, tmp); + MathExtra::scale3(gnorm[type], tmp); + Fr = MathExtra::lensq3(tmp); + MathExtra::add3(force1on2, tmp, force1on2); + + // Damp tangential objective velocities + MathExtra::sub3(v[i1], vn1, vt1); + MathExtra::sub3(v[i2], vn2, vt2); + + MathExtra::sub3(vt2, vt1, tmp); + MathExtra::scale3(-0.5, tmp); + + MathExtra::cross3(omega[i1], r, s1); + MathExtra::scale3(0.5, s1); + MathExtra::sub3(s1, tmp, s1); // Eq 12 + + MathExtra::cross3(omega[i2], r, s2); + MathExtra::scale3(-0.5,s2); + MathExtra::add3(s2, tmp, s2); // Eq 13 + MathExtra::scale3(-0.5,s2); + + MathExtra::sub3(s1, s2, tmp); + MathExtra::scale3(gslide[type], tmp); + MathExtra::add3(force1on2, tmp, force1on2); + + // Apply corresponding torque + MathExtra::cross3(r,tmp,tdamp); + MathExtra::scale3(-0.5, tdamp); // 0.5*r points from particle 2 to midpoint + MathExtra::add3(torque1on2, tdamp, torque1on2); + MathExtra::add3(torque2on1, tdamp, torque2on1); + + // Damp rolling + MathExtra::cross3(omega[i1], rhat, wxn1); + MathExtra::cross3(omega[i2], rhat, wxn2); + MathExtra::sub3(wxn1, wxn2, vroll); // Eq. 31 + MathExtra::cross3(r, vroll, tdamp); + + MathExtra::scale3(0.5*groll[type], tdamp); + MathExtra::add3(torque1on2, tdamp, torque1on2); + MathExtra::scale3(-1.0, tdamp); + MathExtra::add3(torque2on1, tdamp, torque2on1); + + // Damp twist + w1dotr = MathExtra::dot3(omega[i1],rhat); + w2dotr = MathExtra::dot3(omega[i2],rhat); + + MathExtra::scale3(w1dotr, rhat, wn1); + MathExtra::scale3(w2dotr, rhat, wn2); + + MathExtra::sub3(wn1, wn2, tdamp); // Eq. 38 + MathExtra::scale3(0.5*gtwist[type], tdamp); + MathExtra::add3(torque1on2, tdamp, torque1on2); + MathExtra::scale3(-1.0, tdamp); + MathExtra::add3(torque2on1, tdamp, torque2on1); +} + /* ---------------------------------------------------------------------- */ void BondBPMRotational::compute(int eflag, int vflag) @@ -186,32 +450,18 @@ void BondBPMRotational::compute(int eflag, int vflag) store_data(); } - int i1,i2,itmp,m,n,type,itype,jtype; - double q1[4], q2[4], r[3], r0[3]; - double rsq, r0_mag, r_mag, r_mag_inv, Fr, Fs_mag; - double Tt_mag, Tb_mag, breaking, smooth; + int i1,i2,itmp,n,type; + double r[3], r0[3], rhat[3]; + double delx, dely, delz, rsq, r0_mag, r_mag, r_mag_inv; + double Fr, breaking, smooth; double force1on2[3], torque1on2[3], torque2on1[3]; - double rhat[3], wn1[3], wn2[3], wxn1[3], wxn2[3], vroll[3]; - double w1dotr, w2dotr, v1dotr, v2dotr; - double vn1[3], vn2[3], vt1[3], vt2[3], tmp[3], s1[3], s2[3], tdamp[3]; - double tor1, tor2, tor3, fs1, fs2, fs3; - - double q2inv[4], rb[3], rb_x_r0[3], s[3], t[3], Fs[3]; - double q21[4], qp21[4], Tbp[3], Ttp[3]; - double Tsp[3], Fsp[3], Tt[3], Tb[3], Ts[3], F_rot[3], T_rot[3]; - double mq[4], mqinv[4], Ttmp[3], Ftmp[3], qtmp[4]; - double r0_dot_rb, gamma, c, psi, theta, sin_phi, cos_phi, temp; - double mag_in_plane, mag_out_plane; ev_init(eflag,vflag); double **x = atom->x; - double **v = atom->v; - double **omega = atom->omega; double **f = atom->f; double **torque = atom->torque; double *radius = atom->radius; - double **quat = atom->quat; tagint *tag = atom->tag; int **bondlist = neighbor->bondlist; int nbondlist = neighbor->nbondlist; @@ -249,16 +499,6 @@ void BondBPMRotational::compute(int eflag, int vflag) r0[2] = bondstore[n][3]; MathExtra::scale3(r0_mag, r0); - q1[0] = quat[i1][0]; - q1[1] = quat[i1][1]; - q1[2] = quat[i1][2]; - q1[3] = quat[i1][3]; - - q2[0] = quat[i2][0]; - q2[1] = quat[i2][1]; - q2[2] = quat[i2][2]; - q2[3] = quat[i2][3]; - // Note this is the reverse of Mora & Wang MathExtra::sub3(x[i1], x[i2], r); @@ -268,160 +508,11 @@ void BondBPMRotational::compute(int eflag, int vflag) MathExtra::scale3(r_mag_inv, r, rhat); // ------------------------------------------------------// - // Calculate forces using formulation in: - // 1) Y. Wang Acta Geotechnica 2009 - // 2) P. Mora & Y. Wang Advances in Geomcomputing 2009 + // Calculate forces, check if bond breaks // ------------------------------------------------------// - // Calculate normal forces, rb = bond vector in particle 1's frame - MathExtra::qconjugate(q2, q2inv); - MathExtra::quatrotvec(q2inv, r, rb); - Fr = Kr[type]*(r_mag - r0_mag); - - MathExtra::scale3(Fr*r_mag_inv, rb, F_rot); - - // Calculate forces due to tangential displacements (no rotation) - r0_dot_rb = dot3(r0, rb); - c = r0_dot_rb*r_mag_inv/r0_mag; - gamma = acos_limit(c); - - MathExtra::cross3(rb, r0, rb_x_r0); - MathExtra::cross3(rb, rb_x_r0, s); - MathExtra::norm3(s); - - MathExtra::scale3(Ks[type]*r_mag*gamma, s, Fs); - - // Calculate torque due to tangential displacements - MathExtra::cross3(r0, rb, t); - MathExtra::norm3(t); - - MathExtra::scale3(0.5*r_mag*Ks[type]*r_mag*gamma, t, Ts); - - // Relative rotation force/torque - // Use representation of X'Y'Z' rotations from Wang, Mora 2009 - temp = r_mag + rb[2]; - if (temp < 0.0) temp = 0.0; - mq[0] = sqrt(2)*0.5*sqrt(temp*r_mag_inv); - - temp = sqrt(rb[0]*rb[0]+rb[1]*rb[1]); - if (temp != 0.0) { - mq[1] = -sqrt(2)*0.5/temp; - temp = r_mag - rb[2]; - if (temp < 0.0) temp = 0.0; - mq[1] *= sqrt(temp*r_mag_inv); - mq[2] = -mq[1]; - mq[1] *= rb[1]; - mq[2] *= rb[0]; - } else { - // If aligned along z axis, x,y terms zero (r_mag-rb[2] = 0) - mq[1] = 0.0; - mq[2] = 0.0; - } - mq[3] = 0.0; - - // qp21 = opposite of r^\circ_21 in Wang - // q21 = opposite of r_21 in Wang - MathExtra::quatquat(q2inv, q1, qp21); - MathExtra::qconjugate(mq, mqinv); - MathExtra::quatquat(mqinv,qp21,qtmp); - MathExtra::quatquat(qtmp,mq,q21); - - temp = sqrt(q21[0]*q21[0] + q21[3]*q21[3]); - if (temp != 0.0) { - c = q21[0]/temp; - psi = 2.0*acos_limit(c); - } else { - c = 0.0; - psi = 0.0; - } - - // Map negative rotations - if (q21[3] < 0.0) // sin = q21[3]/temp - psi = -psi; - - if (q21[3] == 0.0) - psi = 0.0; - - c = q21[0]*q21[0] - q21[1]*q21[1] - q21[2]*q21[2] + q21[3]*q21[3]; - theta = acos_limit(c); - - // Separately calculte magnitude of quaternion in x-y and out of x-y planes - // to avoid dividing by zero - mag_out_plane = (q21[0]*q21[0] + q21[3]*q21[3]); - mag_in_plane = (q21[1]*q21[1] + q21[2]*q21[2]); - - if (mag_in_plane == 0.0) { - // No rotation => no bending/shear torque or extra shear force - // achieve by setting cos/sin = 0 - cos_phi = 0.0; - sin_phi = 0.0; - } else if (mag_out_plane == 0.0) { - // Calculate angle in plane - cos_phi = q21[2]/sqrt(mag_in_plane); - sin_phi = -q21[1]/sqrt(mag_in_plane); - } else { - // Default equations in Mora, Wang 2009 - cos_phi = q21[1]*q21[3] + q21[0]*q21[2]; - sin_phi = q21[2]*q21[3] - q21[0]*q21[1]; - - cos_phi /= sqrt(mag_out_plane*mag_in_plane); - sin_phi /= sqrt(mag_out_plane*mag_in_plane); - } - - Tbp[0] = -Kb[type]*theta*sin_phi; - Tbp[1] = Kb[type]*theta*cos_phi; - Tbp[2] = 0.0; - - Ttp[0] = 0.0; - Ttp[1] = 0.0; - Ttp[2] = Kt[type]*psi; - - Fsp[0] = -0.5*Ks[type]*r_mag*theta*cos_phi; - Fsp[1] = -0.5*Ks[type]*r_mag*theta*sin_phi; - Fsp[2] = 0.0; - - Tsp[0] = 0.25*Ks[type]*r_mag*r_mag*theta*sin_phi; - Tsp[1] = -0.25*Ks[type]*r_mag*r_mag*theta*cos_phi; - Tsp[2] = 0.0; - - // Rotate forces/torques back to 1st particle's frame - - MathExtra::quatrotvec(mq, Fsp, Ftmp); - MathExtra::quatrotvec(mq, Tsp, Ttmp); - for (m = 0; m < 3; m++) { - Fs[m] += Ftmp[m]; - Ts[m] += Ttmp[m]; - } - - MathExtra::quatrotvec(mq, Tbp, Tb); - MathExtra::quatrotvec(mq, Ttp, Tt); - - // Sum forces and calculate magnitudes - F_rot[0] += Fs[0]; - F_rot[1] += Fs[1]; - F_rot[2] += Fs[2]; - MathExtra::quatrotvec(q2, F_rot, force1on2); - - T_rot[0] = Ts[0] + Tt[0] + Tb[0]; - T_rot[1] = Ts[1] + Tt[1] + Tb[1]; - T_rot[2] = Ts[2] + Tt[2] + Tb[2]; - MathExtra::quatrotvec(q2, T_rot, torque1on2); - - T_rot[0] = Ts[0] - Tt[0] - Tb[0]; - T_rot[1] = Ts[1] - Tt[1] - Tb[1]; - T_rot[2] = Ts[2] - Tt[2] - Tb[2]; - MathExtra::quatrotvec(q2, T_rot, torque2on1); - - Fs_mag = MathExtra::len3(Fs); - Tt_mag = MathExtra::len3(Tt); - Tb_mag = MathExtra::len3(Tb); - - // ------------------------------------------------------// - // Check if bond breaks - // ------------------------------------------------------// - - breaking = Fr/Fcr[type] + Fs_mag/Fcs[type] + Tb_mag/Tcb[type] + Tt_mag/Tct[type]; - if (breaking < 0.0) breaking = 0.0; + breaking = elastic_forces(i1, i2, type, Fr, r_mag, r0_mag, r_mag_inv, + rhat, r, r0, force1on2, torque1on2, torque2on1); if (breaking >= 1.0) { bondlist[n][2] = 0; @@ -429,76 +520,11 @@ void BondBPMRotational::compute(int eflag, int vflag) continue; } + damping_forces(i1, i2, type, Fr, rhat, r, force1on2, torque1on2, torque2on1); + smooth = breaking*breaking; smooth = 1.0 - smooth*smooth; - // ------------------------------------------------------// - // Calculate damping using formulation in - // Y. Wang, F. Alonso-Marroquin, W. Guo 2015 - // ------------------------------------------------------// - // Note: n points towards 1 vs pointing towards 2 - - // Damp normal velocity difference - v1dotr = MathExtra::dot3(v[i1],rhat); - v2dotr = MathExtra::dot3(v[i2],rhat); - - MathExtra::scale3(v1dotr, rhat, vn1); - MathExtra::scale3(v2dotr, rhat, vn2); - - MathExtra::sub3(vn1, vn2, tmp); - MathExtra::scale3(gnorm[type], tmp); - MathExtra::add3(force1on2, tmp, force1on2); - - // Damp tangential objective velocities - MathExtra::sub3(v[i1], vn1, vt1); - MathExtra::sub3(v[i2], vn2, vt2); - - MathExtra::sub3(vt2, vt1, tmp); - MathExtra::scale3(-0.5, tmp); - - MathExtra::cross3(omega[i1], r, s1); - MathExtra::scale3(0.5, s1); - MathExtra::sub3(s1, tmp, s1); // Eq 12 - - MathExtra::cross3(omega[i2], r, s2); - MathExtra::scale3(-0.5,s2); - MathExtra::add3(s2, tmp, s2); // Eq 13 - MathExtra::scale3(-0.5,s2); - - MathExtra::sub3(s1, s2, tmp); - MathExtra::scale3(gslide[type], tmp); - MathExtra::add3(force1on2, tmp, force1on2); - - // Apply corresponding torque - MathExtra::cross3(r,tmp,tdamp); - MathExtra::scale3(-0.5, tdamp); // 0.5*r points from particle 2 to midpoint - MathExtra::add3(torque1on2, tdamp, torque1on2); - MathExtra::add3(torque2on1, tdamp, torque2on1); - - // Damp rolling - MathExtra::cross3(omega[i1], rhat, wxn1); - MathExtra::cross3(omega[i2], rhat, wxn2); - MathExtra::sub3(wxn1, wxn2, vroll); // Eq. 31 - MathExtra::cross3(r, vroll, tdamp); - - MathExtra::scale3(0.5*groll[type], tdamp); - MathExtra::add3(torque1on2, tdamp, torque1on2); - MathExtra::scale3(-1.0, tdamp); - MathExtra::add3(torque2on1, tdamp, torque2on1); - - // Damp twist - w1dotr = MathExtra::dot3(omega[i1],rhat); - w2dotr = MathExtra::dot3(omega[i2],rhat); - - MathExtra::scale3(w1dotr, rhat, wn1); - MathExtra::scale3(w2dotr, rhat, wn2); - - MathExtra::sub3(wn1, wn2, tdamp); // Eq. 38 - MathExtra::scale3(0.5*gtwist[type], tdamp); - MathExtra::add3(torque1on2, tdamp, torque1on2); - MathExtra::scale3(-1.0, tdamp); - MathExtra::add3(torque2on1, tdamp, torque2on1); - // ------------------------------------------------------// // Apply forces and torques to particles // ------------------------------------------------------// @@ -617,7 +643,18 @@ void BondBPMRotational::init_style() if (!fix_bond_history) fix_bond_history = (FixBondHistory *) modify->add_fix( - "BOND_HISTORY_BPM_ROTATIONAL all BOND_HISTORY 0 4"); + "HISTORY_BPM_ROTATIONAL" + std::to_string(instance_me) + " all BOND_HISTORY 0 4"); +} + +/* ---------------------------------------------------------------------- */ + +void BondBPMRotational::settings(int narg, char **arg) +{ + BondBPM::settings(narg, arg); + + for (int iarg : leftover_args) { + error->all(FLERR, "Illegal bond_style command"); + } } /* ---------------------------------------------------------------------- @@ -698,10 +735,42 @@ double BondBPMRotational::single(int type, double rsq, int i, int j, // Not yet enabled if (type <= 0) return 0.0; - //double r0; - //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); - // } - //} + int itmp; + if (atom->tag[j] < atom->tag[i]) { + itmp = i; + i = j; + j = itmp; + } + + double r0_mag, r_mag, r_mag_inv; + double r0[3], r[3], rhat[3]; + for (int n = 0; n < atom->num_bond[i]; n ++) { + if (atom->bond_atom[i][n] == atom->tag[j]) { + r0_mag = fix_bond_history->get_atom_value(i, n, 0); + r0[0] = fix_bond_history->get_atom_value(i, n, 1); + r0[1] = fix_bond_history->get_atom_value(i, n, 2); + r0[2] = fix_bond_history->get_atom_value(i, n, 3); + } + } + + double **x = atom->x; + MathExtra::scale3(r0_mag, r0); + MathExtra::sub3(x[i], x[j], r); + + r_mag = sqrt(rsq); + r_mag_inv = 1.0/r_mag; + MathExtra::scale3(r_mag_inv, r, rhat); + + double breaking, smooth, Fr; + double force1on2[3], torque1on2[3], torque2on1[3]; + breaking = elastic_forces(i, j, type, Fr, r_mag, r0_mag, r_mag_inv, + rhat, r, r0, force1on2, torque1on2, torque2on1); + fforce = Fr; + damping_forces(i, j, type, Fr, rhat, r, force1on2, torque1on2, torque2on1); + fforce += Fr; + + smooth = breaking*breaking; + smooth = 1.0 - smooth*smooth; + fforce *= smooth; + return 0.0; } diff --git a/src/BPM/bond_bpm_rotational.h b/src/BPM/bond_bpm_rotational.h index de3ea29240..150c7444bd 100644 --- a/src/BPM/bond_bpm_rotational.h +++ b/src/BPM/bond_bpm_rotational.h @@ -31,6 +31,7 @@ class BondBPMRotational : public BondBPM { virtual void compute(int, int); void coeff(int, char **); void init_style(); + void settings(int, char **); void write_restart(FILE *); void read_restart(FILE *); void write_data(FILE *); @@ -41,6 +42,11 @@ class BondBPMRotational : public BondBPM { double *Fcr, *Fcs, *Tct, *Tcb; double acos_limit(double); + double elastic_forces(int, int, int, double &, double, double, double, + double*, double*, double*, double*, double*, double*); + void damping_forces(int, int, int, double &, double*, double*, double*, + double*, double*); + void allocate(); void store_data(); double store_bond(int, int, int); diff --git a/src/BPM/bond_bpm_spring.cpp b/src/BPM/bond_bpm_spring.cpp index be4b7d6fc3..021d552297 100644 --- a/src/BPM/bond_bpm_spring.cpp +++ b/src/BPM/bond_bpm_spring.cpp @@ -136,7 +136,7 @@ void BondBPMSpring::compute(int eflag, int vflag) 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; + double e, rsq, r, r0, rinv, smooth, fbond, dot; ev_init(eflag,vflag); @@ -190,7 +190,6 @@ void BondBPMSpring::compute(int eflag, int vflag) rinv = 1.0/r; fbond = k[type]*(r0-r); - if (eflag) ebond = -0.5*fbond*(r0-r); delvx = v[i1][0] - v[i2][0]; delvy = v[i1][1] - v[i2][1]; @@ -218,7 +217,7 @@ void BondBPMSpring::compute(int eflag, int vflag) f[i2][2] -= delz*fbond; } - if (evflag) ev_tally(i1,i2,nlocal,newton_bond,ebond,fbond,delx,dely,delz); + if (evflag) ev_tally(i1,i2,nlocal,newton_bond,0.0,fbond,delx,dely,delz); } } @@ -280,7 +279,18 @@ void BondBPMSpring::init_style() if (!fix_bond_history) fix_bond_history = (FixBondHistory *) modify->add_fix( - "BOND_HISTORY_BPM_SPRING all BOND_HISTORY 0 1"); + "HISTORY_BPM_SPRING_" + std::to_string(instance_me) + " all BOND_HISTORY 0 1"); +} + +/* ---------------------------------------------------------------------- */ + +void BondBPMSpring::settings(int narg, char **arg) +{ + BondBPM::settings(narg, arg); + + for (int iarg : leftover_args) { + error->all(FLERR, "Illegal bond_style command"); + } } /* ---------------------------------------------------------------------- @@ -329,13 +339,37 @@ void BondBPMSpring::write_data(FILE *fp) double BondBPMSpring::single(int type, double rsq, int i, int j, double &fforce) { - // Not yet enabled if (type <= 0) return 0.0; - //double r0; - //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); - // } - //} + double r0; + 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); + } + } + + double r = sqrt(rsq); + double rinv = 1.0/r; + double e = (r - r0)/r0; + fforce = k[type]*(r0-r); + + 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; + + double smooth = (r-r0)/(r0*ecrit[type]); + smooth *= smooth; + smooth *= smooth; + smooth *= smooth; + smooth = 1 - smooth; + + fforce *= rinv*smooth; + return 0.0; } diff --git a/src/BPM/bond_bpm_spring.h b/src/BPM/bond_bpm_spring.h index 2b28723fc1..a81f49e81a 100644 --- a/src/BPM/bond_bpm_spring.h +++ b/src/BPM/bond_bpm_spring.h @@ -31,6 +31,7 @@ class BondBPMSpring : public BondBPM { virtual void compute(int, int); void coeff(int, char **); void init_style(); + void settings(int, char **); void write_restart(FILE *); void read_restart(FILE *); void write_data(FILE *); diff --git a/src/BPM/pair_bpm_spring.cpp b/src/BPM/pair_bpm_spring.cpp index abaf868313..f87ddd51e0 100644 --- a/src/BPM/pair_bpm_spring.cpp +++ b/src/BPM/pair_bpm_spring.cpp @@ -112,7 +112,6 @@ void PairBPMSpring::compute(int eflag, int vflag) rinv = 1.0/r; fpair = k[itype][jtype]*(cut[itype][jtype]-r); - if (eflag) evdwl = -0.5 * fpair * (cut[itype][jtype]-r) * factor_lj; smooth = rsq/cutsq[itype][jtype]; smooth *= smooth; @@ -125,6 +124,7 @@ void PairBPMSpring::compute(int eflag, int vflag) fpair -= gamma[itype][jtype]*dot*smooth*rinv; fpair *= factor_lj*rinv; + if (eflag) evdwl = 0.0; f[i][0] += delx*fpair; f[i][1] += dely*fpair; @@ -307,7 +307,7 @@ double PairBPMSpring::single(int i, int j, int itype, int jtype, double rsq, double factor_coul, double factor_lj, double &fforce) { - double fpair,philj,r,rinv; + double fpair,r,rinv; double delx, dely, delz, delvx, delvy, delvz, dot, smooth; if(rsq > cutsq[itype][jtype]) return 0.0; @@ -319,7 +319,6 @@ double PairBPMSpring::single(int i, int j, int itype, int jtype, double rsq, rinv = 1.0/r; fpair = k[itype][jtype]*(cut[itype][jtype]-r); - philj = -0.5*k[itype][jtype]*(cut[itype][jtype]-r)*(cut[itype][jtype]-r); smooth = rsq/cutsq[itype][jtype]; smooth *= smooth; @@ -336,5 +335,5 @@ double PairBPMSpring::single(int i, int j, int itype, int jtype, double rsq, fpair *= factor_lj; fforce = fpair; - return philj; + return 0.0; } diff --git a/src/bond.cpp b/src/bond.cpp index 48972aed72..f3c5d3e341 100644 --- a/src/bond.cpp +++ b/src/bond.cpp @@ -28,6 +28,10 @@ using namespace LAMMPS_NS; enum{NONE,LINEAR,SPLINE}; +// allocate space for static class instance variable and initialize it + +int Bond::instance_total = 0; + /* ----------------------------------------------------------------------- set bond contribution to Vdwl energy to 0.0 a particular bond style can override this @@ -35,6 +39,8 @@ enum{NONE,LINEAR,SPLINE}; Bond::Bond(LAMMPS *lmp) : Pointers(lmp) { + instance_me = instance_total++; + energy = 0.0; virial[0] = virial[1] = virial[2] = virial[3] = virial[4] = virial[5] = 0.0; writedata = 1; diff --git a/src/bond.h b/src/bond.h index ea213da476..e0550ead95 100644 --- a/src/bond.h +++ b/src/bond.h @@ -23,6 +23,8 @@ class Bond : protected Pointers { friend class FixOMP; public: + static int instance_total; // # of Bond classes ever instantiated + int allocated; int *setflag; int partial_flag; // 1 if bond type can be set to 0 and deleted @@ -68,6 +70,7 @@ class Bond : protected Pointers { void write_file(int, char **); protected: + int instance_me; // which Bond class instantiation I am int suffix_flag; // suffix compatibility flag int evflag; diff --git a/src/fix_bond_history.cpp b/src/fix_bond_history.cpp index 6a187ca56b..dfadd4201d 100644 --- a/src/fix_bond_history.cpp +++ b/src/fix_bond_history.cpp @@ -308,4 +308,4 @@ void FixBondHistory::shift_bond(int i, int m, int k) int n = atom->num_bond[i]; for (int idata = 0; idata < ndata; idata ++) stored[i][m*ndata+idata] = stored[i][k*ndata+idata]; -} \ No newline at end of file +} diff --git a/src/fix_bond_history.h b/src/fix_bond_history.h index 58c40c2f36..970b1429d6 100644 --- a/src/fix_bond_history.h +++ b/src/fix_bond_history.h @@ -42,7 +42,7 @@ class FixBondHistory : public Fix { void update_atom_value(int, int, int, double); double get_atom_value(int, int, int); void delete_bond(int,int); - void shift_bond(int,int,int); + void shift_bond(int,int,int); double **bondstore; int stored_flag; diff --git a/src/fix_property_atom.cpp b/src/fix_property_atom.cpp index a971faa066..bb44300357 100644 --- a/src/fix_property_atom.cpp +++ b/src/fix_property_atom.cpp @@ -38,6 +38,7 @@ FixPropertyAtom::FixPropertyAtom(LAMMPS *lmp, int narg, char **arg) : restart_peratom = 1; wd_section = 1; + create_attribute = 1; int iarg = 3; nvalue = narg-iarg; @@ -554,24 +555,44 @@ void FixPropertyAtom::copy_arrays(int i, int j, int /*delflag*/) atom->q[j] = atom->q[i]; else if (styles[nv] == RMASS) atom->rmass[j] = atom->rmass[i]; - else if (styles[nv] == IVEC) { + else if (styles[nv] == IVEC) atom->ivector[index[nv]][j] = atom->ivector[index[nv]][i]; - atom->ivector[index[nv]][i] = 0; - } else if (styles[nv] == DVEC) { + else if (styles[nv] == DVEC) atom->dvector[index[nv]][j] = atom->dvector[index[nv]][i]; - atom->dvector[index[nv]][i] = 0.0; - } else if (styles[nv] == IARRAY) { + else if (styles[nv] == IARRAY) { ncol = cols[nv]; - for (k = 0; k < ncol; k++) { + for (k = 0; k < ncol; k++) atom->iarray[index[nv]][j][k] = atom->iarray[index[nv]][i][k]; - atom->iarray[index[nv]][i][k] = 0; - } } else if (styles[nv] == DARRAY) { ncol = cols[nv]; - for (k = 0; k < ncol; k++) { + for (k = 0; k < ncol; k++) atom->darray[index[nv]][j][k] = atom->darray[index[nv]][i][k]; + } + } +} + + +/* ---------------------------------------------------------------------- + initialize one atom's storage values, called when atom is created +------------------------------------------------------------------------- */ + +void FixPropertyAtom::set_arrays(int i) +{ + int k,ncol; + + for (int nv = 0; nv < nvalue; nv++) { + if (styles[nv] == IVEC) + atom->ivector[index[nv]][i] = 0; + else if (styles[nv] == DVEC) + atom->dvector[index[nv]][i] = 0.0; + else if (styles[nv] == IARRAY) { + ncol = cols[nv]; + for (k = 0; k < ncol; k++) + atom->iarray[index[nv]][i][k] = 0; + } else if (styles[nv] == DARRAY) { + ncol = cols[nv]; + for (k = 0; k < ncol; k++) atom->darray[index[nv]][i][k] = 0.0; - } } } } @@ -706,24 +727,16 @@ int FixPropertyAtom::pack_exchange(int i, double *buf) if (styles[nv] == MOLECULE) buf[m++] = ubuf(atom->molecule[i]).d; else if (styles[nv] == CHARGE) buf[m++] = atom->q[i]; else if (styles[nv] == RMASS) buf[m++] = atom->rmass[i]; - else if (styles[nv] == IVEC) { - buf[m++] = ubuf(atom->ivector[index[nv]][i]).d; - atom->ivector[index[nv]][i] = 0; - } else if (styles[nv] == DVEC) { - buf[m++] = atom->dvector[index[nv]][i]; - atom->dvector[index[nv]][i] = 0.0; - } else if (styles[nv] == IARRAY) { + else if (styles[nv] == IVEC) buf[m++] = ubuf(atom->ivector[index[nv]][i]).d; + else if (styles[nv] == DVEC) buf[m++] = atom->dvector[index[nv]][i]; + else if (styles[nv] == IARRAY) { ncol = cols[nv]; - for (k = 0; k < ncol; k++) { + for (k = 0; k < ncol; k++) buf[m++] = ubuf(atom->iarray[index[nv]][i][k]).d; - atom->iarray[index[nv]][i][k] = 0; - } } else if (styles[nv] == DARRAY) { ncol = cols[nv]; - for (k = 0; k < ncol; k++) { + for (k = 0; k < ncol; k++) buf[m++] = atom->darray[index[nv]][i][k]; - atom->darray[index[nv]][i][k] = 0.0; - } } } diff --git a/src/fix_property_atom.h b/src/fix_property_atom.h index 8580865e59..48472b8969 100644 --- a/src/fix_property_atom.h +++ b/src/fix_property_atom.h @@ -40,6 +40,7 @@ class FixPropertyAtom : public Fix { virtual void grow_arrays(int); void copy_arrays(int, int, int); + void set_arrays(int); int pack_border(int, int *, double *); int unpack_border(int, int, double *); int pack_exchange(int, double *); diff --git a/src/fix_store_local.h b/src/fix_store_local.h index 0be752ff52..591ead9486 100644 --- a/src/fix_store_local.h +++ b/src/fix_store_local.h @@ -13,7 +13,7 @@ #ifdef FIX_CLASS // clang-format off -FixStyle(store/local,FixStoreLocal); +FixStyle(STORE_LOCAL,FixStoreLocal); // clang-format on #else diff --git a/src/BPM/fix_update_special_bonds.cpp b/src/fix_update_special_bonds.cpp similarity index 64% rename from src/BPM/fix_update_special_bonds.cpp rename to src/fix_update_special_bonds.cpp index 19b72e06a7..b479619cf5 100644 --- a/src/BPM/fix_update_special_bonds.cpp +++ b/src/fix_update_special_bonds.cpp @@ -24,7 +24,7 @@ #include "pair.h" #include -#include +#include #include using namespace LAMMPS_NS; @@ -36,7 +36,6 @@ FixUpdateSpecialBonds::FixUpdateSpecialBonds(LAMMPS *lmp, int narg, char **arg) Fix(lmp, narg, arg) { if (narg != 3) error->all(FLERR,"Illegal fix update/special/bonds command"); - comm_forward = 1+atom->maxspecial; } /* ---------------------------------------------------------------------- */ @@ -76,6 +75,7 @@ void FixUpdateSpecialBonds::setup(int /*vflag*/) force->special_coul[3] != 1.0) error->all(FLERR,"Fix update/special/bonds requires special Coulomb weights = 1,1,1"); + new_broken_pairs.clear(); broken_pairs.clear(); } @@ -86,7 +86,7 @@ void FixUpdateSpecialBonds::setup(int /*vflag*/) void FixUpdateSpecialBonds::pre_exchange() { int i, j, key, m, n1, n3; - tagint min_tag, max_tag; + tagint tagi, tagj; int nlocal = atom->nlocal; tagint *tag = atom->tag; @@ -94,19 +94,19 @@ void FixUpdateSpecialBonds::pre_exchange() int **nspecial = atom->nspecial; tagint **special = atom->special; - for (auto const &key : broken_pairs) { - min_tag = key.first; - max_tag = key.second; + for (auto const &it : broken_pairs) { + tagi = it.first; + tagj = it.second; - i = atom->map(min_tag); - j = atom->map(max_tag); + i = atom->map(tagi); + j = atom->map(tagj); // remove i from special bond list for atom j and vice versa if (i < nlocal) { slist = special[i]; n1 = nspecial[i][0]; for (m = 0; m < n1; m++) - if (slist[m] == max_tag) break; + if (slist[m] == tagj) break; n3 = nspecial[i][2]; for (; m < n3-1; m++) slist[m] = slist[m+1]; nspecial[i][0]--; @@ -118,7 +118,7 @@ void FixUpdateSpecialBonds::pre_exchange() slist = special[j]; n1 = nspecial[j][0]; for (m = 0; m < n1; m++) - if (slist[m] == min_tag) break; + if (slist[m] == tagi) break; n3 = nspecial[j][2]; for (; m < n3-1; m++) slist[m] = slist[m+1]; nspecial[j][0]--; @@ -127,9 +127,6 @@ void FixUpdateSpecialBonds::pre_exchange() } } - // Forward updated special bond list - comm->forward_comm_fix(this); - broken_pairs.clear(); } @@ -139,82 +136,51 @@ void FixUpdateSpecialBonds::pre_exchange() void FixUpdateSpecialBonds::pre_force(int /*vflag*/) { - int i,j,n,m,ii,jj,inum,jnum; - int *ilist,*jlist,*numneigh,**firstneigh; - tagint min_tag, max_tag; - std::pair key; + int i1,i2,j,jj,jnum; + int *jlist,*numneigh,**firstneigh; + tagint tag1, tag2; - int **bond_type = atom->bond_type; - int *num_bond = atom->num_bond; - tagint **bond_atom = atom->bond_atom; int nlocal = atom->nlocal; tagint *tag = atom->tag; - NeighList *list = force->pair->list; - inum = list->inum; - ilist = list->ilist; + NeighList *list = force->pair->list; // may need to be generalized to work with pair hybrid* numneigh = list->numneigh; firstneigh = list->firstneigh; - for (ii = 0; ii < inum; ii++) { - i = ilist[ii]; - jlist = firstneigh[i]; - jnum = numneigh[i]; + // In theory could communicate a list of broken bonds to neighboring processors here + // to remove restriction that users use Newton bond off - for (jj = 0; jj < jnum; jj++) { - j = jlist[jj]; - j &= NEIGHMASK; - - min_tag = tag[i]; - max_tag = tag[j]; - if (max_tag < min_tag) { - min_tag = tag[j]; - max_tag = tag[i]; + for (auto const &it : new_broken_pairs) { + tag1 = it.first; + tag2 = it.second; + i1 = atom->map(tag1); + i2 = atom->map(tag2); + + // Loop through atoms of owned atoms i j + if (i1 < nlocal) { + jlist = firstneigh[i1]; + jnum = numneigh[i1]; + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= SPECIALMASK; // Clear special bond bits + if (tag[j] == tag2) + jlist[jj] = j; } - key = std::make_pair(min_tag, max_tag); + } - if (broken_pairs.find(key) != broken_pairs.end()) - jlist[jj] = j; // Clear special bond bits + if (i2 < nlocal) { + jlist = firstneigh[i2]; + jnum = numneigh[i2]; + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= SPECIALMASK; // Clear special bond bits + if (tag[j] == tag1) + jlist[jj] = j; + } } } -} -/* ---------------------------------------------------------------------- */ - -int FixUpdateSpecialBonds::pack_forward_comm(int n, int *list, double *buf, - int /*pbc_flag*/, int * /*pbc*/) -{ - int i,j,k,m,ns; - int **nspecial = atom->nspecial; - tagint **special = atom->special; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - ns = nspecial[j][0]; - buf[m++] = ubuf(ns).d; - for (k = 0; k < ns; k++) - buf[m++] = ubuf(special[j][k]).d; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void FixUpdateSpecialBonds::unpack_forward_comm(int n, int first, double *buf) -{ - int i,j,m,ns,last; - int **nspecial = atom->nspecial; - tagint **special = atom->special; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - ns = (int) ubuf(buf[m++]).i; - nspecial[i][0] = ns; - for (j = 0; j < ns; j++) - special[i][j] = (tagint) ubuf(buf[m++]).i; - } + new_broken_pairs.clear(); } /* ---------------------------------------------------------------------- */ @@ -222,14 +188,8 @@ void FixUpdateSpecialBonds::unpack_forward_comm(int n, int first, double *buf) void FixUpdateSpecialBonds::add_broken_bond(int i, int j) { tagint *tag = atom->tag; + std::pair tag_pair = std::make_pair(tag[i],tag[j]); - tagint min_tag = tag[i]; - tagint max_tag = tag[j]; - if (max_tag < min_tag) { - min_tag = tag[j]; - max_tag = tag[i]; - } - std::pair key = std::make_pair(min_tag, max_tag); - - broken_pairs.insert(key); + new_broken_pairs.push_back(tag_pair); + broken_pairs.push_back(tag_pair); } diff --git a/src/BPM/fix_update_special_bonds.h b/src/fix_update_special_bonds.h similarity index 85% rename from src/BPM/fix_update_special_bonds.h rename to src/fix_update_special_bonds.h index 600b226b71..dc6ca1cf9b 100644 --- a/src/BPM/fix_update_special_bonds.h +++ b/src/fix_update_special_bonds.h @@ -22,7 +22,7 @@ FixStyle(UPDATE_SPECIAL_BONDS,FixUpdateSpecialBonds) #include "fix.h" -#include +#include #include namespace LAMMPS_NS { @@ -34,16 +34,14 @@ class FixUpdateSpecialBonds : public Fix { int setmask(); void setup(int); void pre_exchange(); - void pre_force(int); - int pack_forward_comm(int, int *, double *, int, int *); - void unpack_forward_comm(int, int, double *); + void pre_force(int); void add_broken_bond(int,int); protected: - std::set > broken_pairs; - inline int sbmask(int j) const { - return j >> SBBITS & 3; - } + // Create two arrays to store bonds broken this timestep (new) + // and since the last neighbor list build + std::vector > new_broken_pairs; + std::vector > broken_pairs; }; } // namespace LAMMPS_NS diff --git a/src/lmptype.h b/src/lmptype.h index 905323ac2f..e02cd74734 100644 --- a/src/lmptype.h +++ b/src/lmptype.h @@ -55,14 +55,15 @@ namespace LAMMPS_NS { -// reserve 2 hi bits in molecular system neigh list for special bonds flag -// reserve 3rd last bit in neigh list for fix neigh/history flag +// reserve 2 highest bits in molecular system neigh list for special bonds flag +// reserve 3rd highest bit in neigh list for fix neigh/history flag // max local + ghost atoms per processor = 2^29 - 1 #define SBBITS 30 #define HISTBITS 29 #define NEIGHMASK 0x1FFFFFFF #define HISTMASK 0xDFFFFFFF +#define SPECIALMASK 0x3FFFFFFF // default to 32-bit smallint and other ints, 64-bit bigint From 439853c4a85259f98629f79af44b7069a8851116 Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Fri, 10 Dec 2021 10:33:52 -0700 Subject: [PATCH 15/40] Moving store/local to an internal fix --- doc/src/Howto_bpm.rst | 8 +- doc/src/bond_bpm_rotational.rst | 68 +- doc/src/bond_bpm_spring.rst | 65 +- doc/src/fix_store_local.rst | 97 -- doc/src/pair_tracker.rst | 54 +- examples/bpm/impact/in.bpm.impact.rotational | 5 +- examples/bpm/impact/in.bpm.impact.spring | 5 +- .../log.27Oct2021.impact.rotational.g++.4 | 217 ++++ .../impact/log.27Oct2021.impact.spring.g++.4 | 219 ++++ .../log.30Jul2021.impact_rotational.g++1.4 | 215 ---- .../impact/log.30Jul2021.impact_spring.g++1.4 | 218 ---- examples/bpm/pour/log.27Oct2021.pour.g++.1 | 1091 +++++++++++++++++ examples/bpm/pour/log.30Jul2021.pour.g++.1 | 1090 ---------------- src/BPM/bond_bpm.cpp | 44 +- src/BPM/bond_bpm.h | 4 +- src/BPM/bond_bpm_rotational.cpp | 12 +- src/BPM/bond_bpm_spring.cpp | 12 +- src/MISC/pair_tracker.cpp | 63 +- src/MISC/pair_tracker.h | 3 + 19 files changed, 1759 insertions(+), 1731 deletions(-) delete mode 100644 doc/src/fix_store_local.rst create mode 100644 examples/bpm/impact/log.27Oct2021.impact.rotational.g++.4 create mode 100644 examples/bpm/impact/log.27Oct2021.impact.spring.g++.4 delete mode 100644 examples/bpm/impact/log.30Jul2021.impact_rotational.g++1.4 delete mode 100644 examples/bpm/impact/log.30Jul2021.impact_spring.g++1.4 create mode 100644 examples/bpm/pour/log.27Oct2021.pour.g++.1 delete mode 100644 examples/bpm/pour/log.30Jul2021.pour.g++.1 diff --git a/doc/src/Howto_bpm.rst b/doc/src/Howto_bpm.rst index 893486c989..63625fe793 100644 --- a/doc/src/Howto_bpm.rst +++ b/doc/src/Howto_bpm.rst @@ -97,10 +97,10 @@ This also requires a unique integrator :doc:`fix nve/sphere/bpm 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. +have the ability to record instances of bond breakage to output using +the :doc:`dump local ` command. 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 diff --git a/doc/src/bond_bpm_rotational.rst b/doc/src/bond_bpm_rotational.rst index fd6b448f24..ccd27b1327 100644 --- a/doc/src/bond_bpm_rotational.rst +++ b/doc/src/bond_bpm_rotational.rst @@ -14,12 +14,15 @@ Syntax .. parsed-literal:: - *store/local* values = ID of associated fix store/local followed by one or more attributes + *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 2 atoms in the bond - *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) + *id1, id2* = IDs of 2 atoms in the bond + *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 @@ -32,7 +35,7 @@ Examples bond_style bpm/rotational bond_coeff 1 1.0 0.2 0.02 0.02 0.20 0.04 0.04 0.04 0.1 0.02 0.002 0.002 - bond_style bpm/rotational myfix time id1 id2 + bond_style bpm/rotational myfix 1000 time id1 id2 fix myfix all store/local 1000 3 dump 1 all local 1000 dump.broken f_myfix[1] f_myfix[2] f_myfix[3] dump_modify 1 write_header no @@ -132,15 +135,33 @@ the *overlay/pair* keyword. These settings require specific 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. +If the *store/local* keyword is used, this fix will track bonds that +break during the simulation. Whenever a bond breaks, data is processed +and transferred to an internal fix labeled *fix_ID*. This allows the +local data to be accessed by other LAMMPS commands. -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.: +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 bond. The other attributes for the two atoms include the timestep +during which the bond broke and the current/initial center of mass +position of the two atoms. + +This bond style tracks broken bonds and records the requested attributes. +Data is continuously accumulated 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 using the *fix_ID* and 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. + +Note that when unbroken 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 @@ -162,6 +183,22 @@ of a pairwise interaction, since energy is not conserved in these dissipative potentials. It also returns only the normal component of the pairwise interaction force. +The accumulated data is not written to restart files and should be +output before a restart file is written to avoid missing data. + +The internal fix 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 vector or array will be floating point values that correspond to +the specified attribute. + Restrictions """""""""""" @@ -189,8 +226,7 @@ The *bpm/rotational* style requires :doc:`atom style sphere/bpm `. Related commands """""""""""""""" -:doc:`bond_coeff `, :doc:`fix store/local `, -:doc:`fix nve/sphere/bpm ` +:doc:`bond_coeff `, :doc:`fix nve/sphere/bpm ` Default """"""" diff --git a/doc/src/bond_bpm_spring.rst b/doc/src/bond_bpm_spring.rst index 4bd73d6af0..164b1dbed4 100644 --- a/doc/src/bond_bpm_spring.rst +++ b/doc/src/bond_bpm_spring.rst @@ -14,12 +14,15 @@ Syntax .. parsed-literal:: - *store/local* values = ID of associated fix store/local followed by one or more attributes + *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 2 atoms in the bond - *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) + *id1, id2* = IDs of 2 atoms in the bond + *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 @@ -32,8 +35,7 @@ Examples bond_style bpm/spring bond_coeff 1 1.0 0.05 0.1 - bond_style bpm/spring myfix time id1 id2 - fix myfix all store/local 1000 3 + bond_style bpm/spring 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 @@ -96,13 +98,31 @@ the *overlay/pair* keyword. These settings require specific 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. +If the *store/local* keyword is used, this fix will track bonds that +break during the simulation. Whenever a bond breaks, data is processed +and transferred to an internal fix labeled *fix_ID*. This allows the +local data to be accessed by other LAMMPS commands. -Note that when bonds are dumped to a file via the :doc:`dump local -` command, bonds with type 0 (broken bonds) are not included. +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 bond. The other attributes for the two atoms include the timestep +during which the bond broke and the current/initial center of mass +position of the two atoms. + +This bond style tracks broken bonds and records the requested attributes. +Data is continuously accumulated 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 using the *fix_ID* and 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. + +Note that when unbroken 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.: @@ -124,6 +144,22 @@ The single() function of these pair styles returns 0.0 for the energy of a pairwise interaction, since energy is not conserved in these dissipative potentials. +The accumulated data is not written to restart files and should be +output before a restart file is written to avoid missing data. + +The internal fix 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 vector or array will be floating point values that correspond to +the specified attribute. + Restrictions """""""""""" @@ -149,8 +185,7 @@ setting Related commands """""""""""""""" -:doc:`bond_coeff `, :doc:`fix store/local `, -:doc:`pair bpm/spring ` +:doc:`bond_coeff `, :doc:`pair bpm/spring ` Default """"""" diff --git a/doc/src/fix_store_local.rst b/doc/src/fix_store_local.rst deleted file mode 100644 index 0f0ebc5ce6..0000000000 --- a/doc/src/fix_store_local.rst +++ /dev/null @@ -1,97 +0,0 @@ -.. index:: fix store/local - -fix store/local command -======================== - -Syntax -"""""" - -.. parsed-literal:: - - fix ID group-ID store/local N nvalues - -* ID, group-ID are documented in :doc:`fix ` command -* store/local = style name of this fix command -* N = prepare data for output every this many timesteps -* nvalues = number of values stored by this fix - -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 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. - -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 vector or array will be floating point values that correspond to -the specified attribute. - -Restrictions -"""""""""""" - -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 -"""""""""""""""" - -:doc:`pair tracker ` -:doc:`bond bpm/rotational ` -:doc:`dump local ` - -Default -""""""" - -none diff --git a/doc/src/pair_tracker.rst b/doc/src/pair_tracker.rst index c3d53bcc54..d2dddd7d45 100644 --- a/doc/src/pair_tracker.rst +++ b/doc/src/pair_tracker.rst @@ -8,9 +8,10 @@ Syntax .. code-block:: LAMMPS - pair_style tracker fix_ID keyword values attribute1 attribute2 ... + pair_style tracker fix_ID N keyword values attribute1 attribute2 ... -* fix_ID = ID of associated fix store/local +* fix_ID = ID of associated internal fix to store data +* N = prepare data for output every this many timesteps * zero or more keywords may be appended * keyword = *finite* or *time/min* or *type/include* @@ -45,13 +46,12 @@ Examples .. code-block:: LAMMPS - pair_style hybrid/overlay tracker myfix id1 id2 type/include 1 * type/include 2 3,4 lj/cut 2.5 + pair_style hybrid/overlay tracker myfix 1000 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 granular + pair_style hybrid/overlay tracker myfix 1000 finite x y z time/min 100 granular pair_coeff * * tracker - fix myfix all store/local 1000 3 dump 1 all local 1000 dump.local f_myfix[1] f_myfix[2] f_myfix[3] dump_modify 1 write_header no @@ -59,18 +59,14 @@ Description """"""""""" Style *tracker* monitors information about pairwise interactions. It -does not calculate any forces on atoms. :doc:`Pair hybrid/overlay +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. - +pair style, as shown in the examples above. 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 +cutoff, pairwise data is processed and transferred to an internal fix +labeled *fix_ID*. This allows the local data to be accessed by other +LAMMPS commands. 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 @@ -78,13 +74,23 @@ 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 +the pair. The other attributes for the pair of atoms are 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. +Data is continuously accumulated by the internal fix 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 using the *fix_ID* and 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. + ---------- The following optional keywords may be used. @@ -147,6 +153,22 @@ 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. +The accumulated data is not written to restart files and should be +output before a restart file is written to avoid missing data. + +The internal fix 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 vector or array will be floating point values that correspond to +the specified attribute. + ---------- Restrictions @@ -165,8 +187,6 @@ that extend beyond the contact (e.g. JKR and DMT). Related commands """""""""""""""" -:doc:`fix store_local ` - Default """"""" diff --git a/examples/bpm/impact/in.bpm.impact.rotational b/examples/bpm/impact/in.bpm.impact.rotational index 34443fca6f..0b3bcbe0a2 100644 --- a/examples/bpm/impact/in.bpm.impact.rotational +++ b/examples/bpm/impact/in.bpm.impact.rotational @@ -24,7 +24,6 @@ pair_style gran/hooke/history 1.0 NULL 0.5 NULL 0.1 1 pair_coeff 1 1 fix 1 all nve/sphere/bpm -fix 2 all store/local 100 3 create_bonds many plate plate 1 0.0 1.5 create_bonds many projectile projectile 2 0.0 1.5 @@ -32,7 +31,7 @@ create_bonds many projectile projectile 2 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/rotational store/local 2 time id1 id2 +bond_style bpm/rotational store/local brkbond 100 time id1 id2 bond_coeff 1 1.0 0.2 0.02 0.02 0.05 0.01 0.01 0.01 0.1 0.02 0.002 0.002 bond_coeff 2 1.0 0.2 0.02 0.02 0.20 0.04 0.04 0.04 0.1 0.02 0.002 0.002 @@ -46,7 +45,7 @@ thermo 100 thermo_modify lost ignore lost/bond ignore #dump 1 all custom 100 atomDump id radius x y z c_nbond -dump 2 all local 100 brokenDump f_2[1] f_2[2] f_2[3] +dump 2 all local 100 brokenDump f_brkbond[1] f_brkbond[2] f_brkbond[3] dump_modify 2 header no run 7500 diff --git a/examples/bpm/impact/in.bpm.impact.spring b/examples/bpm/impact/in.bpm.impact.spring index 60822cde01..7c5c56841b 100644 --- a/examples/bpm/impact/in.bpm.impact.spring +++ b/examples/bpm/impact/in.bpm.impact.spring @@ -26,7 +26,6 @@ pair_style bpm/spring pair_coeff 1 1 1.0 1.0 1.0 fix 1 all nve -fix 2 all store/local 100 3 create_bonds many plate plate 1 0.0 1.5 create_bonds many projectile projectile 2 0.0 1.5 @@ -34,7 +33,7 @@ create_bonds many projectile projectile 2 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 store/local 2 time id1 id2 +bond_style bpm/spring store/local brkbond 100 time id1 id2 bond_coeff 1 1.0 0.04 1.0 bond_coeff 2 1.0 0.20 1.0 @@ -48,7 +47,7 @@ thermo 100 thermo_modify lost ignore lost/bond ignore #dump 1 all custom 100 atomDump id x y z c_nbond -dump 2 all local 100 brokenDump f_2[1] f_2[2] f_2[3] +dump 2 all local 100 brokenDump f_brkbond[1] f_brkbond[2] f_brkbond[3] dump_modify 2 header no run 7500 diff --git a/examples/bpm/impact/log.27Oct2021.impact.rotational.g++.4 b/examples/bpm/impact/log.27Oct2021.impact.rotational.g++.4 new file mode 100644 index 0000000000..bb7b526ed9 --- /dev/null +++ b/examples/bpm/impact/log.27Oct2021.impact.rotational.g++.4 @@ -0,0 +1,217 @@ +LAMMPS (27 Oct 2021) +units lj +dimension 3 +boundary f f f +atom_style sphere/bpm +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.0 +Lattice spacing in x,y,z = 1.5874011 1.5874011 1.5874011 +region box block -25 15 -22 22 -22 22 +create_box 1 box bond/types 2 extra/bond/per/atom 20 extra/special/per/atom 50 +Created orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) + 1 by 2 by 2 MPI processor grid + +region disk cylinder x 0.0 0.0 20.0 -0.5 0.5 +create_atoms 1 region disk +Created 7529 atoms + using lattice units in orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) + create_atoms CPU = 0.006 seconds +group plate region disk +7529 atoms in group plate + +region ball sphere 8.0 0.0 0.0 6.0 +create_atoms 1 region ball +Created 3589 atoms + using lattice units in orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) + create_atoms CPU = 0.001 seconds +group projectile region ball +3589 atoms in group projectile + +displace_atoms all random 0.1 0.1 0.1 134598738 +Displacing atoms ... + +neighbor 1.0 bin +pair_style gran/hooke/history 1.0 NULL 0.5 NULL 0.1 1 +pair_coeff 1 1 + +fix 1 all nve/sphere/bpm + +create_bonds many plate plate 1 0.0 1.5 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2.6 + binsize = 1, bins = 64 70 70 + 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 gran/hooke/history, perpetual + attributes: half, newton on, size, history + pair build: half/size/bin/newton + stencil: half/bin/3d + bin: standard +Added 38559 bonds, new total = 38559 +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 15 = max # of 1-2 neighbors + 101 = max # of special neighbors + special bonds CPU = 0.002 seconds +create_bonds many projectile projectile 2 0.0 1.5 +WARNING: Bonds are defined but no bond style is set (../force.cpp:191) +WARNING: Likewise 1-2 special neighbor interactions != 1.0 (../force.cpp:193) +Added 21869 bonds, new total = 60428 +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 16 = max # of 1-2 neighbors + 101 = max # of special neighbors + special bonds CPU = 0.002 seconds + +neighbor 0.3 bin +special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0 + +bond_style bpm/rotational store/local brkbond 100 time id1 id2 +bond_coeff 1 1.0 0.2 0.02 0.02 0.05 0.01 0.01 0.01 0.1 0.02 0.002 0.002 +bond_coeff 2 1.0 0.2 0.02 0.02 0.20 0.04 0.04 0.04 0.1 0.02 0.002 0.002 + +velocity projectile set -0.05 0.0 0.0 +compute nbond all nbond/atom +compute tbond all reduce sum c_nbond + +timestep 0.05 +thermo_style custom step ke pe pxx pyy pzz c_tbond +thermo 100 +thermo_modify lost ignore lost/bond ignore +#dump 1 all custom 100 atomDump id radius x y z c_nbond + +dump 2 all local 100 brokenDump f_brkbond[1] f_brkbond[2] f_brkbond[3] +dump_modify 2 header no + +run 7500 +WARNING: No fixes with time integration, atoms won't move (../verlet.cpp:60) +Neighbor list info ... + update every 1 steps, delay 10 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 = 98 108 108 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gran/hooke/history, perpetual + attributes: half, newton on, size, history + pair build: half/size/bin/newton + stencil: half/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 33.34 | 33.34 | 33.35 Mbytes +Step KinEng PotEng Pxx Pyy Pzz c_tbond + 0 0.00053238861 0 3.8217307e-05 0 0 10.8703 + 100 0.00053238861 0 3.8217307e-05 2.0196245e-19 2.0291801e-19 10.8703 + 200 0.00053238861 0 3.8217307e-05 3.0246341e-19 2.9178664e-19 10.8703 + 300 0.00053238861 0 3.8217307e-05 3.3428362e-19 3.2669661e-19 10.8703 + 400 0.00053238861 0 3.8217307e-05 3.5002919e-19 3.3516777e-19 10.8703 + 500 0.00053102278 0 3.8469829e-05 7.3311547e-08 1.4473347e-07 10.8703 + 600 0.00051549609 0 4.0342929e-05 3.87734e-07 4.9640786e-07 10.868322 + 700 0.00050121532 0 3.8778736e-05 4.6411496e-07 4.3149467e-07 10.850333 + 800 0.00049869661 0 3.6779398e-05 4.748259e-07 3.5191586e-07 10.803202 + 900 0.00049580923 0 3.5608764e-05 9.3667316e-07 5.0139078e-07 10.737363 + 1000 0.00049478796 0 3.5573518e-05 7.9599489e-07 6.7732416e-07 10.683396 + 1100 0.00048712204 0 3.5843955e-05 1.1345563e-06 1.4066243e-06 10.662169 + 1200 0.00048265244 0 3.5288538e-05 1.7434542e-06 1.6555952e-06 10.642921 + 1300 0.00047982046 0 3.4929699e-05 1.5116612e-06 1.1824842e-06 10.62925 + 1400 0.00048024672 0 3.4696478e-05 1.0219046e-06 9.6017582e-07 10.619716 + 1500 0.0004721757 0 3.4671814e-05 1.7623303e-06 1.6904391e-06 10.608023 + 1600 0.00045691175 0 3.3618706e-05 2.0127313e-06 2.2294075e-06 10.599208 + 1700 0.00044846472 0 3.2628068e-05 2.1732651e-06 2.6125725e-06 10.586796 + 1800 0.00044916668 0 3.2074126e-05 1.713271e-06 2.2306226e-06 10.562691 + 1900 0.00044434475 0 3.1841489e-05 1.4069412e-06 1.6739368e-06 10.540025 + 2000 0.00044011236 0 3.1535369e-05 1.8850064e-06 1.966093e-06 10.508365 + 2100 0.00043343658 0 3.1327313e-05 1.7877497e-06 1.9031224e-06 10.466271 + 2200 0.00043076716 0 3.1141775e-05 2.260934e-06 1.7405179e-06 10.428135 + 2300 0.0004252247 0 3.065038e-05 1.8685672e-06 1.6444209e-06 10.398993 + 2400 0.00042502327 0 3.0356508e-05 1.8748934e-06 1.3329686e-06 10.380644 + 2500 0.00042142831 0 3.0164965e-05 2.1119049e-06 1.7118338e-06 10.366433 + 2600 0.00042131885 0 3.0065244e-05 1.6092748e-06 1.5373156e-06 10.35456 + 2700 0.00042303607 0 3.0011813e-05 1.7496254e-06 1.77836e-06 10.327937 + 2800 0.00042148119 0 2.9849777e-05 1.5035087e-06 1.5374543e-06 10.314085 + 2900 0.00042092112 0 2.9766439e-05 1.2512363e-06 1.417453e-06 10.302572 + 3000 0.00042298628 0 2.985456e-05 1.030367e-06 1.2706193e-06 10.297536 + 3100 0.00042098731 0 2.9773119e-05 1.1020439e-06 1.3236711e-06 10.293938 + 3200 0.00042190155 0 2.975807e-05 1.0825659e-06 1.207615e-06 10.2907 + 3300 0.00041840008 0 2.9573071e-05 1.0027126e-06 1.0591685e-06 10.286562 + 3400 0.00041726315 0 2.9629012e-05 1.3206781e-06 1.0694496e-06 10.280986 + 3500 0.00041553548 0 2.9393577e-05 1.4604125e-06 1.2547784e-06 10.27361 + 3600 0.00041551693 0 2.9122892e-05 1.0944373e-06 9.6499513e-07 10.271632 + 3700 0.00041351569 0 2.8943889e-05 9.6203862e-07 8.3123719e-07 10.270192 + 3800 0.00041419735 0 2.9031969e-05 1.1893061e-06 7.9832166e-07 10.267494 + 3900 0.0004142108 0 2.8912904e-05 1.0049279e-06 9.0628823e-07 10.255442 + 4000 0.00041253668 0 2.8794779e-05 8.3301821e-07 8.2348634e-07 10.250045 + 4100 0.00041245029 0 2.8626953e-05 1.0440229e-06 9.7296445e-07 10.239971 + 4200 0.00041239868 0 2.8576872e-05 8.5677759e-07 9.4929241e-07 10.235114 + 4300 0.0004105539 0 2.845078e-05 7.9007545e-07 9.4314698e-07 10.227559 + 4400 0.00041038071 0 2.8447842e-05 8.3506095e-07 9.403948e-07 10.220363 + 4500 0.0004094738 0 2.8385536e-05 7.4474323e-07 8.9167115e-07 10.214247 + 4600 0.00040931891 0 2.8293128e-05 6.9842277e-07 8.7986292e-07 10.211189 + 4700 0.00040935826 0 2.832743e-05 7.7312621e-07 8.6571149e-07 10.208491 + 4800 0.00040894424 0 2.8290022e-05 7.560957e-07 7.8478084e-07 10.202195 + 4900 0.00040771373 0 2.8211024e-05 8.8835691e-07 7.6981867e-07 10.196816 + 5000 0.0004075835 0 2.8242057e-05 7.9265659e-07 8.5594679e-07 10.18854 + 5100 0.00040629886 0 2.8147996e-05 8.29922e-07 8.2991198e-07 10.186938 + 5200 0.00040615587 0 2.8075206e-05 7.9676977e-07 8.3313535e-07 10.183699 + 5300 0.00040623905 0 2.8061445e-05 8.5454501e-07 8.3464967e-07 10.18154 + 5400 0.00040639649 0 2.8095492e-05 9.219289e-07 8.8970884e-07 10.180281 + 5500 0.00040632069 0 2.8146737e-05 9.5125536e-07 9.2967258e-07 10.179741 + 5600 0.00040615846 0 2.8095814e-05 9.4628277e-07 9.4475909e-07 10.179201 + 5700 0.00040661759 0 2.8056252e-05 9.1418005e-07 9.3869835e-07 10.177942 + 5800 0.00040636342 0 2.7980285e-05 8.7191961e-07 9.4296893e-07 10.177042 + 5900 0.00040517906 0 2.7876934e-05 8.3277579e-07 9.2807515e-07 10.178694 + 6000 0.00040392762 0 2.7828073e-05 8.3950266e-07 9.4521092e-07 10.180166 + 6100 0.00040367162 0 2.7800472e-05 8.720166e-07 1.0332147e-06 10.179806 + 6200 0.00040335119 0 2.7762148e-05 8.5284463e-07 9.3150721e-07 10.179086 + 6300 0.00040340642 0 2.7769051e-05 8.3428098e-07 8.7041896e-07 10.178546 + 6400 0.0004030719 0 2.7741943e-05 7.952126e-07 8.3664709e-07 10.179282 + 6500 0.00040347682 0 2.7744595e-05 7.8058438e-07 8.4639064e-07 10.178382 + 6600 0.00040257759 0 2.7667961e-05 7.8150592e-07 8.5501519e-07 10.179298 + 6700 0.00040217981 0 2.7649415e-05 8.1293625e-07 9.4727792e-07 10.178938 + 6800 0.00040191405 0 2.7693195e-05 8.0894279e-07 1.1604089e-06 10.178938 + 6900 0.00040208358 0 2.7773245e-05 7.9264674e-07 1.1927033e-06 10.178758 + 7000 0.00040239724 0 2.782978e-05 8.330894e-07 1.2084905e-06 10.178758 + 7100 0.00040269303 0 2.7728862e-05 8.1375466e-07 1.0779344e-06 10.178758 + 7200 0.00040227155 0 2.7654709e-05 8.3101678e-07 9.7757461e-07 10.17969 + 7300 0.00040115701 0 2.7604211e-05 8.07161e-07 9.4401828e-07 10.181376 + 7400 0.00039998681 0 2.7528309e-05 7.8970732e-07 9.3464728e-07 10.182703 + 7500 0.00039916281 0 2.7432547e-05 7.9446882e-07 8.9887681e-07 10.182949 +Loop time of 34.6948 on 4 procs for 7500 steps with 11096 atoms + +Performance: 933857.672 tau/day, 216.171 timesteps/s +98.4% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.32481 | 0.33445 | 0.34816 | 1.6 | 0.96 +Bond | 26.728 | 28.076 | 29.753 | 23.9 | 80.92 +Neigh | 0.68094 | 0.72261 | 0.7747 | 4.8 | 2.08 +Comm | 1.5266 | 3.3654 | 4.8309 | 75.3 | 9.70 +Output | 0.018332 | 0.018804 | 0.019756 | 0.4 | 0.05 +Modify | 1.9305 | 2.0147 | 2.1302 | 6.0 | 5.81 +Other | | 0.1631 | | | 0.47 + +Nlocal: 2774.00 ave 2898 max 2701 min +Histogram: 1 1 0 1 0 0 0 0 0 1 +Nghost: 1165.25 ave 1208 max 1142 min +Histogram: 2 0 0 1 0 0 0 0 0 1 +Neighs: 11425.0 ave 12539 max 10556 min +Histogram: 1 0 1 0 1 0 0 0 0 1 + +Total # of neighbors = 45700 +Ave neighs/atom = 4.1186013 +Ave special neighs/atom = 10.184841 +Neighbor list builds = 451 +Dangerous builds = 0 +Total wall time: 0:00:35 diff --git a/examples/bpm/impact/log.27Oct2021.impact.spring.g++.4 b/examples/bpm/impact/log.27Oct2021.impact.spring.g++.4 new file mode 100644 index 0000000000..4aae247314 --- /dev/null +++ b/examples/bpm/impact/log.27Oct2021.impact.spring.g++.4 @@ -0,0 +1,219 @@ +LAMMPS (27 Oct 2021) +units lj +dimension 3 +boundary f f f +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.0 +Lattice spacing in x,y,z = 1.5874011 1.5874011 1.5874011 +region box block -25 15 -22 22 -22 22 +create_box 1 box bond/types 2 extra/bond/per/atom 20 extra/special/per/atom 50 +Created orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) + 1 by 2 by 2 MPI processor grid + +region disk cylinder x 0.0 0.0 20.0 -0.5 0.5 +create_atoms 1 region disk +Created 7529 atoms + using lattice units in orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) + create_atoms CPU = 0.002 seconds +group plate region disk +7529 atoms in group plate + +region ball sphere 8.0 0.0 0.0 6.0 +create_atoms 1 region ball +Created 3589 atoms + using lattice units in orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) + create_atoms CPU = 0.001 seconds +group projectile region ball +3589 atoms in group projectile + +displace_atoms all random 0.1 0.1 0.1 134598738 +Displacing atoms ... + +mass 1 1.0 + +neighbor 1.0 bin +pair_style bpm/spring +pair_coeff 1 1 1.0 1.0 1.0 + +fix 1 all nve + +create_bonds many plate plate 1 0.0 1.5 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2.6 + binsize = 1, bins = 64 70 70 + 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 38559 bonds, new total = 38559 +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 15 = max # of 1-2 neighbors + 101 = max # of special neighbors + special bonds CPU = 0.002 seconds +create_bonds many projectile projectile 2 0.0 1.5 +WARNING: Bonds are defined but no bond style is set (../force.cpp:191) +WARNING: Likewise 1-2 special neighbor interactions != 1.0 (../force.cpp:193) +Added 21869 bonds, new total = 60428 +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 16 = max # of 1-2 neighbors + 101 = max # of special neighbors + special bonds CPU = 0.002 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 store/local brkbond 100 time id1 id2 +bond_coeff 1 1.0 0.04 1.0 +bond_coeff 2 1.0 0.20 1.0 + +velocity projectile set -0.05 0.0 0.0 +compute nbond all nbond/atom +compute tbond all reduce sum c_nbond + +timestep 0.1 +thermo_style custom step ke pe pxx pyy pzz c_tbond +thermo 100 +thermo_modify lost ignore lost/bond ignore +#dump 1 all custom 100 atomDump id x y z c_nbond + +dump 2 all local 100 brokenDump f_brkbond[1] f_brkbond[2] f_brkbond[3] +dump_modify 2 header no + +run 7500 +WARNING: No fixes with time integration, atoms won't move (../verlet.cpp:60) +Neighbor list info ... + update every 1 steps, delay 10 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 = 98 108 108 + 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) = 17.74 | 17.74 | 17.74 Mbytes +Step KinEng PotEng Pxx Pyy Pzz c_tbond + 0 0.0010167873 0 7.298968e-05 0 0 10.8703 + 100 0.0010167873 0 7.298968e-05 -8.7429897e-20 -8.8470837e-20 10.8703 + 200 0.0010167873 0 7.298968e-05 -7.2809565e-20 -8.0915788e-20 10.8703 + 300 0.0009951439 0 9.9273671e-05 8.1569216e-06 8.0922512e-06 10.868142 + 400 0.00095142792 0 0.00012669557 -1.3413721e-05 -1.4800745e-05 10.849793 + 500 0.00092272662 0 8.1708784e-05 -9.7488701e-06 -1.3603634e-05 10.819752 + 600 0.00088967612 0 6.2587266e-05 -5.1954127e-06 -6.781587e-06 10.797985 + 700 0.00086070919 0 8.8529902e-05 -9.9431205e-06 -7.9905211e-06 10.776579 + 800 0.00083543943 0 7.5920357e-05 3.6381024e-07 3.7747551e-06 10.759309 + 900 0.00081190799 0 6.3678219e-05 5.4158243e-06 1.2751247e-05 10.744199 + 1000 0.00078828988 0 7.3079869e-05 -6.6410613e-06 -1.198683e-06 10.728368 + 1100 0.00075664718 0 6.2976995e-05 -4.7863299e-06 -3.9814556e-06 10.711819 + 1200 0.00072472205 0 4.9680233e-05 9.3093553e-06 4.4426393e-06 10.69401 + 1300 0.00070176532 0 5.4048176e-05 1.3051954e-05 7.5448558e-06 10.671164 + 1400 0.00068599319 0 5.4062404e-05 9.9930199e-06 1.0353154e-05 10.650117 + 1500 0.0006786164 0 4.5038593e-05 8.067571e-06 9.8825461e-06 10.636266 + 1600 0.00067466823 0 4.6733251e-05 9.8595584e-06 1.1551081e-05 10.621335 + 1700 0.00066847126 0 5.1472453e-05 2.1569974e-07 6.0070599e-06 10.6127 + 1800 0.00065711827 0 5.0355189e-05 -8.030203e-06 -3.1395588e-06 10.599568 + 1900 0.00063882539 0 4.7146888e-05 -2.0596242e-05 -1.6494542e-05 10.581939 + 2000 0.00061717894 0 4.6698781e-05 -2.5473048e-05 -2.7703615e-05 10.567188 + 2100 0.00059261327 0 3.7701055e-05 -2.4637803e-05 -3.3919162e-05 10.552617 + 2200 0.00056527158 0 3.2239421e-05 -1.8786685e-05 -2.4202734e-05 10.538406 + 2300 0.00054054919 0 2.7410334e-05 -6.701111e-06 -7.4354974e-06 10.520777 + 2400 0.00051820065 0 2.2997206e-05 1.5623767e-05 1.8687824e-05 10.501889 + 2500 0.00049647925 0 1.746693e-05 2.8814144e-05 3.5569425e-05 10.487498 + 2600 0.00047837258 0 1.4127067e-05 3.4245611e-05 4.0208577e-05 10.472387 + 2700 0.00046626924 0 1.3714876e-05 3.7922196e-05 4.1550346e-05 10.456377 + 2800 0.0004560167 0 1.5260976e-05 3.5632577e-05 3.7885738e-05 10.440007 + 2900 0.00045331059 0 1.5194832e-05 3.1036124e-05 2.8633755e-05 10.427955 + 3000 0.00045227799 0 1.4877378e-05 1.9327028e-05 2.1189487e-05 10.414283 + 3100 0.00044866178 0 2.0424612e-05 -2.7242288e-06 7.7121438e-06 10.40349 + 3200 0.00044336453 0 2.3276121e-05 -1.979069e-05 -4.2311089e-06 10.395575 + 3300 0.00043526526 0 2.3338132e-05 -2.834945e-05 -1.7302033e-05 10.389998 + 3400 0.00042817758 0 2.4374527e-05 -2.9870076e-05 -3.0623264e-05 10.382803 + 3500 0.00042182658 0 2.6120627e-05 -2.9449521e-05 -3.787776e-05 10.378126 + 3600 0.00041794291 0 2.4736957e-05 -2.4098172e-05 -3.0529166e-05 10.373628 + 3700 0.0004156005 0 2.7543305e-05 -1.2431749e-05 -1.8626096e-05 10.37075 + 3800 0.0004141461 0 2.4630482e-05 -6.345489e-06 -1.7375803e-05 10.368771 + 3900 0.00041328832 0 2.2220142e-05 4.1471034e-07 -1.3339476e-05 10.366972 + 4000 0.00041121725 0 2.3491321e-05 1.1284551e-05 -5.8651834e-06 10.364634 + 4100 0.00040761876 0 2.6688248e-05 1.9721625e-05 3.7536871e-06 10.362655 + 4200 0.00040301362 0 2.7601916e-05 1.9212118e-05 9.7175996e-06 10.359417 + 4300 0.00040001545 0 2.7243769e-05 1.6889359e-05 1.1857147e-05 10.3551 + 4400 0.00039654521 0 2.561083e-05 1.3863551e-05 1.0593597e-05 10.351142 + 4500 0.00039435924 0 2.4366458e-05 1.2545563e-05 1.1323962e-05 10.348804 + 4600 0.00039250006 0 2.3719127e-05 1.1015167e-05 8.5964046e-06 10.348444 + 4700 0.00039145496 0 2.2943915e-05 8.7824224e-06 5.0397129e-06 10.346825 + 4800 0.00039105331 0 2.4005757e-05 7.5899773e-06 9.033741e-07 10.344846 + 4900 0.0003898798 0 2.3819433e-05 4.9673894e-06 -2.3466459e-06 10.343587 + 5000 0.00038747508 0 2.3605028e-05 -1.1717437e-06 -6.1096657e-06 10.343047 + 5100 0.00038549022 0 2.3453798e-05 -9.9256693e-06 -9.3584148e-06 10.341788 + 5200 0.00038283936 0 2.5243567e-05 -1.5877598e-05 -9.9474447e-06 10.340169 + 5300 0.00038140888 0 2.5522223e-05 -1.9331435e-05 -1.1067039e-05 10.33873 + 5400 0.00037916674 0 2.5181488e-05 -2.1581255e-05 -1.1252641e-05 10.336931 + 5500 0.00037782932 0 2.691805e-05 -1.5768241e-05 -5.6704695e-06 10.334952 + 5600 0.00037628832 0 2.5851445e-05 -1.4239811e-05 -1.9122536e-06 10.333153 + 5700 0.00037451913 0 2.4758416e-05 -1.3252284e-05 -1.9222041e-06 10.331714 + 5800 0.00037328662 0 2.2507032e-05 -9.6704092e-06 -7.5470215e-06 10.330095 + 5900 0.00037253111 0 2.3303086e-05 -4.2828034e-06 -7.888056e-06 10.328476 + 6000 0.00037171133 0 2.4042456e-05 -4.7684985e-06 -6.5164336e-06 10.327397 + 6100 0.00036986726 0 2.4938695e-05 -4.8738316e-06 -4.5380007e-06 10.327037 + 6200 0.0003675822 0 2.3322229e-05 -4.6333093e-06 -5.7086464e-06 10.327037 + 6300 0.00036552389 0 2.1435354e-05 -4.8971566e-06 -3.5935426e-06 10.327037 + 6400 0.00036488091 0 2.0813994e-05 -3.8333319e-06 -3.6595059e-06 10.327037 + 6500 0.00036447973 0 2.2241876e-05 8.7797361e-08 -4.141203e-06 10.327037 + 6600 0.00036383343 0 2.269485e-05 4.9364593e-06 1.3062133e-06 10.326677 + 6700 0.00036305076 0 2.1838759e-05 6.4587048e-06 4.7758772e-06 10.326318 + 6800 0.00036226601 0 2.2916622e-05 6.044926e-06 5.0291597e-06 10.325598 + 6900 0.00036175279 0 2.2691667e-05 6.9998847e-06 5.8988637e-06 10.324699 + 7000 0.00036143633 0 2.1725813e-05 8.1268152e-06 5.0390503e-06 10.324519 + 7100 0.0003610248 0 2.1799675e-05 8.65795e-06 3.1360368e-06 10.323439 + 7200 0.00036086259 0 2.2198029e-05 5.1764734e-06 5.4798783e-07 10.32308 + 7300 0.00036099757 0 2.4160496e-05 1.0310325e-06 -5.115075e-07 10.32254 + 7400 0.00036129334 0 2.5325018e-05 -9.4918158e-07 -1.7064957e-06 10.32218 + 7500 0.00036136655 0 2.3513198e-05 -3.8618451e-06 -4.4344772e-06 10.321281 +Loop time of 5.76963 on 4 procs for 7500 steps with 11118 atoms + +Performance: 11231223.476 tau/day, 1299.910 timesteps/s +96.3% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.29183 | 0.31143 | 0.32961 | 2.4 | 5.40 +Bond | 2.76 | 2.9181 | 3.0698 | 7.2 | 50.58 +Neigh | 0.6247 | 0.6775 | 0.71319 | 4.5 | 11.74 +Comm | 0.76389 | 0.98813 | 1.2487 | 19.2 | 17.13 +Output | 0.1312 | 0.13162 | 0.13257 | 0.2 | 2.28 +Modify | 0.60526 | 0.63574 | 0.66339 | 2.6 | 11.02 +Other | | 0.1071 | | | 1.86 + +Nlocal: 2779.50 ave 2862 max 2686 min +Histogram: 1 0 0 0 0 1 1 0 0 1 +Nghost: 1183.25 ave 1220 max 1134 min +Histogram: 1 0 0 0 1 0 0 0 1 1 +Neighs: 11828.8 ave 12387 max 11053 min +Histogram: 1 0 0 0 1 0 0 0 1 1 + +Total # of neighbors = 47315 +Ave neighs/atom = 4.2557115 +Ave special neighs/atom = 10.321461 +Neighbor list builds = 421 +Dangerous builds = 11 +Total wall time: 0:00:05 diff --git a/examples/bpm/impact/log.30Jul2021.impact_rotational.g++1.4 b/examples/bpm/impact/log.30Jul2021.impact_rotational.g++1.4 deleted file mode 100644 index b81abac877..0000000000 --- a/examples/bpm/impact/log.30Jul2021.impact_rotational.g++1.4 +++ /dev/null @@ -1,215 +0,0 @@ -LAMMPS (30 Jul 2021) -units lj -dimension 3 -boundary f f f -atom_style sphere/bpm -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.0 -Lattice spacing in x,y,z = 1.5874011 1.5874011 1.5874011 -region box block -25 15 -22 22 -22 22 -create_box 1 box bond/types 2 extra/bond/per/atom 20 extra/special/per/atom 50 -Created orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) - 1 by 1 by 1 MPI processor grid - -region disk cylinder x 0.0 0.0 20.0 -0.5 0.5 -create_atoms 1 region disk -Created 7529 atoms - using lattice units in orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) - create_atoms CPU = 0.004 seconds -group plate region disk -7529 atoms in group plate - -region ball sphere 8.0 0.0 0.0 6.0 -create_atoms 1 region ball -Created 3589 atoms - using lattice units in orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) - create_atoms CPU = 0.002 seconds -group projectile region ball -3589 atoms in group projectile - -displace_atoms all random 0.1 0.1 0.1 134598738 -Displacing atoms ... - -neighbor 1.0 bin -pair_style gran/hooke/history 1.0 NULL 0.5 NULL 0.1 1 -bond_style bpm/rotational store/local 2 time id1 id2 -pair_coeff 1 1 -bond_coeff 1 1.0 0.2 0.02 0.02 0.05 0.01 0.01 0.01 0.1 0.02 0.002 0.002 -bond_coeff 2 1.0 0.2 0.02 0.02 0.20 0.04 0.04 0.04 0.1 0.02 0.002 0.002 - -fix 1 all nve/sphere/bpm -fix 2 all store/local 100 3 -fix 3 all update/special/bonds - -create_bonds many plate plate 1 0.0 1.5 -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2.6 - binsize = 1, bins = 64 70 70 - 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 gran/hooke/history, perpetual - attributes: half, newton on, size, history - pair build: half/size/bin/newton - stencil: half/bin/3d - bin: standard -Added 38559 bonds, new total = 38559 -Finding 1-2 1-3 1-4 neighbors ... - special bond factors lj: 0 1 1 - special bond factors coul: 0 1 1 - 15 = max # of 1-2 neighbors - 101 = max # of special neighbors - special bonds CPU = 0.007 seconds -create_bonds many projectile projectile 2 0.0 1.5 -Added 21869 bonds, new total = 60428 -Finding 1-2 1-3 1-4 neighbors ... - special bond factors lj: 0 1 1 - special bond factors coul: 0 1 1 - 16 = max # of 1-2 neighbors - 101 = max # of special neighbors - special bonds CPU = 0.010 seconds - -neighbor 0.3 bin -special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0 - -velocity projectile set -0.05 0.0 0.0 -compute nbond all nbond/atom -compute tbond all reduce sum c_nbond - -timestep 0.05 -thermo_style custom step ke pe pxx pyy pzz c_tbond -thermo 100 -thermo_modify lost ignore lost/bond ignore -#dump 1 all custom 100 atomDump id radius x y z c_nbond - -dump 2 all local 100 brokenDump f_2[1] f_2[2] f_2[3] -dump_modify 2 header no - -run 7500 -Neighbor list info ... - update every 1 steps, delay 10 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 = 98 108 108 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair gran/hooke/history, perpetual - attributes: half, newton on, size, history - pair build: half/size/bin/newton - stencil: half/bin/3d - bin: standard -Per MPI rank memory allocation (min/avg/max) = 39.18 | 39.18 | 39.18 Mbytes -Step KinEng PotEng Pxx Pyy Pzz c_tbond - 0 0.00053238861 0 3.8217307e-05 0 0 10.8703 - 100 0.00053238861 0 3.8217307e-05 3.7024766e-13 -2.6107956e-13 10.8703 - 200 0.00053238861 0 3.8217307e-05 -4.6764996e-13 5.7734804e-13 10.8703 - 300 0.00053238861 0 3.8217308e-05 -6.6404932e-13 -1.4463201e-13 10.8703 - 400 0.00053238861 0 3.8217307e-05 -1.5842255e-13 3.2646699e-14 10.8703 - 500 0.00053102307 0 3.6857657e-05 -5.0613842e-07 -4.5464639e-07 10.8703 - 600 0.00051549565 0 1.5836226e-05 -6.6250357e-06 -7.1458399e-06 10.868322 - 700 0.00050120381 0 -1.9467767e-05 -7.7209878e-06 -1.121158e-05 10.850333 - 800 0.00049861454 0 1.5365076e-05 5.214591e-06 2.7950985e-06 10.803742 - 900 0.00049582022 0 5.7445368e-05 -2.1846154e-05 -2.3927093e-05 10.738082 - 1000 0.00049342915 0 4.9596969e-05 -8.1907786e-06 -1.3269952e-05 10.688433 - 1100 0.00048639213 0 1.0822487e-05 3.9352339e-05 4.0409565e-05 10.667026 - 1200 0.000483091 0 3.8492853e-06 2.2015581e-05 3.1490077e-05 10.646159 - 1300 0.00047987023 0 5.8429983e-05 -7.8096854e-06 3.9318833e-06 10.631229 - 1400 0.00048104927 0 4.6603937e-05 -1.2320299e-05 -1.010841e-05 10.619536 - 1500 0.00047270384 0 -1.622772e-06 1.5996657e-05 1.5652658e-05 10.606944 - 1600 0.00045720595 0 1.64434e-06 1.0627449e-05 7.2901589e-06 10.597949 - 1700 0.00044826095 0 3.3113848e-05 -3.1886382e-05 -4.1076437e-05 10.584458 - 1800 0.00044859158 0 3.8589858e-05 -3.217135e-05 -4.4394932e-05 10.554236 - 1900 0.00044410417 0 1.6071124e-06 3.469787e-06 -1.172431e-05 10.528153 - 2000 0.00043690537 0 1.8298385e-05 3.2800463e-05 2.3766026e-05 10.49955 - 2100 0.00043113053 0 5.5169319e-05 1.0337577e-05 6.8334001e-06 10.449541 - 2200 0.00042795839 0 3.3555532e-05 -7.8682107e-06 1.4501739e-06 10.40277 - 2300 0.0004240013 0 8.8868452e-06 1.8196289e-06 2.755748e-05 10.362115 - 2400 0.00042426888 0 2.3953861e-05 1.7614888e-05 4.2827512e-05 10.340529 - 2500 0.00041903776 0 5.1969184e-05 2.5725967e-05 4.2229194e-05 10.324879 - 2600 0.00042070944 0 4.0633614e-05 2.6089786e-05 3.2212886e-05 10.313006 - 2700 0.00041907255 0 1.0826647e-05 2.7725133e-05 3.3535626e-05 10.301673 - 2800 0.00041823551 0 2.7757924e-05 1.462054e-05 1.629062e-05 10.288001 - 2900 0.00041833009 0 5.016926e-05 2.1116657e-06 -9.0474367e-06 10.276129 - 3000 0.0004200714 0 2.9312093e-05 8.0995894e-06 -1.427634e-05 10.266954 - 3100 0.00041930877 0 8.2905585e-06 2.5106255e-06 -6.0475079e-06 10.259039 - 3200 0.00042002824 0 2.7415565e-05 -2.5467008e-05 -1.1758229e-05 10.249146 - 3300 0.00041772304 0 4.7010143e-05 -3.2166248e-05 -2.3740064e-05 10.245728 - 3400 0.00041567147 0 2.265559e-05 -1.4994351e-05 -1.4387458e-05 10.244828 - 3500 0.00041264993 0 9.4675076e-06 -1.2940542e-05 -2.6164909e-06 10.243929 - 3600 0.00041296772 0 3.2135436e-05 -2.3723233e-05 -1.1358132e-05 10.243029 - 3700 0.00041218299 0 4.3546104e-05 -1.6744403e-05 -2.1466737e-05 10.240871 - 3800 0.00041196427 0 2.4626877e-05 8.2428335e-06 -9.6621514e-06 10.236913 - 3900 0.00041061174 0 1.5527454e-05 1.4796165e-05 8.5041818e-06 10.229718 - 4000 0.00041008163 0 3.6758236e-05 -4.1693239e-06 -2.3638032e-07 10.221083 - 4100 0.00040807476 0 4.2903311e-05 -8.7361319e-06 -9.2843568e-06 10.211909 - 4200 0.00040749974 0 2.1764542e-05 -1.5964475e-07 1.1116464e-06 10.205972 - 4300 0.00040585168 0 1.6398189e-05 -6.2081757e-07 1.4245018e-05 10.203454 - 4400 0.00040614156 0 3.8921994e-05 -1.0816449e-05 8.8070462e-06 10.198237 - 4500 0.00040550623 0 4.1195875e-05 -4.4468565e-06 -4.5109048e-06 10.19356 - 4600 0.00040471568 0 1.9924175e-05 8.0584659e-06 2.8014197e-06 10.186904 - 4700 0.00040443998 0 2.0848233e-05 7.2219213e-06 8.5736771e-06 10.182947 - 4800 0.00040411017 0 3.8995426e-05 -3.5139599e-06 -1.7346701e-06 10.17773 - 4900 0.00040369283 0 3.8616558e-05 -3.8837458e-07 -6.5227651e-06 10.174492 - 5000 0.00040347603 0 1.957792e-05 5.3591428e-06 5.0851337e-06 10.171074 - 5100 0.00040318 0 2.0628515e-05 -6.133528e-06 8.9227218e-06 10.166217 - 5200 0.00040396442 0 3.9097282e-05 -1.3317561e-05 -2.4599499e-06 10.158842 - 5300 0.00040420662 0 3.5316538e-05 -1.4346009e-06 -5.7802302e-06 10.154704 - 5400 0.00040419432 0 1.9706975e-05 6.6651292e-06 3.0821293e-06 10.148768 - 5500 0.00040500025 0 2.2492943e-05 -8.2260426e-06 4.6721228e-06 10.14463 - 5600 0.00040447185 0 3.8628198e-05 -8.844675e-06 -6.7043678e-07 10.143191 - 5700 0.00040435949 0 3.5236357e-05 5.3512632e-06 -2.9663861e-07 10.141752 - 5800 0.00040356839 0 1.8078404e-05 7.7468465e-06 4.1618489e-06 10.141045 - 5900 0.00040255066 0 2.5803838e-05 9.5521231e-07 3.4211797e-06 10.14251 - 6000 0.00040255799 0 3.8202776e-05 -3.5222942e-06 -7.4050996e-06 10.14233 - 6100 0.00040280742 0 3.0004475e-05 2.0612828e-06 -7.0155478e-06 10.14197 - 6200 0.00040180209 0 1.8453425e-05 2.5937959e-06 6.019204e-06 10.142703 - 6300 0.00040159364 0 2.6608078e-05 -3.4326767e-06 6.5089502e-06 10.142163 - 6400 0.00039963271 0 3.7746341e-05 -1.3954533e-06 -6.6816781e-06 10.143076 - 6500 0.0003995975 0 2.7758521e-05 6.370558e-06 -8.535581e-06 10.143076 - 6600 0.00039973428 0 1.8062746e-05 6.3493548e-06 1.2970441e-06 10.143076 - 6700 0.00039987367 0 2.7872598e-05 2.9794629e-07 3.1449123e-06 10.143988 - 6800 0.00039942046 0 3.6871697e-05 4.4181241e-07 -3.7266658e-06 10.146188 - 6900 0.00039937936 0 2.73304e-05 6.4090146e-06 1.1834424e-06 10.147835 - 7000 0.00039934517 0 2.0161434e-05 5.3875016e-06 1.141564e-05 10.147835 - 7100 0.00039884824 0 3.0603701e-05 7.327098e-07 5.1369462e-06 10.148402 - 7200 0.00039774709 0 3.5965545e-05 3.6906864e-06 -5.6506465e-06 10.148969 - 7300 0.00039642146 0 2.4883695e-05 7.2866197e-06 -8.2009411e-07 10.151379 - 7400 0.00039605388 0 2.0790699e-05 2.6616664e-06 1.1522615e-05 10.152321 - 7500 0.00039471805 0 3.0911798e-05 -4.6441697e-06 5.9470361e-06 10.154748 -Loop time of 114.934 on 1 procs for 7500 steps with 11089 atoms - -Performance: 281901.613 tau/day, 65.255 timesteps/s -99.7% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.2383 | 1.2383 | 1.2383 | 0.0 | 1.08 -Bond | 101.4 | 101.4 | 101.4 | 0.0 | 88.22 -Neigh | 2.7723 | 2.7723 | 2.7723 | 0.0 | 2.41 -Comm | 0.075342 | 0.075342 | 0.075342 | 0.0 | 0.07 -Output | 0.06732 | 0.06732 | 0.06732 | 0.0 | 0.06 -Modify | 9.1154 | 9.1154 | 9.1154 | 0.0 | 7.93 -Other | | 0.2695 | | | 0.23 - -Nlocal: 11089.0 ave 11089 max 11089 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0.00000 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 45554.0 ave 45554 max 45554 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 45554 -Ave neighs/atom = 4.1080350 -Ave special neighs/atom = 10.156101 -Neighbor list builds = 467 -Dangerous builds = 0 -Total wall time: 0:01:55 diff --git a/examples/bpm/impact/log.30Jul2021.impact_spring.g++1.4 b/examples/bpm/impact/log.30Jul2021.impact_spring.g++1.4 deleted file mode 100644 index e3df7fbdd4..0000000000 --- a/examples/bpm/impact/log.30Jul2021.impact_spring.g++1.4 +++ /dev/null @@ -1,218 +0,0 @@ -LAMMPS (30 Jul 2021) -units lj -dimension 3 -boundary f f f -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.0 -Lattice spacing in x,y,z = 1.5874011 1.5874011 1.5874011 -region box block -25 15 -22 22 -22 22 -create_box 1 box bond/types 2 extra/bond/per/atom 20 extra/special/per/atom 50 -Created orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) - 1 by 1 by 1 MPI processor grid - -region disk cylinder x 0.0 0.0 20.0 -0.5 0.5 -create_atoms 1 region disk -Created 7529 atoms - using lattice units in orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) - create_atoms CPU = 0.002 seconds -group plate region disk -7529 atoms in group plate - -region ball sphere 8.0 0.0 0.0 6.0 -create_atoms 1 region ball -Created 3589 atoms - using lattice units in orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) - create_atoms CPU = 0.001 seconds -group projectile region ball -3589 atoms in group projectile - -displace_atoms all random 0.1 0.1 0.1 134598738 -Displacing atoms ... - -mass 1 1.0 - -neighbor 1.0 bin -pair_style bpm/spring -bond_style bpm/spring store/local 2 time id1 id2 -pair_coeff 1 1 1.0 1.0 1.0 -bond_coeff 1 1.0 0.04 1.0 -bond_coeff 2 1.0 0.20 1.0 - -fix 1 all nve -fix 2 all store/local 100 3 -fix 3 all update/special/bonds - -create_bonds many plate plate 1 0.0 1.5 -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2.6 - binsize = 1, bins = 64 70 70 - 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 38559 bonds, new total = 38559 -Finding 1-2 1-3 1-4 neighbors ... - special bond factors lj: 0 1 1 - special bond factors coul: 0 1 1 - 15 = max # of 1-2 neighbors - 101 = max # of special neighbors - special bonds CPU = 0.004 seconds -create_bonds many projectile projectile 2 0.0 1.5 -WARNING: Communication cutoff 2.6 is shorter than a bond length based estimate of 2.799982026012842. This may lead to errors. (../comm.cpp:734) -Added 21869 bonds, new total = 60428 -Finding 1-2 1-3 1-4 neighbors ... - special bond factors lj: 0 1 1 - special bond factors coul: 0 1 1 - 16 = 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 - -velocity projectile set -0.05 0.0 0.0 -compute nbond all nbond/atom -compute tbond all reduce sum c_nbond - -timestep 0.1 -thermo_style custom step ke pe pxx pyy pzz c_tbond -thermo 100 -thermo_modify lost ignore lost/bond ignore -dump 1 all custom 100 atomDump id x y z c_nbond - -dump 2 all local 100 brokenDump f_2[1] f_2[2] f_2[3] -dump_modify 2 header no - -run 7500 -Neighbor list info ... - update every 1 steps, delay 10 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 = 98 108 108 - 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) = 24.30 | 24.30 | 24.30 Mbytes -Step KinEng PotEng Pxx Pyy Pzz c_tbond - 0 0.0010167873 0 7.298968e-05 0 0 10.8703 - 100 0.0010167873 0 7.298968e-05 -8.7429897e-20 -8.8470837e-20 10.8703 - 200 0.0010167873 0 7.298968e-05 -7.2809565e-20 -8.0915788e-20 10.8703 - 300 0.00099636578 -7.0816681e-06 9.8353035e-05 8.4642384e-06 8.0469072e-06 10.867242 - 400 0.00095644407 -4.9965293e-06 0.00012441378 -1.2397227e-05 -1.4980269e-05 10.839719 - 500 0.00092977183 -3.86131e-06 7.8605818e-05 -2.7329699e-06 -7.396399e-06 10.799424 - 600 0.00089787559 -2.9680488e-06 6.335469e-05 2.1448463e-06 4.5296678e-07 10.768663 - 700 0.00087244204 -2.6549464e-06 8.7340708e-05 -4.5516627e-06 -1.8690112e-06 10.74186 - 800 0.00084695959 -3.8045185e-06 8.0745955e-05 -4.5691607e-06 -1.6326641e-06 10.715237 - 900 0.00082108378 -3.7632176e-06 6.6501438e-05 -4.9020688e-06 3.5594859e-06 10.691131 - 1000 0.00079998853 -4.8468066e-06 6.5750228e-05 -8.3521669e-06 5.2266599e-06 10.66127 - 1100 0.00077368031 -2.5220164e-06 5.8210276e-05 2.6426591e-06 4.938121e-06 10.643461 - 1200 0.00074855587 -2.9570391e-06 5.2368186e-05 1.6897526e-06 2.4286268e-06 10.622054 - 1300 0.00072611594 -3.7109651e-06 5.8006188e-05 -2.6857728e-06 -5.6178729e-06 10.595611 - 1400 0.00070923315 -4.2629754e-06 5.3503366e-05 4.7475371e-06 -7.7268696e-06 10.569347 - 1500 0.00069740085 -3.0765543e-06 4.6753588e-05 1.2633383e-05 2.5315165e-06 10.540925 - 1600 0.00068657492 -3.0455076e-06 5.1582206e-05 1.4017258e-05 8.8044278e-06 10.519338 - 1700 0.00067656011 -3.4280513e-06 5.0396015e-05 8.4547122e-06 8.0820402e-06 10.50045 - 1800 0.00066870293 -3.4484153e-06 4.815639e-05 7.5212913e-07 1.1483891e-06 10.488217 - 1900 0.00065786507 -4.2634733e-06 4.9330522e-05 -1.108344e-05 -7.4259153e-06 10.474726 - 2000 0.00064106212 -4.7031033e-06 4.552393e-05 -1.7535521e-05 -1.6263295e-05 10.453139 - 2100 0.00062134889 -3.5304279e-06 3.809727e-05 -2.2412517e-05 -2.2946813e-05 10.433891 - 2200 0.00059830887 -3.2395481e-06 3.5740566e-05 -1.796758e-05 -1.8599386e-05 10.417881 - 2300 0.00057522207 -2.9905465e-06 3.4002427e-05 -6.7236311e-06 -1.4718938e-05 10.401511 - 2400 0.00055324818 -4.519622e-06 2.8286989e-05 5.379357e-06 -2.3963109e-06 10.383342 - 2500 0.00053140276 -4.5450401e-06 2.6655404e-05 1.4698667e-05 1.5782329e-05 10.362835 - 2600 0.00051144636 -4.1683588e-06 2.4944253e-05 2.5072313e-05 2.3558987e-05 10.33837 - 2700 0.00049421672 -5.8949891e-06 2.0313469e-05 2.4375973e-05 2.3609392e-05 10.320921 - 2800 0.00047936442 -5.7929485e-06 1.8523402e-05 1.6894086e-05 2.34875e-05 10.29016 - 2900 0.00046579117 -6.7340102e-06 1.8239135e-05 1.9583159e-05 1.821014e-05 10.266954 - 3000 0.00045439794 -5.5845157e-06 1.7413232e-05 2.0937177e-05 1.0934407e-05 10.246447 - 3100 0.00044541881 -5.1519292e-06 1.6153079e-05 1.4874654e-05 4.1969429e-06 10.233495 - 3200 0.00043791644 -5.0105552e-06 2.0005341e-05 4.7318756e-06 1.4446699e-08 10.223961 - 3300 0.00043012829 -4.8924048e-06 2.275482e-05 -6.5889472e-07 2.8411666e-06 10.212448 - 3400 0.00042478693 -4.7736643e-06 1.8655218e-05 -1.0408543e-05 -2.5097213e-06 10.203814 - 3500 0.00041885602 -4.1938783e-06 1.6924096e-05 -1.6723773e-05 -1.0907364e-05 10.197158 - 3600 0.00041470126 -4.4256374e-06 2.1660002e-05 -1.2589975e-05 -8.9195821e-06 10.191042 - 3700 0.00041103162 -4.0558298e-06 2.1463315e-05 -1.1052983e-05 -1.1288374e-05 10.186185 - 3800 0.0004064031 -4.085737e-06 2.1186979e-05 -7.6827664e-06 -8.4420523e-06 10.182407 - 3900 0.00040439659 -3.8043843e-06 2.2246535e-05 -9.8091295e-06 -6.337729e-06 10.179169 - 4000 0.00040248064 -5.207414e-06 2.4991678e-05 -8.9269116e-06 -1.3269351e-06 10.175931 - 4100 0.00039984629 -3.9470913e-06 2.0638508e-05 -1.0311727e-05 -7.0570926e-07 10.171973 - 4200 0.00039748539 -4.1530392e-06 2.2201704e-05 -1.9419136e-06 3.9363863e-06 10.169995 - 4300 0.00039699527 -4.4361889e-06 2.4637559e-05 3.0466639e-06 2.6075192e-06 10.167836 - 4400 0.00039577202 -4.5243252e-06 2.3254304e-05 9.3960261e-06 7.0976687e-06 10.165138 - 4500 0.00039438637 -4.4623531e-06 2.5479152e-05 1.3111125e-05 9.1080155e-06 10.163699 - 4600 0.00039279153 -4.3667553e-06 2.4372973e-05 1.6089732e-05 8.9825485e-06 10.162439 - 4700 0.00039304328 -4.0850029e-06 2.3031657e-05 1.4377571e-05 1.0046115e-05 10.161 - 4800 0.0003930794 -4.2247499e-06 2.3528523e-05 8.7677526e-06 1.1123548e-05 10.16082 - 4900 0.00039357048 -4.0441827e-06 2.2238523e-05 7.0463814e-06 1.0318253e-05 10.160281 - 5000 0.00039305174 -4.0989874e-06 2.3082845e-05 4.7559622e-06 9.1784689e-06 10.159561 - 5100 0.00039281446 -3.9654637e-06 2.4406601e-05 6.6792841e-07 3.9479578e-06 10.158662 - 5200 0.00039266969 -3.7000839e-06 2.3342952e-05 -4.0814362e-07 -1.7091512e-07 10.157762 - 5300 0.00039179548 -3.6041015e-06 2.2308731e-05 -2.3038721e-06 -7.7478695e-06 10.156863 - 5400 0.00039126557 -3.3816417e-06 2.5032837e-05 -4.2112558e-06 -1.0544895e-05 10.155244 - 5500 0.00039013707 -3.2015334e-06 2.4333377e-05 -9.4600548e-06 -8.164991e-06 10.153985 - 5600 0.00038863118 -3.2457645e-06 2.5234836e-05 -1.3025121e-05 -4.212353e-06 10.152545 - 5700 0.00038755505 -3.1192824e-06 2.4611567e-05 -1.7034285e-05 -7.4484904e-06 10.150926 - 5800 0.00038682794 -3.159343e-06 2.4790374e-05 -2.1244353e-05 -9.5959604e-06 10.150027 - 5900 0.00038514658 -3.1365816e-06 2.4775049e-05 -2.013337e-05 -8.7609997e-06 10.147688 - 6000 0.00038273205 -3.5768746e-06 2.4513287e-05 -1.7197146e-05 -7.7627989e-06 10.14553 - 6100 0.00038118307 -3.2886293e-06 2.4104512e-05 -1.1683647e-05 -9.0156319e-06 10.144091 - 6200 0.00037877747 -3.5457022e-06 2.546258e-05 -5.3008572e-06 -1.0680602e-05 10.142292 - 6300 0.00037631131 -3.7852195e-06 2.4823247e-05 -5.9313668e-06 -8.837521e-06 10.141033 - 6400 0.00037412558 -4.1058533e-06 2.434972e-05 -5.8192486e-06 -1.9415666e-06 10.139773 - 6500 0.00037259808 -4.0091084e-06 2.4652474e-05 -4.5769183e-06 -2.9449568e-06 10.137974 - 6600 0.00037090733 -4.1292855e-06 2.4417194e-05 -4.1646449e-06 8.6273141e-07 10.134916 - 6700 0.00036992828 -4.0221056e-06 2.3588901e-05 -6.8333754e-06 -2.5804065e-07 10.133477 - 6800 0.00036883832 -4.0617393e-06 2.4407327e-05 -4.6933138e-06 5.9097433e-07 10.131319 - 6900 0.00036806181 -3.98881e-06 2.5070794e-05 -1.8839397e-06 1.8686666e-06 10.129879 - 7000 0.00036759453 -3.8395938e-06 2.499485e-05 5.8078766e-06 5.491628e-06 10.12844 - 7100 0.00036661989 -3.807276e-06 2.3841577e-05 9.8514185e-06 2.8498309e-06 10.125922 - 7200 0.0003643494 -3.8754489e-06 2.4003718e-05 6.4101669e-06 -1.0308979e-06 10.124483 - 7300 0.00036261161 -3.8682002e-06 2.345457e-05 6.5773508e-06 1.0241788e-06 10.123583 - 7400 0.00036215882 -3.8404085e-06 2.2989219e-05 1.3012853e-05 5.3465279e-06 10.122324 - 7500 0.00036219767 -3.7430511e-06 2.6189702e-05 1.3646428e-05 7.8525122e-06 10.121065 -Loop time of 17.1159 on 1 procs for 7500 steps with 11118 atoms - -Performance: 3785956.989 tau/day, 438.189 timesteps/s -97.1% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.1678 | 1.1678 | 1.1678 | 0.0 | 6.82 -Bond | 7.299 | 7.299 | 7.299 | 0.0 | 42.64 -Neigh | 3.105 | 3.105 | 3.105 | 0.0 | 18.14 -Comm | 0.049905 | 0.049905 | 0.049905 | 0.0 | 0.29 -Output | 1.4391 | 1.4391 | 1.4391 | 0.0 | 8.41 -Modify | 3.8866 | 3.8866 | 3.8866 | 0.0 | 22.71 -Other | | 0.1685 | | | 0.98 - -Nlocal: 11118.0 ave 11118 max 11118 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0.00000 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 47063.0 ave 47063 max 47063 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 47063 -Ave neighs/atom = 4.2330455 -Ave special neighs/atom = 10.121065 -Neighbor list builds = 464 -Dangerous builds = 1 -Total wall time: 0:00:17 diff --git a/examples/bpm/pour/log.27Oct2021.pour.g++.1 b/examples/bpm/pour/log.27Oct2021.pour.g++.1 new file mode 100644 index 0000000000..ea2aecd702 --- /dev/null +++ b/examples/bpm/pour/log.27Oct2021.pour.g++.1 @@ -0,0 +1,1091 @@ +LAMMPS (27 Oct 2021) +units lj +dimension 3 +boundary m m m +atom_style sphere/bpm +special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0 +newton on off +comm_modify vel yes cutoff 3.3 +region box block -15 15 -15 15 0 60.0 +create_box 1 box bond/types 1 extra/bond/per/atom 15 extra/special/per/atom 50 +Created orthogonal box = (-15.000000 -15.000000 0.0000000) to (15.000000 15.000000 60.000000) + 1 by 1 by 1 MPI processor grid + +molecule my_mol "rect.mol" +Read molecule template my_mol: + 1 molecules + 0 fragments + 63 atoms with max type 1 + 297 bonds with max type 1 + 0 angles with max type 0 + 0 dihedrals with max type 0 + 0 impropers with max type 0 +region wall_cyl cylinder z 0.0 0.0 10.0 EDGE EDGE side in +region dropzone cylinder z 0.0 0.0 10.0 40.0 50.0 side in + +pair_style gran/hertz/history 1.0 NULL 0.5 NULL 0.1 1 +bond_style bpm/rotational +pair_coeff 1 1 +bond_coeff 1 1.0 0.2 0.01 0.01 2.0 0.4 0.02 0.02 0.2 0.04 0.002 0.002 + +compute nbond all nbond/atom +compute tbond all reduce sum c_nbond +compute_modify thermo_temp dynamic/dof yes + +fix 1 all wall/gran hertz/history 1.0 NULL 0.5 NULL 0.1 1 zplane 0.0 NULL +fix 2 all wall/gran/region hertz/history 1.0 NULL 0.5 NULL 0.1 1 region wall_cyl +fix 3 all gravity 1e-4 vector 0 0 -1 +fix 4 all deposit 40 0 1500 712511343 mol my_mol region dropzone near 2.0 vz -0.05 -0.05 +fix 5 all nve/sphere/bpm + +timestep 0.05 +thermo_style custom step ke pe pxx pyy pzz c_tbond +thermo 100 +#dump 1 all custom 500 atomDump id radius x y z c_nbond mol + +run 100000 +WARNING: No fixes with time integration, atoms won't move (../verlet.cpp:60) +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.3 + ghost atom cutoff = 3.3 + binsize = 0.65, bins = 47 47 93 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gran/hertz/history, perpetual + attributes: half, newton on, size, history + pair build: half/size/bin/newton + stencil: half/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.455 | 7.455 | 7.455 Mbytes +Step KinEng PotEng Pxx Pyy Pzz c_tbond + 0 -0 0 0 0 0 0 + 100 0.0018350009 0 2.0294872e-07 1.2112294e-06 2.871091e-06 9.4285714 + 200 0.0026448827 0 7.6279587e-07 2.0778573e-06 3.3379229e-06 9.4285714 + 300 0.0037670874 0 3.9556015e-07 5.4333498e-06 2.9911029e-06 9.4285714 + 400 0.0060865434 0 1.6646599e-06 8.4961343e-06 4.0676208e-06 9.4285714 + 500 0.0074581799 0 1.6593722e-06 1.1564338e-05 4.2088772e-06 9.4285714 + 600 0.0078577632 0 1.1090617e-06 1.3870259e-05 3.3849787e-06 9.4285714 + 700 0.0075356935 0 1.1860992e-06 1.2423274e-05 3.9852176e-06 9.4285714 + 800 0.0073700733 0 1.2020231e-06 1.2772167e-05 3.2382575e-06 9.4285714 + 900 0.0075286722 0 1.1889762e-06 1.3249052e-05 3.1364682e-06 9.4285714 + 1000 0.0075662049 0 9.7821223e-07 1.3244288e-05 3.4489011e-06 9.4285714 + 1100 0.0075478247 0 2.1523741e-06 1.2154775e-05 3.3141837e-06 9.4285714 + 1200 0.0075157382 0 1.8293606e-06 1.2430238e-05 3.2847737e-06 9.4285714 + 1300 0.0075727908 0 1.8169654e-06 1.24965e-05 3.3704876e-06 9.4285714 + 1400 0.0076061393 0 3.235313e-06 1.0568101e-05 3.9516909e-06 9.4285714 + 1500 0.0075843344 0 2.8081603e-06 1.1079699e-05 3.8236112e-06 9.4285714 + 1600 0.0059669597 0 4.3734615e-06 1.6939808e-05 6.562706e-06 9.4285714 + 1700 0.0080609915 0 5.879456e-06 2.4453021e-05 7.3267921e-06 9.4285714 + 1800 0.008774447 0 5.9362465e-06 2.7360342e-05 7.6740751e-06 9.4285714 + 1900 0.0087088165 0 6.1871839e-06 2.651416e-05 7.9542363e-06 9.4285714 + 2000 0.0087013604 0 6.265003e-06 2.6273818e-05 8.0842249e-06 9.4285714 + 2100 0.0084280051 0 6.9477803e-06 2.5301892e-05 9.0531791e-06 9.4285714 + 2200 0.0083665332 0 8.2583657e-06 2.3408918e-05 8.5164662e-06 9.4285714 + 2300 0.0083481041 0 8.3655638e-06 2.2441951e-05 8.1588379e-06 9.4285714 + 2400 0.0082989206 0 7.8320098e-06 2.214764e-05 8.7594404e-06 9.4285714 + 2500 0.0083831827 0 7.2186023e-06 2.2823611e-05 9.08778e-06 9.4285714 + 2600 0.0084024229 0 7.0626722e-06 2.2893292e-05 9.2638369e-06 9.4285714 + 2700 0.0083044462 0 7.4847584e-06 2.3286575e-05 1.0147536e-05 9.4285714 + 2800 0.0073772276 0 1.0024518e-05 1.6545269e-05 1.0697191e-05 9.4285714 + 2900 0.0072858299 0 8.9107749e-06 1.4628491e-05 1.0788204e-05 9.4285714 + 3000 0.0073545918 0 8.7084385e-06 1.4498263e-05 1.1127326e-05 9.4285714 + 3100 0.0050344502 0 7.4556928e-06 1.3880959e-05 1.3917065e-05 9.4285714 + 3200 0.0046675954 0 5.8496582e-06 1.1874352e-05 1.4957017e-05 9.4285714 + 3300 0.0047886619 0 5.7824084e-06 1.161982e-05 1.6128046e-05 9.4285714 + 3400 0.00489288 0 6.1521355e-06 1.2558603e-05 1.5545005e-05 9.4285714 + 3500 0.0048680793 0 6.1955156e-06 1.3253713e-05 1.5278308e-05 9.4285714 + 3600 0.0047352707 0 7.3854257e-06 1.4018671e-05 1.5533577e-05 9.4285714 + 3700 0.0045830654 0 7.1583188e-06 1.3009973e-05 1.5272757e-05 9.4285714 + 3800 0.0045912189 0 6.5859855e-06 1.1783995e-05 1.4978946e-05 9.4285714 + 3900 0.0048199975 0 6.5690779e-06 1.2452714e-05 1.5303577e-05 9.4285714 + 4000 0.0049854953 0 6.6919549e-06 1.2702667e-05 1.5574985e-05 9.4285714 + 4100 0.0047079715 0 6.2456272e-06 1.1323218e-05 1.5395214e-05 9.4285714 + 4200 0.0035982053 0 3.5916235e-06 6.8770095e-06 1.4730341e-05 9.4285714 + 4300 0.0033625459 0 1.7656845e-06 4.2750955e-06 1.7523659e-05 9.4285714 + 4400 0.0034461056 0 2.2099337e-06 4.5177405e-06 1.7408442e-05 9.4285714 + 4500 0.0035090592 0 2.7074645e-06 4.4855286e-06 1.7382374e-05 9.4285714 + 4600 0.0030519096 0 3.1016681e-06 4.7949192e-06 2.0596545e-05 9.4285714 + 4700 0.0031819672 0 3.7145451e-06 6.3384226e-06 1.9656789e-05 9.4285714 + 4800 0.0032095496 0 5.096181e-06 7.0013771e-06 1.7867337e-05 9.4285714 + 4900 0.0030538715 0 4.7384172e-06 5.7611937e-06 1.800963e-05 9.4285714 + 5000 0.0030324633 0 5.007129e-06 5.6513445e-06 1.7651679e-05 9.4285714 + 5100 0.003120367 0 5.7795755e-06 6.4553695e-06 1.6895586e-05 9.4285714 + 5200 0.0031069446 0 5.7231207e-06 6.3517612e-06 1.6929949e-05 9.4285714 + 5300 0.0030959699 0 5.7289124e-06 5.7901275e-06 1.7380847e-05 9.4285714 + 5400 0.0032639481 0 6.122899e-06 6.5875034e-06 1.7759717e-05 9.4285714 + 5500 0.0033064076 0 5.6716333e-06 5.9987588e-06 1.9195033e-05 9.4285714 + 5600 0.0032361922 0 4.991911e-06 4.8111961e-06 2.0405732e-05 9.4285714 + 5700 0.0033168593 0 5.3999623e-06 4.9594866e-06 2.0602844e-05 9.4285714 + 5800 0.0033344871 0 4.4373847e-06 4.0635748e-06 2.2625841e-05 9.4285714 + 5900 0.0033044802 0 3.4888766e-06 3.9362313e-06 2.4472573e-05 9.4285714 + 6000 0.0027700932 0 3.6039441e-06 3.8782353e-06 2.4639519e-05 9.4285714 + 6100 0.0026401032 0 3.832274e-06 5.4942423e-06 2.631778e-05 9.4285714 + 6200 0.0026500233 0 2.373142e-06 5.7019869e-06 2.355138e-05 9.4285714 + 6300 0.0025231856 0 1.6690228e-06 4.9886027e-06 2.2789881e-05 9.4285714 + 6400 0.003410422 0 5.2238416e-06 1.1212411e-05 2.3401372e-05 9.4285714 + 6500 0.0039402586 0 6.2826511e-06 1.511721e-05 2.4633176e-05 9.4285714 + 6600 0.0039235109 0 4.4912299e-06 1.7815303e-05 2.3499406e-05 9.4285714 + 6700 0.003825182 0 5.4728549e-06 1.7800141e-05 2.3900789e-05 9.4285714 + 6800 0.0038319191 0 6.409485e-06 1.5032008e-05 2.7723011e-05 9.4285714 + 6900 0.0036896196 0 5.6371248e-06 1.6368975e-05 2.9097845e-05 9.4285714 + 7000 0.0031500683 0 6.5008792e-06 1.1791622e-05 3.1433351e-05 9.4285714 + 7100 0.0031128224 0 7.1533095e-06 1.1150888e-05 3.3237324e-05 9.4285714 + 7200 0.0035389111 0 6.3706153e-06 1.3264086e-05 3.3037967e-05 9.4285714 + 7300 0.0037309937 0 4.1353505e-06 1.4005376e-05 3.1405251e-05 9.4285714 + 7400 0.0036308845 0 3.0015673e-06 1.2772593e-05 2.864914e-05 9.4285714 + 7500 0.0037287271 0 2.6734458e-06 1.2667855e-05 2.8558075e-05 9.4285714 + 7600 0.0035038312 0 2.9420411e-06 1.2900066e-05 3.3224718e-05 9.4285714 + 7700 0.0034977225 0 4.2246416e-06 1.1694196e-05 3.3064037e-05 9.4285714 + 7800 0.0036630829 0 6.8573002e-06 1.1442507e-05 3.2998787e-05 9.4285714 + 7900 0.0040321834 0 1.1044243e-05 1.1684923e-05 3.3737415e-05 9.4285714 + 8000 0.0044542478 0 1.6177547e-05 1.1128289e-05 3.5092515e-05 9.4285714 + 8100 0.0049699876 0 2.3026042e-05 9.856308e-06 3.6725484e-05 9.4285714 + 8200 0.0051388155 0 2.7255576e-05 8.158855e-06 3.655618e-05 9.4285714 + 8300 0.0050888399 0 2.7979276e-05 6.9929851e-06 3.6388665e-05 9.4285714 + 8400 0.0052714914 0 2.9442974e-05 5.8756719e-06 3.8709494e-05 9.4285714 + 8500 0.0053478294 0 3.0604207e-05 5.4317719e-06 3.8975969e-05 9.4285714 + 8600 0.0052053706 0 3.0237725e-05 5.8408789e-06 3.7844368e-05 9.4285714 + 8700 0.0052929082 0 3.0029596e-05 6.9024161e-06 3.875354e-05 9.4285714 + 8800 0.0054247989 0 3.1357272e-05 6.935255e-06 4.0028596e-05 9.4285714 + 8900 0.005369785 0 3.0922676e-05 6.3120795e-06 3.9719251e-05 9.4285714 + 9000 0.0053432698 0 2.9675587e-05 6.386874e-06 3.8990769e-05 9.4285714 + 9100 0.0048441075 0 2.9859464e-05 6.7377794e-06 4.2531558e-05 9.4285714 + 9200 0.0049104595 0 3.0121025e-05 6.618976e-06 4.3471176e-05 9.4285714 + 9300 0.0048682236 0 2.9768524e-05 7.7725842e-06 4.392645e-05 9.4285714 + 9400 0.004676996 0 2.7538288e-05 9.4543991e-06 4.5639123e-05 9.4285714 + 9500 0.0046378017 0 2.4529208e-05 9.1396795e-06 4.767164e-05 9.4285714 + 9600 0.0045792212 0 1.9910681e-05 8.5919271e-06 4.8540466e-05 9.4285714 + 9700 0.0045026597 0 1.7477389e-05 8.7877512e-06 4.9271659e-05 9.4285714 + 9800 0.0046593892 0 1.9271529e-05 9.5223406e-06 4.9282528e-05 9.4285714 + 9900 0.0048613886 0 1.841469e-05 9.7249931e-06 5.298331e-05 9.4285714 + 10000 0.0048016614 0 1.6287149e-05 8.8584232e-06 5.4417573e-05 9.4285714 + 10100 0.004629566 0 1.5608718e-05 8.2422763e-06 5.1762362e-05 9.4285714 + 10200 0.0046167654 0 1.4254364e-05 9.549134e-06 5.1613642e-05 9.4285714 + 10300 0.0045424437 0 1.0038866e-05 1.1292797e-05 5.2877582e-05 9.4285714 + 10400 0.0042848338 0 5.957236e-06 1.2157429e-05 5.1882798e-05 9.4285714 + 10500 0.0043376608 0 6.6010743e-06 1.327538e-05 5.1524134e-05 9.4285714 + 10600 0.0045751733 0 9.7449183e-06 2.1947108e-05 5.4593835e-05 9.4285714 + 10700 0.0054702498 0 1.2123131e-05 3.5114277e-05 5.5400434e-05 9.4285714 + 10800 0.0058054633 0 9.8645409e-06 4.3018204e-05 5.5982935e-05 9.4285714 + 10900 0.0057301758 0 8.700948e-06 4.2514633e-05 5.5991782e-05 9.4285714 + 11000 0.0057973554 0 1.0495609e-05 4.0846878e-05 5.6902294e-05 9.4285714 + 11100 0.005780069 0 9.1573225e-06 4.0482604e-05 5.8275422e-05 9.4285714 + 11200 0.0056209261 0 7.7034555e-06 3.8854101e-05 5.8383813e-05 9.4285714 + 11300 0.0056211041 0 8.5828353e-06 3.760067e-05 5.8758305e-05 9.4285714 + 11400 0.0056927081 0 9.6598158e-06 3.6563652e-05 6.0056441e-05 9.4285714 + 11500 0.0053957879 0 1.0685774e-05 3.5859051e-05 5.5347366e-05 9.4285714 + 11600 0.0053147234 0 1.0730575e-05 3.8103571e-05 5.2133105e-05 9.4285714 + 11700 0.0053448737 0 1.1693484e-05 3.7473956e-05 5.257783e-05 9.4285714 + 11800 0.0053498893 0 1.2384545e-05 3.381605e-05 5.6148408e-05 9.4285714 + 11900 0.005304828 0 1.0084261e-05 3.681835e-05 5.5353768e-05 9.4285714 + 12000 0.0052215204 0 1.0470404e-05 3.4333184e-05 5.672629e-05 9.4285714 + 12100 0.0049126885 0 1.0941321e-05 3.5518615e-05 5.997024e-05 9.4285714 + 12200 0.0049781345 0 9.147148e-06 3.630276e-05 6.1403027e-05 9.4285714 + 12300 0.0049275083 0 9.1254734e-06 3.840315e-05 5.8646864e-05 9.4285714 + 12400 0.0048758384 0 1.01181e-05 3.7803992e-05 5.6731505e-05 9.4285714 + 12500 0.0047755125 0 9.9005549e-06 3.6670805e-05 5.3952282e-05 9.4285714 + 12600 0.004577203 0 8.7572723e-06 3.311807e-05 5.4269014e-05 9.4285714 + 12700 0.0044346961 0 8.6941249e-06 2.3729287e-05 6.0741316e-05 9.4285714 + 12800 0.0044227077 0 9.8185292e-06 1.729171e-05 6.5805762e-05 9.4285714 + 12900 0.0043367392 0 9.6654371e-06 1.8616267e-05 6.2809705e-05 9.4285714 + 13000 0.0041738636 0 8.3919664e-06 2.1618677e-05 5.7662042e-05 9.4285714 + 13100 0.0042795324 0 9.2394692e-06 2.6224333e-05 5.4431555e-05 9.4285714 + 13200 0.0044161381 0 9.7879739e-06 3.0048532e-05 5.2930014e-05 9.4285714 + 13300 0.0044174234 0 9.1633936e-06 3.1842125e-05 5.1781495e-05 9.4285714 + 13400 0.0043768306 0 9.1573101e-06 2.981597e-05 5.2952519e-05 9.4285714 + 13500 0.0044286904 0 9.918627e-06 2.7567265e-05 5.5537207e-05 9.4285714 + 13600 0.0039796345 0 1.0820871e-05 2.0870525e-05 6.1782819e-05 9.4285714 + 13700 0.003564057 0 1.1896922e-05 1.7813715e-05 5.7017165e-05 9.4285714 + 13800 0.0038316601 0 1.5383128e-05 2.1627099e-05 5.5289648e-05 9.4285714 + 13900 0.0042111447 0 1.8105571e-05 2.3643088e-05 5.7085419e-05 9.4285714 + 14000 0.0047964469 0 2.286261e-05 3.019208e-05 5.892366e-05 9.4285714 + 14100 0.0047837803 0 2.3179811e-05 3.1413746e-05 5.7063453e-05 9.4285714 + 14200 0.0046565568 0 2.3228686e-05 2.8973989e-05 5.6469563e-05 9.4285714 + 14300 0.004794553 0 2.287645e-05 3.0662974e-05 5.8354413e-05 9.4285714 + 14400 0.0047997654 0 2.1176059e-05 3.1932208e-05 5.8908158e-05 9.4285714 + 14500 0.0046011182 0 1.9043677e-05 3.0288317e-05 5.8045274e-05 9.4285714 + 14600 0.0045145422 0 1.9050731e-05 2.8938872e-05 5.7647482e-05 9.4285714 + 14700 0.0045399428 0 2.1209987e-05 3.0700121e-05 6.0950549e-05 9.4285714 + 14800 0.0042672079 0 1.9868523e-05 3.4771923e-05 5.9179242e-05 9.4285714 + 14900 0.0038189786 0 2.1607031e-05 2.9356106e-05 5.690017e-05 9.4285714 + 15000 0.003683925 0 2.1862146e-05 2.5542381e-05 5.3848155e-05 9.4285714 + 15100 0.0039795318 0 2.9518335e-05 2.536914e-05 5.6127098e-05 9.4285714 + 15200 0.0046787 0 4.3771068e-05 2.6553802e-05 5.5962774e-05 9.4285714 + 15300 0.00489572 0 5.2899281e-05 2.0539323e-05 5.6365553e-05 9.4285714 + 15400 0.004897386 0 5.2664322e-05 1.888198e-05 5.5292376e-05 9.4285714 + 15500 0.0050380036 0 5.1766791e-05 2.1682715e-05 5.6557261e-05 9.4285714 + 15600 0.0049743522 0 5.0992042e-05 2.1247749e-05 5.7194932e-05 9.4285714 + 15700 0.0047899482 0 4.8911389e-05 1.9991649e-05 5.640592e-05 9.4285714 + 15800 0.0048382224 0 4.8348685e-05 2.0089252e-05 5.7572971e-05 9.4285714 + 15900 0.0049101807 0 4.7651893e-05 2.2501218e-05 5.8214366e-05 9.4285714 + 16000 0.0049905463 0 4.5858265e-05 2.3126493e-05 6.0944362e-05 9.4285714 + 16100 0.0046448452 0 4.4314129e-05 2.1836233e-05 5.589425e-05 9.4285714 + 16200 0.0046601006 0 4.1728018e-05 2.3517029e-05 5.6339343e-05 9.4285714 + 16300 0.004780226 0 4.0944727e-05 2.3642991e-05 5.8587055e-05 9.4285714 + 16400 0.0043004453 0 3.9801403e-05 1.6463582e-05 5.4164428e-05 9.4285714 + 16500 0.0043384733 0 3.8887191e-05 1.5887269e-05 5.6616198e-05 9.4285714 + 16600 0.004156164 0 3.8326889e-05 1.7422958e-05 6.0654966e-05 9.4285714 + 16700 0.0042382612 0 3.9918859e-05 1.7581446e-05 6.1202411e-05 9.4285714 + 16800 0.0043452092 0 4.1562678e-05 1.9456013e-05 6.0686455e-05 9.4285714 + 16900 0.0044068786 0 4.3172802e-05 2.1999677e-05 5.9727732e-05 9.4285714 + 17000 0.0044625721 0 4.472355e-05 2.2735882e-05 5.8748648e-05 9.4285714 + 17100 0.004469787 0 4.6129796e-05 2.3600605e-05 5.9653903e-05 9.4285714 + 17200 0.0045972082 0 4.8242815e-05 3.1122761e-05 6.0890685e-05 9.4285714 + 17300 0.0047150968 0 4.5680627e-05 3.2921314e-05 5.7738419e-05 9.4285714 + 17400 0.0047283145 0 4.4250459e-05 3.2831247e-05 5.6700093e-05 9.4285714 + 17500 0.004503305 0 4.547322e-05 3.6123423e-05 5.2412154e-05 9.4285714 + 17600 0.0041759054 0 4.5356219e-05 3.7031236e-05 4.4035172e-05 9.4285714 + 17700 0.0041896355 0 4.511856e-05 3.759129e-05 4.1440018e-05 9.4285714 + 17800 0.00436712 0 4.4724782e-05 3.6086114e-05 4.3792525e-05 9.4285714 + 17900 0.0044146094 0 4.2913404e-05 3.8371827e-05 4.346304e-05 9.4285714 + 18000 0.0042302642 0 3.7447854e-05 3.93605e-05 4.2719307e-05 9.4285714 + 18100 0.0036293574 0 2.8433465e-05 3.8569829e-05 4.4862074e-05 9.4285714 + 18200 0.0034838062 0 2.6316266e-05 3.8119164e-05 4.4753248e-05 9.4285714 + 18300 0.0036284577 0 3.1896705e-05 4.0169016e-05 4.7756073e-05 9.4285714 + 18400 0.0036353723 0 3.2033387e-05 4.1466797e-05 4.4168992e-05 9.4285714 + 18500 0.0035492177 0 3.0749494e-05 3.8864993e-05 4.1650541e-05 9.4285714 + 18600 0.0036032456 0 3.0574301e-05 3.7967397e-05 4.1511478e-05 9.4285714 + 18700 0.0035846336 0 3.0312221e-05 3.8202387e-05 4.2306204e-05 9.4285714 + 18800 0.0035121845 0 2.9379858e-05 3.9891233e-05 4.1817666e-05 9.4285714 + 18900 0.0034245548 0 2.9131824e-05 3.8008479e-05 4.0179486e-05 9.4285714 + 19000 0.0034834924 0 2.9993906e-05 3.7656312e-05 4.0247454e-05 9.4285714 + 19100 0.0035654883 0 3.0498102e-05 4.0668284e-05 4.1077887e-05 9.4285714 + 19200 0.0032066097 0 2.7514914e-05 3.3140912e-05 4.1108971e-05 9.4285714 + 19300 0.0027432538 0 2.5505766e-05 1.9538479e-05 4.1850527e-05 9.4285714 + 19400 0.0029010974 0 2.5712536e-05 2.4758438e-05 4.1276335e-05 9.4285714 + 19500 0.0029436612 0 2.494891e-05 2.7516331e-05 4.1866423e-05 9.4285714 + 19600 0.0029189539 0 2.4190472e-05 2.8861551e-05 4.6075827e-05 9.4285714 + 19700 0.0029247275 0 2.4203468e-05 2.7797343e-05 4.647369e-05 9.4285714 + 19800 0.0029045179 0 2.2730011e-05 2.6616627e-05 4.6257024e-05 9.4285714 + 19900 0.002907703 0 2.1695053e-05 2.6733341e-05 4.7071277e-05 9.4285714 + 20000 0.0029451599 0 2.1508761e-05 2.7104587e-05 4.7720852e-05 9.4285714 + 20100 0.0029483838 0 2.2042113e-05 2.6603749e-05 4.8005426e-05 9.4285714 + 20200 0.0029387238 0 2.1190647e-05 2.6517959e-05 4.9103687e-05 9.4285714 + 20300 0.002950486 0 2.0128641e-05 2.718872e-05 5.0450153e-05 9.4285714 + 20400 0.002958757 0 2.0418098e-05 2.691014e-05 4.9967877e-05 9.4285714 + 20500 0.0029656895 0 2.0153597e-05 2.6160383e-05 5.0902619e-05 9.4285714 + 20600 0.0029368331 0 1.9907915e-05 2.5235697e-05 5.247696e-05 9.4285714 + 20700 0.0029028666 0 1.9602049e-05 2.5733067e-05 5.4111095e-05 9.4285714 + 20800 0.0028956447 0 1.8631385e-05 2.6248063e-05 5.5192088e-05 9.4285714 + 20900 0.0028928514 0 1.8773527e-05 2.4804374e-05 5.604069e-05 9.4285714 + 21000 0.002927052 0 1.8652814e-05 2.3482004e-05 5.6701737e-05 9.4285714 + 21100 0.0028687497 0 2.2436016e-05 2.325233e-05 5.8808647e-05 9.4285714 + 21200 0.0029342036 0 2.7929348e-05 2.2400408e-05 5.7946712e-05 9.4285714 + 21300 0.0030950366 0 3.1124481e-05 2.195109e-05 5.8965786e-05 9.4285714 + 21400 0.0031484691 0 3.2721012e-05 2.110025e-05 5.9576336e-05 9.4285714 + 21500 0.0031234671 0 2.992994e-05 2.2666267e-05 5.9993685e-05 9.4285714 + 21600 0.0030508633 0 2.6789013e-05 2.3621322e-05 5.8458366e-05 9.4285714 + 21700 0.0030087355 0 2.5882658e-05 2.1811479e-05 5.8138611e-05 9.4285714 + 21800 0.0029999465 0 2.6188787e-05 2.0450957e-05 5.8378928e-05 9.4285714 + 21900 0.0030672658 0 2.6711301e-05 2.1783108e-05 5.9031296e-05 9.4285714 + 22000 0.0030649769 0 2.8127147e-05 2.2662838e-05 6.0082454e-05 9.4285714 + 22100 0.0029894542 0 2.6349183e-05 2.2764179e-05 6.149193e-05 9.4285714 + 22200 0.0030187811 0 2.3239983e-05 2.3111279e-05 6.0739255e-05 9.4285714 + 22300 0.0030241784 0 2.2405585e-05 2.3925574e-05 5.9718322e-05 9.4285714 + 22400 0.0029292552 0 2.0008576e-05 2.2306569e-05 6.0758983e-05 9.4285714 + 22500 0.0028783427 0 2.024055e-05 2.100428e-05 6.1045983e-05 9.4285714 + 22600 0.0028851151 0 2.3890124e-05 2.2607101e-05 6.5131875e-05 9.4285714 + 22700 0.0030123555 0 2.5669383e-05 2.4801799e-05 6.6659354e-05 9.4285714 + 22800 0.0031724489 0 2.7713701e-05 2.8877697e-05 6.4901446e-05 9.4285714 + 22900 0.003153501 0 3.1116017e-05 2.9002714e-05 6.4499332e-05 9.4285714 + 23000 0.0028839684 0 2.9814785e-05 2.870865e-05 6.2699578e-05 9.4285714 + 23100 0.0028327892 0 3.2268818e-05 2.7474127e-05 5.7685785e-05 9.4285714 + 23200 0.0029041916 0 3.0584546e-05 2.7962674e-05 5.7629015e-05 9.4285714 + 23300 0.0030488484 0 2.9936007e-05 3.0487408e-05 5.8179622e-05 9.4285714 + 23400 0.0030766604 0 3.0318751e-05 2.8740437e-05 5.7968878e-05 9.4285714 + 23500 0.0029648576 0 3.0098901e-05 2.7619913e-05 5.5570289e-05 9.4285714 + 23600 0.0030338578 0 3.0505464e-05 2.9159292e-05 5.5966373e-05 9.4285714 + 23700 0.0030630993 0 3.1115059e-05 2.8677381e-05 5.6826609e-05 9.4285714 + 23800 0.0029579183 0 3.0891276e-05 2.7187042e-05 5.4338832e-05 9.4285714 + 23900 0.002890692 0 3.0505089e-05 2.6214095e-05 5.3628324e-05 9.4285714 + 24000 0.0029008741 0 3.0352885e-05 2.7812384e-05 5.3563473e-05 9.4285714 + 24100 0.0030900998 0 3.049205e-05 3.7040342e-05 5.9311381e-05 9.4285714 + 24200 0.0034439273 0 2.9780023e-05 5.2982515e-05 6.0180452e-05 9.4285714 + 24300 0.0036183212 0 2.8868106e-05 5.9977934e-05 5.822312e-05 9.4285714 + 24400 0.0035935713 0 2.9135872e-05 6.2935218e-05 5.5769985e-05 9.4285714 + 24500 0.0035490423 0 3.3958754e-05 5.9161204e-05 5.7259127e-05 9.4285714 + 24600 0.003444716 0 2.9356924e-05 5.4834323e-05 5.9566455e-05 9.4285714 + 24700 0.0033252937 0 2.6572095e-05 5.4242067e-05 5.8366405e-05 9.4285714 + 24800 0.0032783778 0 2.2908407e-05 5.5022142e-05 5.8845283e-05 9.4285714 + 24900 0.0032446925 0 2.1047045e-05 5.4598555e-05 5.956579e-05 9.4285714 + 25000 0.0031755041 0 2.4181783e-05 5.3791926e-05 5.8327435e-05 9.4285714 + 25100 0.0030735843 0 2.8255849e-05 4.7217183e-05 5.8423683e-05 9.4285714 + 25200 0.0031627624 0 2.8876633e-05 4.3691039e-05 5.80202e-05 9.4285714 + 25300 0.0032376181 0 2.8655617e-05 4.316634e-05 5.8195158e-05 9.4285714 + 25400 0.0031900675 0 2.8070562e-05 4.344552e-05 5.5523216e-05 9.4285714 + 25500 0.0031252059 0 2.8330412e-05 4.4060357e-05 5.5051088e-05 9.4285714 + 25600 0.0029070145 0 2.958535e-05 4.569808e-05 6.4450548e-05 9.4285714 + 25700 0.0029634805 0 2.6761301e-05 4.7173742e-05 6.4575511e-05 9.4285714 + 25800 0.0030346288 0 2.732068e-05 4.893027e-05 6.2814632e-05 9.4285714 + 25900 0.0032897547 0 3.1822769e-05 5.2633037e-05 6.2913714e-05 9.4285714 + 26000 0.0033828897 0 2.6969599e-05 5.8440273e-05 6.3376263e-05 9.4285714 + 26100 0.0032804302 0 2.4627546e-05 5.7656925e-05 5.8514668e-05 9.4285714 + 26200 0.0030952966 0 2.2893916e-05 4.9871883e-05 5.881309e-05 9.4285714 + 26300 0.0030700157 0 2.6056707e-05 4.9264407e-05 5.8746718e-05 9.4285714 + 26400 0.0030018624 0 2.5157698e-05 4.8218674e-05 5.8290879e-05 9.4285714 + 26500 0.0030128669 0 2.361838e-05 4.6363551e-05 5.9898905e-05 9.4285714 + 26600 0.0031224336 0 2.7100344e-05 4.7756425e-05 5.9996778e-05 9.4285714 + 26700 0.0030621287 0 2.8214336e-05 4.6918539e-05 5.9883609e-05 9.4285714 + 26800 0.002801831 0 3.0594491e-05 3.7180434e-05 5.8149664e-05 9.4285714 + 26900 0.0027855649 0 2.8747302e-05 3.6470744e-05 5.8852335e-05 9.4285714 + 27000 0.0027965728 0 2.8557457e-05 3.6754375e-05 5.8772667e-05 9.4285714 + 27100 0.0028498232 0 3.0321835e-05 3.9638763e-05 6.1254858e-05 9.4285714 + 27200 0.0030306382 0 2.8742235e-05 4.3117508e-05 6.5765494e-05 9.4285714 + 27300 0.0031633579 0 3.0980534e-05 4.7374467e-05 6.4893722e-05 9.4285714 + 27400 0.0033711639 0 3.4928022e-05 5.2908639e-05 6.6699682e-05 9.4285714 + 27500 0.003440939 0 3.5754652e-05 5.69513e-05 6.660788e-05 9.4285714 + 27600 0.0034442256 0 3.6469475e-05 5.6958678e-05 6.5079681e-05 9.4285714 + 27700 0.0033773106 0 3.3973994e-05 5.4448746e-05 6.4541632e-05 9.4285714 + 27800 0.0033635159 0 3.5542676e-05 5.2428708e-05 6.5090857e-05 9.4285714 + 27900 0.0032430951 0 3.6426512e-05 4.6086452e-05 6.498143e-05 9.4285714 + 28000 0.0030537834 0 3.1815903e-05 3.9376804e-05 6.7546499e-05 9.4285714 + 28100 0.002979529 0 3.1253385e-05 3.7765155e-05 6.7409232e-05 9.4285714 + 28200 0.0031027317 0 3.398733e-05 4.2983013e-05 6.6027648e-05 9.4285714 + 28300 0.0030588406 0 3.5171937e-05 4.5212697e-05 6.3874666e-05 9.4285714 + 28400 0.0028451017 0 3.5738239e-05 3.7990285e-05 6.2678053e-05 9.4285714 + 28500 0.0029344027 0 3.3626147e-05 3.6949614e-05 6.2988105e-05 9.4285714 + 28600 0.0030970809 0 4.1471523e-05 4.2155367e-05 6.4408716e-05 9.4285714 + 28700 0.0034080828 0 5.096795e-05 4.3092694e-05 6.8111212e-05 9.4285714 + 28800 0.0033162928 0 5.0733984e-05 3.9221995e-05 6.7505258e-05 9.4285714 + 28900 0.0032754512 0 4.7766512e-05 3.7515038e-05 6.9173389e-05 9.4285714 + 29000 0.003238126 0 4.6516518e-05 3.8184496e-05 6.8703403e-05 9.4285714 + 29100 0.0031144549 0 4.4307505e-05 3.8533642e-05 6.7255763e-05 9.4285714 + 29200 0.0030958705 0 4.2781032e-05 3.5772459e-05 7.0469126e-05 9.4285714 + 29300 0.0031524451 0 4.3909259e-05 3.6506623e-05 7.158653e-05 9.4285714 + 29400 0.0032058697 0 4.4324384e-05 3.5776134e-05 7.4582066e-05 9.4285714 + 29500 0.0031550171 0 4.2287463e-05 3.5270423e-05 7.5078133e-05 9.4285714 + 29600 0.003060377 0 3.9992287e-05 3.2845661e-05 7.553942e-05 9.4285714 + 29700 0.0030078967 0 3.7382266e-05 3.1614436e-05 7.7145573e-05 9.4285714 + 29800 0.0029683325 0 3.5530155e-05 3.525656e-05 7.5544641e-05 9.4285714 + 29900 0.0029022749 0 3.6252284e-05 3.7610723e-05 6.9334012e-05 9.4285714 + 30000 0.0028730584 0 3.8581123e-05 3.3761112e-05 6.8781406e-05 9.4285714 + 30100 0.0029565488 0 4.0973928e-05 3.8258895e-05 7.204326e-05 9.4285714 + 30200 0.0029645256 0 4.1115755e-05 4.0104291e-05 6.8400039e-05 9.4285714 + 30300 0.002952354 0 4.4277467e-05 3.7768312e-05 6.7846989e-05 9.4285714 + 30400 0.002992831 0 4.4769103e-05 3.9482781e-05 6.8819748e-05 9.4285714 + 30500 0.0029374585 0 4.5257434e-05 4.1314931e-05 6.5216381e-05 9.4285714 + 30600 0.0028040856 0 4.5300765e-05 4.118626e-05 6.3544072e-05 9.4285714 + 30700 0.002534459 0 3.5125995e-05 3.8587256e-05 6.4771731e-05 9.4285714 + 30800 0.0024425783 0 2.7458027e-05 3.7447578e-05 6.7037394e-05 9.4285714 + 30900 0.0024938861 0 2.7825336e-05 3.8630729e-05 6.7876153e-05 9.4285714 + 31000 0.0025901523 0 2.7307882e-05 3.9917495e-05 7.0091179e-05 9.4285714 + 31100 0.0025746255 0 3.2430253e-05 4.052937e-05 6.3304574e-05 9.4285714 + 31200 0.0025241574 0 3.420853e-05 4.1057421e-05 5.9890236e-05 9.4285714 + 31300 0.002589276 0 3.3109527e-05 4.1316688e-05 5.9182072e-05 9.4285714 + 31400 0.002565266 0 3.7369446e-05 4.1540919e-05 5.7942838e-05 9.4285714 + 31500 0.0025002065 0 3.5866441e-05 4.1070997e-05 6.0205764e-05 9.4285714 + 31600 0.0024202141 0 3.2721356e-05 3.9726515e-05 6.2301684e-05 9.4285714 + 31700 0.002336607 0 3.0028614e-05 3.6886489e-05 6.4164462e-05 9.4285714 + 31800 0.002335165 0 3.1593002e-05 3.7401867e-05 6.1469771e-05 9.4285714 + 31900 0.0021619413 0 3.0901092e-05 3.5758372e-05 6.3122395e-05 9.4285714 + 32000 0.0021741167 0 2.6582456e-05 3.3205694e-05 6.2542092e-05 9.4285714 + 32100 0.0021441627 0 2.7829764e-05 3.3001177e-05 6.1759387e-05 9.4285714 + 32200 0.0021947497 0 2.9346145e-05 3.2427683e-05 6.1198864e-05 9.4285714 + 32300 0.0021403564 0 2.7822954e-05 3.0843762e-05 6.060985e-05 9.4285714 + 32400 0.0019773515 0 2.4240466e-05 2.7698677e-05 5.7620479e-05 9.4285714 + 32500 0.0018855981 0 2.4818086e-05 2.5531335e-05 5.4452608e-05 9.4285714 + 32600 0.0020216542 0 2.6264531e-05 2.622894e-05 5.6679534e-05 9.4285714 + 32700 0.0020560665 0 2.3068377e-05 2.8136569e-05 5.7543597e-05 9.4285714 + 32800 0.0020318176 0 2.1915957e-05 2.9083491e-05 5.8843804e-05 9.4285714 + 32900 0.0019355455 0 2.3724921e-05 2.8001943e-05 5.5380899e-05 9.4285714 + 33000 0.0020093393 0 2.5316564e-05 2.9736632e-05 5.6160592e-05 9.4285714 + 33100 0.0020778013 0 2.6064364e-05 3.0090151e-05 6.0244734e-05 9.4285714 + 33200 0.0020282656 0 2.8261492e-05 2.9440044e-05 5.6764857e-05 9.4285714 + 33300 0.0020166955 0 3.0172493e-05 2.8696859e-05 5.5822779e-05 9.4285714 + 33400 0.0020346487 0 3.1990398e-05 2.902236e-05 5.7566074e-05 9.4285714 + 33500 0.0020101699 0 3.1681735e-05 2.8209837e-05 5.7540015e-05 9.4285714 + 33600 0.0019321461 0 3.1520402e-05 2.6134117e-05 5.6835806e-05 9.4285714 + 33700 0.001878563 0 3.1793079e-05 2.6942797e-05 5.5209608e-05 9.4285714 + 33800 0.0019623658 0 3.3583987e-05 2.7118872e-05 5.6606564e-05 9.4285714 + 33900 0.0019006238 0 3.1751212e-05 2.8327454e-05 5.7280696e-05 9.4285714 + 34000 0.0017837211 0 3.0515346e-05 2.668634e-05 5.2294424e-05 9.4285714 + 34100 0.0017778746 0 2.7603449e-05 2.5416615e-05 5.2918074e-05 9.4285714 + 34200 0.0017695316 0 2.9475899e-05 2.5303335e-05 5.4472754e-05 9.4285714 + 34300 0.0016831966 0 2.902148e-05 2.211432e-05 5.3838362e-05 9.4285714 + 34400 0.0015748654 0 2.6159089e-05 1.7899119e-05 5.2018972e-05 9.4285714 + 34500 0.0016145322 0 2.4363507e-05 1.7807922e-05 5.3394185e-05 9.4285714 + 34600 0.0016832855 0 2.7085155e-05 1.9733202e-05 5.8299284e-05 9.4285714 + 34700 0.0017013619 0 2.8008832e-05 1.6841423e-05 5.6181895e-05 9.4285714 + 34800 0.0016796176 0 2.6241933e-05 1.7089284e-05 5.5590045e-05 9.4285714 + 34900 0.0017029668 0 2.6856188e-05 1.8318905e-05 5.8069304e-05 9.4285714 + 35000 0.0017456776 0 2.6317936e-05 1.8223427e-05 6.0245056e-05 9.4285714 + 35100 0.0016610753 0 2.2702891e-05 1.6610636e-05 5.7081353e-05 9.4285714 + 35200 0.0014978972 0 1.8955009e-05 1.5397302e-05 5.259939e-05 9.4285714 + 35300 0.0015699203 0 1.9692025e-05 1.9033953e-05 5.5012397e-05 9.4285714 + 35400 0.0016206776 0 2.230034e-05 1.9594198e-05 5.7653613e-05 9.4285714 + 35500 0.0015848867 0 2.2353279e-05 1.8705004e-05 5.6012831e-05 9.4285714 + 35600 0.0015352613 0 2.116555e-05 1.920694e-05 5.494557e-05 9.4285714 + 35700 0.0015450228 0 2.0595484e-05 2.0214809e-05 5.4431069e-05 9.4285714 + 35800 0.0015486128 0 2.0832884e-05 1.9567068e-05 5.4620701e-05 9.4285714 + 35900 0.0014953229 0 2.0526092e-05 1.7445484e-05 5.5868303e-05 9.4285714 + 36000 0.0015006807 0 2.0952361e-05 1.7155777e-05 5.7625805e-05 9.4285714 + 36100 0.0015620182 0 2.1368837e-05 2.2426032e-05 6.1437747e-05 9.4285714 + 36200 0.0016483521 0 1.946668e-05 2.8773048e-05 5.7756049e-05 9.4285714 + 36300 0.0017026791 0 1.870469e-05 2.8986272e-05 5.7939347e-05 9.4285714 + 36400 0.0018960648 0 1.8127793e-05 4.0625998e-05 5.7983644e-05 9.4285714 + 36500 0.0019397075 0 1.7254077e-05 4.5355628e-05 5.7146049e-05 9.4285714 + 36600 0.0019573518 0 1.8892393e-05 4.2551729e-05 5.9434037e-05 9.4285714 + 36700 0.0019272233 0 1.8211007e-05 4.145998e-05 5.888082e-05 9.4285714 + 36800 0.0019357487 0 1.7162941e-05 4.4342924e-05 5.6465777e-05 9.4285714 + 36900 0.0019905654 0 1.7569025e-05 4.4947515e-05 5.7507205e-05 9.4285714 + 37000 0.0019785585 0 1.8117504e-05 4.2068953e-05 5.8858967e-05 9.4285714 + 37100 0.0019220173 0 1.7633836e-05 4.2255246e-05 5.8153368e-05 9.4285714 + 37200 0.0017723352 0 2.0268851e-05 3.5130312e-05 6.2202448e-05 9.4285714 + 37300 0.0016856231 0 2.2393891e-05 3.2693951e-05 6.3412968e-05 9.4285714 + 37400 0.0016684941 0 2.3054142e-05 2.7111404e-05 6.6647518e-05 9.4285714 + 37500 0.0017165609 0 1.7612583e-05 2.7542011e-05 6.4252707e-05 9.4285714 + 37600 0.0017658691 0 1.6025966e-05 2.831781e-05 6.7539111e-05 9.4285714 + 37700 0.0018445619 0 1.6969334e-05 2.8824922e-05 6.9311515e-05 9.4285714 + 37800 0.0018502362 0 1.8553064e-05 2.9278745e-05 6.9624227e-05 9.4285714 + 37900 0.0017907475 0 2.0611098e-05 3.2013273e-05 6.6271935e-05 9.4285714 + 38000 0.0017844649 0 2.0702099e-05 3.4102854e-05 6.6219151e-05 9.4285714 + 38100 0.0017592556 0 2.0158725e-05 3.3458293e-05 6.6671944e-05 9.4285714 + 38200 0.0017106057 0 1.9011419e-05 3.2045869e-05 6.4867673e-05 9.4285714 + 38300 0.0017193203 0 1.8669932e-05 3.0674752e-05 6.5939302e-05 9.4285714 + 38400 0.001763257 0 1.9511511e-05 3.2026977e-05 6.8129954e-05 9.4285714 + 38500 0.0017621294 0 1.963196e-05 3.1826261e-05 6.7915242e-05 9.4285714 + 38600 0.001746854 0 1.8396231e-05 3.0340053e-05 6.7062356e-05 9.4285714 + 38700 0.0017463258 0 1.7977359e-05 3.1310072e-05 6.7033134e-05 9.4285714 + 38800 0.0017106758 0 1.5591586e-05 2.8830625e-05 6.7170521e-05 9.4285714 + 38900 0.0016358432 0 1.5790284e-05 2.4845758e-05 6.6098943e-05 9.4285714 + 39000 0.001545563 0 1.6696675e-05 2.0221676e-05 6.5306282e-05 9.4285714 + 39100 0.001539701 0 1.7191361e-05 1.9743765e-05 6.9525471e-05 9.4285714 + 39200 0.0015947183 0 1.8155375e-05 2.1442281e-05 7.0537856e-05 9.4285714 + 39300 0.0016492814 0 2.0363079e-05 2.0913068e-05 7.1366505e-05 9.4285714 + 39400 0.0016551151 0 2.2662003e-05 2.2074658e-05 6.8988376e-05 9.4285714 + 39500 0.0017683725 0 2.6720911e-05 2.700378e-05 6.8052345e-05 9.4285714 + 39600 0.0018907917 0 3.261088e-05 2.6587314e-05 7.0110807e-05 9.4285714 + 39700 0.0019255704 0 3.7559741e-05 2.8514061e-05 6.8088798e-05 9.4285714 + 39800 0.00188804 0 3.453634e-05 2.9656226e-05 6.9033371e-05 9.4285714 + 39900 0.0019053391 0 3.1876945e-05 2.8716899e-05 6.9832708e-05 9.4285714 + 40000 0.0018708103 0 3.292001e-05 2.8877575e-05 7.1168302e-05 9.4285714 + 40100 0.0018451966 0 3.6297763e-05 2.7101619e-05 7.0691543e-05 9.4285714 + 40200 0.0018045971 0 3.9260538e-05 2.3304537e-05 6.7999118e-05 9.4285714 + 40300 0.0018092091 0 3.8584234e-05 2.1810701e-05 6.5023109e-05 9.4285714 + 40400 0.001761241 0 3.5889663e-05 2.0682927e-05 6.4149984e-05 9.4285714 + 40500 0.0017160542 0 3.4443097e-05 1.8646469e-05 6.2782599e-05 9.4285714 + 40600 0.0017299577 0 3.4236907e-05 1.9402164e-05 6.607431e-05 9.4285714 + 40700 0.0017673853 0 3.3665028e-05 2.0466517e-05 6.8746602e-05 9.4285714 + 40800 0.0017380057 0 3.4144649e-05 2.1522794e-05 6.683155e-05 9.4285714 + 40900 0.0016234094 0 3.2205243e-05 2.2727612e-05 6.6834429e-05 9.4285714 + 41000 0.0014291917 0 2.6396353e-05 2.6107729e-05 6.4056486e-05 9.4285714 + 41100 0.0014712446 0 2.5570053e-05 3.3399552e-05 6.3195627e-05 9.4285714 + 41200 0.0014846 0 2.6271678e-05 3.7303151e-05 6.0488751e-05 9.4285714 + 41300 0.001450828 0 2.5065396e-05 3.8605231e-05 5.8603276e-05 9.4285714 + 41400 0.0014186092 0 2.3453926e-05 3.4894681e-05 5.8941274e-05 9.4285714 + 41500 0.0014050141 0 2.3681829e-05 3.2835402e-05 5.9498759e-05 9.4285714 + 41600 0.0014213984 0 2.3939336e-05 3.2895676e-05 5.8690287e-05 9.4285714 + 41700 0.001443982 0 2.0909644e-05 3.1032787e-05 5.7524565e-05 9.4285714 + 41800 0.0014062649 0 2.1031052e-05 2.9520592e-05 5.4827218e-05 9.4285714 + 41900 0.0013996312 0 2.2054442e-05 2.8642711e-05 5.5162316e-05 9.4285714 + 42000 0.0013967112 0 2.2021674e-05 2.865302e-05 5.3439274e-05 9.4285714 + 42100 0.0014200679 0 2.3093083e-05 3.3059301e-05 5.6709165e-05 9.4285714 + 42200 0.0014938722 0 2.4401158e-05 3.8130343e-05 5.6829122e-05 9.4285714 + 42300 0.0014662918 0 2.5306573e-05 4.0350104e-05 5.5731632e-05 9.4285714 + 42400 0.0014822399 0 2.541272e-05 3.6567141e-05 5.6918972e-05 9.4285714 + 42500 0.001479816 0 2.536052e-05 3.4187028e-05 5.6499453e-05 9.4285714 + 42600 0.0014761906 0 2.6832838e-05 3.2924587e-05 5.4349636e-05 9.4285714 + 42700 0.0014657972 0 2.5603852e-05 3.1449126e-05 5.4077995e-05 9.4285714 + 42800 0.0014299281 0 2.514425e-05 3.0935569e-05 5.560261e-05 9.4285714 + 42900 0.0013584545 0 2.1632085e-05 2.8445644e-05 5.6520894e-05 9.4285714 + 43000 0.0013381995 0 1.9596599e-05 2.9249369e-05 5.4291206e-05 9.4285714 + 43100 0.0013342491 0 2.0197061e-05 3.1609968e-05 5.2307195e-05 9.4285714 + 43200 0.0013703327 0 2.147162e-05 3.2020951e-05 5.3461255e-05 9.4285714 + 43300 0.0013593846 0 2.199084e-05 3.206016e-05 5.3447421e-05 9.4285714 + 43400 0.0012993032 0 2.0440912e-05 3.161841e-05 5.3026991e-05 9.4285714 + 43500 0.001324888 0 1.8933513e-05 3.244492e-05 5.3025756e-05 9.4285714 + 43600 0.0013849294 0 2.0125223e-05 3.6308493e-05 5.5223498e-05 9.4285714 + 43700 0.0014592413 0 2.4789141e-05 3.9210247e-05 5.5005034e-05 9.4285714 + 43800 0.0015842633 0 2.9376746e-05 4.471493e-05 5.4832286e-05 9.4285714 + 43900 0.0016983192 0 3.368927e-05 4.9501047e-05 5.7946888e-05 9.4285714 + 44000 0.0017308494 0 3.5302108e-05 5.1925127e-05 5.5489717e-05 9.4285714 + 44100 0.0016762137 0 3.296847e-05 4.9656293e-05 5.7453997e-05 9.4285714 + 44200 0.0016693093 0 3.1338668e-05 4.8594593e-05 5.4593408e-05 9.4285714 + 44300 0.0016858084 0 3.3131465e-05 4.8034805e-05 5.4765941e-05 9.4285714 + 44400 0.0016397333 0 3.2446822e-05 4.4299316e-05 5.542227e-05 9.4285714 + 44500 0.0015275026 0 3.03152e-05 4.0102051e-05 5.2535492e-05 9.4285714 + 44600 0.0015268479 0 3.0118206e-05 4.1006288e-05 5.3147052e-05 9.4285714 + 44700 0.001255645 0 3.5055531e-05 4.0462972e-05 6.1228919e-05 9.4285714 + 44800 0.0011731958 0 3.9072933e-05 3.2238215e-05 5.8707559e-05 9.4285714 + 44900 0.0011964835 0 2.8812272e-05 2.9210324e-05 4.940709e-05 9.4285714 + 45000 0.0012410494 0 2.9841189e-05 2.6890231e-05 4.6988833e-05 9.4285714 + 45100 0.001230235 0 3.0345804e-05 2.5454862e-05 4.75955e-05 9.4285714 + 45200 0.0012461498 0 3.2644348e-05 2.3020389e-05 4.7365747e-05 9.4285714 + 45300 0.0012550498 0 3.4658477e-05 2.208126e-05 4.5686217e-05 9.4285714 + 45400 0.0013223338 0 3.6429502e-05 2.2794832e-05 4.6369578e-05 9.4285714 + 45500 0.0013779082 0 4.1107745e-05 2.3543502e-05 4.7414768e-05 9.4285714 + 45600 0.0014152925 0 4.5350047e-05 2.2288056e-05 4.8197525e-05 9.4285714 + 45700 0.0014676538 0 4.5312484e-05 2.4249691e-05 4.9069857e-05 9.4285714 + 45800 0.0015554218 0 4.8184013e-05 2.7652542e-05 4.7659466e-05 9.4285714 + 45900 0.0015490339 0 4.6625302e-05 2.9710608e-05 4.9089177e-05 9.4285714 + 46000 0.0014963696 0 4.1709464e-05 2.8723559e-05 4.9022906e-05 9.4285714 + 46100 0.0014856308 0 4.0292712e-05 2.8995571e-05 4.8447369e-05 9.4285714 + 46200 0.0015137426 0 4.1440548e-05 2.7543828e-05 4.8367534e-05 9.4285714 + 46300 0.0015640239 0 4.1855115e-05 2.9100399e-05 4.8811006e-05 9.4285714 + 46400 0.0015266381 0 4.3753851e-05 2.7690826e-05 4.836007e-05 9.4285714 + 46500 0.0014733423 0 4.2570299e-05 2.6610055e-05 4.6847764e-05 9.4285714 + 46600 0.001484823 0 4.3461054e-05 2.9861374e-05 5.0475526e-05 9.4285714 + 46700 0.0015301483 0 4.7448046e-05 3.0504388e-05 4.9941741e-05 9.4285714 + 46800 0.0015809004 0 4.903534e-05 3.0910484e-05 4.7161439e-05 9.4285714 + 46900 0.001612801 0 4.9475941e-05 3.2239707e-05 4.6593478e-05 9.4285714 + 47000 0.0016910764 0 5.3657792e-05 3.5296942e-05 4.859235e-05 9.4285714 + 47100 0.001783956 0 5.7880864e-05 3.8691625e-05 4.7477888e-05 9.4285714 + 47200 0.0018292587 0 5.9895895e-05 4.2395861e-05 4.7655011e-05 9.4285714 + 47300 0.0017502535 0 5.7074618e-05 4.2492691e-05 5.0352871e-05 9.4285714 + 47400 0.0016822499 0 5.4990315e-05 4.0648979e-05 5.188077e-05 9.4285714 + 47500 0.0016563309 0 5.4480549e-05 3.8802123e-05 5.0093612e-05 9.4285714 + 47600 0.0014163511 0 4.3273573e-05 3.205465e-05 4.8262084e-05 9.4285714 + 47700 0.0013412435 0 3.692145e-05 2.9711453e-05 4.6577587e-05 9.4285714 + 47800 0.0014240978 0 3.7737489e-05 3.1751028e-05 4.5254908e-05 9.4285714 + 47900 0.0015020912 0 4.0110158e-05 3.2857486e-05 4.6825438e-05 9.4285714 + 48000 0.0015096558 0 4.2321656e-05 3.1777798e-05 4.6575557e-05 9.4285714 + 48100 0.001517691 0 4.3394796e-05 3.3282862e-05 4.8944379e-05 9.4285714 + 48200 0.0016276418 0 4.4435256e-05 4.0781135e-05 4.9311797e-05 9.4285714 + 48300 0.0017719927 0 4.6700663e-05 4.93677e-05 5.0554784e-05 9.4285714 + 48400 0.0015818941 0 4.2328614e-05 5.2610299e-05 6.113866e-05 9.4285714 + 48500 0.0014198799 0 3.7949889e-05 4.9923747e-05 6.371027e-05 9.4285714 + 48600 0.0014996944 0 3.3673325e-05 4.1987368e-05 5.7078885e-05 9.4285714 + 48700 0.0015097938 0 3.2534132e-05 3.7653951e-05 6.020767e-05 9.4285714 + 48800 0.0014936285 0 3.198257e-05 3.848781e-05 6.1418287e-05 9.4285714 + 48900 0.0015380261 0 2.9867154e-05 3.5482735e-05 6.2521369e-05 9.4285714 + 49000 0.0014965744 0 2.7178656e-05 3.4322744e-05 6.496405e-05 9.4285714 + 49100 0.0014342589 0 2.4682709e-05 3.1869922e-05 6.3744713e-05 9.4285714 + 49200 0.0013600057 0 2.3357174e-05 2.9724086e-05 6.1562467e-05 9.4285714 + 49300 0.0013536509 0 2.1731913e-05 3.1327722e-05 6.570902e-05 9.4285714 + 49400 0.0012990299 0 2.1586451e-05 2.5884921e-05 6.5281404e-05 9.4285714 + 49500 0.0013224383 0 2.3412676e-05 2.3563992e-05 6.3016735e-05 9.4285714 + 49600 0.0013986754 0 2.2834387e-05 2.6158922e-05 6.8429867e-05 9.4285714 + 49700 0.0014411218 0 2.186838e-05 3.0932651e-05 6.8986342e-05 9.4285714 + 49800 0.001378127 0 2.1416786e-05 3.3195639e-05 6.6099274e-05 9.4285714 + 49900 0.0013555715 0 2.3305296e-05 3.2798355e-05 6.4730999e-05 9.4285714 + 50000 0.0013769437 0 2.565575e-05 3.3011245e-05 6.472161e-05 9.4285714 + 50100 0.0013222666 0 2.3086591e-05 3.1553148e-05 6.1316107e-05 9.4285714 + 50200 0.0012877083 0 2.3434234e-05 3.0254615e-05 5.9000057e-05 9.4285714 + 50300 0.0013054167 0 2.287062e-05 2.9813533e-05 6.0744382e-05 9.4285714 + 50400 0.0013208173 0 2.1924114e-05 3.031788e-05 6.2977251e-05 9.4285714 + 50500 0.001296726 0 2.3541273e-05 3.1627632e-05 6.0919408e-05 9.4285714 + 50600 0.0012545759 0 2.2395763e-05 3.2544394e-05 6.172088e-05 9.4285714 + 50700 0.0012027369 0 1.8537595e-05 2.8818734e-05 6.6323174e-05 9.4285714 + 50800 0.0011995165 0 1.925033e-05 2.6873227e-05 6.8899314e-05 9.4285714 + 50900 0.0011723402 0 2.3335248e-05 2.7683854e-05 6.4338432e-05 9.4285714 + 51000 0.0011421813 0 2.4327839e-05 2.6809184e-05 6.0790242e-05 9.4285714 + 51100 0.00116394 0 2.3328144e-05 2.580678e-05 6.2823267e-05 9.4285714 + 51200 0.0012257785 0 3.0552385e-05 2.6138103e-05 5.9377848e-05 9.4285714 + 51300 0.0012358417 0 3.2563685e-05 2.6813317e-05 5.9818633e-05 9.4285714 + 51400 0.0012080215 0 3.5968335e-05 2.5797266e-05 5.8848467e-05 9.4285714 + 51500 0.001267355 0 3.8341583e-05 2.5329521e-05 5.8979767e-05 9.4285714 + 51600 0.0013633492 0 4.1994974e-05 2.8909656e-05 5.9334549e-05 9.4285714 + 51700 0.001306204 0 4.0230386e-05 2.8976584e-05 5.8748448e-05 9.4285714 + 51800 0.0012710708 0 3.7288173e-05 2.7872643e-05 5.8321328e-05 9.4285714 + 51900 0.0012579937 0 3.8663154e-05 2.517734e-05 5.8681842e-05 9.4285714 + 52000 0.0012477598 0 3.8555642e-05 2.4160452e-05 5.9091504e-05 9.4285714 + 52100 0.0012386931 0 3.6298967e-05 2.4734233e-05 5.972957e-05 9.4285714 + 52200 0.0012083661 0 3.4742423e-05 2.3257594e-05 5.9884006e-05 9.4285714 + 52300 0.001227322 0 3.7133752e-05 2.145337e-05 6.0294784e-05 9.4285714 + 52400 0.0012093432 0 3.962701e-05 2.2339465e-05 5.7904347e-05 9.4285714 + 52500 0.0011144162 0 3.5523752e-05 2.2742137e-05 5.7685984e-05 9.4285714 + 52600 0.0011522755 0 3.5416559e-05 2.3594077e-05 6.140573e-05 9.4285714 + 52700 0.0011985381 0 3.7325884e-05 2.5719141e-05 5.9667343e-05 9.4285714 + 52800 0.0012303406 0 3.6858552e-05 3.0224594e-05 5.8930509e-05 9.4285714 + 52900 0.001307949 0 3.7575587e-05 3.12536e-05 5.9515632e-05 9.4285714 + 53000 0.0014328605 0 4.2188955e-05 3.4749382e-05 6.1455539e-05 9.4285714 + 53100 0.0014397095 0 4.2662213e-05 3.7740262e-05 5.687393e-05 9.4285714 + 53200 0.0014025814 0 4.1931353e-05 3.82967e-05 5.3344169e-05 9.4285714 + 53300 0.0014162407 0 4.2121952e-05 3.8423987e-05 5.489916e-05 9.4285714 + 53400 0.0014545711 0 4.2040265e-05 3.9867546e-05 5.6541951e-05 9.4285714 + 53500 0.0014254383 0 4.107753e-05 4.0850378e-05 5.5013854e-05 9.4285714 + 53600 0.0014059642 0 3.8736588e-05 4.0568223e-05 5.3370333e-05 9.4285714 + 53700 0.0014299655 0 3.8088205e-05 4.0085412e-05 5.3935925e-05 9.4285714 + 53800 0.0014395811 0 3.7835533e-05 4.1054329e-05 5.5704229e-05 9.4285714 + 53900 0.0013782275 0 3.7257677e-05 3.6907022e-05 5.5435595e-05 9.4285714 + 54000 0.0013541391 0 3.6689307e-05 3.5693714e-05 5.3583882e-05 9.4285714 + 54100 0.0013630306 0 3.6254688e-05 3.4826774e-05 5.8667982e-05 9.4285714 + 54200 0.0013207223 0 3.1936729e-05 3.3776648e-05 6.1948363e-05 9.4285714 + 54300 0.0012384331 0 2.7065242e-05 3.4136775e-05 6.0545524e-05 9.4285714 + 54400 0.0012368148 0 3.0512497e-05 3.3844993e-05 5.9219431e-05 9.4285714 + 54500 0.0012437394 0 3.1508782e-05 3.1594467e-05 6.1037857e-05 9.4285714 + 54600 0.0012348463 0 3.0502753e-05 2.9944876e-05 6.3038747e-05 9.4285714 + 54700 0.0012264411 0 2.942495e-05 2.9196344e-05 6.2096436e-05 9.4285714 + 54800 0.0012227357 0 2.9387126e-05 2.8643051e-05 6.2569325e-05 9.4285714 + 54900 0.0012088297 0 3.0446939e-05 2.8501145e-05 6.3961542e-05 9.4285714 + 55000 0.0011208127 0 2.8805799e-05 2.6569641e-05 6.2808312e-05 9.4285714 + 55100 0.0010272696 0 2.5493709e-05 1.9941879e-05 6.302396e-05 9.4285714 + 55200 0.0010244607 0 2.3304908e-05 1.4411642e-05 6.7042204e-05 9.4285714 + 55300 0.0010228592 0 2.7172763e-05 1.7899276e-05 6.1125221e-05 9.4285714 + 55400 0.0010783723 0 2.844893e-05 1.9717676e-05 6.0647508e-05 9.4285714 + 55500 0.0010414558 0 2.996559e-05 2.0486223e-05 5.9281396e-05 9.4285714 + 55600 0.001038362 0 3.3593735e-05 2.7878323e-05 5.957773e-05 9.4285714 + 55700 0.0011103409 0 3.7619767e-05 4.0277802e-05 6.3882463e-05 9.4285714 + 55800 0.0011815031 0 3.7703101e-05 4.6521441e-05 6.3037214e-05 9.4285714 + 55900 0.0011668697 0 3.4874824e-05 4.9582252e-05 6.2010386e-05 9.4285714 + 56000 0.0011054612 0 3.2211415e-05 5.267133e-05 5.762587e-05 9.4285714 + 56100 0.0011022355 0 3.2565384e-05 4.8193468e-05 5.818067e-05 9.4285714 + 56200 0.0010652879 0 2.9677141e-05 4.8574299e-05 5.6899785e-05 9.4285714 + 56300 0.0010214534 0 2.7682044e-05 4.9793384e-05 5.7209237e-05 9.4285714 + 56400 0.0010033606 0 2.7477527e-05 4.8534279e-05 5.6585165e-05 9.4285714 + 56500 0.001032246 0 2.8659282e-05 4.7138798e-05 5.5755049e-05 9.4285714 + 56600 0.0010205736 0 2.808297e-05 4.5593016e-05 5.2153347e-05 9.4285714 + 56700 0.0010229415 0 2.8245565e-05 4.6183101e-05 4.9386245e-05 9.4285714 + 56800 0.0010237598 0 2.9271494e-05 4.7176274e-05 5.0507737e-05 9.4285714 + 56900 0.00098868678 0 2.844571e-05 4.7381428e-05 5.1991097e-05 9.4285714 + 57000 0.00095545464 0 2.8308573e-05 4.6113651e-05 5.180154e-05 9.4285714 + 57100 0.00097838526 0 2.8526708e-05 4.418829e-05 5.1047076e-05 9.4285714 + 57200 0.00099033102 0 2.8810469e-05 4.3574359e-05 4.8770969e-05 9.4285714 + 57300 0.00098789739 0 2.7742088e-05 4.2638312e-05 4.8318032e-05 9.4285714 + 57400 0.00098289065 0 2.719876e-05 4.1438218e-05 4.7934906e-05 9.4285714 + 57500 0.00097060527 0 2.8056188e-05 4.0915771e-05 4.6937706e-05 9.4285714 + 57600 0.00096367212 0 2.8906331e-05 4.096143e-05 4.8641012e-05 9.4285714 + 57700 0.00093727857 0 2.8094393e-05 4.1568196e-05 4.7968529e-05 9.4285714 + 57800 0.00083523397 0 2.6262179e-05 3.6876724e-05 4.562199e-05 9.4285714 + 57900 0.00075333301 0 2.7980925e-05 2.9741366e-05 4.3620183e-05 9.4285714 + 58000 0.00069661398 0 2.5284004e-05 2.7029978e-05 3.9673471e-05 9.4285714 + 58100 0.00070399751 0 2.7847203e-05 2.4609632e-05 3.813514e-05 9.4285714 + 58200 0.00073988434 0 2.9918276e-05 2.3169818e-05 3.8568534e-05 9.4285714 + 58300 0.00075216465 0 2.679437e-05 2.6309725e-05 3.84788e-05 9.4285714 + 58400 0.00074553444 0 2.7146251e-05 2.3176744e-05 3.6877784e-05 9.4285714 + 58500 0.00076387247 0 2.5153737e-05 2.1947001e-05 3.6633348e-05 9.4285714 + 58600 0.00079726485 0 2.3192719e-05 2.1988678e-05 4.1251223e-05 9.4285714 + 58700 0.00076951713 0 2.2443054e-05 2.1505061e-05 4.0895931e-05 9.4285714 + 58800 0.00075008028 0 2.0762225e-05 2.2353942e-05 4.0082382e-05 9.4285714 + 58900 0.00074663178 0 2.0351571e-05 2.0331494e-05 4.1154747e-05 9.4285714 + 59000 0.00074834621 0 2.0070564e-05 1.9810228e-05 4.1795424e-05 9.4285714 + 59100 0.00073943718 0 1.9493268e-05 1.8718774e-05 4.0315851e-05 9.4285714 + 59200 0.00074686888 0 1.8211375e-05 1.8999565e-05 3.9680679e-05 9.4285714 + 59300 0.00076308043 0 1.7979192e-05 1.9294244e-05 4.039113e-05 9.4285714 + 59400 0.00076517044 0 1.8706884e-05 1.9120811e-05 4.1399914e-05 9.4285714 + 59500 0.00074796279 0 1.8496664e-05 2.0054079e-05 4.0905155e-05 9.4285714 + 59600 0.0007252451 0 1.9960945e-05 1.8449803e-05 4.0081187e-05 9.4285714 + 59700 0.00074058815 0 2.0387508e-05 1.8439851e-05 4.1337599e-05 9.4285714 + 59800 0.00074353247 0 1.9421778e-05 1.8177335e-05 4.2738891e-05 9.4285714 + 59900 0.00073356239 0 2.1266167e-05 1.5887487e-05 4.2474556e-05 9.4285714 + 60000 0.00071783344 0 2.1291806e-05 1.7115677e-05 4.3533939e-05 9.4285714 + 60100 0.00073488376 0 2.0748859e-05 1.753697e-05 4.3723599e-05 9.4285714 + 60200 0.00071485533 0 2.0125892e-05 1.6149878e-05 4.2293066e-05 9.4285714 + 60300 0.00069234507 0 1.9683215e-05 1.577723e-05 4.1322826e-05 9.4285714 + 60400 0.00070560126 0 2.1810986e-05 1.5311787e-05 4.1879172e-05 9.4285714 + 60500 0.00071315447 0 2.294249e-05 1.6205149e-05 4.2411647e-05 9.4285714 + 60600 0.00071008272 0 2.2503574e-05 1.6017804e-05 4.148626e-05 9.4285714 + 60700 0.00070869103 0 2.2832573e-05 1.5198277e-05 4.1819919e-05 9.4285714 + 60800 0.00071113582 0 2.3255881e-05 1.4827388e-05 4.1973457e-05 9.4285714 + 60900 0.0007088311 0 2.2679653e-05 1.5850816e-05 4.2095838e-05 9.4285714 + 61000 0.00068112179 0 2.1391341e-05 1.5598301e-05 4.1723934e-05 9.4285714 + 61100 0.0006605057 0 1.8812595e-05 1.455179e-05 4.1598553e-05 9.4285714 + 61200 0.0006219746 0 1.3019206e-05 1.4245686e-05 4.1475411e-05 9.4285714 + 61300 0.00061523504 0 1.2972541e-05 1.3080102e-05 4.1512719e-05 9.4285714 + 61400 0.00063282932 0 1.4610134e-05 1.3437893e-05 4.2011175e-05 9.4285714 + 61500 0.00064395604 0 1.6263372e-05 1.3174954e-05 4.3223813e-05 9.4285714 + 61600 0.00065503698 0 1.7095581e-05 1.3957555e-05 4.3883221e-05 9.4285714 + 61700 0.00064793677 0 1.6531668e-05 1.427803e-05 4.4379128e-05 9.4285714 + 61800 0.00063459475 0 1.641822e-05 1.3361915e-05 4.494487e-05 9.4285714 + 61900 0.00062576053 0 1.4991683e-05 1.3178685e-05 4.4244372e-05 9.4285714 + 62000 0.00061441635 0 1.6659779e-05 1.2064885e-05 4.311918e-05 9.4285714 + 62100 0.00058986476 0 1.5363732e-05 1.2327094e-05 4.2344369e-05 9.4285714 + 62200 0.00058813111 0 1.5308244e-05 1.172516e-05 4.0921757e-05 9.4285714 + 62300 0.00061764479 0 1.5701983e-05 1.2777051e-05 4.2222243e-05 9.4285714 + 62400 0.00061182249 0 1.6314424e-05 1.2829719e-05 4.2353173e-05 9.4285714 + 62500 0.00060407638 0 1.5943106e-05 1.2452173e-05 4.0143389e-05 9.4285714 + 62600 0.0006067243 0 1.4964323e-05 1.1428614e-05 4.1418596e-05 9.4285714 + 62700 0.00063181036 0 1.6065306e-05 1.1617944e-05 4.3633299e-05 9.4285714 + 62800 0.00062331625 0 1.7390992e-05 1.160992e-05 4.348545e-05 9.4285714 + 62900 0.00060499586 0 1.7082837e-05 1.1716717e-05 4.3837452e-05 9.4285714 + 63000 0.00059610047 0 1.6563526e-05 1.3685845e-05 4.3859519e-05 9.4285714 + 63100 0.00057777964 0 1.7729378e-05 1.6249465e-05 4.2605855e-05 9.4285714 + 63200 0.00056278033 0 1.9130869e-05 1.4897372e-05 4.3524186e-05 9.4285714 + 63300 0.0005643587 0 1.7411846e-05 1.3103703e-05 4.509639e-05 9.4285714 + 63400 0.00056751625 0 1.7524844e-05 1.3013462e-05 4.5346164e-05 9.4285714 + 63500 0.0005758364 0 1.9007258e-05 1.3278571e-05 4.6271212e-05 9.4285714 + 63600 0.00055297865 0 2.0024907e-05 1.3448906e-05 4.6053495e-05 9.4285714 + 63700 0.00053242834 0 1.9133343e-05 1.3623042e-05 4.4784738e-05 9.4285714 + 63800 0.00053783411 0 1.8058147e-05 1.407792e-05 4.4265384e-05 9.4285714 + 63900 0.00056086464 0 1.8208139e-05 1.4095892e-05 4.4568511e-05 9.4285714 + 64000 0.00055706462 0 1.6651354e-05 1.3124585e-05 4.5325194e-05 9.4285714 + 64100 0.000536149 0 1.5159378e-05 1.2477274e-05 4.5074084e-05 9.4285714 + 64200 0.00053432359 0 1.6241637e-05 1.2509908e-05 4.4118324e-05 9.4285714 + 64300 0.00054329864 0 1.5764694e-05 1.2690611e-05 4.3290153e-05 9.4285714 + 64400 0.00053483462 0 1.5293341e-05 1.2995758e-05 4.2835811e-05 9.4285714 + 64500 0.00051870438 0 1.5973057e-05 1.4635538e-05 4.2763024e-05 9.4285714 + 64600 0.00050924208 0 1.7757189e-05 1.5857543e-05 4.3206134e-05 9.4285714 + 64700 0.00051229708 0 1.9786341e-05 1.5441473e-05 4.1425482e-05 9.4285714 + 64800 0.00049972497 0 1.8784827e-05 1.5454616e-05 4.1657079e-05 9.4285714 + 64900 0.00050437675 0 1.686975e-05 1.4399895e-05 4.1718529e-05 9.4285714 + 65000 0.00050921662 0 1.611267e-05 1.4047703e-05 4.1291373e-05 9.4285714 + 65100 0.00050128712 0 1.5751344e-05 1.4113072e-05 4.1872267e-05 9.4285714 + 65200 0.00049418811 0 1.5173817e-05 1.4195559e-05 4.2056531e-05 9.4285714 + 65300 0.00048475459 0 1.5417595e-05 1.57661e-05 4.2409836e-05 9.4285714 + 65400 0.00048358093 0 1.5246796e-05 1.5190672e-05 4.1991083e-05 9.4285714 + 65500 0.00046187182 0 1.4861182e-05 1.4588223e-05 4.0935849e-05 9.4285714 + 65600 0.00044765112 0 1.4765268e-05 1.537344e-05 4.0371641e-05 9.4285714 + 65700 0.00044227491 0 1.510286e-05 1.606591e-05 4.0813721e-05 9.4285714 + 65800 0.00045062117 0 1.6750885e-05 1.8030475e-05 4.1179756e-05 9.4285714 + 65900 0.00044298468 0 1.6518424e-05 1.85545e-05 4.026916e-05 9.4285714 + 66000 0.00043634341 0 1.5800836e-05 1.7585905e-05 3.9748931e-05 9.4285714 + 66100 0.00044148682 0 1.6642713e-05 1.670122e-05 4.0274963e-05 9.4285714 + 66200 0.00041908541 0 1.746514e-05 1.7059015e-05 4.0382535e-05 9.4285714 + 66300 0.0003986816 0 1.7027695e-05 1.739357e-05 3.9376117e-05 9.4285714 + 66400 0.00039220656 0 1.6705227e-05 1.8903119e-05 3.9114212e-05 9.4285714 + 66500 0.0003718012 0 1.5572293e-05 1.9986978e-05 3.7554446e-05 9.4285714 + 66600 0.00035441178 0 1.7496688e-05 2.182664e-05 3.7175628e-05 9.4285714 + 66700 0.00032771071 0 1.855562e-05 2.3889316e-05 3.8273751e-05 9.4285714 + 66800 0.00032034205 0 1.994633e-05 2.2871209e-05 3.7054459e-05 9.4285714 + 66900 0.00032748678 0 1.9902021e-05 2.2577802e-05 3.5143062e-05 9.4285714 + 67000 0.00031480002 0 1.8836912e-05 2.3635721e-05 3.3711459e-05 9.4285714 + 67100 0.00029818864 0 1.9151872e-05 2.4066822e-05 3.0035385e-05 9.4285714 + 67200 0.00028850482 0 2.0202645e-05 2.2857011e-05 2.679825e-05 9.4285714 + 67300 0.00027906463 0 1.8464704e-05 2.2098469e-05 2.5808159e-05 9.4285714 + 67400 0.00026983119 0 1.8815297e-05 2.1711669e-05 2.3802924e-05 9.4285714 + 67500 0.00025897445 0 1.8973424e-05 2.0968355e-05 2.3297142e-05 9.4285714 + 67600 0.00025617277 0 1.8617812e-05 1.9830989e-05 2.2090704e-05 9.4285714 + 67700 0.0002458913 0 1.910437e-05 1.8625812e-05 2.1733812e-05 9.4285714 + 67800 0.00023354219 0 1.832611e-05 1.7691212e-05 2.1210126e-05 9.4285714 + 67900 0.00022620372 0 1.7000402e-05 1.7080892e-05 2.1207271e-05 9.4285714 + 68000 0.00021034083 0 1.6825045e-05 1.8065087e-05 2.1095108e-05 9.4285714 + 68100 0.00020081342 0 1.6332082e-05 1.970994e-05 2.0758845e-05 9.4285714 + 68200 0.00019193991 0 1.5966734e-05 1.868169e-05 2.0157881e-05 9.4285714 + 68300 0.00018544966 0 1.561877e-05 1.7478563e-05 1.8475016e-05 9.4285714 + 68400 0.00018804615 0 1.4772975e-05 1.6974189e-05 1.7189233e-05 9.4285714 + 68500 0.00018775348 0 1.3639818e-05 1.6731872e-05 1.5813203e-05 9.4285714 + 68600 0.00017814834 0 1.3108584e-05 1.5896539e-05 1.5789958e-05 9.4285714 + 68700 0.00017684501 0 1.2570593e-05 1.5512625e-05 1.5646067e-05 9.4285714 + 68800 0.00017822756 0 1.2650073e-05 1.5178378e-05 1.5602751e-05 9.4285714 + 68900 0.00017399678 0 1.2637066e-05 1.5270188e-05 1.4772033e-05 9.4285714 + 69000 0.00016884856 0 1.1917102e-05 1.5579284e-05 1.3954577e-05 9.4285714 + 69100 0.00016124621 0 1.1143804e-05 1.5715176e-05 1.3890091e-05 9.4285714 + 69200 0.00015230369 0 1.0616022e-05 1.475922e-05 1.2345065e-05 9.4285714 + 69300 0.00013801371 0 9.640773e-06 1.393282e-05 1.1715961e-05 9.4285714 + 69400 0.00013808136 0 9.6212514e-06 1.3652018e-05 1.0846438e-05 9.4285714 + 69500 0.0001440913 0 1.021795e-05 1.2661342e-05 1.038701e-05 9.4285714 + 69600 0.0001394285 0 9.9938044e-06 1.2245834e-05 1.089642e-05 9.4285714 + 69700 0.00013161326 0 1.0201799e-05 1.1909588e-05 1.0772069e-05 9.4285714 + 69800 0.00013249756 0 1.113604e-05 1.164231e-05 1.0591161e-05 9.4285714 + 69900 0.00012090745 0 1.1478451e-05 1.1152813e-05 9.919079e-06 9.4285714 + 70000 0.00011236987 0 1.0884519e-05 1.1231913e-05 8.9927016e-06 9.4285714 + 70100 0.00011286945 0 9.72149e-06 1.1278278e-05 8.465142e-06 9.4285714 + 70200 0.00010986334 0 1.0368303e-05 1.1087033e-05 8.1873531e-06 9.4285714 + 70300 0.00010685467 0 1.0583554e-05 9.9509928e-06 8.015838e-06 9.4285714 + 70400 0.00010200771 0 9.5007118e-06 8.8995568e-06 7.8885063e-06 9.4285714 + 70500 0.00010058377 0 8.7483e-06 8.1860548e-06 7.2604639e-06 9.4285714 + 70600 0.00010566655 0 8.8814394e-06 8.3353964e-06 7.0730026e-06 9.4285714 + 70700 0.00010568819 0 9.2056705e-06 8.6532173e-06 7.5798304e-06 9.4285714 + 70800 9.5743305e-05 0 8.8046692e-06 8.214583e-06 8.2007696e-06 9.4285714 + 70900 9.0337674e-05 0 8.1926875e-06 7.8174183e-06 8.5067051e-06 9.4285714 + 71000 9.4761156e-05 0 7.9032031e-06 7.8162303e-06 8.2181578e-06 9.4285714 + 71100 9.4948727e-05 0 7.5065136e-06 8.0759219e-06 7.5553381e-06 9.4285714 + 71200 9.0670778e-05 0 7.4294848e-06 8.3699509e-06 7.59107e-06 9.4285714 + 71300 8.6130193e-05 0 8.0377457e-06 8.790487e-06 7.9918991e-06 9.4285714 + 71400 8.4589504e-05 0 8.2905148e-06 8.7219326e-06 8.4439469e-06 9.4285714 + 71500 8.0529098e-05 0 8.0165537e-06 8.3087243e-06 8.8955027e-06 9.4285714 + 71600 7.5686597e-05 0 7.5468312e-06 7.6884231e-06 8.6682444e-06 9.4285714 + 71700 7.6798602e-05 0 7.6542761e-06 7.4772412e-06 7.7914537e-06 9.4285714 + 71800 7.9310009e-05 0 7.6461402e-06 7.72091e-06 7.0238823e-06 9.4285714 + 71900 7.9214288e-05 0 7.4810232e-06 7.6768621e-06 6.7817162e-06 9.4285714 + 72000 7.9038582e-05 0 7.2159275e-06 7.1798723e-06 6.9247219e-06 9.4285714 + 72100 7.871016e-05 0 6.7491433e-06 6.3347515e-06 6.840567e-06 9.4285714 + 72200 7.834318e-05 0 7.0232916e-06 6.5724499e-06 7.0466047e-06 9.4285714 + 72300 7.4417464e-05 0 7.6417843e-06 7.4198519e-06 7.5391796e-06 9.4285714 + 72400 7.2850636e-05 0 7.4561653e-06 7.4656614e-06 7.6687535e-06 9.4285714 + 72500 7.2654277e-05 0 7.1517943e-06 7.3081176e-06 7.3888809e-06 9.4285714 + 72600 6.9835461e-05 0 6.8818427e-06 7.3788479e-06 7.8063157e-06 9.4285714 + 72700 6.2829954e-05 0 7.1611994e-06 6.9887628e-06 8.3172177e-06 9.4285714 + 72800 6.2262018e-05 0 7.6316315e-06 6.7547342e-06 8.8125983e-06 9.4285714 + 72900 6.3883222e-05 0 7.5334524e-06 6.7730657e-06 8.6595963e-06 9.4285714 + 73000 5.9226511e-05 0 6.8864713e-06 6.4791392e-06 8.1819239e-06 9.4285714 + 73100 5.7011505e-05 0 6.63954e-06 6.6586151e-06 8.2829434e-06 9.4285714 + 73200 5.7782301e-05 0 6.9499852e-06 7.7458663e-06 8.7262015e-06 9.4285714 + 73300 5.6603344e-05 0 6.8509353e-06 8.3648334e-06 8.6498703e-06 9.4285714 + 73400 5.7168446e-05 0 6.5941097e-06 7.9160113e-06 8.8929853e-06 9.4285714 + 73500 5.5370771e-05 0 6.2230317e-06 6.9794004e-06 8.8249884e-06 9.4285714 + 73600 5.4812912e-05 0 5.7778189e-06 6.3940944e-06 8.5286349e-06 9.4285714 + 73700 5.6347935e-05 0 5.7515383e-06 6.3283312e-06 8.319272e-06 9.4285714 + 73800 5.4277314e-05 0 6.1253887e-06 6.6182977e-06 8.3463134e-06 9.4285714 + 73900 5.2208621e-05 0 6.4163882e-06 6.8192691e-06 8.3082406e-06 9.4285714 + 74000 5.2269889e-05 0 6.6559599e-06 7.1457306e-06 8.2273352e-06 9.4285714 + 74100 5.140122e-05 0 6.869245e-06 7.5138252e-06 7.9478769e-06 9.4285714 + 74200 5.0493971e-05 0 6.909946e-06 7.3598192e-06 8.268487e-06 9.4285714 + 74300 5.0143612e-05 0 6.9216264e-06 7.1981534e-06 9.1585219e-06 9.4285714 + 74400 5.1096041e-05 0 6.8363069e-06 7.0296413e-06 9.1147547e-06 9.4285714 + 74500 5.0443873e-05 0 6.7793586e-06 7.0132351e-06 8.5823651e-06 9.4285714 + 74600 4.7361206e-05 0 6.7180197e-06 7.124872e-06 8.7761577e-06 9.4285714 + 74700 4.5217891e-05 0 6.9374707e-06 7.2691752e-06 9.1522715e-06 9.4285714 + 74800 4.4199219e-05 0 6.7909439e-06 7.5770949e-06 9.7192223e-06 9.4285714 + 74900 4.2690558e-05 0 6.6514575e-06 7.6611441e-06 1.0077374e-05 9.4285714 + 75000 4.3251235e-05 0 6.7090132e-06 7.6653791e-06 1.0052049e-05 9.4285714 + 75100 4.2455244e-05 0 6.7866432e-06 7.7388966e-06 1.0028703e-05 9.4285714 + 75200 3.9974009e-05 0 6.82653e-06 7.8909604e-06 1.0337211e-05 9.4285714 + 75300 3.9717052e-05 0 6.9211881e-06 7.7970569e-06 1.0488155e-05 9.4285714 + 75400 3.9986342e-05 0 7.1648198e-06 7.4603705e-06 1.0688149e-05 9.4285714 + 75500 3.9169442e-05 0 7.3718404e-06 7.4522867e-06 1.11569e-05 9.4285714 + 75600 3.7089566e-05 0 7.818948e-06 8.0959183e-06 1.1390076e-05 9.4285714 + 75700 3.3266397e-05 0 8.130609e-06 8.6491143e-06 1.1151698e-05 9.4285714 + 75800 3.2384668e-05 0 7.7863389e-06 8.37919e-06 1.1288007e-05 9.4285714 + 75900 3.1838307e-05 0 7.6319586e-06 8.1009387e-06 1.143279e-05 9.4285714 + 76000 3.1144297e-05 0 7.8711235e-06 8.1673509e-06 1.1029084e-05 9.4285714 + 76100 2.9974072e-05 0 7.9247713e-06 8.299987e-06 1.0525923e-05 9.4285714 + 76200 2.7198035e-05 0 7.8293009e-06 8.310921e-06 1.055285e-05 9.4285714 + 76300 2.7127342e-05 0 7.6553123e-06 8.0539985e-06 1.0474633e-05 9.4285714 + 76400 2.7851263e-05 0 7.308142e-06 7.8072863e-06 1.013167e-05 9.4285714 + 76500 2.7494264e-05 0 6.841143e-06 7.835377e-06 9.3440029e-06 9.4285714 + 76600 2.6712243e-05 0 6.5997538e-06 8.0291247e-06 8.9766747e-06 9.4285714 + 76700 2.608679e-05 0 6.5476182e-06 8.0290119e-06 8.9406988e-06 9.4285714 + 76800 2.5470409e-05 0 6.7969082e-06 7.9051392e-06 8.6794585e-06 9.4285714 + 76900 2.3738132e-05 0 7.0899218e-06 7.820068e-06 8.3776786e-06 9.4285714 + 77000 2.392793e-05 0 7.1007851e-06 7.7008506e-06 8.2196063e-06 9.4285714 + 77100 2.5040725e-05 0 6.5849837e-06 7.5695391e-06 8.0838426e-06 9.4285714 + 77200 2.4262679e-05 0 5.882129e-06 7.3322008e-06 7.9176151e-06 9.4285714 + 77300 2.3485603e-05 0 5.5578939e-06 7.1253591e-06 8.1421152e-06 9.4285714 + 77400 2.288926e-05 0 5.5392448e-06 6.953267e-06 8.3284229e-06 9.4285714 + 77500 2.1807877e-05 0 5.6396821e-06 6.8965687e-06 8.3180338e-06 9.4285714 + 77600 2.0733918e-05 0 5.7355693e-06 6.7994759e-06 8.0734473e-06 9.4285714 + 77700 1.9203226e-05 0 6.0476702e-06 6.6767049e-06 7.8817179e-06 9.4285714 + 77800 1.9501256e-05 0 6.3142216e-06 6.4932104e-06 7.6808533e-06 9.4285714 + 77900 2.0359598e-05 0 6.2952388e-06 6.2572911e-06 7.4898379e-06 9.4285714 + 78000 2.0195233e-05 0 6.2117602e-06 5.9890577e-06 7.3521707e-06 9.4285714 + 78100 1.9996343e-05 0 6.4254558e-06 6.0581865e-06 7.4946408e-06 9.4285714 + 78200 1.9561783e-05 0 6.5081672e-06 6.1091508e-06 7.7115624e-06 9.4285714 + 78300 1.8950384e-05 0 6.5057604e-06 6.1336288e-06 7.7814624e-06 9.4285714 + 78400 1.791265e-05 0 6.524486e-06 6.106767e-06 7.9720525e-06 9.4285714 + 78500 1.6719761e-05 0 6.4696267e-06 6.1466897e-06 8.2888462e-06 9.4285714 + 78600 1.694882e-05 0 6.3960529e-06 6.4383715e-06 8.566325e-06 9.4285714 + 78700 1.6441696e-05 0 6.4244259e-06 6.8544835e-06 8.8114945e-06 9.4285714 + 78800 1.58705e-05 0 6.4261976e-06 6.9892281e-06 8.9516613e-06 9.4285714 + 78900 1.6262888e-05 0 6.4275436e-06 6.918921e-06 8.9013596e-06 9.4285714 + 79000 1.6249172e-05 0 6.5654154e-06 6.8123563e-06 8.8489233e-06 9.4285714 + 79100 1.5831334e-05 0 6.4588742e-06 6.712862e-06 8.8288153e-06 9.4285714 + 79200 1.6045382e-05 0 6.403274e-06 6.7037068e-06 8.9761827e-06 9.4285714 + 79300 1.5516093e-05 0 6.3902624e-06 6.7184084e-06 9.1560991e-06 9.4285714 + 79400 1.416878e-05 0 6.3570188e-06 6.7232883e-06 9.227643e-06 9.4285714 + 79500 1.3789098e-05 0 6.3134201e-06 6.7601571e-06 9.4097509e-06 9.4285714 + 79600 1.3348534e-05 0 6.1960704e-06 6.7254265e-06 9.6078167e-06 9.4285714 + 79700 1.273465e-05 0 6.1541687e-06 6.5901782e-06 9.8182002e-06 9.4285714 + 79800 1.2227372e-05 0 6.304926e-06 6.6441957e-06 1.0068215e-05 9.4285714 + 79900 1.1693813e-05 0 6.3038093e-06 6.6939605e-06 1.0197318e-05 9.4285714 + 80000 1.1464185e-05 0 6.1705804e-06 6.6906719e-06 1.0110803e-05 9.4285714 + 80100 1.1803018e-05 0 6.0500543e-06 6.6620614e-06 9.8456096e-06 9.4285714 + 80200 1.2022752e-05 0 6.1098356e-06 6.6272319e-06 9.7114881e-06 9.4285714 + 80300 1.1235183e-05 0 6.3111252e-06 6.8491552e-06 9.8106655e-06 9.4285714 + 80400 1.0767149e-05 0 6.4003396e-06 7.1077653e-06 9.6772383e-06 9.4285714 + 80500 1.0605289e-05 0 6.2939472e-06 7.0736809e-06 9.243275e-06 9.4285714 + 80600 1.0730122e-05 0 6.10832e-06 6.9696774e-06 8.7322327e-06 9.4285714 + 80700 1.0881957e-05 0 6.0452261e-06 6.8625083e-06 8.4087864e-06 9.4285714 + 80800 1.0406089e-05 0 6.0948251e-06 6.523201e-06 8.19417e-06 9.4285714 + 80900 1.0026467e-05 0 6.0325653e-06 6.0787776e-06 7.9921617e-06 9.4285714 + 81000 9.7145958e-06 0 5.9646282e-06 5.9468725e-06 7.7932935e-06 9.4285714 + 81100 9.5989912e-06 0 5.9922407e-06 5.8830137e-06 7.4211805e-06 9.4285714 + 81200 9.6167979e-06 0 5.9890853e-06 5.8136074e-06 7.1725868e-06 9.4285714 + 81300 9.3960745e-06 0 5.9836322e-06 5.8456821e-06 7.1063473e-06 9.4285714 + 81400 9.2203704e-06 0 6.0646745e-06 5.9639464e-06 7.1870346e-06 9.4285714 + 81500 8.9934924e-06 0 6.0596683e-06 6.0526634e-06 7.4184354e-06 9.4285714 + 81600 8.9239343e-06 0 5.9305991e-06 5.9920705e-06 7.4398143e-06 9.4285714 + 81700 8.8536448e-06 0 5.782797e-06 5.7875074e-06 7.3001827e-06 9.4285714 + 81800 8.7738397e-06 0 5.6772255e-06 5.5870852e-06 7.215606e-06 9.4285714 + 81900 8.6264475e-06 0 5.6109721e-06 5.4778153e-06 7.4438004e-06 9.4285714 + 82000 8.1150459e-06 0 5.6859237e-06 5.4434971e-06 7.7319605e-06 9.4285714 + 82100 7.7649326e-06 0 5.7940758e-06 5.4655151e-06 7.8474115e-06 9.4285714 + 82200 7.2560528e-06 0 5.8338187e-06 5.5455868e-06 7.8801512e-06 9.4285714 + 82300 6.728063e-06 0 5.8489495e-06 5.5951456e-06 8.0820793e-06 9.4285714 + 82400 6.9809977e-06 0 5.8693525e-06 5.6114868e-06 8.260093e-06 9.4285714 + 82500 7.355814e-06 0 5.92658e-06 5.618559e-06 8.3090972e-06 9.4285714 + 82600 7.2570318e-06 0 5.9036059e-06 5.7297566e-06 8.3811458e-06 9.4285714 + 82700 6.9694095e-06 0 5.8875064e-06 5.8982843e-06 8.5177797e-06 9.4285714 + 82800 6.6998823e-06 0 5.8397e-06 5.9382718e-06 8.5416261e-06 9.4285714 + 82900 6.2647743e-06 0 5.8436222e-06 5.9380316e-06 8.4849934e-06 9.4285714 + 83000 6.0939421e-06 0 5.8584026e-06 5.9680845e-06 8.4019098e-06 9.4285714 + 83100 5.7817334e-06 0 5.9194068e-06 5.974517e-06 8.3739449e-06 9.4285714 + 83200 5.4819772e-06 0 5.9246092e-06 5.9787088e-06 8.2453878e-06 9.4285714 + 83300 5.5890815e-06 0 5.7890157e-06 5.9282178e-06 8.0590558e-06 9.4285714 + 83400 5.6281861e-06 0 5.6912633e-06 5.8518645e-06 7.9909164e-06 9.4285714 + 83500 5.4144887e-06 0 5.6573854e-06 5.7833509e-06 8.0464114e-06 9.4285714 + 83600 5.1563913e-06 0 5.6269226e-06 5.7339786e-06 8.0661711e-06 9.4285714 + 83700 5.0876473e-06 0 5.5749834e-06 5.6845511e-06 8.0332703e-06 9.4285714 + 83800 4.9468448e-06 0 5.5707074e-06 5.6385133e-06 7.9597769e-06 9.4285714 + 83900 4.6630105e-06 0 5.5723723e-06 5.6175318e-06 7.8851126e-06 9.4285714 + 84000 4.7811214e-06 0 5.5108047e-06 5.6078624e-06 7.8050501e-06 9.4285714 + 84100 5.0276584e-06 0 5.5880552e-06 5.5747336e-06 7.6735943e-06 9.4285714 + 84200 5.0673134e-06 0 5.5485723e-06 5.4960143e-06 7.5331626e-06 9.4285714 + 84300 5.0178904e-06 0 5.4242574e-06 5.450341e-06 7.397872e-06 9.4285714 + 84400 5.1214108e-06 0 5.4146982e-06 5.4695781e-06 7.1709728e-06 9.4285714 + 84500 5.2613708e-06 0 5.4544838e-06 5.4910137e-06 6.8978042e-06 9.4285714 + 84600 5.0732871e-06 0 5.4732529e-06 5.4537634e-06 6.6451024e-06 9.4285714 + 84700 4.8942355e-06 0 5.3186694e-06 5.4081165e-06 6.4129476e-06 9.4285714 + 84800 4.9894935e-06 0 5.210834e-06 5.3824484e-06 6.2468844e-06 9.4285714 + 84900 5.0853301e-06 0 5.2081027e-06 5.368114e-06 6.1689206e-06 9.4285714 + 85000 5.0246182e-06 0 5.2102872e-06 5.374328e-06 6.1510533e-06 9.4285714 + 85100 5.0208754e-06 0 5.1521471e-06 5.3676682e-06 6.1991457e-06 9.4285714 + 85200 5.0748205e-06 0 5.048261e-06 5.2440453e-06 6.2004146e-06 9.4285714 + 85300 4.9812629e-06 0 4.901834e-06 5.078053e-06 6.1739713e-06 9.4285714 + 85400 4.9364086e-06 0 4.7854165e-06 4.9665202e-06 6.1913133e-06 9.4285714 + 85500 5.0949477e-06 0 4.7684e-06 4.9424101e-06 6.2384897e-06 9.4285714 + 85600 5.2578329e-06 0 4.8296562e-06 4.9891444e-06 6.3177757e-06 9.4285714 + 85700 5.3178654e-06 0 4.9096168e-06 5.0492655e-06 6.3719253e-06 9.4285714 + 85800 5.2789195e-06 0 5.0030273e-06 5.1221141e-06 6.4306092e-06 9.4285714 + 85900 5.211556e-06 0 5.0888711e-06 5.2011509e-06 6.4447784e-06 9.4285714 + 86000 5.164723e-06 0 5.1818504e-06 5.2712326e-06 6.4302369e-06 9.4285714 + 86100 5.0481445e-06 0 5.2785718e-06 5.3135548e-06 6.441319e-06 9.4285714 + 86200 4.9974464e-06 0 5.3884301e-06 5.294815e-06 6.5827459e-06 9.4285714 + 86300 4.9937059e-06 0 5.457251e-06 5.2609359e-06 6.7845972e-06 9.4285714 + 86400 4.8657268e-06 0 5.4483442e-06 5.2511498e-06 6.9337604e-06 9.4285714 + 86500 4.7283799e-06 0 5.425898e-06 5.3089241e-06 7.0312792e-06 9.4285714 + 86600 4.7004375e-06 0 5.4193785e-06 5.4166695e-06 7.1128075e-06 9.4285714 + 86700 4.6372911e-06 0 5.4344351e-06 5.4996051e-06 7.277017e-06 9.4285714 + 86800 4.5127464e-06 0 5.4946741e-06 5.6005112e-06 7.5801442e-06 9.4285714 + 86900 4.2696716e-06 0 5.6390116e-06 5.767542e-06 7.931129e-06 9.4285714 + 87000 3.9562698e-06 0 5.7901064e-06 5.9319146e-06 8.1254738e-06 9.4285714 + 87100 3.8216875e-06 0 5.802745e-06 6.0555156e-06 8.1125473e-06 9.4285714 + 87200 3.7106265e-06 0 5.7560928e-06 6.1526954e-06 8.1788736e-06 9.4285714 + 87300 3.5152634e-06 0 5.7983009e-06 6.1893449e-06 8.3142262e-06 9.4285714 + 87400 3.3565975e-06 0 5.9349946e-06 6.1859595e-06 8.3471855e-06 9.4285714 + 87500 3.2638882e-06 0 6.1244937e-06 6.1935393e-06 8.3417873e-06 9.4285714 + 87600 3.0898606e-06 0 6.1267787e-06 6.1999214e-06 8.4141458e-06 9.4285714 + 87700 2.8576261e-06 0 6.0597342e-06 6.186209e-06 8.5665825e-06 9.4285714 + 87800 2.7576879e-06 0 6.0986889e-06 6.1966395e-06 8.7269298e-06 9.4285714 + 87900 2.6395553e-06 0 6.2323863e-06 6.2325665e-06 8.8153584e-06 9.4285714 + 88000 2.5367275e-06 0 6.3399962e-06 6.2286333e-06 8.7321005e-06 9.4285714 + 88100 2.5435826e-06 0 6.3843685e-06 6.199985e-06 8.588545e-06 9.4285714 + 88200 2.4639259e-06 0 6.4179215e-06 6.1683922e-06 8.4513487e-06 9.4285714 + 88300 2.3469036e-06 0 6.4551211e-06 6.1080618e-06 8.3387381e-06 9.4285714 + 88400 2.3768733e-06 0 6.4591903e-06 6.0389471e-06 8.1921919e-06 9.4285714 + 88500 2.3736897e-06 0 6.393894e-06 5.9510828e-06 8.0112655e-06 9.4285714 + 88600 2.2500164e-06 0 6.2578349e-06 5.8448408e-06 7.8184696e-06 9.4285714 + 88700 2.2162271e-06 0 6.1542092e-06 5.7754318e-06 7.6686985e-06 9.4285714 + 88800 2.2151714e-06 0 6.0729724e-06 5.7388441e-06 7.547056e-06 9.4285714 + 88900 2.1358759e-06 0 5.959043e-06 5.7110489e-06 7.3753601e-06 9.4285714 + 89000 2.0679219e-06 0 5.8461246e-06 5.669748e-06 7.208506e-06 9.4285714 + 89100 2.0601043e-06 0 5.7535284e-06 5.6000192e-06 7.1410851e-06 9.4285714 + 89200 2.0129251e-06 0 5.7206458e-06 5.5643986e-06 7.1420425e-06 9.4285714 + 89300 1.8550153e-06 0 5.7375984e-06 5.5654325e-06 7.101938e-06 9.4285714 + 89400 1.740421e-06 0 5.7121512e-06 5.5424937e-06 6.9314459e-06 9.4285714 + 89500 1.7011249e-06 0 5.5746559e-06 5.4592408e-06 6.7076844e-06 9.4285714 + 89600 1.6571459e-06 0 5.4274167e-06 5.3669256e-06 6.531149e-06 9.4285714 + 89700 1.6438067e-06 0 5.3201355e-06 5.2892086e-06 6.4398106e-06 9.4285714 + 89800 1.6525138e-06 0 5.2625686e-06 5.2167148e-06 6.4067962e-06 9.4285714 + 89900 1.6319271e-06 0 5.2556177e-06 5.1873856e-06 6.3826434e-06 9.4285714 + 90000 1.557529e-06 0 5.2446154e-06 5.2340739e-06 6.3155153e-06 9.4285714 + 90100 1.4882373e-06 0 5.2015275e-06 5.2778385e-06 6.2402529e-06 9.4285714 + 90200 1.4209302e-06 0 5.1597895e-06 5.2738932e-06 6.2081083e-06 9.4285714 + 90300 1.3299939e-06 0 5.1418672e-06 5.2372552e-06 6.2528023e-06 9.4285714 + 90400 1.2259092e-06 0 5.1463821e-06 5.2097912e-06 6.3462418e-06 9.4285714 + 90500 1.1187486e-06 0 5.1762762e-06 5.239444e-06 6.4479926e-06 9.4285714 + 90600 1.0608212e-06 0 5.2178318e-06 5.305174e-06 6.5102243e-06 9.4285714 + 90700 1.0766578e-06 0 5.2419914e-06 5.3525891e-06 6.5140687e-06 9.4285714 + 90800 1.1182792e-06 0 5.2530154e-06 5.3586888e-06 6.4962495e-06 9.4285714 + 90900 1.1296592e-06 0 5.2748443e-06 5.3408421e-06 6.5115448e-06 9.4285714 + 91000 1.11746e-06 0 5.3229553e-06 5.3176115e-06 6.5624336e-06 9.4285714 + 91100 1.1161849e-06 0 5.3728185e-06 5.2967077e-06 6.6076278e-06 9.4285714 + 91200 1.1003381e-06 0 5.3762475e-06 5.2863942e-06 6.6437528e-06 9.4285714 + 91300 1.0699207e-06 0 5.3449145e-06 5.3031418e-06 6.711032e-06 9.4285714 + 91400 1.0225085e-06 0 5.3031929e-06 5.34765e-06 6.796701e-06 9.4285714 + 91500 9.3221185e-07 0 5.2820677e-06 5.3831345e-06 6.8688465e-06 9.4285714 + 91600 8.175139e-07 0 5.2910041e-06 5.4163556e-06 6.9400122e-06 9.4285714 + 91700 7.3559371e-07 0 5.3055219e-06 5.455723e-06 7.044799e-06 9.4285714 + 91800 7.1536716e-07 0 5.3171425e-06 5.4958276e-06 7.1764255e-06 9.4285714 + 91900 7.3505787e-07 0 5.3414305e-06 5.5291435e-06 7.3166969e-06 9.4285714 + 92000 7.4077724e-07 0 5.3814858e-06 5.5514528e-06 7.4343294e-06 9.4285714 + 92100 6.9877049e-07 0 5.4390474e-06 5.5727673e-06 7.4953117e-06 9.4285714 + 92200 6.4252681e-07 0 5.4916149e-06 5.5977627e-06 7.5227736e-06 9.4285714 + 92300 6.0110022e-07 0 5.5159103e-06 5.6313603e-06 7.5388191e-06 9.4285714 + 92400 5.816128e-07 0 5.5178607e-06 5.6647579e-06 7.5582377e-06 9.4285714 + 92500 5.9153109e-07 0 5.5092078e-06 5.6729251e-06 7.5696663e-06 9.4285714 + 92600 6.0921987e-07 0 5.4970327e-06 5.6615892e-06 7.5703268e-06 9.4285714 + 92700 6.1337515e-07 0 5.4942697e-06 5.6345531e-06 7.5559086e-06 9.4285714 + 92800 6.1327785e-07 0 5.4807468e-06 5.6009851e-06 7.5214857e-06 9.4285714 + 92900 6.1792714e-07 0 5.4554294e-06 5.5749276e-06 7.4538853e-06 9.4285714 + 93000 6.1273596e-07 0 5.4290775e-06 5.5561117e-06 7.3841006e-06 9.4285714 + 93100 6.0793162e-07 0 5.4185336e-06 5.5358484e-06 7.3194241e-06 9.4285714 + 93200 6.0544275e-07 0 5.4307931e-06 5.512978e-06 7.2505125e-06 9.4285714 + 93300 5.9304823e-07 0 5.4493134e-06 5.5034617e-06 7.1829541e-06 9.4285714 + 93400 5.8633452e-07 0 5.4585391e-06 5.5059231e-06 7.1239428e-06 9.4285714 + 93500 5.8558033e-07 0 5.4524782e-06 5.5079042e-06 7.0750126e-06 9.4285714 + 93600 5.9666443e-07 0 5.4431269e-06 5.5093864e-06 7.038782e-06 9.4285714 + 93700 6.2961131e-07 0 5.4420067e-06 5.5023302e-06 7.0048532e-06 9.4285714 + 93800 6.5214088e-07 0 5.4557207e-06 5.4957162e-06 6.9697117e-06 9.4285714 + 93900 6.4876906e-07 0 5.4814438e-06 5.5018236e-06 6.9387912e-06 9.4285714 + 94000 6.4883965e-07 0 5.5010302e-06 5.5122147e-06 6.912436e-06 9.4285714 + 94100 6.6318042e-07 0 5.4941441e-06 5.5055713e-06 6.8781859e-06 9.4285714 + 94200 6.7888726e-07 0 5.4655079e-06 5.494276e-06 6.8335849e-06 9.4285714 + 94300 6.851547e-07 0 5.4386351e-06 5.4819488e-06 6.785467e-06 9.4285714 + 94400 6.9002759e-07 0 5.4150889e-06 5.4560812e-06 6.7512517e-06 9.4285714 + 94500 6.8881467e-07 0 5.389498e-06 5.4249696e-06 6.7436813e-06 9.4285714 + 94600 6.8216567e-07 0 5.3596704e-06 5.3960045e-06 6.752434e-06 9.4285714 + 94700 6.9513876e-07 0 5.3315299e-06 5.3638382e-06 6.7588407e-06 9.4285714 + 94800 7.3117806e-07 0 5.319681e-06 5.3328405e-06 6.7594305e-06 9.4285714 + 94900 7.4630526e-07 0 5.3264247e-06 5.3065749e-06 6.7584815e-06 9.4285714 + 95000 7.052145e-07 0 5.336904e-06 5.2901046e-06 6.7591167e-06 9.4285714 + 95100 6.5300672e-07 0 5.3431675e-06 5.3055137e-06 6.7707775e-06 9.4285714 + 95200 6.2832435e-07 0 5.343062e-06 5.3566209e-06 6.8007939e-06 9.4285714 + 95300 5.8243636e-07 0 5.3391408e-06 5.411327e-06 6.8329844e-06 9.4285714 + 95400 5.3752036e-07 0 5.3329329e-06 5.4406204e-06 6.8573377e-06 9.4285714 + 95500 5.5141526e-07 0 5.3399002e-06 5.4506865e-06 6.8841697e-06 9.4285714 + 95600 5.9422206e-07 0 5.3628211e-06 5.4526761e-06 6.9223868e-06 9.4285714 + 95700 6.0502271e-07 0 5.3849027e-06 5.448663e-06 6.9748494e-06 9.4285714 + 95800 5.9633233e-07 0 5.3916863e-06 5.4445277e-06 7.034379e-06 9.4285714 + 95900 5.8353112e-07 0 5.3864279e-06 5.4411008e-06 7.1207417e-06 9.4285714 + 96000 5.4965917e-07 0 5.3883171e-06 5.4521987e-06 7.207183e-06 9.4285714 + 96100 5.029591e-07 0 5.3992099e-06 5.4818384e-06 7.2609387e-06 9.4285714 + 96200 4.5561069e-07 0 5.4154371e-06 5.5240071e-06 7.2708316e-06 9.4285714 + 96300 4.3112225e-07 0 5.4307319e-06 5.5600285e-06 7.2500045e-06 9.4285714 + 96400 4.3930285e-07 0 5.4430151e-06 5.5789722e-06 7.2160611e-06 9.4285714 + 96500 4.6493378e-07 0 5.4661115e-06 5.5785143e-06 7.1781808e-06 9.4285714 + 96600 4.9251458e-07 0 5.4963377e-06 5.5640999e-06 7.1270969e-06 9.4285714 + 96700 5.0736557e-07 0 5.521707e-06 5.5498419e-06 7.0880266e-06 9.4285714 + 96800 5.0623403e-07 0 5.5421159e-06 5.5497869e-06 7.0876008e-06 9.4285714 + 96900 4.9644583e-07 0 5.5541079e-06 5.5554785e-06 7.0985488e-06 9.4285714 + 97000 4.9272012e-07 0 5.5642491e-06 5.5573245e-06 7.1072643e-06 9.4285714 + 97100 5.0766017e-07 0 5.574804e-06 5.5607502e-06 7.0960704e-06 9.4285714 + 97200 5.2395618e-07 0 5.5904541e-06 5.5972925e-06 7.0868355e-06 9.4285714 + 97300 4.9953435e-07 0 5.6118394e-06 5.6549726e-06 7.1004286e-06 9.4285714 + 97400 4.7056592e-07 0 5.6267739e-06 5.6665867e-06 7.132434e-06 9.4285714 + 97500 4.6366588e-07 0 5.6279978e-06 5.6384286e-06 7.1776822e-06 9.4285714 + 97600 4.6533884e-07 0 5.6201426e-06 5.6143272e-06 7.2143735e-06 9.4285714 + 97700 4.6375828e-07 0 5.6042233e-06 5.5922009e-06 7.2259013e-06 9.4285714 + 97800 4.5549968e-07 0 5.581613e-06 5.5683497e-06 7.2201315e-06 9.4285714 + 97900 4.4830148e-07 0 5.5561604e-06 5.5523988e-06 7.2080551e-06 9.4285714 + 98000 4.4229249e-07 0 5.5339104e-06 5.5493638e-06 7.1912426e-06 9.4285714 + 98100 4.3249616e-07 0 5.5169313e-06 5.5572061e-06 7.1620443e-06 9.4285714 + 98200 4.2277099e-07 0 5.5048256e-06 5.555431e-06 7.1279636e-06 9.4285714 + 98300 4.0884592e-07 0 5.4920455e-06 5.5364094e-06 7.088059e-06 9.4285714 + 98400 3.8363767e-07 0 5.4775359e-06 5.5080096e-06 7.05458e-06 9.4285714 + 98500 3.6073132e-07 0 5.4670069e-06 5.4816869e-06 7.0387787e-06 9.4285714 + 98600 3.4144123e-07 0 5.4706682e-06 5.4743026e-06 7.0537276e-06 9.4285714 + 98700 3.1616356e-07 0 5.4884314e-06 5.4787633e-06 7.0717401e-06 9.4285714 + 98800 2.9524387e-07 0 5.5116444e-06 5.4915117e-06 7.0801815e-06 9.4285714 + 98900 2.8085695e-07 0 5.5360366e-06 5.5192781e-06 7.0852811e-06 9.4285714 + 99000 2.7334761e-07 0 5.5583091e-06 5.5646801e-06 7.0905775e-06 9.4285714 + 99100 2.8302882e-07 0 5.5671736e-06 5.6102205e-06 7.0851405e-06 9.4285714 + 99200 3.0871833e-07 0 5.5626313e-06 5.641669e-06 7.0655021e-06 9.4285714 + 99300 3.2788327e-07 0 5.5501776e-06 5.6578835e-06 7.052597e-06 9.4285714 + 99400 3.270588e-07 0 5.5333145e-06 5.6580921e-06 7.0554426e-06 9.4285714 + 99500 3.0876961e-07 0 5.5137891e-06 5.6472952e-06 7.0790365e-06 9.4285714 + 99600 2.7792352e-07 0 5.492857e-06 5.630656e-06 7.1072011e-06 9.4285714 + 99700 2.4620411e-07 0 5.4730212e-06 5.6109129e-06 7.1194189e-06 9.4285714 + 99800 2.3278402e-07 0 5.464734e-06 5.5969326e-06 7.115628e-06 9.4285714 + 99900 2.394249e-07 0 5.4754248e-06 5.5974473e-06 7.1078477e-06 9.4285714 + 100000 2.4873051e-07 0 5.5011397e-06 5.6103192e-06 7.1032974e-06 9.4285714 +Loop time of 279.196 on 1 procs for 100000 steps with 2520 atoms + +Performance: 1547298.377 tau/day, 358.171 timesteps/s +99.9% 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.2815 | 4.2815 | 4.2815 | 0.0 | 1.53 +Bond | 250.07 | 250.07 | 250.07 | 0.0 | 89.57 +Neigh | 4.3874 | 4.3874 | 4.3874 | 0.0 | 1.57 +Comm | 0.1863 | 0.1863 | 0.1863 | 0.0 | 0.07 +Output | 0.091049 | 0.091049 | 0.091049 | 0.0 | 0.03 +Modify | 19.366 | 19.366 | 19.366 | 0.0 | 6.94 +Other | | 0.8108 | | | 0.29 + +Nlocal: 2520.00 ave 2520 max 2520 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0.00000 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 9814.00 ave 9814 max 9814 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 9814 +Ave neighs/atom = 3.8944444 +Ave special neighs/atom = 36.317460 +Neighbor list builds = 4924 +Dangerous builds = 274 +Total wall time: 0:04:39 diff --git a/examples/bpm/pour/log.30Jul2021.pour.g++.1 b/examples/bpm/pour/log.30Jul2021.pour.g++.1 deleted file mode 100644 index eec316e8ae..0000000000 --- a/examples/bpm/pour/log.30Jul2021.pour.g++.1 +++ /dev/null @@ -1,1090 +0,0 @@ -LAMMPS (30 Jul 2021) -units lj -dimension 3 -boundary m m m -atom_style sphere/bpm -special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0 -newton on off -comm_modify vel yes cutoff 3.3 -region box block -15 15 -15 15 0 60.0 -create_box 1 box bond/types 1 extra/bond/per/atom 15 extra/special/per/atom 50 -Created orthogonal box = (-15.000000 -15.000000 0.0000000) to (15.000000 15.000000 60.000000) - 1 by 1 by 1 MPI processor grid - -molecule my_mol "rect.mol" -Read molecule template my_mol: - 1 molecules - 63 atoms with max type 1 - 297 bonds with max type 1 - 0 angles with max type 0 - 0 dihedrals with max type 0 - 0 impropers with max type 0 -region wall_cyl cylinder z 0.0 0.0 10.0 EDGE EDGE side in -region dropzone cylinder z 0.0 0.0 10.0 40.0 50.0 side in - -pair_style gran/hertz/history 1.0 NULL 0.5 NULL 0.1 1 -bond_style bpm/rotational -pair_coeff 1 1 -bond_coeff 1 1.0 0.2 0.01 0.01 2.0 0.4 0.02 0.02 0.2 0.04 0.002 0.002 - -compute nbond all nbond/atom -compute tbond all reduce sum c_nbond -compute_modify thermo_temp dynamic/dof yes - -fix 1 all wall/gran hertz/history 1.0 NULL 0.5 NULL 0.1 1 zplane 0.0 NULL -fix 2 all wall/gran/region hertz/history 1.0 NULL 0.5 NULL 0.1 1 region wall_cyl -fix 3 all gravity 1e-4 vector 0 0 -1 -fix 4 all deposit 40 0 1500 712511343 mol my_mol region dropzone near 2.0 vz -0.05 -0.05 -fix 5 all nve/sphere/bpm -fix 6 all update/special/bonds - -timestep 0.05 -thermo_style custom step ke pe pxx pyy pzz c_tbond -thermo 100 -dump 1 all custom 500 atomDump id radius x y z c_nbond mol - -run 100000 -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.3 - ghost atom cutoff = 3.3 - binsize = 0.65, bins = 47 47 93 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair gran/hertz/history, perpetual - attributes: half, newton on, size, history - pair build: half/size/bin/newton - stencil: half/bin/3d - bin: standard -Per MPI rank memory allocation (min/avg/max) = 7.510 | 7.510 | 7.510 Mbytes -Step KinEng PotEng Pxx Pyy Pzz c_tbond - 0 -0 0 0 0 0 0 - 100 0.0018350004 -4.7142847 -1.4952358e-05 -1.3419249e-05 -1.2232534e-06 9.4285714 - 200 0.0026448865 -4.7142836 2.4009175e-06 3.4985286e-06 4.4774541e-06 9.4285714 - 300 0.0037671165 -4.71428 7.7868315e-06 4.3344542e-06 5.2003707e-06 9.4285714 - 400 0.0060866155 -4.7142466 -2.6407137e-05 -4.6012096e-06 -7.2652236e-06 9.4285714 - 500 0.0074581085 -4.7142677 2.91441e-05 2.1596938e-05 1.7547302e-05 9.4285714 - 600 0.0078583344 -4.7142826 -1.5003346e-06 1.4512508e-05 2.9703819e-06 9.4285714 - 700 0.0075360513 -4.7142727 -2.5876771e-06 1.2941955e-05 1.8800678e-06 9.4285714 - 800 0.0073708697 -4.7142811 2.342014e-05 1.3677972e-05 1.7951529e-05 9.4285714 - 900 0.0075293135 -4.7142781 -1.0363878e-05 1.3616086e-05 -4.4997782e-06 9.4285714 - 1000 0.0075664914 -4.7142805 9.7952433e-06 1.4238252e-05 1.0500218e-05 9.4285714 - 1100 0.0075487959 -4.7142816 1.3144826e-05 1.4347122e-05 1.3503414e-05 9.4285714 - 1200 0.0075161044 -4.714269 -5.7314502e-06 9.4758079e-06 -3.9561706e-06 9.4285714 - 1300 0.0075736256 -4.7142839 1.1243108e-05 1.7774357e-05 1.3346305e-05 9.4285714 - 1400 0.0076065814 -4.7142688 6.0289115e-06 1.4598083e-05 8.0109348e-06 9.4285714 - 1500 0.0075850039 -4.7142836 9.8106843e-07 7.3175578e-06 1.3244496e-06 9.4285714 - 1600 0.0059673005 -4.7142772 5.4481504e-06 2.0461455e-05 1.0148563e-05 9.4285714 - 1700 0.008060977 -4.7142767 2.9012609e-06 2.2950155e-05 1.3486974e-06 9.4285714 - 1800 0.0087747918 -4.7142819 7.4904656e-06 3.6100052e-05 1.7017909e-05 9.4285714 - 1900 0.0087089259 -4.7142751 8.357802e-06 4.0019544e-05 1.680366e-05 9.4285714 - 2000 0.0087016626 -4.7142836 6.3761243e-06 2.3991468e-05 6.5215381e-06 9.4285714 - 2100 0.008427332 -4.7142785 9.6989453e-06 3.2889581e-05 1.6275771e-05 9.4285714 - 2200 0.0083664952 -4.7142818 7.176817e-06 3.0276432e-05 5.9757096e-06 9.4285714 - 2300 0.0083480746 -4.7142791 1.0583095e-05 2.448771e-05 1.3325786e-05 9.4285714 - 2400 0.0082989793 -4.7142829 1.2568526e-05 3.5256163e-05 1.3898753e-05 9.4285714 - 2500 0.0083834043 -4.714283 8.1815532e-06 2.6950039e-05 7.3853891e-06 9.4285714 - 2600 0.0084024866 -4.7142832 1.0774493e-05 2.8041987e-05 1.4089582e-05 9.4285714 - 2700 0.0083048258 -4.7142846 1.2046208e-05 3.1705653e-05 1.325036e-05 9.4285714 - 2800 0.0073772986 -4.7142715 8.6198824e-06 1.9039864e-05 1.1085512e-05 9.4285714 - 2900 0.0072860451 -4.7142624 1.1891652e-05 1.8218987e-05 1.3595365e-05 9.4285714 - 3000 0.0073542744 -4.7142745 9.9651799e-06 1.6285545e-05 1.2546119e-05 9.4285714 - 3100 0.0050337959 -4.7142816 -8.4319836e-06 5.6227207e-06 1.2853509e-05 9.4285714 - 3200 0.0046668635 -4.7142709 -1.6368072e-05 -3.17067e-07 9.9751699e-06 9.4285714 - 3300 0.0047886997 -4.7142803 2.0946846e-06 8.6138403e-06 1.5568577e-05 9.4285714 - 3400 0.0048926937 -4.7142823 1.1568093e-05 1.6320968e-05 1.9143213e-05 9.4285714 - 3500 0.0048678488 -4.7142781 1.3448921e-05 1.7493352e-05 1.9488121e-05 9.4285714 - 3600 0.0047353657 -4.7142828 1.1700456e-05 1.2677209e-05 1.755821e-05 9.4285714 - 3700 0.0045834985 -4.7142758 9.7774984e-06 1.6781792e-05 1.3416903e-05 9.4285714 - 3800 0.0045915482 -4.7142684 7.1884339e-06 1.4354611e-05 1.4317569e-05 9.4285714 - 3900 0.0048205935 -4.7142818 9.8986884e-06 1.1854311e-05 1.8746075e-05 9.4285714 - 4000 0.0049853192 -4.7142848 1.0167455e-05 1.760873e-05 1.6284384e-05 9.4285714 - 4100 0.0047076001 -4.7142778 6.2590136e-06 1.4085782e-05 2.0992834e-05 9.4285714 - 4200 0.0035992627 -4.7142804 -3.1373644e-05 -2.9347298e-05 9.2692347e-06 9.4285714 - 4300 0.0033651005 -4.7142802 -2.3099597e-05 -1.8493562e-05 7.0898163e-06 9.4285714 - 4400 0.0034474965 -4.7142725 1.2094981e-05 1.4622497e-05 2.7835335e-05 9.4285714 - 4500 0.0035102662 -4.71428 2.1633007e-06 6.2829581e-06 1.5722415e-05 9.4285714 - 4600 0.0030538555 -4.7142808 3.1538558e-06 4.2505368e-06 1.8124067e-05 9.4285714 - 4700 0.0031841314 -4.7142823 1.2203554e-05 1.1505239e-05 3.6458167e-05 9.4285714 - 4800 0.0032104065 -4.7142829 8.6830164e-06 7.7853357e-06 2.7983239e-05 9.4285714 - 4900 0.0030545791 -4.7142805 4.4562634e-06 -2.300673e-06 1.8723151e-05 9.4285714 - 5000 0.0030341587 -4.7142811 4.1470981e-06 -1.3422263e-05 3.0241014e-05 9.4285714 - 5100 0.0031218351 -4.7142847 4.3294152e-06 -1.5226843e-05 3.037912e-05 9.4285714 - 5200 0.0031075791 -4.7142824 6.2396634e-06 -1.026582e-06 2.8474574e-05 9.4285714 - 5300 0.0030971804 -4.714278 5.7184274e-06 2.7343244e-06 2.1969834e-05 9.4285714 - 5400 0.0032655886 -4.714285 6.4600436e-06 6.366647e-06 2.7999963e-05 9.4285714 - 5500 0.0033078344 -4.7142841 7.9290988e-06 1.2254361e-05 3.9482333e-05 9.4285714 - 5600 0.0032364471 -4.7142798 6.1234404e-06 4.9884485e-06 2.363239e-05 9.4285714 - 5700 0.0033181477 -4.7142846 6.386863e-06 7.6799651e-06 2.444522e-05 9.4285714 - 5800 0.0033361278 -4.7142841 9.3031619e-06 1.3982741e-05 3.4805953e-05 9.4285714 - 5900 0.0033067687 -4.7142831 5.4827276e-06 4.141946e-06 2.7482332e-05 9.4285714 - 6000 0.0027689817 -4.7142794 -7.4605788e-06 -8.0999927e-06 1.4793631e-05 9.4285714 - 6100 0.0026613204 -4.7142826 -1.2246381e-05 -1.2089415e-05 1.5993189e-05 9.4285714 - 6200 0.0026407622 -4.7142625 1.2228456e-05 1.4925079e-05 3.1009041e-05 9.4285714 - 6300 0.0025129843 -4.7142773 -1.7041068e-05 -1.0967132e-05 2.3688216e-05 9.4285714 - 6400 0.0034367476 -4.7142804 -1.5599931e-05 -2.5715524e-05 1.1133846e-05 9.4285714 - 6500 0.0039526936 -4.7142767 1.9551919e-05 1.6372803e-05 2.995376e-05 9.4285714 - 6600 0.0039178785 -4.7142686 9.6832405e-06 2.2172442e-05 3.0932177e-05 9.4285714 - 6700 0.00381646 -4.714273 -2.7077443e-07 5.6194835e-06 2.0136301e-05 9.4285714 - 6800 0.0038317282 -4.7142761 3.1330438e-05 1.9879281e-05 4.1770652e-05 9.4285714 - 6900 0.0036860192 -4.7142791 1.3672502e-05 -2.315116e-06 4.0287029e-05 9.4285714 - 7000 0.0031397302 -4.7142682 6.1230533e-06 -3.634782e-05 2.0113033e-05 9.4285714 - 7100 0.0031062646 -4.7142578 9.7891866e-06 -1.1903464e-05 3.8487858e-05 9.4285714 - 7200 0.0035310624 -4.7142779 2.1104359e-05 -1.4279228e-05 5.0866682e-05 9.4285714 - 7300 0.0037256457 -4.714283 3.209857e-05 5.3366904e-06 4.9924463e-05 9.4285714 - 7400 0.0036183763 -4.714269 -2.9036232e-06 1.8212626e-05 3.5625423e-05 9.4285714 - 7500 0.0037194131 -4.714276 3.5400579e-06 6.0425587e-06 3.3391206e-05 9.4285714 - 7600 0.0034998963 -4.714285 2.0840607e-05 2.0232103e-05 4.2628317e-05 9.4285714 - 7700 0.0034901962 -4.7142769 1.1001749e-05 1.8069835e-05 3.6347915e-05 9.4285714 - 7800 0.0036523545 -4.7142779 3.3425415e-06 1.0599205e-05 3.4510975e-05 9.4285714 - 7900 0.0040250594 -4.7142817 4.059014e-06 1.8176788e-05 3.2156906e-05 9.4285714 - 8000 0.0044512121 -4.7142811 2.8026081e-05 1.583968e-05 3.5880238e-05 9.4285714 - 8100 0.0049660908 -4.7142813 2.6616418e-05 1.1210326e-05 3.3793064e-05 9.4285714 - 8200 0.0051394397 -4.7142785 2.5104155e-05 -3.9596979e-06 3.722421e-05 9.4285714 - 8300 0.0050953458 -4.7142772 3.4855062e-05 -4.1583281e-06 3.9814268e-05 9.4285714 - 8400 0.0052765129 -4.7142833 4.1717465e-05 7.8419525e-06 3.5098869e-05 9.4285714 - 8500 0.0053422344 -4.714283 3.5875791e-05 8.7167378e-06 5.6556334e-05 9.4285714 - 8600 0.0051949467 -4.7142757 2.8680914e-05 1.2039892e-05 5.1463281e-05 9.4285714 - 8700 0.0052661124 -4.7142818 3.3742171e-05 1.3900348e-05 3.4296617e-05 9.4285714 - 8800 0.0054374336 -4.714285 3.0744041e-05 8.9686419e-06 6.0174371e-05 9.4285714 - 8900 0.0053756411 -4.7142806 3.2270678e-05 1.4601555e-05 5.4690431e-05 9.4285714 - 9000 0.0053513602 -4.7142825 3.2707594e-05 1.3622959e-05 4.2467194e-05 9.4285714 - 9100 0.0048583462 -4.7142844 3.3544037e-05 1.4560902e-05 5.7876331e-05 9.4285714 - 9200 0.0049036455 -4.7142829 3.7043389e-05 1.8906672e-05 5.4239393e-05 9.4285714 - 9300 0.0048728297 -4.714284 3.0272074e-05 1.0439597e-05 5.8502965e-05 9.4285714 - 9400 0.004695311 -4.7142839 2.6574458e-05 1.8727884e-05 5.7158486e-05 9.4285714 - 9500 0.0046368525 -4.7142821 2.6890322e-05 2.233081e-05 5.7305818e-05 9.4285714 - 9600 0.0045731106 -4.714275 3.376527e-05 1.6278618e-05 7.4839206e-05 9.4285714 - 9700 0.0045210556 -4.7142752 1.6911434e-05 1.5671756e-05 5.5103883e-05 9.4285714 - 9800 0.004669058 -4.7142788 2.1211826e-05 1.754775e-05 5.4285693e-05 9.4285714 - 9900 0.0048475458 -4.7142841 4.1292334e-05 2.3525582e-05 6.7587269e-05 9.4285714 - 10000 0.0047748556 -4.714284 1.8549207e-05 1.024854e-05 5.5518527e-05 9.4285714 - 10100 0.004607819 -4.7142795 1.3431866e-05 4.4653347e-06 5.1605148e-05 9.4285714 - 10200 0.0046058541 -4.7142818 9.3186734e-06 7.8432738e-06 5.8052962e-05 9.4285714 - 10300 0.0045744643 -4.7142845 -1.6192412e-05 -3.1703566e-06 5.7296626e-05 9.4285714 - 10400 0.0042916807 -4.7142768 -4.236192e-05 1.7976385e-05 5.76178e-05 9.4285714 - 10500 0.0043073933 -4.7142753 -4.0059842e-05 1.0921413e-05 5.6207624e-05 9.4285714 - 10600 0.0045612673 -4.7142821 1.0170099e-05 2.331982e-05 4.8364557e-05 9.4285714 - 10700 0.0054866392 -4.7142815 2.2257739e-05 7.2976211e-05 6.560597e-05 9.4285714 - 10800 0.0058051726 -4.7142773 8.8744762e-06 2.5329518e-05 7.1155805e-05 9.4285714 - 10900 0.0057009262 -4.714281 1.0142709e-05 2.1247162e-05 6.298131e-05 9.4285714 - 11000 0.0057842643 -4.714283 1.391631e-05 7.0910303e-05 7.4720703e-05 9.4285714 - 11100 0.0057980972 -4.7142798 1.6509238e-05 4.6643484e-05 7.0715006e-05 9.4285714 - 11200 0.0057183542 -4.7142743 1.5309415e-05 3.805824e-05 6.9294024e-05 9.4285714 - 11300 0.0054292945 -4.7142815 9.5894752e-06 3.546016e-05 4.2324372e-05 9.4285714 - 11400 0.0052373967 -4.7142793 1.1355496e-05 3.836308e-06 1.0078659e-05 9.4285714 - 11500 0.0053496759 -4.7142584 1.2217701e-05 5.2477138e-05 7.1219435e-05 9.4285714 - 11600 0.0054219323 -4.7142776 1.209997e-05 5.5427326e-05 6.361181e-05 9.4285714 - 11700 0.0054476705 -4.7142841 7.7643649e-06 2.0350139e-05 5.1808602e-05 9.4285714 - 11800 0.0051968972 -4.7142775 1.3078814e-05 4.9366102e-05 5.3887386e-05 9.4285714 - 11900 0.0050226144 -4.7142762 1.022748e-05 -9.3277927e-07 5.2839528e-05 9.4285714 - 12000 0.0051468502 -4.7142786 8.1695713e-06 2.5695194e-05 5.2808343e-05 9.4285714 - 12100 0.0048714487 -4.7142831 1.1192092e-05 5.8121129e-05 4.0491175e-05 9.4285714 - 12200 0.0048727463 -4.714281 9.5527097e-06 2.4531028e-05 5.3861009e-05 9.4285714 - 12300 0.0048677682 -4.7142745 1.5986509e-05 4.2562572e-05 6.8718914e-05 9.4285714 - 12400 0.0050652333 -4.714284 1.3602349e-05 6.718973e-05 5.5249685e-05 9.4285714 - 12500 0.0050841332 -4.7142842 2.5307064e-05 5.5840292e-05 8.0668188e-05 9.4285714 - 12600 0.0047212717 -4.7142811 1.4622117e-05 2.1694817e-05 5.1597662e-05 9.4285714 - 12700 0.0042675085 -4.7142798 -8.883711e-06 -3.3482335e-05 2.6280041e-05 9.4285714 - 12800 0.0043068913 -4.7142813 2.203984e-05 1.7751116e-05 8.5428604e-05 9.4285714 - 12900 0.0042641798 -4.7142768 3.5402247e-05 5.043008e-05 7.2889153e-05 9.4285714 - 13000 0.004115505 -4.7142793 -5.6465558e-06 2.704517e-05 3.5342748e-05 9.4285714 - 13100 0.0041665721 -4.7142794 2.3933885e-05 2.8848877e-05 -5.878205e-06 9.4285714 - 13200 0.0041738593 -4.7142813 2.967576e-05 3.6377865e-05 2.7985848e-05 9.4285714 - 13300 0.0042583152 -4.7142821 1.0917336e-05 2.6345256e-05 5.201179e-05 9.4285714 - 13400 0.0042690979 -4.7142768 1.9938874e-05 3.4580763e-05 5.692194e-05 9.4285714 - 13500 0.0043443987 -4.7142829 6.3848177e-06 4.2214607e-05 9.9667904e-05 9.4285714 - 13600 0.0039435204 -4.7142828 3.1227709e-05 7.4517788e-06 7.119048e-05 9.4285714 - 13700 0.0035798612 -4.7142655 2.8503134e-05 9.0281553e-06 3.856119e-05 9.4285714 - 13800 0.0038259598 -4.714251 -4.1095874e-06 1.0604198e-05 4.6382375e-05 9.4285714 - 13900 0.0041863923 -4.7142604 3.7109027e-05 9.4562422e-06 6.6705568e-05 9.4285714 - 14000 0.0048136864 -4.7142843 3.955162e-05 4.7195598e-05 6.4860798e-05 9.4285714 - 14100 0.0047855362 -4.7142783 2.3925039e-05 4.2311403e-05 7.0388388e-05 9.4285714 - 14200 0.0046304353 -4.7142637 3.0826655e-05 4.160884e-05 6.3336345e-05 9.4285714 - 14300 0.0048180942 -4.7142794 2.7923714e-05 3.9069628e-05 6.0256985e-05 9.4285714 - 14400 0.0049176536 -4.7142822 4.4432245e-05 5.0881492e-05 7.9720745e-05 9.4285714 - 14500 0.0048369572 -4.7142805 3.6700439e-05 4.5648908e-05 6.7882029e-05 9.4285714 - 14600 0.004748273 -4.7142767 1.7350598e-05 3.4347128e-05 6.239678e-05 9.4285714 - 14700 0.0047523428 -4.7142753 3.6350522e-05 4.0389958e-05 6.5314142e-05 9.4285714 - 14800 0.0045197221 -4.7142808 3.954212e-05 4.7289855e-05 7.8265961e-05 9.4285714 - 14900 0.0040736002 -4.7142707 2.6277456e-05 5.8765446e-07 7.3462619e-05 9.4285714 - 15000 0.0040273962 -4.7142587 2.3488124e-05 -3.0315146e-06 5.1210568e-05 9.4285714 - 15100 0.0042753796 -4.7142724 2.0011495e-05 5.0182014e-05 7.8578926e-05 9.4285714 - 15200 0.0049225323 -4.7142803 6.2130422e-05 3.0587976e-05 9.2876858e-05 9.4285714 - 15300 0.0050318348 -4.7142682 4.3973037e-05 2.019748e-05 6.5105276e-05 9.4285714 - 15400 0.0051120536 -4.7142698 4.2494018e-05 2.5627284e-05 9.5301829e-05 9.4285714 - 15500 0.0053207781 -4.7142812 6.7664456e-05 3.5141602e-05 8.8309309e-05 9.4285714 - 15600 0.005293582 -4.7142818 6.7400773e-05 3.721021e-05 8.38008e-05 9.4285714 - 15700 0.0050946068 -4.7142745 3.8999283e-05 2.379051e-05 9.3280853e-05 9.4285714 - 15800 0.0051580439 -4.7142805 4.4758499e-05 2.1718368e-05 6.9739549e-05 9.4285714 - 15900 0.0049767732 -4.7142814 6.2228722e-05 2.2014722e-05 8.9513151e-05 9.4285714 - 16000 0.0047976208 -4.7142791 3.7394549e-05 2.5834739e-05 7.246238e-05 9.4285714 - 16100 0.0045923945 -4.7142692 6.2030899e-05 2.6444418e-05 6.4534889e-05 9.4285714 - 16200 0.0046918948 -4.714276 6.5106723e-05 2.1993576e-05 8.6979154e-05 9.4285714 - 16300 0.0048586219 -4.7142811 4.358005e-05 3.3873352e-05 6.6312622e-05 9.4285714 - 16400 0.0045897569 -4.7142781 5.7502612e-05 3.3279368e-05 8.3391302e-05 9.4285714 - 16500 0.0045256391 -4.7142783 3.2746026e-05 1.651973e-05 7.1351015e-05 9.4285714 - 16600 0.0042464205 -4.7142765 5.8682379e-05 1.0077021e-06 6.8327201e-05 9.4285714 - 16700 0.0041670304 -4.7142755 5.7066092e-05 3.6833707e-05 4.5806783e-05 9.4285714 - 16800 0.0042144967 -4.714277 6.8927591e-05 2.9260513e-05 5.7005856e-05 9.4285714 - 16900 0.0042354962 -4.7142753 7.6245331e-05 2.3551827e-06 7.9522994e-05 9.4285714 - 17000 0.0043689146 -4.7142773 4.8522901e-05 1.3460475e-05 4.4744287e-05 9.4285714 - 17100 0.0043626594 -4.71428 2.7962223e-05 -3.2439675e-05 6.2331938e-05 9.4285714 - 17200 0.0043193718 -4.714277 1.5338188e-05 -3.4456276e-05 3.9732476e-05 9.4285714 - 17300 0.0043545657 -4.7142639 4.6810884e-05 1.1882665e-05 4.7903825e-05 9.4285714 - 17400 0.004407318 -4.7142675 4.6665325e-05 6.2862841e-05 6.1079437e-05 9.4285714 - 17500 0.0047322304 -4.7142807 6.7216967e-05 4.2909797e-05 5.5328869e-05 9.4285714 - 17600 0.0045864683 -4.7142798 8.071462e-05 6.134346e-05 7.0790924e-05 9.4285714 - 17700 0.0043299704 -4.7142742 1.9793903e-05 4.6606138e-05 4.5705282e-05 9.4285714 - 17800 0.0043786073 -4.7142787 4.3956203e-05 2.1763527e-05 3.7119067e-05 9.4285714 - 17900 0.0044120236 -4.7142817 7.0249694e-05 7.5100161e-05 6.6748598e-05 9.4285714 - 18000 0.0041959005 -4.7142755 2.3128343e-05 5.4018284e-05 5.8999433e-05 9.4285714 - 18100 0.0034544232 -4.7142721 1.7391126e-05 2.4815145e-05 6.7493902e-05 9.4285714 - 18200 0.0034583247 -4.7142767 1.9580653e-05 5.0168254e-05 3.8599969e-05 9.4285714 - 18300 0.0036769652 -4.7142812 3.1999935e-05 4.626352e-05 3.6820432e-05 9.4285714 - 18400 0.003542457 -4.7142799 4.96431e-05 2.5172922e-05 5.3111097e-05 9.4285714 - 18500 0.0034434392 -4.7142764 1.4234643e-05 3.8687269e-05 1.952651e-06 9.4285714 - 18600 0.0035112886 -4.7142757 2.3701022e-05 3.7405649e-05 3.9268284e-05 9.4285714 - 18700 0.0035441894 -4.7142759 4.5523843e-05 5.0096854e-05 7.8557351e-05 9.4285714 - 18800 0.0034522581 -4.7142807 1.9172827e-05 4.1369571e-05 3.5306122e-05 9.4285714 - 18900 0.0033330564 -4.7142759 2.6222336e-05 1.6111907e-05 4.3437486e-05 9.4285714 - 19000 0.0034602509 -4.7142777 3.9354073e-05 4.7635319e-05 5.321042e-05 9.4285714 - 19100 0.0035373952 -4.7142827 2.149967e-05 5.7529336e-05 5.4662962e-05 9.4285714 - 19200 0.0031974269 -4.7142795 4.6521393e-06 1.3385357e-05 6.2178217e-05 9.4285714 - 19300 0.0027305756 -4.7142781 2.4635662e-06 -6.5118569e-07 4.9518368e-05 9.4285714 - 19400 0.0029207784 -4.7142775 -8.0421471e-06 2.5186899e-05 5.068164e-05 9.4285714 - 19500 0.0030859179 -4.7142753 5.4212731e-05 3.2771826e-05 6.8624416e-05 9.4285714 - 19600 0.0029520352 -4.7142823 1.8998847e-05 3.1417972e-05 6.3433962e-05 9.4285714 - 19700 0.0029232933 -4.714282 2.9106866e-05 2.6763373e-05 5.1690381e-05 9.4285714 - 19800 0.0029362558 -4.7142801 4.9086206e-05 4.1563066e-05 5.6566562e-05 9.4285714 - 19900 0.0029590979 -4.7142823 2.1729461e-06 3.6336745e-05 6.063653e-05 9.4285714 - 20000 0.0029737109 -4.7142835 4.7984894e-05 2.8608401e-05 6.5087684e-05 9.4285714 - 20100 0.0029124921 -4.7142825 4.3292067e-05 3.3551479e-05 5.4062394e-05 9.4285714 - 20200 0.0028933318 -4.7142815 7.4943307e-06 3.3595541e-05 6.1416099e-05 9.4285714 - 20300 0.0029129466 -4.7142819 3.7458402e-05 4.3567905e-05 7.6913433e-05 9.4285714 - 20400 0.0028983167 -4.7142818 2.9674595e-05 2.8173485e-05 6.116006e-05 9.4285714 - 20500 0.0028459511 -4.7142834 2.3328156e-05 -1.7229926e-06 5.8656938e-05 9.4285714 - 20600 0.0028751302 -4.7142822 3.1074779e-05 1.8736637e-05 6.9578993e-05 9.4285714 - 20700 0.002912501 -4.7142815 2.1939627e-05 3.5323362e-05 6.5913158e-05 9.4285714 - 20800 0.0029477103 -4.714284 3.3392853e-05 2.1554741e-05 6.1003016e-05 9.4285714 - 20900 0.0029066998 -4.7142839 3.5066527e-05 3.9798806e-05 6.0715847e-05 9.4285714 - 21000 0.0028720361 -4.7142818 1.299136e-05 3.8575051e-05 6.3982307e-05 9.4285714 - 21100 0.0028631244 -4.7142836 1.2940523e-05 1.5176819e-05 6.8206902e-05 9.4285714 - 21200 0.0030751291 -4.7142825 2.7942565e-05 3.0293027e-05 5.353623e-05 9.4285714 - 21300 0.0031225596 -4.7142824 3.1264357e-05 3.5236412e-05 5.815032e-05 9.4285714 - 21400 0.0032060457 -4.7142831 3.0198813e-05 3.4004434e-05 7.9522139e-05 9.4285714 - 21500 0.0032314386 -4.7142837 4.2168756e-05 4.2748112e-05 7.3721407e-05 9.4285714 - 21600 0.0032381818 -4.7142841 4.3007552e-05 3.1045264e-05 6.4676682e-05 9.4285714 - 21700 0.003191823 -4.7142844 2.9358292e-05 3.0811279e-05 6.2153923e-05 9.4285714 - 21800 0.0031599553 -4.7142834 3.3291992e-05 3.4104204e-05 7.0812317e-05 9.4285714 - 21900 0.0030277794 -4.7142814 3.2809732e-05 2.9278292e-05 5.5900196e-05 9.4285714 - 22000 0.002992521 -4.714281 3.0857187e-05 3.4566662e-05 4.266216e-05 9.4285714 - 22100 0.0029952499 -4.7142811 5.0522009e-05 3.7581727e-05 7.8085708e-05 9.4285714 - 22200 0.0030054809 -4.7142833 3.9474037e-05 3.5047639e-05 7.7641919e-05 9.4285714 - 22300 0.0028928883 -4.7142806 3.4705229e-05 3.6401017e-05 6.8793827e-05 9.4285714 - 22400 0.0029681852 -4.714281 3.932701e-05 3.7633139e-05 6.6542066e-05 9.4285714 - 22500 0.0030011148 -4.7142828 3.2892224e-05 3.6494394e-05 7.5573152e-05 9.4285714 - 22600 0.0027783154 -4.7142807 4.0444718e-05 2.3277662e-05 6.2547993e-05 9.4285714 - 22700 0.0027124275 -4.7142795 3.3266655e-05 2.1915817e-05 4.1423897e-05 9.4285714 - 22800 0.0026798805 -4.7142803 2.5711421e-05 2.3653033e-05 8.4468009e-05 9.4285714 - 22900 0.0026860018 -4.7142827 3.2749424e-05 2.5990453e-05 5.4254077e-05 9.4285714 - 23000 0.0025151181 -4.7142817 2.0931812e-05 1.2682344e-05 5.595496e-05 9.4285714 - 23100 0.0025681365 -4.7142821 1.2919397e-05 1.5309647e-05 6.7663059e-05 9.4285714 - 23200 0.0026138217 -4.7142844 2.9198308e-05 8.9145293e-06 4.5927536e-05 9.4285714 - 23300 0.0025538605 -4.7142825 1.5601701e-05 2.5666261e-06 5.9681871e-05 9.4285714 - 23400 0.0025780035 -4.7142831 1.5531381e-05 1.6262089e-05 4.8391933e-05 9.4285714 - 23500 0.0026290842 -4.7142841 4.0007382e-05 1.9358699e-05 5.6391547e-05 9.4285714 - 23600 0.0026374898 -4.7142837 4.2415924e-05 2.6680034e-05 7.8943366e-05 9.4285714 - 23700 0.0026600397 -4.7142848 3.1274054e-05 2.2858836e-05 5.5844499e-05 9.4285714 - 23800 0.0026286487 -4.7142843 3.134401e-05 1.673325e-05 6.7045383e-05 9.4285714 - 23900 0.0025976907 -4.7142836 1.1211156e-05 1.4847731e-05 7.4660624e-05 9.4285714 - 24000 0.0026608146 -4.7142848 3.4603723e-05 1.6499341e-05 7.2216335e-05 9.4285714 - 24100 0.0025633506 -4.7142845 3.867442e-05 1.8925086e-05 6.9530966e-05 9.4285714 - 24200 0.0024959363 -4.7142826 5.2079204e-06 1.0677147e-05 6.603799e-05 9.4285714 - 24300 0.0025191041 -4.714284 3.0854418e-05 1.4458004e-05 6.5175572e-05 9.4285714 - 24400 0.0025404144 -4.7142826 1.3366155e-05 -4.7869877e-06 4.6604495e-05 9.4285714 - 24500 0.0025477199 -4.7142819 1.1761444e-05 7.3869528e-06 7.5972407e-05 9.4285714 - 24600 0.0025244957 -4.7142816 2.8340904e-05 1.5797684e-05 6.745716e-05 9.4285714 - 24700 0.0025185405 -4.7142829 6.3525812e-06 -1.861306e-06 3.7757722e-05 9.4285714 - 24800 0.0026096035 -4.7142839 5.3593865e-06 2.4075645e-05 6.1381074e-05 9.4285714 - 24900 0.0026941689 -4.714282 4.4823733e-05 1.0968127e-05 4.7995958e-05 9.4285714 - 25000 0.0028612504 -4.7142813 3.1779718e-05 4.6401335e-06 5.9636383e-05 9.4285714 - 25100 0.0029181859 -4.7142834 3.4700092e-05 2.940514e-05 3.1353865e-05 9.4285714 - 25200 0.0029224272 -4.7142826 9.1589943e-05 1.8532249e-05 7.721286e-05 9.4285714 - 25300 0.002896007 -4.7142825 5.4987938e-05 2.1036261e-05 6.1020184e-05 9.4285714 - 25400 0.0028840407 -4.7142828 5.2461637e-05 2.2639868e-05 3.9655802e-05 9.4285714 - 25500 0.0028947555 -4.7142823 6.0070762e-05 1.4897035e-05 8.1181913e-05 9.4285714 - 25600 0.0027503944 -4.7142838 5.382631e-05 1.7016987e-05 3.6531721e-05 9.4285714 - 25700 0.0026220358 -4.7142836 3.6259657e-05 7.8097408e-06 -7.743362e-06 9.4285714 - 25800 0.0025995028 -4.7142824 4.5919012e-05 1.8985254e-05 2.1266372e-05 9.4285714 - 25900 0.0026400508 -4.7142834 7.8221551e-05 2.1685052e-05 3.375709e-06 9.4285714 - 26000 0.0026732923 -4.7142842 4.2424928e-05 1.4779009e-05 4.7297805e-05 9.4285714 - 26100 0.0026767819 -4.7142836 7.0730603e-05 1.9979803e-05 6.8708873e-05 9.4285714 - 26200 0.002650245 -4.7142843 6.0850536e-05 1.6042762e-05 4.4384559e-05 9.4285714 - 26300 0.0025062537 -4.7142839 1.4572509e-05 7.9903454e-06 5.184762e-05 9.4285714 - 26400 0.0024172951 -4.7142831 6.1665145e-05 4.9829603e-06 5.0750958e-05 9.4285714 - 26500 0.0023386008 -4.7142839 4.1311309e-05 1.6532049e-05 6.4687303e-05 9.4285714 - 26600 0.0023151314 -4.7142829 2.8226825e-05 9.0988804e-06 5.6839283e-05 9.4285714 - 26700 0.0023872935 -4.7142831 4.738766e-05 2.87305e-05 8.4124285e-05 9.4285714 - 26800 0.0024275675 -4.7142842 4.1135282e-05 2.8283742e-05 8.1646594e-05 9.4285714 - 26900 0.0020975864 -4.714275 2.6836629e-05 1.645633e-05 6.2255043e-05 9.4285714 - 27000 0.0020402023 -4.7142818 1.8310395e-05 8.992553e-06 4.3117342e-05 9.4285714 - 27100 0.0021349194 -4.7142824 2.0107723e-05 2.0222274e-05 6.3805186e-05 9.4285714 - 27200 0.0023583687 -4.7142804 4.0475906e-05 2.7939063e-05 7.4028577e-05 9.4285714 - 27300 0.0025352287 -4.7142774 4.2897099e-05 2.978683e-05 5.1518492e-05 9.4285714 - 27400 0.0028050653 -4.7142818 3.6391121e-05 3.8847268e-05 8.1460126e-05 9.4285714 - 27500 0.0028863158 -4.7142832 5.2601052e-05 4.0863801e-05 8.7762512e-05 9.4285714 - 27600 0.0028308376 -4.7142819 4.7296005e-05 4.3501715e-05 6.6548716e-05 9.4285714 - 27700 0.0027984116 -4.7142811 2.9571674e-05 3.2909608e-05 5.0440713e-05 9.4285714 - 27800 0.0028443021 -4.7142838 3.7690095e-05 3.0629256e-05 7.6163383e-05 9.4285714 - 27900 0.00284377 -4.7142843 3.5741455e-05 3.3311851e-05 7.6325626e-05 9.4285714 - 28000 0.0028100241 -4.714283 2.871843e-05 3.3668529e-05 5.0680812e-05 9.4285714 - 28100 0.0027775459 -4.7142823 3.9667012e-05 4.1705107e-05 6.036307e-05 9.4285714 - 28200 0.0028012784 -4.7142842 3.8156857e-05 3.816107e-05 6.6808076e-05 9.4285714 - 28300 0.002502375 -4.7142826 7.9398404e-06 1.8421485e-05 6.8121847e-05 9.4285714 - 28400 0.0023868548 -4.7142792 2.1732644e-05 5.1673961e-05 5.472121e-05 9.4285714 - 28500 0.0023877437 -4.7142788 2.7548393e-05 4.6161956e-05 7.2252138e-05 9.4285714 - 28600 0.0024451809 -4.7142815 1.6230163e-05 2.9597851e-05 6.8265446e-05 9.4285714 - 28700 0.0027979284 -4.7142831 1.9506346e-05 5.0386331e-05 5.6085779e-05 9.4285714 - 28800 0.003009447 -4.7142775 4.8258711e-05 6.3218653e-05 6.934896e-05 9.4285714 - 28900 0.0030828448 -4.7142827 3.5946746e-05 4.9162887e-05 5.8028208e-05 9.4285714 - 29000 0.0031005706 -4.7142842 3.1476476e-05 6.9185234e-05 8.8534963e-05 9.4285714 - 29100 0.003061663 -4.7142825 4.6087127e-05 7.749818e-05 5.7869214e-05 9.4285714 - 29200 0.0030582507 -4.7142832 3.3694132e-05 4.7958517e-05 6.2421415e-05 9.4285714 - 29300 0.0029543259 -4.7142808 3.1011808e-05 7.0670305e-05 8.8289008e-05 9.4285714 - 29400 0.0028586151 -4.7142752 3.5326543e-05 7.1883576e-05 0.00011274673 9.4285714 - 29500 0.0027931723 -4.7142697 2.0496543e-05 6.5564361e-08 9.504846e-05 9.4285714 - 29600 0.0027116711 -4.7142792 1.5446304e-05 -2.530487e-05 6.4204764e-05 9.4285714 - 29700 0.0027519538 -4.7142806 3.1467228e-05 3.8772121e-05 0.00011463793 9.4285714 - 29800 0.002802004 -4.7142796 2.0539135e-05 4.1810858e-05 0.0001022407 9.4285714 - 29900 0.0027921232 -4.7142775 2.9673597e-05 4.0325534e-05 9.264009e-05 9.4285714 - 30000 0.0027309729 -4.7142797 4.152538e-05 5.5912151e-05 8.414807e-05 9.4285714 - 30100 0.0028440623 -4.714283 -6.2560053e-07 2.7300419e-05 7.5487323e-05 9.4285714 - 30200 0.0031114091 -4.714279 5.7769758e-05 3.2816731e-05 9.3038434e-05 9.4285714 - 30300 0.0030967216 -4.7142777 4.2053562e-05 3.3595539e-05 8.9149665e-05 9.4285714 - 30400 0.003136759 -4.7142829 4.8148157e-06 1.2989104e-05 0.00010526859 9.4285714 - 30500 0.0031681914 -4.7142824 5.7738657e-05 3.0146395e-05 0.00013409568 9.4285714 - 30600 0.003185083 -4.7142802 5.5516857e-05 4.3949172e-05 6.7520541e-05 9.4285714 - 30700 0.0031962787 -4.7142803 5.9678032e-05 4.7772498e-05 6.6299764e-05 9.4285714 - 30800 0.0031573709 -4.7142829 6.7771329e-05 4.8345321e-05 9.5254522e-05 9.4285714 - 30900 0.0031540974 -4.7142832 4.9181662e-05 2.9425984e-05 6.1685621e-05 9.4285714 - 31000 0.0031023807 -4.7142808 6.3802037e-05 4.5171377e-05 8.5650305e-05 9.4285714 - 31100 0.003050491 -4.7142815 5.3448201e-05 2.9535474e-05 9.2083422e-05 9.4285714 - 31200 0.0028462626 -4.7142819 2.1997466e-05 3.7212604e-06 6.1538569e-05 9.4285714 - 31300 0.0026361131 -4.7142728 3.8495549e-05 3.4255075e-05 5.9684116e-05 9.4285714 - 31400 0.0024398662 -4.7142283 4.5354411e-05 1.7503834e-05 7.3393371e-05 9.4285714 - 31500 0.0023575511 -4.7142271 1.6654731e-05 1.1752412e-05 6.4901081e-05 9.4285714 - 31600 0.0024828741 -4.7142687 2.2864038e-05 1.1507713e-05 5.4631888e-05 9.4285714 - 31700 0.0026535335 -4.7142802 2.3106661e-05 9.3638517e-06 7.5698037e-05 9.4285714 - 31800 0.0028100049 -4.7142835 1.6600484e-05 3.3168141e-05 6.5518256e-05 9.4285714 - 31900 0.0027556447 -4.7142806 3.8406344e-05 3.263271e-05 5.3054876e-05 9.4285714 - 32000 0.0026748424 -4.714281 4.41324e-05 1.8897102e-05 5.1821768e-05 9.4285714 - 32100 0.0026090836 -4.714283 4.1900487e-05 2.1110951e-05 1.8521323e-05 9.4285714 - 32200 0.0024109991 -4.714283 -1.321517e-05 2.1620678e-06 1.5338728e-05 9.4285714 - 32300 0.0023139624 -4.7142817 2.8549202e-06 3.0807691e-05 6.2846029e-05 9.4285714 - 32400 0.0023065246 -4.7142787 6.1050102e-06 2.7023287e-05 5.793899e-05 9.4285714 - 32500 0.0023303104 -4.7142812 2.2984319e-05 1.979181e-05 3.6783994e-05 9.4285714 - 32600 0.0023697804 -4.7142826 5.3709627e-05 5.195328e-05 0.00010240312 9.4285714 - 32700 0.0023747324 -4.7142818 3.4441081e-05 3.3381035e-05 5.7702411e-05 9.4285714 - 32800 0.0023469734 -4.7142827 2.1058788e-05 2.0210891e-05 4.866378e-05 9.4285714 - 32900 0.0023692101 -4.7142843 3.505222e-05 3.693323e-05 8.8776465e-05 9.4285714 - 33000 0.0023269079 -4.7142842 5.2006631e-05 4.2858249e-05 1.2173041e-05 9.4285714 - 33100 0.0022536897 -4.7142832 3.3447444e-05 2.7888763e-05 5.7406933e-05 9.4285714 - 33200 0.0022884991 -4.7142831 3.11584e-05 2.8785623e-05 7.0736425e-05 9.4285714 - 33300 0.0022872148 -4.7142837 4.7302143e-05 3.4825585e-05 3.908954e-05 9.4285714 - 33400 0.0021441208 -4.7142832 3.4956123e-05 2.0137529e-05 7.3621795e-05 9.4285714 - 33500 0.0021250759 -4.7142791 2.7860008e-05 3.1096735e-05 8.6989863e-05 9.4285714 - 33600 0.0020144547 -4.7142758 8.9491543e-06 3.0873393e-06 3.5821372e-05 9.4285714 - 33700 0.0019601325 -4.714282 -3.1961693e-05 2.8309268e-06 2.7474911e-05 9.4285714 - 33800 0.0019781964 -4.7142836 -1.6432954e-05 4.5532318e-05 5.6180871e-05 9.4285714 - 33900 0.0019362184 -4.7142802 4.4876558e-05 3.5607305e-05 5.5256986e-05 9.4285714 - 34000 0.0018925936 -4.7142772 2.6126162e-05 4.0727261e-05 4.4072383e-05 9.4285714 - 34100 0.0019612538 -4.7142817 1.9711423e-05 3.5292876e-05 5.208739e-05 9.4285714 - 34200 0.0018786841 -4.714283 5.9452613e-05 2.2750167e-05 6.0041189e-05 9.4285714 - 34300 0.0016921132 -4.7142826 -1.9705284e-05 2.7417698e-06 3.5807778e-05 9.4285714 - 34400 0.0015917931 -4.7142715 -8.2912337e-06 6.0058896e-06 4.3767171e-05 9.4285714 - 34500 0.0016313876 -4.714266 2.680046e-05 3.0445446e-05 5.2729086e-05 9.4285714 - 34600 0.0017598223 -4.7142836 2.6680572e-05 1.2800533e-05 4.0769721e-05 9.4285714 - 34700 0.0017113812 -4.7142782 5.1966667e-05 3.8936233e-05 8.7902817e-05 9.4285714 - 34800 0.0016049388 -4.7142731 1.1306618e-05 8.7073772e-06 4.7122089e-05 9.4285714 - 34900 0.0016955115 -4.7142823 2.1303404e-05 6.8274717e-06 2.244299e-05 9.4285714 - 35000 0.00165119 -4.7142758 4.8047362e-05 4.6052136e-05 0.0001287016 9.4285714 - 35100 0.0015817845 -4.7142805 7.4130076e-06 6.5116689e-06 3.4751007e-05 9.4285714 - 35200 0.0015810133 -4.71428 1.6323213e-05 2.5685469e-05 4.4142256e-05 9.4285714 - 35300 0.0015719448 -4.7142785 4.4351148e-05 3.1396033e-05 0.00010629058 9.4285714 - 35400 0.0015567136 -4.7142819 2.0021454e-05 1.9357793e-05 5.0610549e-05 9.4285714 - 35500 0.0015066735 -4.7142813 3.194888e-05 2.6415958e-05 6.1853881e-05 9.4285714 - 35600 0.0014852521 -4.71428 2.4631682e-05 2.5128929e-05 6.3800433e-05 9.4285714 - 35700 0.0014927124 -4.7142812 1.4434624e-05 2.0514828e-05 5.0086984e-05 9.4285714 - 35800 0.0015122965 -4.7142838 3.9102785e-05 3.0076065e-05 8.8360064e-05 9.4285714 - 35900 0.0014880427 -4.7142829 2.0535252e-05 2.5697467e-05 5.0890428e-05 9.4285714 - 36000 0.0014928641 -4.7142817 3.0167149e-05 2.1444226e-05 4.1207355e-05 9.4285714 - 36100 0.001527336 -4.7142841 2.902147e-05 1.4685093e-05 6.5284342e-05 9.4285714 - 36200 0.0015171821 -4.7142843 8.6980069e-06 1.3248493e-05 3.6676445e-05 9.4285714 - 36300 0.0014568435 -4.7142832 2.4741939e-05 2.2778924e-05 2.3227379e-05 9.4285714 - 36400 0.0014373198 -4.7142833 1.7025491e-05 9.2441442e-06 9.2796272e-06 9.4285714 - 36500 0.0014933797 -4.7142841 2.2436188e-05 2.3634423e-05 4.0115013e-05 9.4285714 - 36600 0.0014790058 -4.7142844 2.7847663e-05 2.3033587e-05 6.0153541e-05 9.4285714 - 36700 0.0014215142 -4.7142831 7.4626544e-06 8.4267558e-06 3.3532356e-05 9.4285714 - 36800 0.0014687242 -4.7142834 3.0609847e-05 2.0091509e-05 3.7453289e-05 9.4285714 - 36900 0.0015197322 -4.7142845 4.1412958e-05 1.768941e-05 6.1647851e-05 9.4285714 - 37000 0.0014718289 -4.7142848 9.2181276e-06 1.7771984e-05 4.241779e-05 9.4285714 - 37100 0.0014397493 -4.7142836 1.0070698e-05 1.7128636e-05 4.2549681e-05 9.4285714 - 37200 0.0014802189 -4.7142842 2.0289418e-05 1.8203382e-05 6.7159826e-05 9.4285714 - 37300 0.0015016643 -4.7142853 2.2894506e-05 2.4626017e-05 6.8449216e-05 9.4285714 - 37400 0.001454552 -4.7142845 3.252577e-05 2.2500138e-05 6.8110196e-05 9.4285714 - 37500 0.0014053533 -4.714284 2.1759203e-05 1.0574981e-05 5.6185641e-05 9.4285714 - 37600 0.0014769453 -4.7142846 3.0404851e-05 1.7089339e-05 6.9727868e-05 9.4285714 - 37700 0.0015739223 -4.7142831 2.1426542e-05 3.42621e-05 7.6366086e-05 9.4285714 - 37800 0.0015866458 -4.7142802 1.3835002e-05 2.9698398e-05 5.349542e-05 9.4285714 - 37900 0.0018060673 -4.714283 2.3290467e-05 4.8866722e-05 5.3624377e-05 9.4285714 - 38000 0.0018698613 -4.7142837 1.9661483e-05 5.0745362e-05 0.00010062119 9.4285714 - 38100 0.001806521 -4.7142829 1.7173185e-05 3.4623595e-05 7.3269368e-05 9.4285714 - 38200 0.0017414785 -4.7142831 2.0149042e-05 4.3263226e-05 4.8223324e-05 9.4285714 - 38300 0.0017862585 -4.7142839 -3.1617028e-06 5.0284194e-05 6.8226326e-05 9.4285714 - 38400 0.0018432124 -4.7142847 1.3383822e-05 4.8708694e-05 7.893613e-05 9.4285714 - 38500 0.0018219565 -4.714284 2.4613434e-05 4.7605171e-05 6.6619238e-05 9.4285714 - 38600 0.0017879667 -4.7142838 8.3985015e-06 4.1358479e-05 5.9213827e-05 9.4285714 - 38700 0.0016645668 -4.7142843 2.0981576e-05 3.5962752e-05 6.9118026e-05 9.4285714 - 38800 0.0015532388 -4.7142823 2.352083e-05 4.823541e-05 8.651807e-05 9.4285714 - 38900 0.0014906945 -4.7142804 1.0611406e-05 2.1329584e-05 5.7515699e-05 9.4285714 - 39000 0.0015434414 -4.7142812 8.5061097e-06 2.0153002e-05 4.9215664e-05 9.4285714 - 39100 0.0015840866 -4.7142841 -3.3923334e-07 1.6268478e-05 5.6133584e-05 9.4285714 - 39200 0.0016466039 -4.7142842 1.1839246e-05 1.4932718e-05 7.5184382e-05 9.4285714 - 39300 0.001662635 -4.7142831 1.7421815e-05 3.0733588e-05 6.3898988e-05 9.4285714 - 39400 0.0016178486 -4.7142823 1.3301052e-05 2.8477132e-05 5.941381e-05 9.4285714 - 39500 0.0016786051 -4.7142845 6.7444487e-06 2.8892101e-05 7.2101782e-05 9.4285714 - 39600 0.0016838866 -4.7142848 2.885404e-05 4.6288447e-05 7.6791053e-05 9.4285714 - 39700 0.0016207991 -4.7142835 1.7857683e-05 3.0894371e-05 6.9699154e-05 9.4285714 - 39800 0.0016261068 -4.7142842 5.3181092e-06 1.8564464e-05 6.4314421e-05 9.4285714 - 39900 0.0016951434 -4.7142852 2.4549529e-05 3.6717866e-05 7.5544172e-05 9.4285714 - 40000 0.0016615493 -4.7142849 2.279282e-05 4.9849117e-05 7.1546959e-05 9.4285714 - 40100 0.0015706688 -4.7142837 1.2404708e-05 2.0497875e-05 3.5648913e-05 9.4285714 - 40200 0.0015895978 -4.7142843 1.5043771e-05 1.875925e-05 4.7159872e-05 9.4285714 - 40300 0.0015929756 -4.714285 1.8443939e-05 3.1342615e-05 8.0865403e-05 9.4285714 - 40400 0.0015188289 -4.7142849 1.3805874e-05 1.4407485e-05 4.5193974e-05 9.4285714 - 40500 0.0014142713 -4.7142838 1.8482317e-06 -1.070707e-05 3.1263445e-05 9.4285714 - 40600 0.0013953814 -4.7142832 -2.3166167e-07 1.6611366e-05 4.4618584e-05 9.4285714 - 40700 0.001415077 -4.7142824 1.8129009e-05 4.5414377e-05 6.4636266e-05 9.4285714 - 40800 0.0014138155 -4.7142837 1.060765e-05 6.4546877e-06 3.4072047e-05 9.4285714 - 40900 0.0014693332 -4.7142835 -1.7784606e-06 1.3961184e-05 6.1557637e-05 9.4285714 - 41000 0.0015736689 -4.7142844 1.8601794e-06 1.8476059e-05 6.1179877e-05 9.4285714 - 41100 0.0016541827 -4.7142842 2.1678758e-05 1.0891839e-05 4.5599878e-05 9.4285714 - 41200 0.0017038452 -4.7142841 1.3231109e-05 2.8759274e-05 9.0053712e-05 9.4285714 - 41300 0.0016644832 -4.714284 1.0713539e-06 -9.1261161e-06 4.8251094e-05 9.4285714 - 41400 0.0016962923 -4.7142837 1.6404025e-05 -3.3298656e-06 6.0616767e-05 9.4285714 - 41500 0.0016885952 -4.7142841 3.7079931e-05 4.8590437e-05 7.2398732e-05 9.4285714 - 41600 0.0016509383 -4.7142843 3.2822352e-05 2.5492134e-05 5.5315007e-05 9.4285714 - 41700 0.0016234839 -4.7142838 1.9340094e-05 9.1999445e-07 5.9365294e-05 9.4285714 - 41800 0.0015943508 -4.7142842 3.6720434e-05 2.6567585e-05 2.5556112e-05 9.4285714 - 41900 0.0015714166 -4.7142843 2.7615414e-05 2.6447346e-05 2.1698634e-05 9.4285714 - 42000 0.0015421224 -4.7142844 1.6764021e-05 6.0391503e-07 4.4529107e-05 9.4285714 - 42100 0.0015071161 -4.7142846 1.6199656e-05 1.3826919e-05 6.1714716e-05 9.4285714 - 42200 0.0015198787 -4.7142846 2.3123818e-05 1.6785097e-05 5.3275617e-05 9.4285714 - 42300 0.0014983415 -4.7142843 3.7692088e-05 1.9658462e-05 3.2518877e-05 9.4285714 - 42400 0.0014071355 -4.7142842 4.1190884e-05 7.2842001e-06 4.1096707e-05 9.4285714 - 42500 0.0013022808 -4.7142837 1.3146116e-05 -1.5421963e-05 2.5801425e-05 9.4285714 - 42600 0.0013470366 -4.7142836 1.3584089e-05 1.9218153e-06 9.6729008e-06 9.4285714 - 42700 0.0013910091 -4.7142849 3.7784878e-05 1.4670527e-05 2.6364864e-05 9.4285714 - 42800 0.0014014966 -4.714285 2.1845518e-05 2.9117451e-05 4.3087627e-05 9.4285714 - 42900 0.0013733676 -4.7142848 1.4001755e-05 1.7988978e-05 3.2280506e-05 9.4285714 - 43000 0.0013517268 -4.7142849 1.4307541e-05 1.7559777e-07 3.4839804e-05 9.4285714 - 43100 0.0013740884 -4.7142851 1.0781187e-05 2.3199114e-05 4.3544073e-05 9.4285714 - 43200 0.0013899917 -4.7142853 1.9752629e-05 1.5754375e-05 4.0495086e-05 9.4285714 - 43300 0.0013591753 -4.714285 1.7097046e-05 1.5458697e-05 4.3522182e-05 9.4285714 - 43400 0.0013610826 -4.714285 9.9700923e-06 2.1966114e-05 3.7559347e-05 9.4285714 - 43500 0.0013931122 -4.7142854 2.0823321e-05 9.7449225e-06 4.7553728e-05 9.4285714 - 43600 0.0014106574 -4.7142852 1.8012822e-05 1.7643108e-05 3.9965229e-05 9.4285714 - 43700 0.0014643496 -4.7142851 1.0503719e-05 1.0375579e-05 2.9638501e-05 9.4285714 - 43800 0.0014941312 -4.7142851 2.1685281e-05 2.3181612e-05 6.4949433e-05 9.4285714 - 43900 0.0015090635 -4.7142853 1.6758041e-05 3.1022306e-05 4.8366553e-05 9.4285714 - 44000 0.00147309 -4.714285 2.2739697e-05 1.8693279e-05 4.0652545e-05 9.4285714 - 44100 0.0014483812 -4.7142847 1.7676479e-05 1.6083745e-05 6.0019861e-05 9.4285714 - 44200 0.0014457794 -4.7142852 1.2765388e-05 1.3464192e-05 4.2906017e-05 9.4285714 - 44300 0.0014371658 -4.7142853 1.1200897e-06 2.3278076e-05 4.086685e-05 9.4285714 - 44400 0.0013803973 -4.7142849 -7.1280222e-06 2.4628501e-05 3.9610367e-05 9.4285714 - 44500 0.0013488729 -4.7142847 4.9719923e-07 1.3646926e-05 3.4823323e-05 9.4285714 - 44600 0.0013656769 -4.7142848 2.4369762e-06 2.3453695e-05 4.1758664e-05 9.4285714 - 44700 0.0013518184 -4.7142848 6.7909288e-06 2.5779362e-05 3.8309701e-05 9.4285714 - 44800 0.0013048932 -4.7142846 2.4879741e-06 2.9653315e-05 4.3656829e-05 9.4285714 - 44900 0.0012854105 -4.7142833 8.7416075e-06 1.682229e-05 1.9921476e-05 9.4285714 - 45000 0.001286558 -4.7142847 1.4303042e-05 1.7290427e-05 3.8131755e-05 9.4285714 - 45100 0.0013592533 -4.7142851 1.2616705e-05 2.4001138e-05 4.5820457e-05 9.4285714 - 45200 0.0014362294 -4.714283 2.1561121e-05 1.8577567e-05 2.1706723e-05 9.4285714 - 45300 0.0015766327 -4.7142832 2.1027604e-05 3.0848781e-05 1.6514286e-05 9.4285714 - 45400 0.001687552 -4.7142845 1.9352364e-05 4.1348267e-05 2.5080527e-05 9.4285714 - 45500 0.0016699457 -4.7142847 1.0615491e-05 1.1413962e-05 6.9101187e-05 9.4285714 - 45600 0.0016172361 -4.7142836 7.0964609e-06 4.821012e-06 2.6760796e-05 9.4285714 - 45700 0.0015761709 -4.7142825 1.4298238e-05 3.51784e-05 1.5636845e-05 9.4285714 - 45800 0.0015925483 -4.7142843 9.3672191e-06 2.8941821e-05 5.6272239e-05 9.4285714 - 45900 0.0015805499 -4.7142847 2.0693446e-05 2.3601313e-05 4.9790055e-05 9.4285714 - 46000 0.0014924043 -4.7142819 3.0482545e-06 2.7482064e-05 5.2242811e-05 9.4285714 - 46100 0.0014461422 -4.7142816 -1.3840829e-06 2.1086859e-05 1.9791507e-05 9.4285714 - 46200 0.0011784526 -4.7142835 1.3993066e-05 1.3269187e-05 5.0583058e-05 9.4285714 - 46300 0.0011606851 -4.7142829 3.6366292e-05 6.5672239e-06 7.5120292e-05 9.4285714 - 46400 0.0011759787 -4.7142801 2.2275954e-05 2.0173532e-05 5.1560571e-05 9.4285714 - 46500 0.0011858836 -4.7142835 2.1223742e-06 1.483095e-06 3.6388044e-05 9.4285714 - 46600 0.0011743104 -4.7142827 2.1646618e-05 -5.4740894e-06 6.2072633e-05 9.4285714 - 46700 0.0012033793 -4.7142843 1.7866294e-05 -5.3760931e-06 4.5468891e-05 9.4285714 - 46800 0.0011942689 -4.7142835 -5.5442881e-06 4.0902609e-06 4.4849969e-05 9.4285714 - 46900 0.0012623727 -4.7142827 1.7020992e-05 1.0229188e-05 5.5659516e-05 9.4285714 - 47000 0.0013644294 -4.7142852 2.381855e-05 9.9614126e-06 6.24726e-05 9.4285714 - 47100 0.0013870071 -4.7142848 8.4784512e-06 -6.915815e-06 5.1797793e-05 9.4285714 - 47200 0.0014203784 -4.7142837 1.5590847e-05 -1.0219736e-07 3.1034433e-05 9.4285714 - 47300 0.001538236 -4.7142848 2.6362645e-05 1.3548787e-05 5.557325e-05 9.4285714 - 47400 0.0015648549 -4.7142843 3.5415707e-05 2.2521363e-06 5.7281834e-05 9.4285714 - 47500 0.001494784 -4.7142832 2.5993648e-05 1.5282594e-06 3.9287268e-05 9.4285714 - 47600 0.0014656893 -4.714279 2.7837149e-05 3.3381636e-05 4.4295836e-05 9.4285714 - 47700 0.0014938875 -4.7142812 3.4246701e-05 2.272226e-05 4.1375306e-05 9.4285714 - 47800 0.001511092 -4.7142849 2.9752157e-05 1.5860227e-05 2.1235494e-05 9.4285714 - 47900 0.001469112 -4.7142836 3.7936135e-05 6.1200092e-05 2.8587372e-05 9.4285714 - 48000 0.0014306661 -4.714282 2.4421246e-05 -1.3535776e-05 3.061047e-05 9.4285714 - 48100 0.0014548885 -4.7142836 2.6735487e-05 -7.3180122e-06 3.3948436e-05 9.4285714 - 48200 0.0015061314 -4.7142829 4.140276e-05 5.1543803e-05 5.1029222e-05 9.4285714 - 48300 0.0015267745 -4.714284 2.037327e-05 -2.5168447e-07 3.499232e-05 9.4285714 - 48400 0.0015440644 -4.7142815 2.0273946e-05 1.439501e-05 2.6023951e-05 9.4285714 - 48500 0.001657659 -4.7142832 3.6933655e-05 3.0213713e-05 4.8179094e-05 9.4285714 - 48600 0.001777997 -4.7142842 4.1509486e-05 2.4145889e-05 4.0406442e-05 9.4285714 - 48700 0.0018122614 -4.7142837 5.0474665e-05 5.009846e-05 3.6128039e-05 9.4285714 - 48800 0.0017357102 -4.7142832 4.1632778e-05 1.8302719e-05 4.4357947e-05 9.4285714 - 48900 0.0017008067 -4.7142792 3.5969083e-05 3.0003211e-05 4.4818722e-05 9.4285714 - 49000 0.0016560566 -4.7142816 3.8378714e-05 3.5773889e-05 6.9904455e-05 9.4285714 - 49100 0.0013858365 -4.7142834 -2.7662832e-05 -1.9017793e-05 2.3310318e-05 9.4285714 - 49200 0.0013029643 -4.7142819 -9.4036627e-06 3.243001e-05 3.4731685e-05 9.4285714 - 49300 0.0014017081 -4.7142819 1.9868651e-05 6.3079574e-06 6.795426e-05 9.4285714 - 49400 0.0014679145 -4.7142832 1.5452213e-05 1.1115231e-05 4.4330358e-05 9.4285714 - 49500 0.0014506585 -4.7142838 3.0950939e-05 5.7847777e-05 4.8499958e-05 9.4285714 - 49600 0.0014570027 -4.7142829 3.7765443e-05 1.655906e-05 4.784843e-05 9.4285714 - 49700 0.0015840061 -4.7142825 2.5088722e-05 2.5801192e-05 4.8215019e-05 9.4285714 - 49800 0.0017175254 -4.7142825 4.4566914e-05 5.0186512e-05 3.7860964e-05 9.4285714 - 49900 0.0015288378 -4.7142821 5.5467128e-06 4.8144498e-05 3.7009159e-05 9.4285714 - 50000 0.0013741478 -4.7142812 3.7298499e-06 5.4006679e-05 6.7840456e-05 9.4285714 - 50100 0.0014577044 -4.7142813 2.392739e-05 3.5823648e-05 8.4679333e-05 9.4285714 - 50200 0.0014533645 -4.7142806 2.6568576e-05 2.8632159e-05 7.3253043e-05 9.4285714 - 50300 0.0014378857 -4.7142796 1.2631564e-05 3.7062154e-05 6.1919405e-05 9.4285714 - 50400 0.0014673626 -4.7142833 3.3476007e-05 3.4512954e-05 5.2231385e-05 9.4285714 - 50500 0.0014389539 -4.7142833 2.6513699e-05 2.5971299e-05 7.7926264e-05 9.4285714 - 50600 0.0013845835 -4.7142818 8.3728219e-06 1.7702343e-05 4.6752162e-05 9.4285714 - 50700 0.0013239108 -4.7142818 3.3435677e-06 2.0150041e-05 4.3728286e-05 9.4285714 - 50800 0.0013271805 -4.714284 8.7252941e-06 2.2918968e-05 6.0498568e-05 9.4285714 - 50900 0.0012488786 -4.7142764 3.1117606e-05 1.4209574e-05 4.1671621e-05 9.4285714 - 51000 0.0012529071 -4.7142804 1.2963298e-05 1.4299315e-05 5.8097821e-05 9.4285714 - 51100 0.001319065 -4.7142826 1.9700618e-05 2.6226178e-06 5.9155615e-05 9.4285714 - 51200 0.0013744785 -4.7142832 3.4998136e-05 3.0473998e-05 6.0861969e-05 9.4285714 - 51300 0.0013161904 -4.7142823 1.2630597e-05 1.861303e-05 7.3073801e-05 9.4285714 - 51400 0.0012815665 -4.7142805 4.3416968e-07 1.3135234e-06 4.9501072e-05 9.4285714 - 51500 0.0013214475 -4.7142836 3.3681889e-05 2.6425866e-05 6.2518922e-05 9.4285714 - 51600 0.0012171442 -4.7142837 3.2027485e-05 9.0591083e-06 5.9418979e-05 9.4285714 - 51700 0.0011790522 -4.7142826 -6.1159994e-06 7.1630124e-07 2.5740297e-05 9.4285714 - 51800 0.0012039843 -4.7142824 1.0995427e-05 2.6054476e-05 5.5748633e-05 9.4285714 - 51900 0.0012565415 -4.7142844 1.9400182e-05 2.5494508e-05 6.1277559e-05 9.4285714 - 52000 0.0012276679 -4.7142844 1.6616787e-05 4.1938123e-05 5.0132658e-05 9.4285714 - 52100 0.0011626948 -4.7142824 -1.0687558e-05 1.1349676e-05 3.6394166e-05 9.4285714 - 52200 0.0011241924 -4.714284 -5.4161964e-05 -2.4459046e-05 1.3186978e-05 9.4285714 - 52300 0.0011578999 -4.7142844 1.200652e-05 2.2111927e-05 6.7993857e-05 9.4285714 - 52400 0.0011557789 -4.7142843 2.4940167e-05 2.9720848e-05 7.358605e-05 9.4285714 - 52500 0.0011161797 -4.7142843 -1.6357992e-05 8.993132e-06 1.7706318e-05 9.4285714 - 52600 0.0010966226 -4.7142829 -1.2988176e-05 3.5093634e-06 6.654378e-05 9.4285714 - 52700 0.0011432225 -4.7142843 -1.6191878e-05 1.9253948e-06 4.8162147e-05 9.4285714 - 52800 0.0011363674 -4.7142848 6.2082109e-06 2.0401562e-05 3.9851134e-05 9.4285714 - 52900 0.0010514167 -4.7142835 -3.8258655e-05 6.8080385e-06 4.2066359e-05 9.4285714 - 53000 0.0011496826 -4.7142835 4.4571341e-06 1.4796753e-05 -3.4246555e-06 9.4285714 - 53100 0.0011921684 -4.7142837 3.344801e-05 2.856294e-05 8.3368759e-05 9.4285714 - 53200 0.0011770058 -4.7142843 -7.3014849e-06 3.3673043e-06 3.8040757e-05 9.4285714 - 53300 0.001147192 -4.714284 2.4343505e-05 6.6428364e-06 1.8856837e-06 9.4285714 - 53400 0.0011590693 -4.7142848 1.6470648e-05 3.0495876e-06 6.9929497e-05 9.4285714 - 53500 0.0011430794 -4.7142846 1.6587072e-05 -6.6680943e-06 2.7910402e-05 9.4285714 - 53600 0.0011087622 -4.7142834 2.5094369e-05 3.0799765e-06 2.4953557e-05 9.4285714 - 53700 0.0011205481 -4.7142845 2.1637477e-05 2.193595e-06 4.7249366e-05 9.4285714 - 53800 0.0011280562 -4.7142848 3.4346512e-05 -4.617164e-07 2.7232129e-05 9.4285714 - 53900 0.0010988683 -4.7142844 2.5923912e-05 -9.9731324e-06 4.1399146e-05 9.4285714 - 54000 0.0010830581 -4.7142845 3.345101e-06 -2.7639517e-05 3.9564896e-05 9.4285714 - 54100 0.0011234194 -4.7142848 1.9740958e-05 -1.2111329e-05 3.2830048e-05 9.4285714 - 54200 0.0011582518 -4.7142845 2.9401158e-05 5.5629213e-06 3.1610007e-05 9.4285714 - 54300 0.0012079798 -4.7142845 1.1797073e-05 -1.0996608e-05 4.1360239e-05 9.4285714 - 54400 0.0012759379 -4.7142845 2.4474721e-05 5.4773406e-06 3.5496741e-05 9.4285714 - 54500 0.0013710939 -4.7142848 2.8767103e-05 2.1233306e-05 5.7305899e-05 9.4285714 - 54600 0.001351372 -4.7142844 2.2558984e-05 1.2286433e-05 5.5134807e-05 9.4285714 - 54700 0.0013179832 -4.7142838 2.6774379e-05 1.4542111e-05 3.9898608e-05 9.4285714 - 54800 0.0013524804 -4.7142847 2.229707e-05 1.4562092e-05 6.2487718e-05 9.4285714 - 54900 0.0013864891 -4.7142852 4.239521e-05 3.3034994e-05 6.5465301e-05 9.4285714 - 55000 0.0013728684 -4.714285 3.4900995e-05 2.8728561e-05 5.1207349e-05 9.4285714 - 55100 0.0013602987 -4.7142847 1.6039517e-05 2.6888845e-05 5.7202129e-05 9.4285714 - 55200 0.0013730674 -4.7142852 3.2011111e-05 4.001012e-05 5.9143948e-05 9.4285714 - 55300 0.0013573904 -4.7142853 2.79438e-05 2.5418155e-05 5.0386473e-05 9.4285714 - 55400 0.0013146923 -4.714285 5.6985755e-06 1.6124421e-05 3.647185e-05 9.4285714 - 55500 0.0012802617 -4.7142849 4.7098361e-06 1.8150458e-05 3.2791104e-05 9.4285714 - 55600 0.0012561881 -4.7142847 6.4880601e-06 1.4866046e-05 4.810369e-05 9.4285714 - 55700 0.0011926069 -4.7142845 5.2020054e-06 1.6988814e-05 4.0673736e-05 9.4285714 - 55800 0.0011078803 -4.7142843 -1.4214396e-05 1.1003816e-05 3.5370009e-05 9.4285714 - 55900 0.0011623337 -4.7142849 -7.961811e-06 9.816216e-06 3.6997949e-05 9.4285714 - 56000 0.0011768674 -4.7142849 3.3611095e-05 2.8961294e-05 5.7414124e-05 9.4285714 - 56100 0.0010918545 -4.7142845 9.6623883e-06 2.6190607e-05 2.5265414e-05 9.4285714 - 56200 0.0010366064 -4.7142833 1.9468714e-05 1.6588408e-05 8.9933949e-06 9.4285714 - 56300 0.0010690499 -4.7142843 2.0757709e-05 2.2349282e-05 3.1730279e-05 9.4285714 - 56400 0.0010922106 -4.7142852 2.2913268e-05 3.2651009e-05 2.4373889e-05 9.4285714 - 56500 0.00097948932 -4.7142845 1.047186e-05 4.5511398e-06 1.4271133e-05 9.4285714 - 56600 0.00083953218 -4.7142838 -5.3166638e-05 -6.071921e-05 8.8415821e-06 9.4285714 - 56700 0.00087323578 -4.714284 -1.04371e-05 -4.6280915e-06 2.0472043e-05 9.4285714 - 56800 0.00088053575 -4.7142838 2.8520329e-05 4.1269508e-05 6.2902721e-05 9.4285714 - 56900 0.00089158441 -4.7142847 7.6734414e-06 2.4539278e-06 1.7166604e-05 9.4285714 - 57000 0.00087273365 -4.7142842 1.0179876e-05 1.4493204e-05 4.1903669e-05 9.4285714 - 57100 0.00096131522 -4.7142844 5.609322e-07 1.1485085e-05 5.772773e-05 9.4285714 - 57200 0.0010539501 -4.7142843 3.6802393e-05 2.945748e-05 3.347874e-05 9.4285714 - 57300 0.0010962451 -4.7142842 -1.3637211e-05 3.3450113e-05 6.1125508e-05 9.4285714 - 57400 0.0010990407 -4.7142841 8.1925364e-06 2.3600052e-05 1.7167437e-05 9.4285714 - 57500 0.001113105 -4.7142847 3.6246911e-05 2.358066e-05 4.2173807e-05 9.4285714 - 57600 0.0011148744 -4.7142851 -4.8216672e-06 3.0665785e-05 6.6024491e-05 9.4285714 - 57700 0.0010722388 -4.7142846 1.7000744e-05 2.688002e-05 2.3075994e-05 9.4285714 - 57800 0.0010623092 -4.7142849 1.3590756e-05 1.6744682e-05 3.8353208e-05 9.4285714 - 57900 0.0010649053 -4.7142853 -3.3010653e-07 2.6373145e-05 2.9983485e-05 9.4285714 - 58000 0.0010495177 -4.7142851 7.6119035e-06 2.1836033e-05 1.265221e-05 9.4285714 - 58100 0.0010307882 -4.7142852 -7.7502389e-06 1.3378696e-05 1.0969839e-05 9.4285714 - 58200 0.0010412592 -4.7142852 4.3928647e-06 3.0416542e-05 1.6769362e-05 9.4285714 - 58300 0.0010229406 -4.7142844 6.529523e-06 2.3200768e-05 2.5072671e-05 9.4285714 - 58400 0.0010260268 -4.7142851 -2.8809788e-06 1.5756224e-05 1.7951865e-05 9.4285714 - 58500 0.0010327233 -4.7142853 1.5652252e-05 2.7587369e-05 2.9959245e-05 9.4285714 - 58600 0.00103292 -4.7142851 -7.8391453e-07 1.2493944e-05 4.0429013e-05 9.4285714 - 58700 0.0010231015 -4.714285 -1.2910372e-05 1.0965102e-05 2.5523576e-05 9.4285714 - 58800 0.0010232909 -4.7142851 -2.3625838e-06 2.5304336e-05 3.4549235e-05 9.4285714 - 58900 0.0010239323 -4.7142853 -1.089027e-05 2.0495207e-05 3.7315687e-05 9.4285714 - 59000 0.001016459 -4.7142853 -1.1354057e-05 1.3532685e-05 3.9797641e-05 9.4285714 - 59100 0.0010036847 -4.7142851 -7.9191139e-06 1.4300652e-05 4.3609301e-05 9.4285714 - 59200 0.0010132328 -4.7142851 -1.1555113e-05 1.5968238e-05 3.5674565e-05 9.4285714 - 59300 0.00099580602 -4.7142855 2.1165333e-06 8.5335199e-06 3.9049778e-05 9.4285714 - 59400 0.00087949872 -4.714285 -3.1482576e-05 -4.8205545e-05 3.9269324e-05 9.4285714 - 59500 0.00081320317 -4.714284 -3.3284401e-05 -3.2799397e-05 3.3461703e-05 9.4285714 - 59600 0.00085690123 -4.7142842 1.9191454e-05 1.6528234e-06 3.40213e-05 9.4285714 - 59700 0.00089260686 -4.7142849 2.9582825e-05 1.6636838e-05 4.3583431e-05 9.4285714 - 59800 0.00089861372 -4.7142851 1.7997571e-05 4.3257201e-06 4.2378883e-05 9.4285714 - 59900 0.00087665775 -4.7142849 1.6192919e-05 -1.4496426e-06 3.5942313e-05 9.4285714 - 60000 0.00089299421 -4.7142851 1.8510939e-05 1.0890382e-05 4.2010858e-05 9.4285714 - 60100 0.00091043761 -4.7142853 3.2870349e-05 1.4301938e-05 5.2194116e-05 9.4285714 - 60200 0.00089398431 -4.7142854 2.5398237e-05 1.0088628e-05 4.7529466e-05 9.4285714 - 60300 0.00086293835 -4.7142848 3.830022e-06 9.7143886e-07 2.9037407e-05 9.4285714 - 60400 0.00087367533 -4.7142851 3.0430953e-05 -2.3380418e-06 4.0623961e-05 9.4285714 - 60500 0.0008996466 -4.7142854 3.7942217e-05 2.39568e-05 5.3475884e-05 9.4285714 - 60600 0.00088006389 -4.7142852 2.0133938e-05 2.3682003e-05 2.9732827e-05 9.4285714 - 60700 0.00086354544 -4.714285 2.1009182e-05 1.2211596e-05 2.3850413e-05 9.4285714 - 60800 0.00086600787 -4.7142852 2.0591502e-05 1.8785414e-05 3.9466827e-05 9.4285714 - 60900 0.00084908513 -4.7142854 1.7991821e-05 -2.5625702e-06 3.6168481e-05 9.4285714 - 61000 0.00081848444 -4.714285 1.1743841e-05 -1.0039731e-06 2.3813715e-05 9.4285714 - 61100 0.00081030579 -4.7142849 3.537404e-06 1.3507543e-05 2.1577202e-05 9.4285714 - 61200 0.0008287085 -4.7142855 -1.6578114e-05 -2.3836004e-06 3.0510342e-05 9.4285714 - 61300 0.00082838076 -4.7142854 -4.4895287e-06 1.6704188e-05 2.7075219e-05 9.4285714 - 61400 0.00080635705 -4.7142853 -5.4913681e-06 4.2983871e-06 2.6647122e-05 9.4285714 - 61500 0.00078672062 -4.7142852 -2.1193729e-06 -6.3943736e-06 2.7752606e-05 9.4285714 - 61600 0.00072454867 -4.7142852 2.3083142e-05 1.358121e-05 1.6623515e-05 9.4285714 - 61700 0.00072238545 -4.7142852 2.2896501e-05 2.2719452e-05 2.3146939e-05 9.4285714 - 61800 0.0006846567 -4.7142847 -1.5935741e-05 7.6170365e-06 6.7191353e-06 9.4285714 - 61900 0.00068969078 -4.714285 -3.9847748e-06 -5.6268141e-06 1.8910588e-05 9.4285714 - 62000 0.00070410522 -4.7142851 2.8052932e-05 1.5347721e-05 2.0591592e-05 9.4285714 - 62100 0.00069755306 -4.7142852 -1.0113933e-06 1.1265584e-05 5.6059725e-06 9.4285714 - 62200 0.0006790829 -4.7142849 -2.81478e-06 2.7325019e-06 3.0085158e-05 9.4285714 - 62300 0.00069847905 -4.7142853 1.4161519e-05 1.7888353e-05 2.2412947e-05 9.4285714 - 62400 0.00071123227 -4.7142855 3.9545518e-06 6.9576173e-06 3.4248552e-05 9.4285714 - 62500 0.00068462445 -4.7142853 1.0944869e-06 1.7850058e-06 3.43231e-05 9.4285714 - 62600 0.00067550903 -4.7142852 -9.4968789e-07 8.4420549e-06 5.2556093e-06 9.4285714 - 62700 0.0006877517 -4.7142855 -4.9368602e-06 3.3785727e-06 2.7617497e-05 9.4285714 - 62800 0.00068787326 -4.7142856 6.9994384e-06 9.9201491e-06 2.0772847e-05 9.4285714 - 62900 0.00062152508 -4.7142852 -5.4677176e-06 2.5080768e-08 1.1878067e-05 9.4285714 - 63000 0.00055861328 -4.7142838 -1.3977915e-05 -2.6988581e-05 2.8486912e-05 9.4285714 - 63100 0.000571832 -4.7142837 4.551111e-06 -1.6248709e-05 1.3759456e-05 9.4285714 - 63200 0.00057347056 -4.7142828 3.9287266e-06 1.7547618e-05 2.1044407e-05 9.4285714 - 63300 0.00058501123 -4.7142851 -2.7238264e-08 9.750124e-07 3.0448189e-05 9.4285714 - 63400 0.00057267694 -4.7142844 3.5348342e-06 1.4501946e-05 1.1962887e-05 9.4285714 - 63500 0.00059047897 -4.7142846 -3.4842035e-06 -1.1490494e-05 1.8515316e-05 9.4285714 - 63600 0.00059993163 -4.7142851 7.2853972e-06 -6.5680277e-06 3.0811491e-05 9.4285714 - 63700 0.00060109859 -4.7142854 -2.4914767e-06 3.1509102e-05 1.5224907e-05 9.4285714 - 63800 0.00057519486 -4.7142853 -5.2164121e-06 -9.3087189e-06 1.6521312e-05 9.4285714 - 63900 0.00055443844 -4.7142845 -7.3004841e-07 -1.1968621e-05 1.1797888e-05 9.4285714 - 64000 0.00056759204 -4.7142849 -7.7518818e-06 1.4912178e-06 2.0091469e-05 9.4285714 - 64100 0.00058663661 -4.7142855 -2.7113076e-06 -3.5925569e-06 2.8062773e-05 9.4285714 - 64200 0.00057347788 -4.7142852 5.1754545e-06 9.7180322e-06 2.1389084e-05 9.4285714 - 64300 0.00053337032 -4.7142845 5.2663075e-06 -9.1712228e-06 1.6519126e-05 9.4285714 - 64400 0.00052859542 -4.7142849 5.142087e-06 -3.2702459e-06 1.0079362e-05 9.4285714 - 64500 0.00053552942 -4.714285 1.0823772e-05 1.503423e-05 1.2411924e-05 9.4285714 - 64600 0.00052627698 -4.7142844 2.2423208e-06 -3.8647492e-06 2.1010357e-05 9.4285714 - 64700 0.00052323283 -4.7142849 8.9865404e-06 -5.6885729e-06 1.3637208e-05 9.4285714 - 64800 0.00051390523 -4.7142853 1.2239859e-05 2.6754326e-06 -2.6032069e-06 9.4285714 - 64900 0.00048966963 -4.7142851 -6.0061958e-06 -7.8807214e-06 -6.6382282e-06 9.4285714 - 65000 0.00049053421 -4.7142851 1.2848234e-07 9.22648e-06 -3.5744044e-06 9.4285714 - 65100 0.00048846101 -4.7142849 8.1510666e-06 1.1083499e-06 2.0109464e-06 9.4285714 - 65200 0.00048131013 -4.7142852 -4.8975302e-06 -5.1633147e-06 5.4699239e-06 9.4285714 - 65300 0.00048872409 -4.7142853 4.7142401e-06 1.691024e-05 2.7883986e-06 9.4285714 - 65400 0.00048129656 -4.7142849 1.2223399e-05 8.3036545e-06 1.0122916e-05 9.4285714 - 65500 0.00046912517 -4.714285 -7.4865593e-06 4.6436236e-06 5.5770682e-06 9.4285714 - 65600 0.00047002254 -4.7142854 8.2862648e-06 7.8419235e-06 8.0541998e-06 9.4285714 - 65700 0.00047362561 -4.7142854 9.2771772e-06 -8.7987309e-06 1.0741198e-05 9.4285714 - 65800 0.00046227466 -4.7142853 -4.2420817e-07 -7.1296538e-06 7.083119e-06 9.4285714 - 65900 0.00043700346 -4.7142852 -1.9682929e-07 -9.3003721e-06 -1.1250915e-05 9.4285714 - 66000 0.00043749205 -4.7142855 -1.7014799e-07 -3.4411821e-05 -1.6851488e-06 9.4285714 - 66100 0.00043689448 -4.7142855 -3.3209087e-07 -1.2097596e-05 1.5080218e-05 9.4285714 - 66200 0.00043083336 -4.7142854 -1.7492644e-05 -9.2539272e-06 3.3081943e-06 9.4285714 - 66300 0.00039899596 -4.7142853 -1.8156849e-05 -2.5702661e-05 2.0083272e-06 9.4285714 - 66400 0.0003823885 -4.7142853 -2.7443056e-05 -9.0180933e-06 -2.0852934e-05 9.4285714 - 66500 0.00037207285 -4.7142854 -2.8173941e-05 -8.4639761e-06 -8.986547e-06 9.4285714 - 66600 0.00035144773 -4.7142851 -1.9397453e-05 -1.9569426e-05 -1.5926815e-05 9.4285714 - 66700 0.00035197974 -4.7142851 -1.6202598e-05 -1.0829668e-05 -2.0125823e-05 9.4285714 - 66800 0.00035739386 -4.7142852 -1.5574074e-05 -1.0986852e-05 1.6508639e-06 9.4285714 - 66900 0.00035170689 -4.7142855 -1.1747641e-05 -2.4351774e-05 -9.5474172e-06 9.4285714 - 67000 0.00033774919 -4.7142854 -1.2637598e-05 -2.2908028e-05 -1.5217687e-05 9.4285714 - 67100 0.00032101959 -4.7142853 -1.1767862e-05 -2.1311081e-05 -1.0304648e-05 9.4285714 - 67200 0.00031233812 -4.7142854 -5.2236053e-06 -2.068718e-05 -2.0484918e-05 9.4285714 - 67300 0.00030816613 -4.7142854 -4.8807838e-06 -1.6873987e-05 -1.6336161e-05 9.4285714 - 67400 0.00029867883 -4.7142851 -8.0147212e-06 -1.7083508e-05 -1.2550645e-05 9.4285714 - 67500 0.00030042709 -4.7142854 -6.5309243e-06 -9.405081e-06 -1.1252551e-05 9.4285714 - 67600 0.00030033817 -4.7142856 -1.3073314e-05 -9.7861246e-06 -3.2277767e-06 9.4285714 - 67700 0.00028787515 -4.7142855 -2.8280563e-06 -2.9020905e-05 -1.7597895e-05 9.4285714 - 67800 0.00026979448 -4.7142853 -3.2183943e-06 -3.0103384e-05 -2.0251666e-05 9.4285714 - 67900 0.00026965138 -4.7142854 -1.3254428e-05 -2.464949e-05 -9.6257374e-06 9.4285714 - 68000 0.00027265196 -4.7142855 -1.3646014e-06 -2.5322882e-05 -1.1489172e-05 9.4285714 - 68100 0.00026796678 -4.7142855 -4.3450692e-06 -1.7087787e-05 -3.45311e-06 9.4285714 - 68200 0.00027058601 -4.7142855 -1.2509866e-05 -1.456611e-05 -4.9446896e-06 9.4285714 - 68300 0.00026650382 -4.7142856 1.5461585e-06 -1.0810222e-05 -9.7288585e-06 9.4285714 - 68400 0.00025514566 -4.7142856 -9.542593e-06 -1.0978326e-05 -6.4652966e-06 9.4285714 - 68500 0.00024429737 -4.7142854 -1.7699917e-05 -1.3594012e-05 -6.6520818e-06 9.4285714 - 68600 0.00024181324 -4.7142856 -1.5094148e-05 -7.2040295e-06 -5.9906355e-06 9.4285714 - 68700 0.00024284694 -4.7142856 -2.0541404e-05 -1.3071844e-05 -7.1285798e-06 9.4285714 - 68800 0.00023812698 -4.7142856 -1.4200497e-05 -1.7171545e-05 -1.0660295e-05 9.4285714 - 68900 0.00023135089 -4.7142856 -6.1565648e-06 -1.9243568e-05 -7.270452e-06 9.4285714 - 69000 0.00022446839 -4.7142856 -1.0440396e-05 -2.1626098e-05 -1.4130622e-05 9.4285714 - 69100 0.00021400573 -4.7142856 -1.4206929e-05 -1.3377465e-05 -1.9587581e-05 9.4285714 - 69200 0.00019818105 -4.7142856 -2.8789277e-05 -1.0308046e-05 -1.7211724e-05 9.4285714 - 69300 0.00018965025 -4.7142855 -2.6173805e-05 -2.8280101e-05 -2.5218621e-05 9.4285714 - 69400 0.0001714065 -4.7142855 -1.654127e-05 -2.450988e-05 -2.1495299e-05 9.4285714 - 69500 0.0001763348 -4.7142856 -2.0780592e-05 -2.2639566e-05 -1.5576573e-05 9.4285714 - 69600 0.0001481171 -4.7142849 -1.8034675e-05 -1.5957678e-05 -2.1787547e-05 9.4285714 - 69700 0.00013447409 -4.7142845 -1.1970586e-05 -2.9094417e-05 -2.5174934e-05 9.4285714 - 69800 0.00014657885 -4.7142853 -1.5683311e-05 -1.6309919e-05 -2.0075974e-05 9.4285714 - 69900 0.00015609082 -4.7142855 -1.1426177e-05 -1.8313975e-06 -1.9875019e-05 9.4285714 - 70000 0.0001480329 -4.7142856 -1.2460666e-05 -1.6447231e-05 -1.9642105e-05 9.4285714 - 70100 0.00015151702 -4.7142856 -1.4628461e-05 -1.6409935e-05 -1.9122647e-05 9.4285714 - 70200 0.00015877941 -4.7142857 -7.583808e-06 -1.897031e-06 -1.4857946e-05 9.4285714 - 70300 0.00014843274 -4.7142856 -9.1839092e-06 -7.3723263e-06 -1.5486576e-05 9.4285714 - 70400 0.00012694866 -4.7142856 -1.4818342e-05 -1.1732793e-05 -1.9540803e-05 9.4285714 - 70500 0.0001223062 -4.7142855 -1.2766657e-05 -1.6306363e-05 -1.5815847e-05 9.4285714 - 70600 0.00012882541 -4.7142854 -1.0363823e-05 -1.4184553e-05 -1.3482073e-05 9.4285714 - 70700 0.00013355021 -4.7142856 -7.5351905e-06 -5.6878873e-06 -1.1428653e-05 9.4285714 - 70800 0.00011387212 -4.7142856 -1.3103633e-05 -2.1838499e-05 -1.422713e-05 9.4285714 - 70900 0.00010690897 -4.7142853 -1.5031273e-05 -1.6353644e-05 -1.1271084e-05 9.4285714 - 71000 0.00011592297 -4.7142856 -1.4028573e-05 -6.1554701e-06 -7.9135279e-06 9.4285714 - 71100 0.00011480819 -4.7142856 -8.8339375e-06 -1.7095536e-05 -1.3153708e-05 9.4285714 - 71200 0.00011120425 -4.7142855 -6.3415803e-06 -1.0844146e-05 -1.5933361e-05 9.4285714 - 71300 0.00010999134 -4.7142857 -1.1832122e-05 -9.8135256e-06 -1.0796306e-05 9.4285714 - 71400 0.0001085994 -4.7142856 -9.072296e-06 -1.4684027e-05 -9.3398805e-06 9.4285714 - 71500 0.00010229715 -4.7142856 -7.6834343e-06 -5.2923684e-06 -1.091418e-05 9.4285714 - 71600 9.4045037e-05 -4.7142857 -1.6042239e-05 -1.1911182e-05 -1.1726277e-05 9.4285714 - 71700 9.2582606e-05 -4.7142856 -1.8154264e-05 -1.4568798e-05 -1.261618e-05 9.4285714 - 71800 9.23704e-05 -4.7142856 -1.4790168e-05 -8.7882081e-06 -1.1151042e-05 9.4285714 - 71900 8.9370153e-05 -4.7142856 -9.6603935e-06 -1.3566313e-05 -9.2462067e-06 9.4285714 - 72000 8.8174192e-05 -4.7142856 -1.2556141e-05 -1.3025408e-05 -8.3693662e-06 9.4285714 - 72100 9.1354655e-05 -4.7142856 -1.1871034e-05 -7.7464864e-06 -8.3559765e-06 9.4285714 - 72200 8.8834445e-05 -4.7142857 -6.7700163e-06 -9.9481658e-06 -9.4504477e-06 9.4285714 - 72300 8.163427e-05 -4.7142856 -1.2590992e-05 -1.0543915e-05 -1.3015395e-05 9.4285714 - 72400 8.0170063e-05 -4.7142856 -1.4705482e-05 -1.0584579e-05 -1.3600996e-05 9.4285714 - 72500 8.2334351e-05 -4.7142857 -1.2255382e-05 -5.6324588e-06 -1.2861579e-05 9.4285714 - 72600 7.6158453e-05 -4.7142857 -1.404568e-05 -6.6959869e-06 -1.3883356e-05 9.4285714 - 72700 7.1631795e-05 -4.7142856 -1.428209e-05 -1.1695775e-05 -1.4770011e-05 9.4285714 - 72800 6.9815111e-05 -4.7142857 -1.4476332e-05 -7.4094047e-06 -1.0100618e-05 9.4285714 - 72900 7.3869581e-05 -4.7142857 -1.2372765e-05 -3.2032157e-06 -1.2462988e-05 9.4285714 - 73000 7.0229308e-05 -4.7142857 -1.1037948e-05 -5.4138776e-06 -1.3008661e-05 9.4285714 - 73100 6.7552754e-05 -4.7142857 -1.1569726e-05 -6.9374044e-06 -9.3561648e-06 9.4285714 - 73200 6.6289551e-05 -4.7142857 -8.9190387e-06 -2.2952683e-06 -1.2693116e-05 9.4285714 - 73300 6.1711122e-05 -4.7142857 -6.0766618e-06 -2.1366673e-06 -8.8565442e-06 9.4285714 - 73400 5.5466978e-05 -4.7142857 -1.2606476e-05 -7.0593008e-06 -1.1039131e-05 9.4285714 - 73500 5.2403589e-05 -4.7142857 -1.1774366e-05 -1.3796567e-05 -1.7407153e-05 9.4285714 - 73600 5.0884606e-05 -4.7142857 -9.7604748e-06 -1.9004056e-05 -1.2518873e-05 9.4285714 - 73700 5.1102772e-05 -4.7142857 -1.1986927e-05 -2.0827959e-05 -1.4278695e-05 9.4285714 - 73800 4.7646924e-05 -4.7142857 -1.1079416e-05 -2.2274544e-05 -1.6447968e-05 9.4285714 - 73900 4.6300272e-05 -4.7142857 -1.2183886e-05 -2.2431792e-05 -1.4069425e-05 9.4285714 - 74000 4.7954367e-05 -4.7142857 -1.100451e-05 -1.9739909e-05 -1.6995223e-05 9.4285714 - 74100 4.8138479e-05 -4.7142857 -1.0555876e-05 -1.5430426e-05 -1.7057843e-05 9.4285714 - 74200 4.641655e-05 -4.7142857 -1.3347942e-05 -1.0923304e-05 -1.5273804e-05 9.4285714 - 74300 4.631402e-05 -4.7142857 -1.4944003e-05 -7.6247122e-06 -1.591211e-05 9.4285714 - 74400 4.7671679e-05 -4.7142857 -1.6008685e-05 -7.9381768e-06 -1.3142685e-05 9.4285714 - 74500 4.3091565e-05 -4.7142857 -1.5455148e-05 -9.5212084e-06 -1.2939349e-05 9.4285714 - 74600 3.8457508e-05 -4.7142857 -1.5121742e-05 -1.189886e-05 -1.6042127e-05 9.4285714 - 74700 3.9395526e-05 -4.7142857 -1.5995559e-05 -1.5001987e-05 -1.3933931e-05 9.4285714 - 74800 4.103613e-05 -4.7142857 -1.4637418e-05 -1.1943921e-05 -1.2291116e-05 9.4285714 - 74900 4.0591823e-05 -4.7142857 -1.4880028e-05 -1.1128494e-05 -1.354326e-05 9.4285714 - 75000 3.8580406e-05 -4.7142857 -1.413257e-05 -1.3876756e-05 -1.266037e-05 9.4285714 - 75100 4.0291191e-05 -4.7142857 -1.165215e-05 -1.1135144e-05 -1.2679168e-05 9.4285714 - 75200 4.0333708e-05 -4.7142857 -1.178826e-05 -1.2994513e-05 -1.5283298e-05 9.4285714 - 75300 3.8347008e-05 -4.7142857 -1.0978061e-05 -1.633751e-05 -1.460824e-05 9.4285714 - 75400 3.8633982e-05 -4.7142857 -1.0936006e-05 -1.3715951e-05 -1.4335084e-05 9.4285714 - 75500 3.7903905e-05 -4.7142857 -1.2985963e-05 -1.520996e-05 -1.5932056e-05 9.4285714 - 75600 3.5004324e-05 -4.7142857 -1.3234858e-05 -1.3993442e-05 -1.6880321e-05 9.4285714 - 75700 3.4332643e-05 -4.7142857 -1.3104988e-05 -1.1652753e-05 -1.6206646e-05 9.4285714 - 75800 3.4663353e-05 -4.7142857 -1.4931844e-05 -1.5330977e-05 -1.4922537e-05 9.4285714 - 75900 3.39391e-05 -4.7142857 -1.6867182e-05 -1.4943354e-05 -1.500024e-05 9.4285714 - 76000 3.278412e-05 -4.7142857 -1.6658044e-05 -1.4199689e-05 -1.4792111e-05 9.4285714 - 76100 3.1166814e-05 -4.7142857 -1.308461e-05 -1.6339554e-05 -1.440781e-05 9.4285714 - 76200 2.9933872e-05 -4.7142857 -1.0687114e-05 -1.4194673e-05 -1.3954334e-05 9.4285714 - 76300 3.1422641e-05 -4.7142857 -1.0917609e-05 -1.1569941e-05 -1.2815093e-05 9.4285714 - 76400 3.0754581e-05 -4.7142857 -1.0853277e-05 -1.3296864e-05 -1.1515583e-05 9.4285714 - 76500 2.9024215e-05 -4.7142857 -1.2056388e-05 -1.3169585e-05 -1.2258476e-05 9.4285714 - 76600 2.7473571e-05 -4.7142857 -1.4305578e-05 -1.3641621e-05 -1.3588762e-05 9.4285714 - 76700 2.7118998e-05 -4.7142857 -1.431701e-05 -1.4460584e-05 -1.4573318e-05 9.4285714 - 76800 2.5718995e-05 -4.7142857 -1.3268142e-05 -1.5339464e-05 -1.2625212e-05 9.4285714 - 76900 2.5017639e-05 -4.7142857 -1.2780904e-05 -1.8673025e-05 -1.3087177e-05 9.4285714 - 77000 2.5750768e-05 -4.7142857 -1.2369744e-05 -1.7361658e-05 -1.3649753e-05 9.4285714 - 77100 2.6187016e-05 -4.7142857 -1.162578e-05 -1.3664446e-05 -1.2382019e-05 9.4285714 - 77200 2.5631995e-05 -4.7142857 -1.0419397e-05 -1.2996254e-05 -1.5044551e-05 9.4285714 - 77300 2.4696214e-05 -4.7142857 -1.0244805e-05 -1.4615777e-05 -1.5127621e-05 9.4285714 - 77400 2.4553284e-05 -4.7142857 -1.2204481e-05 -1.6264852e-05 -1.3619953e-05 9.4285714 - 77500 2.2797706e-05 -4.7142857 -1.340907e-05 -1.8171911e-05 -1.5862747e-05 9.4285714 - 77600 2.2171226e-05 -4.7142857 -1.3486916e-05 -1.8450579e-05 -1.5371287e-05 9.4285714 - 77700 2.253978e-05 -4.7142857 -1.5266008e-05 -1.8044476e-05 -1.4291304e-05 9.4285714 - 77800 2.1060799e-05 -4.7142857 -1.5324528e-05 -1.7624234e-05 -1.8346195e-05 9.4285714 - 77900 2.0523503e-05 -4.7142857 -1.4965705e-05 -1.6987754e-05 -1.8433091e-05 9.4285714 - 78000 2.0333762e-05 -4.7142857 -1.5645332e-05 -1.7825746e-05 -1.5138649e-05 9.4285714 - 78100 1.9991709e-05 -4.7142857 -1.63199e-05 -1.7374474e-05 -1.6194737e-05 9.4285714 - 78200 1.9011748e-05 -4.7142857 -1.7571324e-05 -1.5937247e-05 -1.7129556e-05 9.4285714 - 78300 1.7452493e-05 -4.7142857 -1.8472289e-05 -1.8185251e-05 -1.6906318e-05 9.4285714 - 78400 1.6922045e-05 -4.7142857 -1.9571229e-05 -1.7381686e-05 -1.7176184e-05 9.4285714 - 78500 1.6749859e-05 -4.7142857 -1.9888844e-05 -1.3779843e-05 -1.6434381e-05 9.4285714 - 78600 1.5533985e-05 -4.7142857 -1.7731773e-05 -1.4423452e-05 -1.6570257e-05 9.4285714 - 78700 1.6001708e-05 -4.7142857 -1.7195797e-05 -1.4572687e-05 -1.6806883e-05 9.4285714 - 78800 1.6443082e-05 -4.7142857 -1.6704891e-05 -1.4293232e-05 -1.561369e-05 9.4285714 - 78900 1.5513588e-05 -4.7142857 -1.598409e-05 -1.593261e-05 -1.5624319e-05 9.4285714 - 79000 1.4695976e-05 -4.7142857 -1.698324e-05 -1.5288966e-05 -1.4638475e-05 9.4285714 - 79100 1.479743e-05 -4.7142857 -1.6125153e-05 -1.2827596e-05 -1.2616114e-05 9.4285714 - 79200 1.55577e-05 -4.7142857 -1.557531e-05 -1.2552924e-05 -1.3990744e-05 9.4285714 - 79300 1.4870035e-05 -4.7142857 -1.5804097e-05 -1.3084783e-05 -1.5763936e-05 9.4285714 - 79400 1.407294e-05 -4.7142857 -1.5106607e-05 -1.1445875e-05 -1.5502237e-05 9.4285714 - 79500 1.4958231e-05 -4.7142857 -1.4765877e-05 -1.1751226e-05 -1.4966677e-05 9.4285714 - 79600 1.4736524e-05 -4.7142857 -1.3947974e-05 -1.2887404e-05 -1.4416364e-05 9.4285714 - 79700 1.3928261e-05 -4.7142857 -1.4198053e-05 -1.2965799e-05 -1.4443335e-05 9.4285714 - 79800 1.3972387e-05 -4.7142857 -1.5355989e-05 -1.5100663e-05 -1.4131894e-05 9.4285714 - 79900 1.3811564e-05 -4.7142857 -1.4835591e-05 -1.4815966e-05 -1.3869381e-05 9.4285714 - 80000 1.2957672e-05 -4.7142857 -1.5062602e-05 -1.45292e-05 -1.4891301e-05 9.4285714 - 80100 1.2563865e-05 -4.7142857 -1.5169994e-05 -1.4546799e-05 -1.3765274e-05 9.4285714 - 80200 1.3022287e-05 -4.7142857 -1.3763722e-05 -1.3208951e-05 -1.2723976e-05 9.4285714 - 80300 1.3584684e-05 -4.7142857 -1.3004687e-05 -1.4331205e-05 -1.3734168e-05 9.4285714 - 80400 1.2367299e-05 -4.7142857 -1.2946676e-05 -1.5953744e-05 -1.3874706e-05 9.4285714 - 80500 1.1149314e-05 -4.7142857 -1.3763549e-05 -1.8354674e-05 -1.4422516e-05 9.4285714 - 80600 1.1310076e-05 -4.7142857 -1.4352942e-05 -1.8196343e-05 -1.4380524e-05 9.4285714 - 80700 1.1762402e-05 -4.7142857 -1.4320877e-05 -1.5912122e-05 -1.4152813e-05 9.4285714 - 80800 1.1709271e-05 -4.7142857 -1.456974e-05 -1.5795666e-05 -1.6150824e-05 9.4285714 - 80900 1.1245245e-05 -4.7142857 -1.3817494e-05 -1.5518817e-05 -1.6397017e-05 9.4285714 - 81000 1.1164538e-05 -4.7142857 -1.3696962e-05 -1.6226212e-05 -1.6916834e-05 9.4285714 - 81100 1.1502669e-05 -4.7142857 -1.3828506e-05 -1.6835139e-05 -1.8154461e-05 9.4285714 - 81200 1.1833191e-05 -4.7142857 -1.2706063e-05 -1.5821428e-05 -1.6742871e-05 9.4285714 - 81300 1.2211644e-05 -4.7142857 -1.27375e-05 -1.4579716e-05 -1.6472811e-05 9.4285714 - 81400 1.2622004e-05 -4.7142857 -1.3634996e-05 -1.3090653e-05 -1.6380222e-05 9.4285714 - 81500 1.2584806e-05 -4.7142857 -1.4674952e-05 -1.3052279e-05 -1.5020578e-05 9.4285714 - 81600 1.2124271e-05 -4.7142857 -1.5487136e-05 -1.3656557e-05 -1.5664484e-05 9.4285714 - 81700 1.2115025e-05 -4.7142857 -1.5327873e-05 -1.3487752e-05 -1.5331047e-05 9.4285714 - 81800 1.2759869e-05 -4.7142857 -1.5382456e-05 -1.3610465e-05 -1.446284e-05 9.4285714 - 81900 1.2785583e-05 -4.7142857 -1.5214877e-05 -1.4182825e-05 -1.5119828e-05 9.4285714 - 82000 1.1934364e-05 -4.7142857 -1.5067498e-05 -1.4838559e-05 -1.5137992e-05 9.4285714 - 82100 1.1214178e-05 -4.7142857 -1.5439424e-05 -1.5802947e-05 -1.5782085e-05 9.4285714 - 82200 1.0543709e-05 -4.7142857 -1.5446821e-05 -1.7103774e-05 -1.6302123e-05 9.4285714 - 82300 1.0325745e-05 -4.7142857 -1.6189094e-05 -1.8974598e-05 -1.5529736e-05 9.4285714 - 82400 1.0566514e-05 -4.7142857 -1.7082526e-05 -2.0057555e-05 -1.5728261e-05 9.4285714 - 82500 1.0668163e-05 -4.7142857 -1.7396752e-05 -1.9951884e-05 -1.5992504e-05 9.4285714 - 82600 1.0279796e-05 -4.7142857 -1.738787e-05 -2.0196256e-05 -1.6446196e-05 9.4285714 - 82700 9.980952e-06 -4.7142857 -1.6578404e-05 -1.9270528e-05 -1.6117223e-05 9.4285714 - 82800 9.8737345e-06 -4.7142857 -1.6651516e-05 -1.7426784e-05 -1.5866862e-05 9.4285714 - 82900 9.9880551e-06 -4.7142857 -1.5586743e-05 -1.6422642e-05 -1.6574528e-05 9.4285714 - 83000 9.6470033e-06 -4.7142857 -1.4253159e-05 -1.6267654e-05 -1.7503416e-05 9.4285714 - 83100 9.0263055e-06 -4.7142857 -1.5582075e-05 -1.6909101e-05 -1.9323241e-05 9.4285714 - 83200 9.0247993e-06 -4.7142857 -1.5263754e-05 -1.7003035e-05 -1.9783892e-05 9.4285714 - 83300 9.3459571e-06 -4.7142857 -1.4154495e-05 -1.5460975e-05 -1.8363556e-05 9.4285714 - 83400 9.3818016e-06 -4.7142857 -1.4641459e-05 -1.3929953e-05 -1.7287384e-05 9.4285714 - 83500 9.5609985e-06 -4.7142857 -1.430942e-05 -1.4416098e-05 -1.6177161e-05 9.4285714 - 83600 1.0113881e-05 -4.7142857 -1.4581875e-05 -1.4843248e-05 -1.5551195e-05 9.4285714 - 83700 1.0162089e-05 -4.7142857 -1.5663427e-05 -1.50393e-05 -1.6048905e-05 9.4285714 - 83800 9.7016327e-06 -4.7142857 -1.5969816e-05 -1.5433063e-05 -1.6529399e-05 9.4285714 - 83900 9.7311674e-06 -4.7142857 -1.6005713e-05 -1.4689451e-05 -1.6800833e-05 9.4285714 - 84000 9.9358855e-06 -4.7142857 -1.6127949e-05 -1.3534531e-05 -1.6554794e-05 9.4285714 - 84100 9.9289786e-06 -4.7142857 -1.5631642e-05 -1.3181885e-05 -1.5877599e-05 9.4285714 - 84200 1.0123274e-05 -4.7142857 -1.5073331e-05 -1.4238795e-05 -1.5974051e-05 9.4285714 - 84300 1.0321305e-05 -4.7142857 -1.4652704e-05 -1.5586652e-05 -1.6327106e-05 9.4285714 - 84400 1.0247248e-05 -4.7142857 -1.4779839e-05 -1.6731849e-05 -1.6548643e-05 9.4285714 - 84500 1.0094063e-05 -4.7142857 -1.4910909e-05 -1.676092e-05 -1.6793125e-05 9.4285714 - 84600 9.9763053e-06 -4.7142857 -1.5162097e-05 -1.6033207e-05 -1.6486257e-05 9.4285714 - 84700 9.5206838e-06 -4.7142857 -1.5042672e-05 -1.5152256e-05 -1.588935e-05 9.4285714 - 84800 8.9062383e-06 -4.7142857 -1.3733548e-05 -1.4935078e-05 -1.5219473e-05 9.4285714 - 84900 8.4608755e-06 -4.7142857 -1.3253611e-05 -1.5916662e-05 -1.4614583e-05 9.4285714 - 85000 8.0192365e-06 -4.7142857 -1.3126327e-05 -1.637167e-05 -1.4350742e-05 9.4285714 - 85100 7.9761033e-06 -4.7142857 -1.3069074e-05 -1.7220389e-05 -1.4062888e-05 9.4285714 - 85200 8.0835543e-06 -4.7142857 -1.3569794e-05 -1.7069744e-05 -1.3778454e-05 9.4285714 - 85300 8.1275735e-06 -4.7142857 -1.3941408e-05 -1.5997547e-05 -1.4117292e-05 9.4285714 - 85400 8.4459009e-06 -4.7142857 -1.456328e-05 -1.5611744e-05 -1.4354375e-05 9.4285714 - 85500 8.4541663e-06 -4.7142857 -1.5168197e-05 -1.5148273e-05 -1.4773075e-05 9.4285714 - 85600 8.2004746e-06 -4.7142857 -1.5073675e-05 -1.4767822e-05 -1.5143245e-05 9.4285714 - 85700 8.0342592e-06 -4.7142857 -1.4947534e-05 -1.4826325e-05 -1.5088549e-05 9.4285714 - 85800 7.8659332e-06 -4.7142857 -1.5065529e-05 -1.4518711e-05 -1.5370922e-05 9.4285714 - 85900 7.6306796e-06 -4.7142857 -1.5176879e-05 -1.4435433e-05 -1.5766931e-05 9.4285714 - 86000 7.5972918e-06 -4.7142857 -1.5131279e-05 -1.4502293e-05 -1.6022005e-05 9.4285714 - 86100 7.8659318e-06 -4.7142857 -1.4967443e-05 -1.4559529e-05 -1.6326507e-05 9.4285714 - 86200 7.8709138e-06 -4.7142857 -1.4770291e-05 -1.5549814e-05 -1.6473316e-05 9.4285714 - 86300 7.6478157e-06 -4.7142857 -1.4930937e-05 -1.6666543e-05 -1.6677668e-05 9.4285714 - 86400 7.7317444e-06 -4.7142857 -1.4847182e-05 -1.6915668e-05 -1.655259e-05 9.4285714 - 86500 7.8872355e-06 -4.7142857 -1.4360701e-05 -1.6696103e-05 -1.6422615e-05 9.4285714 - 86600 7.9467186e-06 -4.7142857 -1.3959124e-05 -1.5997647e-05 -1.6288514e-05 9.4285714 - 86700 7.9278254e-06 -4.7142857 -1.354331e-05 -1.5394874e-05 -1.5935042e-05 9.4285714 - 86800 7.8774016e-06 -4.7142857 -1.3217858e-05 -1.532048e-05 -1.5803438e-05 9.4285714 - 86900 7.775588e-06 -4.7142857 -1.3559543e-05 -1.5026482e-05 -1.5813378e-05 9.4285714 - 87000 7.4582028e-06 -4.7142857 -1.4246545e-05 -1.4764601e-05 -1.5623165e-05 9.4285714 - 87100 6.8371197e-06 -4.7142857 -1.4558367e-05 -1.5100383e-05 -1.5191477e-05 9.4285714 - 87200 6.2680068e-06 -4.7142857 -1.4700384e-05 -1.5351267e-05 -1.476608e-05 9.4285714 - 87300 5.8516912e-06 -4.7142857 -1.4911344e-05 -1.5738952e-05 -1.4528332e-05 9.4285714 - 87400 5.4549865e-06 -4.7142857 -1.5792681e-05 -1.7003657e-05 -1.4715333e-05 9.4285714 - 87500 4.9665221e-06 -4.7142857 -1.7029481e-05 -1.7522718e-05 -1.5420292e-05 9.4285714 - 87600 4.5178563e-06 -4.7142857 -1.650202e-05 -1.7440246e-05 -1.5235233e-05 9.4285714 - 87700 4.345985e-06 -4.7142857 -1.5495038e-05 -1.7432267e-05 -1.5108386e-05 9.4285714 - 87800 4.5412609e-06 -4.7142857 -1.4815021e-05 -1.6753147e-05 -1.5158632e-05 9.4285714 - 87900 4.5642217e-06 -4.7142857 -1.4175945e-05 -1.6362257e-05 -1.5144615e-05 9.4285714 - 88000 4.5540927e-06 -4.7142857 -1.4388451e-05 -1.5619622e-05 -1.5668186e-05 9.4285714 - 88100 4.4196823e-06 -4.7142857 -1.4738254e-05 -1.5132678e-05 -1.6518346e-05 9.4285714 - 88200 3.9574103e-06 -4.7142857 -1.4890034e-05 -1.5307772e-05 -1.7179767e-05 9.4285714 - 88300 3.5222487e-06 -4.7142857 -1.510225e-05 -1.5338999e-05 -1.7416889e-05 9.4285714 - 88400 3.165884e-06 -4.7142857 -1.4760001e-05 -1.5715198e-05 -1.7366111e-05 9.4285714 - 88500 2.9083225e-06 -4.7142857 -1.4658219e-05 -1.55297e-05 -1.7109038e-05 9.4285714 - 88600 2.7400176e-06 -4.7142857 -1.4777364e-05 -1.4923406e-05 -1.6629238e-05 9.4285714 - 88700 2.5251673e-06 -4.7142857 -1.4727405e-05 -1.4871968e-05 -1.6249056e-05 9.4285714 - 88800 2.3826746e-06 -4.7142857 -1.5230979e-05 -1.4709511e-05 -1.6124211e-05 9.4285714 - 88900 2.1768687e-06 -4.7142857 -1.5409575e-05 -1.4606505e-05 -1.6265793e-05 9.4285714 - 89000 1.8236564e-06 -4.7142857 -1.4891077e-05 -1.4374433e-05 -1.6290261e-05 9.4285714 - 89100 1.7278097e-06 -4.7142857 -1.4766014e-05 -1.4698173e-05 -1.629142e-05 9.4285714 - 89200 1.7898696e-06 -4.7142857 -1.4680311e-05 -1.5447769e-05 -1.6234869e-05 9.4285714 - 89300 1.6235898e-06 -4.7142857 -1.4619946e-05 -1.5353355e-05 -1.5935208e-05 9.4285714 - 89400 1.4453719e-06 -4.7142857 -1.5077313e-05 -1.5256516e-05 -1.5760859e-05 9.4285714 - 89500 1.527574e-06 -4.7142857 -1.5228139e-05 -1.5150839e-05 -1.5329339e-05 9.4285714 - 89600 1.5597904e-06 -4.7142857 -1.5206651e-05 -1.4952764e-05 -1.469008e-05 9.4285714 - 89700 1.4754946e-06 -4.7142857 -1.5417012e-05 -1.5114832e-05 -1.4373909e-05 9.4285714 - 89800 1.4411527e-06 -4.7142857 -1.5208876e-05 -1.5296763e-05 -1.4098277e-05 9.4285714 - 89900 1.502323e-06 -4.7142857 -1.4827425e-05 -1.5396237e-05 -1.3859086e-05 9.4285714 - 90000 1.5830978e-06 -4.7142857 -1.4309229e-05 -1.5122624e-05 -1.3769174e-05 9.4285714 - 90100 1.5804557e-06 -4.7142857 -1.3861992e-05 -1.4518884e-05 -1.3724813e-05 9.4285714 - 90200 1.5634629e-06 -4.7142857 -1.3826434e-05 -1.422755e-05 -1.3763402e-05 9.4285714 - 90300 1.6024078e-06 -4.7142857 -1.3630179e-05 -1.4108354e-05 -1.3946447e-05 9.4285714 - 90400 1.5977837e-06 -4.7142857 -1.356028e-05 -1.4344669e-05 -1.4260334e-05 9.4285714 - 90500 1.5141386e-06 -4.7142857 -1.3857977e-05 -1.5201516e-05 -1.4518829e-05 9.4285714 - 90600 1.4576706e-06 -4.7142857 -1.3999155e-05 -1.5886239e-05 -1.4615598e-05 9.4285714 - 90700 1.429486e-06 -4.7142857 -1.419224e-05 -1.6426855e-05 -1.4489664e-05 9.4285714 - 90800 1.3235743e-06 -4.7142857 -1.44774e-05 -1.6912648e-05 -1.4218881e-05 9.4285714 - 90900 1.1910677e-06 -4.7142857 -1.4714565e-05 -1.6726698e-05 -1.3993324e-05 9.4285714 - 91000 1.1413105e-06 -4.7142857 -1.5100515e-05 -1.6536692e-05 -1.3871364e-05 9.4285714 - 91100 1.1451671e-06 -4.7142857 -1.5305607e-05 -1.656882e-05 -1.3686713e-05 9.4285714 - 91200 1.1323551e-06 -4.7142857 -1.5286666e-05 -1.6462418e-05 -1.361651e-05 9.4285714 - 91300 1.1255554e-06 -4.7142857 -1.5404388e-05 -1.6630294e-05 -1.3793667e-05 9.4285714 - 91400 1.2378762e-06 -4.7142857 -1.5510436e-05 -1.6724052e-05 -1.3925227e-05 9.4285714 - 91500 1.4005544e-06 -4.7142857 -1.5509174e-05 -1.6384764e-05 -1.4041048e-05 9.4285714 - 91600 1.3953038e-06 -4.7142857 -1.5420434e-05 -1.6185723e-05 -1.4225674e-05 9.4285714 - 91700 1.3106567e-06 -4.7142857 -1.5056173e-05 -1.594025e-05 -1.4320215e-05 9.4285714 - 91800 1.3340271e-06 -4.7142857 -1.4654593e-05 -1.5633558e-05 -1.4315921e-05 9.4285714 - 91900 1.3522582e-06 -4.7142857 -1.4498864e-05 -1.5494489e-05 -1.4458407e-05 9.4285714 - 92000 1.3158871e-06 -4.7142857 -1.4491876e-05 -1.5514912e-05 -1.4653442e-05 9.4285714 - 92100 1.3643585e-06 -4.7142857 -1.453065e-05 -1.5710343e-05 -1.4811466e-05 9.4285714 - 92200 1.4729997e-06 -4.7142857 -1.4690811e-05 -1.5971338e-05 -1.5095179e-05 9.4285714 - 92300 1.5358294e-06 -4.7142857 -1.4914728e-05 -1.6032194e-05 -1.5448421e-05 9.4285714 - 92400 1.5170825e-06 -4.7142857 -1.5249304e-05 -1.6217016e-05 -1.581467e-05 9.4285714 - 92500 1.5226394e-06 -4.7142857 -1.5593531e-05 -1.6344887e-05 -1.6143519e-05 9.4285714 - 92600 1.5654443e-06 -4.7142857 -1.559349e-05 -1.5992274e-05 -1.6231767e-05 9.4285714 - 92700 1.4702831e-06 -4.7142857 -1.5734905e-05 -1.5835612e-05 -1.640086e-05 9.4285714 - 92800 1.2729797e-06 -4.7142857 -1.601544e-05 -1.58833e-05 -1.6617643e-05 9.4285714 - 92900 1.1993055e-06 -4.7142857 -1.6370313e-05 -1.6035241e-05 -1.6710816e-05 9.4285714 - 93000 1.103877e-06 -4.7142857 -1.676123e-05 -1.6053346e-05 -1.6779897e-05 9.4285714 - 93100 9.766923e-07 -4.7142857 -1.6867719e-05 -1.605566e-05 -1.6723947e-05 9.4285714 - 93200 1.0109827e-06 -4.7142857 -1.6676395e-05 -1.5946366e-05 -1.6627526e-05 9.4285714 - 93300 1.0527596e-06 -4.7142857 -1.6257661e-05 -1.554464e-05 -1.6513078e-05 9.4285714 - 93400 9.8053255e-07 -4.7142857 -1.5807503e-05 -1.5445853e-05 -1.6341358e-05 9.4285714 - 93500 9.1694875e-07 -4.7142857 -1.5533112e-05 -1.5516565e-05 -1.6228406e-05 9.4285714 - 93600 8.8303951e-07 -4.7142857 -1.5069959e-05 -1.5529544e-05 -1.6132536e-05 9.4285714 - 93700 8.2246174e-07 -4.7142857 -1.472233e-05 -1.6179351e-05 -1.6113594e-05 9.4285714 - 93800 7.4646055e-07 -4.7142857 -1.4618489e-05 -1.6810345e-05 -1.6177715e-05 9.4285714 - 93900 6.9678557e-07 -4.7142857 -1.4437826e-05 -1.7139561e-05 -1.6194232e-05 9.4285714 - 94000 6.9952571e-07 -4.7142857 -1.43724e-05 -1.732509e-05 -1.620084e-05 9.4285714 - 94100 6.9465388e-07 -4.7142857 -1.426563e-05 -1.6905551e-05 -1.6207167e-05 9.4285714 - 94200 6.534208e-07 -4.7142857 -1.4215548e-05 -1.6577799e-05 -1.6283956e-05 9.4285714 - 94300 6.3618037e-07 -4.7142857 -1.4523483e-05 -1.653617e-05 -1.64375e-05 9.4285714 - 94400 6.2939519e-07 -4.7142857 -1.4685124e-05 -1.6404885e-05 -1.6365934e-05 9.4285714 - 94500 5.8077775e-07 -4.7142857 -1.4919583e-05 -1.646521e-05 -1.6155952e-05 9.4285714 - 94600 5.5073819e-07 -4.7142857 -1.5396415e-05 -1.6362774e-05 -1.5992816e-05 9.4285714 - 94700 5.2312334e-07 -4.7142857 -1.5511011e-05 -1.6117244e-05 -1.5722347e-05 9.4285714 - 94800 4.3781721e-07 -4.7142857 -1.5578497e-05 -1.6104756e-05 -1.5517678e-05 9.4285714 - 94900 3.7231868e-07 -4.7142857 -1.555009e-05 -1.6057524e-05 -1.5346006e-05 9.4285714 - 95000 3.6663445e-07 -4.7142857 -1.5290067e-05 -1.6097112e-05 -1.5071108e-05 9.4285714 - 95100 3.7586183e-07 -4.7142857 -1.5105309e-05 -1.6192294e-05 -1.4871355e-05 9.4285714 - 95200 3.8418758e-07 -4.7142857 -1.4861047e-05 -1.6053586e-05 -1.4728481e-05 9.4285714 - 95300 3.9338354e-07 -4.7142857 -1.4584146e-05 -1.5916531e-05 -1.4597814e-05 9.4285714 - 95400 4.1470007e-07 -4.7142857 -1.4406666e-05 -1.5799083e-05 -1.4509796e-05 9.4285714 - 95500 4.1217771e-07 -4.7142857 -1.4216838e-05 -1.572919e-05 -1.4450868e-05 9.4285714 - 95600 3.7339985e-07 -4.7142857 -1.4085441e-05 -1.5855742e-05 -1.4482855e-05 9.4285714 - 95700 3.6224929e-07 -4.7142857 -1.395535e-05 -1.5867623e-05 -1.4507753e-05 9.4285714 - 95800 3.6700427e-07 -4.7142857 -1.3811124e-05 -1.5872957e-05 -1.4523805e-05 9.4285714 - 95900 3.5928171e-07 -4.7142857 -1.3872826e-05 -1.600523e-05 -1.4590433e-05 9.4285714 - 96000 3.613478e-07 -4.7142857 -1.4044344e-05 -1.6103734e-05 -1.4662603e-05 9.4285714 - 96100 3.7441468e-07 -4.7142857 -1.4197803e-05 -1.6194892e-05 -1.4788716e-05 9.4285714 - 96200 3.6782696e-07 -4.7142857 -1.4369157e-05 -1.6198825e-05 -1.4994034e-05 9.4285714 - 96300 3.366289e-07 -4.7142857 -1.4548485e-05 -1.6105141e-05 -1.5216323e-05 9.4285714 - 96400 3.1488125e-07 -4.7142857 -1.4852391e-05 -1.6071107e-05 -1.5417112e-05 9.4285714 - 96500 3.1962522e-07 -4.7142857 -1.5196988e-05 -1.6060678e-05 -1.5546629e-05 9.4285714 - 96600 3.2545372e-07 -4.7142857 -1.5474772e-05 -1.6056875e-05 -1.560179e-05 9.4285714 - 96700 3.2075147e-07 -4.7142857 -1.5663715e-05 -1.6024881e-05 -1.5608974e-05 9.4285714 - 96800 3.1900741e-07 -4.7142857 -1.5627356e-05 -1.5884542e-05 -1.5557193e-05 9.4285714 - 96900 3.0937398e-07 -4.7142857 -1.5541895e-05 -1.5824716e-05 -1.5490677e-05 9.4285714 - 97000 2.888521e-07 -4.7142857 -1.5532377e-05 -1.5849941e-05 -1.5408808e-05 9.4285714 - 97100 2.8062675e-07 -4.7142857 -1.5424709e-05 -1.5789425e-05 -1.5344008e-05 9.4285714 - 97200 2.7259018e-07 -4.7142857 -1.525213e-05 -1.5742591e-05 -1.5351193e-05 9.4285714 - 97300 2.5079618e-07 -4.7142857 -1.493221e-05 -1.5647665e-05 -1.5377934e-05 9.4285714 - 97400 2.3092654e-07 -4.7142857 -1.4505065e-05 -1.5570683e-05 -1.5393542e-05 9.4285714 - 97500 2.1183478e-07 -4.7142857 -1.4200896e-05 -1.5596033e-05 -1.5370916e-05 9.4285714 - 97600 1.923775e-07 -4.7142857 -1.402574e-05 -1.5643771e-05 -1.5326364e-05 9.4285714 - 97700 1.8014686e-07 -4.7142857 -1.4007076e-05 -1.5714621e-05 -1.5292616e-05 9.4285714 - 97800 1.6753369e-07 -4.7142857 -1.4231796e-05 -1.5816585e-05 -1.5277392e-05 9.4285714 - 97900 1.5488872e-07 -4.7142857 -1.4550906e-05 -1.5989734e-05 -1.5306236e-05 9.4285714 - 98000 1.5029351e-07 -4.7142857 -1.4825876e-05 -1.6149927e-05 -1.5326564e-05 9.4285714 - 98100 1.5505857e-07 -4.7142857 -1.5020894e-05 -1.6204111e-05 -1.5368077e-05 9.4285714 - 98200 1.6761414e-07 -4.7142857 -1.5104049e-05 -1.615858e-05 -1.5429562e-05 9.4285714 - 98300 1.827265e-07 -4.7142857 -1.5148942e-05 -1.6006424e-05 -1.5463864e-05 9.4285714 - 98400 1.9319974e-07 -4.7142857 -1.5208115e-05 -1.5889727e-05 -1.5534896e-05 9.4285714 - 98500 1.9088949e-07 -4.7142857 -1.5199072e-05 -1.5861978e-05 -1.5589091e-05 9.4285714 - 98600 1.7799024e-07 -4.7142857 -1.5153971e-05 -1.5845374e-05 -1.5615417e-05 9.4285714 - 98700 1.650016e-07 -4.7142857 -1.5071686e-05 -1.5871434e-05 -1.5646712e-05 9.4285714 - 98800 1.5381591e-07 -4.7142857 -1.4976039e-05 -1.5916557e-05 -1.5639779e-05 9.4285714 - 98900 1.4561701e-07 -4.7142857 -1.4948048e-05 -1.5942893e-05 -1.5591273e-05 9.4285714 - 99000 1.409876e-07 -4.7142857 -1.4938783e-05 -1.5964216e-05 -1.552527e-05 9.4285714 - 99100 1.3647033e-07 -4.7142857 -1.4929778e-05 -1.5954524e-05 -1.5435251e-05 9.4285714 - 99200 1.3362811e-07 -4.7142857 -1.493995e-05 -1.5899959e-05 -1.536751e-05 9.4285714 - 99300 1.332697e-07 -4.7142857 -1.4901845e-05 -1.5823408e-05 -1.5288535e-05 9.4285714 - 99400 1.3246942e-07 -4.7142857 -1.4863126e-05 -1.58044e-05 -1.5177726e-05 9.4285714 - 99500 1.2902143e-07 -4.7142857 -1.4839913e-05 -1.5850368e-05 -1.5096824e-05 9.4285714 - 99600 1.2026e-07 -4.7142857 -1.4783678e-05 -1.5936741e-05 -1.5045878e-05 9.4285714 - 99700 1.0682618e-07 -4.7142857 -1.4722651e-05 -1.6094168e-05 -1.5037704e-05 9.4285714 - 99800 1.0135835e-07 -4.7142857 -1.4653152e-05 -1.6166665e-05 -1.5083701e-05 9.4285714 - 99900 1.0408582e-07 -4.7142857 -1.4564358e-05 -1.6121388e-05 -1.5103438e-05 9.4285714 - 100000 1.0680034e-07 -4.7142857 -1.4507587e-05 -1.604874e-05 -1.5136253e-05 9.4285714 -Loop time of 290.919 on 1 procs for 100000 steps with 2520 atoms - -Performance: 1484950.148 tau/day, 343.738 timesteps/s -100.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 5.4111 | 5.4111 | 5.4111 | 0.0 | 1.86 -Bond | 255.11 | 255.11 | 255.11 | 0.0 | 87.69 -Neigh | 4.7124 | 4.7124 | 4.7124 | 0.0 | 1.62 -Comm | 0.12616 | 0.12616 | 0.12616 | 0.0 | 0.04 -Output | 0.61128 | 0.61128 | 0.61128 | 0.0 | 0.21 -Modify | 24.262 | 24.262 | 24.262 | 0.0 | 8.34 -Other | | 0.6856 | | | 0.24 - -Nlocal: 2520.00 ave 2520 max 2520 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0.00000 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 9690.00 ave 9690 max 9690 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 9690 -Ave neighs/atom = 3.8452381 -Ave special neighs/atom = 36.317460 -Neighbor list builds = 5077 -Dangerous builds = 354 -Total wall time: 0:04:50 diff --git a/src/BPM/bond_bpm.cpp b/src/BPM/bond_bpm.cpp index 7ff883a140..04521cd0d8 100644 --- a/src/BPM/bond_bpm.cpp +++ b/src/BPM/bond_bpm.cpp @@ -34,7 +34,10 @@ using namespace LAMMPS_NS; BondBPM::BondBPM(LAMMPS *lmp) : Bond(lmp) { + id_fix_dummy = nullptr; + id_fix_dummy2 = nullptr; id_fix_store_local = nullptr; + id_fix_bond_history = nullptr; id_fix_prop_atom = nullptr; id_fix_update = nullptr; fix_store_local = nullptr; @@ -49,11 +52,15 @@ BondBPM::BondBPM(LAMMPS *lmp) : Bond(lmp) r0_max_estimate = 0.0; max_stretch = 1.0; - // create dummy fix as placeholder for FixUpdateSpecialBonds + // create dummy fix as placeholder for FixUpdateSpecialBonds & BondHistory // this is so final order of Modify:fix will conform to input script + // BondHistory technically only needs this if updateflag = 1 - id_fix_dummy = utils::strdup("BPM_DUMMY" + std::to_string(instance_me)); + id_fix_dummy = utils::strdup("BPM_DUMMY_" + std::to_string(instance_me)); modify->add_fix(fmt::format("{} all DUMMY ", id_fix_dummy)); + + id_fix_dummy2 = utils::strdup("BPM_DUMMY2_" + std::to_string(instance_me)); + modify->add_fix(fmt::format("{} all DUMMY ", id_fix_dummy2)); } /* ---------------------------------------------------------------------- */ @@ -63,12 +70,16 @@ BondBPM::~BondBPM() delete [] pack_choice; if (id_fix_dummy) modify->delete_fix(id_fix_dummy); + if (id_fix_dummy2) modify->delete_fix(id_fix_dummy2); if (id_fix_update) modify->delete_fix(id_fix_update); + if (id_fix_bond_history) modify->delete_fix(id_fix_bond_history); if (id_fix_store_local) modify->delete_fix(id_fix_store_local); if (id_fix_prop_atom) modify->delete_fix(id_fix_prop_atom); delete [] id_fix_dummy; + delete [] id_fix_dummy2; delete [] id_fix_update; + delete [] id_fix_bond_history; delete [] id_fix_store_local; delete [] id_fix_prop_atom; @@ -83,7 +94,7 @@ void BondBPM::init_style() if (id_fix_store_local) { ifix = modify->find_fix(id_fix_store_local); if (ifix < 0) error->all(FLERR, "Cannot find fix store/local"); - if (strcmp(modify->fix[ifix]->style, "store/local") != 0) + if (strcmp(modify->fix[ifix]->style, "STORE_LOCAL") != 0) error->all(FLERR, "Incorrect fix style matched, not store/local"); fix_store_local = (FixStoreLocal *) modify->fix[ifix]; fix_store_local->nvalues = nvalues; @@ -115,7 +126,7 @@ void BondBPM::init_style() error->all(FLERR,"Without overlay/pair, BPM bond sytles requires special Coulomb weights = 1,1,1"); if (id_fix_dummy) { - id_fix_update = utils::strdup("BPM_update_special_bonds" + std::to_string(instance_me)); + id_fix_update = utils::strdup("BPM_UPDATE_SPECIAL_BONDS_" + std::to_string(instance_me)); fix_update_special_bonds = (FixUpdateSpecialBonds *) modify->replace_fix(id_fix_dummy, fmt::format("{} all UPDATE_SPECIAL_BONDS", id_fix_update),1); delete [] id_fix_dummy; @@ -148,14 +159,14 @@ void BondBPM::settings(int narg, char **arg) { leftover_args.clear(); - int local_freq; int iarg = 0; while (iarg < narg) { if (strcmp(arg[iarg], "store/local") == 0) { nvalues = 0; - local_freq = utils::inumeric(FLERR, arg[iarg+1], false, lmp); + id_fix_store_local = utils::strdup(arg[iarg+1]); + store_local_freq = utils::inumeric(FLERR, arg[iarg+2], false, lmp); pack_choice = new FnPtrPack[narg - iarg - 1]; - iarg += 2; + iarg += 3; while (iarg < narg) { if (strcmp(arg[iarg], "id1") == 0) { pack_choice[nvalues++] = &BondBPM::pack_id1; @@ -181,7 +192,7 @@ void BondBPM::settings(int narg, char **arg) } else { break; } - iarg ++; + iarg ++; } } else if (strcmp(arg[iarg], "overlay/pair") == 0) { overlay_flag = 1; @@ -192,24 +203,31 @@ void BondBPM::settings(int narg, char **arg) } } - if (nvalues != 0 && !id_fix_store_local) { - //Todo, assign ID and create fix id_fix_store_local = utils::strdup(arg[iarg+1]); + if (id_fix_store_local) { if (nvalues == 0) error->all(FLERR, "Bond style bpm/rotational must include at least one value to output"); memory->create(output_data, nvalues, "bond/bpm:output_data"); - // Use store property to save reference positions as it can transfer to ghost atoms + int ifix = modify->find_fix(id_fix_store_local); + if (ifix < 0) { + modify->add_fix(fmt::format("{} all STORE_LOCAL {} {}", + id_fix_store_local, store_local_freq, nvalues)); + ifix = modify->find_fix(id_fix_store_local); + } + fix_store_local = (FixStoreLocal *) modify->fix[ifix]; + + // Use property/atom to save reference positions as it can transfer to ghost atoms // This won't work for instances where bonds are added (e.g. fix pour) but in those cases // a reference state isn't well defined if (prop_atom_flag == 1) { id_fix_prop_atom = utils::strdup("BPM_property_atom" + std::to_string(instance_me)); - int ifix = modify->find_fix(id_fix_prop_atom); - char *x_ref_id = utils::strdup("BPM_X_REF" + std::to_string(instance_me)); char *y_ref_id = utils::strdup("BPM_Y_REF" + std::to_string(instance_me)); char *z_ref_id = utils::strdup("BPM_Z_REF" + std::to_string(instance_me)); + + ifix = modify->find_fix(id_fix_prop_atom); if (ifix < 0) { modify->add_fix(fmt::format("{} all property/atom {} {} {} ghost yes", id_fix_prop_atom, x_ref_id, y_ref_id, z_ref_id)); diff --git a/src/BPM/bond_bpm.h b/src/BPM/bond_bpm.h index 3f71aefa45..24689e6f52 100644 --- a/src/BPM/bond_bpm.h +++ b/src/BPM/bond_bpm.h @@ -37,10 +37,12 @@ class BondBPM : public Bond { protected: double r0_max_estimate; double max_stretch; + int store_local_freq; std::vector leftover_args; - char *id_fix_dummy, *id_fix_update; + char *id_fix_dummy, *id_fix_dummy2; + char *id_fix_update, *id_fix_bond_history; char *id_fix_store_local, *id_fix_prop_atom; class FixStoreLocal *fix_store_local; class FixBondHistory *fix_bond_history; diff --git a/src/BPM/bond_bpm_rotational.cpp b/src/BPM/bond_bpm_rotational.cpp index 80fff550ee..ccc96d8fbc 100644 --- a/src/BPM/bond_bpm_rotational.cpp +++ b/src/BPM/bond_bpm_rotational.cpp @@ -44,8 +44,6 @@ BondBPMRotational::BondBPMRotational(LAMMPS *lmp) : BondBPM(lmp) BondBPMRotational::~BondBPMRotational() { - if (fix_bond_history) modify->delete_fix("BOND_HISTORY_BPM_ROTATIONAL"); - if (allocated) { memory->destroy(setflag); memory->destroy(Kr); @@ -641,9 +639,13 @@ void BondBPMRotational::init_style() if(domain->dimension == 2) error->warning(FLERR, "Bond style bpm/rotational not intended for 2d use"); - if (!fix_bond_history) - fix_bond_history = (FixBondHistory *) modify->add_fix( - "HISTORY_BPM_ROTATIONAL" + std::to_string(instance_me) + " all BOND_HISTORY 0 4"); + if (!id_fix_bond_history) { + id_fix_bond_history = utils::strdup("HISTORY_BPM_ROTATIONAL" + std::to_string(instance_me)); + fix_bond_history = (FixBondHistory *) modify->replace_fix(id_fix_dummy2, + fmt::format("{} all BOND_HISTORY 0 4", id_fix_bond_history),1); + delete [] id_fix_dummy2; + id_fix_dummy2 = nullptr; + } } /* ---------------------------------------------------------------------- */ diff --git a/src/BPM/bond_bpm_spring.cpp b/src/BPM/bond_bpm_spring.cpp index 021d552297..d43c18d1e7 100644 --- a/src/BPM/bond_bpm_spring.cpp +++ b/src/BPM/bond_bpm_spring.cpp @@ -39,8 +39,6 @@ BondBPMSpring::BondBPMSpring(LAMMPS *lmp) : BondBPM(lmp) BondBPMSpring::~BondBPMSpring() { - if (fix_bond_history) modify->delete_fix("BOND_HISTORY_BPM_SPRING"); - if (allocated) { memory->destroy(setflag); memory->destroy(k); @@ -277,9 +275,13 @@ void BondBPMSpring::init_style() if (comm->ghost_velocity == 0) error->all(FLERR,"Bond bpm/spring requires ghost atoms store velocity"); - if (!fix_bond_history) - fix_bond_history = (FixBondHistory *) modify->add_fix( - "HISTORY_BPM_SPRING_" + std::to_string(instance_me) + " all BOND_HISTORY 0 1"); + if (!id_fix_bond_history) { + id_fix_bond_history = utils::strdup("HISTORY_BPM_ROTATIONAL" + std::to_string(instance_me)); + fix_bond_history = (FixBondHistory *) modify->replace_fix(id_fix_dummy2, + fmt::format("{} all BOND_HISTORY 0 1", id_fix_bond_history),1); + delete [] id_fix_dummy2; + id_fix_dummy2 = nullptr; + } } /* ---------------------------------------------------------------------- */ diff --git a/src/MISC/pair_tracker.cpp b/src/MISC/pair_tracker.cpp index 3864ba6be7..4d372e959e 100644 --- a/src/MISC/pair_tracker.cpp +++ b/src/MISC/pair_tracker.cpp @@ -52,11 +52,12 @@ PairTracker::PairTracker(LAMMPS *lmp) : // create dummy fix as placeholder for FixNeighHistory // this is so final order of Modify:fix will conform to input script + id_fix_dummy = utils::strdup("TRACKER_DUMMY_" + std::to_string(instance_me)); + modify->add_fix(fmt::format("{} all DUMMY ", id_fix_dummy)); - fix_history = nullptr; - modify->add_fix("NEIGH_HISTORY_TRACK_DUMMY all DUMMY"); - fix_dummy = (FixDummy *) modify->fix[modify->nfix - 1]; - + id_fix_history = nullptr; + id_fix_store_local = nullptr; + fix_history = nullptr; fix_store_local = nullptr; output_data = nullptr; @@ -68,10 +69,9 @@ PairTracker::PairTracker(LAMMPS *lmp) : PairTracker::~PairTracker() { - if (!fix_history) - modify->delete_fix("NEIGH_HISTORY_TRACK_DUMMY"); - else - modify->delete_fix("NEIGH_HISTORY_TRACK"); + if (id_fix_dummy) modify->delete_fix(id_fix_dummy); + if (fix_history) modify->delete_fix(id_fix_history); + if (id_fix_store_local) modify->delete_fix(id_fix_store_local); if (allocated) { memory->destroy(setflag); @@ -86,7 +86,10 @@ PairTracker::~PairTracker() delete[] pack_choice; + delete[] id_fix_dummy; + delete[] id_fix_history; delete[] id_fix_store_local; + memory->destroy(output_data); memory->destroy(type_filter); } @@ -229,15 +232,16 @@ void PairTracker::allocate() void PairTracker::settings(int narg, char **arg) { - if (narg < 1) error->all(FLERR, "Illegal pair_style command"); + if (narg < 2) error->all(FLERR, "Illegal pair_style command"); id_fix_store_local = utils::strdup(arg[0]); + store_local_freq = utils::inumeric(FLERR, arg[1], false, lmp); // If optional arguments included, this will be oversized pack_choice = new FnPtrPack[narg - 1]; nvalues = 0; - int iarg = 1; + int iarg = 2; while (iarg < narg) { if (strcmp(arg[iarg], "finite") == 0) { finitecutflag = 1; @@ -306,6 +310,14 @@ void PairTracker::settings(int narg, char **arg) if (nvalues == 0) error->all(FLERR, "Must request at least one value to output"); memory->create(output_data, nvalues, "pair/tracker:output_data"); + + int ifix = modify->find_fix(id_fix_store_local); + if (ifix < 0) { + modify->add_fix(fmt::format("{} all STORE_LOCAL {} {}", + id_fix_store_local, store_local_freq, nvalues)); + ifix = modify->find_fix(id_fix_store_local); + } + fix_store_local = (FixStoreLocal *) modify->fix[ifix]; } /* ---------------------------------------------------------------------- @@ -343,7 +355,7 @@ void PairTracker::coeff(int narg, char **arg) void PairTracker::init_style() { - int i; + int i, ifix; // error and warning checks if (!atom->radius_flag && finitecutflag) @@ -363,17 +375,22 @@ void PairTracker::init_style() // it replaces FixDummy, created in the constructor // this is so its order in the fix list is preserved - if (fix_history == nullptr) { - modify->replace_fix("NEIGH_HISTORY_TRACK_DUMMY", - fmt::format("NEIGH_HISTORY_TRACK all NEIGH_HISTORY {}", size_history), 1); - int ifix = modify->find_fix("NEIGH_HISTORY_TRACK"); - fix_history = (FixNeighHistory *) modify->fix[ifix]; + if (id_fix_dummy) { + id_fix_history = utils::strdup("TRACKER_NEIGH_HIST_" + std::to_string(instance_me)); + fix_history = (FixNeighHistory *) modify->replace_fix(id_fix_dummy, + fmt::format("{} all NEIGH_HISTORY {}", id_fix_history, size_history), 1); fix_history->pair = this; fix_history->use_bit_flag = 0; + + delete [] id_fix_dummy; + id_fix_dummy = nullptr; + } else { + ifix = modify->find_fix(id_fix_history); + if (ifix < 0) error->all(FLERR, "Could not find pair fix neigh history ID"); + fix_history = (FixNeighHistory *) modify->fix[ifix]; } if (finitecutflag) { - if (force->pair->beyond_contact) error->all(FLERR, "Pair tracker incompatible with granular pairstyles that extend beyond contact"); @@ -425,18 +442,6 @@ void PairTracker::init_style() MPI_Allreduce(&onerad_dynamic[1], &maxrad_dynamic[1], atom->ntypes, MPI_DOUBLE, MPI_MAX, world); MPI_Allreduce(&onerad_frozen[1], &maxrad_frozen[1], atom->ntypes, MPI_DOUBLE, MPI_MAX, world); } - - int ifix = modify->find_fix("NEIGH_HISTORY_TRACK"); - if (ifix < 0) error->all(FLERR, "Could not find pair fix neigh history ID"); - fix_history = (FixNeighHistory *) modify->fix[ifix]; - - ifix = modify->find_fix(id_fix_store_local); - if (ifix < 0) error->all(FLERR, "Cannot find fix store/local"); - if (strcmp(modify->fix[ifix]->style, "store/local") != 0) - error->all(FLERR, "Incorrect fix style matched, not store/local"); - fix_store_local = (FixStoreLocal *) modify->fix[ifix]; - if (fix_store_local->nvalues != nvalues) - error->all(FLERR, "Inconsistent number of output variables in fix store/local"); } /* ---------------------------------------------------------------------- diff --git a/src/MISC/pair_tracker.h b/src/MISC/pair_tracker.h index 3be7e7ebc0..13a8709866 100644 --- a/src/MISC/pair_tracker.h +++ b/src/MISC/pair_tracker.h @@ -51,7 +51,10 @@ class PairTracker : public Pair { double *onerad_dynamic, *onerad_frozen; double *maxrad_dynamic, *maxrad_frozen; int freeze_group_bit; + int store_local_freq; + char *id_fix_dummy; + char *id_fix_history; char *id_fix_store_local; class FixDummy *fix_dummy; class FixNeighHistory *fix_history; From 668d7805d67a2bfbe042f52fbcea795a0b011e5f Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Fri, 10 Dec 2021 11:34:12 -0700 Subject: [PATCH 16/40] Fixes to doc --- doc/src/Howto.rst | 1 + doc/src/bond_bpm_rotational.rst | 2 -- doc/src/bond_bpm_spring.rst | 2 -- 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/doc/src/Howto.rst b/doc/src/Howto.rst index 1d7d626e02..7853150260 100644 --- a/doc/src/Howto.rst +++ b/doc/src/Howto.rst @@ -24,6 +24,7 @@ General howto Howto_couple Howto_client_server Howto_mdi + Howto_broken_bonds Settings howto ============== diff --git a/doc/src/bond_bpm_rotational.rst b/doc/src/bond_bpm_rotational.rst index ccd27b1327..e3ad6996fb 100644 --- a/doc/src/bond_bpm_rotational.rst +++ b/doc/src/bond_bpm_rotational.rst @@ -139,14 +139,12 @@ If the *store/local* keyword is used, this fix will track bonds that break during the simulation. Whenever a bond breaks, data is processed and transferred to an internal fix labeled *fix_ID*. This allows the local data to be accessed by other LAMMPS commands. - 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 bond. The other attributes for the two atoms include the timestep during which the bond broke and the current/initial center of mass position of the two atoms. -This bond style tracks broken bonds and records the requested attributes. Data is continuously accumulated 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 diff --git a/doc/src/bond_bpm_spring.rst b/doc/src/bond_bpm_spring.rst index 164b1dbed4..beaf677e10 100644 --- a/doc/src/bond_bpm_spring.rst +++ b/doc/src/bond_bpm_spring.rst @@ -102,14 +102,12 @@ If the *store/local* keyword is used, this fix will track bonds that break during the simulation. Whenever a bond breaks, data is processed and transferred to an internal fix labeled *fix_ID*. This allows the local data to be accessed by other LAMMPS commands. - 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 bond. The other attributes for the two atoms include the timestep during which the bond broke and the current/initial center of mass position of the two atoms. -This bond style tracks broken bonds and records the requested attributes. Data is continuously accumulated 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 From 744e615dbb2a41b66ac804a1e5918c5a61324ae7 Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Mon, 13 Dec 2021 17:35:53 -0700 Subject: [PATCH 17/40] Revamping public methods for history, adding support for bond react --- src/BPM/bond_bpm.cpp | 6 ++- src/MC/fix_bond_break.cpp | 4 +- src/MC/fix_bond_swap.cpp | 33 ++++++++++++-- src/REACTION/fix_bond_react.cpp | 36 ++++++++++++++++ src/delete_bonds.cpp | 6 ++- src/dump.cpp | 2 +- src/fix_bond_history.cpp | 76 +++++++++++++++++++++++++++------ src/fix_bond_history.h | 19 ++++++++- 8 files changed, 157 insertions(+), 25 deletions(-) diff --git a/src/BPM/bond_bpm.cpp b/src/BPM/bond_bpm.cpp index 04521cd0d8..6cdb5d7ee2 100644 --- a/src/BPM/bond_bpm.cpp +++ b/src/BPM/bond_bpm.cpp @@ -334,7 +334,8 @@ void BondBPM::process_broken(int i, int j) n = num_bond[i]; bond_type[i][m] = bond_type[i][n-1]; bond_atom[i][m] = bond_atom[i][n-1]; - fix_bond_history->delete_bond(i, m); + fix_bond_history->shift_history(i, m, n-1); + fix_bond_history->delete_history(i, n-1); num_bond[i]--; break; } @@ -348,7 +349,8 @@ void BondBPM::process_broken(int i, int j) n = num_bond[j]; bond_type[j][m] = bond_type[j][n-1]; bond_atom[j][m] = bond_atom[j][n-1]; - fix_bond_history->delete_bond(j, m); + fix_bond_history->shift_history(j, m, n-1); + fix_bond_history->delete_history(j, n-1); num_bond[j]--; break; } diff --git a/src/MC/fix_bond_break.cpp b/src/MC/fix_bond_break.cpp index 7973add89d..53d37df5a1 100644 --- a/src/MC/fix_bond_break.cpp +++ b/src/MC/fix_bond_break.cpp @@ -303,11 +303,11 @@ void FixBondBreak::post_integrate() bond_type[i][k] = bond_type[i][k+1]; if (n_histories > 0) for (auto &ihistory: histories) - ((FixBondHistory *) ihistory)->shift_bond(i,k,k+1); + ((FixBondHistory *) ihistory)->shift_history(i,k,k+1); } if (n_histories > 0) for (auto &ihistory: histories) - ((FixBondHistory *) ihistory)->delete_bond(i,num_bond[i]-1); + ((FixBondHistory *) ihistory)->delete_history(i,num_bond[i]-1); num_bond[i]--; break; } diff --git a/src/MC/fix_bond_swap.cpp b/src/MC/fix_bond_swap.cpp index 5f7ffcbbe5..a3a09c180d 100644 --- a/src/MC/fix_bond_swap.cpp +++ b/src/MC/fix_bond_swap.cpp @@ -22,6 +22,7 @@ #include "compute.h" #include "domain.h" #include "error.h" +#include "fix_bond_history.h" #include "force.h" #include "memory.h" #include "modify.h" @@ -450,6 +451,10 @@ void FixBondSwap::post_integrate() if (!accept) return; naccept++; + // find instances of bond/history to reset history + auto histories = modify->get_fix_by_style("BOND_HISTORY"); + int n_histories = histories.size(); + // change bond partners of affected atoms // on atom i: bond i-inext changes to i-jnext // on atom j: bond j-jnext changes to j-inext @@ -457,13 +462,33 @@ void FixBondSwap::post_integrate() // on atom jnext: bond jnext-j changes to jnext-i for (ibond = 0; ibond < num_bond[i]; ibond++) - if (bond_atom[i][ibond] == tag[inext]) bond_atom[i][ibond] = tag[jnext]; + if (bond_atom[i][ibond] == tag[inext]) { + if (n_histories > 0) + for (auto &ihistory: histories) + ((FixBondHistory *) ihistory)->delete_history(i,ibond); + bond_atom[i][ibond] = tag[jnext]; + } for (jbond = 0; jbond < num_bond[j]; jbond++) - if (bond_atom[j][jbond] == tag[jnext]) bond_atom[j][jbond] = tag[inext]; + if (bond_atom[j][jbond] == tag[jnext]) { + if (n_histories > 0) + for (auto &ihistory: histories) + ((FixBondHistory *) ihistory)->delete_history(j,jbond); + bond_atom[j][jbond] = tag[inext]; + } for (ibond = 0; ibond < num_bond[inext]; ibond++) - if (bond_atom[inext][ibond] == tag[i]) bond_atom[inext][ibond] = tag[j]; + if (bond_atom[inext][ibond] == tag[i]) { + if (n_histories > 0) + for (auto &ihistory: histories) + ((FixBondHistory *) ihistory)->delete_history(inext,ibond); + bond_atom[inext][ibond] = tag[j]; + } for (jbond = 0; jbond < num_bond[jnext]; jbond++) - if (bond_atom[jnext][jbond] == tag[j]) bond_atom[jnext][jbond] = tag[i]; + if (bond_atom[jnext][jbond] == tag[j]) { + if (n_histories > 0) + for (auto &ihistory: histories) + ((FixBondHistory *) ihistory)->delete_history(jnext,jbond); + bond_atom[jnext][jbond] = tag[i]; + } // set global tags of 4 atoms in bonds diff --git a/src/REACTION/fix_bond_react.cpp b/src/REACTION/fix_bond_react.cpp index 31a09567ca..08eff6dc48 100644 --- a/src/REACTION/fix_bond_react.cpp +++ b/src/REACTION/fix_bond_react.cpp @@ -24,6 +24,7 @@ Contributing Author: Jacob Gissinger (jacob.r.gissinger@gmail.com) #include "comm.h" #include "domain.h" #include "error.h" +#include "fix_bond_history.h" #include "force.h" #include "group.h" #include "input.h" @@ -3091,6 +3092,10 @@ void FixBondReact::update_everything() // next let's update bond info // cool thing is, newton_bond issues are already taken care of in templates // same with class2 improper issues, which is why this fix started in the first place + // also need to find any instances of bond history to update histories + auto histories = modify->get_fix_by_style("BOND_HISTORY"); + int n_histories = histories.size(); + for (int i = 0; i < update_num_mega; i++) { rxnID = update_mega_glove[0][i]; twomol = atom->molecules[reacted_mol[rxnID]]; @@ -3100,6 +3105,14 @@ void FixBondReact::update_everything() if (atom->map(update_mega_glove[jj+1][i]) < nlocal && atom->map(update_mega_glove[jj+1][i]) >= 0) { if (landlocked_atoms[j][rxnID] == 1) { delta_bonds -= num_bond[atom->map(update_mega_glove[jj+1][i])]; + // If deleting all bonds, first cache then remove all histories + if (n_histories > 0) + for (auto &ihistory: histories) { + for (int n = 0; n < num_bond[atom->map(update_mega_glove[jj+1][i])]; n++) + ((FixBondHistory *) ihistory)->cache_history(atom->map(update_mega_glove[jj+1][i]), n); + for (int n = 0; n < num_bond[atom->map(update_mega_glove[jj+1][i])]; n++) + ((FixBondHistory *) ihistory)->delete_history(atom->map(update_mega_glove[jj+1][i]), 0); + } num_bond[atom->map(update_mega_glove[jj+1][i])] = 0; } if (landlocked_atoms[j][rxnID] == 0) { @@ -3107,10 +3120,21 @@ void FixBondReact::update_everything() for (int n = 0; n < twomol->natoms; n++) { int nn = equivalences[n][1][rxnID]-1; if (n!=j && bond_atom[atom->map(update_mega_glove[jj+1][i])][p] == update_mega_glove[nn+1][i] && landlocked_atoms[n][rxnID] == 1) { + // Cache history information, shift history, then delete final element + if (n_histories > 0) + for (auto &ihistory: histories) + ((FixBondHistory *) ihistory)->cache_history(atom->map(update_mega_glove[jj+1][i]), p); for (int m = p; m < num_bond[atom->map(update_mega_glove[jj+1][i])]-1; m++) { bond_type[atom->map(update_mega_glove[jj+1][i])][m] = bond_type[atom->map(update_mega_glove[jj+1][i])][m+1]; bond_atom[atom->map(update_mega_glove[jj+1][i])][m] = bond_atom[atom->map(update_mega_glove[jj+1][i])][m+1]; + if (n_histories > 0) + for (auto &ihistory: histories) + ((FixBondHistory *) ihistory)->shift_history(atom->map(update_mega_glove[jj+1][i]),m,m+1); } + if (n_histories > 0) + for (auto &ihistory: histories) + ((FixBondHistory *) ihistory)->delete_history(atom->map(update_mega_glove[jj+1][i]), + num_bond[atom->map(update_mega_glove[jj+1][i])]-1); num_bond[atom->map(update_mega_glove[jj+1][i])]--; delta_bonds--; } @@ -3129,6 +3153,10 @@ void FixBondReact::update_everything() for (int p = 0; p < twomol->num_bond[j]; p++) { bond_type[atom->map(update_mega_glove[jj+1][i])][p] = twomol->bond_type[j][p]; bond_atom[atom->map(update_mega_glove[jj+1][i])][p] = update_mega_glove[equivalences[twomol->bond_atom[j][p]-1][1][rxnID]][i]; + // Check cached history data to see if bond regenerated + if (n_histories > 0) + for (auto &ihistory: histories) + ((FixBondHistory *) ihistory)->check_cache(atom->map(update_mega_glove[jj+1][i]), p); } } if (landlocked_atoms[j][rxnID] == 0) { @@ -3137,6 +3165,10 @@ void FixBondReact::update_everything() insert_num = num_bond[atom->map(update_mega_glove[jj+1][i])]; bond_type[atom->map(update_mega_glove[jj+1][i])][insert_num] = twomol->bond_type[j][p]; bond_atom[atom->map(update_mega_glove[jj+1][i])][insert_num] = update_mega_glove[equivalences[twomol->bond_atom[j][p]-1][1][rxnID]][i]; + // Check cached history data to see if bond regenerated + if (n_histories > 0) + for (auto &ihistory: histories) + ((FixBondHistory *) ihistory)->check_cache(atom->map(update_mega_glove[jj+1][i]), insert_num); num_bond[atom->map(update_mega_glove[jj+1][i])]++; if (num_bond[atom->map(update_mega_glove[jj+1][i])] > atom->bond_per_atom) error->one(FLERR,"Bond/react topology/atom exceed system topology/atom"); @@ -3148,6 +3180,10 @@ void FixBondReact::update_everything() } } + if (n_histories > 0) + for (auto &ihistory: histories) + ((FixBondHistory *) ihistory)->clear_cache(); + // Angles! First let's delete all angle info: if (force->angle && twomol->angleflag) { int *num_angle = atom->num_angle; diff --git a/src/delete_bonds.cpp b/src/delete_bonds.cpp index 682a4476b5..ca933f3c97 100644 --- a/src/delete_bonds.cpp +++ b/src/delete_bonds.cpp @@ -338,8 +338,10 @@ void DeleteBonds::command(int narg, char **arg) atom->bond_type[i][m] = atom->bond_type[i][n-1]; atom->bond_atom[i][m] = atom->bond_atom[i][n-1]; if (n_histories > 0) - for (auto &ihistory: histories) - ((FixBondHistory *) ihistory)->delete_bond(i,m); + for (auto &ihistory: histories) { + ((FixBondHistory *) ihistory)->shift_history(i,m,n-1); + ((FixBondHistory *) ihistory)->delete_history(i,n-1); + } atom->num_bond[i]--; } else m++; } else m++; diff --git a/src/dump.cpp b/src/dump.cpp index 4c02aa3070..7eca4a938c 100644 --- a/src/dump.cpp +++ b/src/dump.cpp @@ -920,7 +920,7 @@ void Dump::modify_params(int narg, char **arg) } else if (strcmp(arg[iarg],"header") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal dump_modify command"); - header_flag = utils::logical(FLERR,arg[iarg+1],false,lmp); + write_header_flag = utils::logical(FLERR,arg[iarg+1],false,lmp); iarg += 2; } else if (strcmp(arg[iarg],"every") == 0) { diff --git a/src/fix_bond_history.cpp b/src/fix_bond_history.cpp index dfadd4201d..1f6ac6fe48 100644 --- a/src/fix_bond_history.cpp +++ b/src/fix_bond_history.cpp @@ -17,15 +17,15 @@ #include "atom.h" #include "comm.h" #include "error.h" -#include "force.h" #include "group.h" #include "memory.h" #include "modify.h" #include "neighbor.h" -#include "string.h" -#include -#include +#include +#include +#include +#include using namespace LAMMPS_NS; using namespace FixConst; @@ -284,28 +284,80 @@ void FixBondHistory::set_arrays(int i) } /* ---------------------------------------------------------------------- - Remove all data for row by compressing data - moving last element + Delete bond by zeroing data ------------------------------------------------------------------------- */ -void FixBondHistory::delete_bond(int i, int m) +void FixBondHistory::delete_history(int i, int m) { double **stored = atom->darray[index]; - int n = atom->num_bond[i]; - if (m != n-1) shift_bond(i, m, n-1); - for (int idata = 0; idata < ndata; idata ++) - stored[i][(n-1)*ndata+idata] = 0.0; + stored[i][m*ndata+idata] = 0.0; } /* ---------------------------------------------------------------------- Shift bond data to a new location - Used by some fixes that delete bonds which don't move last element ------------------------------------------------------------------------- */ -void FixBondHistory::shift_bond(int i, int m, int k) +void FixBondHistory::shift_history(int i, int m, int k) { + if (m == k) return; + double **stored = atom->darray[index]; int n = atom->num_bond[i]; for (int idata = 0; idata < ndata; idata ++) stored[i][m*ndata+idata] = stored[i][k*ndata+idata]; } + +/* ---------------------------------------------------------------------- + Temporarily caches history for a deleted bond which + could be recreated before the cache is emptied + NOTE: the cache methods still need to be tested, need an example first +------------------------------------------------------------------------- */ + +void FixBondHistory::cache_history(int i, int m) +{ + // Order tags to create a unique key pair + tagint max_tag = MAX(atom->tag[i], atom->bond_atom[i][m]); + tagint min_tag = MIN(atom->tag[i], atom->bond_atom[i][m]); + std::pair key = std::make_pair(min_tag, max_tag); + + // Copy data to vector + double **stored = atom->darray[index]; + std::vector data; + for (int idata = 0; idata < ndata; idata ++) + data.push_back(stored[i][m*ndata+idata]); + + // Add data to cache + cached_histories.insert(std::make_pair(key,data)); +} + +/* ---------------------------------------------------------------------- + Checks to see if a newly created bond has cached history +------------------------------------------------------------------------- */ + +void FixBondHistory::check_cache(int i, int m) +{ + // Order tags to create a unique key pair + tagint max_tag = MAX(atom->tag[i], atom->bond_atom[i][m]); + tagint min_tag = MIN(atom->tag[i], atom->bond_atom[i][m]); + std::pair key = std::make_pair(min_tag, max_tag); + + // Check if it exists, if so, copy data + double **stored = atom->darray[index]; + std::vector data; + auto pos = cached_histories.find(key); + if (pos != cached_histories.end()) { + data = pos->second; + for (int idata = 0; idata < ndata; idata ++) + stored[i][m*ndata+idata] = data[idata]; + } +} + +/* ---------------------------------------------------------------------- + Delete saved memory +------------------------------------------------------------------------- */ + +void FixBondHistory::clear_cache() +{ + cached_histories.clear(); +} \ No newline at end of file diff --git a/src/fix_bond_history.h b/src/fix_bond_history.h index 970b1429d6..b1651a4dbe 100644 --- a/src/fix_bond_history.h +++ b/src/fix_bond_history.h @@ -22,6 +22,10 @@ FixStyle(BOND_HISTORY,FixBondHistory) #include "fix.h" +#include +#include +#include + namespace LAMMPS_NS { class FixBondHistory : public Fix { @@ -41,8 +45,19 @@ class FixBondHistory : public Fix { void update_atom_value(int, int, int, double); double get_atom_value(int, int, int); - void delete_bond(int,int); - void shift_bond(int,int,int); + + // methods to reorder/delete elements of atom->bond_atom + void delete_history(int,int); + void shift_history(int,int,int); + void cache_history(int,int); + void check_cache(int,int); + void clear_cache(); + + // if data is temporarily stored while the bond_atom array + // is being reordered, use map of vectors with pairs for keys + // to enable quick look up + std::map, std::vector > cached_histories; + double **bondstore; int stored_flag; From 524d86605adab537cd49e1e783af2b4bbec17058 Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Wed, 12 Jan 2022 10:56:30 -0700 Subject: [PATCH 18/40] Fixing reference in documentation --- doc/src/dump_modify.rst | 5 +++-- src/fix_bond_history.cpp | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/src/dump_modify.rst b/doc/src/dump_modify.rst index be75153f6f..ffb5fdcb55 100644 --- a/doc/src/dump_modify.rst +++ b/doc/src/dump_modify.rst @@ -445,8 +445,9 @@ The *fileper* keyword is documented below with the *nfile* keyword. The *header* keyword toggles whether the dump file will include a header. Excluding a header will reduce the size of the dump file for -fixes such as :doc:`fix pair/tracker ` which do not -require the information typically written to the header. +data produced by :doc:`pair tracker ` or +:doc:`bpm bond styles ` which may not require the +information typically written to the header. ---------- diff --git a/src/fix_bond_history.cpp b/src/fix_bond_history.cpp index 1f6ac6fe48..e34e5c2be6 100644 --- a/src/fix_bond_history.cpp +++ b/src/fix_bond_history.cpp @@ -360,4 +360,4 @@ void FixBondHistory::check_cache(int i, int m) void FixBondHistory::clear_cache() { cached_histories.clear(); -} \ No newline at end of file +} From c17eb147396896b697767b3016b657500b155431 Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Fri, 14 Jan 2022 15:45:18 -0700 Subject: [PATCH 19/40] Fixing memory leak and wrong label --- src/BPM/bond_bpm_spring.cpp | 2 +- src/fix_bond_history.cpp | 14 +++++++------- src/fix_bond_history.h | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/BPM/bond_bpm_spring.cpp b/src/BPM/bond_bpm_spring.cpp index d43c18d1e7..5cd64ac3f8 100644 --- a/src/BPM/bond_bpm_spring.cpp +++ b/src/BPM/bond_bpm_spring.cpp @@ -276,7 +276,7 @@ void BondBPMSpring::init_style() error->all(FLERR,"Bond bpm/spring requires ghost atoms store velocity"); if (!id_fix_bond_history) { - id_fix_bond_history = utils::strdup("HISTORY_BPM_ROTATIONAL" + std::to_string(instance_me)); + id_fix_bond_history = utils::strdup("HISTORY_BPM_SPRING" + std::to_string(instance_me)); fix_bond_history = (FixBondHistory *) modify->replace_fix(id_fix_dummy2, fmt::format("{} all BOND_HISTORY 0 1", id_fix_bond_history),1); delete [] id_fix_dummy2; diff --git a/src/fix_bond_history.cpp b/src/fix_bond_history.cpp index e34e5c2be6..e7593e93a3 100644 --- a/src/fix_bond_history.cpp +++ b/src/fix_bond_history.cpp @@ -54,17 +54,17 @@ FixBondHistory::FixBondHistory(LAMMPS *lmp, int narg, char **arg) : maxbond = 0; allocate(); - new_fix_id = nullptr; - array_id = nullptr; + id_fix = nullptr; + id_array = nullptr; } /* ---------------------------------------------------------------------- */ FixBondHistory::~FixBondHistory() { - if (new_fix_id && modify->nfix) modify->delete_fix(new_fix_id); - delete [] new_fix_id; - delete [] array_id; + if (id_fix && modify->nfix) modify->delete_fix(id_fix); + delete [] id_fix; + delete [] id_array; memory->destroy(bondstore); } @@ -85,8 +85,8 @@ void FixBondHistory::post_constructor() { // Store saved bond quantities for each atom using fix property atom - char *id_fix = utils::strdup(id + std::string("_FIX_PROP_ATOM")); - char *id_array = utils::strdup(std::string("d2_") + id); + id_fix = utils::strdup(id + std::string("_FIX_PROP_ATOM")); + id_array = utils::strdup(std::string("d2_") + id); modify->add_fix(fmt::format("{} {} property/atom {} {}", id_fix, group->names[igroup], id_array, nbond*ndata)); int tmp1, tmp2; diff --git a/src/fix_bond_history.h b/src/fix_bond_history.h index b1651a4dbe..6d686b1fb6 100644 --- a/src/fix_bond_history.h +++ b/src/fix_bond_history.h @@ -68,8 +68,8 @@ class FixBondHistory : public Fix { int update_flag; int nbond, maxbond, ndata; int index; - char *new_fix_id; - char *array_id; + char *id_fix; + char *id_array; }; } // namespace LAMMPS_NS From 5a95b35fb30628234e590f81ef433ff1a9f1a2b1 Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Fri, 18 Feb 2022 10:22:08 -0700 Subject: [PATCH 20/40] Adding bondstyle restart and fixing a few labels --- src/BPM/bond_bpm.cpp | 6 +++--- src/BPM/bond_bpm.h | 2 +- src/BPM/bond_bpm_rotational.cpp | 2 +- src/BPM/bond_bpm_spring.cpp | 2 +- src/input.cpp | 21 +++++++++++++++++++++ 5 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/BPM/bond_bpm.cpp b/src/BPM/bond_bpm.cpp index 6cdb5d7ee2..085e292c4c 100644 --- a/src/BPM/bond_bpm.cpp +++ b/src/BPM/bond_bpm.cpp @@ -157,7 +157,7 @@ void BondBPM::init_style() void BondBPM::settings(int narg, char **arg) { - leftover_args.clear(); + leftover_iarg.clear(); int iarg = 0; while (iarg < narg) { @@ -198,7 +198,7 @@ void BondBPM::settings(int narg, char **arg) overlay_flag = 1; iarg ++; } else { - leftover_args.push_back(iarg); + leftover_iarg.push_back(iarg); iarg ++; } } @@ -206,7 +206,7 @@ void BondBPM::settings(int narg, char **arg) if (id_fix_store_local) { if (nvalues == 0) error->all(FLERR, - "Bond style bpm/rotational must include at least one value to output"); + "Storing local data must include at least one value to output"); memory->create(output_data, nvalues, "bond/bpm:output_data"); int ifix = modify->find_fix(id_fix_store_local); diff --git a/src/BPM/bond_bpm.h b/src/BPM/bond_bpm.h index 24689e6f52..8dbab8c683 100644 --- a/src/BPM/bond_bpm.h +++ b/src/BPM/bond_bpm.h @@ -39,7 +39,7 @@ class BondBPM : public Bond { double max_stretch; int store_local_freq; - std::vector leftover_args; + std::vector leftover_iarg; char *id_fix_dummy, *id_fix_dummy2; char *id_fix_update, *id_fix_bond_history; diff --git a/src/BPM/bond_bpm_rotational.cpp b/src/BPM/bond_bpm_rotational.cpp index ccc96d8fbc..9461329b96 100644 --- a/src/BPM/bond_bpm_rotational.cpp +++ b/src/BPM/bond_bpm_rotational.cpp @@ -654,7 +654,7 @@ void BondBPMRotational::settings(int narg, char **arg) { BondBPM::settings(narg, arg); - for (int iarg : leftover_args) { + for (int iarg : leftover_iarg) { error->all(FLERR, "Illegal bond_style command"); } } diff --git a/src/BPM/bond_bpm_spring.cpp b/src/BPM/bond_bpm_spring.cpp index 5cd64ac3f8..c2c5547541 100644 --- a/src/BPM/bond_bpm_spring.cpp +++ b/src/BPM/bond_bpm_spring.cpp @@ -290,7 +290,7 @@ void BondBPMSpring::settings(int narg, char **arg) { BondBPM::settings(narg, arg); - for (int iarg : leftover_args) { + for (int iarg : leftover_iarg) { error->all(FLERR, "Illegal bond_style command"); } } diff --git a/src/input.cpp b/src/input.cpp index 30424ad5cb..990d0562e5 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -1318,6 +1318,27 @@ void Input::bond_style() if (narg < 1) error->all(FLERR,"Illegal bond_style command"); if (atom->avec->bonds_allow == 0) error->all(FLERR,"Bond_style command when no bonds allowed"); + + if (force->bond) { + std::string style = arg[0]; + int match = 0; + if (style == force->bond_style) match = 1; + if (!match && lmp->suffix_enable) { + if (lmp->suffixp) + if (style + "/" + lmp->suffixp == force->bond_style) match = 1; + + if (lmp->suffix && !lmp->suffixp) + if (style + "/" + lmp->suffix == force->bond_style) match = 1; + + if (lmp->suffix2) + if (style + "/" + lmp->suffix2 == force->bond_style) match = 1; + } + if (match) { + force->bond->settings(narg-1,&arg[1]); + return; + } + } + force->create_bond(arg[0],1); if (force->bond) force->bond->settings(narg-1,&arg[1]); } From 39f8ccdb42bfc989d87e3b7d3a3207cec46d1d24 Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Fri, 18 Feb 2022 15:33:26 -0700 Subject: [PATCH 21/40] Fixing an overlooked merge conflict --- src/MISC/pair_tracker.h | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/MISC/pair_tracker.h b/src/MISC/pair_tracker.h index 0a015d6ec7..cf4fd11608 100644 --- a/src/MISC/pair_tracker.h +++ b/src/MISC/pair_tracker.h @@ -58,7 +58,6 @@ class PairTracker : public Pair { char *id_fix_store_local; class FixDummy *fix_dummy; class FixNeighHistory *fix_history; -<<<<<<< HEAD class FixStoreLocal *fix_store_local; int **type_filter; @@ -81,11 +80,6 @@ class PairTracker : public Pair { void pack_rave(int, int, int, double *); void process_data(int, int, double *); -======= - class FixPairTracker *fix_pair_tracker; - - void transfer_history(double *, double *) override; ->>>>>>> develop void allocate(); }; From 67a77640861cb34d6237508541447f35155c1c4f Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Sat, 5 Mar 2022 17:07:02 -0700 Subject: [PATCH 22/40] Initalizing nullptrs, fixing labels, small errors in doc, and sign errors in rot sliding damp --- doc/src/bond_bpm_rotational.rst | 10 +++++----- src/BPM/bond_bpm.cpp | 2 +- src/BPM/bond_bpm.h | 8 ++++---- src/BPM/bond_bpm_rotational.cpp | 23 +++++++++++++++++------ src/BPM/bond_bpm_spring.cpp | 5 ++++- src/BPM/bond_bpm_spring.h | 8 -------- src/fix_store_local.cpp | 2 +- 7 files changed, 32 insertions(+), 26 deletions(-) diff --git a/doc/src/bond_bpm_rotational.rst b/doc/src/bond_bpm_rotational.rst index e3ad6996fb..9e62d8d1be 100644 --- a/doc/src/bond_bpm_rotational.rst +++ b/doc/src/bond_bpm_rotational.rst @@ -105,7 +105,7 @@ 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 +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. @@ -117,16 +117,16 @@ or :doc:`read_restart ` commands: * :math:`k_r` (force/distance units) * :math:`k_s` (force/distance units) -* :math:`k_t` (force units) -* :math:`k_b` (force units) +* :math:`k_t` (force*distance/radians units) +* :math:`k_b` (force*distance/radians units) * :math:`f_{r,c}` (force units) * :math:`f_{s,c}` (force units) * :math:`\tau_{b,c}` (force*distance units) * :math:`\tau_{t,c}` (force*distance units) * :math:`\gamma_n` (force/velocity units) * :math:`\gamma_s` (force/velocity units) -* :math:`\gamma_r` (distance*force/seconds/radians units) -* :math:`\gamma_t` (distance*force/seconds/radians units) +* :math:`\gamma_r` (force*distance/velocity units) +* :math:`\gamma_t` (force*distance/velocity units) By default, pair forces are not calculated between bonded particles. Pair forces can alternatively be overlaid on top of bond forces using diff --git a/src/BPM/bond_bpm.cpp b/src/BPM/bond_bpm.cpp index 085e292c4c..2ee956346b 100644 --- a/src/BPM/bond_bpm.cpp +++ b/src/BPM/bond_bpm.cpp @@ -113,7 +113,7 @@ void BondBPM::init_style() } else { // Require atoms know about all of their bonds and if they break if (force->newton_bond) - error->all(FLERR,"Without overlay/pair, BPM bond sytles require Newton bond off"); + error->all(FLERR,"Without overlay/pair, BPM bond styles require Newton bond off"); // special lj must be 0 1 1 to censor pair forces between bonded particles // special coulomb must be 1 1 1 to ensure all pairs are included in the diff --git a/src/BPM/bond_bpm.h b/src/BPM/bond_bpm.h index 05dc96e161..f8f860bd15 100644 --- a/src/BPM/bond_bpm.h +++ b/src/BPM/bond_bpm.h @@ -81,16 +81,16 @@ E: Illegal bond_style command Self-explanatory. -E: Bond style bpm/rotational must include at least one value to output +E: Bond style bpm must include at least one value to output Must include at least one bond property to store in fix store/local -E: Bond style bpm/rotational cannot be used with 3,4-body interactions +E: Bond style bpm cannot be used with 3,4-body interactions No angle, dihedral, or improper styles can be defined when using -bond style bpm/rotational. +bond style bpm. -E: Bond style bpm/rotational cannot be used with atom style template +E: Bond style bpm cannot be used with atom style template This bond style can change the bond topology which is not allowed with this atom style. diff --git a/src/BPM/bond_bpm_rotational.cpp b/src/BPM/bond_bpm_rotational.cpp index 9461329b96..e4220e9198 100644 --- a/src/BPM/bond_bpm_rotational.cpp +++ b/src/BPM/bond_bpm_rotational.cpp @@ -37,6 +37,18 @@ using namespace MathExtra; BondBPMRotational::BondBPMRotational(LAMMPS *lmp) : BondBPM(lmp) { + Kr = nullptr; + Ks = nullptr; + Kt = nullptr; + Kb = nullptr; + Fcr = nullptr; + Fcs = nullptr; + Tct = nullptr; + Tcb = nullptr; + gnorm = nullptr; + gslide = nullptr; + groll = nullptr; + gtwist = nullptr; partial_flag = 1; } @@ -392,16 +404,15 @@ void BondBPMRotational::damping_forces(int i1, int i2, int type, double& Fr, MathExtra::sub3(v[i2], vn2, vt2); MathExtra::sub3(vt2, vt1, tmp); - MathExtra::scale3(-0.5, tmp); + MathExtra::scale3(0.5, tmp); MathExtra::cross3(omega[i1], r, s1); - MathExtra::scale3(0.5, s1); + MathExtra::scale3(-0.5, s1); MathExtra::sub3(s1, tmp, s1); // Eq 12 MathExtra::cross3(omega[i2], r, s2); - MathExtra::scale3(-0.5,s2); + MathExtra::scale3(0.5,s2); MathExtra::add3(s2, tmp, s2); // Eq 13 - MathExtra::scale3(-0.5,s2); MathExtra::sub3(s1, s2, tmp); MathExtra::scale3(gslide[type], tmp); @@ -409,7 +420,7 @@ void BondBPMRotational::damping_forces(int i1, int i2, int type, double& Fr, // Apply corresponding torque MathExtra::cross3(r,tmp,tdamp); - MathExtra::scale3(-0.5, tdamp); // 0.5*r points from particle 2 to midpoint + MathExtra::scale3(0.5, tdamp); MathExtra::add3(torque1on2, tdamp, torque1on2); MathExtra::add3(torque2on1, tdamp, torque2on1); @@ -624,7 +635,7 @@ void BondBPMRotational::coeff(int narg, char **arg) } /* ---------------------------------------------------------------------- - check if pair defined and special_bond settings are valid + check for correct settings and create fix ------------------------------------------------------------------------- */ void BondBPMRotational::init_style() diff --git a/src/BPM/bond_bpm_spring.cpp b/src/BPM/bond_bpm_spring.cpp index c2c5547541..5c731aeb53 100644 --- a/src/BPM/bond_bpm_spring.cpp +++ b/src/BPM/bond_bpm_spring.cpp @@ -32,6 +32,9 @@ using namespace LAMMPS_NS; BondBPMSpring::BondBPMSpring(LAMMPS *lmp) : BondBPM(lmp) { + k = nullptr; + ecrit = nullptr; + gamma = nullptr; partial_flag = 1; } @@ -265,7 +268,7 @@ void BondBPMSpring::coeff(int narg, char **arg) } /* ---------------------------------------------------------------------- - check if pair defined and special_bond settings are valid + check for correct settings and create fix ------------------------------------------------------------------------- */ void BondBPMSpring::init_style() diff --git a/src/BPM/bond_bpm_spring.h b/src/BPM/bond_bpm_spring.h index 385ee38da3..00e11954e0 100644 --- a/src/BPM/bond_bpm_spring.h +++ b/src/BPM/bond_bpm_spring.h @@ -60,16 +60,8 @@ 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/fix_store_local.cpp b/src/fix_store_local.cpp index be5e007231..dc31188e8c 100644 --- a/src/fix_store_local.cpp +++ b/src/fix_store_local.cpp @@ -82,7 +82,7 @@ void FixStoreLocal::add_data(double *input_data, int i, int j) if (nvalues == 1) { vector[ncount] = input_data[0]; } else { - for (int i = 0; i < nvalues; i++) array[ncount][i] = input_data[i]; + for (int n = 0; n < nvalues; n++) array[ncount][n] = input_data[n]; } ncount += 1; From 9417e41676a43e91224e53988b1537c7b02172d1 Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Wed, 23 Mar 2022 11:41:27 -0600 Subject: [PATCH 23/40] Rename sphere/bpm, remove bond instance, add smooth option --- doc/src/Commands_fix.rst | 2 +- doc/src/Examples.rst | 2 +- doc/src/Howto_bpm.rst | 8 +- doc/src/Packages_details.rst | 4 +- doc/src/atom_style.rst | 14 +- doc/src/bond_bpm_rotational.rst | 16 +- doc/src/bond_bpm_spring.rst | 29 +- doc/src/fix.rst | 2 +- ..._sphere_bpm.rst => fix_nve_bpm_sphere.rst} | 14 +- doc/src/read_data.rst | 2 +- examples/bpm/impact/brokenDump | 3173 +++++++++++++++++ examples/bpm/impact/in.bpm.impact.rotational | 10 +- .../log.17Feb2022.impact.rotational.g++.4 | 219 ++ .../impact/log.17Feb2022.impact.spring.g++.4 | 221 ++ .../log.27Oct2021.impact.rotational.g++.4 | 217 -- .../impact/log.27Oct2021.impact.spring.g++.4 | 232 +- examples/bpm/pour/in.bpm.pour | 4 +- examples/bpm/pour/log.17Feb2022.pour.g++.4 | 1091 ++++++ examples/bpm/pour/log.27Oct2021.pour.g++.1 | 1091 ------ src/.gitignore | 8 +- ...sphere_bpm.cpp => atom_vec_bpm_sphere.cpp} | 30 +- ...vec_sphere_bpm.h => atom_vec_bpm_sphere.h} | 10 +- src/BPM/bond_bpm.cpp | 16 +- src/BPM/bond_bpm_rotational.cpp | 35 +- src/BPM/bond_bpm_rotational.h | 4 +- src/BPM/bond_bpm_spring.cpp | 48 +- src/BPM/bond_bpm_spring.h | 1 + ..._sphere_bpm.cpp => fix_nve_bpm_sphere.cpp} | 20 +- ..._nve_sphere_bpm.h => fix_nve_bpm_sphere.h} | 18 +- src/input.cpp | 21 - 30 files changed, 4988 insertions(+), 1574 deletions(-) rename doc/src/{fix_nve_sphere_bpm.rst => fix_nve_bpm_sphere.rst} (89%) create mode 100644 examples/bpm/impact/brokenDump create mode 100644 examples/bpm/impact/log.17Feb2022.impact.rotational.g++.4 create mode 100644 examples/bpm/impact/log.17Feb2022.impact.spring.g++.4 delete mode 100644 examples/bpm/impact/log.27Oct2021.impact.rotational.g++.4 create mode 100644 examples/bpm/pour/log.17Feb2022.pour.g++.4 delete mode 100644 examples/bpm/pour/log.27Oct2021.pour.g++.1 rename src/BPM/{atom_vec_sphere_bpm.cpp => atom_vec_bpm_sphere.cpp} (90%) rename src/BPM/{atom_vec_sphere_bpm.h => atom_vec_bpm_sphere.h} (90%) rename src/BPM/{fix_nve_sphere_bpm.cpp => fix_nve_bpm_sphere.cpp} (87%) rename src/BPM/{fix_nve_sphere_bpm.h => fix_nve_bpm_sphere.h} (76%) diff --git a/doc/src/Commands_fix.rst b/doc/src/Commands_fix.rst index 8e707ee154..eb55c90e92 100644 --- a/doc/src/Commands_fix.rst +++ b/doc/src/Commands_fix.rst @@ -143,7 +143,7 @@ OPT. * :doc:`nve/manifold/rattle ` * :doc:`nve/noforce ` * :doc:`nve/sphere (ko) ` - * :doc:`nve/sphere/bpm ` + * :doc:`nve/bpm/sphere ` * :doc:`nve/spin ` * :doc:`nve/tri ` * :doc:`nvk ` diff --git a/doc/src/Examples.rst b/doc/src/Examples.rst index 5d8a4fdee3..7b6f01b533 100644 --- a/doc/src/Examples.rst +++ b/doc/src/Examples.rst @@ -54,7 +54,7 @@ Lowercase directories +-------------+------------------------------------------------------------------+ | body | body particles, 2d system | +-------------+------------------------------------------------------------------+ -| bpm | bonded particle models of pouring, crushing, and fracture | +| bpm | BPM simulations of pouring elastic grains and plate impact | +-------------+------------------------------------------------------------------+ | cmap | CMAP 5-body contributions to CHARMM force field | +-------------+------------------------------------------------------------------+ diff --git a/doc/src/Howto_bpm.rst b/doc/src/Howto_bpm.rst index 63625fe793..c4b6fc9398 100644 --- a/doc/src/Howto_bpm.rst +++ b/doc/src/Howto_bpm.rst @@ -90,10 +90,10 @@ 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 +they must also track the current orientation of particles and store bonds +and therefore use a :doc:`bpm/sphere atom style `. +This also requires a unique integrator :doc:`fix nve/bpm/sphere +` which numerically integrates orientation similar to :doc:`fix nve/asphere `. To monitor the fracture of bonds in the system, all BPM bond styles diff --git a/doc/src/Packages_details.rst b/doc/src/Packages_details.rst index eb5cae0443..0d9fa230b9 100644 --- a/doc/src/Packages_details.rst +++ b/doc/src/Packages_details.rst @@ -302,11 +302,11 @@ models for mesoscale simulations of solids and fracture. See the * src/BPM filenames -> commands * :doc:`Howto_bpm ` -* :doc:`atom_style sphere/bpm ` +* :doc:`atom_style bpm/sphere ` * :doc:`bond_style bpm/rotational ` * :doc:`bond_style bpm/spring ` * :doc:`compute nbonds/atom ` -* :doc:`fix nve/sphere/bpm ` +* :doc:`fix nve/bpm/sphere ` * :doc:`pair_style bpm/spring ` * examples/bpm diff --git a/doc/src/atom_style.rst b/doc/src/atom_style.rst index 9a2479e42f..bd0c193962 100644 --- a/doc/src/atom_style.rst +++ b/doc/src/atom_style.rst @@ -10,7 +10,7 @@ Syntax atom_style style args -* style = *angle* or *atomic* or *body* or *bond* or *charge* or *dipole* or *dpd* or *edpd* or *electron* or *ellipsoid* or *full* or *line* or *mdpd* or *molecular* or *oxdna* or *peri* or *smd* or *sph* or *sphere* or *sphere/bpm* or *spin* or *tdpd* or *tri* or *template* or *hybrid* +* style = *angle* or *atomic* or *body* or *bond* or *charge* or *dipole* or *dpd* or *edpd* or *electron* or *ellipsoid* or *full* or *line* or *mdpd* or *molecular* or *oxdna* or *peri* or *smd* or *sph* or *sphere* or *bpm/sphere* or *spin* or *tdpd* or *tri* or *template* or *hybrid* .. parsed-literal:: @@ -21,7 +21,7 @@ Syntax see the :doc:`Howto body ` doc page for details *sphere* arg = 0/1 (optional) for static/dynamic particle radii - *sphere/bpm* arg = 0/1 (optional) for static/dynamic particle radii + *bpm/sphere* arg = 0/1 (optional) for static/dynamic particle radii *tdpd* arg = Nspecies Nspecies = # of chemical species *template* arg = template-ID @@ -121,7 +121,7 @@ quantities. +--------------+-----------------------------------------------------+--------------------------------------+ | *sphere* | diameter, mass, angular velocity | granular models | +--------------+-----------------------------------------------------+--------------------------------------+ -| *sphere/bpm* | diameter, mass, angular velocity, quaternion | granular bonded particle models (bpm)| +| *bpm/sphere* | diameter, mass, angular velocity, quaternion | granular bonded particle models (BPM)| +--------------+-----------------------------------------------------+--------------------------------------+ | *spin* | magnetic moment | system with magnetic particles | +--------------+-----------------------------------------------------+--------------------------------------+ @@ -144,7 +144,7 @@ quantities. output the custom values. All of the above styles define point particles, except the *sphere*, -*sphere/bpm*, *ellipsoid*, *electron*, *peri*, *wavepacket*, *line*, +*bpm/sphere*, *ellipsoid*, *electron*, *peri*, *wavepacket*, *line*, *tri*, and *body* styles, which define finite-size particles. See the :doc:`Howto spherical ` page for an overview of using finite-size particle models with LAMMPS. @@ -154,7 +154,7 @@ per-type basis, using the :doc:`mass ` command, The finite-size particle styles assign mass to individual particles on a per-particle basis. -For the *sphere* and *sphere/bpm* styles, the particles are spheres and each stores a +For the *sphere* and *bpm/sphere* styles, the particles are spheres and each stores a per-particle diameter and mass. If the diameter > 0.0, the particle is a finite-size sphere. If the diameter = 0.0, it is a point particle. Note that by use of the *disc* keyword with the :doc:`fix @@ -162,7 +162,7 @@ nve/sphere `, :doc:`fix nvt/sphere `, :doc:`fix nph/sphere `, :doc:`fix npt/sphere ` commands for the *sphere* style, spheres can be effectively treated as 2d discs for a 2d simulation if desired. See also the :doc:`set -density/disc ` command. The *sphere* and *sphere/bpm* styles take an optional 0 +density/disc ` command. The *sphere* and *bpm/sphere* styles take an optional 0 or 1 argument. A value of 0 means the radius of each sphere is constant for the duration of the simulation. A value of 1 means the radii may vary dynamically during the simulation, e.g. due to use of @@ -199,7 +199,7 @@ position, which is represented by the eradius = electron size. For the *peri* style, the particles are spherical and each stores a per-particle mass and volume. -The *sphere/bpm* style is part of the BPM package. +The *bpm/sphere* style is part of the BPM package. The *oxdna* style is for coarse-grained nucleotides and stores the 3'-to-5' polarity of the nucleotide strand, which is set through diff --git a/doc/src/bond_bpm_rotational.rst b/doc/src/bond_bpm_rotational.rst index 9e62d8d1be..40b1752285 100644 --- a/doc/src/bond_bpm_rotational.rst +++ b/doc/src/bond_bpm_rotational.rst @@ -10,7 +10,7 @@ Syntax bond_style bpm/rotational keyword value attribute1 attribute2 ... -* optional keyword = *overlay/pair* or *store/local* +* optional keyword = *overlay/pair* or *store/local* or *smooth* .. parsed-literal:: @@ -27,6 +27,9 @@ Syntax *overlay/pair* value = none bonded particles will still interact with pair forces + *smooth* value = *yes* or *no* + smooths bond forces near the breaking point + Examples """""""" @@ -87,9 +90,10 @@ 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 +can be optionally 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)`. +is calculated as :math:`w = (1.0 - B^4)`. This smoothing factor can be +added or removed using the *smooth* keyword. Finally, additional damping forces and torques are applied to the two particles. A force is applied proportional to the difference in the @@ -219,17 +223,17 @@ setting special_bonds lj/coul 1 1 1 -The *bpm/rotational* style requires :doc:`atom style sphere/bpm `. +The *bpm/rotational* style requires :doc:`atom style bpm/sphere `. Related commands """""""""""""""" -:doc:`bond_coeff `, :doc:`fix nve/sphere/bpm ` +:doc:`bond_coeff `, :doc:`fix nve/bpm/sphere ` Default """"""" -none +The option defaults are *smooth* = *yes* ---------- diff --git a/doc/src/bond_bpm_spring.rst b/doc/src/bond_bpm_spring.rst index beaf677e10..2881bab5f7 100644 --- a/doc/src/bond_bpm_spring.rst +++ b/doc/src/bond_bpm_spring.rst @@ -10,7 +10,7 @@ Syntax bond_style bpm/spring keyword value attribute1 attribute2 ... -* optional keyword = *overlay/pair* or *store/local* +* optional keyword = *overlay/pair* or *store/local* or *smooth* .. parsed-literal:: @@ -27,6 +27,9 @@ Syntax *overlay/pair* value = none bonded particles will still interact with pair forces + *smooth* value = *yes* or *no* + smooths bond forces near the breaking point + Examples """""""" @@ -59,17 +62,11 @@ particles. The force has a magnitude of 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` is an optional smoothing factor discussed below. 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. -.. 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 +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) `): @@ -82,6 +79,14 @@ 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` can be added or removed using the +*smooth* keyword. It 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 . + 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 @@ -188,7 +193,7 @@ Related commands Default """"""" -none +The option defaults are *smooth* = *yes* ---------- diff --git a/doc/src/fix.rst b/doc/src/fix.rst index deabf59a73..7e58f6f9bf 100644 --- a/doc/src/fix.rst +++ b/doc/src/fix.rst @@ -286,7 +286,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 the BPM package +* :doc:`nve/bpm/sphere ` - 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_bpm_sphere.rst similarity index 89% rename from doc/src/fix_nve_sphere_bpm.rst rename to doc/src/fix_nve_bpm_sphere.rst index 7183174bfb..0a320d8fca 100644 --- a/doc/src/fix_nve_sphere_bpm.rst +++ b/doc/src/fix_nve_bpm_sphere.rst @@ -1,6 +1,6 @@ -.. index:: fix nve/sphere/bpm +.. index:: fix nve/bpm/sphere -fix nve/sphere/bpm command +fix nve/bpm/sphere command ====================== Syntax @@ -8,10 +8,10 @@ Syntax .. parsed-literal:: - fix ID group-ID nve/sphere/bpm + fix ID group-ID nve/bpm/sphere * ID, group-ID are documented in :doc:`fix ` command -* nve/sphere/bpm = style name of this fix command +* nve/bpm/sphere = style name of this fix command * zero or more keyword/value pairs may be appended * keyword = *disc* @@ -24,8 +24,8 @@ Examples .. code-block:: LAMMPS - fix 1 all nve/sphere/bpm - fix 1 all nve/sphere/bpm disc + fix 1 all nve/bpm/sphere + fix 1 all nve/bpm/sphere disc Description """"""""""" @@ -66,7 +66,7 @@ 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 +radius, and a quaternion as defined by the :doc:`atom_style bpm/sphere ` command. All particles in the group must be finite-size spheres with diff --git a/doc/src/read_data.rst b/doc/src/read_data.rst index dbfafbf799..68e1efc496 100644 --- a/doc/src/read_data.rst +++ b/doc/src/read_data.rst @@ -650,7 +650,7 @@ of analysis. - atom-ID atom-type rho esph cv x y z * - sphere - atom-ID atom-type diameter density x y z - * - sphere/bpm + * - bpm/sphere - atom-ID molecule-ID atom-type diameter density x y z * - spin - atom-ID atom-type x y z spx spy spz sp diff --git a/examples/bpm/impact/brokenDump b/examples/bpm/impact/brokenDump new file mode 100644 index 0000000000..ef78518c91 --- /dev/null +++ b/examples/bpm/impact/brokenDump @@ -0,0 +1,3173 @@ +276 5469 5471 +288 1815 1931 +290 1810 1815 +293 1815 1816 +295 5350 5351 +300 1813 1815 +288 1815 1931 +276 5469 5471 +278 5475 5477 +283 5349 5350 +287 5470 5477 +290 5472 5477 +292 5350 5352 +294 5477 5478 +295 5350 5351 +305 1702 1704 +308 1705 5351 +313 1699 1704 +324 1820 5471 +327 1813 1814 +332 1937 1938 +339 5228 5349 +350 1811 1818 +353 1817 5348 +361 1588 1700 +362 1700 5348 +364 1817 5469 +368 1700 5228 +368 1704 1819 +372 1817 5467 +373 5351 5470 +374 1701 1818 +374 1817 5468 +377 1584 1694 +380 5231 5349 +383 1588 5349 +383 5231 5350 +386 1458 1574 +388 1811 1812 +399 1464 1580 +399 1817 1822 +306 1938 5471 +308 1928 1933 +309 1933 1934 +310 1933 2048 +311 5712 5830 +313 1931 1933 +332 1937 1938 +333 1938 1939 +333 2056 2171 +338 1938 1940 +340 2172 2174 +352 2172 5712 +353 2056 2057 +355 2056 2172 +359 5712 5831 +362 2057 2169 +367 1932 1938 +368 2052 5709 +372 2052 2053 +375 5712 5713 +375 2172 2173 +377 2174 2286 +385 5711 5712 +385 2169 5709 +386 1935 1936 +387 2054 2055 +387 2169 5829 +398 2277 2278 +399 2057 2171 +303 5232 5350 +303 5477 5595 +304 5352 5470 +306 1938 5471 +306 5483 5484 +312 5350 5355 +312 5481 5483 +312 5471 5591 +316 5471 5590 +318 5357 5470 +324 1820 5471 +330 5470 5475 +331 5354 5473 +332 5476 5481 +332 5471 5589 +332 5483 5601 +339 5228 5349 +341 5473 5474 +343 5358 5476 +346 5349 5352 +346 5355 5357 +347 5237 5350 +350 5357 5358 +351 5354 5467 +353 1817 5348 +358 5348 5467 +362 1700 5348 +362 5601 5602 +366 5470 5471 +367 5472 5475 +371 5476 5477 +372 1817 5467 +372 5480 5593 +373 5351 5470 +373 5601 5603 +374 1817 5468 +380 5231 5349 +383 1588 5349 +383 5231 5350 +387 5478 5481 +388 5234 5353 +389 5596 5601 +397 5484 5486 +400 5593 5601 +303 5477 5595 +311 5712 5830 +312 5471 5591 +316 5471 5590 +319 5717 5719 +325 5831 5833 +332 5471 5589 +349 5603 5604 +355 5717 5722 +359 5712 5831 +368 2052 5709 +370 5720 5722 +372 5480 5593 +372 5600 5603 +373 5600 5604 +373 5601 5603 +374 5587 5594 +375 5712 5713 +379 5588 5708 +381 5600 5714 +383 5720 5721 +385 5711 5712 +385 2169 5709 +387 2169 5829 +388 5722 5723 +391 5828 5829 +394 5833 5948 +398 5710 5712 +400 5593 5601 +401 1820 1822 +403 1817 1819 +404 1586 1588 +405 1569 1685 +410 1821 1938 +411 1822 5469 +412 1568 1575 +413 1822 1937 +421 1699 1819 +421 5232 5349 +422 1704 1814 +423 1582 1584 +431 1565 1572 +431 1578 1688 +431 1812 1929 +433 5469 5472 +435 1467 1585 +442 1809 1810 +448 1685 1692 +448 1698 1808 +451 1703 5349 +454 1563 1679 +454 1935 1937 +455 1703 5351 +457 1582 1694 +458 1813 1816 +459 1695 1805 +460 1926 1927 +461 1699 1814 +468 1810 1816 +471 1814 1819 +476 1701 1819 +478 1566 1682 +480 1818 1929 +481 1920 1925 +482 1580 1587 +485 5468 5469 +486 1689 1805 +490 1457 1464 +490 1806 1810 +493 1587 1588 +493 1814 1816 +497 1682 1689 +498 1699 1816 +500 1688 1805 +500 1689 1695 +402 2049 2051 +402 2054 2057 +410 1821 1938 +416 2052 5588 +417 2055 2056 +420 1939 2049 +423 1923 1930 +423 2161 2271 +426 2050 2160 +431 1812 1929 +431 2044 2154 +437 2284 2393 +441 1940 2054 +441 2174 5832 +442 2166 2173 +448 1927 1928 +449 2286 5949 +451 2163 2170 +452 2037 2038 +457 2396 2397 +460 1926 1927 +461 1936 2046 +461 2406 2513 +464 1930 1934 +465 2055 5712 +471 1931 1934 +473 1940 5710 +474 2154 2159 +475 2274 2275 +477 1933 2049 +478 1923 2040 +479 2037 2039 +479 2399 2400 +480 1818 1929 +481 1920 1925 +482 1930 2048 +482 2039 2042 +482 2164 2280 +482 2174 5830 +485 1930 1931 +486 1930 1936 +486 2046 2053 +487 1928 1930 +488 2167 2283 +495 2156 2159 +498 1928 1934 +403 5368 5369 +407 5484 5601 +409 5601 5604 +412 5232 5352 +414 5476 5596 +416 5123 5236 +419 5484 5602 +421 5232 5349 +421 5472 5595 +422 5129 5242 +425 5362 5363 +426 5347 5354 +426 5352 5355 +430 5246 5359 +433 5469 5472 +434 5481 5484 +437 5135 5248 +438 5365 5366 +439 5358 5478 +439 5483 5596 +441 5362 5369 +450 5363 5482 +450 5484 5487 +456 5484 5607 +458 5480 5599 +459 5242 5243 +461 5235 5236 +463 5479 5486 +464 5482 5483 +467 5234 5347 +467 5361 5362 +469 5232 5355 +470 5474 5475 +474 5116 5117 +475 5356 5363 +480 5234 5240 +481 5485 5487 +484 5480 5484 +485 5468 5469 +488 5476 5478 +493 5233 5238 +494 5356 5361 +495 5118 5238 +496 5363 5483 +497 5018 5128 +498 5233 5240 +500 5370 5488 +406 5591 5711 +406 5722 5724 +406 5969 5976 +407 5721 5725 +408 5600 5720 +409 5601 5604 +413 5597 5717 +419 5970 6089 +421 5472 5595 +421 6074 6081 +425 5719 5722 +425 5964 6083 +426 5594 5598 +426 5831 5838 +429 5840 5841 +436 5833 5838 +437 5724 5843 +439 5593 5595 +441 5951 5958 +444 5830 5831 +446 5713 5831 +449 5831 5951 +449 2286 5949 +453 5722 5725 +453 5709 5829 +454 5599 5600 +454 5591 5710 +455 5834 5842 +458 5480 5599 +459 5724 5837 +462 5589 5592 +462 6084 6202 +464 5598 5603 +465 2055 5712 +472 5954 5955 +473 1940 5710 +476 5594 5708 +477 5856 5975 +482 2174 5830 +482 5844 5963 +484 5714 5721 +488 5592 5708 +490 6083 6090 +501 1802 1807 +503 1805 1807 +504 1689 1806 +507 1569 1679 +507 1693 1805 +510 1688 1693 +511 1575 1690 +518 1799 1807 +520 1227 1340 +521 1803 1804 +522 1347 1463 +525 1575 1691 +528 1804 1925 +529 1581 1697 +531 1446 1562 +531 1573 1576 +535 1574 1575 +536 1802 1809 +548 1692 1693 +552 1693 1807 +553 1575 1692 +553 1819 1821 +555 1699 1813 +560 1922 1925 +569 5109 5111 +569 1705 1819 +576 1570 1690 +580 1808 1809 +584 1581 1696 +586 1471 5111 +589 1459 1576 +599 1702 1705 +502 2160 2167 +503 1922 1924 +503 2036 2037 +504 1922 2037 +504 2169 5830 +505 2057 2174 +505 2168 2283 +507 1924 2040 +507 2281 2390 +514 2162 2167 +514 2167 2168 +515 1929 1934 +515 2044 2159 +524 1929 1936 +530 2165 2167 +536 2167 2282 +549 2158 2274 +549 2519 2520 +560 1922 1925 +560 2035 2039 +560 2158 2276 +561 2289 5832 +562 1932 1939 +562 2263 2372 +567 2041 2157 +567 2381 2382 +581 1920 2037 +583 1920 1927 +583 5950 5953 +586 2042 2045 +593 5951 5952 +596 5833 5950 +600 2158 2159 +502 5254 5255 +507 5232 5237 +508 5473 5478 +511 5239 5240 +512 5111 5112 +513 5233 5353 +519 4901 5011 +519 5012 5122 +522 5235 5238 +522 5240 5241 +523 5260 5261 +523 5364 5369 +525 5490 5608 +528 5237 5238 +538 5479 5480 +542 5488 5493 +553 5611 5613 +555 5246 5365 +555 5489 5608 +557 4895 5005 +561 5481 5601 +564 5140 5141 +569 5109 5111 +571 5114 5235 +572 5488 5495 +573 5230 5237 +582 5490 5492 +584 5024 5134 +586 1471 5111 +587 5244 5367 +587 5352 5354 +587 5490 5495 +591 5486 5599 +594 5347 5348 +502 5959 6077 +504 2169 5830 +507 5606 5726 +519 5835 5948 +521 5967 6086 +523 5733 5852 +524 5719 5842 +529 5609 5728 +529 5833 5836 +541 5956 5958 +541 5968 5971 +547 5717 5723 +549 5961 6074 +551 6071 6190 +553 5611 5613 +554 5588 5710 +558 5594 5714 +559 5592 5713 +561 5481 5601 +564 5970 6083 +568 5853 5972 +569 5592 5716 +574 5606 5727 +574 5835 5955 +579 5592 5710 +583 5950 5953 +590 5855 5862 +591 5486 5599 +591 5718 5831 +593 5951 5952 +596 5605 5726 +596 5833 5950 +602 1820 1821 +603 1461 1571 +606 1683 1793 +607 1808 1815 +609 1322 1329 +610 1583 1585 +615 1576 1579 +616 1699 1811 +621 1557 1673 +622 1583 5229 +630 1468 1470 +634 1470 1471 +634 5111 5229 +635 1469 1471 +635 1469 1586 +639 1572 1576 +639 1698 1814 +639 1809 1926 +644 5229 5230 +645 1588 1702 +649 1690 1693 +652 1696 1813 +656 1574 1579 +657 1693 1813 +658 1819 1820 +659 1467 1577 +661 1455 1565 +669 1695 1811 +677 1100 1107 +678 1221 1334 +679 1433 1440 +679 1688 1696 +680 1687 1807 +682 1812 1816 +683 1689 1799 +689 1585 5229 +690 1701 1811 +692 1007 1014 +693 1466 1471 +696 1328 1335 +699 1582 1585 +601 1928 2048 +606 2619 2620 +610 2162 2165 +613 2387 2388 +615 2040 2047 +615 2266 2375 +619 2039 2159 +622 2053 2057 +624 2151 2156 +626 2053 2171 +627 2169 2174 +627 2287 2402 +628 2172 5830 +629 2291 2402 +634 2619 2621 +637 2034 2042 +639 1809 1926 +641 2613 2614 +646 1924 2034 +649 2145 2152 +649 2136 2137 +652 2626 2730 +653 2148 2155 +654 1932 1933 +655 1934 2048 +656 2501 2502 +660 2274 2276 +662 2253 2254 +672 1934 1937 +673 2369 2370 +675 2146 2262 +678 1917 1924 +685 2052 2054 +689 1929 1930 +697 1917 2034 +700 2057 5709 +604 5611 5618 +605 4907 5017 +611 5244 5359 +628 5245 5252 +634 5111 5229 +644 5229 5230 +647 5023 5024 +648 5012 5128 +651 4897 4898 +658 5111 5230 +659 5267 5380 +660 5608 5613 +661 5602 5603 +667 5236 5238 +675 5159 5272 +675 5247 5250 +681 5604 5607 +684 5386 5387 +684 5475 5478 +603 5953 5956 +604 5611 5618 +605 6076 6078 +617 6440 6447 +622 5716 5717 +625 5966 5973 +627 5956 6076 +628 2172 5830 +631 6071 6078 +634 5610 5612 +640 5592 5598 +643 5595 5598 +645 5599 5604 +646 5987 5994 +647 5610 5615 +648 5959 6076 +658 5605 5606 +658 5729 5734 +660 5608 5613 +661 5602 5603 +662 5593 5598 +664 6331 6338 +676 5615 5734 +681 5604 5607 +689 5726 5727 +690 5603 5723 +690 5604 5723 +690 5833 5953 +691 5867 5874 +694 5598 5717 +697 5714 5716 +700 2057 5709 +701 1448 1449 +710 1810 1813 +711 1467 1583 +714 1574 1581 +727 1459 1573 +749 1453 1459 +753 1571 1573 +755 1442 1449 +755 1799 1806 +759 1661 1668 +759 1685 1690 +762 1453 1456 +764 1804 1920 +770 1571 1572 +772 1442 1448 +774 1581 1691 +778 1319 1326 +778 1699 1702 +778 1698 1813 +784 1587 1697 +788 1570 1576 +789 1684 1690 +791 1796 1803 +792 1106 1113 +794 1583 1586 +797 1335 1445 +797 5107 5109 +799 1451 1452 +800 1806 1809 +702 5829 5948 +704 1919 1920 +708 2376 2483 +711 2291 5949 +716 2037 2044 +721 2160 2162 +724 2489 2490 +728 1918 1919 +728 1927 2042 +730 2496 2601 +731 5832 5950 +732 1928 1931 +734 2279 2281 +738 2020 2130 +750 1918 2034 +752 2055 5710 +757 2608 2712 +764 1804 1920 +772 2276 2277 +773 2153 2156 +775 2275 2390 +783 2401 2403 +787 2286 5829 +791 1929 1937 +792 2035 2151 +798 1932 1934 +708 4793 4900 +709 5036 5146 +711 5243 5356 +724 5152 5153 +726 5239 5246 +733 5483 5602 +746 5245 5253 +754 5236 5243 +756 5245 5250 +758 5230 5232 +762 4919 5029 +764 5607 5610 +770 5347 5355 +771 5364 5487 +787 5234 5235 +789 5125 5132 +791 5364 5484 +797 5107 5109 +702 5829 5948 +703 5732 5734 +710 6227 6343 +711 2291 5949 +711 6221 6337 +719 5597 5711 +719 5846 5847 +725 5753 5760 +730 5618 5732 +731 5832 5950 +734 5853 5966 +734 6080 6081 +745 5958 6071 +751 6101 6108 +752 2055 5710 +754 5598 5601 +755 5721 5834 +755 6107 6114 +759 5965 6088 +764 5607 5610 +770 5725 5728 +771 5954 6074 +772 5963 5965 +774 5965 6082 +775 5845 5848 +793 6199 6200 +793 6446 6453 +795 5727 5840 +795 5961 6082 +799 5734 5737 +804 1454 1455 +805 1098 1211 +807 1687 1689 +809 1331 1332 +810 984 1094 +817 1332 1450 +820 1326 1442 +826 1442 1444 +827 1221 1333 +834 1911 1918 +846 1095 1208 +846 1821 1822 +851 1691 1692 +855 1800 1804 +858 1574 1580 +865 1338 1448 +867 995 1002 +871 1703 1704 +872 1196 1203 +872 1687 1799 +876 1819 1822 +880 1197 1310 +882 1332 1333 +883 881 989 +883 1687 1801 +886 1082 1089 +887 1587 1704 +887 1689 1807 +888 1704 5351 +890 1818 1937 +897 1690 1691 +804 1919 1922 +809 2149 2265 +824 1921 2037 +825 2052 5710 +834 1911 1918 +834 2041 2158 +835 2041 2045 +849 1921 2031 +856 2037 2042 +872 1917 1919 +888 5950 5952 +890 1818 1937 +803 5467 5468 +807 5011 5018 +808 5130 5250 +808 5254 5261 +813 5130 5253 +819 5131 5132 +819 5485 5492 +819 5488 5490 +834 4882 4883 +842 5364 5370 +845 5352 5467 +847 5227 5234 +848 5370 5490 +853 5125 5131 +855 5485 5493 +862 5020 5021 +863 5228 5348 +871 5599 5601 +874 5108 5114 +876 5366 5370 +878 5008 5015 +878 5369 5488 +879 5015 5133 +885 5021 5131 +888 1704 5351 +890 5125 5133 +890 5366 5485 +812 6081 6085 +814 5850 5968 +818 6452 6459 +819 5725 5730 +820 5723 5725 +825 2052 5710 +826 5604 5728 +832 5725 5842 +837 6102 6220 +846 5959 6082 +846 5973 6086 +861 6084 6201 +870 5598 5716 +871 5599 5601 +871 5725 5845 +871 6085 6201 +887 6233 6349 +892 6077 6196 +899 6337 6344 +903 1576 1578 +904 1336 1339 +909 1704 1705 +909 1806 1917 +913 1218 1325 +913 1700 1705 +923 1470 1586 +924 1304 1311 +929 880 887 +929 978 1088 +931 875 983 +934 1325 1330 +936 1459 1574 +940 1571 1576 +948 1695 1813 +950 1325 1332 +955 1821 1937 +962 1212 1325 +968 1421 1428 +970 1336 1450 +972 1816 1821 +974 1817 1818 +978 1076 1083 +980 1806 1807 +986 1577 1579 +987 1325 1333 +994 1457 1458 +995 1216 1328 +999 1214 1215 +1000 1810 1925 +904 2162 2277 +907 1923 1924 +907 2172 5832 +909 1806 1917 +909 2396 2403 +916 2291 6070 +917 2391 2504 +918 5829 5830 +919 2157 2158 +921 2405 5952 +923 1915 1916 +923 2259 2266 +940 2043 2050 +948 1913 1916 +951 2040 2048 +952 2279 2398 +955 1821 1937 +955 2405 2519 +964 2276 2282 +964 2498 2505 +967 2256 2263 +973 2043 2160 +979 1932 1937 +984 2390 2392 +998 2392 2395 +1000 1810 1925 +902 5132 5251 +904 5131 5251 +911 4786 4787 +922 5242 5249 +934 5360 5479 +939 5136 5138 +946 5488 5489 +969 5249 5362 +976 5364 5367 +979 5257 5259 +979 5257 5264 +981 5249 5368 +983 5243 5362 +988 5393 5506 +994 5248 5255 +906 5966 5974 +907 2172 5832 +916 2291 6070 +918 5829 5830 +926 6092 6093 +936 5600 5722 +936 5963 5968 +937 5963 5964 +940 5853 5974 +941 5851 5856 +946 5966 5971 +948 5858 5859 +951 5840 5960 +963 5847 5960 +966 5605 5612 +973 5838 5951 +979 5852 5857 +987 5851 5974 +988 5730 5843 +993 5841 5845 +994 6355 6362 +996 5851 5854 +997 5965 5968 +1007 1683 1801 +1015 1575 1581 +1016 1693 1696 +1017 1465 1582 +1018 1676 1677 +1019 1332 1336 +1024 1464 1574 +1026 1532 1539 +1027 1212 1319 +1036 1442 1559 +1042 1087 1090 +1043 1790 1797 +1044 1678 1681 +1044 1804 1919 +1059 1330 1444 +1059 1458 1568 +1066 1690 1692 +1071 1792 1905 +1073 1692 1807 +1074 1212 1216 +1077 1690 1807 +1080 1071 1184 +1083 1326 1436 +1090 1705 5469 +1098 1681 1684 +1003 2505 2610 +1004 2168 2288 +1013 2257 2372 +1029 2372 2373 +1037 2154 2161 +1037 2162 2168 +1040 2279 2282 +1044 1804 1919 +1050 1933 1939 +1055 2276 2279 +1064 2389 2506 +1071 1792 1905 +1073 2162 2282 +1078 2278 2392 +1084 2156 2161 +1085 6072 6190 +1089 2719 2820 +1014 5512 5513 +1019 5370 5487 +1026 5010 5013 +1032 5228 5347 +1032 5244 5362 +1033 5130 5135 +1059 5009 5013 +1064 5240 5244 +1070 5488 5608 +1076 5480 5481 +1078 5015 5016 +1085 5029 5030 +1088 5252 5253 +1089 5130 5133 +1090 5127 5128 +1090 1705 5469 +1091 5118 5241 +1094 5487 5490 +1096 5235 5237 +1002 6081 6199 +1004 5962 5964 +1008 5955 5956 +1010 5841 5847 +1011 5968 5969 +1014 5961 6080 +1015 5954 5961 +1016 6206 6316 +1018 5948 5956 +1020 6671 6678 +1022 5844 5845 +1023 5714 5715 +1023 5841 5842 +1032 5843 5844 +1032 5841 5844 +1033 5967 5968 +1038 5963 5969 +1039 5972 5973 +1041 6238 6245 +1044 5844 5962 +1048 5966 5968 +1052 5839 5841 +1053 6428 6435 +1054 5953 5958 +1056 5961 5967 +1060 6076 6079 +1071 6083 6084 +1071 6322 6323 +1072 5839 5954 +1082 6433 6435 +1085 6072 6190 +1088 5754 5873 +1088 5834 5841 +1097 5728 5729 +1098 5843 5849 +1102 1336 1456 +1113 1688 1695 +1117 1801 1802 +1118 731 738 +1118 1696 1698 +1121 1335 1450 +1132 1327 1330 +1136 1453 1455 +1139 1330 1442 +1139 1686 1801 +1142 646 653 +1149 1802 1803 +1155 1327 1444 +1157 953 960 +1158 1216 1327 +1169 1341 1451 +1173 643 650 +1176 1806 1923 +1178 1696 1699 +1181 552 652 +1184 1216 1330 +1185 1330 1335 +1186 1686 1796 +1198 640 647 +1101 2839 2937 +1102 2044 2160 +1107 2274 2279 +1112 6069 6073 +1114 2152 2268 +1128 1912 2028 +1131 2165 2168 +1144 2043 2048 +1148 2402 6068 +1152 2269 2384 +1156 2051 2171 +1159 2150 2270 +1174 2269 2378 +1176 1806 1923 +1176 2269 2386 +1181 2385 2492 +1193 2404 2407 +1194 2516 2521 +1198 1930 2046 +1199 2384 2385 +1103 5611 5616 +1105 5015 5019 +1111 5014 5021 +1113 5493 5496 +1114 4892 5010 +1115 5250 5253 +1127 4891 4892 +1128 5248 5250 +1131 5132 5245 +1133 5136 5259 +1133 5256 5371 +1135 5253 5256 +1139 5495 5496 +1142 4890 4892 +1144 4880 4884 +1146 5014 5022 +1156 5014 5016 +1157 5244 5249 +1159 5011 5128 +1163 5258 5377 +1164 4483 4582 +1174 4360 4361 +1174 5015 5131 +1176 5014 5019 +1178 5239 5247 +1179 5262 5265 +1181 5247 5249 +1187 4772 4885 +1187 5016 5019 +1187 5130 5248 +1190 4588 4589 +1194 4476 4477 +1200 5247 5248 +1103 5611 5616 +1103 6107 6108 +1105 6204 6207 +1111 6201 6202 +1112 6069 6073 +1112 6210 6324 +1114 5739 5860 +1128 5597 5716 +1135 5852 5858 +1141 6084 6090 +1148 2402 6068 +1148 6200 6204 +1150 5865 5978 +1150 6206 6323 +1152 5720 5727 +1157 5854 5857 +1160 5833 5951 +1168 5604 5606 +1168 5849 5850 +1173 6074 6075 +1175 5743 5860 +1180 5959 5962 +1181 5610 5728 +1190 5960 5967 +1195 5951 5956 +1195 6204 6318 +1212 641 743 +1212 1692 1808 +1213 1680 1796 +1215 557 564 +1216 664 671 +1216 737 744 +1220 1098 1205 +1231 1680 1681 +1234 1451 1457 +1237 1681 1795 +1245 1179 1292 +1247 1576 1690 +1249 1092 1199 +1249 1324 1436 +1254 473 480 +1260 468 563 +1260 551 558 +1260 1695 1696 +1265 1211 1212 +1265 1693 1695 +1269 1332 1442 +1272 1808 1810 +1277 1670 1677 +1280 1178 1185 +1287 1320 1430 +1289 1679 1685 +1291 1694 1696 +1294 1212 1218 +1294 1564 1678 +1296 844 851 +1297 549 649 +1298 1324 1438 +1298 1670 1675 +1210 2165 2171 +1211 2500 2506 +1214 2279 2284 +1227 6068 6069 +1233 2269 2273 +1233 2492 2499 +1235 2153 2270 +1248 2385 2498 +1258 2263 2378 +1267 2516 6187 +1268 2050 2166 +1268 2146 2264 +1268 3111 3198 +1269 1906 1907 +1272 2500 2501 +1273 2493 2604 +1277 2497 2499 +1277 2521 6306 +1280 2395 2398 +1283 2054 2171 +1283 2501 2508 +1292 2401 2407 +1295 2800 2898 +1299 3034 3125 +1201 5258 5379 +1203 4902 5014 +1204 5256 5258 +1207 5248 5249 +1209 4595 4698 +1213 5242 5362 +1214 4704 4705 +1214 4784 4897 +1216 5131 5133 +1220 4367 4464 +1222 5359 5360 +1231 5467 5475 +1232 5244 5361 +1234 4373 4470 +1234 5500 5501 +1235 4168 4255 +1239 5490 5613 +1244 5129 5247 +1254 5607 5608 +1255 5131 5136 +1260 4261 4262 +1262 5124 5241 +1262 5260 5262 +1271 5611 5612 +1272 5124 5129 +1273 5120 5241 +1281 5128 5129 +1282 5020 5027 +1283 5264 5265 +1286 5262 5267 +1293 4370 4467 +1296 4363 4364 +1299 4711 4816 +1202 5957 5958 +1203 5723 5728 +1214 5969 5971 +1215 6329 6437 +1217 5837 5842 +1220 5730 5848 +1221 5610 5731 +1221 5853 5854 +1227 5957 5959 +1227 6068 6069 +1228 6684 6791 +1230 6379 6386 +1230 6477 6590 +1230 6902 6909 +1236 5849 5851 +1239 5490 5613 +1243 5729 5736 +1245 6077 6078 +1253 5610 5734 +1257 5609 5723 +1265 5963 6083 +1267 2516 6187 +1271 5611 5612 +1273 5956 5959 +1278 5745 5858 +1278 5863 5866 +1279 5962 5965 +1279 6079 6082 +1279 6262 6269 +1281 6690 6797 +1284 5840 5847 +1285 6992 7088 +1288 5966 5967 +1288 6584 6591 +1288 6579 6689 +1290 6090 6202 +1293 6780 6884 +1296 5721 5840 +1297 5597 5598 +1297 5853 5857 +1300 5745 5749 +1302 1235 1236 +1303 1455 1573 +1304 1222 1333 +1311 1678 1679 +1313 1210 1216 +1324 548 555 +1328 1796 1797 +1329 1329 1439 +1331 1670 1671 +1341 1210 1213 +1342 1584 1700 +1344 1678 1680 +1356 4995 5109 +1361 1801 1804 +1366 1807 1808 +1367 459 554 +1374 1314 1424 +1374 1287 1403 +1376 1215 1322 +1377 750 856 +1382 1328 1330 +1388 647 749 +1395 1096 1207 +1399 1330 1445 +1307 2689 2790 +1308 2497 2612 +1315 2154 2156 +1316 2521 6188 +1318 2171 2173 +1320 2264 2267 +1325 2695 2796 +1326 2898 2899 +1328 3028 3119 +1329 2799 2800 +1331 3138 3225 +1332 2908 3003 +1334 2045 2048 +1334 2045 2047 +1337 2500 2503 +1338 2161 2277 +1343 2261 2380 +1343 2910 2911 +1349 2045 2051 +1352 2264 2270 +1353 1922 2042 +1353 2565 2566 +1356 2454 2559 +1356 2676 2677 +1358 1917 1918 +1358 2803 2901 +1360 2057 2172 +1364 2577 2578 +1366 2815 2913 +1370 3131 3132 +1374 2707 2808 +1384 2229 2230 +1397 3031 3122 +1399 2162 2274 +1302 4473 4474 +1304 5370 5493 +1305 4364 4461 +1307 4271 4363 +1308 4990 4995 +1310 5263 5270 +1311 4592 4695 +1316 5122 5129 +1316 5133 5136 +1317 5072 5182 +1317 5256 5261 +1318 4274 4366 +1320 4701 4702 +1320 4828 4829 +1321 5375 5493 +1325 4480 4579 +1326 5489 5490 +1330 5241 5242 +1330 5374 5375 +1333 4717 4822 +1333 5024 5141 +1350 4364 4368 +1352 4262 4360 +1355 4363 4368 +1356 4995 5109 +1357 4585 4586 +1362 5370 5373 +1367 5496 5613 +1369 4155 4156 +1369 5239 5241 +1375 5473 5480 +1375 5617 5622 +1376 4708 4813 +1377 4835 4942 +1380 4585 4695 +1388 5132 5138 +1389 4162 4249 +1389 4265 4357 +1393 5241 5247 +1398 5107 5114 +1309 6327 6330 +1310 5898 6017 +1314 6578 6585 +1319 5725 5848 +1321 5717 5718 +1324 5739 5745 +1333 6208 6209 +1341 6322 6437 +1343 5832 5951 +1354 5590 5595 +1363 5957 5964 +1367 5496 5613 +1368 5604 5722 +1374 5745 5866 +1375 5617 5622 +1380 5732 5852 +1380 5839 5845 +1387 5839 5956 +1388 5594 5595 +1393 5749 5866 +1395 5751 5864 +1395 6443 6444 +1401 1286 1293 +1403 1096 1205 +1404 1205 1213 +1407 554 561 +1407 1327 1328 +1410 474 569 +1411 1800 1801 +1420 1575 1576 +1422 1328 1333 +1422 1397 1404 +1426 1448 1450 +1433 1458 1573 +1448 1327 1329 +1451 1070 1077 +1454 560 567 +1454 850 857 +1463 1564 1684 +1464 1684 1687 +1467 1664 1781 +1479 1453 1458 +1481 1324 1326 +1481 1585 1588 +1486 1587 1702 +1489 1468 1471 +1497 1564 1569 +1405 2919 2920 +1407 2157 2162 +1413 2393 2399 +1418 2700 2707 +1435 3021 3022 +1436 2809 2907 +1437 2375 2380 +1442 2391 2392 +1454 2925 2926 +1461 2598 2605 +1463 2157 2164 +1465 2034 2041 +1483 2259 2265 +1483 2393 2395 +1483 2497 2502 +1493 2393 2400 +1405 5246 5250 +1434 5253 5255 +1436 5107 5115 +1449 5373 5493 +1458 5254 5374 +1470 4367 4368 +1476 5467 5469 +1476 5372 5491 +1483 4899 4902 +1485 5116 5123 +1493 5263 5264 +1496 4790 4903 +1499 4707 4708 +1409 5743 5861 +1415 6333 6445 +1419 5616 5737 +1421 5742 5855 +1422 5970 6088 +1434 6367 6374 +1435 6330 6445 +1441 5739 5858 +1451 5856 5969 +1456 5618 5740 +1459 5624 5744 +1459 5739 5852 +1460 5731 5851 +1469 5971 5974 +1473 6356 6470 +1480 5999 6006 +1484 5993 6000 +1486 5840 5842 +1491 5737 5740 +1492 5844 5957 +1496 5871 5984 +1498 5732 5737 +1500 5829 5833 +1502 1450 1451 +1514 1227 1334 +1514 1324 1329 +1515 1464 1465 +1518 1085 1086 +1518 1448 1453 +1532 1085 1087 +1537 1081 1084 +1537 1552 1672 +1543 1093 1096 +1546 1693 1808 +1551 1800 1911 +1556 973 1087 +1559 1676 1683 +1563 1096 1101 +1563 1329 1444 +1566 1086 1087 +1571 1101 1208 +1576 1090 1093 +1576 1466 5108 +1577 985 1099 +1580 1094 1101 +1581 1085 1199 +1583 974 975 +1587 1082 1084 +1600 983 990 +1505 2379 2380 +1506 2049 2056 +1512 3128 3129 +1516 2383 2385 +1519 2700 2701 +1521 2155 2271 +1526 2384 2391 +1532 2606 2609 +1534 2156 2270 +1535 2402 5949 +1536 2170 2286 +1537 2053 2169 +1538 2036 2039 +1539 2507 2508 +1551 1800 1911 +1553 2604 2606 +1555 2498 2500 +1560 2931 2932 +1561 2599 2709 +1562 2035 2041 +1568 2713 2814 +1571 2389 2500 +1577 2694 2701 +1597 2383 2492 +1598 2701 2808 +1503 5491 5493 +1505 5260 5380 +1510 5013 5127 +1526 4889 4999 +1530 5376 5491 +1531 5118 5124 +1532 5142 5259 +1536 4897 4904 +1548 5131 5138 +1550 5246 5367 +1553 4706 4708 +1566 5136 5142 +1571 5371 5379 +1576 1466 5108 +1579 5165 5278 +1580 5352 5475 +1580 5382 5385 +1582 5478 5483 +1501 5977 6094 +1506 6005 6012 +1515 5869 5872 +1526 5954 5959 +1535 2402 5949 +1536 5842 5845 +1537 5871 5991 +1543 5766 5885 +1548 5965 5967 +1550 5849 5856 +1576 5632 5633 +1585 5875 5992 +1590 5844 5850 +1590 6244 6251 +1595 5742 5861 +1595 5990 5991 +1596 5748 5861 +1605 1207 1208 +1614 1235 1237 +1618 1088 1090 +1621 1210 1215 +1652 1088 1095 +1652 1330 1332 +1653 979 981 +1665 1208 1210 +1668 1092 1205 +1672 876 988 +1689 1683 1799 +1700 1451 1453 +1605 2256 2261 +1613 2045 2165 +1625 2155 2272 +1629 2389 2498 +1632 2038 2039 +1644 2381 2388 +1654 2493 2606 +1660 2144 2261 +1660 2279 2392 +1679 2278 2279 +1683 2151 2159 +1689 2254 2255 +1700 2261 2264 +1609 5136 5139 +1612 4789 4796 +1620 5123 5124 +1622 5232 5234 +1645 5237 5355 +1646 4902 5022 +1675 5255 5373 +1679 4905 4908 +1693 5255 5256 +1695 4889 4890 +1609 5621 5735 +1620 5750 5752 +1631 6074 6082 +1632 6098 6099 +1633 5855 5857 +1638 5743 5866 +1639 5725 5727 +1653 5854 5856 +1667 5960 5961 +1670 5977 6092 +1672 5749 5751 +1698 5970 5971 +1699 6080 6085 +1704 979 982 +1707 1106 1108 +1746 1002 1113 +1756 1227 1339 +1759 1685 1686 +1764 1793 1800 +1765 1122 1236 +1771 866 968 +1774 1216 1333 +1779 1689 1693 +1792 1187 1188 +1702 2250 2257 +1704 2387 2394 +1716 2153 2154 +1729 2258 2261 +1744 1903 2013 +1755 2517 2622 +1757 2039 2153 +1759 2045 2050 +1762 2521 2628 +1770 2251 2366 +1772 2265 2272 +1774 2151 2153 +1780 2395 2397 +1786 1922 2036 +1793 2593 2703 +1800 2631 2632 +1702 5251 5252 +1707 5504 5510 +1710 5384 5390 +1711 5254 5256 +1715 5390 5503 +1724 5258 5371 +1726 5503 5504 +1727 5018 5134 +1728 4905 5022 +1728 5121 5124 +1739 5503 5505 +1740 4544 4647 +1759 4996 5004 +1759 5384 5503 +1765 5256 5374 +1767 4431 4432 +1767 4896 5010 +1769 4772 4886 +1778 5384 5504 +1785 5114 5115 +1787 5470 5472 +1790 5149 5150 +1790 5267 5385 +1794 5119 5121 +1795 4886 4890 +1799 5123 5241 +1704 5839 5962 +1716 6217 6218 +1722 5960 5968 +1723 6084 6085 +1726 6080 6088 +1738 6078 6195 +1738 6317 6318 +1741 5720 5725 +1753 6077 6083 +1761 6317 6321 +1763 6090 6091 +1764 6092 6094 +1765 5965 6080 +1771 5974 5975 +1776 6097 6100 +1782 5737 5742 +1789 5967 5973 +1789 6092 6097 +1796 5976 5977 +1796 6215 6325 +1806 1100 1102 +1814 1354 5109 +1825 1324 1327 +1825 1570 1685 +1829 1798 1800 +1832 1575 1685 +1834 1563 1678 +1843 1352 4994 +1844 1576 1581 +1844 1799 1801 +1849 1208 1209 +1851 1579 1582 +1856 1339 1341 +1860 1198 1203 +1860 1218 1333 +1865 1122 1237 +1868 1210 1327 +1877 1554 1670 +1892 1230 1345 +1894 1670 1678 +1898 973 976 +1900 1222 1339 +1807 6305 6306 +1814 2616 2617 +1815 2011 2017 +1816 2034 2035 +1820 2625 2632 +1824 2015 2017 +1833 2264 2266 +1833 2282 2284 +1840 2017 2018 +1841 2017 2133 +1847 2016 2017 +1848 2603 2608 +1851 2010 2018 +1857 2377 2380 +1858 2017 2135 +1859 2603 2717 +1863 2742 6308 +1869 2164 2168 +1871 2608 2717 +1871 2626 2735 +1881 2375 2382 +1890 2150 2153 +1890 2606 2607 +1898 2133 2134 +1804 5266 5268 +1805 5265 5268 +1810 5352 5357 +1813 5259 5260 +1814 1354 5109 +1814 5257 5262 +1814 5377 5379 +1821 5006 5122 +1824 4895 5010 +1831 4759 4760 +1837 5268 5271 +1843 1352 4994 +1843 5270 5271 +1848 4663 4768 +1850 5269 5276 +1850 5268 5273 +1852 5629 5634 +1867 5251 5258 +1877 4992 4995 +1881 5267 5268 +1883 5510 5631 +1884 5256 5373 +1887 5271 5274 +1888 5386 5506 +1889 5635 5636 +1894 5112 5114 +1894 5114 5233 +1803 5977 6097 +1807 6305 6306 +1811 6090 6207 +1812 5972 5974 +1814 6073 6187 +1830 6426 6430 +1833 6331 6332 +1834 6099 6211 +1836 6088 6090 +1837 6093 6094 +1846 6089 6090 +1847 6223 6224 +1848 5630 5750 +1852 5629 5634 +1857 6309 6419 +1860 5960 5965 +1860 6085 6207 +1867 6310 6318 +1872 5865 5986 +1872 5973 5974 +1872 6218 6328 +1874 6444 6448 +1875 6211 6219 +1875 6216 6219 +1880 6310 6311 +1883 5510 5631 +1889 5635 5636 +1889 6230 6340 +1894 6311 6419 +1896 6311 6427 +1897 6098 6105 +1910 1349 4991 +1915 975 1086 +1915 1115 1120 +1922 1463 1464 +1923 1350 4991 +1925 989 990 +1926 990 1094 +1938 1084 1087 +1942 1085 1090 +1942 1089 1196 +1945 1570 1575 +1946 1466 5109 +1950 1213 1215 +1979 860 962 +1980 1095 1202 +1997 1096 1208 +1999 1332 1449 +1918 2168 2282 +1921 2384 2386 +1923 2134 2252 +1923 2520 2631 +1931 2260 2376 +1932 1918 2028 +1933 2255 2374 +1936 2156 2276 +1938 2625 2627 +1939 2519 6189 +1951 2496 2607 +1951 2515 2630 +1955 6191 6307 +1959 2163 2164 +1962 2152 2270 +1967 2056 5712 +1974 2516 2518 +1975 2377 2489 +1977 2028 2035 +1988 2605 2715 +1992 2626 2736 +1994 2493 2598 +1998 2238 2245 +1906 5119 5120 +1910 1349 4991 +1910 5274 5389 +1915 5156 5275 +1920 4760 4761 +1923 1350 4991 +1925 5388 5505 +1929 5017 5024 +1929 5117 5236 +1931 4874 4992 +1931 5508 5511 +1933 5233 5235 +1937 5375 5494 +1943 5011 5012 +1946 1466 5109 +1951 5385 5505 +1953 5386 5393 +1964 5154 5274 +1967 4873 4881 +1976 5508 5513 +1980 5113 5120 +1989 5266 5273 +1991 4886 4996 +1994 5269 5270 +1995 5371 5373 +1904 6434 6441 +1905 6339 6451 +1906 6222 6225 +1906 6445 6446 +1910 5719 5724 +1922 5985 6104 +1924 6085 6090 +1925 6325 6332 +1935 6448 6559 +1937 5867 5868 +1937 6107 6109 +1948 6217 6222 +1955 6191 6307 +1956 5959 5961 +1962 6081 6082 +1965 6456 6563 +1966 6236 6346 +1966 6310 6315 +1979 5730 5849 +1979 6446 6447 +1985 6228 6231 +2002 984 990 +2009 1216 1325 +2019 984 1088 +2024 1081 1195 +2025 1091 1092 +2038 1080 1081 +2039 1078 1189 +2046 1565 1570 +2047 864 970 +2048 752 753 +2057 1079 1080 +2062 1329 1445 +2064 968 976 +2070 1331 1338 +2075 1802 1804 +2076 1073 1074 +2083 974 979 +2088 980 981 +2098 1224 1331 +2014 2389 2394 +2015 2601 2608 +2017 2255 2371 +2017 2379 2494 +2022 2711 2714 +2026 2609 2612 +2034 2709 2716 +2038 2249 2368 +2044 2140 2144 +2044 2156 2271 +2052 2251 2368 +2054 2613 2615 +2056 2282 2398 +2056 2710 2817 +2058 2155 2270 +2059 2489 2495 +2060 2369 2371 +2063 2379 2486 +2067 2028 2034 +2074 2486 2487 +2074 2496 2497 +2086 2491 2494 +2088 2371 2374 +2092 2260 2375 +2092 2374 2375 +2100 2390 2391 +2004 5277 5280 +2006 5386 5392 +2007 5014 5015 +2008 5382 5384 +2021 5138 5259 +2023 5259 5262 +2027 5269 5274 +2027 5490 5493 +2030 5155 5162 +2033 5122 5128 +2040 5378 5379 +2043 5009 5119 +2046 5271 5272 +2061 5277 5279 +2064 5268 5391 +2073 4996 5003 +2074 5162 5163 +2076 5160 5283 +2080 5274 5277 +2089 5233 5234 +2094 4993 5000 +2098 5268 5385 +2014 5850 5969 +2016 6203 6318 +2018 6557 6558 +2021 5849 5854 +2028 5721 5842 +2032 5729 5849 +2034 6449 6450 +2045 5731 5854 +2060 6203 6204 +2070 6663 6764 +2090 6559 6560 +2098 5730 5736 +2099 6210 6325 +2099 6327 6329 +2102 1082 1083 +2105 1330 1450 +2114 1093 1094 +2129 971 976 +2132 1088 1093 +2138 1336 1338 +2159 863 864 +2162 1067 1068 +2166 977 978 +2168 759 859 +2173 861 864 +2173 1076 1078 +2188 869 971 +2198 861 867 +2199 1090 1095 +2103 2704 2811 +2105 2602 2712 +2106 2285 2398 +2107 2503 2615 +2108 2607 2612 +2114 2259 2261 +2117 2368 2369 +2123 2615 2618 +2128 2282 2285 +2129 2255 2369 +2130 2377 2382 +2135 2706 2713 +2136 2382 2495 +2136 2611 2721 +2156 2150 2264 +2159 2255 2368 +2172 2604 2605 +2182 2805 2812 +2195 2708 2819 +2196 2811 2817 +2199 2262 2264 +2103 5153 5272 +2108 5045 5161 +2109 4878 4993 +2110 5278 5285 +2111 5256 5379 +2112 5160 5275 +2113 5161 5162 +2118 5629 5636 +2121 4648 4759 +2121 5044 5051 +2139 5159 5277 +2148 5163 5166 +2156 5273 5392 +2159 5386 5388 +2165 5168 5281 +2176 5166 5169 +2179 5158 5278 +2180 4907 5023 +2185 4794 4911 +2196 5164 5166 +2198 4880 4998 +2114 6353 6461 +2118 5629 5636 +2123 6079 6201 +2125 6327 6332 +2130 6454 6565 +2131 5610 5726 +2137 6564 6668 +2150 6569 6570 +2154 6558 6559 +2158 6234 6237 +2162 5846 5848 +2168 5882 5883 +2172 6322 6324 +2177 6453 6560 +2177 6558 6564 +2184 5964 5965 +2184 6202 6207 +2187 6199 6201 +2187 6562 6670 +2192 6203 6209 +2194 6557 6564 +2196 6207 6209 +2197 6685 6796 +2203 1803 1920 +2206 981 1091 +2211 62 63 +2220 757 861 +2223 860 861 +2223 1079 1086 +2228 1088 1094 +2231 976 978 +2233 859 866 +2233 1095 1207 +2238 419 420 +2239 1321 1327 +2240 1074 1075 +2251 335 419 +2257 413 414 +2258 757 859 +2262 751 754 +2266 1073 1080 +2267 420 509 +2270 145 146 +2271 1319 1327 +2273 414 503 +2273 650 746 +2274 329 413 +2274 979 1093 +2275 328 329 +2275 1797 1914 +2278 1322 1327 +2290 648 650 +2294 753 853 +2202 2265 2267 +2203 1803 1920 +2206 2811 2818 +2207 2621 2729 +2227 2377 2494 +2230 2814 2819 +2234 2602 2713 +2236 2360 2367 +2240 2033 2150 +2243 2609 2723 +2244 2813 2816 +2254 2806 2910 +2256 2361 2474 +2261 2812 2816 +2263 1918 2036 +2265 1916 2030 +2271 2817 2818 +2275 1797 1914 +2281 2373 2379 +2285 2609 2614 +2288 2810 2918 +2291 2148 2150 +2294 2145 2150 +2295 2383 2388 +2201 5159 5278 +2214 5165 5166 +2214 5373 5376 +2224 5165 5284 +2230 5000 5115 +2233 5154 5277 +2234 5465 5578 +2235 5007 5121 +2235 5504 5508 +2238 5168 5287 +2244 5578 5580 +2247 5165 5283 +2247 5168 5289 +2253 4906 4913 +2253 5464 5465 +2254 5273 5391 +2255 4438 4543 +2268 4995 5000 +2273 4990 4991 +2273 5268 5383 +2276 4875 4877 +2280 5003 5113 +2285 5162 5281 +2295 5160 5278 +2297 5173 5180 +2212 6445 6448 +2220 6209 6210 +2226 6080 6082 +2231 6582 6686 +2232 6448 6560 +2232 6568 6571 +2248 5705 5825 +2248 6562 6671 +2261 6580 6582 +2262 6688 6691 +2263 6205 6206 +2265 6575 6576 +2273 6676 6679 +2276 6574 6682 +2277 6557 6559 +2284 5730 5731 +2285 6562 6567 +2286 6582 6694 +2289 6202 6203 +2295 6325 6330 +2296 6451 6565 +2302 1075 1078 +2304 324 327 +2305 859 867 +2307 1092 1207 +2309 1210 1212 +2310 975 1085 +2312 1072 1075 +2317 752 859 +2325 746 751 +2326 1072 1189 +2328 330 418 +2331 1072 1078 +2336 1326 1444 +2340 1576 1688 +2346 757 867 +2348 325 326 +2354 1658 1665 +2355 864 867 +2355 1087 1089 +2356 421 424 +2359 326 410 +2360 1067 1074 +2363 247 325 +2365 756 856 +2371 418 420 +2385 416 417 +2386 420 421 +2396 864 866 +2397 521 522 +2398 975 1079 +2301 3570 3572 +2303 2733 2740 +2303 2814 2821 +2306 2810 2816 +2307 2904 2911 +2315 2261 2266 +2315 2382 2388 +2315 2824 2922 +2325 2922 2930 +2328 2816 2918 +2336 2256 2257 +2340 2804 2912 +2343 3606 3613 +2344 2494 2497 +2352 2147 2150 +2353 2929 3024 +2359 2918 2921 +2373 1942 1948 +2375 2366 2372 +2379 2383 2389 +2383 2264 2265 +2383 2700 2808 +2385 2494 2495 +2389 1942 1947 +2392 1942 1946 +2392 2273 2386 +2395 2267 2272 +2396 2918 2920 +2397 3500 3505 +2398 1948 2064 +2400 2703 2709 +2304 4764 4881 +2304 5167 5174 +2307 5141 5260 +2311 5172 5289 +2323 5170 5171 +2335 5608 5609 +2340 5001 5116 +2346 5287 5288 +2362 5118 5236 +2364 5172 5295 +2365 5372 5485 +2371 5463 5465 +2383 5458 5465 +2384 5276 5277 +2385 5054 5171 +2392 5154 5271 +2395 5290 5297 +2397 4790 4796 +2399 5459 5465 +2304 6329 6443 +2306 6204 6319 +2309 6680 6681 +2319 6204 6321 +2322 6567 6671 +2328 6447 6448 +2335 5608 5609 +2337 7478 7479 +2339 6676 6784 +2344 6332 6440 +2349 6443 6445 +2350 6675 6776 +2351 6448 6450 +2351 6568 6682 +2354 2057 5830 +2361 6570 6574 +2373 7289 7361 +2376 6447 6560 +2378 6444 6557 +2379 6322 6327 +2380 6580 6688 +2390 6077 6082 +2393 6449 6563 +2393 6673 6676 +2396 6680 6685 +2400 6206 6210 +2404 1334 1336 +2410 862 863 +2424 427 520 +2453 421 514 +2456 527 528 +2457 324 412 +2459 861 862 +2464 1181 1188 +2477 749 750 +2488 1183 1186 +2493 326 330 +2497 748 749 +2497 753 754 +2497 1205 1206 +2407 2257 2366 +2408 3430 3500 +2413 3505 3568 +2421 2909 3014 +2422 2496 2608 +2423 2383 2500 +2423 3484 3546 +2439 2468 2475 +2444 3599 3600 +2449 3341 3343 +2451 1954 2064 +2452 2703 2710 +2457 1831 1946 +2464 2711 2712 +2479 3478 3546 +2482 2263 2267 +2483 3702 7498 +2485 2708 2713 +2494 2711 2713 +2413 5272 5279 +2418 5175 5295 +2426 5578 5583 +2434 4684 4795 +2434 5175 5178 +2435 5155 5161 +2435 5272 5274 +2437 5334 5452 +2444 5141 5259 +2451 5452 5459 +2460 4794 4799 +2467 5164 5171 +2469 5451 5452 +2480 5453 5566 +2482 5290 5291 +2482 5605 5613 +2494 4905 4906 +2496 4906 4912 +2499 5127 5129 +2500 5049 5169 +2403 6450 6565 +2408 6674 6680 +2412 6082 6083 +2412 6554 6560 +2434 6329 6445 +2434 6679 6784 +2439 6573 6677 +2444 7144 7230 +2445 6561 6665 +2449 7252 7253 +2451 5833 5956 +2452 6557 6565 +2455 6206 6322 +2461 5592 5711 +2461 7144 7145 +2462 6450 6557 +2463 6668 6675 +2467 6680 6682 +2468 6562 6568 +2468 7221 7222 +2477 7379 7380 +2478 7204 7282 +2478 7416 7472 +2479 7253 7325 +2480 6640 6642 +2482 5605 5613 +2482 6668 6676 +2496 7434 7490 +2502 523 526 +2504 1182 1295 +2512 331 332 +2513 979 984 +2519 648 651 +2535 1199 1205 +2543 425 426 +2544 432 521 +2546 1235 4874 +2556 1074 1187 +2560 864 976 +2562 507 601 +2563 426 520 +2565 427 523 +2568 1079 1084 +2569 644 740 +2573 424 426 +2578 1379 1380 +2582 1092 1096 +2587 751 756 +2594 1573 1574 +2600 648 754 +2513 3702 3703 +2518 2383 2495 +2522 2599 2710 +2527 2808 2810 +2531 2812 2916 +2544 3506 3570 +2551 2703 2811 +2573 2603 2712 +2585 3701 3702 +2587 3504 3511 +2598 2606 2608 +2505 5452 5457 +2510 5583 5586 +2512 5447 5560 +2522 4544 4653 +2524 5446 5447 +2526 5292 5295 +2528 4789 4797 +2542 5243 5361 +2546 1235 4874 +2551 5019 5139 +2555 5119 5126 +2561 5290 5292 +2565 4684 4688 +2567 5008 5014 +2567 5446 5448 +2569 4903 4904 +2572 5440 5447 +2583 5459 5460 +2589 5446 5453 +2590 4647 4654 +2590 5289 5290 +2594 5295 5296 +2597 5445 5447 +2501 5843 5845 +2505 6532 6642 +2508 7307 7379 +2513 5860 5863 +2513 6794 6795 +2515 6562 6676 +2515 7409 7410 +2516 6669 6776 +2517 7264 7265 +2524 6316 6317 +2539 5615 5735 +2539 6554 6561 +2548 6670 6673 +2550 7475 7477 +2556 6562 6668 +2568 5717 5724 +2568 6531 6642 +2568 6782 6783 +2569 7343 7344 +2571 7414 7416 +2572 6784 6785 +2581 6776 6782 +2581 7479 7480 +2585 6321 6324 +2591 6559 6561 +2592 7345 7414 +2592 7480 7526 +2594 5855 5860 +2598 6199 6204 +2607 1289 1296 +2609 601 602 +2616 417 421 +2619 1072 1077 +2621 245 327 +2627 1730 1731 +2628 1180 1186 +2629 512 513 +2629 534 628 +2631 330 333 +2632 1183 1297 +2633 1180 1297 +2641 529 627 +2643 1077 1184 +2644 746 754 +2644 1485 1602 +2647 1731 1842 +2650 547 651 +2658 326 327 +2661 653 755 +2668 1183 1184 +2668 1291 1294 +2669 1290 1406 +2686 653 749 +2695 1731 1848 +2607 2611 2715 +2612 2386 2500 +2612 3437 3509 +2615 3600 3607 +2619 2822 2825 +2628 2497 2604 +2630 2905 3006 +2631 3257 3340 +2635 2614 2723 +2640 3540 3547 +2647 1731 1842 +2653 2822 2827 +2654 2391 2395 +2667 2492 2500 +2668 3567 3570 +2683 2815 2919 +2695 1731 1848 +2615 5460 5575 +2617 5328 5451 +2620 5440 5441 +2631 4103 4110 +2631 5281 5287 +2631 5333 5451 +2634 4462 4567 +2638 4794 4797 +2643 5018 5019 +2658 5440 5442 +2661 5434 5435 +2662 5442 5445 +2665 5260 5267 +2666 5008 5013 +2666 5330 5451 +2669 5233 5241 +2678 5459 5572 +2678 5465 5583 +2679 4902 5016 +2679 5270 5389 +2679 5292 5297 +2682 5328 5445 +2684 5147 5267 +2685 5337 5339 +2687 4682 4797 +2687 5322 5445 +2687 5327 5445 +2688 5122 5127 +2690 5460 5577 +2692 5164 5170 +2694 5324 5445 +2698 5294 5407 +2609 6787 6895 +2618 7436 7437 +2625 7320 7391 +2640 7371 7436 +2643 7435 7437 +2646 6788 6789 +2647 6782 6784 +2654 6890 6897 +2659 6330 6332 +2663 7375 7443 +2665 6781 6889 +2666 6684 6790 +2672 6638 6640 +2674 7409 7414 +2676 6082 6085 +2678 7416 7478 +2692 6638 6642 +2705 645 651 +2710 553 652 +2712 332 416 +2713 1731 1847 +2717 1072 1184 +2722 93 157 +2726 1400 1407 +2731 645 648 +2740 896 1004 +2740 1400 1401 +2744 421 512 +2744 753 757 +2745 546 646 +2748 328 330 +2748 336 424 +2749 553 657 +2750 1290 1296 +2754 422 423 +2755 634 635 +2756 112 113 +2756 429 518 +2762 325 328 +2763 1730 1737 +2767 528 622 +2769 1205 1207 +2770 113 179 +2770 1088 1089 +2771 864 869 +2775 552 651 +2775 1081 1083 +2776 1092 1093 +2786 330 336 +2787 553 649 +2791 111 181 +2791 1078 1083 +2792 1208 1213 +2798 1076 1077 +2800 1288 1408 +2703 2721 2722 +2712 2497 2607 +2714 1916 1918 +2723 2152 2153 +2737 2372 2377 +2744 2052 2057 +2750 2912 2915 +2752 3501 3508 +2793 2495 2502 +2702 5135 5254 +2708 4904 5020 +2716 4683 4690 +2717 5454 5457 +2719 5440 5445 +2728 5251 5259 +2732 5578 5579 +2737 5320 5321 +2739 4891 4898 +2742 5339 5452 +2745 5435 5554 +2748 5137 5138 +2749 5298 5415 +2755 5054 5170 +2756 4685 4688 +2756 4794 4796 +2757 4684 4796 +2759 4684 4797 +2778 5466 5583 +2779 5052 5169 +2783 5460 5462 +2786 4573 4580 +2786 5454 5456 +2787 5300 5413 +2790 5257 5258 +2796 5052 5055 +2797 4903 4910 +2798 5454 5572 +2704 6678 6785 +2707 6206 6324 +2725 7411 7414 +2731 7337 7339 +2733 6684 6785 +2747 6770 6777 +2761 6570 6674 +2763 6784 6787 +2770 6677 6678 +2770 6667 6778 +2771 6085 6202 +2776 5843 5848 +2777 7344 7414 +2788 6691 6694 +2793 7343 7350 +2799 6562 6565 +2806 1189 1192 +2810 111 113 +2810 528 629 +2818 433 526 +2820 250 328 +2821 553 555 +2822 111 114 +2825 1075 1077 +2834 1078 1081 +2841 113 187 +2854 1718 1720 +2858 642 740 +2861 556 559 +2869 640 641 +2872 554 556 +2873 1484 1491 +2874 555 556 +2874 1182 1186 +2890 556 657 +2894 463 554 +2813 2146 2150 +2855 2810 2913 +2869 2257 2374 +2898 2814 2816 +2809 5251 5256 +2809 5583 5584 +2813 5263 5268 +2818 5320 5322 +2826 5294 5415 +2828 4898 5016 +2828 5297 5410 +2837 5275 5282 +2841 5457 5460 +2846 5448 5451 +2846 5460 5465 +2848 5315 5434 +2852 5454 5571 +2852 5582 5583 +2855 4677 4683 +2864 5294 5413 +2871 5171 5290 +2875 4574 4683 +2883 5386 5391 +2884 5243 5244 +2890 5462 5583 +2801 6332 6445 +2812 7339 7342 +2814 6685 6688 +2815 7480 7485 +2832 6692 6693 +2832 6882 6976 +2836 7259 7337 +2842 6982 6983 +2844 6562 6564 +2849 5681 5801 +2849 7406 7414 +2851 6556 6561 +2866 6786 6890 +2866 7265 7266 +2868 7480 7483 +2875 6686 6688 +2876 6670 6778 +2877 7263 7265 +2889 7265 7343 +2891 6881 6889 +2893 7417 7477 +2899 7260 7265 +2901 638 734 +2904 1289 1294 +2910 1183 1185 +2911 1288 1405 +2917 463 562 +2918 1397 1402 +2919 1188 1189 +2926 1212 1213 +2927 1073 1078 +2929 647 743 +2934 1485 1600 +2937 462 557 +2937 1400 1405 +2938 157 164 +2941 1282 1402 +2943 1187 1194 +2953 1205 1210 +2968 642 648 +2969 1399 1402 +2984 1184 1186 +2988 648 748 +2990 1278 1394 +2994 1596 1712 +2994 1718 1725 +2919 2361 2476 +2922 1921 1922 +2927 2262 2263 +2938 2810 2912 +2979 2255 2366 +2985 2809 2913 +2901 4578 4691 +2905 4474 4579 +2905 5277 5278 +2907 5259 5261 +2917 5161 5166 +2921 5419 5420 +2924 5460 5583 +2936 5454 5460 +2938 5560 5567 +2944 4474 4478 +2948 5436 5439 +2950 5273 5386 +2958 5434 5439 +2959 5554 5555 +2963 5436 5554 +2965 5326 5446 +2970 5436 5553 +2973 5333 5446 +2974 5438 5439 +2980 5436 5438 +2982 5428 5435 +2989 5265 5267 +2989 5435 5548 +2993 5431 5436 +2999 5431 5439 +2909 6570 6681 +2909 6772 6775 +2909 6776 6783 +2909 7180 7258 +2922 6783 6889 +2922 7262 7265 +2928 7258 7263 +2934 6675 6784 +2943 7265 7342 +2953 6204 6206 +2954 6665 6672 +2961 6883 6886 +2964 6673 6675 +2973 7260 7336 +2975 6558 6562 +2978 6668 6673 +2981 7256 7260 +2984 6880 6886 +2989 6786 6884 +2990 5957 5962 +2993 5954 5962 +3002 1181 1186 +3005 1290 1408 +3029 1403 1404 +3030 981 1093 +3030 1182 1297 +3034 157 162 +3036 642 647 +3062 981 985 +3063 1085 1092 +3067 756 863 +3067 1723 1725 +3075 1078 1195 +3077 1597 1712 +3080 645 646 +3090 467 468 +3096 469 568 +3006 2909 3009 +3009 2806 2912 +3029 2153 2155 +3039 1800 1919 +3064 2812 2813 +3065 2914 3015 +3006 5298 5413 +3010 5318 5438 +3016 4904 5022 +3020 5452 5453 +3021 5441 5447 +3027 4904 4908 +3031 5321 5322 +3033 5130 5247 +3033 5296 5297 +3034 5241 5244 +3037 5169 5171 +3038 5431 5438 +3048 5453 5454 +3056 5327 5440 +3069 5419 5426 +3073 5166 5168 +3083 5418 5421 +3085 5256 5259 +3085 5419 5424 +3093 5306 5425 +3001 7079 7080 +3026 7339 7414 +3037 6667 6670 +3047 7083 7089 +3053 7422 7478 +3057 6764 6771 +3072 6662 6670 +3073 6881 6883 +3078 7476 7480 +3082 6886 6984 +3084 6085 6088 +3089 6982 6984 +3089 7480 7525 +3091 6884 6886 +3092 6878 6883 +3093 6667 6669 +3099 6777 6883 +3100 5839 5842 +3133 469 563 +3135 560 562 +3139 1607 1614 +3152 464 471 +3152 465 560 +3156 1723 1726 +3157 1597 1717 +3164 1080 1193 +3166 471 560 +3171 472 568 +3174 465 471 +3190 1292 1299 +3103 2709 2710 +3121 2793 2898 +3132 2904 2905 +3149 3000 3007 +3176 2804 2906 +3106 5287 5292 +3106 5421 5423 +3127 4904 4905 +3135 5421 5424 +3137 5304 5424 +3146 5420 5421 +3157 5156 5162 +3157 5295 5297 +3167 5427 5428 +3101 6780 6878 +3107 6775 6878 +3107 6882 6883 +3110 6663 6770 +3113 6878 6880 +3114 6884 6891 +3116 6775 6875 +3119 6875 6878 +3124 6987 7081 +3126 6671 6672 +3126 6880 6883 +3128 6780 6883 +3147 6877 6878 +3149 7480 7527 +3152 7477 7480 +3156 6678 6679 +3191 6986 7082 +3197 6885 6886 +3203 1289 1297 +3205 1180 1185 +3215 552 646 +3215 642 742 +3246 553 651 +3246 631 632 +3249 1290 1294 +3255 636 639 +3264 1404 1405 +3280 756 861 +3284 1520 1521 +3218 2055 2057 +3280 2034 2036 +3220 5419 5425 +3222 5310 5425 +3224 5318 5437 +3236 5266 5267 +3251 5377 5378 +3253 5304 5427 +3254 5276 5280 +3265 5431 5432 +3274 5432 5433 +3285 5312 5425 +3290 5309 5427 +3297 5298 5416 +3298 5160 5162 +3248 6981 6987 +3257 6560 6561 +3273 5837 5844 +3285 6785 6786 +3300 6769 6869 +3303 464 472 +3318 463 557 +3318 636 638 +3318 1083 1196 +3322 380 464 +3338 638 742 +3341 966 1070 +3347 1402 1404 +3366 1077 1190 +3377 469 475 +3377 1640 1647 +3380 1284 1394 +3395 1402 1519 +3397 961 1069 +3302 5592 5594 +3301 5416 5421 +3310 5271 5273 +3314 5306 5427 +3314 5428 5429 +3321 5303 5422 +3324 5310 5427 +3327 5303 5416 +3350 5310 5433 +3358 5174 5287 +3364 5312 5433 +3369 5171 5172 +3302 5592 5594 +3304 6671 6676 +3305 6976 6984 +3309 6983 6987 +3311 6882 6982 +3319 6869 6877 +3335 6769 6877 +3347 7170 7171 +3366 6987 7079 +3367 7080 7084 +3376 6881 6888 +3387 6874 6877 +3389 7080 7170 +3392 6890 6891 +3397 7172 7174 +3402 647 748 +3410 373 374 +3415 1069 1075 +3430 373 375 +3438 647 750 +3441 1399 1519 +3456 1388 1395 +3463 633 639 +3467 1277 1278 +3469 1282 1285 +3471 465 554 +3471 642 645 +3475 961 1072 +3480 535 633 +3482 1168 1279 +3419 2362 2363 +3430 5304 5422 +3456 5421 5422 +3457 5437 5438 +3409 6783 6887 +3434 7255 7256 +3454 7262 7334 +3459 6787 6790 +3459 6984 6986 +3490 6559 6562 +3496 6783 6787 +3501 1164 1271 +3518 1173 1280 +3523 1286 1287 +3527 957 1061 +3532 540 634 +3537 749 754 +3546 1291 1293 +3565 1180 1292 +3569 958 1069 +3589 955 958 +3592 531 625 +3502 2005 2115 +3507 5258 5259 +3529 5316 5439 +3562 5318 5439 +3581 5275 5276 +3597 5293 5294 +3505 6787 6789 +3511 6884 6889 +3524 5622 5624 +3541 7169 7172 +3549 5593 5594 +3561 6983 7079 +3571 6985 6986 +3598 7076 7083 +3604 1280 1286 +3608 533 634 +3639 533 534 +3655 1288 1402 +3658 1162 1271 +3665 1388 1393 +3677 642 743 +3681 1265 1382 +3685 1167 1279 +3625 5462 5575 +3634 5316 5433 +3637 5204 5323 +3646 5508 5510 +3652 5324 5443 +3697 5503 5508 +3674 5839 5844 +3711 529 532 +3718 1167 1274 +3720 1162 1273 +3728 1277 1282 +3730 950 951 +3752 1157 1158 +3759 1067 1069 +3766 527 529 +3795 641 737 +3703 5596 5598 +3714 6581 6582 +3812 1044 1151 +3816 642 748 +3840 1293 1409 +3843 643 648 +3873 1186 1189 +3878 1230 1337 +3830 5593 5600 +3812 5271 5277 +3840 5304 5421 +3827 5598 5600 +3830 5593 5600 +3903 1403 1408 +3910 957 1067 +3918 978 1082 +3960 646 651 +3965 1283 1284 +3968 958 961 +3978 646 647 +3909 5303 5421 +3967 5154 5272 +3974 5459 5578 +3981 5309 5422 +3995 5275 5280 +3979 7252 7259 +4028 1463 1468 +4040 1260 1370 +4064 1071 1072 +4070 1184 1190 +4057 2922 2923 +4038 5321 5440 +4013 7337 7344 +4023 7344 7409 +4041 5968 5970 +4047 7342 7344 +4061 7344 7415 +4129 944 945 +4131 851 958 +4154 1250 1251 +4169 1143 1250 +4171 918 1022 +4186 1138 1250 +4191 1244 1250 +4197 1072 1074 +4122 2614 2718 +4144 1818 1822 +4171 5596 5603 +4114 5434 5441 +4122 5172 5287 +4173 5434 5436 +4178 5453 5572 +4110 7174 7252 +4112 7260 7342 +4171 5596 5603 +4183 7257 7260 +4222 1250 1255 +4280 1229 1237 +4294 1233 1340 +4299 1344 1460 +4218 2139 2140 +4244 2140 2250 +4255 2010 2011 +4202 5171 5289 +4209 5572 5577 +4221 5448 5566 +4242 5178 5295 +4254 5415 5417 +4262 5297 5298 +4280 5417 5418 +4289 5177 5295 +4292 5445 5446 +4211 7413 7477 +4216 7416 7477 +4239 6328 6335 +4245 7409 7416 +4263 7411 7416 +4269 7472 7477 +4272 7417 7475 +4296 7483 7485 +4307 1003 1109 +4317 1149 1256 +4325 1265 1266 +4329 1256 1257 +4336 1137 1244 +4347 999 1109 +4359 1189 1190 +4360 1116 1120 +4365 1228 1339 +4393 1265 1273 +4349 2055 5591 +4377 6078 6079 +4386 2822 2922 +4376 5425 5433 +4381 5442 5447 +4392 5430 5433 +4301 7417 7422 +4304 7416 7417 +4343 7260 7263 +4356 6787 6887 +4367 6578 6689 +4377 6078 6079 +4385 7341 7406 +4425 1224 1230 +4431 1265 1270 +4484 2138 2253 +4427 5439 5442 +4433 5298 5421 +4444 4878 4880 +4449 5433 5553 +4455 4877 4878 +4457 4878 4990 +4464 4880 4883 +4473 4880 4881 +4499 5444 5557 +4452 7413 7469 +4566 1035 1142 +4547 5450 5563 +4614 1136 1137 +4666 1023 1130 +4623 2920 3021 +4626 1887 1888 +4655 1818 1935 +4656 2137 2247 +4665 1770 1881 +4626 5428 5430 +4666 5439 5559 +4703 2808 2815 +4729 1894 2004 +4731 2135 2137 +4750 1897 2007 +4775 1891 2001 +4701 5444 5448 +4731 5456 5569 +4752 5448 5453 +4758 5454 5569 +4733 7082 7089 +4736 6676 6678 +4819 2397 2504 +4822 1886 1891 +4844 2013 2014 +4854 1891 2006 +4825 5444 5563 +4895 5450 5569 +4819 6985 6992 +4957 1532 1533 +4959 1579 1580 +4991 1469 1470 +5003 461 468 +5019 524 525 +5019 1082 1087 +5042 955 960 +5008 5615 5729 +5041 7349 7350 +5046 7258 7265 +5112 960 1064 +5115 846 952 +5145 650 753 +5180 1284 1400 +5183 1398 1514 +5188 973 975 +5197 851 953 +5127 1799 1805 +5167 1937 1940 +5223 518 524 +5226 836 938 +5228 646 648 +5265 1515 1631 +5272 862 864 +5290 421 426 +5257 3001 3098 +5231 6991 6998 +5319 537 631 +5320 1396 1399 +5321 1284 1285 +5336 524 529 +5340 543 643 +5342 530 531 +5360 644 748 +5392 975 976 +5372 5054 5164 +5392 5047 5054 +5401 524 526 +5403 419 424 +5410 429 526 +5410 974 981 +5425 1085 1093 +5431 638 740 +5470 648 653 +5490 973 978 +5447 5272 5277 +5427 6893 6894 +5453 6981 7081 +5523 631 636 +5582 524 531 +5583 427 518 +5503 5585 5698 +5555 4936 4937 +5566 4934 5050 +5573 5052 5053 +5586 5203 5210 +5504 6698 6699 +5563 6984 6987 +5602 631 638 +5607 423 512 +5627 427 432 +5644 427 521 +5646 427 526 +5646 4820 4933 +5673 4933 4934 +5697 5586 5701 +5704 529 531 +5733 416 512 +5740 1920 1921 +5716 4934 4938 +5764 5096 5212 +5772 5212 5219 +5776 5089 5096 +5789 5094 5096 +5800 5212 5214 +5850 535 538 +5853 526 527 +5859 1799 1804 +5802 5091 5096 +5814 5096 5102 +5816 5049 5054 +5862 5101 5106 +5865 5206 5213 +5887 6878 6885 +5901 431 432 +5932 633 634 +5970 341 432 +5992 529 534 +5932 5102 5218 +5966 5103 5223 +6089 2051 2166 +6092 5217 5220 +6574 418 419 +6597 4707 4714 +6640 334 335 +6664 4701 4708 +6773 4713 4720 +6791 4477 4582 +6753 5984 5991 +6773 5991 6110 +6845 534 635 +6812 4689 4696 +6824 4576 4583 +6828 4476 4483 +6854 4586 4695 +6953 6882 6886 +7017 522 616 +7051 2397 2401 +7009 7262 7340 +7033 5865 5866 +7050 6984 6985 +7092 5608 5615 +7114 1282 1399 +7170 5852 5860 +7249 426 427 +7296 979 1087 +7247 5864 5871 +7399 2401 2406 +7387 5048 5054 +7448 1406 1407 +7427 2400 2406 +7443 2406 2518 +7442 4938 5052 +7496 4823 4930 diff --git a/examples/bpm/impact/in.bpm.impact.rotational b/examples/bpm/impact/in.bpm.impact.rotational index 0b3bcbe0a2..698fa22fb8 100644 --- a/examples/bpm/impact/in.bpm.impact.rotational +++ b/examples/bpm/impact/in.bpm.impact.rotational @@ -1,7 +1,7 @@ units lj dimension 3 boundary f f f -atom_style sphere/bpm +atom_style bpm/sphere 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 @@ -23,17 +23,17 @@ neighbor 1.0 bin pair_style gran/hooke/history 1.0 NULL 0.5 NULL 0.1 1 pair_coeff 1 1 -fix 1 all nve/sphere/bpm +fix 1 all nve/bpm/sphere -create_bonds many plate plate 1 0.0 1.5 +create_bonds many plate plate 1 0.0 1.5 create_bonds many projectile projectile 2 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/rotational store/local brkbond 100 time id1 id2 -bond_coeff 1 1.0 0.2 0.02 0.02 0.05 0.01 0.01 0.01 0.1 0.02 0.002 0.002 -bond_coeff 2 1.0 0.2 0.02 0.02 0.20 0.04 0.04 0.04 0.1 0.02 0.002 0.002 +bond_coeff 1 1.0 0.2 0.02 0.02 0.05 0.01 0.01 0.01 0.1 0.2 0.002 0.002 +bond_coeff 2 1.0 0.2 0.02 0.02 0.20 0.04 0.04 0.04 0.1 0.2 0.002 0.002 velocity projectile set -0.05 0.0 0.0 compute nbond all nbond/atom diff --git a/examples/bpm/impact/log.17Feb2022.impact.rotational.g++.4 b/examples/bpm/impact/log.17Feb2022.impact.rotational.g++.4 new file mode 100644 index 0000000000..b76854d5d9 --- /dev/null +++ b/examples/bpm/impact/log.17Feb2022.impact.rotational.g++.4 @@ -0,0 +1,219 @@ +LAMMPS (17 Feb 2022) +units lj +dimension 3 +boundary f f f +atom_style bpm/sphere +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.0 +Lattice spacing in x,y,z = 1.5874011 1.5874011 1.5874011 +region box block -25 15 -22 22 -22 22 +create_box 1 box bond/types 2 extra/bond/per/atom 20 extra/special/per/atom 50 +Created orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) + 1 by 2 by 2 MPI processor grid + +region disk cylinder x 0.0 0.0 20.0 -0.5 0.5 +create_atoms 1 region disk +Created 7529 atoms + using lattice units in orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) + create_atoms CPU = 0.002 seconds +group plate region disk +7529 atoms in group plate + +region ball sphere 8.0 0.0 0.0 6.0 +create_atoms 1 region ball +Created 3589 atoms + using lattice units in orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) + create_atoms CPU = 0.001 seconds +group projectile region ball +3589 atoms in group projectile + +displace_atoms all random 0.1 0.1 0.1 134598738 +Displacing atoms ... + +neighbor 1.0 bin +pair_style gran/hooke/history 1.0 NULL 0.5 NULL 0.1 1 +pair_coeff 1 1 + +fix 1 all nve/bpm/sphere + +create_bonds many plate plate 1 0.0 1.5 + generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2.6 + binsize = 1, bins = 64 70 70 + 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 gran/hooke/history, perpetual + attributes: half, newton on, size, history + pair build: half/size/bin/newton + stencil: half/bin/3d + bin: standard +Added 38559 bonds, new total = 38559 +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 15 = max # of 1-2 neighbors + 101 = max # of special neighbors + special bonds CPU = 0.001 seconds +create_bonds many projectile projectile 2 0.0 1.5 + generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +WARNING: Bonds are defined but no bond style is set (../force.cpp:192) +WARNING: Likewise 1-2 special neighbor interactions != 1.0 (../force.cpp:194) +Added 21869 bonds, new total = 60428 +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 16 = max # of 1-2 neighbors + 101 = max # of special neighbors + special bonds CPU = 0.001 seconds + +neighbor 0.3 bin +special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0 + +bond_style bpm/rotational store/local brkbond 100 time id1 id2 +bond_coeff 1 1.0 0.2 0.02 0.02 0.05 0.01 0.01 0.01 0.1 0.2 0.002 0.002 +bond_coeff 2 1.0 0.2 0.02 0.02 0.20 0.04 0.04 0.04 0.1 0.2 0.002 0.002 + +velocity projectile set -0.05 0.0 0.0 +compute nbond all nbond/atom +compute tbond all reduce sum c_nbond + +timestep 0.05 +thermo_style custom step ke pe pxx pyy pzz c_tbond +thermo 100 +thermo_modify lost ignore lost/bond ignore +#dump 1 all custom 100 atomDump id radius x y z c_nbond + +dump 2 all local 100 brokenDump f_brkbond[1] f_brkbond[2] f_brkbond[3] +dump_modify 2 header no + +run 7500 + generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update every 1 steps, delay 10 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 = 98 108 108 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gran/hooke/history, perpetual + attributes: half, newton on, size, history + pair build: half/size/bin/newton + stencil: half/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 33.34 | 33.34 | 33.35 Mbytes +Step KinEng PotEng Pxx Pyy Pzz c_tbond + 0 0.00053238861 0 3.8217307e-05 0 0 10.8703 + 100 0.00053238861 0 3.8217307e-05 1.2166373e-20 1.2308212e-20 10.8703 + 200 0.00053238861 0 3.8217307e-05 1.2454467e-20 1.2479589e-20 10.8703 + 300 0.00053238861 0 3.8217307e-05 1.2256702e-20 1.2621091e-20 10.8703 + 400 0.00053238861 0 3.8217307e-05 1.2170534e-20 1.2751666e-20 10.8703 + 500 0.00053093549 0 3.8484194e-05 7.645531e-08 1.4861825e-07 10.8703 + 600 0.00051485902 0 4.0340751e-05 3.8615876e-07 4.8663463e-07 10.869221 + 700 0.00049942978 0 3.8684008e-05 4.5363318e-07 4.4560229e-07 10.85501 + 800 0.00049465262 0 3.6604612e-05 1.4755468e-07 2.0062093e-07 10.820651 + 900 0.00048784775 0 3.5333139e-05 3.5118328e-07 6.6697625e-07 10.769563 + 1000 0.00048345699 0 3.4702137e-05 7.0312998e-07 4.0218318e-07 10.730347 + 1100 0.00047945073 0 3.5065961e-05 6.2813891e-07 7.4640359e-07 10.703184 + 1200 0.00047512604 0 3.4833144e-05 8.5208604e-07 8.7277583e-07 10.686634 + 1300 0.00047401428 0 3.4236869e-05 1.0321827e-06 7.4545242e-07 10.678 + 1400 0.00047619121 0 3.4416549e-05 8.7518021e-07 7.3979503e-07 10.671704 + 1500 0.0004668728 0 3.4495751e-05 1.4077823e-06 1.517373e-06 10.666127 + 1600 0.00045088371 0 3.3264301e-05 1.8499661e-06 1.9842415e-06 10.66073 + 1700 0.00044275099 0 3.2471064e-05 1.9028747e-06 2.2248947e-06 10.6458 + 1800 0.0004424362 0 3.1846336e-05 1.6208492e-06 1.9291602e-06 10.620615 + 1900 0.00043678957 0 3.1260936e-05 1.4673956e-06 1.6120523e-06 10.603166 + 2000 0.00042747562 0 3.0652107e-05 1.6455486e-06 1.53127e-06 10.576003 + 2100 0.0004214344 0 3.0240727e-05 1.8873967e-06 1.5258622e-06 10.539845 + 2200 0.00041712779 0 3.0329566e-05 1.8846152e-06 1.4971471e-06 10.49937 + 2300 0.00041095769 0 3.0000572e-05 2.3585924e-06 1.6773177e-06 10.471668 + 2400 0.00040883568 0 2.9625158e-05 1.9105554e-06 1.8720763e-06 10.45116 + 2500 0.00040762685 0 2.9441541e-05 1.6848938e-06 1.8877532e-06 10.437309 + 2600 0.00040579873 0 2.9255988e-05 1.7523874e-06 1.636423e-06 10.422378 + 2700 0.00040340975 0 2.9035693e-05 1.673158e-06 1.9038932e-06 10.410505 + 2800 0.00040170914 0 2.8829361e-05 1.6711978e-06 1.9776001e-06 10.400792 + 2900 0.00040015113 0 2.8614186e-05 1.5982427e-06 1.7994733e-06 10.393416 + 3000 0.00040029253 0 2.8470718e-05 1.5589166e-06 1.6682302e-06 10.385321 + 3100 0.00040037329 0 2.8483376e-05 1.2831526e-06 1.4788005e-06 10.378485 + 3200 0.00040142612 0 2.8481287e-05 1.1577988e-06 1.3495778e-06 10.373988 + 3300 0.00040105092 0 2.8547009e-05 1.2155138e-06 1.2633439e-06 10.370031 + 3400 0.00039950673 0 2.8340939e-05 1.1182251e-06 1.1624668e-06 10.364274 + 3500 0.00039715236 0 2.824813e-05 1.3086462e-06 1.2029185e-06 10.360496 + 3600 0.00039446552 0 2.8112283e-05 1.1232321e-06 1.0077217e-06 10.353121 + 3700 0.00039263296 0 2.7927975e-05 1.1083636e-06 1.2091857e-06 10.346645 + 3800 0.00039061341 0 2.7819957e-05 1.1836841e-06 1.3566272e-06 10.341069 + 3900 0.00038985051 0 2.7681947e-05 1.3588359e-06 1.4099727e-06 10.329196 + 4000 0.00038815347 0 2.7492102e-05 1.1111719e-06 1.1700718e-06 10.318043 + 4100 0.00038651302 0 2.7444105e-05 9.9563429e-07 1.4085969e-06 10.311027 + 4200 0.00038565809 0 2.7177341e-05 9.5736307e-07 1.0404482e-06 10.299155 + 4300 0.0003847255 0 2.7029216e-05 9.6204756e-07 1.140804e-06 10.292319 + 4400 0.0003844421 0 2.6841047e-05 9.6570404e-07 1.2319818e-06 10.286203 + 4500 0.0003842788 0 2.6633558e-05 9.6452478e-07 1.1954945e-06 10.278287 + 4600 0.00038365139 0 2.6514403e-05 9.6185846e-07 1.2002452e-06 10.270732 + 4700 0.00038271503 0 2.6374349e-05 9.4061833e-07 1.1774211e-06 10.264796 + 4800 0.00038233688 0 2.638398e-05 1.1644119e-06 1.3746239e-06 10.25742 + 4900 0.00038223496 0 2.6279821e-05 1.1345508e-06 1.4709213e-06 10.246987 + 5000 0.00038219402 0 2.6188871e-05 1.0115151e-06 1.2024203e-06 10.240511 + 5100 0.00038195153 0 2.6137945e-05 1.009856e-06 1.1961088e-06 10.236014 + 5200 0.00038170903 0 2.6103563e-05 1.0046761e-06 1.1881008e-06 10.232236 + 5300 0.00038194303 0 2.6111938e-05 1.0533375e-06 1.2621634e-06 10.230617 + 5400 0.00038147407 0 2.6078641e-05 1.082228e-06 1.2915223e-06 10.230098 + 5500 0.00038156894 0 2.6084488e-05 1.1395485e-06 1.3592644e-06 10.227759 + 5600 0.00038169434 0 2.6085704e-05 1.1173618e-06 1.3003599e-06 10.2256 + 5700 0.00038219734 0 2.6095279e-05 1.1026614e-06 1.280455e-06 10.223621 + 5800 0.00038268758 0 2.6113437e-05 1.1096198e-06 1.2565503e-06 10.222902 + 5900 0.00038300658 0 2.6131709e-05 1.1123595e-06 1.235992e-06 10.222182 + 6000 0.00038250316 0 2.606995e-05 1.1590744e-06 1.2888416e-06 10.221123 + 6100 0.0003821526 0 2.6025605e-05 1.1434025e-06 1.3141861e-06 10.219503 + 6200 0.00038185711 0 2.5991255e-05 1.1471391e-06 1.3427373e-06 10.219503 + 6300 0.00038197679 0 2.5996965e-05 1.1338082e-06 1.3315258e-06 10.218604 + 6400 0.00038232311 0 2.6035805e-05 1.1353407e-06 1.3306683e-06 10.217884 + 6500 0.00038255543 0 2.6091572e-05 1.1768703e-06 1.3629611e-06 10.217704 + 6600 0.00038251887 0 2.6068968e-05 1.1808094e-06 1.3969697e-06 10.217344 + 6700 0.00038177389 0 2.6004288e-05 1.1659866e-06 1.423638e-06 10.218084 + 6800 0.00038096291 0 2.5969494e-05 1.1377343e-06 1.4348787e-06 10.218103 + 6900 0.00038090601 0 2.5951546e-05 1.1327767e-06 1.4311663e-06 10.217024 + 7000 0.00038088094 0 2.5946255e-05 1.1652568e-06 1.4567559e-06 10.215944 + 7100 0.00038094624 0 2.5972593e-05 1.1558871e-06 1.4692935e-06 10.214684 + 7200 0.00038168738 0 2.6002e-05 1.1562707e-06 1.4881081e-06 10.212705 + 7300 0.00038200854 0 2.6038768e-05 1.1339903e-06 1.4808455e-06 10.212345 + 7400 0.00038187543 0 2.6044759e-05 1.101743e-06 1.4758679e-06 10.213084 + 7500 0.00038165297 0 2.6004536e-05 1.0892731e-06 1.4872621e-06 10.214742 +Loop time of 28.804 on 4 procs for 7500 steps with 11111 atoms + +Performance: 1124843.305 tau/day, 260.380 timesteps/s +97.5% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.26977 | 0.28058 | 0.2866 | 1.3 | 0.97 +Bond | 22.742 | 23.598 | 24.671 | 16.6 | 81.92 +Neigh | 0.54555 | 0.5728 | 0.60272 | 3.2 | 1.99 +Comm | 1.4024 | 2.5619 | 3.5079 | 54.8 | 8.89 +Output | 0.025307 | 0.025833 | 0.027022 | 0.4 | 0.09 +Modify | 1.592 | 1.6506 | 1.7059 | 4.0 | 5.73 +Other | | 0.1147 | | | 0.40 + +Nlocal: 2777.75 ave 2887 max 2682 min +Histogram: 1 0 0 0 2 0 0 0 0 1 +Nghost: 1152.5 ave 1189 max 1125 min +Histogram: 1 0 1 0 0 1 0 0 0 1 +Neighs: 11515.5 ave 12520 max 10831 min +Histogram: 1 1 0 0 1 0 0 0 0 1 + +Total # of neighbors = 46062 +Ave neighs/atom = 4.1456215 +Ave special neighs/atom = 10.214742 +Neighbor list builds = 408 +Dangerous builds = 0 +Total wall time: 0:00:28 diff --git a/examples/bpm/impact/log.17Feb2022.impact.spring.g++.4 b/examples/bpm/impact/log.17Feb2022.impact.spring.g++.4 new file mode 100644 index 0000000000..9b11f62b88 --- /dev/null +++ b/examples/bpm/impact/log.17Feb2022.impact.spring.g++.4 @@ -0,0 +1,221 @@ +LAMMPS (17 Feb 2022) +units lj +dimension 3 +boundary f f f +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.0 +Lattice spacing in x,y,z = 1.5874011 1.5874011 1.5874011 +region box block -25 15 -22 22 -22 22 +create_box 1 box bond/types 2 extra/bond/per/atom 20 extra/special/per/atom 50 +Created orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) + 1 by 2 by 2 MPI processor grid + +region disk cylinder x 0.0 0.0 20.0 -0.5 0.5 +create_atoms 1 region disk +Created 7529 atoms + using lattice units in orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) + create_atoms CPU = 0.001 seconds +group plate region disk +7529 atoms in group plate + +region ball sphere 8.0 0.0 0.0 6.0 +create_atoms 1 region ball +Created 3589 atoms + using lattice units in orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) + create_atoms CPU = 0.000 seconds +group projectile region ball +3589 atoms in group projectile + +displace_atoms all random 0.1 0.1 0.1 134598738 +Displacing atoms ... + +mass 1 1.0 + +neighbor 1.0 bin +pair_style bpm/spring +pair_coeff 1 1 1.0 1.0 1.0 + +fix 1 all nve + +create_bonds many plate plate 1 0.0 1.5 + generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2.6 + binsize = 1, bins = 64 70 70 + 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 38559 bonds, new total = 38559 +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 15 = max # of 1-2 neighbors + 101 = max # of special neighbors + special bonds CPU = 0.001 seconds +create_bonds many projectile projectile 2 0.0 1.5 + generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +WARNING: Bonds are defined but no bond style is set (../force.cpp:192) +WARNING: Likewise 1-2 special neighbor interactions != 1.0 (../force.cpp:194) +Added 21869 bonds, new total = 60428 +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 16 = max # of 1-2 neighbors + 101 = max # of special neighbors + special bonds CPU = 0.001 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 store/local brkbond 100 time id1 id2 +bond_coeff 1 1.0 0.04 1.0 +bond_coeff 2 1.0 0.20 1.0 + +velocity projectile set -0.05 0.0 0.0 +compute nbond all nbond/atom +compute tbond all reduce sum c_nbond + +timestep 0.1 +thermo_style custom step ke pe pxx pyy pzz c_tbond +thermo 100 +thermo_modify lost ignore lost/bond ignore +#dump 1 all custom 100 atomDump id x y z c_nbond + +dump 2 all local 100 brokenDump f_brkbond[1] f_brkbond[2] f_brkbond[3] +dump_modify 2 header no + +run 7500 + generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update every 1 steps, delay 10 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 = 98 108 108 + 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) = 17.74 | 17.74 | 17.74 Mbytes +Step KinEng PotEng Pxx Pyy Pzz c_tbond + 0 0.0010167873 0 7.298968e-05 0 0 10.8703 + 100 0.0010167873 0 7.298968e-05 -8.7429897e-20 -8.8470837e-20 10.8703 + 200 0.0010167873 0 7.298968e-05 -7.2809565e-20 -8.0915788e-20 10.8703 + 300 0.0009951439 0 9.9273671e-05 8.1569216e-06 8.0922512e-06 10.868142 + 400 0.00095142792 0 0.00012669557 -1.3413721e-05 -1.4800745e-05 10.849793 + 500 0.00092272662 0 8.1708784e-05 -9.7488701e-06 -1.3603634e-05 10.819752 + 600 0.00088967612 0 6.2587266e-05 -5.1954127e-06 -6.781587e-06 10.797985 + 700 0.00086070919 0 8.8529902e-05 -9.9431205e-06 -7.9905211e-06 10.776579 + 800 0.00083543943 0 7.5920357e-05 3.6381024e-07 3.7747551e-06 10.759309 + 900 0.00081190799 0 6.3678219e-05 5.4158243e-06 1.2751247e-05 10.744199 + 1000 0.00078828988 0 7.3079869e-05 -6.6410613e-06 -1.198683e-06 10.728368 + 1100 0.00075664718 0 6.2976995e-05 -4.7863299e-06 -3.9814556e-06 10.711819 + 1200 0.00072472205 0 4.9680233e-05 9.3093553e-06 4.4426393e-06 10.69401 + 1300 0.00070176532 0 5.4048176e-05 1.3051954e-05 7.5448558e-06 10.671164 + 1400 0.00068599319 0 5.4062404e-05 9.9930199e-06 1.0353154e-05 10.650117 + 1500 0.0006786164 0 4.5038593e-05 8.067571e-06 9.8825461e-06 10.636266 + 1600 0.00067466823 0 4.6733251e-05 9.8595584e-06 1.1551081e-05 10.621335 + 1700 0.00066847126 0 5.1472453e-05 2.1569974e-07 6.0070599e-06 10.6127 + 1800 0.00065711827 0 5.0355189e-05 -8.030203e-06 -3.1395588e-06 10.599568 + 1900 0.00063882539 0 4.7146888e-05 -2.0596242e-05 -1.6494542e-05 10.581939 + 2000 0.00061717894 0 4.6698781e-05 -2.5473048e-05 -2.7703615e-05 10.567188 + 2100 0.00059261327 0 3.7701055e-05 -2.4637803e-05 -3.3919162e-05 10.552617 + 2200 0.00056527158 0 3.2239421e-05 -1.8786685e-05 -2.4202734e-05 10.538406 + 2300 0.00054054919 0 2.7410334e-05 -6.701111e-06 -7.4354974e-06 10.520777 + 2400 0.00051820065 0 2.2997206e-05 1.5623767e-05 1.8687824e-05 10.501889 + 2500 0.00049647925 0 1.746693e-05 2.8814144e-05 3.5569425e-05 10.487498 + 2600 0.00047837258 0 1.4127067e-05 3.4245611e-05 4.0208577e-05 10.472387 + 2700 0.00046626924 0 1.3714876e-05 3.7922196e-05 4.1550346e-05 10.456377 + 2800 0.0004560167 0 1.5260976e-05 3.5632577e-05 3.7885738e-05 10.440007 + 2900 0.00045331059 0 1.5194832e-05 3.1036124e-05 2.8633755e-05 10.427955 + 3000 0.00045227799 0 1.4877378e-05 1.9327028e-05 2.1189487e-05 10.414283 + 3100 0.00044866178 0 2.0424612e-05 -2.7242288e-06 7.7121438e-06 10.40349 + 3200 0.00044336453 0 2.3276121e-05 -1.979069e-05 -4.2311089e-06 10.395575 + 3300 0.00043526526 0 2.3338132e-05 -2.834945e-05 -1.7302033e-05 10.389998 + 3400 0.00042817758 0 2.4374527e-05 -2.9870076e-05 -3.0623264e-05 10.382803 + 3500 0.00042182658 0 2.6120627e-05 -2.9449521e-05 -3.787776e-05 10.378126 + 3600 0.00041794291 0 2.4736957e-05 -2.4098172e-05 -3.0529166e-05 10.373628 + 3700 0.0004156005 0 2.7543305e-05 -1.2431749e-05 -1.8626096e-05 10.37075 + 3800 0.0004141461 0 2.4630482e-05 -6.345489e-06 -1.7375803e-05 10.368771 + 3900 0.00041328832 0 2.2220142e-05 4.1471034e-07 -1.3339476e-05 10.366972 + 4000 0.00041121725 0 2.3491321e-05 1.1284551e-05 -5.8651834e-06 10.364634 + 4100 0.00040761876 0 2.6688248e-05 1.9721625e-05 3.7536871e-06 10.362655 + 4200 0.00040301362 0 2.7601916e-05 1.9212118e-05 9.7175996e-06 10.359417 + 4300 0.00040001545 0 2.7243769e-05 1.6889359e-05 1.1857147e-05 10.3551 + 4400 0.00039654521 0 2.561083e-05 1.3863551e-05 1.0593597e-05 10.351142 + 4500 0.00039435924 0 2.4366458e-05 1.2545563e-05 1.1323962e-05 10.348804 + 4600 0.00039250006 0 2.3719127e-05 1.1015167e-05 8.5964046e-06 10.348444 + 4700 0.00039145496 0 2.2943915e-05 8.7824224e-06 5.0397129e-06 10.346825 + 4800 0.00039105331 0 2.4005757e-05 7.5899773e-06 9.033741e-07 10.344846 + 4900 0.0003898798 0 2.3819433e-05 4.9673894e-06 -2.3466459e-06 10.343587 + 5000 0.00038747508 0 2.3605028e-05 -1.1717437e-06 -6.1096657e-06 10.343047 + 5100 0.00038549022 0 2.3453798e-05 -9.9256693e-06 -9.3584148e-06 10.341788 + 5200 0.00038283936 0 2.5243567e-05 -1.5877598e-05 -9.9474447e-06 10.340169 + 5300 0.00038140888 0 2.5522223e-05 -1.9331435e-05 -1.1067039e-05 10.33873 + 5400 0.00037916674 0 2.5181488e-05 -2.1581255e-05 -1.1252641e-05 10.336931 + 5500 0.00037782932 0 2.691805e-05 -1.5768241e-05 -5.6704695e-06 10.334952 + 5600 0.00037628832 0 2.5851445e-05 -1.4239811e-05 -1.9122536e-06 10.333153 + 5700 0.00037451913 0 2.4758416e-05 -1.3252284e-05 -1.9222041e-06 10.331714 + 5800 0.00037328662 0 2.2507032e-05 -9.6704092e-06 -7.5470215e-06 10.330095 + 5900 0.00037253111 0 2.3303086e-05 -4.2828034e-06 -7.888056e-06 10.328476 + 6000 0.00037171133 0 2.4042456e-05 -4.7684985e-06 -6.5164336e-06 10.327397 + 6100 0.00036986726 0 2.4938695e-05 -4.8738316e-06 -4.5380007e-06 10.327037 + 6200 0.0003675822 0 2.3322229e-05 -4.6333093e-06 -5.7086464e-06 10.327037 + 6300 0.00036552389 0 2.1435354e-05 -4.8971566e-06 -3.5935426e-06 10.327037 + 6400 0.00036488091 0 2.0813994e-05 -3.8333319e-06 -3.6595059e-06 10.327037 + 6500 0.00036447973 0 2.2241876e-05 8.7797361e-08 -4.141203e-06 10.327037 + 6600 0.00036383343 0 2.269485e-05 4.9364593e-06 1.3062133e-06 10.326677 + 6700 0.00036305076 0 2.1838759e-05 6.4587048e-06 4.7758772e-06 10.326318 + 6800 0.00036226601 0 2.2916622e-05 6.044926e-06 5.0291597e-06 10.325598 + 6900 0.00036175279 0 2.2691667e-05 6.9998847e-06 5.8988637e-06 10.324699 + 7000 0.00036143633 0 2.1725813e-05 8.1268152e-06 5.0390503e-06 10.324519 + 7100 0.0003610248 0 2.1799675e-05 8.65795e-06 3.1360368e-06 10.323439 + 7200 0.00036086259 0 2.2198029e-05 5.1764734e-06 5.4798783e-07 10.32308 + 7300 0.00036099757 0 2.4160496e-05 1.0310325e-06 -5.115075e-07 10.32254 + 7400 0.00036129334 0 2.5325018e-05 -9.4918158e-07 -1.7064957e-06 10.32218 + 7500 0.00036136655 0 2.3513198e-05 -3.8618451e-06 -4.4344772e-06 10.321281 +Loop time of 4.51074 on 4 procs for 7500 steps with 11118 atoms + +Performance: 14365719.597 tau/day, 1662.699 timesteps/s +93.8% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.25733 | 0.26952 | 0.28068 | 1.6 | 5.98 +Bond | 1.9391 | 2.0128 | 2.0851 | 3.7 | 44.62 +Neigh | 0.56308 | 0.5941 | 0.62077 | 2.8 | 13.17 +Comm | 0.68282 | 0.80856 | 0.94406 | 10.7 | 17.93 +Output | 0.19287 | 0.1933 | 0.19426 | 0.1 | 4.29 +Modify | 0.53239 | 0.55343 | 0.57349 | 2.0 | 12.27 +Other | | 0.07902 | | | 1.75 + +Nlocal: 2779.5 ave 2862 max 2686 min +Histogram: 1 0 0 0 0 1 1 0 0 1 +Nghost: 1183.25 ave 1220 max 1134 min +Histogram: 1 0 0 0 1 0 0 0 1 1 +Neighs: 11828.8 ave 12387 max 11053 min +Histogram: 1 0 0 0 1 0 0 0 1 1 + +Total # of neighbors = 47315 +Ave neighs/atom = 4.2557115 +Ave special neighs/atom = 10.321461 +Neighbor list builds = 421 +Dangerous builds = 11 +Total wall time: 0:00:04 diff --git a/examples/bpm/impact/log.27Oct2021.impact.rotational.g++.4 b/examples/bpm/impact/log.27Oct2021.impact.rotational.g++.4 deleted file mode 100644 index bb7b526ed9..0000000000 --- a/examples/bpm/impact/log.27Oct2021.impact.rotational.g++.4 +++ /dev/null @@ -1,217 +0,0 @@ -LAMMPS (27 Oct 2021) -units lj -dimension 3 -boundary f f f -atom_style sphere/bpm -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.0 -Lattice spacing in x,y,z = 1.5874011 1.5874011 1.5874011 -region box block -25 15 -22 22 -22 22 -create_box 1 box bond/types 2 extra/bond/per/atom 20 extra/special/per/atom 50 -Created orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) - 1 by 2 by 2 MPI processor grid - -region disk cylinder x 0.0 0.0 20.0 -0.5 0.5 -create_atoms 1 region disk -Created 7529 atoms - using lattice units in orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) - create_atoms CPU = 0.006 seconds -group plate region disk -7529 atoms in group plate - -region ball sphere 8.0 0.0 0.0 6.0 -create_atoms 1 region ball -Created 3589 atoms - using lattice units in orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) - create_atoms CPU = 0.001 seconds -group projectile region ball -3589 atoms in group projectile - -displace_atoms all random 0.1 0.1 0.1 134598738 -Displacing atoms ... - -neighbor 1.0 bin -pair_style gran/hooke/history 1.0 NULL 0.5 NULL 0.1 1 -pair_coeff 1 1 - -fix 1 all nve/sphere/bpm - -create_bonds many plate plate 1 0.0 1.5 -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2.6 - binsize = 1, bins = 64 70 70 - 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 gran/hooke/history, perpetual - attributes: half, newton on, size, history - pair build: half/size/bin/newton - stencil: half/bin/3d - bin: standard -Added 38559 bonds, new total = 38559 -Finding 1-2 1-3 1-4 neighbors ... - special bond factors lj: 0 1 1 - special bond factors coul: 0 1 1 - 15 = max # of 1-2 neighbors - 101 = max # of special neighbors - special bonds CPU = 0.002 seconds -create_bonds many projectile projectile 2 0.0 1.5 -WARNING: Bonds are defined but no bond style is set (../force.cpp:191) -WARNING: Likewise 1-2 special neighbor interactions != 1.0 (../force.cpp:193) -Added 21869 bonds, new total = 60428 -Finding 1-2 1-3 1-4 neighbors ... - special bond factors lj: 0 1 1 - special bond factors coul: 0 1 1 - 16 = max # of 1-2 neighbors - 101 = max # of special neighbors - special bonds CPU = 0.002 seconds - -neighbor 0.3 bin -special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0 - -bond_style bpm/rotational store/local brkbond 100 time id1 id2 -bond_coeff 1 1.0 0.2 0.02 0.02 0.05 0.01 0.01 0.01 0.1 0.02 0.002 0.002 -bond_coeff 2 1.0 0.2 0.02 0.02 0.20 0.04 0.04 0.04 0.1 0.02 0.002 0.002 - -velocity projectile set -0.05 0.0 0.0 -compute nbond all nbond/atom -compute tbond all reduce sum c_nbond - -timestep 0.05 -thermo_style custom step ke pe pxx pyy pzz c_tbond -thermo 100 -thermo_modify lost ignore lost/bond ignore -#dump 1 all custom 100 atomDump id radius x y z c_nbond - -dump 2 all local 100 brokenDump f_brkbond[1] f_brkbond[2] f_brkbond[3] -dump_modify 2 header no - -run 7500 -WARNING: No fixes with time integration, atoms won't move (../verlet.cpp:60) -Neighbor list info ... - update every 1 steps, delay 10 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 = 98 108 108 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair gran/hooke/history, perpetual - attributes: half, newton on, size, history - pair build: half/size/bin/newton - stencil: half/bin/3d - bin: standard -Per MPI rank memory allocation (min/avg/max) = 33.34 | 33.34 | 33.35 Mbytes -Step KinEng PotEng Pxx Pyy Pzz c_tbond - 0 0.00053238861 0 3.8217307e-05 0 0 10.8703 - 100 0.00053238861 0 3.8217307e-05 2.0196245e-19 2.0291801e-19 10.8703 - 200 0.00053238861 0 3.8217307e-05 3.0246341e-19 2.9178664e-19 10.8703 - 300 0.00053238861 0 3.8217307e-05 3.3428362e-19 3.2669661e-19 10.8703 - 400 0.00053238861 0 3.8217307e-05 3.5002919e-19 3.3516777e-19 10.8703 - 500 0.00053102278 0 3.8469829e-05 7.3311547e-08 1.4473347e-07 10.8703 - 600 0.00051549609 0 4.0342929e-05 3.87734e-07 4.9640786e-07 10.868322 - 700 0.00050121532 0 3.8778736e-05 4.6411496e-07 4.3149467e-07 10.850333 - 800 0.00049869661 0 3.6779398e-05 4.748259e-07 3.5191586e-07 10.803202 - 900 0.00049580923 0 3.5608764e-05 9.3667316e-07 5.0139078e-07 10.737363 - 1000 0.00049478796 0 3.5573518e-05 7.9599489e-07 6.7732416e-07 10.683396 - 1100 0.00048712204 0 3.5843955e-05 1.1345563e-06 1.4066243e-06 10.662169 - 1200 0.00048265244 0 3.5288538e-05 1.7434542e-06 1.6555952e-06 10.642921 - 1300 0.00047982046 0 3.4929699e-05 1.5116612e-06 1.1824842e-06 10.62925 - 1400 0.00048024672 0 3.4696478e-05 1.0219046e-06 9.6017582e-07 10.619716 - 1500 0.0004721757 0 3.4671814e-05 1.7623303e-06 1.6904391e-06 10.608023 - 1600 0.00045691175 0 3.3618706e-05 2.0127313e-06 2.2294075e-06 10.599208 - 1700 0.00044846472 0 3.2628068e-05 2.1732651e-06 2.6125725e-06 10.586796 - 1800 0.00044916668 0 3.2074126e-05 1.713271e-06 2.2306226e-06 10.562691 - 1900 0.00044434475 0 3.1841489e-05 1.4069412e-06 1.6739368e-06 10.540025 - 2000 0.00044011236 0 3.1535369e-05 1.8850064e-06 1.966093e-06 10.508365 - 2100 0.00043343658 0 3.1327313e-05 1.7877497e-06 1.9031224e-06 10.466271 - 2200 0.00043076716 0 3.1141775e-05 2.260934e-06 1.7405179e-06 10.428135 - 2300 0.0004252247 0 3.065038e-05 1.8685672e-06 1.6444209e-06 10.398993 - 2400 0.00042502327 0 3.0356508e-05 1.8748934e-06 1.3329686e-06 10.380644 - 2500 0.00042142831 0 3.0164965e-05 2.1119049e-06 1.7118338e-06 10.366433 - 2600 0.00042131885 0 3.0065244e-05 1.6092748e-06 1.5373156e-06 10.35456 - 2700 0.00042303607 0 3.0011813e-05 1.7496254e-06 1.77836e-06 10.327937 - 2800 0.00042148119 0 2.9849777e-05 1.5035087e-06 1.5374543e-06 10.314085 - 2900 0.00042092112 0 2.9766439e-05 1.2512363e-06 1.417453e-06 10.302572 - 3000 0.00042298628 0 2.985456e-05 1.030367e-06 1.2706193e-06 10.297536 - 3100 0.00042098731 0 2.9773119e-05 1.1020439e-06 1.3236711e-06 10.293938 - 3200 0.00042190155 0 2.975807e-05 1.0825659e-06 1.207615e-06 10.2907 - 3300 0.00041840008 0 2.9573071e-05 1.0027126e-06 1.0591685e-06 10.286562 - 3400 0.00041726315 0 2.9629012e-05 1.3206781e-06 1.0694496e-06 10.280986 - 3500 0.00041553548 0 2.9393577e-05 1.4604125e-06 1.2547784e-06 10.27361 - 3600 0.00041551693 0 2.9122892e-05 1.0944373e-06 9.6499513e-07 10.271632 - 3700 0.00041351569 0 2.8943889e-05 9.6203862e-07 8.3123719e-07 10.270192 - 3800 0.00041419735 0 2.9031969e-05 1.1893061e-06 7.9832166e-07 10.267494 - 3900 0.0004142108 0 2.8912904e-05 1.0049279e-06 9.0628823e-07 10.255442 - 4000 0.00041253668 0 2.8794779e-05 8.3301821e-07 8.2348634e-07 10.250045 - 4100 0.00041245029 0 2.8626953e-05 1.0440229e-06 9.7296445e-07 10.239971 - 4200 0.00041239868 0 2.8576872e-05 8.5677759e-07 9.4929241e-07 10.235114 - 4300 0.0004105539 0 2.845078e-05 7.9007545e-07 9.4314698e-07 10.227559 - 4400 0.00041038071 0 2.8447842e-05 8.3506095e-07 9.403948e-07 10.220363 - 4500 0.0004094738 0 2.8385536e-05 7.4474323e-07 8.9167115e-07 10.214247 - 4600 0.00040931891 0 2.8293128e-05 6.9842277e-07 8.7986292e-07 10.211189 - 4700 0.00040935826 0 2.832743e-05 7.7312621e-07 8.6571149e-07 10.208491 - 4800 0.00040894424 0 2.8290022e-05 7.560957e-07 7.8478084e-07 10.202195 - 4900 0.00040771373 0 2.8211024e-05 8.8835691e-07 7.6981867e-07 10.196816 - 5000 0.0004075835 0 2.8242057e-05 7.9265659e-07 8.5594679e-07 10.18854 - 5100 0.00040629886 0 2.8147996e-05 8.29922e-07 8.2991198e-07 10.186938 - 5200 0.00040615587 0 2.8075206e-05 7.9676977e-07 8.3313535e-07 10.183699 - 5300 0.00040623905 0 2.8061445e-05 8.5454501e-07 8.3464967e-07 10.18154 - 5400 0.00040639649 0 2.8095492e-05 9.219289e-07 8.8970884e-07 10.180281 - 5500 0.00040632069 0 2.8146737e-05 9.5125536e-07 9.2967258e-07 10.179741 - 5600 0.00040615846 0 2.8095814e-05 9.4628277e-07 9.4475909e-07 10.179201 - 5700 0.00040661759 0 2.8056252e-05 9.1418005e-07 9.3869835e-07 10.177942 - 5800 0.00040636342 0 2.7980285e-05 8.7191961e-07 9.4296893e-07 10.177042 - 5900 0.00040517906 0 2.7876934e-05 8.3277579e-07 9.2807515e-07 10.178694 - 6000 0.00040392762 0 2.7828073e-05 8.3950266e-07 9.4521092e-07 10.180166 - 6100 0.00040367162 0 2.7800472e-05 8.720166e-07 1.0332147e-06 10.179806 - 6200 0.00040335119 0 2.7762148e-05 8.5284463e-07 9.3150721e-07 10.179086 - 6300 0.00040340642 0 2.7769051e-05 8.3428098e-07 8.7041896e-07 10.178546 - 6400 0.0004030719 0 2.7741943e-05 7.952126e-07 8.3664709e-07 10.179282 - 6500 0.00040347682 0 2.7744595e-05 7.8058438e-07 8.4639064e-07 10.178382 - 6600 0.00040257759 0 2.7667961e-05 7.8150592e-07 8.5501519e-07 10.179298 - 6700 0.00040217981 0 2.7649415e-05 8.1293625e-07 9.4727792e-07 10.178938 - 6800 0.00040191405 0 2.7693195e-05 8.0894279e-07 1.1604089e-06 10.178938 - 6900 0.00040208358 0 2.7773245e-05 7.9264674e-07 1.1927033e-06 10.178758 - 7000 0.00040239724 0 2.782978e-05 8.330894e-07 1.2084905e-06 10.178758 - 7100 0.00040269303 0 2.7728862e-05 8.1375466e-07 1.0779344e-06 10.178758 - 7200 0.00040227155 0 2.7654709e-05 8.3101678e-07 9.7757461e-07 10.17969 - 7300 0.00040115701 0 2.7604211e-05 8.07161e-07 9.4401828e-07 10.181376 - 7400 0.00039998681 0 2.7528309e-05 7.8970732e-07 9.3464728e-07 10.182703 - 7500 0.00039916281 0 2.7432547e-05 7.9446882e-07 8.9887681e-07 10.182949 -Loop time of 34.6948 on 4 procs for 7500 steps with 11096 atoms - -Performance: 933857.672 tau/day, 216.171 timesteps/s -98.4% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.32481 | 0.33445 | 0.34816 | 1.6 | 0.96 -Bond | 26.728 | 28.076 | 29.753 | 23.9 | 80.92 -Neigh | 0.68094 | 0.72261 | 0.7747 | 4.8 | 2.08 -Comm | 1.5266 | 3.3654 | 4.8309 | 75.3 | 9.70 -Output | 0.018332 | 0.018804 | 0.019756 | 0.4 | 0.05 -Modify | 1.9305 | 2.0147 | 2.1302 | 6.0 | 5.81 -Other | | 0.1631 | | | 0.47 - -Nlocal: 2774.00 ave 2898 max 2701 min -Histogram: 1 1 0 1 0 0 0 0 0 1 -Nghost: 1165.25 ave 1208 max 1142 min -Histogram: 2 0 0 1 0 0 0 0 0 1 -Neighs: 11425.0 ave 12539 max 10556 min -Histogram: 1 0 1 0 1 0 0 0 0 1 - -Total # of neighbors = 45700 -Ave neighs/atom = 4.1186013 -Ave special neighs/atom = 10.184841 -Neighbor list builds = 451 -Dangerous builds = 0 -Total wall time: 0:00:35 diff --git a/examples/bpm/impact/log.27Oct2021.impact.spring.g++.4 b/examples/bpm/impact/log.27Oct2021.impact.spring.g++.4 index 4aae247314..bb7b526ed9 100644 --- a/examples/bpm/impact/log.27Oct2021.impact.spring.g++.4 +++ b/examples/bpm/impact/log.27Oct2021.impact.spring.g++.4 @@ -2,7 +2,7 @@ LAMMPS (27 Oct 2021) units lj dimension 3 boundary f f f -atom_style bond +atom_style sphere/bpm 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 @@ -17,7 +17,7 @@ region disk cylinder x 0.0 0.0 20.0 -0.5 0.5 create_atoms 1 region disk Created 7529 atoms using lattice units in orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) - create_atoms CPU = 0.002 seconds + create_atoms CPU = 0.006 seconds group plate region disk 7529 atoms in group plate @@ -32,13 +32,11 @@ group projectile region ball displace_atoms all random 0.1 0.1 0.1 134598738 Displacing atoms ... -mass 1 1.0 - neighbor 1.0 bin -pair_style bpm/spring -pair_coeff 1 1 1.0 1.0 1.0 +pair_style gran/hooke/history 1.0 NULL 0.5 NULL 0.1 1 +pair_coeff 1 1 -fix 1 all nve +fix 1 all nve/sphere/bpm create_bonds many plate plate 1 0.0 1.5 Neighbor list info ... @@ -53,9 +51,9 @@ Neighbor list info ... pair build: full/bin stencil: full/bin/3d bin: standard - (2) pair bpm/spring, perpetual - attributes: half, newton on - pair build: half/bin/newton + (2) pair gran/hooke/history, perpetual + attributes: half, newton on, size, history + pair build: half/size/bin/newton stencil: half/bin/3d bin: standard Added 38559 bonds, new total = 38559 @@ -79,19 +77,19 @@ Finding 1-2 1-3 1-4 neighbors ... neighbor 0.3 bin special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0 -bond_style bpm/spring store/local brkbond 100 time id1 id2 -bond_coeff 1 1.0 0.04 1.0 -bond_coeff 2 1.0 0.20 1.0 +bond_style bpm/rotational store/local brkbond 100 time id1 id2 +bond_coeff 1 1.0 0.2 0.02 0.02 0.05 0.01 0.01 0.01 0.1 0.02 0.002 0.002 +bond_coeff 2 1.0 0.2 0.02 0.02 0.20 0.04 0.04 0.04 0.1 0.02 0.002 0.002 velocity projectile set -0.05 0.0 0.0 compute nbond all nbond/atom compute tbond all reduce sum c_nbond -timestep 0.1 +timestep 0.05 thermo_style custom step ke pe pxx pyy pzz c_tbond thermo 100 thermo_modify lost ignore lost/bond ignore -#dump 1 all custom 100 atomDump id x y z c_nbond +#dump 1 all custom 100 atomDump id radius x y z c_nbond dump 2 all local 100 brokenDump f_brkbond[1] f_brkbond[2] f_brkbond[3] dump_modify 2 header no @@ -105,115 +103,115 @@ Neighbor list info ... ghost atom cutoff = 2.6 binsize = 0.65, bins = 98 108 108 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair bpm/spring, perpetual - attributes: half, newton on - pair build: half/bin/newton + (1) pair gran/hooke/history, perpetual + attributes: half, newton on, size, history + pair build: half/size/bin/newton stencil: half/bin/3d bin: standard -Per MPI rank memory allocation (min/avg/max) = 17.74 | 17.74 | 17.74 Mbytes +Per MPI rank memory allocation (min/avg/max) = 33.34 | 33.34 | 33.35 Mbytes Step KinEng PotEng Pxx Pyy Pzz c_tbond - 0 0.0010167873 0 7.298968e-05 0 0 10.8703 - 100 0.0010167873 0 7.298968e-05 -8.7429897e-20 -8.8470837e-20 10.8703 - 200 0.0010167873 0 7.298968e-05 -7.2809565e-20 -8.0915788e-20 10.8703 - 300 0.0009951439 0 9.9273671e-05 8.1569216e-06 8.0922512e-06 10.868142 - 400 0.00095142792 0 0.00012669557 -1.3413721e-05 -1.4800745e-05 10.849793 - 500 0.00092272662 0 8.1708784e-05 -9.7488701e-06 -1.3603634e-05 10.819752 - 600 0.00088967612 0 6.2587266e-05 -5.1954127e-06 -6.781587e-06 10.797985 - 700 0.00086070919 0 8.8529902e-05 -9.9431205e-06 -7.9905211e-06 10.776579 - 800 0.00083543943 0 7.5920357e-05 3.6381024e-07 3.7747551e-06 10.759309 - 900 0.00081190799 0 6.3678219e-05 5.4158243e-06 1.2751247e-05 10.744199 - 1000 0.00078828988 0 7.3079869e-05 -6.6410613e-06 -1.198683e-06 10.728368 - 1100 0.00075664718 0 6.2976995e-05 -4.7863299e-06 -3.9814556e-06 10.711819 - 1200 0.00072472205 0 4.9680233e-05 9.3093553e-06 4.4426393e-06 10.69401 - 1300 0.00070176532 0 5.4048176e-05 1.3051954e-05 7.5448558e-06 10.671164 - 1400 0.00068599319 0 5.4062404e-05 9.9930199e-06 1.0353154e-05 10.650117 - 1500 0.0006786164 0 4.5038593e-05 8.067571e-06 9.8825461e-06 10.636266 - 1600 0.00067466823 0 4.6733251e-05 9.8595584e-06 1.1551081e-05 10.621335 - 1700 0.00066847126 0 5.1472453e-05 2.1569974e-07 6.0070599e-06 10.6127 - 1800 0.00065711827 0 5.0355189e-05 -8.030203e-06 -3.1395588e-06 10.599568 - 1900 0.00063882539 0 4.7146888e-05 -2.0596242e-05 -1.6494542e-05 10.581939 - 2000 0.00061717894 0 4.6698781e-05 -2.5473048e-05 -2.7703615e-05 10.567188 - 2100 0.00059261327 0 3.7701055e-05 -2.4637803e-05 -3.3919162e-05 10.552617 - 2200 0.00056527158 0 3.2239421e-05 -1.8786685e-05 -2.4202734e-05 10.538406 - 2300 0.00054054919 0 2.7410334e-05 -6.701111e-06 -7.4354974e-06 10.520777 - 2400 0.00051820065 0 2.2997206e-05 1.5623767e-05 1.8687824e-05 10.501889 - 2500 0.00049647925 0 1.746693e-05 2.8814144e-05 3.5569425e-05 10.487498 - 2600 0.00047837258 0 1.4127067e-05 3.4245611e-05 4.0208577e-05 10.472387 - 2700 0.00046626924 0 1.3714876e-05 3.7922196e-05 4.1550346e-05 10.456377 - 2800 0.0004560167 0 1.5260976e-05 3.5632577e-05 3.7885738e-05 10.440007 - 2900 0.00045331059 0 1.5194832e-05 3.1036124e-05 2.8633755e-05 10.427955 - 3000 0.00045227799 0 1.4877378e-05 1.9327028e-05 2.1189487e-05 10.414283 - 3100 0.00044866178 0 2.0424612e-05 -2.7242288e-06 7.7121438e-06 10.40349 - 3200 0.00044336453 0 2.3276121e-05 -1.979069e-05 -4.2311089e-06 10.395575 - 3300 0.00043526526 0 2.3338132e-05 -2.834945e-05 -1.7302033e-05 10.389998 - 3400 0.00042817758 0 2.4374527e-05 -2.9870076e-05 -3.0623264e-05 10.382803 - 3500 0.00042182658 0 2.6120627e-05 -2.9449521e-05 -3.787776e-05 10.378126 - 3600 0.00041794291 0 2.4736957e-05 -2.4098172e-05 -3.0529166e-05 10.373628 - 3700 0.0004156005 0 2.7543305e-05 -1.2431749e-05 -1.8626096e-05 10.37075 - 3800 0.0004141461 0 2.4630482e-05 -6.345489e-06 -1.7375803e-05 10.368771 - 3900 0.00041328832 0 2.2220142e-05 4.1471034e-07 -1.3339476e-05 10.366972 - 4000 0.00041121725 0 2.3491321e-05 1.1284551e-05 -5.8651834e-06 10.364634 - 4100 0.00040761876 0 2.6688248e-05 1.9721625e-05 3.7536871e-06 10.362655 - 4200 0.00040301362 0 2.7601916e-05 1.9212118e-05 9.7175996e-06 10.359417 - 4300 0.00040001545 0 2.7243769e-05 1.6889359e-05 1.1857147e-05 10.3551 - 4400 0.00039654521 0 2.561083e-05 1.3863551e-05 1.0593597e-05 10.351142 - 4500 0.00039435924 0 2.4366458e-05 1.2545563e-05 1.1323962e-05 10.348804 - 4600 0.00039250006 0 2.3719127e-05 1.1015167e-05 8.5964046e-06 10.348444 - 4700 0.00039145496 0 2.2943915e-05 8.7824224e-06 5.0397129e-06 10.346825 - 4800 0.00039105331 0 2.4005757e-05 7.5899773e-06 9.033741e-07 10.344846 - 4900 0.0003898798 0 2.3819433e-05 4.9673894e-06 -2.3466459e-06 10.343587 - 5000 0.00038747508 0 2.3605028e-05 -1.1717437e-06 -6.1096657e-06 10.343047 - 5100 0.00038549022 0 2.3453798e-05 -9.9256693e-06 -9.3584148e-06 10.341788 - 5200 0.00038283936 0 2.5243567e-05 -1.5877598e-05 -9.9474447e-06 10.340169 - 5300 0.00038140888 0 2.5522223e-05 -1.9331435e-05 -1.1067039e-05 10.33873 - 5400 0.00037916674 0 2.5181488e-05 -2.1581255e-05 -1.1252641e-05 10.336931 - 5500 0.00037782932 0 2.691805e-05 -1.5768241e-05 -5.6704695e-06 10.334952 - 5600 0.00037628832 0 2.5851445e-05 -1.4239811e-05 -1.9122536e-06 10.333153 - 5700 0.00037451913 0 2.4758416e-05 -1.3252284e-05 -1.9222041e-06 10.331714 - 5800 0.00037328662 0 2.2507032e-05 -9.6704092e-06 -7.5470215e-06 10.330095 - 5900 0.00037253111 0 2.3303086e-05 -4.2828034e-06 -7.888056e-06 10.328476 - 6000 0.00037171133 0 2.4042456e-05 -4.7684985e-06 -6.5164336e-06 10.327397 - 6100 0.00036986726 0 2.4938695e-05 -4.8738316e-06 -4.5380007e-06 10.327037 - 6200 0.0003675822 0 2.3322229e-05 -4.6333093e-06 -5.7086464e-06 10.327037 - 6300 0.00036552389 0 2.1435354e-05 -4.8971566e-06 -3.5935426e-06 10.327037 - 6400 0.00036488091 0 2.0813994e-05 -3.8333319e-06 -3.6595059e-06 10.327037 - 6500 0.00036447973 0 2.2241876e-05 8.7797361e-08 -4.141203e-06 10.327037 - 6600 0.00036383343 0 2.269485e-05 4.9364593e-06 1.3062133e-06 10.326677 - 6700 0.00036305076 0 2.1838759e-05 6.4587048e-06 4.7758772e-06 10.326318 - 6800 0.00036226601 0 2.2916622e-05 6.044926e-06 5.0291597e-06 10.325598 - 6900 0.00036175279 0 2.2691667e-05 6.9998847e-06 5.8988637e-06 10.324699 - 7000 0.00036143633 0 2.1725813e-05 8.1268152e-06 5.0390503e-06 10.324519 - 7100 0.0003610248 0 2.1799675e-05 8.65795e-06 3.1360368e-06 10.323439 - 7200 0.00036086259 0 2.2198029e-05 5.1764734e-06 5.4798783e-07 10.32308 - 7300 0.00036099757 0 2.4160496e-05 1.0310325e-06 -5.115075e-07 10.32254 - 7400 0.00036129334 0 2.5325018e-05 -9.4918158e-07 -1.7064957e-06 10.32218 - 7500 0.00036136655 0 2.3513198e-05 -3.8618451e-06 -4.4344772e-06 10.321281 -Loop time of 5.76963 on 4 procs for 7500 steps with 11118 atoms + 0 0.00053238861 0 3.8217307e-05 0 0 10.8703 + 100 0.00053238861 0 3.8217307e-05 2.0196245e-19 2.0291801e-19 10.8703 + 200 0.00053238861 0 3.8217307e-05 3.0246341e-19 2.9178664e-19 10.8703 + 300 0.00053238861 0 3.8217307e-05 3.3428362e-19 3.2669661e-19 10.8703 + 400 0.00053238861 0 3.8217307e-05 3.5002919e-19 3.3516777e-19 10.8703 + 500 0.00053102278 0 3.8469829e-05 7.3311547e-08 1.4473347e-07 10.8703 + 600 0.00051549609 0 4.0342929e-05 3.87734e-07 4.9640786e-07 10.868322 + 700 0.00050121532 0 3.8778736e-05 4.6411496e-07 4.3149467e-07 10.850333 + 800 0.00049869661 0 3.6779398e-05 4.748259e-07 3.5191586e-07 10.803202 + 900 0.00049580923 0 3.5608764e-05 9.3667316e-07 5.0139078e-07 10.737363 + 1000 0.00049478796 0 3.5573518e-05 7.9599489e-07 6.7732416e-07 10.683396 + 1100 0.00048712204 0 3.5843955e-05 1.1345563e-06 1.4066243e-06 10.662169 + 1200 0.00048265244 0 3.5288538e-05 1.7434542e-06 1.6555952e-06 10.642921 + 1300 0.00047982046 0 3.4929699e-05 1.5116612e-06 1.1824842e-06 10.62925 + 1400 0.00048024672 0 3.4696478e-05 1.0219046e-06 9.6017582e-07 10.619716 + 1500 0.0004721757 0 3.4671814e-05 1.7623303e-06 1.6904391e-06 10.608023 + 1600 0.00045691175 0 3.3618706e-05 2.0127313e-06 2.2294075e-06 10.599208 + 1700 0.00044846472 0 3.2628068e-05 2.1732651e-06 2.6125725e-06 10.586796 + 1800 0.00044916668 0 3.2074126e-05 1.713271e-06 2.2306226e-06 10.562691 + 1900 0.00044434475 0 3.1841489e-05 1.4069412e-06 1.6739368e-06 10.540025 + 2000 0.00044011236 0 3.1535369e-05 1.8850064e-06 1.966093e-06 10.508365 + 2100 0.00043343658 0 3.1327313e-05 1.7877497e-06 1.9031224e-06 10.466271 + 2200 0.00043076716 0 3.1141775e-05 2.260934e-06 1.7405179e-06 10.428135 + 2300 0.0004252247 0 3.065038e-05 1.8685672e-06 1.6444209e-06 10.398993 + 2400 0.00042502327 0 3.0356508e-05 1.8748934e-06 1.3329686e-06 10.380644 + 2500 0.00042142831 0 3.0164965e-05 2.1119049e-06 1.7118338e-06 10.366433 + 2600 0.00042131885 0 3.0065244e-05 1.6092748e-06 1.5373156e-06 10.35456 + 2700 0.00042303607 0 3.0011813e-05 1.7496254e-06 1.77836e-06 10.327937 + 2800 0.00042148119 0 2.9849777e-05 1.5035087e-06 1.5374543e-06 10.314085 + 2900 0.00042092112 0 2.9766439e-05 1.2512363e-06 1.417453e-06 10.302572 + 3000 0.00042298628 0 2.985456e-05 1.030367e-06 1.2706193e-06 10.297536 + 3100 0.00042098731 0 2.9773119e-05 1.1020439e-06 1.3236711e-06 10.293938 + 3200 0.00042190155 0 2.975807e-05 1.0825659e-06 1.207615e-06 10.2907 + 3300 0.00041840008 0 2.9573071e-05 1.0027126e-06 1.0591685e-06 10.286562 + 3400 0.00041726315 0 2.9629012e-05 1.3206781e-06 1.0694496e-06 10.280986 + 3500 0.00041553548 0 2.9393577e-05 1.4604125e-06 1.2547784e-06 10.27361 + 3600 0.00041551693 0 2.9122892e-05 1.0944373e-06 9.6499513e-07 10.271632 + 3700 0.00041351569 0 2.8943889e-05 9.6203862e-07 8.3123719e-07 10.270192 + 3800 0.00041419735 0 2.9031969e-05 1.1893061e-06 7.9832166e-07 10.267494 + 3900 0.0004142108 0 2.8912904e-05 1.0049279e-06 9.0628823e-07 10.255442 + 4000 0.00041253668 0 2.8794779e-05 8.3301821e-07 8.2348634e-07 10.250045 + 4100 0.00041245029 0 2.8626953e-05 1.0440229e-06 9.7296445e-07 10.239971 + 4200 0.00041239868 0 2.8576872e-05 8.5677759e-07 9.4929241e-07 10.235114 + 4300 0.0004105539 0 2.845078e-05 7.9007545e-07 9.4314698e-07 10.227559 + 4400 0.00041038071 0 2.8447842e-05 8.3506095e-07 9.403948e-07 10.220363 + 4500 0.0004094738 0 2.8385536e-05 7.4474323e-07 8.9167115e-07 10.214247 + 4600 0.00040931891 0 2.8293128e-05 6.9842277e-07 8.7986292e-07 10.211189 + 4700 0.00040935826 0 2.832743e-05 7.7312621e-07 8.6571149e-07 10.208491 + 4800 0.00040894424 0 2.8290022e-05 7.560957e-07 7.8478084e-07 10.202195 + 4900 0.00040771373 0 2.8211024e-05 8.8835691e-07 7.6981867e-07 10.196816 + 5000 0.0004075835 0 2.8242057e-05 7.9265659e-07 8.5594679e-07 10.18854 + 5100 0.00040629886 0 2.8147996e-05 8.29922e-07 8.2991198e-07 10.186938 + 5200 0.00040615587 0 2.8075206e-05 7.9676977e-07 8.3313535e-07 10.183699 + 5300 0.00040623905 0 2.8061445e-05 8.5454501e-07 8.3464967e-07 10.18154 + 5400 0.00040639649 0 2.8095492e-05 9.219289e-07 8.8970884e-07 10.180281 + 5500 0.00040632069 0 2.8146737e-05 9.5125536e-07 9.2967258e-07 10.179741 + 5600 0.00040615846 0 2.8095814e-05 9.4628277e-07 9.4475909e-07 10.179201 + 5700 0.00040661759 0 2.8056252e-05 9.1418005e-07 9.3869835e-07 10.177942 + 5800 0.00040636342 0 2.7980285e-05 8.7191961e-07 9.4296893e-07 10.177042 + 5900 0.00040517906 0 2.7876934e-05 8.3277579e-07 9.2807515e-07 10.178694 + 6000 0.00040392762 0 2.7828073e-05 8.3950266e-07 9.4521092e-07 10.180166 + 6100 0.00040367162 0 2.7800472e-05 8.720166e-07 1.0332147e-06 10.179806 + 6200 0.00040335119 0 2.7762148e-05 8.5284463e-07 9.3150721e-07 10.179086 + 6300 0.00040340642 0 2.7769051e-05 8.3428098e-07 8.7041896e-07 10.178546 + 6400 0.0004030719 0 2.7741943e-05 7.952126e-07 8.3664709e-07 10.179282 + 6500 0.00040347682 0 2.7744595e-05 7.8058438e-07 8.4639064e-07 10.178382 + 6600 0.00040257759 0 2.7667961e-05 7.8150592e-07 8.5501519e-07 10.179298 + 6700 0.00040217981 0 2.7649415e-05 8.1293625e-07 9.4727792e-07 10.178938 + 6800 0.00040191405 0 2.7693195e-05 8.0894279e-07 1.1604089e-06 10.178938 + 6900 0.00040208358 0 2.7773245e-05 7.9264674e-07 1.1927033e-06 10.178758 + 7000 0.00040239724 0 2.782978e-05 8.330894e-07 1.2084905e-06 10.178758 + 7100 0.00040269303 0 2.7728862e-05 8.1375466e-07 1.0779344e-06 10.178758 + 7200 0.00040227155 0 2.7654709e-05 8.3101678e-07 9.7757461e-07 10.17969 + 7300 0.00040115701 0 2.7604211e-05 8.07161e-07 9.4401828e-07 10.181376 + 7400 0.00039998681 0 2.7528309e-05 7.8970732e-07 9.3464728e-07 10.182703 + 7500 0.00039916281 0 2.7432547e-05 7.9446882e-07 8.9887681e-07 10.182949 +Loop time of 34.6948 on 4 procs for 7500 steps with 11096 atoms -Performance: 11231223.476 tau/day, 1299.910 timesteps/s -96.3% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 933857.672 tau/day, 216.171 timesteps/s +98.4% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.29183 | 0.31143 | 0.32961 | 2.4 | 5.40 -Bond | 2.76 | 2.9181 | 3.0698 | 7.2 | 50.58 -Neigh | 0.6247 | 0.6775 | 0.71319 | 4.5 | 11.74 -Comm | 0.76389 | 0.98813 | 1.2487 | 19.2 | 17.13 -Output | 0.1312 | 0.13162 | 0.13257 | 0.2 | 2.28 -Modify | 0.60526 | 0.63574 | 0.66339 | 2.6 | 11.02 -Other | | 0.1071 | | | 1.86 +Pair | 0.32481 | 0.33445 | 0.34816 | 1.6 | 0.96 +Bond | 26.728 | 28.076 | 29.753 | 23.9 | 80.92 +Neigh | 0.68094 | 0.72261 | 0.7747 | 4.8 | 2.08 +Comm | 1.5266 | 3.3654 | 4.8309 | 75.3 | 9.70 +Output | 0.018332 | 0.018804 | 0.019756 | 0.4 | 0.05 +Modify | 1.9305 | 2.0147 | 2.1302 | 6.0 | 5.81 +Other | | 0.1631 | | | 0.47 -Nlocal: 2779.50 ave 2862 max 2686 min -Histogram: 1 0 0 0 0 1 1 0 0 1 -Nghost: 1183.25 ave 1220 max 1134 min -Histogram: 1 0 0 0 1 0 0 0 1 1 -Neighs: 11828.8 ave 12387 max 11053 min -Histogram: 1 0 0 0 1 0 0 0 1 1 +Nlocal: 2774.00 ave 2898 max 2701 min +Histogram: 1 1 0 1 0 0 0 0 0 1 +Nghost: 1165.25 ave 1208 max 1142 min +Histogram: 2 0 0 1 0 0 0 0 0 1 +Neighs: 11425.0 ave 12539 max 10556 min +Histogram: 1 0 1 0 1 0 0 0 0 1 -Total # of neighbors = 47315 -Ave neighs/atom = 4.2557115 -Ave special neighs/atom = 10.321461 -Neighbor list builds = 421 -Dangerous builds = 11 -Total wall time: 0:00:05 +Total # of neighbors = 45700 +Ave neighs/atom = 4.1186013 +Ave special neighs/atom = 10.184841 +Neighbor list builds = 451 +Dangerous builds = 0 +Total wall time: 0:00:35 diff --git a/examples/bpm/pour/in.bpm.pour b/examples/bpm/pour/in.bpm.pour index c6bb288d30..e4cc8557a3 100644 --- a/examples/bpm/pour/in.bpm.pour +++ b/examples/bpm/pour/in.bpm.pour @@ -1,7 +1,7 @@ units lj dimension 3 boundary m m m -atom_style sphere/bpm +atom_style bpm/sphere special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0 newton on off comm_modify vel yes cutoff 3.3 @@ -25,7 +25,7 @@ fix 1 all wall/gran hertz/history 1.0 NULL 0.5 NULL 0.1 1 zplane 0.0 fix 2 all wall/gran/region hertz/history 1.0 NULL 0.5 NULL 0.1 1 region wall_cyl fix 3 all gravity 1e-4 vector 0 0 -1 fix 4 all deposit 40 0 1500 712511343 mol my_mol region dropzone near 2.0 vz -0.05 -0.05 -fix 5 all nve/sphere/bpm +fix 5 all nve/bpm/sphere timestep 0.05 thermo_style custom step ke pe pxx pyy pzz c_tbond diff --git a/examples/bpm/pour/log.17Feb2022.pour.g++.4 b/examples/bpm/pour/log.17Feb2022.pour.g++.4 new file mode 100644 index 0000000000..a61c0f1181 --- /dev/null +++ b/examples/bpm/pour/log.17Feb2022.pour.g++.4 @@ -0,0 +1,1091 @@ +LAMMPS (17 Feb 2022) +units lj +dimension 3 +boundary m m m +atom_style bpm/sphere +special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0 +newton on off +comm_modify vel yes cutoff 3.3 +region box block -15 15 -15 15 0 60.0 +create_box 1 box bond/types 1 extra/bond/per/atom 15 extra/special/per/atom 50 +Created orthogonal box = (-15 -15 0) to (15 15 60) + 1 by 1 by 4 MPI processor grid + +molecule my_mol "rect.mol" +Read molecule template my_mol: + 1 molecules + 0 fragments + 63 atoms with max type 1 + 297 bonds with max type 1 + 0 angles with max type 0 + 0 dihedrals with max type 0 + 0 impropers with max type 0 +region wall_cyl cylinder z 0.0 0.0 10.0 EDGE EDGE side in +region dropzone cylinder z 0.0 0.0 10.0 40.0 50.0 side in + +pair_style gran/hertz/history 1.0 NULL 0.5 NULL 0.1 1 +bond_style bpm/rotational +pair_coeff 1 1 +bond_coeff 1 1.0 0.2 0.01 0.01 2.0 0.4 0.02 0.02 0.2 0.04 0.002 0.002 + +compute nbond all nbond/atom +compute tbond all reduce sum c_nbond +compute_modify thermo_temp dynamic/dof yes + +fix 1 all wall/gran hertz/history 1.0 NULL 0.5 NULL 0.1 1 zplane 0.0 NULL +fix 2 all wall/gran/region hertz/history 1.0 NULL 0.5 NULL 0.1 1 region wall_cyl +fix 3 all gravity 1e-4 vector 0 0 -1 +fix 4 all deposit 40 0 1500 712511343 mol my_mol region dropzone near 2.0 vz -0.05 -0.05 +fix 5 all nve/bpm/sphere + +timestep 0.05 +thermo_style custom step ke pe pxx pyy pzz c_tbond +thermo 100 +#dump 1 all custom 500 atomDump id radius x y z c_nbond mol + +run 100000 + generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.3 + ghost atom cutoff = 3.3 + binsize = 0.65, bins = 47 47 93 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair gran/hertz/history, perpetual + attributes: half, newton on, size, history + pair build: half/size/bin/newton + stencil: half/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 6.515 | 6.515 | 6.515 Mbytes +Step KinEng PotEng Pxx Pyy Pzz c_tbond + 0 -0 0 0 0 0 0 + 100 0.0018331948 0 2.0050936e-07 1.2082282e-06 2.8712165e-06 9.4285714 + 200 0.0025933558 0 7.3469794e-07 2.0155735e-06 3.3061759e-06 9.4285714 + 300 0.0036964813 0 3.7946479e-07 5.3005435e-06 2.9691719e-06 9.4285714 + 400 0.0060104433 0 1.5778321e-06 8.4396021e-06 4.0232206e-06 9.4285714 + 500 0.0074435972 0 1.6102287e-06 1.1551491e-05 4.2257246e-06 9.4285714 + 600 0.0077862298 0 1.048357e-06 1.3758458e-05 3.3770448e-06 9.4285714 + 700 0.0075577591 0 1.1527593e-06 1.2533681e-05 3.9545936e-06 9.4285714 + 800 0.0073958844 0 1.1164823e-06 1.2917327e-05 3.2263757e-06 9.4285714 + 900 0.007553697 0 1.190904e-06 1.3294768e-05 3.1421027e-06 9.4285714 + 1000 0.0075815901 0 1.0181785e-06 1.3265265e-05 3.4107996e-06 9.4285714 + 1100 0.0075277384 0 2.0708356e-06 1.2219251e-05 3.2773337e-06 9.4285714 + 1200 0.0075026507 0 1.8286317e-06 1.2395764e-05 3.2819583e-06 9.4285714 + 1300 0.0075665473 0 1.8498736e-06 1.2455125e-05 3.3519775e-06 9.4285714 + 1400 0.0076224701 0 3.1234422e-06 1.0777609e-05 3.8865172e-06 9.4285714 + 1500 0.007603467 0 2.8536732e-06 1.1077739e-05 3.8107558e-06 9.4285714 + 1600 0.0059810407 0 4.3809396e-06 1.6996767e-05 6.5539764e-06 9.4285714 + 1700 0.0080230318 0 5.7884097e-06 2.4435559e-05 7.2370109e-06 9.4285714 + 1800 0.0087482398 0 5.9323986e-06 2.7190078e-05 7.7151041e-06 9.4285714 + 1900 0.0086877574 0 6.1023555e-06 2.6625737e-05 7.8193078e-06 9.4285714 + 2000 0.0086771118 0 6.1635853e-06 2.633267e-05 8.0008845e-06 9.4285714 + 2100 0.0084670091 0 6.7873752e-06 2.5434046e-05 9.0971224e-06 9.4285714 + 2200 0.0083650907 0 8.1704442e-06 2.3699108e-05 8.4515642e-06 9.4285714 + 2300 0.0083549595 0 8.2648511e-06 2.2510949e-05 8.2508581e-06 9.4285714 + 2400 0.0083151535 0 7.7718631e-06 2.2224878e-05 8.8086351e-06 9.4285714 + 2500 0.0083898757 0 7.1987828e-06 2.2855932e-05 9.1000336e-06 9.4285714 + 2600 0.0084145705 0 6.968992e-06 2.3030741e-05 9.2694955e-06 9.4285714 + 2700 0.0082712696 0 7.5971438e-06 2.3186553e-05 1.026296e-05 9.4285714 + 2800 0.0073688706 0 1.0092165e-05 1.6341178e-05 1.0496887e-05 9.4285714 + 2900 0.0072732669 0 8.9857642e-06 1.454313e-05 1.0637501e-05 9.4285714 + 3000 0.0072225948 0 8.5616417e-06 1.4225089e-05 1.0924921e-05 9.4285714 + 3100 0.0048244969 0 6.912522e-06 1.30395e-05 1.3824006e-05 9.4285714 + 3200 0.0045717035 0 5.7159512e-06 1.1181938e-05 1.5108391e-05 9.4285714 + 3300 0.0047679567 0 6.0163783e-06 1.1603014e-05 1.5759942e-05 9.4285714 + 3400 0.0048448212 0 6.3252851e-06 1.2378054e-05 1.5212593e-05 9.4285714 + 3500 0.0048364711 0 6.4847771e-06 1.2719874e-05 1.4888067e-05 9.4285714 + 3600 0.0047125947 0 7.5131511e-06 1.375252e-05 1.5244253e-05 9.4285714 + 3700 0.0045641049 0 7.3441262e-06 1.2981907e-05 1.5049034e-05 9.4285714 + 3800 0.0045540235 0 6.8443099e-06 1.1748155e-05 1.4685806e-05 9.4285714 + 3900 0.0047271202 0 6.7919886e-06 1.2153009e-05 1.4801772e-05 9.4285714 + 4000 0.0049115261 0 6.9084016e-06 1.2385892e-05 1.5231153e-05 9.4285714 + 4100 0.0046819157 0 6.4190119e-06 1.1228312e-05 1.5132413e-05 9.4285714 + 4200 0.0035133816 0 3.6896921e-06 6.5442286e-06 1.4368405e-05 9.4285714 + 4300 0.0031933917 0 1.9641761e-06 3.4983806e-06 1.6912795e-05 9.4285714 + 4400 0.0033515272 0 2.3967939e-06 4.0160705e-06 1.7056596e-05 9.4285714 + 4500 0.0034928951 0 3.0724834e-06 4.4355514e-06 1.6962392e-05 9.4285714 + 4600 0.0029992338 0 3.319899e-06 4.3436095e-06 2.0334274e-05 9.4285714 + 4700 0.0030650658 0 3.9633397e-06 5.6588274e-06 1.8991224e-05 9.4285714 + 4800 0.0031180382 0 4.925768e-06 6.3708181e-06 1.7810728e-05 9.4285714 + 4900 0.0030365003 0 4.6849771e-06 5.6291872e-06 1.8029418e-05 9.4285714 + 5000 0.0030259714 0 5.1846803e-06 5.5730554e-06 1.7488984e-05 9.4285714 + 5100 0.0030499975 0 5.6322417e-06 5.9148203e-06 1.6923105e-05 9.4285714 + 5200 0.003005436 0 5.6903188e-06 5.6637593e-06 1.6700127e-05 9.4285714 + 5300 0.0030000941 0 5.7591855e-06 5.3398134e-06 1.6904108e-05 9.4285714 + 5400 0.0031465827 0 6.1148362e-06 6.2148373e-06 1.7041724e-05 9.4285714 + 5500 0.0031981585 0 5.8718482e-06 5.9970835e-06 1.7984043e-05 9.4285714 + 5600 0.0031525115 0 5.3390747e-06 5.1610119e-06 1.8924721e-05 9.4285714 + 5700 0.0032128781 0 5.6775112e-06 5.2023225e-06 1.9109577e-05 9.4285714 + 5800 0.0030092855 0 5.7676512e-06 4.4808095e-06 2.1160289e-05 9.4285714 + 5900 0.0025015767 0 6.5110611e-06 5.0853279e-06 2.290709e-05 9.4285714 + 6000 0.0024438438 0 6.4803568e-06 4.9314657e-06 2.1450483e-05 9.4285714 + 6100 0.0023816456 0 4.2004621e-06 4.3412206e-06 2.3366694e-05 9.4285714 + 6200 0.0024459343 0 3.4052114e-06 2.3122757e-06 2.3018902e-05 9.4285714 + 6300 0.0025205884 0 3.0607555e-06 2.7404005e-06 2.3612151e-05 9.4285714 + 6400 0.0033754198 0 5.4041464e-06 1.0129204e-05 2.3881911e-05 9.4285714 + 6500 0.0037812296 0 6.9287106e-06 1.2845513e-05 2.4385157e-05 9.4285714 + 6600 0.0038043567 0 4.4366794e-06 1.559564e-05 2.4372156e-05 9.4285714 + 6700 0.0038213959 0 5.6461713e-06 1.6081939e-05 2.556403e-05 9.4285714 + 6800 0.0036977776 0 6.1083638e-06 1.3260883e-05 2.8030458e-05 9.4285714 + 6900 0.0034769765 0 4.281986e-06 1.4287795e-05 2.803258e-05 9.4285714 + 7000 0.0031526409 0 4.8687091e-06 1.1290097e-05 2.9635973e-05 9.4285714 + 7100 0.00317737 0 4.866629e-06 9.8108506e-06 3.1076433e-05 9.4285714 + 7200 0.0034448361 0 4.6533797e-06 1.15597e-05 3.0195614e-05 9.4285714 + 7300 0.0036147362 0 3.4867601e-06 1.2192841e-05 3.0431851e-05 9.4285714 + 7400 0.0035651675 0 2.812314e-06 1.0900977e-05 2.9422055e-05 9.4285714 + 7500 0.0036394064 0 2.6684242e-06 1.038371e-05 2.9650533e-05 9.4285714 + 7600 0.0033086177 0 2.6357178e-06 1.0363505e-05 3.3327311e-05 9.4285714 + 7700 0.0033410425 0 3.9955363e-06 9.2059943e-06 3.3580724e-05 9.4285714 + 7800 0.0035764747 0 7.127102e-06 8.9311151e-06 3.402089e-05 9.4285714 + 7900 0.0039500913 0 1.1222589e-05 9.0137729e-06 3.5074285e-05 9.4285714 + 8000 0.0042963353 0 1.5982303e-05 8.4904673e-06 3.5704562e-05 9.4285714 + 8100 0.0048297614 0 2.2809259e-05 7.6782291e-06 3.714467e-05 9.4285714 + 8200 0.0052301447 0 2.8015774e-05 6.9131186e-06 3.8310186e-05 9.4285714 + 8300 0.005169511 0 2.8580467e-05 6.1476914e-06 3.7651259e-05 9.4285714 + 8400 0.005224324 0 2.9402221e-05 5.0117679e-06 3.873174e-05 9.4285714 + 8500 0.0053049309 0 3.0666777e-05 4.125785e-06 3.9482985e-05 9.4285714 + 8600 0.0052459952 0 3.0525628e-05 4.1952646e-06 3.8726938e-05 9.4285714 + 8700 0.0052955657 0 3.0177531e-05 5.0224986e-06 3.8941323e-05 9.4285714 + 8800 0.0053972257 0 3.1021226e-05 5.261711e-06 3.9283466e-05 9.4285714 + 8900 0.0053679679 0 3.1133172e-05 4.9109387e-06 3.9111316e-05 9.4285714 + 9000 0.0053793586 0 3.0629197e-05 5.8147275e-06 3.8870113e-05 9.4285714 + 9100 0.0048447626 0 3.0571485e-05 6.6542996e-06 4.1908678e-05 9.4285714 + 9200 0.0048688926 0 3.0874982e-05 6.5780749e-06 4.2143302e-05 9.4285714 + 9300 0.0048538957 0 3.0564193e-05 8.1762092e-06 4.2503239e-05 9.4285714 + 9400 0.0046986454 0 2.8378911e-05 1.0639019e-05 4.4317403e-05 9.4285714 + 9500 0.0046145139 0 2.513485e-05 1.036053e-05 4.5570422e-05 9.4285714 + 9600 0.0045277961 0 2.056713e-05 9.8647996e-06 4.5858869e-05 9.4285714 + 9700 0.0043935298 0 1.8390341e-05 9.0322729e-06 4.6271482e-05 9.4285714 + 9800 0.0045363488 0 2.0469706e-05 9.7216528e-06 4.5805899e-05 9.4285714 + 9900 0.0046509978 0 1.9525081e-05 9.5233466e-06 4.862056e-05 9.4285714 + 10000 0.0046493894 0 1.7602305e-05 9.4408537e-06 5.0053515e-05 9.4285714 + 10100 0.0046514856 0 1.6724832e-05 9.9699479e-06 4.928713e-05 9.4285714 + 10200 0.0046209533 0 1.4889196e-05 1.0767419e-05 4.9829248e-05 9.4285714 + 10300 0.0044651031 0 1.0578209e-05 1.1339471e-05 5.1024934e-05 9.4285714 + 10400 0.0041834162 0 6.5253227e-06 1.099852e-05 5.0813498e-05 9.4285714 + 10500 0.0043218845 0 7.2170142e-06 1.2622523e-05 5.0759877e-05 9.4285714 + 10600 0.0045795722 0 1.0140572e-05 2.1058806e-05 5.4332689e-05 9.4285714 + 10700 0.0053833569 0 1.2245942e-05 3.2705455e-05 5.5584298e-05 9.4285714 + 10800 0.0056805981 0 9.642689e-06 4.0045088e-05 5.6378884e-05 9.4285714 + 10900 0.0057157307 0 9.8421383e-06 3.9670248e-05 5.7196914e-05 9.4285714 + 11000 0.005696424 0 1.1871435e-05 3.7351501e-05 5.7130853e-05 9.4285714 + 11100 0.0052078884 0 9.5005747e-06 3.612037e-05 5.1606236e-05 9.4285714 + 11200 0.0052849159 0 1.433919e-05 3.596257e-05 4.8371986e-05 9.4285714 + 11300 0.0054074494 0 1.2828165e-05 3.7628808e-05 5.0495681e-05 9.4285714 + 11400 0.0055432168 0 1.1770167e-05 3.7223129e-05 5.4498301e-05 9.4285714 + 11500 0.0054679467 0 1.1215128e-05 3.5612418e-05 5.5880978e-05 9.4285714 + 11600 0.0052706441 0 1.0611988e-05 3.5785457e-05 5.8094083e-05 9.4285714 + 11700 0.0053724243 0 1.1867616e-05 3.484887e-05 5.7967416e-05 9.4285714 + 11800 0.0054759961 0 9.3774866e-06 3.3307362e-05 6.0256027e-05 9.4285714 + 11900 0.0051146604 0 9.5582838e-06 3.1092749e-05 5.4847298e-05 9.4285714 + 12000 0.0049723565 0 8.4734692e-06 3.1240602e-05 5.3118854e-05 9.4285714 + 12100 0.0046920113 0 8.8947651e-06 3.3402795e-05 5.6254952e-05 9.4285714 + 12200 0.0049570244 0 1.0006616e-05 3.306729e-05 6.1049649e-05 9.4285714 + 12300 0.0049181458 0 8.1394364e-06 3.2634327e-05 6.2527089e-05 9.4285714 + 12400 0.0049245342 0 8.1971979e-06 3.3145464e-05 6.2091332e-05 9.4285714 + 12500 0.0049753042 0 8.9911646e-06 3.4018861e-05 6.1487068e-05 9.4285714 + 12600 0.0048148791 0 8.560766e-06 2.9647432e-05 6.2929427e-05 9.4285714 + 12700 0.0043852178 0 7.5889296e-06 1.8576839e-05 6.5947945e-05 9.4285714 + 12800 0.0041967317 0 8.6473249e-06 1.3892779e-05 6.6599779e-05 9.4285714 + 12900 0.0041911278 0 9.3489002e-06 1.8180223e-05 6.3308096e-05 9.4285714 + 13000 0.0043107924 0 8.5274073e-06 2.2286145e-05 5.9964925e-05 9.4285714 + 13100 0.0043976521 0 8.2741734e-06 2.4530103e-05 5.9567889e-05 9.4285714 + 13200 0.0043474635 0 9.2173493e-06 2.7514155e-05 5.4579308e-05 9.4285714 + 13300 0.0044593969 0 9.3356325e-06 3.0558484e-05 5.3771437e-05 9.4285714 + 13400 0.0044814342 0 9.2387466e-06 2.8998024e-05 5.5887559e-05 9.4285714 + 13500 0.0043982498 0 9.4867492e-06 2.5493297e-05 5.7396094e-05 9.4285714 + 13600 0.0039378503 0 1.0789003e-05 1.9448677e-05 6.1667698e-05 9.4285714 + 13700 0.0036474735 0 1.0885233e-05 1.5729573e-05 5.8520214e-05 9.4285714 + 13800 0.0038236277 0 1.3819358e-05 2.0470733e-05 5.4960098e-05 9.4285714 + 13900 0.0040574402 0 1.6741444e-05 2.391221e-05 5.4045411e-05 9.4285714 + 14000 0.0046440817 0 2.2494809e-05 2.9264007e-05 5.6648145e-05 9.4285714 + 14100 0.0048045755 0 2.2568279e-05 3.260884e-05 5.6960992e-05 9.4285714 + 14200 0.004634799 0 2.2650329e-05 2.7912328e-05 5.7597129e-05 9.4285714 + 14300 0.0046822822 0 2.3142295e-05 2.8536673e-05 5.7795199e-05 9.4285714 + 14400 0.0048282958 0 2.2560586e-05 3.2744704e-05 5.8133575e-05 9.4285714 + 14500 0.004799276 0 2.1374014e-05 3.1342428e-05 6.0569089e-05 9.4285714 + 14600 0.0046554419 0 2.0804876e-05 2.8534311e-05 6.0800428e-05 9.4285714 + 14700 0.0045262414 0 2.1835372e-05 2.8168699e-05 6.2901651e-05 9.4285714 + 14800 0.0043347498 0 1.9615887e-05 3.1686326e-05 6.4194237e-05 9.4285714 + 14900 0.0040641791 0 1.8621801e-05 2.7440899e-05 6.4602045e-05 9.4285714 + 15000 0.0040014911 0 1.6461776e-05 2.5832508e-05 6.08965e-05 9.4285714 + 15100 0.0040015198 0 2.2331361e-05 2.6108777e-05 5.9319862e-05 9.4285714 + 15200 0.004656209 0 3.5268101e-05 3.0082568e-05 5.958373e-05 9.4285714 + 15300 0.0047390215 0 4.1830227e-05 2.7233725e-05 5.8274008e-05 9.4285714 + 15400 0.0047219857 0 4.2798722e-05 2.8282959e-05 5.786682e-05 9.4285714 + 15500 0.0049597215 0 4.5190515e-05 2.9504603e-05 6.2435065e-05 9.4285714 + 15600 0.0049081505 0 4.3186089e-05 2.9977425e-05 6.1726635e-05 9.4285714 + 15700 0.0047978977 0 4.1446883e-05 2.7814159e-05 5.7947919e-05 9.4285714 + 15800 0.0048176861 0 3.9941014e-05 2.6548461e-05 5.9246093e-05 9.4285714 + 15900 0.0049895331 0 4.0485733e-05 2.8703855e-05 6.3382653e-05 9.4285714 + 16000 0.0049288669 0 3.892315e-05 2.9191325e-05 6.2118616e-05 9.4285714 + 16100 0.0048010252 0 3.7199431e-05 2.7134167e-05 6.1752588e-05 9.4285714 + 16200 0.0047925554 0 3.5806262e-05 2.5024463e-05 6.3068301e-05 9.4285714 + 16300 0.0047652048 0 3.3940221e-05 2.6543134e-05 6.7111166e-05 9.4285714 + 16400 0.0043495894 0 3.4655351e-05 1.8892916e-05 6.5825804e-05 9.4285714 + 16500 0.0042677893 0 3.4188541e-05 1.7570016e-05 6.3850178e-05 9.4285714 + 16600 0.0039924053 0 3.2417741e-05 1.7848282e-05 6.5817879e-05 9.4285714 + 16700 0.004110225 0 3.3539186e-05 1.9943078e-05 6.4568545e-05 9.4285714 + 16800 0.0041003344 0 3.6503679e-05 2.0546394e-05 6.2227252e-05 9.4285714 + 16900 0.0040916821 0 3.7342085e-05 2.384663e-05 6.0859481e-05 9.4285714 + 17000 0.0039812122 0 3.671505e-05 2.4137888e-05 5.6933083e-05 9.4285714 + 17100 0.0042480582 0 3.9654732e-05 2.4691844e-05 5.8210554e-05 9.4285714 + 17200 0.0044450353 0 4.0933677e-05 3.019578e-05 5.5604765e-05 9.4285714 + 17300 0.0045016689 0 4.0563484e-05 3.4710888e-05 5.2933625e-05 9.4285714 + 17400 0.0044798864 0 4.0768397e-05 3.3076261e-05 5.2287655e-05 9.4285714 + 17500 0.0044624458 0 3.8361144e-05 3.4320802e-05 5.4620342e-05 9.4285714 + 17600 0.0044477024 0 3.6643486e-05 3.6449296e-05 5.4759028e-05 9.4285714 + 17700 0.0044103517 0 3.8319719e-05 3.7509764e-05 5.0738749e-05 9.4285714 + 17800 0.004341948 0 3.8052635e-05 3.6850602e-05 5.0481977e-05 9.4285714 + 17900 0.0042623319 0 3.5909432e-05 3.5619615e-05 5.2184073e-05 9.4285714 + 18000 0.003726239 0 1.8245827e-05 3.791319e-05 5.0575431e-05 9.4285714 + 18100 0.0034893305 0 1.7957847e-05 3.6788428e-05 5.281228e-05 9.4285714 + 18200 0.0035481187 0 2.2513253e-05 3.461697e-05 5.1791689e-05 9.4285714 + 18300 0.0036251402 0 2.5159661e-05 3.4782379e-05 5.0946509e-05 9.4285714 + 18400 0.0036369749 0 2.4150699e-05 3.6305943e-05 5.0273557e-05 9.4285714 + 18500 0.0034279849 0 2.050142e-05 3.3762641e-05 5.0772554e-05 9.4285714 + 18600 0.0033615572 0 1.8397654e-05 3.3183402e-05 5.2215005e-05 9.4285714 + 18700 0.003406225 0 1.9609619e-05 3.4353871e-05 5.1091792e-05 9.4285714 + 18800 0.0034922323 0 1.9330569e-05 3.4176016e-05 5.2688824e-05 9.4285714 + 18900 0.0034820625 0 1.9280274e-05 3.3807796e-05 5.372272e-05 9.4285714 + 19000 0.0033272524 0 1.6873326e-05 3.594881e-05 5.3862535e-05 9.4285714 + 19100 0.0034010912 0 1.8030816e-05 3.582088e-05 5.4236353e-05 9.4285714 + 19200 0.0030932535 0 1.4863995e-05 2.7793367e-05 5.3934101e-05 9.4285714 + 19300 0.002624051 0 1.210198e-05 1.6467088e-05 5.2583223e-05 9.4285714 + 19400 0.0027583806 0 1.2008108e-05 2.1017092e-05 5.309485e-05 9.4285714 + 19500 0.0029775174 0 1.3352592e-05 2.4636522e-05 5.4043107e-05 9.4285714 + 19600 0.0028689969 0 1.3488363e-05 2.4373881e-05 5.7585286e-05 9.4285714 + 19700 0.0026399127 0 1.4002066e-05 2.7370388e-05 5.4220539e-05 9.4285714 + 19800 0.0025439904 0 1.668679e-05 2.7178009e-05 5.3083248e-05 9.4285714 + 19900 0.0027074939 0 1.5155901e-05 2.5194957e-05 5.3757244e-05 9.4285714 + 20000 0.0027181793 0 1.2268581e-05 2.5236301e-05 5.1395997e-05 9.4285714 + 20100 0.0027315362 0 1.2532955e-05 2.4069296e-05 5.2648391e-05 9.4285714 + 20200 0.0027204191 0 1.2457637e-05 2.419839e-05 5.2229242e-05 9.4285714 + 20300 0.0026457344 0 1.3573924e-05 2.3628429e-05 4.9330286e-05 9.4285714 + 20400 0.0026592475 0 1.3439645e-05 2.4469429e-05 5.1570429e-05 9.4285714 + 20500 0.0026129298 0 1.3261647e-05 2.4468607e-05 5.1163936e-05 9.4285714 + 20600 0.0026532045 0 1.5275975e-05 2.3494207e-05 5.0569472e-05 9.4285714 + 20700 0.0026172433 0 1.4720887e-05 2.1839292e-05 5.0769214e-05 9.4285714 + 20800 0.0025282343 0 1.3852135e-05 2.0845003e-05 4.9690546e-05 9.4285714 + 20900 0.0025383322 0 1.353444e-05 2.2097076e-05 5.1303519e-05 9.4285714 + 21000 0.0024848857 0 1.4032657e-05 2.1964185e-05 5.3050324e-05 9.4285714 + 21100 0.0025091105 0 1.5334232e-05 2.1760041e-05 5.508965e-05 9.4285714 + 21200 0.0027229411 0 1.9418427e-05 2.2335523e-05 5.5657372e-05 9.4285714 + 21300 0.0028888226 0 2.3631969e-05 2.2967648e-05 5.5948438e-05 9.4285714 + 21400 0.0029336429 0 2.5044169e-05 2.2567194e-05 5.5413722e-05 9.4285714 + 21500 0.0029354446 0 2.4712642e-05 2.2624219e-05 5.5920832e-05 9.4285714 + 21600 0.0029270648 0 2.3842417e-05 2.3011885e-05 5.6087719e-05 9.4285714 + 21700 0.0029288781 0 2.3942959e-05 2.2810041e-05 5.7045772e-05 9.4285714 + 21800 0.002884005 0 2.4455829e-05 2.3081577e-05 5.6212968e-05 9.4285714 + 21900 0.0028362206 0 2.3350532e-05 2.49708e-05 5.3642917e-05 9.4285714 + 22000 0.0027784436 0 2.3311918e-05 2.3033334e-05 5.4359393e-05 9.4285714 + 22100 0.0027479829 0 2.4623514e-05 2.0287924e-05 5.3550114e-05 9.4285714 + 22200 0.0027598842 0 2.6073037e-05 2.1629185e-05 5.3119193e-05 9.4285714 + 22300 0.0026078138 0 2.6348246e-05 2.3093425e-05 5.4029431e-05 9.4285714 + 22400 0.0026057112 0 2.7316001e-05 2.4771567e-05 5.3484921e-05 9.4285714 + 22500 0.0026641722 0 2.6434166e-05 2.5849367e-05 5.2175653e-05 9.4285714 + 22600 0.0023728105 0 2.4436322e-05 2.4147316e-05 5.3971034e-05 9.4285714 + 22700 0.0021999097 0 2.4191892e-05 2.2725939e-05 5.3125105e-05 9.4285714 + 22800 0.002178124 0 2.4122577e-05 2.0194755e-05 5.3468522e-05 9.4285714 + 22900 0.0022903704 0 2.1332487e-05 1.8921598e-05 5.4657879e-05 9.4285714 + 23000 0.0022114595 0 1.930828e-05 1.4423335e-05 5.5387271e-05 9.4285714 + 23100 0.0022473179 0 2.0911663e-05 1.3467616e-05 5.4325686e-05 9.4285714 + 23200 0.0022787302 0 2.1538492e-05 1.5779872e-05 5.3591578e-05 9.4285714 + 23300 0.002254193 0 2.0552374e-05 1.7158208e-05 5.201196e-05 9.4285714 + 23400 0.0022032528 0 2.0514024e-05 1.6045426e-05 5.1691057e-05 9.4285714 + 23500 0.0022103262 0 2.2570839e-05 1.4990595e-05 5.0102702e-05 9.4285714 + 23600 0.0022767949 0 2.153875e-05 1.5934866e-05 4.9843486e-05 9.4285714 + 23700 0.002283034 0 2.0348727e-05 1.5852737e-05 4.9211887e-05 9.4285714 + 23800 0.0022293403 0 2.045052e-05 1.3951752e-05 4.9265994e-05 9.4285714 + 23900 0.0022421499 0 2.0541393e-05 1.3873188e-05 4.9783702e-05 9.4285714 + 24000 0.0022708179 0 2.0733448e-05 1.4464939e-05 5.0156761e-05 9.4285714 + 24100 0.0022311644 0 2.1753043e-05 1.4644732e-05 5.3630645e-05 9.4285714 + 24200 0.0022566051 0 2.3030277e-05 1.4212031e-05 5.3868685e-05 9.4285714 + 24300 0.0022547585 0 2.3946322e-05 1.331734e-05 5.2948407e-05 9.4285714 + 24400 0.0022901257 0 2.552016e-05 1.4594528e-05 5.3067402e-05 9.4285714 + 24500 0.0023537103 0 2.9369007e-05 1.5861923e-05 5.3200721e-05 9.4285714 + 24600 0.0023613708 0 2.9444021e-05 1.3691716e-05 5.4296289e-05 9.4285714 + 24700 0.0023237992 0 2.8805716e-05 1.1616027e-05 5.4142589e-05 9.4285714 + 24800 0.0024221927 0 3.1070958e-05 1.2059146e-05 5.406912e-05 9.4285714 + 24900 0.0025882547 0 3.7453428e-05 1.2082125e-05 5.4439426e-05 9.4285714 + 25000 0.0027152266 0 4.2549028e-05 1.1637136e-05 5.4292043e-05 9.4285714 + 25100 0.0028201154 0 4.6710609e-05 1.2903782e-05 5.3790595e-05 9.4285714 + 25200 0.0029086169 0 4.756645e-05 1.3260261e-05 5.7165687e-05 9.4285714 + 25300 0.0028528211 0 4.8705176e-05 1.1918164e-05 5.632163e-05 9.4285714 + 25400 0.0027655631 0 4.7538544e-05 1.186744e-05 5.3917832e-05 9.4285714 + 25500 0.0027631455 0 4.7296868e-05 1.2125391e-05 5.2651056e-05 9.4285714 + 25600 0.0027455338 0 4.8477007e-05 1.2403172e-05 5.7029384e-05 9.4285714 + 25700 0.0027314337 0 4.8377711e-05 1.254263e-05 5.7035789e-05 9.4285714 + 25800 0.0026789336 0 4.9232002e-05 1.1749936e-05 5.7580068e-05 9.4285714 + 25900 0.0026686904 0 5.0376929e-05 1.2811492e-05 5.9087927e-05 9.4285714 + 26000 0.0026703643 0 5.0974299e-05 1.3064292e-05 5.7801118e-05 9.4285714 + 26100 0.0026825353 0 4.9500137e-05 1.1676376e-05 5.695664e-05 9.4285714 + 26200 0.0026825174 0 4.972182e-05 1.0546822e-05 5.7622991e-05 9.4285714 + 26300 0.0025517718 0 4.36237e-05 1.082888e-05 5.8496458e-05 9.4285714 + 26400 0.002448155 0 3.6914303e-05 1.1208368e-05 6.0071981e-05 9.4285714 + 26500 0.0023334395 0 3.2968743e-05 1.0745176e-05 6.0011765e-05 9.4285714 + 26600 0.0023097701 0 3.0179184e-05 1.1497687e-05 5.9980393e-05 9.4285714 + 26700 0.0023614287 0 3.1929774e-05 1.4076482e-05 5.767606e-05 9.4285714 + 26800 0.0023955623 0 3.1551792e-05 1.7121208e-05 5.8187883e-05 9.4285714 + 26900 0.0019993736 0 1.8807723e-05 1.6770089e-05 5.7954922e-05 9.4285714 + 27000 0.0019497677 0 1.7354388e-05 1.6608976e-05 5.6225802e-05 9.4285714 + 27100 0.0020363076 0 2.1348268e-05 1.6918233e-05 5.7949239e-05 9.4285714 + 27200 0.0021974785 0 2.5205825e-05 2.0142198e-05 5.5376701e-05 9.4285714 + 27300 0.002350289 0 2.8900121e-05 2.3754068e-05 5.5263555e-05 9.4285714 + 27400 0.0026460053 0 3.2553147e-05 3.227333e-05 5.7954104e-05 9.4285714 + 27500 0.0027599044 0 3.2851254e-05 3.674649e-05 5.6341966e-05 9.4285714 + 27600 0.0026660556 0 3.2389038e-05 3.4626306e-05 5.5414375e-05 9.4285714 + 27700 0.0026060398 0 3.3223431e-05 3.2391399e-05 5.3340397e-05 9.4285714 + 27800 0.002724511 0 3.372415e-05 3.4485846e-05 5.4707128e-05 9.4285714 + 27900 0.0027318479 0 3.3234708e-05 3.5304313e-05 5.5589046e-05 9.4285714 + 28000 0.0026231478 0 3.2741313e-05 3.3225541e-05 5.398932e-05 9.4285714 + 28100 0.0025508556 0 3.3833477e-05 3.1513842e-05 5.4023598e-05 9.4285714 + 28200 0.0025807152 0 3.4548289e-05 3.3420009e-05 5.5627424e-05 9.4285714 + 28300 0.0024074206 0 3.0461599e-05 3.4140994e-05 5.6820341e-05 9.4285714 + 28400 0.0021292859 0 2.3624321e-05 3.4194604e-05 5.3656462e-05 9.4285714 + 28500 0.0022172558 0 1.8989998e-05 3.8241372e-05 5.0308571e-05 9.4285714 + 28600 0.0022653927 0 2.0006228e-05 4.1839298e-05 5.3834698e-05 9.4285714 + 28700 0.0025914898 0 2.4417865e-05 5.4161998e-05 5.2309701e-05 9.4285714 + 28800 0.0028276024 0 2.7173934e-05 5.9987722e-05 5.1277434e-05 9.4285714 + 28900 0.0029326653 0 2.9972273e-05 5.9404465e-05 5.3442041e-05 9.4285714 + 29000 0.002965493 0 3.0732118e-05 5.8813779e-05 5.4010354e-05 9.4285714 + 29100 0.0029096903 0 2.789911e-05 5.6948857e-05 5.3811328e-05 9.4285714 + 29200 0.0028604262 0 2.8541368e-05 5.5433392e-05 5.5266978e-05 9.4285714 + 29300 0.0028093312 0 3.1626568e-05 5.2793462e-05 5.9393321e-05 9.4285714 + 29400 0.0026786162 0 2.6580766e-05 4.1761109e-05 6.3731211e-05 9.4285714 + 29500 0.0025387867 0 2.4586262e-05 3.1439522e-05 6.5207101e-05 9.4285714 + 29600 0.0026569564 0 2.658665e-05 3.344894e-05 6.5578568e-05 9.4285714 + 29700 0.0027207144 0 2.4629031e-05 3.1640582e-05 7.3229358e-05 9.4285714 + 29800 0.0026892821 0 2.0092233e-05 2.9124688e-05 8.0756571e-05 9.4285714 + 29900 0.002643369 0 2.0481401e-05 3.0183662e-05 7.7273404e-05 9.4285714 + 30000 0.0026484998 0 1.9889243e-05 3.0560067e-05 7.7261634e-05 9.4285714 + 30100 0.0028058509 0 2.6399165e-05 3.004015e-05 8.3212623e-05 9.4285714 + 30200 0.0030353215 0 3.6921703e-05 3.4899864e-05 7.8543173e-05 9.4285714 + 30300 0.0030244988 0 4.0706399e-05 3.6091245e-05 7.4921988e-05 9.4285714 + 30400 0.0030855053 0 4.2502388e-05 3.8438853e-05 7.6268037e-05 9.4285714 + 30500 0.0031141819 0 4.3996743e-05 4.3726389e-05 6.8459715e-05 9.4285714 + 30600 0.0030115458 0 4.436657e-05 4.2288168e-05 6.5970726e-05 9.4285714 + 30700 0.0029700178 0 4.2448638e-05 4.1066034e-05 6.7905919e-05 9.4285714 + 30800 0.0029985358 0 4.3581039e-05 4.2782359e-05 6.616813e-05 9.4285714 + 30900 0.0029689517 0 4.3664983e-05 4.0341198e-05 6.6701993e-05 9.4285714 + 31000 0.0029622718 0 4.3233863e-05 3.8109114e-05 6.615517e-05 9.4285714 + 31100 0.0029693917 0 4.3443429e-05 3.6045147e-05 6.6807218e-05 9.4285714 + 31200 0.0027246348 0 3.8812502e-05 2.5969873e-05 6.9745525e-05 9.4285714 + 31300 0.0025368424 0 3.4331267e-05 2.1427734e-05 6.9565964e-05 9.4285714 + 31400 0.0023736698 0 3.2043786e-05 1.9880875e-05 6.6817156e-05 9.4285714 + 31500 0.0023946514 0 3.3170726e-05 1.9958211e-05 7.0242984e-05 9.4285714 + 31600 0.0025648037 0 3.5948214e-05 2.4022282e-05 7.8512704e-05 9.4285714 + 31700 0.0026956511 0 3.9195772e-05 3.3270216e-05 7.4223245e-05 9.4285714 + 31800 0.002677722 0 3.8651034e-05 3.4084086e-05 7.3747643e-05 9.4285714 + 31900 0.0026705496 0 3.8515991e-05 3.3258169e-05 7.4757118e-05 9.4285714 + 32000 0.0026466417 0 4.2241836e-05 3.449171e-05 7.0551161e-05 9.4285714 + 32100 0.0026464292 0 4.0974715e-05 3.6570061e-05 6.5387411e-05 9.4285714 + 32200 0.0023705665 0 2.951869e-05 3.011444e-05 6.6589524e-05 9.4285714 + 32300 0.0023183595 0 2.2729207e-05 3.0010044e-05 7.2706128e-05 9.4285714 + 32400 0.0023882969 0 2.372595e-05 3.1302357e-05 7.3782281e-05 9.4285714 + 32500 0.0023801754 0 2.2337455e-05 3.0476386e-05 7.5659736e-05 9.4285714 + 32600 0.0024127958 0 2.5510841e-05 3.0854572e-05 7.4410799e-05 9.4285714 + 32700 0.0024031675 0 2.7736693e-05 3.1958346e-05 7.1486437e-05 9.4285714 + 32800 0.0023770089 0 2.6385534e-05 3.3252416e-05 7.2822578e-05 9.4285714 + 32900 0.0023568819 0 2.8634678e-05 3.3258031e-05 6.7686839e-05 9.4285714 + 33000 0.0023407285 0 2.6769773e-05 3.2579304e-05 6.6690925e-05 9.4285714 + 33100 0.002327332 0 2.6645781e-05 3.4007498e-05 6.9628993e-05 9.4285714 + 33200 0.0023912585 0 2.3830565e-05 3.3441643e-05 7.4913813e-05 9.4285714 + 33300 0.0022984153 0 2.4483639e-05 3.2969557e-05 7.7726941e-05 9.4285714 + 33400 0.0022416368 0 2.3898793e-05 3.1031269e-05 7.686001e-05 9.4285714 + 33500 0.0022470637 0 2.0975902e-05 3.0084834e-05 7.570705e-05 9.4285714 + 33600 0.002256129 0 2.0520324e-05 2.8645032e-05 7.7384366e-05 9.4285714 + 33700 0.0022125246 0 1.9872713e-05 2.9850887e-05 7.5881174e-05 9.4285714 + 33800 0.0021842197 0 1.9711523e-05 2.983205e-05 7.3213854e-05 9.4285714 + 33900 0.0021690567 0 1.8055303e-05 2.828677e-05 7.3059722e-05 9.4285714 + 34000 0.0022206311 0 1.8792994e-05 2.8714121e-05 7.5766963e-05 9.4285714 + 34100 0.0022494061 0 2.1426406e-05 2.9683277e-05 7.5164305e-05 9.4285714 + 34200 0.0022085859 0 2.1896897e-05 2.8930132e-05 7.2805525e-05 9.4285714 + 34300 0.0021855633 0 2.0480867e-05 2.9992196e-05 7.2354191e-05 9.4285714 + 34400 0.0021798298 0 2.1236448e-05 3.2053048e-05 7.283282e-05 9.4285714 + 34500 0.0021267289 0 2.2129794e-05 2.8881701e-05 7.1551685e-05 9.4285714 + 34600 0.0020466804 0 2.3010184e-05 2.7531882e-05 7.2523946e-05 9.4285714 + 34700 0.0020969555 0 2.1337061e-05 3.0266865e-05 7.0863423e-05 9.4285714 + 34800 0.0022946237 0 2.2123517e-05 3.8911524e-05 7.2703415e-05 9.4285714 + 34900 0.0024490201 0 2.8420828e-05 5.0378173e-05 7.1772848e-05 9.4285714 + 35000 0.0023320217 0 2.8176618e-05 5.1789577e-05 6.8023074e-05 9.4285714 + 35100 0.0021890324 0 2.4442013e-05 5.2547725e-05 6.1661973e-05 9.4285714 + 35200 0.0022124553 0 2.4530724e-05 5.096875e-05 6.5186855e-05 9.4285714 + 35300 0.0022584165 0 2.7542443e-05 5.427333e-05 6.7536963e-05 9.4285714 + 35400 0.0022737238 0 2.504131e-05 5.4367041e-05 6.7123718e-05 9.4285714 + 35500 0.0021537481 0 2.1567488e-05 4.8699315e-05 6.7335416e-05 9.4285714 + 35600 0.0019831613 0 1.8746091e-05 4.3656184e-05 6.3180625e-05 9.4285714 + 35700 0.0019041909 0 1.9945089e-05 4.3868252e-05 5.8115913e-05 9.4285714 + 35800 0.0018216502 0 2.2392614e-05 4.2188069e-05 5.7629004e-05 9.4285714 + 35900 0.0018071574 0 2.1141753e-05 4.1327783e-05 5.630057e-05 9.4285714 + 36000 0.0018645267 0 2.2735521e-05 4.4296822e-05 5.4259075e-05 9.4285714 + 36100 0.0018474198 0 2.5295637e-05 4.6128849e-05 5.7469914e-05 9.4285714 + 36200 0.0017366166 0 2.6021589e-05 4.5563756e-05 5.5296808e-05 9.4285714 + 36300 0.0016630877 0 2.4135763e-05 4.58324e-05 5.2179718e-05 9.4285714 + 36400 0.0016809967 0 2.3427379e-05 4.7533202e-05 4.714932e-05 9.4285714 + 36500 0.0017478488 0 2.4021161e-05 4.6508842e-05 4.3949519e-05 9.4285714 + 36600 0.0017244649 0 2.3504871e-05 4.3628584e-05 4.3171518e-05 9.4285714 + 36700 0.001694793 0 2.2302323e-05 4.2349904e-05 4.396766e-05 9.4285714 + 36800 0.0016321204 0 2.1042421e-05 3.6396346e-05 4.4901304e-05 9.4285714 + 36900 0.0015208954 0 2.0456403e-05 2.7850556e-05 4.5155127e-05 9.4285714 + 37000 0.0014068755 0 2.0241724e-05 2.1785718e-05 4.5528636e-05 9.4285714 + 37100 0.0013361229 0 1.675977e-05 2.1314381e-05 4.6611487e-05 9.4285714 + 37200 0.001331474 0 1.6204509e-05 2.3621819e-05 5.0433204e-05 9.4285714 + 37300 0.0013895388 0 1.6721652e-05 3.0265014e-05 5.0091541e-05 9.4285714 + 37400 0.001407333 0 1.738976e-05 2.8850978e-05 5.1334019e-05 9.4285714 + 37500 0.0013815772 0 1.6241641e-05 3.0837468e-05 4.6825094e-05 9.4285714 + 37600 0.001367937 0 1.1983552e-05 2.9613642e-05 5.0754355e-05 9.4285714 + 37700 0.0013781896 0 1.1915379e-05 2.9242244e-05 4.8777649e-05 9.4285714 + 37800 0.0013938097 0 1.1529951e-05 3.1628776e-05 4.7715639e-05 9.4285714 + 37900 0.0013788852 0 1.2561324e-05 3.1951817e-05 4.7999073e-05 9.4285714 + 38000 0.0013409916 0 1.2473952e-05 3.1146722e-05 4.8401798e-05 9.4285714 + 38100 0.0013548793 0 1.1004651e-05 2.7320574e-05 4.9651495e-05 9.4285714 + 38200 0.0013619894 0 1.2229314e-05 2.574689e-05 4.9387883e-05 9.4285714 + 38300 0.0013593654 0 1.3392954e-05 2.427172e-05 5.1848635e-05 9.4285714 + 38400 0.0013488508 0 1.256534e-05 2.449982e-05 5.4623064e-05 9.4285714 + 38500 0.0013399961 0 1.2037162e-05 2.0814078e-05 5.6078474e-05 9.4285714 + 38600 0.0013473117 0 1.1744489e-05 1.6853428e-05 5.7231621e-05 9.4285714 + 38700 0.0013275262 0 1.093468e-05 1.4795508e-05 5.769577e-05 9.4285714 + 38800 0.001304838 0 1.1068283e-05 1.3115698e-05 6.0324982e-05 9.4285714 + 38900 0.0012981525 0 1.1709325e-05 1.3131645e-05 5.9760468e-05 9.4285714 + 39000 0.0013241474 0 1.261896e-05 1.4616086e-05 6.0256213e-05 9.4285714 + 39100 0.0013302715 0 1.1838509e-05 1.5600129e-05 6.432053e-05 9.4285714 + 39200 0.0013338793 0 1.2403697e-05 1.6279003e-05 6.2961888e-05 9.4285714 + 39300 0.001337749 0 1.3137034e-05 1.6207867e-05 6.0627848e-05 9.4285714 + 39400 0.0014184127 0 1.6180184e-05 1.8165982e-05 5.8887905e-05 9.4285714 + 39500 0.0015076229 0 1.9522159e-05 1.9795428e-05 5.910332e-05 9.4285714 + 39600 0.001584196 0 2.4027089e-05 2.0838917e-05 5.7603421e-05 9.4285714 + 39700 0.0016673141 0 2.9500045e-05 2.3045542e-05 5.5891462e-05 9.4285714 + 39800 0.0016983633 0 3.0305739e-05 2.4453535e-05 5.5981899e-05 9.4285714 + 39900 0.001721388 0 3.1340689e-05 2.4975831e-05 5.5548483e-05 9.4285714 + 40000 0.0016511866 0 3.370998e-05 2.6328206e-05 5.671433e-05 9.4285714 + 40100 0.0015902117 0 3.3681877e-05 2.5663116e-05 5.3013557e-05 9.4285714 + 40200 0.0016248457 0 3.0865269e-05 2.5397352e-05 5.1452424e-05 9.4285714 + 40300 0.001639017 0 3.1973896e-05 2.5525448e-05 5.4813301e-05 9.4285714 + 40400 0.0015947128 0 3.5965857e-05 2.5225505e-05 5.6385827e-05 9.4285714 + 40500 0.0014886812 0 3.7017265e-05 2.4882355e-05 5.2995469e-05 9.4285714 + 40600 0.001483951 0 3.4221499e-05 2.1479298e-05 5.4046331e-05 9.4285714 + 40700 0.0014877422 0 3.362595e-05 1.8839863e-05 5.5203171e-05 9.4285714 + 40800 0.0014974798 0 3.6392277e-05 1.7485578e-05 5.7247772e-05 9.4285714 + 40900 0.0014499802 0 3.3431089e-05 1.9674968e-05 5.6160238e-05 9.4285714 + 41000 0.001395913 0 2.9658496e-05 1.8273286e-05 5.6527772e-05 9.4285714 + 41100 0.0014079985 0 2.9771219e-05 1.6179289e-05 5.9153644e-05 9.4285714 + 41200 0.0014187083 0 2.7845336e-05 1.9035184e-05 5.7573549e-05 9.4285714 + 41300 0.0014072972 0 2.4886378e-05 2.0795562e-05 5.4986012e-05 9.4285714 + 41400 0.0014168981 0 2.358191e-05 2.1908287e-05 5.4674995e-05 9.4285714 + 41500 0.0014248439 0 2.3385735e-05 2.3170658e-05 5.3269277e-05 9.4285714 + 41600 0.0014225044 0 2.376616e-05 2.5694883e-05 5.2138491e-05 9.4285714 + 41700 0.0014075811 0 2.2374247e-05 2.7567814e-05 5.1299283e-05 9.4285714 + 41800 0.0012680617 0 2.2171263e-05 2.5019906e-05 5.4594068e-05 9.4285714 + 41900 0.0010587818 0 1.5440824e-05 2.093143e-05 5.3361822e-05 9.4285714 + 42000 0.0010007004 0 1.2044875e-05 1.7303459e-05 5.3021476e-05 9.4285714 + 42100 0.0011304402 0 1.2464466e-05 1.9304071e-05 5.5030158e-05 9.4285714 + 42200 0.0012833154 0 1.6978814e-05 2.4344322e-05 5.4664913e-05 9.4285714 + 42300 0.0013573853 0 1.8276863e-05 2.7764513e-05 5.4832226e-05 9.4285714 + 42400 0.0013330633 0 1.7445663e-05 2.5994427e-05 5.6219048e-05 9.4285714 + 42500 0.0012896373 0 1.7549999e-05 2.4461263e-05 5.5316804e-05 9.4285714 + 42600 0.001296775 0 1.7579818e-05 2.4729094e-05 5.4786174e-05 9.4285714 + 42700 0.0013193969 0 1.7589942e-05 2.6653321e-05 5.5601741e-05 9.4285714 + 42800 0.0013144903 0 1.7344148e-05 2.7396405e-05 5.6063261e-05 9.4285714 + 42900 0.0013053554 0 1.812017e-05 2.4357577e-05 5.5400672e-05 9.4285714 + 43000 0.0013061323 0 1.7976023e-05 2.5672617e-05 5.5591174e-05 9.4285714 + 43100 0.0013149372 0 1.8049252e-05 2.7694066e-05 5.7517507e-05 9.4285714 + 43200 0.0013063189 0 1.8000018e-05 2.5312637e-05 5.7758611e-05 9.4285714 + 43300 0.0012669853 0 1.7756679e-05 2.3718058e-05 5.7316755e-05 9.4285714 + 43400 0.0012238388 0 2.0194584e-05 2.1983277e-05 5.5573072e-05 9.4285714 + 43500 0.0012053096 0 2.0662764e-05 2.2371854e-05 5.3240833e-05 9.4285714 + 43600 0.001243323 0 2.3521544e-05 2.3272124e-05 5.4438848e-05 9.4285714 + 43700 0.001354992 0 2.8388806e-05 2.6835727e-05 5.1695181e-05 9.4285714 + 43800 0.0015252788 0 3.4452462e-05 3.2972955e-05 5.1148386e-05 9.4285714 + 43900 0.0016845587 0 3.7891883e-05 3.7259267e-05 5.3712665e-05 9.4285714 + 44000 0.0016987088 0 3.794299e-05 3.9188564e-05 5.22906e-05 9.4285714 + 44100 0.0016663634 0 3.6807094e-05 3.9253716e-05 5.2294244e-05 9.4285714 + 44200 0.0016642734 0 3.7043503e-05 3.9518624e-05 5.2702041e-05 9.4285714 + 44300 0.0016877933 0 3.8179716e-05 4.0630461e-05 5.3339506e-05 9.4285714 + 44400 0.0016937941 0 3.7131293e-05 4.1066259e-05 5.432841e-05 9.4285714 + 44500 0.001658184 0 3.5564842e-05 3.9986051e-05 5.4994687e-05 9.4285714 + 44600 0.0016202756 0 3.6182348e-05 4.0514972e-05 5.4343097e-05 9.4285714 + 44700 0.0012624519 0 3.6496068e-05 3.330838e-05 6.0193182e-05 9.4285714 + 44800 0.0012148648 0 3.7546572e-05 2.4531512e-05 6.0795743e-05 9.4285714 + 44900 0.0012565599 0 2.9767991e-05 2.3526786e-05 5.730112e-05 9.4285714 + 45000 0.0012298496 0 3.3326423e-05 2.2497973e-05 5.3986547e-05 9.4285714 + 45100 0.0012274205 0 3.310721e-05 2.2786466e-05 5.5167469e-05 9.4285714 + 45200 0.0012389066 0 3.4925053e-05 2.3497387e-05 5.4884661e-05 9.4285714 + 45300 0.0012251609 0 3.615161e-05 2.3152279e-05 5.3650078e-05 9.4285714 + 45400 0.0012814774 0 3.746516e-05 2.4153096e-05 5.1029288e-05 9.4285714 + 45500 0.0013450626 0 3.9489551e-05 2.6213973e-05 5.0267505e-05 9.4285714 + 45600 0.0013741472 0 4.2751714e-05 2.6741902e-05 4.9140966e-05 9.4285714 + 45700 0.0014351223 0 4.3930849e-05 2.6748326e-05 4.9411273e-05 9.4285714 + 45800 0.0015284371 0 4.6485067e-05 2.8704517e-05 4.9999511e-05 9.4285714 + 45900 0.001575355 0 4.5717321e-05 3.011393e-05 5.1143199e-05 9.4285714 + 46000 0.0015147792 0 4.1325851e-05 3.0384448e-05 5.1923e-05 9.4285714 + 46100 0.0014504182 0 3.9540594e-05 3.1635289e-05 5.0948968e-05 9.4285714 + 46200 0.0014410639 0 3.965176e-05 3.0362005e-05 4.8786102e-05 9.4285714 + 46300 0.0014810525 0 4.1568241e-05 3.0756475e-05 4.8680363e-05 9.4285714 + 46400 0.0014640215 0 4.309465e-05 2.985089e-05 4.9009517e-05 9.4285714 + 46500 0.0014424933 0 4.2309209e-05 2.9280621e-05 4.8629444e-05 9.4285714 + 46600 0.001441165 0 4.2539286e-05 3.0934085e-05 4.9784857e-05 9.4285714 + 46700 0.0015025344 0 4.4979228e-05 3.1000179e-05 4.8462809e-05 9.4285714 + 46800 0.0015582176 0 4.7282405e-05 3.2706414e-05 4.5724526e-05 9.4285714 + 46900 0.0015803324 0 4.7650091e-05 3.4907217e-05 4.4832148e-05 9.4285714 + 47000 0.001675143 0 5.1693701e-05 3.6882816e-05 4.6006875e-05 9.4285714 + 47100 0.0017769921 0 5.6400585e-05 3.9830957e-05 4.6950937e-05 9.4285714 + 47200 0.0018358006 0 5.9232345e-05 4.3665585e-05 4.6768506e-05 9.4285714 + 47300 0.0017951326 0 5.6422198e-05 4.3944608e-05 4.8336201e-05 9.4285714 + 47400 0.0017057371 0 5.4710398e-05 3.9941549e-05 4.7652027e-05 9.4285714 + 47500 0.0016744493 0 5.2852149e-05 3.7232824e-05 4.5384467e-05 9.4285714 + 47600 0.0014031951 0 4.1326626e-05 3.0025176e-05 4.3875657e-05 9.4285714 + 47700 0.0013373039 0 3.7514245e-05 2.9655038e-05 4.316088e-05 9.4285714 + 47800 0.0014704003 0 4.1417238e-05 3.4940895e-05 4.447442e-05 9.4285714 + 47900 0.0014934525 0 4.3132757e-05 3.7137359e-05 4.4062556e-05 9.4285714 + 48000 0.0014895856 0 4.6046202e-05 3.6927333e-05 4.3726122e-05 9.4285714 + 48100 0.00146967 0 4.6872982e-05 3.9649234e-05 4.597459e-05 9.4285714 + 48200 0.0015682986 0 4.8924923e-05 4.738992e-05 4.3767565e-05 9.4285714 + 48300 0.0017163505 0 5.2171663e-05 5.3787554e-05 4.4084292e-05 9.4285714 + 48400 0.0014261936 0 4.3093196e-05 5.6810791e-05 5.4178929e-05 9.4285714 + 48500 0.0014236361 0 3.9093573e-05 4.8266345e-05 5.346877e-05 9.4285714 + 48600 0.0014562257 0 4.0734834e-05 4.2323892e-05 4.8295024e-05 9.4285714 + 48700 0.0013758282 0 3.6847543e-05 3.5139344e-05 4.8073535e-05 9.4285714 + 48800 0.0014316476 0 3.7554019e-05 3.5556116e-05 4.7370089e-05 9.4285714 + 48900 0.0014805023 0 3.5226264e-05 3.3817592e-05 5.2499511e-05 9.4285714 + 49000 0.0013776549 0 3.2439848e-05 2.997493e-05 5.3101978e-05 9.4285714 + 49100 0.0013617488 0 3.2279492e-05 3.0772411e-05 5.1632538e-05 9.4285714 + 49200 0.0013342401 0 2.8600175e-05 3.2651245e-05 5.3349695e-05 9.4285714 + 49300 0.001276486 0 2.7777544e-05 2.96306e-05 5.4374435e-05 9.4285714 + 49400 0.0011795288 0 2.2827442e-05 2.8085944e-05 5.2012108e-05 9.4285714 + 49500 0.0011435859 0 2.2873378e-05 2.7199584e-05 4.8565744e-05 9.4285714 + 49600 0.001247689 0 2.5002038e-05 3.0378272e-05 5.4987332e-05 9.4285714 + 49700 0.0013371245 0 2.6349724e-05 3.4033827e-05 5.8350385e-05 9.4285714 + 49800 0.001301722 0 2.4983049e-05 3.3355962e-05 5.7259996e-05 9.4285714 + 49900 0.0012728363 0 2.4271773e-05 3.366383e-05 5.4969958e-05 9.4285714 + 50000 0.0013286836 0 2.4626397e-05 3.4888455e-05 5.6333036e-05 9.4285714 + 50100 0.0013460063 0 2.5626025e-05 3.4617082e-05 5.8834535e-05 9.4285714 + 50200 0.0012868089 0 2.3749355e-05 3.3262754e-05 5.7555068e-05 9.4285714 + 50300 0.0012765172 0 2.3286644e-05 3.285494e-05 5.6753429e-05 9.4285714 + 50400 0.0012703222 0 2.2664849e-05 3.2123476e-05 5.8001158e-05 9.4285714 + 50500 0.0011906512 0 1.8988144e-05 2.5734872e-05 6.0360828e-05 9.4285714 + 50600 0.0011537339 0 1.7108695e-05 2.2700119e-05 6.3433107e-05 9.4285714 + 50700 0.0011267336 0 1.7970895e-05 2.4672948e-05 5.8568632e-05 9.4285714 + 50800 0.0011753482 0 1.9468991e-05 2.5939765e-05 5.9862885e-05 9.4285714 + 50900 0.0011919232 0 2.0208188e-05 2.7321787e-05 5.9048906e-05 9.4285714 + 51000 0.0011838525 0 2.1827961e-05 2.9118892e-05 5.2803692e-05 9.4285714 + 51100 0.0011883954 0 2.2709257e-05 2.8506733e-05 5.4654615e-05 9.4285714 + 51200 0.0012349694 0 2.5890907e-05 2.8698467e-05 5.7896353e-05 9.4285714 + 51300 0.0012337432 0 2.7687089e-05 2.7653507e-05 5.9917212e-05 9.4285714 + 51400 0.0011577306 0 2.8378044e-05 2.3224364e-05 5.8057014e-05 9.4285714 + 51500 0.0011811724 0 2.8435714e-05 2.1929674e-05 5.9722575e-05 9.4285714 + 51600 0.0012159313 0 3.1521829e-05 2.2796335e-05 5.924849e-05 9.4285714 + 51700 0.0011936762 0 3.4012729e-05 2.3864808e-05 5.7265759e-05 9.4285714 + 51800 0.00119466 0 3.5158377e-05 2.5231988e-05 5.8412082e-05 9.4285714 + 51900 0.0012013641 0 3.3334001e-05 2.6816388e-05 5.861301e-05 9.4285714 + 52000 0.0011652185 0 3.0940041e-05 2.6655324e-05 5.7090011e-05 9.4285714 + 52100 0.0011222289 0 3.1077905e-05 2.4541748e-05 5.5666069e-05 9.4285714 + 52200 0.0011223637 0 3.2939544e-05 2.5096815e-05 5.6416173e-05 9.4285714 + 52300 0.00108781 0 3.4613486e-05 2.7303053e-05 5.6746437e-05 9.4285714 + 52400 0.0010329114 0 3.6196201e-05 2.8068523e-05 5.2439815e-05 9.4285714 + 52500 0.0010414794 0 3.673215e-05 2.7272718e-05 5.143023e-05 9.4285714 + 52600 0.0011160581 0 3.5468006e-05 2.7495373e-05 5.401667e-05 9.4285714 + 52700 0.0011365494 0 3.6522651e-05 2.8130517e-05 5.1952685e-05 9.4285714 + 52800 0.0011528486 0 3.8067909e-05 3.2231442e-05 4.9590134e-05 9.4285714 + 52900 0.001215765 0 4.2804899e-05 3.6927536e-05 5.1170177e-05 9.4285714 + 53000 0.0013368124 0 4.5592002e-05 4.1563931e-05 5.4427869e-05 9.4285714 + 53100 0.0013407312 0 4.5591201e-05 4.3600841e-05 4.9047373e-05 9.4285714 + 53200 0.0013326843 0 4.4821382e-05 4.1764227e-05 4.6186223e-05 9.4285714 + 53300 0.0013239729 0 4.3827862e-05 4.4020784e-05 4.3852213e-05 9.4285714 + 53400 0.0013217143 0 4.3572994e-05 4.7084118e-05 4.3149657e-05 9.4285714 + 53500 0.0012781803 0 4.460572e-05 4.8061498e-05 4.2708059e-05 9.4285714 + 53600 0.001268382 0 4.458824e-05 4.5673787e-05 4.1230488e-05 9.4285714 + 53700 0.0012069904 0 4.1562438e-05 4.2697726e-05 4.1986265e-05 9.4285714 + 53800 0.0011968988 0 4.5963049e-05 4.0317052e-05 4.3564542e-05 9.4285714 + 53900 0.0011731954 0 4.5626132e-05 3.9016561e-05 4.2699438e-05 9.4285714 + 54000 0.0011606061 0 4.2734103e-05 3.8922865e-05 4.2063758e-05 9.4285714 + 54100 0.0011658982 0 3.9764581e-05 3.672962e-05 4.7476053e-05 9.4285714 + 54200 0.0011195165 0 3.5569124e-05 3.3590873e-05 4.8421311e-05 9.4285714 + 54300 0.0010220393 0 3.2252593e-05 3.0968164e-05 4.987935e-05 9.4285714 + 54400 0.0010086172 0 3.6631232e-05 3.0359237e-05 5.1629214e-05 9.4285714 + 54500 0.0010183988 0 3.7406525e-05 2.632072e-05 5.1823266e-05 9.4285714 + 54600 0.0010068716 0 3.6673782e-05 2.3899354e-05 4.883163e-05 9.4285714 + 54700 0.00099012603 0 3.3975738e-05 2.2165277e-05 4.788027e-05 9.4285714 + 54800 0.0009683722 0 3.235553e-05 2.2982659e-05 5.0112286e-05 9.4285714 + 54900 0.00097629715 0 3.2268492e-05 2.5601046e-05 4.8627644e-05 9.4285714 + 55000 0.00095157382 0 3.1040046e-05 2.437472e-05 4.637034e-05 9.4285714 + 55100 0.00090688968 0 2.9340275e-05 2.1953227e-05 4.3141384e-05 9.4285714 + 55200 0.00088813057 0 2.8284065e-05 2.1733676e-05 4.2934237e-05 9.4285714 + 55300 0.00092557007 0 2.8620339e-05 2.3675426e-05 4.3885475e-05 9.4285714 + 55400 0.00091327263 0 2.762239e-05 2.641616e-05 4.4396082e-05 9.4285714 + 55500 0.00079921186 0 2.9224842e-05 2.5168399e-05 4.3290943e-05 9.4285714 + 55600 0.00081947901 0 2.8418244e-05 2.2268749e-05 4.9968371e-05 9.4285714 + 55700 0.00084804465 0 2.1646302e-05 2.3720621e-05 5.205521e-05 9.4285714 + 55800 0.00085118568 0 2.2504085e-05 2.2872302e-05 4.9963437e-05 9.4285714 + 55900 0.00079015144 0 2.1456661e-05 1.9796776e-05 4.8884464e-05 9.4285714 + 56000 0.00077424122 0 2.2875959e-05 1.721853e-05 4.7217244e-05 9.4285714 + 56100 0.00078729859 0 2.750101e-05 1.8189823e-05 4.7065369e-05 9.4285714 + 56200 0.00073803593 0 2.8848488e-05 1.8153302e-05 4.571796e-05 9.4285714 + 56300 0.00072042566 0 2.842146e-05 1.5690166e-05 4.4828579e-05 9.4285714 + 56400 0.00072618636 0 2.7559372e-05 1.5504007e-05 4.399204e-05 9.4285714 + 56500 0.00072889383 0 2.7924251e-05 1.6823511e-05 4.2305183e-05 9.4285714 + 56600 0.00071687768 0 2.9101443e-05 1.6332857e-05 4.2086891e-05 9.4285714 + 56700 0.00070767909 0 3.0080534e-05 1.532979e-05 4.2661404e-05 9.4285714 + 56800 0.0007079533 0 2.8817943e-05 1.6206535e-05 4.2253735e-05 9.4285714 + 56900 0.00068006672 0 2.7371942e-05 1.7051153e-05 3.9711699e-05 9.4285714 + 57000 0.000671041 0 2.6892964e-05 1.5542748e-05 3.8373488e-05 9.4285714 + 57100 0.00074371147 0 2.8066609e-05 1.8321889e-05 3.9806125e-05 9.4285714 + 57200 0.00081400221 0 2.8670502e-05 2.8899856e-05 4.0663376e-05 9.4285714 + 57300 0.000917037 0 2.7824502e-05 3.9014624e-05 4.2174406e-05 9.4285714 + 57400 0.00094626663 0 2.5794485e-05 4.1535293e-05 4.2086614e-05 9.4285714 + 57500 0.00093346301 0 2.5487117e-05 4.0862488e-05 4.1990151e-05 9.4285714 + 57600 0.00093999622 0 2.6720752e-05 4.0748175e-05 4.3650361e-05 9.4285714 + 57700 0.00094337314 0 2.639701e-05 4.0729782e-05 4.5121665e-05 9.4285714 + 57800 0.00092645123 0 2.6909739e-05 4.0150191e-05 4.3822005e-05 9.4285714 + 57900 0.00091253668 0 2.5642193e-05 3.6671075e-05 4.4028328e-05 9.4285714 + 58000 0.0009262852 0 2.4409205e-05 3.4409346e-05 4.4000636e-05 9.4285714 + 58100 0.00093298888 0 2.3677747e-05 3.2551966e-05 4.3694114e-05 9.4285714 + 58200 0.00093354721 0 2.2375814e-05 3.2117822e-05 4.4639312e-05 9.4285714 + 58300 0.00093283167 0 2.2884257e-05 3.090895e-05 4.5086768e-05 9.4285714 + 58400 0.00093485322 0 2.3712272e-05 3.0236548e-05 4.5930955e-05 9.4285714 + 58500 0.00092566721 0 2.405659e-05 2.87637e-05 4.8903625e-05 9.4285714 + 58600 0.00093205032 0 2.3525309e-05 2.8285934e-05 5.2291285e-05 9.4285714 + 58700 0.00094034992 0 2.4008311e-05 2.5804337e-05 5.3505489e-05 9.4285714 + 58800 0.00096489026 0 2.4355825e-05 2.8532919e-05 5.3761099e-05 9.4285714 + 58900 0.00097781296 0 2.6084526e-05 3.1039765e-05 5.2910774e-05 9.4285714 + 59000 0.00095088201 0 2.7035865e-05 3.1452129e-05 5.3165727e-05 9.4285714 + 59100 0.00092096092 0 2.6786706e-05 3.382956e-05 5.0768712e-05 9.4285714 + 59200 0.0009112309 0 2.5867113e-05 3.4359567e-05 4.9291183e-05 9.4285714 + 59300 0.00090372653 0 2.5622941e-05 3.7144276e-05 4.7289805e-05 9.4285714 + 59400 0.00086115007 0 2.2280155e-05 3.5823023e-05 4.6830658e-05 9.4285714 + 59500 0.00078451189 0 2.2220981e-05 2.6156784e-05 4.6914457e-05 9.4285714 + 59600 0.00078587175 0 2.3370931e-05 2.5032607e-05 4.9704371e-05 9.4285714 + 59700 0.00080103949 0 2.387346e-05 2.8536648e-05 4.7938414e-05 9.4285714 + 59800 0.00078782591 0 2.319423e-05 2.8210585e-05 4.7677072e-05 9.4285714 + 59900 0.00077243837 0 2.3631843e-05 2.8691006e-05 4.7228518e-05 9.4285714 + 60000 0.00075159859 0 2.3775193e-05 2.9335754e-05 4.5277107e-05 9.4285714 + 60100 0.00072169229 0 2.1979779e-05 3.0104074e-05 4.5923405e-05 9.4285714 + 60200 0.00067937954 0 2.0306575e-05 2.8735522e-05 4.5275658e-05 9.4285714 + 60300 0.00067260226 0 2.0810173e-05 2.6609433e-05 4.3648953e-05 9.4285714 + 60400 0.00069286984 0 2.4253823e-05 2.5126495e-05 4.258699e-05 9.4285714 + 60500 0.00069736312 0 2.7101459e-05 2.4283276e-05 4.2346847e-05 9.4285714 + 60600 0.00069858614 0 2.5781332e-05 2.4087945e-05 4.2183121e-05 9.4285714 + 60700 0.00069821214 0 2.4965653e-05 2.080958e-05 4.1576529e-05 9.4285714 + 60800 0.0007035508 0 2.5136105e-05 1.82106e-05 4.2416771e-05 9.4285714 + 60900 0.00070770846 0 2.4339709e-05 1.7024772e-05 4.3565509e-05 9.4285714 + 61000 0.00070195965 0 2.4160978e-05 1.561415e-05 4.4516846e-05 9.4285714 + 61100 0.00067865064 0 2.4754436e-05 1.6095324e-05 4.5917833e-05 9.4285714 + 61200 0.00063690893 0 2.2652857e-05 1.7060397e-05 4.715524e-05 9.4285714 + 61300 0.00064194236 0 2.2650362e-05 1.4267909e-05 4.3531168e-05 9.4285714 + 61400 0.00063121847 0 2.1529461e-05 1.2841701e-05 4.0585367e-05 9.4285714 + 61500 0.00065356029 0 2.3536414e-05 1.3344947e-05 4.1167487e-05 9.4285714 + 61600 0.00066743886 0 2.4866121e-05 1.3946269e-05 4.176316e-05 9.4285714 + 61700 0.00064876312 0 2.3723161e-05 1.3749913e-05 4.2058416e-05 9.4285714 + 61800 0.00063251553 0 2.3037843e-05 1.2308212e-05 4.1311007e-05 9.4285714 + 61900 0.00065196202 0 2.371008e-05 1.2119818e-05 4.1136972e-05 9.4285714 + 62000 0.00066211487 0 2.4305587e-05 1.3415536e-05 4.1013521e-05 9.4285714 + 62100 0.00063838911 0 2.3294318e-05 1.377487e-05 4.0954053e-05 9.4285714 + 62200 0.00062154839 0 2.1558175e-05 1.3359191e-05 4.1245046e-05 9.4285714 + 62300 0.00063042258 0 2.1018073e-05 1.3643859e-05 4.2295629e-05 9.4285714 + 62400 0.00064307282 0 2.2417944e-05 1.3691778e-05 4.3440168e-05 9.4285714 + 62500 0.00062261967 0 2.2993973e-05 1.3754566e-05 4.4100385e-05 9.4285714 + 62600 0.00053916399 0 1.5362019e-05 1.2502815e-05 4.4138039e-05 9.4285714 + 62700 0.00057010612 0 1.5796506e-05 1.2697622e-05 4.4452456e-05 9.4285714 + 62800 0.00057237373 0 1.5874305e-05 1.325341e-05 4.3827972e-05 9.4285714 + 62900 0.00056115858 0 1.6555148e-05 1.3080646e-05 4.434918e-05 9.4285714 + 63000 0.0005691916 0 1.7337274e-05 1.3018716e-05 4.5966666e-05 9.4285714 + 63100 0.00056814223 0 1.8372705e-05 1.3213928e-05 4.5013147e-05 9.4285714 + 63200 0.00055359969 0 1.7755667e-05 1.226889e-05 4.4263871e-05 9.4285714 + 63300 0.00053663894 0 1.6493197e-05 1.0859989e-05 4.3835591e-05 9.4285714 + 63400 0.00055318219 0 1.7265416e-05 1.2265785e-05 4.2879248e-05 9.4285714 + 63500 0.0005601025 0 1.7295499e-05 1.4239119e-05 4.3011721e-05 9.4285714 + 63600 0.00054583913 0 1.6525634e-05 1.4678843e-05 4.2469934e-05 9.4285714 + 63700 0.00053483868 0 1.6625875e-05 1.5078172e-05 4.2493824e-05 9.4285714 + 63800 0.00055522493 0 1.7480604e-05 1.5374684e-05 4.272595e-05 9.4285714 + 63900 0.00056121598 0 1.7772973e-05 1.5172133e-05 4.2798662e-05 9.4285714 + 64000 0.00054407633 0 1.6885044e-05 1.413276e-05 4.2546454e-05 9.4285714 + 64100 0.00053661653 0 1.6234338e-05 1.403684e-05 4.2825695e-05 9.4285714 + 64200 0.00055006192 0 1.6649951e-05 1.4056747e-05 4.3482046e-05 9.4285714 + 64300 0.00055163304 0 1.6461598e-05 1.3167903e-05 4.3726787e-05 9.4285714 + 64400 0.00053078787 0 1.6251525e-05 1.19464e-05 4.3358318e-05 9.4285714 + 64500 0.00052058058 0 1.6643557e-05 1.2630836e-05 4.3429169e-05 9.4285714 + 64600 0.00052834957 0 1.7353655e-05 1.364227e-05 4.2400392e-05 9.4285714 + 64700 0.00051311026 0 1.758087e-05 1.4884436e-05 4.228116e-05 9.4285714 + 64800 0.00048606856 0 1.8167314e-05 1.5185881e-05 4.1313198e-05 9.4285714 + 64900 0.00047345864 0 1.8776746e-05 1.5164217e-05 3.998748e-05 9.4285714 + 65000 0.00048454696 0 1.8995386e-05 1.4818088e-05 3.9244802e-05 9.4285714 + 65100 0.00048928041 0 1.8341025e-05 1.3978549e-05 3.9434274e-05 9.4285714 + 65200 0.00047037779 0 1.7440302e-05 1.2970355e-05 3.8631037e-05 9.4285714 + 65300 0.000474477 0 1.7730462e-05 1.2778417e-05 3.8374171e-05 9.4285714 + 65400 0.00047558993 0 1.8645893e-05 1.303845e-05 3.9299974e-05 9.4285714 + 65500 0.00046258212 0 1.8683635e-05 1.2737042e-05 3.99647e-05 9.4285714 + 65600 0.00044433429 0 1.6571796e-05 1.2754279e-05 3.8518715e-05 9.4285714 + 65700 0.00045238336 0 1.5273478e-05 1.2923777e-05 3.6940008e-05 9.4285714 + 65800 0.00045926142 0 1.5338149e-05 1.2009407e-05 3.6438821e-05 9.4285714 + 65900 0.00045814994 0 1.5980648e-05 1.1749036e-05 3.6297575e-05 9.4285714 + 66000 0.00045395179 0 1.7924167e-05 1.2624087e-05 3.7065746e-05 9.4285714 + 66100 0.00044097892 0 1.9034226e-05 1.356976e-05 3.8933851e-05 9.4285714 + 66200 0.00041508101 0 1.8402026e-05 1.4705713e-05 3.8748663e-05 9.4285714 + 66300 0.00041227685 0 1.908236e-05 1.6649716e-05 3.7753553e-05 9.4285714 + 66400 0.00039539458 0 1.8057048e-05 1.6143874e-05 3.7074006e-05 9.4285714 + 66500 0.00038647539 0 1.698015e-05 1.3801339e-05 3.5358951e-05 9.4285714 + 66600 0.00037432719 0 1.7509843e-05 1.4033428e-05 3.5206119e-05 9.4285714 + 66700 0.00035679642 0 1.8373478e-05 1.412795e-05 3.2664378e-05 9.4285714 + 66800 0.00034618795 0 1.9514845e-05 1.4608894e-05 3.2352472e-05 9.4285714 + 66900 0.00032906055 0 1.8736605e-05 1.523461e-05 3.3161408e-05 9.4285714 + 67000 0.00031945785 0 1.6984612e-05 1.4969242e-05 3.3142807e-05 9.4285714 + 67100 0.00031672216 0 1.7483062e-05 1.5927363e-05 3.3297451e-05 9.4285714 + 67200 0.00030445379 0 1.7092794e-05 1.5979956e-05 3.3953736e-05 9.4285714 + 67300 0.00028386109 0 1.6371034e-05 1.4946504e-05 3.3294272e-05 9.4285714 + 67400 0.00028463754 0 1.6562782e-05 1.522773e-05 3.3193414e-05 9.4285714 + 67500 0.00028212316 0 1.7000058e-05 1.688192e-05 3.0305767e-05 9.4285714 + 67600 0.00027447589 0 1.7252228e-05 1.7793217e-05 2.7940287e-05 9.4285714 + 67700 0.00026388856 0 1.788708e-05 1.7737963e-05 2.7767523e-05 9.4285714 + 67800 0.00024769801 0 1.7986182e-05 1.6911674e-05 2.6242072e-05 9.4285714 + 67900 0.00024192231 0 1.8117237e-05 1.6810584e-05 2.5489128e-05 9.4285714 + 68000 0.00023732277 0 1.7792025e-05 1.6237435e-05 2.3955138e-05 9.4285714 + 68100 0.0002230537 0 1.8040504e-05 1.509807e-05 2.4258324e-05 9.4285714 + 68200 0.00020295655 0 1.7396258e-05 1.432954e-05 2.2297953e-05 9.4285714 + 68300 0.0002040692 0 1.4709241e-05 1.3357816e-05 1.9379008e-05 9.4285714 + 68400 0.0001928169 0 1.3319281e-05 1.3285272e-05 1.9247674e-05 9.4285714 + 68500 0.00019326451 0 1.3554406e-05 1.3433023e-05 2.0649044e-05 9.4285714 + 68600 0.00019061041 0 1.3385102e-05 1.3584385e-05 1.9332432e-05 9.4285714 + 68700 0.00017904605 0 1.3288304e-05 1.3807963e-05 1.7099578e-05 9.4285714 + 68800 0.00017200167 0 1.4014515e-05 1.3305447e-05 1.6005157e-05 9.4285714 + 68900 0.00016728354 0 1.4358398e-05 1.4318143e-05 1.7530654e-05 9.4285714 + 69000 0.00015703321 0 1.5503927e-05 1.5119926e-05 1.7369909e-05 9.4285714 + 69100 0.00014835113 0 1.6646462e-05 1.3971022e-05 1.6344915e-05 9.4285714 + 69200 0.00014631648 0 1.5954987e-05 1.2795675e-05 1.6309035e-05 9.4285714 + 69300 0.00014587978 0 1.5293418e-05 1.2677732e-05 1.7233536e-05 9.4285714 + 69400 0.0001418924 0 1.5258493e-05 1.3019793e-05 1.7515483e-05 9.4285714 + 69500 0.00013332024 0 1.4812384e-05 1.303409e-05 1.7383204e-05 9.4285714 + 69600 0.00013320187 0 1.4156146e-05 1.3180657e-05 1.7662244e-05 9.4285714 + 69700 0.00013039836 0 1.3247552e-05 1.2811783e-05 1.6799406e-05 9.4285714 + 69800 0.00012003394 0 1.2945301e-05 1.2559804e-05 1.5746066e-05 9.4285714 + 69900 0.00011651147 0 1.2355239e-05 1.2393181e-05 1.4350427e-05 9.4285714 + 70000 0.00012197106 0 1.1842768e-05 1.3044816e-05 1.4170863e-05 9.4285714 + 70100 0.00011813389 0 1.1625743e-05 1.3313213e-05 1.5063448e-05 9.4285714 + 70200 0.00011097253 0 1.1590401e-05 1.2554923e-05 1.4597134e-05 9.4285714 + 70300 0.00010887364 0 1.1158154e-05 1.1895927e-05 1.31874e-05 9.4285714 + 70400 0.00010916786 0 1.0956876e-05 1.180273e-05 1.2846539e-05 9.4285714 + 70500 0.00010031774 0 1.0360778e-05 1.1514343e-05 1.2521203e-05 9.4285714 + 70600 9.1002834e-05 0 1.0300514e-05 1.117085e-05 1.1527003e-05 9.4285714 + 70700 8.9186179e-05 0 1.0609829e-05 1.0737094e-05 1.0837865e-05 9.4285714 + 70800 9.1206485e-05 0 1.0401734e-05 9.9843249e-06 1.0249157e-05 9.4285714 + 70900 9.2333335e-05 0 1.0193791e-05 9.0808065e-06 9.8992907e-06 9.4285714 + 71000 9.1646266e-05 0 1.0160677e-05 8.7435373e-06 9.7169582e-06 9.4285714 + 71100 8.9976882e-05 0 1.0153135e-05 9.1409494e-06 9.5718498e-06 9.4285714 + 71200 8.7702811e-05 0 9.8902233e-06 9.1879521e-06 9.8218671e-06 9.4285714 + 71300 8.6905185e-05 0 9.5383545e-06 8.7211783e-06 1.0499374e-05 9.4285714 + 71400 8.5684023e-05 0 9.253314e-06 8.3885129e-06 1.0606272e-05 9.4285714 + 71500 8.303695e-05 0 8.8819413e-06 8.3461936e-06 1.0273368e-05 9.4285714 + 71600 8.0199459e-05 0 8.9747038e-06 8.2066881e-06 9.9704252e-06 9.4285714 + 71700 7.8917712e-05 0 9.0271304e-06 7.7429742e-06 9.9361512e-06 9.4285714 + 71800 8.006745e-05 0 8.8187404e-06 7.4107567e-06 9.9020703e-06 9.4285714 + 71900 7.8740588e-05 0 8.5325535e-06 7.4640436e-06 9.6978695e-06 9.4285714 + 72000 7.758597e-05 0 8.4232259e-06 7.4096936e-06 1.0295265e-05 9.4285714 + 72100 7.7221401e-05 0 8.2221646e-06 7.0735469e-06 1.0729758e-05 9.4285714 + 72200 7.6375029e-05 0 7.8256335e-06 6.6839282e-06 1.0036496e-05 9.4285714 + 72300 7.2834947e-05 0 7.3129398e-06 6.5549375e-06 9.3647818e-06 9.4285714 + 72400 7.2648265e-05 0 7.1756961e-06 6.6155121e-06 9.9549307e-06 9.4285714 + 72500 7.3708292e-05 0 7.2472933e-06 6.3958474e-06 1.0123332e-05 9.4285714 + 72600 7.1153221e-05 0 7.3278587e-06 6.1367701e-06 9.7342661e-06 9.4285714 + 72700 6.9093949e-05 0 7.4363962e-06 5.9533119e-06 9.7560578e-06 9.4285714 + 72800 7.0003138e-05 0 7.5425112e-06 5.8275253e-06 1.0368232e-05 9.4285714 + 72900 7.097186e-05 0 7.4852771e-06 5.9091762e-06 1.0469988e-05 9.4285714 + 73000 6.9754446e-05 0 7.1428704e-06 6.0128613e-06 9.845617e-06 9.4285714 + 73100 6.8919462e-05 0 6.8577848e-06 6.0078752e-06 9.5062768e-06 9.4285714 + 73200 7.0813485e-05 0 6.915193e-06 5.8464766e-06 9.5542243e-06 9.4285714 + 73300 7.2448906e-05 0 7.202029e-06 5.9255145e-06 9.366303e-06 9.4285714 + 73400 7.1636811e-05 0 7.3658376e-06 6.0353436e-06 9.0035204e-06 9.4285714 + 73500 7.0735739e-05 0 7.3378932e-06 5.9233113e-06 9.2103137e-06 9.4285714 + 73600 7.103569e-05 0 7.4016369e-06 5.7191072e-06 9.590302e-06 9.4285714 + 73700 7.1516165e-05 0 7.5406525e-06 5.5544712e-06 9.2023549e-06 9.4285714 + 73800 7.0454708e-05 0 7.349261e-06 5.3580841e-06 8.44158e-06 9.4285714 + 73900 7.0921505e-05 0 7.0116409e-06 5.019628e-06 8.392926e-06 9.4285714 + 74000 7.3462894e-05 0 6.8708293e-06 4.6604305e-06 8.6159539e-06 9.4285714 + 74100 7.3200399e-05 0 6.760504e-06 4.5172181e-06 8.6590907e-06 9.4285714 + 74200 7.1848724e-05 0 6.598806e-06 4.5142909e-06 8.9015449e-06 9.4285714 + 74300 7.2382347e-05 0 6.4910604e-06 4.55638e-06 9.5190459e-06 9.4285714 + 74400 7.3931763e-05 0 6.5463337e-06 4.557173e-06 9.9812236e-06 9.4285714 + 74500 7.4402751e-05 0 6.7422317e-06 4.5967137e-06 9.9997382e-06 9.4285714 + 74600 7.3859362e-05 0 6.7302615e-06 4.5719524e-06 9.8667104e-06 9.4285714 + 74700 7.5361374e-05 0 6.6009004e-06 4.5572386e-06 9.8530775e-06 9.4285714 + 74800 7.7630509e-05 0 6.5656345e-06 4.6832234e-06 9.892975e-06 9.4285714 + 74900 7.7455142e-05 0 6.6195469e-06 4.8215952e-06 9.8988386e-06 9.4285714 + 75000 7.6480769e-05 0 6.6957621e-06 4.8937859e-06 1.0118373e-05 9.4285714 + 75100 7.7275693e-05 0 6.8416988e-06 5.0008953e-06 1.0508524e-05 9.4285714 + 75200 7.8822667e-05 0 7.0137661e-06 5.114046e-06 1.0681512e-05 9.4285714 + 75300 7.923137e-05 0 7.0852228e-06 5.2313082e-06 1.088256e-05 9.4285714 + 75400 7.9015035e-05 0 7.0293657e-06 5.2742411e-06 1.1348177e-05 9.4285714 + 75500 8.0621162e-05 0 6.8467092e-06 5.2679705e-06 1.1831246e-05 9.4285714 + 75600 8.2299447e-05 0 6.6752346e-06 5.2465333e-06 1.1929829e-05 9.4285714 + 75700 8.1993378e-05 0 6.6903556e-06 5.2647445e-06 1.1895978e-05 9.4285714 + 75800 8.1758987e-05 0 6.8566142e-06 5.3086877e-06 1.1919614e-05 9.4285714 + 75900 8.3084215e-05 0 7.0165672e-06 5.385502e-06 1.2070322e-05 9.4285714 + 76000 8.197148e-05 0 7.2302761e-06 5.8394738e-06 1.2278973e-05 9.4285714 + 76100 7.3534139e-05 0 7.7489979e-06 6.0492251e-06 1.2550083e-05 9.4285714 + 76200 6.8283079e-05 0 7.2365372e-06 6.0007678e-06 1.2602817e-05 9.4285714 + 76300 7.8227289e-05 0 6.526694e-06 6.0271465e-06 1.2329383e-05 9.4285714 + 76400 8.2994806e-05 0 6.1815571e-06 5.9430881e-06 1.1701935e-05 9.4285714 + 76500 8.3014892e-05 0 6.1364257e-06 5.9854633e-06 1.1722691e-05 9.4285714 + 76600 8.4226362e-05 0 6.1828506e-06 6.107284e-06 1.1920214e-05 9.4285714 + 76700 8.6131526e-05 0 6.3343928e-06 6.350283e-06 1.228658e-05 9.4285714 + 76800 8.5731394e-05 0 6.4776958e-06 6.4683255e-06 1.249724e-05 9.4285714 + 76900 8.5941781e-05 0 6.4853553e-06 6.4244197e-06 1.2593229e-05 9.4285714 + 77000 8.8001094e-05 0 6.5171523e-06 6.6329655e-06 1.2912514e-05 9.4285714 + 77100 8.7224729e-05 0 6.8494875e-06 7.3872568e-06 1.3297612e-05 9.4285714 + 77200 8.4102799e-05 0 7.0894804e-06 7.3299263e-06 1.367949e-05 9.4285714 + 77300 8.0313409e-05 0 7.4098021e-06 7.2858555e-06 1.3836101e-05 9.4285714 + 77400 7.9230413e-05 0 8.2603924e-06 7.7732932e-06 1.3810185e-05 9.4285714 + 77500 7.811033e-05 0 8.7674355e-06 7.5406409e-06 1.4227076e-05 9.4285714 + 77600 7.7683573e-05 0 9.0788292e-06 7.8133163e-06 1.471022e-05 9.4285714 + 77700 7.5680467e-05 0 8.9108768e-06 8.317342e-06 1.4999553e-05 9.4285714 + 77800 7.3449559e-05 0 8.9694781e-06 8.6900526e-06 1.5086204e-05 9.4285714 + 77900 7.3292429e-05 0 9.139058e-06 8.6084679e-06 1.492615e-05 9.4285714 + 78000 7.2392133e-05 0 9.6080208e-06 8.4852396e-06 1.4857893e-05 9.4285714 + 78100 7.0315679e-05 0 9.945291e-06 8.3218765e-06 1.4719636e-05 9.4285714 + 78200 7.1047062e-05 0 9.8105393e-06 8.1347429e-06 1.4828339e-05 9.4285714 + 78300 6.8370248e-05 0 9.9255038e-06 7.8989844e-06 1.558545e-05 9.4285714 + 78400 6.5550877e-05 0 1.0372272e-05 7.8133098e-06 1.6112e-05 9.4285714 + 78500 6.1683926e-05 0 1.0744202e-05 7.939033e-06 1.6539381e-05 9.4285714 + 78600 6.024047e-05 0 1.0791202e-05 7.9498532e-06 1.6361859e-05 9.4285714 + 78700 5.8543178e-05 0 1.0974316e-05 7.8193457e-06 1.5667857e-05 9.4285714 + 78800 5.5383435e-05 0 1.0534755e-05 7.6453258e-06 1.4396004e-05 9.4285714 + 78900 5.6871546e-05 0 1.0546809e-05 7.6401983e-06 1.380849e-05 9.4285714 + 79000 5.7192958e-05 0 1.0550826e-05 8.0833789e-06 1.3441933e-05 9.4285714 + 79100 4.9998926e-05 0 1.0683768e-05 7.9938172e-06 1.3882479e-05 9.4285714 + 79200 4.9597887e-05 0 1.0901088e-05 7.7919421e-06 1.273575e-05 9.4285714 + 79300 4.8603326e-05 0 1.0971813e-05 8.0875397e-06 1.2027443e-05 9.4285714 + 79400 4.7839304e-05 0 1.0874179e-05 8.144737e-06 1.1956832e-05 9.4285714 + 79500 4.5739018e-05 0 1.076245e-05 8.3910868e-06 1.1534616e-05 9.4285714 + 79600 4.2632104e-05 0 1.0609664e-05 8.6397142e-06 1.1473552e-05 9.4285714 + 79700 4.2716432e-05 0 1.0262604e-05 8.711707e-06 1.0969998e-05 9.4285714 + 79800 4.3345358e-05 0 9.9282847e-06 8.9481901e-06 1.0983222e-05 9.4285714 + 79900 4.2476967e-05 0 9.7375039e-06 9.2548149e-06 1.1285625e-05 9.4285714 + 80000 4.0478442e-05 0 9.558123e-06 8.9295053e-06 1.0784448e-05 9.4285714 + 80100 3.7842198e-05 0 9.0334781e-06 8.2704782e-06 1.0278932e-05 9.4285714 + 80200 2.8735215e-05 0 7.9350731e-06 7.8543447e-06 1.0121553e-05 9.4285714 + 80300 2.5008575e-05 0 7.4613405e-06 7.3076318e-06 9.699202e-06 9.4285714 + 80400 2.7560228e-05 0 7.839602e-06 7.0844901e-06 9.4586824e-06 9.4285714 + 80500 3.0888649e-05 0 8.1838091e-06 6.9204111e-06 9.2656765e-06 9.4285714 + 80600 3.2512804e-05 0 8.4973372e-06 6.7089195e-06 9.1713286e-06 9.4285714 + 80700 3.0635649e-05 0 8.6601613e-06 6.5637472e-06 8.8278453e-06 9.4285714 + 80800 2.7803874e-05 0 8.6135955e-06 6.4140616e-06 8.6556889e-06 9.4285714 + 80900 2.7488104e-05 0 8.7028796e-06 6.3379797e-06 8.3509842e-06 9.4285714 + 81000 2.5760367e-05 0 9.2034736e-06 6.7611736e-06 8.6536526e-06 9.4285714 + 81100 2.0516969e-05 0 9.0513498e-06 6.8144281e-06 9.1119465e-06 9.4285714 + 81200 1.7005384e-05 0 8.916831e-06 6.7768397e-06 9.5240286e-06 9.4285714 + 81300 1.8000969e-05 0 8.7376342e-06 6.8615088e-06 9.6206194e-06 9.4285714 + 81400 1.8404948e-05 0 8.2208204e-06 6.7371396e-06 9.0504462e-06 9.4285714 + 81500 1.7001638e-05 0 8.0003097e-06 6.7725682e-06 8.8647013e-06 9.4285714 + 81600 1.718853e-05 0 7.6914646e-06 6.9104324e-06 8.8869789e-06 9.4285714 + 81700 1.7653551e-05 0 7.3471225e-06 6.8867378e-06 8.8253446e-06 9.4285714 + 81800 1.60697e-05 0 7.0404737e-06 6.8479859e-06 8.5427076e-06 9.4285714 + 81900 1.5286837e-05 0 7.0172686e-06 6.9297068e-06 8.2722832e-06 9.4285714 + 82000 1.6023107e-05 0 7.0983015e-06 6.9736613e-06 8.1332821e-06 9.4285714 + 82100 1.5242285e-05 0 7.0688546e-06 6.8167975e-06 7.6908928e-06 9.4285714 + 82200 1.3697011e-05 0 7.0223727e-06 6.4952373e-06 7.3342404e-06 9.4285714 + 82300 1.3126258e-05 0 7.1571217e-06 6.3810604e-06 7.2195212e-06 9.4285714 + 82400 1.3101796e-05 0 7.2890863e-06 6.3506356e-06 6.9818415e-06 9.4285714 + 82500 1.2930812e-05 0 7.151416e-06 6.216239e-06 6.5772477e-06 9.4285714 + 82600 1.2105591e-05 0 6.7542664e-06 6.1120283e-06 6.3663068e-06 9.4285714 + 82700 1.1430058e-05 0 6.5788951e-06 6.0514089e-06 6.4433754e-06 9.4285714 + 82800 1.1220674e-05 0 6.5791612e-06 6.0531604e-06 6.6770698e-06 9.4285714 + 82900 1.0833337e-05 0 6.47818e-06 6.0122996e-06 6.8321143e-06 9.4285714 + 83000 9.6966107e-06 0 6.2531746e-06 5.9309876e-06 6.8402408e-06 9.4285714 + 83100 9.7912048e-06 0 6.1233799e-06 5.8467558e-06 6.8017122e-06 9.4285714 + 83200 1.0342776e-05 0 6.1812546e-06 5.7996644e-06 6.7456475e-06 9.4285714 + 83300 9.1053605e-06 0 6.2862234e-06 5.7715058e-06 6.6864541e-06 9.4285714 + 83400 8.1376574e-06 0 6.3534217e-06 5.8081229e-06 6.6544011e-06 9.4285714 + 83500 8.3013823e-06 0 6.4049353e-06 5.8627471e-06 6.6442675e-06 9.4285714 + 83600 7.5747246e-06 0 6.3101238e-06 5.9294619e-06 6.6505997e-06 9.4285714 + 83700 6.7051973e-06 0 6.1464953e-06 5.8827036e-06 6.6813364e-06 9.4285714 + 83800 6.7732855e-06 0 6.1039107e-06 5.7663207e-06 6.7463747e-06 9.4285714 + 83900 6.455146e-06 0 6.191176e-06 5.719103e-06 6.7193618e-06 9.4285714 + 84000 6.033363e-06 0 6.1987406e-06 5.6639744e-06 6.7404074e-06 9.4285714 + 84100 6.1544361e-06 0 6.1093662e-06 5.4981158e-06 6.9178146e-06 9.4285714 + 84200 5.8120515e-06 0 5.8682237e-06 5.4078594e-06 7.1748608e-06 9.4285714 + 84300 5.5925414e-06 0 5.8299675e-06 5.4425557e-06 7.3447739e-06 9.4285714 + 84400 5.9495987e-06 0 5.8440449e-06 5.5318695e-06 7.3677152e-06 9.4285714 + 84500 5.7713446e-06 0 5.8137185e-06 5.672038e-06 7.2420253e-06 9.4285714 + 84600 5.2346414e-06 0 5.7724697e-06 5.8135669e-06 7.089944e-06 9.4285714 + 84700 5.3677312e-06 0 5.7932199e-06 5.8900538e-06 6.986661e-06 9.4285714 + 84800 5.5545452e-06 0 5.8402198e-06 5.8520541e-06 6.892677e-06 9.4285714 + 84900 5.35857e-06 0 5.8265347e-06 5.8000233e-06 6.8516545e-06 9.4285714 + 85000 5.4081539e-06 0 5.783936e-06 5.7703706e-06 6.8630043e-06 9.4285714 + 85100 5.6686315e-06 0 5.7695537e-06 5.7106213e-06 6.8449127e-06 9.4285714 + 85200 5.6470622e-06 0 5.8250423e-06 5.6629171e-06 6.774264e-06 9.4285714 + 85300 5.4542991e-06 0 5.9016498e-06 5.6655349e-06 6.7281738e-06 9.4285714 + 85400 5.5974388e-06 0 5.9646597e-06 5.6947162e-06 6.6806947e-06 9.4285714 + 85500 5.9109345e-06 0 5.967179e-06 5.6810561e-06 6.6036521e-06 9.4285714 + 85600 5.8895141e-06 0 5.9638498e-06 5.6150965e-06 6.5709969e-06 9.4285714 + 85700 5.8470051e-06 0 6.0226793e-06 5.5476887e-06 6.650327e-06 9.4285714 + 85800 6.060997e-06 0 6.0805171e-06 5.5114717e-06 6.7408394e-06 9.4285714 + 85900 6.1217894e-06 0 6.1343577e-06 5.5394005e-06 6.8609753e-06 9.4285714 + 86000 5.7550467e-06 0 6.1710899e-06 5.6424943e-06 6.9634617e-06 9.4285714 + 86100 5.6513685e-06 0 6.1564873e-06 5.8517272e-06 6.9818339e-06 9.4285714 + 86200 5.7555479e-06 0 6.1071953e-06 5.9846538e-06 6.9607131e-06 9.4285714 + 86300 5.7587322e-06 0 6.1027542e-06 6.0234009e-06 6.969152e-06 9.4285714 + 86400 5.8389333e-06 0 6.1697397e-06 6.0477528e-06 7.0119472e-06 9.4285714 + 86500 5.9431034e-06 0 6.2597537e-06 6.0475988e-06 7.0667343e-06 9.4285714 + 86600 5.9655129e-06 0 6.2896528e-06 6.0010507e-06 7.0437962e-06 9.4285714 + 86700 6.042955e-06 0 6.2709737e-06 5.8440573e-06 6.9441762e-06 9.4285714 + 86800 6.2666413e-06 0 6.1964071e-06 5.6894309e-06 6.8811779e-06 9.4285714 + 86900 6.5118003e-06 0 6.1051139e-06 5.6557711e-06 6.8722493e-06 9.4285714 + 87000 6.7509257e-06 0 6.0291493e-06 5.6830661e-06 6.916898e-06 9.4285714 + 87100 6.9118143e-06 0 6.0183397e-06 5.6796551e-06 7.0011007e-06 9.4285714 + 87200 6.9983412e-06 0 6.040127e-06 5.6529434e-06 7.127229e-06 9.4285714 + 87300 7.2267392e-06 0 6.0286797e-06 5.6230076e-06 7.2573882e-06 9.4285714 + 87400 7.3928522e-06 0 6.0129878e-06 5.5947139e-06 7.4524445e-06 9.4285714 + 87500 7.1675783e-06 0 6.0469379e-06 5.7445703e-06 7.5694621e-06 9.4285714 + 87600 6.9310557e-06 0 6.1331355e-06 5.8982521e-06 7.5787155e-06 9.4285714 + 87700 6.8020949e-06 0 6.312632e-06 5.9646e-06 7.5159198e-06 9.4285714 + 87800 6.7871509e-06 0 6.4438446e-06 5.8625717e-06 7.4014079e-06 9.4285714 + 87900 7.1459737e-06 0 6.5483239e-06 5.7458287e-06 7.3742373e-06 9.4285714 + 88000 7.4791665e-06 0 6.6494489e-06 5.7733829e-06 7.5763999e-06 9.4285714 + 88100 7.4418527e-06 0 6.7353307e-06 5.903551e-06 7.7655167e-06 9.4285714 + 88200 6.8171325e-06 0 6.9359356e-06 6.0764899e-06 8.0003945e-06 9.4285714 + 88300 5.9535317e-06 0 7.0673476e-06 6.2127209e-06 8.2558166e-06 9.4285714 + 88400 5.8054385e-06 0 7.0393025e-06 6.295728e-06 8.3249618e-06 9.4285714 + 88500 5.7381974e-06 0 6.986322e-06 6.3150237e-06 8.3161166e-06 9.4285714 + 88600 5.8193958e-06 0 6.9610838e-06 6.2643723e-06 8.3456298e-06 9.4285714 + 88700 5.7843884e-06 0 7.025256e-06 6.1780449e-06 8.4360622e-06 9.4285714 + 88800 5.36122e-06 0 7.1886768e-06 6.1335975e-06 8.6566218e-06 9.4285714 + 88900 4.9662584e-06 0 7.2896286e-06 6.1156834e-06 8.7588271e-06 9.4285714 + 89000 5.0244565e-06 0 7.2730496e-06 6.083749e-06 8.7659659e-06 9.4285714 + 89100 5.2140172e-06 0 7.1617638e-06 6.0498839e-06 8.7631514e-06 9.4285714 + 89200 5.4241028e-06 0 7.0779466e-06 6.0064798e-06 8.7654482e-06 9.4285714 + 89300 5.354843e-06 0 7.0385405e-06 5.9746409e-06 8.8526601e-06 9.4285714 + 89400 4.9583346e-06 0 6.9725874e-06 5.9883731e-06 8.8784101e-06 9.4285714 + 89500 4.7804845e-06 0 6.8896169e-06 6.0555358e-06 8.7411283e-06 9.4285714 + 89600 4.5353969e-06 0 6.8441433e-06 6.1441445e-06 8.5998496e-06 9.4285714 + 89700 4.3528727e-06 0 6.9096594e-06 6.2696259e-06 8.4806368e-06 9.4285714 + 89800 4.0677397e-06 0 7.0681849e-06 6.3600745e-06 8.3821485e-06 9.4285714 + 89900 3.4743886e-06 0 7.208934e-06 6.2417154e-06 8.2590362e-06 9.4285714 + 90000 2.9448035e-06 0 7.2648444e-06 6.1025056e-06 8.1567217e-06 9.4285714 + 90100 2.8584378e-06 0 7.2361844e-06 6.0292519e-06 8.1323675e-06 9.4285714 + 90200 3.0154097e-06 0 7.1912833e-06 5.9880227e-06 8.1509776e-06 9.4285714 + 90300 3.0998012e-06 0 7.1621354e-06 5.9387681e-06 8.1447795e-06 9.4285714 + 90400 3.0622205e-06 0 7.1346468e-06 5.8551087e-06 8.0849875e-06 9.4285714 + 90500 2.8987354e-06 0 7.0808755e-06 5.7480505e-06 8.0655448e-06 9.4285714 + 90600 2.6710434e-06 0 7.0205199e-06 5.7165534e-06 8.0846444e-06 9.4285714 + 90700 2.4095074e-06 0 6.9439805e-06 5.7493599e-06 8.0259105e-06 9.4285714 + 90800 2.202904e-06 0 6.9317463e-06 5.8100449e-06 7.9027214e-06 9.4285714 + 90900 2.3181295e-06 0 7.0034101e-06 5.8778489e-06 7.7654197e-06 9.4285714 + 91000 2.3141951e-06 0 7.0766754e-06 5.9435646e-06 7.6679494e-06 9.4285714 + 91100 2.0683071e-06 0 7.0355929e-06 5.9830977e-06 7.5547272e-06 9.4285714 + 91200 1.8857219e-06 0 6.886975e-06 5.9803391e-06 7.3843659e-06 9.4285714 + 91300 1.8327584e-06 0 6.7232199e-06 5.8972482e-06 7.172749e-06 9.4285714 + 91400 1.804747e-06 0 6.6658239e-06 5.7775933e-06 6.9879557e-06 9.4285714 + 91500 1.6349771e-06 0 6.6744755e-06 5.6582742e-06 6.8615206e-06 9.4285714 + 91600 1.5216476e-06 0 6.6865456e-06 5.5795361e-06 6.7883528e-06 9.4285714 + 91700 1.6141413e-06 0 6.68539e-06 5.5586295e-06 6.7422583e-06 9.4285714 + 91800 1.6435107e-06 0 6.6317895e-06 5.6102143e-06 6.7060043e-06 9.4285714 + 91900 1.5649292e-06 0 6.5474777e-06 5.6787362e-06 6.6783459e-06 9.4285714 + 92000 1.5598003e-06 0 6.4984086e-06 5.7448839e-06 6.6563568e-06 9.4285714 + 92100 1.5645521e-06 0 6.502615e-06 5.7854556e-06 6.6299693e-06 9.4285714 + 92200 1.5384794e-06 0 6.5324855e-06 5.791917e-06 6.5998087e-06 9.4285714 + 92300 1.5428705e-06 0 6.5828146e-06 5.7573607e-06 6.564701e-06 9.4285714 + 92400 1.5481835e-06 0 6.6310796e-06 5.6780865e-06 6.551415e-06 9.4285714 + 92500 1.5193765e-06 0 6.6560684e-06 5.5916813e-06 6.568409e-06 9.4285714 + 92600 1.4779648e-06 0 6.6374647e-06 5.5138194e-06 6.605645e-06 9.4285714 + 92700 1.4401385e-06 0 6.5783557e-06 5.466179e-06 6.6343577e-06 9.4285714 + 92800 1.4263884e-06 0 6.5032532e-06 5.4548714e-06 6.6667781e-06 9.4285714 + 92900 1.4318392e-06 0 6.4100939e-06 5.475169e-06 6.7074201e-06 9.4285714 + 93000 1.4336111e-06 0 6.3386325e-06 5.5075916e-06 6.7333938e-06 9.4285714 + 93100 1.4541758e-06 0 6.3430387e-06 5.5366002e-06 6.7522163e-06 9.4285714 + 93200 1.4657669e-06 0 6.4329416e-06 5.581062e-06 6.8176723e-06 9.4285714 + 93300 1.4040886e-06 0 6.5434258e-06 5.6428482e-06 6.9238384e-06 9.4285714 + 93400 1.2988064e-06 0 6.6210628e-06 5.7043118e-06 7.0589134e-06 9.4285714 + 93500 1.2005872e-06 0 6.6510605e-06 5.7583138e-06 7.1470838e-06 9.4285714 + 93600 1.1148329e-06 0 6.6739621e-06 5.8031724e-06 7.198744e-06 9.4285714 + 93700 1.0710007e-06 0 6.7180944e-06 5.8357751e-06 7.2627754e-06 9.4285714 + 93800 1.0923979e-06 0 6.7838026e-06 5.857069e-06 7.3553254e-06 9.4285714 + 93900 1.1070785e-06 0 6.8474162e-06 5.8724205e-06 7.4260353e-06 9.4285714 + 94000 1.0836182e-06 0 6.9184593e-06 5.9063218e-06 7.4593908e-06 9.4285714 + 94100 1.0712532e-06 0 6.9659007e-06 5.9417663e-06 7.4976223e-06 9.4285714 + 94200 1.1089242e-06 0 6.9714436e-06 5.970624e-06 7.55674e-06 9.4285714 + 94300 1.1709624e-06 0 6.9375714e-06 5.9802014e-06 7.6084264e-06 9.4285714 + 94400 1.1698851e-06 0 6.8899943e-06 5.96701e-06 7.6232022e-06 9.4285714 + 94500 1.1331311e-06 0 6.8607818e-06 5.9576831e-06 7.6330828e-06 9.4285714 + 94600 1.1611176e-06 0 6.8775071e-06 5.9659895e-06 7.6539239e-06 9.4285714 + 94700 1.2014763e-06 0 6.9225704e-06 5.978896e-06 7.6602657e-06 9.4285714 + 94800 1.1833928e-06 0 6.9903173e-06 5.9981741e-06 7.6474584e-06 9.4285714 + 94900 1.1648449e-06 0 7.0650539e-06 6.0150496e-06 7.633387e-06 9.4285714 + 95000 1.1252279e-06 0 7.1072978e-06 6.0184786e-06 7.6094493e-06 9.4285714 + 95100 1.0516851e-06 0 7.1142631e-06 6.0065025e-06 7.5761571e-06 9.4285714 + 95200 1.0245214e-06 0 7.1018948e-06 5.993948e-06 7.5486922e-06 9.4285714 + 95300 1.0235812e-06 0 7.0867307e-06 6.0211446e-06 7.52964e-06 9.4285714 + 95400 9.6956254e-07 0 7.0870353e-06 6.072303e-06 7.5090138e-06 9.4285714 + 95500 8.9262312e-07 0 7.0987772e-06 6.1168082e-06 7.5033557e-06 9.4285714 + 95600 8.6064987e-07 0 7.1067297e-06 6.1317068e-06 7.4962696e-06 9.4285714 + 95700 8.7096432e-07 0 7.0919507e-06 6.1268237e-06 7.4461295e-06 9.4285714 + 95800 8.5278957e-07 0 7.0664924e-06 6.1151121e-06 7.3946799e-06 9.4285714 + 95900 7.9717781e-07 0 7.0485109e-06 6.0993542e-06 7.3743405e-06 9.4285714 + 96000 7.7875968e-07 0 7.0534076e-06 6.0721804e-06 7.38935e-06 9.4285714 + 96100 7.8525813e-07 0 7.0843748e-06 6.0420863e-06 7.4393684e-06 9.4285714 + 96200 7.7518366e-07 0 7.1238098e-06 6.028226e-06 7.5045929e-06 9.4285714 + 96300 7.6015915e-07 0 7.1481733e-06 6.0364027e-06 7.5368435e-06 9.4285714 + 96400 7.4067407e-07 0 7.1459565e-06 6.041338e-06 7.4989132e-06 9.4285714 + 96500 7.0061605e-07 0 7.1268071e-06 6.029068e-06 7.4151813e-06 9.4285714 + 96600 6.6164038e-07 0 7.098925e-06 6.0009667e-06 7.3139003e-06 9.4285714 + 96700 6.5255615e-07 0 7.0627067e-06 5.9576708e-06 7.2100844e-06 9.4285714 + 96800 6.5992528e-07 0 7.023092e-06 5.8964071e-06 7.1287006e-06 9.4285714 + 96900 6.618124e-07 0 6.9850613e-06 5.8360203e-06 7.0798167e-06 9.4285714 + 97000 6.7139818e-07 0 6.9588277e-06 5.8062928e-06 7.0552706e-06 9.4285714 + 97100 6.8703272e-07 0 6.9537175e-06 5.8222057e-06 7.0414456e-06 9.4285714 + 97200 6.9368757e-07 0 6.9628009e-06 5.8702813e-06 7.0384753e-06 9.4285714 + 97300 6.9652913e-07 0 6.9734824e-06 5.9290926e-06 7.0544858e-06 9.4285714 + 97400 6.9671901e-07 0 6.9846061e-06 6.0012529e-06 7.083092e-06 9.4285714 + 97500 6.891306e-07 0 6.9869142e-06 6.0395379e-06 7.0939696e-06 9.4285714 + 97600 6.76426e-07 0 6.9788679e-06 6.0215323e-06 7.0606545e-06 9.4285714 + 97700 6.5763751e-07 0 6.9653816e-06 5.9723094e-06 7.0096441e-06 9.4285714 + 97800 6.4854556e-07 0 6.9554426e-06 5.9303617e-06 6.9747745e-06 9.4285714 + 97900 6.5336861e-07 0 6.9405484e-06 5.9124736e-06 6.9578336e-06 9.4285714 + 98000 6.6394525e-07 0 6.9149722e-06 5.9089903e-06 6.9531064e-06 9.4285714 + 98100 6.8885885e-07 0 6.8891311e-06 5.9064849e-06 6.9546779e-06 9.4285714 + 98200 7.2201864e-07 0 6.8704207e-06 5.8899045e-06 6.9512899e-06 9.4285714 + 98300 7.3816538e-07 0 6.8523223e-06 5.8601846e-06 6.9459414e-06 9.4285714 + 98400 7.3631403e-07 0 6.8416192e-06 5.8365194e-06 6.9566027e-06 9.4285714 + 98500 7.2568853e-07 0 6.8359315e-06 5.8202579e-06 6.9826678e-06 9.4285714 + 98600 7.0490905e-07 0 6.8305302e-06 5.8023655e-06 7.0037387e-06 9.4285714 + 98700 6.8484202e-07 0 6.8328514e-06 5.7856688e-06 7.0152903e-06 9.4285714 + 98800 6.6994522e-07 0 6.8665586e-06 5.776709e-06 7.0248186e-06 9.4285714 + 98900 6.2867752e-07 0 6.922678e-06 5.7832988e-06 7.0496494e-06 9.4285714 + 99000 5.6999626e-07 0 6.9604759e-06 5.803298e-06 7.0910089e-06 9.4285714 + 99100 5.2675078e-07 0 6.9689516e-06 5.8313501e-06 7.1326482e-06 9.4285714 + 99200 4.9993032e-07 0 6.9639452e-06 5.8639097e-06 7.1679106e-06 9.4285714 + 99300 4.8034362e-07 0 6.9673566e-06 5.8886473e-06 7.2061899e-06 9.4285714 + 99400 4.633455e-07 0 6.9801545e-06 5.9075721e-06 7.2565116e-06 9.4285714 + 99500 4.423417e-07 0 6.9834282e-06 5.9253367e-06 7.3084834e-06 9.4285714 + 99600 4.2336865e-07 0 6.967599e-06 5.9390331e-06 7.3503483e-06 9.4285714 + 99700 4.0950396e-07 0 6.9366188e-06 5.9452518e-06 7.3763135e-06 9.4285714 + 99800 3.8946719e-07 0 6.9087461e-06 5.9409744e-06 7.3965059e-06 9.4285714 + 99900 3.5789226e-07 0 6.9005219e-06 5.9283255e-06 7.4220159e-06 9.4285714 + 100000 3.23165e-07 0 6.8942094e-06 5.9113196e-06 7.4570026e-06 9.4285714 +Loop time of 178.804 on 4 procs for 100000 steps with 2520 atoms + +Performance: 2416052.451 tau/day, 559.271 timesteps/s +99.5% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.068905 | 1.0142 | 3.632 | 150.2 | 0.57 +Bond | 2.4179 | 45.255 | 152.45 | 922.4 | 25.31 +Neigh | 2.7318 | 2.7504 | 2.7587 | 0.7 | 1.54 +Comm | 2.2428 | 62.076 | 153.59 | 708.9 | 34.72 +Output | 0.14703 | 1.3253 | 2.7063 | 102.7 | 0.74 +Modify | 0.66661 | 4.887 | 15.428 | 276.1 | 2.73 +Other | | 61.5 | | | 34.39 + +Nlocal: 630 ave 2513 max 0 min +Histogram: 3 0 0 0 0 0 0 0 0 1 +Nghost: 39.25 ave 150 max 0 min +Histogram: 3 0 0 0 0 0 0 0 0 1 +Neighs: 2458 ave 9821 max 0 min +Histogram: 3 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 9832 +Ave neighs/atom = 3.9015873 +Ave special neighs/atom = 36.31746 +Neighbor list builds = 5178 +Dangerous builds = 314 +Total wall time: 0:02:58 diff --git a/examples/bpm/pour/log.27Oct2021.pour.g++.1 b/examples/bpm/pour/log.27Oct2021.pour.g++.1 deleted file mode 100644 index ea2aecd702..0000000000 --- a/examples/bpm/pour/log.27Oct2021.pour.g++.1 +++ /dev/null @@ -1,1091 +0,0 @@ -LAMMPS (27 Oct 2021) -units lj -dimension 3 -boundary m m m -atom_style sphere/bpm -special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0 -newton on off -comm_modify vel yes cutoff 3.3 -region box block -15 15 -15 15 0 60.0 -create_box 1 box bond/types 1 extra/bond/per/atom 15 extra/special/per/atom 50 -Created orthogonal box = (-15.000000 -15.000000 0.0000000) to (15.000000 15.000000 60.000000) - 1 by 1 by 1 MPI processor grid - -molecule my_mol "rect.mol" -Read molecule template my_mol: - 1 molecules - 0 fragments - 63 atoms with max type 1 - 297 bonds with max type 1 - 0 angles with max type 0 - 0 dihedrals with max type 0 - 0 impropers with max type 0 -region wall_cyl cylinder z 0.0 0.0 10.0 EDGE EDGE side in -region dropzone cylinder z 0.0 0.0 10.0 40.0 50.0 side in - -pair_style gran/hertz/history 1.0 NULL 0.5 NULL 0.1 1 -bond_style bpm/rotational -pair_coeff 1 1 -bond_coeff 1 1.0 0.2 0.01 0.01 2.0 0.4 0.02 0.02 0.2 0.04 0.002 0.002 - -compute nbond all nbond/atom -compute tbond all reduce sum c_nbond -compute_modify thermo_temp dynamic/dof yes - -fix 1 all wall/gran hertz/history 1.0 NULL 0.5 NULL 0.1 1 zplane 0.0 NULL -fix 2 all wall/gran/region hertz/history 1.0 NULL 0.5 NULL 0.1 1 region wall_cyl -fix 3 all gravity 1e-4 vector 0 0 -1 -fix 4 all deposit 40 0 1500 712511343 mol my_mol region dropzone near 2.0 vz -0.05 -0.05 -fix 5 all nve/sphere/bpm - -timestep 0.05 -thermo_style custom step ke pe pxx pyy pzz c_tbond -thermo 100 -#dump 1 all custom 500 atomDump id radius x y z c_nbond mol - -run 100000 -WARNING: No fixes with time integration, atoms won't move (../verlet.cpp:60) -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 1.3 - ghost atom cutoff = 3.3 - binsize = 0.65, bins = 47 47 93 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair gran/hertz/history, perpetual - attributes: half, newton on, size, history - pair build: half/size/bin/newton - stencil: half/bin/3d - bin: standard -Per MPI rank memory allocation (min/avg/max) = 7.455 | 7.455 | 7.455 Mbytes -Step KinEng PotEng Pxx Pyy Pzz c_tbond - 0 -0 0 0 0 0 0 - 100 0.0018350009 0 2.0294872e-07 1.2112294e-06 2.871091e-06 9.4285714 - 200 0.0026448827 0 7.6279587e-07 2.0778573e-06 3.3379229e-06 9.4285714 - 300 0.0037670874 0 3.9556015e-07 5.4333498e-06 2.9911029e-06 9.4285714 - 400 0.0060865434 0 1.6646599e-06 8.4961343e-06 4.0676208e-06 9.4285714 - 500 0.0074581799 0 1.6593722e-06 1.1564338e-05 4.2088772e-06 9.4285714 - 600 0.0078577632 0 1.1090617e-06 1.3870259e-05 3.3849787e-06 9.4285714 - 700 0.0075356935 0 1.1860992e-06 1.2423274e-05 3.9852176e-06 9.4285714 - 800 0.0073700733 0 1.2020231e-06 1.2772167e-05 3.2382575e-06 9.4285714 - 900 0.0075286722 0 1.1889762e-06 1.3249052e-05 3.1364682e-06 9.4285714 - 1000 0.0075662049 0 9.7821223e-07 1.3244288e-05 3.4489011e-06 9.4285714 - 1100 0.0075478247 0 2.1523741e-06 1.2154775e-05 3.3141837e-06 9.4285714 - 1200 0.0075157382 0 1.8293606e-06 1.2430238e-05 3.2847737e-06 9.4285714 - 1300 0.0075727908 0 1.8169654e-06 1.24965e-05 3.3704876e-06 9.4285714 - 1400 0.0076061393 0 3.235313e-06 1.0568101e-05 3.9516909e-06 9.4285714 - 1500 0.0075843344 0 2.8081603e-06 1.1079699e-05 3.8236112e-06 9.4285714 - 1600 0.0059669597 0 4.3734615e-06 1.6939808e-05 6.562706e-06 9.4285714 - 1700 0.0080609915 0 5.879456e-06 2.4453021e-05 7.3267921e-06 9.4285714 - 1800 0.008774447 0 5.9362465e-06 2.7360342e-05 7.6740751e-06 9.4285714 - 1900 0.0087088165 0 6.1871839e-06 2.651416e-05 7.9542363e-06 9.4285714 - 2000 0.0087013604 0 6.265003e-06 2.6273818e-05 8.0842249e-06 9.4285714 - 2100 0.0084280051 0 6.9477803e-06 2.5301892e-05 9.0531791e-06 9.4285714 - 2200 0.0083665332 0 8.2583657e-06 2.3408918e-05 8.5164662e-06 9.4285714 - 2300 0.0083481041 0 8.3655638e-06 2.2441951e-05 8.1588379e-06 9.4285714 - 2400 0.0082989206 0 7.8320098e-06 2.214764e-05 8.7594404e-06 9.4285714 - 2500 0.0083831827 0 7.2186023e-06 2.2823611e-05 9.08778e-06 9.4285714 - 2600 0.0084024229 0 7.0626722e-06 2.2893292e-05 9.2638369e-06 9.4285714 - 2700 0.0083044462 0 7.4847584e-06 2.3286575e-05 1.0147536e-05 9.4285714 - 2800 0.0073772276 0 1.0024518e-05 1.6545269e-05 1.0697191e-05 9.4285714 - 2900 0.0072858299 0 8.9107749e-06 1.4628491e-05 1.0788204e-05 9.4285714 - 3000 0.0073545918 0 8.7084385e-06 1.4498263e-05 1.1127326e-05 9.4285714 - 3100 0.0050344502 0 7.4556928e-06 1.3880959e-05 1.3917065e-05 9.4285714 - 3200 0.0046675954 0 5.8496582e-06 1.1874352e-05 1.4957017e-05 9.4285714 - 3300 0.0047886619 0 5.7824084e-06 1.161982e-05 1.6128046e-05 9.4285714 - 3400 0.00489288 0 6.1521355e-06 1.2558603e-05 1.5545005e-05 9.4285714 - 3500 0.0048680793 0 6.1955156e-06 1.3253713e-05 1.5278308e-05 9.4285714 - 3600 0.0047352707 0 7.3854257e-06 1.4018671e-05 1.5533577e-05 9.4285714 - 3700 0.0045830654 0 7.1583188e-06 1.3009973e-05 1.5272757e-05 9.4285714 - 3800 0.0045912189 0 6.5859855e-06 1.1783995e-05 1.4978946e-05 9.4285714 - 3900 0.0048199975 0 6.5690779e-06 1.2452714e-05 1.5303577e-05 9.4285714 - 4000 0.0049854953 0 6.6919549e-06 1.2702667e-05 1.5574985e-05 9.4285714 - 4100 0.0047079715 0 6.2456272e-06 1.1323218e-05 1.5395214e-05 9.4285714 - 4200 0.0035982053 0 3.5916235e-06 6.8770095e-06 1.4730341e-05 9.4285714 - 4300 0.0033625459 0 1.7656845e-06 4.2750955e-06 1.7523659e-05 9.4285714 - 4400 0.0034461056 0 2.2099337e-06 4.5177405e-06 1.7408442e-05 9.4285714 - 4500 0.0035090592 0 2.7074645e-06 4.4855286e-06 1.7382374e-05 9.4285714 - 4600 0.0030519096 0 3.1016681e-06 4.7949192e-06 2.0596545e-05 9.4285714 - 4700 0.0031819672 0 3.7145451e-06 6.3384226e-06 1.9656789e-05 9.4285714 - 4800 0.0032095496 0 5.096181e-06 7.0013771e-06 1.7867337e-05 9.4285714 - 4900 0.0030538715 0 4.7384172e-06 5.7611937e-06 1.800963e-05 9.4285714 - 5000 0.0030324633 0 5.007129e-06 5.6513445e-06 1.7651679e-05 9.4285714 - 5100 0.003120367 0 5.7795755e-06 6.4553695e-06 1.6895586e-05 9.4285714 - 5200 0.0031069446 0 5.7231207e-06 6.3517612e-06 1.6929949e-05 9.4285714 - 5300 0.0030959699 0 5.7289124e-06 5.7901275e-06 1.7380847e-05 9.4285714 - 5400 0.0032639481 0 6.122899e-06 6.5875034e-06 1.7759717e-05 9.4285714 - 5500 0.0033064076 0 5.6716333e-06 5.9987588e-06 1.9195033e-05 9.4285714 - 5600 0.0032361922 0 4.991911e-06 4.8111961e-06 2.0405732e-05 9.4285714 - 5700 0.0033168593 0 5.3999623e-06 4.9594866e-06 2.0602844e-05 9.4285714 - 5800 0.0033344871 0 4.4373847e-06 4.0635748e-06 2.2625841e-05 9.4285714 - 5900 0.0033044802 0 3.4888766e-06 3.9362313e-06 2.4472573e-05 9.4285714 - 6000 0.0027700932 0 3.6039441e-06 3.8782353e-06 2.4639519e-05 9.4285714 - 6100 0.0026401032 0 3.832274e-06 5.4942423e-06 2.631778e-05 9.4285714 - 6200 0.0026500233 0 2.373142e-06 5.7019869e-06 2.355138e-05 9.4285714 - 6300 0.0025231856 0 1.6690228e-06 4.9886027e-06 2.2789881e-05 9.4285714 - 6400 0.003410422 0 5.2238416e-06 1.1212411e-05 2.3401372e-05 9.4285714 - 6500 0.0039402586 0 6.2826511e-06 1.511721e-05 2.4633176e-05 9.4285714 - 6600 0.0039235109 0 4.4912299e-06 1.7815303e-05 2.3499406e-05 9.4285714 - 6700 0.003825182 0 5.4728549e-06 1.7800141e-05 2.3900789e-05 9.4285714 - 6800 0.0038319191 0 6.409485e-06 1.5032008e-05 2.7723011e-05 9.4285714 - 6900 0.0036896196 0 5.6371248e-06 1.6368975e-05 2.9097845e-05 9.4285714 - 7000 0.0031500683 0 6.5008792e-06 1.1791622e-05 3.1433351e-05 9.4285714 - 7100 0.0031128224 0 7.1533095e-06 1.1150888e-05 3.3237324e-05 9.4285714 - 7200 0.0035389111 0 6.3706153e-06 1.3264086e-05 3.3037967e-05 9.4285714 - 7300 0.0037309937 0 4.1353505e-06 1.4005376e-05 3.1405251e-05 9.4285714 - 7400 0.0036308845 0 3.0015673e-06 1.2772593e-05 2.864914e-05 9.4285714 - 7500 0.0037287271 0 2.6734458e-06 1.2667855e-05 2.8558075e-05 9.4285714 - 7600 0.0035038312 0 2.9420411e-06 1.2900066e-05 3.3224718e-05 9.4285714 - 7700 0.0034977225 0 4.2246416e-06 1.1694196e-05 3.3064037e-05 9.4285714 - 7800 0.0036630829 0 6.8573002e-06 1.1442507e-05 3.2998787e-05 9.4285714 - 7900 0.0040321834 0 1.1044243e-05 1.1684923e-05 3.3737415e-05 9.4285714 - 8000 0.0044542478 0 1.6177547e-05 1.1128289e-05 3.5092515e-05 9.4285714 - 8100 0.0049699876 0 2.3026042e-05 9.856308e-06 3.6725484e-05 9.4285714 - 8200 0.0051388155 0 2.7255576e-05 8.158855e-06 3.655618e-05 9.4285714 - 8300 0.0050888399 0 2.7979276e-05 6.9929851e-06 3.6388665e-05 9.4285714 - 8400 0.0052714914 0 2.9442974e-05 5.8756719e-06 3.8709494e-05 9.4285714 - 8500 0.0053478294 0 3.0604207e-05 5.4317719e-06 3.8975969e-05 9.4285714 - 8600 0.0052053706 0 3.0237725e-05 5.8408789e-06 3.7844368e-05 9.4285714 - 8700 0.0052929082 0 3.0029596e-05 6.9024161e-06 3.875354e-05 9.4285714 - 8800 0.0054247989 0 3.1357272e-05 6.935255e-06 4.0028596e-05 9.4285714 - 8900 0.005369785 0 3.0922676e-05 6.3120795e-06 3.9719251e-05 9.4285714 - 9000 0.0053432698 0 2.9675587e-05 6.386874e-06 3.8990769e-05 9.4285714 - 9100 0.0048441075 0 2.9859464e-05 6.7377794e-06 4.2531558e-05 9.4285714 - 9200 0.0049104595 0 3.0121025e-05 6.618976e-06 4.3471176e-05 9.4285714 - 9300 0.0048682236 0 2.9768524e-05 7.7725842e-06 4.392645e-05 9.4285714 - 9400 0.004676996 0 2.7538288e-05 9.4543991e-06 4.5639123e-05 9.4285714 - 9500 0.0046378017 0 2.4529208e-05 9.1396795e-06 4.767164e-05 9.4285714 - 9600 0.0045792212 0 1.9910681e-05 8.5919271e-06 4.8540466e-05 9.4285714 - 9700 0.0045026597 0 1.7477389e-05 8.7877512e-06 4.9271659e-05 9.4285714 - 9800 0.0046593892 0 1.9271529e-05 9.5223406e-06 4.9282528e-05 9.4285714 - 9900 0.0048613886 0 1.841469e-05 9.7249931e-06 5.298331e-05 9.4285714 - 10000 0.0048016614 0 1.6287149e-05 8.8584232e-06 5.4417573e-05 9.4285714 - 10100 0.004629566 0 1.5608718e-05 8.2422763e-06 5.1762362e-05 9.4285714 - 10200 0.0046167654 0 1.4254364e-05 9.549134e-06 5.1613642e-05 9.4285714 - 10300 0.0045424437 0 1.0038866e-05 1.1292797e-05 5.2877582e-05 9.4285714 - 10400 0.0042848338 0 5.957236e-06 1.2157429e-05 5.1882798e-05 9.4285714 - 10500 0.0043376608 0 6.6010743e-06 1.327538e-05 5.1524134e-05 9.4285714 - 10600 0.0045751733 0 9.7449183e-06 2.1947108e-05 5.4593835e-05 9.4285714 - 10700 0.0054702498 0 1.2123131e-05 3.5114277e-05 5.5400434e-05 9.4285714 - 10800 0.0058054633 0 9.8645409e-06 4.3018204e-05 5.5982935e-05 9.4285714 - 10900 0.0057301758 0 8.700948e-06 4.2514633e-05 5.5991782e-05 9.4285714 - 11000 0.0057973554 0 1.0495609e-05 4.0846878e-05 5.6902294e-05 9.4285714 - 11100 0.005780069 0 9.1573225e-06 4.0482604e-05 5.8275422e-05 9.4285714 - 11200 0.0056209261 0 7.7034555e-06 3.8854101e-05 5.8383813e-05 9.4285714 - 11300 0.0056211041 0 8.5828353e-06 3.760067e-05 5.8758305e-05 9.4285714 - 11400 0.0056927081 0 9.6598158e-06 3.6563652e-05 6.0056441e-05 9.4285714 - 11500 0.0053957879 0 1.0685774e-05 3.5859051e-05 5.5347366e-05 9.4285714 - 11600 0.0053147234 0 1.0730575e-05 3.8103571e-05 5.2133105e-05 9.4285714 - 11700 0.0053448737 0 1.1693484e-05 3.7473956e-05 5.257783e-05 9.4285714 - 11800 0.0053498893 0 1.2384545e-05 3.381605e-05 5.6148408e-05 9.4285714 - 11900 0.005304828 0 1.0084261e-05 3.681835e-05 5.5353768e-05 9.4285714 - 12000 0.0052215204 0 1.0470404e-05 3.4333184e-05 5.672629e-05 9.4285714 - 12100 0.0049126885 0 1.0941321e-05 3.5518615e-05 5.997024e-05 9.4285714 - 12200 0.0049781345 0 9.147148e-06 3.630276e-05 6.1403027e-05 9.4285714 - 12300 0.0049275083 0 9.1254734e-06 3.840315e-05 5.8646864e-05 9.4285714 - 12400 0.0048758384 0 1.01181e-05 3.7803992e-05 5.6731505e-05 9.4285714 - 12500 0.0047755125 0 9.9005549e-06 3.6670805e-05 5.3952282e-05 9.4285714 - 12600 0.004577203 0 8.7572723e-06 3.311807e-05 5.4269014e-05 9.4285714 - 12700 0.0044346961 0 8.6941249e-06 2.3729287e-05 6.0741316e-05 9.4285714 - 12800 0.0044227077 0 9.8185292e-06 1.729171e-05 6.5805762e-05 9.4285714 - 12900 0.0043367392 0 9.6654371e-06 1.8616267e-05 6.2809705e-05 9.4285714 - 13000 0.0041738636 0 8.3919664e-06 2.1618677e-05 5.7662042e-05 9.4285714 - 13100 0.0042795324 0 9.2394692e-06 2.6224333e-05 5.4431555e-05 9.4285714 - 13200 0.0044161381 0 9.7879739e-06 3.0048532e-05 5.2930014e-05 9.4285714 - 13300 0.0044174234 0 9.1633936e-06 3.1842125e-05 5.1781495e-05 9.4285714 - 13400 0.0043768306 0 9.1573101e-06 2.981597e-05 5.2952519e-05 9.4285714 - 13500 0.0044286904 0 9.918627e-06 2.7567265e-05 5.5537207e-05 9.4285714 - 13600 0.0039796345 0 1.0820871e-05 2.0870525e-05 6.1782819e-05 9.4285714 - 13700 0.003564057 0 1.1896922e-05 1.7813715e-05 5.7017165e-05 9.4285714 - 13800 0.0038316601 0 1.5383128e-05 2.1627099e-05 5.5289648e-05 9.4285714 - 13900 0.0042111447 0 1.8105571e-05 2.3643088e-05 5.7085419e-05 9.4285714 - 14000 0.0047964469 0 2.286261e-05 3.019208e-05 5.892366e-05 9.4285714 - 14100 0.0047837803 0 2.3179811e-05 3.1413746e-05 5.7063453e-05 9.4285714 - 14200 0.0046565568 0 2.3228686e-05 2.8973989e-05 5.6469563e-05 9.4285714 - 14300 0.004794553 0 2.287645e-05 3.0662974e-05 5.8354413e-05 9.4285714 - 14400 0.0047997654 0 2.1176059e-05 3.1932208e-05 5.8908158e-05 9.4285714 - 14500 0.0046011182 0 1.9043677e-05 3.0288317e-05 5.8045274e-05 9.4285714 - 14600 0.0045145422 0 1.9050731e-05 2.8938872e-05 5.7647482e-05 9.4285714 - 14700 0.0045399428 0 2.1209987e-05 3.0700121e-05 6.0950549e-05 9.4285714 - 14800 0.0042672079 0 1.9868523e-05 3.4771923e-05 5.9179242e-05 9.4285714 - 14900 0.0038189786 0 2.1607031e-05 2.9356106e-05 5.690017e-05 9.4285714 - 15000 0.003683925 0 2.1862146e-05 2.5542381e-05 5.3848155e-05 9.4285714 - 15100 0.0039795318 0 2.9518335e-05 2.536914e-05 5.6127098e-05 9.4285714 - 15200 0.0046787 0 4.3771068e-05 2.6553802e-05 5.5962774e-05 9.4285714 - 15300 0.00489572 0 5.2899281e-05 2.0539323e-05 5.6365553e-05 9.4285714 - 15400 0.004897386 0 5.2664322e-05 1.888198e-05 5.5292376e-05 9.4285714 - 15500 0.0050380036 0 5.1766791e-05 2.1682715e-05 5.6557261e-05 9.4285714 - 15600 0.0049743522 0 5.0992042e-05 2.1247749e-05 5.7194932e-05 9.4285714 - 15700 0.0047899482 0 4.8911389e-05 1.9991649e-05 5.640592e-05 9.4285714 - 15800 0.0048382224 0 4.8348685e-05 2.0089252e-05 5.7572971e-05 9.4285714 - 15900 0.0049101807 0 4.7651893e-05 2.2501218e-05 5.8214366e-05 9.4285714 - 16000 0.0049905463 0 4.5858265e-05 2.3126493e-05 6.0944362e-05 9.4285714 - 16100 0.0046448452 0 4.4314129e-05 2.1836233e-05 5.589425e-05 9.4285714 - 16200 0.0046601006 0 4.1728018e-05 2.3517029e-05 5.6339343e-05 9.4285714 - 16300 0.004780226 0 4.0944727e-05 2.3642991e-05 5.8587055e-05 9.4285714 - 16400 0.0043004453 0 3.9801403e-05 1.6463582e-05 5.4164428e-05 9.4285714 - 16500 0.0043384733 0 3.8887191e-05 1.5887269e-05 5.6616198e-05 9.4285714 - 16600 0.004156164 0 3.8326889e-05 1.7422958e-05 6.0654966e-05 9.4285714 - 16700 0.0042382612 0 3.9918859e-05 1.7581446e-05 6.1202411e-05 9.4285714 - 16800 0.0043452092 0 4.1562678e-05 1.9456013e-05 6.0686455e-05 9.4285714 - 16900 0.0044068786 0 4.3172802e-05 2.1999677e-05 5.9727732e-05 9.4285714 - 17000 0.0044625721 0 4.472355e-05 2.2735882e-05 5.8748648e-05 9.4285714 - 17100 0.004469787 0 4.6129796e-05 2.3600605e-05 5.9653903e-05 9.4285714 - 17200 0.0045972082 0 4.8242815e-05 3.1122761e-05 6.0890685e-05 9.4285714 - 17300 0.0047150968 0 4.5680627e-05 3.2921314e-05 5.7738419e-05 9.4285714 - 17400 0.0047283145 0 4.4250459e-05 3.2831247e-05 5.6700093e-05 9.4285714 - 17500 0.004503305 0 4.547322e-05 3.6123423e-05 5.2412154e-05 9.4285714 - 17600 0.0041759054 0 4.5356219e-05 3.7031236e-05 4.4035172e-05 9.4285714 - 17700 0.0041896355 0 4.511856e-05 3.759129e-05 4.1440018e-05 9.4285714 - 17800 0.00436712 0 4.4724782e-05 3.6086114e-05 4.3792525e-05 9.4285714 - 17900 0.0044146094 0 4.2913404e-05 3.8371827e-05 4.346304e-05 9.4285714 - 18000 0.0042302642 0 3.7447854e-05 3.93605e-05 4.2719307e-05 9.4285714 - 18100 0.0036293574 0 2.8433465e-05 3.8569829e-05 4.4862074e-05 9.4285714 - 18200 0.0034838062 0 2.6316266e-05 3.8119164e-05 4.4753248e-05 9.4285714 - 18300 0.0036284577 0 3.1896705e-05 4.0169016e-05 4.7756073e-05 9.4285714 - 18400 0.0036353723 0 3.2033387e-05 4.1466797e-05 4.4168992e-05 9.4285714 - 18500 0.0035492177 0 3.0749494e-05 3.8864993e-05 4.1650541e-05 9.4285714 - 18600 0.0036032456 0 3.0574301e-05 3.7967397e-05 4.1511478e-05 9.4285714 - 18700 0.0035846336 0 3.0312221e-05 3.8202387e-05 4.2306204e-05 9.4285714 - 18800 0.0035121845 0 2.9379858e-05 3.9891233e-05 4.1817666e-05 9.4285714 - 18900 0.0034245548 0 2.9131824e-05 3.8008479e-05 4.0179486e-05 9.4285714 - 19000 0.0034834924 0 2.9993906e-05 3.7656312e-05 4.0247454e-05 9.4285714 - 19100 0.0035654883 0 3.0498102e-05 4.0668284e-05 4.1077887e-05 9.4285714 - 19200 0.0032066097 0 2.7514914e-05 3.3140912e-05 4.1108971e-05 9.4285714 - 19300 0.0027432538 0 2.5505766e-05 1.9538479e-05 4.1850527e-05 9.4285714 - 19400 0.0029010974 0 2.5712536e-05 2.4758438e-05 4.1276335e-05 9.4285714 - 19500 0.0029436612 0 2.494891e-05 2.7516331e-05 4.1866423e-05 9.4285714 - 19600 0.0029189539 0 2.4190472e-05 2.8861551e-05 4.6075827e-05 9.4285714 - 19700 0.0029247275 0 2.4203468e-05 2.7797343e-05 4.647369e-05 9.4285714 - 19800 0.0029045179 0 2.2730011e-05 2.6616627e-05 4.6257024e-05 9.4285714 - 19900 0.002907703 0 2.1695053e-05 2.6733341e-05 4.7071277e-05 9.4285714 - 20000 0.0029451599 0 2.1508761e-05 2.7104587e-05 4.7720852e-05 9.4285714 - 20100 0.0029483838 0 2.2042113e-05 2.6603749e-05 4.8005426e-05 9.4285714 - 20200 0.0029387238 0 2.1190647e-05 2.6517959e-05 4.9103687e-05 9.4285714 - 20300 0.002950486 0 2.0128641e-05 2.718872e-05 5.0450153e-05 9.4285714 - 20400 0.002958757 0 2.0418098e-05 2.691014e-05 4.9967877e-05 9.4285714 - 20500 0.0029656895 0 2.0153597e-05 2.6160383e-05 5.0902619e-05 9.4285714 - 20600 0.0029368331 0 1.9907915e-05 2.5235697e-05 5.247696e-05 9.4285714 - 20700 0.0029028666 0 1.9602049e-05 2.5733067e-05 5.4111095e-05 9.4285714 - 20800 0.0028956447 0 1.8631385e-05 2.6248063e-05 5.5192088e-05 9.4285714 - 20900 0.0028928514 0 1.8773527e-05 2.4804374e-05 5.604069e-05 9.4285714 - 21000 0.002927052 0 1.8652814e-05 2.3482004e-05 5.6701737e-05 9.4285714 - 21100 0.0028687497 0 2.2436016e-05 2.325233e-05 5.8808647e-05 9.4285714 - 21200 0.0029342036 0 2.7929348e-05 2.2400408e-05 5.7946712e-05 9.4285714 - 21300 0.0030950366 0 3.1124481e-05 2.195109e-05 5.8965786e-05 9.4285714 - 21400 0.0031484691 0 3.2721012e-05 2.110025e-05 5.9576336e-05 9.4285714 - 21500 0.0031234671 0 2.992994e-05 2.2666267e-05 5.9993685e-05 9.4285714 - 21600 0.0030508633 0 2.6789013e-05 2.3621322e-05 5.8458366e-05 9.4285714 - 21700 0.0030087355 0 2.5882658e-05 2.1811479e-05 5.8138611e-05 9.4285714 - 21800 0.0029999465 0 2.6188787e-05 2.0450957e-05 5.8378928e-05 9.4285714 - 21900 0.0030672658 0 2.6711301e-05 2.1783108e-05 5.9031296e-05 9.4285714 - 22000 0.0030649769 0 2.8127147e-05 2.2662838e-05 6.0082454e-05 9.4285714 - 22100 0.0029894542 0 2.6349183e-05 2.2764179e-05 6.149193e-05 9.4285714 - 22200 0.0030187811 0 2.3239983e-05 2.3111279e-05 6.0739255e-05 9.4285714 - 22300 0.0030241784 0 2.2405585e-05 2.3925574e-05 5.9718322e-05 9.4285714 - 22400 0.0029292552 0 2.0008576e-05 2.2306569e-05 6.0758983e-05 9.4285714 - 22500 0.0028783427 0 2.024055e-05 2.100428e-05 6.1045983e-05 9.4285714 - 22600 0.0028851151 0 2.3890124e-05 2.2607101e-05 6.5131875e-05 9.4285714 - 22700 0.0030123555 0 2.5669383e-05 2.4801799e-05 6.6659354e-05 9.4285714 - 22800 0.0031724489 0 2.7713701e-05 2.8877697e-05 6.4901446e-05 9.4285714 - 22900 0.003153501 0 3.1116017e-05 2.9002714e-05 6.4499332e-05 9.4285714 - 23000 0.0028839684 0 2.9814785e-05 2.870865e-05 6.2699578e-05 9.4285714 - 23100 0.0028327892 0 3.2268818e-05 2.7474127e-05 5.7685785e-05 9.4285714 - 23200 0.0029041916 0 3.0584546e-05 2.7962674e-05 5.7629015e-05 9.4285714 - 23300 0.0030488484 0 2.9936007e-05 3.0487408e-05 5.8179622e-05 9.4285714 - 23400 0.0030766604 0 3.0318751e-05 2.8740437e-05 5.7968878e-05 9.4285714 - 23500 0.0029648576 0 3.0098901e-05 2.7619913e-05 5.5570289e-05 9.4285714 - 23600 0.0030338578 0 3.0505464e-05 2.9159292e-05 5.5966373e-05 9.4285714 - 23700 0.0030630993 0 3.1115059e-05 2.8677381e-05 5.6826609e-05 9.4285714 - 23800 0.0029579183 0 3.0891276e-05 2.7187042e-05 5.4338832e-05 9.4285714 - 23900 0.002890692 0 3.0505089e-05 2.6214095e-05 5.3628324e-05 9.4285714 - 24000 0.0029008741 0 3.0352885e-05 2.7812384e-05 5.3563473e-05 9.4285714 - 24100 0.0030900998 0 3.049205e-05 3.7040342e-05 5.9311381e-05 9.4285714 - 24200 0.0034439273 0 2.9780023e-05 5.2982515e-05 6.0180452e-05 9.4285714 - 24300 0.0036183212 0 2.8868106e-05 5.9977934e-05 5.822312e-05 9.4285714 - 24400 0.0035935713 0 2.9135872e-05 6.2935218e-05 5.5769985e-05 9.4285714 - 24500 0.0035490423 0 3.3958754e-05 5.9161204e-05 5.7259127e-05 9.4285714 - 24600 0.003444716 0 2.9356924e-05 5.4834323e-05 5.9566455e-05 9.4285714 - 24700 0.0033252937 0 2.6572095e-05 5.4242067e-05 5.8366405e-05 9.4285714 - 24800 0.0032783778 0 2.2908407e-05 5.5022142e-05 5.8845283e-05 9.4285714 - 24900 0.0032446925 0 2.1047045e-05 5.4598555e-05 5.956579e-05 9.4285714 - 25000 0.0031755041 0 2.4181783e-05 5.3791926e-05 5.8327435e-05 9.4285714 - 25100 0.0030735843 0 2.8255849e-05 4.7217183e-05 5.8423683e-05 9.4285714 - 25200 0.0031627624 0 2.8876633e-05 4.3691039e-05 5.80202e-05 9.4285714 - 25300 0.0032376181 0 2.8655617e-05 4.316634e-05 5.8195158e-05 9.4285714 - 25400 0.0031900675 0 2.8070562e-05 4.344552e-05 5.5523216e-05 9.4285714 - 25500 0.0031252059 0 2.8330412e-05 4.4060357e-05 5.5051088e-05 9.4285714 - 25600 0.0029070145 0 2.958535e-05 4.569808e-05 6.4450548e-05 9.4285714 - 25700 0.0029634805 0 2.6761301e-05 4.7173742e-05 6.4575511e-05 9.4285714 - 25800 0.0030346288 0 2.732068e-05 4.893027e-05 6.2814632e-05 9.4285714 - 25900 0.0032897547 0 3.1822769e-05 5.2633037e-05 6.2913714e-05 9.4285714 - 26000 0.0033828897 0 2.6969599e-05 5.8440273e-05 6.3376263e-05 9.4285714 - 26100 0.0032804302 0 2.4627546e-05 5.7656925e-05 5.8514668e-05 9.4285714 - 26200 0.0030952966 0 2.2893916e-05 4.9871883e-05 5.881309e-05 9.4285714 - 26300 0.0030700157 0 2.6056707e-05 4.9264407e-05 5.8746718e-05 9.4285714 - 26400 0.0030018624 0 2.5157698e-05 4.8218674e-05 5.8290879e-05 9.4285714 - 26500 0.0030128669 0 2.361838e-05 4.6363551e-05 5.9898905e-05 9.4285714 - 26600 0.0031224336 0 2.7100344e-05 4.7756425e-05 5.9996778e-05 9.4285714 - 26700 0.0030621287 0 2.8214336e-05 4.6918539e-05 5.9883609e-05 9.4285714 - 26800 0.002801831 0 3.0594491e-05 3.7180434e-05 5.8149664e-05 9.4285714 - 26900 0.0027855649 0 2.8747302e-05 3.6470744e-05 5.8852335e-05 9.4285714 - 27000 0.0027965728 0 2.8557457e-05 3.6754375e-05 5.8772667e-05 9.4285714 - 27100 0.0028498232 0 3.0321835e-05 3.9638763e-05 6.1254858e-05 9.4285714 - 27200 0.0030306382 0 2.8742235e-05 4.3117508e-05 6.5765494e-05 9.4285714 - 27300 0.0031633579 0 3.0980534e-05 4.7374467e-05 6.4893722e-05 9.4285714 - 27400 0.0033711639 0 3.4928022e-05 5.2908639e-05 6.6699682e-05 9.4285714 - 27500 0.003440939 0 3.5754652e-05 5.69513e-05 6.660788e-05 9.4285714 - 27600 0.0034442256 0 3.6469475e-05 5.6958678e-05 6.5079681e-05 9.4285714 - 27700 0.0033773106 0 3.3973994e-05 5.4448746e-05 6.4541632e-05 9.4285714 - 27800 0.0033635159 0 3.5542676e-05 5.2428708e-05 6.5090857e-05 9.4285714 - 27900 0.0032430951 0 3.6426512e-05 4.6086452e-05 6.498143e-05 9.4285714 - 28000 0.0030537834 0 3.1815903e-05 3.9376804e-05 6.7546499e-05 9.4285714 - 28100 0.002979529 0 3.1253385e-05 3.7765155e-05 6.7409232e-05 9.4285714 - 28200 0.0031027317 0 3.398733e-05 4.2983013e-05 6.6027648e-05 9.4285714 - 28300 0.0030588406 0 3.5171937e-05 4.5212697e-05 6.3874666e-05 9.4285714 - 28400 0.0028451017 0 3.5738239e-05 3.7990285e-05 6.2678053e-05 9.4285714 - 28500 0.0029344027 0 3.3626147e-05 3.6949614e-05 6.2988105e-05 9.4285714 - 28600 0.0030970809 0 4.1471523e-05 4.2155367e-05 6.4408716e-05 9.4285714 - 28700 0.0034080828 0 5.096795e-05 4.3092694e-05 6.8111212e-05 9.4285714 - 28800 0.0033162928 0 5.0733984e-05 3.9221995e-05 6.7505258e-05 9.4285714 - 28900 0.0032754512 0 4.7766512e-05 3.7515038e-05 6.9173389e-05 9.4285714 - 29000 0.003238126 0 4.6516518e-05 3.8184496e-05 6.8703403e-05 9.4285714 - 29100 0.0031144549 0 4.4307505e-05 3.8533642e-05 6.7255763e-05 9.4285714 - 29200 0.0030958705 0 4.2781032e-05 3.5772459e-05 7.0469126e-05 9.4285714 - 29300 0.0031524451 0 4.3909259e-05 3.6506623e-05 7.158653e-05 9.4285714 - 29400 0.0032058697 0 4.4324384e-05 3.5776134e-05 7.4582066e-05 9.4285714 - 29500 0.0031550171 0 4.2287463e-05 3.5270423e-05 7.5078133e-05 9.4285714 - 29600 0.003060377 0 3.9992287e-05 3.2845661e-05 7.553942e-05 9.4285714 - 29700 0.0030078967 0 3.7382266e-05 3.1614436e-05 7.7145573e-05 9.4285714 - 29800 0.0029683325 0 3.5530155e-05 3.525656e-05 7.5544641e-05 9.4285714 - 29900 0.0029022749 0 3.6252284e-05 3.7610723e-05 6.9334012e-05 9.4285714 - 30000 0.0028730584 0 3.8581123e-05 3.3761112e-05 6.8781406e-05 9.4285714 - 30100 0.0029565488 0 4.0973928e-05 3.8258895e-05 7.204326e-05 9.4285714 - 30200 0.0029645256 0 4.1115755e-05 4.0104291e-05 6.8400039e-05 9.4285714 - 30300 0.002952354 0 4.4277467e-05 3.7768312e-05 6.7846989e-05 9.4285714 - 30400 0.002992831 0 4.4769103e-05 3.9482781e-05 6.8819748e-05 9.4285714 - 30500 0.0029374585 0 4.5257434e-05 4.1314931e-05 6.5216381e-05 9.4285714 - 30600 0.0028040856 0 4.5300765e-05 4.118626e-05 6.3544072e-05 9.4285714 - 30700 0.002534459 0 3.5125995e-05 3.8587256e-05 6.4771731e-05 9.4285714 - 30800 0.0024425783 0 2.7458027e-05 3.7447578e-05 6.7037394e-05 9.4285714 - 30900 0.0024938861 0 2.7825336e-05 3.8630729e-05 6.7876153e-05 9.4285714 - 31000 0.0025901523 0 2.7307882e-05 3.9917495e-05 7.0091179e-05 9.4285714 - 31100 0.0025746255 0 3.2430253e-05 4.052937e-05 6.3304574e-05 9.4285714 - 31200 0.0025241574 0 3.420853e-05 4.1057421e-05 5.9890236e-05 9.4285714 - 31300 0.002589276 0 3.3109527e-05 4.1316688e-05 5.9182072e-05 9.4285714 - 31400 0.002565266 0 3.7369446e-05 4.1540919e-05 5.7942838e-05 9.4285714 - 31500 0.0025002065 0 3.5866441e-05 4.1070997e-05 6.0205764e-05 9.4285714 - 31600 0.0024202141 0 3.2721356e-05 3.9726515e-05 6.2301684e-05 9.4285714 - 31700 0.002336607 0 3.0028614e-05 3.6886489e-05 6.4164462e-05 9.4285714 - 31800 0.002335165 0 3.1593002e-05 3.7401867e-05 6.1469771e-05 9.4285714 - 31900 0.0021619413 0 3.0901092e-05 3.5758372e-05 6.3122395e-05 9.4285714 - 32000 0.0021741167 0 2.6582456e-05 3.3205694e-05 6.2542092e-05 9.4285714 - 32100 0.0021441627 0 2.7829764e-05 3.3001177e-05 6.1759387e-05 9.4285714 - 32200 0.0021947497 0 2.9346145e-05 3.2427683e-05 6.1198864e-05 9.4285714 - 32300 0.0021403564 0 2.7822954e-05 3.0843762e-05 6.060985e-05 9.4285714 - 32400 0.0019773515 0 2.4240466e-05 2.7698677e-05 5.7620479e-05 9.4285714 - 32500 0.0018855981 0 2.4818086e-05 2.5531335e-05 5.4452608e-05 9.4285714 - 32600 0.0020216542 0 2.6264531e-05 2.622894e-05 5.6679534e-05 9.4285714 - 32700 0.0020560665 0 2.3068377e-05 2.8136569e-05 5.7543597e-05 9.4285714 - 32800 0.0020318176 0 2.1915957e-05 2.9083491e-05 5.8843804e-05 9.4285714 - 32900 0.0019355455 0 2.3724921e-05 2.8001943e-05 5.5380899e-05 9.4285714 - 33000 0.0020093393 0 2.5316564e-05 2.9736632e-05 5.6160592e-05 9.4285714 - 33100 0.0020778013 0 2.6064364e-05 3.0090151e-05 6.0244734e-05 9.4285714 - 33200 0.0020282656 0 2.8261492e-05 2.9440044e-05 5.6764857e-05 9.4285714 - 33300 0.0020166955 0 3.0172493e-05 2.8696859e-05 5.5822779e-05 9.4285714 - 33400 0.0020346487 0 3.1990398e-05 2.902236e-05 5.7566074e-05 9.4285714 - 33500 0.0020101699 0 3.1681735e-05 2.8209837e-05 5.7540015e-05 9.4285714 - 33600 0.0019321461 0 3.1520402e-05 2.6134117e-05 5.6835806e-05 9.4285714 - 33700 0.001878563 0 3.1793079e-05 2.6942797e-05 5.5209608e-05 9.4285714 - 33800 0.0019623658 0 3.3583987e-05 2.7118872e-05 5.6606564e-05 9.4285714 - 33900 0.0019006238 0 3.1751212e-05 2.8327454e-05 5.7280696e-05 9.4285714 - 34000 0.0017837211 0 3.0515346e-05 2.668634e-05 5.2294424e-05 9.4285714 - 34100 0.0017778746 0 2.7603449e-05 2.5416615e-05 5.2918074e-05 9.4285714 - 34200 0.0017695316 0 2.9475899e-05 2.5303335e-05 5.4472754e-05 9.4285714 - 34300 0.0016831966 0 2.902148e-05 2.211432e-05 5.3838362e-05 9.4285714 - 34400 0.0015748654 0 2.6159089e-05 1.7899119e-05 5.2018972e-05 9.4285714 - 34500 0.0016145322 0 2.4363507e-05 1.7807922e-05 5.3394185e-05 9.4285714 - 34600 0.0016832855 0 2.7085155e-05 1.9733202e-05 5.8299284e-05 9.4285714 - 34700 0.0017013619 0 2.8008832e-05 1.6841423e-05 5.6181895e-05 9.4285714 - 34800 0.0016796176 0 2.6241933e-05 1.7089284e-05 5.5590045e-05 9.4285714 - 34900 0.0017029668 0 2.6856188e-05 1.8318905e-05 5.8069304e-05 9.4285714 - 35000 0.0017456776 0 2.6317936e-05 1.8223427e-05 6.0245056e-05 9.4285714 - 35100 0.0016610753 0 2.2702891e-05 1.6610636e-05 5.7081353e-05 9.4285714 - 35200 0.0014978972 0 1.8955009e-05 1.5397302e-05 5.259939e-05 9.4285714 - 35300 0.0015699203 0 1.9692025e-05 1.9033953e-05 5.5012397e-05 9.4285714 - 35400 0.0016206776 0 2.230034e-05 1.9594198e-05 5.7653613e-05 9.4285714 - 35500 0.0015848867 0 2.2353279e-05 1.8705004e-05 5.6012831e-05 9.4285714 - 35600 0.0015352613 0 2.116555e-05 1.920694e-05 5.494557e-05 9.4285714 - 35700 0.0015450228 0 2.0595484e-05 2.0214809e-05 5.4431069e-05 9.4285714 - 35800 0.0015486128 0 2.0832884e-05 1.9567068e-05 5.4620701e-05 9.4285714 - 35900 0.0014953229 0 2.0526092e-05 1.7445484e-05 5.5868303e-05 9.4285714 - 36000 0.0015006807 0 2.0952361e-05 1.7155777e-05 5.7625805e-05 9.4285714 - 36100 0.0015620182 0 2.1368837e-05 2.2426032e-05 6.1437747e-05 9.4285714 - 36200 0.0016483521 0 1.946668e-05 2.8773048e-05 5.7756049e-05 9.4285714 - 36300 0.0017026791 0 1.870469e-05 2.8986272e-05 5.7939347e-05 9.4285714 - 36400 0.0018960648 0 1.8127793e-05 4.0625998e-05 5.7983644e-05 9.4285714 - 36500 0.0019397075 0 1.7254077e-05 4.5355628e-05 5.7146049e-05 9.4285714 - 36600 0.0019573518 0 1.8892393e-05 4.2551729e-05 5.9434037e-05 9.4285714 - 36700 0.0019272233 0 1.8211007e-05 4.145998e-05 5.888082e-05 9.4285714 - 36800 0.0019357487 0 1.7162941e-05 4.4342924e-05 5.6465777e-05 9.4285714 - 36900 0.0019905654 0 1.7569025e-05 4.4947515e-05 5.7507205e-05 9.4285714 - 37000 0.0019785585 0 1.8117504e-05 4.2068953e-05 5.8858967e-05 9.4285714 - 37100 0.0019220173 0 1.7633836e-05 4.2255246e-05 5.8153368e-05 9.4285714 - 37200 0.0017723352 0 2.0268851e-05 3.5130312e-05 6.2202448e-05 9.4285714 - 37300 0.0016856231 0 2.2393891e-05 3.2693951e-05 6.3412968e-05 9.4285714 - 37400 0.0016684941 0 2.3054142e-05 2.7111404e-05 6.6647518e-05 9.4285714 - 37500 0.0017165609 0 1.7612583e-05 2.7542011e-05 6.4252707e-05 9.4285714 - 37600 0.0017658691 0 1.6025966e-05 2.831781e-05 6.7539111e-05 9.4285714 - 37700 0.0018445619 0 1.6969334e-05 2.8824922e-05 6.9311515e-05 9.4285714 - 37800 0.0018502362 0 1.8553064e-05 2.9278745e-05 6.9624227e-05 9.4285714 - 37900 0.0017907475 0 2.0611098e-05 3.2013273e-05 6.6271935e-05 9.4285714 - 38000 0.0017844649 0 2.0702099e-05 3.4102854e-05 6.6219151e-05 9.4285714 - 38100 0.0017592556 0 2.0158725e-05 3.3458293e-05 6.6671944e-05 9.4285714 - 38200 0.0017106057 0 1.9011419e-05 3.2045869e-05 6.4867673e-05 9.4285714 - 38300 0.0017193203 0 1.8669932e-05 3.0674752e-05 6.5939302e-05 9.4285714 - 38400 0.001763257 0 1.9511511e-05 3.2026977e-05 6.8129954e-05 9.4285714 - 38500 0.0017621294 0 1.963196e-05 3.1826261e-05 6.7915242e-05 9.4285714 - 38600 0.001746854 0 1.8396231e-05 3.0340053e-05 6.7062356e-05 9.4285714 - 38700 0.0017463258 0 1.7977359e-05 3.1310072e-05 6.7033134e-05 9.4285714 - 38800 0.0017106758 0 1.5591586e-05 2.8830625e-05 6.7170521e-05 9.4285714 - 38900 0.0016358432 0 1.5790284e-05 2.4845758e-05 6.6098943e-05 9.4285714 - 39000 0.001545563 0 1.6696675e-05 2.0221676e-05 6.5306282e-05 9.4285714 - 39100 0.001539701 0 1.7191361e-05 1.9743765e-05 6.9525471e-05 9.4285714 - 39200 0.0015947183 0 1.8155375e-05 2.1442281e-05 7.0537856e-05 9.4285714 - 39300 0.0016492814 0 2.0363079e-05 2.0913068e-05 7.1366505e-05 9.4285714 - 39400 0.0016551151 0 2.2662003e-05 2.2074658e-05 6.8988376e-05 9.4285714 - 39500 0.0017683725 0 2.6720911e-05 2.700378e-05 6.8052345e-05 9.4285714 - 39600 0.0018907917 0 3.261088e-05 2.6587314e-05 7.0110807e-05 9.4285714 - 39700 0.0019255704 0 3.7559741e-05 2.8514061e-05 6.8088798e-05 9.4285714 - 39800 0.00188804 0 3.453634e-05 2.9656226e-05 6.9033371e-05 9.4285714 - 39900 0.0019053391 0 3.1876945e-05 2.8716899e-05 6.9832708e-05 9.4285714 - 40000 0.0018708103 0 3.292001e-05 2.8877575e-05 7.1168302e-05 9.4285714 - 40100 0.0018451966 0 3.6297763e-05 2.7101619e-05 7.0691543e-05 9.4285714 - 40200 0.0018045971 0 3.9260538e-05 2.3304537e-05 6.7999118e-05 9.4285714 - 40300 0.0018092091 0 3.8584234e-05 2.1810701e-05 6.5023109e-05 9.4285714 - 40400 0.001761241 0 3.5889663e-05 2.0682927e-05 6.4149984e-05 9.4285714 - 40500 0.0017160542 0 3.4443097e-05 1.8646469e-05 6.2782599e-05 9.4285714 - 40600 0.0017299577 0 3.4236907e-05 1.9402164e-05 6.607431e-05 9.4285714 - 40700 0.0017673853 0 3.3665028e-05 2.0466517e-05 6.8746602e-05 9.4285714 - 40800 0.0017380057 0 3.4144649e-05 2.1522794e-05 6.683155e-05 9.4285714 - 40900 0.0016234094 0 3.2205243e-05 2.2727612e-05 6.6834429e-05 9.4285714 - 41000 0.0014291917 0 2.6396353e-05 2.6107729e-05 6.4056486e-05 9.4285714 - 41100 0.0014712446 0 2.5570053e-05 3.3399552e-05 6.3195627e-05 9.4285714 - 41200 0.0014846 0 2.6271678e-05 3.7303151e-05 6.0488751e-05 9.4285714 - 41300 0.001450828 0 2.5065396e-05 3.8605231e-05 5.8603276e-05 9.4285714 - 41400 0.0014186092 0 2.3453926e-05 3.4894681e-05 5.8941274e-05 9.4285714 - 41500 0.0014050141 0 2.3681829e-05 3.2835402e-05 5.9498759e-05 9.4285714 - 41600 0.0014213984 0 2.3939336e-05 3.2895676e-05 5.8690287e-05 9.4285714 - 41700 0.001443982 0 2.0909644e-05 3.1032787e-05 5.7524565e-05 9.4285714 - 41800 0.0014062649 0 2.1031052e-05 2.9520592e-05 5.4827218e-05 9.4285714 - 41900 0.0013996312 0 2.2054442e-05 2.8642711e-05 5.5162316e-05 9.4285714 - 42000 0.0013967112 0 2.2021674e-05 2.865302e-05 5.3439274e-05 9.4285714 - 42100 0.0014200679 0 2.3093083e-05 3.3059301e-05 5.6709165e-05 9.4285714 - 42200 0.0014938722 0 2.4401158e-05 3.8130343e-05 5.6829122e-05 9.4285714 - 42300 0.0014662918 0 2.5306573e-05 4.0350104e-05 5.5731632e-05 9.4285714 - 42400 0.0014822399 0 2.541272e-05 3.6567141e-05 5.6918972e-05 9.4285714 - 42500 0.001479816 0 2.536052e-05 3.4187028e-05 5.6499453e-05 9.4285714 - 42600 0.0014761906 0 2.6832838e-05 3.2924587e-05 5.4349636e-05 9.4285714 - 42700 0.0014657972 0 2.5603852e-05 3.1449126e-05 5.4077995e-05 9.4285714 - 42800 0.0014299281 0 2.514425e-05 3.0935569e-05 5.560261e-05 9.4285714 - 42900 0.0013584545 0 2.1632085e-05 2.8445644e-05 5.6520894e-05 9.4285714 - 43000 0.0013381995 0 1.9596599e-05 2.9249369e-05 5.4291206e-05 9.4285714 - 43100 0.0013342491 0 2.0197061e-05 3.1609968e-05 5.2307195e-05 9.4285714 - 43200 0.0013703327 0 2.147162e-05 3.2020951e-05 5.3461255e-05 9.4285714 - 43300 0.0013593846 0 2.199084e-05 3.206016e-05 5.3447421e-05 9.4285714 - 43400 0.0012993032 0 2.0440912e-05 3.161841e-05 5.3026991e-05 9.4285714 - 43500 0.001324888 0 1.8933513e-05 3.244492e-05 5.3025756e-05 9.4285714 - 43600 0.0013849294 0 2.0125223e-05 3.6308493e-05 5.5223498e-05 9.4285714 - 43700 0.0014592413 0 2.4789141e-05 3.9210247e-05 5.5005034e-05 9.4285714 - 43800 0.0015842633 0 2.9376746e-05 4.471493e-05 5.4832286e-05 9.4285714 - 43900 0.0016983192 0 3.368927e-05 4.9501047e-05 5.7946888e-05 9.4285714 - 44000 0.0017308494 0 3.5302108e-05 5.1925127e-05 5.5489717e-05 9.4285714 - 44100 0.0016762137 0 3.296847e-05 4.9656293e-05 5.7453997e-05 9.4285714 - 44200 0.0016693093 0 3.1338668e-05 4.8594593e-05 5.4593408e-05 9.4285714 - 44300 0.0016858084 0 3.3131465e-05 4.8034805e-05 5.4765941e-05 9.4285714 - 44400 0.0016397333 0 3.2446822e-05 4.4299316e-05 5.542227e-05 9.4285714 - 44500 0.0015275026 0 3.03152e-05 4.0102051e-05 5.2535492e-05 9.4285714 - 44600 0.0015268479 0 3.0118206e-05 4.1006288e-05 5.3147052e-05 9.4285714 - 44700 0.001255645 0 3.5055531e-05 4.0462972e-05 6.1228919e-05 9.4285714 - 44800 0.0011731958 0 3.9072933e-05 3.2238215e-05 5.8707559e-05 9.4285714 - 44900 0.0011964835 0 2.8812272e-05 2.9210324e-05 4.940709e-05 9.4285714 - 45000 0.0012410494 0 2.9841189e-05 2.6890231e-05 4.6988833e-05 9.4285714 - 45100 0.001230235 0 3.0345804e-05 2.5454862e-05 4.75955e-05 9.4285714 - 45200 0.0012461498 0 3.2644348e-05 2.3020389e-05 4.7365747e-05 9.4285714 - 45300 0.0012550498 0 3.4658477e-05 2.208126e-05 4.5686217e-05 9.4285714 - 45400 0.0013223338 0 3.6429502e-05 2.2794832e-05 4.6369578e-05 9.4285714 - 45500 0.0013779082 0 4.1107745e-05 2.3543502e-05 4.7414768e-05 9.4285714 - 45600 0.0014152925 0 4.5350047e-05 2.2288056e-05 4.8197525e-05 9.4285714 - 45700 0.0014676538 0 4.5312484e-05 2.4249691e-05 4.9069857e-05 9.4285714 - 45800 0.0015554218 0 4.8184013e-05 2.7652542e-05 4.7659466e-05 9.4285714 - 45900 0.0015490339 0 4.6625302e-05 2.9710608e-05 4.9089177e-05 9.4285714 - 46000 0.0014963696 0 4.1709464e-05 2.8723559e-05 4.9022906e-05 9.4285714 - 46100 0.0014856308 0 4.0292712e-05 2.8995571e-05 4.8447369e-05 9.4285714 - 46200 0.0015137426 0 4.1440548e-05 2.7543828e-05 4.8367534e-05 9.4285714 - 46300 0.0015640239 0 4.1855115e-05 2.9100399e-05 4.8811006e-05 9.4285714 - 46400 0.0015266381 0 4.3753851e-05 2.7690826e-05 4.836007e-05 9.4285714 - 46500 0.0014733423 0 4.2570299e-05 2.6610055e-05 4.6847764e-05 9.4285714 - 46600 0.001484823 0 4.3461054e-05 2.9861374e-05 5.0475526e-05 9.4285714 - 46700 0.0015301483 0 4.7448046e-05 3.0504388e-05 4.9941741e-05 9.4285714 - 46800 0.0015809004 0 4.903534e-05 3.0910484e-05 4.7161439e-05 9.4285714 - 46900 0.001612801 0 4.9475941e-05 3.2239707e-05 4.6593478e-05 9.4285714 - 47000 0.0016910764 0 5.3657792e-05 3.5296942e-05 4.859235e-05 9.4285714 - 47100 0.001783956 0 5.7880864e-05 3.8691625e-05 4.7477888e-05 9.4285714 - 47200 0.0018292587 0 5.9895895e-05 4.2395861e-05 4.7655011e-05 9.4285714 - 47300 0.0017502535 0 5.7074618e-05 4.2492691e-05 5.0352871e-05 9.4285714 - 47400 0.0016822499 0 5.4990315e-05 4.0648979e-05 5.188077e-05 9.4285714 - 47500 0.0016563309 0 5.4480549e-05 3.8802123e-05 5.0093612e-05 9.4285714 - 47600 0.0014163511 0 4.3273573e-05 3.205465e-05 4.8262084e-05 9.4285714 - 47700 0.0013412435 0 3.692145e-05 2.9711453e-05 4.6577587e-05 9.4285714 - 47800 0.0014240978 0 3.7737489e-05 3.1751028e-05 4.5254908e-05 9.4285714 - 47900 0.0015020912 0 4.0110158e-05 3.2857486e-05 4.6825438e-05 9.4285714 - 48000 0.0015096558 0 4.2321656e-05 3.1777798e-05 4.6575557e-05 9.4285714 - 48100 0.001517691 0 4.3394796e-05 3.3282862e-05 4.8944379e-05 9.4285714 - 48200 0.0016276418 0 4.4435256e-05 4.0781135e-05 4.9311797e-05 9.4285714 - 48300 0.0017719927 0 4.6700663e-05 4.93677e-05 5.0554784e-05 9.4285714 - 48400 0.0015818941 0 4.2328614e-05 5.2610299e-05 6.113866e-05 9.4285714 - 48500 0.0014198799 0 3.7949889e-05 4.9923747e-05 6.371027e-05 9.4285714 - 48600 0.0014996944 0 3.3673325e-05 4.1987368e-05 5.7078885e-05 9.4285714 - 48700 0.0015097938 0 3.2534132e-05 3.7653951e-05 6.020767e-05 9.4285714 - 48800 0.0014936285 0 3.198257e-05 3.848781e-05 6.1418287e-05 9.4285714 - 48900 0.0015380261 0 2.9867154e-05 3.5482735e-05 6.2521369e-05 9.4285714 - 49000 0.0014965744 0 2.7178656e-05 3.4322744e-05 6.496405e-05 9.4285714 - 49100 0.0014342589 0 2.4682709e-05 3.1869922e-05 6.3744713e-05 9.4285714 - 49200 0.0013600057 0 2.3357174e-05 2.9724086e-05 6.1562467e-05 9.4285714 - 49300 0.0013536509 0 2.1731913e-05 3.1327722e-05 6.570902e-05 9.4285714 - 49400 0.0012990299 0 2.1586451e-05 2.5884921e-05 6.5281404e-05 9.4285714 - 49500 0.0013224383 0 2.3412676e-05 2.3563992e-05 6.3016735e-05 9.4285714 - 49600 0.0013986754 0 2.2834387e-05 2.6158922e-05 6.8429867e-05 9.4285714 - 49700 0.0014411218 0 2.186838e-05 3.0932651e-05 6.8986342e-05 9.4285714 - 49800 0.001378127 0 2.1416786e-05 3.3195639e-05 6.6099274e-05 9.4285714 - 49900 0.0013555715 0 2.3305296e-05 3.2798355e-05 6.4730999e-05 9.4285714 - 50000 0.0013769437 0 2.565575e-05 3.3011245e-05 6.472161e-05 9.4285714 - 50100 0.0013222666 0 2.3086591e-05 3.1553148e-05 6.1316107e-05 9.4285714 - 50200 0.0012877083 0 2.3434234e-05 3.0254615e-05 5.9000057e-05 9.4285714 - 50300 0.0013054167 0 2.287062e-05 2.9813533e-05 6.0744382e-05 9.4285714 - 50400 0.0013208173 0 2.1924114e-05 3.031788e-05 6.2977251e-05 9.4285714 - 50500 0.001296726 0 2.3541273e-05 3.1627632e-05 6.0919408e-05 9.4285714 - 50600 0.0012545759 0 2.2395763e-05 3.2544394e-05 6.172088e-05 9.4285714 - 50700 0.0012027369 0 1.8537595e-05 2.8818734e-05 6.6323174e-05 9.4285714 - 50800 0.0011995165 0 1.925033e-05 2.6873227e-05 6.8899314e-05 9.4285714 - 50900 0.0011723402 0 2.3335248e-05 2.7683854e-05 6.4338432e-05 9.4285714 - 51000 0.0011421813 0 2.4327839e-05 2.6809184e-05 6.0790242e-05 9.4285714 - 51100 0.00116394 0 2.3328144e-05 2.580678e-05 6.2823267e-05 9.4285714 - 51200 0.0012257785 0 3.0552385e-05 2.6138103e-05 5.9377848e-05 9.4285714 - 51300 0.0012358417 0 3.2563685e-05 2.6813317e-05 5.9818633e-05 9.4285714 - 51400 0.0012080215 0 3.5968335e-05 2.5797266e-05 5.8848467e-05 9.4285714 - 51500 0.001267355 0 3.8341583e-05 2.5329521e-05 5.8979767e-05 9.4285714 - 51600 0.0013633492 0 4.1994974e-05 2.8909656e-05 5.9334549e-05 9.4285714 - 51700 0.001306204 0 4.0230386e-05 2.8976584e-05 5.8748448e-05 9.4285714 - 51800 0.0012710708 0 3.7288173e-05 2.7872643e-05 5.8321328e-05 9.4285714 - 51900 0.0012579937 0 3.8663154e-05 2.517734e-05 5.8681842e-05 9.4285714 - 52000 0.0012477598 0 3.8555642e-05 2.4160452e-05 5.9091504e-05 9.4285714 - 52100 0.0012386931 0 3.6298967e-05 2.4734233e-05 5.972957e-05 9.4285714 - 52200 0.0012083661 0 3.4742423e-05 2.3257594e-05 5.9884006e-05 9.4285714 - 52300 0.001227322 0 3.7133752e-05 2.145337e-05 6.0294784e-05 9.4285714 - 52400 0.0012093432 0 3.962701e-05 2.2339465e-05 5.7904347e-05 9.4285714 - 52500 0.0011144162 0 3.5523752e-05 2.2742137e-05 5.7685984e-05 9.4285714 - 52600 0.0011522755 0 3.5416559e-05 2.3594077e-05 6.140573e-05 9.4285714 - 52700 0.0011985381 0 3.7325884e-05 2.5719141e-05 5.9667343e-05 9.4285714 - 52800 0.0012303406 0 3.6858552e-05 3.0224594e-05 5.8930509e-05 9.4285714 - 52900 0.001307949 0 3.7575587e-05 3.12536e-05 5.9515632e-05 9.4285714 - 53000 0.0014328605 0 4.2188955e-05 3.4749382e-05 6.1455539e-05 9.4285714 - 53100 0.0014397095 0 4.2662213e-05 3.7740262e-05 5.687393e-05 9.4285714 - 53200 0.0014025814 0 4.1931353e-05 3.82967e-05 5.3344169e-05 9.4285714 - 53300 0.0014162407 0 4.2121952e-05 3.8423987e-05 5.489916e-05 9.4285714 - 53400 0.0014545711 0 4.2040265e-05 3.9867546e-05 5.6541951e-05 9.4285714 - 53500 0.0014254383 0 4.107753e-05 4.0850378e-05 5.5013854e-05 9.4285714 - 53600 0.0014059642 0 3.8736588e-05 4.0568223e-05 5.3370333e-05 9.4285714 - 53700 0.0014299655 0 3.8088205e-05 4.0085412e-05 5.3935925e-05 9.4285714 - 53800 0.0014395811 0 3.7835533e-05 4.1054329e-05 5.5704229e-05 9.4285714 - 53900 0.0013782275 0 3.7257677e-05 3.6907022e-05 5.5435595e-05 9.4285714 - 54000 0.0013541391 0 3.6689307e-05 3.5693714e-05 5.3583882e-05 9.4285714 - 54100 0.0013630306 0 3.6254688e-05 3.4826774e-05 5.8667982e-05 9.4285714 - 54200 0.0013207223 0 3.1936729e-05 3.3776648e-05 6.1948363e-05 9.4285714 - 54300 0.0012384331 0 2.7065242e-05 3.4136775e-05 6.0545524e-05 9.4285714 - 54400 0.0012368148 0 3.0512497e-05 3.3844993e-05 5.9219431e-05 9.4285714 - 54500 0.0012437394 0 3.1508782e-05 3.1594467e-05 6.1037857e-05 9.4285714 - 54600 0.0012348463 0 3.0502753e-05 2.9944876e-05 6.3038747e-05 9.4285714 - 54700 0.0012264411 0 2.942495e-05 2.9196344e-05 6.2096436e-05 9.4285714 - 54800 0.0012227357 0 2.9387126e-05 2.8643051e-05 6.2569325e-05 9.4285714 - 54900 0.0012088297 0 3.0446939e-05 2.8501145e-05 6.3961542e-05 9.4285714 - 55000 0.0011208127 0 2.8805799e-05 2.6569641e-05 6.2808312e-05 9.4285714 - 55100 0.0010272696 0 2.5493709e-05 1.9941879e-05 6.302396e-05 9.4285714 - 55200 0.0010244607 0 2.3304908e-05 1.4411642e-05 6.7042204e-05 9.4285714 - 55300 0.0010228592 0 2.7172763e-05 1.7899276e-05 6.1125221e-05 9.4285714 - 55400 0.0010783723 0 2.844893e-05 1.9717676e-05 6.0647508e-05 9.4285714 - 55500 0.0010414558 0 2.996559e-05 2.0486223e-05 5.9281396e-05 9.4285714 - 55600 0.001038362 0 3.3593735e-05 2.7878323e-05 5.957773e-05 9.4285714 - 55700 0.0011103409 0 3.7619767e-05 4.0277802e-05 6.3882463e-05 9.4285714 - 55800 0.0011815031 0 3.7703101e-05 4.6521441e-05 6.3037214e-05 9.4285714 - 55900 0.0011668697 0 3.4874824e-05 4.9582252e-05 6.2010386e-05 9.4285714 - 56000 0.0011054612 0 3.2211415e-05 5.267133e-05 5.762587e-05 9.4285714 - 56100 0.0011022355 0 3.2565384e-05 4.8193468e-05 5.818067e-05 9.4285714 - 56200 0.0010652879 0 2.9677141e-05 4.8574299e-05 5.6899785e-05 9.4285714 - 56300 0.0010214534 0 2.7682044e-05 4.9793384e-05 5.7209237e-05 9.4285714 - 56400 0.0010033606 0 2.7477527e-05 4.8534279e-05 5.6585165e-05 9.4285714 - 56500 0.001032246 0 2.8659282e-05 4.7138798e-05 5.5755049e-05 9.4285714 - 56600 0.0010205736 0 2.808297e-05 4.5593016e-05 5.2153347e-05 9.4285714 - 56700 0.0010229415 0 2.8245565e-05 4.6183101e-05 4.9386245e-05 9.4285714 - 56800 0.0010237598 0 2.9271494e-05 4.7176274e-05 5.0507737e-05 9.4285714 - 56900 0.00098868678 0 2.844571e-05 4.7381428e-05 5.1991097e-05 9.4285714 - 57000 0.00095545464 0 2.8308573e-05 4.6113651e-05 5.180154e-05 9.4285714 - 57100 0.00097838526 0 2.8526708e-05 4.418829e-05 5.1047076e-05 9.4285714 - 57200 0.00099033102 0 2.8810469e-05 4.3574359e-05 4.8770969e-05 9.4285714 - 57300 0.00098789739 0 2.7742088e-05 4.2638312e-05 4.8318032e-05 9.4285714 - 57400 0.00098289065 0 2.719876e-05 4.1438218e-05 4.7934906e-05 9.4285714 - 57500 0.00097060527 0 2.8056188e-05 4.0915771e-05 4.6937706e-05 9.4285714 - 57600 0.00096367212 0 2.8906331e-05 4.096143e-05 4.8641012e-05 9.4285714 - 57700 0.00093727857 0 2.8094393e-05 4.1568196e-05 4.7968529e-05 9.4285714 - 57800 0.00083523397 0 2.6262179e-05 3.6876724e-05 4.562199e-05 9.4285714 - 57900 0.00075333301 0 2.7980925e-05 2.9741366e-05 4.3620183e-05 9.4285714 - 58000 0.00069661398 0 2.5284004e-05 2.7029978e-05 3.9673471e-05 9.4285714 - 58100 0.00070399751 0 2.7847203e-05 2.4609632e-05 3.813514e-05 9.4285714 - 58200 0.00073988434 0 2.9918276e-05 2.3169818e-05 3.8568534e-05 9.4285714 - 58300 0.00075216465 0 2.679437e-05 2.6309725e-05 3.84788e-05 9.4285714 - 58400 0.00074553444 0 2.7146251e-05 2.3176744e-05 3.6877784e-05 9.4285714 - 58500 0.00076387247 0 2.5153737e-05 2.1947001e-05 3.6633348e-05 9.4285714 - 58600 0.00079726485 0 2.3192719e-05 2.1988678e-05 4.1251223e-05 9.4285714 - 58700 0.00076951713 0 2.2443054e-05 2.1505061e-05 4.0895931e-05 9.4285714 - 58800 0.00075008028 0 2.0762225e-05 2.2353942e-05 4.0082382e-05 9.4285714 - 58900 0.00074663178 0 2.0351571e-05 2.0331494e-05 4.1154747e-05 9.4285714 - 59000 0.00074834621 0 2.0070564e-05 1.9810228e-05 4.1795424e-05 9.4285714 - 59100 0.00073943718 0 1.9493268e-05 1.8718774e-05 4.0315851e-05 9.4285714 - 59200 0.00074686888 0 1.8211375e-05 1.8999565e-05 3.9680679e-05 9.4285714 - 59300 0.00076308043 0 1.7979192e-05 1.9294244e-05 4.039113e-05 9.4285714 - 59400 0.00076517044 0 1.8706884e-05 1.9120811e-05 4.1399914e-05 9.4285714 - 59500 0.00074796279 0 1.8496664e-05 2.0054079e-05 4.0905155e-05 9.4285714 - 59600 0.0007252451 0 1.9960945e-05 1.8449803e-05 4.0081187e-05 9.4285714 - 59700 0.00074058815 0 2.0387508e-05 1.8439851e-05 4.1337599e-05 9.4285714 - 59800 0.00074353247 0 1.9421778e-05 1.8177335e-05 4.2738891e-05 9.4285714 - 59900 0.00073356239 0 2.1266167e-05 1.5887487e-05 4.2474556e-05 9.4285714 - 60000 0.00071783344 0 2.1291806e-05 1.7115677e-05 4.3533939e-05 9.4285714 - 60100 0.00073488376 0 2.0748859e-05 1.753697e-05 4.3723599e-05 9.4285714 - 60200 0.00071485533 0 2.0125892e-05 1.6149878e-05 4.2293066e-05 9.4285714 - 60300 0.00069234507 0 1.9683215e-05 1.577723e-05 4.1322826e-05 9.4285714 - 60400 0.00070560126 0 2.1810986e-05 1.5311787e-05 4.1879172e-05 9.4285714 - 60500 0.00071315447 0 2.294249e-05 1.6205149e-05 4.2411647e-05 9.4285714 - 60600 0.00071008272 0 2.2503574e-05 1.6017804e-05 4.148626e-05 9.4285714 - 60700 0.00070869103 0 2.2832573e-05 1.5198277e-05 4.1819919e-05 9.4285714 - 60800 0.00071113582 0 2.3255881e-05 1.4827388e-05 4.1973457e-05 9.4285714 - 60900 0.0007088311 0 2.2679653e-05 1.5850816e-05 4.2095838e-05 9.4285714 - 61000 0.00068112179 0 2.1391341e-05 1.5598301e-05 4.1723934e-05 9.4285714 - 61100 0.0006605057 0 1.8812595e-05 1.455179e-05 4.1598553e-05 9.4285714 - 61200 0.0006219746 0 1.3019206e-05 1.4245686e-05 4.1475411e-05 9.4285714 - 61300 0.00061523504 0 1.2972541e-05 1.3080102e-05 4.1512719e-05 9.4285714 - 61400 0.00063282932 0 1.4610134e-05 1.3437893e-05 4.2011175e-05 9.4285714 - 61500 0.00064395604 0 1.6263372e-05 1.3174954e-05 4.3223813e-05 9.4285714 - 61600 0.00065503698 0 1.7095581e-05 1.3957555e-05 4.3883221e-05 9.4285714 - 61700 0.00064793677 0 1.6531668e-05 1.427803e-05 4.4379128e-05 9.4285714 - 61800 0.00063459475 0 1.641822e-05 1.3361915e-05 4.494487e-05 9.4285714 - 61900 0.00062576053 0 1.4991683e-05 1.3178685e-05 4.4244372e-05 9.4285714 - 62000 0.00061441635 0 1.6659779e-05 1.2064885e-05 4.311918e-05 9.4285714 - 62100 0.00058986476 0 1.5363732e-05 1.2327094e-05 4.2344369e-05 9.4285714 - 62200 0.00058813111 0 1.5308244e-05 1.172516e-05 4.0921757e-05 9.4285714 - 62300 0.00061764479 0 1.5701983e-05 1.2777051e-05 4.2222243e-05 9.4285714 - 62400 0.00061182249 0 1.6314424e-05 1.2829719e-05 4.2353173e-05 9.4285714 - 62500 0.00060407638 0 1.5943106e-05 1.2452173e-05 4.0143389e-05 9.4285714 - 62600 0.0006067243 0 1.4964323e-05 1.1428614e-05 4.1418596e-05 9.4285714 - 62700 0.00063181036 0 1.6065306e-05 1.1617944e-05 4.3633299e-05 9.4285714 - 62800 0.00062331625 0 1.7390992e-05 1.160992e-05 4.348545e-05 9.4285714 - 62900 0.00060499586 0 1.7082837e-05 1.1716717e-05 4.3837452e-05 9.4285714 - 63000 0.00059610047 0 1.6563526e-05 1.3685845e-05 4.3859519e-05 9.4285714 - 63100 0.00057777964 0 1.7729378e-05 1.6249465e-05 4.2605855e-05 9.4285714 - 63200 0.00056278033 0 1.9130869e-05 1.4897372e-05 4.3524186e-05 9.4285714 - 63300 0.0005643587 0 1.7411846e-05 1.3103703e-05 4.509639e-05 9.4285714 - 63400 0.00056751625 0 1.7524844e-05 1.3013462e-05 4.5346164e-05 9.4285714 - 63500 0.0005758364 0 1.9007258e-05 1.3278571e-05 4.6271212e-05 9.4285714 - 63600 0.00055297865 0 2.0024907e-05 1.3448906e-05 4.6053495e-05 9.4285714 - 63700 0.00053242834 0 1.9133343e-05 1.3623042e-05 4.4784738e-05 9.4285714 - 63800 0.00053783411 0 1.8058147e-05 1.407792e-05 4.4265384e-05 9.4285714 - 63900 0.00056086464 0 1.8208139e-05 1.4095892e-05 4.4568511e-05 9.4285714 - 64000 0.00055706462 0 1.6651354e-05 1.3124585e-05 4.5325194e-05 9.4285714 - 64100 0.000536149 0 1.5159378e-05 1.2477274e-05 4.5074084e-05 9.4285714 - 64200 0.00053432359 0 1.6241637e-05 1.2509908e-05 4.4118324e-05 9.4285714 - 64300 0.00054329864 0 1.5764694e-05 1.2690611e-05 4.3290153e-05 9.4285714 - 64400 0.00053483462 0 1.5293341e-05 1.2995758e-05 4.2835811e-05 9.4285714 - 64500 0.00051870438 0 1.5973057e-05 1.4635538e-05 4.2763024e-05 9.4285714 - 64600 0.00050924208 0 1.7757189e-05 1.5857543e-05 4.3206134e-05 9.4285714 - 64700 0.00051229708 0 1.9786341e-05 1.5441473e-05 4.1425482e-05 9.4285714 - 64800 0.00049972497 0 1.8784827e-05 1.5454616e-05 4.1657079e-05 9.4285714 - 64900 0.00050437675 0 1.686975e-05 1.4399895e-05 4.1718529e-05 9.4285714 - 65000 0.00050921662 0 1.611267e-05 1.4047703e-05 4.1291373e-05 9.4285714 - 65100 0.00050128712 0 1.5751344e-05 1.4113072e-05 4.1872267e-05 9.4285714 - 65200 0.00049418811 0 1.5173817e-05 1.4195559e-05 4.2056531e-05 9.4285714 - 65300 0.00048475459 0 1.5417595e-05 1.57661e-05 4.2409836e-05 9.4285714 - 65400 0.00048358093 0 1.5246796e-05 1.5190672e-05 4.1991083e-05 9.4285714 - 65500 0.00046187182 0 1.4861182e-05 1.4588223e-05 4.0935849e-05 9.4285714 - 65600 0.00044765112 0 1.4765268e-05 1.537344e-05 4.0371641e-05 9.4285714 - 65700 0.00044227491 0 1.510286e-05 1.606591e-05 4.0813721e-05 9.4285714 - 65800 0.00045062117 0 1.6750885e-05 1.8030475e-05 4.1179756e-05 9.4285714 - 65900 0.00044298468 0 1.6518424e-05 1.85545e-05 4.026916e-05 9.4285714 - 66000 0.00043634341 0 1.5800836e-05 1.7585905e-05 3.9748931e-05 9.4285714 - 66100 0.00044148682 0 1.6642713e-05 1.670122e-05 4.0274963e-05 9.4285714 - 66200 0.00041908541 0 1.746514e-05 1.7059015e-05 4.0382535e-05 9.4285714 - 66300 0.0003986816 0 1.7027695e-05 1.739357e-05 3.9376117e-05 9.4285714 - 66400 0.00039220656 0 1.6705227e-05 1.8903119e-05 3.9114212e-05 9.4285714 - 66500 0.0003718012 0 1.5572293e-05 1.9986978e-05 3.7554446e-05 9.4285714 - 66600 0.00035441178 0 1.7496688e-05 2.182664e-05 3.7175628e-05 9.4285714 - 66700 0.00032771071 0 1.855562e-05 2.3889316e-05 3.8273751e-05 9.4285714 - 66800 0.00032034205 0 1.994633e-05 2.2871209e-05 3.7054459e-05 9.4285714 - 66900 0.00032748678 0 1.9902021e-05 2.2577802e-05 3.5143062e-05 9.4285714 - 67000 0.00031480002 0 1.8836912e-05 2.3635721e-05 3.3711459e-05 9.4285714 - 67100 0.00029818864 0 1.9151872e-05 2.4066822e-05 3.0035385e-05 9.4285714 - 67200 0.00028850482 0 2.0202645e-05 2.2857011e-05 2.679825e-05 9.4285714 - 67300 0.00027906463 0 1.8464704e-05 2.2098469e-05 2.5808159e-05 9.4285714 - 67400 0.00026983119 0 1.8815297e-05 2.1711669e-05 2.3802924e-05 9.4285714 - 67500 0.00025897445 0 1.8973424e-05 2.0968355e-05 2.3297142e-05 9.4285714 - 67600 0.00025617277 0 1.8617812e-05 1.9830989e-05 2.2090704e-05 9.4285714 - 67700 0.0002458913 0 1.910437e-05 1.8625812e-05 2.1733812e-05 9.4285714 - 67800 0.00023354219 0 1.832611e-05 1.7691212e-05 2.1210126e-05 9.4285714 - 67900 0.00022620372 0 1.7000402e-05 1.7080892e-05 2.1207271e-05 9.4285714 - 68000 0.00021034083 0 1.6825045e-05 1.8065087e-05 2.1095108e-05 9.4285714 - 68100 0.00020081342 0 1.6332082e-05 1.970994e-05 2.0758845e-05 9.4285714 - 68200 0.00019193991 0 1.5966734e-05 1.868169e-05 2.0157881e-05 9.4285714 - 68300 0.00018544966 0 1.561877e-05 1.7478563e-05 1.8475016e-05 9.4285714 - 68400 0.00018804615 0 1.4772975e-05 1.6974189e-05 1.7189233e-05 9.4285714 - 68500 0.00018775348 0 1.3639818e-05 1.6731872e-05 1.5813203e-05 9.4285714 - 68600 0.00017814834 0 1.3108584e-05 1.5896539e-05 1.5789958e-05 9.4285714 - 68700 0.00017684501 0 1.2570593e-05 1.5512625e-05 1.5646067e-05 9.4285714 - 68800 0.00017822756 0 1.2650073e-05 1.5178378e-05 1.5602751e-05 9.4285714 - 68900 0.00017399678 0 1.2637066e-05 1.5270188e-05 1.4772033e-05 9.4285714 - 69000 0.00016884856 0 1.1917102e-05 1.5579284e-05 1.3954577e-05 9.4285714 - 69100 0.00016124621 0 1.1143804e-05 1.5715176e-05 1.3890091e-05 9.4285714 - 69200 0.00015230369 0 1.0616022e-05 1.475922e-05 1.2345065e-05 9.4285714 - 69300 0.00013801371 0 9.640773e-06 1.393282e-05 1.1715961e-05 9.4285714 - 69400 0.00013808136 0 9.6212514e-06 1.3652018e-05 1.0846438e-05 9.4285714 - 69500 0.0001440913 0 1.021795e-05 1.2661342e-05 1.038701e-05 9.4285714 - 69600 0.0001394285 0 9.9938044e-06 1.2245834e-05 1.089642e-05 9.4285714 - 69700 0.00013161326 0 1.0201799e-05 1.1909588e-05 1.0772069e-05 9.4285714 - 69800 0.00013249756 0 1.113604e-05 1.164231e-05 1.0591161e-05 9.4285714 - 69900 0.00012090745 0 1.1478451e-05 1.1152813e-05 9.919079e-06 9.4285714 - 70000 0.00011236987 0 1.0884519e-05 1.1231913e-05 8.9927016e-06 9.4285714 - 70100 0.00011286945 0 9.72149e-06 1.1278278e-05 8.465142e-06 9.4285714 - 70200 0.00010986334 0 1.0368303e-05 1.1087033e-05 8.1873531e-06 9.4285714 - 70300 0.00010685467 0 1.0583554e-05 9.9509928e-06 8.015838e-06 9.4285714 - 70400 0.00010200771 0 9.5007118e-06 8.8995568e-06 7.8885063e-06 9.4285714 - 70500 0.00010058377 0 8.7483e-06 8.1860548e-06 7.2604639e-06 9.4285714 - 70600 0.00010566655 0 8.8814394e-06 8.3353964e-06 7.0730026e-06 9.4285714 - 70700 0.00010568819 0 9.2056705e-06 8.6532173e-06 7.5798304e-06 9.4285714 - 70800 9.5743305e-05 0 8.8046692e-06 8.214583e-06 8.2007696e-06 9.4285714 - 70900 9.0337674e-05 0 8.1926875e-06 7.8174183e-06 8.5067051e-06 9.4285714 - 71000 9.4761156e-05 0 7.9032031e-06 7.8162303e-06 8.2181578e-06 9.4285714 - 71100 9.4948727e-05 0 7.5065136e-06 8.0759219e-06 7.5553381e-06 9.4285714 - 71200 9.0670778e-05 0 7.4294848e-06 8.3699509e-06 7.59107e-06 9.4285714 - 71300 8.6130193e-05 0 8.0377457e-06 8.790487e-06 7.9918991e-06 9.4285714 - 71400 8.4589504e-05 0 8.2905148e-06 8.7219326e-06 8.4439469e-06 9.4285714 - 71500 8.0529098e-05 0 8.0165537e-06 8.3087243e-06 8.8955027e-06 9.4285714 - 71600 7.5686597e-05 0 7.5468312e-06 7.6884231e-06 8.6682444e-06 9.4285714 - 71700 7.6798602e-05 0 7.6542761e-06 7.4772412e-06 7.7914537e-06 9.4285714 - 71800 7.9310009e-05 0 7.6461402e-06 7.72091e-06 7.0238823e-06 9.4285714 - 71900 7.9214288e-05 0 7.4810232e-06 7.6768621e-06 6.7817162e-06 9.4285714 - 72000 7.9038582e-05 0 7.2159275e-06 7.1798723e-06 6.9247219e-06 9.4285714 - 72100 7.871016e-05 0 6.7491433e-06 6.3347515e-06 6.840567e-06 9.4285714 - 72200 7.834318e-05 0 7.0232916e-06 6.5724499e-06 7.0466047e-06 9.4285714 - 72300 7.4417464e-05 0 7.6417843e-06 7.4198519e-06 7.5391796e-06 9.4285714 - 72400 7.2850636e-05 0 7.4561653e-06 7.4656614e-06 7.6687535e-06 9.4285714 - 72500 7.2654277e-05 0 7.1517943e-06 7.3081176e-06 7.3888809e-06 9.4285714 - 72600 6.9835461e-05 0 6.8818427e-06 7.3788479e-06 7.8063157e-06 9.4285714 - 72700 6.2829954e-05 0 7.1611994e-06 6.9887628e-06 8.3172177e-06 9.4285714 - 72800 6.2262018e-05 0 7.6316315e-06 6.7547342e-06 8.8125983e-06 9.4285714 - 72900 6.3883222e-05 0 7.5334524e-06 6.7730657e-06 8.6595963e-06 9.4285714 - 73000 5.9226511e-05 0 6.8864713e-06 6.4791392e-06 8.1819239e-06 9.4285714 - 73100 5.7011505e-05 0 6.63954e-06 6.6586151e-06 8.2829434e-06 9.4285714 - 73200 5.7782301e-05 0 6.9499852e-06 7.7458663e-06 8.7262015e-06 9.4285714 - 73300 5.6603344e-05 0 6.8509353e-06 8.3648334e-06 8.6498703e-06 9.4285714 - 73400 5.7168446e-05 0 6.5941097e-06 7.9160113e-06 8.8929853e-06 9.4285714 - 73500 5.5370771e-05 0 6.2230317e-06 6.9794004e-06 8.8249884e-06 9.4285714 - 73600 5.4812912e-05 0 5.7778189e-06 6.3940944e-06 8.5286349e-06 9.4285714 - 73700 5.6347935e-05 0 5.7515383e-06 6.3283312e-06 8.319272e-06 9.4285714 - 73800 5.4277314e-05 0 6.1253887e-06 6.6182977e-06 8.3463134e-06 9.4285714 - 73900 5.2208621e-05 0 6.4163882e-06 6.8192691e-06 8.3082406e-06 9.4285714 - 74000 5.2269889e-05 0 6.6559599e-06 7.1457306e-06 8.2273352e-06 9.4285714 - 74100 5.140122e-05 0 6.869245e-06 7.5138252e-06 7.9478769e-06 9.4285714 - 74200 5.0493971e-05 0 6.909946e-06 7.3598192e-06 8.268487e-06 9.4285714 - 74300 5.0143612e-05 0 6.9216264e-06 7.1981534e-06 9.1585219e-06 9.4285714 - 74400 5.1096041e-05 0 6.8363069e-06 7.0296413e-06 9.1147547e-06 9.4285714 - 74500 5.0443873e-05 0 6.7793586e-06 7.0132351e-06 8.5823651e-06 9.4285714 - 74600 4.7361206e-05 0 6.7180197e-06 7.124872e-06 8.7761577e-06 9.4285714 - 74700 4.5217891e-05 0 6.9374707e-06 7.2691752e-06 9.1522715e-06 9.4285714 - 74800 4.4199219e-05 0 6.7909439e-06 7.5770949e-06 9.7192223e-06 9.4285714 - 74900 4.2690558e-05 0 6.6514575e-06 7.6611441e-06 1.0077374e-05 9.4285714 - 75000 4.3251235e-05 0 6.7090132e-06 7.6653791e-06 1.0052049e-05 9.4285714 - 75100 4.2455244e-05 0 6.7866432e-06 7.7388966e-06 1.0028703e-05 9.4285714 - 75200 3.9974009e-05 0 6.82653e-06 7.8909604e-06 1.0337211e-05 9.4285714 - 75300 3.9717052e-05 0 6.9211881e-06 7.7970569e-06 1.0488155e-05 9.4285714 - 75400 3.9986342e-05 0 7.1648198e-06 7.4603705e-06 1.0688149e-05 9.4285714 - 75500 3.9169442e-05 0 7.3718404e-06 7.4522867e-06 1.11569e-05 9.4285714 - 75600 3.7089566e-05 0 7.818948e-06 8.0959183e-06 1.1390076e-05 9.4285714 - 75700 3.3266397e-05 0 8.130609e-06 8.6491143e-06 1.1151698e-05 9.4285714 - 75800 3.2384668e-05 0 7.7863389e-06 8.37919e-06 1.1288007e-05 9.4285714 - 75900 3.1838307e-05 0 7.6319586e-06 8.1009387e-06 1.143279e-05 9.4285714 - 76000 3.1144297e-05 0 7.8711235e-06 8.1673509e-06 1.1029084e-05 9.4285714 - 76100 2.9974072e-05 0 7.9247713e-06 8.299987e-06 1.0525923e-05 9.4285714 - 76200 2.7198035e-05 0 7.8293009e-06 8.310921e-06 1.055285e-05 9.4285714 - 76300 2.7127342e-05 0 7.6553123e-06 8.0539985e-06 1.0474633e-05 9.4285714 - 76400 2.7851263e-05 0 7.308142e-06 7.8072863e-06 1.013167e-05 9.4285714 - 76500 2.7494264e-05 0 6.841143e-06 7.835377e-06 9.3440029e-06 9.4285714 - 76600 2.6712243e-05 0 6.5997538e-06 8.0291247e-06 8.9766747e-06 9.4285714 - 76700 2.608679e-05 0 6.5476182e-06 8.0290119e-06 8.9406988e-06 9.4285714 - 76800 2.5470409e-05 0 6.7969082e-06 7.9051392e-06 8.6794585e-06 9.4285714 - 76900 2.3738132e-05 0 7.0899218e-06 7.820068e-06 8.3776786e-06 9.4285714 - 77000 2.392793e-05 0 7.1007851e-06 7.7008506e-06 8.2196063e-06 9.4285714 - 77100 2.5040725e-05 0 6.5849837e-06 7.5695391e-06 8.0838426e-06 9.4285714 - 77200 2.4262679e-05 0 5.882129e-06 7.3322008e-06 7.9176151e-06 9.4285714 - 77300 2.3485603e-05 0 5.5578939e-06 7.1253591e-06 8.1421152e-06 9.4285714 - 77400 2.288926e-05 0 5.5392448e-06 6.953267e-06 8.3284229e-06 9.4285714 - 77500 2.1807877e-05 0 5.6396821e-06 6.8965687e-06 8.3180338e-06 9.4285714 - 77600 2.0733918e-05 0 5.7355693e-06 6.7994759e-06 8.0734473e-06 9.4285714 - 77700 1.9203226e-05 0 6.0476702e-06 6.6767049e-06 7.8817179e-06 9.4285714 - 77800 1.9501256e-05 0 6.3142216e-06 6.4932104e-06 7.6808533e-06 9.4285714 - 77900 2.0359598e-05 0 6.2952388e-06 6.2572911e-06 7.4898379e-06 9.4285714 - 78000 2.0195233e-05 0 6.2117602e-06 5.9890577e-06 7.3521707e-06 9.4285714 - 78100 1.9996343e-05 0 6.4254558e-06 6.0581865e-06 7.4946408e-06 9.4285714 - 78200 1.9561783e-05 0 6.5081672e-06 6.1091508e-06 7.7115624e-06 9.4285714 - 78300 1.8950384e-05 0 6.5057604e-06 6.1336288e-06 7.7814624e-06 9.4285714 - 78400 1.791265e-05 0 6.524486e-06 6.106767e-06 7.9720525e-06 9.4285714 - 78500 1.6719761e-05 0 6.4696267e-06 6.1466897e-06 8.2888462e-06 9.4285714 - 78600 1.694882e-05 0 6.3960529e-06 6.4383715e-06 8.566325e-06 9.4285714 - 78700 1.6441696e-05 0 6.4244259e-06 6.8544835e-06 8.8114945e-06 9.4285714 - 78800 1.58705e-05 0 6.4261976e-06 6.9892281e-06 8.9516613e-06 9.4285714 - 78900 1.6262888e-05 0 6.4275436e-06 6.918921e-06 8.9013596e-06 9.4285714 - 79000 1.6249172e-05 0 6.5654154e-06 6.8123563e-06 8.8489233e-06 9.4285714 - 79100 1.5831334e-05 0 6.4588742e-06 6.712862e-06 8.8288153e-06 9.4285714 - 79200 1.6045382e-05 0 6.403274e-06 6.7037068e-06 8.9761827e-06 9.4285714 - 79300 1.5516093e-05 0 6.3902624e-06 6.7184084e-06 9.1560991e-06 9.4285714 - 79400 1.416878e-05 0 6.3570188e-06 6.7232883e-06 9.227643e-06 9.4285714 - 79500 1.3789098e-05 0 6.3134201e-06 6.7601571e-06 9.4097509e-06 9.4285714 - 79600 1.3348534e-05 0 6.1960704e-06 6.7254265e-06 9.6078167e-06 9.4285714 - 79700 1.273465e-05 0 6.1541687e-06 6.5901782e-06 9.8182002e-06 9.4285714 - 79800 1.2227372e-05 0 6.304926e-06 6.6441957e-06 1.0068215e-05 9.4285714 - 79900 1.1693813e-05 0 6.3038093e-06 6.6939605e-06 1.0197318e-05 9.4285714 - 80000 1.1464185e-05 0 6.1705804e-06 6.6906719e-06 1.0110803e-05 9.4285714 - 80100 1.1803018e-05 0 6.0500543e-06 6.6620614e-06 9.8456096e-06 9.4285714 - 80200 1.2022752e-05 0 6.1098356e-06 6.6272319e-06 9.7114881e-06 9.4285714 - 80300 1.1235183e-05 0 6.3111252e-06 6.8491552e-06 9.8106655e-06 9.4285714 - 80400 1.0767149e-05 0 6.4003396e-06 7.1077653e-06 9.6772383e-06 9.4285714 - 80500 1.0605289e-05 0 6.2939472e-06 7.0736809e-06 9.243275e-06 9.4285714 - 80600 1.0730122e-05 0 6.10832e-06 6.9696774e-06 8.7322327e-06 9.4285714 - 80700 1.0881957e-05 0 6.0452261e-06 6.8625083e-06 8.4087864e-06 9.4285714 - 80800 1.0406089e-05 0 6.0948251e-06 6.523201e-06 8.19417e-06 9.4285714 - 80900 1.0026467e-05 0 6.0325653e-06 6.0787776e-06 7.9921617e-06 9.4285714 - 81000 9.7145958e-06 0 5.9646282e-06 5.9468725e-06 7.7932935e-06 9.4285714 - 81100 9.5989912e-06 0 5.9922407e-06 5.8830137e-06 7.4211805e-06 9.4285714 - 81200 9.6167979e-06 0 5.9890853e-06 5.8136074e-06 7.1725868e-06 9.4285714 - 81300 9.3960745e-06 0 5.9836322e-06 5.8456821e-06 7.1063473e-06 9.4285714 - 81400 9.2203704e-06 0 6.0646745e-06 5.9639464e-06 7.1870346e-06 9.4285714 - 81500 8.9934924e-06 0 6.0596683e-06 6.0526634e-06 7.4184354e-06 9.4285714 - 81600 8.9239343e-06 0 5.9305991e-06 5.9920705e-06 7.4398143e-06 9.4285714 - 81700 8.8536448e-06 0 5.782797e-06 5.7875074e-06 7.3001827e-06 9.4285714 - 81800 8.7738397e-06 0 5.6772255e-06 5.5870852e-06 7.215606e-06 9.4285714 - 81900 8.6264475e-06 0 5.6109721e-06 5.4778153e-06 7.4438004e-06 9.4285714 - 82000 8.1150459e-06 0 5.6859237e-06 5.4434971e-06 7.7319605e-06 9.4285714 - 82100 7.7649326e-06 0 5.7940758e-06 5.4655151e-06 7.8474115e-06 9.4285714 - 82200 7.2560528e-06 0 5.8338187e-06 5.5455868e-06 7.8801512e-06 9.4285714 - 82300 6.728063e-06 0 5.8489495e-06 5.5951456e-06 8.0820793e-06 9.4285714 - 82400 6.9809977e-06 0 5.8693525e-06 5.6114868e-06 8.260093e-06 9.4285714 - 82500 7.355814e-06 0 5.92658e-06 5.618559e-06 8.3090972e-06 9.4285714 - 82600 7.2570318e-06 0 5.9036059e-06 5.7297566e-06 8.3811458e-06 9.4285714 - 82700 6.9694095e-06 0 5.8875064e-06 5.8982843e-06 8.5177797e-06 9.4285714 - 82800 6.6998823e-06 0 5.8397e-06 5.9382718e-06 8.5416261e-06 9.4285714 - 82900 6.2647743e-06 0 5.8436222e-06 5.9380316e-06 8.4849934e-06 9.4285714 - 83000 6.0939421e-06 0 5.8584026e-06 5.9680845e-06 8.4019098e-06 9.4285714 - 83100 5.7817334e-06 0 5.9194068e-06 5.974517e-06 8.3739449e-06 9.4285714 - 83200 5.4819772e-06 0 5.9246092e-06 5.9787088e-06 8.2453878e-06 9.4285714 - 83300 5.5890815e-06 0 5.7890157e-06 5.9282178e-06 8.0590558e-06 9.4285714 - 83400 5.6281861e-06 0 5.6912633e-06 5.8518645e-06 7.9909164e-06 9.4285714 - 83500 5.4144887e-06 0 5.6573854e-06 5.7833509e-06 8.0464114e-06 9.4285714 - 83600 5.1563913e-06 0 5.6269226e-06 5.7339786e-06 8.0661711e-06 9.4285714 - 83700 5.0876473e-06 0 5.5749834e-06 5.6845511e-06 8.0332703e-06 9.4285714 - 83800 4.9468448e-06 0 5.5707074e-06 5.6385133e-06 7.9597769e-06 9.4285714 - 83900 4.6630105e-06 0 5.5723723e-06 5.6175318e-06 7.8851126e-06 9.4285714 - 84000 4.7811214e-06 0 5.5108047e-06 5.6078624e-06 7.8050501e-06 9.4285714 - 84100 5.0276584e-06 0 5.5880552e-06 5.5747336e-06 7.6735943e-06 9.4285714 - 84200 5.0673134e-06 0 5.5485723e-06 5.4960143e-06 7.5331626e-06 9.4285714 - 84300 5.0178904e-06 0 5.4242574e-06 5.450341e-06 7.397872e-06 9.4285714 - 84400 5.1214108e-06 0 5.4146982e-06 5.4695781e-06 7.1709728e-06 9.4285714 - 84500 5.2613708e-06 0 5.4544838e-06 5.4910137e-06 6.8978042e-06 9.4285714 - 84600 5.0732871e-06 0 5.4732529e-06 5.4537634e-06 6.6451024e-06 9.4285714 - 84700 4.8942355e-06 0 5.3186694e-06 5.4081165e-06 6.4129476e-06 9.4285714 - 84800 4.9894935e-06 0 5.210834e-06 5.3824484e-06 6.2468844e-06 9.4285714 - 84900 5.0853301e-06 0 5.2081027e-06 5.368114e-06 6.1689206e-06 9.4285714 - 85000 5.0246182e-06 0 5.2102872e-06 5.374328e-06 6.1510533e-06 9.4285714 - 85100 5.0208754e-06 0 5.1521471e-06 5.3676682e-06 6.1991457e-06 9.4285714 - 85200 5.0748205e-06 0 5.048261e-06 5.2440453e-06 6.2004146e-06 9.4285714 - 85300 4.9812629e-06 0 4.901834e-06 5.078053e-06 6.1739713e-06 9.4285714 - 85400 4.9364086e-06 0 4.7854165e-06 4.9665202e-06 6.1913133e-06 9.4285714 - 85500 5.0949477e-06 0 4.7684e-06 4.9424101e-06 6.2384897e-06 9.4285714 - 85600 5.2578329e-06 0 4.8296562e-06 4.9891444e-06 6.3177757e-06 9.4285714 - 85700 5.3178654e-06 0 4.9096168e-06 5.0492655e-06 6.3719253e-06 9.4285714 - 85800 5.2789195e-06 0 5.0030273e-06 5.1221141e-06 6.4306092e-06 9.4285714 - 85900 5.211556e-06 0 5.0888711e-06 5.2011509e-06 6.4447784e-06 9.4285714 - 86000 5.164723e-06 0 5.1818504e-06 5.2712326e-06 6.4302369e-06 9.4285714 - 86100 5.0481445e-06 0 5.2785718e-06 5.3135548e-06 6.441319e-06 9.4285714 - 86200 4.9974464e-06 0 5.3884301e-06 5.294815e-06 6.5827459e-06 9.4285714 - 86300 4.9937059e-06 0 5.457251e-06 5.2609359e-06 6.7845972e-06 9.4285714 - 86400 4.8657268e-06 0 5.4483442e-06 5.2511498e-06 6.9337604e-06 9.4285714 - 86500 4.7283799e-06 0 5.425898e-06 5.3089241e-06 7.0312792e-06 9.4285714 - 86600 4.7004375e-06 0 5.4193785e-06 5.4166695e-06 7.1128075e-06 9.4285714 - 86700 4.6372911e-06 0 5.4344351e-06 5.4996051e-06 7.277017e-06 9.4285714 - 86800 4.5127464e-06 0 5.4946741e-06 5.6005112e-06 7.5801442e-06 9.4285714 - 86900 4.2696716e-06 0 5.6390116e-06 5.767542e-06 7.931129e-06 9.4285714 - 87000 3.9562698e-06 0 5.7901064e-06 5.9319146e-06 8.1254738e-06 9.4285714 - 87100 3.8216875e-06 0 5.802745e-06 6.0555156e-06 8.1125473e-06 9.4285714 - 87200 3.7106265e-06 0 5.7560928e-06 6.1526954e-06 8.1788736e-06 9.4285714 - 87300 3.5152634e-06 0 5.7983009e-06 6.1893449e-06 8.3142262e-06 9.4285714 - 87400 3.3565975e-06 0 5.9349946e-06 6.1859595e-06 8.3471855e-06 9.4285714 - 87500 3.2638882e-06 0 6.1244937e-06 6.1935393e-06 8.3417873e-06 9.4285714 - 87600 3.0898606e-06 0 6.1267787e-06 6.1999214e-06 8.4141458e-06 9.4285714 - 87700 2.8576261e-06 0 6.0597342e-06 6.186209e-06 8.5665825e-06 9.4285714 - 87800 2.7576879e-06 0 6.0986889e-06 6.1966395e-06 8.7269298e-06 9.4285714 - 87900 2.6395553e-06 0 6.2323863e-06 6.2325665e-06 8.8153584e-06 9.4285714 - 88000 2.5367275e-06 0 6.3399962e-06 6.2286333e-06 8.7321005e-06 9.4285714 - 88100 2.5435826e-06 0 6.3843685e-06 6.199985e-06 8.588545e-06 9.4285714 - 88200 2.4639259e-06 0 6.4179215e-06 6.1683922e-06 8.4513487e-06 9.4285714 - 88300 2.3469036e-06 0 6.4551211e-06 6.1080618e-06 8.3387381e-06 9.4285714 - 88400 2.3768733e-06 0 6.4591903e-06 6.0389471e-06 8.1921919e-06 9.4285714 - 88500 2.3736897e-06 0 6.393894e-06 5.9510828e-06 8.0112655e-06 9.4285714 - 88600 2.2500164e-06 0 6.2578349e-06 5.8448408e-06 7.8184696e-06 9.4285714 - 88700 2.2162271e-06 0 6.1542092e-06 5.7754318e-06 7.6686985e-06 9.4285714 - 88800 2.2151714e-06 0 6.0729724e-06 5.7388441e-06 7.547056e-06 9.4285714 - 88900 2.1358759e-06 0 5.959043e-06 5.7110489e-06 7.3753601e-06 9.4285714 - 89000 2.0679219e-06 0 5.8461246e-06 5.669748e-06 7.208506e-06 9.4285714 - 89100 2.0601043e-06 0 5.7535284e-06 5.6000192e-06 7.1410851e-06 9.4285714 - 89200 2.0129251e-06 0 5.7206458e-06 5.5643986e-06 7.1420425e-06 9.4285714 - 89300 1.8550153e-06 0 5.7375984e-06 5.5654325e-06 7.101938e-06 9.4285714 - 89400 1.740421e-06 0 5.7121512e-06 5.5424937e-06 6.9314459e-06 9.4285714 - 89500 1.7011249e-06 0 5.5746559e-06 5.4592408e-06 6.7076844e-06 9.4285714 - 89600 1.6571459e-06 0 5.4274167e-06 5.3669256e-06 6.531149e-06 9.4285714 - 89700 1.6438067e-06 0 5.3201355e-06 5.2892086e-06 6.4398106e-06 9.4285714 - 89800 1.6525138e-06 0 5.2625686e-06 5.2167148e-06 6.4067962e-06 9.4285714 - 89900 1.6319271e-06 0 5.2556177e-06 5.1873856e-06 6.3826434e-06 9.4285714 - 90000 1.557529e-06 0 5.2446154e-06 5.2340739e-06 6.3155153e-06 9.4285714 - 90100 1.4882373e-06 0 5.2015275e-06 5.2778385e-06 6.2402529e-06 9.4285714 - 90200 1.4209302e-06 0 5.1597895e-06 5.2738932e-06 6.2081083e-06 9.4285714 - 90300 1.3299939e-06 0 5.1418672e-06 5.2372552e-06 6.2528023e-06 9.4285714 - 90400 1.2259092e-06 0 5.1463821e-06 5.2097912e-06 6.3462418e-06 9.4285714 - 90500 1.1187486e-06 0 5.1762762e-06 5.239444e-06 6.4479926e-06 9.4285714 - 90600 1.0608212e-06 0 5.2178318e-06 5.305174e-06 6.5102243e-06 9.4285714 - 90700 1.0766578e-06 0 5.2419914e-06 5.3525891e-06 6.5140687e-06 9.4285714 - 90800 1.1182792e-06 0 5.2530154e-06 5.3586888e-06 6.4962495e-06 9.4285714 - 90900 1.1296592e-06 0 5.2748443e-06 5.3408421e-06 6.5115448e-06 9.4285714 - 91000 1.11746e-06 0 5.3229553e-06 5.3176115e-06 6.5624336e-06 9.4285714 - 91100 1.1161849e-06 0 5.3728185e-06 5.2967077e-06 6.6076278e-06 9.4285714 - 91200 1.1003381e-06 0 5.3762475e-06 5.2863942e-06 6.6437528e-06 9.4285714 - 91300 1.0699207e-06 0 5.3449145e-06 5.3031418e-06 6.711032e-06 9.4285714 - 91400 1.0225085e-06 0 5.3031929e-06 5.34765e-06 6.796701e-06 9.4285714 - 91500 9.3221185e-07 0 5.2820677e-06 5.3831345e-06 6.8688465e-06 9.4285714 - 91600 8.175139e-07 0 5.2910041e-06 5.4163556e-06 6.9400122e-06 9.4285714 - 91700 7.3559371e-07 0 5.3055219e-06 5.455723e-06 7.044799e-06 9.4285714 - 91800 7.1536716e-07 0 5.3171425e-06 5.4958276e-06 7.1764255e-06 9.4285714 - 91900 7.3505787e-07 0 5.3414305e-06 5.5291435e-06 7.3166969e-06 9.4285714 - 92000 7.4077724e-07 0 5.3814858e-06 5.5514528e-06 7.4343294e-06 9.4285714 - 92100 6.9877049e-07 0 5.4390474e-06 5.5727673e-06 7.4953117e-06 9.4285714 - 92200 6.4252681e-07 0 5.4916149e-06 5.5977627e-06 7.5227736e-06 9.4285714 - 92300 6.0110022e-07 0 5.5159103e-06 5.6313603e-06 7.5388191e-06 9.4285714 - 92400 5.816128e-07 0 5.5178607e-06 5.6647579e-06 7.5582377e-06 9.4285714 - 92500 5.9153109e-07 0 5.5092078e-06 5.6729251e-06 7.5696663e-06 9.4285714 - 92600 6.0921987e-07 0 5.4970327e-06 5.6615892e-06 7.5703268e-06 9.4285714 - 92700 6.1337515e-07 0 5.4942697e-06 5.6345531e-06 7.5559086e-06 9.4285714 - 92800 6.1327785e-07 0 5.4807468e-06 5.6009851e-06 7.5214857e-06 9.4285714 - 92900 6.1792714e-07 0 5.4554294e-06 5.5749276e-06 7.4538853e-06 9.4285714 - 93000 6.1273596e-07 0 5.4290775e-06 5.5561117e-06 7.3841006e-06 9.4285714 - 93100 6.0793162e-07 0 5.4185336e-06 5.5358484e-06 7.3194241e-06 9.4285714 - 93200 6.0544275e-07 0 5.4307931e-06 5.512978e-06 7.2505125e-06 9.4285714 - 93300 5.9304823e-07 0 5.4493134e-06 5.5034617e-06 7.1829541e-06 9.4285714 - 93400 5.8633452e-07 0 5.4585391e-06 5.5059231e-06 7.1239428e-06 9.4285714 - 93500 5.8558033e-07 0 5.4524782e-06 5.5079042e-06 7.0750126e-06 9.4285714 - 93600 5.9666443e-07 0 5.4431269e-06 5.5093864e-06 7.038782e-06 9.4285714 - 93700 6.2961131e-07 0 5.4420067e-06 5.5023302e-06 7.0048532e-06 9.4285714 - 93800 6.5214088e-07 0 5.4557207e-06 5.4957162e-06 6.9697117e-06 9.4285714 - 93900 6.4876906e-07 0 5.4814438e-06 5.5018236e-06 6.9387912e-06 9.4285714 - 94000 6.4883965e-07 0 5.5010302e-06 5.5122147e-06 6.912436e-06 9.4285714 - 94100 6.6318042e-07 0 5.4941441e-06 5.5055713e-06 6.8781859e-06 9.4285714 - 94200 6.7888726e-07 0 5.4655079e-06 5.494276e-06 6.8335849e-06 9.4285714 - 94300 6.851547e-07 0 5.4386351e-06 5.4819488e-06 6.785467e-06 9.4285714 - 94400 6.9002759e-07 0 5.4150889e-06 5.4560812e-06 6.7512517e-06 9.4285714 - 94500 6.8881467e-07 0 5.389498e-06 5.4249696e-06 6.7436813e-06 9.4285714 - 94600 6.8216567e-07 0 5.3596704e-06 5.3960045e-06 6.752434e-06 9.4285714 - 94700 6.9513876e-07 0 5.3315299e-06 5.3638382e-06 6.7588407e-06 9.4285714 - 94800 7.3117806e-07 0 5.319681e-06 5.3328405e-06 6.7594305e-06 9.4285714 - 94900 7.4630526e-07 0 5.3264247e-06 5.3065749e-06 6.7584815e-06 9.4285714 - 95000 7.052145e-07 0 5.336904e-06 5.2901046e-06 6.7591167e-06 9.4285714 - 95100 6.5300672e-07 0 5.3431675e-06 5.3055137e-06 6.7707775e-06 9.4285714 - 95200 6.2832435e-07 0 5.343062e-06 5.3566209e-06 6.8007939e-06 9.4285714 - 95300 5.8243636e-07 0 5.3391408e-06 5.411327e-06 6.8329844e-06 9.4285714 - 95400 5.3752036e-07 0 5.3329329e-06 5.4406204e-06 6.8573377e-06 9.4285714 - 95500 5.5141526e-07 0 5.3399002e-06 5.4506865e-06 6.8841697e-06 9.4285714 - 95600 5.9422206e-07 0 5.3628211e-06 5.4526761e-06 6.9223868e-06 9.4285714 - 95700 6.0502271e-07 0 5.3849027e-06 5.448663e-06 6.9748494e-06 9.4285714 - 95800 5.9633233e-07 0 5.3916863e-06 5.4445277e-06 7.034379e-06 9.4285714 - 95900 5.8353112e-07 0 5.3864279e-06 5.4411008e-06 7.1207417e-06 9.4285714 - 96000 5.4965917e-07 0 5.3883171e-06 5.4521987e-06 7.207183e-06 9.4285714 - 96100 5.029591e-07 0 5.3992099e-06 5.4818384e-06 7.2609387e-06 9.4285714 - 96200 4.5561069e-07 0 5.4154371e-06 5.5240071e-06 7.2708316e-06 9.4285714 - 96300 4.3112225e-07 0 5.4307319e-06 5.5600285e-06 7.2500045e-06 9.4285714 - 96400 4.3930285e-07 0 5.4430151e-06 5.5789722e-06 7.2160611e-06 9.4285714 - 96500 4.6493378e-07 0 5.4661115e-06 5.5785143e-06 7.1781808e-06 9.4285714 - 96600 4.9251458e-07 0 5.4963377e-06 5.5640999e-06 7.1270969e-06 9.4285714 - 96700 5.0736557e-07 0 5.521707e-06 5.5498419e-06 7.0880266e-06 9.4285714 - 96800 5.0623403e-07 0 5.5421159e-06 5.5497869e-06 7.0876008e-06 9.4285714 - 96900 4.9644583e-07 0 5.5541079e-06 5.5554785e-06 7.0985488e-06 9.4285714 - 97000 4.9272012e-07 0 5.5642491e-06 5.5573245e-06 7.1072643e-06 9.4285714 - 97100 5.0766017e-07 0 5.574804e-06 5.5607502e-06 7.0960704e-06 9.4285714 - 97200 5.2395618e-07 0 5.5904541e-06 5.5972925e-06 7.0868355e-06 9.4285714 - 97300 4.9953435e-07 0 5.6118394e-06 5.6549726e-06 7.1004286e-06 9.4285714 - 97400 4.7056592e-07 0 5.6267739e-06 5.6665867e-06 7.132434e-06 9.4285714 - 97500 4.6366588e-07 0 5.6279978e-06 5.6384286e-06 7.1776822e-06 9.4285714 - 97600 4.6533884e-07 0 5.6201426e-06 5.6143272e-06 7.2143735e-06 9.4285714 - 97700 4.6375828e-07 0 5.6042233e-06 5.5922009e-06 7.2259013e-06 9.4285714 - 97800 4.5549968e-07 0 5.581613e-06 5.5683497e-06 7.2201315e-06 9.4285714 - 97900 4.4830148e-07 0 5.5561604e-06 5.5523988e-06 7.2080551e-06 9.4285714 - 98000 4.4229249e-07 0 5.5339104e-06 5.5493638e-06 7.1912426e-06 9.4285714 - 98100 4.3249616e-07 0 5.5169313e-06 5.5572061e-06 7.1620443e-06 9.4285714 - 98200 4.2277099e-07 0 5.5048256e-06 5.555431e-06 7.1279636e-06 9.4285714 - 98300 4.0884592e-07 0 5.4920455e-06 5.5364094e-06 7.088059e-06 9.4285714 - 98400 3.8363767e-07 0 5.4775359e-06 5.5080096e-06 7.05458e-06 9.4285714 - 98500 3.6073132e-07 0 5.4670069e-06 5.4816869e-06 7.0387787e-06 9.4285714 - 98600 3.4144123e-07 0 5.4706682e-06 5.4743026e-06 7.0537276e-06 9.4285714 - 98700 3.1616356e-07 0 5.4884314e-06 5.4787633e-06 7.0717401e-06 9.4285714 - 98800 2.9524387e-07 0 5.5116444e-06 5.4915117e-06 7.0801815e-06 9.4285714 - 98900 2.8085695e-07 0 5.5360366e-06 5.5192781e-06 7.0852811e-06 9.4285714 - 99000 2.7334761e-07 0 5.5583091e-06 5.5646801e-06 7.0905775e-06 9.4285714 - 99100 2.8302882e-07 0 5.5671736e-06 5.6102205e-06 7.0851405e-06 9.4285714 - 99200 3.0871833e-07 0 5.5626313e-06 5.641669e-06 7.0655021e-06 9.4285714 - 99300 3.2788327e-07 0 5.5501776e-06 5.6578835e-06 7.052597e-06 9.4285714 - 99400 3.270588e-07 0 5.5333145e-06 5.6580921e-06 7.0554426e-06 9.4285714 - 99500 3.0876961e-07 0 5.5137891e-06 5.6472952e-06 7.0790365e-06 9.4285714 - 99600 2.7792352e-07 0 5.492857e-06 5.630656e-06 7.1072011e-06 9.4285714 - 99700 2.4620411e-07 0 5.4730212e-06 5.6109129e-06 7.1194189e-06 9.4285714 - 99800 2.3278402e-07 0 5.464734e-06 5.5969326e-06 7.115628e-06 9.4285714 - 99900 2.394249e-07 0 5.4754248e-06 5.5974473e-06 7.1078477e-06 9.4285714 - 100000 2.4873051e-07 0 5.5011397e-06 5.6103192e-06 7.1032974e-06 9.4285714 -Loop time of 279.196 on 1 procs for 100000 steps with 2520 atoms - -Performance: 1547298.377 tau/day, 358.171 timesteps/s -99.9% 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.2815 | 4.2815 | 4.2815 | 0.0 | 1.53 -Bond | 250.07 | 250.07 | 250.07 | 0.0 | 89.57 -Neigh | 4.3874 | 4.3874 | 4.3874 | 0.0 | 1.57 -Comm | 0.1863 | 0.1863 | 0.1863 | 0.0 | 0.07 -Output | 0.091049 | 0.091049 | 0.091049 | 0.0 | 0.03 -Modify | 19.366 | 19.366 | 19.366 | 0.0 | 6.94 -Other | | 0.8108 | | | 0.29 - -Nlocal: 2520.00 ave 2520 max 2520 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 0.00000 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 9814.00 ave 9814 max 9814 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 9814 -Ave neighs/atom = 3.8944444 -Ave special neighs/atom = 36.317460 -Neighbor list builds = 4924 -Dangerous builds = 274 -Total wall time: 0:04:39 diff --git a/src/.gitignore b/src/.gitignore index 4175d28513..76abffa5ce 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -253,8 +253,8 @@ /pair_mesont_tpm.cpp /pair_mesont_tpm.h -/atom_vec_sphere_bpm.cpp -/atom_vec_sphere_bpm.h +/atom_vec_bpm_sphere.cpp +/atom_vec_bpm_sphere.h /bond_bpm.cpp /bond_bpm.h /bond_bpm_rotational.cpp @@ -263,8 +263,8 @@ /bond_bpm_spring.h /compute_nbond_atom.cpp /compute_nbond_atom.h -/fix_nve_sphere_bpm.cpp -/fix_nve_sphere_bpm.h +/fix_nve_bpm_sphere.cpp +/fix_nve_bpm_sphere.h /pair_bpm_spring.cpp /pair_bpm_spring.h diff --git a/src/BPM/atom_vec_sphere_bpm.cpp b/src/BPM/atom_vec_bpm_sphere.cpp similarity index 90% rename from src/BPM/atom_vec_sphere_bpm.cpp rename to src/BPM/atom_vec_bpm_sphere.cpp index 3fe372e340..b5fdefc0d1 100644 --- a/src/BPM/atom_vec_sphere_bpm.cpp +++ b/src/BPM/atom_vec_bpm_sphere.cpp @@ -12,7 +12,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include "atom_vec_sphere_bpm.h" +#include "atom_vec_bpm_sphere.h" #include "atom.h" #include "error.h" @@ -29,7 +29,7 @@ using namespace MathConst; /* ---------------------------------------------------------------------- */ -AtomVecSphereBPM::AtomVecSphereBPM(LAMMPS *lmp) : AtomVec(lmp) +AtomVecBPMSphere::AtomVecBPMSphere(LAMMPS *lmp) : AtomVec(lmp) { mass_type = PER_ATOM; molecular = Atom::MOLECULAR; @@ -72,16 +72,16 @@ AtomVecSphereBPM::AtomVecSphereBPM(LAMMPS *lmp) : AtomVec(lmp) optional arg = 0/1 for static/dynamic particle radii ------------------------------------------------------------------------- */ -void AtomVecSphereBPM::process_args(int narg, char **arg) +void AtomVecBPMSphere::process_args(int narg, char **arg) { if (narg != 0 && narg != 1) - error->all(FLERR,"Illegal atom_style sphere/bpm command"); + error->all(FLERR,"Illegal atom_style bpm/sphere command"); radvary = 0; if (narg == 1) { radvary = utils::numeric(FLERR,arg[0],true,lmp); if (radvary < 0 || radvary > 1) - error->all(FLERR,"Illegal atom_style sphere/bpm command"); + error->all(FLERR,"Illegal atom_style bpm/sphere command"); } // dynamic particle radius and mass must be communicated every step @@ -98,7 +98,7 @@ void AtomVecSphereBPM::process_args(int narg, char **arg) /* ---------------------------------------------------------------------- */ -void AtomVecSphereBPM::init() +void AtomVecBPMSphere::init() { AtomVec::init(); @@ -109,7 +109,7 @@ void AtomVecSphereBPM::init() FixAdapt *fix = (FixAdapt *) modify->fix[i]; if (fix->diamflag && radvary == 0) error->all(FLERR,"Fix adapt changes particle radii " - "but atom_style sphere is not dynamic"); + "but atom_style bpm/sphere is not dynamic"); } } @@ -118,7 +118,7 @@ void AtomVecSphereBPM::init() needed in replicate when 2 atom classes exist and it calls pack_restart() ------------------------------------------------------------------------- */ -void AtomVecSphereBPM::grow_pointers() +void AtomVecBPMSphere::grow_pointers() { radius = atom->radius; rmass = atom->rmass; @@ -135,7 +135,7 @@ void AtomVecSphereBPM::grow_pointers() initialize non-zero atom quantities ------------------------------------------------------------------------- */ -void AtomVecSphereBPM::create_atom_post(int ilocal) +void AtomVecBPMSphere::create_atom_post(int ilocal) { radius[ilocal] = 0.5; rmass[ilocal] = 4.0*MY_PI/3.0 * 0.5*0.5*0.5; @@ -151,7 +151,7 @@ void AtomVecSphereBPM::create_atom_post(int ilocal) modify values for AtomVec::pack_restart() to pack ------------------------------------------------------------------------- */ -void AtomVecSphereBPM::pack_restart_pre(int ilocal) +void AtomVecBPMSphere::pack_restart_pre(int ilocal) { // insure bond_negative vector is needed length @@ -177,7 +177,7 @@ void AtomVecSphereBPM::pack_restart_pre(int ilocal) unmodify values packed by AtomVec::pack_restart() ------------------------------------------------------------------------- */ -void AtomVecSphereBPM::pack_restart_post(int ilocal) +void AtomVecBPMSphere::pack_restart_post(int ilocal) { // restore the flagged types to their negative values @@ -191,7 +191,7 @@ void AtomVecSphereBPM::pack_restart_post(int ilocal) initialize other atom quantities after AtomVec::unpack_restart() ------------------------------------------------------------------------- */ -void AtomVecSphereBPM::unpack_restart_init(int ilocal) +void AtomVecBPMSphere::unpack_restart_init(int ilocal) { nspecial[ilocal][0] = 0; nspecial[ilocal][1] = 0; @@ -203,7 +203,7 @@ void AtomVecSphereBPM::unpack_restart_init(int ilocal) or initialize other atom quantities ------------------------------------------------------------------------- */ -void AtomVecSphereBPM::data_atom_post(int ilocal) +void AtomVecBPMSphere::data_atom_post(int ilocal) { radius_one = 0.5 * atom->radius[ilocal]; radius[ilocal] = radius_one; @@ -232,7 +232,7 @@ void AtomVecSphereBPM::data_atom_post(int ilocal) modify values for AtomVec::pack_data() to pack ------------------------------------------------------------------------- */ -void AtomVecSphereBPM::pack_data_pre(int ilocal) +void AtomVecBPMSphere::pack_data_pre(int ilocal) { radius_one = radius[ilocal]; rmass_one = rmass[ilocal]; @@ -247,7 +247,7 @@ void AtomVecSphereBPM::pack_data_pre(int ilocal) unmodify values packed by AtomVec::pack_data() ------------------------------------------------------------------------- */ -void AtomVecSphereBPM::pack_data_post(int ilocal) +void AtomVecBPMSphere::pack_data_post(int ilocal) { radius[ilocal] = radius_one; rmass[ilocal] = rmass_one; diff --git a/src/BPM/atom_vec_sphere_bpm.h b/src/BPM/atom_vec_bpm_sphere.h similarity index 90% rename from src/BPM/atom_vec_sphere_bpm.h rename to src/BPM/atom_vec_bpm_sphere.h index 2a8aa36d32..4ff62e3601 100644 --- a/src/BPM/atom_vec_sphere_bpm.h +++ b/src/BPM/atom_vec_bpm_sphere.h @@ -13,20 +13,20 @@ #ifdef ATOM_CLASS // clang-format off -AtomStyle(sphere/bpm,AtomVecSphereBPM) +AtomStyle(bpm/sphere,AtomVecBPMSphere) // clang-format on #else -#ifndef LMP_ATOM_VEC_SPHERE_BPM_H -#define LMP_ATOM_VEC_SPHERE_BPM_H +#ifndef LMP_ATOM_VEC_BPM_SPHERE_H +#define LMP_ATOM_VEC_BPM_SPHERE_H #include "atom_vec.h" namespace LAMMPS_NS { -class AtomVecSphereBPM : public AtomVec { +class AtomVecBPMSphere : public AtomVec { public: - AtomVecSphereBPM(class LAMMPS *); + AtomVecBPMSphere(class LAMMPS *); void process_args(int, char **) override; void init() override; diff --git a/src/BPM/bond_bpm.cpp b/src/BPM/bond_bpm.cpp index 2ee956346b..29a08ee344 100644 --- a/src/BPM/bond_bpm.cpp +++ b/src/BPM/bond_bpm.cpp @@ -56,11 +56,11 @@ BondBPM::BondBPM(LAMMPS *lmp) : Bond(lmp) // this is so final order of Modify:fix will conform to input script // BondHistory technically only needs this if updateflag = 1 - id_fix_dummy = utils::strdup("BPM_DUMMY_" + std::to_string(instance_me)); + id_fix_dummy = utils::strdup("BPM_DUMMY"); modify->add_fix(fmt::format("{} all DUMMY ", id_fix_dummy)); - id_fix_dummy2 = utils::strdup("BPM_DUMMY2_" + std::to_string(instance_me)); - modify->add_fix(fmt::format("{} all DUMMY ", id_fix_dummy2)); + id_fix_dummy2 = utils::strdup("BPM_DUMMY2"); + modify->add_fix(fmt::format("{} all DUMMY ", id_fix_dummy2)); } /* ---------------------------------------------------------------------- */ @@ -126,7 +126,7 @@ void BondBPM::init_style() error->all(FLERR,"Without overlay/pair, BPM bond sytles requires special Coulomb weights = 1,1,1"); if (id_fix_dummy) { - id_fix_update = utils::strdup("BPM_UPDATE_SPECIAL_BONDS_" + std::to_string(instance_me)); + 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); delete [] id_fix_dummy; @@ -222,10 +222,10 @@ void BondBPM::settings(int narg, char **arg) // a reference state isn't well defined if (prop_atom_flag == 1) { - id_fix_prop_atom = utils::strdup("BPM_property_atom" + std::to_string(instance_me)); - char *x_ref_id = utils::strdup("BPM_X_REF" + std::to_string(instance_me)); - char *y_ref_id = utils::strdup("BPM_Y_REF" + std::to_string(instance_me)); - char *z_ref_id = utils::strdup("BPM_Z_REF" + std::to_string(instance_me)); + id_fix_prop_atom = utils::strdup("BPM_property_atom"); + char *x_ref_id = utils::strdup("BPM_X_REF"); + char *y_ref_id = utils::strdup("BPM_Y_REF"); + char *z_ref_id = utils::strdup("BPM_Z_REF"); ifix = modify->find_fix(id_fix_prop_atom); if (ifix < 0) { diff --git a/src/BPM/bond_bpm_rotational.cpp b/src/BPM/bond_bpm_rotational.cpp index e4220e9198..5991187061 100644 --- a/src/BPM/bond_bpm_rotational.cpp +++ b/src/BPM/bond_bpm_rotational.cpp @@ -50,6 +50,7 @@ BondBPMRotational::BondBPMRotational(LAMMPS *lmp) : BondBPM(lmp) groll = nullptr; gtwist = nullptr; partial_flag = 1; + smooth_flag = 1; } /* ---------------------------------------------------------------------- */ @@ -531,8 +532,12 @@ void BondBPMRotational::compute(int eflag, int vflag) damping_forces(i1, i2, type, Fr, rhat, r, force1on2, torque1on2, torque2on1); - smooth = breaking*breaking; - smooth = 1.0 - smooth*smooth; + if (smooth_flag) { + smooth = breaking*breaking; + smooth = 1.0 - smooth*smooth; + } else { + smooth = 1.0; + } // ------------------------------------------------------// // Apply forces and torques to particles @@ -635,7 +640,7 @@ void BondBPMRotational::coeff(int narg, char **arg) } /* ---------------------------------------------------------------------- - check for correct settings and create fix + check for correct settings and create fix ------------------------------------------------------------------------- */ void BondBPMRotational::init_style() @@ -643,7 +648,7 @@ void BondBPMRotational::init_style() BondBPM::init_style(); if (!atom->quat_flag || !atom->sphere_flag) - error->all(FLERR,"Bond bpm/rotational requires atom style sphere/bpm"); + error->all(FLERR,"Bond bpm/rotational requires atom style bpm/sphere"); if (comm->ghost_velocity == 0) error->all(FLERR,"Bond bpm/rotational requires ghost atoms store velocity"); @@ -651,7 +656,7 @@ void BondBPMRotational::init_style() error->warning(FLERR, "Bond style bpm/rotational not intended for 2d use"); if (!id_fix_bond_history) { - id_fix_bond_history = utils::strdup("HISTORY_BPM_ROTATIONAL" + std::to_string(instance_me)); + id_fix_bond_history = utils::strdup("HISTORY_BPM_ROTATIONAL"); fix_bond_history = (FixBondHistory *) modify->replace_fix(id_fix_dummy2, fmt::format("{} all BOND_HISTORY 0 4", id_fix_bond_history),1); delete [] id_fix_dummy2; @@ -665,8 +670,16 @@ void BondBPMRotational::settings(int narg, char **arg) { BondBPM::settings(narg, arg); - for (int iarg : leftover_iarg) { - error->all(FLERR, "Illegal bond_style command"); + int iarg; + for (int 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"); + smooth_flag = utils::logical(FLERR,arg[iarg+1],false,lmp); + i += 1; + } else { + error->all(FLERR, "Illegal bond_style command"); + } } } @@ -782,8 +795,10 @@ double BondBPMRotational::single(int type, double rsq, int i, int j, damping_forces(i, j, type, Fr, rhat, r, force1on2, torque1on2, torque2on1); fforce += Fr; - smooth = breaking*breaking; - smooth = 1.0 - smooth*smooth; - fforce *= smooth; + if (smooth_flag) { + smooth = breaking*breaking; + smooth = 1.0 - smooth*smooth; + fforce *= smooth; + } return 0.0; } diff --git a/src/BPM/bond_bpm_rotational.h b/src/BPM/bond_bpm_rotational.h index d4dafbe9b4..4b7baa95b5 100644 --- a/src/BPM/bond_bpm_rotational.h +++ b/src/BPM/bond_bpm_rotational.h @@ -40,6 +40,8 @@ class BondBPMRotational : public BondBPM { protected: double *Kr, *Ks, *Kt, *Kb, *gnorm, *gslide, *groll, *gtwist; double *Fcr, *Fcs, *Tct, *Tcb; + int smooth_flag; + double acos_limit(double); double elastic_forces(int, int, int, double &, double, double, double, @@ -67,7 +69,7 @@ E: Incorrect args for bond coefficients Self-explanatory. Check the input script or data file. -E: Bond bpm/rotational requires atom style sphere/bpm +E: Bond bpm/rotational requires atom style bpm/sphere Self-explanatory. diff --git a/src/BPM/bond_bpm_spring.cpp b/src/BPM/bond_bpm_spring.cpp index 5c731aeb53..5670d70358 100644 --- a/src/BPM/bond_bpm_spring.cpp +++ b/src/BPM/bond_bpm_spring.cpp @@ -36,6 +36,7 @@ BondBPMSpring::BondBPMSpring(LAMMPS *lmp) : BondBPM(lmp) ecrit = nullptr; gamma = nullptr; partial_flag = 1; + smooth_flag = 1; } /* ---------------------------------------------------------------------- */ @@ -197,14 +198,16 @@ void BondBPMSpring::compute(int eflag, int vflag) delvz = v[i1][2] - v[i2][2]; dot = delx*delvx + dely*delvy + delz*delvz; fbond -= gamma[type]*dot*rinv; + fbond *= rinv; - smooth = (r-r0)/(r0*ecrit[type]); - smooth *= smooth; - smooth *= smooth; - smooth *= smooth; - smooth = 1 - smooth; - - fbond *= rinv*smooth; + 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; @@ -279,12 +282,12 @@ void BondBPMSpring::init_style() error->all(FLERR,"Bond bpm/spring requires ghost atoms store velocity"); if (!id_fix_bond_history) { - id_fix_bond_history = utils::strdup("HISTORY_BPM_SPRING" + std::to_string(instance_me)); + id_fix_bond_history = utils::strdup("HISTORY_BPM_SPRING"); fix_bond_history = (FixBondHistory *) modify->replace_fix(id_fix_dummy2, fmt::format("{} all BOND_HISTORY 0 1", id_fix_bond_history),1); delete [] id_fix_dummy2; id_fix_dummy2 = nullptr; - } + } } /* ---------------------------------------------------------------------- */ @@ -293,8 +296,16 @@ void BondBPMSpring::settings(int narg, char **arg) { BondBPM::settings(narg, arg); - for (int iarg : leftover_iarg) { - error->all(FLERR, "Illegal bond_style command"); + int iarg; + for (int 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"); + smooth_flag = utils::logical(FLERR,arg[iarg+1],false,lmp); + i += 1; + } else { + error->all(FLERR, "Illegal bond_style command"); + } } } @@ -368,13 +379,16 @@ double BondBPMSpring::single(int type, double rsq, int i, int j, double delvz = v[i][2] - v[j][2]; double dot = delx*delvx + dely*delvy + delz*delvz; fforce -= gamma[type]*dot*rinv; + fforce *= rinv; - double smooth = (r-r0)/(r0*ecrit[type]); - smooth *= smooth; - smooth *= smooth; - smooth *= smooth; - smooth = 1 - smooth; + if (smooth_flag) { + double smooth = (r-r0)/(r0*ecrit[type]); + smooth *= smooth; + smooth *= smooth; + smooth *= smooth; + smooth = 1 - smooth; + fforce *= smooth; + } - fforce *= rinv*smooth; return 0.0; } diff --git a/src/BPM/bond_bpm_spring.h b/src/BPM/bond_bpm_spring.h index 00e11954e0..faaf6025b7 100644 --- a/src/BPM/bond_bpm_spring.h +++ b/src/BPM/bond_bpm_spring.h @@ -39,6 +39,7 @@ class BondBPMSpring : public BondBPM { protected: double *k, *ecrit, *gamma; + int smooth_flag; void allocate(); void store_data(); diff --git a/src/BPM/fix_nve_sphere_bpm.cpp b/src/BPM/fix_nve_bpm_sphere.cpp similarity index 87% rename from src/BPM/fix_nve_sphere_bpm.cpp rename to src/BPM/fix_nve_bpm_sphere.cpp index 66801cc0b6..0a296fc319 100644 --- a/src/BPM/fix_nve_sphere_bpm.cpp +++ b/src/BPM/fix_nve_bpm_sphere.cpp @@ -12,7 +12,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include "fix_nve_sphere_bpm.h" +#include "fix_nve_bpm_sphere.h" #include "atom.h" #include "atom_vec.h" @@ -31,10 +31,10 @@ using namespace MathExtra; /* ---------------------------------------------------------------------- */ -FixNVESphereBPM::FixNVESphereBPM(LAMMPS *lmp, int narg, char **arg) : +FixNVEBPMSphere::FixNVEBPMSphere(LAMMPS *lmp, int narg, char **arg) : FixNVE(lmp, narg, arg) { - if (narg < 3) error->all(FLERR,"Illegal fix nve/sphere/bpm command"); + if (narg < 3) error->all(FLERR,"Illegal fix nve/bpm/sphere command"); time_integrate = 1; @@ -48,10 +48,10 @@ FixNVESphereBPM::FixNVESphereBPM(LAMMPS *lmp, int narg, char **arg) : if (strcmp(arg[iarg],"disc")==0) { inertia = 0.5; if (domain->dimension != 2) - error->all(FLERR,"Fix nve/sphere/bpm disc requires 2d simulation"); + error->all(FLERR,"Fix nve/bpm/sphere disc requires 2d simulation"); iarg++; } - else error->all(FLERR,"Illegal fix nve/sphere/bpm command"); + else error->all(FLERR,"Illegal fix nve/bpm/sphere command"); } inv_inertia = 1.0/inertia; @@ -59,12 +59,12 @@ FixNVESphereBPM::FixNVESphereBPM(LAMMPS *lmp, int narg, char **arg) : // error checks if (!atom->quat_flag || !atom->sphere_flag) - error->all(FLERR,"Fix nve/sphere/bpm requires atom style sphere/bpm"); + error->all(FLERR,"Fix nve/bpm/sphere requires atom style bpm/sphere"); } /* ---------------------------------------------------------------------- */ -void FixNVESphereBPM::init() +void FixNVEBPMSphere::init() { FixNVE::init(); @@ -78,12 +78,12 @@ void FixNVESphereBPM::init() for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) if (radius[i] == 0.0) - error->one(FLERR,"Fix nve/sphere/bpm requires extended particles"); + error->one(FLERR,"Fix nve/bpm/sphere requires extended particles"); } /* ---------------------------------------------------------------------- */ -void FixNVESphereBPM::initial_integrate(int /*vflag*/) +void FixNVEBPMSphere::initial_integrate(int /*vflag*/) { double dtq,dtfm,dtirotate,particle_inertia; @@ -128,7 +128,7 @@ void FixNVESphereBPM::initial_integrate(int /*vflag*/) /* ---------------------------------------------------------------------- */ -void FixNVESphereBPM::final_integrate() +void FixNVEBPMSphere::final_integrate() { double dtfm,dtirotate,particle_inertia; diff --git a/src/BPM/fix_nve_sphere_bpm.h b/src/BPM/fix_nve_bpm_sphere.h similarity index 76% rename from src/BPM/fix_nve_sphere_bpm.h rename to src/BPM/fix_nve_bpm_sphere.h index ee6f1b452c..5a24132e03 100644 --- a/src/BPM/fix_nve_sphere_bpm.h +++ b/src/BPM/fix_nve_bpm_sphere.h @@ -13,20 +13,20 @@ #ifdef FIX_CLASS // clang-format off -FixStyle(nve/sphere/bpm,FixNVESphereBPM) +FixStyle(nve/bpm/sphere,FixNVEBPMSphere) // clang-format on #else -#ifndef LMP_FIX_NVE_SPHERE_BPM_H -#define LMP_FIX_NVE_SPHERE_BPM_H +#ifndef LMP_FIX_NVE_BPM_SPHERE_H +#define LMP_FIX_NVE_BPM_SPHERE_H #include "fix_nve.h" namespace LAMMPS_NS { -class FixNVESphereBPM : public FixNVE { +class FixNVEBPMSphere : public FixNVE { public: - FixNVESphereBPM(class LAMMPS *, int, char **); + FixNVEBPMSphere(class LAMMPS *, int, char **); void init() override; void initial_integrate(int) override; @@ -51,19 +51,19 @@ 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: Fix nve/sphere/bpm disc requires 2d simulation +E: Fix nve/bpm/sphere disc requires 2d simulation UNDOCUMENTED -E: Fix nve/sphere/bpm requires atom style sphere/bpm +E: Fix nve/bpm/sphere requires atom style bpm/sphere Self-explanatory. -E: Fix nve/sphere/bpm update dipole requires atom attribute mu +E: Fix nve/bpm/sphere update dipole requires atom attribute mu An atom style with this attribute is needed. -E: Fix nve/sphere/bpm requires extended particles +E: Fix nve/bpm/sphere requires extended particles This fix can only be used for particles of a finite size. diff --git a/src/input.cpp b/src/input.cpp index b829d7eb5d..336dfd584f 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -1333,27 +1333,6 @@ void Input::bond_style() if (narg < 1) error->all(FLERR,"Illegal bond_style command"); if (atom->avec->bonds_allow == 0) error->all(FLERR,"Bond_style command when no bonds allowed"); - - if (force->bond) { - std::string style = arg[0]; - int match = 0; - if (style == force->bond_style) match = 1; - if (!match && lmp->suffix_enable) { - if (lmp->suffixp) - if (style + "/" + lmp->suffixp == force->bond_style) match = 1; - - if (lmp->suffix && !lmp->suffixp) - if (style + "/" + lmp->suffix == force->bond_style) match = 1; - - if (lmp->suffix2) - if (style + "/" + lmp->suffix2 == force->bond_style) match = 1; - } - if (match) { - force->bond->settings(narg-1,&arg[1]); - return; - } - } - force->create_bond(arg[0],1); if (force->bond) force->bond->settings(narg-1,&arg[1]); } From dad8fb8b0688086ba67b5506d9ac4cd5f6102f27 Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Thu, 24 Mar 2022 11:44:44 -0600 Subject: [PATCH 24/40] Removing residual files --- src/atom_vec_sphere_bpm.cpp | 254 ------------------------------------ src/atom_vec_sphere_bpm.h | 83 ------------ src/fix_nve_sphere_bpm.cpp | 161 ----------------------- src/fix_nve_sphere_bpm.h | 71 ---------- 4 files changed, 569 deletions(-) delete mode 100644 src/atom_vec_sphere_bpm.cpp delete mode 100644 src/atom_vec_sphere_bpm.h delete mode 100644 src/fix_nve_sphere_bpm.cpp delete mode 100644 src/fix_nve_sphere_bpm.h diff --git a/src/atom_vec_sphere_bpm.cpp b/src/atom_vec_sphere_bpm.cpp deleted file mode 100644 index 3fe372e340..0000000000 --- a/src/atom_vec_sphere_bpm.cpp +++ /dev/null @@ -1,254 +0,0 @@ -// clang-format off -/* ---------------------------------------------------------------------- - 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 "atom_vec_sphere_bpm.h" - -#include "atom.h" -#include "error.h" -#include "fix.h" -#include "fix_adapt.h" -#include "math_const.h" -#include "modify.h" -#include "utils.h" - -#include - -using namespace LAMMPS_NS; -using namespace MathConst; - -/* ---------------------------------------------------------------------- */ - -AtomVecSphereBPM::AtomVecSphereBPM(LAMMPS *lmp) : AtomVec(lmp) -{ - mass_type = PER_ATOM; - molecular = Atom::MOLECULAR; - bonds_allow = 1; - - atom->molecule_flag = 1; - atom->sphere_flag = 1; - atom->radius_flag = atom->rmass_flag = atom->omega_flag = - atom->torque_flag = atom->quat_flag = 1; - - // strings with peratom variables to include in each AtomVec method - // strings cannot contain fields in corresponding AtomVec default strings - // order of fields in a string does not matter - // except: fields_data_atom & fields_data_vel must match data file - - fields_grow = (char *) - "molecule num_bond bond_type bond_atom nspecial special radius rmass omega torque quat"; - fields_copy = (char *) - "molecule num_bond bond_type bond_atom nspecial special radius rmass omega quat"; - fields_comm = (char *) ""; - fields_comm_vel = (char *) "omega quat"; - fields_reverse = (char *) "torque"; - fields_border = (char *) "molecule radius rmass"; - fields_border_vel = (char *) "molecule radius rmass omega quat"; - fields_exchange = (char *) - "molecule num_bond bond_type bond_atom nspecial special radius rmass omega quat"; - fields_restart = (char *) - "molecule num_bond bond_type bond_atom radius rmass omega quat"; - fields_create = (char *) - "molecule num_bond nspecial radius rmass omega quat"; - fields_data_atom = (char *) "id molecule type radius rmass x"; - fields_data_vel = (char *) "id v omega"; - - bond_per_atom = 0; - bond_negative = NULL; -} - -/* ---------------------------------------------------------------------- - process sub-style args - optional arg = 0/1 for static/dynamic particle radii -------------------------------------------------------------------------- */ - -void AtomVecSphereBPM::process_args(int narg, char **arg) -{ - if (narg != 0 && narg != 1) - error->all(FLERR,"Illegal atom_style sphere/bpm command"); - - radvary = 0; - if (narg == 1) { - radvary = utils::numeric(FLERR,arg[0],true,lmp); - if (radvary < 0 || radvary > 1) - error->all(FLERR,"Illegal atom_style sphere/bpm command"); - } - - // dynamic particle radius and mass must be communicated every step - - if (radvary) { - fields_comm = (char *) "radius rmass"; - fields_comm_vel = (char *) "radius rmass omega"; - } - - // delay setting up of fields until now - - setup_fields(); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecSphereBPM::init() -{ - AtomVec::init(); - - // check if optional radvary setting should have been set to 1 - - for (int i = 0; i < modify->nfix; i++) - if (strcmp(modify->fix[i]->style,"adapt") == 0) { - FixAdapt *fix = (FixAdapt *) modify->fix[i]; - if (fix->diamflag && radvary == 0) - error->all(FLERR,"Fix adapt changes particle radii " - "but atom_style sphere is not dynamic"); - } -} - -/* ---------------------------------------------------------------------- - set local copies of all grow ptrs used by this class, except defaults - needed in replicate when 2 atom classes exist and it calls pack_restart() -------------------------------------------------------------------------- */ - -void AtomVecSphereBPM::grow_pointers() -{ - radius = atom->radius; - rmass = atom->rmass; - omega = atom->omega; - quat = atom->quat; - - num_bond = atom->num_bond; - bond_type = atom->bond_type; - nspecial = atom->nspecial; -} - - -/* ---------------------------------------------------------------------- - initialize non-zero atom quantities -------------------------------------------------------------------------- */ - -void AtomVecSphereBPM::create_atom_post(int ilocal) -{ - radius[ilocal] = 0.5; - rmass[ilocal] = 4.0*MY_PI/3.0 * 0.5*0.5*0.5; - - quat[ilocal][0] = 1.0; - quat[ilocal][1] = 0.0; - quat[ilocal][2] = 0.0; - quat[ilocal][3] = 0.0; - -} - -/* ---------------------------------------------------------------------- - modify values for AtomVec::pack_restart() to pack -------------------------------------------------------------------------- */ - -void AtomVecSphereBPM::pack_restart_pre(int ilocal) -{ - // insure bond_negative vector is needed length - - if (bond_per_atom < atom->bond_per_atom) { - delete [] bond_negative; - bond_per_atom = atom->bond_per_atom; - bond_negative = new int[bond_per_atom]; - } - - // flip any negative types to positive and flag which ones - - any_bond_negative = 0; - for (int m = 0; m < num_bond[ilocal]; m++) { - if (bond_type[ilocal][m] < 0) { - bond_negative[m] = 1; - bond_type[ilocal][m] = -bond_type[ilocal][m]; - any_bond_negative = 1; - } else bond_negative[m] = 0; - } -} - -/* ---------------------------------------------------------------------- - unmodify values packed by AtomVec::pack_restart() -------------------------------------------------------------------------- */ - -void AtomVecSphereBPM::pack_restart_post(int ilocal) -{ - // restore the flagged types to their negative values - - if (any_bond_negative) { - for (int m = 0; m < num_bond[ilocal]; m++) - if (bond_negative[m]) bond_type[ilocal][m] = -bond_type[ilocal][m]; - } -} - -/* ---------------------------------------------------------------------- - initialize other atom quantities after AtomVec::unpack_restart() -------------------------------------------------------------------------- */ - -void AtomVecSphereBPM::unpack_restart_init(int ilocal) -{ - nspecial[ilocal][0] = 0; - nspecial[ilocal][1] = 0; - nspecial[ilocal][2] = 0; -} - -/* ---------------------------------------------------------------------- - modify what AtomVec::data_atom() just unpacked - or initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecSphereBPM::data_atom_post(int ilocal) -{ - radius_one = 0.5 * atom->radius[ilocal]; - radius[ilocal] = radius_one; - if (radius_one > 0.0) - rmass[ilocal] *= 4.0*MY_PI/3.0 * radius_one*radius_one*radius_one; - - if (rmass[ilocal] <= 0.0) - error->one(FLERR,"Invalid density in Atoms section of data file"); - - omega[ilocal][0] = 0.0; - omega[ilocal][1] = 0.0; - omega[ilocal][2] = 0.0; - - quat[ilocal][0] = 1.0; - quat[ilocal][1] = 0.0; - quat[ilocal][2] = 0.0; - quat[ilocal][3] = 0.0; - - num_bond[ilocal] = 0; - nspecial[ilocal][0] = 0; - nspecial[ilocal][1] = 0; - nspecial[ilocal][2] = 0; -} - -/* ---------------------------------------------------------------------- - modify values for AtomVec::pack_data() to pack -------------------------------------------------------------------------- */ - -void AtomVecSphereBPM::pack_data_pre(int ilocal) -{ - radius_one = radius[ilocal]; - rmass_one = rmass[ilocal]; - - radius[ilocal] *= 2.0; - if (radius_one!= 0.0) - rmass[ilocal] = - rmass_one / (4.0*MY_PI/3.0 * radius_one*radius_one*radius_one); -} - -/* ---------------------------------------------------------------------- - unmodify values packed by AtomVec::pack_data() -------------------------------------------------------------------------- */ - -void AtomVecSphereBPM::pack_data_post(int ilocal) -{ - radius[ilocal] = radius_one; - rmass[ilocal] = rmass_one; -} diff --git a/src/atom_vec_sphere_bpm.h b/src/atom_vec_sphere_bpm.h deleted file mode 100644 index 2a8aa36d32..0000000000 --- a/src/atom_vec_sphere_bpm.h +++ /dev/null @@ -1,83 +0,0 @@ -/* -*- 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 ATOM_CLASS -// clang-format off -AtomStyle(sphere/bpm,AtomVecSphereBPM) -// clang-format on -#else - -#ifndef LMP_ATOM_VEC_SPHERE_BPM_H -#define LMP_ATOM_VEC_SPHERE_BPM_H - -#include "atom_vec.h" - -namespace LAMMPS_NS { - -class AtomVecSphereBPM : public AtomVec { - public: - AtomVecSphereBPM(class LAMMPS *); - void process_args(int, char **) override; - void init() override; - - void grow_pointers() override; - void create_atom_post(int) override; - void pack_restart_pre(int) override; - void pack_restart_post(int) override; - void unpack_restart_init(int) override; - void data_atom_post(int) override; - void pack_data_pre(int) override; - void pack_data_post(int) override; - - - private: - int *num_bond; - int **bond_type; - int **nspecial; - - double *radius,*rmass; - double **omega, **torque, **quat; - - int any_bond_negative; - int bond_per_atom; - int *bond_negative; - - int radvary; - double radius_one,rmass_one; -}; - -} // namespace LAMMPS_NS - -#endif -#endif - -/* ERROR/WARNING messages: - -E: Per-processor system is too big - -The number of owned atoms plus ghost atoms on a single -processor must fit in 32-bit integer. - -E: Invalid atom type in Atoms section of data file - -Atom types must range from 1 to specified # of types. - -E: Invalid radius in Atoms section of data file - -Radius must be >= 0.0. - -E: Invalid density in Atoms section of data file - -Density value cannot be <= 0.0. - -*/ diff --git a/src/fix_nve_sphere_bpm.cpp b/src/fix_nve_sphere_bpm.cpp deleted file mode 100644 index 66801cc0b6..0000000000 --- a/src/fix_nve_sphere_bpm.cpp +++ /dev/null @@ -1,161 +0,0 @@ -// clang-format off -/* ---------------------------------------------------------------------- - 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_nve_sphere_bpm.h" - -#include "atom.h" -#include "atom_vec.h" -#include "domain.h" -#include "error.h" -#include "force.h" -#include "math_extra.h" - -#include -#include - -using namespace LAMMPS_NS; -using namespace FixConst; -using namespace MathExtra; - - -/* ---------------------------------------------------------------------- */ - -FixNVESphereBPM::FixNVESphereBPM(LAMMPS *lmp, int narg, char **arg) : - FixNVE(lmp, narg, arg) -{ - if (narg < 3) error->all(FLERR,"Illegal fix nve/sphere/bpm command"); - - time_integrate = 1; - - // process extra keywords - // inertia = moment of inertia prefactor for sphere or disc - - inertia = 0.4; - - int iarg = 3; - while (iarg < narg) { - if (strcmp(arg[iarg],"disc")==0) { - inertia = 0.5; - if (domain->dimension != 2) - error->all(FLERR,"Fix nve/sphere/bpm disc requires 2d simulation"); - iarg++; - } - else error->all(FLERR,"Illegal fix nve/sphere/bpm command"); - } - - inv_inertia = 1.0/inertia; - - // error checks - - if (!atom->quat_flag || !atom->sphere_flag) - error->all(FLERR,"Fix nve/sphere/bpm requires atom style sphere/bpm"); -} - -/* ---------------------------------------------------------------------- */ - -void FixNVESphereBPM::init() -{ - FixNVE::init(); - - // check that all particles are finite-size spheres - // no point particles allowed - - double *radius = atom->radius; - int *mask = atom->mask; - int nlocal = atom->nlocal; - - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) - if (radius[i] == 0.0) - error->one(FLERR,"Fix nve/sphere/bpm requires extended particles"); -} - -/* ---------------------------------------------------------------------- */ - -void FixNVESphereBPM::initial_integrate(int /*vflag*/) -{ - double dtq,dtfm,dtirotate,particle_inertia; - - double **x = atom->x; - double **v = atom->v; - double **f = atom->f; - double **omega = atom->omega; - double **torque = atom->torque; - double **quat = atom->quat; - double *radius = atom->radius; - double *rmass = atom->rmass; - int *mask = atom->mask; - int nlocal = atom->nlocal; - if (igroup == atom->firstgroup) nlocal = atom->nfirst; - - // set timestep here since dt may have changed or come via rRESPA - dtq = 0.5 * dtv; - - // update v,x,omega,quat for all particles - // d_omega/dt = torque / inertia - - for (int i = 0; i < nlocal; i++) { - if (mask[i] & groupbit) { - dtfm = dtf / rmass[i]; - v[i][0] += dtfm * f[i][0]; - v[i][1] += dtfm * f[i][1]; - v[i][2] += dtfm * f[i][2]; - x[i][0] += dtv * v[i][0]; - x[i][1] += dtv * v[i][1]; - x[i][2] += dtv * v[i][2]; - - particle_inertia = inertia*(radius[i]*radius[i]*rmass[i]); - dtirotate = dtf / particle_inertia; - omega[i][0] += dtirotate * torque[i][0]; - omega[i][1] += dtirotate * torque[i][1]; - omega[i][2] += dtirotate * torque[i][2]; - - MathExtra::richardson_sphere(quat[i],omega[i],dtq); - } - } -} - -/* ---------------------------------------------------------------------- */ - -void FixNVESphereBPM::final_integrate() -{ - double dtfm,dtirotate,particle_inertia; - - double **v = atom->v; - double **f = atom->f; - double **omega = atom->omega; - double **torque = atom->torque; - double *rmass = atom->rmass; - double *radius = atom->radius; - int *mask = atom->mask; - int nlocal = atom->nlocal; - if (igroup == atom->firstgroup) nlocal = atom->nfirst; - - // update v,omega for all particles - // d_omega/dt = torque / inertia - - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) { - dtfm = dtf / rmass[i]; - v[i][0] += dtfm * f[i][0]; - v[i][1] += dtfm * f[i][1]; - v[i][2] += dtfm * f[i][2]; - - particle_inertia = inertia*(radius[i]*radius[i]*rmass[i]); - dtirotate = dtf / particle_inertia; - omega[i][0] += dtirotate * torque[i][0]; - omega[i][1] += dtirotate * torque[i][1]; - omega[i][2] += dtirotate * torque[i][2]; - } -} diff --git a/src/fix_nve_sphere_bpm.h b/src/fix_nve_sphere_bpm.h deleted file mode 100644 index ee6f1b452c..0000000000 --- a/src/fix_nve_sphere_bpm.h +++ /dev/null @@ -1,71 +0,0 @@ -/* -*- 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 FIX_CLASS -// clang-format off -FixStyle(nve/sphere/bpm,FixNVESphereBPM) -// clang-format on -#else - -#ifndef LMP_FIX_NVE_SPHERE_BPM_H -#define LMP_FIX_NVE_SPHERE_BPM_H - -#include "fix_nve.h" - -namespace LAMMPS_NS { - -class FixNVESphereBPM : public FixNVE { - public: - FixNVESphereBPM(class LAMMPS *, int, char **); - - void init() override; - void initial_integrate(int) override; - void final_integrate() override; - - protected: - double inertia, inv_inertia; - int extra; - int dlm; -}; - -} // 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: Fix nve/sphere/bpm disc requires 2d simulation - -UNDOCUMENTED - -E: Fix nve/sphere/bpm requires atom style sphere/bpm - -Self-explanatory. - -E: Fix nve/sphere/bpm update dipole requires atom attribute mu - -An atom style with this attribute is needed. - -E: Fix nve/sphere/bpm requires extended particles - -This fix can only be used for particles of a finite size. - - -*/ From d710d19aefa339ed3f8fe12fd0f60931aa0fcbda Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Fri, 25 Mar 2022 15:56:59 -0600 Subject: [PATCH 25/40] Enforce pre_exchange() order for (currently) unused update option --- src/fix_bond_history.cpp | 24 ++++++++++++++++++++---- src/fix_bond_history.h | 4 +++- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/fix_bond_history.cpp b/src/fix_bond_history.cpp index e7593e93a3..8c3cebb0aa 100644 --- a/src/fix_bond_history.cpp +++ b/src/fix_bond_history.cpp @@ -50,6 +50,11 @@ FixBondHistory::FixBondHistory(LAMMPS *lmp, int narg, char **arg) : restart_global = 1; create_attribute = 1; + // Flag whether bond arrays are updated such that data may need to be + // copied to atom arrays before exchanging atoms + // Prevents sequential calls to pre_exchange() without post_neighbor() + updated_bond_flag = 0; + bondstore = nullptr; maxbond = 0; allocate(); @@ -105,8 +110,15 @@ void FixBondHistory::update_atom_value(int i, int m, int idata, double value) double FixBondHistory::get_atom_value(int i, int m, int idata) { - if (idata >= ndata || m > nbond) error->all(FLERR, "Index exceeded in fix bond history"); - return atom->darray[index][i][m*ndata+idata]; + if (idata >= ndata || m > nbond) error->all(FLERR, "Index exceeded in fix bond history"); + return atom->darray[index][i][m*ndata+idata]; +} + +/* ---------------------------------------------------------------------- */ + +void FixBondHistory::setup_pre_exchange() +{ + pre_exchange(); } /* ---------------------------------------------------------------------- @@ -119,7 +131,7 @@ void FixBondHistory::pre_exchange() { if (!update_flag) return; if (!stored_flag) return; - if (!bondstore) return; + if (!updated_bond_flag) return; int i1, i2, n, m, idata; int **bondlist = neighbor->bondlist; @@ -160,6 +172,8 @@ void FixBondHistory::pre_exchange() } } } + + updated_bond_flag = 0; } /* ---------------------------------------------------------------------- */ @@ -181,7 +195,7 @@ void FixBondHistory::setup_post_neighbor() maxbond += DELTA; memory->grow(bondstore,maxbond,ndata,"fix_bond_store:bondstore"); } - + pre_exchange(); post_neighbor(); } @@ -238,6 +252,8 @@ void FixBondHistory::post_neighbor() } } } + + updated_bond_flag = 1; } /* ---------------------------------------------------------------------- */ diff --git a/src/fix_bond_history.h b/src/fix_bond_history.h index 66ccdf1f97..2bef039b40 100644 --- a/src/fix_bond_history.h +++ b/src/fix_bond_history.h @@ -36,6 +36,7 @@ class FixBondHistory : public Fix { int setmask() override; void post_constructor() override; void setup_post_neighbor() override; + void setup_pre_exchange() override; void post_neighbor() override; void pre_exchange() override; double memory_usage() override; @@ -65,7 +66,8 @@ class FixBondHistory : public Fix { void allocate(); - int update_flag; + int update_flag; //Flag whether history values can evolve + int updated_bond_flag; int nbond, maxbond, ndata; int index; char *id_fix; From 9d907e31b3be82796c9c1b57e01ee2c9faf629ba Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 11 Apr 2022 12:40:59 -0400 Subject: [PATCH 26/40] recover compilation --- src/MC/fix_bond_break.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/MC/fix_bond_break.cpp b/src/MC/fix_bond_break.cpp index 064e5677d7..eaec7321fe 100644 --- a/src/MC/fix_bond_break.cpp +++ b/src/MC/fix_bond_break.cpp @@ -19,11 +19,14 @@ #include "error.h" #include "force.h" #include "memory.h" +#include "modify.h" #include "neighbor.h" #include "random_mars.h" #include "respa.h" #include "update.h" +#include "fix_bond_history.h" + #include using namespace LAMMPS_NS; From 49aebf64b962ba4afc29b4ce0f0a5670b8f4238b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 11 Apr 2022 12:41:28 -0400 Subject: [PATCH 27/40] include BPM package in multiple presets --- cmake/presets/all_off.cmake | 1 + cmake/presets/all_on.cmake | 1 + cmake/presets/mingw-cross.cmake | 1 + cmake/presets/most.cmake | 1 + cmake/presets/windows.cmake | 1 + 5 files changed, 5 insertions(+) diff --git a/cmake/presets/all_off.cmake b/cmake/presets/all_off.cmake index df07aa2989..6a8f70c9ea 100644 --- a/cmake/presets/all_off.cmake +++ b/cmake/presets/all_off.cmake @@ -8,6 +8,7 @@ set(ALL_PACKAGES AWPMD BOCS BODY + BPM BROWNIAN CG-DNA CG-SDK diff --git a/cmake/presets/all_on.cmake b/cmake/presets/all_on.cmake index 7762eef505..4cff7d945d 100644 --- a/cmake/presets/all_on.cmake +++ b/cmake/presets/all_on.cmake @@ -10,6 +10,7 @@ set(ALL_PACKAGES AWPMD BOCS BODY + BPM BROWNIAN CG-DNA CG-SDK diff --git a/cmake/presets/mingw-cross.cmake b/cmake/presets/mingw-cross.cmake index fe828a6d9a..ef7f15fec2 100644 --- a/cmake/presets/mingw-cross.cmake +++ b/cmake/presets/mingw-cross.cmake @@ -4,6 +4,7 @@ set(WIN_PACKAGES AWPMD BOCS BODY + BPM BROWNIAN CG-DNA CG-SDK diff --git a/cmake/presets/most.cmake b/cmake/presets/most.cmake index 27ce57621c..44d668fd83 100644 --- a/cmake/presets/most.cmake +++ b/cmake/presets/most.cmake @@ -6,6 +6,7 @@ set(ALL_PACKAGES ASPHERE BOCS BODY + BPM BROWNIAN CG-DNA CG-SDK diff --git a/cmake/presets/windows.cmake b/cmake/presets/windows.cmake index d4e69c5fca..c83b16d855 100644 --- a/cmake/presets/windows.cmake +++ b/cmake/presets/windows.cmake @@ -2,6 +2,7 @@ set(WIN_PACKAGES ASPHERE BOCS BODY + BPM BROWNIAN CG-DNA CG-SDK From e1a2423f2e0471ccba88ec824039ce72b95ef627 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 12 Apr 2022 11:06:18 -0400 Subject: [PATCH 28/40] modernize, initialize pointers, apply clang-format --- src/MISC/pair_tracker.cpp | 77 +++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 44 deletions(-) diff --git a/src/MISC/pair_tracker.cpp b/src/MISC/pair_tracker.cpp index 7fd2cd2a23..df49811a10 100644 --- a/src/MISC/pair_tracker.cpp +++ b/src/MISC/pair_tracker.cpp @@ -26,8 +26,8 @@ #include "neigh_list.h" #include "neighbor.h" #include "tokenizer.h" -#include "utils.h" #include "update.h" +#include "utils.h" #include @@ -36,7 +36,9 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ PairTracker::PairTracker(LAMMPS *lmp) : - Pair(lmp), pack_choice(nullptr), id_fix_store_local(nullptr), output_data(nullptr), type_filter(nullptr), fix_history(nullptr), fix_store_local(nullptr) + Pair(lmp), onerad_dynamic(nullptr), onerad_frozen(nullptr), maxrad_dynamic(nullptr), + maxrad_frozen(nullptr), id_fix_store_local(nullptr), fix_dummy(nullptr), fix_history(nullptr), + fix_store_local(nullptr), type_filter(nullptr), output_data(nullptr), pack_choice(nullptr) { single_enable = 1; no_virial_fdotr_compute = 1; @@ -138,9 +140,7 @@ void PairTracker::compute(int eflag, int vflag) if (rsq >= radsum * radsum) { data = &alldata[size_history * jj]; - if (touch[jj] == 1) { - process_data(i, j, data); - } + if (touch[jj] == 1) process_data(i, j, data); touch[jj] = 0; data[0] = 0.0; // initial timestep @@ -165,9 +165,7 @@ void PairTracker::compute(int eflag, int vflag) if (rsq >= cutsq[itype][jtype]) { data = &alldata[size_history * jj]; - if (touch[jj] == 1) { - process_data(i, j, data); - } + if (touch[jj] == 1) process_data(i, j, data); touch[jj] = 0; data[0] = 0.0; // initial timestep @@ -293,19 +291,16 @@ void PairTracker::settings(int narg, char **arg) } else { error->all(FLERR, "Illegal pair_style command"); } - iarg ++; + iarg++; } if (nvalues == 0) error->all(FLERR, "Must request at least one value to output"); memory->create(output_data, nvalues, "pair/tracker:output_data"); - int ifix = modify->find_fix(id_fix_store_local); - if (ifix < 0) { - modify->add_fix(fmt::format("{} all STORE_LOCAL {} {}", - id_fix_store_local, store_local_freq, nvalues)); - ifix = modify->find_fix(id_fix_store_local); - } - fix_store_local = (FixStoreLocal *) modify->fix[ifix]; + fix_store_local = dynamic_cast(modify->get_fix_by_id(id_fix_store_local)); + if (!fix_store_local) + fix_store_local = dynamic_cast(modify->add_fix( + fmt::format("{} all STORE_LOCAL {} {}", id_fix_store_local, store_local_freq, nvalues))); } /* ---------------------------------------------------------------------- @@ -343,7 +338,6 @@ void PairTracker::coeff(int narg, char **arg) void PairTracker::init_style() { - int i, ifix; // error and warning checks if (!atom->radius_flag && finitecutflag) @@ -362,18 +356,18 @@ void PairTracker::init_style() if (fix_history == nullptr) { modify->replace_fix("NEIGH_HISTORY_TRACK_DUMMY", fmt::format("NEIGH_HISTORY_TRACK all NEIGH_HISTORY {}", size_history), 1); - fix_history = dynamic_cast( modify->get_fix_by_id("NEIGH_HISTORY_TRACK")); + fix_history = dynamic_cast(modify->get_fix_by_id("NEIGH_HISTORY_TRACK")); fix_history->pair = this; fix_history->use_bit_flag = 0; } else { - fix_history = dynamic_cast( modify->get_fix_by_id("NEIGH_HISTORY_TRACK")); + fix_history = dynamic_cast(modify->get_fix_by_id("NEIGH_HISTORY_TRACK")); if (!fix_history) error->all(FLERR, "Could not find pair fix neigh history ID"); } if (finitecutflag) { if (force->pair->beyond_contact) error->all(FLERR, - "Pair tracker incompatible with granular pairstyles that extend beyond contact"); + "Pair tracker incompatible with granular pairstyles that extend beyond contact"); // check for FixFreeze and set freeze_group_bit @@ -393,8 +387,8 @@ void PairTracker::init_style() // set maxrad_dynamic and maxrad_frozen for each type // include future FixPour and FixDeposit particles as dynamic - int itype; - for (i = 1; i <= atom->ntypes; i++) { + int itype = 0; + for (int i = 1; i <= atom->ntypes; i++) { onerad_dynamic[i] = onerad_frozen[i] = 0.0; for (auto &ipour : pours) { itype = i; @@ -413,7 +407,7 @@ void PairTracker::init_style() int *type = atom->type; int nlocal = atom->nlocal; - for (i = 0; i < nlocal; i++) + for (int i = 0; i < nlocal; i++) if (mask[i] & freeze_group_bit) onerad_frozen[type[i]] = MAX(onerad_frozen[type[i]], radius[i]); else @@ -547,7 +541,7 @@ double PairTracker::radii2cut(double r1, double r2) /* ---------------------------------------------------------------------- */ -void PairTracker::process_data(int i, int j, double * input_data) +void PairTracker::process_data(int i, int j, double *input_data) { if ((update->ntimestep - input_data[0]) < tmin) return; @@ -565,75 +559,70 @@ void PairTracker::process_data(int i, int j, double * input_data) the atom property is packed into a local vector or array ------------------------------------------------------------------------- */ -void PairTracker::pack_time_created(int n, int i, int j, double * data) +void PairTracker::pack_time_created(int n, int /*i*/, int /*j*/, double *data) { output_data[n] = data[0]; } /* ---------------------------------------------------------------------- */ -void PairTracker::pack_time_broken(int n, int i, int j, double * data) +void PairTracker::pack_time_broken(int n, int /*i*/, int /*j*/, double * /*data*/) { output_data[n] = update->ntimestep; } /* ---------------------------------------------------------------------- */ -void PairTracker::pack_time_total(int n, int i, int j, double * data) +void PairTracker::pack_time_total(int n, int /*i*/, int /*j*/, double *data) { output_data[n] = update->ntimestep - data[0]; } /* ---------------------------------------------------------------------- */ -void PairTracker::pack_id1(int n, int i, int j, double * data) +void PairTracker::pack_id1(int n, int i, int /*j*/, double * /*data*/) { - tagint *tag = atom->tag; - output_data[n] = tag[i]; + output_data[n] = atom->tag[i]; } /* ---------------------------------------------------------------------- */ -void PairTracker::pack_id2(int n, int i, int j, double * data) +void PairTracker::pack_id2(int n, int /*i*/, int j, double * /*data*/) { - tagint *tag = atom->tag; - output_data[n] = tag[j]; + output_data[n] = atom->tag[j]; } /* ---------------------------------------------------------------------- */ -void PairTracker::pack_x(int n, int i, int j, double * data) +void PairTracker::pack_x(int n, int i, int j, double * /*data*/) { - double **x = atom->x; - output_data[n] = (x[i][0] + x[j][0])*0.5; + output_data[n] = (atom->x[i][0] + atom->x[j][0]) * 0.5; } /* ---------------------------------------------------------------------- */ -void PairTracker::pack_y(int n, int i, int j, double * data) +void PairTracker::pack_y(int n, int i, int j, double * /*data*/) { - double **x = atom->x; - output_data[n] = (x[i][1] + x[j][1])*0.5; + output_data[n] = (atom->x[i][1] + atom->x[j][1]) * 0.5; } /* ---------------------------------------------------------------------- */ -void PairTracker::pack_z(int n, int i, int j, double * data) +void PairTracker::pack_z(int n, int i, int j, double * /*data*/) { - double **x = atom->x; - output_data[n] = (x[i][2] + x[j][2])*0.5; + output_data[n] = (atom->x[i][2] + atom->x[j][2]) * 0.5; } /* ---------------------------------------------------------------------- */ -void PairTracker::pack_rmin(int n, int i, int j, double * data) +void PairTracker::pack_rmin(int n, int /*i*/, int /*j*/, double *data) { output_data[n] = data[2]; } /* ---------------------------------------------------------------------- */ -void PairTracker::pack_rave(int n, int i, int j, double * data) +void PairTracker::pack_rave(int n, int /*i*/, int /*j*/, double *data) { output_data[n] = data[1] / (update->ntimestep - data[0]); } From 929e46b5c759cf8749b837258bb75433016be8a5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 12 Apr 2022 11:06:28 -0400 Subject: [PATCH 29/40] remove dead code --- src/fix_bond_history.cpp | 1 - src/fix_update_special_bonds.cpp | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/fix_bond_history.cpp b/src/fix_bond_history.cpp index 8c3cebb0aa..5d2c1b8072 100644 --- a/src/fix_bond_history.cpp +++ b/src/fix_bond_history.cpp @@ -319,7 +319,6 @@ void FixBondHistory::shift_history(int i, int m, int k) if (m == k) return; double **stored = atom->darray[index]; - int n = atom->num_bond[i]; for (int idata = 0; idata < ndata; idata ++) stored[i][m*ndata+idata] = stored[i][k*ndata+idata]; } diff --git a/src/fix_update_special_bonds.cpp b/src/fix_update_special_bonds.cpp index b479619cf5..18e53e0122 100644 --- a/src/fix_update_special_bonds.cpp +++ b/src/fix_update_special_bonds.cpp @@ -85,11 +85,10 @@ void FixUpdateSpecialBonds::setup(int /*vflag*/) void FixUpdateSpecialBonds::pre_exchange() { - int i, j, key, m, n1, n3; + int i, j, m, n1, n3; tagint tagi, tagj; int nlocal = atom->nlocal; - tagint *tag = atom->tag; tagint *slist; int **nspecial = atom->nspecial; tagint **special = atom->special; From ca37c014769b446dfa6ddc9b105c4bc7a594abfe Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Tue, 12 Apr 2022 13:36:39 -0600 Subject: [PATCH 30/40] Fixing broken links/references in documentation --- doc/src/Commands_pair.rst | 1 + doc/src/bond_bpm_rotational.rst | 8 ++++---- doc/src/bond_bpm_spring.rst | 4 ++-- doc/src/bond_style.rst | 2 ++ ...{compute_nbonds_atom.rst => compute_nbond_atom.rst} | 10 +++++----- doc/src/pair_style.rst | 1 + 6 files changed, 15 insertions(+), 11 deletions(-) rename doc/src/{compute_nbonds_atom.rst => compute_nbond_atom.rst} (85%) diff --git a/doc/src/Commands_pair.rst b/doc/src/Commands_pair.rst index 7a1ed4ee72..d9ee22ce86 100644 --- a/doc/src/Commands_pair.rst +++ b/doc/src/Commands_pair.rst @@ -53,6 +53,7 @@ OPT. * :doc:`born/coul/msm (o) ` * :doc:`born/coul/wolf (go) ` * :doc:`born/coul/wolf/cs (g) ` + * :doc:`bpm/spring ` * :doc:`brownian (o) ` * :doc:`brownian/poly (o) ` * :doc:`buck (giko) ` diff --git a/doc/src/bond_bpm_rotational.rst b/doc/src/bond_bpm_rotational.rst index 40b1752285..2a752217e3 100644 --- a/doc/src/bond_bpm_rotational.rst +++ b/doc/src/bond_bpm_rotational.rst @@ -98,7 +98,7 @@ added or removed using the *smooth* keyword. Finally, additional damping forces and torques are applied to the two particles. A force is applied proportional to the difference in the normal velocity of particles using a similar construction as -dissipative particle dynamics (:ref:`(Groot) `): +dissipative particle dynamics (:ref:`(Groot) `): .. math:: @@ -109,7 +109,7 @@ 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 +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. @@ -247,11 +247,11 @@ p 117-127 (2009). **(Wang and Mora)** Wang, Mora, Advances in Geocomputing, 119, p 183-228 (2009). -.. _Groot1: +.. _Groot3: **(Groot)** Groot and Warren, J Chem Phys, 107, 4423-35 (1997). -.. _Wang2015: +.. _Wang20152: **(Wang et al, 2015)** Wang, Y., Alonso-Marroquin, F., & Guo, W. W. (2015). Rolling and sliding in 3-D discrete element diff --git a/doc/src/bond_bpm_spring.rst b/doc/src/bond_bpm_spring.rst index 2881bab5f7..4084aa760a 100644 --- a/doc/src/bond_bpm_spring.rst +++ b/doc/src/bond_bpm_spring.rst @@ -69,7 +69,7 @@ setting its 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 using a similar construction as -dissipative particle dynamics (:ref:`(Groot) `): +dissipative particle dynamics (:ref:`(Groot) `): .. math:: @@ -197,6 +197,6 @@ The option defaults are *smooth* = *yes* ---------- -.. _Groot1: +.. _Groot4: **(Groot)** Groot and Warren, J Chem Phys, 107, 4423-35 (1997). diff --git a/doc/src/bond_style.rst b/doc/src/bond_style.rst index 4dee48a78d..95ba1572c1 100644 --- a/doc/src/bond_style.rst +++ b/doc/src/bond_style.rst @@ -84,6 +84,8 @@ accelerated styles exist. * :doc:`zero ` - topology but no interactions * :doc:`hybrid ` - define multiple styles of bond interactions +* :doc:`bpm/rotational ` - breakable bond with forces and torques based on deviation from reference state +* :doc:`bpm/spring ` - breakable bond with forces based on deviation from reference length * :doc:`class2 ` - COMPASS (class 2) bond * :doc:`fene ` - FENE (finite-extensible non-linear elastic) bond * :doc:`fene/expand ` - FENE bonds with variable size particles diff --git a/doc/src/compute_nbonds_atom.rst b/doc/src/compute_nbond_atom.rst similarity index 85% rename from doc/src/compute_nbonds_atom.rst rename to doc/src/compute_nbond_atom.rst index 3a8ea0577f..8322f16330 100644 --- a/doc/src/compute_nbonds_atom.rst +++ b/doc/src/compute_nbond_atom.rst @@ -1,6 +1,6 @@ -.. index:: compute nbonds/atom +.. index:: compute nbond/atom -compute nbonds/atom command +compute nbond/atom command ======================= Syntax @@ -8,17 +8,17 @@ Syntax .. parsed-literal:: - compute ID group-ID nbonds/atom + compute ID group-ID nbond/atom * ID, group-ID are documented in :doc:`compute ` command -* nbonds/atom = style name of this compute command +* nbond/atom = style name of this compute command Examples """""""" .. code-block:: LAMMPS - compute 1 all nbonds/atom + compute 1 all nbond/atom Description """"""""""" diff --git a/doc/src/pair_style.rst b/doc/src/pair_style.rst index f90a718d95..b42e3c9a50 100644 --- a/doc/src/pair_style.rst +++ b/doc/src/pair_style.rst @@ -131,6 +131,7 @@ accelerated styles exist. * :doc:`born/coul/msm ` - Born with long-range MSM Coulomb * :doc:`born/coul/wolf ` - Born with Wolf potential for Coulomb * :doc:`born/coul/wolf/cs ` - Born with Wolf potential for Coulomb and core/shell model +* :doc:`bpm/spring ` - repulsive harmonic force with damping * :doc:`brownian ` - Brownian potential for Fast Lubrication Dynamics * :doc:`brownian/poly ` - Brownian potential for Fast Lubrication Dynamics with polydispersity * :doc:`buck ` - Buckingham potential From f64d405ad87dbae039406ce892d56f32cf57288c Mon Sep 17 00:00:00 2001 From: Joel Thomas Clemmer <=> Date: Tue, 12 Apr 2022 15:59:38 -0600 Subject: [PATCH 31/40] Fixing remaining errors/warnings in doc build --- doc/src/Commands_fix.rst | 2 -- doc/src/Howto.rst | 1 + doc/src/Howto_bpm.rst | 8 ++++---- doc/src/Howto_broken_bonds.rst | 8 ++++---- doc/src/Packages_details.rst | 2 +- doc/src/bond_bpm_rotational.rst | 6 +++--- doc/src/bond_bpm_spring.rst | 4 ++-- doc/src/compute_nbond_atom.rst | 5 +---- doc/src/dump_modify.rst | 2 +- doc/src/fix.rst | 2 -- doc/src/fix_nve_bpm_sphere.rst | 4 ++-- doc/src/pair_bpm_spring.rst | 6 +++--- doc/src/pair_tracker.rst | 5 +---- src/atom.cpp | 2 +- 14 files changed, 24 insertions(+), 33 deletions(-) diff --git a/doc/src/Commands_fix.rst b/doc/src/Commands_fix.rst index a55e3e50cc..fddf3435f9 100644 --- a/doc/src/Commands_fix.rst +++ b/doc/src/Commands_fix.rst @@ -159,7 +159,6 @@ OPT. * :doc:`orient/fcc ` * :doc:`orient/eco ` * :doc:`pafi ` - * :doc:`pair/tracker ` * :doc:`phonon ` * :doc:`pimd ` * :doc:`planeforce ` @@ -223,7 +222,6 @@ OPT. * :doc:`spring/rg ` * :doc:`spring/self ` * :doc:`srd ` - * :doc:`store/local ` * :doc:`store/force ` * :doc:`store/state ` * :doc:`tdpd/source ` diff --git a/doc/src/Howto.rst b/doc/src/Howto.rst index c63034e766..0f1abcd7d7 100644 --- a/doc/src/Howto.rst +++ b/doc/src/Howto.rst @@ -23,6 +23,7 @@ General howto Howto_library Howto_couple Howto_mdi + Howto_bpm Howto_broken_bonds Settings howto diff --git a/doc/src/Howto_bpm.rst b/doc/src/Howto_bpm.rst index c4b6fc9398..06d70ef35d 100644 --- a/doc/src/Howto_bpm.rst +++ b/doc/src/Howto_bpm.rst @@ -1,5 +1,5 @@ Bonded particle models -=============== +====================== The BPM package implements bonded particle models which can be used to simulate mesoscale solids. Solids are constructed as a collection of @@ -21,7 +21,7 @@ pouring of extended, elastic bodies. ---------- Bonds can be created using a :doc:`read data ` or -:doc:`create bond ` command. Alternatively, a +:doc:`create bonds ` command. Alternatively, a :doc:`molecule ` template with bonds can be used with :doc:`fix deposit ` or :doc:`fix pour ` to create solid grains. @@ -98,7 +98,7 @@ to :doc:`fix nve/asphere `. To monitor the fracture of bonds in the system, all BPM bond styles have the ability to record instances of bond breakage to output using -the :doc:`dump local ` command. Additionally, one can use +the :doc:`dump local ` command. Additionally, one can use :doc:`compute nbond/atom ` to tally the current number of bonds per atom. @@ -118,7 +118,7 @@ following are currently compatible with BPM bond styles: * :doc:`fix bond/break ` * :doc:`fix bond/swap ` -Note :doc:`bond_create ` requires certain special_bonds settings. +Note :doc:`create_bonds ` requires certain special_bonds settings. To subtract pair interactions, one will need to switch between different special_bonds settings in the input script. An example is found in examples/bpm/impact. diff --git a/doc/src/Howto_broken_bonds.rst b/doc/src/Howto_broken_bonds.rst index bf82088dec..5e66d9528c 100755 --- a/doc/src/Howto_broken_bonds.rst +++ b/doc/src/Howto_broken_bonds.rst @@ -1,10 +1,10 @@ Broken Bonds -=============== +============ Typically, bond interactions persist for the duration of a simulation in LAMMPS. However, there are some exceptions that allow for bonds to break includung the :doc:`quartic bond style ` and the -bond styles in the :doc:`BPM package ` which contains the +bond styles in the :doc:`BPM package ` which contains the :doc:`bpm/spring ` and :doc:`bpm/rotational ` bond styles. In these cases, a bond can be broken if it is stretched beyond a user-defined threshold. @@ -26,7 +26,7 @@ two atoms is turned on, since they are no longer bonded. In the BPM package, one can either turn off all pair interactions between bonded particles or leave them on, overlaying pair forces on top of bond forces. To remove pair forces, the special bond list is dynamically -updated. More details can be found on the :doc:`Howto BPM ` +updated. More details can be found on the :doc:`Howto BPM ` page. Bonds can also be broken by fixes which change bond topology, including @@ -44,5 +44,5 @@ status of broken bonds or permanently delete them, e.g.: delete_bonds all stats delete_bonds all bond 0 remove -The compute :doc:`nbonds/atom ` can also be used +The compute :doc:`nbond/atom ` can also be used to tally the current number of bonds per atom, excluding broken bonds. \ No newline at end of file diff --git a/doc/src/Packages_details.rst b/doc/src/Packages_details.rst index 2ccc28a340..bdc7279e6e 100644 --- a/doc/src/Packages_details.rst +++ b/doc/src/Packages_details.rst @@ -304,7 +304,7 @@ models for mesoscale simulations of solids and fracture. See the * :doc:`atom_style bpm/sphere ` * :doc:`bond_style bpm/rotational ` * :doc:`bond_style bpm/spring ` -* :doc:`compute nbonds/atom ` +* :doc:`compute nbond/atom ` * :doc:`fix nve/bpm/sphere ` * :doc:`pair_style bpm/spring ` * examples/bpm diff --git a/doc/src/bond_bpm_rotational.rst b/doc/src/bond_bpm_rotational.rst index 2a752217e3..b13d27dfbe 100644 --- a/doc/src/bond_bpm_rotational.rst +++ b/doc/src/bond_bpm_rotational.rst @@ -1,7 +1,7 @@ .. index:: bond_style bpm/rotational bond_style bpm/rotational command -========================== +================================= Syntax """""" @@ -71,7 +71,7 @@ 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) `. +:ref:`(Wang and Mora) `. Bonds will break under sufficient stress. A breaking criteria is calculated @@ -154,7 +154,7 @@ 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 using the *fix_ID* and a -:doc:`dump local ` command. To ensure all data is output, +: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. diff --git a/doc/src/bond_bpm_spring.rst b/doc/src/bond_bpm_spring.rst index 4084aa760a..1d2f12701d 100644 --- a/doc/src/bond_bpm_spring.rst +++ b/doc/src/bond_bpm_spring.rst @@ -1,7 +1,7 @@ .. index:: bond_style bpm/spring bond_style bpm/spring command -========================== +============================= Syntax """""" @@ -118,7 +118,7 @@ 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 using the *fix_ID* and a -:doc:`dump local ` command. To ensure all data is output, +: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. diff --git a/doc/src/compute_nbond_atom.rst b/doc/src/compute_nbond_atom.rst index 8322f16330..e86986287f 100644 --- a/doc/src/compute_nbond_atom.rst +++ b/doc/src/compute_nbond_atom.rst @@ -1,7 +1,7 @@ .. index:: compute nbond/atom compute nbond/atom command -======================= +========================== Syntax """""" @@ -50,6 +50,3 @@ Default """"""" none - ----------- - diff --git a/doc/src/dump_modify.rst b/doc/src/dump_modify.rst index 1f44651ef4..c65cd68a29 100644 --- a/doc/src/dump_modify.rst +++ b/doc/src/dump_modify.rst @@ -475,7 +475,7 @@ The *fileper* keyword is documented below with the *nfile* keyword. The *header* keyword toggles whether the dump file will include a header. Excluding a header will reduce the size of the dump file for data produced by :doc:`pair tracker ` or -:doc:`bpm bond styles ` which may not require the +:doc:`bpm bond styles ` which may not require the information typically written to the header. ---------- diff --git a/doc/src/fix.rst b/doc/src/fix.rst index 425df36d3a..3b6ef044c8 100644 --- a/doc/src/fix.rst +++ b/doc/src/fix.rst @@ -365,7 +365,6 @@ accelerated styles exist. * :doc:`spring/rg ` - spring on radius of gyration of group of atoms * :doc:`spring/self ` - spring from each atom to its origin * :doc:`srd ` - stochastic rotation dynamics (SRD) -* :doc:`store/local ` - store local data for output * :doc:`store/force ` - store force on each atom * :doc:`store/state ` - store attributes for each atom * :doc:`tdpd/source ` - @@ -384,7 +383,6 @@ accelerated styles exist. * :doc:`ttm/grid ` - two-temperature model for electronic/atomic coupling (distributed grid) * :doc:`ttm/mod ` - enhanced two-temperature model with additional options * :doc:`tune/kspace ` - auto-tune KSpace parameters -* :doc:`update/special/bonds ` - update special bond lists for BPM bond styles that allow for bond breakage * :doc:`vector ` - accumulate a global vector every N timesteps * :doc:`viscosity ` - Muller-Plathe momentum exchange for viscosity calculation * :doc:`viscous ` - viscous damping for granular simulations diff --git a/doc/src/fix_nve_bpm_sphere.rst b/doc/src/fix_nve_bpm_sphere.rst index 0a320d8fca..861586ab2a 100644 --- a/doc/src/fix_nve_bpm_sphere.rst +++ b/doc/src/fix_nve_bpm_sphere.rst @@ -1,7 +1,7 @@ .. index:: fix nve/bpm/sphere fix nve/bpm/sphere command -====================== +========================== Syntax """""" @@ -38,7 +38,7 @@ 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 ` +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. diff --git a/doc/src/pair_bpm_spring.rst b/doc/src/pair_bpm_spring.rst index ea5451b78d..9e6b5bb87b 100755 --- a/doc/src/pair_bpm_spring.rst +++ b/doc/src/pair_bpm_spring.rst @@ -1,7 +1,7 @@ .. index:: pair_style bpm/spring pair_style bpm/spring command -======================= +============================= Syntax """""" @@ -27,9 +27,9 @@ Style *bpm/spring* computes pairwise forces with the formula .. math:: F = k (r - r_c) - + where :math:`k` is a stiffness and :math:`r_c` is the cutoff length. -An additional damping force is also applied to interacting +An additional damping force is also applied to interacting particles. The force is proportional to the difference in the normal velocity of particles diff --git a/doc/src/pair_tracker.rst b/doc/src/pair_tracker.rst index d2dddd7d45..04967e952d 100644 --- a/doc/src/pair_tracker.rst +++ b/doc/src/pair_tracker.rst @@ -86,7 +86,7 @@ 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 using the *fix_ID* and a -:doc:`dump local ` command. To ensure all data is output, +: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. @@ -178,9 +178,6 @@ 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. -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). diff --git a/src/atom.cpp b/src/atom.cpp index 47583d137b..a923483c62 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -2618,7 +2618,7 @@ length of the data area, and a short description. - int - 1 - 1 if the particle is a body particle, 0 if not - * - quat + * - quat - double - 4 - four quaternion components of the particles From 8c153adceb96c6c811010d988891981551006c46 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 12 Apr 2022 18:36:16 -0400 Subject: [PATCH 32/40] spelling --- doc/src/Howto_bpm.rst | 4 ++-- doc/src/Howto_broken_bonds.rst | 4 ++-- doc/src/pair_bpm_spring.rst | 2 +- doc/utils/sphinx-config/false_positives.txt | 8 ++++++++ 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/doc/src/Howto_bpm.rst b/doc/src/Howto_bpm.rst index 06d70ef35d..8da6511213 100644 --- a/doc/src/Howto_bpm.rst +++ b/doc/src/Howto_bpm.rst @@ -109,8 +109,8 @@ velocity damping as its sister bond style. ---------- -While LAMMPS has many untilites to create and delete bonds, the -following are currently compatible with BPM bond styles: +While LAMMPS has many utilities to create and delete bonds, *only* +the following are currently compatible with BPM bond styles: * :doc:`create_bonds ` * :doc:`delete_bonds ` diff --git a/doc/src/Howto_broken_bonds.rst b/doc/src/Howto_broken_bonds.rst index 5e66d9528c..1a356df510 100755 --- a/doc/src/Howto_broken_bonds.rst +++ b/doc/src/Howto_broken_bonds.rst @@ -3,7 +3,7 @@ Broken Bonds Typically, bond interactions persist for the duration of a simulation in LAMMPS. However, there are some exceptions that allow for bonds to -break includung the :doc:`quartic bond style ` and the +break including the :doc:`quartic bond style ` and the bond styles in the :doc:`BPM package ` which contains the :doc:`bpm/spring ` and :doc:`bpm/rotational ` bond styles. In these cases, @@ -45,4 +45,4 @@ status of broken bonds or permanently delete them, e.g.: delete_bonds all bond 0 remove The compute :doc:`nbond/atom ` can also be used -to tally the current number of bonds per atom, excluding broken bonds. \ No newline at end of file +to tally the current number of bonds per atom, excluding broken bonds. diff --git a/doc/src/pair_bpm_spring.rst b/doc/src/pair_bpm_spring.rst index 9e6b5bb87b..8235b1c624 100755 --- a/doc/src/pair_bpm_spring.rst +++ b/doc/src/pair_bpm_spring.rst @@ -52,7 +52,7 @@ 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 +This pair interaction is always applied to pairs of non-bonded 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 diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 19fa8661d7..ca62bd9c41 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -328,6 +328,8 @@ boxzlo bp bpclermont bpls +bpm +BPM br Branduardi Branicio @@ -1149,8 +1151,10 @@ gdot GeC Geier gencode +Geocomputing georg Georg +Geotechnica germain Germann Germano @@ -1320,6 +1324,7 @@ Holm holonomic Homebrew hooke +hookean Hookean hostname hotpink @@ -2074,6 +2079,7 @@ monopole monovalent Montalenti Montero +Mora Morefoo Morfill Mori @@ -2203,6 +2209,7 @@ Nbin Nbins nbody Nbody +nbond nbonds nbondtype Nbondtype @@ -3174,6 +3181,7 @@ Steinhauser Stepaniants stepwise Stesmans +stiffnesses Stillinger stk stochastically From 09b08ecd850b0a5540bb22c7c61ebe1caab26518 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 12 Apr 2022 18:36:51 -0400 Subject: [PATCH 33/40] whitespace --- src/fix_update_special_bonds.cpp | 4 ++-- src/fix_update_special_bonds.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/fix_update_special_bonds.cpp b/src/fix_update_special_bonds.cpp index 18e53e0122..453695dc85 100644 --- a/src/fix_update_special_bonds.cpp +++ b/src/fix_update_special_bonds.cpp @@ -154,11 +154,11 @@ void FixUpdateSpecialBonds::pre_force(int /*vflag*/) tag2 = it.second; i1 = atom->map(tag1); i2 = atom->map(tag2); - + // Loop through atoms of owned atoms i j if (i1 < nlocal) { jlist = firstneigh[i1]; - jnum = numneigh[i1]; + jnum = numneigh[i1]; for (jj = 0; jj < jnum; jj++) { j = jlist[jj]; j &= SPECIALMASK; // Clear special bond bits diff --git a/src/fix_update_special_bonds.h b/src/fix_update_special_bonds.h index dc6ca1cf9b..17efbb1ad1 100644 --- a/src/fix_update_special_bonds.h +++ b/src/fix_update_special_bonds.h @@ -34,7 +34,7 @@ class FixUpdateSpecialBonds : public Fix { int setmask(); void setup(int); void pre_exchange(); - void pre_force(int); + void pre_force(int); void add_broken_bond(int,int); protected: From 467cae9436414bcaead854b29debd443863f4d61 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 12 Apr 2022 18:43:47 -0400 Subject: [PATCH 34/40] permissions --- doc/src/Howto_broken_bonds.rst | 0 doc/src/pair_bpm_spring.rst | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 doc/src/Howto_broken_bonds.rst mode change 100755 => 100644 doc/src/pair_bpm_spring.rst diff --git a/doc/src/Howto_broken_bonds.rst b/doc/src/Howto_broken_bonds.rst old mode 100755 new mode 100644 diff --git a/doc/src/pair_bpm_spring.rst b/doc/src/pair_bpm_spring.rst old mode 100755 new mode 100644 From ef4e41d2a2ed3a89ea3cb7dd699e2283754a7a96 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 12 Apr 2022 22:52:07 -0400 Subject: [PATCH 35/40] programming style and format updates --- src/BPM/atom_vec_bpm_sphere.h | 7 +- src/BPM/bond_bpm.cpp | 81 +++---- src/BPM/bond_bpm.h | 8 +- src/BPM/bond_bpm_rotational.cpp | 26 +- src/BPM/bond_bpm_rotational.h | 13 +- src/BPM/bond_bpm_spring.cpp | 16 +- src/BPM/bond_bpm_spring.h | 6 +- src/BPM/compute_nbond_atom.h | 2 +- src/BPM/fix_nve_bpm_sphere.h | 2 +- src/BPM/pair_bpm_spring.cpp | 157 ++++++------- src/BPM/pair_bpm_spring.h | 10 +- src/MC/fix_bond_break.cpp | 4 +- src/MC/fix_bond_create_angle.cpp | 10 +- src/MC/fix_bond_create_angle.h | 2 +- src/MC/fix_bond_swap.cpp | 8 +- src/REACTION/fix_bond_react.cpp | 16 +- src/atom.cpp | 2 + src/comm_brick.cpp | 117 +++------ src/comm_tiled.cpp | 243 +++++++------------ src/delete_bonds.cpp | 29 +-- src/dump.h | 1 - src/fix_bond_history.cpp | 95 ++++---- src/fix_bond_history.h | 19 +- src/fix_property_atom.cpp | 391 +++++++++++++++---------------- src/fix_store_local.cpp | 1 - src/fix_update_special_bonds.cpp | 54 ++--- src/fix_update_special_bonds.h | 19 +- src/set.cpp | 28 +-- 28 files changed, 580 insertions(+), 787 deletions(-) diff --git a/src/BPM/atom_vec_bpm_sphere.h b/src/BPM/atom_vec_bpm_sphere.h index 4ff62e3601..e7672eeb3c 100644 --- a/src/BPM/atom_vec_bpm_sphere.h +++ b/src/BPM/atom_vec_bpm_sphere.h @@ -13,7 +13,7 @@ #ifdef ATOM_CLASS // clang-format off -AtomStyle(bpm/sphere,AtomVecBPMSphere) +AtomStyle(bpm/sphere,AtomVecBPMSphere); // clang-format on #else @@ -39,13 +39,12 @@ class AtomVecBPMSphere : public AtomVec { void pack_data_pre(int) override; void pack_data_post(int) override; - private: int *num_bond; int **bond_type; int **nspecial; - double *radius,*rmass; + double *radius, *rmass; double **omega, **torque, **quat; int any_bond_negative; @@ -53,7 +52,7 @@ class AtomVecBPMSphere : public AtomVec { int *bond_negative; int radvary; - double radius_one,rmass_one; + double radius_one, rmass_one; }; } // namespace LAMMPS_NS diff --git a/src/BPM/bond_bpm.cpp b/src/BPM/bond_bpm.cpp index 29a08ee344..431a44b280 100644 --- a/src/BPM/bond_bpm.cpp +++ b/src/BPM/bond_bpm.cpp @@ -67,7 +67,7 @@ BondBPM::BondBPM(LAMMPS *lmp) : Bond(lmp) BondBPM::~BondBPM() { - delete [] pack_choice; + delete[] pack_choice; if (id_fix_dummy) modify->delete_fix(id_fix_dummy); if (id_fix_dummy2) modify->delete_fix(id_fix_dummy2); @@ -76,12 +76,12 @@ BondBPM::~BondBPM() if (id_fix_store_local) modify->delete_fix(id_fix_store_local); if (id_fix_prop_atom) modify->delete_fix(id_fix_prop_atom); - delete [] id_fix_dummy; - delete [] id_fix_dummy2; - delete [] id_fix_update; - delete [] id_fix_bond_history; - delete [] id_fix_store_local; - delete [] id_fix_prop_atom; + delete[] id_fix_dummy; + delete[] id_fix_dummy2; + delete[] id_fix_update; + delete[] id_fix_bond_history; + delete[] id_fix_store_local; + delete[] id_fix_prop_atom; memory->destroy(output_data); } @@ -90,13 +90,12 @@ BondBPM::~BondBPM() void BondBPM::init_style() { - int ifix; if (id_fix_store_local) { - ifix = modify->find_fix(id_fix_store_local); - if (ifix < 0) error->all(FLERR, "Cannot find fix store/local"); - if (strcmp(modify->fix[ifix]->style, "STORE_LOCAL") != 0) + auto ifix = modify->get_fix_by_id(id_fix_store_local); + if (!ifix) error->all(FLERR, "Cannot find fix store/local"); + if (strcmp(ifix->style, "STORE_LOCAL") != 0) error->all(FLERR, "Incorrect fix style matched, not store/local"); - fix_store_local = (FixStoreLocal *) modify->fix[ifix]; + fix_store_local = dynamic_cast(ifix); fix_store_local->nvalues = nvalues; } @@ -107,7 +106,7 @@ void BondBPM::init_style() "require special_bonds weight of 1.0 for first neighbors"); if (id_fix_update) { modify->delete_fix(id_fix_update); - delete [] id_fix_update; + delete[] id_fix_update; id_fix_update = nullptr; } } else { @@ -127,19 +126,17 @@ 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); - delete [] id_fix_dummy; + fix_update_special_bonds = dynamic_cast(modify->replace_fix( + id_fix_dummy,fmt::format("{} all UPDATE_SPECIAL_BONDS", id_fix_update),1)); + delete[] id_fix_dummy; id_fix_dummy = nullptr; } } if (force->angle || force->dihedral || force->improper) - error->all(FLERR, - "Bond style bpm cannot be used with 3,4-body interactions"); + error->all(FLERR,"Bond style bpm cannot be used with 3,4-body interactions"); if (atom->molecular == 2) - error->all(FLERR, - "Bond style bpm cannot be used with atom style template"); + error->all(FLERR,"Bond style bpm cannot be used with atom style template"); // special 1-3 and 1-4 weights must be 1 to prevent building 1-3 and 1-4 special bond lists if (force->special_lj[2] != 1.0 || force->special_lj[3] != 1.0 || @@ -205,17 +202,15 @@ void BondBPM::settings(int narg, char **arg) if (id_fix_store_local) { - if (nvalues == 0) error->all(FLERR, - "Storing local data must include at least one value to output"); + if (nvalues == 0) + error->all(FLERR, "Storing local data must include at least one value to output"); memory->create(output_data, nvalues, "bond/bpm:output_data"); - int ifix = modify->find_fix(id_fix_store_local); - if (ifix < 0) { - modify->add_fix(fmt::format("{} all STORE_LOCAL {} {}", - id_fix_store_local, store_local_freq, nvalues)); - ifix = modify->find_fix(id_fix_store_local); - } - fix_store_local = (FixStoreLocal *) modify->fix[ifix]; + auto ifix = modify->get_fix_by_id(id_fix_store_local); + if (!ifix) + ifix = modify->add_fix(fmt::format("{} all STORE_LOCAL {} {}", + id_fix_store_local, store_local_freq, nvalues)); + fix_store_local = dynamic_cast(ifix); // Use property/atom to save reference positions as it can transfer to ghost atoms // This won't work for instances where bonds are added (e.g. fix pour) but in those cases @@ -227,12 +222,10 @@ void BondBPM::settings(int narg, char **arg) char *y_ref_id = utils::strdup("BPM_Y_REF"); char *z_ref_id = utils::strdup("BPM_Z_REF"); - ifix = modify->find_fix(id_fix_prop_atom); - if (ifix < 0) { - modify->add_fix(fmt::format("{} all property/atom {} {} {} ghost yes", - id_fix_prop_atom, x_ref_id, y_ref_id, z_ref_id)); - ifix = modify->find_fix(id_fix_prop_atom); - } + ifix = modify->get_fix_by_id(id_fix_prop_atom); + if (!ifix) + ifix = modify->add_fix(fmt::format("{} all property/atom {} {} {} ghost yes", + id_fix_prop_atom, x_ref_id, y_ref_id, z_ref_id)); int type_flag; int col_flag; @@ -240,12 +233,12 @@ void BondBPM::settings(int narg, char **arg) index_y_ref = atom->find_custom(y_ref_id, type_flag, col_flag); index_z_ref = atom->find_custom(z_ref_id, type_flag, col_flag); - delete [] x_ref_id; - delete [] y_ref_id; - delete [] z_ref_id; + delete[] x_ref_id; + delete[] y_ref_id; + delete[] z_ref_id; - if (modify->fix[ifix]->restart_reset) { - modify->fix[ifix]->restart_reset = 0; + if (ifix->restart_reset) { + ifix->restart_reset = 0; } else { double *x_ref = atom->dvector[index_x_ref]; double *y_ref = atom->dvector[index_y_ref]; @@ -266,7 +259,7 @@ void BondBPM::settings(int narg, char **arg) used to check bond communiction cutoff - not perfect, estimates based on local-local only ------------------------------------------------------------------------- */ -double BondBPM::equilibrium_distance(int i) +double BondBPM::equilibrium_distance(int /*i*/) { // Ghost atoms may not yet be communicated, this may only be an estimate if (r0_max_estimate == 0) { @@ -363,7 +356,7 @@ void BondBPM::process_broken(int i, int j) the atom property is packed into array or vector ------------------------------------------------------------------------- */ -void BondBPM::pack_id1(int n, int i, int j) +void BondBPM::pack_id1(int n, int i, int /*j*/) { tagint *tag = atom->tag; output_data[n] = tag[i]; @@ -371,7 +364,7 @@ void BondBPM::pack_id1(int n, int i, int j) /* ---------------------------------------------------------------------- */ -void BondBPM::pack_id2(int n, int i, int j) +void BondBPM::pack_id2(int n, int /*i*/, int j) { tagint *tag = atom->tag; output_data[n] = tag[j]; @@ -379,7 +372,7 @@ void BondBPM::pack_id2(int n, int i, int j) /* ---------------------------------------------------------------------- */ -void BondBPM::pack_time(int n, int i, int j) +void BondBPM::pack_time(int n, int /*i*/, int /*j*/) { bigint time = update->ntimestep; output_data[n] = time; diff --git a/src/BPM/bond_bpm.h b/src/BPM/bond_bpm.h index f8f860bd15..271228bab2 100644 --- a/src/BPM/bond_bpm.h +++ b/src/BPM/bond_bpm.h @@ -23,10 +23,10 @@ namespace LAMMPS_NS { class BondBPM : public Bond { public: BondBPM(class LAMMPS *); - virtual ~BondBPM() override; - virtual void compute(int, int) override = 0; - virtual void coeff(int, char **) override = 0; - virtual void init_style() override; + ~BondBPM() override; + void compute(int, int) override = 0; + void coeff(int, char **) override = 0; + void init_style() override; void settings(int, char **) override; double equilibrium_distance(int) override; void write_restart(FILE *) override {}; diff --git a/src/BPM/bond_bpm_rotational.cpp b/src/BPM/bond_bpm_rotational.cpp index 5991187061..4b07afec11 100644 --- a/src/BPM/bond_bpm_rotational.cpp +++ b/src/BPM/bond_bpm_rotational.cpp @@ -89,7 +89,6 @@ double BondBPMRotational::acos_limit(double c) double BondBPMRotational::store_bond(int n,int i,int j) { - int m,k; double delx, dely, delz, r, rinv; double **x = atom->x; tagint *tag = atom->tag; @@ -114,7 +113,7 @@ double BondBPMRotational::store_bond(int n,int i,int j) bondstore[n][3] = delz*rinv; if (i < atom->nlocal) { - for (m = 0; m < atom->num_bond[i]; m ++) { + 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, delx*rinv); @@ -125,7 +124,7 @@ double BondBPMRotational::store_bond(int n,int i,int j) } if (j < atom->nlocal) { - for (m = 0; m < atom->num_bond[j]; m ++) { + 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, delx*rinv); @@ -193,11 +192,11 @@ void BondBPMRotational::store_data() 2) P. Mora & Y. Wang Advances in Geomcomputing 2009 ---------------------------------------------------------------------- */ -double BondBPMRotational::elastic_forces(int i1, int i2, int type, double& Fr, - double r_mag, double r0_mag, double r_mag_inv, double* rhat, double* r, - double* r0, double* force1on2, double* torque1on2, double* torque2on1) +double BondBPMRotational::elastic_forces(int i1, int i2, int type, double &Fr, double r_mag, + double r0_mag, double r_mag_inv, double * /*rhat*/, + double *r, double *r0, double *force1on2, + double *torque1on2, double *torque2on1) { - int m; double breaking, temp, r0_dot_rb, c, gamma; double psi, theta, cos_phi, sin_phi; double mag_in_plane, mag_out_plane; @@ -336,7 +335,7 @@ double BondBPMRotational::elastic_forces(int i1, int i2, int type, double& Fr, MathExtra::quatrotvec(mq, Fsp, Ftmp); MathExtra::quatrotvec(mq, Tsp, Ttmp); - for (m = 0; m < 3; m++) { + for (int m = 0; m < 3; m++) { Fs[m] += Ftmp[m]; Ts[m] += Ttmp[m]; } @@ -462,7 +461,7 @@ void BondBPMRotational::compute(int eflag, int vflag) int i1,i2,itmp,n,type; double r[3], r0[3], rhat[3]; - double delx, dely, delz, rsq, r0_mag, r_mag, r_mag_inv; + double rsq, r0_mag, r_mag, r_mag_inv; double Fr, breaking, smooth; double force1on2[3], torque1on2[3], torque2on1[3]; @@ -471,7 +470,6 @@ void BondBPMRotational::compute(int eflag, int vflag) double **x = atom->x; double **f = atom->f; double **torque = atom->torque; - double *radius = atom->radius; tagint *tag = atom->tag; int **bondlist = neighbor->bondlist; int nbondlist = neighbor->nbondlist; @@ -657,9 +655,9 @@ void BondBPMRotational::init_style() if (!id_fix_bond_history) { id_fix_bond_history = utils::strdup("HISTORY_BPM_ROTATIONAL"); - fix_bond_history = (FixBondHistory *) modify->replace_fix(id_fix_dummy2, - fmt::format("{} all BOND_HISTORY 0 4", id_fix_bond_history),1); - delete [] id_fix_dummy2; + fix_bond_history = dynamic_cast(modify->replace_fix(id_fix_dummy2, + fmt::format("{} all BOND_HISTORY 0 4", id_fix_bond_history),1)); + delete[] id_fix_dummy2; id_fix_dummy2 = nullptr; } } @@ -671,7 +669,7 @@ void BondBPMRotational::settings(int narg, char **arg) BondBPM::settings(narg, arg); int iarg; - for (int i = 0; i < leftover_iarg.size(); i++) { + 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"); diff --git a/src/BPM/bond_bpm_rotational.h b/src/BPM/bond_bpm_rotational.h index 4b7baa95b5..7244afe213 100644 --- a/src/BPM/bond_bpm_rotational.h +++ b/src/BPM/bond_bpm_rotational.h @@ -13,7 +13,7 @@ #ifdef BOND_CLASS // clang-format off -BondStyle(bpm/rotational,BondBPMRotational) +BondStyle(bpm/rotational,BondBPMRotational); // clang-format on #else @@ -27,8 +27,8 @@ namespace LAMMPS_NS { class BondBPMRotational : public BondBPM { public: BondBPMRotational(class LAMMPS *); - virtual ~BondBPMRotational() override; - virtual void compute(int, int) override; + ~BondBPMRotational() override; + void compute(int, int) override; void coeff(int, char **) override; void init_style() override; void settings(int, char **) override; @@ -44,10 +44,9 @@ class BondBPMRotational : public BondBPM { double acos_limit(double); - double elastic_forces(int, int, int, double &, double, double, double, - double*, double*, double*, double*, double*, double*); - void damping_forces(int, int, int, double &, double*, double*, double*, - double*, double*); + double elastic_forces(int, int, int, double &, double, double, double, double *, double *, + double *, double *, double *, double *); + void damping_forces(int, int, int, double &, double *, double *, double *, double *, double *); void allocate(); void store_data(); diff --git a/src/BPM/bond_bpm_spring.cpp b/src/BPM/bond_bpm_spring.cpp index 5670d70358..ad3731a5ea 100644 --- a/src/BPM/bond_bpm_spring.cpp +++ b/src/BPM/bond_bpm_spring.cpp @@ -57,7 +57,6 @@ BondBPMSpring::~BondBPMSpring() double BondBPMSpring::store_bond(int n,int i,int j) { - int m,k; double delx, dely, delz, r; double **x = atom->x; double **bondstore = fix_bond_history->bondstore; @@ -71,7 +70,7 @@ double BondBPMSpring::store_bond(int n,int i,int j) bondstore[n][0] = r; if (i < atom->nlocal) { - for (m = 0; m < atom->num_bond[i]; m ++) { + 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); } @@ -79,7 +78,7 @@ double BondBPMSpring::store_bond(int n,int i,int j) } if (j < atom->nlocal) { - for (m = 0; m < atom->num_bond[j]; m ++) { + 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); } @@ -136,7 +135,7 @@ void BondBPMSpring::compute(int eflag, int vflag) store_data(); } - int i1,i2,itmp,m,n,type,itype,jtype; + int i1,i2,itmp,n,type; double delx, dely, delz, delvx, delvy, delvz; double e, rsq, r, r0, rinv, smooth, fbond, dot; @@ -283,9 +282,9 @@ void BondBPMSpring::init_style() if (!id_fix_bond_history) { id_fix_bond_history = utils::strdup("HISTORY_BPM_SPRING"); - fix_bond_history = (FixBondHistory *) modify->replace_fix(id_fix_dummy2, - fmt::format("{} all BOND_HISTORY 0 1", id_fix_bond_history),1); - delete [] id_fix_dummy2; + fix_bond_history = dynamic_cast(modify->replace_fix(id_fix_dummy2, + fmt::format("{} all BOND_HISTORY 0 1", id_fix_bond_history),1)); + delete[] id_fix_dummy2; id_fix_dummy2 = nullptr; } } @@ -297,7 +296,7 @@ void BondBPMSpring::settings(int narg, char **arg) BondBPM::settings(narg, arg); int iarg; - for (int i = 0; i < leftover_iarg.size(); i++) { + 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"); @@ -366,7 +365,6 @@ double BondBPMSpring::single(int type, double rsq, int i, int j, double r = sqrt(rsq); double rinv = 1.0/r; - double e = (r - r0)/r0; fforce = k[type]*(r0-r); double **x = atom->x; diff --git a/src/BPM/bond_bpm_spring.h b/src/BPM/bond_bpm_spring.h index faaf6025b7..a847ed56a1 100644 --- a/src/BPM/bond_bpm_spring.h +++ b/src/BPM/bond_bpm_spring.h @@ -13,7 +13,7 @@ #ifdef BOND_CLASS // clang-format off -BondStyle(bpm/spring,BondBPMSpring) +BondStyle(bpm/spring,BondBPMSpring); // clang-format on #else @@ -27,8 +27,8 @@ namespace LAMMPS_NS { class BondBPMSpring : public BondBPM { public: BondBPMSpring(class LAMMPS *); - virtual ~BondBPMSpring() override; - virtual void compute(int, int) override; + ~BondBPMSpring() override; + void compute(int, int) override; void coeff(int, char **) override; void init_style() override; void settings(int, char **) override; diff --git a/src/BPM/compute_nbond_atom.h b/src/BPM/compute_nbond_atom.h index fcca25db11..32a979a9e9 100644 --- a/src/BPM/compute_nbond_atom.h +++ b/src/BPM/compute_nbond_atom.h @@ -13,7 +13,7 @@ #ifdef COMPUTE_CLASS // clang-format off -ComputeStyle(nbond/atom,ComputeNBondAtom) +ComputeStyle(nbond/atom,ComputeNBondAtom); // clang-format on #else diff --git a/src/BPM/fix_nve_bpm_sphere.h b/src/BPM/fix_nve_bpm_sphere.h index 5a24132e03..48b65eb96b 100644 --- a/src/BPM/fix_nve_bpm_sphere.h +++ b/src/BPM/fix_nve_bpm_sphere.h @@ -13,7 +13,7 @@ #ifdef FIX_CLASS // clang-format off -FixStyle(nve/bpm/sphere,FixNVEBPMSphere) +FixStyle(nve/bpm/sphere,FixNVEBPMSphere); // clang-format on #else diff --git a/src/BPM/pair_bpm_spring.cpp b/src/BPM/pair_bpm_spring.cpp index f87ddd51e0..cb3b5a7633 100644 --- a/src/BPM/pair_bpm_spring.cpp +++ b/src/BPM/pair_bpm_spring.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -19,8 +18,8 @@ #include "error.h" #include "force.h" #include "memory.h" -#include "neighbor.h" #include "neigh_list.h" +#include "neighbor.h" using namespace LAMMPS_NS; @@ -49,26 +48,22 @@ PairBPMSpring::~PairBPMSpring() void PairBPMSpring::compute(int eflag, int vflag) { - int i,j,m,ii,jj,inum,jnum,itype,jtype; - tagint tagi, tagj; - int bond_flag; - double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fpair; - double r,rsq,rinv,r2inv,factor_lj; - int *ilist,*jlist,*numneigh,**firstneigh; - double vxtmp,vytmp,vztmp,delvx,delvy,delvz,dot,smooth; + int i, j, ii, jj, inum, jnum, itype, jtype; + double xtmp, ytmp, ztmp, delx, dely, delz, evdwl, fpair; + double r, rsq, rinv, factor_lj; + int *ilist, *jlist, *numneigh, **firstneigh; + double vxtmp, vytmp, vztmp, delvx, delvy, delvz, dot, smooth; evdwl = 0.0; - if (eflag || vflag) ev_setup(eflag,vflag); - else evflag = vflag_fdotr = 0; + if (eflag || vflag) + ev_setup(eflag, vflag); + else + evflag = vflag_fdotr = 0; - tagint *tag = atom->tag; double **x = atom->x; double **v = atom->v; double **f = atom->f; int *type = atom->type; - int **bond_type = atom->bond_type; - int *num_bond = atom->num_bond; - tagint **bond_atom = atom->bond_atom; int nlocal = atom->nlocal; int newton_pair = force->newton_pair; double *special_lj = force->special_lj; @@ -82,7 +77,6 @@ void PairBPMSpring::compute(int eflag, int vflag) for (ii = 0; ii < inum; ii++) { i = ilist[ii]; - tagi = tag[i]; xtmp = x[i][0]; ytmp = x[i][1]; ztmp = x[i][2]; @@ -104,40 +98,39 @@ void PairBPMSpring::compute(int eflag, int vflag) delx = xtmp - x[j][0]; dely = ytmp - x[j][1]; delz = ztmp - x[j][2]; - rsq = delx*delx + dely*dely + delz*delz; + rsq = delx * delx + dely * dely + delz * delz; jtype = type[j]; if (rsq < cutsq[itype][jtype]) { r = sqrt(rsq); - rinv = 1.0/r; - fpair = k[itype][jtype]*(cut[itype][jtype]-r); + rinv = 1.0 / r; + fpair = k[itype][jtype] * (cut[itype][jtype] - r); - smooth = rsq/cutsq[itype][jtype]; + smooth = rsq / cutsq[itype][jtype]; smooth *= smooth; smooth *= smooth; smooth = 1.0 - smooth; delvx = vxtmp - v[j][0]; delvy = vytmp - v[j][1]; delvz = vztmp - v[j][2]; - dot = delx*delvx + dely*delvy + delz*delvz; - fpair -= gamma[itype][jtype]*dot*smooth*rinv; + dot = delx * delvx + dely * delvy + delz * delvz; + fpair -= gamma[itype][jtype] * dot * smooth * rinv; - fpair *= factor_lj*rinv; + fpair *= factor_lj * rinv; if (eflag) evdwl = 0.0; - f[i][0] += delx*fpair; - f[i][1] += dely*fpair; - f[i][2] += delz*fpair; + f[i][0] += delx * fpair; + f[i][1] += dely * fpair; + f[i][2] += delz * fpair; if (newton_pair || j < nlocal) { - f[j][0] -= delx*fpair; - f[j][1] -= dely*fpair; - f[j][2] -= delz*fpair; + f[j][0] -= delx * fpair; + f[j][1] -= dely * fpair; + f[j][2] -= delz * fpair; } - if (evflag) ev_tally(i,j,nlocal,newton_pair, - evdwl,0.0,fpair,delx,dely,delz); + if (evflag) ev_tally(i, j, nlocal, newton_pair, evdwl, 0.0, fpair, delx, dely, delz); } } } @@ -152,27 +145,26 @@ void PairBPMSpring::compute(int eflag, int vflag) void PairBPMSpring::allocate() { allocated = 1; - int n = atom->ntypes; + const int np1 = atom->ntypes; - memory->create(setflag,n+1,n+1,"pair:setflag"); - for (int i = 1; i <= n; i++) - for (int j = i; j <= n; j++) - setflag[i][j] = 0; + memory->create(setflag, np1, np1, "pair:setflag"); + for (int i = 1; i < np1; i++) + for (int j = i; j < np1; j++) setflag[i][j] = 0; - memory->create(cutsq,n+1,n+1,"pair:cutsq"); + memory->create(cutsq, np1, np1, "pair:cutsq"); - memory->create(k,n+1,n+1,"pair:k"); - memory->create(cut,n+1,n+1,"pair:cut"); - memory->create(gamma,n+1,n+1,"pair:gamma"); + memory->create(k, np1, np1, "pair:k"); + memory->create(cut, np1, np1, "pair:cut"); + memory->create(gamma, np1, np1, "pair:gamma"); } /* ---------------------------------------------------------------------- global settings ------------------------------------------------------------------------- */ -void PairBPMSpring::settings(int narg, char **arg) +void PairBPMSpring::settings(int narg, char ** /*arg*/) { - if (narg != 0) error->all(FLERR,"Illegal pair_style command"); + if (narg != 0) error->all(FLERR, "Illegal pair_style command"); } /* ---------------------------------------------------------------------- @@ -181,23 +173,22 @@ void PairBPMSpring::settings(int narg, char **arg) void PairBPMSpring::coeff(int narg, char **arg) { - if (narg != 5) - error->all(FLERR,"Incorrect args for pair coefficients"); + if (narg != 5) error->all(FLERR, "Incorrect args for pair coefficients"); if (!allocated) allocate(); - int ilo,ihi,jlo,jhi; - utils::bounds(FLERR,arg[0],1,atom->ntypes,ilo,ihi,error); - utils::bounds(FLERR,arg[1],1,atom->ntypes,jlo,jhi,error); + int ilo, ihi, jlo, jhi; + utils::bounds(FLERR, arg[0], 1, atom->ntypes, ilo, ihi, error); + utils::bounds(FLERR, arg[1], 1, atom->ntypes, jlo, jhi, error); - double k_one = utils::numeric(FLERR,arg[2],false,lmp); - double cut_one = utils::numeric(FLERR,arg[3],false,lmp); - double gamma_one = utils::numeric(FLERR,arg[4],false,lmp); + double k_one = utils::numeric(FLERR, arg[2], false, lmp); + double cut_one = utils::numeric(FLERR, arg[3], false, lmp); + double gamma_one = utils::numeric(FLERR, arg[4], false, lmp); - if (cut_one <= 0.0) error->all(FLERR,"Incorrect args for pair coefficients"); + if (cut_one <= 0.0) error->all(FLERR, "Incorrect args for pair coefficients"); int count = 0; for (int i = ilo; i <= ihi; i++) { - for (int j = MAX(jlo,i); j <= jhi; j++) { + for (int j = MAX(jlo, i); j <= jhi; j++) { k[i][j] = k_one; cut[i][j] = cut_one; gamma[i][j] = gamma_one; @@ -207,7 +198,7 @@ void PairBPMSpring::coeff(int narg, char **arg) } } - if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); + if (count == 0) error->all(FLERR, "Incorrect args for pair coefficients"); } /* ---------------------------------------------------------------------- @@ -217,11 +208,9 @@ void PairBPMSpring::coeff(int narg, char **arg) double PairBPMSpring::init_one(int i, int j) { if (setflag[i][j] == 0) { - cut[i][j] = mix_distance(cut[i][i],cut[j][j]); - k[i][j] = mix_energy(k[i][i],k[j][j], - cut[i][i],cut[j][j]); - gamma[i][j] = mix_energy(gamma[i][i],gamma[j][j], - cut[i][i],cut[j][j]); + cut[i][j] = mix_distance(cut[i][i], cut[j][j]); + k[i][j] = mix_energy(k[i][i], k[j][j], cut[i][i], cut[j][j]); + gamma[i][j] = mix_energy(gamma[i][i], gamma[j][j], cut[i][i], cut[j][j]); } cut[j][i] = cut[i][j]; @@ -239,14 +228,14 @@ void PairBPMSpring::write_restart(FILE *fp) { write_restart_settings(fp); - int i,j; + int i, j; for (i = 1; i <= atom->ntypes; i++) for (j = i; j <= atom->ntypes; j++) { - fwrite(&setflag[i][j],sizeof(int),1,fp); + fwrite(&setflag[i][j], sizeof(int), 1, fp); if (setflag[i][j]) { - fwrite(&k[i][j],sizeof(double),1,fp); - fwrite(&cut[i][j],sizeof(double),1,fp); - fwrite(&gamma[i][j],sizeof(double),1,fp); + fwrite(&k[i][j], sizeof(double), 1, fp); + fwrite(&cut[i][j], sizeof(double), 1, fp); + fwrite(&gamma[i][j], sizeof(double), 1, fp); } } } @@ -260,21 +249,21 @@ void PairBPMSpring::read_restart(FILE *fp) read_restart_settings(fp); allocate(); - int i,j; + int i, j; int me = comm->me; for (i = 1; i <= atom->ntypes; i++) for (j = i; j <= atom->ntypes; j++) { - if (me == 0) fread(&setflag[i][j],sizeof(int),1,fp); - MPI_Bcast(&setflag[i][j],1,MPI_INT,0,world); + if (me == 0) fread(&setflag[i][j], sizeof(int), 1, fp); + MPI_Bcast(&setflag[i][j], 1, MPI_INT, 0, world); if (setflag[i][j]) { if (me == 0) { - fread(&k[i][j],sizeof(double),1,fp); - fread(&cut[i][j],sizeof(double),1,fp); - fread(&gamma[i][j],sizeof(double),1,fp); + fread(&k[i][j], sizeof(double), 1, fp); + fread(&cut[i][j], sizeof(double), 1, fp); + fread(&gamma[i][j], sizeof(double), 1, fp); } - MPI_Bcast(&k[i][j],1,MPI_DOUBLE,0,world); - MPI_Bcast(&cut[i][j],1,MPI_DOUBLE,0,world); - MPI_Bcast(&gamma[i][j],1,MPI_DOUBLE,0,world); + MPI_Bcast(&k[i][j], 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&cut[i][j], 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&gamma[i][j], 1, MPI_DOUBLE, 0, world); } } } @@ -286,7 +275,7 @@ void PairBPMSpring::read_restart(FILE *fp) void PairBPMSpring::write_data(FILE *fp) { for (int i = 1; i <= atom->ntypes; i++) - fprintf(fp,"%d %g %g %g\n",i,k[i][i],cut[i][i],gamma[i][i]); + fprintf(fp, "%d %g %g %g\n", i, k[i][i], cut[i][i], gamma[i][i]); } /* ---------------------------------------------------------------------- @@ -297,30 +286,28 @@ void PairBPMSpring::write_data_all(FILE *fp) { for (int i = 1; i <= atom->ntypes; i++) for (int j = i; j <= atom->ntypes; j++) - fprintf(fp,"%d %d %g %g %g\n",i,j, - k[i][j],cut[i][j],gamma[i][j]); + fprintf(fp, "%d %d %g %g %g\n", i, j, k[i][j], cut[i][j], gamma[i][j]); } /* ---------------------------------------------------------------------- */ -double PairBPMSpring::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, - double &fforce) +double PairBPMSpring::single(int i, int j, int itype, int jtype, double rsq, double /*factor_coul*/, + double factor_lj, double &fforce) { - double fpair,r,rinv; + double fpair, r, rinv; double delx, dely, delz, delvx, delvy, delvz, dot, smooth; - if(rsq > cutsq[itype][jtype]) return 0.0; + if (rsq > cutsq[itype][jtype]) return 0.0; double **x = atom->x; double **v = atom->v; r = sqrt(rsq); - rinv = 1.0/r; + rinv = 1.0 / r; - fpair = k[itype][jtype]*(cut[itype][jtype]-r); + fpair = k[itype][jtype] * (cut[itype][jtype] - r); - smooth = rsq/cutsq[itype][jtype]; + smooth = rsq / cutsq[itype][jtype]; smooth *= smooth; smooth = 1.0 - smooth; delx = x[i][0] - x[j][0]; @@ -329,8 +316,8 @@ double PairBPMSpring::single(int i, int j, int itype, int jtype, double rsq, delvx = v[i][0] - v[j][0]; delvy = v[i][1] - v[j][1]; delvz = v[i][2] - v[j][2]; - dot = delx*delvx + dely*delvy + delz*delvz; - fpair -= gamma[itype][jtype]*dot*rinv*smooth; + dot = delx * delvx + dely * delvy + delz * delvz; + fpair -= gamma[itype][jtype] * dot * rinv * smooth; fpair *= factor_lj; fforce = fpair; diff --git a/src/BPM/pair_bpm_spring.h b/src/BPM/pair_bpm_spring.h index 44a93dec21..c868066398 100644 --- a/src/BPM/pair_bpm_spring.h +++ b/src/BPM/pair_bpm_spring.h @@ -13,7 +13,7 @@ #ifdef PAIR_CLASS // clang-format off -PairStyle(bpm/spring,PairBPMSpring) +PairStyle(bpm/spring,PairBPMSpring); // clang-format on #else @@ -27,8 +27,8 @@ namespace LAMMPS_NS { class PairBPMSpring : public Pair { public: PairBPMSpring(class LAMMPS *); - virtual ~PairBPMSpring() override; - virtual void compute(int, int) override; + ~PairBPMSpring() override; + void compute(int, int) override; void settings(int, char **) override; void coeff(int, char **) override; double init_one(int, int) override; @@ -39,12 +39,12 @@ class PairBPMSpring : public Pair { double single(int, int, int, int, double, double, double, double &) override; protected: - double **k,**cut,**gamma; + double **k, **cut, **gamma; void allocate(); }; -} +} // namespace LAMMPS_NS #endif #endif diff --git a/src/MC/fix_bond_break.cpp b/src/MC/fix_bond_break.cpp index eaec7321fe..71408d8aed 100644 --- a/src/MC/fix_bond_break.cpp +++ b/src/MC/fix_bond_break.cpp @@ -301,11 +301,11 @@ void FixBondBreak::post_integrate() bond_type[i][k] = bond_type[i][k+1]; if (n_histories > 0) for (auto &ihistory: histories) - ((FixBondHistory *) ihistory)->shift_history(i,k,k+1); + dynamic_cast(ihistory)->shift_history(i,k,k+1); } if (n_histories > 0) for (auto &ihistory: histories) - ((FixBondHistory *) ihistory)->delete_history(i,num_bond[i]-1); + dynamic_cast(ihistory)->delete_history(i,num_bond[i]-1); num_bond[i]--; break; } diff --git a/src/MC/fix_bond_create_angle.cpp b/src/MC/fix_bond_create_angle.cpp index 3ebda59f0d..f3014a4b07 100644 --- a/src/MC/fix_bond_create_angle.cpp +++ b/src/MC/fix_bond_create_angle.cpp @@ -17,21 +17,15 @@ ------------------------------------------------------------------------- */ #include "fix_bond_create_angle.h" + #include "atom.h" + #include using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -FixBondCreateAngle::FixBondCreateAngle(LAMMPS *lmp, int narg, char **arg) : - FixBondCreate(lmp, narg, arg) -{ - -} - -/* ---------------------------------------------------------------------- */ - int FixBondCreateAngle::constrain(int i, int j, double amin, double amax) { double **x = atom->x; diff --git a/src/MC/fix_bond_create_angle.h b/src/MC/fix_bond_create_angle.h index 6c74f0e6d7..ae3d6afa97 100644 --- a/src/MC/fix_bond_create_angle.h +++ b/src/MC/fix_bond_create_angle.h @@ -26,7 +26,7 @@ namespace LAMMPS_NS { class FixBondCreateAngle : public FixBondCreate { public: - FixBondCreateAngle(class LAMMPS *, int, char **); + FixBondCreateAngle(LAMMPS *_lmp, int narg, char **arg) : FixBondCreate(_lmp, narg, arg) {} private: int constrain(int, int, double, double) override; diff --git a/src/MC/fix_bond_swap.cpp b/src/MC/fix_bond_swap.cpp index 49f850d34f..59fabc8ffe 100644 --- a/src/MC/fix_bond_swap.cpp +++ b/src/MC/fix_bond_swap.cpp @@ -461,28 +461,28 @@ void FixBondSwap::post_integrate() if (bond_atom[i][ibond] == tag[inext]) { if (n_histories > 0) for (auto &ihistory: histories) - ((FixBondHistory *) ihistory)->delete_history(i,ibond); + dynamic_cast(ihistory)->delete_history(i,ibond); bond_atom[i][ibond] = tag[jnext]; } for (jbond = 0; jbond < num_bond[j]; jbond++) if (bond_atom[j][jbond] == tag[jnext]) { if (n_histories > 0) for (auto &ihistory: histories) - ((FixBondHistory *) ihistory)->delete_history(j,jbond); + dynamic_cast(ihistory)->delete_history(j,jbond); bond_atom[j][jbond] = tag[inext]; } for (ibond = 0; ibond < num_bond[inext]; ibond++) if (bond_atom[inext][ibond] == tag[i]) { if (n_histories > 0) for (auto &ihistory: histories) - ((FixBondHistory *) ihistory)->delete_history(inext,ibond); + dynamic_cast(ihistory)->delete_history(inext,ibond); bond_atom[inext][ibond] = tag[j]; } for (jbond = 0; jbond < num_bond[jnext]; jbond++) if (bond_atom[jnext][jbond] == tag[j]) { if (n_histories > 0) for (auto &ihistory: histories) - ((FixBondHistory *) ihistory)->delete_history(jnext,jbond); + dynamic_cast(ihistory)->delete_history(jnext,jbond); bond_atom[jnext][jbond] = tag[i]; } diff --git a/src/REACTION/fix_bond_react.cpp b/src/REACTION/fix_bond_react.cpp index bb64bbeb05..c05ad4f8b3 100644 --- a/src/REACTION/fix_bond_react.cpp +++ b/src/REACTION/fix_bond_react.cpp @@ -3111,9 +3111,9 @@ void FixBondReact::update_everything() if (n_histories > 0) for (auto &ihistory: histories) { for (int n = 0; n < num_bond[atom->map(update_mega_glove[jj+1][i])]; n++) - ((FixBondHistory *) ihistory)->cache_history(atom->map(update_mega_glove[jj+1][i]), n); + dynamic_cast(ihistory)->cache_history(atom->map(update_mega_glove[jj+1][i]), n); for (int n = 0; n < num_bond[atom->map(update_mega_glove[jj+1][i])]; n++) - ((FixBondHistory *) ihistory)->delete_history(atom->map(update_mega_glove[jj+1][i]), 0); + dynamic_cast(ihistory)->delete_history(atom->map(update_mega_glove[jj+1][i]), 0); } num_bond[atom->map(update_mega_glove[jj+1][i])] = 0; } @@ -3125,17 +3125,17 @@ void FixBondReact::update_everything() // Cache history information, shift history, then delete final element if (n_histories > 0) for (auto &ihistory: histories) - ((FixBondHistory *) ihistory)->cache_history(atom->map(update_mega_glove[jj+1][i]), p); + dynamic_cast(ihistory)->cache_history(atom->map(update_mega_glove[jj+1][i]), p); for (int m = p; m < num_bond[atom->map(update_mega_glove[jj+1][i])]-1; m++) { bond_type[atom->map(update_mega_glove[jj+1][i])][m] = bond_type[atom->map(update_mega_glove[jj+1][i])][m+1]; bond_atom[atom->map(update_mega_glove[jj+1][i])][m] = bond_atom[atom->map(update_mega_glove[jj+1][i])][m+1]; if (n_histories > 0) for (auto &ihistory: histories) - ((FixBondHistory *) ihistory)->shift_history(atom->map(update_mega_glove[jj+1][i]),m,m+1); + dynamic_cast(ihistory)->shift_history(atom->map(update_mega_glove[jj+1][i]),m,m+1); } if (n_histories > 0) for (auto &ihistory: histories) - ((FixBondHistory *) ihistory)->delete_history(atom->map(update_mega_glove[jj+1][i]), + dynamic_cast(ihistory)->delete_history(atom->map(update_mega_glove[jj+1][i]), num_bond[atom->map(update_mega_glove[jj+1][i])]-1); num_bond[atom->map(update_mega_glove[jj+1][i])]--; delta_bonds--; @@ -3158,7 +3158,7 @@ void FixBondReact::update_everything() // Check cached history data to see if bond regenerated if (n_histories > 0) for (auto &ihistory: histories) - ((FixBondHistory *) ihistory)->check_cache(atom->map(update_mega_glove[jj+1][i]), p); + dynamic_cast(ihistory)->check_cache(atom->map(update_mega_glove[jj+1][i]), p); } } if (landlocked_atoms[j][rxnID] == 0) { @@ -3170,7 +3170,7 @@ void FixBondReact::update_everything() // Check cached history data to see if bond regenerated if (n_histories > 0) for (auto &ihistory: histories) - ((FixBondHistory *) ihistory)->check_cache(atom->map(update_mega_glove[jj+1][i]), insert_num); + dynamic_cast(ihistory)->check_cache(atom->map(update_mega_glove[jj+1][i]), insert_num); num_bond[atom->map(update_mega_glove[jj+1][i])]++; if (num_bond[atom->map(update_mega_glove[jj+1][i])] > atom->bond_per_atom) error->one(FLERR,"Bond/react topology/atom exceed system topology/atom"); @@ -3184,7 +3184,7 @@ void FixBondReact::update_everything() if (n_histories > 0) for (auto &ihistory: histories) - ((FixBondHistory *) ihistory)->clear_cache(); + dynamic_cast(ihistory)->clear_cache(); // Angles! First let's delete all angle info: if (force->angle && twomol->angleflag) { diff --git a/src/atom.cpp b/src/atom.cpp index a923483c62..fdecc4a8f0 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -427,6 +427,8 @@ void Atom::peratom_create() add_peratom("tri",&tri,INT,0); add_peratom("body",&body,INT,0); + // BPM package + add_peratom("quat",&quat,DOUBLE,4); // MOLECULE package diff --git a/src/comm_brick.cpp b/src/comm_brick.cpp index 21e182b4df..b4a0cddda8 100644 --- a/src/comm_brick.cpp +++ b/src/comm_brick.cpp @@ -491,8 +491,7 @@ void CommBrick::setup() return how many procs away are needed to encompass cutghost away from loc ------------------------------------------------------------------------- */ -int CommBrick::updown(int dim, int dir, int loc, - double prd, int periodicity, double *split) +int CommBrick::updown(int dim, int dir, int loc, double prd, int periodicity, double *split) { int index,count; double frac,delta; @@ -553,19 +552,15 @@ void CommBrick::forward_comm(int /*dummy*/) if (comm_x_only) { if (size_forward_recv[iswap]) { buf = x[firstrecv[iswap]]; - MPI_Irecv(buf,size_forward_recv[iswap],MPI_DOUBLE, - recvproc[iswap],0,world,&request); + MPI_Irecv(buf,size_forward_recv[iswap],MPI_DOUBLE,recvproc[iswap],0,world,&request); } - n = avec->pack_comm(sendnum[iswap],sendlist[iswap], - buf_send,pbc_flag[iswap],pbc[iswap]); + n = avec->pack_comm(sendnum[iswap],sendlist[iswap],buf_send,pbc_flag[iswap],pbc[iswap]); if (n) MPI_Send(buf_send,n,MPI_DOUBLE,sendproc[iswap],0,world); if (size_forward_recv[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); } else if (ghost_velocity) { if (size_forward_recv[iswap]) - MPI_Irecv(buf_recv,size_forward_recv[iswap],MPI_DOUBLE, - recvproc[iswap],0,world,&request); - n = avec->pack_comm_vel(sendnum[iswap],sendlist[iswap], - buf_send,pbc_flag[iswap],pbc[iswap]); + MPI_Irecv(buf_recv,size_forward_recv[iswap],MPI_DOUBLE,recvproc[iswap],0,world,&request); + n = avec->pack_comm_vel(sendnum[iswap],sendlist[iswap],buf_send,pbc_flag[iswap],pbc[iswap]); if (n) MPI_Send(buf_send,n,MPI_DOUBLE,sendproc[iswap],0,world); if (size_forward_recv[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); avec->unpack_comm_vel(recvnum[iswap],firstrecv[iswap],buf_recv); @@ -573,8 +568,7 @@ void CommBrick::forward_comm(int /*dummy*/) if (size_forward_recv[iswap]) MPI_Irecv(buf_recv,size_forward_recv[iswap],MPI_DOUBLE, recvproc[iswap],0,world,&request); - n = avec->pack_comm(sendnum[iswap],sendlist[iswap], - buf_send,pbc_flag[iswap],pbc[iswap]); + n = avec->pack_comm(sendnum[iswap],sendlist[iswap],buf_send,pbc_flag[iswap],pbc[iswap]); if (n) MPI_Send(buf_send,n,MPI_DOUBLE,sendproc[iswap],0,world); if (size_forward_recv[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); avec->unpack_comm(recvnum[iswap],firstrecv[iswap],buf_recv); @@ -586,12 +580,10 @@ void CommBrick::forward_comm(int /*dummy*/) avec->pack_comm(sendnum[iswap],sendlist[iswap], x[firstrecv[iswap]],pbc_flag[iswap],pbc[iswap]); } else if (ghost_velocity) { - avec->pack_comm_vel(sendnum[iswap],sendlist[iswap], - buf_send,pbc_flag[iswap],pbc[iswap]); + avec->pack_comm_vel(sendnum[iswap],sendlist[iswap],buf_send,pbc_flag[iswap],pbc[iswap]); avec->unpack_comm_vel(recvnum[iswap],firstrecv[iswap],buf_send); } else { - avec->pack_comm(sendnum[iswap],sendlist[iswap], - buf_send,pbc_flag[iswap],pbc[iswap]); + avec->pack_comm(sendnum[iswap],sendlist[iswap],buf_send,pbc_flag[iswap],pbc[iswap]); avec->unpack_comm(recvnum[iswap],firstrecv[iswap],buf_send); } } @@ -619,18 +611,15 @@ void CommBrick::reverse_comm() if (sendproc[iswap] != me) { if (comm_f_only) { if (size_reverse_recv[iswap]) - MPI_Irecv(buf_recv,size_reverse_recv[iswap],MPI_DOUBLE, - sendproc[iswap],0,world,&request); + MPI_Irecv(buf_recv,size_reverse_recv[iswap],MPI_DOUBLE,sendproc[iswap],0,world,&request); if (size_reverse_send[iswap]) { buf = f[firstrecv[iswap]]; - MPI_Send(buf,size_reverse_send[iswap],MPI_DOUBLE, - recvproc[iswap],0,world); + MPI_Send(buf,size_reverse_send[iswap],MPI_DOUBLE,recvproc[iswap],0,world); } if (size_reverse_recv[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); } else { if (size_reverse_recv[iswap]) - MPI_Irecv(buf_recv,size_reverse_recv[iswap],MPI_DOUBLE, - sendproc[iswap],0,world,&request); + MPI_Irecv(buf_recv,size_reverse_recv[iswap],MPI_DOUBLE,sendproc[iswap],0,world,&request); n = avec->pack_reverse(recvnum[iswap],firstrecv[iswap],buf_send); if (n) MPI_Send(buf_send,n,MPI_DOUBLE,recvproc[iswap],0,world); if (size_reverse_recv[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); @@ -640,8 +629,7 @@ void CommBrick::reverse_comm() } else { if (comm_f_only) { if (sendnum[iswap]) - avec->unpack_reverse(sendnum[iswap],sendlist[iswap], - f[firstrecv[iswap]]); + avec->unpack_reverse(sendnum[iswap],sendlist[iswap],f[firstrecv[iswap]]); } else { avec->pack_reverse(recvnum[iswap],firstrecv[iswap],buf_send); avec->unpack_reverse(sendnum[iswap],sendlist[iswap],buf_send); @@ -734,25 +722,21 @@ void CommBrick::exchange() if (procgrid[dim] == 1) nrecv = 0; else { MPI_Sendrecv(&nsend,1,MPI_INT,procneigh[dim][0],0, - &nrecv1,1,MPI_INT,procneigh[dim][1],0,world, - MPI_STATUS_IGNORE); + &nrecv1,1,MPI_INT,procneigh[dim][1],0,world,MPI_STATUS_IGNORE); nrecv = nrecv1; if (procgrid[dim] > 2) { MPI_Sendrecv(&nsend,1,MPI_INT,procneigh[dim][1],0, - &nrecv2,1,MPI_INT,procneigh[dim][0],0,world, - MPI_STATUS_IGNORE); + &nrecv2,1,MPI_INT,procneigh[dim][0],0,world,MPI_STATUS_IGNORE); nrecv += nrecv2; } if (nrecv > maxrecv) grow_recv(nrecv); - MPI_Irecv(buf_recv,nrecv1,MPI_DOUBLE,procneigh[dim][1],0, - world,&request); + MPI_Irecv(buf_recv,nrecv1,MPI_DOUBLE,procneigh[dim][1],0,world,&request); MPI_Send(buf_send,nsend,MPI_DOUBLE,procneigh[dim][0],0,world); MPI_Wait(&request,MPI_STATUS_IGNORE); if (procgrid[dim] > 2) { - MPI_Irecv(&buf_recv[nrecv1],nrecv2,MPI_DOUBLE,procneigh[dim][0],0, - world,&request); + MPI_Irecv(&buf_recv[nrecv1],nrecv2,MPI_DOUBLE,procneigh[dim][0],0,world,&request); MPI_Send(buf_send,nsend,MPI_DOUBLE,procneigh[dim][1],0,world); MPI_Wait(&request,MPI_STATUS_IGNORE); } @@ -926,11 +910,9 @@ void CommBrick::borders() if (nsend*size_border > maxsend) grow_send(nsend*size_border,0); if (ghost_velocity) - n = avec->pack_border_vel(nsend,sendlist[iswap],buf_send, - pbc_flag[iswap],pbc[iswap]); + n = avec->pack_border_vel(nsend,sendlist[iswap],buf_send,pbc_flag[iswap],pbc[iswap]); else - n = avec->pack_border(nsend,sendlist[iswap],buf_send, - pbc_flag[iswap],pbc[iswap]); + n = avec->pack_border(nsend,sendlist[iswap],buf_send,pbc_flag[iswap],pbc[iswap]); // swap atoms with other proc // no MPI calls except SendRecv if nsend/nrecv = 0 @@ -939,8 +921,7 @@ void CommBrick::borders() if (sendproc[iswap] != me) { MPI_Sendrecv(&nsend,1,MPI_INT,sendproc[iswap],0, - &nrecv,1,MPI_INT,recvproc[iswap],0,world, - MPI_STATUS_IGNORE); + &nrecv,1,MPI_INT,recvproc[iswap],0,world,MPI_STATUS_IGNORE); if (nrecv*size_border > maxrecv) grow_recv(nrecv*size_border); if (nrecv) MPI_Irecv(buf_recv,nrecv*size_border,MPI_DOUBLE, recvproc[iswap],0,world,&request); @@ -1014,16 +995,14 @@ void CommBrick::forward_comm(Pair *pair) // pack buffer - n = pair->pack_forward_comm(sendnum[iswap],sendlist[iswap], - buf_send,pbc_flag[iswap],pbc[iswap]); + n = pair->pack_forward_comm(sendnum[iswap],sendlist[iswap],buf_send,pbc_flag[iswap],pbc[iswap]); // exchange with another proc // if self, set recv buffer to send buffer if (sendproc[iswap] != me) { if (recvnum[iswap]) - MPI_Irecv(buf_recv,nsize*recvnum[iswap],MPI_DOUBLE, - recvproc[iswap],0,world,&request); + MPI_Irecv(buf_recv,nsize*recvnum[iswap],MPI_DOUBLE,recvproc[iswap],0,world,&request); if (sendnum[iswap]) MPI_Send(buf_send,n,MPI_DOUBLE,sendproc[iswap],0,world); if (recvnum[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); @@ -1060,8 +1039,7 @@ void CommBrick::reverse_comm(Pair *pair) if (sendproc[iswap] != me) { if (sendnum[iswap]) - MPI_Irecv(buf_recv,nsize*sendnum[iswap],MPI_DOUBLE,sendproc[iswap],0, - world,&request); + MPI_Irecv(buf_recv,nsize*sendnum[iswap],MPI_DOUBLE,sendproc[iswap],0,world,&request); if (recvnum[iswap]) MPI_Send(buf_send,n,MPI_DOUBLE,recvproc[iswap],0,world); if (sendnum[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); @@ -1091,16 +1069,14 @@ void CommBrick::forward_comm(Bond *bond) // pack buffer - n = bond->pack_forward_comm(sendnum[iswap],sendlist[iswap], - buf_send,pbc_flag[iswap],pbc[iswap]); + n = bond->pack_forward_comm(sendnum[iswap],sendlist[iswap],buf_send,pbc_flag[iswap],pbc[iswap]); // exchange with another proc // if self, set recv buffer to send buffer if (sendproc[iswap] != me) { if (recvnum[iswap]) - MPI_Irecv(buf_recv,nsize*recvnum[iswap],MPI_DOUBLE, - recvproc[iswap],0,world,&request); + MPI_Irecv(buf_recv,nsize*recvnum[iswap],MPI_DOUBLE,recvproc[iswap],0,world,&request); if (sendnum[iswap]) MPI_Send(buf_send,n,MPI_DOUBLE,sendproc[iswap],0,world); if (recvnum[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); @@ -1137,8 +1113,7 @@ void CommBrick::reverse_comm(Bond *bond) if (sendproc[iswap] != me) { if (sendnum[iswap]) - MPI_Irecv(buf_recv,nsize*sendnum[iswap],MPI_DOUBLE,sendproc[iswap],0, - world,&request); + MPI_Irecv(buf_recv,nsize*sendnum[iswap],MPI_DOUBLE,sendproc[iswap],0,world,&request); if (recvnum[iswap]) MPI_Send(buf_send,n,MPI_DOUBLE,recvproc[iswap],0,world); if (sendnum[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); @@ -1173,16 +1148,14 @@ void CommBrick::forward_comm(Fix *fix, int size) // pack buffer - n = fix->pack_forward_comm(sendnum[iswap],sendlist[iswap], - buf_send,pbc_flag[iswap],pbc[iswap]); + n = fix->pack_forward_comm(sendnum[iswap],sendlist[iswap],buf_send,pbc_flag[iswap],pbc[iswap]); // exchange with another proc // if self, set recv buffer to send buffer if (sendproc[iswap] != me) { if (recvnum[iswap]) - MPI_Irecv(buf_recv,nsize*recvnum[iswap],MPI_DOUBLE,recvproc[iswap],0, - world,&request); + MPI_Irecv(buf_recv,nsize*recvnum[iswap],MPI_DOUBLE,recvproc[iswap],0,world,&request); if (sendnum[iswap]) MPI_Send(buf_send,n,MPI_DOUBLE,sendproc[iswap],0,world); if (recvnum[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); @@ -1224,8 +1197,7 @@ void CommBrick::reverse_comm(Fix *fix, int size) if (sendproc[iswap] != me) { if (sendnum[iswap]) - MPI_Irecv(buf_recv,nsize*sendnum[iswap],MPI_DOUBLE,sendproc[iswap],0, - world,&request); + MPI_Irecv(buf_recv,nsize*sendnum[iswap],MPI_DOUBLE,sendproc[iswap],0,world,&request); if (recvnum[iswap]) MPI_Send(buf_send,n,MPI_DOUBLE,recvproc[iswap],0,world); if (sendnum[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); @@ -1263,13 +1235,11 @@ void CommBrick::reverse_comm_variable(Fix *fix) if (sendproc[iswap] != me) { MPI_Sendrecv(&nsend,1,MPI_INT,recvproc[iswap],0, - &nrecv,1,MPI_INT,sendproc[iswap],0,world, - MPI_STATUS_IGNORE); + &nrecv,1,MPI_INT,sendproc[iswap],0,world,MPI_STATUS_IGNORE); if (sendnum[iswap]) { if (nrecv > maxrecv) grow_recv(nrecv); - MPI_Irecv(buf_recv,maxrecv,MPI_DOUBLE,sendproc[iswap],0, - world,&request); + MPI_Irecv(buf_recv,maxrecv,MPI_DOUBLE,sendproc[iswap],0,world,&request); } if (recvnum[iswap]) MPI_Send(buf_send,nsend,MPI_DOUBLE,recvproc[iswap],0,world); @@ -1308,8 +1278,7 @@ void CommBrick::forward_comm(Compute *compute) if (sendproc[iswap] != me) { if (recvnum[iswap]) - MPI_Irecv(buf_recv,nsize*recvnum[iswap],MPI_DOUBLE,recvproc[iswap],0, - world,&request); + MPI_Irecv(buf_recv,nsize*recvnum[iswap],MPI_DOUBLE,recvproc[iswap],0,world,&request); if (sendnum[iswap]) MPI_Send(buf_send,n,MPI_DOUBLE,sendproc[iswap],0,world); if (recvnum[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); @@ -1346,8 +1315,7 @@ void CommBrick::reverse_comm(Compute *compute) if (sendproc[iswap] != me) { if (sendnum[iswap]) - MPI_Irecv(buf_recv,nsize*sendnum[iswap],MPI_DOUBLE,sendproc[iswap],0, - world,&request); + MPI_Irecv(buf_recv,nsize*sendnum[iswap],MPI_DOUBLE,sendproc[iswap],0,world,&request); if (recvnum[iswap]) MPI_Send(buf_send,n,MPI_DOUBLE,recvproc[iswap],0,world); if (sendnum[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); @@ -1385,8 +1353,7 @@ void CommBrick::forward_comm(Dump *dump) if (sendproc[iswap] != me) { if (recvnum[iswap]) - MPI_Irecv(buf_recv,nsize*recvnum[iswap],MPI_DOUBLE,recvproc[iswap],0, - world,&request); + MPI_Irecv(buf_recv,nsize*recvnum[iswap],MPI_DOUBLE,recvproc[iswap],0,world,&request); if (sendnum[iswap]) MPI_Send(buf_send,n,MPI_DOUBLE,sendproc[iswap],0,world); if (recvnum[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); @@ -1423,8 +1390,7 @@ void CommBrick::reverse_comm(Dump *dump) if (sendproc[iswap] != me) { if (sendnum[iswap]) - MPI_Irecv(buf_recv,nsize*sendnum[iswap],MPI_DOUBLE,sendproc[iswap],0, - world,&request); + MPI_Irecv(buf_recv,nsize*sendnum[iswap],MPI_DOUBLE,sendproc[iswap],0,world,&request); if (recvnum[iswap]) MPI_Send(buf_send,n,MPI_DOUBLE,recvproc[iswap],0,world); if (sendnum[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); @@ -1472,11 +1438,9 @@ void CommBrick::forward_comm_array(int nsize, double **array) if (sendproc[iswap] != me) { if (recvnum[iswap]) - MPI_Irecv(buf_recv,nsize*recvnum[iswap],MPI_DOUBLE,recvproc[iswap],0, - world,&request); + MPI_Irecv(buf_recv,nsize*recvnum[iswap],MPI_DOUBLE,recvproc[iswap],0,world,&request); if (sendnum[iswap]) - MPI_Send(buf_send,nsize*sendnum[iswap],MPI_DOUBLE, - sendproc[iswap],0,world); + MPI_Send(buf_send,nsize*sendnum[iswap],MPI_DOUBLE,sendproc[iswap],0,world); if (recvnum[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); buf = buf_recv; } else buf = buf_send; @@ -1522,21 +1486,18 @@ int CommBrick::exchange_variable(int n, double *inbuf, double *&outbuf) nrecv += nrecv1; if (procgrid[dim] > 2) { MPI_Sendrecv(&nsend,1,MPI_INT,procneigh[dim][1],0, - &nrecv2,1,MPI_INT,procneigh[dim][0],0,world, - MPI_STATUS_IGNORE); + &nrecv2,1,MPI_INT,procneigh[dim][0],0,world,MPI_STATUS_IGNORE); nrecv += nrecv2; } else nrecv2 = 0; if (nrecv > maxrecv) grow_recv(nrecv); - MPI_Irecv(&buf_recv[nsend],nrecv1,MPI_DOUBLE,procneigh[dim][1],0, - world,&request); + MPI_Irecv(&buf_recv[nsend],nrecv1,MPI_DOUBLE,procneigh[dim][1],0,world,&request); MPI_Send(buf_recv,nsend,MPI_DOUBLE,procneigh[dim][0],0,world); MPI_Wait(&request,MPI_STATUS_IGNORE); if (procgrid[dim] > 2) { - MPI_Irecv(&buf_recv[nsend+nrecv1],nrecv2,MPI_DOUBLE,procneigh[dim][0],0, - world,&request); + MPI_Irecv(&buf_recv[nsend+nrecv1],nrecv2,MPI_DOUBLE,procneigh[dim][0],0,world,&request); MPI_Send(buf_recv,nsend,MPI_DOUBLE,procneigh[dim][1],0,world); MPI_Wait(&request,MPI_STATUS_IGNORE); } diff --git a/src/comm_tiled.cpp b/src/comm_tiled.cpp index ebafc87ac8..8088ada44b 100644 --- a/src/comm_tiled.cpp +++ b/src/comm_tiled.cpp @@ -513,16 +513,14 @@ void CommTiled::setup() MIN(sbox_multi[3+idim]+cutghostmulti[icollection][idim],subhi[idim]); else sbox_multi[3+idim] = - MIN(sbox_multi[3+idim]-prd[idim]+cutghostmulti[icollection][idim], - subhi[idim]); + MIN(sbox_multi[3+idim]-prd[idim]+cutghostmulti[icollection][idim],subhi[idim]); } else { if (i < noverlap1) sbox_multi[idim] = MAX(sbox_multi[idim]-cutghostmulti[icollection][idim],sublo[idim]); else sbox_multi[idim] = - MAX(sbox_multi[idim]+prd[idim]-cutghostmulti[icollection][idim], - sublo[idim]); + MAX(sbox_multi[idim]+prd[idim]-cutghostmulti[icollection][idim],sublo[idim]); sbox_multi[3+idim] = subhi[idim]; } @@ -589,16 +587,14 @@ void CommTiled::setup() MIN(sbox_multiold[3+idim]+cutghostmultiold[itype][idim],subhi[idim]); else sbox_multiold[3+idim] = - MIN(sbox_multiold[3+idim]-prd[idim]+cutghostmultiold[itype][idim], - subhi[idim]); + MIN(sbox_multiold[3+idim]-prd[idim]+cutghostmultiold[itype][idim],subhi[idim]); } else { if (i < noverlap1) sbox_multiold[idim] = MAX(sbox_multiold[idim]-cutghostmultiold[itype][idim],sublo[idim]); else sbox_multiold[idim] = - MAX(sbox_multiold[idim]+prd[idim]-cutghostmultiold[itype][idim], - sublo[idim]); + MAX(sbox_multiold[idim]+prd[idim]-cutghostmultiold[itype][idim],sublo[idim]); sbox_multiold[3+idim] = subhi[idim]; } @@ -748,8 +744,7 @@ void CommTiled::forward_comm(int /*dummy*/) } if (sendself[iswap]) { avec->pack_comm(sendnum[iswap][nsend],sendlist[iswap][nsend], - x[firstrecv[iswap][nrecv]],pbc_flag[iswap][nsend], - pbc[iswap][nsend]); + x[firstrecv[iswap][nrecv]],pbc_flag[iswap][nsend],pbc[iswap][nsend]); } if (recvother[iswap]) MPI_Waitall(nrecv,requests,MPI_STATUS_IGNORE); @@ -757,8 +752,7 @@ void CommTiled::forward_comm(int /*dummy*/) if (recvother[iswap]) { for (i = 0; i < nrecv; i++) MPI_Irecv(&buf_recv[size_forward*forward_recv_offset[iswap][i]], - size_forward_recv[iswap][i], - MPI_DOUBLE,recvproc[iswap][i],0,world,&requests[i]); + size_forward_recv[iswap][i],MPI_DOUBLE,recvproc[iswap][i],0,world,&requests[i]); } if (sendother[iswap]) { for (i = 0; i < nsend; i++) { @@ -770,15 +764,13 @@ void CommTiled::forward_comm(int /*dummy*/) if (sendself[iswap]) { avec->pack_comm_vel(sendnum[iswap][nsend],sendlist[iswap][nsend], buf_send,pbc_flag[iswap][nsend],pbc[iswap][nsend]); - avec->unpack_comm_vel(recvnum[iswap][nrecv],firstrecv[iswap][nrecv], - buf_send); + avec->unpack_comm_vel(recvnum[iswap][nrecv],firstrecv[iswap][nrecv],buf_send); } if (recvother[iswap]) { for (i = 0; i < nrecv; i++) { MPI_Waitany(nrecv,requests,&irecv,MPI_STATUS_IGNORE); avec->unpack_comm_vel(recvnum[iswap][irecv],firstrecv[iswap][irecv], - &buf_recv[size_forward* - forward_recv_offset[iswap][irecv]]); + &buf_recv[size_forward*forward_recv_offset[iswap][irecv]]); } } @@ -786,8 +778,7 @@ void CommTiled::forward_comm(int /*dummy*/) if (recvother[iswap]) { for (i = 0; i < nrecv; i++) MPI_Irecv(&buf_recv[size_forward*forward_recv_offset[iswap][i]], - size_forward_recv[iswap][i], - MPI_DOUBLE,recvproc[iswap][i],0,world,&requests[i]); + size_forward_recv[iswap][i],MPI_DOUBLE,recvproc[iswap][i],0,world,&requests[i]); } if (sendother[iswap]) { for (i = 0; i < nsend; i++) { @@ -799,15 +790,13 @@ void CommTiled::forward_comm(int /*dummy*/) if (sendself[iswap]) { avec->pack_comm(sendnum[iswap][nsend],sendlist[iswap][nsend], buf_send,pbc_flag[iswap][nsend],pbc[iswap][nsend]); - avec->unpack_comm(recvnum[iswap][nrecv],firstrecv[iswap][nrecv], - buf_send); + avec->unpack_comm(recvnum[iswap][nrecv],firstrecv[iswap][nrecv],buf_send); } if (recvother[iswap]) { for (i = 0; i < nrecv; i++) { MPI_Waitany(nrecv,requests,&irecv,MPI_STATUS_IGNORE); avec->unpack_comm(recvnum[iswap][irecv],firstrecv[iswap][irecv], - &buf_recv[size_forward* - forward_recv_offset[iswap][irecv]]); + &buf_recv[size_forward*forward_recv_offset[iswap][irecv]]); } } } @@ -840,8 +829,7 @@ void CommTiled::reverse_comm() if (sendother[iswap]) { for (i = 0; i < nsend; i++) { MPI_Irecv(&buf_recv[size_reverse*reverse_recv_offset[iswap][i]], - size_reverse_recv[iswap][i],MPI_DOUBLE, - sendproc[iswap][i],0,world,&requests[i]); + size_reverse_recv[iswap][i],MPI_DOUBLE,sendproc[iswap][i],0,world,&requests[i]); } } if (recvother[iswap]) { @@ -857,8 +845,7 @@ void CommTiled::reverse_comm() for (i = 0; i < nsend; i++) { MPI_Waitany(nsend,requests,&irecv,MPI_STATUS_IGNORE); avec->unpack_reverse(sendnum[iswap][irecv],sendlist[iswap][irecv], - &buf_recv[size_reverse* - reverse_recv_offset[iswap][irecv]]); + &buf_recv[size_reverse*reverse_recv_offset[iswap][irecv]]); } } @@ -866,28 +853,23 @@ void CommTiled::reverse_comm() if (sendother[iswap]) { for (i = 0; i < nsend; i++) MPI_Irecv(&buf_recv[size_reverse*reverse_recv_offset[iswap][i]], - size_reverse_recv[iswap][i],MPI_DOUBLE, - sendproc[iswap][i],0,world,&requests[i]); + size_reverse_recv[iswap][i],MPI_DOUBLE,sendproc[iswap][i],0,world,&requests[i]); } if (recvother[iswap]) { for (i = 0; i < nrecv; i++) { - n = avec->pack_reverse(recvnum[iswap][i],firstrecv[iswap][i], - buf_send); + n = avec->pack_reverse(recvnum[iswap][i],firstrecv[iswap][i],buf_send); MPI_Send(buf_send,n,MPI_DOUBLE,recvproc[iswap][i],0,world); } } if (sendself[iswap]) { - avec->pack_reverse(recvnum[iswap][nrecv],firstrecv[iswap][nrecv], - buf_send); - avec->unpack_reverse(sendnum[iswap][nsend],sendlist[iswap][nsend], - buf_send); + avec->pack_reverse(recvnum[iswap][nrecv],firstrecv[iswap][nrecv],buf_send); + avec->unpack_reverse(sendnum[iswap][nsend],sendlist[iswap][nsend],buf_send); } if (sendother[iswap]) { for (i = 0; i < nsend; i++) { MPI_Waitany(nsend,requests,&irecv,MPI_STATUS_IGNORE); avec->unpack_reverse(sendnum[iswap][irecv],sendlist[iswap][irecv], - &buf_recv[size_reverse* - reverse_recv_offset[iswap][irecv]]); + &buf_recv[size_reverse*reverse_recv_offset[iswap][irecv]]); } } } @@ -990,8 +972,7 @@ void CommTiled::exchange() if (!nexch) continue; for (m = 0; m < nexch; m++) - MPI_Irecv(&exchnum[dim][m],1,MPI_INT, - exchproc[dim][m],0,world,&requests[m]); + MPI_Irecv(&exchnum[dim][m],1,MPI_INT,exchproc[dim][m],0,world,&requests[m]); for (m = 0; m < nexch; m++) MPI_Send(&nsend,1,MPI_INT,exchproc[dim][m],0,world); MPI_Waitall(nexch,requests,MPI_STATUS_IGNORE); @@ -1002,8 +983,7 @@ void CommTiled::exchange() offset = 0; for (m = 0; m < nexch; m++) { - MPI_Irecv(&buf_recv[offset],exchnum[dim][m], - MPI_DOUBLE,exchproc[dim][m],0,world,&requests[m]); + MPI_Irecv(&buf_recv[offset],exchnum[dim][m],MPI_DOUBLE,exchproc[dim][m],0,world,&requests[m]); offset += exchnum[dim][m]; } for (m = 0; m < nexch; m++) @@ -1234,8 +1214,7 @@ void CommTiled::borders() if (recvother[iswap]) for (m = 0; m < nrecv; m++) - MPI_Irecv(&recvnum[iswap][m],1,MPI_INT, - recvproc[iswap][m],0,world,&requests[m]); + MPI_Irecv(&recvnum[iswap][m],1,MPI_INT,recvproc[iswap][m],0,world,&requests[m]); if (sendother[iswap]) for (m = 0; m < nsend; m++) MPI_Send(&sendnum[iswap][m],1,MPI_INT,sendproc[iswap][m],0,world); @@ -1295,17 +1274,14 @@ void CommTiled::borders() } if (sendself[iswap]) { avec->pack_border_vel(sendnum[iswap][nsend],sendlist[iswap][nsend], - buf_send,pbc_flag[iswap][nsend], - pbc[iswap][nsend]); - avec->unpack_border_vel(recvnum[iswap][nrecv],firstrecv[iswap][nrecv], - buf_send); + buf_send,pbc_flag[iswap][nsend],pbc[iswap][nsend]); + avec->unpack_border_vel(recvnum[iswap][nrecv],firstrecv[iswap][nrecv],buf_send); } if (recvother[iswap]) { for (i = 0; i < nrecv; i++) { MPI_Waitany(nrecv,requests,&m,MPI_STATUS_IGNORE); avec->unpack_border_vel(recvnum[iswap][m],firstrecv[iswap][m], - &buf_recv[size_border* - forward_recv_offset[iswap][m]]); + &buf_recv[size_border*forward_recv_offset[iswap][m]]); } } @@ -1326,15 +1302,13 @@ void CommTiled::borders() if (sendself[iswap]) { avec->pack_border(sendnum[iswap][nsend],sendlist[iswap][nsend], buf_send,pbc_flag[iswap][nsend],pbc[iswap][nsend]); - avec->unpack_border(recvnum[iswap][nrecv],firstrecv[iswap][nrecv], - buf_send); + avec->unpack_border(recvnum[iswap][nrecv],firstrecv[iswap][nrecv],buf_send); } if (recvother[iswap]) { for (i = 0; i < nrecv; i++) { MPI_Waitany(nrecv,requests,&m,MPI_STATUS_IGNORE); avec->unpack_border(recvnum[iswap][m],firstrecv[iswap][m], - &buf_recv[size_border* - forward_recv_offset[iswap][m]]); + &buf_recv[size_border*forward_recv_offset[iswap][m]]); } } } @@ -1352,10 +1326,8 @@ void CommTiled::borders() // For molecular systems we lose some bits for local atom indices due // to encoding of special pairs in neighbor lists. Check for overflows. - if ((atom->molecular != Atom::ATOMIC) - && ((atom->nlocal + atom->nghost) > NEIGHMASK)) - error->one(FLERR,"Per-processor number of atoms is too large for " - "molecular neighbor lists"); + if ((atom->molecular != Atom::ATOMIC) && ((atom->nlocal + atom->nghost) > NEIGHMASK)) + error->one(FLERR,"Per-processor number of atoms is too large for molecular neighbor lists"); // insure send/recv buffers are long enough for all forward & reverse comm // send buf is for one forward or reverse sends to one proc @@ -1389,8 +1361,7 @@ void CommTiled::forward_comm(Pair *pair) if (recvother[iswap]) { for (i = 0; i < nrecv; i++) MPI_Irecv(&buf_recv[nsize*forward_recv_offset[iswap][i]], - nsize*recvnum[iswap][i], - MPI_DOUBLE,recvproc[iswap][i],0,world,&requests[i]); + nsize*recvnum[iswap][i],MPI_DOUBLE,recvproc[iswap][i],0,world,&requests[i]); } if (sendother[iswap]) { @@ -1403,17 +1374,14 @@ void CommTiled::forward_comm(Pair *pair) if (sendself[iswap]) { pair->pack_forward_comm(sendnum[iswap][nsend],sendlist[iswap][nsend], - buf_send,pbc_flag[iswap][nsend], - pbc[iswap][nsend]); - pair->unpack_forward_comm(recvnum[iswap][nrecv],firstrecv[iswap][nrecv], - buf_send); + buf_send,pbc_flag[iswap][nsend],pbc[iswap][nsend]); + pair->unpack_forward_comm(recvnum[iswap][nrecv],firstrecv[iswap][nrecv],buf_send); } if (recvother[iswap]) { for (i = 0; i < nrecv; i++) { MPI_Waitany(nrecv,requests,&irecv,MPI_STATUS_IGNORE); pair->unpack_forward_comm(recvnum[iswap][irecv],firstrecv[iswap][irecv], - &buf_recv[nsize* - forward_recv_offset[iswap][irecv]]); + &buf_recv[nsize*forward_recv_offset[iswap][irecv]]); } } } @@ -1437,28 +1405,23 @@ void CommTiled::reverse_comm(Pair *pair) if (sendother[iswap]) { for (i = 0; i < nsend; i++) MPI_Irecv(&buf_recv[nsize*reverse_recv_offset[iswap][i]], - nsize*sendnum[iswap][i],MPI_DOUBLE, - sendproc[iswap][i],0,world,&requests[i]); + nsize*sendnum[iswap][i],MPI_DOUBLE,sendproc[iswap][i],0,world,&requests[i]); } if (recvother[iswap]) { for (i = 0; i < nrecv; i++) { - n = pair->pack_reverse_comm(recvnum[iswap][i],firstrecv[iswap][i], - buf_send); + n = pair->pack_reverse_comm(recvnum[iswap][i],firstrecv[iswap][i],buf_send); MPI_Send(buf_send,n,MPI_DOUBLE,recvproc[iswap][i],0,world); } } if (sendself[iswap]) { - pair->pack_reverse_comm(recvnum[iswap][nrecv],firstrecv[iswap][nrecv], - buf_send); - pair->unpack_reverse_comm(sendnum[iswap][nsend],sendlist[iswap][nsend], - buf_send); + pair->pack_reverse_comm(recvnum[iswap][nrecv],firstrecv[iswap][nrecv],buf_send); + pair->unpack_reverse_comm(sendnum[iswap][nsend],sendlist[iswap][nsend],buf_send); } if (sendother[iswap]) { for (i = 0; i < nsend; i++) { MPI_Waitany(nsend,requests,&irecv,MPI_STATUS_IGNORE); pair->unpack_reverse_comm(sendnum[iswap][irecv],sendlist[iswap][irecv], - &buf_recv[nsize* - reverse_recv_offset[iswap][irecv]]); + &buf_recv[nsize*reverse_recv_offset[iswap][irecv]]); } } } @@ -1482,8 +1445,7 @@ void CommTiled::forward_comm(Bond *bond) if (recvother[iswap]) { for (i = 0; i < nrecv; i++) MPI_Irecv(&buf_recv[nsize*forward_recv_offset[iswap][i]], - nsize*recvnum[iswap][i], - MPI_DOUBLE,recvproc[iswap][i],0,world,&requests[i]); + nsize*recvnum[iswap][i],MPI_DOUBLE,recvproc[iswap][i],0,world,&requests[i]); } if (sendother[iswap]) { @@ -1496,17 +1458,14 @@ void CommTiled::forward_comm(Bond *bond) if (sendself[iswap]) { bond->pack_forward_comm(sendnum[iswap][nsend],sendlist[iswap][nsend], - buf_send,pbc_flag[iswap][nsend], - pbc[iswap][nsend]); - bond->unpack_forward_comm(recvnum[iswap][nrecv],firstrecv[iswap][nrecv], - buf_send); + buf_send,pbc_flag[iswap][nsend],pbc[iswap][nsend]); + bond->unpack_forward_comm(recvnum[iswap][nrecv],firstrecv[iswap][nrecv],buf_send); } if (recvother[iswap]) { for (i = 0; i < nrecv; i++) { MPI_Waitany(nrecv,requests,&irecv,MPI_STATUS_IGNORE); bond->unpack_forward_comm(recvnum[iswap][irecv],firstrecv[iswap][irecv], - &buf_recv[nsize* - forward_recv_offset[iswap][irecv]]); + &buf_recv[nsize*forward_recv_offset[iswap][irecv]]); } } } @@ -1530,28 +1489,23 @@ void CommTiled::reverse_comm(Bond *bond) if (sendother[iswap]) { for (i = 0; i < nsend; i++) MPI_Irecv(&buf_recv[nsize*reverse_recv_offset[iswap][i]], - nsize*sendnum[iswap][i],MPI_DOUBLE, - sendproc[iswap][i],0,world,&requests[i]); + nsize*sendnum[iswap][i],MPI_DOUBLE,sendproc[iswap][i],0,world,&requests[i]); } if (recvother[iswap]) { for (i = 0; i < nrecv; i++) { - n = bond->pack_reverse_comm(recvnum[iswap][i],firstrecv[iswap][i], - buf_send); + n = bond->pack_reverse_comm(recvnum[iswap][i],firstrecv[iswap][i],buf_send); MPI_Send(buf_send,n,MPI_DOUBLE,recvproc[iswap][i],0,world); } } if (sendself[iswap]) { - bond->pack_reverse_comm(recvnum[iswap][nrecv],firstrecv[iswap][nrecv], - buf_send); - bond->unpack_reverse_comm(sendnum[iswap][nsend],sendlist[iswap][nsend], - buf_send); + bond->pack_reverse_comm(recvnum[iswap][nrecv],firstrecv[iswap][nrecv],buf_send); + bond->unpack_reverse_comm(sendnum[iswap][nsend],sendlist[iswap][nsend],buf_send); } if (sendother[iswap]) { for (i = 0; i < nsend; i++) { MPI_Waitany(nsend,requests,&irecv,MPI_STATUS_IGNORE); bond->unpack_reverse_comm(sendnum[iswap][irecv],sendlist[iswap][irecv], - &buf_recv[nsize* - reverse_recv_offset[iswap][irecv]]); + &buf_recv[nsize*reverse_recv_offset[iswap][irecv]]); } } } @@ -1580,8 +1534,7 @@ void CommTiled::forward_comm(Fix *fix, int size) if (recvother[iswap]) { for (i = 0; i < nrecv; i++) MPI_Irecv(&buf_recv[nsize*forward_recv_offset[iswap][i]], - nsize*recvnum[iswap][i], - MPI_DOUBLE,recvproc[iswap][i],0,world,&requests[i]); + nsize*recvnum[iswap][i],MPI_DOUBLE,recvproc[iswap][i],0,world,&requests[i]); } if (sendother[iswap]) { for (i = 0; i < nsend; i++) { @@ -1592,17 +1545,14 @@ void CommTiled::forward_comm(Fix *fix, int size) } if (sendself[iswap]) { fix->pack_forward_comm(sendnum[iswap][nsend],sendlist[iswap][nsend], - buf_send,pbc_flag[iswap][nsend], - pbc[iswap][nsend]); - fix->unpack_forward_comm(recvnum[iswap][nrecv],firstrecv[iswap][nrecv], - buf_send); + buf_send,pbc_flag[iswap][nsend],pbc[iswap][nsend]); + fix->unpack_forward_comm(recvnum[iswap][nrecv],firstrecv[iswap][nrecv],buf_send); } if (recvother[iswap]) { for (i = 0; i < nrecv; i++) { MPI_Waitany(nrecv,requests,&irecv,MPI_STATUS_IGNORE); fix->unpack_forward_comm(recvnum[iswap][irecv],firstrecv[iswap][irecv], - &buf_recv[nsize* - forward_recv_offset[iswap][irecv]]); + &buf_recv[nsize*forward_recv_offset[iswap][irecv]]); } } } @@ -1631,28 +1581,23 @@ void CommTiled::reverse_comm(Fix *fix, int size) if (sendother[iswap]) { for (i = 0; i < nsend; i++) MPI_Irecv(&buf_recv[nsize*reverse_recv_offset[iswap][i]], - nsize*sendnum[iswap][i],MPI_DOUBLE, - sendproc[iswap][i],0,world,&requests[i]); + nsize*sendnum[iswap][i],MPI_DOUBLE,sendproc[iswap][i],0,world,&requests[i]); } if (recvother[iswap]) { for (i = 0; i < nrecv; i++) { - n = fix->pack_reverse_comm(recvnum[iswap][i],firstrecv[iswap][i], - buf_send); + n = fix->pack_reverse_comm(recvnum[iswap][i],firstrecv[iswap][i],buf_send); MPI_Send(buf_send,n,MPI_DOUBLE,recvproc[iswap][i],0,world); } } if (sendself[iswap]) { - fix->pack_reverse_comm(recvnum[iswap][nrecv],firstrecv[iswap][nrecv], - buf_send); - fix->unpack_reverse_comm(sendnum[iswap][nsend],sendlist[iswap][nsend], - buf_send); + fix->pack_reverse_comm(recvnum[iswap][nrecv],firstrecv[iswap][nrecv],buf_send); + fix->unpack_reverse_comm(sendnum[iswap][nsend],sendlist[iswap][nsend],buf_send); } if (sendother[iswap]) { for (i = 0; i < nsend; i++) { MPI_Waitany(nsend,requests,&irecv,MPI_STATUS_IGNORE); fix->unpack_reverse_comm(sendnum[iswap][irecv],sendlist[iswap][irecv], - &buf_recv[nsize* - reverse_recv_offset[iswap][irecv]]); + &buf_recv[nsize*reverse_recv_offset[iswap][irecv]]); } } } @@ -1688,31 +1633,26 @@ void CommTiled::forward_comm(Compute *compute) if (recvother[iswap]) { for (i = 0; i < nrecv; i++) MPI_Irecv(&buf_recv[nsize*forward_recv_offset[iswap][i]], - nsize*recvnum[iswap][i], - MPI_DOUBLE,recvproc[iswap][i],0,world,&requests[i]); + nsize*recvnum[iswap][i],MPI_DOUBLE,recvproc[iswap][i],0,world,&requests[i]); } if (sendother[iswap]) { for (i = 0; i < nsend; i++) { n = compute->pack_forward_comm(sendnum[iswap][i],sendlist[iswap][i], - buf_send,pbc_flag[iswap][i], - pbc[iswap][i]); + buf_send,pbc_flag[iswap][i],pbc[iswap][i]); MPI_Send(buf_send,n,MPI_DOUBLE,sendproc[iswap][i],0,world); } } if (sendself[iswap]) { compute->pack_forward_comm(sendnum[iswap][nsend],sendlist[iswap][nsend], - buf_send,pbc_flag[iswap][nsend], - pbc[iswap][nsend]); - compute->unpack_forward_comm(recvnum[iswap][nrecv], - firstrecv[iswap][nrecv],buf_send); + buf_send,pbc_flag[iswap][nsend],pbc[iswap][nsend]); + compute->unpack_forward_comm(recvnum[iswap][nrecv],firstrecv[iswap][nrecv],buf_send); } if (recvother[iswap]) { for (i = 0; i < nrecv; i++) { MPI_Waitany(nrecv,requests,&irecv,MPI_STATUS_IGNORE); compute-> unpack_forward_comm(recvnum[iswap][irecv],firstrecv[iswap][irecv], - &buf_recv[nsize* - forward_recv_offset[iswap][irecv]]); + &buf_recv[nsize*forward_recv_offset[iswap][irecv]]); } } } @@ -1736,29 +1676,24 @@ void CommTiled::reverse_comm(Compute *compute) if (sendother[iswap]) { for (i = 0; i < nsend; i++) MPI_Irecv(&buf_recv[nsize*reverse_recv_offset[iswap][i]], - nsize*sendnum[iswap][i],MPI_DOUBLE, - sendproc[iswap][i],0,world,&requests[i]); + nsize*sendnum[iswap][i],MPI_DOUBLE,sendproc[iswap][i],0,world,&requests[i]); } if (recvother[iswap]) { for (i = 0; i < nrecv; i++) { - n = compute->pack_reverse_comm(recvnum[iswap][i],firstrecv[iswap][i], - buf_send); + n = compute->pack_reverse_comm(recvnum[iswap][i],firstrecv[iswap][i],buf_send); MPI_Send(buf_send,n,MPI_DOUBLE,recvproc[iswap][i],0,world); } } if (sendself[iswap]) { - compute->pack_reverse_comm(recvnum[iswap][nrecv],firstrecv[iswap][nrecv], - buf_send); - compute->unpack_reverse_comm(sendnum[iswap][nsend],sendlist[iswap][nsend], - buf_send); + compute->pack_reverse_comm(recvnum[iswap][nrecv],firstrecv[iswap][nrecv],buf_send); + compute->unpack_reverse_comm(sendnum[iswap][nsend],sendlist[iswap][nsend],buf_send); } if (sendother[iswap]) { for (i = 0; i < nsend; i++) { MPI_Waitany(nsend,requests,&irecv,MPI_STATUS_IGNORE); compute-> unpack_reverse_comm(sendnum[iswap][irecv],sendlist[iswap][irecv], - &buf_recv[nsize* - reverse_recv_offset[iswap][irecv]]); + &buf_recv[nsize*reverse_recv_offset[iswap][irecv]]); } } } @@ -1782,21 +1717,18 @@ void CommTiled::forward_comm(Dump *dump) if (recvother[iswap]) { for (i = 0; i < nrecv; i++) MPI_Irecv(&buf_recv[nsize*forward_recv_offset[iswap][i]], - nsize*recvnum[iswap][i], - MPI_DOUBLE,recvproc[iswap][i],0,world,&requests[i]); + nsize*recvnum[iswap][i],MPI_DOUBLE,recvproc[iswap][i],0,world,&requests[i]); } if (sendother[iswap]) { for (i = 0; i < nsend; i++) { n = dump->pack_forward_comm(sendnum[iswap][i],sendlist[iswap][i], - buf_send,pbc_flag[iswap][i], - pbc[iswap][i]); + buf_send,pbc_flag[iswap][i],pbc[iswap][i]); MPI_Send(buf_send,n,MPI_DOUBLE,sendproc[iswap][i],0,world); } } if (sendself[iswap]) { dump->pack_forward_comm(sendnum[iswap][nsend],sendlist[iswap][nsend], - buf_send,pbc_flag[iswap][nsend], - pbc[iswap][nsend]); + buf_send,pbc_flag[iswap][nsend],pbc[iswap][nsend]); dump->unpack_forward_comm(recvnum[iswap][nrecv], firstrecv[iswap][nrecv],buf_send); } @@ -1804,8 +1736,7 @@ void CommTiled::forward_comm(Dump *dump) for (i = 0; i < nrecv; i++) { MPI_Waitany(nrecv,requests,&irecv,MPI_STATUS_IGNORE); dump->unpack_forward_comm(recvnum[iswap][irecv],firstrecv[iswap][irecv], - &buf_recv[nsize* - forward_recv_offset[iswap][irecv]]); + &buf_recv[nsize*forward_recv_offset[iswap][irecv]]); } } } @@ -1829,28 +1760,23 @@ void CommTiled::reverse_comm(Dump *dump) if (sendother[iswap]) { for (i = 0; i < nsend; i++) MPI_Irecv(&buf_recv[nsize*reverse_recv_offset[iswap][i]], - nsize*sendnum[iswap][i],MPI_DOUBLE, - sendproc[iswap][i],0,world,&requests[i]); + nsize*sendnum[iswap][i],MPI_DOUBLE,sendproc[iswap][i],0,world,&requests[i]); } if (recvother[iswap]) { for (i = 0; i < nrecv; i++) { - n = dump->pack_reverse_comm(recvnum[iswap][i],firstrecv[iswap][i], - buf_send); + n = dump->pack_reverse_comm(recvnum[iswap][i],firstrecv[iswap][i],buf_send); MPI_Send(buf_send,n,MPI_DOUBLE,recvproc[iswap][i],0,world); } } if (sendself[iswap]) { - dump->pack_reverse_comm(recvnum[iswap][nrecv],firstrecv[iswap][nrecv], - buf_send); - dump->unpack_reverse_comm(sendnum[iswap][nsend],sendlist[iswap][nsend], - buf_send); + dump->pack_reverse_comm(recvnum[iswap][nrecv],firstrecv[iswap][nrecv],buf_send); + dump->unpack_reverse_comm(sendnum[iswap][nsend],sendlist[iswap][nsend],buf_send); } if (sendother[iswap]) { for (i = 0; i < nsend; i++) { MPI_Waitany(nsend,requests,&irecv,MPI_STATUS_IGNORE); dump->unpack_reverse_comm(sendnum[iswap][irecv],sendlist[iswap][irecv], - &buf_recv[nsize* - reverse_recv_offset[iswap][irecv]]); + &buf_recv[nsize*reverse_recv_offset[iswap][irecv]]); } } } @@ -1882,8 +1808,7 @@ void CommTiled::forward_comm_array(int nsize, double **array) if (recvother[iswap]) { for (i = 0; i < nrecv; i++) MPI_Irecv(&buf_recv[nsize*forward_recv_offset[iswap][i]], - nsize*recvnum[iswap][i], - MPI_DOUBLE,recvproc[iswap][i],0,world,&requests[i]); + nsize*recvnum[iswap][i],MPI_DOUBLE,recvproc[iswap][i],0,world,&requests[i]); } if (sendother[iswap]) { for (i = 0; i < nsend; i++) { @@ -1893,8 +1818,7 @@ void CommTiled::forward_comm_array(int nsize, double **array) for (k = 0; k < nsize; k++) buf_send[m++] = array[j][k]; } - MPI_Send(buf_send,nsize*sendnum[iswap][i], - MPI_DOUBLE,sendproc[iswap][i],0,world); + MPI_Send(buf_send,nsize*sendnum[iswap][i],MPI_DOUBLE,sendproc[iswap][i],0,world); } } if (sendself[iswap]) { @@ -2013,8 +1937,7 @@ void CommTiled::box_drop_tiled(int /*idim*/, double *lo, double *hi, int &indexm box_drop_tiled_recurse(lo,hi,0,nprocs-1,indexme); } -void CommTiled::box_drop_tiled_recurse(double *lo, double *hi, - int proclower, int procupper, +void CommTiled::box_drop_tiled_recurse(double *lo, double *hi, int proclower, int procupper, int &indexme) { // end recursion when partition is a single proc @@ -2052,8 +1975,7 @@ void CommTiled::box_drop_tiled_recurse(double *lo, double *hi, return other box owned by proc as lo/hi corner pts ------------------------------------------------------------------------- */ -void CommTiled::box_other_brick(int idim, int idir, - int proc, double *lo, double *hi) +void CommTiled::box_other_brick(int idim, int idir, int proc, double *lo, double *hi) { lo[0] = sublo[0]; lo[1] = sublo[1]; lo[2] = sublo[2]; hi[0] = subhi[0]; hi[1] = subhi[1]; hi[2] = subhi[2]; @@ -2100,8 +2022,7 @@ void CommTiled::box_other_brick(int idim, int idir, return other box owned by proc as lo/hi corner pts ------------------------------------------------------------------------- */ -void CommTiled::box_other_tiled(int /*idim*/, int /*idir*/, - int proc, double *lo, double *hi) +void CommTiled::box_other_tiled(int /*idim*/, int /*idir*/, int proc, double *lo, double *hi) { double (*split)[2] = rcbinfo[proc].mysplit; @@ -2230,8 +2151,7 @@ int CommTiled::point_drop_tiled(int idim, double *x) recursive point drop thru RCB tree ------------------------------------------------------------------------- */ -int CommTiled::point_drop_tiled_recurse(double *x, - int proclower, int procupper) +int CommTiled::point_drop_tiled_recurse(double *x, int proclower, int procupper) { // end recursion when partition is a single proc // return proc @@ -2289,8 +2209,7 @@ void CommTiled::coord2proc_setup() memcpy(&rcbone.mysplit[0][0],&mysplit[0][0],6*sizeof(double)); rcbone.cutfrac = rcbcutfrac; rcbone.dim = rcbcutdim; - MPI_Allgather(&rcbone,sizeof(RCBinfo),MPI_CHAR, - rcbinfo,sizeof(RCBinfo),MPI_CHAR,world); + MPI_Allgather(&rcbone,sizeof(RCBinfo),MPI_CHAR,rcbinfo,sizeof(RCBinfo),MPI_CHAR,world); } /* ---------------------------------------------------------------------- diff --git a/src/delete_bonds.cpp b/src/delete_bonds.cpp index ca933f3c97..2dcbd4af56 100644 --- a/src/delete_bonds.cpp +++ b/src/delete_bonds.cpp @@ -339,8 +339,8 @@ void DeleteBonds::command(int narg, char **arg) atom->bond_atom[i][m] = atom->bond_atom[i][n-1]; if (n_histories > 0) for (auto &ihistory: histories) { - ((FixBondHistory *) ihistory)->shift_history(i,m,n-1); - ((FixBondHistory *) ihistory)->delete_history(i,n-1); + dynamic_cast(ihistory)->shift_history(i,m,n-1); + dynamic_cast(ihistory)->delete_history(i,n-1); } atom->num_bond[i]--; } else m++; @@ -442,32 +442,28 @@ void DeleteBonds::command(int narg, char **arg) if (atom->avec->bonds_allow) { bigint nbonds = 0; for (i = 0; i < nlocal; i++) nbonds += atom->num_bond[i]; - MPI_Allreduce(&nbonds,&atom->nbonds,1,MPI_LMP_BIGINT, - MPI_SUM,world); + MPI_Allreduce(&nbonds,&atom->nbonds,1,MPI_LMP_BIGINT,MPI_SUM,world); if (force->newton_bond == 0) atom->nbonds /= 2; } if (atom->avec->angles_allow) { bigint nangles = 0; for (i = 0; i < nlocal; i++) nangles += atom->num_angle[i]; - MPI_Allreduce(&nangles,&atom->nangles,1,MPI_LMP_BIGINT, - MPI_SUM,world); + MPI_Allreduce(&nangles,&atom->nangles,1,MPI_LMP_BIGINT,MPI_SUM,world); if (force->newton_bond == 0) atom->nangles /= 3; } if (atom->avec->dihedrals_allow) { bigint ndihedrals = 0; for (i = 0; i < nlocal; i++) ndihedrals += atom->num_dihedral[i]; - MPI_Allreduce(&ndihedrals,&atom->ndihedrals, - 1,MPI_LMP_BIGINT,MPI_SUM,world); + MPI_Allreduce(&ndihedrals,&atom->ndihedrals,1,MPI_LMP_BIGINT,MPI_SUM,world); if (force->newton_bond == 0) atom->ndihedrals /= 4; } if (atom->avec->impropers_allow) { bigint nimpropers = 0; for (i = 0; i < nlocal; i++) nimpropers += atom->num_improper[i]; - MPI_Allreduce(&nimpropers,&atom->nimpropers, - 1,MPI_LMP_BIGINT,MPI_SUM,world); + MPI_Allreduce(&nimpropers,&atom->nimpropers,1,MPI_LMP_BIGINT,MPI_SUM,world); if (force->newton_bond == 0) atom->nimpropers /= 4; } @@ -546,21 +542,18 @@ void DeleteBonds::command(int narg, char **arg) } if (comm->me == 0) { + constexpr auto fmtstr = " {} total {}, {} turned on, {} turned off\n"; if (atom->avec->bonds_allow) - utils::logmesg(lmp," {} total bonds, {} turned on, {} turned off\n", - atom->nbonds,bond_on,bond_off); + utils::logmesg(lmp,fmtstr,atom->nbonds,"bonds",bond_on,bond_off); if (atom->avec->angles_allow) - utils::logmesg(lmp," {} total angles, {} turned on, {} turned off\n", - atom->nangles,angle_on,angle_off); + utils::logmesg(lmp,fmtstr,atom->nangles,"angles",angle_on,angle_off); if (atom->avec->dihedrals_allow) - utils::logmesg(lmp," {} total dihedrals, {} turned on, {} turned off\n", - atom->ndihedrals,dihedral_on,dihedral_off); + utils::logmesg(lmp,fmtstr,atom->ndihedrals,"dihedrals",dihedral_on,dihedral_off); if (atom->avec->impropers_allow) - utils::logmesg(lmp," {} total impropers, {} turned on, {} turned off\n", - atom->nimpropers,improper_on,improper_off); + utils::logmesg(lmp,fmtstr,atom->nimpropers,"impropers",improper_on,improper_off); } // re-compute special list if requested diff --git a/src/dump.h b/src/dump.h index 34e0677af8..c8712e5909 100644 --- a/src/dump.h +++ b/src/dump.h @@ -66,7 +66,6 @@ class Dump : protected Pointers { char *multiname; // filename with % converted to cluster ID MPI_Comm clustercomm; // MPI communicator within my cluster of procs - int header_flag; // 0 = item, 2 = xyz int flush_flag; // 0 if no flush, 1 if flush every dump int sort_flag; // 1 if sorted output int balance_flag; // 1 if load balanced output diff --git a/src/fix_bond_history.cpp b/src/fix_bond_history.cpp index 5d2c1b8072..67489e6402 100644 --- a/src/fix_bond_history.cpp +++ b/src/fix_bond_history.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -23,9 +22,7 @@ #include "neighbor.h" #include -#include #include -#include using namespace LAMMPS_NS; using namespace FixConst; @@ -36,15 +33,15 @@ using namespace FixConst; /* ---------------------------------------------------------------------- */ FixBondHistory::FixBondHistory(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg) + Fix(lmp, narg, arg), bondstore(nullptr), id_fix(nullptr), id_array(nullptr) + { - if (narg != 5) error->all(FLERR,"Illegal fix bond/history command"); - update_flag = utils::inumeric(FLERR,arg[3],false,lmp); - ndata = utils::inumeric(FLERR,arg[4],false,lmp); + if (narg != 5) error->all(FLERR, "Illegal fix bond/history command"); + update_flag = utils::inumeric(FLERR, arg[3], false, lmp); + ndata = utils::inumeric(FLERR, arg[4], false, lmp); nbond = atom->bond_per_atom; - if (nbond == 0) - error->all(FLERR, "Cannot store bond variables without any bonds"); + if (nbond == 0) error->all(FLERR, "Cannot store bond variables without any bonds"); stored_flag = false; restart_global = 1; @@ -55,12 +52,8 @@ FixBondHistory::FixBondHistory(LAMMPS *lmp, int narg, char **arg) : // Prevents sequential calls to pre_exchange() without post_neighbor() updated_bond_flag = 0; - bondstore = nullptr; maxbond = 0; allocate(); - - id_fix = nullptr; - id_array = nullptr; } /* ---------------------------------------------------------------------- */ @@ -68,8 +61,8 @@ FixBondHistory::FixBondHistory(LAMMPS *lmp, int narg, char **arg) : FixBondHistory::~FixBondHistory() { if (id_fix && modify->nfix) modify->delete_fix(id_fix); - delete [] id_fix; - delete [] id_array; + delete[] id_fix; + delete[] id_array; memory->destroy(bondstore); } @@ -92,10 +85,10 @@ void FixBondHistory::post_constructor() id_fix = utils::strdup(id + std::string("_FIX_PROP_ATOM")); id_array = utils::strdup(std::string("d2_") + id); - modify->add_fix(fmt::format("{} {} property/atom {} {}", - id_fix, group->names[igroup], id_array, nbond*ndata)); + modify->add_fix(fmt::format("{} {} property/atom {} {}", id_fix, group->names[igroup], id_array, + nbond * ndata)); int tmp1, tmp2; - index = atom->find_custom(&id_array[3],tmp1,tmp2); + index = atom->find_custom(&id_array[3], tmp1, tmp2); } /* ---------------------------------------------------------------------- */ @@ -103,7 +96,7 @@ void FixBondHistory::post_constructor() void FixBondHistory::update_atom_value(int i, int m, int idata, double value) { if (idata >= ndata || m > nbond) error->all(FLERR, "Index exceeded in fix bond history"); - atom->darray[index][i][m*ndata+idata] = value; + atom->darray[index][i][m * ndata + idata] = value; } /* ---------------------------------------------------------------------- */ @@ -111,7 +104,7 @@ void FixBondHistory::update_atom_value(int i, int m, int idata, double value) double FixBondHistory::get_atom_value(int i, int m, int idata) { if (idata >= ndata || m > nbond) error->all(FLERR, "Index exceeded in fix bond history"); - return atom->darray[index][i][m*ndata+idata]; + return atom->darray[index][i][m * ndata + idata]; } /* ---------------------------------------------------------------------- */ @@ -148,15 +141,13 @@ void FixBondHistory::pre_exchange() i2 = bondlist[n][1]; // skip bond if already broken - if (bondlist[n][2] <= 0) { - continue; - } + if (bondlist[n][2] <= 0) { continue; } if (i1 < nlocal) { for (m = 0; m < num_bond[i1]; m++) { if (bond_atom[i1][m] == tag[i2]) { for (idata = 0; idata < ndata; idata++) { - stored[i1][m*ndata+idata] = bondstore[n][idata]; + stored[i1][m * ndata + idata] = bondstore[n][idata]; } } } @@ -166,7 +157,7 @@ void FixBondHistory::pre_exchange() for (m = 0; m < num_bond[i2]; m++) { if (bond_atom[i2][m] == tag[i1]) { for (idata = 0; idata < ndata; idata++) { - stored[i2][m*ndata+idata] = bondstore[n][idata]; + stored[i2][m * ndata + idata] = bondstore[n][idata]; } } } @@ -181,9 +172,11 @@ void FixBondHistory::pre_exchange() void FixBondHistory::allocate() { //Ideally would just ask ntopo for maxbond, but protected - if (comm->nprocs == 1) maxbond = atom->nbonds; - else maxbond = static_cast (LB_FACTOR * atom->nbonds / comm->nprocs); - memory->create(bondstore,maxbond,ndata,"fix_bond_store:bondstore"); + if (comm->nprocs == 1) + maxbond = atom->nbonds; + else + maxbond = static_cast(LB_FACTOR * atom->nbonds / comm->nprocs); + memory->create(bondstore, maxbond, ndata, "fix_bond_store:bondstore"); } /* ---------------------------------------------------------------------- */ @@ -193,7 +186,7 @@ void FixBondHistory::setup_post_neighbor() //Grow array if number of bonds has increased while (neighbor->nbondlist >= maxbond) { maxbond += DELTA; - memory->grow(bondstore,maxbond,ndata,"fix_bond_store:bondstore"); + memory->grow(bondstore, maxbond, ndata, "fix_bond_store:bondstore"); } pre_exchange(); @@ -210,7 +203,7 @@ void FixBondHistory::post_neighbor() //Grow array if number of bonds has increased while (neighbor->nbondlist >= maxbond) { maxbond += DELTA; - memory->grow(bondstore,maxbond,ndata,"fix_bond_store:bondstore"); + memory->grow(bondstore, maxbond, ndata, "fix_bond_store:bondstore"); } int i1, i2, n, m, idata; @@ -228,25 +221,23 @@ void FixBondHistory::post_neighbor() i2 = bondlist[n][1]; // skip bond if already broken - if (bondlist[n][2] <= 0) { - continue; - } + if (bondlist[n][2] <= 0) { continue; } if (i1 < nlocal) { for (m = 0; m < num_bond[i1]; m++) { if (bond_atom[i1][m] == tag[i2]) { for (idata = 0; idata < ndata; idata++) { - bondstore[n][idata] = stored[i1][m*ndata+idata]; + bondstore[n][idata] = stored[i1][m * ndata + idata]; } } } } - if (i2 < nlocal){ + if (i2 < nlocal) { for (m = 0; m < num_bond[i2]; m++) { if (bond_atom[i2][m] == tag[i1]) { for (idata = 0; idata < ndata; idata++) { - bondstore[n][idata] = stored[i2][m*ndata+idata]; + bondstore[n][idata] = stored[i2][m * ndata + idata]; } } } @@ -273,8 +264,8 @@ void FixBondHistory::write_restart(FILE *fp) if (comm->me == 0) { int size = n * sizeof(double); - fwrite(&size,sizeof(int),1,fp); - fwrite(list,sizeof(double),n,fp); + fwrite(&size, sizeof(int), 1, fp); + fwrite(list, sizeof(double), n, fp); } } @@ -284,7 +275,7 @@ void FixBondHistory::restart(char *buf) { int n = 0; double *list = (double *) buf; - stored_flag = static_cast (list[n++]); + stored_flag = static_cast(list[n++]); } /* ---------------------------------------------------------------------- @@ -295,8 +286,7 @@ void FixBondHistory::set_arrays(int i) { double **stored = atom->darray[index]; for (int m = 0; m < nbond; m++) - for (int idata = 0; idata < ndata; idata++) - stored[i][m*ndata+idata] = 0.0; + for (int idata = 0; idata < ndata; idata++) stored[i][m * ndata + idata] = 0.0; } /* ---------------------------------------------------------------------- @@ -306,8 +296,7 @@ void FixBondHistory::set_arrays(int i) void FixBondHistory::delete_history(int i, int m) { double **stored = atom->darray[index]; - for (int idata = 0; idata < ndata; idata ++) - stored[i][m*ndata+idata] = 0.0; + for (int idata = 0; idata < ndata; idata++) stored[i][m * ndata + idata] = 0.0; } /* ---------------------------------------------------------------------- @@ -319,8 +308,8 @@ void FixBondHistory::shift_history(int i, int m, int k) if (m == k) return; double **stored = atom->darray[index]; - for (int idata = 0; idata < ndata; idata ++) - stored[i][m*ndata+idata] = stored[i][k*ndata+idata]; + for (int idata = 0; idata < ndata; idata++) + stored[i][m * ndata + idata] = stored[i][k * ndata + idata]; } /* ---------------------------------------------------------------------- @@ -334,16 +323,15 @@ void FixBondHistory::cache_history(int i, int m) // Order tags to create a unique key pair tagint max_tag = MAX(atom->tag[i], atom->bond_atom[i][m]); tagint min_tag = MIN(atom->tag[i], atom->bond_atom[i][m]); - std::pair key = std::make_pair(min_tag, max_tag); + auto key = std::make_pair(min_tag, max_tag); // Copy data to vector double **stored = atom->darray[index]; - std::vector data; - for (int idata = 0; idata < ndata; idata ++) - data.push_back(stored[i][m*ndata+idata]); + std::vector data; + for (int idata = 0; idata < ndata; idata++) data.push_back(stored[i][m * ndata + idata]); // Add data to cache - cached_histories.insert(std::make_pair(key,data)); + cached_histories.insert(std::make_pair(key, data)); } /* ---------------------------------------------------------------------- @@ -355,16 +343,15 @@ void FixBondHistory::check_cache(int i, int m) // Order tags to create a unique key pair tagint max_tag = MAX(atom->tag[i], atom->bond_atom[i][m]); tagint min_tag = MIN(atom->tag[i], atom->bond_atom[i][m]); - std::pair key = std::make_pair(min_tag, max_tag); + auto key = std::make_pair(min_tag, max_tag); // Check if it exists, if so, copy data double **stored = atom->darray[index]; - std::vector data; + std::vector data; auto pos = cached_histories.find(key); if (pos != cached_histories.end()) { data = pos->second; - for (int idata = 0; idata < ndata; idata ++) - stored[i][m*ndata+idata] = data[idata]; + for (int idata = 0; idata < ndata; idata++) stored[i][m * ndata + idata] = data[idata]; } } diff --git a/src/fix_bond_history.h b/src/fix_bond_history.h index 2bef039b40..511bc57bd2 100644 --- a/src/fix_bond_history.h +++ b/src/fix_bond_history.h @@ -13,7 +13,7 @@ #ifdef FIX_CLASS // clang-format off -FixStyle(BOND_HISTORY,FixBondHistory) +FixStyle(BOND_HISTORY,FixBondHistory); // clang-format on #else @@ -30,7 +30,6 @@ namespace LAMMPS_NS { class FixBondHistory : public Fix { public: - FixBondHistory(class LAMMPS *, int, char **); ~FixBondHistory() override; int setmask() override; @@ -48,25 +47,24 @@ class FixBondHistory : public Fix { double get_atom_value(int, int, int); // methods to reorder/delete elements of atom->bond_atom - void delete_history(int,int); - void shift_history(int,int,int); - void cache_history(int,int); - void check_cache(int,int); + void delete_history(int, int); + void shift_history(int, int, int); + void cache_history(int, int); + void check_cache(int, int); void clear_cache(); // if data is temporarily stored while the bond_atom array // is being reordered, use map of vectors with pairs for keys // to enable quick look up - std::map, std::vector > cached_histories; + std::map, std::vector> cached_histories; double **bondstore; int stored_flag; protected: - void allocate(); - int update_flag; //Flag whether history values can evolve + int update_flag; //Flag whether history values can evolve int updated_bond_flag; int nbond, maxbond, ndata; int index; @@ -93,7 +91,4 @@ E: Cannot store bond variables without any bonds Atoms must have a nonzero number of bonds to store data - - */ - diff --git a/src/fix_property_atom.cpp b/src/fix_property_atom.cpp index 9d9f8bad5e..7be3d8f343 100644 --- a/src/fix_property_atom.cpp +++ b/src/fix_property_atom.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -26,22 +25,21 @@ using namespace LAMMPS_NS; using namespace FixConst; -enum{MOLECULE,CHARGE,RMASS,IVEC,DVEC,IARRAY,DARRAY}; +enum { MOLECULE, CHARGE, RMASS, IVEC, DVEC, IARRAY, DARRAY }; /* ---------------------------------------------------------------------- */ FixPropertyAtom::FixPropertyAtom(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg), - nvalue(0), styles(nullptr), index(nullptr), astyle(nullptr) + Fix(lmp, narg, arg), nvalue(0), styles(nullptr), index(nullptr), astyle(nullptr) { - if (narg < 4) error->all(FLERR,"Illegal fix property/atom command"); + if (narg < 4) error->all(FLERR, "Illegal fix property/atom command"); restart_peratom = 1; wd_section = 1; create_attribute = 1; int iarg = 3; - nvalue = narg-iarg; + nvalue = narg - iarg; styles = new int[nvalue]; cols = new int[nvalue]; index = new int[nvalue]; @@ -54,33 +52,30 @@ FixPropertyAtom::FixPropertyAtom(LAMMPS *lmp, int narg, char **arg) : values_peratom = 0; while (iarg < narg) { - if (strcmp(arg[iarg],"mol") == 0) { + if (strcmp(arg[iarg], "mol") == 0) { if (atom->molecule_flag) - error->all(FLERR,"Fix property/atom mol when atom_style already has molecule attribute"); - if (molecule_flag) - error->all(FLERR,"Fix property/atom cannot specify mol twice"); + error->all(FLERR, "Fix property/atom mol when atom_style already has molecule attribute"); + if (molecule_flag) error->all(FLERR, "Fix property/atom cannot specify mol twice"); styles[nvalue] = MOLECULE; cols[nvalue] = 0; atom->molecule_flag = molecule_flag = 1; values_peratom++; nvalue++; iarg++; - } else if (strcmp(arg[iarg],"q") == 0) { + } else if (strcmp(arg[iarg], "q") == 0) { if (atom->q_flag) - error->all(FLERR,"Fix property/atom q when atom_style already has charge attribute"); - if (q_flag) - error->all(FLERR,"Fix property/atom cannot specify q twice"); + error->all(FLERR, "Fix property/atom q when atom_style already has charge attribute"); + if (q_flag) error->all(FLERR, "Fix property/atom cannot specify q twice"); styles[nvalue] = CHARGE; cols[nvalue] = 0; atom->q_flag = q_flag = 1; values_peratom++; nvalue++; iarg++; - } else if (strcmp(arg[iarg],"rmass") == 0) { + } else if (strcmp(arg[iarg], "rmass") == 0) { if (atom->rmass_flag) - error->all(FLERR,"Fix property/atom rmass when atom_style already has rmass attribute"); - if (rmass_flag) - error->all(FLERR,"Fix property/atom cannot specify rmass twice"); + error->all(FLERR, "Fix property/atom rmass when atom_style already has rmass attribute"); + if (rmass_flag) error->all(FLERR, "Fix property/atom cannot specify rmass twice"); styles[nvalue] = RMASS; cols[nvalue] = 0; atom->rmass_flag = rmass_flag = 1; @@ -88,51 +83,49 @@ FixPropertyAtom::FixPropertyAtom(LAMMPS *lmp, int narg, char **arg) : nvalue++; iarg++; - // custom atom vector + // custom atom vector - } else if (utils::strmatch(arg[iarg],"^i_")) { + } else if (utils::strmatch(arg[iarg], "^i_")) { styles[nvalue] = IVEC; - int flag,ncols; - index[nvalue] = atom->find_custom(&arg[iarg][2],flag,ncols); - if (index[nvalue] >= 0) - error->all(FLERR,"Fix property/atom vector name already exists"); + int flag, ncols; + index[nvalue] = atom->find_custom(&arg[iarg][2], flag, ncols); + if (index[nvalue] >= 0) error->all(FLERR, "Fix property/atom vector name already exists"); if (ReadData::is_data_section(id)) - error->all(FLERR,"Fix property/atom fix ID must not be a data file section name"); - index[nvalue] = atom->add_custom(&arg[iarg][2],0,0); + error->all(FLERR, "Fix property/atom fix ID must not be a data file section name"); + index[nvalue] = atom->add_custom(&arg[iarg][2], 0, 0); cols[nvalue] = 0; values_peratom++; nvalue++; iarg++; - } else if (utils::strmatch(arg[iarg],"^d_")) { + } else if (utils::strmatch(arg[iarg], "^d_")) { styles[nvalue] = DVEC; - int flag,ncols; - index[nvalue] = atom->find_custom(&arg[iarg][2],flag,ncols); - if (index[nvalue] >= 0) - error->all(FLERR,"Fix property/atom vector name already exists"); + int flag, ncols; + index[nvalue] = atom->find_custom(&arg[iarg][2], flag, ncols); + if (index[nvalue] >= 0) error->all(FLERR, "Fix property/atom vector name already exists"); if (ReadData::is_data_section(id)) - error->all(FLERR,"Fix property/atom fix ID must not be a data file section name"); - index[nvalue] = atom->add_custom(&arg[iarg][2],1,0); + error->all(FLERR, "Fix property/atom fix ID must not be a data file section name"); + index[nvalue] = atom->add_custom(&arg[iarg][2], 1, 0); cols[nvalue] = 0; values_peratom++; nvalue++; iarg++; - // custom atom array + // custom atom array - } else if (utils::strmatch(arg[iarg],"^[id]2_")) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix property/atom command"); + } else if (utils::strmatch(arg[iarg], "^[id]2_")) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal fix property/atom command"); - int which,flag,ncols; - which = atom->find_custom(&arg[iarg][3],flag,ncols); + int which, flag, ncols; + which = atom->find_custom(&arg[iarg][3], flag, ncols); if (which >= 0) - error->all(FLERR,"Fix property/atom array name {} already exists", &arg[iarg][3]); + error->all(FLERR, "Fix property/atom array name {} already exists", &arg[iarg][3]); if (ReadData::is_data_section(id)) - error->all(FLERR,"Fix property/atom fix ID must not be a data file section name"); + error->all(FLERR, "Fix property/atom fix ID must not be a data file section name"); - ncols = utils::inumeric(FLERR,arg[iarg+1],true,lmp); + ncols = utils::inumeric(FLERR, arg[iarg + 1], true, lmp); if (ncols < 1) - error->all(FLERR,"Invalid array columns number {} in fix property/atom", ncols); + error->all(FLERR, "Invalid array columns number {} in fix property/atom", ncols); if (arg[iarg][0] == 'i') { which = 0; @@ -141,26 +134,28 @@ FixPropertyAtom::FixPropertyAtom(LAMMPS *lmp, int narg, char **arg) : which = 1; styles[nvalue] = DARRAY; } - index[nvalue] = atom->add_custom(&arg[iarg][3],which,ncols); + index[nvalue] = atom->add_custom(&arg[iarg][3], which, ncols); cols[nvalue] = ncols; values_peratom += ncols; nvalue++; iarg += 2; - // no match + // no match - } else break; + } else + break; } // optional args border = 0; while (iarg < narg) { - if (strcmp(arg[iarg],"ghost") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix property/atom command"); - border = utils::logical(FLERR,arg[iarg+1],false,lmp); + if (strcmp(arg[iarg], "ghost") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal fix property/atom command"); + border = utils::logical(FLERR, arg[iarg + 1], false, lmp); iarg += 2; - } else error->all(FLERR,"Illegal fix property/atom command"); + } else + error->all(FLERR, "Illegal fix property/atom command"); } if (border) comm_border = values_peratom; @@ -170,12 +165,9 @@ FixPropertyAtom::FixPropertyAtom(LAMMPS *lmp, int narg, char **arg) : if (border == 0) { int flag = 0; for (int i = 0; i < nvalue; i++) - if (styles[i] == MOLECULE - || styles[i] == CHARGE - || styles[i] == RMASS) flag = 1; + if (styles[i] == MOLECULE || styles[i] == CHARGE || styles[i] == RMASS) flag = 1; if (flag && comm->me == 0) - error->warning(FLERR,"Fix property/atom mol or charge or rmass " - "w/out ghost communication"); + error->warning(FLERR, "Fix property/atom mol or charge or rmass w/out ghost communication"); } // store current atom style @@ -198,9 +190,9 @@ FixPropertyAtom::~FixPropertyAtom() { // unregister callbacks to this fix from Atom class - atom->delete_callback(id,Atom::GROW); - atom->delete_callback(id,Atom::RESTART); - if (border) atom->delete_callback(id,Atom::BORDER); + atom->delete_callback(id, Atom::GROW); + atom->delete_callback(id, Atom::RESTART); + if (border) atom->delete_callback(id, Atom::BORDER); // deallocate per-atom vectors in Atom class // set ptrs to a null pointer, so they no longer exist for Atom class @@ -219,20 +211,20 @@ FixPropertyAtom::~FixPropertyAtom() memory->destroy(atom->rmass); atom->rmass = nullptr; } else if (styles[nv] == IVEC) { - atom->remove_custom(index[nv],0,cols[nv]); + atom->remove_custom(index[nv], 0, cols[nv]); } else if (styles[nv] == DVEC) { - atom->remove_custom(index[nv],1,cols[nv]); + atom->remove_custom(index[nv], 1, cols[nv]); } else if (styles[nv] == IARRAY) { - atom->remove_custom(index[nv],0,cols[nv]); + atom->remove_custom(index[nv], 0, cols[nv]); } else if (styles[nv] == DARRAY) { - atom->remove_custom(index[nv],1,cols[nv]); + atom->remove_custom(index[nv], 1, cols[nv]); } } - delete [] styles; - delete [] cols; - delete [] index; - delete [] astyle; + delete[] styles; + delete[] cols; + delete[] index; + delete[] astyle; } /* ---------------------------------------------------------------------- */ @@ -250,8 +242,8 @@ void FixPropertyAtom::init() // error if atom style has changed since fix was defined // don't allow this because user could change to style that defines molecule,q - if (strcmp(astyle,atom->atom_style) != 0) - error->all(FLERR,"Atom style was redefined after using fix property/atom"); + if (strcmp(astyle, atom->atom_style) != 0) + error->all(FLERR, "Atom style was redefined after using fix property/atom"); } /* ---------------------------------------------------------------------- @@ -261,7 +253,7 @@ void FixPropertyAtom::init() void FixPropertyAtom::read_data_section(char *keyword, int n, char *buf, tagint id_offset) { - int j,k,m,ncol; + int j, k, m, ncol; tagint itag; char *next; @@ -279,18 +271,18 @@ void FixPropertyAtom::read_data_section(char *keyword, int n, char *buf, tagint tagint map_tag_max = atom->map_tag_max; for (int i = 0; i < n; i++) { - next = strchr(buf,'\n'); + next = strchr(buf, '\n'); *next = '\0'; try { ValueTokenizer values(buf); - if ((int)values.count() != values_peratom+1) - error->all(FLERR,"Incorrect format in {} section of data file: {}" - " expected {} and got {}",keyword,buf,values_peratom+1,values.count()); + if ((int) values.count() != values_peratom + 1) + error->all(FLERR, "Incorrect format in {} section of data file: {} expected {} and got {}", + keyword, buf, values_peratom + 1, values.count()); itag = values.next_tagint() + id_offset; if (itag <= 0 || itag > map_tag_max) - error->all(FLERR,"Invalid atom ID {} in {} section of data file",itag, keyword); + error->all(FLERR, "Invalid atom ID {} in {} section of data file", itag, keyword); // assign words in line to per-atom vectors @@ -308,17 +300,16 @@ void FixPropertyAtom::read_data_section(char *keyword, int n, char *buf, tagint atom->dvector[index[j]][m] = values.next_double(); } else if (styles[j] == IARRAY) { ncol = cols[j]; - for (k = 0; k < ncol; k++) - atom->iarray[index[j]][m][k] = values.next_int(); + for (k = 0; k < ncol; k++) atom->iarray[index[j]][m][k] = values.next_int(); } else if (styles[j] == DARRAY) { ncol = cols[j]; - for (k = 0; k < ncol; k++) - atom->darray[index[j]][m][k] = values.next_double(); + for (k = 0; k < ncol; k++) atom->darray[index[j]][m][k] = values.next_double(); } } } } catch (TokenizerException &e) { - error->all(FLERR,"Invalid format in {} section of data file '{}': {}",keyword, buf,e.what()); + error->all(FLERR, "Invalid format in {} section of data file '{}': {}", keyword, buf, + e.what()); } buf = next + 1; } @@ -358,7 +349,7 @@ void FixPropertyAtom::write_data_section_size(int /*mth*/, int &nx, int &ny) void FixPropertyAtom::write_data_section_pack(int /*mth*/, double **buf) { - int i,k,ncol; + int i, k, ncol; // 1st column = atom tag // rest of columns = per-atom values @@ -394,15 +385,13 @@ void FixPropertyAtom::write_data_section_pack(int /*mth*/, double **buf) int **iarray = atom->iarray[index[nv]]; ncol = cols[nv]; for (i = 0; i < nlocal; i++) - for (k = 0; k < ncol; k++) - buf[i][icol+k] = ubuf(iarray[i][k]).d; + for (k = 0; k < ncol; k++) buf[i][icol + k] = ubuf(iarray[i][k]).d; icol += ncol; } else if (styles[nv] == DARRAY) { double **darray = atom->darray[index[nv]]; ncol = cols[nv]; for (i = 0; i < nlocal; i++) - for (k = 0; k < ncol; k++) - buf[i][icol+k] = darray[i][k]; + for (k = 0; k < ncol; k++) buf[i][icol + k] = darray[i][k]; icol += ncol; } } @@ -417,21 +406,30 @@ void FixPropertyAtom::write_data_section_pack(int /*mth*/, double **buf) void FixPropertyAtom::write_data_section_keyword(int /*mth*/, FILE *fp) { - if (nvalue == 1 && styles[0] == MOLECULE) fprintf(fp,"\nMolecules\n\n"); - else if (nvalue == 1 && styles[0] == CHARGE) fprintf(fp,"\nCharges\n\n"); + if (nvalue == 1 && styles[0] == MOLECULE) + fprintf(fp, "\nMolecules\n\n"); + else if (nvalue == 1 && styles[0] == CHARGE) + fprintf(fp, "\nCharges\n\n"); else { - fprintf(fp,"\n%s #",id); + fprintf(fp, "\n%s #", id); // write column hint as comment for (int i = 0; i < nvalue; ++i) { - if (styles[i] == MOLECULE) fputs(" mol",fp); - else if (styles[i] == CHARGE) fputs(" q",fp); - else if (styles[i] == RMASS) fputs(" rmass",fp); - else if (styles[i] == IVEC) fprintf(fp," i_%s", atom->ivname[index[i]]); - else if (styles[i] == DVEC) fprintf(fp, " d_%s", atom->dvname[index[i]]); - else if (styles[i] == IARRAY) fprintf(fp, " i_%s", atom->ianame[index[i]]); - else if (styles[i] == DARRAY) fprintf(fp, " d_%s", atom->daname[index[i]]); + if (styles[i] == MOLECULE) + fputs(" mol", fp); + else if (styles[i] == CHARGE) + fputs(" q", fp); + else if (styles[i] == RMASS) + fputs(" rmass", fp); + else if (styles[i] == IVEC) + fprintf(fp, " i_%s", atom->ivname[index[i]]); + else if (styles[i] == DVEC) + fprintf(fp, " d_%s", atom->dvname[index[i]]); + else if (styles[i] == IARRAY) + fprintf(fp, " i_%s", atom->ianame[index[i]]); + else if (styles[i] == DARRAY) + fprintf(fp, " d_%s", atom->daname[index[i]]); } - fputs("\n\n",fp); + fputs("\n\n", fp); } } @@ -442,39 +440,36 @@ void FixPropertyAtom::write_data_section_keyword(int /*mth*/, FILE *fp) only called by proc 0 ------------------------------------------------------------------------- */ -void FixPropertyAtom::write_data_section(int /*mth*/, FILE *fp, - int n, double **buf, int /*index*/) +void FixPropertyAtom::write_data_section(int /*mth*/, FILE *fp, int n, double **buf, int /*index*/) { - int k,icol,ncol,nv; + int k, icol, ncol, nv; std::string line; for (int i = 0; i < n; i++) { - line = fmt::format("{}",(tagint) ubuf(buf[i][0]).i); + line = fmt::format("{}", (tagint) ubuf(buf[i][0]).i); icol = 1; for (nv = 0; nv < nvalue; nv++) { if (styles[nv] == MOLECULE) - line += fmt::format(" {}",(tagint) ubuf(buf[i][icol++]).i); + line += fmt::format(" {}", (tagint) ubuf(buf[i][icol++]).i); else if (styles[nv] == CHARGE) - line += fmt::format(" {}",buf[i][icol++]); + line += fmt::format(" {}", buf[i][icol++]); else if (styles[nv] == RMASS) - line += fmt::format(" {}",buf[i][icol++]); + line += fmt::format(" {}", buf[i][icol++]); else if (styles[nv] == IVEC) - line += fmt::format(" {}",(int) ubuf(buf[i][icol++]).i); + line += fmt::format(" {}", (int) ubuf(buf[i][icol++]).i); else if (styles[nv] == DVEC) - line += fmt::format(" {}",buf[i][icol++]); + line += fmt::format(" {}", buf[i][icol++]); else if (styles[nv] == IARRAY) { ncol = cols[nv]; - for (k = 0; k < ncol; k++) - line += fmt::format(" {}",(int) ubuf(buf[i][icol+k]).i); + for (k = 0; k < ncol; k++) line += fmt::format(" {}", (int) ubuf(buf[i][icol + k]).i); icol += ncol; } else if (styles[nv] == DARRAY) { ncol = cols[nv]; - for (k = 0; k < ncol; k++) - line += fmt::format(" {}",buf[i][icol+k]); + for (k = 0; k < ncol; k++) line += fmt::format(" {}", buf[i][icol + k]); icol += ncol; } } - fmt::print(fp,line+"\n"); + fmt::print(fp, line + "\n"); } } @@ -486,13 +481,20 @@ double FixPropertyAtom::memory_usage() { double bytes = 0.0; for (int m = 0; m < nvalue; m++) { - if (styles[m] == MOLECULE) bytes = atom->nmax * sizeof(tagint); - else if (styles[m] == CHARGE) bytes = atom->nmax * sizeof(double); - else if (styles[m] == RMASS) bytes = atom->nmax * sizeof(double); - else if (styles[m] == IVEC) bytes = atom->nmax * sizeof(int); - else if (styles[m] == DVEC) bytes = atom->nmax * sizeof(double); - else if (styles[m] == IARRAY) bytes = (size_t) atom->nmax * cols[m] * sizeof(int); - else if (styles[m] == DARRAY) bytes = (size_t) atom->nmax * cols[m] * sizeof(double); + if (styles[m] == MOLECULE) + bytes = atom->nmax * sizeof(tagint); + else if (styles[m] == CHARGE) + bytes = atom->nmax * sizeof(double); + else if (styles[m] == RMASS) + bytes = atom->nmax * sizeof(double); + else if (styles[m] == IVEC) + bytes = atom->nmax * sizeof(int); + else if (styles[m] == DVEC) + bytes = atom->nmax * sizeof(double); + else if (styles[m] == IARRAY) + bytes = (size_t) atom->nmax * cols[m] * sizeof(int); + else if (styles[m] == DARRAY) + bytes = (size_t) atom->nmax * cols[m] * sizeof(double); } return bytes; } @@ -508,33 +510,33 @@ void FixPropertyAtom::grow_arrays(int nmax) { for (int nv = 0; nv < nvalue; nv++) { if (styles[nv] == MOLECULE) { - memory->grow(atom->molecule,nmax,"atom:molecule"); - size_t nbytes = (nmax-nmax_old) * sizeof(tagint); - memset(&atom->molecule[nmax_old],0,nbytes); + memory->grow(atom->molecule, nmax, "atom:molecule"); + size_t nbytes = (nmax - nmax_old) * sizeof(tagint); + memset(&atom->molecule[nmax_old], 0, nbytes); } else if (styles[nv] == CHARGE) { - memory->grow(atom->q,nmax,"atom:q"); - size_t nbytes = (nmax-nmax_old) * sizeof(double); - memset(&atom->q[nmax_old],0,nbytes); + memory->grow(atom->q, nmax, "atom:q"); + size_t nbytes = (nmax - nmax_old) * sizeof(double); + memset(&atom->q[nmax_old], 0, nbytes); } else if (styles[nv] == RMASS) { - memory->grow(atom->rmass,nmax,"atom:rmass"); - size_t nbytes = (nmax-nmax_old) * sizeof(double); - memset(&atom->rmass[nmax_old],0,nbytes); + memory->grow(atom->rmass, nmax, "atom:rmass"); + size_t nbytes = (nmax - nmax_old) * sizeof(double); + memset(&atom->rmass[nmax_old], 0, nbytes); } else if (styles[nv] == IVEC) { - memory->grow(atom->ivector[index[nv]],nmax,"atom:ivector"); - size_t nbytes = (nmax-nmax_old) * sizeof(int); - memset(&atom->ivector[index[nv]][nmax_old],0,nbytes); + memory->grow(atom->ivector[index[nv]], nmax, "atom:ivector"); + size_t nbytes = (nmax - nmax_old) * sizeof(int); + memset(&atom->ivector[index[nv]][nmax_old], 0, nbytes); } else if (styles[nv] == DVEC) { - memory->grow(atom->dvector[index[nv]],nmax,"atom:dvector"); - size_t nbytes = (nmax-nmax_old) * sizeof(double); - memset(&atom->dvector[index[nv]][nmax_old],0,nbytes); + memory->grow(atom->dvector[index[nv]], nmax, "atom:dvector"); + size_t nbytes = (nmax - nmax_old) * sizeof(double); + memset(&atom->dvector[index[nv]][nmax_old], 0, nbytes); } else if (styles[nv] == IARRAY) { - memory->grow(atom->iarray[index[nv]],nmax,cols[nv],"atom:iarray"); - size_t nbytes = (size_t) (nmax-nmax_old) * cols[nv] * sizeof(int); - if (nbytes) memset(&atom->iarray[index[nv]][nmax_old][0],0,nbytes); + memory->grow(atom->iarray[index[nv]], nmax, cols[nv], "atom:iarray"); + size_t nbytes = (size_t) (nmax - nmax_old) * cols[nv] * sizeof(int); + if (nbytes) memset(&atom->iarray[index[nv]][nmax_old][0], 0, nbytes); } else if (styles[nv] == DARRAY) { - memory->grow(atom->darray[index[nv]],nmax,cols[nv],"atom:darray"); - size_t nbytes = (size_t) (nmax-nmax_old) * cols[nv] * sizeof(double); - if (nbytes) memset(&atom->darray[index[nv]][nmax_old][0],0,nbytes); + memory->grow(atom->darray[index[nv]], nmax, cols[nv], "atom:darray"); + size_t nbytes = (size_t) (nmax - nmax_old) * cols[nv] * sizeof(double); + if (nbytes) memset(&atom->darray[index[nv]][nmax_old][0], 0, nbytes); } } @@ -547,7 +549,7 @@ void FixPropertyAtom::grow_arrays(int nmax) void FixPropertyAtom::copy_arrays(int i, int j, int /*delflag*/) { - int k,ncol; + int k, ncol; for (int nv = 0; nv < nvalue; nv++) { if (styles[nv] == MOLECULE) @@ -562,24 +564,21 @@ void FixPropertyAtom::copy_arrays(int i, int j, int /*delflag*/) atom->dvector[index[nv]][j] = atom->dvector[index[nv]][i]; else if (styles[nv] == IARRAY) { ncol = cols[nv]; - for (k = 0; k < ncol; k++) - atom->iarray[index[nv]][j][k] = atom->iarray[index[nv]][i][k]; + for (k = 0; k < ncol; k++) atom->iarray[index[nv]][j][k] = atom->iarray[index[nv]][i][k]; } else if (styles[nv] == DARRAY) { ncol = cols[nv]; - for (k = 0; k < ncol; k++) - atom->darray[index[nv]][j][k] = atom->darray[index[nv]][i][k]; + for (k = 0; k < ncol; k++) atom->darray[index[nv]][j][k] = atom->darray[index[nv]][i][k]; } } } - /* ---------------------------------------------------------------------- initialize one atom's storage values, called when atom is created ------------------------------------------------------------------------- */ void FixPropertyAtom::set_arrays(int i) { - int k,ncol; + int k, ncol; for (int nv = 0; nv < nvalue; nv++) { if (styles[nv] == IVEC) @@ -588,12 +587,10 @@ void FixPropertyAtom::set_arrays(int i) atom->dvector[index[nv]][i] = 0.0; else if (styles[nv] == IARRAY) { ncol = cols[nv]; - for (k = 0; k < ncol; k++) - atom->iarray[index[nv]][i][k] = 0; + for (k = 0; k < ncol; k++) atom->iarray[index[nv]][i][k] = 0; } else if (styles[nv] == DARRAY) { ncol = cols[nv]; - for (k = 0; k < ncol; k++) - atom->darray[index[nv]][i][k] = 0.0; + for (k = 0; k < ncol; k++) atom->darray[index[nv]][i][k] = 0.0; } } } @@ -604,7 +601,7 @@ void FixPropertyAtom::set_arrays(int i) int FixPropertyAtom::pack_border(int n, int *list, double *buf) { - int i,j,k,ncol; + int i, j, k, ncol; int m = 0; for (int nv = 0; nv < nvalue; nv++) { @@ -643,16 +640,14 @@ int FixPropertyAtom::pack_border(int n, int *list, double *buf) ncol = cols[nv]; for (i = 0; i < n; i++) { j = list[i]; - for (k = 0; k < ncol; k++) - buf[m++] = ubuf(iarray[j][k]).d; + for (k = 0; k < ncol; k++) buf[m++] = ubuf(iarray[j][k]).d; } } else if (styles[nv] == DARRAY) { double **darray = atom->darray[index[nv]]; ncol = cols[nv]; for (i = 0; i < n; i++) { j = list[i]; - for (k = 0; k < ncol; k++) - buf[m++] = darray[j][k]; + for (k = 0; k < ncol; k++) buf[m++] = darray[j][k]; } } } @@ -666,49 +661,42 @@ int FixPropertyAtom::pack_border(int n, int *list, double *buf) int FixPropertyAtom::unpack_border(int n, int first, double *buf) { - int i,k,last,ncol; + int i, k, last, ncol; int m = 0; for (int nv = 0; nv < nvalue; nv++) { if (styles[nv] == MOLECULE) { tagint *molecule = atom->molecule; last = first + n; - for (i = first; i < last; i++) - molecule[i] = (tagint) ubuf(buf[m++]).i; + for (i = first; i < last; i++) molecule[i] = (tagint) ubuf(buf[m++]).i; } else if (styles[nv] == CHARGE) { double *q = atom->q; last = first + n; - for (i = first; i < last; i++) - q[i] = buf[m++]; + for (i = first; i < last; i++) q[i] = buf[m++]; } else if (styles[nv] == RMASS) { double *rmass = atom->rmass; last = first + n; - for (i = first; i < last; i++) - rmass[i] = buf[m++]; + for (i = first; i < last; i++) rmass[i] = buf[m++]; } else if (styles[nv] == IVEC) { int *ivector = atom->ivector[index[nv]]; last = first + n; - for (i = first; i < last; i++) - ivector[i] = (int) ubuf(buf[m++]).i; + for (i = first; i < last; i++) ivector[i] = (int) ubuf(buf[m++]).i; } else if (styles[nv] == DVEC) { double *dvector = atom->dvector[index[nv]]; last = first + n; - for (i = first; i < last; i++) - dvector[i] = buf[m++]; + for (i = first; i < last; i++) dvector[i] = buf[m++]; } else if (styles[nv] == IARRAY) { int **iarray = atom->iarray[index[nv]]; ncol = cols[nv]; last = first + n; for (i = first; i < last; i++) - for (k = 0; k < ncol; k++) - iarray[i][k] = (int) ubuf(buf[m++]).i; + for (k = 0; k < ncol; k++) iarray[i][k] = (int) ubuf(buf[m++]).i; } else if (styles[nv] == DARRAY) { double **darray = atom->darray[index[nv]]; ncol = cols[nv]; last = first + n; for (i = first; i < last; i++) - for (k = 0; k < ncol; k++) - darray[i][k] = buf[m++]; + for (k = 0; k < ncol; k++) darray[i][k] = buf[m++]; } } @@ -721,23 +709,26 @@ int FixPropertyAtom::unpack_border(int n, int first, double *buf) int FixPropertyAtom::pack_exchange(int i, double *buf) { - int k,ncol; + int k, ncol; int m = 0; for (int nv = 0; nv < nvalue; nv++) { - if (styles[nv] == MOLECULE) buf[m++] = ubuf(atom->molecule[i]).d; - else if (styles[nv] == CHARGE) buf[m++] = atom->q[i]; - else if (styles[nv] == RMASS) buf[m++] = atom->rmass[i]; - else if (styles[nv] == IVEC) buf[m++] = ubuf(atom->ivector[index[nv]][i]).d; - else if (styles[nv] == DVEC) buf[m++] = atom->dvector[index[nv]][i]; + if (styles[nv] == MOLECULE) + buf[m++] = ubuf(atom->molecule[i]).d; + else if (styles[nv] == CHARGE) + buf[m++] = atom->q[i]; + else if (styles[nv] == RMASS) + buf[m++] = atom->rmass[i]; + else if (styles[nv] == IVEC) + buf[m++] = ubuf(atom->ivector[index[nv]][i]).d; + else if (styles[nv] == DVEC) + buf[m++] = atom->dvector[index[nv]][i]; else if (styles[nv] == IARRAY) { ncol = cols[nv]; - for (k = 0; k < ncol; k++) - buf[m++] = ubuf(atom->iarray[index[nv]][i][k]).d; + for (k = 0; k < ncol; k++) buf[m++] = ubuf(atom->iarray[index[nv]][i][k]).d; } else if (styles[nv] == DARRAY) { ncol = cols[nv]; - for (k = 0; k < ncol; k++) - buf[m++] = atom->darray[index[nv]][i][k]; + for (k = 0; k < ncol; k++) buf[m++] = atom->darray[index[nv]][i][k]; } } @@ -750,7 +741,7 @@ int FixPropertyAtom::pack_exchange(int i, double *buf) int FixPropertyAtom::unpack_exchange(int nlocal, double *buf) { - int k,ncol; + int k, ncol; int m = 0; for (int nv = 0; nv < nvalue; nv++) { @@ -766,12 +757,10 @@ int FixPropertyAtom::unpack_exchange(int nlocal, double *buf) atom->dvector[index[nv]][nlocal] = buf[m++]; else if (styles[nv] == IARRAY) { ncol = cols[nv]; - for (k = 0; k < ncol; k++) - atom->iarray[index[nv]][nlocal][k] = (int) ubuf(buf[m++]).i; + for (k = 0; k < ncol; k++) atom->iarray[index[nv]][nlocal][k] = (int) ubuf(buf[m++]).i; } else if (styles[nv] == DARRAY) { ncol = cols[nv]; - for (k = 0; k < ncol; k++) - atom->darray[index[nv]][nlocal][k] = buf[m++]; + for (k = 0; k < ncol; k++) atom->darray[index[nv]][nlocal][k] = buf[m++]; } } @@ -784,31 +773,34 @@ int FixPropertyAtom::unpack_exchange(int nlocal, double *buf) int FixPropertyAtom::pack_restart(int i, double *buf) { - int k,ncol; + int k, ncol; // pack buf[0] this way because other fixes unpack it - buf[0] = values_peratom+1; + buf[0] = values_peratom + 1; int m = 1; for (int nv = 0; nv < nvalue; nv++) { - if (styles[nv] == MOLECULE) buf[m++] = ubuf(atom->molecule[i]).d; - else if (styles[nv] == CHARGE) buf[m++] = atom->q[i]; - else if (styles[nv] == RMASS) buf[m++] = atom->rmass[i]; - else if (styles[nv] == IVEC) buf[m++] = ubuf(atom->ivector[index[nv]][i]).d; - else if (styles[nv] == DVEC) buf[m++] = atom->dvector[index[nv]][i]; + if (styles[nv] == MOLECULE) + buf[m++] = ubuf(atom->molecule[i]).d; + else if (styles[nv] == CHARGE) + buf[m++] = atom->q[i]; + else if (styles[nv] == RMASS) + buf[m++] = atom->rmass[i]; + else if (styles[nv] == IVEC) + buf[m++] = ubuf(atom->ivector[index[nv]][i]).d; + else if (styles[nv] == DVEC) + buf[m++] = atom->dvector[index[nv]][i]; else if (styles[nv] == IARRAY) { ncol = cols[nv]; - for (k = 0; k < ncol; k++) - buf[m++] = ubuf(atom->iarray[index[nv]][i][k]).d; + for (k = 0; k < ncol; k++) buf[m++] = ubuf(atom->iarray[index[nv]][i][k]).d; } else if (styles[nv] == DARRAY) { ncol = cols[nv]; - for (k = 0; k < ncol; k++) - buf[m++] = atom->darray[index[nv]][i][k]; + for (k = 0; k < ncol; k++) buf[m++] = atom->darray[index[nv]][i][k]; } } - return values_peratom+1; + return values_peratom + 1; } /* ---------------------------------------------------------------------- @@ -817,14 +809,14 @@ int FixPropertyAtom::pack_restart(int i, double *buf) void FixPropertyAtom::unpack_restart(int nlocal, int nth) { - int k,ncol; + int k, ncol; double **extra = atom->extra; // skip to Nth set of extra values // unpack the Nth first values this way because other fixes pack them int m = 0; - for (int i = 0; i < nth; i++) m += static_cast (extra[nlocal][m]); + for (int i = 0; i < nth; i++) m += static_cast(extra[nlocal][m]); m++; for (int nv = 0; nv < nvalue; nv++) { @@ -844,8 +836,7 @@ void FixPropertyAtom::unpack_restart(int nlocal, int nth) atom->iarray[index[nv]][nlocal][k] = (int) ubuf(extra[nlocal][m++]).i; } else if (styles[nv] == DARRAY) { ncol = cols[nv]; - for (k = 0; k < ncol; k++) - atom->darray[index[nv]][nlocal][k] = extra[nlocal][m++]; + for (k = 0; k < ncol; k++) atom->darray[index[nv]][nlocal][k] = extra[nlocal][m++]; } } } @@ -856,7 +847,7 @@ void FixPropertyAtom::unpack_restart(int nlocal, int nth) int FixPropertyAtom::maxsize_restart() { - return values_peratom+1; + return values_peratom + 1; } /* ---------------------------------------------------------------------- @@ -865,5 +856,5 @@ int FixPropertyAtom::maxsize_restart() int FixPropertyAtom::size_restart(int /*nlocal*/) { - return values_peratom+1; + return values_peratom + 1; } diff --git a/src/fix_store_local.cpp b/src/fix_store_local.cpp index dc31188e8c..a61e8b58b0 100644 --- a/src/fix_store_local.cpp +++ b/src/fix_store_local.cpp @@ -123,4 +123,3 @@ double FixStoreLocal::memory_usage() double bytes = (double) nmax * (double) nvalues * sizeof(double); return bytes; } - diff --git a/src/fix_update_special_bonds.cpp b/src/fix_update_special_bonds.cpp index 453695dc85..c31aefd28d 100644 --- a/src/fix_update_special_bonds.cpp +++ b/src/fix_update_special_bonds.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -16,15 +15,12 @@ #include "atom.h" #include "atom_vec.h" -#include "comm.h" #include "error.h" #include "force.h" -#include "neighbor.h" #include "neigh_list.h" +#include "neighbor.h" #include "pair.h" -#include -#include #include using namespace LAMMPS_NS; @@ -33,15 +29,9 @@ using namespace FixConst; /* ---------------------------------------------------------------------- */ FixUpdateSpecialBonds::FixUpdateSpecialBonds(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg) -{ - if (narg != 3) error->all(FLERR,"Illegal fix update/special/bonds command"); -} - -/* ---------------------------------------------------------------------- */ - -FixUpdateSpecialBonds::~FixUpdateSpecialBonds() + Fix(lmp, narg, arg) { + if (narg != 3) error->all(FLERR, "Illegal fix update/special/bonds command"); } /* ---------------------------------------------------------------------- */ @@ -59,21 +49,18 @@ int FixUpdateSpecialBonds::setmask() void FixUpdateSpecialBonds::setup(int /*vflag*/) { // Require atoms know about all of their bonds and if they break - if (force->newton_bond) - error->all(FLERR,"Fix update/special/bonds requires Newton bond off"); + if (force->newton_bond) error->all(FLERR, "Fix update/special/bonds requires Newton bond off"); - if (!atom->avec->bonds_allow) - error->all(FLERR,"Fix update/special/bonds requires atom bonds"); + if (!atom->avec->bonds_allow) error->all(FLERR, "Fix update/special/bonds requires atom bonds"); // special lj must be 0 1 1 to censor pair forces between bonded particles // special coulomb must be 1 1 1 to ensure all pairs are included in the // neighbor list and 1-3 and 1-4 special bond lists are skipped - if (force->special_lj[1] != 0.0 || force->special_lj[2] != 1.0 || - force->special_lj[3] != 1.0) - error->all(FLERR,"Fix update/special/bonds requires special LJ weights = 0,1,1"); + if (force->special_lj[1] != 0.0 || force->special_lj[2] != 1.0 || force->special_lj[3] != 1.0) + error->all(FLERR, "Fix update/special/bonds requires special LJ weights = 0,1,1"); if (force->special_coul[1] != 1.0 || force->special_coul[2] != 1.0 || force->special_coul[3] != 1.0) - error->all(FLERR,"Fix update/special/bonds requires special Coulomb weights = 1,1,1"); + error->all(FLERR, "Fix update/special/bonds requires special Coulomb weights = 1,1,1"); new_broken_pairs.clear(); broken_pairs.clear(); @@ -107,7 +94,7 @@ void FixUpdateSpecialBonds::pre_exchange() for (m = 0; m < n1; m++) if (slist[m] == tagj) break; n3 = nspecial[i][2]; - for (; m < n3-1; m++) slist[m] = slist[m+1]; + for (; m < n3 - 1; m++) slist[m] = slist[m + 1]; nspecial[i][0]--; nspecial[i][1]--; nspecial[i][2]--; @@ -119,7 +106,7 @@ void FixUpdateSpecialBonds::pre_exchange() for (m = 0; m < n1; m++) if (slist[m] == tagi) break; n3 = nspecial[j][2]; - for (; m < n3-1; m++) slist[m] = slist[m+1]; + for (; m < n3 - 1; m++) slist[m] = slist[m + 1]; nspecial[j][0]--; nspecial[j][1]--; nspecial[j][2]--; @@ -135,14 +122,14 @@ void FixUpdateSpecialBonds::pre_exchange() void FixUpdateSpecialBonds::pre_force(int /*vflag*/) { - int i1,i2,j,jj,jnum; - int *jlist,*numneigh,**firstneigh; + int i1, i2, j, jj, jnum; + int *jlist, *numneigh, **firstneigh; tagint tag1, tag2; int nlocal = atom->nlocal; tagint *tag = atom->tag; - NeighList *list = force->pair->list; // may need to be generalized to work with pair hybrid* + NeighList *list = force->pair->list; // may need to be generalized to work with pair hybrid* numneigh = list->numneigh; firstneigh = list->firstneigh; @@ -161,9 +148,8 @@ void FixUpdateSpecialBonds::pre_force(int /*vflag*/) jnum = numneigh[i1]; for (jj = 0; jj < jnum; jj++) { j = jlist[jj]; - j &= SPECIALMASK; // Clear special bond bits - if (tag[j] == tag2) - jlist[jj] = j; + j &= SPECIALMASK; // Clear special bond bits + if (tag[j] == tag2) jlist[jj] = j; } } @@ -172,13 +158,11 @@ void FixUpdateSpecialBonds::pre_force(int /*vflag*/) jnum = numneigh[i2]; for (jj = 0; jj < jnum; jj++) { j = jlist[jj]; - j &= SPECIALMASK; // Clear special bond bits - if (tag[j] == tag1) - jlist[jj] = j; + j &= SPECIALMASK; // Clear special bond bits + if (tag[j] == tag1) jlist[jj] = j; } } } - new_broken_pairs.clear(); } @@ -186,9 +170,7 @@ void FixUpdateSpecialBonds::pre_force(int /*vflag*/) void FixUpdateSpecialBonds::add_broken_bond(int i, int j) { - tagint *tag = atom->tag; - std::pair tag_pair = std::make_pair(tag[i],tag[j]); - + auto tag_pair = std::make_pair(atom->tag[i], atom->tag[j]); new_broken_pairs.push_back(tag_pair); broken_pairs.push_back(tag_pair); } diff --git a/src/fix_update_special_bonds.h b/src/fix_update_special_bonds.h index 17efbb1ad1..d6cf2fb837 100644 --- a/src/fix_update_special_bonds.h +++ b/src/fix_update_special_bonds.h @@ -13,7 +13,7 @@ #ifdef FIX_CLASS // clang-format off -FixStyle(UPDATE_SPECIAL_BONDS,FixUpdateSpecialBonds) +FixStyle(UPDATE_SPECIAL_BONDS,FixUpdateSpecialBonds); // clang-format on #else @@ -22,26 +22,25 @@ FixStyle(UPDATE_SPECIAL_BONDS,FixUpdateSpecialBonds) #include "fix.h" -#include #include +#include namespace LAMMPS_NS { class FixUpdateSpecialBonds : public Fix { public: FixUpdateSpecialBonds(class LAMMPS *, int, char **); - ~FixUpdateSpecialBonds(); - int setmask(); - void setup(int); - void pre_exchange(); - void pre_force(int); - void add_broken_bond(int,int); + int setmask() override; + void setup(int) override; + void pre_exchange() override; + void pre_force(int) override; + void add_broken_bond(int, int); protected: // Create two arrays to store bonds broken this timestep (new) // and since the last neighbor list build - std::vector > new_broken_pairs; - std::vector > broken_pairs; + std::vector> new_broken_pairs; + std::vector> broken_pairs; }; } // namespace LAMMPS_NS diff --git a/src/set.cpp b/src/set.cpp index 764d02f3ca..1abd6c758c 100644 --- a/src/set.cpp +++ b/src/set.cpp @@ -950,28 +950,26 @@ void Set::set(int keyword) else error->one(FLERR,"Cannot set quaternion for atom that has none"); if (domain->dimension == 2 && (xvalue != 0.0 || yvalue != 0.0)) - error->one(FLERR,"Cannot set quaternion with xy components " - "for 2d system"); + error->one(FLERR,"Cannot set quaternion with xy components for 2d system"); - double theta2 = MY_PI2 * wvalue/180.0; - double sintheta2 = sin(theta2); + const double theta2 = MY_PI2 * wvalue/180.0; + const double sintheta2 = sin(theta2); + double temp[4]; + temp[0] = cos(theta2); + temp[1] = xvalue * sintheta2; + temp[2] = yvalue * sintheta2; + temp[3] = zvalue * sintheta2; + MathExtra::qnormalize(temp); if (atom->quat_flag) { - double temp[4]; - temp[0] = cos(theta2); - temp[1] = xvalue * sintheta2; - temp[2] = yvalue * sintheta2; - temp[3] = zvalue * sintheta2; - MathExtra::qnormalize(temp); quat2[i][0] = temp[0]; quat2[i][1] = temp[1]; quat2[i][2] = temp[2]; quat2[i][3] = temp[3]; } else { - quat[0] = cos(theta2); - quat[1] = xvalue * sintheta2; - quat[2] = yvalue * sintheta2; - quat[3] = zvalue * sintheta2; - MathExtra::qnormalize(quat); + quat[0] = temp[0]; + quat[1] = temp[1]; + quat[2] = temp[2]; + quat[3] = temp[3]; } } From 0f1097d7e60a49328cf582c6334cbd67b20f87e0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 13 Apr 2022 12:41:40 -0400 Subject: [PATCH 36/40] recover read_restart and read_data capability for fix property/atom --- src/atom.cpp | 16 ++++++++++++++-- src/fix_property_atom.cpp | 24 ------------------------ src/fix_property_atom.h | 1 - 3 files changed, 14 insertions(+), 27 deletions(-) diff --git a/src/atom.cpp b/src/atom.cpp index fdecc4a8f0..fad63344eb 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -1926,8 +1926,7 @@ int Atom::find_molecule(char *id) called by fixes and commands that add molecules ------------------------------------------------------------------------- */ -void Atom::add_molecule_atom(Molecule *onemol, int iatom, - int ilocal, tagint offset) +void Atom::add_molecule_atom(Molecule *onemol, int iatom, int ilocal, tagint offset) { if (onemol->qflag && q_flag) q[ilocal] = onemol->q[iatom]; if (onemol->radiusflag && radius_flag) radius[ilocal] = onemol->radius[iatom]; @@ -1942,6 +1941,19 @@ void Atom::add_molecule_atom(Molecule *onemol, int iatom, onemol->avec_body->set_quat(ilocal,onemol->quat_external); } + // initialize custom per-atom properties to zero if present + + for (int i = 0; i < nivector; ++i) + ivector[i][ilocal] = 0; + for (int i = 0; i < ndvector; ++i) + dvector[i][ilocal] = 0.0; + for (int i = 0; i < niarray; ++i) + for (int j = 0; j < icols[i]; ++j) + iarray[i][ilocal][j] = 0; + for (int i = 0; i < ndarray; ++i) + for (int j = 0; j < dcols[i]; ++j) + darray[i][ilocal][j] = 0.0; + if (molecular != Atom::MOLECULAR) return; // add bond topology info diff --git a/src/fix_property_atom.cpp b/src/fix_property_atom.cpp index 7be3d8f343..a6a1b997e3 100644 --- a/src/fix_property_atom.cpp +++ b/src/fix_property_atom.cpp @@ -36,7 +36,6 @@ FixPropertyAtom::FixPropertyAtom(LAMMPS *lmp, int narg, char **arg) : restart_peratom = 1; wd_section = 1; - create_attribute = 1; int iarg = 3; nvalue = narg - iarg; @@ -572,29 +571,6 @@ void FixPropertyAtom::copy_arrays(int i, int j, int /*delflag*/) } } -/* ---------------------------------------------------------------------- - initialize one atom's storage values, called when atom is created -------------------------------------------------------------------------- */ - -void FixPropertyAtom::set_arrays(int i) -{ - int k, ncol; - - for (int nv = 0; nv < nvalue; nv++) { - if (styles[nv] == IVEC) - atom->ivector[index[nv]][i] = 0; - else if (styles[nv] == DVEC) - atom->dvector[index[nv]][i] = 0.0; - else if (styles[nv] == IARRAY) { - ncol = cols[nv]; - for (k = 0; k < ncol; k++) atom->iarray[index[nv]][i][k] = 0; - } else if (styles[nv] == DARRAY) { - ncol = cols[nv]; - for (k = 0; k < ncol; k++) atom->darray[index[nv]][i][k] = 0.0; - } - } -} - /* ---------------------------------------------------------------------- pack values for border communication at re-neighboring ------------------------------------------------------------------------- */ diff --git a/src/fix_property_atom.h b/src/fix_property_atom.h index 5e57ef9f91..16b282913f 100644 --- a/src/fix_property_atom.h +++ b/src/fix_property_atom.h @@ -41,7 +41,6 @@ class FixPropertyAtom : public Fix { void grow_arrays(int) override; void copy_arrays(int, int, int) override; - void set_arrays(int) override; int pack_border(int, int *, double *) override; int unpack_border(int, int, double *) override; int pack_exchange(int, double *) override; From fb37c86632e81332d44b40daea5ff61e4bcfdf12 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 13 Apr 2022 12:59:30 -0400 Subject: [PATCH 37/40] remove duplicate --- .../impact/log.27Oct2021.impact.spring.g++.4 | 217 ------------------ 1 file changed, 217 deletions(-) delete mode 100644 examples/bpm/impact/log.27Oct2021.impact.spring.g++.4 diff --git a/examples/bpm/impact/log.27Oct2021.impact.spring.g++.4 b/examples/bpm/impact/log.27Oct2021.impact.spring.g++.4 deleted file mode 100644 index bb7b526ed9..0000000000 --- a/examples/bpm/impact/log.27Oct2021.impact.spring.g++.4 +++ /dev/null @@ -1,217 +0,0 @@ -LAMMPS (27 Oct 2021) -units lj -dimension 3 -boundary f f f -atom_style sphere/bpm -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.0 -Lattice spacing in x,y,z = 1.5874011 1.5874011 1.5874011 -region box block -25 15 -22 22 -22 22 -create_box 1 box bond/types 2 extra/bond/per/atom 20 extra/special/per/atom 50 -Created orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) - 1 by 2 by 2 MPI processor grid - -region disk cylinder x 0.0 0.0 20.0 -0.5 0.5 -create_atoms 1 region disk -Created 7529 atoms - using lattice units in orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) - create_atoms CPU = 0.006 seconds -group plate region disk -7529 atoms in group plate - -region ball sphere 8.0 0.0 0.0 6.0 -create_atoms 1 region ball -Created 3589 atoms - using lattice units in orthogonal box = (-39.685026 -34.922823 -34.922823) to (23.811016 34.922823 34.922823) - create_atoms CPU = 0.001 seconds -group projectile region ball -3589 atoms in group projectile - -displace_atoms all random 0.1 0.1 0.1 134598738 -Displacing atoms ... - -neighbor 1.0 bin -pair_style gran/hooke/history 1.0 NULL 0.5 NULL 0.1 1 -pair_coeff 1 1 - -fix 1 all nve/sphere/bpm - -create_bonds many plate plate 1 0.0 1.5 -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2 - ghost atom cutoff = 2.6 - binsize = 1, bins = 64 70 70 - 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 gran/hooke/history, perpetual - attributes: half, newton on, size, history - pair build: half/size/bin/newton - stencil: half/bin/3d - bin: standard -Added 38559 bonds, new total = 38559 -Finding 1-2 1-3 1-4 neighbors ... - special bond factors lj: 0 1 1 - special bond factors coul: 0 1 1 - 15 = max # of 1-2 neighbors - 101 = max # of special neighbors - special bonds CPU = 0.002 seconds -create_bonds many projectile projectile 2 0.0 1.5 -WARNING: Bonds are defined but no bond style is set (../force.cpp:191) -WARNING: Likewise 1-2 special neighbor interactions != 1.0 (../force.cpp:193) -Added 21869 bonds, new total = 60428 -Finding 1-2 1-3 1-4 neighbors ... - special bond factors lj: 0 1 1 - special bond factors coul: 0 1 1 - 16 = max # of 1-2 neighbors - 101 = max # of special neighbors - special bonds CPU = 0.002 seconds - -neighbor 0.3 bin -special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0 - -bond_style bpm/rotational store/local brkbond 100 time id1 id2 -bond_coeff 1 1.0 0.2 0.02 0.02 0.05 0.01 0.01 0.01 0.1 0.02 0.002 0.002 -bond_coeff 2 1.0 0.2 0.02 0.02 0.20 0.04 0.04 0.04 0.1 0.02 0.002 0.002 - -velocity projectile set -0.05 0.0 0.0 -compute nbond all nbond/atom -compute tbond all reduce sum c_nbond - -timestep 0.05 -thermo_style custom step ke pe pxx pyy pzz c_tbond -thermo 100 -thermo_modify lost ignore lost/bond ignore -#dump 1 all custom 100 atomDump id radius x y z c_nbond - -dump 2 all local 100 brokenDump f_brkbond[1] f_brkbond[2] f_brkbond[3] -dump_modify 2 header no - -run 7500 -WARNING: No fixes with time integration, atoms won't move (../verlet.cpp:60) -Neighbor list info ... - update every 1 steps, delay 10 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 = 98 108 108 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair gran/hooke/history, perpetual - attributes: half, newton on, size, history - pair build: half/size/bin/newton - stencil: half/bin/3d - bin: standard -Per MPI rank memory allocation (min/avg/max) = 33.34 | 33.34 | 33.35 Mbytes -Step KinEng PotEng Pxx Pyy Pzz c_tbond - 0 0.00053238861 0 3.8217307e-05 0 0 10.8703 - 100 0.00053238861 0 3.8217307e-05 2.0196245e-19 2.0291801e-19 10.8703 - 200 0.00053238861 0 3.8217307e-05 3.0246341e-19 2.9178664e-19 10.8703 - 300 0.00053238861 0 3.8217307e-05 3.3428362e-19 3.2669661e-19 10.8703 - 400 0.00053238861 0 3.8217307e-05 3.5002919e-19 3.3516777e-19 10.8703 - 500 0.00053102278 0 3.8469829e-05 7.3311547e-08 1.4473347e-07 10.8703 - 600 0.00051549609 0 4.0342929e-05 3.87734e-07 4.9640786e-07 10.868322 - 700 0.00050121532 0 3.8778736e-05 4.6411496e-07 4.3149467e-07 10.850333 - 800 0.00049869661 0 3.6779398e-05 4.748259e-07 3.5191586e-07 10.803202 - 900 0.00049580923 0 3.5608764e-05 9.3667316e-07 5.0139078e-07 10.737363 - 1000 0.00049478796 0 3.5573518e-05 7.9599489e-07 6.7732416e-07 10.683396 - 1100 0.00048712204 0 3.5843955e-05 1.1345563e-06 1.4066243e-06 10.662169 - 1200 0.00048265244 0 3.5288538e-05 1.7434542e-06 1.6555952e-06 10.642921 - 1300 0.00047982046 0 3.4929699e-05 1.5116612e-06 1.1824842e-06 10.62925 - 1400 0.00048024672 0 3.4696478e-05 1.0219046e-06 9.6017582e-07 10.619716 - 1500 0.0004721757 0 3.4671814e-05 1.7623303e-06 1.6904391e-06 10.608023 - 1600 0.00045691175 0 3.3618706e-05 2.0127313e-06 2.2294075e-06 10.599208 - 1700 0.00044846472 0 3.2628068e-05 2.1732651e-06 2.6125725e-06 10.586796 - 1800 0.00044916668 0 3.2074126e-05 1.713271e-06 2.2306226e-06 10.562691 - 1900 0.00044434475 0 3.1841489e-05 1.4069412e-06 1.6739368e-06 10.540025 - 2000 0.00044011236 0 3.1535369e-05 1.8850064e-06 1.966093e-06 10.508365 - 2100 0.00043343658 0 3.1327313e-05 1.7877497e-06 1.9031224e-06 10.466271 - 2200 0.00043076716 0 3.1141775e-05 2.260934e-06 1.7405179e-06 10.428135 - 2300 0.0004252247 0 3.065038e-05 1.8685672e-06 1.6444209e-06 10.398993 - 2400 0.00042502327 0 3.0356508e-05 1.8748934e-06 1.3329686e-06 10.380644 - 2500 0.00042142831 0 3.0164965e-05 2.1119049e-06 1.7118338e-06 10.366433 - 2600 0.00042131885 0 3.0065244e-05 1.6092748e-06 1.5373156e-06 10.35456 - 2700 0.00042303607 0 3.0011813e-05 1.7496254e-06 1.77836e-06 10.327937 - 2800 0.00042148119 0 2.9849777e-05 1.5035087e-06 1.5374543e-06 10.314085 - 2900 0.00042092112 0 2.9766439e-05 1.2512363e-06 1.417453e-06 10.302572 - 3000 0.00042298628 0 2.985456e-05 1.030367e-06 1.2706193e-06 10.297536 - 3100 0.00042098731 0 2.9773119e-05 1.1020439e-06 1.3236711e-06 10.293938 - 3200 0.00042190155 0 2.975807e-05 1.0825659e-06 1.207615e-06 10.2907 - 3300 0.00041840008 0 2.9573071e-05 1.0027126e-06 1.0591685e-06 10.286562 - 3400 0.00041726315 0 2.9629012e-05 1.3206781e-06 1.0694496e-06 10.280986 - 3500 0.00041553548 0 2.9393577e-05 1.4604125e-06 1.2547784e-06 10.27361 - 3600 0.00041551693 0 2.9122892e-05 1.0944373e-06 9.6499513e-07 10.271632 - 3700 0.00041351569 0 2.8943889e-05 9.6203862e-07 8.3123719e-07 10.270192 - 3800 0.00041419735 0 2.9031969e-05 1.1893061e-06 7.9832166e-07 10.267494 - 3900 0.0004142108 0 2.8912904e-05 1.0049279e-06 9.0628823e-07 10.255442 - 4000 0.00041253668 0 2.8794779e-05 8.3301821e-07 8.2348634e-07 10.250045 - 4100 0.00041245029 0 2.8626953e-05 1.0440229e-06 9.7296445e-07 10.239971 - 4200 0.00041239868 0 2.8576872e-05 8.5677759e-07 9.4929241e-07 10.235114 - 4300 0.0004105539 0 2.845078e-05 7.9007545e-07 9.4314698e-07 10.227559 - 4400 0.00041038071 0 2.8447842e-05 8.3506095e-07 9.403948e-07 10.220363 - 4500 0.0004094738 0 2.8385536e-05 7.4474323e-07 8.9167115e-07 10.214247 - 4600 0.00040931891 0 2.8293128e-05 6.9842277e-07 8.7986292e-07 10.211189 - 4700 0.00040935826 0 2.832743e-05 7.7312621e-07 8.6571149e-07 10.208491 - 4800 0.00040894424 0 2.8290022e-05 7.560957e-07 7.8478084e-07 10.202195 - 4900 0.00040771373 0 2.8211024e-05 8.8835691e-07 7.6981867e-07 10.196816 - 5000 0.0004075835 0 2.8242057e-05 7.9265659e-07 8.5594679e-07 10.18854 - 5100 0.00040629886 0 2.8147996e-05 8.29922e-07 8.2991198e-07 10.186938 - 5200 0.00040615587 0 2.8075206e-05 7.9676977e-07 8.3313535e-07 10.183699 - 5300 0.00040623905 0 2.8061445e-05 8.5454501e-07 8.3464967e-07 10.18154 - 5400 0.00040639649 0 2.8095492e-05 9.219289e-07 8.8970884e-07 10.180281 - 5500 0.00040632069 0 2.8146737e-05 9.5125536e-07 9.2967258e-07 10.179741 - 5600 0.00040615846 0 2.8095814e-05 9.4628277e-07 9.4475909e-07 10.179201 - 5700 0.00040661759 0 2.8056252e-05 9.1418005e-07 9.3869835e-07 10.177942 - 5800 0.00040636342 0 2.7980285e-05 8.7191961e-07 9.4296893e-07 10.177042 - 5900 0.00040517906 0 2.7876934e-05 8.3277579e-07 9.2807515e-07 10.178694 - 6000 0.00040392762 0 2.7828073e-05 8.3950266e-07 9.4521092e-07 10.180166 - 6100 0.00040367162 0 2.7800472e-05 8.720166e-07 1.0332147e-06 10.179806 - 6200 0.00040335119 0 2.7762148e-05 8.5284463e-07 9.3150721e-07 10.179086 - 6300 0.00040340642 0 2.7769051e-05 8.3428098e-07 8.7041896e-07 10.178546 - 6400 0.0004030719 0 2.7741943e-05 7.952126e-07 8.3664709e-07 10.179282 - 6500 0.00040347682 0 2.7744595e-05 7.8058438e-07 8.4639064e-07 10.178382 - 6600 0.00040257759 0 2.7667961e-05 7.8150592e-07 8.5501519e-07 10.179298 - 6700 0.00040217981 0 2.7649415e-05 8.1293625e-07 9.4727792e-07 10.178938 - 6800 0.00040191405 0 2.7693195e-05 8.0894279e-07 1.1604089e-06 10.178938 - 6900 0.00040208358 0 2.7773245e-05 7.9264674e-07 1.1927033e-06 10.178758 - 7000 0.00040239724 0 2.782978e-05 8.330894e-07 1.2084905e-06 10.178758 - 7100 0.00040269303 0 2.7728862e-05 8.1375466e-07 1.0779344e-06 10.178758 - 7200 0.00040227155 0 2.7654709e-05 8.3101678e-07 9.7757461e-07 10.17969 - 7300 0.00040115701 0 2.7604211e-05 8.07161e-07 9.4401828e-07 10.181376 - 7400 0.00039998681 0 2.7528309e-05 7.8970732e-07 9.3464728e-07 10.182703 - 7500 0.00039916281 0 2.7432547e-05 7.9446882e-07 8.9887681e-07 10.182949 -Loop time of 34.6948 on 4 procs for 7500 steps with 11096 atoms - -Performance: 933857.672 tau/day, 216.171 timesteps/s -98.4% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.32481 | 0.33445 | 0.34816 | 1.6 | 0.96 -Bond | 26.728 | 28.076 | 29.753 | 23.9 | 80.92 -Neigh | 0.68094 | 0.72261 | 0.7747 | 4.8 | 2.08 -Comm | 1.5266 | 3.3654 | 4.8309 | 75.3 | 9.70 -Output | 0.018332 | 0.018804 | 0.019756 | 0.4 | 0.05 -Modify | 1.9305 | 2.0147 | 2.1302 | 6.0 | 5.81 -Other | | 0.1631 | | | 0.47 - -Nlocal: 2774.00 ave 2898 max 2701 min -Histogram: 1 1 0 1 0 0 0 0 0 1 -Nghost: 1165.25 ave 1208 max 1142 min -Histogram: 2 0 0 1 0 0 0 0 0 1 -Neighs: 11425.0 ave 12539 max 10556 min -Histogram: 1 0 1 0 1 0 0 0 0 1 - -Total # of neighbors = 45700 -Ave neighs/atom = 4.1186013 -Ave special neighs/atom = 10.184841 -Neighbor list builds = 451 -Dangerous builds = 0 -Total wall time: 0:00:35 From 2804de8c26e2e8ab453be426b44d3e571f211f9e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 13 Apr 2022 12:59:41 -0400 Subject: [PATCH 38/40] fix refactoring bug --- src/BPM/pair_bpm_spring.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BPM/pair_bpm_spring.cpp b/src/BPM/pair_bpm_spring.cpp index cb3b5a7633..c81c06106b 100644 --- a/src/BPM/pair_bpm_spring.cpp +++ b/src/BPM/pair_bpm_spring.cpp @@ -145,7 +145,7 @@ void PairBPMSpring::compute(int eflag, int vflag) void PairBPMSpring::allocate() { allocated = 1; - const int np1 = atom->ntypes; + const int np1 = atom->ntypes + 1; memory->create(setflag, np1, np1, "pair:setflag"); for (int i = 1; i < np1; i++) From c9ab5ebbf5db7504df433ec8666cbdda954ef559 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 13 Apr 2022 12:59:54 -0400 Subject: [PATCH 39/40] cosmetic --- src/BPM/atom_vec_bpm_sphere.cpp | 3 +-- src/GRANULAR/fix_pour.cpp | 3 +-- src/atom.cpp | 3 +-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/BPM/atom_vec_bpm_sphere.cpp b/src/BPM/atom_vec_bpm_sphere.cpp index b5fdefc0d1..360940e4c8 100644 --- a/src/BPM/atom_vec_bpm_sphere.cpp +++ b/src/BPM/atom_vec_bpm_sphere.cpp @@ -37,8 +37,7 @@ AtomVecBPMSphere::AtomVecBPMSphere(LAMMPS *lmp) : AtomVec(lmp) atom->molecule_flag = 1; atom->sphere_flag = 1; - atom->radius_flag = atom->rmass_flag = atom->omega_flag = - atom->torque_flag = atom->quat_flag = 1; + atom->radius_flag = atom->rmass_flag = atom->omega_flag = atom->torque_flag = atom->quat_flag = 1; // strings with peratom variables to include in each AtomVec method // strings cannot contain fields in corresponding AtomVec default strings diff --git a/src/GRANULAR/fix_pour.cpp b/src/GRANULAR/fix_pour.cpp index ddca6269c6..2a25efc6f2 100644 --- a/src/GRANULAR/fix_pour.cpp +++ b/src/GRANULAR/fix_pour.cpp @@ -136,8 +136,7 @@ FixPour::FixPour(LAMMPS *lmp, int narg, char **arg) : error->all(FLERR,"Invalid atom type in fix pour mol command"); if (atom->molecular == Atom::TEMPLATE && onemols != atom->avec->onemols) - error->all(FLERR,"Fix pour molecule template ID must be same " - "as atom style template ID"); + error->all(FLERR,"Fix pour molecule template ID must be same as atom style template ID"); onemols[i]->check_attributes(0); // fix pour uses geoemetric center of molecule for insertion diff --git a/src/atom.cpp b/src/atom.cpp index fad63344eb..7fc126269c 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -1895,8 +1895,7 @@ void Atom::add_molecule(int narg, char **arg) int index = 1; while (true) { molecules = (Molecule **) - memory->srealloc(molecules,(nmolecule+1)*sizeof(Molecule *), - "atom::molecules"); + memory->srealloc(molecules,(nmolecule+1)*sizeof(Molecule *), "atom::molecules"); molecules[nmolecule] = new Molecule(lmp,narg,arg,index); molecules[nmolecule]->nset = 0; molecules[nmolecule-ifile+1]->nset++; From 9424c2558e48134d3b4e34b9874e987d5ad1dcfd Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 13 Apr 2022 21:05:19 -0400 Subject: [PATCH 40/40] enable and apply clang-format. minor cosmetic changes --- src/BPM/atom_vec_bpm_sphere.cpp | 70 +++--- src/BPM/bond_bpm.cpp | 116 +++++----- src/BPM/bond_bpm.h | 28 +-- src/BPM/bond_bpm_rotational.cpp | 368 ++++++++++++++++---------------- src/BPM/bond_bpm_spring.cpp | 142 ++++++------ src/BPM/compute_nbond_atom.cpp | 20 +- src/BPM/fix_nve_bpm_sphere.cpp | 32 ++- src/BPM/pair_bpm_spring.cpp | 2 +- 8 files changed, 367 insertions(+), 411 deletions(-) diff --git a/src/BPM/atom_vec_bpm_sphere.cpp b/src/BPM/atom_vec_bpm_sphere.cpp index 360940e4c8..3b775cdd83 100644 --- a/src/BPM/atom_vec_bpm_sphere.cpp +++ b/src/BPM/atom_vec_bpm_sphere.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -25,11 +24,11 @@ #include using namespace LAMMPS_NS; -using namespace MathConst; +using MathConst::MY_PI; /* ---------------------------------------------------------------------- */ -AtomVecBPMSphere::AtomVecBPMSphere(LAMMPS *lmp) : AtomVec(lmp) +AtomVecBPMSphere::AtomVecBPMSphere(LAMMPS *_lmp) : AtomVec(_lmp) { mass_type = PER_ATOM; molecular = Atom::MOLECULAR; @@ -44,23 +43,23 @@ AtomVecBPMSphere::AtomVecBPMSphere(LAMMPS *lmp) : AtomVec(lmp) // order of fields in a string does not matter // except: fields_data_atom & fields_data_vel must match data file - fields_grow = (char *) - "molecule num_bond bond_type bond_atom nspecial special radius rmass omega torque quat"; - fields_copy = (char *) - "molecule num_bond bond_type bond_atom nspecial special radius rmass omega quat"; - fields_comm = (char *) ""; - fields_comm_vel = (char *) "omega quat"; - fields_reverse = (char *) "torque"; - fields_border = (char *) "molecule radius rmass"; + // clang-format off + fields_grow = (char *) "molecule num_bond bond_type bond_atom nspecial special radius rmass " + "omega torque quat"; + fields_copy = (char *) "molecule num_bond bond_type bond_atom nspecial special radius rmass " + "omega quat"; + fields_comm = (char *) ""; + fields_comm_vel = (char *) "omega quat"; + fields_reverse = (char *) "torque"; + fields_border = (char *) "molecule radius rmass"; fields_border_vel = (char *) "molecule radius rmass omega quat"; - fields_exchange = (char *) - "molecule num_bond bond_type bond_atom nspecial special radius rmass omega quat"; - fields_restart = (char *) - "molecule num_bond bond_type bond_atom radius rmass omega quat"; - fields_create = (char *) - "molecule num_bond nspecial radius rmass omega quat"; - fields_data_atom = (char *) "id molecule type radius rmass x"; - fields_data_vel = (char *) "id v omega"; + fields_exchange = (char *) "molecule num_bond bond_type bond_atom nspecial special radius rmass " + "omega quat"; + fields_restart = (char *) "molecule num_bond bond_type bond_atom radius rmass omega quat"; + fields_create = (char *) "molecule num_bond nspecial radius rmass omega quat"; + fields_data_atom = (char *) "id molecule type radius rmass x"; + fields_data_vel = (char *) "id v omega"; + // clang-format on bond_per_atom = 0; bond_negative = NULL; @@ -73,14 +72,12 @@ AtomVecBPMSphere::AtomVecBPMSphere(LAMMPS *lmp) : AtomVec(lmp) void AtomVecBPMSphere::process_args(int narg, char **arg) { - if (narg != 0 && narg != 1) - error->all(FLERR,"Illegal atom_style bpm/sphere command"); + if (narg != 0 && narg != 1) error->all(FLERR, "Illegal atom_style bpm/sphere command"); radvary = 0; if (narg == 1) { - radvary = utils::numeric(FLERR,arg[0],true,lmp); - if (radvary < 0 || radvary > 1) - error->all(FLERR,"Illegal atom_style bpm/sphere command"); + radvary = utils::numeric(FLERR, arg[0], true, lmp); + if (radvary < 0 || radvary > 1) error->all(FLERR, "Illegal atom_style bpm/sphere command"); } // dynamic particle radius and mass must be communicated every step @@ -104,11 +101,10 @@ void AtomVecBPMSphere::init() // check if optional radvary setting should have been set to 1 for (int i = 0; i < modify->nfix; i++) - if (strcmp(modify->fix[i]->style,"adapt") == 0) { + if (strcmp(modify->fix[i]->style, "adapt") == 0) { FixAdapt *fix = (FixAdapt *) modify->fix[i]; if (fix->diamflag && radvary == 0) - error->all(FLERR,"Fix adapt changes particle radii " - "but atom_style bpm/sphere is not dynamic"); + error->all(FLERR, "Fix adapt changes atom radii but atom_style bpm/sphere is not dynamic"); } } @@ -129,7 +125,6 @@ void AtomVecBPMSphere::grow_pointers() nspecial = atom->nspecial; } - /* ---------------------------------------------------------------------- initialize non-zero atom quantities ------------------------------------------------------------------------- */ @@ -137,13 +132,12 @@ void AtomVecBPMSphere::grow_pointers() void AtomVecBPMSphere::create_atom_post(int ilocal) { radius[ilocal] = 0.5; - rmass[ilocal] = 4.0*MY_PI/3.0 * 0.5*0.5*0.5; + rmass[ilocal] = 4.0 * MY_PI / 3.0 * 0.5 * 0.5 * 0.5; quat[ilocal][0] = 1.0; quat[ilocal][1] = 0.0; quat[ilocal][2] = 0.0; quat[ilocal][3] = 0.0; - } /* ---------------------------------------------------------------------- @@ -155,7 +149,7 @@ void AtomVecBPMSphere::pack_restart_pre(int ilocal) // insure bond_negative vector is needed length if (bond_per_atom < atom->bond_per_atom) { - delete [] bond_negative; + delete[] bond_negative; bond_per_atom = atom->bond_per_atom; bond_negative = new int[bond_per_atom]; } @@ -168,7 +162,8 @@ void AtomVecBPMSphere::pack_restart_pre(int ilocal) bond_negative[m] = 1; bond_type[ilocal][m] = -bond_type[ilocal][m]; any_bond_negative = 1; - } else bond_negative[m] = 0; + } else + bond_negative[m] = 0; } } @@ -206,11 +201,9 @@ void AtomVecBPMSphere::data_atom_post(int ilocal) { radius_one = 0.5 * atom->radius[ilocal]; radius[ilocal] = radius_one; - if (radius_one > 0.0) - rmass[ilocal] *= 4.0*MY_PI/3.0 * radius_one*radius_one*radius_one; + if (radius_one > 0.0) rmass[ilocal] *= 4.0 * MY_PI / 3.0 * radius_one * radius_one * radius_one; - if (rmass[ilocal] <= 0.0) - error->one(FLERR,"Invalid density in Atoms section of data file"); + if (rmass[ilocal] <= 0.0) error->one(FLERR, "Invalid density in Atoms section of data file"); omega[ilocal][0] = 0.0; omega[ilocal][1] = 0.0; @@ -237,9 +230,8 @@ void AtomVecBPMSphere::pack_data_pre(int ilocal) rmass_one = rmass[ilocal]; radius[ilocal] *= 2.0; - if (radius_one!= 0.0) - rmass[ilocal] = - rmass_one / (4.0*MY_PI/3.0 * radius_one*radius_one*radius_one); + if (radius_one != 0.0) + rmass[ilocal] = rmass_one / (4.0 * MY_PI / 3.0 * radius_one * radius_one * radius_one); } /* ---------------------------------------------------------------------- diff --git a/src/BPM/bond_bpm.cpp b/src/BPM/bond_bpm.cpp index 431a44b280..b019815cfa 100644 --- a/src/BPM/bond_bpm.cpp +++ b/src/BPM/bond_bpm.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -25,29 +24,22 @@ #include "modify.h" #include "update.h" -#include #include using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -BondBPM::BondBPM(LAMMPS *lmp) : Bond(lmp) -{ - id_fix_dummy = nullptr; - id_fix_dummy2 = nullptr; - id_fix_store_local = nullptr; - id_fix_bond_history = nullptr; - id_fix_prop_atom = nullptr; - id_fix_update = nullptr; - fix_store_local = nullptr; - fix_bond_history = nullptr; +BondBPM::BondBPM(LAMMPS *_lmp) : + Bond(_lmp), id_fix_dummy(nullptr), id_fix_dummy2(nullptr), id_fix_update(nullptr), + id_fix_bond_history(nullptr), id_fix_store_local(nullptr), id_fix_prop_atom(nullptr), + fix_store_local(nullptr), fix_bond_history(nullptr), fix_update_special_bonds(nullptr), + pack_choice(nullptr), output_data(nullptr) +{ overlay_flag = 0; prop_atom_flag = 0; nvalues = 0; - output_data = nullptr; - pack_choice = nullptr; r0_max_estimate = 0.0; max_stretch = 1.0; @@ -99,11 +91,11 @@ void BondBPM::init_style() fix_store_local->nvalues = nvalues; } - if (overlay_flag) { if (force->special_lj[1] != 1.0) - error->all(FLERR, "With overlay/pair, BPM bond styles " - "require special_bonds weight of 1.0 for first neighbors"); + error->all(FLERR, + "With overlay/pair, BPM bond styles require special_bonds weight of 1.0 for " + "first neighbors"); if (id_fix_update) { modify->delete_fix(id_fix_update); delete[] id_fix_update; @@ -112,36 +104,37 @@ void BondBPM::init_style() } else { // Require atoms know about all of their bonds and if they break if (force->newton_bond) - error->all(FLERR,"Without overlay/pair, BPM bond styles require Newton bond off"); + error->all(FLERR, "Without overlay/pair, BPM bond styles require Newton bond off"); // special lj must be 0 1 1 to censor pair forces between bonded particles // special coulomb must be 1 1 1 to ensure all pairs are included in the // neighbor list and 1-3 and 1-4 special bond lists are skipped - if (force->special_lj[1] != 0.0 || force->special_lj[2] != 1.0 || - force->special_lj[3] != 1.0) - error->all(FLERR,"Without overlay/pair, BPM bond sytles requires special LJ weights = 0,1,1"); + if (force->special_lj[1] != 0.0 || force->special_lj[2] != 1.0 || force->special_lj[3] != 1.0) + error->all(FLERR, + "Without overlay/pair, BPM bond sytles requires special LJ weights = 0,1,1"); if (force->special_coul[1] != 1.0 || force->special_coul[2] != 1.0 || force->special_coul[3] != 1.0) - error->all(FLERR,"Without overlay/pair, BPM bond sytles requires special Coulomb weights = 1,1,1"); + error->all(FLERR, + "Without overlay/pair, BPM bond sytles requires special Coulomb weights = 1,1,1"); if (id_fix_dummy) { id_fix_update = utils::strdup("BPM_UPDATE_SPECIAL_BONDS"); fix_update_special_bonds = dynamic_cast(modify->replace_fix( - id_fix_dummy,fmt::format("{} all UPDATE_SPECIAL_BONDS", id_fix_update),1)); + id_fix_dummy, fmt::format("{} all UPDATE_SPECIAL_BONDS", id_fix_update), 1)); delete[] id_fix_dummy; id_fix_dummy = nullptr; } } if (force->angle || force->dihedral || force->improper) - error->all(FLERR,"Bond style bpm cannot be used with 3,4-body interactions"); + error->all(FLERR, "Bond style bpm cannot be used with 3,4-body interactions"); if (atom->molecular == 2) - error->all(FLERR,"Bond style bpm cannot be used with atom style template"); + error->all(FLERR, "Bond style bpm cannot be used with atom style template"); // special 1-3 and 1-4 weights must be 1 to prevent building 1-3 and 1-4 special bond lists - if (force->special_lj[2] != 1.0 || force->special_lj[3] != 1.0 || - force->special_coul[2] != 1.0 || force->special_coul[3] != 1.0) - error->all(FLERR,"Bond style bpm requires 1-3 and 1-4 special weights of 1.0"); + if (force->special_lj[2] != 1.0 || force->special_lj[3] != 1.0 || force->special_coul[2] != 1.0 || + force->special_coul[3] != 1.0) + error->all(FLERR, "Bond style bpm requires 1-3 and 1-4 special weights of 1.0"); } /* ---------------------------------------------------------------------- @@ -160,8 +153,8 @@ void BondBPM::settings(int narg, char **arg) while (iarg < narg) { if (strcmp(arg[iarg], "store/local") == 0) { nvalues = 0; - id_fix_store_local = utils::strdup(arg[iarg+1]); - store_local_freq = utils::inumeric(FLERR, arg[iarg+2], false, lmp); + id_fix_store_local = utils::strdup(arg[iarg + 1]); + store_local_freq = utils::inumeric(FLERR, arg[iarg + 2], false, lmp); pack_choice = new FnPtrPack[narg - iarg - 1]; iarg += 3; while (iarg < narg) { @@ -189,14 +182,14 @@ void BondBPM::settings(int narg, char **arg) } else { break; } - iarg ++; + iarg++; } } else if (strcmp(arg[iarg], "overlay/pair") == 0) { overlay_flag = 1; - iarg ++; + iarg++; } else { leftover_iarg.push_back(iarg); - iarg ++; + iarg++; } } @@ -208,8 +201,8 @@ void BondBPM::settings(int narg, char **arg) auto ifix = modify->get_fix_by_id(id_fix_store_local); if (!ifix) - ifix = modify->add_fix(fmt::format("{} all STORE_LOCAL {} {}", - id_fix_store_local, store_local_freq, nvalues)); + ifix = modify->add_fix( + fmt::format("{} all STORE_LOCAL {} {}", id_fix_store_local, store_local_freq, nvalues)); fix_store_local = dynamic_cast(ifix); // Use property/atom to save reference positions as it can transfer to ghost atoms @@ -238,7 +231,7 @@ void BondBPM::settings(int narg, char **arg) delete[] z_ref_id; if (ifix->restart_reset) { - ifix->restart_reset = 0; + ifix->restart_reset = 0; } else { double *x_ref = atom->dvector[index_x_ref]; double *y_ref = atom->dvector[index_y_ref]; @@ -266,34 +259,31 @@ double BondBPM::equilibrium_distance(int /*i*/) int type, j; double delx, dely, delz, r; double **x = atom->x; - for (int i = 0; i < atom->nlocal; i ++) { - for (int m = 0; m < atom->num_bond[i]; m ++) { + for (int i = 0; i < atom->nlocal; i++) { + for (int m = 0; m < atom->num_bond[i]; m++) { type = atom->bond_type[i][m]; if (type == 0) continue; j = atom->map(atom->bond_atom[i][m]); - if(j == -1) continue; + if (j == -1) continue; delx = x[i][0] - x[j][0]; dely = x[i][1] - x[j][1]; delz = x[i][2] - x[j][2]; domain->minimum_image(delx, dely, delz); - r = sqrt(delx*delx + dely*dely + delz*delz); - if(r > r0_max_estimate) r0_max_estimate = r; + r = sqrt(delx * delx + dely * dely + delz * delz); + if (r > r0_max_estimate) r0_max_estimate = r; } } double temp; - MPI_Allreduce(&r0_max_estimate,&temp,1,MPI_DOUBLE,MPI_MAX,world); + MPI_Allreduce(&r0_max_estimate, &temp, 1, MPI_DOUBLE, MPI_MAX, world); r0_max_estimate = temp; - - //if (comm->me == 0) - // utils::logmesg(lmp,fmt::format("Estimating longest bond = {}\n",r0_max_estimate)); } // Divide out heuristic prefactor added in comm class - return max_stretch*r0_max_estimate/1.5; + return max_stretch * r0_max_estimate / 1.5; } /* ---------------------------------------------------------------------- */ @@ -301,14 +291,12 @@ double BondBPM::equilibrium_distance(int /*i*/) void BondBPM::process_broken(int i, int j) { if (fix_store_local) { - for (int n = 0; n < nvalues; n++) - (this->*pack_choice[n])(n, i, j); + for (int n = 0; n < nvalues; n++) (this->*pack_choice[n])(n, i, j); fix_store_local->add_data(output_data, i, j); } - if (fix_update_special_bonds) - fix_update_special_bonds->add_broken_bond(i, j); + if (fix_update_special_bonds) fix_update_special_bonds->add_broken_bond(i, j); // Manually search and remove from atom arrays // need to remove in case special bonds arrays rebuilt @@ -325,10 +313,10 @@ void BondBPM::process_broken(int i, int j) if (bond_atom[i][m] == tag[j]) { bond_type[i][m] = 0; n = num_bond[i]; - bond_type[i][m] = bond_type[i][n-1]; - bond_atom[i][m] = bond_atom[i][n-1]; - fix_bond_history->shift_history(i, m, n-1); - fix_bond_history->delete_history(i, n-1); + bond_type[i][m] = bond_type[i][n - 1]; + bond_atom[i][m] = bond_atom[i][n - 1]; + fix_bond_history->shift_history(i, m, n - 1); + fix_bond_history->delete_history(i, n - 1); num_bond[i]--; break; } @@ -340,10 +328,10 @@ void BondBPM::process_broken(int i, int j) if (bond_atom[j][m] == tag[i]) { bond_type[j][m] = 0; n = num_bond[j]; - bond_type[j][m] = bond_type[j][n-1]; - bond_atom[j][m] = bond_atom[j][n-1]; - fix_bond_history->shift_history(j, m, n-1); - fix_bond_history->delete_history(j, n-1); + bond_type[j][m] = bond_type[j][n - 1]; + bond_atom[j][m] = bond_atom[j][n - 1]; + fix_bond_history->shift_history(j, m, n - 1); + fix_bond_history->delete_history(j, n - 1); num_bond[j]--; break; } @@ -383,7 +371,7 @@ void BondBPM::pack_time(int n, int /*i*/, int /*j*/) void BondBPM::pack_x(int n, int i, int j) { double **x = atom->x; - output_data[n] = (x[i][0] + x[j][0])*0.5; + output_data[n] = (x[i][0] + x[j][0]) * 0.5; } /* ---------------------------------------------------------------------- */ @@ -391,7 +379,7 @@ void BondBPM::pack_x(int n, int i, int j) void BondBPM::pack_y(int n, int i, int j) { double **x = atom->x; - output_data[n] = (x[i][1] + x[j][1])*0.5; + output_data[n] = (x[i][1] + x[j][1]) * 0.5; } /* ---------------------------------------------------------------------- */ @@ -399,7 +387,7 @@ void BondBPM::pack_y(int n, int i, int j) void BondBPM::pack_z(int n, int i, int j) { double **x = atom->x; - output_data[n] = (x[i][2] + x[j][2])*0.5; + output_data[n] = (x[i][2] + x[j][2]) * 0.5; } /* ---------------------------------------------------------------------- */ @@ -407,7 +395,7 @@ void BondBPM::pack_z(int n, int i, int j) void BondBPM::pack_x_ref(int n, int i, int j) { double *x = atom->dvector[index_x_ref]; - output_data[n] = (x[i] + x[j])*0.5; + output_data[n] = (x[i] + x[j]) * 0.5; } /* ---------------------------------------------------------------------- */ @@ -415,7 +403,7 @@ void BondBPM::pack_x_ref(int n, int i, int j) void BondBPM::pack_y_ref(int n, int i, int j) { double *y = atom->dvector[index_y_ref]; - output_data[n] = (y[i] + y[j])*0.5; + output_data[n] = (y[i] + y[j]) * 0.5; } /* ---------------------------------------------------------------------- */ @@ -423,5 +411,5 @@ void BondBPM::pack_y_ref(int n, int i, int j) void BondBPM::pack_z_ref(int n, int i, int j) { double *z = atom->dvector[index_z_ref]; - output_data[n] = (z[i] + z[j])*0.5; + output_data[n] = (z[i] + z[j]) * 0.5; } diff --git a/src/BPM/bond_bpm.h b/src/BPM/bond_bpm.h index 271228bab2..ca9eb4f846 100644 --- a/src/BPM/bond_bpm.h +++ b/src/BPM/bond_bpm.h @@ -29,9 +29,9 @@ class BondBPM : public Bond { void init_style() override; void settings(int, char **) override; double equilibrium_distance(int) override; - void write_restart(FILE *) override {}; - void read_restart(FILE *) override {}; - void write_data(FILE *) override {}; + void write_restart(FILE *) override{}; + void read_restart(FILE *) override{}; + void write_data(FILE *) override{}; double single(int, double, int, int, double &) override = 0; protected: @@ -49,22 +49,22 @@ class BondBPM : public Bond { class FixUpdateSpecialBonds *fix_update_special_bonds; void process_broken(int, int); - typedef void (BondBPM::*FnPtrPack)(int,int,int); - FnPtrPack *pack_choice; // ptrs to pack functions + typedef void (BondBPM::*FnPtrPack)(int, int, int); + FnPtrPack *pack_choice; // ptrs to pack functions double *output_data; int prop_atom_flag, nvalues, overlay_flag; int index_x_ref, index_y_ref, index_z_ref; - void pack_id1(int,int,int); - void pack_id2(int,int,int); - void pack_time(int,int,int); - void pack_x(int,int,int); - void pack_y(int,int,int); - void pack_z(int,int,int); - void pack_x_ref(int,int,int); - void pack_y_ref(int,int,int); - void pack_z_ref(int,int,int); + void pack_id1(int, int, int); + void pack_id2(int, int, int); + void pack_time(int, int, int); + void pack_x(int, int, int); + void pack_y(int, int, int); + void pack_z(int, int, int); + void pack_x_ref(int, int, int); + void pack_y_ref(int, int, int); + void pack_z_ref(int, int, int); }; } // namespace LAMMPS_NS diff --git a/src/BPM/bond_bpm_rotational.cpp b/src/BPM/bond_bpm_rotational.cpp index 4b07afec11..a43b4c7500 100644 --- a/src/BPM/bond_bpm_rotational.cpp +++ b/src/BPM/bond_bpm_rotational.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -31,11 +30,10 @@ #define EPSILON 1e-10 using namespace LAMMPS_NS; -using namespace MathExtra; /* ---------------------------------------------------------------------- */ -BondBPMRotational::BondBPMRotational(LAMMPS *lmp) : BondBPM(lmp) +BondBPMRotational::BondBPMRotational(LAMMPS *_lmp) : BondBPM(_lmp) { Kr = nullptr; Ks = nullptr; @@ -87,7 +85,7 @@ double BondBPMRotational::acos_limit(double c) Store data for a single bond - if bond added after LAMMPS init (e.g. pour) ------------------------------------------------------------------------- */ -double BondBPMRotational::store_bond(int n,int i,int j) +double BondBPMRotational::store_bond(int n, int i, int j) { double delx, dely, delz, r, rinv; double **x = atom->x; @@ -104,32 +102,32 @@ double BondBPMRotational::store_bond(int n,int i,int j) delz = x[j][2] - x[i][2]; } - r = sqrt(delx*delx + dely*dely + delz*delz); - rinv = 1.0/r; + r = sqrt(delx * delx + dely * dely + delz * delz); + rinv = 1.0 / r; bondstore[n][0] = r; - bondstore[n][1] = delx*rinv; - bondstore[n][2] = dely*rinv; - bondstore[n][3] = delz*rinv; + bondstore[n][1] = delx * rinv; + bondstore[n][2] = dely * rinv; + bondstore[n][3] = delz * rinv; if (i < atom->nlocal) { - for (int m = 0; m < atom->num_bond[i]; m ++) { + 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, delx*rinv); - fix_bond_history->update_atom_value(i, m, 2, dely*rinv); - fix_bond_history->update_atom_value(i, m, 3, delz*rinv); + fix_bond_history->update_atom_value(i, m, 1, delx * rinv); + fix_bond_history->update_atom_value(i, m, 2, dely * rinv); + fix_bond_history->update_atom_value(i, m, 3, delz * rinv); } } } if (j < atom->nlocal) { - for (int m = 0; m < atom->num_bond[j]; m ++) { + 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, delx*rinv); - fix_bond_history->update_atom_value(j, m, 2, dely*rinv); - fix_bond_history->update_atom_value(j, m, 3, delz*rinv); + fix_bond_history->update_atom_value(j, m, 1, delx * rinv); + fix_bond_history->update_atom_value(j, m, 2, dely * rinv); + fix_bond_history->update_atom_value(j, m, 3, delz * rinv); } } } @@ -149,19 +147,19 @@ void BondBPMRotational::store_data() int **bond_type = atom->bond_type; tagint *tag = atom->tag; - for (i = 0; i < atom->nlocal; i ++) { - for (m = 0; m < atom->num_bond[i]; m ++) { + 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; + if (type < 0) continue; // map to find index n for tag j = atom->map(atom->bond_atom[i][m]); - if(j == -1) error->one(FLERR, "Atom missing in BPM bond"); + if (j == -1) error->one(FLERR, "Atom missing in BPM bond"); // Save orientation as pointing towards small tag - if(tag[i] < tag[j]){ + if (tag[i] < tag[j]) { delx = x[i][0] - x[j][0]; dely = x[i][1] - x[j][1]; delz = x[i][2] - x[j][2]; @@ -173,13 +171,13 @@ void BondBPMRotational::store_data() // Get closest image in case bonded with ghost domain->minimum_image(delx, dely, delz); - r = sqrt(delx*delx + dely*dely + delz*delz); - rinv = 1.0/r; + r = sqrt(delx * delx + dely * dely + delz * delz); + rinv = 1.0 / r; fix_bond_history->update_atom_value(i, m, 0, r); - fix_bond_history->update_atom_value(i, m, 1, delx*rinv); - fix_bond_history->update_atom_value(i, m, 2, dely*rinv); - fix_bond_history->update_atom_value(i, m, 3, delz*rinv); + fix_bond_history->update_atom_value(i, m, 1, delx * rinv); + fix_bond_history->update_atom_value(i, m, 2, dely * rinv); + fix_bond_history->update_atom_value(i, m, 3, delz * rinv); } } @@ -200,7 +198,7 @@ double BondBPMRotational::elastic_forces(int i1, int i2, int type, double &Fr, d double breaking, temp, r0_dot_rb, c, gamma; double psi, theta, cos_phi, sin_phi; double mag_in_plane, mag_out_plane; - double Fs_mag, Tt_mag, Tb_mag; + double Fs_mag, Tt_mag, Tb_mag; double q1[4], q2[4]; double q2inv[4], mq[4], mqinv[4], qp21[4], q21[4], qtmp[4]; @@ -223,39 +221,39 @@ double BondBPMRotational::elastic_forces(int i1, int i2, int type, double &Fr, d // Calculate normal forces, rb = bond vector in particle 1's frame MathExtra::qconjugate(q2, q2inv); MathExtra::quatrotvec(q2inv, r, rb); - Fr = Kr[type]*(r_mag - r0_mag); + Fr = Kr[type] * (r_mag - r0_mag); - MathExtra::scale3(Fr*r_mag_inv, rb, F_rot); + MathExtra::scale3(Fr * r_mag_inv, rb, F_rot); // Calculate forces due to tangential displacements (no rotation) - r0_dot_rb = dot3(r0, rb); - c = r0_dot_rb*r_mag_inv/r0_mag; + r0_dot_rb = MathExtra::dot3(r0, rb); + c = r0_dot_rb * r_mag_inv / r0_mag; gamma = acos_limit(c); MathExtra::cross3(rb, r0, rb_x_r0); MathExtra::cross3(rb, rb_x_r0, s); MathExtra::norm3(s); - MathExtra::scale3(Ks[type]*r_mag*gamma, s, Fs); + MathExtra::scale3(Ks[type] * r_mag * gamma, s, Fs); // Calculate torque due to tangential displacements MathExtra::cross3(r0, rb, t); MathExtra::norm3(t); - MathExtra::scale3(0.5*r_mag*Ks[type]*r_mag*gamma, t, Ts); + MathExtra::scale3(0.5 * r_mag * Ks[type] * r_mag * gamma, t, Ts); // Relative rotation force/torque // Use representation of X'Y'Z' rotations from Wang, Mora 2009 temp = r_mag + rb[2]; if (temp < 0.0) temp = 0.0; - mq[0] = sqrt(2)*0.5*sqrt(temp*r_mag_inv); + mq[0] = sqrt(2) * 0.5 * sqrt(temp * r_mag_inv); - temp = sqrt(rb[0]*rb[0]+rb[1]*rb[1]); + temp = sqrt(rb[0] * rb[0] + rb[1] * rb[1]); if (temp != 0.0) { - mq[1] = -sqrt(2)*0.5/temp; + mq[1] = -sqrt(2) * 0.5 / temp; temp = r_mag - rb[2]; if (temp < 0.0) temp = 0.0; - mq[1] *= sqrt(temp*r_mag_inv); + mq[1] *= sqrt(temp * r_mag_inv); mq[2] = -mq[1]; mq[1] *= rb[1]; mq[2] *= rb[0]; @@ -270,32 +268,31 @@ double BondBPMRotational::elastic_forces(int i1, int i2, int type, double &Fr, d // q21 = opposite of r_21 in Wang MathExtra::quatquat(q2inv, q1, qp21); MathExtra::qconjugate(mq, mqinv); - MathExtra::quatquat(mqinv,qp21,qtmp); - MathExtra::quatquat(qtmp,mq,q21); + MathExtra::quatquat(mqinv, qp21, qtmp); + MathExtra::quatquat(qtmp, mq, q21); - temp = sqrt(q21[0]*q21[0] + q21[3]*q21[3]); + temp = sqrt(q21[0] * q21[0] + q21[3] * q21[3]); if (temp != 0.0) { - c = q21[0]/temp; - psi = 2.0*acos_limit(c); + c = q21[0] / temp; + psi = 2.0 * acos_limit(c); } else { c = 0.0; psi = 0.0; } // Map negative rotations - if (q21[3] < 0.0) // sin = q21[3]/temp + if (q21[3] < 0.0) // sin = q21[3]/temp psi = -psi; - if (q21[3] == 0.0) - psi = 0.0; + if (q21[3] == 0.0) psi = 0.0; - c = q21[0]*q21[0] - q21[1]*q21[1] - q21[2]*q21[2] + q21[3]*q21[3]; + c = q21[0] * q21[0] - q21[1] * q21[1] - q21[2] * q21[2] + q21[3] * q21[3]; theta = acos_limit(c); // Separately calculte magnitude of quaternion in x-y and out of x-y planes // to avoid dividing by zero - mag_out_plane = (q21[0]*q21[0] + q21[3]*q21[3]); - mag_in_plane = (q21[1]*q21[1] + q21[2]*q21[2]); + mag_out_plane = (q21[0] * q21[0] + q21[3] * q21[3]); + mag_in_plane = (q21[1] * q21[1] + q21[2] * q21[2]); if (mag_in_plane == 0.0) { // No rotation => no bending/shear torque or extra shear force @@ -304,31 +301,31 @@ double BondBPMRotational::elastic_forces(int i1, int i2, int type, double &Fr, d sin_phi = 0.0; } else if (mag_out_plane == 0.0) { // Calculate angle in plane - cos_phi = q21[2]/sqrt(mag_in_plane); - sin_phi = -q21[1]/sqrt(mag_in_plane); + cos_phi = q21[2] / sqrt(mag_in_plane); + sin_phi = -q21[1] / sqrt(mag_in_plane); } else { // Default equations in Mora, Wang 2009 - cos_phi = q21[1]*q21[3] + q21[0]*q21[2]; - sin_phi = q21[2]*q21[3] - q21[0]*q21[1]; + cos_phi = q21[1] * q21[3] + q21[0] * q21[2]; + sin_phi = q21[2] * q21[3] - q21[0] * q21[1]; - cos_phi /= sqrt(mag_out_plane*mag_in_plane); - sin_phi /= sqrt(mag_out_plane*mag_in_plane); + cos_phi /= sqrt(mag_out_plane * mag_in_plane); + sin_phi /= sqrt(mag_out_plane * mag_in_plane); } - Tbp[0] = -Kb[type]*theta*sin_phi; - Tbp[1] = Kb[type]*theta*cos_phi; + Tbp[0] = -Kb[type] * theta * sin_phi; + Tbp[1] = Kb[type] * theta * cos_phi; Tbp[2] = 0.0; Ttp[0] = 0.0; Ttp[1] = 0.0; - Ttp[2] = Kt[type]*psi; + Ttp[2] = Kt[type] * psi; - Fsp[0] = -0.5*Ks[type]*r_mag*theta*cos_phi; - Fsp[1] = -0.5*Ks[type]*r_mag*theta*sin_phi; + Fsp[0] = -0.5 * Ks[type] * r_mag * theta * cos_phi; + Fsp[1] = -0.5 * Ks[type] * r_mag * theta * sin_phi; Fsp[2] = 0.0; - Tsp[0] = 0.25*Ks[type]*r_mag*r_mag*theta*sin_phi; - Tsp[1] = -0.25*Ks[type]*r_mag*r_mag*theta*cos_phi; + Tsp[0] = 0.25 * Ks[type] * r_mag * r_mag * theta * sin_phi; + Tsp[1] = -0.25 * Ks[type] * r_mag * r_mag * theta * cos_phi; Tsp[2] = 0.0; // Rotate forces/torques back to 1st particle's frame @@ -363,7 +360,7 @@ double BondBPMRotational::elastic_forces(int i1, int i2, int type, double &Fr, d Tt_mag = MathExtra::len3(Tt); Tb_mag = MathExtra::len3(Tb); - breaking = Fr/Fcr[type] + Fs_mag/Fcs[type] + Tb_mag/Tcb[type] + Tt_mag/Tct[type]; + breaking = Fr / Fcr[type] + Fs_mag / Fcs[type] + Tb_mag / Tcb[type] + Tt_mag / Tct[type]; if (breaking < 0.0) breaking = 0.0; return breaking; @@ -375,9 +372,9 @@ double BondBPMRotational::elastic_forces(int i1, int i2, int type, double &Fr, d Note: n points towards 1 vs pointing towards 2 ---------------------------------------------------------------------- */ -void BondBPMRotational::damping_forces(int i1, int i2, int type, double& Fr, - double* rhat, double* r, double* force1on2, double* torque1on2, - double* torque2on1) +void BondBPMRotational::damping_forces(int i1, int i2, int type, double &Fr, double *rhat, + double *r, double *force1on2, double *torque1on2, + double *torque2on1) { double v1dotr, v2dotr, w1dotr, w2dotr; double s1[3], s2[3], tdamp[3], tmp[3]; @@ -388,8 +385,8 @@ void BondBPMRotational::damping_forces(int i1, int i2, int type, double& Fr, double **omega = atom->omega; // Damp normal velocity difference - v1dotr = MathExtra::dot3(v[i1],rhat); - v2dotr = MathExtra::dot3(v[i2],rhat); + v1dotr = MathExtra::dot3(v[i1], rhat); + v2dotr = MathExtra::dot3(v[i2], rhat); MathExtra::scale3(v1dotr, rhat, vn1); MathExtra::scale3(v2dotr, rhat, vn2); @@ -408,18 +405,18 @@ void BondBPMRotational::damping_forces(int i1, int i2, int type, double& Fr, MathExtra::cross3(omega[i1], r, s1); MathExtra::scale3(-0.5, s1); - MathExtra::sub3(s1, tmp, s1); // Eq 12 + MathExtra::sub3(s1, tmp, s1); // Eq 12 MathExtra::cross3(omega[i2], r, s2); - MathExtra::scale3(0.5,s2); - MathExtra::add3(s2, tmp, s2); // Eq 13 + MathExtra::scale3(0.5, s2); + MathExtra::add3(s2, tmp, s2); // Eq 13 MathExtra::sub3(s1, s2, tmp); MathExtra::scale3(gslide[type], tmp); MathExtra::add3(force1on2, tmp, force1on2); // Apply corresponding torque - MathExtra::cross3(r,tmp,tdamp); + MathExtra::cross3(r, tmp, tdamp); MathExtra::scale3(0.5, tdamp); MathExtra::add3(torque1on2, tdamp, torque1on2); MathExtra::add3(torque2on1, tdamp, torque2on1); @@ -427,23 +424,23 @@ void BondBPMRotational::damping_forces(int i1, int i2, int type, double& Fr, // Damp rolling MathExtra::cross3(omega[i1], rhat, wxn1); MathExtra::cross3(omega[i2], rhat, wxn2); - MathExtra::sub3(wxn1, wxn2, vroll); // Eq. 31 + MathExtra::sub3(wxn1, wxn2, vroll); // Eq. 31 MathExtra::cross3(r, vroll, tdamp); - MathExtra::scale3(0.5*groll[type], tdamp); + MathExtra::scale3(0.5 * groll[type], tdamp); MathExtra::add3(torque1on2, tdamp, torque1on2); MathExtra::scale3(-1.0, tdamp); MathExtra::add3(torque2on1, tdamp, torque2on1); // Damp twist - w1dotr = MathExtra::dot3(omega[i1],rhat); - w2dotr = MathExtra::dot3(omega[i2],rhat); + w1dotr = MathExtra::dot3(omega[i1], rhat); + w2dotr = MathExtra::dot3(omega[i2], rhat); MathExtra::scale3(w1dotr, rhat, wn1); MathExtra::scale3(w2dotr, rhat, wn2); - MathExtra::sub3(wn1, wn2, tdamp); // Eq. 38 - MathExtra::scale3(0.5*gtwist[type], tdamp); + MathExtra::sub3(wn1, wn2, tdamp); // Eq. 38 + MathExtra::scale3(0.5 * gtwist[type], tdamp); MathExtra::add3(torque1on2, tdamp, torque1on2); MathExtra::scale3(-1.0, tdamp); MathExtra::add3(torque2on1, tdamp, torque2on1); @@ -454,18 +451,18 @@ void BondBPMRotational::damping_forces(int i1, int i2, int type, double& Fr, void BondBPMRotational::compute(int eflag, int vflag) { - if (! fix_bond_history->stored_flag) { + if (!fix_bond_history->stored_flag) { fix_bond_history->stored_flag = true; store_data(); } - int i1,i2,itmp,n,type; + int i1, i2, itmp, n, type; double r[3], r0[3], rhat[3]; double rsq, r0_mag, r_mag, r_mag_inv; double Fr, breaking, smooth; double force1on2[3], torque1on2[3], torque2on1[3]; - ev_init(eflag,vflag); + ev_init(eflag, vflag); double **x = atom->x; double **f = atom->f; @@ -499,8 +496,7 @@ void BondBPMRotational::compute(int eflag, int vflag) } // If bond hasn't been set - should be initialized to zero - if (r0_mag < EPSILON || std::isnan(r0_mag)) - r0_mag = store_bond(n,i1,i2); + if (r0_mag < EPSILON || std::isnan(r0_mag)) r0_mag = store_bond(n, i1, i2); r0[0] = bondstore[n][1]; r0[1] = bondstore[n][2]; @@ -512,15 +508,15 @@ void BondBPMRotational::compute(int eflag, int vflag) rsq = MathExtra::lensq3(r); r_mag = sqrt(rsq); - r_mag_inv = 1.0/r_mag; + r_mag_inv = 1.0 / r_mag; MathExtra::scale3(r_mag_inv, r, rhat); // ------------------------------------------------------// // Calculate forces, check if bond breaks // ------------------------------------------------------// - breaking = elastic_forces(i1, i2, type, Fr, r_mag, r0_mag, r_mag_inv, - rhat, r, r0, force1on2, torque1on2, torque2on1); + breaking = elastic_forces(i1, i2, type, Fr, r_mag, r0_mag, r_mag_inv, rhat, r, r0, force1on2, + torque1on2, torque2on1); if (breaking >= 1.0) { bondlist[n][2] = 0; @@ -531,8 +527,8 @@ void BondBPMRotational::compute(int eflag, int vflag) damping_forces(i1, i2, type, Fr, rhat, r, force1on2, torque1on2, torque2on1); if (smooth_flag) { - smooth = breaking*breaking; - smooth = 1.0 - smooth*smooth; + smooth = breaking * breaking; + smooth = 1.0 - smooth * smooth; } else { smooth = 1.0; } @@ -542,26 +538,26 @@ void BondBPMRotational::compute(int eflag, int vflag) // ------------------------------------------------------// if (newton_bond || i1 < nlocal) { - f[i1][0] -= force1on2[0]*smooth; - f[i1][1] -= force1on2[1]*smooth; - f[i1][2] -= force1on2[2]*smooth; + f[i1][0] -= force1on2[0] * smooth; + f[i1][1] -= force1on2[1] * smooth; + f[i1][2] -= force1on2[2] * smooth; - torque[i1][0] += torque2on1[0]*smooth; - torque[i1][1] += torque2on1[1]*smooth; - torque[i1][2] += torque2on1[2]*smooth; + torque[i1][0] += torque2on1[0] * smooth; + torque[i1][1] += torque2on1[1] * smooth; + torque[i1][2] += torque2on1[2] * smooth; } if (newton_bond || i2 < nlocal) { - f[i2][0] += force1on2[0]*smooth; - f[i2][1] += force1on2[1]*smooth; - f[i2][2] += force1on2[2]*smooth; + f[i2][0] += force1on2[0] * smooth; + f[i2][1] += force1on2[1] * smooth; + f[i2][2] += force1on2[2] * smooth; - torque[i2][0] += torque1on2[0]*smooth; - torque[i2][1] += torque1on2[1]*smooth; - torque[i2][2] += torque1on2[2]*smooth; + torque[i2][0] += torque1on2[0] * smooth; + torque[i2][1] += torque1on2[1] * smooth; + torque[i2][2] += torque1on2[2] * smooth; } - if (evflag) ev_tally(i1,i2,nlocal,newton_bond,0.0,Fr*smooth,r[0],r[1],r[2]); + if (evflag) ev_tally(i1, i2, nlocal, newton_bond, 0.0, Fr * smooth, r[0], r[1], r[2]); } } @@ -570,23 +566,23 @@ void BondBPMRotational::compute(int eflag, int vflag) void BondBPMRotational::allocate() { allocated = 1; - int n = atom->nbondtypes; + const int np1 = atom->nbondtypes + 1; - memory->create(Kr,n+1,"bond:Kr"); - memory->create(Ks,n+1,"bond:Ks"); - memory->create(Kt,n+1,"bond:Kt"); - memory->create(Kb,n+1,"bond:Kb"); - memory->create(Fcr,n+1,"bond:Fcr"); - memory->create(Fcs,n+1,"bond:Fcs"); - memory->create(Tct,n+1,"bond:Tct"); - memory->create(Tcb,n+1,"bond:Tcb"); - memory->create(gnorm,n+1,"bond:gnorm"); - memory->create(gslide,n+1,"bond:gslide"); - memory->create(groll,n+1,"bond:groll"); - memory->create(gtwist,n+1,"bond:gtwist"); + memory->create(Kr, np1, "bond:Kr"); + memory->create(Ks, np1, "bond:Ks"); + memory->create(Kt, np1, "bond:Kt"); + memory->create(Kb, np1, "bond:Kb"); + memory->create(Fcr, np1, "bond:Fcr"); + memory->create(Fcs, np1, "bond:Fcs"); + memory->create(Tct, np1, "bond:Tct"); + memory->create(Tcb, np1, "bond:Tcb"); + memory->create(gnorm, np1, "bond:gnorm"); + memory->create(gslide, np1, "bond:gslide"); + memory->create(groll, np1, "bond:groll"); + memory->create(gtwist, np1, "bond:gtwist"); - memory->create(setflag,n+1,"bond:setflag"); - for (int i = 1; i <= n; i++) setflag[i] = 0; + memory->create(setflag, np1, "bond:setflag"); + for (int i = 1; i < np1; i++) setflag[i] = 0; } /* ---------------------------------------------------------------------- @@ -595,24 +591,24 @@ void BondBPMRotational::allocate() void BondBPMRotational::coeff(int narg, char **arg) { - if (narg != 13) error->all(FLERR,"Incorrect args for bond coefficients"); + if (narg != 13) 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); + int ilo, ihi; + utils::bounds(FLERR, arg[0], 1, atom->nbondtypes, ilo, ihi, error); - double Kr_one = utils::numeric(FLERR,arg[1],false,lmp); - double Ks_one = utils::numeric(FLERR,arg[2],false,lmp); - double Kt_one = utils::numeric(FLERR,arg[3],false,lmp); - double Kb_one = utils::numeric(FLERR,arg[4],false,lmp); - double Fcr_one = utils::numeric(FLERR,arg[5],false,lmp); - double Fcs_one = utils::numeric(FLERR,arg[6],false,lmp); - double Tct_one = utils::numeric(FLERR,arg[7],false,lmp); - double Tcb_one = utils::numeric(FLERR,arg[8],false,lmp); - double gnorm_one = utils::numeric(FLERR,arg[9],false,lmp); - double gslide_one = utils::numeric(FLERR,arg[10],false,lmp); - double groll_one = utils::numeric(FLERR,arg[11],false,lmp); - double gtwist_one = utils::numeric(FLERR,arg[12],false,lmp); + double Kr_one = utils::numeric(FLERR, arg[1], false, lmp); + double Ks_one = utils::numeric(FLERR, arg[2], false, lmp); + double Kt_one = utils::numeric(FLERR, arg[3], false, lmp); + double Kb_one = utils::numeric(FLERR, arg[4], false, lmp); + double Fcr_one = utils::numeric(FLERR, arg[5], false, lmp); + double Fcs_one = utils::numeric(FLERR, arg[6], false, lmp); + double Tct_one = utils::numeric(FLERR, arg[7], false, lmp); + double Tcb_one = utils::numeric(FLERR, arg[8], false, lmp); + double gnorm_one = utils::numeric(FLERR, arg[9], false, lmp); + double gslide_one = utils::numeric(FLERR, arg[10], false, lmp); + double groll_one = utils::numeric(FLERR, arg[11], false, lmp); + double gtwist_one = utils::numeric(FLERR, arg[12], false, lmp); int count = 0; for (int i = ilo; i <= ihi; i++) { @@ -631,10 +627,10 @@ void BondBPMRotational::coeff(int narg, char **arg) setflag[i] = 1; count++; - if (Fcr[i]/Kr[i] > max_stretch) max_stretch = Fcr[i]/Kr[i]; + if (Fcr[i] / Kr[i] > max_stretch) max_stretch = Fcr[i] / Kr[i]; } - if (count == 0) error->all(FLERR,"Incorrect args for bond coefficients"); + if (count == 0) error->all(FLERR, "Incorrect args for bond coefficients"); } /* ---------------------------------------------------------------------- @@ -646,17 +642,17 @@ void BondBPMRotational::init_style() BondBPM::init_style(); if (!atom->quat_flag || !atom->sphere_flag) - error->all(FLERR,"Bond bpm/rotational requires atom style bpm/sphere"); + error->all(FLERR, "Bond bpm/rotational requires atom style bpm/sphere"); if (comm->ghost_velocity == 0) - error->all(FLERR,"Bond bpm/rotational requires ghost atoms store velocity"); + error->all(FLERR, "Bond bpm/rotational requires ghost atoms store velocity"); - if(domain->dimension == 2) + if (domain->dimension == 2) error->warning(FLERR, "Bond style bpm/rotational not intended for 2d use"); if (!id_fix_bond_history) { id_fix_bond_history = utils::strdup("HISTORY_BPM_ROTATIONAL"); - fix_bond_history = dynamic_cast(modify->replace_fix(id_fix_dummy2, - fmt::format("{} all BOND_HISTORY 0 4", id_fix_bond_history),1)); + fix_bond_history = dynamic_cast(modify->replace_fix( + id_fix_dummy2, fmt::format("{} all BOND_HISTORY 0 4", id_fix_bond_history), 1)); delete[] id_fix_dummy2; id_fix_dummy2 = nullptr; } @@ -672,8 +668,8 @@ void BondBPMRotational::settings(int narg, char **arg) 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"); - smooth_flag = utils::logical(FLERR,arg[iarg+1],false,lmp); + if (iarg + 1 > narg) error->all(FLERR, "Illegal bond bpm command"); + smooth_flag = utils::logical(FLERR, arg[iarg + 1], false, lmp); i += 1; } else { error->all(FLERR, "Illegal bond_style command"); @@ -687,18 +683,18 @@ void BondBPMRotational::settings(int narg, char **arg) void BondBPMRotational::write_restart(FILE *fp) { - fwrite(&Kr[1],sizeof(double),atom->nbondtypes,fp); - fwrite(&Ks[1],sizeof(double),atom->nbondtypes,fp); - fwrite(&Kt[1],sizeof(double),atom->nbondtypes,fp); - fwrite(&Kb[1],sizeof(double),atom->nbondtypes,fp); - fwrite(&Fcr[1],sizeof(double),atom->nbondtypes,fp); - fwrite(&Fcs[1],sizeof(double),atom->nbondtypes,fp); - fwrite(&Tct[1],sizeof(double),atom->nbondtypes,fp); - fwrite(&Tcb[1],sizeof(double),atom->nbondtypes,fp); - fwrite(&gnorm[1],sizeof(double),atom->nbondtypes,fp); - fwrite(&gslide[1],sizeof(double),atom->nbondtypes,fp); - fwrite(&groll[1],sizeof(double),atom->nbondtypes,fp); - fwrite(>wist[1],sizeof(double),atom->nbondtypes,fp); + fwrite(&Kr[1], sizeof(double), atom->nbondtypes, fp); + fwrite(&Ks[1], sizeof(double), atom->nbondtypes, fp); + fwrite(&Kt[1], sizeof(double), atom->nbondtypes, fp); + fwrite(&Kb[1], sizeof(double), atom->nbondtypes, fp); + fwrite(&Fcr[1], sizeof(double), atom->nbondtypes, fp); + fwrite(&Fcs[1], sizeof(double), atom->nbondtypes, fp); + fwrite(&Tct[1], sizeof(double), atom->nbondtypes, fp); + fwrite(&Tcb[1], sizeof(double), atom->nbondtypes, fp); + fwrite(&gnorm[1], sizeof(double), atom->nbondtypes, fp); + fwrite(&gslide[1], sizeof(double), atom->nbondtypes, fp); + fwrite(&groll[1], sizeof(double), atom->nbondtypes, fp); + fwrite(>wist[1], sizeof(double), atom->nbondtypes, fp); } /* ---------------------------------------------------------------------- @@ -710,31 +706,31 @@ void BondBPMRotational::read_restart(FILE *fp) allocate(); if (comm->me == 0) { - utils::sfread(FLERR,&Kr[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); - utils::sfread(FLERR,&Ks[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); - utils::sfread(FLERR,&Kt[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); - utils::sfread(FLERR,&Kb[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); - utils::sfread(FLERR,&Fcr[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); - utils::sfread(FLERR,&Fcs[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); - utils::sfread(FLERR,&Tct[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); - utils::sfread(FLERR,&Tcb[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); - utils::sfread(FLERR,&gnorm[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); - utils::sfread(FLERR,&gslide[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); - utils::sfread(FLERR,&groll[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); - utils::sfread(FLERR,>wist[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); + utils::sfread(FLERR, &Kr[1], sizeof(double), atom->nbondtypes, fp, nullptr, error); + utils::sfread(FLERR, &Ks[1], sizeof(double), atom->nbondtypes, fp, nullptr, error); + utils::sfread(FLERR, &Kt[1], sizeof(double), atom->nbondtypes, fp, nullptr, error); + utils::sfread(FLERR, &Kb[1], sizeof(double), atom->nbondtypes, fp, nullptr, error); + utils::sfread(FLERR, &Fcr[1], sizeof(double), atom->nbondtypes, fp, nullptr, error); + utils::sfread(FLERR, &Fcs[1], sizeof(double), atom->nbondtypes, fp, nullptr, error); + utils::sfread(FLERR, &Tct[1], sizeof(double), atom->nbondtypes, fp, nullptr, error); + utils::sfread(FLERR, &Tcb[1], sizeof(double), atom->nbondtypes, fp, nullptr, error); + utils::sfread(FLERR, &gnorm[1], sizeof(double), atom->nbondtypes, fp, nullptr, error); + utils::sfread(FLERR, &gslide[1], sizeof(double), atom->nbondtypes, fp, nullptr, error); + utils::sfread(FLERR, &groll[1], sizeof(double), atom->nbondtypes, fp, nullptr, error); + utils::sfread(FLERR, >wist[1], sizeof(double), atom->nbondtypes, fp, nullptr, error); } - MPI_Bcast(&Kr[1],atom->nbondtypes,MPI_DOUBLE,0,world); - MPI_Bcast(&Ks[1],atom->nbondtypes,MPI_DOUBLE,0,world); - MPI_Bcast(&Kt[1],atom->nbondtypes,MPI_DOUBLE,0,world); - MPI_Bcast(&Kb[1],atom->nbondtypes,MPI_DOUBLE,0,world); - MPI_Bcast(&Fcr[1],atom->nbondtypes,MPI_DOUBLE,0,world); - MPI_Bcast(&Fcs[1],atom->nbondtypes,MPI_DOUBLE,0,world); - MPI_Bcast(&Tct[1],atom->nbondtypes,MPI_DOUBLE,0,world); - MPI_Bcast(&Tcb[1],atom->nbondtypes,MPI_DOUBLE,0,world); - MPI_Bcast(&gnorm[1],atom->nbondtypes,MPI_DOUBLE,0,world); - MPI_Bcast(&gslide[1],atom->nbondtypes,MPI_DOUBLE,0,world); - MPI_Bcast(&groll[1],atom->nbondtypes,MPI_DOUBLE,0,world); - MPI_Bcast(>wist[1],atom->nbondtypes,MPI_DOUBLE,0,world); + MPI_Bcast(&Kr[1], atom->nbondtypes, MPI_DOUBLE, 0, world); + MPI_Bcast(&Ks[1], atom->nbondtypes, MPI_DOUBLE, 0, world); + MPI_Bcast(&Kt[1], atom->nbondtypes, MPI_DOUBLE, 0, world); + MPI_Bcast(&Kb[1], atom->nbondtypes, MPI_DOUBLE, 0, world); + MPI_Bcast(&Fcr[1], atom->nbondtypes, MPI_DOUBLE, 0, world); + MPI_Bcast(&Fcs[1], atom->nbondtypes, MPI_DOUBLE, 0, world); + MPI_Bcast(&Tct[1], atom->nbondtypes, MPI_DOUBLE, 0, world); + MPI_Bcast(&Tcb[1], atom->nbondtypes, MPI_DOUBLE, 0, world); + MPI_Bcast(&gnorm[1], atom->nbondtypes, MPI_DOUBLE, 0, world); + MPI_Bcast(&gslide[1], atom->nbondtypes, MPI_DOUBLE, 0, world); + MPI_Bcast(&groll[1], atom->nbondtypes, MPI_DOUBLE, 0, world); + MPI_Bcast(>wist[1], atom->nbondtypes, MPI_DOUBLE, 0, world); for (int i = 1; i <= atom->nbondtypes; i++) setflag[i] = 1; } @@ -746,15 +742,13 @@ void BondBPMRotational::read_restart(FILE *fp) void BondBPMRotational::write_data(FILE *fp) { for (int i = 1; i <= atom->nbondtypes; i++) - fprintf(fp,"%d %g %g %g %g %g %g %g %g %g %g %g %g\n", - i,Kr[i],Ks[i],Kt[i],Kb[i],Fcr[i], Fcs[i], Tct[i], - Tcb[i], gnorm[i], gslide[i], groll[i], gtwist[i]); + fprintf(fp, "%d %g %g %g %g %g %g %g %g %g %g %g %g\n", i, Kr[i], Ks[i], Kt[i], Kb[i], Fcr[i], + Fcs[i], Tct[i], Tcb[i], gnorm[i], gslide[i], groll[i], gtwist[i]); } /* ---------------------------------------------------------------------- */ -double BondBPMRotational::single(int type, double rsq, int i, int j, - double &fforce) +double BondBPMRotational::single(int type, double rsq, int i, int j, double &fforce) { // Not yet enabled if (type <= 0) return 0.0; @@ -768,7 +762,7 @@ double BondBPMRotational::single(int type, double rsq, int i, int j, double r0_mag, r_mag, r_mag_inv; double r0[3], r[3], rhat[3]; - for (int n = 0; n < atom->num_bond[i]; n ++) { + for (int n = 0; n < atom->num_bond[i]; n++) { if (atom->bond_atom[i][n] == atom->tag[j]) { r0_mag = fix_bond_history->get_atom_value(i, n, 0); r0[0] = fix_bond_history->get_atom_value(i, n, 1); @@ -782,20 +776,20 @@ double BondBPMRotational::single(int type, double rsq, int i, int j, MathExtra::sub3(x[i], x[j], r); r_mag = sqrt(rsq); - r_mag_inv = 1.0/r_mag; + r_mag_inv = 1.0 / r_mag; MathExtra::scale3(r_mag_inv, r, rhat); double breaking, smooth, Fr; double force1on2[3], torque1on2[3], torque2on1[3]; - breaking = elastic_forces(i, j, type, Fr, r_mag, r0_mag, r_mag_inv, - rhat, r, r0, force1on2, torque1on2, torque2on1); + breaking = elastic_forces(i, j, type, Fr, r_mag, r0_mag, r_mag_inv, rhat, r, r0, force1on2, + torque1on2, torque2on1); fforce = Fr; damping_forces(i, j, type, Fr, rhat, r, force1on2, torque1on2, torque2on1); fforce += Fr; if (smooth_flag) { - smooth = breaking*breaking; - smooth = 1.0 - smooth*smooth; + smooth = breaking * breaking; + smooth = 1.0 - smooth * smooth; fforce *= smooth; } return 0.0; diff --git a/src/BPM/bond_bpm_spring.cpp b/src/BPM/bond_bpm_spring.cpp index ad3731a5ea..e2cbe5949e 100644 --- a/src/BPM/bond_bpm_spring.cpp +++ b/src/BPM/bond_bpm_spring.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -30,11 +29,8 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -BondBPMSpring::BondBPMSpring(LAMMPS *lmp) : BondBPM(lmp) +BondBPMSpring::BondBPMSpring(LAMMPS *_lmp) : BondBPM(_lmp), k(nullptr), ecrit(nullptr), gamma(nullptr) { - k = nullptr; - ecrit = nullptr; - gamma = nullptr; partial_flag = 1; smooth_flag = 1; } @@ -55,7 +51,7 @@ BondBPMSpring::~BondBPMSpring() Store data for a single bond - if bond added after LAMMPS init (e.g. pour) ------------------------------------------------------------------------- */ -double BondBPMSpring::store_bond(int n,int i,int j) +double BondBPMSpring::store_bond(int n, int i, int j) { double delx, dely, delz, r; double **x = atom->x; @@ -66,22 +62,18 @@ double BondBPMSpring::store_bond(int n,int i,int j) dely = x[i][1] - x[j][1]; delz = x[i][2] - x[j][2]; - r = sqrt(delx*delx + dely*dely + delz*delz); + 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); - } + 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); } } } 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); - } + 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); } } } @@ -99,8 +91,8 @@ void BondBPMSpring::store_data() 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 ++) { + 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 @@ -116,7 +108,7 @@ void BondBPMSpring::store_data() // Get closest image in case bonded with ghost domain->minimum_image(delx, dely, delz); - r = sqrt(delx*delx + dely*dely + delz*delz); + r = sqrt(delx * delx + dely * dely + delz * delz); fix_bond_history->update_atom_value(i, m, 0, r); } @@ -130,16 +122,16 @@ void BondBPMSpring::store_data() void BondBPMSpring::compute(int eflag, int vflag) { - if (! fix_bond_history->stored_flag) { + if (!fix_bond_history->stored_flag) { fix_bond_history->stored_flag = true; store_data(); } - int i1,i2,itmp,n,type; + int i1, i2, itmp, n, type; double delx, dely, delz, delvx, delvy, delvz; double e, rsq, r, r0, rinv, smooth, fbond, dot; - ev_init(eflag,vflag); + ev_init(eflag, vflag); double **x = atom->x; double **v = atom->v; @@ -172,16 +164,15 @@ void BondBPMSpring::compute(int eflag, int vflag) } // If bond hasn't been set - should be initialized to zero - if (r0 < EPSILON || std::isnan(r0)) - r0 = store_bond(n,i1,i2); + 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; + rsq = delx * delx + dely * dely + delz * delz; r = sqrt(rsq); - e = (r - r0)/r0; + e = (r - r0) / r0; if (fabs(e) > ecrit[type]) { bondlist[n][2] = 0; @@ -189,18 +180,18 @@ void BondBPMSpring::compute(int eflag, int vflag) continue; } - rinv = 1.0/r; - fbond = k[type]*(r0-r); + rinv = 1.0 / r; + fbond = k[type] * (r0 - r); 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; + dot = delx * delvx + dely * delvy + delz * delvz; + fbond -= gamma[type] * dot * rinv; fbond *= rinv; if (smooth_flag) { - smooth = (r-r0)/(r0*ecrit[type]); + smooth = (r - r0) / (r0 * ecrit[type]); smooth *= smooth; smooth *= smooth; smooth *= smooth; @@ -209,18 +200,18 @@ void BondBPMSpring::compute(int eflag, int vflag) } if (newton_bond || i1 < nlocal) { - f[i1][0] += delx*fbond; - f[i1][1] += dely*fbond; - f[i1][2] += delz*fbond; + 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; + 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 (evflag) ev_tally(i1, i2, nlocal, newton_bond, 0.0, fbond, delx, dely, delz); } } @@ -229,14 +220,14 @@ void BondBPMSpring::compute(int eflag, int vflag) void BondBPMSpring::allocate() { allocated = 1; - int n = atom->nbondtypes; + const int np1 = atom->nbondtypes + 1; - memory->create(k,n+1,"bond:k"); - memory->create(ecrit,n+1,"bond:ecrit"); - memory->create(gamma,n+1,"bond:gamma"); + memory->create(k, np1, "bond:k"); + memory->create(ecrit, np1, "bond:ecrit"); + memory->create(gamma, np1, "bond:gamma"); - memory->create(setflag,n+1,"bond:setflag"); - for (int i = 1; i <= n; i++) setflag[i] = 0; + memory->create(setflag, np1, "bond:setflag"); + for (int i = 1; i < np1; i++) setflag[i] = 0; } /* ---------------------------------------------------------------------- @@ -245,15 +236,15 @@ void BondBPMSpring::allocate() void BondBPMSpring::coeff(int narg, char **arg) { - if (narg != 4) error->all(FLERR,"Incorrect args for bond coefficients"); + if (narg != 4) 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); + 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 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); int count = 0; for (int i = ilo; i <= ihi; i++) { @@ -263,10 +254,10 @@ void BondBPMSpring::coeff(int narg, char **arg) setflag[i] = 1; count++; - if (1.0+ecrit[i] > max_stretch) max_stretch = 1.0+ecrit[i]; + if (1.0 + ecrit[i] > max_stretch) max_stretch = 1.0 + ecrit[i]; } - if (count == 0) error->all(FLERR,"Incorrect args for bond coefficients"); + if (count == 0) error->all(FLERR, "Incorrect args for bond coefficients"); } /* ---------------------------------------------------------------------- @@ -278,12 +269,12 @@ void BondBPMSpring::init_style() BondBPM::init_style(); if (comm->ghost_velocity == 0) - error->all(FLERR,"Bond bpm/spring requires ghost atoms store velocity"); + error->all(FLERR, "Bond bpm/spring requires ghost atoms store velocity"); if (!id_fix_bond_history) { id_fix_bond_history = utils::strdup("HISTORY_BPM_SPRING"); - fix_bond_history = dynamic_cast(modify->replace_fix(id_fix_dummy2, - fmt::format("{} all BOND_HISTORY 0 1", id_fix_bond_history),1)); + fix_bond_history = dynamic_cast(modify->replace_fix( + id_fix_dummy2, fmt::format("{} all BOND_HISTORY 0 1", id_fix_bond_history), 1)); delete[] id_fix_dummy2; id_fix_dummy2 = nullptr; } @@ -299,8 +290,8 @@ void BondBPMSpring::settings(int narg, char **arg) 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"); - smooth_flag = utils::logical(FLERR,arg[iarg+1],false,lmp); + if (iarg + 1 > narg) error->all(FLERR, "Illegal bond bpm command"); + smooth_flag = utils::logical(FLERR, arg[iarg + 1], false, lmp); i += 1; } else { error->all(FLERR, "Illegal bond_style command"); @@ -314,9 +305,9 @@ void BondBPMSpring::settings(int narg, char **arg) void BondBPMSpring::write_restart(FILE *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(&k[1], sizeof(double), atom->nbondtypes, fp); + fwrite(&ecrit[1], sizeof(double), atom->nbondtypes, fp); + fwrite(&gamma[1], sizeof(double), atom->nbondtypes, fp); } /* ---------------------------------------------------------------------- @@ -328,13 +319,13 @@ void BondBPMSpring::read_restart(FILE *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, &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); } - 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(&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); for (int i = 1; i <= atom->nbondtypes; i++) setflag[i] = 1; } @@ -346,26 +337,23 @@ void BondBPMSpring::read_restart(FILE *fp) void BondBPMSpring::write_data(FILE *fp) { for (int i = 1; i <= atom->nbondtypes; i++) - fprintf(fp,"%d %g %g %g\n", i,k[i],ecrit[i],gamma[i]); + fprintf(fp, "%d %g %g %g\n", i, k[i], ecrit[i], gamma[i]); } /* ---------------------------------------------------------------------- */ -double BondBPMSpring::single(int type, double rsq, int i, int j, - double &fforce) +double BondBPMSpring::single(int type, double rsq, int i, int j, double &fforce) { if (type <= 0) return 0.0; double r0; - 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); - } + 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); } double r = sqrt(rsq); - double rinv = 1.0/r; - fforce = k[type]*(r0-r); + double rinv = 1.0 / r; + fforce = k[type] * (r0 - r); double **x = atom->x; double **v = atom->v; @@ -375,12 +363,12 @@ double BondBPMSpring::single(int type, double rsq, int i, int j, 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; + 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]); + double smooth = (r - r0) / (r0 * ecrit[type]); smooth *= smooth; smooth *= smooth; smooth *= smooth; diff --git a/src/BPM/compute_nbond_atom.cpp b/src/BPM/compute_nbond_atom.cpp index 16e45eb388..cc16473767 100644 --- a/src/BPM/compute_nbond_atom.cpp +++ b/src/BPM/compute_nbond_atom.cpp @@ -26,11 +26,10 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -ComputeNBondAtom::ComputeNBondAtom(LAMMPS *lmp, int narg, char **arg) : - Compute(lmp, narg, arg), - nbond(nullptr) +ComputeNBondAtom::ComputeNBondAtom(LAMMPS *_lmp, int narg, char **arg) : + Compute(_lmp, narg, arg), nbond(nullptr) { - if (narg < 3) error->all(FLERR,"Illegal compute nbond/atom command"); + if (narg < 3) error->all(FLERR, "Illegal compute nbond/atom command"); peratom_flag = 1; size_peratom_cols = 0; @@ -55,7 +54,7 @@ void ComputeNBondAtom::compute_peratom() invoked_peratom = update->ntimestep; if (update->eflag_atom != invoked_peratom) - error->all(FLERR,"Per-atom nbond was not tallied on needed timestep"); + error->all(FLERR, "Per-atom nbond was not tallied on needed timestep"); // grow local nbond array if necessary // needs to be atom->nmax in length @@ -63,7 +62,7 @@ void ComputeNBondAtom::compute_peratom() if (atom->nmax > nmax) { memory->destroy(nbond); nmax = atom->nmax; - memory->create(nbond, nmax,"nbond/atom:nbond"); + memory->create(nbond, nmax, "nbond/atom:nbond"); vector_atom = nbond; } @@ -88,7 +87,7 @@ void ComputeNBondAtom::compute_peratom() for (i = 0; i < ntotal; i++) nbond[i] = 0; for (i = 0; i < nlocal; i++) { - for (j = 0; j map(bond_atom[i][j]); @@ -100,8 +99,7 @@ void ComputeNBondAtom::compute_peratom() } // communicate ghost nbond between neighbor procs - if (force->newton) - comm->reverse_comm(this); + if (force->newton) comm->reverse_comm(this); // zero nbond of atoms not in group // only do this after comm since ghost contributions must be included @@ -115,7 +113,7 @@ void ComputeNBondAtom::compute_peratom() int ComputeNBondAtom::pack_reverse_comm(int n, int first, double *buf) { - int i,m,last; + int i, m, last; m = 0; last = first + n; @@ -127,7 +125,7 @@ int ComputeNBondAtom::pack_reverse_comm(int n, int first, double *buf) void ComputeNBondAtom::unpack_reverse_comm(int n, int *list, double *buf) { - int i,j,m; + int i, j, m; m = 0; for (i = 0; i < n; i++) { diff --git a/src/BPM/fix_nve_bpm_sphere.cpp b/src/BPM/fix_nve_bpm_sphere.cpp index 0a296fc319..77e2441618 100644 --- a/src/BPM/fix_nve_bpm_sphere.cpp +++ b/src/BPM/fix_nve_bpm_sphere.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -28,13 +27,11 @@ using namespace LAMMPS_NS; using namespace FixConst; using namespace MathExtra; - /* ---------------------------------------------------------------------- */ -FixNVEBPMSphere::FixNVEBPMSphere(LAMMPS *lmp, int narg, char **arg) : - FixNVE(lmp, narg, arg) +FixNVEBPMSphere::FixNVEBPMSphere(LAMMPS *_lmp, int narg, char **arg) : FixNVE(_lmp, narg, arg) { - if (narg < 3) error->all(FLERR,"Illegal fix nve/bpm/sphere command"); + if (narg < 3) error->all(FLERR, "Illegal fix nve/bpm/sphere command"); time_integrate = 1; @@ -45,21 +42,21 @@ FixNVEBPMSphere::FixNVEBPMSphere(LAMMPS *lmp, int narg, char **arg) : int iarg = 3; while (iarg < narg) { - if (strcmp(arg[iarg],"disc")==0) { + if (strcmp(arg[iarg], "disc") == 0) { inertia = 0.5; if (domain->dimension != 2) - error->all(FLERR,"Fix nve/bpm/sphere disc requires 2d simulation"); + error->all(FLERR, "Fix nve/bpm/sphere disc requires 2d simulation"); iarg++; - } - else error->all(FLERR,"Illegal fix nve/bpm/sphere command"); + } else + error->all(FLERR, "Illegal fix nve/bpm/sphere command"); } - inv_inertia = 1.0/inertia; + inv_inertia = 1.0 / inertia; // error checks if (!atom->quat_flag || !atom->sphere_flag) - error->all(FLERR,"Fix nve/bpm/sphere requires atom style bpm/sphere"); + error->all(FLERR, "Fix nve/bpm/sphere requires atom style bpm/sphere"); } /* ---------------------------------------------------------------------- */ @@ -77,15 +74,14 @@ void FixNVEBPMSphere::init() for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) - if (radius[i] == 0.0) - error->one(FLERR,"Fix nve/bpm/sphere requires extended particles"); + if (radius[i] == 0.0) error->one(FLERR, "Fix nve/bpm/sphere requires extended particles"); } /* ---------------------------------------------------------------------- */ void FixNVEBPMSphere::initial_integrate(int /*vflag*/) { - double dtq,dtfm,dtirotate,particle_inertia; + double dtq, dtfm, dtirotate, particle_inertia; double **x = atom->x; double **v = atom->v; @@ -115,13 +111,13 @@ void FixNVEBPMSphere::initial_integrate(int /*vflag*/) x[i][1] += dtv * v[i][1]; x[i][2] += dtv * v[i][2]; - particle_inertia = inertia*(radius[i]*radius[i]*rmass[i]); + particle_inertia = inertia * (radius[i] * radius[i] * rmass[i]); dtirotate = dtf / particle_inertia; omega[i][0] += dtirotate * torque[i][0]; omega[i][1] += dtirotate * torque[i][1]; omega[i][2] += dtirotate * torque[i][2]; - MathExtra::richardson_sphere(quat[i],omega[i],dtq); + MathExtra::richardson_sphere(quat[i], omega[i], dtq); } } } @@ -130,7 +126,7 @@ void FixNVEBPMSphere::initial_integrate(int /*vflag*/) void FixNVEBPMSphere::final_integrate() { - double dtfm,dtirotate,particle_inertia; + double dtfm, dtirotate, particle_inertia; double **v = atom->v; double **f = atom->f; @@ -152,7 +148,7 @@ void FixNVEBPMSphere::final_integrate() v[i][1] += dtfm * f[i][1]; v[i][2] += dtfm * f[i][2]; - particle_inertia = inertia*(radius[i]*radius[i]*rmass[i]); + particle_inertia = inertia * (radius[i] * radius[i] * rmass[i]); dtirotate = dtf / particle_inertia; omega[i][0] += dtirotate * torque[i][0]; omega[i][1] += dtirotate * torque[i][1]; diff --git a/src/BPM/pair_bpm_spring.cpp b/src/BPM/pair_bpm_spring.cpp index c81c06106b..0dd113e2ed 100644 --- a/src/BPM/pair_bpm_spring.cpp +++ b/src/BPM/pair_bpm_spring.cpp @@ -25,7 +25,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -PairBPMSpring::PairBPMSpring(LAMMPS *lmp) : Pair(lmp) +PairBPMSpring::PairBPMSpring(LAMMPS *_lmp) : Pair(_lmp) { writedata = 1; }