Merge branch 'develop' into doc-write-data
This commit is contained in:
4
.github/workflows/unittest-macos.yml
vendored
4
.github/workflows/unittest-macos.yml
vendored
@ -15,7 +15,7 @@ jobs:
|
||||
build:
|
||||
name: MacOS Unit Test
|
||||
if: ${{ github.repository == 'lammps/lammps' }}
|
||||
runs-on: macos-latest
|
||||
runs-on: macos-13
|
||||
env:
|
||||
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||
|
||||
@ -43,6 +43,8 @@ jobs:
|
||||
working-directory: build
|
||||
run: |
|
||||
ccache -z
|
||||
python3 -m venv macosenv
|
||||
source macosenv/bin/activate
|
||||
python3 -m pip install numpy
|
||||
python3 -m pip install pyyaml
|
||||
cmake -C ../cmake/presets/clang.cmake \
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
message(STATUS "Downloading and building OpenCL loader library")
|
||||
set(OPENCL_LOADER_URL "${LAMMPS_THIRDPARTY_URL}/opencl-loader-2024.02.09.tar.gz" CACHE STRING "URL for OpenCL loader tarball")
|
||||
set(OPENCL_LOADER_MD5 "f3573cf9daa3558ba46fd5866517f38f" CACHE STRING "MD5 checksum of OpenCL loader tarball")
|
||||
set(OPENCL_LOADER_URL "${LAMMPS_THIRDPARTY_URL}/opencl-loader-2024.05.09.tar.gz" CACHE STRING "URL for OpenCL loader tarball")
|
||||
set(OPENCL_LOADER_MD5 "e7796826b21c059224fabe997e0f2075" CACHE STRING "MD5 checksum of OpenCL loader tarball")
|
||||
mark_as_advanced(OPENCL_LOADER_URL)
|
||||
mark_as_advanced(OPENCL_LOADER_MD5)
|
||||
|
||||
|
||||
@ -15,7 +15,8 @@ orientation for rotational models. This produces a stress-free initial
|
||||
state. Furthermore, bonds are allowed to break under large strains,
|
||||
producing fracture. The examples/bpm directory has sample input scripts
|
||||
for simulations of the fragmentation of an impacted plate and the
|
||||
pouring of extended, elastic bodies.
|
||||
pouring of extended, elastic bodies. See :ref:`(Clemmer) <howto-Clemmer>`
|
||||
for more general information on the approach and the LAMMPS implementation.
|
||||
|
||||
----------
|
||||
|
||||
@ -150,3 +151,9 @@ the following are currently compatible with BPM bond styles:
|
||||
interactions, one will need to switch between different *special_bonds*
|
||||
settings in the input script. An example is found in
|
||||
``examples/bpm/impact``.
|
||||
|
||||
----------
|
||||
|
||||
.. _howto-Clemmer:
|
||||
|
||||
**(Clemmer)** Clemmer, Monti, Lechman, Soft Matter, 20, 1702 (2024).
|
||||
|
||||
@ -468,12 +468,13 @@ to.
|
||||
|
||||
The *overlap* keyword only applies to the *random* style. It prevents
|
||||
newly created particles from being created closer than the specified
|
||||
*Doverlap* distance from any other particle. When the particles being
|
||||
created are molecules, the radius of the molecule (from its geometric
|
||||
center) is added to *Doverlap*. If particles have finite size (see
|
||||
:doc:`atom_style sphere <atom_style>` for example) *Doverlap* should
|
||||
be specified large enough to include the particle size in the
|
||||
non-overlapping criterion.
|
||||
*Doverlap* distance from any other particle. If particles have finite
|
||||
size (see :doc:`atom_style sphere <atom_style>` for example) *Doverlap*
|
||||
should be specified large enough to include the particle size in the
|
||||
non-overlapping criterion. If molecules are being randomly inserted, then
|
||||
an insertion is only accepted if each particle in the molecule meets the
|
||||
overlap criterion with respect to other particles (not including particles
|
||||
in the molecule itself).
|
||||
|
||||
.. note::
|
||||
|
||||
|
||||
@ -29,10 +29,12 @@ Syntax
|
||||
NOTE: All other styles are documented by the :doc:`fix deform <fix_deform>` command
|
||||
|
||||
*xy*, *xz*, *yz* args = style value
|
||||
style = *final* or *delta* or *vel* or *erate* or *trate* or *wiggle* or *variable* or *pressure*
|
||||
style = *final* or *delta* or *vel* or *erate* or *trate* or *wiggle* or *variable* or *pressure* or *erate/rescale*
|
||||
*pressure* values = target gain
|
||||
target = target pressure (pressure units)
|
||||
gain = proportional gain constant (1/(time * pressure) or 1/time units)
|
||||
*erate/rescale* value = R
|
||||
R = engineering shear strain rate (1/time units)
|
||||
NOTE: All other styles are documented by the :doc:`fix deform <fix_deform>` command
|
||||
|
||||
*box* = style value
|
||||
@ -159,6 +161,21 @@ details of a simulation and testing different values is
|
||||
recommended. One can also apply a maximum limit to the magnitude of
|
||||
the applied strain using the :ref:`max/rate <deform_max_rate>` option.
|
||||
|
||||
The *erate/rescale* style operates similarly to the *erate* style with
|
||||
a specified strain rate in units of 1/time. The difference is that
|
||||
the change in the tilt factor will depend on the current length of
|
||||
the box perpendicular to the shear direction, L, instead of the
|
||||
original length, L0. The tilt factor T as a function of time will
|
||||
change as
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
T(t) = T(t-1) + L\*erate\* \Delta t
|
||||
|
||||
where T(t-1) is the tilt factor on the previous timestep and :math:`\Delta t`
|
||||
is the timestep size. This option may be useful in scenarios where
|
||||
L changes in time.
|
||||
|
||||
----------
|
||||
|
||||
The *box* parameter provides an additional control over the *x*, *y*,
|
||||
|
||||
@ -8,7 +8,7 @@ Syntax
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
fix ID group nonaffine/displacement style args reference/style nstep
|
||||
fix ID group nonaffine/displacement style args reference/style nstep keyword values
|
||||
|
||||
* ID, group are documented in :doc:`fix <fix>` command
|
||||
* nonaffine/displacement = style name of this fix command
|
||||
@ -32,6 +32,13 @@ Syntax
|
||||
*update* = update the reference frame every *nstep* timesteps
|
||||
*offset* = update the reference frame *nstep* timesteps before calculating the nonaffine displacement
|
||||
|
||||
* zero or more keyword/value pairs may be appended
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
*z/min* values = zmin
|
||||
zmin = minimum coordination number to calculate D2min
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
@ -76,6 +83,12 @@ is the identity tensor. This calculation is only performed on timesteps that
|
||||
are a multiple of *nevery* (including timestep zero). Data accessed before
|
||||
this occurs will simply be zeroed.
|
||||
|
||||
For particles with low coordination numbers, calculations of :math:`D^2_\mathrm{min}`
|
||||
may not be accurate. An optional minimum coordination number can be defined using
|
||||
the *z/min* keyword. If any particle has fewer than the specified number of particles
|
||||
in the cutoff distance or in contact, the above calculations will be skipped and the
|
||||
corresponding peratom array entries will be zero.
|
||||
|
||||
The *integrated* style simply integrates the velocity of particles
|
||||
every timestep to calculate a displacement. This style only works if
|
||||
used in conjunction with another fix that deforms the box and displaces
|
||||
|
||||
@ -20,7 +20,7 @@ Syntax
|
||||
* Nfreq = calculate average bond-order every this many timesteps
|
||||
* filename = name of output file
|
||||
* zero or more keyword/value pairs may be appended
|
||||
* keyword = *cutoff* or *element* or *position* or *delete*
|
||||
* keyword = *cutoff* or *element* or *position* or *delete* or *delete_rate_limit*
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
@ -110,10 +110,10 @@ all types from 1 to :math:`N`. A leading asterisk means all types from
|
||||
The optional keyword *element* can be used to specify the chemical
|
||||
symbol printed for each LAMMPS atom type. The number of symbols must
|
||||
match the number of LAMMPS atom types and each symbol must consist of
|
||||
1 or 2 alphanumeric characters. Normally, these symbols should be
|
||||
chosen to match the chemical identity of each LAMMPS atom type, as
|
||||
specified using the :doc:`reaxff pair_coeff <pair_reaxff>` command and
|
||||
the ReaxFF force field file.
|
||||
1 or 2 alphanumeric characters. By default, these symbols are the same
|
||||
as the chemical identity of each LAMMPS atom type, as specified by the
|
||||
:doc:`ReaxFF pair_coeff <pair_reaxff>` command and the ReaxFF force
|
||||
field file.
|
||||
|
||||
The optional keyword *position* writes center-of-mass positions of
|
||||
each identified molecules to file *filepos* every *posfreq* timesteps.
|
||||
@ -233,5 +233,5 @@ Default
|
||||
"""""""
|
||||
|
||||
The default values for bond-order cutoffs are 0.3 for all I-J pairs.
|
||||
The default element symbols are C, H, O, N.
|
||||
The default element symbols are taken from the ReaxFF pair_coeff command.
|
||||
Position files are not written by default.
|
||||
|
||||
@ -8,56 +8,118 @@ Syntax
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
replicate nx ny nz *keyword*
|
||||
replicate nx ny nz keyword ...
|
||||
|
||||
nx,ny,nz = replication factors in each dimension
|
||||
|
||||
* optional *keyword* = *bbox*
|
||||
* zero or more keywords may be appended
|
||||
* keyword = *bbox* or *bond/periodic*
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
*bbox* = only check atoms in replicas that overlap with a processor's subdomain
|
||||
*bbox* = use a bounding-box algorithm which is faster for large proc counts
|
||||
*bond/periodic* = use an algorithm that correctly replicates periodic bond loops
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
For examples of replicating simple linear polymer chains (periodic or
|
||||
non-periodic) or periodic carbon nanotubes, see examples/replicate.
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
replicate 2 3 2
|
||||
replicate 2 3 2 bbox
|
||||
replicate 2 3 2 bond/periodic
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Replicate the current simulation one or more times in each dimension.
|
||||
For example, replication factors of 2,2,2 will create a simulation
|
||||
with 8x as many atoms by doubling the simulation domain in each
|
||||
dimension. A replication factor of 1 in a dimension leaves the
|
||||
simulation domain unchanged. When the new simulation box is created
|
||||
it is also partitioned into a regular 3d grid of rectangular bricks,
|
||||
one per processor, based on the number of processors being used and
|
||||
the settings of the :doc:`processors <processors>` command. The
|
||||
partitioning can later be changed by the :doc:`balance <balance>` or
|
||||
:doc:`fix balance <fix_balance>` commands.
|
||||
Replicate the current system one or more times in each dimension. For
|
||||
example, replication factors of 2,2,2 will create a simulation with 8x
|
||||
as many atoms by doubling the size of the simulation box in each
|
||||
dimension. A replication factor of 1 leaves the simulation domain
|
||||
unchanged in that dimension.
|
||||
|
||||
All properties of the atoms are replicated, including their
|
||||
velocities, which may or may not be desirable. New atom IDs are
|
||||
assigned to new atoms, as are molecule IDs. Bonds and other topology
|
||||
interactions are created between pairs of new atoms as well as between
|
||||
old and new atoms. This is done by using the image flag for each atom
|
||||
to "unwrap" it out of the periodic box before replicating it.
|
||||
When the new simulation box is created it is partitioned into a
|
||||
regular 3d grid of rectangular bricks, one per processor, based on the
|
||||
number of processors being used and the settings of the
|
||||
:doc:`processors <processors>` command. The partitioning can be
|
||||
changed by subsequent :doc:`balance <balance>` or :doc:`fix balance
|
||||
<fix_balance>` commands.
|
||||
|
||||
This means that any molecular bond you specify in the original data
|
||||
file that crosses a periodic boundary should be between two atoms with
|
||||
image flags that differ by 1. This will allow the bond to be
|
||||
unwrapped appropriately.
|
||||
All properties of each atom are replicated (except per-atom fix data,
|
||||
see the Restrictions section below). This includes their velocities,
|
||||
which may or may not be desirable. New atom IDs are assigned to new
|
||||
atoms, as are new molecule IDs. Bonds and other topology interactions
|
||||
are created between pairs of new atoms as well as between old and new
|
||||
atoms.
|
||||
|
||||
The optional keyword *bbox* uses a bounding box to only check atoms in
|
||||
replicas that overlap with a processor's subdomain when assigning
|
||||
atoms to processors. It typically results in a substantial speedup
|
||||
when using the replicate command on a large number of processors. It
|
||||
does require temporary use of more memory, specifically that each
|
||||
processor can store all atoms in the entire system before it is
|
||||
replicated.
|
||||
.. note::
|
||||
|
||||
The bond discussion which follows only refers to models with
|
||||
permanent covalent bonds typically defined in LAMMPS via a data
|
||||
file. It is not relevant to sytems modeled with many-body
|
||||
potentials which can define bonds on-the-fly, based on the current
|
||||
positions of nearby atoms, e.g. models using the :doc:`AIREBO
|
||||
<pair_airebo>` or :doc:`ReaxFF <pair_reaxff>` potentials.
|
||||
|
||||
If the *bond/periodic* keyword is not specified, bond replication is
|
||||
done by using the image flag for each atom to "unwrap" it out of the
|
||||
periodic box before replicating it. After replication is performed,
|
||||
atoms outside the new periodic box are wrapped back into it. This
|
||||
assigns correct images flags to all atoms in the system. For this to
|
||||
work, all original atoms in the original simulation box must have
|
||||
consistent image flags. This means that if two atoms have a bond
|
||||
between them which crosses a periodic boundary, their respective image
|
||||
flags will differ by 1 in that dimension.
|
||||
|
||||
Image flag consistency is not possible if a system has a periodic bond
|
||||
loop, meaning there is a chain of bonds which crosses an entire
|
||||
dimension and re-connects to itself across a periodic boundary. In
|
||||
this case you MUST use the *bond/periodic* keyword to correctly
|
||||
replicate the system. This option zeroes the image flags for all
|
||||
atoms and uses a different algorithm to find new (nearby) bond
|
||||
neighbors in the replicated system. In the final replicated system
|
||||
all image flags are zero (in each dimension).
|
||||
|
||||
.. note::
|
||||
|
||||
LAMMPS does not check for image flag consistency before performing
|
||||
the replication (it does issue a warning about this before a
|
||||
simulation is run). If the original image flags are inconsistent,
|
||||
the replicated system will also have inconsistent image flags, but
|
||||
will otherwise be correctly replicated. This is NOT the case if
|
||||
there is a periodic bond loop. See the next note.
|
||||
|
||||
.. note::
|
||||
|
||||
LAMMPS does not check for periodic bond loops. If you use the
|
||||
*bond/periodic* keyword for a system without periodic bond loops,
|
||||
the system will be correctly replicated, but image flag information
|
||||
will be lost (which may or may not be important to your model). If
|
||||
you do not use the *bond/periodic* keyword for a system with
|
||||
periodic bond loops, the replicated system will have invalid bonds
|
||||
(typically very long), resulting in bad dynamics.
|
||||
|
||||
If possible, the *bbox* keyword should be used when running on a large
|
||||
number of processors, as it can result in a substantial speed-up for
|
||||
the replication operation. It uses a bounding box to only check atoms
|
||||
in replicas that overlap with each processor's new subdomain when
|
||||
assigning atoms to processors. It also preserves image flag
|
||||
information. The only drawback to the *bbox* option is that it
|
||||
requires a temporary use of more memory. Each processor must be able
|
||||
to store all atoms (and their per-atom data) in the original system,
|
||||
before it is replicated.
|
||||
|
||||
.. note::
|
||||
|
||||
The algorithm used by the *bond/periodic* keyword builds on the
|
||||
algorithm used by the *bbox* keyword and thus has the same memory
|
||||
requirements. If you specify only the *bond/peridoic* keyword it
|
||||
will internally set the *bbox* keyword as well.
|
||||
|
||||
----------
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
@ -65,49 +127,30 @@ Restrictions
|
||||
A 2d simulation cannot be replicated in the z dimension.
|
||||
|
||||
If a simulation is non-periodic in a dimension, care should be used
|
||||
when replicating it in that dimension, as it may put atoms nearly on
|
||||
top of each other.
|
||||
|
||||
.. note::
|
||||
|
||||
You cannot use the replicate command on a system which has a
|
||||
molecule that spans the box and is bonded to itself across a periodic
|
||||
boundary, so that the molecule is effectively a loop. A simple
|
||||
example would be a linear polymer chain that spans the simulation box
|
||||
and bonds back to itself across the periodic boundary. More realistic
|
||||
examples would be a CNT (meant to be an infinitely long CNT) or a
|
||||
graphene sheet or a bulk periodic crystal where there are explicit
|
||||
bonds specified between near neighbors. (Note that this only applies
|
||||
to systems that have permanent bonds as specified in the data file. A
|
||||
CNT that is just atoms modeled with the :doc:`AIREBO potential <pair_airebo>` has no such permanent bonds, so it can be
|
||||
replicated.) The reason replication does not work with those systems
|
||||
is that the image flag settings described above cannot be made
|
||||
consistent. I.e. it is not possible to define images flags so that
|
||||
when every pair of bonded atoms is unwrapped (using the image flags),
|
||||
they will be close to each other. The only way the replicate command
|
||||
could work in this scenario is for it to break a bond, insert more
|
||||
atoms, and re-connect the loop for the larger simulation box. But it
|
||||
is not clever enough to do this. So you will have to construct a
|
||||
larger version of your molecule as a pre-processing step and input a
|
||||
new data file to LAMMPS.
|
||||
when replicating it in that dimension, as it may generate atoms nearly
|
||||
on top of each other.
|
||||
|
||||
If the current simulation was read in from a restart file (before a
|
||||
run is performed), there must not be any fix information stored in
|
||||
the file for individual atoms. Similarly, no fixes can be defined at
|
||||
the time the replicate command is used that require vectors of atom
|
||||
run is performed), there must not be any fix information stored in the
|
||||
file for individual atoms. Similarly, no fixes can be defined at the
|
||||
time the replicate command is used that require vectors of atom
|
||||
information to be stored. This is because the replicate command does
|
||||
not know how to replicate that information for new atoms it creates.
|
||||
To work around this restriction, restart files may be converted into
|
||||
data files and fixes may be undefined via the :doc:`unfix <unfix>`
|
||||
command before and redefined after the replicate command.
|
||||
|
||||
To work around this restriction two options are possible. (1) Fixes
|
||||
which use the stored data in the restart file can be defined before
|
||||
replication and then deleted via the :doc:`unfix <unfix>` command and
|
||||
re-defined after it. Or (2) the restart file can be converted to a
|
||||
data file (which deletes the stored fix infomation) and fixes defined
|
||||
after the replicate command. In both these scenarios, the per-atom
|
||||
fix information in the restart file is lost.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
|
||||
none
|
||||
|
||||
|
||||
Default
|
||||
"""""""
|
||||
|
||||
none
|
||||
No settings for using the *bbox* or *bond/periodic* algorithms.
|
||||
|
||||
@ -4162,6 +4162,7 @@ zenodo
|
||||
Zepeda
|
||||
zflag
|
||||
Zhang
|
||||
Zhao
|
||||
Zhen
|
||||
zhi
|
||||
Zhigilei
|
||||
|
||||
@ -104,6 +104,7 @@ prd: parallel replica dynamics of vacancy diffusion in bulk Si
|
||||
python: use of PYTHON package to invoke Python code from input script
|
||||
qeq: use of QEQ package for charge equilibration
|
||||
reaxff: RDX and TATB and several other models using ReaxFF
|
||||
replicate: use of replicate command
|
||||
rerun: use of rerun and read_dump commands
|
||||
rigid: rigid bodies modeled as independent or coupled
|
||||
shear: sideways shear applied to 2d solid, with and without a void
|
||||
|
||||
32
examples/replicate/README
Normal file
32
examples/replicate/README
Normal file
@ -0,0 +1,32 @@
|
||||
This directory has input scripts which demonstrate how to use the
|
||||
replicate command both for systems with and without periodic bond
|
||||
loops. A periodic bond loop is where a chain of bonds spans a
|
||||
periodic dimension of the box and includes one or more bonds which
|
||||
cross the periodic boundary to close the loop.
|
||||
|
||||
To run these scripts, LAMMPS should be built with the MOLECULE and
|
||||
CLASS2 packages. The latter is only needed for the CNT example.
|
||||
|
||||
--------
|
||||
|
||||
These scripts are tiny examples which illustrate both kinds of
|
||||
systems. Each produces a series of images which can be visualized.
|
||||
If the 3 lines for a dump movie command are uncommented, a MPG movie
|
||||
is produced, assuming LAMMPS is build with FFMPEG support.
|
||||
|
||||
in.replicate.bond.x # linear chains in x direction, bond loop in x
|
||||
in.replcate.bond.x.y # 2d grid of bonded atoms, bond loops in x and y
|
||||
in.replicate.bond.xy # linear chains in diagonal direction, bond loop in x and y
|
||||
in.replicate.bond.noloop # linear chains in x direction, no bond loop
|
||||
|
||||
If you do not use the bond/periodic keyword with the replicate command
|
||||
in the first 3 of these scripts (which have periodic bond loops), and
|
||||
visualize the dynamics of hee simulation, you will see how the
|
||||
replication creates a bogus system.
|
||||
|
||||
--------
|
||||
|
||||
This script is for a complex system of 3 orthogonal CNTs which has
|
||||
periodic bond loops in all 3 dimensions xyz.
|
||||
|
||||
in.replicate.cnt
|
||||
22
examples/replicate/data.bond.x
Normal file
22
examples/replicate/data.bond.x
Normal file
@ -0,0 +1,22 @@
|
||||
# system with periodic bonds in x
|
||||
|
||||
3 atoms
|
||||
3 bonds
|
||||
|
||||
1 atom types
|
||||
1 bond types
|
||||
|
||||
0 3 xlo xhi
|
||||
0 1 ylo yhi
|
||||
|
||||
Atoms
|
||||
|
||||
1 1 1 0.5 0.5 0
|
||||
2 1 1 1.5 0.5 0
|
||||
3 1 1 2.5 0.5 0
|
||||
|
||||
Bonds
|
||||
|
||||
1 1 1 2
|
||||
2 1 2 3
|
||||
3 1 3 1
|
||||
21
examples/replicate/data.bond.x.noloop
Normal file
21
examples/replicate/data.bond.x.noloop
Normal file
@ -0,0 +1,21 @@
|
||||
# system with non-periodic bonds in x
|
||||
|
||||
3 atoms
|
||||
2 bonds
|
||||
|
||||
1 atom types
|
||||
1 bond types
|
||||
|
||||
0 3 xlo xhi
|
||||
0 1 ylo yhi
|
||||
|
||||
Atoms
|
||||
|
||||
1 1 1 0.5 0.5 0 0 0 0
|
||||
2 1 1 1.5 0.5 0 0 0 0
|
||||
3 1 1 2.5 0.5 0 -1 0 0
|
||||
|
||||
Bonds
|
||||
|
||||
1 1 1 2
|
||||
2 1 3 1
|
||||
43
examples/replicate/data.bond.x.y
Normal file
43
examples/replicate/data.bond.x.y
Normal file
@ -0,0 +1,43 @@
|
||||
# system with periodic bonds in both x and y
|
||||
|
||||
9 atoms
|
||||
18 bonds
|
||||
|
||||
1 atom types
|
||||
1 bond types
|
||||
|
||||
0 3 xlo xhi
|
||||
0 3 ylo yhi
|
||||
|
||||
Atoms
|
||||
|
||||
1 1 1 0.5 0.5 0
|
||||
2 1 1 1.5 0.5 0
|
||||
3 1 1 2.5 0.5 0
|
||||
4 1 1 0.5 1.5 0
|
||||
5 1 1 1.5 1.5 0
|
||||
6 1 1 2.5 1.5 0
|
||||
7 1 1 0.5 2.5 0
|
||||
8 1 1 1.5 2.5 0
|
||||
9 1 1 2.5 2.5 0
|
||||
|
||||
Bonds
|
||||
|
||||
1 1 1 2
|
||||
2 1 2 3
|
||||
3 1 3 1
|
||||
4 1 4 5
|
||||
5 1 5 6
|
||||
6 1 6 4
|
||||
7 1 7 8
|
||||
8 1 8 9
|
||||
9 1 9 7
|
||||
10 1 1 4
|
||||
11 1 4 7
|
||||
12 1 7 1
|
||||
13 1 2 5
|
||||
14 1 5 8
|
||||
15 1 8 2
|
||||
16 1 3 6
|
||||
17 1 6 9
|
||||
18 1 9 3
|
||||
22
examples/replicate/data.bond.xy
Normal file
22
examples/replicate/data.bond.xy
Normal file
@ -0,0 +1,22 @@
|
||||
# system with periodic bonds in xy direction
|
||||
|
||||
3 atoms
|
||||
3 bonds
|
||||
|
||||
1 atom types
|
||||
1 bond types
|
||||
|
||||
0 3 xlo xhi
|
||||
0 3 ylo yhi
|
||||
|
||||
Atoms
|
||||
|
||||
1 1 1 0.5 0.5 0
|
||||
2 1 1 1.5 1.5 0
|
||||
3 1 1 2.5 2.5 0
|
||||
|
||||
Bonds
|
||||
|
||||
1 1 1 2
|
||||
2 1 2 3
|
||||
3 1 3 1
|
||||
34
examples/replicate/in.replicate.bond.x
Normal file
34
examples/replicate/in.replicate.bond.x
Normal file
@ -0,0 +1,34 @@
|
||||
# test of replicating system with periodic bonds in x
|
||||
|
||||
dimension 2
|
||||
atom_style molecular
|
||||
|
||||
read_data data.bond.x
|
||||
|
||||
#replicate 3 3 1
|
||||
replicate 3 3 1 bond/periodic
|
||||
|
||||
mass 1 1.0
|
||||
velocity all create 0.02 87287 loop geom
|
||||
|
||||
pair_style lj/cut 2.5
|
||||
pair_coeff 1 1 1.0 1.0
|
||||
|
||||
bond_style harmonic
|
||||
bond_coeff 1 50.0 1.0
|
||||
|
||||
special_bonds fene
|
||||
|
||||
fix 1 all nve
|
||||
|
||||
write_data tmp.data.x
|
||||
|
||||
dump 1 all image 100 tmp.image.x.*.ppm type type &
|
||||
adiam 0.2 bond type 0.1 zoom 1.6
|
||||
dump_modify 1 pad 5
|
||||
|
||||
#dump 2 all movie 100 tmp.movie.x.mpg type type &
|
||||
# adiam 0.2 bond type 0.1 zoom 1.6
|
||||
#dump_modify 2 pad 5
|
||||
|
||||
run 5000
|
||||
34
examples/replicate/in.replicate.bond.x.noloop
Normal file
34
examples/replicate/in.replicate.bond.x.noloop
Normal file
@ -0,0 +1,34 @@
|
||||
# test of replicating system with periodic bonds in x
|
||||
|
||||
dimension 2
|
||||
atom_style molecular
|
||||
|
||||
read_data data.bond.x.noloop
|
||||
|
||||
replicate 3 3 1
|
||||
#replicate 3 3 1 bond/periodic
|
||||
|
||||
mass 1 1.0
|
||||
velocity all create 0.001 87287 loop geom
|
||||
|
||||
pair_style lj/cut 2.5
|
||||
pair_coeff 1 1 1.0 1.0
|
||||
|
||||
bond_style harmonic
|
||||
bond_coeff 1 50.0 1.0
|
||||
|
||||
special_bonds fene
|
||||
|
||||
fix 1 all nve
|
||||
|
||||
write_data tmp.data.x.non
|
||||
|
||||
dump 1 all image 100 tmp.image.x.non.*.ppm type type &
|
||||
adiam 0.2 bond type 0.1 zoom 1.6
|
||||
dump_modify 1 pad 5
|
||||
|
||||
#dump 2 all movie 100 tmp.movie.x.non.mpg type type &
|
||||
# adiam 0.2 bond type 0.1 zoom 1.6
|
||||
#dump_modify 2 pad 5
|
||||
|
||||
run 5000
|
||||
34
examples/replicate/in.replicate.bond.x.y
Normal file
34
examples/replicate/in.replicate.bond.x.y
Normal file
@ -0,0 +1,34 @@
|
||||
# test of replicating system with periodic bonds in both x and y
|
||||
|
||||
dimension 2
|
||||
atom_style molecular
|
||||
|
||||
read_data data.bond.x.y
|
||||
|
||||
#replicate 3 3 1
|
||||
replicate 3 3 1 bond/periodic
|
||||
|
||||
mass 1 1.0
|
||||
velocity all create 0.02 87287 loop geom
|
||||
|
||||
pair_style lj/cut 2.5
|
||||
pair_coeff 1 1 1.0 1.0
|
||||
|
||||
bond_style harmonic
|
||||
bond_coeff 1 50.0 1.0
|
||||
|
||||
special_bonds fene
|
||||
|
||||
fix 1 all nve
|
||||
|
||||
write_data tmp.data.x.y
|
||||
|
||||
dump 1 all image 100 tmp.image.x.y.*.ppm type type &
|
||||
adiam 0.2 bond type 0.1 zoom 1.6
|
||||
dump_modify 1 pad 5
|
||||
|
||||
#dump 2 all movie 100 tmp.movie.x.y.mpg type type &
|
||||
# adiam 0.2 bond type 0.1 zoom 1.6
|
||||
#dump_modify 2 pad 5
|
||||
|
||||
run 5000
|
||||
34
examples/replicate/in.replicate.bond.xy
Normal file
34
examples/replicate/in.replicate.bond.xy
Normal file
@ -0,0 +1,34 @@
|
||||
# test of replicating system with periodic bonds in xy diagonal direction
|
||||
|
||||
dimension 2
|
||||
atom_style molecular
|
||||
|
||||
read_data data.bond.xy
|
||||
|
||||
#replicate 3 3 1
|
||||
replicate 3 3 1 bond/periodic
|
||||
|
||||
mass 1 1.0
|
||||
velocity all create 0.02 87287 loop geom
|
||||
|
||||
pair_style lj/cut 2.5
|
||||
pair_coeff 1 1 1.0 1.5
|
||||
|
||||
bond_style harmonic
|
||||
bond_coeff 1 50.0 1.414
|
||||
|
||||
special_bonds fene
|
||||
|
||||
fix 1 all nve
|
||||
|
||||
write_data tmp.data.xy
|
||||
|
||||
dump 1 all image 100 tmp.image.xy.*.ppm type type &
|
||||
adiam 0.2 bond type 0.1 zoom 1.6
|
||||
dump_modify 1 pad 5
|
||||
|
||||
#dump 2 all movie 100 tmp.movie.xy.mpg type type &
|
||||
# adiam 0.2 bond type 0.1 zoom 1.6
|
||||
#dump_modify 2 pad 5
|
||||
|
||||
run 5000
|
||||
32
examples/replicate/in.replicate.cnt
Normal file
32
examples/replicate/in.replicate.cnt
Normal file
@ -0,0 +1,32 @@
|
||||
# three orthogonal periodic CNTs
|
||||
# demo for replicating triply looped system
|
||||
# infinite loops in x, y, z
|
||||
# includes bonded interactions across box corners
|
||||
# includes bonds, angles, dihedrals, impropers (class2)
|
||||
|
||||
units real
|
||||
|
||||
boundary p p p
|
||||
|
||||
atom_style full
|
||||
|
||||
pair_style lj/class2 10
|
||||
|
||||
angle_style class2
|
||||
|
||||
bond_style class2
|
||||
|
||||
dihedral_style class2
|
||||
|
||||
improper_style class2
|
||||
|
||||
read_data three_periodic_CNTs.data.gz
|
||||
|
||||
replicate 2 2 2 bond/periodic
|
||||
|
||||
fix 1 all nve
|
||||
|
||||
run 100
|
||||
|
||||
# write_restart replicate.restart
|
||||
# write_data replicate.data
|
||||
125
examples/replicate/log.6May24.replicate.bond.x.g++.1
Normal file
125
examples/replicate/log.6May24.replicate.bond.x.g++.1
Normal file
@ -0,0 +1,125 @@
|
||||
LAMMPS (17 Apr 2024)
|
||||
# test of replicating system with periodic bonds in x
|
||||
|
||||
dimension 2
|
||||
atom_style molecular
|
||||
|
||||
read_data data.bond.x
|
||||
Reading data file ...
|
||||
orthogonal box = (0 0 -0.5) to (3 1 0.5)
|
||||
1 by 1 by 1 MPI processor grid
|
||||
reading atoms ...
|
||||
3 atoms
|
||||
scanning bonds ...
|
||||
1 = max bonds/atom
|
||||
orthogonal box = (0 0 -0.5) to (3 1 0.5)
|
||||
1 by 1 by 1 MPI processor grid
|
||||
reading bonds ...
|
||||
3 bonds
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 0 0
|
||||
special bond factors coul: 0 0 0
|
||||
2 = max # of 1-2 neighbors
|
||||
2 = max # of 1-3 neighbors
|
||||
4 = max # of 1-4 neighbors
|
||||
2 = max # of special neighbors
|
||||
special bonds CPU = 0.000 seconds
|
||||
read_data CPU = 0.004 seconds
|
||||
|
||||
#replicate 3 3 1
|
||||
replicate 3 3 1 bond/periodic
|
||||
Replication is creating a 3x3x1 = 9 times larger system...
|
||||
orthogonal box = (0 0 -0.5) to (9 3 0.5)
|
||||
1 by 1 by 1 MPI processor grid
|
||||
bounding box image = (0 0 0) to (0 0 0)
|
||||
bounding box extra memory = 0.00 MB
|
||||
average # of replicas added to proc = 9.00 out of 9 (100.00%)
|
||||
27 atoms
|
||||
27 bonds
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 0 0
|
||||
special bond factors coul: 0 0 0
|
||||
2 = max # of 1-2 neighbors
|
||||
2 = max # of 1-3 neighbors
|
||||
4 = max # of 1-4 neighbors
|
||||
6 = max # of special neighbors
|
||||
special bonds CPU = 0.000 seconds
|
||||
replicate CPU = 0.001 seconds
|
||||
|
||||
mass 1 1.0
|
||||
velocity all create 0.02 87287 loop geom
|
||||
|
||||
pair_style lj/cut 2.5
|
||||
pair_coeff 1 1 1.0 1.0
|
||||
|
||||
bond_style harmonic
|
||||
bond_coeff 1 50.0 1.0
|
||||
|
||||
special_bonds fene
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 1 1
|
||||
special bond factors coul: 0 1 1
|
||||
2 = max # of 1-2 neighbors
|
||||
6 = max # of special neighbors
|
||||
special bonds CPU = 0.000 seconds
|
||||
|
||||
fix 1 all nve
|
||||
|
||||
write_data tmp.data.x
|
||||
System init for write_data ...
|
||||
Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
|
||||
Neighbor list info ...
|
||||
update: every = 1 steps, delay = 0 steps, check = yes
|
||||
max neighbors/atom: 2000, page size: 100000
|
||||
master list distance cutoff = 2.8
|
||||
ghost atom cutoff = 2.8
|
||||
binsize = 1.4, bins = 7 3 1
|
||||
1 neighbor lists, perpetual/occasional/extra = 1 0 0
|
||||
(1) pair lj/cut, perpetual
|
||||
attributes: half, newton on
|
||||
pair build: half/bin/newton
|
||||
stencil: half/bin/2d
|
||||
bin: standard
|
||||
|
||||
dump 1 all image 100 tmp.image.x.*.ppm type type adiam 0.2 bond type 0.1 zoom 1.6
|
||||
dump_modify 1 pad 5
|
||||
|
||||
#dump 2 all movie 100 tmp.movie.x.mpg type type # adiam 0.2 bond type 0.1 zoom 1.6
|
||||
#dump_modify 2 pad 5
|
||||
|
||||
run 5000
|
||||
Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
|
||||
WARNING: Inconsistent image flags (../domain.cpp:1051)
|
||||
Per MPI rank memory allocation (min/avg/max) = 6.302 | 6.302 | 6.302 Mbytes
|
||||
Step Temp E_pair E_mol TotEng Press
|
||||
0 0.02 -1.1250229 0 -1.1057636 9.028122
|
||||
5000 0.54111971 -1.9054641 0.29066874 -1.0937172 3.4346743
|
||||
Loop time of 0.0764878 on 1 procs for 5000 steps with 27 atoms
|
||||
|
||||
Performance: 28239805.842 tau/day, 65369.921 timesteps/s, 1.765 Matom-step/s
|
||||
66.5% CPU use with 1 MPI tasks x no OpenMP threads
|
||||
|
||||
MPI task timing breakdown:
|
||||
Section | min time | avg time | max time |%varavg| %total
|
||||
---------------------------------------------------------------
|
||||
Pair | 0.0048837 | 0.0048837 | 0.0048837 | 0.0 | 6.38
|
||||
Bond | 0.00065879 | 0.00065879 | 0.00065879 | 0.0 | 0.86
|
||||
Neigh | 0.0019897 | 0.0019897 | 0.0019897 | 0.0 | 2.60
|
||||
Comm | 0.0012815 | 0.0012815 | 0.0012815 | 0.0 | 1.68
|
||||
Output | 0.066351 | 0.066351 | 0.066351 | 0.0 | 86.75
|
||||
Modify | 0.00069789 | 0.00069789 | 0.00069789 | 0.0 | 0.91
|
||||
Other | | 0.0006247 | | | 0.82
|
||||
|
||||
Nlocal: 27 ave 27 max 27 min
|
||||
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||
Nghost: 108 ave 108 max 108 min
|
||||
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||
Neighs: 284 ave 284 max 284 min
|
||||
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||
|
||||
Total # of neighbors = 284
|
||||
Ave neighs/atom = 10.518519
|
||||
Ave special neighs/atom = 2
|
||||
Neighbor list builds = 287
|
||||
Dangerous builds = 0
|
||||
Total wall time: 0:00:00
|
||||
126
examples/replicate/log.6May24.replicate.bond.x.g++.4
Normal file
126
examples/replicate/log.6May24.replicate.bond.x.g++.4
Normal file
@ -0,0 +1,126 @@
|
||||
LAMMPS (17 Apr 2024)
|
||||
WARNING: Using I/O redirection is unreliable with parallel runs. Better to use the -in switch to read input files. (../lammps.cpp:551)
|
||||
# test of replicating system with periodic bonds in x
|
||||
|
||||
dimension 2
|
||||
atom_style molecular
|
||||
|
||||
read_data data.bond.x
|
||||
Reading data file ...
|
||||
orthogonal box = (0 0 -0.5) to (3 1 0.5)
|
||||
4 by 1 by 1 MPI processor grid
|
||||
reading atoms ...
|
||||
3 atoms
|
||||
scanning bonds ...
|
||||
1 = max bonds/atom
|
||||
orthogonal box = (0 0 -0.5) to (3 1 0.5)
|
||||
4 by 1 by 1 MPI processor grid
|
||||
reading bonds ...
|
||||
3 bonds
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 0 0
|
||||
special bond factors coul: 0 0 0
|
||||
2 = max # of 1-2 neighbors
|
||||
2 = max # of 1-3 neighbors
|
||||
4 = max # of 1-4 neighbors
|
||||
2 = max # of special neighbors
|
||||
special bonds CPU = 0.000 seconds
|
||||
read_data CPU = 0.003 seconds
|
||||
|
||||
#replicate 3 3 1
|
||||
replicate 3 3 1 bond/periodic
|
||||
Replication is creating a 3x3x1 = 9 times larger system...
|
||||
orthogonal box = (0 0 -0.5) to (9 3 0.5)
|
||||
4 by 1 by 1 MPI processor grid
|
||||
bounding box image = (0 0 0) to (0 0 0)
|
||||
bounding box extra memory = 0.00 MB
|
||||
average # of replicas added to proc = 5.25 out of 9 (58.33%)
|
||||
27 atoms
|
||||
27 bonds
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 0 0
|
||||
special bond factors coul: 0 0 0
|
||||
2 = max # of 1-2 neighbors
|
||||
2 = max # of 1-3 neighbors
|
||||
4 = max # of 1-4 neighbors
|
||||
6 = max # of special neighbors
|
||||
special bonds CPU = 0.000 seconds
|
||||
replicate CPU = 0.002 seconds
|
||||
|
||||
mass 1 1.0
|
||||
velocity all create 0.02 87287 loop geom
|
||||
|
||||
pair_style lj/cut 2.5
|
||||
pair_coeff 1 1 1.0 1.0
|
||||
|
||||
bond_style harmonic
|
||||
bond_coeff 1 50.0 1.0
|
||||
|
||||
special_bonds fene
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 1 1
|
||||
special bond factors coul: 0 1 1
|
||||
2 = max # of 1-2 neighbors
|
||||
6 = max # of special neighbors
|
||||
special bonds CPU = 0.000 seconds
|
||||
|
||||
fix 1 all nve
|
||||
|
||||
write_data tmp.data.x
|
||||
System init for write_data ...
|
||||
Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
|
||||
Neighbor list info ...
|
||||
update: every = 1 steps, delay = 0 steps, check = yes
|
||||
max neighbors/atom: 2000, page size: 100000
|
||||
master list distance cutoff = 2.8
|
||||
ghost atom cutoff = 2.8
|
||||
binsize = 1.4, bins = 7 3 1
|
||||
1 neighbor lists, perpetual/occasional/extra = 1 0 0
|
||||
(1) pair lj/cut, perpetual
|
||||
attributes: half, newton on
|
||||
pair build: half/bin/newton
|
||||
stencil: half/bin/2d
|
||||
bin: standard
|
||||
|
||||
dump 1 all image 100 tmp.image.x.*.ppm type type adiam 0.2 bond type 0.1 zoom 1.6
|
||||
dump_modify 1 pad 5
|
||||
|
||||
#dump 2 all movie 100 tmp.movie.x.mpg type type # adiam 0.2 bond type 0.1 zoom 1.6
|
||||
#dump_modify 2 pad 5
|
||||
|
||||
run 5000
|
||||
Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
|
||||
WARNING: Inconsistent image flags (../domain.cpp:1051)
|
||||
Per MPI rank memory allocation (min/avg/max) = 6.309 | 6.309 | 6.309 Mbytes
|
||||
Step Temp E_pair E_mol TotEng Press
|
||||
0 0.02 -1.1250229 0 -1.1057636 9.028122
|
||||
5000 0.50911963 -1.7968226 0.21209852 -1.0944607 4.1676488
|
||||
Loop time of 0.21682 on 4 procs for 5000 steps with 27 atoms
|
||||
|
||||
Performance: 9962160.612 tau/day, 23060.557 timesteps/s, 622.635 katom-step/s
|
||||
93.9% CPU use with 4 MPI tasks x no OpenMP threads
|
||||
|
||||
MPI task timing breakdown:
|
||||
Section | min time | avg time | max time |%varavg| %total
|
||||
---------------------------------------------------------------
|
||||
Pair | 0.001787 | 0.0021247 | 0.0028772 | 1.0 | 0.98
|
||||
Bond | 0.00039682 | 0.00045617 | 0.00059887 | 0.0 | 0.21
|
||||
Neigh | 0.0013626 | 0.0014006 | 0.0014798 | 0.1 | 0.65
|
||||
Comm | 0.017009 | 0.01791 | 0.018656 | 0.5 | 8.26
|
||||
Output | 0.06892 | 0.12188 | 0.18918 | 13.7 | 56.21
|
||||
Modify | 0.00060336 | 0.00072159 | 0.00088047 | 0.0 | 0.33
|
||||
Other | | 0.07233 | | | 33.36
|
||||
|
||||
Nlocal: 6.75 ave 7 max 6 min
|
||||
Histogram: 1 0 0 0 0 0 0 0 0 3
|
||||
Nghost: 64.5 ave 65 max 63 min
|
||||
Histogram: 1 0 0 0 0 0 0 0 0 3
|
||||
Neighs: 70.25 ave 77 max 60 min
|
||||
Histogram: 1 0 0 0 0 1 0 0 1 1
|
||||
|
||||
Total # of neighbors = 281
|
||||
Ave neighs/atom = 10.407407
|
||||
Ave special neighs/atom = 2
|
||||
Neighbor list builds = 287
|
||||
Dangerous builds = 0
|
||||
Total wall time: 0:00:00
|
||||
121
examples/replicate/log.6May24.replicate.bond.x.noloop.g++.1
Normal file
121
examples/replicate/log.6May24.replicate.bond.x.noloop.g++.1
Normal file
@ -0,0 +1,121 @@
|
||||
LAMMPS (17 Apr 2024)
|
||||
# test of replicating system with periodic bonds in x
|
||||
|
||||
dimension 2
|
||||
atom_style molecular
|
||||
|
||||
read_data data.bond.x.non
|
||||
Reading data file ...
|
||||
orthogonal box = (0 0 -0.5) to (3 1 0.5)
|
||||
1 by 1 by 1 MPI processor grid
|
||||
reading atoms ...
|
||||
3 atoms
|
||||
scanning bonds ...
|
||||
1 = max bonds/atom
|
||||
orthogonal box = (0 0 -0.5) to (3 1 0.5)
|
||||
1 by 1 by 1 MPI processor grid
|
||||
reading bonds ...
|
||||
2 bonds
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 0 0
|
||||
special bond factors coul: 0 0 0
|
||||
2 = max # of 1-2 neighbors
|
||||
1 = max # of 1-3 neighbors
|
||||
1 = max # of 1-4 neighbors
|
||||
2 = max # of special neighbors
|
||||
special bonds CPU = 0.000 seconds
|
||||
read_data CPU = 0.004 seconds
|
||||
|
||||
replicate 3 3 1
|
||||
Replication is creating a 3x3x1 = 9 times larger system...
|
||||
orthogonal box = (0 0 -0.5) to (9 3 0.5)
|
||||
1 by 1 by 1 MPI processor grid
|
||||
27 atoms
|
||||
18 bonds
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 0 0
|
||||
special bond factors coul: 0 0 0
|
||||
2 = max # of 1-2 neighbors
|
||||
1 = max # of 1-3 neighbors
|
||||
1 = max # of 1-4 neighbors
|
||||
2 = max # of special neighbors
|
||||
special bonds CPU = 0.000 seconds
|
||||
replicate CPU = 0.001 seconds
|
||||
#replicate 3 3 1 bond/periodic
|
||||
|
||||
mass 1 1.0
|
||||
velocity all create 0.001 87287 loop geom
|
||||
|
||||
pair_style lj/cut 2.5
|
||||
pair_coeff 1 1 1.0 1.0
|
||||
|
||||
bond_style harmonic
|
||||
bond_coeff 1 50.0 1.0
|
||||
|
||||
special_bonds fene
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 1 1
|
||||
special bond factors coul: 0 1 1
|
||||
2 = max # of 1-2 neighbors
|
||||
2 = max # of special neighbors
|
||||
special bonds CPU = 0.000 seconds
|
||||
|
||||
fix 1 all nve
|
||||
|
||||
write_data tmp.data.x.non
|
||||
System init for write_data ...
|
||||
Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
|
||||
Neighbor list info ...
|
||||
update: every = 1 steps, delay = 0 steps, check = yes
|
||||
max neighbors/atom: 2000, page size: 100000
|
||||
master list distance cutoff = 2.8
|
||||
ghost atom cutoff = 2.8
|
||||
binsize = 1.4, bins = 7 3 1
|
||||
1 neighbor lists, perpetual/occasional/extra = 1 0 0
|
||||
(1) pair lj/cut, perpetual
|
||||
attributes: half, newton on
|
||||
pair build: half/bin/newton
|
||||
stencil: half/bin/2d
|
||||
bin: standard
|
||||
|
||||
dump 1 all image 100 tmp.image.x.non.*.ppm type type adiam 0.2 bond type 0.1 zoom 1.6
|
||||
dump_modify 1 pad 5
|
||||
|
||||
#dump 2 all movie 100 tmp.movie.x.non.mpg type type # adiam 0.2 bond type 0.1 zoom 1.6
|
||||
#dump_modify 2 pad 5
|
||||
|
||||
run 5000
|
||||
Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
|
||||
Per MPI rank memory allocation (min/avg/max) = 6.052 | 6.052 | 6.052 Mbytes
|
||||
Step Temp E_pair E_mol TotEng Press
|
||||
0 0.001 -1.1250229 0 -1.1240599 13.009826
|
||||
5000 0.62003692 -2.0147214 0.30861545 -1.1090334 8.0279226
|
||||
Loop time of 0.0734456 on 1 procs for 5000 steps with 27 atoms
|
||||
|
||||
Performance: 29409520.548 tau/day, 68077.594 timesteps/s, 1.838 Matom-step/s
|
||||
94.4% CPU use with 1 MPI tasks x no OpenMP threads
|
||||
|
||||
MPI task timing breakdown:
|
||||
Section | min time | avg time | max time |%varavg| %total
|
||||
---------------------------------------------------------------
|
||||
Pair | 0.0051444 | 0.0051444 | 0.0051444 | 0.0 | 7.00
|
||||
Bond | 0.00048789 | 0.00048789 | 0.00048789 | 0.0 | 0.66
|
||||
Neigh | 0.0019333 | 0.0019333 | 0.0019333 | 0.0 | 2.63
|
||||
Comm | 0.001332 | 0.001332 | 0.001332 | 0.0 | 1.81
|
||||
Output | 0.063139 | 0.063139 | 0.063139 | 0.0 | 85.97
|
||||
Modify | 0.00077014 | 0.00077014 | 0.00077014 | 0.0 | 1.05
|
||||
Other | | 0.0006387 | | | 0.87
|
||||
|
||||
Nlocal: 27 ave 27 max 27 min
|
||||
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||
Nghost: 101 ave 101 max 101 min
|
||||
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||
Neighs: 288 ave 288 max 288 min
|
||||
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||
|
||||
Total # of neighbors = 288
|
||||
Ave neighs/atom = 10.666667
|
||||
Ave special neighs/atom = 1.3333333
|
||||
Neighbor list builds = 322
|
||||
Dangerous builds = 0
|
||||
Total wall time: 0:00:00
|
||||
122
examples/replicate/log.6May24.replicate.bond.x.noloop.g++.4
Normal file
122
examples/replicate/log.6May24.replicate.bond.x.noloop.g++.4
Normal file
@ -0,0 +1,122 @@
|
||||
LAMMPS (17 Apr 2024)
|
||||
WARNING: Using I/O redirection is unreliable with parallel runs. Better to use the -in switch to read input files. (../lammps.cpp:551)
|
||||
# test of replicating system with periodic bonds in x
|
||||
|
||||
dimension 2
|
||||
atom_style molecular
|
||||
|
||||
read_data data.bond.x.non
|
||||
Reading data file ...
|
||||
orthogonal box = (0 0 -0.5) to (3 1 0.5)
|
||||
4 by 1 by 1 MPI processor grid
|
||||
reading atoms ...
|
||||
3 atoms
|
||||
scanning bonds ...
|
||||
1 = max bonds/atom
|
||||
orthogonal box = (0 0 -0.5) to (3 1 0.5)
|
||||
4 by 1 by 1 MPI processor grid
|
||||
reading bonds ...
|
||||
2 bonds
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 0 0
|
||||
special bond factors coul: 0 0 0
|
||||
2 = max # of 1-2 neighbors
|
||||
1 = max # of 1-3 neighbors
|
||||
1 = max # of 1-4 neighbors
|
||||
2 = max # of special neighbors
|
||||
special bonds CPU = 0.000 seconds
|
||||
read_data CPU = 0.004 seconds
|
||||
|
||||
replicate 3 3 1
|
||||
Replication is creating a 3x3x1 = 9 times larger system...
|
||||
orthogonal box = (0 0 -0.5) to (9 3 0.5)
|
||||
4 by 1 by 1 MPI processor grid
|
||||
27 atoms
|
||||
18 bonds
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 0 0
|
||||
special bond factors coul: 0 0 0
|
||||
2 = max # of 1-2 neighbors
|
||||
1 = max # of 1-3 neighbors
|
||||
1 = max # of 1-4 neighbors
|
||||
2 = max # of special neighbors
|
||||
special bonds CPU = 0.000 seconds
|
||||
replicate CPU = 0.002 seconds
|
||||
#replicate 3 3 1 bond/periodic
|
||||
|
||||
mass 1 1.0
|
||||
velocity all create 0.001 87287 loop geom
|
||||
|
||||
pair_style lj/cut 2.5
|
||||
pair_coeff 1 1 1.0 1.0
|
||||
|
||||
bond_style harmonic
|
||||
bond_coeff 1 50.0 1.0
|
||||
|
||||
special_bonds fene
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 1 1
|
||||
special bond factors coul: 0 1 1
|
||||
2 = max # of 1-2 neighbors
|
||||
2 = max # of special neighbors
|
||||
special bonds CPU = 0.000 seconds
|
||||
|
||||
fix 1 all nve
|
||||
|
||||
write_data tmp.data.x.non
|
||||
System init for write_data ...
|
||||
Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
|
||||
Neighbor list info ...
|
||||
update: every = 1 steps, delay = 0 steps, check = yes
|
||||
max neighbors/atom: 2000, page size: 100000
|
||||
master list distance cutoff = 2.8
|
||||
ghost atom cutoff = 2.8
|
||||
binsize = 1.4, bins = 7 3 1
|
||||
1 neighbor lists, perpetual/occasional/extra = 1 0 0
|
||||
(1) pair lj/cut, perpetual
|
||||
attributes: half, newton on
|
||||
pair build: half/bin/newton
|
||||
stencil: half/bin/2d
|
||||
bin: standard
|
||||
|
||||
dump 1 all image 100 tmp.image.x.non.*.ppm type type adiam 0.2 bond type 0.1 zoom 1.6
|
||||
dump_modify 1 pad 5
|
||||
|
||||
#dump 2 all movie 100 tmp.movie.x.non.mpg type type # adiam 0.2 bond type 0.1 zoom 1.6
|
||||
#dump_modify 2 pad 5
|
||||
|
||||
run 5000
|
||||
Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
|
||||
Per MPI rank memory allocation (min/avg/max) = 6.059 | 6.059 | 6.059 Mbytes
|
||||
Step Temp E_pair E_mol TotEng Press
|
||||
0 0.001 -1.1250229 0 -1.1240599 13.009826
|
||||
5000 0.74931971 -2.233724 0.40158766 -1.1105692 5.6354701
|
||||
Loop time of 0.197835 on 4 procs for 5000 steps with 27 atoms
|
||||
|
||||
Performance: 10918214.594 tau/day, 25273.645 timesteps/s, 682.388 katom-step/s
|
||||
88.8% CPU use with 4 MPI tasks x no OpenMP threads
|
||||
|
||||
MPI task timing breakdown:
|
||||
Section | min time | avg time | max time |%varavg| %total
|
||||
---------------------------------------------------------------
|
||||
Pair | 0.0018771 | 0.0021131 | 0.0027188 | 0.8 | 1.07
|
||||
Bond | 0.00032659 | 0.00038248 | 0.00049555 | 0.0 | 0.19
|
||||
Neigh | 0.001385 | 0.0014211 | 0.0014704 | 0.1 | 0.72
|
||||
Comm | 0.017163 | 0.017405 | 0.017805 | 0.2 | 8.80
|
||||
Output | 0.070971 | 0.11052 | 0.17112 | 12.1 | 55.87
|
||||
Modify | 0.00058993 | 0.00067708 | 0.00075608 | 0.0 | 0.34
|
||||
Other | | 0.06532 | | | 33.02
|
||||
|
||||
Nlocal: 6.75 ave 7 max 6 min
|
||||
Histogram: 1 0 0 0 0 0 0 0 0 3
|
||||
Nghost: 59.75 ave 60 max 59 min
|
||||
Histogram: 1 0 0 0 0 0 0 0 0 3
|
||||
Neighs: 72 ave 79 max 63 min
|
||||
Histogram: 1 0 0 0 0 0 2 0 0 1
|
||||
|
||||
Total # of neighbors = 288
|
||||
Ave neighs/atom = 10.666667
|
||||
Ave special neighs/atom = 1.3333333
|
||||
Neighbor list builds = 323
|
||||
Dangerous builds = 0
|
||||
Total wall time: 0:00:00
|
||||
125
examples/replicate/log.6May24.replicate.bond.x.y.g++.1
Normal file
125
examples/replicate/log.6May24.replicate.bond.x.y.g++.1
Normal file
@ -0,0 +1,125 @@
|
||||
LAMMPS (17 Apr 2024)
|
||||
# test of replicating system with periodic bonds in both x and y
|
||||
|
||||
dimension 2
|
||||
atom_style molecular
|
||||
|
||||
read_data data.bond.x.y
|
||||
Reading data file ...
|
||||
orthogonal box = (0 0 -0.5) to (3 3 0.5)
|
||||
1 by 1 by 1 MPI processor grid
|
||||
reading atoms ...
|
||||
9 atoms
|
||||
scanning bonds ...
|
||||
2 = max bonds/atom
|
||||
orthogonal box = (0 0 -0.5) to (3 3 0.5)
|
||||
1 by 1 by 1 MPI processor grid
|
||||
reading bonds ...
|
||||
18 bonds
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 0 0
|
||||
special bond factors coul: 0 0 0
|
||||
4 = max # of 1-2 neighbors
|
||||
12 = max # of 1-3 neighbors
|
||||
48 = max # of 1-4 neighbors
|
||||
8 = max # of special neighbors
|
||||
special bonds CPU = 0.000 seconds
|
||||
read_data CPU = 0.004 seconds
|
||||
|
||||
#replicate 3 3 1
|
||||
replicate 3 3 1 bond/periodic
|
||||
Replication is creating a 3x3x1 = 9 times larger system...
|
||||
orthogonal box = (0 0 -0.5) to (9 9 0.5)
|
||||
1 by 1 by 1 MPI processor grid
|
||||
bounding box image = (0 0 0) to (0 0 0)
|
||||
bounding box extra memory = 0.00 MB
|
||||
average # of replicas added to proc = 9.00 out of 9 (100.00%)
|
||||
81 atoms
|
||||
162 bonds
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 0 0
|
||||
special bond factors coul: 0 0 0
|
||||
4 = max # of 1-2 neighbors
|
||||
12 = max # of 1-3 neighbors
|
||||
48 = max # of 1-4 neighbors
|
||||
24 = max # of special neighbors
|
||||
special bonds CPU = 0.000 seconds
|
||||
replicate CPU = 0.001 seconds
|
||||
|
||||
mass 1 1.0
|
||||
velocity all create 0.02 87287 loop geom
|
||||
|
||||
pair_style lj/cut 2.5
|
||||
pair_coeff 1 1 1.0 1.0
|
||||
|
||||
bond_style harmonic
|
||||
bond_coeff 1 50.0 1.0
|
||||
|
||||
special_bonds fene
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 1 1
|
||||
special bond factors coul: 0 1 1
|
||||
4 = max # of 1-2 neighbors
|
||||
24 = max # of special neighbors
|
||||
special bonds CPU = 0.000 seconds
|
||||
|
||||
fix 1 all nve
|
||||
|
||||
write_data tmp.data.x.y
|
||||
System init for write_data ...
|
||||
Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
|
||||
Neighbor list info ...
|
||||
update: every = 1 steps, delay = 0 steps, check = yes
|
||||
max neighbors/atom: 2000, page size: 100000
|
||||
master list distance cutoff = 2.8
|
||||
ghost atom cutoff = 2.8
|
||||
binsize = 1.4, bins = 7 7 1
|
||||
1 neighbor lists, perpetual/occasional/extra = 1 0 0
|
||||
(1) pair lj/cut, perpetual
|
||||
attributes: half, newton on
|
||||
pair build: half/bin/newton
|
||||
stencil: half/bin/2d
|
||||
bin: standard
|
||||
|
||||
dump 1 all image 100 tmp.image.x.y.*.ppm type type adiam 0.2 bond type 0.1 zoom 1.6
|
||||
dump_modify 1 pad 5
|
||||
|
||||
#dump 2 all movie 100 tmp.movie.x.y.mpg type type # adiam 0.2 bond type 0.1 zoom 1.6
|
||||
#dump_modify 2 pad 5
|
||||
|
||||
run 5000
|
||||
Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
|
||||
WARNING: Inconsistent image flags (../domain.cpp:1051)
|
||||
Per MPI rank memory allocation (min/avg/max) = 7.555 | 7.555 | 7.555 Mbytes
|
||||
Step Temp E_pair E_mol TotEng Press
|
||||
0 0.02 -1.1250229 0 -1.1052698 -2.9713842
|
||||
5000 0.046175679 -1.2280388 0.080003864 -1.1024293 -4.1097897
|
||||
Loop time of 0.212344 on 1 procs for 5000 steps with 81 atoms
|
||||
|
||||
Performance: 10172161.526 tau/day, 23546.670 timesteps/s, 1.907 Matom-step/s
|
||||
93.0% CPU use with 1 MPI tasks x no OpenMP threads
|
||||
|
||||
MPI task timing breakdown:
|
||||
Section | min time | avg time | max time |%varavg| %total
|
||||
---------------------------------------------------------------
|
||||
Pair | 0.01283 | 0.01283 | 0.01283 | 0.0 | 6.04
|
||||
Bond | 0.0032785 | 0.0032785 | 0.0032785 | 0.0 | 1.54
|
||||
Neigh | 0.0018379 | 0.0018379 | 0.0018379 | 0.0 | 0.87
|
||||
Comm | 0.0016247 | 0.0016247 | 0.0016247 | 0.0 | 0.77
|
||||
Output | 0.18991 | 0.18991 | 0.18991 | 0.0 | 89.44
|
||||
Modify | 0.0018198 | 0.0018198 | 0.0018198 | 0.0 | 0.86
|
||||
Other | | 0.001039 | | | 0.49
|
||||
|
||||
Nlocal: 81 ave 81 max 81 min
|
||||
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||
Nghost: 144 ave 144 max 144 min
|
||||
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||
Neighs: 714 ave 714 max 714 min
|
||||
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||
|
||||
Total # of neighbors = 714
|
||||
Ave neighs/atom = 8.8148148
|
||||
Ave special neighs/atom = 4
|
||||
Neighbor list builds = 72
|
||||
Dangerous builds = 0
|
||||
Total wall time: 0:00:00
|
||||
126
examples/replicate/log.6May24.replicate.bond.x.y.g++.4
Normal file
126
examples/replicate/log.6May24.replicate.bond.x.y.g++.4
Normal file
@ -0,0 +1,126 @@
|
||||
LAMMPS (17 Apr 2024)
|
||||
WARNING: Using I/O redirection is unreliable with parallel runs. Better to use the -in switch to read input files. (../lammps.cpp:551)
|
||||
# test of replicating system with periodic bonds in both x and y
|
||||
|
||||
dimension 2
|
||||
atom_style molecular
|
||||
|
||||
read_data data.bond.x.y
|
||||
Reading data file ...
|
||||
orthogonal box = (0 0 -0.5) to (3 3 0.5)
|
||||
2 by 2 by 1 MPI processor grid
|
||||
reading atoms ...
|
||||
9 atoms
|
||||
scanning bonds ...
|
||||
2 = max bonds/atom
|
||||
orthogonal box = (0 0 -0.5) to (3 3 0.5)
|
||||
2 by 2 by 1 MPI processor grid
|
||||
reading bonds ...
|
||||
18 bonds
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 0 0
|
||||
special bond factors coul: 0 0 0
|
||||
4 = max # of 1-2 neighbors
|
||||
12 = max # of 1-3 neighbors
|
||||
48 = max # of 1-4 neighbors
|
||||
8 = max # of special neighbors
|
||||
special bonds CPU = 0.000 seconds
|
||||
read_data CPU = 0.003 seconds
|
||||
|
||||
#replicate 3 3 1
|
||||
replicate 3 3 1 bond/periodic
|
||||
Replication is creating a 3x3x1 = 9 times larger system...
|
||||
orthogonal box = (0 0 -0.5) to (9 9 0.5)
|
||||
2 by 2 by 1 MPI processor grid
|
||||
bounding box image = (0 0 0) to (0 0 0)
|
||||
bounding box extra memory = 0.00 MB
|
||||
average # of replicas added to proc = 6.25 out of 9 (69.44%)
|
||||
81 atoms
|
||||
162 bonds
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 0 0
|
||||
special bond factors coul: 0 0 0
|
||||
4 = max # of 1-2 neighbors
|
||||
12 = max # of 1-3 neighbors
|
||||
48 = max # of 1-4 neighbors
|
||||
24 = max # of special neighbors
|
||||
special bonds CPU = 0.000 seconds
|
||||
replicate CPU = 0.001 seconds
|
||||
|
||||
mass 1 1.0
|
||||
velocity all create 0.02 87287 loop geom
|
||||
|
||||
pair_style lj/cut 2.5
|
||||
pair_coeff 1 1 1.0 1.0
|
||||
|
||||
bond_style harmonic
|
||||
bond_coeff 1 50.0 1.0
|
||||
|
||||
special_bonds fene
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 1 1
|
||||
special bond factors coul: 0 1 1
|
||||
4 = max # of 1-2 neighbors
|
||||
24 = max # of special neighbors
|
||||
special bonds CPU = 0.000 seconds
|
||||
|
||||
fix 1 all nve
|
||||
|
||||
write_data tmp.data.x.y
|
||||
System init for write_data ...
|
||||
Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
|
||||
Neighbor list info ...
|
||||
update: every = 1 steps, delay = 0 steps, check = yes
|
||||
max neighbors/atom: 2000, page size: 100000
|
||||
master list distance cutoff = 2.8
|
||||
ghost atom cutoff = 2.8
|
||||
binsize = 1.4, bins = 7 7 1
|
||||
1 neighbor lists, perpetual/occasional/extra = 1 0 0
|
||||
(1) pair lj/cut, perpetual
|
||||
attributes: half, newton on
|
||||
pair build: half/bin/newton
|
||||
stencil: half/bin/2d
|
||||
bin: standard
|
||||
|
||||
dump 1 all image 100 tmp.image.x.y.*.ppm type type adiam 0.2 bond type 0.1 zoom 1.6
|
||||
dump_modify 1 pad 5
|
||||
|
||||
#dump 2 all movie 100 tmp.movie.x.y.mpg type type # adiam 0.2 bond type 0.1 zoom 1.6
|
||||
#dump_modify 2 pad 5
|
||||
|
||||
run 5000
|
||||
Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
|
||||
WARNING: Inconsistent image flags (../domain.cpp:1051)
|
||||
Per MPI rank memory allocation (min/avg/max) = 7.552 | 7.552 | 7.552 Mbytes
|
||||
Step Temp E_pair E_mol TotEng Press
|
||||
0 0.02 -1.1250229 0 -1.1052698 -2.9713842
|
||||
5000 0.046175679 -1.2280388 0.080003864 -1.1024293 -4.1097897
|
||||
Loop time of 0.273847 on 4 procs for 5000 steps with 81 atoms
|
||||
|
||||
Performance: 7887622.810 tau/day, 18258.386 timesteps/s, 1.479 Matom-step/s
|
||||
92.4% CPU use with 4 MPI tasks x no OpenMP threads
|
||||
|
||||
MPI task timing breakdown:
|
||||
Section | min time | avg time | max time |%varavg| %total
|
||||
---------------------------------------------------------------
|
||||
Pair | 0.0039465 | 0.0042593 | 0.0046129 | 0.4 | 1.56
|
||||
Bond | 0.0011489 | 0.001207 | 0.0012757 | 0.2 | 0.44
|
||||
Neigh | 0.00079819 | 0.0008044 | 0.00081324 | 0.0 | 0.29
|
||||
Comm | 0.024107 | 0.024703 | 0.025269 | 0.3 | 9.02
|
||||
Output | 0.14406 | 0.18123 | 0.23779 | 8.7 | 66.18
|
||||
Modify | 0.00089401 | 0.00095321 | 0.0010422 | 0.0 | 0.35
|
||||
Other | | 0.06069 | | | 22.16
|
||||
|
||||
Nlocal: 20.25 ave 22 max 19 min
|
||||
Histogram: 2 0 0 0 0 0 1 0 0 1
|
||||
Nghost: 81.5 ave 82 max 80 min
|
||||
Histogram: 1 0 0 0 0 0 0 0 0 3
|
||||
Neighs: 178.5 ave 195 max 165 min
|
||||
Histogram: 2 0 0 0 0 0 0 1 0 1
|
||||
|
||||
Total # of neighbors = 714
|
||||
Ave neighs/atom = 8.8148148
|
||||
Ave special neighs/atom = 4
|
||||
Neighbor list builds = 72
|
||||
Dangerous builds = 0
|
||||
Total wall time: 0:00:00
|
||||
125
examples/replicate/log.6May24.replicate.bond.xy.g++.1
Normal file
125
examples/replicate/log.6May24.replicate.bond.xy.g++.1
Normal file
@ -0,0 +1,125 @@
|
||||
LAMMPS (17 Apr 2024)
|
||||
# test of replicating system with periodic bonds in xy diagonal direction
|
||||
|
||||
dimension 2
|
||||
atom_style molecular
|
||||
|
||||
read_data data.bond.xy
|
||||
Reading data file ...
|
||||
orthogonal box = (0 0 -0.5) to (3 3 0.5)
|
||||
1 by 1 by 1 MPI processor grid
|
||||
reading atoms ...
|
||||
3 atoms
|
||||
scanning bonds ...
|
||||
1 = max bonds/atom
|
||||
orthogonal box = (0 0 -0.5) to (3 3 0.5)
|
||||
1 by 1 by 1 MPI processor grid
|
||||
reading bonds ...
|
||||
3 bonds
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 0 0
|
||||
special bond factors coul: 0 0 0
|
||||
2 = max # of 1-2 neighbors
|
||||
2 = max # of 1-3 neighbors
|
||||
4 = max # of 1-4 neighbors
|
||||
2 = max # of special neighbors
|
||||
special bonds CPU = 0.000 seconds
|
||||
read_data CPU = 0.004 seconds
|
||||
|
||||
#replicate 3 3 1
|
||||
replicate 3 3 1 bond/periodic
|
||||
Replication is creating a 3x3x1 = 9 times larger system...
|
||||
orthogonal box = (0 0 -0.5) to (9 9 0.5)
|
||||
1 by 1 by 1 MPI processor grid
|
||||
bounding box image = (0 0 0) to (0 0 0)
|
||||
bounding box extra memory = 0.00 MB
|
||||
average # of replicas added to proc = 9.00 out of 9 (100.00%)
|
||||
27 atoms
|
||||
27 bonds
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 0 0
|
||||
special bond factors coul: 0 0 0
|
||||
2 = max # of 1-2 neighbors
|
||||
2 = max # of 1-3 neighbors
|
||||
4 = max # of 1-4 neighbors
|
||||
6 = max # of special neighbors
|
||||
special bonds CPU = 0.000 seconds
|
||||
replicate CPU = 0.001 seconds
|
||||
|
||||
mass 1 1.0
|
||||
velocity all create 0.02 87287 loop geom
|
||||
|
||||
pair_style lj/cut 2.5
|
||||
pair_coeff 1 1 1.0 1.5
|
||||
|
||||
bond_style harmonic
|
||||
bond_coeff 1 50.0 1.414
|
||||
|
||||
special_bonds fene
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 1 1
|
||||
special bond factors coul: 0 1 1
|
||||
2 = max # of 1-2 neighbors
|
||||
6 = max # of special neighbors
|
||||
special bonds CPU = 0.000 seconds
|
||||
|
||||
fix 1 all nve
|
||||
|
||||
write_data tmp.data.xy
|
||||
System init for write_data ...
|
||||
Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
|
||||
Neighbor list info ...
|
||||
update: every = 1 steps, delay = 0 steps, check = yes
|
||||
max neighbors/atom: 2000, page size: 100000
|
||||
master list distance cutoff = 2.8
|
||||
ghost atom cutoff = 2.8
|
||||
binsize = 1.4, bins = 7 7 1
|
||||
1 neighbor lists, perpetual/occasional/extra = 1 0 0
|
||||
(1) pair lj/cut, perpetual
|
||||
attributes: half, newton on
|
||||
pair build: half/bin/newton
|
||||
stencil: half/bin/2d
|
||||
bin: standard
|
||||
|
||||
dump 1 all image 100 tmp.image.xy.*.ppm type type adiam 0.2 bond type 0.1 zoom 1.6
|
||||
dump_modify 1 pad 5
|
||||
|
||||
#dump 2 all movie 100 tmp.movie.xy.mpg type type # adiam 0.2 bond type 0.1 zoom 1.6
|
||||
#dump_modify 2 pad 5
|
||||
|
||||
run 5000
|
||||
Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
|
||||
WARNING: Inconsistent image flags (../domain.cpp:1051)
|
||||
Per MPI rank memory allocation (min/avg/max) = 6.302 | 6.302 | 6.302 Mbytes
|
||||
Step Temp E_pair E_mol TotEng Press
|
||||
0 0.02 -0.66256987 2.2804444e-06 -0.64330834 -0.59475371
|
||||
5000 0.43110862 -1.1484506 0.16888799 -0.56442095 -0.3683968
|
||||
Loop time of 0.124095 on 1 procs for 5000 steps with 27 atoms
|
||||
|
||||
Performance: 17406010.885 tau/day, 40291.692 timesteps/s, 1.088 Matom-step/s
|
||||
82.3% CPU use with 1 MPI tasks x no OpenMP threads
|
||||
|
||||
MPI task timing breakdown:
|
||||
Section | min time | avg time | max time |%varavg| %total
|
||||
---------------------------------------------------------------
|
||||
Pair | 0.0013734 | 0.0013734 | 0.0013734 | 0.0 | 1.11
|
||||
Bond | 0.00064058 | 0.00064058 | 0.00064058 | 0.0 | 0.52
|
||||
Neigh | 0.00090424 | 0.00090424 | 0.00090424 | 0.0 | 0.73
|
||||
Comm | 0.00081732 | 0.00081732 | 0.00081732 | 0.0 | 0.66
|
||||
Output | 0.11905 | 0.11905 | 0.11905 | 0.0 | 95.93
|
||||
Modify | 0.0007252 | 0.0007252 | 0.0007252 | 0.0 | 0.58
|
||||
Other | | 0.0005888 | | | 0.47
|
||||
|
||||
Nlocal: 27 ave 27 max 27 min
|
||||
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||
Nghost: 45 ave 45 max 45 min
|
||||
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||
Neighs: 66 ave 66 max 66 min
|
||||
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||
|
||||
Total # of neighbors = 66
|
||||
Ave neighs/atom = 2.4444444
|
||||
Ave special neighs/atom = 2
|
||||
Neighbor list builds = 244
|
||||
Dangerous builds = 0
|
||||
Total wall time: 0:00:00
|
||||
126
examples/replicate/log.6May24.replicate.bond.xy.g++.4
Normal file
126
examples/replicate/log.6May24.replicate.bond.xy.g++.4
Normal file
@ -0,0 +1,126 @@
|
||||
LAMMPS (17 Apr 2024)
|
||||
WARNING: Using I/O redirection is unreliable with parallel runs. Better to use the -in switch to read input files. (../lammps.cpp:551)
|
||||
# test of replicating system with periodic bonds in xy diagonal direction
|
||||
|
||||
dimension 2
|
||||
atom_style molecular
|
||||
|
||||
read_data data.bond.xy
|
||||
Reading data file ...
|
||||
orthogonal box = (0 0 -0.5) to (3 3 0.5)
|
||||
2 by 2 by 1 MPI processor grid
|
||||
reading atoms ...
|
||||
3 atoms
|
||||
scanning bonds ...
|
||||
1 = max bonds/atom
|
||||
orthogonal box = (0 0 -0.5) to (3 3 0.5)
|
||||
2 by 2 by 1 MPI processor grid
|
||||
reading bonds ...
|
||||
3 bonds
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 0 0
|
||||
special bond factors coul: 0 0 0
|
||||
2 = max # of 1-2 neighbors
|
||||
2 = max # of 1-3 neighbors
|
||||
4 = max # of 1-4 neighbors
|
||||
2 = max # of special neighbors
|
||||
special bonds CPU = 0.000 seconds
|
||||
read_data CPU = 0.003 seconds
|
||||
|
||||
#replicate 3 3 1
|
||||
replicate 3 3 1 bond/periodic
|
||||
Replication is creating a 3x3x1 = 9 times larger system...
|
||||
orthogonal box = (0 0 -0.5) to (9 9 0.5)
|
||||
2 by 2 by 1 MPI processor grid
|
||||
bounding box image = (0 0 0) to (0 0 0)
|
||||
bounding box extra memory = 0.00 MB
|
||||
average # of replicas added to proc = 6.25 out of 9 (69.44%)
|
||||
27 atoms
|
||||
27 bonds
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 0 0
|
||||
special bond factors coul: 0 0 0
|
||||
2 = max # of 1-2 neighbors
|
||||
2 = max # of 1-3 neighbors
|
||||
4 = max # of 1-4 neighbors
|
||||
6 = max # of special neighbors
|
||||
special bonds CPU = 0.000 seconds
|
||||
replicate CPU = 0.001 seconds
|
||||
|
||||
mass 1 1.0
|
||||
velocity all create 0.02 87287 loop geom
|
||||
|
||||
pair_style lj/cut 2.5
|
||||
pair_coeff 1 1 1.0 1.5
|
||||
|
||||
bond_style harmonic
|
||||
bond_coeff 1 50.0 1.414
|
||||
|
||||
special_bonds fene
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 1 1
|
||||
special bond factors coul: 0 1 1
|
||||
2 = max # of 1-2 neighbors
|
||||
6 = max # of special neighbors
|
||||
special bonds CPU = 0.000 seconds
|
||||
|
||||
fix 1 all nve
|
||||
|
||||
write_data tmp.data.xy
|
||||
System init for write_data ...
|
||||
Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
|
||||
Neighbor list info ...
|
||||
update: every = 1 steps, delay = 0 steps, check = yes
|
||||
max neighbors/atom: 2000, page size: 100000
|
||||
master list distance cutoff = 2.8
|
||||
ghost atom cutoff = 2.8
|
||||
binsize = 1.4, bins = 7 7 1
|
||||
1 neighbor lists, perpetual/occasional/extra = 1 0 0
|
||||
(1) pair lj/cut, perpetual
|
||||
attributes: half, newton on
|
||||
pair build: half/bin/newton
|
||||
stencil: half/bin/2d
|
||||
bin: standard
|
||||
|
||||
dump 1 all image 100 tmp.image.xy.*.ppm type type adiam 0.2 bond type 0.1 zoom 1.6
|
||||
dump_modify 1 pad 5
|
||||
|
||||
#dump 2 all movie 100 tmp.movie.xy.mpg type type # adiam 0.2 bond type 0.1 zoom 1.6
|
||||
#dump_modify 2 pad 5
|
||||
|
||||
run 5000
|
||||
Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
|
||||
WARNING: Inconsistent image flags (../domain.cpp:1051)
|
||||
Per MPI rank memory allocation (min/avg/max) = 6.301 | 6.301 | 6.301 Mbytes
|
||||
Step Temp E_pair E_mol TotEng Press
|
||||
0 0.02 -0.66256988 2.2804444e-06 -0.64330834 -0.59475371
|
||||
5000 0.43110877 -1.1484507 0.168888 -0.56442093 -0.36839692
|
||||
Loop time of 0.286423 on 4 procs for 5000 steps with 27 atoms
|
||||
|
||||
Performance: 7541285.935 tau/day, 17456.680 timesteps/s, 471.330 katom-step/s
|
||||
92.9% CPU use with 4 MPI tasks x no OpenMP threads
|
||||
|
||||
MPI task timing breakdown:
|
||||
Section | min time | avg time | max time |%varavg| %total
|
||||
---------------------------------------------------------------
|
||||
Pair | 0.00054941 | 0.00084836 | 0.0013689 | 0.0 | 0.30
|
||||
Bond | 0.00034068 | 0.00045816 | 0.00068461 | 0.0 | 0.16
|
||||
Neigh | 0.00092076 | 0.00098494 | 0.0010463 | 0.0 | 0.34
|
||||
Comm | 0.018151 | 0.018737 | 0.019531 | 0.4 | 6.54
|
||||
Output | 0.13261 | 0.19363 | 0.2596 | 10.7 | 67.60
|
||||
Modify | 0.00053153 | 0.00071381 | 0.0010268 | 0.0 | 0.25
|
||||
Other | | 0.07105 | | | 24.81
|
||||
|
||||
Nlocal: 6.75 ave 9 max 5 min
|
||||
Histogram: 2 0 0 0 0 0 0 1 0 1
|
||||
Nghost: 26.25 ave 28 max 25 min
|
||||
Histogram: 2 0 0 0 0 0 1 0 0 1
|
||||
Neighs: 16.5 ave 23 max 10 min
|
||||
Histogram: 1 1 0 0 0 0 0 0 1 1
|
||||
|
||||
Total # of neighbors = 66
|
||||
Ave neighs/atom = 2.4444444
|
||||
Ave special neighs/atom = 2
|
||||
Neighbor list builds = 244
|
||||
Dangerous builds = 0
|
||||
Total wall time: 0:00:00
|
||||
134
examples/replicate/log.6May24.replicate.cnt.g++.1
Normal file
134
examples/replicate/log.6May24.replicate.cnt.g++.1
Normal file
@ -0,0 +1,134 @@
|
||||
LAMMPS (17 Apr 2024)
|
||||
# three orthogonal periodic CNTs
|
||||
# demo for replicating triply looped system
|
||||
# infinite loops in x, y, z
|
||||
# includes bonded interactions across box corners
|
||||
# includes bonds, angles, dihedrals, impropers (class2)
|
||||
|
||||
units real
|
||||
|
||||
boundary p p p
|
||||
|
||||
atom_style full
|
||||
|
||||
pair_style lj/class2 10
|
||||
|
||||
angle_style class2
|
||||
|
||||
bond_style class2
|
||||
|
||||
dihedral_style class2
|
||||
|
||||
improper_style class2
|
||||
|
||||
read_data three_periodic_CNTs.data.gz
|
||||
Reading data file ...
|
||||
orthogonal box = (0 0 0) to (80.96 80.96 80.96)
|
||||
1 by 1 by 1 MPI processor grid
|
||||
reading atoms ...
|
||||
3168 atoms
|
||||
reading velocities ...
|
||||
3168 velocities
|
||||
scanning bonds ...
|
||||
3 = max bonds/atom
|
||||
scanning angles ...
|
||||
3 = max angles/atom
|
||||
scanning dihedrals ...
|
||||
12 = max dihedrals/atom
|
||||
scanning impropers ...
|
||||
1 = max impropers/atom
|
||||
orthogonal box = (0 0 0) to (80.96 80.96 80.96)
|
||||
1 by 1 by 1 MPI processor grid
|
||||
reading bonds ...
|
||||
4752 bonds
|
||||
reading angles ...
|
||||
9504 angles
|
||||
reading dihedrals ...
|
||||
19008 dihedrals
|
||||
reading impropers ...
|
||||
3168 impropers
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 0 0
|
||||
special bond factors coul: 0 0 0
|
||||
3 = max # of 1-2 neighbors
|
||||
6 = max # of 1-3 neighbors
|
||||
18 = max # of 1-4 neighbors
|
||||
18 = max # of special neighbors
|
||||
special bonds CPU = 0.002 seconds
|
||||
read_data CPU = 0.056 seconds
|
||||
|
||||
replicate 2 2 2 bond/periodic
|
||||
Replication is creating a 2x2x2 = 8 times larger system...
|
||||
orthogonal box = (0 0 0) to (161.92 161.92 161.92)
|
||||
1 by 1 by 1 MPI processor grid
|
||||
bounding box image = (0 0 0) to (0 0 0)
|
||||
bounding box extra memory = 1.62 MB
|
||||
average # of replicas added to proc = 8.00 out of 8 (100.00%)
|
||||
25344 atoms
|
||||
38016 bonds
|
||||
76032 angles
|
||||
152064 dihedrals
|
||||
25344 impropers
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 0 0
|
||||
special bond factors coul: 0 0 0
|
||||
3 = max # of 1-2 neighbors
|
||||
6 = max # of 1-3 neighbors
|
||||
18 = max # of 1-4 neighbors
|
||||
18 = max # of special neighbors
|
||||
special bonds CPU = 0.012 seconds
|
||||
replicate CPU = 0.027 seconds
|
||||
|
||||
fix 1 all nve
|
||||
|
||||
run 100
|
||||
Generated 0 of 0 mixed pair_coeff terms from sixthpower/geometric mixing rule
|
||||
Neighbor list info ...
|
||||
update: every = 1 steps, delay = 0 steps, check = yes
|
||||
max neighbors/atom: 2000, page size: 100000
|
||||
master list distance cutoff = 12
|
||||
ghost atom cutoff = 12
|
||||
binsize = 6, bins = 27 27 27
|
||||
1 neighbor lists, perpetual/occasional/extra = 1 0 0
|
||||
(1) pair lj/class2, perpetual
|
||||
attributes: half, newton on
|
||||
pair build: half/bin/newton
|
||||
stencil: half/bin/3d
|
||||
bin: standard
|
||||
WARNING: Inconsistent image flags (../domain.cpp:1051)
|
||||
Per MPI rank memory allocation (min/avg/max) = 51.87 | 51.87 | 51.87 Mbytes
|
||||
Step Temp E_pair E_mol TotEng Press
|
||||
0 0 -14266.189 1466925.5 1452659.3 -29908.753
|
||||
100 2155.9128 -17224.188 1306769.8 1452409 1985.2082
|
||||
Loop time of 5.0155 on 1 procs for 100 steps with 25344 atoms
|
||||
|
||||
Performance: 1.723 ns/day, 13.932 hours/ns, 19.938 timesteps/s, 505.314 katom-step/s
|
||||
100.0% CPU use with 1 MPI tasks x no OpenMP threads
|
||||
|
||||
MPI task timing breakdown:
|
||||
Section | min time | avg time | max time |%varavg| %total
|
||||
---------------------------------------------------------------
|
||||
Pair | 1.6557 | 1.6557 | 1.6557 | 0.0 | 33.01
|
||||
Bond | 3.2813 | 3.2813 | 3.2813 | 0.0 | 65.42
|
||||
Neigh | 0.047025 | 0.047025 | 0.047025 | 0.0 | 0.94
|
||||
Comm | 0.0085317 | 0.0085317 | 0.0085317 | 0.0 | 0.17
|
||||
Output | 7.8551e-05 | 7.8551e-05 | 7.8551e-05 | 0.0 | 0.00
|
||||
Modify | 0.014635 | 0.014635 | 0.014635 | 0.0 | 0.29
|
||||
Other | | 0.008159 | | | 0.16
|
||||
|
||||
Nlocal: 25344 ave 25344 max 25344 min
|
||||
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||
Nghost: 22737 ave 22737 max 22737 min
|
||||
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||
Neighs: 2.89358e+06 ave 2.89358e+06 max 2.89358e+06 min
|
||||
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||
|
||||
Total # of neighbors = 2893576
|
||||
Ave neighs/atom = 114.17203
|
||||
Ave special neighs/atom = 18
|
||||
Neighbor list builds = 1
|
||||
Dangerous builds = 0
|
||||
|
||||
# write_restart replicate.restart
|
||||
# write_data replicate.data
|
||||
Total wall time: 0:00:05
|
||||
135
examples/replicate/log.6May24.replicate.cnt.g++.4
Normal file
135
examples/replicate/log.6May24.replicate.cnt.g++.4
Normal file
@ -0,0 +1,135 @@
|
||||
LAMMPS (17 Apr 2024)
|
||||
WARNING: Using I/O redirection is unreliable with parallel runs. Better to use the -in switch to read input files. (../lammps.cpp:551)
|
||||
# three orthogonal periodic CNTs
|
||||
# demo for replicating triply looped system
|
||||
# infinite loops in x, y, z
|
||||
# includes bonded interactions across box corners
|
||||
# includes bonds, angles, dihedrals, impropers (class2)
|
||||
|
||||
units real
|
||||
|
||||
boundary p p p
|
||||
|
||||
atom_style full
|
||||
|
||||
pair_style lj/class2 10
|
||||
|
||||
angle_style class2
|
||||
|
||||
bond_style class2
|
||||
|
||||
dihedral_style class2
|
||||
|
||||
improper_style class2
|
||||
|
||||
read_data three_periodic_CNTs.data.gz
|
||||
Reading data file ...
|
||||
orthogonal box = (0 0 0) to (80.96 80.96 80.96)
|
||||
1 by 2 by 2 MPI processor grid
|
||||
reading atoms ...
|
||||
3168 atoms
|
||||
reading velocities ...
|
||||
3168 velocities
|
||||
scanning bonds ...
|
||||
3 = max bonds/atom
|
||||
scanning angles ...
|
||||
3 = max angles/atom
|
||||
scanning dihedrals ...
|
||||
12 = max dihedrals/atom
|
||||
scanning impropers ...
|
||||
1 = max impropers/atom
|
||||
orthogonal box = (0 0 0) to (80.96 80.96 80.96)
|
||||
1 by 2 by 2 MPI processor grid
|
||||
reading bonds ...
|
||||
4752 bonds
|
||||
reading angles ...
|
||||
9504 angles
|
||||
reading dihedrals ...
|
||||
19008 dihedrals
|
||||
reading impropers ...
|
||||
3168 impropers
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 0 0
|
||||
special bond factors coul: 0 0 0
|
||||
3 = max # of 1-2 neighbors
|
||||
6 = max # of 1-3 neighbors
|
||||
18 = max # of 1-4 neighbors
|
||||
18 = max # of special neighbors
|
||||
special bonds CPU = 0.001 seconds
|
||||
read_data CPU = 0.064 seconds
|
||||
|
||||
replicate 2 2 2 bond/periodic
|
||||
Replication is creating a 2x2x2 = 8 times larger system...
|
||||
orthogonal box = (0 0 0) to (161.92 161.92 161.92)
|
||||
1 by 2 by 2 MPI processor grid
|
||||
bounding box image = (0 0 0) to (0 0 0)
|
||||
bounding box extra memory = 1.62 MB
|
||||
average # of replicas added to proc = 4.50 out of 8 (56.25%)
|
||||
25344 atoms
|
||||
38016 bonds
|
||||
76032 angles
|
||||
152064 dihedrals
|
||||
25344 impropers
|
||||
Finding 1-2 1-3 1-4 neighbors ...
|
||||
special bond factors lj: 0 0 0
|
||||
special bond factors coul: 0 0 0
|
||||
3 = max # of 1-2 neighbors
|
||||
6 = max # of 1-3 neighbors
|
||||
18 = max # of 1-4 neighbors
|
||||
18 = max # of special neighbors
|
||||
special bonds CPU = 0.004 seconds
|
||||
replicate CPU = 0.012 seconds
|
||||
|
||||
fix 1 all nve
|
||||
|
||||
run 100
|
||||
Generated 0 of 0 mixed pair_coeff terms from sixthpower/geometric mixing rule
|
||||
Neighbor list info ...
|
||||
update: every = 1 steps, delay = 0 steps, check = yes
|
||||
max neighbors/atom: 2000, page size: 100000
|
||||
master list distance cutoff = 12
|
||||
ghost atom cutoff = 12
|
||||
binsize = 6, bins = 27 27 27
|
||||
1 neighbor lists, perpetual/occasional/extra = 1 0 0
|
||||
(1) pair lj/class2, perpetual
|
||||
attributes: half, newton on
|
||||
pair build: half/bin/newton
|
||||
stencil: half/bin/3d
|
||||
bin: standard
|
||||
WARNING: Inconsistent image flags (../domain.cpp:1051)
|
||||
Per MPI rank memory allocation (min/avg/max) = 28.69 | 28.69 | 28.69 Mbytes
|
||||
Step Temp E_pair E_mol TotEng Press
|
||||
0 0 -14266.189 1466925.5 1452659.3 -29908.753
|
||||
100 2155.9128 -17224.188 1306769.8 1452409 1985.2082
|
||||
Loop time of 1.3667 on 4 procs for 100 steps with 25344 atoms
|
||||
|
||||
Performance: 6.322 ns/day, 3.796 hours/ns, 73.169 timesteps/s, 1.854 Matom-step/s
|
||||
99.8% CPU use with 4 MPI tasks x no OpenMP threads
|
||||
|
||||
MPI task timing breakdown:
|
||||
Section | min time | avg time | max time |%varavg| %total
|
||||
---------------------------------------------------------------
|
||||
Pair | 0.43424 | 0.43539 | 0.43741 | 0.2 | 31.86
|
||||
Bond | 0.88613 | 0.89013 | 0.90094 | 0.7 | 65.13
|
||||
Neigh | 0.013198 | 0.013199 | 0.013201 | 0.0 | 0.97
|
||||
Comm | 0.010742 | 0.020522 | 0.02546 | 4.1 | 1.50
|
||||
Output | 3.2788e-05 | 3.6302e-05 | 4.4556e-05 | 0.0 | 0.00
|
||||
Modify | 0.0042029 | 0.0042366 | 0.004267 | 0.0 | 0.31
|
||||
Other | | 0.003188 | | | 0.23
|
||||
|
||||
Nlocal: 6336 ave 6336 max 6336 min
|
||||
Histogram: 4 0 0 0 0 0 0 0 0 0
|
||||
Nghost: 10558 ave 10558 max 10558 min
|
||||
Histogram: 4 0 0 0 0 0 0 0 0 0
|
||||
Neighs: 723394 ave 723394 max 723394 min
|
||||
Histogram: 4 0 0 0 0 0 0 0 0 0
|
||||
|
||||
Total # of neighbors = 2893576
|
||||
Ave neighs/atom = 114.17203
|
||||
Ave special neighs/atom = 18
|
||||
Neighbor list builds = 1
|
||||
Dangerous builds = 0
|
||||
|
||||
# write_restart replicate.restart
|
||||
# write_data replicate.data
|
||||
Total wall time: 0:00:01
|
||||
BIN
examples/replicate/three_periodic_CNTs.data.gz
Normal file
BIN
examples/replicate/three_periodic_CNTs.data.gz
Normal file
Binary file not shown.
@ -14,6 +14,7 @@
|
||||
#include "bond_bpm.h"
|
||||
|
||||
#include "atom.h"
|
||||
#include "citeme.h"
|
||||
#include "comm.h"
|
||||
#include "domain.h"
|
||||
#include "error.h"
|
||||
@ -30,6 +31,19 @@
|
||||
|
||||
using namespace LAMMPS_NS;
|
||||
|
||||
static const char cite_bpm[] =
|
||||
"BPM bond style: doi:10.1039/D3SM01373A\n\n"
|
||||
"@Article{Clemmer2024,\n"
|
||||
" author = {Clemmer, Joel T. and Monti, Joseph M. and Lechman, Jeremy B.},\n"
|
||||
" title = {A soft departure from jamming: the compaction of deformable\n"
|
||||
" granular matter under high pressures},\n"
|
||||
" journal = {Soft Matter},\n"
|
||||
" year = 2024,\n"
|
||||
" volume = 20,\n"
|
||||
" number = 8,\n"
|
||||
" pages = {1702--1718}\n"
|
||||
"}\n\n";
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
BondBPM::BondBPM(LAMMPS *_lmp) :
|
||||
@ -55,6 +69,8 @@ BondBPM::BondBPM(LAMMPS *_lmp) :
|
||||
|
||||
id_fix_dummy2 = utils::strdup("BPM_DUMMY2");
|
||||
modify->add_fix(fmt::format("{} all DUMMY ", id_fix_dummy2));
|
||||
|
||||
if (lmp->citeme) lmp->citeme->add(cite_bpm);
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
@ -110,6 +110,12 @@ FixDeformPressure::FixDeformPressure(LAMMPS *lmp, int narg, char **arg) :
|
||||
}
|
||||
set_extra[index].pgain = utils::numeric(FLERR, arg[iarg + 3], false, lmp);
|
||||
i += 4;
|
||||
} else if (strcmp(arg[iarg + 1], "erate/rescale") == 0) {
|
||||
if (iarg + 3 > narg) utils::missing_cmd_args(FLERR, "fix deform/pressure erate/rescale", error);
|
||||
set[index].style = ERATERS;
|
||||
set[index].rate = utils::numeric(FLERR, arg[iarg + 2], false, lmp);
|
||||
iarg += 3;
|
||||
i += 3;
|
||||
} else error->all(FLERR, "Illegal fix deform/pressure command: {}", arg[iarg + 1]);
|
||||
|
||||
} else if (strcmp(arg[iarg], "box") == 0) {
|
||||
@ -424,16 +430,31 @@ void FixDeformPressure::init()
|
||||
if (!pressure)
|
||||
error->all(FLERR, "Pressure ID {} for fix deform/pressure does not exist", id_press);
|
||||
}
|
||||
|
||||
// if yz [3] changes and will cause box flip, then xy [5] cannot be changing
|
||||
// this is b/c the flips would induce continuous changes in xz
|
||||
// in order to keep the edge vectors of the flipped shape matrix
|
||||
// an integer combination of the edge vectors of the unflipped shape matrix
|
||||
// error if style PRESSURE/ERATEER for yz, can't calculate if box flip occurs
|
||||
|
||||
if (set[3].style && set[5].style) {
|
||||
int flag = 0;
|
||||
double lo,hi;
|
||||
if (flipflag && set[3].style == PRESSURE)
|
||||
error->all(FLERR, "Fix {} cannot use yz pressure with xy", style);
|
||||
if (flipflag && set[3].style == ERATERS)
|
||||
error->all(FLERR, "Fix {} cannot use yz erate/rescale with xy", style);
|
||||
}
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
compute T,P if needed before integrator starts
|
||||
compute T,P before integrator starts
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
void FixDeformPressure::setup(int /*vflag*/)
|
||||
{
|
||||
// trigger virial computation on next timestep
|
||||
if (pressure_flag) pressure->addstep(update->ntimestep+1);
|
||||
// trigger virial computation, if needed, on next timestep
|
||||
if (pressure_flag) pressure->addstep(update->ntimestep + 1);
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
@ -446,7 +467,20 @@ void FixDeformPressure::end_of_step()
|
||||
|
||||
// set new box size for strain-based dims
|
||||
|
||||
if (strain_flag) FixDeform::apply_strain();
|
||||
if (strain_flag) {
|
||||
FixDeform::apply_strain();
|
||||
|
||||
for (int i = 3; i < 6; i++) {
|
||||
if (set[i].style == ERATERS) {
|
||||
double L = domain->zprd;
|
||||
if (i == 5) L = domain->yprd;
|
||||
|
||||
h_rate[i] = set[i].rate * L;
|
||||
set_extra[i].cumulative_shift += update->dt * h_rate[i];
|
||||
set[i].tilt_target = set[i].tilt_start + set_extra[i].cumulative_shift;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// set new box size for pressure-based dims
|
||||
|
||||
@ -479,12 +513,33 @@ void FixDeformPressure::end_of_step()
|
||||
for (int i = 0; i < 3; i++) {
|
||||
set_extra[i].prior_pressure = pressure->vector[i];
|
||||
set_extra[i].prior_rate = ((set[i].hi_target - set[i].lo_target) /
|
||||
(domain->boxhi[i] - domain->boxlo[i]) - 1.0) / update->dt;
|
||||
domain->prd[i] - 1.0) / update->dt;
|
||||
}
|
||||
}
|
||||
|
||||
if (varflag) modify->addstep_compute(update->ntimestep + nevery);
|
||||
|
||||
// If tilting while evolving linear dimension, sum remapping effects
|
||||
// otherwise, update_domain() will inaccurately use the current
|
||||
// linear dimension to apply prior remappings
|
||||
|
||||
for (int i = 3; i < 6; i++) {
|
||||
int idenom = 0;
|
||||
if (i == 3) idenom = 1;
|
||||
if (set[i].style && (set_box.style || set[idenom].style) && domain->periodicity[idenom]) {
|
||||
// Add prior remappings. If the box remaps this timestep, don't
|
||||
// add it yet so update_domain() will first detect the remapping
|
||||
set[i].tilt_target += set_extra[i].cumulative_remap;
|
||||
|
||||
// Update remapping for next timestep
|
||||
double prd = set[idenom].hi_target - set[idenom].lo_target;
|
||||
double prdinv = 1.0 / prd;
|
||||
if (set[i].tilt_target * prdinv < -0.5)
|
||||
set_extra[i].cumulative_remap += prd;
|
||||
if (set[i].tilt_target * prdinv > 0.5)
|
||||
set_extra[i].cumulative_remap -= prd;
|
||||
}
|
||||
}
|
||||
|
||||
FixDeform::update_domain();
|
||||
|
||||
@ -502,7 +557,7 @@ void FixDeformPressure::apply_pressure()
|
||||
{
|
||||
// If variable pressure, calculate current target
|
||||
for (int i = 0; i < 6; i++)
|
||||
if (set[i].style == PRESSURE)
|
||||
if (set[i].style == PRESSURE || set[i].style == PMEAN)
|
||||
if (set_extra[i].pvar_flag)
|
||||
set_extra[i].ptarget = input->variable->compute_equal(set_extra[i].pvar);
|
||||
|
||||
@ -556,26 +611,24 @@ void FixDeformPressure::apply_pressure()
|
||||
|
||||
h_ratelo[i] = -0.5 * h_rate[i];
|
||||
|
||||
double offset = 0.5 * (domain->boxhi[i] - domain->boxlo[i]) * (1.0 + update->dt * h_rate[i]);
|
||||
set[i].lo_target = 0.5 * (set[i].lo_start + set[i].hi_start) - offset;
|
||||
set[i].hi_target = 0.5 * (set[i].lo_start + set[i].hi_start) + offset;
|
||||
double shift = domain->prd[i] * update->dt * h_rate[i];
|
||||
set_extra[i].cumulative_shift += shift;
|
||||
set[i].lo_target = set[i].lo_start - 0.5 * set_extra[i].cumulative_shift;
|
||||
set[i].hi_target = set[i].hi_start + 0.5 * set_extra[i].cumulative_shift;
|
||||
}
|
||||
|
||||
for (int i = 3; i < 6; i++) {
|
||||
if (set[i].style != PRESSURE) continue;
|
||||
|
||||
double L, tilt, pcurrent;
|
||||
double L, pcurrent;
|
||||
if (i == 3) {
|
||||
L = domain->zprd;
|
||||
tilt = domain->yz;
|
||||
pcurrent = tensor[5];
|
||||
} else if (i == 4) {
|
||||
L = domain->zprd;
|
||||
tilt = domain->xz + update->dt;
|
||||
pcurrent = tensor[4];
|
||||
} else {
|
||||
L = domain->yprd;
|
||||
tilt = domain->xy;
|
||||
pcurrent = tensor[3];
|
||||
}
|
||||
|
||||
@ -592,7 +645,8 @@ void FixDeformPressure::apply_pressure()
|
||||
if (fabs(h_rate[i]) > max_h_rate)
|
||||
h_rate[i] = max_h_rate * h_rate[i] / fabs(h_rate[i]);
|
||||
|
||||
set[i].tilt_target = tilt + update->dt * h_rate[i];
|
||||
set_extra[i].cumulative_shift += update->dt * h_rate[i];
|
||||
set[i].tilt_target = set[i].tilt_start + set_extra[i].cumulative_shift;
|
||||
}
|
||||
}
|
||||
|
||||
@ -629,9 +683,9 @@ void FixDeformPressure::apply_volume()
|
||||
double dt = update->dt;
|
||||
double e1i = set_extra[i].prior_rate;
|
||||
double e2i = set_extra[fixed].prior_rate;
|
||||
double L1i = domain->boxhi[i] - domain->boxlo[i];
|
||||
double L2i = domain->boxhi[fixed] - domain->boxlo[fixed];
|
||||
double L3i = domain->boxhi[dynamic1] - domain->boxlo[dynamic1];
|
||||
double L1i = domain->prd[i];
|
||||
double L2i = domain->prd[fixed];
|
||||
double L3i = domain->prd[dynamic1];
|
||||
double L3 = (set[dynamic1].hi_target - set[dynamic1].lo_target);
|
||||
double Vi = L1i * L2i * L3i;
|
||||
double V = L3 * L1i * L2i;
|
||||
@ -680,7 +734,7 @@ void FixDeformPressure::apply_volume()
|
||||
}
|
||||
}
|
||||
|
||||
h_rate[i] = (2.0 * shift / (domain->boxhi[i] - domain->boxlo[i]) - 1.0) / update->dt;
|
||||
h_rate[i] = (2.0 * shift / domain->prd[i] - 1.0) / update->dt;
|
||||
h_ratelo[i] = -0.5 * h_rate[i];
|
||||
|
||||
set[i].lo_target = 0.5 * (set[i].lo_start + set[i].hi_start) - shift;
|
||||
@ -742,7 +796,7 @@ void FixDeformPressure::apply_box()
|
||||
set[i].hi_target = 0.5 * (set[i].lo_start + set[i].hi_start) + shift;
|
||||
|
||||
// Recalculate h_rate
|
||||
h_rate[i] = (set[i].hi_target - set[i].lo_target) / (domain->boxhi[i] - domain->boxlo[i]) - 1.0;
|
||||
h_rate[i] = (set[i].hi_target - set[i].lo_target) / domain->prd[i] - 1.0;
|
||||
h_rate[i] /= update->dt;
|
||||
h_ratelo[i] = -0.5 * h_rate[i];
|
||||
}
|
||||
@ -767,14 +821,21 @@ void FixDeformPressure::apply_box()
|
||||
if (fabs(v_rate) > max_h_rate)
|
||||
v_rate = max_h_rate * v_rate / fabs(v_rate);
|
||||
|
||||
scale = (1.0 + update->dt * v_rate);
|
||||
for (i = 0; i < 3; i++) {
|
||||
shift = 0.5 * (set[i].hi_target - set[i].lo_target) * scale;
|
||||
set[i].lo_target = 0.5 * (set[i].lo_start + set[i].hi_start) - shift;
|
||||
set[i].hi_target = 0.5 * (set[i].lo_start + set[i].hi_start) + shift;
|
||||
shift = (set[i].hi_target - set[i].lo_target) * update->dt * v_rate;
|
||||
set_extra[6].cumulative_vshift[i] += shift;
|
||||
|
||||
if (set[i].style == NONE) {
|
||||
// Overwrite default targets of current length
|
||||
set[i].lo_target = set[i].lo_start;
|
||||
set[i].hi_target = set[i].hi_start;
|
||||
}
|
||||
|
||||
set[i].lo_target -= 0.5 * set_extra[6].cumulative_vshift[i];
|
||||
set[i].hi_target += 0.5 * set_extra[6].cumulative_vshift[i];
|
||||
|
||||
// Recalculate h_rate
|
||||
h_rate[i] = (set[i].hi_target - set[i].lo_target) / (domain->boxhi[i] - domain->boxlo[i]) - 1.0;
|
||||
h_rate[i] = (set[i].hi_target - set[i].lo_target) / domain->prd[i] - 1.0;
|
||||
h_rate[i] /= update->dt;
|
||||
h_ratelo[i] = -0.5 * h_rate[i];
|
||||
}
|
||||
@ -788,7 +849,7 @@ void FixDeformPressure::apply_box()
|
||||
void FixDeformPressure::write_restart(FILE *fp)
|
||||
{
|
||||
if (comm->me == 0) {
|
||||
int size = 9 * sizeof(double) + 7 * sizeof(Set) + 7 * sizeof(SetExtra);
|
||||
int size = 7 * sizeof(Set) + 7 * sizeof(SetExtra);
|
||||
fwrite(&size, sizeof(int), 1, fp);
|
||||
fwrite(set, sizeof(Set), 6, fp);
|
||||
fwrite(&set_box, sizeof(Set), 1, fp);
|
||||
@ -803,22 +864,16 @@ void FixDeformPressure::write_restart(FILE *fp)
|
||||
void FixDeformPressure::restart(char *buf)
|
||||
{
|
||||
int n = 0;
|
||||
auto list = (double *) buf;
|
||||
for (int i = 0; i < 6; i++)
|
||||
h_rate[i] = list[n++];
|
||||
for (int i = 0; i < 3; i++)
|
||||
h_ratelo[i] = list[n++];
|
||||
|
||||
n = n * sizeof(double);
|
||||
int samestyle = 1;
|
||||
Set *set_restart = (Set *) &buf[n];
|
||||
Set *set_restart = (Set *) buf;
|
||||
for (int i = 0; i < 6; ++i) {
|
||||
// restore data from initial state
|
||||
set[i].lo_initial = set_restart[i].lo_initial;
|
||||
set[i].hi_initial = set_restart[i].hi_initial;
|
||||
set[i].vol_initial = set_restart[i].vol_initial;
|
||||
set[i].tilt_initial = set_restart[i].tilt_initial;
|
||||
// check if style settings are consistent (should do the whole set?)
|
||||
|
||||
// check if style settings are consistent
|
||||
if (set[i].style != set_restart[i].style)
|
||||
samestyle = 0;
|
||||
if (set[i].substyle != set_restart[i].substyle)
|
||||
|
||||
@ -51,6 +51,9 @@ class FixDeformPressure : public FixDeform {
|
||||
struct SetExtra {
|
||||
double ptarget, pgain;
|
||||
double prior_pressure, prior_rate;
|
||||
double cumulative_shift;
|
||||
double cumulative_vshift[3];
|
||||
double cumulative_remap;
|
||||
int saved;
|
||||
char *pstr;
|
||||
int pvar, pvar_flag;
|
||||
|
||||
@ -46,6 +46,8 @@ enum { TYPE, RADIUS, CUSTOM };
|
||||
enum { INTEGRATED, D2MIN };
|
||||
enum { FIXED, OFFSET, UPDATE };
|
||||
|
||||
static constexpr double EPSILON = 1.0e-15;
|
||||
|
||||
static const char cite_nonaffine_d2min[] =
|
||||
"@article{PhysRevE.57.7192,\n"
|
||||
" title = {Dynamics of viscoplastic deformation in amorphous solids},\n"
|
||||
@ -66,7 +68,7 @@ static const char cite_nonaffine_d2min[] =
|
||||
|
||||
FixNonaffineDisplacement::FixNonaffineDisplacement(LAMMPS *lmp, int narg, char **arg) :
|
||||
Fix(lmp, narg, arg), id_fix(nullptr), fix(nullptr), D2min(nullptr), X(nullptr), Y(nullptr),
|
||||
F(nullptr), norm(nullptr)
|
||||
F(nullptr), norm(nullptr), singular(nullptr)
|
||||
{
|
||||
if (narg < 4) utils::missing_cmd_args(FLERR,"fix nonaffine/displacement", error);
|
||||
|
||||
@ -74,6 +76,8 @@ FixNonaffineDisplacement::FixNonaffineDisplacement(LAMMPS *lmp, int narg, char *
|
||||
if (nevery <= 0) error->all(FLERR,"Illegal nevery value {} in fix nonaffine/displacement", nevery);
|
||||
|
||||
reference_timestep = update_timestep = offset_timestep = -1;
|
||||
z_min = 0;
|
||||
|
||||
int iarg = 4;
|
||||
if (strcmp(arg[iarg], "integrated") == 0) {
|
||||
nad_style = INTEGRATED;
|
||||
@ -117,6 +121,16 @@ FixNonaffineDisplacement::FixNonaffineDisplacement(LAMMPS *lmp, int narg, char *
|
||||
if ((offset_timestep <= 0) || (offset_timestep > nevery))
|
||||
error->all(FLERR, "Illegal offset timestep {} in fix nonaffine/displacement", arg[iarg + 1]);
|
||||
} else error->all(FLERR,"Illegal reference style {} in fix nonaffine/displacement", arg[iarg]);
|
||||
iarg += 2;
|
||||
|
||||
while (iarg < narg) {
|
||||
if (strcmp(arg[iarg], "z/min") == 0) {
|
||||
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR,"fix nonaffine/displacement", error);
|
||||
z_min = utils::inumeric(FLERR, arg[iarg + 1], false, lmp);
|
||||
if (z_min < 0) error->all(FLERR, "Minimum coordination must be positive");
|
||||
iarg += 2;
|
||||
} else error->all(FLERR,"Illegal keyword {} in fix nonaffine/displacement", arg[iarg]);
|
||||
}
|
||||
|
||||
if (nad_style == D2MIN)
|
||||
if (cut_style == RADIUS && (!atom->radius_flag))
|
||||
@ -151,6 +165,7 @@ FixNonaffineDisplacement::~FixNonaffineDisplacement()
|
||||
memory->destroy(Y);
|
||||
memory->destroy(F);
|
||||
memory->destroy(norm);
|
||||
memory->destroy(singular);
|
||||
memory->destroy(D2min);
|
||||
}
|
||||
|
||||
@ -395,6 +410,7 @@ void FixNonaffineDisplacement::calculate_D2Min()
|
||||
}
|
||||
}
|
||||
norm[i] = 0;
|
||||
singular[i] = 0;
|
||||
D2min[i] = 0;
|
||||
}
|
||||
|
||||
@ -471,14 +487,29 @@ void FixNonaffineDisplacement::calculate_D2Min()
|
||||
}
|
||||
|
||||
if (dim == 3) {
|
||||
invert3(Y_tmp, Y_inv);
|
||||
denom = det3(Y_tmp);
|
||||
if (fabs(denom) < EPSILON) {
|
||||
singular[i] = 1;
|
||||
for (j = 0; j < 3; j++)
|
||||
for (k = 0; k < 3; k++)
|
||||
Y_inv[j][k] = 0.0;
|
||||
} else {
|
||||
invert3(Y_tmp, Y_inv);
|
||||
}
|
||||
} else {
|
||||
denom = Y_tmp[0][0] * Y_tmp[1][1] - Y_tmp[0][1] * Y_tmp[1][0];
|
||||
if (denom != 0.0) denom = 1.0 / denom;
|
||||
Y_inv[0][0] = Y_tmp[1][1] * denom;
|
||||
Y_inv[0][1] = -Y_tmp[0][1] * denom;
|
||||
Y_inv[1][0] = -Y_tmp[1][0] * denom;
|
||||
Y_inv[1][1] = Y_tmp[0][0] * denom;
|
||||
if (fabs(denom) < EPSILON) {
|
||||
singular[i] = 1;
|
||||
for (j = 0; j < 2; j++)
|
||||
for (k = 0; k < 2; k++)
|
||||
Y_inv[j][k] = 0.0;
|
||||
} else {
|
||||
denom = 1.0 / denom;
|
||||
Y_inv[0][0] = Y_tmp[1][1] * denom;
|
||||
Y_inv[0][1] = -Y_tmp[0][1] * denom;
|
||||
Y_inv[1][0] = -Y_tmp[1][0] * denom;
|
||||
Y_inv[1][1] = Y_tmp[0][0] * denom;
|
||||
}
|
||||
}
|
||||
|
||||
times3(X_tmp, Y_inv, F_tmp);
|
||||
@ -559,10 +590,16 @@ void FixNonaffineDisplacement::calculate_D2Min()
|
||||
for (i = 0; i < nlocal; i++) {
|
||||
if (!(mask[i] & groupbit)) continue;
|
||||
|
||||
if (norm[i] != 0)
|
||||
D2min[i] /= norm[i];
|
||||
else
|
||||
D2min[i] = 0.0;
|
||||
if (norm[i] < z_min || singular[i] == 1) {
|
||||
if (norm[i] >= z_min)
|
||||
error->warning(FLERR, "Singular matrix detected for atom {}, defaulting output to zero", atom->tag[i]);
|
||||
array_atom[i][0] = 0.0;
|
||||
array_atom[i][1] = 0.0;
|
||||
array_atom[i][2] = 0.0;
|
||||
continue;
|
||||
}
|
||||
|
||||
D2min[i] /= norm[i];
|
||||
|
||||
for (j = 0; j < 3; j++)
|
||||
for (k = 0; k < 3; k++)
|
||||
@ -743,10 +780,12 @@ void FixNonaffineDisplacement::grow_arrays(int nmax_new)
|
||||
memory->destroy(F);
|
||||
memory->destroy(D2min);
|
||||
memory->destroy(norm);
|
||||
memory->destroy(singular);
|
||||
memory->create(X, nmax, 3, 3, "fix_nonaffine_displacement:X");
|
||||
memory->create(Y, nmax, 3, 3, "fix_nonaffine_displacement:Y");
|
||||
memory->create(F, nmax, 3, 3, "fix_nonaffine_displacement:F");
|
||||
memory->create(D2min, nmax, "fix_nonaffine_displacement:D2min");
|
||||
memory->create(norm, nmax, "fix_nonaffine_displacement:norm");
|
||||
memory->create(singular, nmax, "fix_nonaffine_displacement:singular");
|
||||
}
|
||||
}
|
||||
|
||||
@ -48,12 +48,12 @@ class FixNonaffineDisplacement : public Fix {
|
||||
int nmax, comm_flag;
|
||||
int nad_style, cut_style;
|
||||
int reference_style, offset_timestep, reference_timestep, update_timestep;
|
||||
int reference_saved;
|
||||
int reference_saved, z_min;
|
||||
double cutoff_custom, cutsq_custom, mycutneigh;
|
||||
double xprd0, yprd0, zprd0, xprd0_half, yprd0_half, zprd0_half, xy0, xz0, yz0;
|
||||
|
||||
double *D2min, ***X, ***Y, ***F;
|
||||
int *norm;
|
||||
int *norm, *singular;
|
||||
|
||||
class NeighList *list; // half neighbor list
|
||||
|
||||
|
||||
@ -16,6 +16,7 @@
|
||||
#include "atom.h"
|
||||
#include "comm.h"
|
||||
#include "error.h"
|
||||
#include "force.h"
|
||||
#include "memory.h"
|
||||
#include "modify.h"
|
||||
#include "update.h"
|
||||
@ -127,7 +128,7 @@ void FixHeatFlow::final_integrate()
|
||||
if (igroup == atom->firstgroup) nlocal = atom->nfirst;
|
||||
|
||||
// add ghost contributions to heatflow if first instance of fix
|
||||
if (first_flag) comm->reverse_comm(this);
|
||||
if (force->newton_pair && first_flag) comm->reverse_comm(this);
|
||||
|
||||
if (rmass) {
|
||||
for (int i = 0; i < nlocal; i++)
|
||||
|
||||
@ -216,9 +216,15 @@ int GranularModel::define_classic_model(char **arg, int iarg, int narg)
|
||||
// manually parse coeffs
|
||||
normal_model->coeffs[0] = kn;
|
||||
normal_model->coeffs[1] = gamman;
|
||||
tangential_model->coeffs[0] = kt;
|
||||
tangential_model->coeffs[1] = gammat / gamman;
|
||||
tangential_model->coeffs[2] = xmu;
|
||||
|
||||
if (tangential_model->num_coeffs == 2) {
|
||||
tangential_model->coeffs[0] = gammat / gamman;
|
||||
tangential_model->coeffs[1] = xmu;
|
||||
} else {
|
||||
tangential_model->coeffs[0] = kt;
|
||||
tangential_model->coeffs[1] = gammat / gamman;
|
||||
tangential_model->coeffs[2] = xmu;
|
||||
}
|
||||
|
||||
normal_model->coeffs_to_local();
|
||||
tangential_model->coeffs_to_local();
|
||||
|
||||
@ -13,9 +13,6 @@
|
||||
|
||||
#ifdef PAIR_CLASS
|
||||
// clang-format off
|
||||
PairStyle(meam/c/kk,PairMEAMKokkos<LMPDeviceType>);
|
||||
PairStyle(meam/c/kk/device,PairMEAMKokkos<LMPDeviceType>);
|
||||
PairStyle(meam/c/kk/host,PairMEAMKokkos<LMPHostType>);
|
||||
PairStyle(meam/kk,PairMEAMKokkos<LMPDeviceType>);
|
||||
PairStyle(meam/kk/device,PairMEAMKokkos<LMPDeviceType>);
|
||||
PairStyle(meam/kk/host,PairMEAMKokkos<LMPHostType>);
|
||||
|
||||
@ -14,7 +14,6 @@
|
||||
#ifdef PAIR_CLASS
|
||||
// clang-format off
|
||||
PairStyle(meam,PairMEAM);
|
||||
PairStyle(meam/c,PairMEAM);
|
||||
// clang-format on
|
||||
#else
|
||||
|
||||
|
||||
@ -74,6 +74,9 @@ FixQEq::FixQEq(LAMMPS *lmp, int narg, char **arg) :
|
||||
if ((nevery <= 0) || (cutoff <= 0.0) || (tolerance <= 0.0) || (maxiter <= 0))
|
||||
error->all(FLERR,"Illegal fix qeq command");
|
||||
|
||||
// must have charges
|
||||
if (!atom->q_flag) error->all(FLERR, "Fix {} requires atom attribute q", style);
|
||||
|
||||
alpha = 0.20;
|
||||
swa = 0.0;
|
||||
swb = cutoff;
|
||||
|
||||
@ -65,7 +65,7 @@ FixReaxFFSpecies::FixReaxFFSpecies(LAMMPS *lmp, int narg, char **arg) :
|
||||
Fix(lmp, narg, arg), Name(nullptr), MolName(nullptr), NMol(nullptr), nd(nullptr),
|
||||
MolType(nullptr), molmap(nullptr), mark(nullptr), Mol2Spec(nullptr), clusterID(nullptr),
|
||||
x0(nullptr), BOCut(nullptr), fp(nullptr), pos(nullptr), fdel(nullptr), delete_Tcount(nullptr),
|
||||
ele(nullptr), eletype(nullptr), filepos(nullptr), filedel(nullptr)
|
||||
filepos(nullptr), filedel(nullptr)
|
||||
{
|
||||
if (narg < 7) utils::missing_cmd_args(FLERR, "fix reaxff/species", error);
|
||||
|
||||
@ -84,6 +84,9 @@ FixReaxFFSpecies::FixReaxFFSpecies(LAMMPS *lmp, int narg, char **arg) :
|
||||
nvalid = -1;
|
||||
|
||||
ntypes = atom->ntypes;
|
||||
eletype.resize(ntypes);
|
||||
ueletype.resize(ntypes);
|
||||
ele2uele.resize(ntypes);
|
||||
|
||||
nevery = utils::inumeric(FLERR, arg[3], false, lmp);
|
||||
nrepeat = utils::inumeric(FLERR, arg[4], false, lmp);
|
||||
@ -156,8 +159,7 @@ FixReaxFFSpecies::FixReaxFFSpecies(LAMMPS *lmp, int narg, char **arg) :
|
||||
for (int j = 1; j < np1; j++) BOCut[i][j] = bo_cut;
|
||||
|
||||
// optional args
|
||||
eletype = nullptr;
|
||||
ele = filepos = filedel = nullptr;
|
||||
filepos = filedel = nullptr;
|
||||
eleflag = posflag = padflag = 0;
|
||||
delflag = specieslistflag = masslimitflag = 0;
|
||||
delete_Nlimit = delete_Nsteps = 0;
|
||||
@ -191,14 +193,9 @@ FixReaxFFSpecies::FixReaxFFSpecies(LAMMPS *lmp, int narg, char **arg) :
|
||||
if (iarg + ntypes + 1 > narg)
|
||||
utils::missing_cmd_args(FLERR, "fix reaxff/species element", error);
|
||||
|
||||
eletype = (char **) malloc(ntypes * sizeof(char *));
|
||||
int len;
|
||||
for (int i = 0; i < ntypes; i++) {
|
||||
len = strlen(arg[iarg + 1 + i]) + 1;
|
||||
eletype[i] = (char *) malloc(len * sizeof(char));
|
||||
strcpy(eletype[i], arg[iarg + 1 + i]);
|
||||
}
|
||||
eleflag = 1;
|
||||
for (int i = 0; i < ntypes; i++)
|
||||
eletype[i] = arg[iarg + 1 + i];
|
||||
GetUniqueElements();
|
||||
iarg += ntypes + 1;
|
||||
|
||||
// delete species
|
||||
@ -285,14 +282,6 @@ FixReaxFFSpecies::FixReaxFFSpecies(LAMMPS *lmp, int narg, char **arg) :
|
||||
error->all(FLERR, "Unknown fix reaxff/species keyword: {}", arg[iarg]);
|
||||
}
|
||||
|
||||
if (!eleflag) {
|
||||
memory->create(ele, ntypes + 1, "reaxff/species:ele");
|
||||
ele[0] = 'C';
|
||||
if (ntypes > 1) ele[1] = 'H';
|
||||
if (ntypes > 2) ele[2] = 'O';
|
||||
if (ntypes > 3) ele[3] = 'N';
|
||||
}
|
||||
|
||||
if (delflag && specieslistflag && masslimitflag)
|
||||
error->all(FLERR, "Incompatible combination fix reaxff/species command options");
|
||||
|
||||
@ -312,7 +301,6 @@ FixReaxFFSpecies::FixReaxFFSpecies(LAMMPS *lmp, int narg, char **arg) :
|
||||
|
||||
FixReaxFFSpecies::~FixReaxFFSpecies()
|
||||
{
|
||||
memory->destroy(ele);
|
||||
memory->destroy(BOCut);
|
||||
memory->destroy(clusterID);
|
||||
memory->destroy(x0);
|
||||
@ -358,7 +346,13 @@ int FixReaxFFSpecies::setmask()
|
||||
void FixReaxFFSpecies::setup(int /*vflag*/)
|
||||
{
|
||||
ntotal = static_cast<int>(atom->natoms);
|
||||
if (Name == nullptr) memory->create(Name, ntypes, "reaxff/species:Name");
|
||||
if (Name == nullptr) memory->create(Name, nutypes, "reaxff/species:Name");
|
||||
|
||||
if (!eleflag) {
|
||||
for (int i = 0; i < ntypes; i++)
|
||||
eletype[i] = reaxff->eletype[i+1];
|
||||
GetUniqueElements();
|
||||
}
|
||||
|
||||
post_integrate();
|
||||
}
|
||||
@ -648,14 +642,14 @@ void FixReaxFFSpecies::FindSpecies(int Nmole, int &Nspec)
|
||||
|
||||
memory->destroy(MolName);
|
||||
MolName = nullptr;
|
||||
memory->create(MolName, Nmole * (ntypes + 1), "reaxff/species:MolName");
|
||||
memory->create(MolName, Nmole * (nutypes + 1), "reaxff/species:MolName");
|
||||
|
||||
memory->destroy(NMol);
|
||||
NMol = nullptr;
|
||||
memory->create(NMol, Nmole, "reaxff/species:NMol");
|
||||
for (m = 0; m < Nmole; m++) NMol[m] = 1;
|
||||
|
||||
memory->create(Nameall, ntypes, "reaxff/species:Nameall");
|
||||
memory->create(Nameall, nutypes, "reaxff/species:Nameall");
|
||||
memory->create(NMolall, Nmole, "reaxff/species:NMolall");
|
||||
|
||||
memory->destroy(Mol2Spec);
|
||||
@ -664,12 +658,12 @@ void FixReaxFFSpecies::FindSpecies(int Nmole, int &Nspec)
|
||||
for (m = 0; m < Nmole; m++) Mol2Spec[m] = -1;
|
||||
|
||||
for (m = 1, Nspec = 0; m <= Nmole; m++) {
|
||||
for (n = 0; n < ntypes; n++) Name[n] = 0;
|
||||
for (n = 0; n < nutypes; n++) Name[n] = 0;
|
||||
for (n = 0, flag_mol = 0; n < nlocal; n++) {
|
||||
if (!(mask[n] & groupbit)) continue;
|
||||
cid = nint(clusterID[n]);
|
||||
if (cid == m) {
|
||||
itype = atom->type[n] - 1;
|
||||
itype = ele2uele[atom->type[n] - 1];
|
||||
Name[itype]++;
|
||||
flag_mol = 1;
|
||||
}
|
||||
@ -677,15 +671,15 @@ void FixReaxFFSpecies::FindSpecies(int Nmole, int &Nspec)
|
||||
MPI_Allreduce(&flag_mol, &flag_tmp, 1, MPI_INT, MPI_MAX, world);
|
||||
flag_mol = flag_tmp;
|
||||
|
||||
MPI_Allreduce(Name, Nameall, ntypes, MPI_INT, MPI_SUM, world);
|
||||
for (n = 0; n < ntypes; n++) Name[n] = Nameall[n];
|
||||
MPI_Allreduce(Name, Nameall, nutypes, MPI_INT, MPI_SUM, world);
|
||||
for (n = 0; n < nutypes; n++) Name[n] = Nameall[n];
|
||||
|
||||
if (flag_mol == 1) {
|
||||
flag_identity = 1;
|
||||
for (k = 0; k < Nspec; k++) {
|
||||
flag_spec = 0;
|
||||
for (l = 0; l < ntypes; l++)
|
||||
if (MolName[ntypes * k + l] != Name[l]) flag_spec = 1;
|
||||
for (l = 0; l < nutypes; l++)
|
||||
if (MolName[nutypes * k + l] != Name[l]) flag_spec = 1;
|
||||
if (flag_spec == 0) {
|
||||
NMol[k]++;
|
||||
Mol2Spec[m - 1] = k;
|
||||
@ -693,7 +687,7 @@ void FixReaxFFSpecies::FindSpecies(int Nmole, int &Nspec)
|
||||
flag_identity *= flag_spec;
|
||||
}
|
||||
if (Nspec == 0 || flag_identity == 1) {
|
||||
for (l = 0; l < ntypes; l++) MolName[ntypes * Nspec + l] = Name[l];
|
||||
for (l = 0; l < nutypes; l++) MolName[nutypes * Nspec + l] = Name[l];
|
||||
Mol2Spec[m - 1] = Nspec;
|
||||
Nspec++;
|
||||
}
|
||||
@ -708,24 +702,24 @@ void FixReaxFFSpecies::FindSpecies(int Nmole, int &Nspec)
|
||||
|
||||
memory->destroy(MolType);
|
||||
MolType = nullptr;
|
||||
memory->create(MolType, Nspec * (ntypes + 2), "reaxff/species:MolType");
|
||||
memory->create(MolType, Nspec * (nutypes + 2), "reaxff/species:MolType");
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
int FixReaxFFSpecies::CheckExistence(int id, int ntypes)
|
||||
int FixReaxFFSpecies::CheckExistence(int id, int nutypes)
|
||||
{
|
||||
int i, j, molid, flag;
|
||||
|
||||
for (i = 0; i < Nmoltype; i++) {
|
||||
flag = 0;
|
||||
for (j = 0; j < ntypes; j++) {
|
||||
molid = MolType[ntypes * i + j];
|
||||
if (molid != MolName[ntypes * id + j]) flag = 1;
|
||||
for (j = 0; j < nutypes; j++) {
|
||||
molid = MolType[nutypes * i + j];
|
||||
if (molid != MolName[nutypes * id + j]) flag = 1;
|
||||
}
|
||||
if (flag == 0) return i;
|
||||
}
|
||||
for (i = 0; i < ntypes; i++) MolType[ntypes * Nmoltype + i] = MolName[ntypes * id + i];
|
||||
for (i = 0; i < nutypes; i++) MolType[nutypes * Nmoltype + i] = MolName[nutypes * id + i];
|
||||
|
||||
Nmoltype++;
|
||||
return Nmoltype - 1;
|
||||
@ -733,6 +727,50 @@ int FixReaxFFSpecies::CheckExistence(int id, int ntypes)
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
void FixReaxFFSpecies::GetUniqueElements()
|
||||
{
|
||||
eleflag = 1;
|
||||
|
||||
// get unique 'element' labels
|
||||
|
||||
nutypes = 0;
|
||||
int skipflag;
|
||||
for (int i = 0; i < ntypes; i++) {
|
||||
skipflag = 0;
|
||||
for (int j = 0; j < nutypes; j++)
|
||||
if (eletype[i] == ueletype[j]) {
|
||||
skipflag = 1;
|
||||
break;
|
||||
}
|
||||
if (skipflag) continue;
|
||||
ueletype[nutypes++] = eletype[i];
|
||||
}
|
||||
|
||||
// reorder CHON, if necessary
|
||||
|
||||
int incr = 0;
|
||||
std::vector<std::string> CHON = {"C", "H", "O", "N"};
|
||||
for (auto it = CHON.begin(); it != CHON.end(); ++it)
|
||||
for (int j = incr; j < nutypes; j++) {
|
||||
if (ueletype[j] == *it) {
|
||||
ueletype.erase(ueletype.begin() + j);
|
||||
ueletype.insert(ueletype.begin() + incr++, *it);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// map user input to unique list
|
||||
|
||||
for (int i = 0; i < ntypes; i++)
|
||||
for (int j = 0; j < nutypes; j++)
|
||||
if (eletype[i] == ueletype[j]) {
|
||||
ele2uele[i] = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
void FixReaxFFSpecies::WriteFormulas(int Nmole, int Nspec)
|
||||
{
|
||||
int i, j, itemp;
|
||||
@ -742,17 +780,14 @@ void FixReaxFFSpecies::WriteFormulas(int Nmole, int Nspec)
|
||||
|
||||
Nmoltype = 0;
|
||||
|
||||
for (i = 0; i < Nspec; i++) nd[i] = CheckExistence(i, ntypes);
|
||||
for (i = 0; i < Nspec; i++) nd[i] = CheckExistence(i, nutypes);
|
||||
|
||||
for (i = 0; i < Nmoltype; i++) {
|
||||
std::string molname;
|
||||
for (j = 0; j < ntypes; j++) {
|
||||
itemp = MolType[ntypes * i + j];
|
||||
for (j = 0; j < nutypes; j++) {
|
||||
itemp = MolType[nutypes * i + j];
|
||||
if (itemp != 0) {
|
||||
if (eletype)
|
||||
molname += eletype[j];
|
||||
else
|
||||
molname += ele[j];
|
||||
molname += ueletype[j];
|
||||
if (itemp != 1) molname += std::to_string(itemp);
|
||||
}
|
||||
}
|
||||
@ -810,20 +845,20 @@ void FixReaxFFSpecies::WritePos(int Nmole, int Nspec)
|
||||
}
|
||||
|
||||
Nameall = nullptr;
|
||||
memory->create(Nameall, ntypes, "reaxff/species:Nameall");
|
||||
memory->create(Nameall, nutypes, "reaxff/species:Nameall");
|
||||
|
||||
for (m = 1; m <= Nmole; m++) {
|
||||
|
||||
count = 0;
|
||||
avq = 0.0;
|
||||
for (n = 0; n < 3; n++) avx[n] = 0.0;
|
||||
for (n = 0; n < ntypes; n++) Name[n] = 0;
|
||||
for (n = 0; n < nutypes; n++) Name[n] = 0;
|
||||
|
||||
for (i = 0; i < nlocal; i++) {
|
||||
if (!(mask[i] & groupbit)) continue;
|
||||
cid = nint(clusterID[i]);
|
||||
if (cid == m) {
|
||||
itype = atom->type[i] - 1;
|
||||
itype = ele2uele[atom->type[i] - 1];
|
||||
Name[itype]++;
|
||||
count++;
|
||||
avq += spec_atom[i][0];
|
||||
@ -850,17 +885,14 @@ void FixReaxFFSpecies::WritePos(int Nmole, int Nspec)
|
||||
MPI_Reduce(&count, &count_tmp, 1, MPI_INT, MPI_SUM, 0, world);
|
||||
count = count_tmp;
|
||||
|
||||
MPI_Reduce(Name, Nameall, ntypes, MPI_INT, MPI_SUM, 0, world);
|
||||
for (n = 0; n < ntypes; n++) Name[n] = Nameall[n];
|
||||
MPI_Reduce(Name, Nameall, nutypes, MPI_INT, MPI_SUM, 0, world);
|
||||
for (n = 0; n < nutypes; n++) Name[n] = Nameall[n];
|
||||
|
||||
if (comm->me == 0) {
|
||||
fprintf(pos, "%d\t%d\t", m, count);
|
||||
for (n = 0; n < ntypes; n++) {
|
||||
for (n = 0; n < nutypes; n++) {
|
||||
if (Name[n] != 0) {
|
||||
if (eletype)
|
||||
fprintf(pos, "%s", eletype[n]);
|
||||
else
|
||||
fprintf(pos, "%c", ele[n]);
|
||||
fprintf(pos, "%s", ueletype[n].c_str());
|
||||
if (Name[n] != 1) fprintf(pos, "%d", Name[n]);
|
||||
}
|
||||
}
|
||||
@ -912,7 +944,7 @@ void FixReaxFFSpecies::DeleteSpecies(int Nmole, int Nspec)
|
||||
for (i = 0; i < nlocal; i++) mark[i] = 0;
|
||||
|
||||
Nameall = nullptr;
|
||||
memory->create(Nameall, ntypes, "reaxff/species:Nameall");
|
||||
memory->create(Nameall, nutypes, "reaxff/species:Nameall");
|
||||
|
||||
int ndelcomm;
|
||||
if (masslimitflag)
|
||||
@ -944,13 +976,13 @@ void FixReaxFFSpecies::DeleteSpecies(int Nmole, int Nspec)
|
||||
if (this_delete_Tcount == headroom) break;
|
||||
m = molrange[mm];
|
||||
localmass = totalmass = count = nmarklist = 0;
|
||||
for (n = 0; n < ntypes; n++) Name[n] = 0;
|
||||
for (n = 0; n < nutypes; n++) Name[n] = 0;
|
||||
|
||||
for (i = 0; i < nlocal; i++) {
|
||||
if (!(mask[i] & groupbit)) continue;
|
||||
cid = nint(clusterID[i]);
|
||||
if (cid == m) {
|
||||
itype = atom->type[i] - 1;
|
||||
itype = ele2uele[atom->type[i] - 1];
|
||||
Name[itype]++;
|
||||
count++;
|
||||
marklist[nmarklist++] = i;
|
||||
@ -961,18 +993,15 @@ void FixReaxFFSpecies::DeleteSpecies(int Nmole, int Nspec)
|
||||
MPI_Allreduce(&count, &count_tmp, 1, MPI_INT, MPI_SUM, world);
|
||||
count = count_tmp;
|
||||
|
||||
MPI_Allreduce(Name, Nameall, ntypes, MPI_INT, MPI_SUM, world);
|
||||
for (n = 0; n < ntypes; n++) Name[n] = Nameall[n];
|
||||
MPI_Allreduce(Name, Nameall, nutypes, MPI_INT, MPI_SUM, world);
|
||||
for (n = 0; n < nutypes; n++) Name[n] = Nameall[n];
|
||||
|
||||
MPI_Allreduce(&localmass, &totalmass, 1, MPI_DOUBLE, MPI_SUM, world);
|
||||
|
||||
species_str = "";
|
||||
for (j = 0; j < ntypes; j++) {
|
||||
for (j = 0; j < nutypes; j++) {
|
||||
if (Name[j] != 0) {
|
||||
if (eletype)
|
||||
species_str += eletype[j];
|
||||
else
|
||||
species_str += ele[j];
|
||||
species_str += ueletype[j];
|
||||
if (Name[j] != 1) species_str += fmt::format("{}", Name[j]);
|
||||
}
|
||||
}
|
||||
@ -1034,13 +1063,10 @@ void FixReaxFFSpecies::DeleteSpecies(int Nmole, int Nspec)
|
||||
printflag = 1;
|
||||
}
|
||||
fprintf(fdel, " %g ", deletecount[m]);
|
||||
for (j = 0; j < ntypes; j++) {
|
||||
int itemp = MolName[ntypes * m + j];
|
||||
for (j = 0; j < nutypes; j++) {
|
||||
int itemp = MolName[nutypes * m + j];
|
||||
if (itemp != 0) {
|
||||
if (eletype)
|
||||
fprintf(fdel, "%s", eletype[j]);
|
||||
else
|
||||
fprintf(fdel, "%c", ele[j]);
|
||||
fprintf(fdel, "%s", ueletype[j].c_str());
|
||||
if (itemp != 1) fprintf(fdel, "%d", itemp);
|
||||
}
|
||||
}
|
||||
|
||||
@ -43,7 +43,7 @@ class FixReaxFFSpecies : public Fix {
|
||||
double compute_vector(int) override;
|
||||
|
||||
protected:
|
||||
int nmax, nlocal, ntypes, ntotal;
|
||||
int nmax, nlocal, ntypes, nutypes, ntotal;
|
||||
int nrepeat, nfreq, posfreq, compressed, ndelspec;
|
||||
int Nmoltype, vector_nmole, vector_nspec;
|
||||
int *Name, *MolName, *NMol, *nd, *MolType, *molmap, *mark;
|
||||
@ -62,7 +62,10 @@ class FixReaxFFSpecies : public Fix {
|
||||
int delete_Nsteps, *delete_Tcount;
|
||||
double massmin, massmax;
|
||||
int singlepos_opened, multipos_opened, del_opened;
|
||||
char *ele, **eletype, *filepos, *filedel;
|
||||
char *filepos, *filedel;
|
||||
std::vector<int> ele2uele; // for element eletype[i], ele2uele[i] stores index of unique element
|
||||
std::vector<std::string> eletype; // list of ReaxFF elements of length ntypes
|
||||
std::vector<std::string> ueletype; // list of unique elements, of quantity nutypes
|
||||
|
||||
void Output_ReaxFF_Bonds(bigint, FILE *);
|
||||
AtomCoord chAnchor(AtomCoord, AtomCoord);
|
||||
@ -72,6 +75,7 @@ class FixReaxFFSpecies : public Fix {
|
||||
void WriteFormulas(int, int);
|
||||
void DeleteSpecies(int, int);
|
||||
int CheckExistence(int, int);
|
||||
void GetUniqueElements();
|
||||
|
||||
int nint(const double &);
|
||||
int pack_forward_comm(int, int *, double *, int, int *) override;
|
||||
|
||||
@ -297,14 +297,17 @@ void PairReaxFF::coeff(int nargs, char **args)
|
||||
}
|
||||
|
||||
int n = atom->ntypes;
|
||||
eletype.resize(n+1);
|
||||
|
||||
// pair_coeff element map
|
||||
for (int i = 3; i < nargs; i++)
|
||||
for (int i = 3; i < nargs; i++) {
|
||||
eletype[i-2] = args[i];
|
||||
for (int j = 0; j < nreax_types; j++)
|
||||
if (utils::lowercase(args[i]) == utils::lowercase(api->system->reax_param.sbp[j].name)) {
|
||||
map[i-2] = j;
|
||||
itmp ++;
|
||||
}
|
||||
}
|
||||
|
||||
// error check
|
||||
if (itmp != n)
|
||||
|
||||
@ -53,6 +53,7 @@ class PairReaxFF : public Pair {
|
||||
int fixbond_flag, fixspecies_flag;
|
||||
int **tmpid;
|
||||
double **tmpbo, **tmpr;
|
||||
std::vector<std::string> eletype;
|
||||
|
||||
ReaxFF::API *api;
|
||||
typedef double rvec[3];
|
||||
|
||||
@ -316,6 +316,7 @@ void CreateAtoms::command(int narg, char **arg)
|
||||
|
||||
onemol->compute_center();
|
||||
ranmol = new RanMars(lmp, molseed + comm->me);
|
||||
memory->create(xmol, onemol->natoms, 3, "create_atoms:xmol");
|
||||
}
|
||||
|
||||
if (style == MESH) {
|
||||
@ -651,6 +652,7 @@ void CreateAtoms::command(int narg, char **arg)
|
||||
delete[] xstr;
|
||||
delete[] ystr;
|
||||
delete[] zstr;
|
||||
if (mode == MOLECULE) memory->destroy(xmol);
|
||||
|
||||
// for MOLECULE mode:
|
||||
// create special bond lists for molecular systems,
|
||||
@ -714,7 +716,8 @@ void CreateAtoms::add_single()
|
||||
if (mode == ATOM) {
|
||||
atom->avec->create_atom(ntype, xone);
|
||||
} else {
|
||||
add_molecule(xone);
|
||||
get_xmol(xone);
|
||||
add_molecule();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -732,7 +735,6 @@ void CreateAtoms::add_random()
|
||||
|
||||
if (overlapflag) {
|
||||
double odist = overlap;
|
||||
if (mode == MOLECULE) odist += onemol->molradius;
|
||||
odistsq = odist * odist;
|
||||
}
|
||||
|
||||
@ -813,25 +815,43 @@ void CreateAtoms::add_random()
|
||||
// check for overlap of new atom/mol with all other atoms
|
||||
// including prior insertions
|
||||
// minimum_image() needed to account for distances across PBC
|
||||
// new molecule only checks its center pt against others
|
||||
// odistsq is expanded for mode=MOLECULE to account for molecule size
|
||||
|
||||
if (overlapflag) {
|
||||
double **x = atom->x;
|
||||
int nlocal = atom->nlocal;
|
||||
|
||||
int reject = 0;
|
||||
for (int i = 0; i < nlocal; i++) {
|
||||
delx = xone[0] - x[i][0];
|
||||
dely = xone[1] - x[i][1];
|
||||
delz = xone[2] - x[i][2];
|
||||
domain->minimum_image(delx, dely, delz);
|
||||
distsq = delx * delx + dely * dely + delz * delz;
|
||||
if (distsq < odistsq) {
|
||||
reject = 1;
|
||||
break;
|
||||
if (mode == ATOM) {
|
||||
for (int i = 0; i < nlocal; i++) {
|
||||
delx = xone[0] - x[i][0];
|
||||
dely = xone[1] - x[i][1];
|
||||
delz = xone[2] - x[i][2];
|
||||
domain->minimum_image(delx, dely, delz);
|
||||
distsq = delx * delx + dely * dely + delz * delz;
|
||||
if (distsq < odistsq) {
|
||||
reject = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (comm->me == 0) get_xmol(xone);
|
||||
MPI_Bcast(&xmol[0][0], onemol->natoms*3, MPI_DOUBLE, 0, world);
|
||||
|
||||
for (int i = 0; i < nlocal; i++) {
|
||||
for (int j = 0; j < onemol->natoms; j++) {
|
||||
delx = xmol[j][0] - x[i][0];
|
||||
dely = xmol[j][1] - x[i][1];
|
||||
delz = xmol[j][2] - x[i][2];
|
||||
domain->minimum_image(delx, dely, delz);
|
||||
distsq = delx * delx + dely * dely + delz * delz;
|
||||
if (distsq < odistsq) {
|
||||
reject = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int reject_any;
|
||||
MPI_Allreduce(&reject, &reject_any, 1, MPI_INT, MPI_MAX, world);
|
||||
if (reject_any) continue;
|
||||
@ -858,7 +878,11 @@ void CreateAtoms::add_random()
|
||||
if (mode == ATOM) {
|
||||
atom->avec->create_atom(ntype, xone);
|
||||
} else {
|
||||
add_molecule(xone);
|
||||
|
||||
// atomic coordinates calculated above for overlap check
|
||||
|
||||
if (!overlapflag) get_xmol(xone);
|
||||
add_molecule();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1429,7 +1453,8 @@ void CreateAtoms::loop_lattice(int action)
|
||||
if (mode == ATOM) {
|
||||
atom->avec->create_atom(basistype[m], x);
|
||||
} else {
|
||||
add_molecule(x);
|
||||
get_xmol(x);
|
||||
add_molecule();
|
||||
}
|
||||
} else if (action == COUNT) {
|
||||
if (nlatt == MAXSMALLINT) nlatt_overflow = 1;
|
||||
@ -1437,7 +1462,8 @@ void CreateAtoms::loop_lattice(int action)
|
||||
if (mode == ATOM) {
|
||||
atom->avec->create_atom(basistype[m], x);
|
||||
} else {
|
||||
add_molecule(x);
|
||||
get_xmol(x);
|
||||
add_molecule();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1452,7 +1478,7 @@ void CreateAtoms::loop_lattice(int action)
|
||||
add a molecule with its center at center
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
void CreateAtoms::add_molecule(double *center)
|
||||
void CreateAtoms::get_xmol(double *center)
|
||||
{
|
||||
double r[3], rotmat[3][3];
|
||||
|
||||
@ -1475,10 +1501,6 @@ void CreateAtoms::add_molecule(double *center)
|
||||
|
||||
MathExtra::quat_to_mat(quatone, rotmat);
|
||||
|
||||
// create atoms in molecule with atom ID = 0 and mol ID = 0
|
||||
// IDs are reset in caller after all molecules created by all procs
|
||||
// pass add_molecule_atom an offset of 0 since don't know
|
||||
// max tag of atoms in previous molecules at this point
|
||||
// onemol->quat_external is used by atom->add_moleclue_atom()
|
||||
|
||||
onemol->quat_external = quatone;
|
||||
@ -1488,9 +1510,25 @@ void CreateAtoms::add_molecule(double *center)
|
||||
for (int m = 0; m < natoms; m++) {
|
||||
MathExtra::matvec(rotmat, onemol->dx[m], xnew);
|
||||
MathExtra::add3(xnew, center, xnew);
|
||||
atom->avec->create_atom(ntype + onemol->type[m], xnew);
|
||||
n = atom->nlocal - 1;
|
||||
atom->add_molecule_atom(onemol, m, n, 0);
|
||||
for (int i = 0; i < 3; i++)
|
||||
xmol[m][i] = xnew[i];
|
||||
}
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
add a molecule with atom coordinates from xmol
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
void CreateAtoms::add_molecule()
|
||||
{
|
||||
// create atoms in molecule with atom ID = 0 and mol ID = 0
|
||||
// IDs are reset in caller after all molecules created by all procs
|
||||
// pass add_molecule_atom an offset of 0 since don't know
|
||||
// max tag of atoms in previous molecules at this point
|
||||
|
||||
for (int m = 0; m < onemol->natoms; m++) {
|
||||
atom->avec->create_atom(ntype + onemol->type[m], xmol[m]);
|
||||
atom->add_molecule_atom(onemol, m, atom->nlocal - 1, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -40,7 +40,7 @@ class CreateAtoms : public Command {
|
||||
bigint nsubset;
|
||||
double subsetfrac;
|
||||
int *basistype;
|
||||
double xone[3], quatone[4];
|
||||
double xone[3], quatone[4], **xmol;
|
||||
double radthresh, radscale, mesh_density;
|
||||
|
||||
int varflag, vvar, xvar, yvar, zvar;
|
||||
@ -71,7 +71,8 @@ class CreateAtoms : public Command {
|
||||
int add_quasirandom(const double[3][3], tagint);
|
||||
void add_lattice();
|
||||
void loop_lattice(int);
|
||||
void add_molecule(double *);
|
||||
void get_xmol(double *);
|
||||
void add_molecule();
|
||||
int vartest(double *); // evaluate a variable with new atom position
|
||||
};
|
||||
|
||||
|
||||
@ -166,11 +166,12 @@ int DumpAtom::modify_param(int narg, char **arg)
|
||||
}
|
||||
|
||||
if (strcmp(arg[0],"triclinic/general") == 0) {
|
||||
triclinic_general = 1;
|
||||
if (narg < 2) error->all(FLERR,"Illegal dump_modify command");
|
||||
triclinic_general = utils::logical(FLERR,arg[1],false,lmp);
|
||||
if (triclinic_general && !domain->triclinic_general)
|
||||
error->all(FLERR,"Dump_modify triclinic/general cannot be used "
|
||||
"if simulation box is not general triclinic");
|
||||
return 1;
|
||||
return 2;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@ -1766,7 +1766,8 @@ int DumpCustom::modify_param(int narg, char **arg)
|
||||
if (narg < 2) error->all(FLERR,"Illegal dump_modify command");
|
||||
triclinic_general = utils::logical(FLERR,arg[1],false,lmp);
|
||||
if (triclinic_general && !domain->triclinic_general)
|
||||
error->all(FLERR,"Dump_modify triclinic/general invalid b/c simulation box is not");
|
||||
error->all(FLERR,"Dump_modify triclinic/general cannot be used "
|
||||
"if simulation box is not general triclinic");
|
||||
return 2;
|
||||
}
|
||||
|
||||
|
||||
21
src/fix.cpp
21
src/fix.cpp
@ -119,8 +119,8 @@ Fix::~Fix()
|
||||
{
|
||||
if (copymode) return;
|
||||
|
||||
delete [] id;
|
||||
delete [] style;
|
||||
delete[] id;
|
||||
delete[] style;
|
||||
memory->destroy(eatom);
|
||||
memory->destroy(vatom);
|
||||
memory->destroy(cvatom);
|
||||
@ -133,36 +133,37 @@ Fix::~Fix()
|
||||
|
||||
void Fix::modify_params(int narg, char **arg)
|
||||
{
|
||||
if (narg == 0) error->all(FLERR,"Illegal fix_modify command");
|
||||
if (narg == 0) utils::missing_cmd_args(FLERR, "fix_modify", error);
|
||||
|
||||
int iarg = 0;
|
||||
while (iarg < narg) {
|
||||
if (strcmp(arg[iarg],"dynamic/dof") == 0) {
|
||||
if (iarg+2 > narg) error->all(FLERR,"Illegal fix_modify command");
|
||||
if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "fix_modify dynamic/dof", error);
|
||||
dynamic = utils::logical(FLERR,arg[iarg+1],false,lmp);
|
||||
iarg += 2;
|
||||
} else if (strcmp(arg[iarg],"energy") == 0) {
|
||||
if (iarg+2 > narg) error->all(FLERR,"Illegal fix_modify command");
|
||||
if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "fix_modify energy", error);
|
||||
thermo_energy = utils::logical(FLERR,arg[iarg+1],false,lmp);
|
||||
if (thermo_energy && !energy_global_flag && !energy_peratom_flag)
|
||||
error->all(FLERR,"Fix {} {} does not support fix_modify energy command", id, style);
|
||||
iarg += 2;
|
||||
} else if (strcmp(arg[iarg],"virial") == 0) {
|
||||
if (iarg+2 > narg) error->all(FLERR,"Illegal fix_modify command");
|
||||
if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "fix_modify virial", error);
|
||||
thermo_virial = utils::logical(FLERR,arg[iarg+1],false,lmp);
|
||||
if (thermo_virial && !virial_global_flag && !virial_peratom_flag)
|
||||
error->all(FLERR,"Fix {} {} does not support fix_modify virial command", id, style);
|
||||
iarg += 2;
|
||||
} else if (strcmp(arg[iarg],"respa") == 0) {
|
||||
if (iarg+2 > narg) error->all(FLERR,"Illegal fix_modify command");
|
||||
if (!respa_level_support) error->all(FLERR,"Illegal fix_modify command");
|
||||
if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "fix_modify respa", error);
|
||||
if (!respa_level_support) error->all(FLERR,"Illegal fix_modify respa command");
|
||||
int lvl = utils::inumeric(FLERR,arg[iarg+1],false,lmp);
|
||||
if (lvl < 0) error->all(FLERR,"Illegal fix_modify command");
|
||||
if (lvl < 0) error->all(FLERR,"Illegal fix_modify respa command");
|
||||
respa_level = lvl-1;
|
||||
iarg += 2;
|
||||
} else {
|
||||
int n = modify_param(narg-iarg,&arg[iarg]);
|
||||
if (n == 0) error->all(FLERR,"Illegal fix_modify command");
|
||||
if (n == 0)
|
||||
error->all(FLERR,"Fix {} {} does not support fix_modify {} command", id, style, arg[iarg]);
|
||||
iarg += n;
|
||||
}
|
||||
}
|
||||
|
||||
@ -63,7 +63,7 @@ irregular(nullptr), set(nullptr)
|
||||
int nskip;
|
||||
if (utils::strmatch(style, "^deform/pressure")) {
|
||||
child_parameters.insert("box");
|
||||
child_styles.insert({{"pressure", 4}, {"pressure/mean", 4}, {"volume", 2}});
|
||||
child_styles.insert({{"pressure", 4}, {"pressure/mean", 4}, {"erate/rescale", 3}, {"volume", 2}});
|
||||
}
|
||||
|
||||
// set defaults
|
||||
|
||||
@ -29,7 +29,7 @@ class FixDeform : public Fix {
|
||||
int remapflag; // whether x,v are remapped across PBC
|
||||
int dimflag[6]; // which dims are deformed
|
||||
|
||||
enum { NONE, FINAL, DELTA, SCALE, VEL, ERATE, TRATE, VOLUME, WIGGLE, VARIABLE, PRESSURE, PMEAN };
|
||||
enum { NONE, FINAL, DELTA, SCALE, VEL, ERATE, TRATE, VOLUME, WIGGLE, VARIABLE, PRESSURE, PMEAN, ERATERS };
|
||||
enum { ONE_FROM_ONE, ONE_FROM_TWO, TWO_FROM_ONE };
|
||||
|
||||
FixDeform(class LAMMPS *, int, char **);
|
||||
|
||||
@ -56,6 +56,9 @@ void PairDeprecated::settings(int, char **)
|
||||
utils::logmesg(lmp,
|
||||
"\nPair style 'mesont/tpm' has been removed from LAMMPS. "
|
||||
"Please use pair style 'mesocnt' instead\n\n");
|
||||
} else if (utils::strmatch(my_style, "^meam/c")) {
|
||||
if (lmp->comm->me == 0)
|
||||
utils::logmesg(lmp, "\nPair style 'meam/c' has been renamed to 'meam'\n\n");
|
||||
}
|
||||
error->all(FLERR, "This pair style is no longer available");
|
||||
}
|
||||
|
||||
@ -14,6 +14,7 @@
|
||||
#ifdef PAIR_CLASS
|
||||
// clang-format off
|
||||
PairStyle(DEPRECATED,PairDeprecated);
|
||||
PairStyle(meam/c,PairDeprecated);
|
||||
PairStyle(reax,PairDeprecated);
|
||||
PairStyle(reax/c,PairDeprecated);
|
||||
PairStyle(mesont/tpm,PairDeprecated);
|
||||
|
||||
1027
src/replicate.cpp
1027
src/replicate.cpp
File diff suppressed because it is too large
Load Diff
@ -22,12 +22,37 @@ CommandStyle(replicate,Replicate);
|
||||
|
||||
#include "command.h"
|
||||
|
||||
#include <unordered_map>
|
||||
|
||||
namespace LAMMPS_NS {
|
||||
|
||||
class Replicate : public Command {
|
||||
public:
|
||||
Replicate(class LAMMPS *);
|
||||
void command(int, char **) override;
|
||||
|
||||
private:
|
||||
int bbox_flag, bond_flag;
|
||||
|
||||
class Atom *old;
|
||||
|
||||
double old_xprd, old_yprd, old_zprd;
|
||||
double old_xy, old_xz, old_yz;
|
||||
|
||||
int _imagelo[3], _imagehi[3];
|
||||
|
||||
double **old_x;
|
||||
double old_prd_half[3], old_center[3];
|
||||
tagint *old_tag;
|
||||
tagint maxtag, maxmol;
|
||||
int thisrep[3], allnrep[3];
|
||||
|
||||
std::unordered_map<tagint, int> old_map;
|
||||
|
||||
void replicate_by_proc(int, int, int, double *, double *, double *);
|
||||
void replicate_by_bbox(int, int, int, double *, double *, double *);
|
||||
|
||||
void newtag(tagint, tagint &);
|
||||
};
|
||||
|
||||
} // namespace LAMMPS_NS
|
||||
|
||||
@ -1 +1,2 @@
|
||||
#define LAMMPS_VERSION "17 Apr 2024"
|
||||
#define LAMMPS_UPDATE "Development"
|
||||
|
||||
@ -110,16 +110,31 @@ TEST_F(Advanced_utils, expand_args)
|
||||
{
|
||||
atomic_system();
|
||||
BEGIN_CAPTURE_OUTPUT();
|
||||
command("compute temp all temp");
|
||||
command("variable temp vector c_temp");
|
||||
command("variable step equal step");
|
||||
command("variable pe equal pe");
|
||||
command("variable pe equal pe");
|
||||
command("variable epair equal epair");
|
||||
command("compute gofr all rdf 20 1 1 1 2");
|
||||
command("fix 1 all ave/time 1 1 1 v_step v_pe v_epair");
|
||||
command("fix 2 all nve");
|
||||
command("run 1 post no");
|
||||
try {
|
||||
command("compute temp all temp");
|
||||
command("variable temp vector c_temp");
|
||||
command("variable step equal step");
|
||||
command("variable pe equal pe");
|
||||
command("variable pe equal pe");
|
||||
command("variable epair equal epair");
|
||||
command("compute gofr all rdf 20 1 1 1 2");
|
||||
command("fix 1 all ave/time 1 1 1 v_step v_pe v_epair");
|
||||
command("fix 2 all nve");
|
||||
command("run 1 post no");
|
||||
} catch (LAMMPSAbortException &ae) {
|
||||
fprintf(stderr, "LAMMPS Error: %s\n", ae.what());
|
||||
exit(2);
|
||||
} catch (LAMMPSException &e) {
|
||||
fprintf(stderr, "LAMMPS Error: %s\n", e.what());
|
||||
exit(3);
|
||||
} catch (fmt::format_error &fe) {
|
||||
fprintf(stderr, "fmt::format_error: %s\n", fe.what());
|
||||
exit(4);
|
||||
} catch (std::exception &e) {
|
||||
fprintf(stderr, "General exception: %s\n", e.what());
|
||||
exit(5);
|
||||
}
|
||||
|
||||
auto output = END_CAPTURE_OUTPUT();
|
||||
|
||||
char **args, **earg;
|
||||
|
||||
Reference in New Issue
Block a user