Merge pull request #1379 from lammps/hyper

Hyper-dynamics update
This commit is contained in:
Axel Kohlmeyer 2019-03-26 16:30:37 -04:00 committed by GitHub
commit 5a6a8a9e57
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
33 changed files with 3731 additions and 3408 deletions

View File

@ -54,9 +54,10 @@ local quantities have the word "local" in their style,
e.g. {bond/local}. Styles with neither "atom" or "local" in their
style produce global quantities.
Note that a single compute produces either global or per-atom or local
quantities, but never more than one of these (with only a few
exceptions, as documented by individual compute commands).
Note that a single compute can produce either global or per-atom or
local quantities, but not both global and per-atom. It can produce
local quantities in tandem with global or per-atom quantities. The
compute doc page will explain.
Global, per-atom, and local quantities each come in three kinds: a
single scalar value, a vector of values, or a 2d array of values. The

View File

@ -83,8 +83,10 @@ not in the specified fix group. Local quantities are calculated by
each processor based on the atoms it owns, but there may be zero or
more per atoms.
Note that a single fix may produces either global or per-atom or local
quantities (or none at all), but never more than one of these.
Note that a single fix can produce either global or per-atom or local
quantities (or none at all), but not both global and per-atom. It can
produce local quantities in tandem with global or per-atom quantities.
The fix doc page will explain.
Global, per-atom, and local quantities each come in three kinds: a
single scalar value, a vector of values, or a 2d array of values. The

View File

