Merge pull request #1202 from lammps/hyper

Add Hyper-dynamics to REPLICA package
This commit is contained in:
Axel Kohlmeyer 2018-11-13 15:17:30 -05:00 committed by GitHub
commit b1186a971e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
37 changed files with 7789 additions and 21 deletions

View File

@ -59,6 +59,7 @@ An alphabetic list of all LAMMPS commands.
"fix_modify"_fix_modify.html,
"group"_group.html,
"group2ndx"_group2ndx.html,
"hyper"_hyper.html,
"if"_if.html,
"info"_info.html,
"improper_coeff"_improper_coeff.html,

View File

@ -78,6 +78,8 @@ OPT.
"grem"_fix_grem.html,
"halt"_fix_halt.html,
"heat"_fix_heat.html,
"hyper/global"_fix_hyper_global.html,
"hyper/local"_fix_hyper_local.html,
"imd"_fix_imd.html,
"indent"_fix_indent.html,
"ipi"_fix_ipi.html,
@ -108,7 +110,7 @@ OPT.
"nph/asphere (o)"_fix_nph_asphere.html,
"nph/body"_fix_nph_body.html,
"nph/eff"_fix_nh_eff.html,
"nph/sphere (ko)"_fix_nph_sphere.html,
"nph/sphere (o)"_fix_nph_sphere.html,
"nphug (o)"_fix_nphug.html,
"npt (iko)"_fix_nh.html,
"npt/asphere (o)"_fix_npt_asphere.html,
@ -128,7 +130,7 @@ OPT.
"nve/line"_fix_nve_line.html,
"nve/manifold/rattle"_fix_nve_manifold_rattle.html,
"nve/noforce"_fix_nve_noforce.html,
"nve/sphere (o)"_fix_nve_sphere.html,
"nve/sphere (ko)"_fix_nve_sphere.html,
"nve/spin"_fix_nve_spin.html,
"nve/tri"_fix_nve_tri.html,
"nvk"_fix_nvk.html,
@ -147,6 +149,7 @@ OPT.
"phonon"_fix_phonon.html,
"pimd"_fix_pimd.html,
"planeforce"_fix_planeforce.html,
"plumed"_fix_plumed.html,
"poems"_fix_poems.html,
"pour"_fix_pour.html,
"precession/spin"_fix_precession_spin.html,

View File

@ -68,7 +68,7 @@ Package, Description, Doc page, Example, Library
"USER-QUIP"_Packages_details.html#PKG-USER-QUIP, QUIP/libatoms interface,"pair_style quip"_pair_quip.html, USER/quip, ext
"USER-REAXC"_Packages_details.html#PKG-USER-REAXC, ReaxFF potential (C/C++) ,"pair_style reaxc"_pair_reaxc.html, reax, no
"USER-SCAFACOS"_Packages_details.html#PKG-USER-SCAFACOS, wrapper on ScaFaCoS solver,"kspace_style scafacos"_kspace_style.html, USER/scafacos, ext
"USER-SDPD"_Packages_details.html#PKG-USER-SDPD, smoothed dissipative particle dynamics,"pair_style sdpd/taitwater/isothermal"_pair_sdpd_taitwater_isothermal, USER/sdpd, no
"USER-SDPD"_Packages_details.html#PKG-USER-SDPD, smoothed dissipative particle dynamics,"pair_style sdpd/taitwater/isothermal"_pair_sdpd_taitwater_isothermal.html, USER/sdpd, no
"USER-SMD"_Packages_details.html#PKG-USER-SMD, smoothed Mach dynamics,"SMD User Guide"_PDF/SMD_LAMMPS_userguide.pdf, USER/smd, ext
"USER-SMTBQ"_Packages_details.html#PKG-USER-SMTBQ, second moment tight binding QEq potential,"pair_style smtbq"_pair_smtbq.html, USER/smtbq, no
"USER-SPH"_Packages_details.html#PKG-USER-SPH, smoothed particle hydrodynamics,"SPH User Guide"_PDF/SPH_LAMMPS_userguide.pdf, USER/sph, no

View File

@ -44,6 +44,7 @@ Commands :h1
fix_modify
group
group2ndx
hyper
if
improper_coeff
improper_style

View File

@ -176,6 +176,7 @@ compute"_Commands_compute.html doc page are followed by one or more of
(g,i,k,o,t) to indicate which accelerated styles exist.
"ackland/atom"_compute_ackland_atom.html -
"adf"_compute_adf.html - angular distribution function
"aggregate/atom"_compute_cluster_atom.html - aggregate ID for each atom
"angle"_compute_angle.html -
"angle/local"_compute_angle_local.html -

View File

@ -221,6 +221,8 @@ accelerated styles exist.
"grem"_fix_grem.html -
"halt"_fix_halt.html - terminate a dynamics run or minimization
"heat"_fix_heat.html - add/subtract momentum-conserving heat
"hyper/global"_fix_hyper_global.html - global hyperdynamics
"hyper/local"_fix_hyper_local.html - local hyperdynamics
"imd"_fix_imd.html -
"indent"_fix_indent.html - impose force due to an indenter
"ipi"_fix_ipi.html -
@ -238,6 +240,7 @@ accelerated styles exist.
"manifoldforce"_fix_manifoldforce.html -
"meso"_fix_meso.html -
"meso"_fix_meso_move.html - move mesoscopic SPH/SDPD particles in a prescribed fashion
"meso/move"_fix_meso_move.html -
"meso/stationary"_fix_meso_stationary.html -
"momentum"_fix_momentum.html - zero the linear and/or angular momentum of a group of atoms
"move"_fix_move.html - move atoms in a prescribed fashion
@ -293,6 +296,7 @@ accelerated styles exist.
"phonon"_fix_phonon.html -
"pimd"_fix_pimd.html -
"planeforce"_fix_planeforce.html - constrain atoms to move in a plane
"plumed"_fix_plumed.html - wrapper on PLUMED free energy library
"poems"_fix_poems.html - constrain clusters of atoms to move as coupled rigid bodies
"pour"_fix_pour.html - pour new atoms/molecules into a granular simulation domain
"precession/spin"_fix_precession_spin.html -

View File

@ -0,0 +1,260 @@
"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c
:link(lws,http://lammps.sandia.gov)
:link(ld,Manual.html)
:link(lc,Section_commands.html#comm)
:line
fix hyper/global command :h3
[Syntax:]
fix ID group-ID hyper/global cutbond qfactor Vmax Tequil :pre
ID, group-ID are documented in "fix"_fix.html command
hyper/global = style name of this fix command
cutbond = max distance at which a pair of atoms is considered bonded (distance units)
qfactor = max strain at which bias potential goes to 0.0 (unitless)
Vmax = height of bias potential (energy units)
Tequil = equilibration temperature (temperature units) :ul
[Examples:]
fix 1 all hyper/global 1.0 0.3 0.8 300.0 :pre
[Description:]
This fix is meant to be used with the "hyper"_hyper.html command to
perform a bond-boost global hyperdynamics (GHD) simulation. The role
of this fix is to a select a single pair of atoms in the system at
each timestep to add a global bias potential to, which will alter the
dynamics of the system in a manner that effectively accelerates time.
This is in contrast to the "fix hyper/local"_fix_hyper_local.html
command, which can be user to perform a local hyperdynamics (LHD)
simulation, by adding a local bias potential to multiple pairs of
atoms at each timestep. GHD can time accelerate a small simulation
with up to a few 100 atoms. For larger systems, LHD is needed to
achieve good time acceleration.
For a system that undergoes rare transition events, where one or more
atoms move over an energy barrier to a new potential energy basin, the
effect of the bias potential is to induce more rapid transitions.
This can lead to a dramatic speed-up in the rate at which events
occurs, without altering their relative frequencies, thus leading to
an overall increase in the elapsed real time of the simulation as
compared to running for the same number of timesteps with normal MD.
See the "hyper"_hyper.html doc page for a more general discussion of
hyperdynamics and citations that explain both GHD and LHD.
The equations and logic used by this fix and described here to perform
GHD follow the description given in "(Voter2013)"_#Voter2013ghd. The
bond-boost form of a bias potential for HD is due to Miron and
Fichthorn as described in "(Miron)"_#Mironghd. In LAMMPS we use a
simplified version of bond-boost GHD where a single bond in the system
is biased at any one timestep.
Bonds are defined between each pair of I,J atoms whose R0ij distance
is less than {cutbond}, when the system is in a quenched state
(minimum) energy. Note that these are not "bonds" in a covalent
sense. A bond is simply any pair of atoms that meet the distance
criterion. {Cutbond} is an argument to this fix; it is discussed
below. A bond is only formed if one or both of the I.J atoms are in
the specified group.
The current strain of bond IJ (when running dynamics) is defined as
Eij = (Rij - R0ij) / R0ij :pre
where Rij is the current distance between atoms I,J, and R0ij is the
equilibrium distance in the quenched state.
The bias energy Vij of any bond IJ is defined as
Vij = Vmax * (1 - (Eij/q)^2) for abs(Eij) < qfactor
= 0 otherwise :pre
where the prefactor {Vmax} and the cutoff {qfactor} are arguments to
this fix; they are discussed below. This functional form is an
inverse parabola centered at 0.0 with height Vmax and which goes to
0.0 at +/- qfactor.
Let Emax = the maximum of abs(Eij) for all IJ bonds in the system on a
given timestep. On that step, Vij is added as a bias potential to
only the single bond with strain Emax, call it Vij(max). Note that
Vij(max) will be 0.0 if Emax >= qfactor on that timestep. Also note
that Vij(max) is added to the normal interatomic potential that is
computed between all atoms in the system at every step.
The derivative of Vij(max) with respect to the position of each atom
in the Emax bond gives a bias force Fij(max) acting on the bond as
Fij(max) = - dVij(max)/dEij = 2 Vmax Eij / qfactor^2 for abs(Eij) < qfactor
= 0 otherwise :pre
which can be decomposed into an equal and opposite force acting on
only the two I,J atoms in the Emax bond.
The time boost factor for the system is given each timestep I by
Bi = exp(beta * Vij(max)) :pre
where beta = 1/kTequil, and {Tequil} is the temperature of the system
and an argument to this fix. Note that Bi >= 1 at every step.
NOTE: To run GHD, the input script must also use the "fix
langevin"_fix_langevin.html command to thermostat the atoms at the
same {Tequil} as specified by this fix, so that the system is running
constant-temperature (NVT) dynamics. LAMMPS does not check that this
is done.
The elapsed time t_hyper for a GHD simulation running for {N}
timesteps is simply
t_hyper = Sum (i = 1 to N) Bi * dt :pre
where dt is the timestep size defined by the "timestep"_timestep.html
command. The effective time acceleration due to GHD is thus t_hyper /
N*dt, where N*dt is elapsed time for a normal MD run of N timesteps.
Note that in GHD, the boost factor varies from timestep to timestep.
Likewise, which bond has Emax strain and thus which pair of atoms the
bias potential is added to, will also vary from timestep to timestep.
This is in contrast to local hyperdynamics (LHD) where the boost
factor is an input parameter; see the "fix
hyper/local"_fix_hyper_local.html doc page for details.
:line
Here is additional information on the input parameters for GHD.
The {cutbond} argument is the cutoff distance for defining bonds
between pairs of nearby atoms. A pair of I,J atoms in their
equilibrium, minimum-energy configuration, which are separated by a
distance Rij < {cutbond}, are flagged as a bonded pair. Setting
{cubond} to be ~25% larger than the nearest-neighbor distance in a
crystalline lattice is a typical choice for solids, so that bonds
exist only between nearest neighbor pairs.
The {qfactor} argument is the limiting strain at which the bias
potential goes to 0.0. It is dimensionless, so a value of 0.3 means a
bond distance can be up to 30% larger or 30% smaller than the
equilibrium (quenched) R0ij distance and the two atoms in the bond
could still experience a non-zero bias force.
If {qfactor} is set too large, then transitions from one energy basin
to another are affected because the bias potential is non-zero at the
transition state (e.g. saddle point). If {qfactor} is set too small
than little boost is achieved because the Eij strain of some bond in
the system will (nearly) always exceed {qfactor}. A value of 0.3 for
{qfactor} is typically reasonable.
The {Vmax} argument is the prefactor on the bias potential. Ideally,
tt should be set to a value slightly less than the smallest barrier
height for an event to occur. Otherwise the applied bias potential
may be large enough (when added to the interatomic potential) to
produce a local energy basin with a maxima in the center. This can
produce artificial energy minima in the same basin that trap an atom.
Or if {Vmax} is even larger, it may induce an atom(s) to rapidly
transition to another energy basin. Both cases are "bad dynamics"
which violate the assumptions of GHD that guarantee an accelerated
time-accurate trajectory of the system.
Note that if {Vmax} is set too small, the GHD simulation will run
correctly. There will just be fewer events because the hyper time
(t_hyper equation above) will be shorter.
NOTE: If you have no physical intuition as to the smallest barrier
height in your system, a reasonable strategy to determine the largest
{Vmax} you can use for an LHD model, is to run a sequence of
simulations with smaller and smaller {Vmax} values, until the event
rate does not change.
The {Tequil} argument is the temperature at which the system is
simulated; see the comment above about the "fix
langevin"_fix_langevin.html thermostatting. It is also part of the
beta term in the exponential factor that determines how much boost is
achieved as a function of the bias potential.
In general, the lower the value of {Tequil} and the higher the value
of {Vmax}, the more boost will be achievable by the GHD algorithm.
:line
[Restart, fix_modify, output, run start/stop, minimize info:]
No information about this fix is written to "binary restart
files"_restart.html.
The "fix_modify"_fix_modify.html {energy} option is supported by this
fix to add the energy of the bias potential to the the system's
potential energy as part of "thermodynamic output"_thermo_style.html.
This fix computes a global scalar and global vector of length 11, which
can be accessed by various "output commands"_Howto_output.html. The
scalar is the magnitude of the bias potential (energy units) applied on
the current timestep. The vector stores the following quantities:
1 = boost factor on this step (unitless)
2 = max strain Eij of any bond on this step (unitless)
3 = ID of first atom in the max-strain bond
4 = ID of second atom in the max-strain bond
5 = average # of bonds/atom on this step :ul
6 = fraction of timesteps with bias = 0.0 during this run
7 = max drift distance of any atom during this run (distance units)
8 = max bond length during this run (distance units) :ul
9 = cummulative hyper time since fix was defined (time units)
10 = cummulative count of event timesteps since fix was defined
11 = cummulative count of atoms in events since fix was defined :ul
The first 5 quantities are for the current timestep. Quantities 6-8
are for the current hyper run. Quantities 9-11 are cummulative across
multiple runs (since the fix was defined in the input script).
For value 7, drift is the distance an atom moves between timesteps
when the bond list is reset, i.e. between events. Atoms involved in
an event will typically move the greatest distance since others are
typically oscillating around their lattice site.
For value 10, events are checked for by the "hyper"_hyper.html command
once every {Nevent} timesteps. This value is the count of those
timesteps on which one (or more) events was detected. It is NOT the
number of distinct events, since more than one event may occur in the
same {Nevent} time window.
For value 11, each time the "hyper"_hyper.html command checks for an
event, it invokes a compute to flag zero or more atoms as
participating in one or more events. E.g. atoms that have displaced
more than some distance from the previous quench state. Value 11 is
the cummulative count of the number of atoms participating in any of
the events that were found.
The scalar and vector values calculated by this fix are all
"intensive".
No parameter of this fix can be used with the {start/stop} keywords of
the "run"_run.html command. This fix is not invoked during "energy
minimization"_minimize.html.
[Restrictions:]
This command can only be used if LAMMPS was built with the REPLICA
package. See the "Build package"_Build_package.html doc page for more
info.
[Related commands:]
"hyper"_hyper.html, "fix hyper/local"_fix_hyper_local.html
[Default:] None
:line
:link(Voter2013ghd)
[(Voter2013)] S. Y. Kim, D. Perez, A. F. Voter, J Chem Phys, 139,
144110 (2013).
:link(Mironghd)
[(Miron)] R. A. Miron and K. A. Fichthorn, J Chem Phys, 119, 6210 (2003).

404
doc/src/fix_hyper_local.txt Normal file
View File

@ -0,0 +1,404 @@
"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c
:link(lws,http://lammps.sandia.gov)
:link(ld,Manual.html)
:link(lc,Section_commands.html#comm)
:line
fix hyper/local command :h3
[Syntax:]
fix ID group-ID hyper/local cutbond qfactor Vmax Tequil Dcut alpha Btarget :pre
ID, group-ID are documented in "fix"_fix.html command :ulb,l
hyper/local = style name of this fix command :l
cutbond = max distance at which a pair of atoms is considered bonded (distance units) :l
qfactor = max strain at which bias potential goes to 0.0 (unitless) :l
Vmax = estimated height of bias potential (energy units) :l
Tequil = equilibration temperature (temperature units) :l
Dcut = minimum distance between boosted bonds (distance units) :l
alpha = boostostat relaxation time (time units) :l
Btarget = desired time boost factor (unitless) :l
zero or more keyword/value pairs may be appended :l
keyword = {lost} or {check/bias} or {check/coeff}
{lostbond} value = error/warn/ignore
{check/bias} values = Nevery error/warn/ignore
{check/coeff} values = Nevery error/warn/ignore :pre
:ule
[Examples:]
fix 1 all hyper/local 1.0 0.3 0.8 300.0 :pre
[Description:]
This fix is meant to be used with the "hyper"_hyper.html command to
perform a bond-boost local hyperdynamics (LHD) simulation. The role
of this fix is to a select multiple pairs of atoms in the system at
each timestep to add a local bias potential to, which will alter the
dynamics of the system in a manner that effectively accelerates time.
This is in contrast to the "fix hyper/global"_fix_hyper_global.html
command, which can be user to perform a global hyperdynamics (GHD)
simulation, by adding a global bias potential to a single pair of
atoms at each timestep. GHD can time accelerate a small simulation
with up to a few 100 atoms. For larger systems, LHD is needed to
achieve good time acceleration.
For a system that undergoes rare transition events, where one or more
atoms move over an energy barrier to a new potential energy basin, the
effect of the bias potential is to induce more rapid transitions.
This can lead to a dramatic speed-up in the rate at which events
occurs, without altering their relative frequencies, thus leading to
an overall increase in the elapsed real time of the simulation as
compared to running for the same number of timesteps with normal MD.
See the "hyper"_hyper.html doc page for a more general discussion of
hyperdynamics and citations that explain both GHD and LHD.
The equations and logic used by this fix and described here to perform
LHD follow the description given in "(Voter2013)"_#Voter2013lhd. The
bond-boost form of a bias potential for HD is due to Miron and
Fichthorn as described in "(Miron)"_#Mironlhd.
To understand this description, you should first read the description
of the GHD algorithm on the "fix hyper/global"_fix_hyper_global.html
doc page. This description of LHD builds on the GHD description.
The definition of bonds, Eij, and Emax are the same for GHD and LHD.
The formulas for Vij(max) and Fij(max) are also the same except for a
pre-factor Cij, explained below.
The bias energy Vij applied to a bond IJ with maximum strain is
Vij(max) = Cij * Vmax * (1 - (Eij/q)^2) for abs(Eij) < qfactor
= 0 otherwise :pre
The derivative of Vij(max) with respect to the position of each atom
in the IJ bond gives a bias force Fij(max) acting on the bond as
Fij(max) = - dVij(max)/dEij = 2 Cij Vmax Eij / qfactor^2 for abs(Eij) < qfactor
= 0 otherwise :pre
which can be decomposed into an equal and opposite force acting on
only the two I,J atoms in the IJ bond.
The key difference is that in GHD a bias energy and force is added (on
a particular timestep) to only one bond (pair of atoms) in the system,
which is the bond with maximum strain Emax.
In LHD, a bias energy and force can be added to multiple bonds
separated by the specified {Dcut} distance or more. A bond IJ is
biased if it is the maximum strain bond within its local
"neighborhood", which is defined as the bond IJ plus any neighbor
bonds within a distance {Dcut} from IJ. The "distance" between bond
IJ and bond KL is the minimum distance between any of the IK, IL, JK,
JL pairs of atoms.
For a large system, multiple bonds will typically meet this
requirement, and thus a bias potential Vij(max) will be applied to
many bonds on the same timestep.
In LHD, all bonds store a Cij prefactor which appears in the Vij(max)
and Fij(max) equations above. Note that the Cij factor scales the
strength of the bias energy and forces whenever bond IJ is the maximum
strain bond in its neighborhood.
Cij is initialized to 1.0 when a bond between the I,J atoms is first
defined. The specified {Btarget} factor is then used to adjust the
Cij prefactors for each bond every timestep in the following manner.
An instantaneous boost factor Bij is computed each timestep
for each bond, as
Bij = exp(beta * Vkl(max)) :pre
where Vkl(max) is the bias energy of the maxstrain bond KL within bond
IJ's neighborhood, beta = 1/kTequil, and {Tequil} is the temperature
of the system and an argument to this fix.
NOTE: To run LHD, the input script must also use the "fix
langevin"_fix_langevin.html command to thermostat the atoms at the
same {Tequil} as specified by this fix, so that the system is running
constant-temperature (NVT) dynamics. LAMMPS does not check that this
is done.
Note that if IJ = KL, then bond IJ is a biased bond on that timestep,
otherwise it is not. But regardless, the boost factor Bij can be
thought of an estimate of time boost currently being applied within a
local region centered on bond IJ. For LHD, we want this to be the
specified {Btarget} value everywhere in the simulation domain.
To accomplish this, if Bij < Btarget, the Cij prefactor for bond IJ is
incremented on the current timestep by an amount proportional to the
inverse of the specified {alpha} and the difference (Bij - Btarget).
Conversely if Bij > Btarget, Cij is decremented by the same amount.
This procedure is termed "boostostatting" in
"(Voter2013)"_#Voter2013lhd. It drives all of the individual Cij to
values such that when Vij{max} is applied as a bias to bond IJ, the
resulting boost factor Bij will be close to {Btarget} on average.
Thus the LHD time acceleration factor for the overall system is
effectively {Btarget}.
Note that in LHD, the boost factor {Btarget} is specified by the user.
This is in contrast to global hyperdynamics (GHD) where the boost
factor varies each timestep and is computed as a function of {Vmax},
Emax, and {Tequil}; see the "fix hyper/global"_fix_hyper_global.html
doc page for details.
:line
Here is additional information on the input parameters for LHD.
Note that the {cutbond}, {qfactor}, and {Tequil} arguments have the
same meaning as for GHD. The {Vmax} argument is slightly different.
The {Dcut}, {alpha}, and {Btarget} parameters are unique to LHD.
The {cutbond} argument is the cutoff distance for defining bonds
between pairs of nearby atoms. A pair of I,J atoms in their
equilibrium, minimum-energy configuration, which are separated by a
distance Rij < {cutbond}, are flagged as a bonded pair. Setting
{cubond} to be ~25% larger than the nearest-neighbor distance in a
crystalline lattice is a typical choice for solids, so that bonds
exist only between nearest neighbor pairs.
The {qfactor} argument is the limiting strain at which the bias
potential goes to 0.0. It is dimensionless, so a value of 0.3 means a
bond distance can be up to 30% larger or 30% smaller than the
equilibrium (quenched) R0ij distance and the two atoms in the bond
could still experience a non-zero bias force.
If {qfactor} is set too large, then transitions from one energy basin
to another are affected because the bias potential is non-zero at the
transition state (e.g. saddle point). If {qfactor} is set too small
than little boost can be achieved because the Eij strain of some bond in
the system will (nearly) always exceed {qfactor}. A value of 0.3 for
{qfactor} is typically a reasonable value.
The {Vmax} argument is a fixed prefactor on the bias potential. There
is a also a dynamic prefactor Cij, driven by the choice of {Btarget}
as discussed above. The product of these should be a value less than
the smallest barrier height for an event to occur. Otherwise the
applied bias potential may be large enough (when added to the
interatomic potential) to produce a local energy basin with a maxima
in the center. This can produce artificial energy minima in the same
basin that trap an atom. Or if Cij*{Vmax} is even larger, it may
induce an atom(s) to rapidly transition to another energy basin. Both
cases are "bad dynamics" which violate the assumptions of LHD that
guarantee an accelerated time-accurate trajectory of the system.
NOTE: It may seem that {Vmax} can be set to any value, and Cij will
compensate to reduce the overall prefactor if necessary. However the
Cij are initialized to 1.0 and the boostostatting procedure typically
operates slowly enough that there can be a time period of bad dynamics
if {Vmax} is set too large. A better strategy is to set {Vmax} to the
smallest barrier height for an event (the same as for GHD), so that
the Cij remain near unity.
The {Tequil} argument is the temperature at which the system is
simulated; see the comment above about the "fix
langevin"_fix_langevin.html thermostatting. It is also part of the
beta term in the exponential factor that determines how much boost is
achieved as a function of the bias potential. See the discussion of
the {Btarget} argument below.
As discussed above, the {Dcut} argument is the distance required
between two locally maxstrain bonds for them to both be selected as
biased bonds on the same timestep. Computationally, the larger {Dcut}
is, the more work (computation and communication) must be done each
timestep within the LHD algorithm. And the fewer bonds can be
simultaneously biased, which may mean the specified {Btarget} time
acceleration cannot be achieved.
Physically {Dcut} should be a long enough distance that biasing two
pairs of atoms that close together will not influence the dynamics of
each pair. E.g. something like 2x the cutoff of the interatomic
potential. In practice a {Dcut} value of ~10 Angstroms seems to work
well for many solid-state systems.
NOTE: You must also insure that ghost atom communication is performed
for a distance of at least {Dcut} + {cutevent} where {cutevent} = the
distance one or more atoms move (between quenched states) to be
considered an "event". It is an argument to the "compute
event/displace" command used to detect events. By default the ghost
communication distance is set by the pair_style cutoff, which will
typically be < {Dcut}. The "comm_modify cutoff"_comm_modify.html
command can be used to set the ghost cutoff explicitly, e.g.
comm_modify cutoff 12.0 :pre
This fix does not know the {cutevent} parameter, but uses half the
bond length as an estimate to warn if the ghost cutoff is not long
enough.
As described above the {alpha} argument is a pre-factor in the
boostostat update equation for each bond's Cij prefactor. {Alpha} is
specified in time units, similar to other thermostat or barostat
damping parameters. It is roughly the physical time it will take the
boostostat to adjust a Cij value from a too high (or too low) value to
a correct one. An {alpha} setting of a few ps is typically good for
solid-state systems. Note that the {alpha} argument here is the
inverse of the alpha parameter discussed in
"(Voter2013)"_#Voter2013lhd.
The {Btarget} argument is the desired time boost factor (a value > 1)
that all the atoms in the system will experience. The elapsed time
t_hyper for an LHD simulation running for {N} timesteps is simply
t_hyper = Btarget * N*dt :pre
where dt is the timestep size defined by the "timestep"_timestep.html
command. The effective time acceleration due to LHD is thus t_hyper /
N*dt = Btarget, where N*dt is elapsed time for a normal MD run
of N timesteps.
You cannot choose an arbitrarily large setting for {Btarget}. The
maximum value you should choose is
Btarget = exp(beta * Vsmall) :pre
where Vsmall is the smallest event barrier height in your system, beta
= 1/kTequil, and {Tequil} is the specified temperature of the system
(both by this fix and the Langevin thermostat).
Note that if {Btarget} is set smaller than this, the LHD simulation
will run correctly. There will just be fewer events because the hyper
time (t_hyper equation above) will be shorter.
NOTE: If you have no physical intuition as to the smallest barrier
height in your system, a reasonable strategy to determine the largest
{Btarget} you can use for an LHD model, is to run a sequence of
simulations with smaller and smaller {Btarget} values, until the event
rate does not change.
:line
[Restart, fix_modify, output, run start/stop, minimize info:]
No information about this fix is written to "binary restart
files"_restart.html.
The "fix_modify"_fix_modify.html {energy} option is supported by this
fix to add the energy of the bias potential to the the system's
potential energy as part of "thermodynamic output"_thermo_style.html.
This fix computes a global scalar and global vector of length 23,
which can be accessed by various "output
commands"_Howto_output.html. The scalar is the magnitude of
the bias potential (energy units) applied on the current timestep,
summed over all biased bonds. The vector stores the following
quantities:
1 = # of biased bonds on this step
2 = max strain Eij of any bond on this step (unitless)
3 = average bias potential for all biased bonds on this step (energy units)
4 = average # of bonds/atom on this step
5 = average neighbor bonds/bond on this step within {Dcut} :ul
6 = fraction of steps and bonds with no bias during this run
7 = max drift distance of any atom during this run (distance units)
8 = max bond length during this run (distance units)
9 = average # of biased bonds/step during this run
10 = average bias potential for all biased bonds during this run (energy units)
11 = max bias potential for any biased bond during this run (energy units)
12 = min bias potential for any biased bond during this run (energy units)
13 = max distance from my sub-box of any ghost atom with maxstrain < qfactor during this run (distance units)
14 = max distance outside my box of any ghost atom with any maxstrain during this run (distance units)
15 = count of ghost neighbor atoms not found on reneighbor steps during this run
16 = count of lost bond partners during this run
17 = average bias coeff for lost bond partners during this run
18 = count of bias overlaps found during this run
19 = count of non-matching bias coefficients found during this run :ul
20 = cummulative hyper time since fix created (time units)
21 = cummulative count of event timesteps since fix created
22 = cummulative count of atoms in events since fix created
23 = cummulative # of new bonds since fix created :ul
The first quantities (1-5) are for the current timestep. Quantities
6-19 are for the current hyper run. They are reset each time a new
hyper run is performed. Quantities 20-23 are cummulative across
multiple runs (since the fix was defined in the input script).
For value 6, the numerator is a count of all biased bonds on every
timestep whose bias energy = 0.0 due to Eij >= {qfactor}. The
denominator is the count of all biased bonds on all timesteps.
For value 7, drift is the distance an atom moves between timesteps
when the bond list is reset, i.e. between events. Atoms involved in
an event will typically move the greatest distance since others are
typically oscillating around their lattice site.
For values 13 and 14, the maxstrain of a ghost atom is the maxstrain
of any bond it is part of, and it is checked for ghost atoms within
the bond neighbor cutoff.
Values 15-19 are mostly useful for debugging and diagnositc purposes.
For values 15-17, it is possible that a ghost atom owned by another
processor will move far enough (e.g. as part of an event-in-progress)
that it will no longer be within the communication cutoff distance for
acquiring ghost atoms. Likewise it may be a ghost atom bond partner
that cannot be found because it has moved too far. These values count
those occurrences. Because they typically involve atoms that are part
of events, they do not usually indicate bad dynamics. Value 16 is the
average bias coefficient for bonds where a partner atom was lost.
For value 18, no two bonds should be biased if they are within a
{Dcut} distance of each other. This value should be zero, indicating
that no pair of bonds "overlap", meaning they are closer than {Dcut}
from each other.
For value 19, the same bias coefficient is stored by both atoms in an
IJ bond. This value should be zero, indicating that for all bonds,
each atom in the bond stores the a bias coefficient with the same
value.
Value 20 is simply the specified {boost} factor times the number of
timestep times the timestep size.
For value 21, events are checked for by the "hyper"_hyper.html command
once every {Nevent} timesteps. This value is the count of those
timesteps on which one (or more) events was detected. It is NOT the
number of distinct events, since more than one event may occur in the
same {Nevent} time window.
For value 22, each time the "hyper"_hyper.html command checks for an
event, it invokes a compute to flag zero or more atoms as
participating in one or more events. E.g. atoms that have displaced
more than some distance from the previous quench state. Value 22 is
the cummulative count of the number of atoms participating in any of
the events that were found.
Value 23 tallies the number of new bonds created by the bond reset
operation. Bonds between a specific I,J pair of atoms may persist for
the entire hyperdynamics simulation if neither I or J are involved in
an event.
The scalar and vector values calculated by this fix are all
"intensive".
No parameter of this fix can be used with the {start/stop} keywords of
the "run"_run.html command. This fix is not invoked during "energy
minimization"_minimize.html.
[Restrictions:]
This fix is part of the REPLICA package. It is only enabled if LAMMPS
was built with that package. See the "Build package"_Build_package.html
doc page for more info.
[Related commands:]
"hyper"_hyper.html, "fix hyper/global"_fix_hyper_global.html
[Default:] None
:line
:link(Voter2013lhd)
[(Voter2013)] S. Y. Kim, D. Perez, A. F. Voter, J Chem Phys, 139,
144110 (2013).
:link(Mironlhd)
[(Miron)] R. A. Miron and K. A. Fichthorn, J Chem Phys, 119, 6210 (2003).

View File

@ -57,6 +57,8 @@ Fixes :h1
fix_grem
fix_halt
fix_heat
fix_hyper_global
fix_hyper_local
fix_imd
fix_indent
fix_ipi

192
doc/src/hyper.txt Normal file
View File

@ -0,0 +1,192 @@
"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c
:link(lws,http://lammps.sandia.gov)
:link(ld,Manual.html)
:link(lc,Section_commands.html#comm)
:line
hyper command :h3
[Syntax:]
hyper N Nevent fix-ID compute-ID keyword values ... :pre
N = # of timesteps to run :ulb,l
Nevent = check for events every this many steps :l
fix-ID = ID of a fix that applies a global or local bias potential, can be NULL :l
compute-ID = ID of a compute that identifies when an event has occurred :l
zero or more keyword/value pairs may be appended :l
keyword = {min} or {dump} or {rebond} :l
{min} values = etol ftol maxiter maxeval
etol = stopping tolerance for energy, used in quenching
ftol = stopping tolerance for force, used in quenching
maxiter = max iterations of minimize, used in quenching
maxeval = max number of force/energy evaluations, used in quenching
{dump} value = dump-ID
dump-ID = ID of dump to trigger whenever an event takes place
{rebond} value = Nrebond
Nrebond = frequency at which to reset bonds, even if no event has occurred
:pre
:ule
[Examples:]
compute event all event/displace 1.0
fix HG mobile hyper/global 3.0 0.3 0.4 800.0
hyper 5000 100 HG event min 1.0e-6 1.0e-6 100 100 dump 1 dump 5 :pre
[Description:]
Run a bond-boost hyperdynamics (HD) simulation where time is
accelerated by application of a bias potential to one or more pairs of
nearby atoms in the system. This command can be used to run both
global and local hyperdyamics. In global HD a single bond within the
system is biased on each timestep. In local HD multiple bonds
(separated by a sufficient distance) can be biased simultaneously at
each timestep. In the bond-boost hyperdynamics context, a "bond" is
not a covalent bond between a pair of atoms in a molecule. Rather it
is simply a pair of nearby atoms as discussed below.
Both global and local HD are described in "(Voter2013)"_#Voter2013 by
Art Voter and collaborators. Similar to parallel replica dynamics
(PRD), global and local HD are methods for performing accelerated
dynamics that are suitable for infrequent-event systems that obey
first-order kinetics. A good overview of accelerated dynamics methods
for such systems in given in "(Voter2002)"_#Voter2002hd from the same
group. To quote from the review paper: "The dynamical evolution is
characterized by vibrational excursions within a potential basin,
punctuated by occasional transitions between basins." The transition
probability is characterized by p(t) = k*exp(-kt) where k is the rate
constant. Running multiple replicas gives an effective enhancement in
the timescale spanned by the multiple simulations, while waiting for
an event to occur.
Both HD and PRD produce a time-accurate trajectory that effectively
extends the timescale over which a system can be simulated, but they
do it differently. HD uses a single replica of the system and
accelerates time by biasing the interaction potential in a manner such
that each timestep is effectively longer. PRD creates Nr replicas of
the system and runs dynamics on each independently with a normal
unbiased potential until an event occurs in one of the replicas. The
time between events is reduced by a factor of Nr replicas. For both
methods, per CPU second, more physical time elapses and more events
occur. See the "prd"_prd.html doc page for more info about PRD.
An HD run has several stages, which are repeated each time an event
occurs, as explained below. The logic for an HD run is as follows:
quench
create initial list of bonds :pre
while (time remains):
run dynamics for Nevent steps
quench
check for an event
if event occurred: reset list of bonds
restore pre-quench state :pre
The list of bonds is the list of atom pairs of atoms that are within a
short cutoff distance of each other after the system energy is
minimized (quenched). This list is created and reset by a "fix
hyper/global"_fix_hyper_global.html or "fix
hyper/local"_fix_hyper_local.html command specified as {fix-ID}. At
every dynamics timestep, the same fix selects one of more bonds to
apply a bias potential to.
IMPORTANT NOTE: The style of fix associated with the specified
{fix-ID} determines whether you are running the global versus local
hyperdynamics algorithm.
Dynamics (with the bias potential) is run continuously, stopping every
{Nevent} steps to check if a transition event has occurred. The
specified {N} for total steps must be a multiple of {Nevent}. check
is performed by quenching the system and comparing the resulting atom
coordinates to the coordinates from the previous basin.
A quench is an energy minimization and is performed by whichever
algorithm has been defined by the "min_style"_min_style.html command.
Minimization parameters may be set via the
"min_modify"_min_modify.html command and by the {min} keyword of the
hyper command. The latter are the settings that would be used with
the "minimize"_minimize.html command. Note that typically, you do not
need to perform a highly-converged minimization to detect a transition
event, though you may need to in order to prevent a set of atoms in
the system from relaxing to a saddle point.
The event check is performed by a compute with the specified
{compute-ID}. Currently there is only one compute that works with the
hyper command, which is the "compute
event/displace"_compute_event_displace.html command. Other
event-checking computes may be added. "Compute
event/displace"_compute_event_displace.html checks whether any atom in
the compute group has moved further than a specified threshold
distance. If so, an event has occurred.
If this happens, the list of bonds is reset, since some bond pairs
are likely now too far apart, and new pairs are likely close enough
to be considered a bond. The pre-quenched state of the
system (coordinates and velocities) is restored, and dynamics continue.
At the end of the hyper run, a variety of statistics are output to the
screen and logfile. These include info relevant to both global and
local hyperdynamics, such as the number of events and the elapsed
hyper time (acclerated time), And it includes info specific to one or
the other, depending on which style of fix was specified by {fix-ID}.
:line
The optional keywords operate as follows.
As explained above, the {min} keyword can be used to specify
parameters for the quench. Their meaning is the same
as for the "minimize"_minimize.html command
The {dump} keyword can be used to trigger a specific dump command with
the specified {dump-ID} to output a snapshot each time an event is
detected. It can be specified multiple times with different {dump-ID}
values, as in the example above. These snapshots will be for the
quenched state of the system on a timestep that is a multiple of
{Nevent}, i.e. a timestep after the event has occurred. Note that any
dump command in the input script will also output snapshots at
whatever timestep interval it defines via its {N} argument; see the
"dump"_dump.html command for details. This means if you only want a
particular dump to output snapshots when events are detected, you
should specify its {N} as a value larger than the length of the
hyperdynamics run.
As in the code logic above, the bond list is normally only reset when
an event occurs. The {rebond} keyword will force a reset of the bond
list every {Nrebond} steps, even if an event has not occurred.
{Nrebond} must be a multiple of {Nevent}. This can be useful to check
if more frequent resets alter event statistics, perhaps because the
parameters chosen for defining what is a bond and what is an event are
producing bad dynamics in the presence of the bias potential.
:line
[Restrictions:]
This command can only be used if LAMMPS was built with the REPLICA
package. See the "Build package"_Build_package.html doc
page for more info.
[Related commands:]
"fix hyper/global"_fix_hyper_global.html, "fix
hyper/local"_fix_hyper_local.html, "compute
event/displace"_compute_event_displace.html, "prd"_prd.html
[Default:]
The option defaults are min = 0.1 0.1 40 50 and time = steps.
:line
:link(Voter2013)
[(Voter2013)] S. Y. Kim, D. Perez, A. F. Voter, J Chem Phys, 139,
144110 (2013).
:link(Voter2002hd)
[(Voter2002)] Voter, Montalenti, Germann, Annual Review of Materials
Research 32, 321 (2002).

View File

@ -160,6 +160,7 @@ dump_cfg_uef.html
echo.html
group.html
group2ndx.html
hyper.html
if.html
include.html
info.html
@ -277,6 +278,8 @@ fix_gravity.html
fix_grem.html
fix_halt.html
fix_heat.html
fix_hyper_global.html
fix_hyper_local.html
fix_imd.html
fix_indent.html
fix_ipi.html

View File

@ -48,11 +48,12 @@ replicas of a system. One or more replicas can be used. The total
number of steps {N} to run can be interpreted in one of two ways; see
discussion of the {time} keyword below.
PRD is described in "this paper"_#Voter1998 by Art Voter. It is a method
for performing accelerated dynamics that is suitable for
infrequent-event systems that obey first-order kinetics. A good
overview of accelerated dynamics methods for such systems in given in
"this review paper"_#Voter2002prd from the same group. To quote from the
PRD is described in "(Voter1998)"_#Voter1998 by Art Voter. Similar to
global or local hyperdynamics (HD), PRD is a method for performing
accelerated dynamics that is suitable for infrequent-event systems
that obey first-order kinetics. A good overview of accelerated
dynamics methods for such systems in given in this review paper
"(Voter2002)"_#Voter2002prd from Art's group. To quote from the
paper: "The dynamical evolution is characterized by vibrational
excursions within a potential basin, punctuated by occasional
transitions between basins." The transition probability is
@ -61,15 +62,26 @@ Running multiple replicas gives an effective enhancement in the
timescale spanned by the multiple simulations, while waiting for an
event to occur.
Each replica runs on a partition of one or more processors. Processor
partitions are defined at run-time using the "-partition command-line
switch"_Run_options.html. Note that if you have MPI installed, you
can run a multi-replica simulation with more replicas (partitions)
than you have physical processors, e.g you can run a 10-replica
simulation on one or two processors. However for PRD, this makes
little sense, since running a replica on virtual instead of physical
processors,offers no effective parallel speed-up in searching for
infrequent events. See the "Howto replica"_Howto_replica.html doc
Both PRD and HD produce a time-accurate trajectory that effectively
extends the timescale over which a system can be simulated, but they
do it differently. PRD creates Nr replicas of the system and runs
dynamics on each independently with a normal unbiased potential until
an event occurs in one of the replicas. The time between events is
reduced by a factor of Nr replicas. HD uses a single replica of the
system and accelerates time by biasing the interaction potential in a
manner such that each timestep is effectively longer. For both
methods, per CPU second, more physical time elapses and more events
occur. See the "hyper"_hyper.html doc page for more info about HD.
In PRD, each replica runs on a partition of one or more processors.
Processor partitions are defined at run-time using the "-partition
command-line switch"_Run_options.html. Note that if you have MPI
installed, you can run a multi-replica simulation with more replicas
(partitions) than you have physical processors, e.g you can run a
10-replica simulation on one or two processors. However for PRD, this
makes little sense, since running a replica on virtual instead of
physical processors,offers no effective parallel speed-up in searching
for infrequent events. See the "Howto replica"_Howto_replica.html doc
page for further discussion.
When a PRD simulation is performed, it is assumed that each replica is
@ -78,8 +90,8 @@ I.e. the simulation domain, the number of atoms, the interaction
potentials, etc should be the same for every replica.
A PRD run has several stages, which are repeated each time an "event"
occurs in one of the replicas, as defined below. The logic for a PRD
run is as follows:
occurs in one of the replicas, as explained below. The logic for a
PRD run is as follows:
while (time remains):
dephase for n_dephase*t_dephase steps
@ -129,7 +141,8 @@ Minimization parameters may be set via the
PRD command. The latter are the settings that would be used with the
"minimize"_minimize.html command. Note that typically, you do not
need to perform a highly-converged minimization to detect a transition
event.
event, though you may need to in order to prevent a set of atoms in
the system from relaxing to a saddle point.
The event check is performed by a compute with the specified
{compute-ID}. Currently there is only one compute that works with the
@ -307,7 +320,7 @@ deposit"_fix_deposit.html.
"min_modify"_min_modify.html, "min_style"_min_style.html,
"run_style"_run_style.html, "minimize"_minimize.html,
"velocity"_velocity.html, "temper"_temper.html, "neb"_neb.html,
"tad"_tad.html
"tad"_tad.html, "hyper"_hyper.html
[Default:]

View File

@ -78,6 +78,7 @@ friction: frictional contact of spherical asperities between 2d surfaces
gcmc: Grand Canonical Monte Carlo (GCMC) via the fix gcmc command
granregion: use of fix wall/region/gran as boundary on granular particles
hugoniostat: Hugoniostat shock dynamics
hyper: global and local hyperdynamics of diffusion on Pt surface
indent: spherical indenter into a 2d solid
kim: use of potentials in Knowledge Base for Interatomic Models (KIM)
latte: use of LATTE density-functional tight-binding quantum code

View File

@ -0,0 +1,184 @@
create_atoms 1 single 27.5 9.5 4
create_atoms 1 single 16 9 4
create_atoms 1 single 10 12 4
create_atoms 1 single 31 44 4
create_atoms 1 single 13 17 4
create_atoms 1 single 8.5 28.5 4
create_atoms 1 single 23 26 4
create_atoms 1 single 38 27 4
create_atoms 1 single 37.5 4.5 4
create_atoms 1 single 41.5 47.5 4
create_atoms 1 single 20.5 37.5 4
create_atoms 1 single 5 8 4
create_atoms 1 single 2.5 16.5 4
create_atoms 1 single 38.5 45.5 4
create_atoms 1 single 9 0 4
create_atoms 1 single 39 32 4
create_atoms 1 single 45.5 11.5 4
create_atoms 1 single 40 0 4
create_atoms 1 single 44.5 2.5 4
create_atoms 1 single 4.5 44.5 4
create_atoms 1 single 24.5 13.5 4
create_atoms 1 single 47.5 23.5 4
create_atoms 1 single 1 20 4
create_atoms 1 single 38.5 31.5 4
create_atoms 1 single 12.5 12.5 4
create_atoms 1 single 2 27 4
create_atoms 1 single 21 5 4
create_atoms 1 single 47 12 4
create_atoms 1 single 32.5 46.5 4
create_atoms 1 single 9.5 40.5 4
create_atoms 1 single 8.5 2.5 4
create_atoms 1 single 41.5 22.5 4
create_atoms 1 single 29 11 4
create_atoms 1 single 3.5 3.5 4
create_atoms 1 single 5 21 4
create_atoms 1 single 46.5 31.5 4
create_atoms 1 single 35 46 4
create_atoms 1 single 40.5 41.5 4
create_atoms 1 single 10 22 4
create_atoms 1 single 43.5 14.5 4
create_atoms 1 single 42 42 4
create_atoms 1 single 4 26 4
create_atoms 1 single 19 34 4
create_atoms 1 single 33 9 4
create_atoms 1 single 0.5 45.5 4
create_atoms 1 single 30.5 32.5 4
create_atoms 1 single 25.5 5.5 4
create_atoms 1 single 47.5 39.5 4
create_atoms 1 single 15 13 4
create_atoms 1 single 21 21 4
create_atoms 1 single 14 28 4
create_atoms 1 single 9 34 4
create_atoms 1 single 7 38 4
create_atoms 1 single 11 35 4
create_atoms 1 single 20.5 45.5 4
create_atoms 1 single 30.5 31.5 4
create_atoms 1 single 32.5 2.5 4
create_atoms 1 single 21.5 3.5 4
create_atoms 1 single 23 12 4
create_atoms 1 single 4.5 33.5 4
create_atoms 1 single 46 43 4
create_atoms 1 single 42.5 45.5 4
create_atoms 1 single 4.5 10.5 4
create_atoms 1 single 33.5 15.5 4
create_atoms 1 single 24 5 4
create_atoms 1 single 13 16 4
create_atoms 1 single 16.5 23.5 4
create_atoms 1 single 45.5 28.5 4
create_atoms 1 single 44.5 5.5 4
create_atoms 1 single 27.5 46.5 4
create_atoms 1 single 44.5 12.5 4
create_atoms 1 single 12 41 4
create_atoms 1 single 6 4 4
create_atoms 1 single 31.5 10.5 4
create_atoms 1 single 1 44 4
create_atoms 1 single 31 4 4
create_atoms 1 single 21 33 4
create_atoms 1 single 3 33 4
create_atoms 1 single 15 10 4
create_atoms 1 single 28.5 22.5 4
create_atoms 1 single 43 1 4
create_atoms 1 single 3.5 0.5 4
create_atoms 1 single 41 37 4
create_atoms 1 single 18.5 43.5 4
create_atoms 1 single 17 27 4
create_atoms 1 single 3 5 4
create_atoms 1 single 18.5 23.5 4
create_atoms 1 single 31.5 14.5 4
create_atoms 1 single 41 31 4
create_atoms 1 single 22 3 4
create_atoms 1 single 14.5 40.5 4
create_atoms 1 single 9 38 4
create_atoms 1 single 36 42 4
create_atoms 1 single 33 22 4
create_atoms 1 single 15.5 47.5 4
create_atoms 1 single 3 0 4
create_atoms 1 single 25.5 27.5 4
create_atoms 1 single 2.5 28.5 4
create_atoms 1 single 29.5 28.5 4
create_atoms 1 single 44.5 18.5 4
create_atoms 1 single 26 40 4
create_atoms 1 single 41 27 4
create_atoms 1 single 39.5 5.5 4
create_atoms 1 single 3 38 4
create_atoms 1 single 35 29 4
create_atoms 1 single 11 19 4
create_atoms 1 single 18 1 4
create_atoms 1 single 39.5 40.5 4
create_atoms 1 single 46 17 4
create_atoms 1 single 1.5 23.5 4
create_atoms 1 single 28.5 23.5 4
create_atoms 1 single 10 28 4
create_atoms 1 single 19 47 4
create_atoms 1 single 10.5 16.5 4
create_atoms 1 single 38 45 4
create_atoms 1 single 42.5 41.5 4
create_atoms 1 single 47.5 42.5 4
create_atoms 1 single 38 7 4
create_atoms 1 single 10 44 4
create_atoms 1 single 29.5 27.5 4
create_atoms 1 single 45 30 4
create_atoms 1 single 3 9 4
create_atoms 1 single 8.5 35.5 4
create_atoms 1 single 24 44 4
create_atoms 1 single 47 4 4
create_atoms 1 single 7.5 8.5 4
create_atoms 1 single 32.5 41.5 4
create_atoms 1 single 0.5 34.5 4
create_atoms 1 single 11 8 4
create_atoms 1 single 2 40 4
create_atoms 1 single 25 24 4
create_atoms 1 single 47.5 6.5 4
create_atoms 1 single 39.5 28.5 4
create_atoms 1 single 17 21 4
create_atoms 1 single 32 43 4
create_atoms 1 single 16.5 29.5 4
create_atoms 1 single 34 34 4
create_atoms 1 single 11.5 3.5 4
create_atoms 1 single 39 22 4
create_atoms 1 single 24.5 36.5 4
create_atoms 1 single 33 31 4
create_atoms 1 single 35.5 35.5 4
create_atoms 1 single 14.5 34.5 4
create_atoms 1 single 34 28 4
create_atoms 1 single 37 41 4
create_atoms 1 single 33 46 4
create_atoms 1 single 27.5 28.5 4
create_atoms 1 single 40.5 22.5 4
create_atoms 1 single 27.5 1.5 4
create_atoms 1 single 12 2 4
create_atoms 1 single 36 43 4
create_atoms 1 single 28.5 9.5 4
create_atoms 1 single 20.5 25.5 4
create_atoms 1 single 3 3 4
create_atoms 1 single 38 33 4
create_atoms 1 single 3 20 4
create_atoms 1 single 35 11 4
create_atoms 1 single 5 25 4
create_atoms 1 single 36.5 6.5 4
create_atoms 1 single 19.5 24.5 4
create_atoms 1 single 27 41 4
create_atoms 1 single 39.5 11.5 4
create_atoms 1 single 21.5 2.5 4
create_atoms 1 single 46.5 15.5 4
create_atoms 1 single 13 24 4
create_atoms 1 single 11 37 4
create_atoms 1 single 11.5 31.5 4
create_atoms 1 single 47 0 4
create_atoms 1 single 25.5 17.5 4
create_atoms 1 single 32 11 4
create_atoms 1 single 8 17 4
create_atoms 1 single 27.5 12.5 4
create_atoms 1 single 25 7 4
create_atoms 1 single 25.5 37.5 4
create_atoms 1 single 12 15 4
create_atoms 1 single 1 7 4
create_atoms 1 single 18.5 47.5 4
create_atoms 1 single 5 38 4
create_atoms 1 single 42 19 4
create_atoms 1 single 30.5 7.5 4
create_atoms 1 single 42.5 7.5 4
create_atoms 1 single 26.5 18.5 4
create_atoms 1 single 18.5 1.5 4
create_atoms 1 single 41.5 10.5 4

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

View File

@ -0,0 +1,95 @@
# 3d EAM surface for global HD
# nearest neighbor distance = a * sqrt(2)/2 = 2.77 Angs for Pt with a = 3.92
# hop event on (100) surface is same distance
# exchange event is 2 atoms moving same distance
variable Tequil index 500.0
variable Vmax index 0.5
variable qfactor index 0.3
variable cutbond index 3.2
variable cutevent index 1.1
variable steps index 100000
variable nevent index 1000
variable zoom index 1.8
units metal
atom_style atomic
atom_modify map array
boundary p p p
lattice fcc 3.92
region box block 0 6 0 6 0 4
create_box 3 box
create_atoms 1 box
mass * 1.0
change_box all z final -0.1 5.0 boundary p p f
create_atoms 2 single 3.5 3.5 4
# define frozen substrate and mobile atoms
group adatom type 2
region base block INF INF INF INF 0 1.8
set region base type 3
group base type 3
group mobile type 1 2
# pair style
pair_style eam/alloy
pair_coeff * * ptvoterlammps.eam Pt Pt Pt
neighbor 0.5 bin
neigh_modify every 1 delay 5 check yes
fix 1 mobile nve
fix 2 mobile langevin ${Tequil} ${Tequil} 1.0 858872873 zero yes
timestep 0.005
compute tmobile mobile temp
thermo 100
thermo_modify temp tmobile
# thermal equilibration
run 1000
reset_timestep 0
# pin base so will not move during quenches
fix freeze base setforce 0.0 0.0 0.0
# event detection
compute event all event/displace ${cutevent}
# hyper/global
fix HG mobile hyper/global ${cutbond} ${qfactor} ${Vmax} ${Tequil}
# thermo output
thermo_style custom step temp pe f_HG f_HG[*]
thermo_modify lost ignore
thermo_modify temp tmobile
thermo ${nevent}
# dump output options
region substrate block INF INF INF INF 1.8 3.8
region adatoms block INF INF INF INF 3.8 INF
variable acolor atom rmask(base)+2*rmask(substrate)+3*rmask(adatoms)
dump 1 all image 1000000 global.*.jpg v_acolor type &
zoom ${zoom} adiam 2.5 view 0.0 0.0 up 0 1 0 axes yes 0.9 0.01
dump_modify 1 pad 6 amap 1 3 sa 1 3 blue red green
# run
hyper ${steps} ${nevent} HG event min 1.0e-6 1.0e-6 100 100 dump 1

View File

@ -0,0 +1,112 @@
# 3d EAM surface for local HD
# nearest neighbor distance = a * sqrt(2)/2 = 2.77 Angs for Pt with a = 3.92
# hop event on (100) surface is same distance
# exchange event is 2 atoms moving same distance
variable Tequil index 400.0
variable Vmax index 0.4
variable qfactor index 0.3
variable cutbond index 3.2
variable Dcut index 10.0
variable cutevent index 1.1
variable alpha index 200.0
variable boost index 4000.0
variable ghostcut index 12.0
variable steps index 1500
variable nevent index 100
variable nx index 8
variable ny index 8
variable zoom index 1.8
variable seed index 826626413
variable tol index 1.0e-15
variable add index 37K
units metal
atom_style atomic
atom_modify map array
boundary p p p
comm_modify cutoff ${ghostcut}
lattice fcc 3.92
region box block 0 6 0 6 0 4
create_box 2 box
create_atoms 1 box
mass * 1.0
change_box all z final -0.1 5.0 boundary p p f
# replicate in xy
replicate ${nx} ${ny} 1
# add adatoms
include adatoms.list.${add}
# define frozen substrate and mobile atoms
region base block INF INF INF INF 0 1.8
set region base type 2
group base type 2
group mobile type 1
# pair style
pair_style eam/alloy
pair_coeff * * ptvoterlammps.eam Pt Pt
neighbor 0.5 bin
neigh_modify every 1 delay 5 check yes
fix 1 mobile nve
fix 2 mobile langevin ${Tequil} ${Tequil} 1.0 ${seed} zero yes
timestep 0.005
compute tmobile mobile temp
thermo 100
thermo_modify temp tmobile
# thermal equilibration
run 1000
reset_timestep 0
# pin base so will not move during quenches
fix freeze base setforce 0.0 0.0 0.0
# event detection
compute event all event/displace ${cutevent}
# hyper/local
fix HL mobile hyper/local ${cutbond} ${qfactor} ${Vmax} ${Tequil} &
${Dcut} ${alpha} ${boost}
# thermo output
thermo_style custom step temp pe f_HL f_HL[*]
thermo_modify lost ignore
thermo_modify temp tmobile
thermo ${nevent}
# dump
region substrate block INF INF INF INF 1.8 3.8
region adatoms block INF INF INF INF 3.8 INF
variable acolor atom rmask(base)+2*rmask(substrate)+3*rmask(adatoms)
dump 1 all image 10000000 local.*.jpg v_acolor type size 1024 1024 &
zoom ${zoom} adiam 2.5 view 0.0 0.0 up 0 1 0 axes yes 0.9 0.01
dump_modify 1 pad 6 amap 1 3 sa 1 3 blue red green
# run
hyper ${steps} ${nevent} HL event min ${tol} ${tol} 1000 1000 dump 1

Binary file not shown.

After

Width:  |  Height:  |  Size: 482 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 479 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 477 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 479 KiB

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,993 @@
LAMMPS (10 Oct 2018)
# 3d EAM surface for local HD
# nearest neighbor distance = a * sqrt(2)/2 = 2.77 Angs for Pt with a = 3.92
# hop event on (100) surface is same distance
# exchange event is 2 atoms moving same distance
variable Tequil index 400.0
variable Vmax index 0.4
variable qfactor index 0.3
variable cutbond index 3.2
variable Dcut index 10.0
variable cutevent index 1.1
variable alpha index 200.0
variable boost index 4000.0
variable ghostcut index 12.0
variable steps index 1500
variable nevent index 100
variable nx index 8
variable ny index 8
variable zoom index 1.8
variable seed index 826626413
variable tol index 1.0e-15
variable add index 37K
units metal
atom_style atomic
atom_modify map array
boundary p p p
comm_modify cutoff ${ghostcut}
comm_modify cutoff 12.0
lattice fcc 3.92
Lattice spacing in x,y,z = 3.92 3.92 3.92
region box block 0 6 0 6 0 4
create_box 2 box
Created orthogonal box = (0 0 0) to (23.52 23.52 15.68)
2 by 4 by 2 MPI processor grid
create_atoms 1 box
Created 576 atoms
Time spent = 0.00108504 secs
mass * 1.0
change_box all z final -0.1 5.0 boundary p p f
orthogonal box = (0 0 -0.392) to (23.52 23.52 19.6)
# replicate in xy
replicate ${nx} ${ny} 1
replicate 8 ${ny} 1
replicate 8 8 1
orthogonal box = (0 0 -0.392) to (188.16 188.16 19.6)
4 by 4 by 1 MPI processor grid
36864 atoms
Time spent = 0.0028758 secs
# add adatoms
include adatoms.list.${add}
include adatoms.list.37K
create_atoms 1 single 27.5 9.5 4
Created 1 atoms
Time spent = 0.000183105 secs
create_atoms 1 single 16 9 4
Created 1 atoms
Time spent = 0.000178099 secs
create_atoms 1 single 10 12 4
Created 1 atoms
Time spent = 0.000179768 secs
create_atoms 1 single 31 44 4
Created 1 atoms
Time spent = 0.000184059 secs
create_atoms 1 single 13 17 4
Created 1 atoms
Time spent = 0.000173807 secs
create_atoms 1 single 8.5 28.5 4
Created 1 atoms
Time spent = 0.000167847 secs
create_atoms 1 single 23 26 4
Created 1 atoms
Time spent = 0.000179052 secs
create_atoms 1 single 38 27 4
Created 1 atoms
Time spent = 0.000169992 secs
create_atoms 1 single 37.5 4.5 4
Created 1 atoms
Time spent = 0.000166178 secs
create_atoms 1 single 41.5 47.5 4
Created 1 atoms
Time spent = 0.000172138 secs
create_atoms 1 single 20.5 37.5 4
Created 1 atoms
Time spent = 0.000165939 secs
create_atoms 1 single 5 8 4
Created 1 atoms
Time spent = 0.00018096 secs
create_atoms 1 single 2.5 16.5 4
Created 1 atoms
Time spent = 0.000165939 secs
create_atoms 1 single 38.5 45.5 4
Created 1 atoms
Time spent = 0.000164986 secs
create_atoms 1 single 9 0 4
Created 1 atoms
Time spent = 0.000168085 secs
create_atoms 1 single 39 32 4
Created 1 atoms
Time spent = 0.000170946 secs
create_atoms 1 single 45.5 11.5 4
Created 1 atoms
Time spent = 0.00018096 secs
create_atoms 1 single 40 0 4
Created 1 atoms
Time spent = 0.000168085 secs
create_atoms 1 single 44.5 2.5 4
Created 1 atoms
Time spent = 0.000165939 secs
create_atoms 1 single 4.5 44.5 4
Created 1 atoms
Time spent = 0.000168085 secs
create_atoms 1 single 24.5 13.5 4
Created 1 atoms
Time spent = 0.000165939 secs
create_atoms 1 single 47.5 23.5 4
Created 1 atoms
Time spent = 0.00018096 secs
create_atoms 1 single 1 20 4
Created 1 atoms
Time spent = 0.000166893 secs
create_atoms 1 single 38.5 31.5 4
Created 1 atoms
Time spent = 0.000168085 secs
create_atoms 1 single 12.5 12.5 4
Created 1 atoms
Time spent = 0.000169992 secs
create_atoms 1 single 2 27 4
Created 1 atoms
Time spent = 0.000188828 secs
create_atoms 1 single 21 5 4
Created 1 atoms
Time spent = 0.000174999 secs
create_atoms 1 single 47 12 4
Created 1 atoms
Time spent = 0.000164986 secs
create_atoms 1 single 32.5 46.5 4
Created 1 atoms
Time spent = 0.000165939 secs
create_atoms 1 single 9.5 40.5 4
Created 1 atoms
Time spent = 0.000166893 secs
create_atoms 1 single 8.5 2.5 4
Created 1 atoms
Time spent = 0.000164986 secs
create_atoms 1 single 41.5 22.5 4
Created 1 atoms
Time spent = 0.000174046 secs
create_atoms 1 single 29 11 4
Created 1 atoms
Time spent = 0.000166893 secs
create_atoms 1 single 3.5 3.5 4
Created 1 atoms
Time spent = 0.000165224 secs
create_atoms 1 single 5 21 4
Created 1 atoms
Time spent = 0.000164986 secs
create_atoms 1 single 46.5 31.5 4
Created 1 atoms
Time spent = 0.000166178 secs
create_atoms 1 single 35 46 4
Created 1 atoms
Time spent = 0.000183105 secs
create_atoms 1 single 40.5 41.5 4
Created 1 atoms
Time spent = 0.000164986 secs
create_atoms 1 single 10 22 4
Created 1 atoms
Time spent = 0.000164986 secs
create_atoms 1 single 43.5 14.5 4
Created 1 atoms
Time spent = 0.000169992 secs
create_atoms 1 single 42 42 4
Created 1 atoms
Time spent = 0.000165939 secs
create_atoms 1 single 4 26 4
Created 1 atoms
Time spent = 0.000174999 secs
create_atoms 1 single 19 34 4
Created 1 atoms
Time spent = 0.000163078 secs
create_atoms 1 single 33 9 4
Created 1 atoms
Time spent = 0.000164986 secs
create_atoms 1 single 0.5 45.5 4
Created 1 atoms
Time spent = 0.000163078 secs
create_atoms 1 single 30.5 32.5 4
Created 1 atoms
Time spent = 0.000164986 secs
create_atoms 1 single 25.5 5.5 4
Created 1 atoms
Time spent = 0.000178099 secs
create_atoms 1 single 47.5 39.5 4
Created 1 atoms
Time spent = 0.000165939 secs
create_atoms 1 single 15 13 4
Created 1 atoms
Time spent = 0.000164986 secs
create_atoms 1 single 21 21 4
Created 1 atoms
Time spent = 0.000164986 secs
create_atoms 1 single 14 28 4
Created 1 atoms
Time spent = 0.000164986 secs
create_atoms 1 single 9 34 4
Created 1 atoms
Time spent = 0.000174999 secs
create_atoms 1 single 7 38 4
Created 1 atoms
Time spent = 0.000175953 secs
create_atoms 1 single 11 35 4
Created 1 atoms
Time spent = 0.000154972 secs
create_atoms 1 single 20.5 45.5 4
Created 1 atoms
Time spent = 0.000156879 secs
create_atoms 1 single 30.5 31.5 4
Created 1 atoms
Time spent = 0.000159979 secs
create_atoms 1 single 32.5 2.5 4
Created 1 atoms
Time spent = 0.000166178 secs
create_atoms 1 single 21.5 3.5 4
Created 1 atoms
Time spent = 0.000157833 secs
create_atoms 1 single 23 12 4
Created 1 atoms
Time spent = 0.000155926 secs
create_atoms 1 single 4.5 33.5 4
Created 1 atoms
Time spent = 0.000156879 secs
create_atoms 1 single 46 43 4
Created 1 atoms
Time spent = 0.000155926 secs
create_atoms 1 single 42.5 45.5 4
Created 1 atoms
Time spent = 0.000156879 secs
create_atoms 1 single 4.5 10.5 4
Created 1 atoms
Time spent = 0.000158072 secs
create_atoms 1 single 33.5 15.5 4
Created 1 atoms
Time spent = 0.000157833 secs
create_atoms 1 single 24 5 4
Created 1 atoms
Time spent = 0.000154018 secs
create_atoms 1 single 13 16 4
Created 1 atoms
Time spent = 0.000158072 secs
create_atoms 1 single 16.5 23.5 4
Created 1 atoms
Time spent = 0.000156164 secs
create_atoms 1 single 45.5 28.5 4
Created 1 atoms
Time spent = 0.000247002 secs
create_atoms 1 single 44.5 5.5 4
Created 1 atoms
Time spent = 0.000156164 secs
create_atoms 1 single 27.5 46.5 4
Created 1 atoms
Time spent = 0.000155926 secs
create_atoms 1 single 44.5 12.5 4
Created 1 atoms
Time spent = 0.000157833 secs
create_atoms 1 single 12 41 4
Created 1 atoms
Time spent = 0.000156879 secs
create_atoms 1 single 6 4 4
Created 1 atoms
Time spent = 0.0001688 secs
create_atoms 1 single 31.5 10.5 4
Created 1 atoms
Time spent = 0.00015521 secs
create_atoms 1 single 1 44 4
Created 1 atoms
Time spent = 0.000154972 secs
create_atoms 1 single 31 4 4
Created 1 atoms
Time spent = 0.000156879 secs
create_atoms 1 single 21 33 4
Created 1 atoms
Time spent = 0.000156879 secs
create_atoms 1 single 3 33 4
Created 1 atoms
Time spent = 0.000164032 secs
create_atoms 1 single 15 10 4
Created 1 atoms
Time spent = 0.0001719 secs
create_atoms 1 single 28.5 22.5 4
Created 1 atoms
Time spent = 0.000153065 secs
create_atoms 1 single 43 1 4
Created 1 atoms
Time spent = 0.000155926 secs
create_atoms 1 single 3.5 0.5 4
Created 1 atoms
Time spent = 0.000154972 secs
create_atoms 1 single 41 37 4
Created 1 atoms
Time spent = 0.000153065 secs
create_atoms 1 single 18.5 43.5 4
Created 1 atoms
Time spent = 0.000213146 secs
create_atoms 1 single 17 27 4
Created 1 atoms
Time spent = 0.000159979 secs
create_atoms 1 single 3 5 4
Created 1 atoms
Time spent = 0.000153065 secs
create_atoms 1 single 18.5 23.5 4
Created 1 atoms
Time spent = 0.000154972 secs
create_atoms 1 single 31.5 14.5 4
Created 1 atoms
Time spent = 0.000154972 secs
create_atoms 1 single 41 31 4
Created 1 atoms
Time spent = 0.000155926 secs
create_atoms 1 single 22 3 4
Created 1 atoms
Time spent = 0.00015521 secs
create_atoms 1 single 14.5 40.5 4
Created 1 atoms
Time spent = 0.000154018 secs
create_atoms 1 single 9 38 4
Created 1 atoms
Time spent = 0.000154018 secs
create_atoms 1 single 36 42 4
Created 1 atoms
Time spent = 0.000155926 secs
create_atoms 1 single 33 22 4
Created 1 atoms
Time spent = 0.000163078 secs
create_atoms 1 single 15.5 47.5 4
Created 1 atoms
Time spent = 0.000154972 secs
create_atoms 1 single 3 0 4
Created 1 atoms
Time spent = 0.000154972 secs
create_atoms 1 single 25.5 27.5 4
Created 1 atoms
Time spent = 0.000176907 secs
create_atoms 1 single 2.5 28.5 4
Created 1 atoms
Time spent = 0.000154972 secs
create_atoms 1 single 29.5 28.5 4
Created 1 atoms
Time spent = 0.000162125 secs
create_atoms 1 single 44.5 18.5 4
Created 1 atoms
Time spent = 0.000152826 secs
create_atoms 1 single 26 40 4
Created 1 atoms
Time spent = 0.000155926 secs
create_atoms 1 single 41 27 4
Created 1 atoms
Time spent = 0.000158072 secs
create_atoms 1 single 39.5 5.5 4
Created 1 atoms
Time spent = 0.000155926 secs
create_atoms 1 single 3 38 4
Created 1 atoms
Time spent = 0.000152826 secs
create_atoms 1 single 35 29 4
Created 1 atoms
Time spent = 0.000164986 secs
create_atoms 1 single 11 19 4
Created 1 atoms
Time spent = 0.000164986 secs
create_atoms 1 single 18 1 4
Created 1 atoms
Time spent = 0.000146866 secs
create_atoms 1 single 39.5 40.5 4
Created 1 atoms
Time spent = 0.000146866 secs
create_atoms 1 single 46 17 4
Created 1 atoms
Time spent = 0.000146151 secs
create_atoms 1 single 1.5 23.5 4
Created 1 atoms
Time spent = 0.000154018 secs
create_atoms 1 single 28.5 23.5 4
Created 1 atoms
Time spent = 0.000145912 secs
create_atoms 1 single 10 28 4
Created 1 atoms
Time spent = 0.000159979 secs
create_atoms 1 single 19 47 4
Created 1 atoms
Time spent = 0.000148058 secs
create_atoms 1 single 10.5 16.5 4
Created 1 atoms
Time spent = 0.000147104 secs
create_atoms 1 single 38 45 4
Created 1 atoms
Time spent = 0.000144958 secs
create_atoms 1 single 42.5 41.5 4
Created 1 atoms
Time spent = 0.000161886 secs
create_atoms 1 single 47.5 42.5 4
Created 1 atoms
Time spent = 0.000147104 secs
create_atoms 1 single 38 7 4
Created 1 atoms
Time spent = 0.000146151 secs
create_atoms 1 single 10 44 4
Created 1 atoms
Time spent = 0.000145912 secs
create_atoms 1 single 29.5 27.5 4
Created 1 atoms
Time spent = 0.000146151 secs
create_atoms 1 single 45 30 4
Created 1 atoms
Time spent = 0.000145912 secs
create_atoms 1 single 3 9 4
Created 1 atoms
Time spent = 0.000154018 secs
create_atoms 1 single 8.5 35.5 4
Created 1 atoms
Time spent = 0.000146151 secs
create_atoms 1 single 24 44 4
Created 1 atoms
Time spent = 0.000145912 secs
create_atoms 1 single 47 4 4
Created 1 atoms
Time spent = 0.000144958 secs
create_atoms 1 single 7.5 8.5 4
Created 1 atoms
Time spent = 0.000144958 secs
create_atoms 1 single 32.5 41.5 4
Created 1 atoms
Time spent = 0.000157833 secs
create_atoms 1 single 0.5 34.5 4
Created 1 atoms
Time spent = 0.000145912 secs
create_atoms 1 single 11 8 4
Created 1 atoms
Time spent = 0.000147104 secs
create_atoms 1 single 2 40 4
Created 1 atoms
Time spent = 0.000144958 secs
create_atoms 1 single 25 24 4
Created 1 atoms
Time spent = 0.000146151 secs
create_atoms 1 single 47.5 6.5 4
Created 1 atoms
Time spent = 0.000147104 secs
create_atoms 1 single 39.5 28.5 4
Created 1 atoms
Time spent = 0.000154972 secs
create_atoms 1 single 17 21 4
Created 1 atoms
Time spent = 0.000164032 secs
create_atoms 1 single 32 43 4
Created 1 atoms
Time spent = 0.000146151 secs
create_atoms 1 single 16.5 29.5 4
Created 1 atoms
Time spent = 0.000146151 secs
create_atoms 1 single 34 34 4
Created 1 atoms
Time spent = 0.000145912 secs
create_atoms 1 single 11.5 3.5 4
Created 1 atoms
Time spent = 0.000154018 secs
create_atoms 1 single 39 22 4
Created 1 atoms
Time spent = 0.000144958 secs
create_atoms 1 single 24.5 36.5 4
Created 1 atoms
Time spent = 0.000144958 secs
create_atoms 1 single 33 31 4
Created 1 atoms
Time spent = 0.000144958 secs
create_atoms 1 single 35.5 35.5 4
Created 1 atoms
Time spent = 0.000146151 secs
create_atoms 1 single 14.5 34.5 4
Created 1 atoms
Time spent = 0.000146866 secs
create_atoms 1 single 34 28 4
Created 1 atoms
Time spent = 0.000153065 secs
create_atoms 1 single 37 41 4
Created 1 atoms
Time spent = 0.000145912 secs
create_atoms 1 single 33 46 4
Created 1 atoms
Time spent = 0.000144958 secs
create_atoms 1 single 27.5 28.5 4
Created 1 atoms
Time spent = 0.000145197 secs
create_atoms 1 single 40.5 22.5 4
Created 1 atoms
Time spent = 0.000150919 secs
create_atoms 1 single 27.5 1.5 4
Created 1 atoms
Time spent = 0.000146151 secs
create_atoms 1 single 12 2 4
Created 1 atoms
Time spent = 0.000151873 secs
create_atoms 1 single 36 43 4
Created 1 atoms
Time spent = 0.000144005 secs
create_atoms 1 single 28.5 9.5 4
Created 1 atoms
Time spent = 0.000146151 secs
create_atoms 1 single 20.5 25.5 4
Created 1 atoms
Time spent = 0.000144958 secs
create_atoms 1 single 3 3 4
Created 1 atoms
Time spent = 0.000144005 secs
create_atoms 1 single 38 33 4
Created 1 atoms
Time spent = 0.000146151 secs
create_atoms 1 single 3 20 4
Created 1 atoms
Time spent = 0.000154972 secs
create_atoms 1 single 35 11 4
Created 1 atoms
Time spent = 0.000145912 secs
create_atoms 1 single 5 25 4
Created 1 atoms
Time spent = 0.000144005 secs
create_atoms 1 single 36.5 6.5 4
Created 1 atoms
Time spent = 0.000144005 secs
create_atoms 1 single 19.5 24.5 4
Created 1 atoms
Time spent = 0.000236988 secs
create_atoms 1 single 27 41 4
Created 1 atoms
Time spent = 0.000169992 secs
create_atoms 1 single 39.5 11.5 4
Created 1 atoms
Time spent = 0.000138998 secs
create_atoms 1 single 21.5 2.5 4
Created 1 atoms
Time spent = 0.000136852 secs
create_atoms 1 single 46.5 15.5 4
Created 1 atoms
Time spent = 0.000138998 secs
create_atoms 1 single 13 24 4
Created 1 atoms
Time spent = 0.000137091 secs
create_atoms 1 single 11 37 4
Created 1 atoms
Time spent = 0.000144005 secs
create_atoms 1 single 11.5 31.5 4
Created 1 atoms
Time spent = 0.000144958 secs
create_atoms 1 single 47 0 4
Created 1 atoms
Time spent = 0.000138044 secs
create_atoms 1 single 25.5 17.5 4
Created 1 atoms
Time spent = 0.00014019 secs
create_atoms 1 single 32 11 4
Created 1 atoms
Time spent = 0.000138044 secs
create_atoms 1 single 8 17 4
Created 1 atoms
Time spent = 0.000138044 secs
create_atoms 1 single 27.5 12.5 4
Created 1 atoms
Time spent = 0.000137806 secs
create_atoms 1 single 25 7 4
Created 1 atoms
Time spent = 0.000146151 secs
create_atoms 1 single 25.5 37.5 4
Created 1 atoms
Time spent = 0.000139952 secs
create_atoms 1 single 12 15 4
Created 1 atoms
Time spent = 0.000138044 secs
create_atoms 1 single 1 7 4
Created 1 atoms
Time spent = 0.000138998 secs
create_atoms 1 single 18.5 47.5 4
Created 1 atoms
Time spent = 0.000138044 secs
create_atoms 1 single 5 38 4
Created 1 atoms
Time spent = 0.000136852 secs
create_atoms 1 single 42 19 4
Created 1 atoms
Time spent = 0.000149012 secs
create_atoms 1 single 30.5 7.5 4
Created 1 atoms
Time spent = 0.000138044 secs
create_atoms 1 single 42.5 7.5 4
Created 1 atoms
Time spent = 0.000138998 secs
create_atoms 1 single 26.5 18.5 4
Created 1 atoms
Time spent = 0.000153065 secs
create_atoms 1 single 18.5 1.5 4
Created 1 atoms
Time spent = 0.000137091 secs
create_atoms 1 single 41.5 10.5 4
Created 1 atoms
Time spent = 0.000140905 secs
# define frozen substrate and mobile atoms
region base block INF INF INF INF 0 1.8
set region base type 2
18432 settings made for type
group base type 2
18432 atoms in group base
group mobile type 1
18616 atoms in group mobile
# pair style
pair_style eam/alloy
pair_coeff * * ptvoterlammps.eam Pt Pt
neighbor 0.5 bin
neigh_modify every 1 delay 5 check yes
fix 1 mobile nve
fix 2 mobile langevin ${Tequil} ${Tequil} 1.0 ${seed} zero yes
fix 2 mobile langevin 400.0 ${Tequil} 1.0 ${seed} zero yes
fix 2 mobile langevin 400.0 400.0 1.0 ${seed} zero yes
fix 2 mobile langevin 400.0 400.0 1.0 826626413 zero yes
timestep 0.005
compute tmobile mobile temp
thermo 100
thermo_modify temp tmobile
WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:488)
# thermal equilibration
run 1000
Neighbor list info ...
update every 1 steps, delay 5 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 6.07583
ghost atom cutoff = 12
binsize = 3.03792, bins = 62 62 7
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair eam/alloy, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d/newton
bin: standard
Per MPI rank memory allocation (min/avg/max) = 3.359 | 3.359 | 3.36 Mbytes
Step Temp E_pair E_mol TotEng Press
0 0 -206220.22 0 -206220.22 -52155.664
100 188.18127 -206044.43 0 -205591.63 -25068.83
200 274.34464 -205860.78 0 -205200.66 -40191.797
300 325.66286 -205750.01 0 -204966.4 -31510.222
400 352.48242 -205675.42 0 -204827.28 -35058.064
500 370.88571 -205619.66 0 -204727.25 -32735.022
600 388.62129 -205592.87 0 -204657.78 -33904.556
700 389.54874 -205579.73 0 -204642.4 -32769.852
800 395.56074 -205576.82 0 -204625.03 -33755.948
900 398.03458 -205564.48 0 -204606.74 -32777.103
1000 401.24089 -205562.85 0 -204597.4 -33785.341
Loop time of 4.3687 on 16 procs for 1000 steps with 37048 atoms
Performance: 98.885 ns/day, 0.243 hours/ns, 228.901 timesteps/s
98.4% CPU use with 16 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 3.2988 | 3.3828 | 3.4667 | 2.3 | 77.43
Neigh | 0.20856 | 0.23127 | 0.24382 | 1.9 | 5.29
Comm | 0.33313 | 0.45075 | 0.55485 | 9.2 | 10.32
Output | 0.00042987 | 0.00044042 | 0.00049591 | 0.0 | 0.01
Modify | 0.18811 | 0.28363 | 0.36798 | 9.7 | 6.49
Other | | 0.01983 | | | 0.45
Nlocal: 2315.5 ave 2332 max 2297 min
Histogram: 2 0 0 3 4 0 2 1 2 2
Nghost: 3186.31 ave 3205 max 3170 min
Histogram: 2 1 3 0 2 3 2 1 0 2
Neighs: 55590.9 ave 56174 max 55103 min
Histogram: 2 2 1 1 4 1 3 0 0 2
Total # of neighbors = 889454
Ave neighs/atom = 24.0082
Neighbor list builds = 105
Dangerous builds = 0
reset_timestep 0
# pin base so will not move during quenches
fix freeze base setforce 0.0 0.0 0.0
# event detection
compute event all event/displace ${cutevent}
compute event all event/displace 1.1
# hyper/local
fix HL mobile hyper/local ${cutbond} ${qfactor} ${Vmax} ${Tequil} ${Dcut} ${alpha} ${boost}
fix HL mobile hyper/local 3.2 ${qfactor} ${Vmax} ${Tequil} ${Dcut} ${alpha} ${boost}
fix HL mobile hyper/local 3.2 0.3 ${Vmax} ${Tequil} ${Dcut} ${alpha} ${boost}
fix HL mobile hyper/local 3.2 0.3 0.4 ${Tequil} ${Dcut} ${alpha} ${boost}
fix HL mobile hyper/local 3.2 0.3 0.4 400.0 ${Dcut} ${alpha} ${boost}
fix HL mobile hyper/local 3.2 0.3 0.4 400.0 10.0 ${alpha} ${boost}
fix HL mobile hyper/local 3.2 0.3 0.4 400.0 10.0 200.0 ${boost}
fix HL mobile hyper/local 3.2 0.3 0.4 400.0 10.0 200.0 4000.0
# thermo output
thermo_style custom step temp pe f_HL f_HL[*]
WARNING: New thermo_style command, previous thermo_modify settings will be lost (../output.cpp:705)
thermo_modify lost ignore
thermo_modify temp tmobile
WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:488)
thermo ${nevent}
thermo 100
# dump
region substrate block INF INF INF INF 1.8 3.8
region adatoms block INF INF INF INF 3.8 INF
variable acolor atom rmask(base)+2*rmask(substrate)+3*rmask(adatoms)
dump 1 all image 10000000 local.*.jpg v_acolor type size 1024 1024 zoom ${zoom} adiam 2.5 view 0.0 0.0 up 0 1 0 axes yes 0.9 0.01
dump 1 all image 10000000 local.*.jpg v_acolor type size 1024 1024 zoom 1.8 adiam 2.5 view 0.0 0.0 up 0 1 0 axes yes 0.9 0.01
dump_modify 1 pad 6 amap 1 3 sa 1 3 blue red green
# run
hyper ${steps} ${nevent} HL event min ${tol} ${tol} 1000 1000 dump 1
hyper 1500 ${nevent} HL event min ${tol} ${tol} 1000 1000 dump 1
hyper 1500 100 HL event min ${tol} ${tol} 1000 1000 dump 1
hyper 1500 100 HL event min 1.0e-15 ${tol} 1000 1000 dump 1
hyper 1500 100 HL event min 1.0e-15 1.0e-15 1000 1000 dump 1
WARNING: Resetting reneighboring criteria during hyper (../hyper.cpp:133)
Neighbor list info ...
update every 1 steps, delay 0 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 6.07583
ghost atom cutoff = 12
binsize = 3.03792, bins = 62 62 7
2 neighbor lists, perpetual/occasional/extra = 1 1 0
(1) pair eam/alloy, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d/newton
bin: standard
(2) fix hyper/local, occasional
attributes: full, newton on, cut 10
pair build: full/bin/atomonly
stencil: full/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 7.566 | 7.567 | 7.567 Mbytes
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
0 401.24089 -205562.85 0 0 0 1 0 0 0 0 0 0 0 0 4e+19 0 0 0 0 0 0 0 0 0 0 0
77 401.24089 -206534.96 0 0 0 1 0 0 0 0 0 0 0 0 4e+19 0 0 0 0 0 0 0 1540 0 0 0
Loop time of 0.540347 on 16 procs for 77 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
0 401.24089 -205562.85 23.271302 74 0.18753621 1 6.0138739 703.62325 0 0.55802338 3.5350432 0 0 0 4e+19 10.115141 10.115141 0 0 0 0 0 0 0 0 0
100 399.15639 -205546.21 22.904368 90 0.32935524 0.39929142 6.0138739 703.62325 0.026229865 0.91517139 3.9968927 91.88 0.3995539 0.4009724 0.39695676 10.262823 10.262823 0 0 0 0 0 2000 0 0 0
Loop time of 0.579085 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
100 399.15639 -205546.21 22.904368 90 0.32935524 0.39929142 6.0138739 703.62325 0.026229865 0.91517139 3.9968927 91.88 0.3995539 0.4009724 0.39695676 10.262823 10.262823 0 0 0 0 0 2000 0 0 0
184 399.15639 -206534.96 22.904368 90 0.32935524 0.39929142 6.0138739 703.62325 0.026229865 0.91517139 3.9968927 49.934783 0.21714886 0.4009724 0.39695676 10.262823 10.262823 0 0 0 0 0 3680 0 0 0
Loop time of 0.556056 on 16 procs for 84 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
100 399.15639 -205546.21 22.903938 90 0.32935524 0.39929142 6.0138739 703.62325 0.026229865 0.91517139 3.9968927 91.88 0.3995539 0.4009724 0.39695676 10.262823 10.262823 0 0 0 0 0 2000 0 0 0
200 403.01717 -205543.17 20.844359 90 0.3291605 0.39888693 6.0138739 703.62325 0.039527213 0.94418421 4.0368484 90.95 0.39930574 0.4019706 0.39554353 10.262823 10.262823 0 0 0 0 0 4000 0 0 0
Loop time of 0.581214 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
200 403.01717 -205543.17 20.844359 90 0.3291605 0.39888693 6.0138739 703.62325 0.039527213 0.94418421 4.0368484 90.95 0.39930574 0.4019706 0.39554353 10.262823 10.262823 0 0 0 0 0 4000 0 0 0
275 403.01717 -206534.96 20.844359 90 0.3291605 0.39888693 6.0138739 703.62325 0.039527213 0.94418421 4.0368484 66.145455 0.29040418 0.4019706 0.39554353 10.262823 10.262823 0 0 0 0 0 5500 0 0 0
Loop time of 0.481812 on 16 procs for 75 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
200 403.01717 -205543.17 21.115577 91 0.3291605 0.39888693 6.0138739 703.62325 0.039527213 0.94418421 4.0368484 90.95 0.39930574 0.4019706 0.39554353 10.262823 10.262823 0 0 0 0 0 4000 0 0 0
300 399.01963 -205541.46 19.137336 85 0.32442182 0.39862755 6.0138739 703.62325 0.046873868 0.94776891 4.0368484 92.02 0.39912484 0.40296919 0.39497622 10.288936 10.288936 0 0 0 0 0 6000 0 0 0
Loop time of 0.5757 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
300 399.01963 -205541.46 19.137336 85 0.32442182 0.39862755 6.0138739 703.62325 0.046873868 0.94776891 4.0368484 92.02 0.39912484 0.40296919 0.39497622 10.288936 10.288936 0 0 0 0 0 6000 0 0 0
377 399.01963 -206534.96 19.137336 85 0.32442182 0.39862755 6.0138739 703.62325 0.046873868 0.94776891 4.0368484 73.225464 0.31760598 0.40296919 0.39497622 10.288936 10.288936 0 0 0 0 0 7540 0 0 0
Loop time of 0.514907 on 16 procs for 77 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
300 399.01963 -205541.46 19.137003 85 0.32442182 0.39862755 6.0138739 703.62325 0.046873868 0.94776891 4.0368484 92.02 0.39912484 0.40296919 0.39497622 10.288936 10.288936 0 0 0 0 0 6000 0 0 0
400 398.15351 -205544.87 20.470844 93 0.34589451 0.39828754 6.0138739 703.62325 0.049952465 0.94776891 4.0779385 92.0375 0.39894967 0.40395328 0.3932824 10.307052 10.307052 0 0 0 0 0 8000 0 0 0
Loop time of 0.577371 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
400 398.15351 -205544.87 20.470844 93 0.34589451 0.39828754 6.0138739 703.62325 0.049952465 0.94776891 4.0779385 92.0375 0.39894967 0.40395328 0.3932824 10.307052 10.307052 0 0 0 0 0 8000 0 0 0
471 398.15351 -206534.96 20.470844 93 0.34589451 0.39828754 6.0138739 703.62325 0.049952465 0.94776891 4.0779385 78.163482 0.33881076 0.40395328 0.3932824 10.307052 10.307052 0 0 0 0 0 9420 0 0 0
Loop time of 0.465473 on 16 procs for 71 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
400 398.15351 -205544.87 20.470689 93 0.34589451 0.39828754 6.0138739 703.62325 0.049952465 0.94776891 4.0779385 92.0375 0.39894967 0.40395328 0.3932824 10.307052 10.307052 0 0 0 0 0 8000 0 0 0
500 400.29399 -205544.98 17.051242 83 0.42140172 0.39805251 6.0138739 703.62325 0.056986933 1.0907861 4.0779385 91.986 0.39879563 0.40493836 0.39165573 10.307052 10.307052 0 0 0 0 0 10000 0 0 0
Loop time of 0.579188 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
500 400.29399 -205544.98 17.051242 83 0.42140172 0.39805251 6.0138739 703.62325 0.056986933 1.0907861 4.0779385 91.986 0.39879563 0.40493836 0.39165573 10.307052 10.307052 0 0 0 0 0 10000 0 0 0
577 400.29399 -206534.96 17.051242 83 0.42140172 0.39805251 6.0138739 703.62325 0.056986933 1.0910651 4.0779385 79.710572 0.3455768 0.40493836 0.39165573 10.307052 10.307052 0 0 0 0 0 11540 0 0 0
Loop time of 0.502193 on 16 procs for 77 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
500 400.29399 -205544.98 17.051107 83 0.42140172 0.39805251 6.0138739 703.62325 0.056986933 1.0910651 4.0779385 91.986 0.39879563 0.40493836 0.39165573 10.307052 10.307052 0 0 0 0 0 10000 0 0 0
600 400.96099 -205544.56 20.904479 91 0.41219484 0.39780769 6.0138739 703.62325 0.061331691 1.1358732 4.0779385 92.013333 0.39864794 0.40593806 0.39067432 10.307052 10.307052 0 0 0 0 0 12000 0 0 0
Loop time of 0.694955 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
600 400.96099 -205544.56 20.904479 91 0.41219484 0.39780769 6.0138739 703.62325 0.061331691 1.1358732 4.0779385 92.013333 0.39864794 0.40593806 0.39067432 10.307052 10.307052 0 0 0 0 0 12000 0 0 0
680 400.96099 -206534.96 20.904479 91 0.41219484 0.39780769 6.0138739 703.62325 0.061331691 1.1358732 4.0779385 81.188235 0.35174818 0.40593806 0.39067432 10.307052 10.307052 0 0 0 0 0 13600 0 0 0
Loop time of 0.529041 on 16 procs for 80 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
600 400.96099 -205544.56 20.904088 91 0.41219484 0.39780769 6.0138739 703.62325 0.061331691 1.1358732 4.0779385 92.013333 0.39864794 0.40593806 0.39067432 10.307052 10.307052 0 0 0 0 0 12000 0 0 0
700 397.78618 -205534.96 20.361513 95 0.54466603 0.39757442 6.0138739 703.62325 0.061146951 1.1853748 4.1995704 92.12 0.39850836 0.40693553 0.38981834 10.307052 10.307052 0 0 0 0 0 14000 0 0 0
Loop time of 0.590093 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
700 397.78618 -205534.96 20.361513 95 0.54466603 0.39757442 6.0138739 703.62325 0.061146951 1.2139704 4.1995704 92.12 0.39850836 0.40693553 0.38981834 10.307052 10.307052 0 0 0 0 0 14000 0 0 0
790 397.78618 -206534.96 20.361513 95 0.54466603 0.39757442 6.0138739 703.62325 0.061146951 2.2107138 4.1995704 81.625316 0.35310868 0.40693553 0.38981834 10.307052 10.307052 0 0 0 0 0 15800 0 0 0
Loop time of 0.594281 on 16 procs for 90 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
700 397.78618 -205534.96 20.236364 94 0.51088027 0.39757442 6.0138739 703.62325 0.061146951 2.2107138 4.205089 92.12 0.39850836 0.40693553 0.38981834 10.307052 10.307052 0 0 0 0 0 14000 1 2 6
800 399.66919 -205547.44 21.285461 94 0.56079766 0.39739855 6.0138739 703.62325 0.06556778 2.2107138 4.3041291 92.36625 0.3983806 0.40793368 0.38875 10.307052 10.385797 0 0 0 0 0 16000 1 2 6
Loop time of 0.583824 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
800 399.66919 -205547.44 21.285461 94 0.56079766 0.39739855 6.0138739 703.62325 0.06556778 2.2107138 4.3041291 92.36625 0.3983806 0.40793368 0.38875 10.307052 10.385797 0 0 0 0 0 16000 1 2 6
872 399.66919 -206535.54 21.285461 94 0.56079766 0.39739855 6.0138739 703.62325 0.06556778 2.3177682 4.3041291 84.739679 0.36548679 0.40793368 0.38875 10.307052 10.385797 0 0 0 0 0 17440 1 2 6
Loop time of 0.46886 on 16 procs for 72 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
800 399.66919 -205547.44 21.2852 94 0.44964213 0.39739855 6.0138739 703.62325 0.06556778 2.3177682 4.3041291 92.36625 0.3983806 0.40793368 0.38875 10.307052 10.385797 0 0 0 0 0 16000 2 4 13
900 401.5853 -205544.22 19.308189 94 0.47610389 0.39719191 6.0138739 703.62325 0.066991886 2.3177682 4.3041291 92.017778 0.39825974 0.40893337 0.3878576 10.307052 10.385797 0 0 0 0 0 18000 2 4 13
Loop time of 0.585137 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
900 401.5853 -205544.22 19.308189 94 0.47610389 0.39719191 6.0138739 703.62325 0.066991886 2.3177682 4.3041291 92.017778 0.39825974 0.40893337 0.3878576 10.307052 10.385797 0 0 0 0 0 18000 2 4 13
975 401.5853 -206535.54 19.308189 94 0.47610389 0.39719191 6.0138739 703.62325 0.066991886 2.3177682 4.3041291 84.939487 0.36762438 0.40893337 0.3878576 10.307052 10.385797 0 0 0 0 0 19500 2 4 13
Loop time of 0.502012 on 16 procs for 75 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
900 401.5853 -205544.22 19.307938 94 0.47610389 0.39719191 6.0138739 703.62325 0.066991886 2.3177682 4.3041291 92.017778 0.39825974 0.40893337 0.3878576 10.307052 10.385797 0 0 0 0 0 18000 2 4 13
1000 395.06218 -205526.35 17.514295 91 0.42044925 0.39716259 6.0138739 703.62325 0.067937867 2.3177682 4.3041291 92.511 0.39814962 0.40993184 0.3867545 10.307052 10.385797 0 0 0 0 0 20000 2 4 13
Loop time of 0.588597 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
1000 395.06218 -205526.35 17.514295 91 0.42044925 0.39716259 6.0138739 703.62325 0.067937867 2.3177682 4.3041291 92.511 0.39814962 0.40993184 0.3867545 10.307052 10.385797 0 0 0 0 0 20000 2 4 13
1083 395.06218 -206535.54 17.514295 91 0.42044925 0.39716259 6.0138739 703.62325 0.067937867 2.3177682 4.3041291 85.421053 0.36763584 0.40993184 0.3867545 10.307052 10.385797 0 0 0 0 0 21660 2 4 13
Loop time of 0.543222 on 16 procs for 83 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
1000 395.06218 -205526.35 17.514191 91 0.42044925 0.39716259 6.0138739 703.62325 0.067937867 2.3177682 4.3041291 92.511 0.39814962 0.40993184 0.3867545 10.307052 10.385797 0 0 0 0 0 20000 2 4 13
1100 400.04484 -205545.92 19.52012 89 0.58919981 0.39704631 6.0138739 703.62325 0.069136967 2.3177682 4.4265979 92.517273 0.39805636 0.41093134 0.38574293 10.307052 10.385797 0 0 0 0 0 22000 2 4 13
Loop time of 0.590075 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
1100 400.04484 -205545.92 19.52012 89 0.58919981 0.39704631 6.0138739 703.62325 0.069136967 2.3177682 4.4265979 92.517273 0.39805636 0.41093134 0.38574293 10.307052 10.385797 0 0 0 0 0 22000 2 4 13
1177 400.04484 -206535.53 19.52012 89 0.58919981 0.39704631 6.0138739 703.62325 0.069136967 2.3177682 4.4265979 86.464741 0.37201529 0.41093134 0.38574293 10.307052 10.385797 0 0 0 0 0 23540 2 4 13
Loop time of 0.500839 on 16 procs for 77 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
1100 400.04484 -205545.92 19.518413 89 0.429675 0.39705701 6.0137119 703.6043 0.069136967 2.3177682 4.4265979 92.517273 0.39805636 0.41093134 0.38574293 10.307052 10.385797 0 0 0 0 0 22000 3 6 19
1200 400.7462 -205543.2 21.169548 91 0.32511134 0.39679665 6.0137119 703.6043 0.06750442 2.3177682 4.4265979 92.376667 0.39796198 0.41191655 0.3846039 10.307052 10.385797 0 0 0 0 0 24000 3 6 19
Loop time of 0.583971 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
1200 400.7462 -205543.2 21.169548 91 0.32511134 0.39679665 6.0137119 703.6043 0.06750442 2.3177682 4.4265979 92.376667 0.39796198 0.41191655 0.3846039 10.307052 10.385797 0 0 0 0 0 24000 3 6 19
1277 400.7462 -206535.53 21.169548 91 0.32511134 0.39679665 6.0137119 703.6043 0.06750442 2.3177682 4.4265979 86.806578 0.37396584 0.41191655 0.3846039 10.307052 10.385797 0 0 0 0 0 25540 3 6 19
Loop time of 0.509118 on 16 procs for 77 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
1200 400.7462 -205543.2 21.169281 91 0.32511134 0.39679665 6.0137119 703.6043 0.06750442 2.3177682 4.4265979 92.376667 0.39796198 0.41191655 0.3846039 10.307052 10.385797 0 0 0 0 0 24000 3 6 19
1300 398.53702 -205539.33 21.35815 94 0.38773898 0.39659935 6.0137119 703.6043 0.067808168 2.3177682 4.4265979 92.500769 0.39786514 0.41289519 0.3846039 10.307052 10.385797 0 0 0 0 0 26000 3 6 19
Loop time of 0.587306 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
1300 398.53702 -205539.33 21.35815 94 0.38773898 0.39659935 6.0137119 703.6043 0.067808168 2.3177682 4.4265979 92.500769 0.39786514 0.41289519 0.3846039 10.307052 10.385797 0 0 0 0 0 26000 3 6 19
1375 398.53702 -206535.53 21.35815 94 0.38773898 0.39659935 6.0137119 703.6043 0.067808168 2.3177682 4.4265979 87.455273 0.37616341 0.41289519 0.3846039 10.307052 10.385797 0 0 0 0 0 27500 3 6 19
Loop time of 0.483781 on 16 procs for 75 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
1300 398.53702 -205539.33 21.35787 94 0.38773898 0.39659935 6.0137119 703.6043 0.067808168 2.3177682 4.4265979 92.500769 0.39786514 0.41289519 0.3846039 10.307052 10.385797 0 0 0 0 0 26000 3 6 19
1400 402.80537 -205549.3 19.481887 95 0.32554201 0.39648737 6.0137119 703.6043 0.069550538 2.3177682 4.4265979 92.666429 0.39776836 0.41389491 0.38420043 10.307052 10.385797 0 0 0 0 0 28000 3 6 19
Loop time of 0.586411 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
1400 402.80537 -205549.3 19.481887 95 0.32554201 0.39648737 6.0137119 703.6043 0.069550538 2.3177682 4.4265979 92.666429 0.39776836 0.41389491 0.38420043 10.307052 10.385797 0 0 0 0 0 28000 3 6 19
1471 402.80537 -206535.53 19.481887 95 0.32554201 0.39648737 6.0137119 703.6043 0.069550538 2.3177682 4.4265979 88.193746 0.37856948 0.41389491 0.38420043 10.307052 10.385797 0 0 0 0 0 29420 3 6 19
Loop time of 0.473799 on 16 procs for 71 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
1400 402.80537 -205549.3 19.481632 95 0.32554201 0.39648737 6.0137119 703.6043 0.069550538 2.3177682 4.4265979 92.666429 0.39776836 0.41389491 0.38420043 10.307052 10.385797 0 0 0 0 0 28000 3 6 19
1500 402.0803 -205537.7 20.903964 99 0.3340498 0.39635609 6.0137119 703.6043 0.070409086 2.3177682 4.4265979 92.857333 0.39767858 0.41489448 0.38372784 10.333041 10.385797 0 0 0 0 0 30000 3 6 19
Loop time of 0.587342 on 16 procs for 100 steps with 37048 atoms
Step Temp PotEng f_HL f_HL[1] f_HL[2] f_HL[3] f_HL[4] f_HL[5] f_HL[6] f_HL[7] f_HL[8] f_HL[9] f_HL[10] f_HL[11] f_HL[12] f_HL[13] f_HL[14] f_HL[15] f_HL[16] f_HL[17] f_HL[18] f_HL[19] f_HL[20] f_HL[21] f_HL[22] f_HL[23]
1500 402.0803 -205537.7 20.903964 99 0.3340498 0.39635609 6.0137119 703.6043 0.070409086 2.3177682 4.4265979 92.857333 0.39767858 0.41489448 0.38372784 10.333041 10.385797 0 0 0 0 0 30000 3 6 19
1574 402.0803 -206535.53 20.903964 99 0.3340498 0.39635609 6.0137119 703.6043 0.070409086 2.3177682 4.4265979 88.491741 0.37898213 0.41489448 0.38372784 10.333041 10.385797 0 0 0 0 0 31480 3 6 19
Loop time of 0.493982 on 16 procs for 74 steps with 37048 atoms
Final hyper stats ...
Cummulative quantities for fix hyper:
hyper time = 30000
event timesteps = 3
# of atoms in events = 6
Quantities for this hyper run:
event timesteps = 3
# of atoms in events = 6
max length of any bond = 4.4266
max drift distance of any atom = 2.31777
fraction of steps & bonds with zero bias = 0.0704091
Current quantities:
ave bonds/atom = 6.01371
Cummulative quantities specific tofix hyper/local:
# of new bonds formed = 19
max bonds/atom = 13
Quantities for this hyper run specific to fix hyper/local:
ave boosted bonds/step = 92.8573
ave boost coeff of all bonds = 0.397679
max boost coeff of any bond = 0.414894
min boost coeff of any bond = 0.383728
max dist from my box of any non-maxstrain bond ghost atom = 10.333
max dist from my box of any bond ghost atom = 10.3858
count of ghost bond neighbors not found on reneighbor steps = 0
lost bond partners = 0
ave bias coeff for lost bond partners = 0
bias overlaps = 0
non-matching bias coeffs = 0
CPU time for bond builds = 0.044807
Current quantities specific to fix hyper/local:
neighbor bonds/bond = 703.604
ave boost coeff for all bonds = 0.396356
Loop time of 17.9972 on 16 procs for 1500 steps with 37048 atoms
Performance: 36.006 ns/day, 0.667 hours/ns, 83.346 timesteps/s
120.7% CPU use with 16 MPI tasks x no OpenMP threads
Hyper stats:
Dynamics time (%) = 8.87027 (49.2869)
Quench time (%) = 8.15972 (45.3388)
Other time (%) = 1.2212 (6.78552)
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 11.6 | 11.848 | 12.043 | 3.9 | 65.83
Neigh | 0.50025 | 0.52638 | 0.55163 | 2.1 | 2.92
Comm | 0.34528 | 0.49905 | 0.66742 | 13.3 | 2.77
Output | 0.0021305 | 0.0021461 | 0.0022686 | 0.1 | 0.01
Modify | 3.7498 | 3.9009 | 3.9786 | 2.8 | 21.67
Other | | 1.221 | | | 6.79
Nlocal: 2315.5 ave 2361 max 2267 min
Histogram: 1 1 0 4 2 1 3 3 0 1
Nghost: 3187.88 ave 3236 max 3141 min
Histogram: 1 0 3 2 2 1 4 1 1 1
Neighs: 53950.6 ave 54989 max 53049 min
Histogram: 2 0 3 2 1 2 4 1 0 1
FullNghs: 542951 ave 554654 max 533224 min
Histogram: 1 2 3 1 2 2 2 2 0 1
Total # of neighbors = 8687214
Ave neighs/atom = 234.485
Neighbor list builds = 165
Dangerous builds = 0
Total wall time: 0:00:22

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,95 @@
/* ----------------------------------------------------------------------
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.
------------------------------------------------------------------------- */
#include <cstdlib>
#include <cstring>
#include "fix_event_hyper.h"
#include "atom.h"
#include "update.h"
#include "domain.h"
#include "neighbor.h"
#include "comm.h"
#include "universe.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
/* ---------------------------------------------------------------------- */
FixEventHyper::FixEventHyper(LAMMPS *lmp, int narg, char **arg) :
FixEvent(lmp, narg, arg)
{
if (narg != 3) error->all(FLERR,"Illegal fix event command");
restart_global = 1;
event_number = 0;
event_timestep = update->ntimestep;
clock = 0;
}
/* ----------------------------------------------------------------------
save current atom coords as an event (via call to base class)
called when an event occurs in some replica
set event_timestep = when event occurred in a particular replica
update clock = elapsed time since last event, across all replicas
------------------------------------------------------------------------- */
void FixEventHyper::store_event_hyper(bigint ntimestep, int delta_clock)
{
store_event();
event_timestep = ntimestep;
clock += delta_clock;
event_number++;
}
/* ----------------------------------------------------------------------
pack entire state of Fix into one write
------------------------------------------------------------------------- */
void FixEventHyper::write_restart(FILE *fp)
{
int n = 0;
double list[6];
list[n++] = event_number;
list[n++] = event_timestep;
list[n++] = clock;
list[n++] = replica_number;
list[n++] = correlated_event;
list[n++] = ncoincident;
if (comm->me == 0) {
int size = n * sizeof(double);
fwrite(&size,sizeof(int),1,fp);
fwrite(list,sizeof(double),n,fp);
}
}
/* ----------------------------------------------------------------------
use state info from restart file to restart the Fix
------------------------------------------------------------------------- */
void FixEventHyper::restart(char *buf)
{
int n = 0;
double *list = (double *) buf;
event_number = static_cast<int> (list[n++]);
event_timestep = static_cast<bigint> (list[n++]);
clock = static_cast<bigint> (list[n++]);
replica_number = static_cast<int> (list[n++]);
correlated_event = static_cast<int> (list[n++]);
ncoincident = static_cast<int> (list[n++]);
}

View File

@ -0,0 +1,60 @@
/* -*- 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
FixStyle(EVENT/HYPER,FixEventHyper)
#else
#ifndef LMP_FIX_EVENT_HYPER_H
#define LMP_FIX_EVENT_HYPER_H
#include "fix_event.h"
namespace LAMMPS_NS {
class FixEventHyper : public FixEvent {
public:
int event_number; // event counter
bigint event_timestep; // timestep of last event on any replica
bigint clock; // total elapsed timesteps across all replicas
int replica_number; // replica where last event occured
int correlated_event; // 1 if last event was correlated, 0 otherwise
int ncoincident; // # of simultaneous events on different replicas
FixEventHyper(class LAMMPS *, int, char **);
~FixEventHyper() {}
void write_restart(FILE *);
void restart(char *);
// methods specific to FixEventHyper, invoked by hyper
void store_event_hyper(bigint, int);
};
}
#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.
*/

35
src/REPLICA/fix_hyper.cpp Normal file
View File

@ -0,0 +1,35 @@
/* ----------------------------------------------------------------------
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.
------------------------------------------------------------------------- */
#include <cstring>
#include "fix_hyper.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
FixHyper::FixHyper(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) {}
/* ----------------------------------------------------------------------
extract hyper flag setting for all Fixes that perform hyperdynamics
------------------------------------------------------------------------- */
void *FixHyper::extract(const char *str, int &dim)
{
dim = 0;
if (strcmp(str,"hyperflag") == 0) {
return &hyperflag;
}
return NULL;
}

43
src/REPLICA/fix_hyper.h Normal file
View File

@ -0,0 +1,43 @@
/* -*- 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.
------------------------------------------------------------------------- */
#ifndef LMP_FIX_HYPER_H
#define LMP_FIX_HYPER_H
#include "fix.h"
namespace LAMMPS_NS {
class FixHyper : public Fix {
public:
FixHyper(class LAMMPS *, int, char **);
virtual ~FixHyper() {}
void *extract(const char *, int &);
// must be provided by child class
virtual void init_hyper() = 0;
virtual void build_bond_list(int) = 0;
virtual double query(int) = 0;
protected:
int hyperflag;
};
}
#endif
/* ERROR/WARNING messages:
*/

View File

@ -0,0 +1,500 @@
/* ----------------------------------------------------------------------
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.
------------------------------------------------------------------------- */
#include <mpi.h>
#include <cmath>
#include <cstdio>
#include <cstring>
#include "fix_hyper_global.h"
#include "atom.h"
#include "update.h"
#include "force.h"
#include "domain.h"
#include "comm.h"
#include "neighbor.h"
#include "neigh_request.h"
#include "neigh_list.h"
#include "modify.h"
#include "math_extra.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
#define DELTA 16384
#define VECLEN 5
// NOTE: count/output # of timesteps on which bias is non-zero
// NOTE: should there be a virial contribution from boosted bond?
// NOTE: allow newton off? see Note in pre_reverse()
/* ---------------------------------------------------------------------- */
FixHyperGlobal::FixHyperGlobal(LAMMPS *lmp, int narg, char **arg) :
FixHyper(lmp, narg, arg), blist(NULL), xold(NULL), tagold(NULL)
{
if (atom->map_style == 0)
error->all(FLERR,"Fix hyper/global command requires atom map");
if (narg != 7) error->all(FLERR,"Illegal fix hyper/global command");
hyperflag = 1;
scalar_flag = 1;
vector_flag = 1;
size_vector = 11;
global_freq = 1;
extscalar = 0;
extvector = 0;
cutbond = force->numeric(FLERR,arg[3]);
qfactor = force->numeric(FLERR,arg[4]);
vmax = force->numeric(FLERR,arg[5]);
tequil = force->numeric(FLERR,arg[6]);
if (cutbond < 0.0 || qfactor <= 0.0 || vmax < 0.0 || tequil <= 0.0)
error->all(FLERR,"Illegal fix hyper/global command");
invqfactorsq = 1.0 / (qfactor*qfactor);
cutbondsq = cutbond*cutbond;
beta = 1.0 / (force->boltz * tequil);
maxbond = 0;
nblocal = 0;
blist = NULL;
maxold = 0;
xold = NULL;
tagold = NULL;
me = comm->me;
firstflag = 1;
bcastflag = 0;
for (int i = 0; i < VECLEN; i++) outvec[i] = 0.0;
nevent = 0;
nevent_atom = 0;
t_hyper = 0.0;
}
/* ---------------------------------------------------------------------- */
FixHyperGlobal::~FixHyperGlobal()
{
memory->sfree(blist);
memory->destroy(xold);
memory->destroy(tagold);
}
/* ---------------------------------------------------------------------- */
int FixHyperGlobal::setmask()
{
int mask = 0;
mask |= PRE_NEIGHBOR;
mask |= PRE_FORCE;
mask |= PRE_REVERSE;
mask |= THERMO_ENERGY;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixHyperGlobal::init_hyper()
{
maxdriftsq = 0.0;
maxbondlen = 0.0;
nobias = 0;
}
/* ---------------------------------------------------------------------- */
void FixHyperGlobal::init()
{
if (force->newton_pair == 0)
error->all(FLERR,"Hyper global requires newton pair on");
dt = update->dt;
// need an occasional half neighbor list
int irequest = neighbor->request(this,instance_me);
neighbor->requests[irequest]->pair = 0;
neighbor->requests[irequest]->fix = 1;
neighbor->requests[irequest]->occasional = 1;
}
/* ---------------------------------------------------------------------- */
void FixHyperGlobal::init_list(int /* id */, NeighList *ptr)
{
list = ptr;
}
/* ---------------------------------------------------------------------- */
void FixHyperGlobal::setup_pre_neighbor()
{
pre_neighbor();
}
/* ---------------------------------------------------------------------- */
void FixHyperGlobal::setup_pre_reverse(int eflag, int vflag)
{
// no increment in nobias or hyper time when pre-run forces are calculated
int nobias_hold = nobias;
double t_hyper_hold = t_hyper;
pre_reverse(eflag,vflag);
nobias = nobias_hold;
t_hyper = t_hyper_hold;
}
/* ---------------------------------------------------------------------- */
void FixHyperGlobal::pre_neighbor()
{
int m,iold,jold,ilocal,jlocal;
double distsq;
// reset local IDs for owned bond atoms, since atoms have migrated
// uses xold and tagold from when bonds were created
// must be done after ghost atoms are setup via comm->borders()
double **x = atom->x;
int flag = 0;
for (m = 0; m < nblocal; m++) {
iold = blist[m].iold;
jold = blist[m].jold;
ilocal = atom->map(tagold[iold]);
jlocal = atom->map(tagold[jold]);
ilocal = domain->closest_image(xold[iold],ilocal);
jlocal = domain->closest_image(xold[iold],jlocal);
blist[m].i = ilocal;
blist[m].j = jlocal;
if (ilocal < 0 || jlocal < 0) flag++;
else {
distsq = MathExtra::distsq3(x[ilocal],xold[iold]);
maxdriftsq = MAX(distsq,maxdriftsq);
}
}
if (flag) error->one(FLERR,"Fix hyper/global bond atom not found");
}
/* ---------------------------------------------------------------------- */
void FixHyperGlobal::pre_reverse(int /* eflag */, int /* vflag */)
{
int i,j,m,imax,jmax;
double delx,dely,delz;
double r,r0,estrain,rmax,r0max,emax,dt_boost;
double vbias,fbias,fbiasr;
// compute current strain of each owned bond
// emax = maximum strain of any bond I own
// imax,jmax = local indices of my 2 atoms in that bond
double **x = atom->x;
emax = 0.0;
for (m = 0; m < nblocal; m++) {
i = blist[m].i;
j = blist[m].j;
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);
maxbondlen = MAX(r,maxbondlen);
r0 = blist[m].r0;
estrain = fabs(r-r0) / r0;
if (estrain > emax) {
emax = estrain;
rmax = r;
r0max = r0;
imax = i;
jmax = j;
}
}
// perform Allreduce() on pairme = double/int pair
// finds max strain and what proc owns it
// owner = proc that owns that bond
pairme.value = emax;
pairme.proc = me;
MPI_Allreduce(&pairme,&pairall,1,MPI_DOUBLE_INT,MPI_MAXLOC,world);
owner = pairall.proc;
bcastflag = 1;
// all procs acquire t_hyper from owner proc
// MPI_Bcast call by owner proc is below
for (int i = 0; i < VECLEN; i++) outvec[i] = 0.0;
if (owner != me) {
MPI_Bcast(&t_hyper,1,MPI_DOUBLE,owner,world);
return;
}
// I own the bond with max strain
// compute Vbias and apply force to atoms imax,jmax
// NOTE: logic would need to be different for newton off
double **f = atom->f;
vbias = fbias = 0.0;
dt_boost = 1.0;
if (emax < qfactor) {
vbias = vmax * (1.0 - emax*emax*invqfactorsq);
fbias = 2.0 * vmax * emax / (qfactor*qfactor * r0max);
dt_boost = exp(beta*vbias);
delx = x[imax][0] - x[jmax][0];
dely = x[imax][1] - x[jmax][1];
delz = x[imax][2] - x[jmax][2];
fbiasr = fbias / rmax;
f[imax][0] += delx*fbiasr;
f[imax][1] += dely*fbiasr;
f[imax][2] += delz*fbiasr;
f[jmax][0] -= delx*fbiasr;
f[jmax][1] -= dely*fbiasr;
f[jmax][2] -= delz*fbiasr;
} else nobias++;
// output quantities
outvec[0] = vbias;
outvec[1] = dt_boost;
outvec[2] = emax;
outvec[3] = atom->tag[imax];
outvec[4] = atom->tag[jmax];
t_hyper += dt_boost*dt;
MPI_Bcast(&t_hyper,1,MPI_DOUBLE,owner,world);
}
/* ---------------------------------------------------------------------- */
void FixHyperGlobal::build_bond_list(int natom)
{
int i,j,ii,jj,inum,jnum;
double xtmp,ytmp,ztmp,delx,dely,delz,rsq;
int *ilist,*jlist,*numneigh,**firstneigh;
if (natom) {
nevent++;
nevent_atom += natom;
}
// trigger neighbor list build
neighbor->build_one(list);
// identify bonds assigned to each owned atom
// do not create a bond between two non-group atoms
double **x = atom->x;
int *mask = atom->mask;
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
nblocal = 0;
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
xtmp = x[i][0];
ytmp = x[i][1];
ztmp = x[i][2];
jlist = firstneigh[i];
jnum = numneigh[i];
for (jj = 0; jj < jnum; jj++) {
j = jlist[jj];
j &= NEIGHMASK;
// skip if neither atom I or J are in fix group
if (!(mask[i] & groupbit) && !(mask[j] & groupbit)) continue;
delx = xtmp - x[j][0];
dely = ytmp - x[j][1];
delz = ztmp - x[j][2];
rsq = delx*delx + dely*dely + delz*delz;
if (rsq < cutbondsq) {
if (nblocal == maxbond) grow_bond();
blist[nblocal].i = i;
blist[nblocal].j = j;
blist[nblocal].iold = i;
blist[nblocal].jold = j;
blist[nblocal].r0 = sqrt(rsq);
nblocal++;
}
}
}
// store IDs and coords for owned+ghost atoms at time of bond creation
// realloc xold and tagold as needed
if (atom->nmax > maxold) {
memory->destroy(xold);
memory->destroy(tagold);
maxold = atom->nmax;
memory->create(xold,maxold,3,"hyper/global:xold");
memory->create(tagold,maxold,"hyper/global:tagold");
}
tagint *tag = atom->tag;
int nall = atom->nlocal + atom->nghost;
for (i = 0; i < nall; i++) {
xold[i][0] = x[i][0];
xold[i][1] = x[i][1];
xold[i][2] = x[i][2];
tagold[i] = tag[i];
}
}
/* ----------------------------------------------------------------------
grow bond list by a chunk
------------------------------------------------------------------------- */
void FixHyperGlobal::grow_bond()
{
// NOTE: could add int arg to do initial large alloc:
// maxbond = maxbond/DELTA * DELTA; maxbond += DELTA;
maxbond += DELTA;
if (maxbond < 0 || maxbond > MAXSMALLINT)
error->one(FLERR,"Fix hyper/local per-processor bond count is too big");
blist = (OneBond *)
memory->srealloc(blist,maxbond*sizeof(OneBond),"hyper/local:blist");
}
/* ---------------------------------------------------------------------- */
double FixHyperGlobal::compute_scalar()
{
if (bcastflag) {
MPI_Bcast(outvec,VECLEN,MPI_DOUBLE,owner,world);
bcastflag = 0;
}
return outvec[0];
}
/* ---------------------------------------------------------------------- */
double FixHyperGlobal::compute_vector(int i)
{
if (bcastflag) {
MPI_Bcast(outvec,VECLEN,MPI_DOUBLE,owner,world);
bcastflag = 0;
}
// 11 vector outputs returned for i = 0-10
// i = 0 = boost factor on this step
// i = 1 = max strain of any bond on this step
// i = 2 = ID of atom I in max-strain bond on this step
// i = 3 = ID of atom J in max-strain bond on this step
// i = 4 = ave bonds/atom on this step
// i = 5 = fraction of steps with no bias during this run
// i = 6 = max drift of any atom during this run
// i = 7 = max bond length during this run
// i = 8 = cummulative hyper time since fix created
// i = 9 = cummulative # of event timesteps since fix created
// i = 10 = cummulative # of atoms in events since fix created
if (i == 0) return outvec[1];
if (i == 1) return outvec[2];
if (i == 2) return outvec[3];
if (i == 3) return outvec[4];
if (i == 4) {
int allbonds; // NOTE: bigint?
MPI_Allreduce(&nblocal,&allbonds,1,MPI_INT,MPI_SUM,world);
return 2.0*allbonds/atom->natoms;
}
if (i == 5) {
if (update->ntimestep == update->firststep) return 0.0;
int allnobias;
MPI_Allreduce(&nobias,&allnobias,1,MPI_INT,MPI_SUM,world);
return 1.0*allnobias / (update->ntimestep - update->firststep);
}
if (i == 6) {
double alldriftsq;
MPI_Allreduce(&maxdriftsq,&alldriftsq,1,MPI_DOUBLE,MPI_MAX,world);
return sqrt(alldriftsq);
}
if (i == 7) {
double allbondlen;
MPI_Allreduce(&maxbondlen,&allbondlen,1,MPI_DOUBLE,MPI_MAX,world);
return allbondlen;
}
if (i == 8) return t_hyper;
if (i == 9) return (double) nevent;
if (i == 10) return (double) nevent_atom;
return 0.0;
}
/* ----------------------------------------------------------------------
wrapper on compute_vector()
used by hyper.cpp to call FixHyper
------------------------------------------------------------------------- */
double FixHyperGlobal::query(int i)
{
if (i == 1) return compute_vector(8); // cummulative hyper time
if (i == 2) return compute_vector(9); // nevent
if (i == 3) return compute_vector(10); // nevent_atom
if (i == 4) return compute_vector(4); // ave bonds/atom
if (i == 5) return compute_vector(6); // maxdrift
if (i == 6) return compute_vector(7); // maxbondlen
if (i == 7) return compute_vector(5); // fraction with zero bias
error->all(FLERR,"Invalid query to fix hyper/global");
return 0.0;
}
/* ----------------------------------------------------------------------
memory usage of local atom-based arrays
------------------------------------------------------------------------- */
double FixHyperGlobal::memory_usage()
{
double bytes = maxbond * sizeof(OneBond); // blist
return bytes;
}

View File

@ -0,0 +1,110 @@
/* -*- 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
FixStyle(hyper/global,FixHyperGlobal)
#else
#ifndef LMP_FIX_HYPER_GLOBAL_H
#define LMP_FIX_HYPER_GLOBAL_H
#include "fix_hyper.h"
namespace LAMMPS_NS {
class FixHyperGlobal : public FixHyper {
public:
FixHyperGlobal(class LAMMPS *, int, char **);
~FixHyperGlobal();
int setmask();
void init();
void init_list(int, class NeighList *);
void setup_pre_neighbor();
void setup_pre_reverse(int, int);
void pre_neighbor();
void pre_reverse(int, int);
double compute_scalar();
double compute_vector(int);
double query(int);
double memory_usage();
// extra methods visible to callers
void init_hyper();
void build_bond_list(int);
private:
int me;
double cutbond,qfactor,vmax,tequil;
int firstflag,bcastflag,owner,nevent,nevent_atom;
double cutbondsq,beta,dt,t_hyper,invqfactorsq;
double outvec[5]; // same as VECLEN in *.cpp
double maxbondlen; // max length of any bond
double maxdriftsq; // max distance any atom drifts from original pos
int nobias; // # of steps when bias = 0, b/c bond too long
class NeighList *list;
// list of my owned bonds
// persists on a proc from one event until the next
int maxbond; // allocated size of blist
struct OneBond { // single IJ bond, atom I is owner
int i,j; // current local indices of 2 bond atoms
int iold,jold; // local indices when bonds were formed
double r0; // relaxed bond length
};
struct OneBond *blist; // list of owned bonds
int nblocal; // # of owned bonds
// coords and IDs of owned+ghost atoms when bonds were formed
// persists on a proc from one event until the next
int maxold; // allocated size of old atoms
double **xold; // coords of atoms when bonds were formed
tagint *tagold; // IDs of atoms when bonds were formed
// MPI data struct for finding bond with max strain via Allreduce
struct Two {
double value;
int proc;
};
Two pairme,pairall;
// internal methods
void grow_bond();
};
}
#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.
*/

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,168 @@
/* -*- 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
FixStyle(hyper/local,FixHyperLocal)
#else
#ifndef LMP_FIX_HYPER_LOCAL_H
#define LMP_FIX_HYPER_LOCAL_H
#include "fix_hyper.h"
namespace LAMMPS_NS {
class FixHyperLocal : public FixHyper {
public:
FixHyperLocal(class LAMMPS *, int, char **);
~FixHyperLocal();
int setmask();
void init();
void init_list(int, class NeighList *);
void setup_pre_neighbor();
void setup_pre_reverse(int, int);
void pre_neighbor();
void pre_reverse(int, int);
void min_pre_neighbor();
double compute_scalar();
double compute_vector(int);
double query(int);
int pack_forward_comm(int, int *, double *, int, int *);
void unpack_forward_comm(int, int, double *);
int pack_reverse_comm(int, int, double *);
void unpack_reverse_comm(int, int *, double *);
void grow_arrays(int);
void copy_arrays(int, int, int);
int pack_exchange(int, double *);
int unpack_exchange(int, double *);
double memory_usage();
// extra methods visible to callers
void init_hyper();
void build_bond_list(int);
private:
int me;
double cutbond,qfactor,vmax,tequil,dcut;
double alpha_user; // timescale to apply boostostat (time units)
double alpha; // unitless dt/alpha_user
double boosttarget; // target value of boost
int histoflag;
int lostbond,lostbond_partner;
double lostbond_coeff;
int checkbias,checkbias_every,checkbias_flag,checkbias_count;
int checkcoeff,checkcoeff_every,checkcoeff_flag,checkcoeff_count;
int setupflag; // 1 during setup, 0 during run
int firstflag; // set for first time bond_build takes place
int nostrainyet; // 1 until maxstrain is first computed
int nboost_running,nobias_running;
int nbondbuild;
double time_bondbuild;
bigint starttime;
double sumboostcoeff; // sum of aveboost at every timestep
int allbonds; // sum of bond count on this step
double allboost; // sum of boostcoeff on all bonds on this step
int nnewbond; // running tally of number of new bonds created
int maxbondperatom; // max # of bonds any atom ever has
int commflag; // flag for communication mode
int nevent; // # of events that trigger bond rebuild
int nevent_atom; // # of atoms that experienced an event
double cutbondsq,dcutsq;
double beta,t_hyper,invqfactorsq;
double mybias;
double maxbondlen; // cummulative max length of any bond
double maxdriftsq; // max distance any atom drifts from original pos
double maxboostcoeff; // cummulative max boost coeff for any bond
double minboostcoeff; // cummulative min boost coeff for any bond
double rmaxever,rmaxeverbig;
int ghost_toofar;
// extra timers
//double timefirst,timesecond,timethird,timefourth;
//double timefifth,timesixth,timeseventh,timetotal;
// data structs for per-atom and per-bond info
// all of these are for current owned and ghost atoms
// except list and old2now are for atom indices at time of last bond build
class NeighList *list; // full neigh list up to Dcut distance
// created only when bonds are rebuilt
int *old2now; // o2n[i] = current local index of old atom i
// stored for old owned and ghost atoms
// I = old index when bonds were last created
// old indices are stored in old neighbor list
double **xold; // coords of owned+ghost atoms when bonds created
tagint *tagold; // global IDs of owned+ghost atoms when b created
int maxold; // allocated size of old2now
int maxbond; // allocated size of bonds
int old_nall; // nlocal+nghost when old2now was last setup
struct OneBond { // single IJ bond, atom I is owner
double r0; // original relaxed bond length
double boostcoeff; // boost coefficient
tagint jtag; // global index of J atom in bond IJ
int j; // local index of J atom in bond IJ
};
struct OneBond **bonds; // 2d array of bonds for owned atoms
int *numbond; // number of bonds for each owned atom
double *maxstrain; // max-strain of any bond atom I is part of
// for owned and ghost atoms
double *maxstrain_region; // max-strain of any neighbor atom J of atom I
// for owned and ghost atoms
int *maxstrain_bondindex; // index of max-strain bond of each atom I
// just for owned atoms
tagint *biasflag; // atoms in biased bonds marked with bond partner
// for owned and ghost atoms
// list of boosted bonds that this proc will bias
int maxboost; // allocated size of boost list
int nboost; // # of boosted bonds I own
int *boost; // index of atom I in each boosted bond
// histogramming of bond boost cooeficients
int histo_flag,histo_every,histo_count,histo_print,histo_steps;
double histo_delta,invhisto_delta,histo_lo;
bigint *histo,*allhisto;
};
}
#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.
*/

535
src/REPLICA/hyper.cpp Normal file
View File

@ -0,0 +1,535 @@
/* ----------------------------------------------------------------------
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.
------------------------------------------------------------------------- */
#include <cmath>
#include <cstdlib>
#include <cstring>
#include "hyper.h"
#include "update.h"
#include "atom.h"
#include "domain.h"
#include "region.h"
#include "integrate.h"
#include "min.h"
#include "force.h"
#include "neighbor.h"
#include "modify.h"
#include "compute_event_displace.h"
#include "fix_hyper.h"
#include "fix_event_hyper.h"
#include "output.h"
#include "dump.h"
#include "finish.h"
#include "timer.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
enum{NOHYPER,GLOBAL,LOCAL};
/* ---------------------------------------------------------------------- */
Hyper::Hyper(LAMMPS *lmp) :
Pointers(lmp), dumplist(NULL)
{}
/* ----------------------------------------------------------------------
perform hyperdynamics simulation
------------------------------------------------------------------------- */
void Hyper::command(int narg, char **arg)
{
MPI_Comm_rank(world,&me);
MPI_Comm_size(world,&nprocs);
// error checks
if (domain->box_exist == 0)
error->all(FLERR,"Hyper command before simulation box is defined");
if (narg < 4) error->all(FLERR,"Illegal hyper command");
int nsteps = force->inumeric(FLERR,arg[0]);
t_event = force->inumeric(FLERR,arg[1]);
char *id_fix = new char[strlen(arg[2])+1];
strcpy(id_fix,arg[2]);
char *id_compute = new char[strlen(arg[3])+1];
strcpy(id_compute,arg[3]);
options(narg-4,&arg[4]);
// total # of timesteps must be multiple of t_event
if (t_event <= 0)
error->all(FLERR,"Invalid t_event in hyper command");
if (nsteps % t_event)
error->all(FLERR,"Hyper nsteps must be multiple of t_event");
if (rebond < 0)
error->all(FLERR,"Invalid rebond in hyper command");
if (rebond && rebond % t_event)
error->all(FLERR,"Hyper rebond must be multiple of t_event");
// FixHyper class performs global or local hyperdynamics
int hyperenable,hyperstyle;
if (strcmp(id_fix,"NULL") == 0) {
hyperenable = 0;
hyperstyle = NOHYPER;
} else {
int ifix = modify->find_fix(id_fix);
if (ifix < 0) error->all(FLERR,"Could not find fix ID for hyper");
fix_hyper = (FixHyper *) modify->fix[ifix];
int dim;
int *hyperflag = (int *) fix_hyper->extract("hyperflag",dim);
if (hyperflag == NULL || *hyperflag == 0)
error->all(FLERR,"Hyper fix is not a valid hyperdynamics fix");
if (*hyperflag == 1) hyperstyle = GLOBAL;
if (*hyperflag == 2) hyperstyle = LOCAL;
hyperenable = 1;
}
// create FixEventHyper class to store event and pre-quench states
char **args = new char*[3];
args[0] = (char *) "hyper_event";
args[1] = (char *) "all";
args[2] = (char *) "EVENT/HYPER";
modify->add_fix(3,args);
fix_event = (FixEventHyper *) modify->fix[modify->nfix-1];
delete [] args;
// create Finish for timing output
finish = new Finish(lmp);
// assign FixEventHyper to event-detection compute
// necessary so it will know atom coords at last event
int icompute = modify->find_compute(id_compute);
if (icompute < 0) error->all(FLERR,"Could not find compute ID for hyper");
compute_event = (ComputeEventDisplace *) modify->compute[icompute];
compute_event->reset_extra_compute_fix("hyper_event");
// reset reneighboring criteria since will perform minimizations
neigh_every = neighbor->every;
neigh_delay = neighbor->delay;
neigh_dist_check = neighbor->dist_check;
if (neigh_every != 1 || neigh_delay != 0 || neigh_dist_check != 1) {
if (me == 0)
error->warning(FLERR,"Resetting reneighboring criteria during hyper");
}
neighbor->every = 1;
neighbor->delay = 0;
neighbor->dist_check = 1;
// initialize hyper as if one long dynamics run
update->whichflag = 1;
update->nsteps = nsteps;
update->beginstep = update->firststep = update->ntimestep;
update->endstep = update->laststep = update->firststep + nsteps;
if (update->laststep < 0)
error->all(FLERR,"Too many timesteps");
lmp->init();
// init minimizer settings and minimizer itself
update->etol = etol;
update->ftol = ftol;
update->max_eval = maxeval;
// cannot use hyper with a changing box
// removing this restriction would require saving/restoring box params
if (domain->box_change)
error->all(FLERR,"Cannot use hyper with a changing box");
// cannot use hyper with time-dependent fixes or regions
for (int i = 0; i < modify->nfix; i++)
if (modify->fix[i]->time_depend)
error->all(FLERR,"Cannot use hyper with a time-dependent fix defined");
for (int i = 0; i < domain->nregion; i++)
if (domain->regions[i]->dynamic_check())
error->all(FLERR,"Cannot use hyper with a time-dependent region defined");
// perform hyperdynamics simulation
timer->init();
timer->barrier_start();
time_start = timer->get_wall(Timer::TOTAL);
nbuild = ndanger = 0;
time_dynamics = time_quench = 0.0;
if (hyperenable) fix_hyper->init_hyper();
timer->barrier_start();
time_start = timer->get_wall(Timer::TOTAL);
// perform initial minimization and bond list creation
int nevent = 0;
int nevent_atoms = 0;
fix_event->store_state_quench();
quench(1);
if (dumpflag)
for (int idump = 0; idump < ndump; idump++)
output->dump[dumplist[idump]]->write();
fix_event->store_event();
if (hyperenable) fix_hyper->build_bond_list(0);
fix_event->restore_state_quench();
// main loop: dynamics, store state, quench, check event, restore state
int ecount;
int istep = 0;
while (istep < nsteps) {
dynamics(t_event,time_dynamics);
fix_event->store_state_quench();
quench(0);
ecount = compute_event->all_events();
if (ecount) {
nevent++;
nevent_atoms += ecount;
if (dumpflag)
for (int idump = 0; idump < ndump; idump++)
output->dump[dumplist[idump]]->write();
fix_event->store_event();
if (hyperenable) fix_hyper->build_bond_list(ecount);
} else if (rebond && update->ntimestep % rebond == 0) {
fix_event->store_event();
if (hyperenable) fix_hyper->build_bond_list(ecount);
}
fix_event->restore_state_quench();
istep = update->ntimestep - update->beginstep;
}
nsteps = update->ntimestep - update->beginstep;
// set total timers and counters so Finish() will process them
timer->set_wall(Timer::TOTAL,time_start);
timer->barrier_stop();
timer->set_wall(Timer::DYNAMICS,time_dynamics);
timer->set_wall(Timer::QUENCH,time_quench);
neighbor->ncalls = nbuild;
neighbor->ndanger = ndanger;
update->nsteps = nsteps;
if (me == 0) {
if (screen) fprintf(screen,"Final hyper stats ...\n\n");
if (logfile) fprintf(logfile,"Final hyper stats ...\n\n");
}
// subset of quantities also available in fix hyper output
int nevent_running = 0;
int nevent_atoms_running = 0;
double t_hyper = 0.0;
double avebonds = 0.0;
double maxdrift = 0.0;
double maxbondlen = 0.0;
double fraczero = 1.0;
double nnewbond,avenboost,aveboostcoeff,maxboostcoeff,minboostcoeff;
double maxbondperatom,neighbondperbond,aveboostnow;
double tbondbuild,rmaxever,rmaxeverbig,allghost_toofar;
double lostbond,lostbondcoeff,biasoverlap,nonmatchbiascoeff;
if (hyperenable) {
t_hyper = fix_hyper->query(1);
nevent_running = fix_hyper->query(2);
nevent_atoms_running = fix_hyper->query(3);
avebonds = fix_hyper->query(4);
maxdrift = fix_hyper->query(5);
maxbondlen = fix_hyper->query(6);
fraczero = fix_hyper->query(7);
if (hyperstyle == LOCAL) {
nnewbond = fix_hyper->query(8);
maxbondperatom = fix_hyper->query(9);
avenboost = fix_hyper->query(10);
aveboostcoeff = fix_hyper->query(11);
maxboostcoeff = fix_hyper->query(12);
minboostcoeff = fix_hyper->query(13);
neighbondperbond = fix_hyper->query(14);
aveboostnow = fix_hyper->query(15);
tbondbuild = fix_hyper->query(16);
rmaxever = fix_hyper->query(17);
rmaxeverbig = fix_hyper->query(18);
allghost_toofar = fix_hyper->query(19);
lostbond = fix_hyper->query(20);
lostbondcoeff = fix_hyper->query(21);
biasoverlap = fix_hyper->query(22);
nonmatchbiascoeff = fix_hyper->query(23);
}
}
if (me == 0) {
if (screen) {
fprintf(screen,"Cummulative quantities for fix hyper:\n");
fprintf(screen," hyper time = %g\n",t_hyper);
fprintf(screen," time boost factor = %g\n",t_hyper/(nsteps*update->dt));
fprintf(screen," event timesteps = %d\n",nevent_running);
fprintf(screen," # of atoms in events = %d\n",nevent_atoms_running);
fprintf(screen,"Quantities for this hyper run:\n");
fprintf(screen," event timesteps = %d\n",nevent);
fprintf(screen," # of atoms in events = %d\n",nevent_atoms);
fprintf(screen," max length of any bond = %g\n",maxbondlen);
fprintf(screen," max drift distance of any atom = %g\n",maxdrift);
fprintf(screen," fraction of steps & bonds with zero bias = %g\n",
fraczero);
fprintf(screen,"Current quantities:\n");
fprintf(screen," ave bonds/atom = %g\n",avebonds);
if (hyperstyle == LOCAL) {
fprintf(screen,"Cummulative quantities specific to fix hyper/local:\n");
fprintf(screen," # of new bonds formed = %g\n",nnewbond);
fprintf(screen," max bonds/atom = %g\n",maxbondperatom);
fprintf(screen,"Quantities for this hyper run specific to "
"fix hyper/local:\n");
fprintf(screen," ave boosted bonds/step = %g\n",avenboost);
fprintf(screen," ave boost coeff of all bonds = %g\n",aveboostcoeff);
fprintf(screen," max boost coeff of any bond = %g\n",maxboostcoeff);
fprintf(screen," min boost coeff of any bond = %g\n",minboostcoeff);
fprintf(screen," max dist from my box of any "
"non-maxstrain bond ghost atom = %g\n",rmaxever);
fprintf(screen," max dist from my box of any bond ghost atom = %g\n",
rmaxeverbig);
fprintf(screen," count of bond ghost neighbors "
"not found on reneighbor steps = %g\n",allghost_toofar);
fprintf(screen," lost bond partners = %g\n",lostbond);
fprintf(screen," ave bias coeff for lost bond partners = %g\n",
lostbondcoeff);
fprintf(screen," bias overlaps = %g\n",biasoverlap);
fprintf(screen," non-matching bias coeffs = %g\n",nonmatchbiascoeff);
fprintf(screen," CPU time for bond builds = %g\n",tbondbuild);
fprintf(screen,"Current quantities specific to fix hyper/local:\n");
fprintf(screen," neighbor bonds/bond = %g\n",neighbondperbond);
fprintf(screen," ave boost coeff for all bonds = %g\n",aveboostnow);
}
fprintf(screen,"\n");
}
if (logfile) {
fprintf(logfile,"Cummulative quantities for fix hyper:\n");
fprintf(logfile," hyper time = %g\n",t_hyper);
fprintf(logfile," event timesteps = %d\n",nevent_running);
fprintf(logfile," # of atoms in events = %d\n",nevent_atoms_running);
fprintf(logfile,"Quantities for this hyper run:\n");
fprintf(logfile," event timesteps = %d\n",nevent);
fprintf(logfile," # of atoms in events = %d\n",nevent_atoms);
fprintf(logfile," max length of any bond = %g\n",maxbondlen);
fprintf(logfile," max drift distance of any atom = %g\n",maxdrift);
fprintf(logfile," fraction of steps & bonds with zero bias = %g\n",
fraczero);
fprintf(logfile,"Current quantities:\n");
fprintf(logfile," ave bonds/atom = %g\n",avebonds);
if (hyperstyle == LOCAL) {
fprintf(logfile,"Cummulative quantities specific tofix hyper/local:\n");
fprintf(logfile," # of new bonds formed = %g\n",nnewbond);
fprintf(logfile," max bonds/atom = %g\n",maxbondperatom);
fprintf(logfile,"Quantities for this hyper run specific to "
"fix hyper/local:\n");
fprintf(logfile," ave boosted bonds/step = %g\n",avenboost);
fprintf(logfile," ave boost coeff of all bonds = %g\n",aveboostcoeff);
fprintf(logfile," max boost coeff of any bond = %g\n",maxboostcoeff);
fprintf(logfile," min boost coeff of any bond = %g\n",minboostcoeff);
fprintf(logfile," max dist from my box of any "
"non-maxstrain bond ghost atom = %g\n",rmaxever);
fprintf(logfile," max dist from my box of any bond ghost atom = %g\n",
rmaxeverbig);
fprintf(logfile," count of ghost bond neighbors "
"not found on reneighbor steps = %g\n",allghost_toofar);
fprintf(logfile," lost bond partners = %g\n",lostbond);
fprintf(logfile," ave bias coeff for lost bond partners = %g\n",
lostbondcoeff);
fprintf(logfile," bias overlaps = %g\n",biasoverlap);
fprintf(logfile," non-matching bias coeffs = %g\n",nonmatchbiascoeff);
fprintf(logfile," CPU time for bond builds = %g\n",tbondbuild);
fprintf(logfile,"Current quantities specific to fix hyper/local:\n");
fprintf(logfile," neighbor bonds/bond = %g\n",neighbondperbond);
fprintf(logfile," ave boost coeff for all bonds = %g\n",aveboostnow);
}
fprintf(logfile,"\n");
}
}
// timing stats
finish->end(4);
update->whichflag = 0;
update->firststep = update->laststep = 0;
update->beginstep = update->endstep = 0;
// reset reneighboring criteria
neighbor->every = neigh_every;
neighbor->delay = neigh_delay;
neighbor->dist_check = neigh_dist_check;
delete [] id_fix;
delete [] id_compute;
memory->destroy(dumplist);
delete finish;
modify->delete_fix("hyper_event");
compute_event->reset_extra_compute_fix(NULL);
}
/* ----------------------------------------------------------------------
short dynamics run
------------------------------------------------------------------------- */
void Hyper::dynamics(int nsteps, double & /* time_category */)
{
update->whichflag = 1;
update->nsteps = nsteps;
// full init works
// need to try partial init or setup
lmp->init();
update->integrate->setup(0);
// this may be needed if don't do full init
//modify->addstep_compute_all(update->ntimestep);
bigint ncalls = neighbor->ncalls;
timer->barrier_start();
update->integrate->run(nsteps);
timer->barrier_stop();
time_dynamics += timer->get_wall(Timer::TOTAL);
nbuild += neighbor->ncalls - ncalls;
ndanger += neighbor->ndanger;
update->integrate->cleanup();
finish->end(0);
}
/* ----------------------------------------------------------------------
quench minimization
flag = 1 to trigger output of memory in setup() call
------------------------------------------------------------------------- */
void Hyper::quench(int flag)
{
bigint ntimestep_hold = update->ntimestep;
bigint endstep_hold = update->endstep;
// need to change whichflag so that minimize->setup() calling
// modify->setup() will call fix->min_setup()
update->whichflag = 2;
update->nsteps = maxiter;
update->endstep = update->laststep = update->firststep + maxiter;
if (update->laststep < 0)
error->all(FLERR,"Too many iterations");
update->restrict_output = 1;
// full init works
lmp->init();
update->minimize->setup(flag);
// partial init does not work
//modify->addstep_compute_all(update->ntimestep);
//update->minimize->setup_minimal(1);
timer->barrier_start();
update->minimize->run(maxiter);
timer->barrier_stop();
time_quench += timer->get_wall(Timer::TOTAL);
update->minimize->cleanup();
finish->end(0);
// reset timestep as if quench did not occur
// clear timestep storage from computes, since now invalid
update->restrict_output = 0;
update->ntimestep = ntimestep_hold;
update->endstep = update->laststep = endstep_hold;
for (int i = 0; i < modify->ncompute; i++)
if (modify->compute[i]->timeflag) modify->compute[i]->clearstep();
}
/* ----------------------------------------------------------------------
parse optional parameters at end of hyper input line
------------------------------------------------------------------------- */
void Hyper::options(int narg, char **arg)
{
// set defaults
etol = 1.0e-4;
ftol = 1.0e-4;
maxiter = 40;
maxeval = 50;
dumpflag = 0;
ndump = 0;
dumplist = NULL;
rebond = 0;
int iarg = 0;
while (iarg < narg) {
if (strcmp(arg[iarg],"min") == 0) {
if (iarg+5 > narg) error->all(FLERR,"Illegal hyper command");
etol = force->numeric(FLERR,arg[iarg+1]);
ftol = force->numeric(FLERR,arg[iarg+2]);
maxiter = force->inumeric(FLERR,arg[iarg+3]);
maxeval = force->inumeric(FLERR,arg[iarg+4]);
if (maxiter < 0) error->all(FLERR,"Illegal hyper command");
iarg += 5;
} else if (strcmp(arg[iarg],"dump") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal hyper command");
dumpflag = 1;
int idump = output->find_dump(arg[iarg+1]);
if (idump < 0)
error->all(FLERR,"Dump ID in hyper command does not exist");
memory->grow(dumplist,ndump+1,"hyper:dumplist");
dumplist[ndump++] = idump;
iarg += 2;
} else if (strcmp(arg[iarg],"rebond") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal hyper command");
rebond = force->inumeric(FLERR,arg[iarg+1]);
iarg += 2;
} else error->all(FLERR,"Illegal hyper command");
}
}

65
src/REPLICA/hyper.h Normal file
View File

@ -0,0 +1,65 @@
/* -*- 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 COMMAND_CLASS
CommandStyle(hyper,Hyper)
#else
#ifndef LMP_HYPER_H
#define LMP_HYPER_H
#include "pointers.h"
namespace LAMMPS_NS {
class Hyper : protected Pointers {
public:
Hyper(class LAMMPS *);
~Hyper() {}
void command(int, char **);
private:
int me,nprocs;
int t_event;
double etol,ftol;
int maxiter,maxeval;
int stepmode,dumpflag,ndump,rebond;
int *dumplist;
int neigh_every,neigh_delay,neigh_dist_check;
int quench_reneighbor;
bigint nbuild,ndanger;
double time_dynamics,time_quench;
double time_start;
class FixHyper *fix_hyper;
class FixEventHyper *fix_event;
class ComputeEventDisplace *compute_event;
class Finish *finish;
void dynamics(int, double &);
void quench(int flag);
void options(int, char **);
};
}
#endif
#endif
/* ERROR/WARNING messages:
*/