@ -35,6 +35,7 @@ keyword = {mode} or {file} or {ave} or {start} or {beyond} or {overwrite} or {ti
{mode} arg = {scalar} or {vector}
scalar = all input values are scalars
vector = all input values are vectors
{kind} arg = {global} or {peratom} or {local}
{file} arg = filename
filename = name of file to output histogram(s) to
{ave} args = {one} or {running} or {window}
@ -92,7 +93,8 @@ either all global, all per-atom, or all local quantities. Inputs of
different kinds (e.g. global and per-atom) cannot be mixed. Atom
attributes are per-atom vector values. See the doc page for
individual "compute" and "fix" commands to see what kinds of
quantities they generate.
quantities they generate. See the optional {kind} keyword below for
how to force the fix ave/histo command to disambiguate if necessary.
Note that the output of this command is a single histogram for all
input values combined together, not one histogram per input value.
@ -231,6 +233,14 @@ keyword is set to {vector}, then all input values must be global or
per-atom or local vectors, or columns of global or per-atom or local
arrays.
The {kind} keyword only needs to be set if a compute or fix produces
more than one kind of output (global, per-atom, local). If this is
not the case, then LAMMPS will determine what kind of input is
provided and whether all the input arguments are consistent. If a
compute or fix produces more than one kind of output, the {kind}
keyword should be used to specify which output will be used. The
remaining input arguments must still be consistent.
The {beyond} keyword determines how input values that fall outside the
{lo} to {hi} bounds are treated. Values such that {lo} <= value <=
{hi} are assigned to one bin. Values on a bin boundary are assigned
@ -240,7 +250,7 @@ If {beyond} is set to {end} then values < {lo} are counted in the
first bin and values > {hi} are counted in the last bin. If {beyond}
is set to {extend} then two extra bins are created, so that there are
Nbins+2 total bins. Values < {lo} are counted in the first bin and
values > {hi} are counted in the last bin (Nbins+1). Values between
values > {hi} are counted in the last bin (Nbins+2). Values between
{lo} and {hi} (inclusive) are counted in bins 2 through Nbins+1. The
"coordinate" stored and printed for these two extra bins is {lo} and
{hi}.
@ -354,5 +364,6 @@ ave/chunk"_fix_ave_chunk.html, "fix ave/time"_fix_ave_time.html,
[Default:] none
The option defaults are mode = scalar, ave = one, start = 0, no file
output, beyond = ignore, and title 1,2,3 = strings as described above.
The option defaults are mode = scalar, kind = figured out from input
arguments, ave = one, start = 0, no file output, beyond = ignore, and
title 1,2,3 = strings as described above.

View File

@ -102,7 +102,7 @@ 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
NOTE: To run a GHD simulation, 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
@ -166,9 +166,9 @@ correctly. There will just be fewer events because the hyper time
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
{Vmax} you can use for a GHD model, is to run a sequence of
simulations with smaller and smaller {Vmax} values, until the event
rate does not change.
rate does not change (as a function of hyper time).
The {Tequil} argument is the temperature at which the system is
simulated; see the comment above about the "fix
@ -177,7 +177,8 @@ 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.
of {Vmax}, the more time boost will be achievable by the GHD
algorithm.
:line
@ -190,41 +191,43 @@ 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
This fix computes a global scalar and global vector of length 12, 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)
2 = max strain Eij of any bond on this step (absolute value, 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
6 = fraction of timesteps where the biased bond has bias = 0.0 during this run
7 = fraction of timesteps where the biased bond has negative strain during this run
8 = max drift distance of any atom during this run (distance units)
9 = max bond length during this run (distance units) :ul
9 = cumulative hyper time since fix was defined (time units)
10 = cumulative count of event timesteps since fix was defined
11 = cumulative count of atoms in events since fix was defined :ul
10 = cumulative hyper time since fix was defined (time units)
11 = cumulative count of event timesteps since fix was defined
12 = cumulative 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 cumulative across
multiple runs (since the fix was defined in the input script).
The first 5 quantities are for the current timestep. Quantities 6-9
are for the current hyper run. They are reset each time a new hyper
run is performed. Quantities 19-12 are cumulative across multiple
runs (since the point in the input script the fix was defined).
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 8, drift is the distance an atom moves between two quenched
states when the second quench determines an event has occurred. Atoms
involved in an event will typically move the greatest distance since
others typically remain near their original quenched position.
For value 10, events are checked for by the "hyper"_hyper.html command
For value 11, 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
For value 12, 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

View File

@ -22,10 +22,9 @@ 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
keyword = {check/ghost} or {check/bias} :l
{check/ghost} values = none
{check/bias} values = Nevery error/warn/ignore :pre
:ule
[Examples:]
@ -65,8 +64,8 @@ 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
The definition of bonds and Eij 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
@ -117,11 +116,11 @@ 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: To run an LHD simulation, 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
@ -216,20 +215,20 @@ 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.
NOTE: You should insure that ghost atom communication is performed for
a distance of at least {Dcut} + {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 should be used to override 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.
Note that this fix does not know the {cutevent} parameter, but uses
half the {cutbond} parameter 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
@ -269,7 +268,30 @@ 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.
rate does not change (as a function of hyper time).
:line
Here is additional information on the optional keywords for this fix.
The {check/ghost} keyword turns on extra computation each timestep to
compute statistics about ghost atoms used to determine which bonds to
bias. The output of these stats are the vector values 14 and 15,
described below. If this keyword is not enabled, the output
of the stats will be zero.
The {check/bias} keyword turns on extra computation and communication
to check if any biased bonds are closer than {Dcut} to each other,
which should not be the case if LHD is operating correctly. Thus it
is a debugging check. The {Nevery} setting determines how often the
check is made. The {error}, {warn}, or {ignore} setting determines
what is done if the count of too-close bonds is not zero. Either the
code will exit, or issue a warning, or silently tally the count. The
count can be output as vector value 17, as described below. If this
keyword is not enabled, the output of that statistic will be 0.
Note that both of these computations are costly, hence they are only
enabled by these keywords.
:line
@ -282,95 +304,120 @@ 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:
This fix computes a global scalar and global vector of length 21,
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)
2 = max strain Eij of any bond on this step (absolute value, unitless)
3 = average bias coeff for all bonds on this step (unitless)
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
6 = max bond length during this run (distance units)
7 = average # of biased bonds/step during this run
8 = fraction of biased bonds with no bias during this run
9 = fraction of biased bonds with negative strain during this run
10 = average bias coeff for all bonds during this run (unitless)
11 = min bias coeff for any bond during this run (unitless)
12 = max bias coeff for any bond during this run (unitless)
20 = cumulative hyper time since fix created (time units)
21 = cumulative count of event timesteps since fix created
22 = cumulative count of atoms in events since fix created
23 = cumulative # of new bonds since fix created :ul
13 = max drift distance of any bond atom during this run (distance units)
14 = max distance from proc subbox of any ghost atom with maxstrain < qfactor during this run (distance units)
15 = max distance outside my box of any ghost atom with any maxstrain during this run (distance units)
16 = count of ghost atoms that could not be found on reneighbor steps during this run
17 = count of bias overlaps (< Dcut) found during this run
18 = cumulative hyper time since fix created (time units)
19 = cumulative count of event timesteps since fix created
20 = cumulative count of atoms in events since fix created
21 = cumulative # of new bonds formed 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 cumulative across
multiple runs (since the fix was defined in the input script).
6-17 are for the current hyper run. They are reset each time a new
hyper run is performed. Quantities 18-21 are cumulative across
multiple runs (since the point in the input script the fix was
defined).
For value 6, the numerator is a count of all biased bonds on every
For value 8, the numerator is a count of all biased bonds on each
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 value 9, the numerator is a count of all biased bonds on each
timestep with negative strain. The denominator is the count of all
biased bonds on all timesteps.
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 13-17 are mostly useful for debugging and diagnostic purposes.
Values 15-19 are mostly useful for debugging and diagnostic purposes.
For value 13, drift is the distance an atom moves between two quenched
states when the second quench determines an event has occurred. Atoms
involved in an event will typically move the greatest distance since
others typically remain near their original quenched position.
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 values 14-16, neighbor atoms in the full neighbor list with cutoff
{Dcut} may be ghost atoms outside a processor's sub-box. Before the
next event occurs they may move further than {Dcut} away from the
sub-box boundary. Value 14 is the furthest (from the sub-box) any
ghost atom in the neighbor list with maxstrain < {qfactor} was
accessed during the run. Value 15 is the same except that the ghost
atom's maxstrain may be >= {qfactor}, which may mean it is about to
participate in an event. Value 16 is a count of how many ghost atoms
could not be found on reneighbor steps, presumably because they moved
too far away due to their participation in an event (which will likely
be detected at the next quench).
For value 18, no two bonds should be biased if they are within a
Typical values for 14 and 15 should be slightly larger than {Dcut},
which accounts for ghost atoms initially at a {Dcut} distance moving
thermally before the next event takes place.
Note that for values 14 and 15 to be computed, the optional keyword
{check/ghost} must be specified. Otherwise these values will be zero.
This is because computing them incurs overhead, so the values are only
computed if requested.
Value 16 should be zero or small. As explained above a small count
likely means some ghost atoms were participating in their own events
and moved a longer distance. If the value is large, it likely means
the communication cutoff for ghosts is too close to {Dcut} leading to
many not-found ghost atoms before the next event. This may lead to a
reduced number of bonds being selected for biasing, since the code
assumes those atoms are part of highly strained bonds. As explained
above, the "comm_modify cutoff"_comm_modify.html command can be used
to set a longer cutoff.
For value 17, 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.
that no pair of biased bonds 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.
Note that for values 17 to be computed, the optional keyword
{check/bias} must be specified and it determines how often this check
is performed. This is because performing the check incurs overhead,
so if only computed as often as requested.
Value 20 is simply the specified {boost} factor times the number of
timestep times the timestep size.
The result at the end of the run is the cumulative total from every
timestep the check was made. Note that the value is a count of atoms
in bonds which found other atoms in bonds too close, so it is almost
always an over-count of the number of too-close bonds.
For value 21, events are checked for by the "hyper"_hyper.html command
Value 18 is simply the specified {boost} factor times the number of
timesteps times the timestep size.
For value 19, 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
For value 20, 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
more than some distance from the previous quench state. Value 20 is
the cumulative 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
Value 21 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.
@ -378,6 +425,16 @@ an event.
The scalar and vector values calculated by this fix are all
"intensive".
This fix also computes a local vector of length the number of bonds
currently in the system. The value for each bond is its Cij prefactor
(bias coefficient). These values can be can be accessed by various
"output commands"_Howto_output.html. A particularly useful one is the
"fix ave/histo"_fix_ave_histo.html command which can be used to
histogram the Cij values to see if they are distributed reasonably
close to 1.0, which indicates a good choice of {Vmax}.
The local values calculated by this fix are unitless.
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.
@ -392,7 +449,9 @@ doc page for more info.
"hyper"_hyper.html, "fix hyper/global"_fix_hyper_global.html
[Default:] None
[Default:]
The check/ghost and check/bias keywords are not enabled by default.
:line

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: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

View File

@ -12,6 +12,8 @@ variable cutevent index 1.1
variable steps index 100000
variable nevent index 1000
variable zoom index 1.8
variable seed index 826626413
variable tol index 1.0e-15
units metal
atom_style atomic
@ -45,7 +47,7 @@ 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
fix 2 mobile langevin ${Tequil} ${Tequil} 1.0 ${seed} zero yes
timestep 0.005
@ -92,4 +94,4 @@ 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
hyper ${steps} ${nevent} HG event min ${tol} ${tol} 1000 1000 dump 1

View File

@ -107,6 +107,12 @@ 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
# test of histogramming and dump output of bias coeffs
#fix histo all ave/histo 10 100 1000 0.9 1.1 100 f_HL &
# mode vector kind local file tmp.histo
#dump 2 all local 1000 tmp.local f_HL
# run
hyper ${steps} ${nevent} HL event min ${tol} ${tol} 1000 1000 dump 1

View File

Before

Width:  |  Height:  |  Size: 482 KiB

After

Width:  |  Height:  |  Size: 482 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 479 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 479 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 477 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 479 KiB

File diff suppressed because it is too large Load Diff

View File

@ -1,993 +0,0 @@
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

File diff suppressed because it is too large Load Diff

View File

@ -32,12 +32,12 @@
using namespace LAMMPS_NS;
using namespace FixConst;
#define DELTA 16384
#define DELTABOND 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()
// possible enhancements
// should there be a virial contribution from boosted bond?
// allow newton off?
/* ---------------------------------------------------------------------- */
@ -52,7 +52,7 @@ FixHyperGlobal::FixHyperGlobal(LAMMPS *lmp, int narg, char **arg) :
hyperflag = 1;
scalar_flag = 1;
vector_flag = 1;
size_vector = 11;
size_vector = 12;
global_freq = 1;
extscalar = 0;
extvector = 0;
@ -76,6 +76,7 @@ FixHyperGlobal::FixHyperGlobal(LAMMPS *lmp, int narg, char **arg) :
maxold = 0;
xold = NULL;
tagold = NULL;
old2now = NULL;
me = comm->me;
firstflag = 1;
@ -94,6 +95,7 @@ FixHyperGlobal::~FixHyperGlobal()
memory->sfree(blist);
memory->destroy(xold);
memory->destroy(tagold);
memory->destroy(old2now);
}
/* ---------------------------------------------------------------------- */
@ -102,7 +104,6 @@ int FixHyperGlobal::setmask()
{
int mask = 0;
mask |= PRE_NEIGHBOR;
mask |= PRE_FORCE;
mask |= PRE_REVERSE;
mask |= THERMO_ENERGY;
return mask;
@ -115,6 +116,7 @@ void FixHyperGlobal::init_hyper()
maxdriftsq = 0.0;
maxbondlen = 0.0;
nobias = 0;
negstrain = 0;
}
/* ---------------------------------------------------------------------- */
@ -124,6 +126,10 @@ void FixHyperGlobal::init()
if (force->newton_pair == 0)
error->all(FLERR,"Hyper global requires newton pair on");
if (atom->molecular && me == 0)
error->warning(FLERR,"Hyper global for molecular systems "
"requires care in defining hyperdynamic bonds");
dt = update->dt;
// need an occasional half neighbor list
@ -152,14 +158,16 @@ void FixHyperGlobal::setup_pre_neighbor()
void FixHyperGlobal::setup_pre_reverse(int eflag, int vflag)
{
// no increment in nobias or hyper time when pre-run forces are calculated
// no increment in these quantities when pre-run forces are calculated
int nobias_hold = nobias;
int negstrain_hold = negstrain;
double t_hyper_hold = t_hyper;
pre_reverse(eflag,vflag);
nobias = nobias_hold;
negstrain = negstrain_hold;
t_hyper = t_hyper_hold;
}
@ -167,35 +175,52 @@ void FixHyperGlobal::setup_pre_reverse(int eflag, int vflag)
void FixHyperGlobal::pre_neighbor()
{
int m,iold,jold,ilocal,jlocal;
double distsq;
int i,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
// reset local indices for owned bond atoms, since atoms have migrated
// must be done after ghost atoms are setup via comm->borders()
// first time this is done for a particular I or J atom:
// use tagold and xold from when bonds were created
// atom->map() finds atom ID if it exists, owned index if possible
// closest current I or J atoms to old I may now be ghost atoms
// closest_image() returns the ghost atom index in that case
// also compute max drift of any atom in a bond
// drift = displacement from quenched coord while event has not yet occured
// NOTE: drift calc is now done in bond_build(), between 2 quenched states
for (i = 0; i < nall_old; i++) old2now[i] = -1;
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);
ilocal = old2now[iold];
jlocal = old2now[jold];
if (ilocal < 0) {
ilocal = atom->map(tagold[iold]);
ilocal = domain->closest_image(xold[iold],ilocal);
if (ilocal < 0)
error->one(FLERR,"Fix hyper/global bond atom not found");
old2now[iold] = ilocal;
//distsq = MathExtra::distsq3(x[ilocal],xold[iold]);
//maxdriftsq = MAX(distsq,maxdriftsq);
}
if (jlocal < 0) {
jlocal = atom->map(tagold[jold]);
jlocal = domain->closest_image(xold[iold],jlocal); // closest to iold
if (jlocal < 0)
error->one(FLERR,"Fix hyper/global bond atom not found");
old2now[jold] = jlocal;
//distsq = MathExtra::distsq3(x[jlocal],xold[jold]);
//maxdriftsq = MAX(distsq,maxdriftsq);
}
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");
}
/* ---------------------------------------------------------------------- */
@ -204,15 +229,16 @@ 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;
double r,r0,estrain,rmax,r0max,dt_boost;
double ebias,vbias,fbias,fbiasr;
// compute current strain of each owned bond
// emax = maximum strain of any bond I own
// emax = maximum abs value of strain of any bond I own
// imax,jmax = local indices of my 2 atoms in that bond
// rmax,r0max = current and relaxed lengths of that bond
double **x = atom->x;
emax = 0.0;
double emax = 0.0;
for (m = 0; m < nblocal; m++) {
i = blist[m].i;
@ -255,9 +281,15 @@ void FixHyperGlobal::pre_reverse(int /* eflag */, int /* vflag */)
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
// I own the bond with max absolute value of strain
// compute bias force on atoms imax,jmax if strain < q, else zero
// Ebias = current strain = (r-r0) / r0
// Vbias = bias potential = Vmax (1 - Ebias^2/q^2)
// Fbias = bias force as function of strain
// = -dVbias/dEbias = 2 Vmax Ebias / q^2
// Fix = x component of force on atom I
// = Fbias dEbias/dr dr/dxi, dEbias/dr = 1/r0, dr/dxi = delx/r
// dt_boost = time boost factor = exp(Vbias/kT)
double **f = atom->f;
@ -265,15 +297,16 @@ void FixHyperGlobal::pre_reverse(int /* eflag */, int /* vflag */)
dt_boost = 1.0;
if (emax < qfactor) {
vbias = vmax * (1.0 - emax*emax*invqfactorsq);
fbias = 2.0 * vmax * emax / (qfactor*qfactor * r0max);
ebias = (rmax-r0max) / r0max;
vbias = vmax * (1.0 - ebias*ebias*invqfactorsq);
fbias = 2.0 * vmax * ebias * invqfactorsq;
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;
fbiasr = fbias / r0max / rmax;
f[imax][0] += delx*fbiasr;
f[imax][1] += dely*fbiasr;
f[imax][2] += delz*fbiasr;
@ -281,6 +314,9 @@ void FixHyperGlobal::pre_reverse(int /* eflag */, int /* vflag */)
f[jmax][0] -= delx*fbiasr;
f[jmax][1] -= dely*fbiasr;
f[jmax][2] -= delz*fbiasr;
if (ebias < 0.0) negstrain++;
} else nobias++;
// output quantities
@ -299,8 +335,8 @@ void FixHyperGlobal::pre_reverse(int /* eflag */, int /* vflag */)
void FixHyperGlobal::build_bond_list(int natom)
{
int i,j,ii,jj,inum,jnum;
double xtmp,ytmp,ztmp,delx,dely,delz,rsq;
int i,j,m,ii,jj,iold,jold,ilocal,jlocal,inum,jnum;
double xtmp,ytmp,ztmp,delx,dely,delz,rsq,distsq;
int *ilist,*jlist,*numneigh,**firstneigh;
if (natom) {
@ -308,6 +344,27 @@ void FixHyperGlobal::build_bond_list(int natom)
nevent_atom += natom;
}
// compute max distance any bond atom has moved between 2 quenched states
// xold[iold] = last quenched coord for iold
// x[ilocal] = current quenched coord for same atom
double **x = atom->x;
int nlocal = atom->nlocal;
int nall = nlocal + atom->nghost;
for (m = 0; m < nblocal; m++) {
iold = blist[m].iold;
ilocal = atom->map(tagold[iold]);
ilocal = domain->closest_image(xold[iold],ilocal);
distsq = MathExtra::distsq3(x[ilocal],xold[iold]);
maxdriftsq = MAX(distsq,maxdriftsq);
jold = blist[m].jold;
jlocal = atom->map(tagold[jold]);
jlocal = domain->closest_image(xold[iold],jlocal);
distsq = MathExtra::distsq3(x[jlocal],xold[jold]);
maxdriftsq = MAX(distsq,maxdriftsq);
}
// trigger neighbor list build
neighbor->build_one(list);
@ -315,7 +372,6 @@ void FixHyperGlobal::build_bond_list(int natom)
// 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;
@ -358,26 +414,26 @@ void FixHyperGlobal::build_bond_list(int natom)
}
}
// store IDs and coords for owned+ghost atoms at time of bond creation
// realloc xold and tagold as needed
// store per-atom quantities for owned+ghost atoms at time of bond creation
// nall_old = value of nall at time bonds are built
if (atom->nmax > maxold) {
tagint *tag = atom->tag;
if (nall > maxold) {
memory->destroy(xold);
memory->destroy(tagold);
memory->destroy(old2now);
maxold = atom->nmax;
memory->create(xold,maxold,3,"hyper/global:xold");
memory->create(tagold,maxold,"hyper/global:tagold");
memory->create(old2now,maxold,"hyper/global:old2now");
}
tagint *tag = atom->tag;
int nall = atom->nlocal + atom->nghost;
memcpy(&xold[0][0],&x[0][0],3*nall*sizeof(double));
for (i = 0; i < nall; i++) tagold[i] = tag[i];
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];
}
nlocal_old = nlocal;
nall_old = nall;
}
/* ----------------------------------------------------------------------
@ -386,14 +442,11 @@ void FixHyperGlobal::build_bond_list(int natom)
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");
if (maxbond + DELTABOND > MAXSMALLINT)
error->one(FLERR,"Fix hyper/global bond count is too big");
maxbond += DELTABOND;
blist = (OneBond *)
memory->srealloc(blist,maxbond*sizeof(OneBond),"hyper/local:blist");
memory->srealloc(blist,maxbond*sizeof(OneBond),"hyper/global:blist");
}
/* ---------------------------------------------------------------------- */
@ -416,21 +469,22 @@ double FixHyperGlobal::compute_vector(int i)
bcastflag = 0;
}
// 11 vector outputs returned for i = 0-10
// 12 vector outputs returned for i = 0-11
// i = 0 = boost factor on this step
// i = 1 = max strain of any bond on this step
// i = 1 = max strain of any bond on this step (positive or negative)
// 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 = 5 = fraction of steps where bond has no bias during this run
// i = 6 = fraction of steps where bond has negative strain during this run
// i = 7 = max drift distance of any atom during this run
// i = 8 = 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
// i = 9 = cummulative hyper time since fix created
// i = 10 = cummulative # of event timesteps since fix created
// i = 11 = cummulative # of atoms in events since fix created
if (i == 0) return outvec[1];
if (i == 1) return outvec[2];
@ -438,8 +492,9 @@ double FixHyperGlobal::compute_vector(int i)
if (i == 3) return outvec[4];
if (i == 4) {
int allbonds; // NOTE: bigint?
MPI_Allreduce(&nblocal,&allbonds,1,MPI_INT,MPI_SUM,world);
bigint mybonds = nblocal;
bigint allbonds;
MPI_Allreduce(&mybonds,&allbonds,1,MPI_LMP_BIGINT,MPI_SUM,world);
return 2.0*allbonds/atom->natoms;
}
@ -451,20 +506,27 @@ double FixHyperGlobal::compute_vector(int i)
}
if (i == 6) {
if (update->ntimestep == update->firststep) return 0.0;
int allnegstrain;
MPI_Allreduce(&negstrain,&allnegstrain,1,MPI_INT,MPI_SUM,world);
return 1.0*allnegstrain / (update->ntimestep - update->firststep);
}
if (i == 7) {
double alldriftsq;
MPI_Allreduce(&maxdriftsq,&alldriftsq,1,MPI_DOUBLE,MPI_MAX,world);
return sqrt(alldriftsq);
}
if (i == 7) {
if (i == 8) {
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;
if (i == 9) return t_hyper;
if (i == 10) return (double) nevent;
if (i == 11) return (double) nevent_atom;
return 0.0;
}
@ -476,13 +538,14 @@ double FixHyperGlobal::compute_vector(int i)
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 == 1) return compute_vector(9); // cummulative hyper time
if (i == 2) return compute_vector(10); // nevent
if (i == 3) return compute_vector(11); // 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 == 5) return compute_vector(7); // maxdrift
if (i == 6) return compute_vector(8); // maxbondlen
if (i == 7) return compute_vector(5); // fraction with zero bias
if (i == 8) return compute_vector(6); // fraction with negative strain
error->all(FLERR,"Invalid query to fix hyper/global");

View File

@ -56,6 +56,7 @@ class FixHyperGlobal : public FixHyper {
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
int negstrain; // # of steps when biased bond has negative strain
class NeighList *list;
@ -70,16 +71,19 @@ class FixHyperGlobal : public FixHyper {
double r0; // relaxed bond length
};
struct OneBond *blist; // list of owned bonds
int nblocal; // # of owned bonds
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 nlocal_old; // nlocal for old atoms
int nall_old; // nlocal+nghost for old atoms
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
tagint *tagold; // IDs of atoms when bonds were forme
int *old2now; // o2n[i] = current local index of old atom I
// MPI data struct for finding bond with max strain via Allreduce

File diff suppressed because it is too large Load Diff

View File

@ -21,6 +21,7 @@ FixStyle(hyper/local,FixHyperLocal)
#define LMP_FIX_HYPER_LOCAL_H
#include "fix_hyper.h"
#include "my_page.h"
namespace LAMMPS_NS {
@ -43,13 +44,9 @@ class FixHyperLocal : public FixHyper {
int pack_forward_comm(int, int *, double *, int, int *);
void unpack_forward_comm(int, int, double *);
int pack_reverse_comm(int, int, double *);
int pack_reverse_comm_size(int, int);
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
@ -59,97 +56,133 @@ class FixHyperLocal : public FixHyper {
private:
int me;
// inputs and derived quantities
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;
double boost_target; // target value of boost
int checkghost,checkbias; // flags for optional stats
double cutbondsq,dcutsq;
double beta,invqfactorsq;
// flags
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 nostrainyet; // 1 until maxstrain is first compute
bigint starttime; // timestep when this fix was invoked
int commflag; // flag for communication mode
// stats
int nbondbuild; // # of rebuilds of bond list
double time_bondbuild; // CPU time for bond builds
bigint allbonds; // current total # of bonds
int nnewbond; // running tally of # of new bonds created
int maxbondperatom; // max # of bonds any atom ever has
int nevent; // # of events that trigger bond rebuild
int nevent_atom; // # of atoms that experienced an event
double cutbondsq,dcutsq;
double beta,invqfactorsq;
double mybias;
int nbias_running; // running count of biased bonds
int nobias_running; // ditto for bonds with bias = 0, b/c too long
int negstrain_running; // ditto for bonds with negative strain
double mybias; // sum of bias potentials for biased bonds
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 maxdriftsq; // max distance any bond atom drifts from quenched x
double sumbiascoeff; // sum of all bond bias coeffs at each timestep
double avebiascoeff; // cummulative sumbiascoeff/allbonds across steps
double minbiascoeff; // cummulative min bias coeff for any bond
double maxbiascoeff; // cummulative max bias coeff for any bond
double rmaxever,rmaxeverbig;
int ghost_toofar;
int ghost_toofar; // # of ghost atoms not found in Dcut neigh list
int checkbias_every,checkbias_flag,checkbias_count;
// 2 neighbor lists
class NeighList *listfull; // full neigh list up to Dcut distance
class NeighList *listhalf; // half neigh list up to pair distance
// both created only when bonds are rebuilt
// list of my owned bonds and bias coeffs
// persists on a proc from one event until the next
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
};
OneBond *blist; // list of owned bonds
double *biascoeff; // biasing coefficient Cij for each bond
int nblocal; // # of owned bonds
int maxbond; // allocated size of blist
// old data from last timestep bonds were formed
// persists on a proc from one event until the next
// first set of vectors are maxlocal in length
// second set of vectors are maxall in length
int nlocal_old; // nlocal for old atoms
int nall_old; // nlocal+nghost for old atoms
int maxlocal; // allocated size of old local atom vecs
int maxall; // allocated size of old all atom vecs
int *numbond; // # of bonds owned by old owned atoms
int *maxhalf; // bond index for maxstrain bond of old atoms
int *eligible; // 0/1 flag for bias on one of old atom's bonds
double *maxhalfstrain; // strain value for maxstrain bond of old atoms
int *old2now; // o2n[i] = current local index of old atom I
// may be -1 if ghost atom has drifted
tagint *tagold; // IDs of atoms when bonds were formed
// 0 if a ghost atom is not in Dcut neigh list
double **xold; // coords of atoms when bonds were formed
// vectors used to find maxstrain bonds within a local domain
int maxatom; // size of these vectors, nlocal + nghost
double *maxstrain; // max-strain of any bond atom I is part of
// for owned and ghost atoms
double *maxstrain_domain; // max-strain of any neighbor atom J of atom I
// for owned and ghost atoms
tagint *biasflag; // atoms in biased bonds marked with bond partner
// for owned and ghost atoms
// list of biased bonds this proc owns
int maxbias; // allocated size of bias list
int nbias; // # of biased bonds I own
int *bias; // index of biased bonds in my bond list
// data structs for persisting bias coeffs when bond list is reformed
struct OneCoeff {
double biascoeff;
tagint tag;
};
MyPage<OneCoeff> *cpage; // pages of OneCoeff datums for clist
OneCoeff **clist; // ptrs to vectors of bias coeffs for each atom
int *numcoeff; // # of bias coeffs per atom (one per bond)
int maxcoeff; // allocate sized of clist and numcoeff
// 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
// private methods
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_every,histo_count,histo_print,histo_steps;
double histo_delta,invhisto_delta,histo_lo;
bigint *histo,*allhisto;
void grow_bond();
};
}

View File

@ -40,9 +40,7 @@ enum{NOHYPER,GLOBAL,LOCAL};
/* ---------------------------------------------------------------------- */
Hyper::Hyper(LAMMPS *lmp) :
Pointers(lmp), dumplist(NULL)
{}
Hyper::Hyper(LAMMPS *lmp) : Pointers(lmp), dumplist(NULL) {}
/* ----------------------------------------------------------------------
perform hyperdynamics simulation
@ -183,9 +181,6 @@ void Hyper::command(int narg, char **arg)
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;
@ -200,6 +195,14 @@ void Hyper::command(int narg, char **arg)
if (hyperenable) fix_hyper->build_bond_list(0);
fix_event->restore_state_quench();
// reset stats and timers to skip HD setup
nbuild = ndanger = 0;
time_dynamics = time_quench = 0.0;
timer->barrier_start();
time_start = timer->get_wall(Timer::TOTAL);
// main loop: dynamics, store state, quench, check event, restore state
int ecount;
@ -260,11 +263,12 @@ void Hyper::command(int narg, char **arg)
double maxdrift = 0.0;
double maxbondlen = 0.0;
double fraczero = 1.0;
double fracneg = 1.0;
double nnewbond,avenboost,aveboostcoeff,maxboostcoeff,minboostcoeff;
double maxbondperatom,neighbondperbond,aveboostnow;
double nnewbond,avenbias,avebiascoeff,minbiascoeff,maxbiascoeff;
double maxbondperatom,neighbondperbond,avebiasnow;
double tbondbuild,rmaxever,rmaxeverbig,allghost_toofar;
double lostbond,lostbondcoeff,biasoverlap,nonmatchbiascoeff;
double lostbond,lostbondcoeff,biasoverlap;
if (hyperenable) {
t_hyper = fix_hyper->query(1);
@ -274,115 +278,70 @@ void Hyper::command(int narg, char **arg)
maxdrift = fix_hyper->query(5);
maxbondlen = fix_hyper->query(6);
fraczero = fix_hyper->query(7);
fracneg = fix_hyper->query(8);
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);
nnewbond = fix_hyper->query(9);
maxbondperatom = fix_hyper->query(10);
avenbias = fix_hyper->query(11);
avebiascoeff = fix_hyper->query(12);
minbiascoeff = fix_hyper->query(13);
maxbiascoeff = fix_hyper->query(14);
neighbondperbond = fix_hyper->query(15);
avebiasnow = fix_hyper->query(16);
tbondbuild = fix_hyper->query(17);
rmaxever = fix_hyper->query(18);
rmaxeverbig = fix_hyper->query(19);
allghost_toofar = fix_hyper->query(20);
biasoverlap = fix_hyper->query(21);
}
}
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);
FILE *out;
for (int iout = 0; iout < 2; iout++) {
if (iout == 0) out = screen;
if (iout == 1) out = logfile;
if (!out) continue;
fprintf(out,"Cummulative quantities for fix hyper:\n");
fprintf(out," hyper time = %g\n",t_hyper);
fprintf(out," time boost factor = %g\n",t_hyper/(nsteps*update->dt));
fprintf(out," event timesteps = %d\n",nevent_running);
fprintf(out," # of atoms in events = %d\n",nevent_atoms_running);
fprintf(out,"Quantities for this hyper run:\n");
fprintf(out," event timesteps = %d\n",nevent);
fprintf(out," # of atoms in events = %d\n",nevent_atoms);
fprintf(out," max length of any bond = %g\n",maxbondlen);
fprintf(out," max drift distance of any atom = %g\n",maxdrift);
fprintf(out," fraction of biased bonds with zero bias = %g\n",fraczero);
fprintf(out," fraction of biased bonds with negative strain = %g\n",
fracneg);
fprintf(out,"Current quantities:\n");
fprintf(out," 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 "
fprintf(out,"Cummulative quantities specific to fix hyper/local:\n");
fprintf(out," # of new bonds formed = %g\n",nnewbond);
fprintf(out," max bonds/atom = %g\n",maxbondperatom);
fprintf(out,"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 "
fprintf(out," ave biased bonds/step = %g\n",avenbias);
fprintf(out," ave bias coeff of all bonds = %g\n",avebiascoeff);
fprintf(out," min bias coeff of any bond = %g\n",minbiascoeff);
fprintf(out," max bias coeff of any bond = %g\n",maxbiascoeff);
fprintf(out," max dist from my subbox of any "
"non-maxstrain bond ghost atom = %g\n",rmaxever);
fprintf(screen," max dist from my box of any bond ghost atom = %g\n",
fprintf(out," max dist from my box of any bond ghost atom = %g\n",
rmaxeverbig);
fprintf(screen," count of bond ghost neighbors "
fprintf(out," 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(out," bias overlaps = %g\n",biasoverlap);
fprintf(out," CPU time for bond builds = %g\n",tbondbuild);
fprintf(out,"Current quantities specific to fix hyper/local:\n");
fprintf(out," neighbor bonds/bond = %g\n",neighbondperbond);
fprintf(out," ave boost coeff for all bonds = %g\n",avebiasnow);
}
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");
fprintf(out,"\n");
}
}

View File

@ -1069,6 +1069,7 @@ void CommBrick::reverse_comm_fix_variable(Fix *fix)
MPI_Sendrecv(&nsend,1,MPI_INT,recvproc[iswap],0,
&nrecv,1,MPI_INT,sendproc[iswap],0,world,
MPI_STATUS_IGNORE);
if (sendnum[iswap]) {
if (nrecv > maxrecv) grow_recv(nrecv);
MPI_Irecv(buf_recv,maxrecv,MPI_DOUBLE,sendproc[iswap],0,

View File

@ -32,7 +32,7 @@ using namespace FixConst;
enum{X,V,F,COMPUTE,FIX,VARIABLE};
enum{ONE,RUNNING};
enum{SCALAR,VECTOR,WINDOW};
enum{GLOBAL,PERATOM,LOCAL};
enum{DEFAULT,GLOBAL,PERATOM,LOCAL};
enum{IGNORE,END,EXTRA};
#define INVOKED_SCALAR 1
@ -46,8 +46,10 @@ enum{IGNORE,END,EXTRA};
FixAveHisto::FixAveHisto(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg),
nvalues(0), which(NULL), argindex(NULL), value2index(NULL), ids(NULL), fp(NULL), stats_list(NULL),
bin(NULL), bin_total(NULL), bin_all(NULL), bin_list(NULL), coord(NULL), vector(NULL)
nvalues(0), which(NULL), argindex(NULL), value2index(NULL),
ids(NULL), fp(NULL), stats_list(NULL),
bin(NULL), bin_total(NULL), bin_all(NULL), bin_list(NULL),
coord(NULL), vector(NULL)
{
if (narg < 10) error->all(FLERR,"Illegal fix ave/histo command");
@ -188,9 +190,8 @@ FixAveHisto::FixAveHisto(LAMMPS *lmp, int narg, char **arg) :
memory->sfree(earg);
}
// setup and error check
// kind = inputs are all global, or all per-atom, or all local
// for fix inputs, check that fix frequency is acceptable
// check input args for kind consistency
// all inputs must all be global, per-atom, or local
if (nevery <= 0 || nrepeat <= 0 || nfreq <= 0)
error->all(FLERR,"Illegal fix ave/histo command");
@ -201,40 +202,65 @@ FixAveHisto::FixAveHisto(LAMMPS *lmp, int narg, char **arg) :
if (ave != RUNNING && overwrite)
error->all(FLERR,"Illegal fix ave/histo command");
int kindflag;
int kindglobal,kindperatom,kindlocal;
for (int i = 0; i < nvalues; i++) {
if (which[i] == X || which[i] == V || which[i] == F) kindflag = PERATOM;
else if (which[i] == COMPUTE) {
kindglobal = kindperatom = kindlocal = 0;
if (which[i] == X || which[i] == V || which[i] == F) {
kindperatom = 1;
} else if (which[i] == COMPUTE) {
int c_id = modify->find_compute(ids[i]);
if (c_id < 0) error->all(FLERR,"Fix ave/histo input is invalid compute");
Compute *compute = modify->compute[c_id];
// computes can produce multiple kinds of output
if (compute->scalar_flag || compute->vector_flag || compute->array_flag)
kindflag = GLOBAL;
else if (compute->peratom_flag) kindflag = PERATOM;
else if (compute->local_flag) kindflag = LOCAL;
else error->all(FLERR,"Fix ave/histo input is invalid compute");
kindglobal = 1;
if (compute->peratom_flag) kindperatom = 1;
if (compute->local_flag) kindlocal = 1;
} else if (which[i] == FIX) {
int f_id = modify->find_fix(ids[i]);
if (f_id < 0) error->all(FLERR,"Fix ave/histo input is invalid fix");
Fix *fix = modify->fix[f_id];
// fixes can produce multiple kinds of output
if (fix->scalar_flag || fix->vector_flag || fix->array_flag)
kindflag = GLOBAL;
else if (fix->peratom_flag) kindflag = PERATOM;
else if (fix->local_flag) kindflag = LOCAL;
else error->all(FLERR,"Fix ave/histo input is invalid fix");
kindglobal = 1;
if (fix->peratom_flag) kindperatom = 1;
if (fix->local_flag) kindlocal = 1;
} else if (which[i] == VARIABLE) {
int ivariable = input->variable->find(ids[i]);
if (ivariable < 0) error->all(FLERR,"Fix ave/histo input is invalid variable");
if (input->variable->equalstyle(ivariable)) kindflag = GLOBAL;
else if (input->variable->atomstyle(ivariable)) kindflag = PERATOM;
else error->all(FLERR,"Fix ave/histo input is invalid variable");
if (ivariable < 0)
error->all(FLERR,"Fix ave/histo input is invalid variable");
// variables only produce one kind of output
if (input->variable->equalstyle(ivariable)) kindglobal = 1;
else if (input->variable->atomstyle(ivariable)) kindperatom = 1;
else error->all(FLERR,"Fix ave/histo input is invalid kind of variable");
}
if (kind == DEFAULT) {
if (kindglobal + kindperatom + kindlocal > 1)
error->all(FLERR,"Fix ave/histo input kind is ambiguous");
if (kindglobal) kind = GLOBAL;
if (kindperatom) kind = PERATOM;
if (kindlocal) kind = LOCAL;
} else if (kind == GLOBAL) {
if (!kindglobal)
error->all(FLERR,"Fix ave/histo input kind is invalid");
} else if (kind == PERATOM) {
if (!kindperatom)
error->all(FLERR,"Fix ave/histo input kind is invalid");
} else if (kind == LOCAL) {
if (!kindlocal)
error->all(FLERR,"Fix ave/histo input kind is invalid");
}
if (i == 0) kind = kindflag;
else if (kindflag != kind)
error->all(FLERR,
"Fix ave/histo inputs are not all global, peratom, or local");
}
// more error checks
// for fix inputs, check that fix frequency is acceptable
if (kind == PERATOM && mode == SCALAR)
error->all(FLERR,
"Fix ave/histo cannot input per-atom values in scalar mode");
@ -919,6 +945,7 @@ void FixAveHisto::options(int iarg, int narg, char **arg)
// option defaults
fp = NULL;
kind = DEFAULT;
ave = ONE;
startstep = 0;
mode = SCALAR;
@ -942,6 +969,13 @@ void FixAveHisto::options(int iarg, int narg, char **arg)
}
}
iarg += 2;
} else if (strcmp(arg[iarg],"kind") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/histo command");
if (strcmp(arg[iarg+1],"global") == 0) kind = GLOBAL;
else if (strcmp(arg[iarg+1],"peratom") == 0) kind = PERATOM;
else if (strcmp(arg[iarg+1],"local") == 0) kind = LOCAL;
else error->all(FLERR,"Illegal fix ave/histo command");
iarg += 2;
} else if (strcmp(arg[iarg],"ave") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/histo command");
if (strcmp(arg[iarg+1],"one") == 0) ave = ONE;

View File

@ -380,9 +380,8 @@ void Thermo::compute(int flag)
loc += sprintf(&line[loc],format[ifield],dvalue);
else if (vtype[ifield] == INT)
loc += sprintf(&line[loc],format[ifield],ivalue);
else if (vtype[ifield] == BIGINT) {
else if (vtype[ifield] == BIGINT)
loc += sprintf(&line[loc],format[ifield],bivalue);
}
}
// print line to screen and logfile