Merge remote-tracking branch 'github/develop' into pair_style_tutorial

This commit is contained in:
Axel Kohlmeyer
2023-03-02 10:34:31 -05:00
80 changed files with 9595 additions and 434 deletions

View File

@ -60,9 +60,9 @@ if(GPU_API STREQUAL "CUDA")
option(CUDA_MPS_SUPPORT "Enable tweaks to support CUDA Multi-process service (MPS)" OFF)
if(CUDA_MPS_SUPPORT)
if(CUDPP_OPT)
message(FATAL_ERROR "Must use -DCUDPP_OPT=OFF with -DGPU_CUDA_MPS_SUPPORT=ON")
message(FATAL_ERROR "Must use -DCUDPP_OPT=OFF with -DCUDA_MPS_SUPPORT=ON")
endif()
set(GPU_CUDA_MPS_FLAGS "-DCUDA_PROXY")
set(GPU_CUDA_MPS_FLAGS "-DCUDA_MPS_SUPPORT")
endif()
set(GPU_ARCH "sm_50" CACHE STRING "LAMMPS GPU CUDA SM primary architecture (e.g. sm_60)")

View File

@ -214,7 +214,7 @@ style_check : $(VENV)
package_check : $(VENV)
@(\
. $(VENV)/bin/activate ; env PYTHONWARNINGS= PYTHONDONTWRITEBYTECODE=1 \\
. $(VENV)/bin/activate ; env PYTHONWARNINGS= PYTHONDONTWRITEBYTECODE=1 \
python utils/check-packages.py -s ../src -d src ;\
deactivate ;\
)

View File

@ -104,6 +104,7 @@ KOKKOS, o = OPENMP, t = OPT.
* :doc:`pe/tally <compute_tally>`
* :doc:`plasticity/atom <compute_plasticity_atom>`
* :doc:`pressure <compute_pressure>`
* :doc:`pressure/alchemy <compute_pressure_alchemy>`
* :doc:`pressure/uef <compute_pressure_uef>`
* :doc:`property/atom <compute_property_atom>`
* :doc:`property/chunk <compute_property_chunk>`

View File

@ -29,6 +29,7 @@ OPT.
* :doc:`adapt/fep <fix_adapt_fep>`
* :doc:`addforce <fix_addforce>`
* :doc:`addtorque <fix_addtorque>`
* :doc:`alchemy <fix_alchemy>`
* :doc:`amoeba/bitorsion <fix_amoeba_bitorsion>`
* :doc:`amoeba/pitorsion <fix_amoeba_pitorsion>`
* :doc:`append/atoms <fix_append_atoms>`
@ -263,6 +264,7 @@ OPT.
* :doc:`wall/lj1043 <fix_wall>`
* :doc:`wall/lj126 <fix_wall>`
* :doc:`wall/lj93 (k) <fix_wall>`
* :doc:`wall/lepton <fix_wall>`
* :doc:`wall/morse <fix_wall>`
* :doc:`wall/piston <fix_wall_piston>`
* :doc:`wall/reflect (k) <fix_wall_reflect>`
@ -270,4 +272,5 @@ OPT.
* :doc:`wall/region <fix_wall_region>`
* :doc:`wall/region/ees <fix_wall_ees>`
* :doc:`wall/srd <fix_wall_srd>`
* :doc:`wall/table <fix_wall>`
* :doc:`widom <fix_widom>`

View File

@ -320,7 +320,8 @@ eam generate tool
-----------------------------
The tools/eam_generate directory contains several one-file C programs
that convert an analytic formula into a tabulated :doc:`embedded atom method (EAM) <pair_eam>` setfl potential file. The potentials they
that convert an analytic formula into a tabulated :doc:`embedded atom
method (EAM) <pair_eam>` setfl potential file. The potentials they
produce are in the potentials directory, and can be used with the
:doc:`pair_style eam/alloy <pair_eam>` command.

View File

@ -258,6 +258,7 @@ The individual style names on the :doc:`Commands compute <Commands_compute>` pag
* :doc:`pe/tally <compute_tally>` - potential energy between two groups of atoms via the tally callback mechanism
* :doc:`plasticity/atom <compute_plasticity_atom>` - Peridynamic plasticity for each atom
* :doc:`pressure <compute_pressure>` - total pressure and pressure tensor
* :doc:`pressure/alchemy <compute_pressure_alchemy>` - mixed system total pressure and pressure tensor for :doc:`fix alchemy <fix_alchemy>` runs
* :doc:`pressure/uef <compute_pressure_uef>` - pressure tensor in the reference frame of an applied flow field
* :doc:`property/atom <compute_property_atom>` - convert atom attributes to per-atom vectors/arrays
* :doc:`property/chunk <compute_property_chunk>` - extract various per-chunk attributes

View File

@ -0,0 +1,80 @@
.. index:: compute pressure/alchemy
compute pressure/alchemy command
================================
Syntax
""""""
.. code-block:: LAMMPS
compute ID group-ID pressure/alchemy fix-ID
* ID, group-ID are documented in :doc:`compute <compute>` command
* pressure/alchemy = style name of this compute command
* fix-ID = ID of :doc:`fix alchemy <fix_alchemy>` command
Examples
""""""""
.. code-block:: LAMMPS
fix trans all alchemy
compute mixed all pressure/alchemy trans
thermo_modify press mixed
Description
"""""""""""
.. versionadded:: TBD
Define a compute style that makes the "mixed" system pressure available
for a system that uses the :doc:`fix alchemy <fix_alchemy>` command to
transform one topology to another. This can be used in combination with
either :doc:`thermo_modify press <thermo_modify>` or :doc:`fix_modify
press <fix_modify>` to output and access a pressure consistent with the
simulated combined two topology system.
The actual pressure is determined with :doc:`compute pressure
<compute_pressure>` commands that are internally used by :doc:`fix
alchemy <fix_alchemy>` for each topology individually and then combined.
This command just extracts the information from the fix.
The ``examples/PACKAGES/alchemy`` folder contains an example input for this command.
----------
Output info
"""""""""""
This compute calculates a global scalar (the pressure) and a global
vector of length 6 (the pressure tensor), which can be accessed by
indices 1--6. These values can be used by any command that uses global
scalar or vector values from a compute as input. See the :doc:`Howto
output <Howto_output>` page for an overview of LAMMPS output options.
The ordering of values in the symmetric pressure tensor is as follows:
:math:`p_{xx},` :math:`p_{yy},` :math:`p_{zz},` :math:`p_{xy},`
:math:`p_{xz},` :math:`p_{yz}.`
The scalar and vector values calculated by this compute are "intensive".
The scalar and vector values will be in pressure :doc:`units <units>`.
Restrictions
""""""""""""
This compute is part of the REPLICA package. It is only enabled if
LAMMPS was built with that package. See the :doc:`Build package
<Build_package>` page for more info.
Related commands
""""""""""""""""
:doc:`fix alchemy <fix_alchemy>`, :doc:`compute pressure <compute_pressure>`,
:doc:`thermo_modify <thermo_modify>`, :doc:`fix_modify <fix_modify>`
Default
"""""""
none

View File

@ -181,6 +181,7 @@ accelerated styles exist.
* :doc:`adapt/fep <fix_adapt_fep>` - enhanced version of fix adapt
* :doc:`addforce <fix_addforce>` - add a force to each atom
* :doc:`addtorque <fix_addtorque>` - add a torque to a group of atoms
* :doc:`alchemy <fix_alchemy>` - perform an "alchemical transformation" between two partitions
* :doc:`amoeba/bitorsion <fix_amoeba_bitorsion>` - torsion/torsion terms in AMOEBA force field
* :doc:`amoeba/pitorsion <fix_amoeba_pitorsion>` - 6-body terms in AMOEBA force field
* :doc:`append/atoms <fix_append_atoms>` - append atoms to a running simulation
@ -415,6 +416,7 @@ accelerated styles exist.
* :doc:`wall/lj1043 <fix_wall>` - Lennard-Jones 10--4--3 wall
* :doc:`wall/lj126 <fix_wall>` - Lennard-Jones 12--6 wall
* :doc:`wall/lj93 <fix_wall>` - Lennard-Jones 9--3 wall
* :doc:`wall/lepton <fix_wall>` - Custom Lepton expression wall
* :doc:`wall/morse <fix_wall>` - Morse potential wall
* :doc:`wall/piston <fix_wall_piston>` - moving reflective piston wall
* :doc:`wall/reflect <fix_wall_reflect>` - reflecting wall(s)
@ -422,6 +424,7 @@ accelerated styles exist.
* :doc:`wall/region <fix_wall_region>` - use region surface as wall
* :doc:`wall/region/ees <fix_wall_ees>` - use region surface as wall for ellipsoidal particles
* :doc:`wall/srd <fix_wall_srd>` - slip/no-slip wall for SRD particles
* :doc:`wall/table <fix_wall>` - Tabulated potential wall wall
* :doc:`widom <fix_widom>` - Widom insertions of atoms or molecules
Restrictions

137
doc/src/fix_alchemy.rst Normal file
View File

@ -0,0 +1,137 @@
.. index:: fix alchemy
fix alchemy command
===================
Syntax
""""""
.. parsed-literal::
fix ID group-ID alchemy v_name
* ID, group-ID are documented in :doc:`fix <fix>` command
* alchemy = style name of this fix command
* v_name = variable with name that determines the :math:`\lambda_p` value
Examples
""""""""
.. code-block:: LAMMPS
fix trans all alchemy v_ramp
Description
"""""""""""
.. versionadded:: TBD
This fix command enables running an "alchemical transformation" MD
simulation between two topologies (i.e. the same number and positions of
atoms, but differences in atom parameters like type, charge, bonds,
angles and so on). For this a :ref:`multi-partition run <partition>` is
required with exactly two partitions. During the MD run, the fix will
will determine a factor, :math:`\lambda_p`, for each partition *p* that
will be taken from an equal style or equivalent :doc:`variable
<variable>`. Typically, this variable would be chose to linearly ramp
*down* from 1.0 to 0.0 for the *first* partition (*p=0*) and linearly
ramp *up* from 0.0 to 1.0 for the *second* partition (*p=1*). The
forces used for the propagation of the atoms will be the sum of the
forces of the two systems combined and scaled with their respective
:math:`\lambda_p` factor. This allows to perform transformations that
are not easily possible with :doc:`pair style hybrid/scaled
<pair_hybrid>`, :doc:`fix adapt <fix_adapt>` or :doc:`fix adapt/fep
<fix_adapt_fep>`.
.. note::
Since the definition of the variable to provide the :math:`\lambda_p` is
independent in the two partitions, no check is made that the two values
remain between 0.0 and 1.0 and that they add up to 1.0. So care needs to
be taken when defining those variables that this is the case.
Due to the specifics of the implementation, the initial geometry and
dimensions of the system must be exactly the same and the fix will
synchronize them during the run. It is thus not possible to initialize
the two partitions by reading different data files or creating different
systems from scratch, but rather they have to be started from the same
system and then the desired modifications need to be applied to the
system of the second partition. The commands :doc:`pair style
hybrid/scaled <pair_hybrid>`, :doc:`fix adapt <fix_adapt>` or :doc:`fix
adapt/fep <fix_adapt_fep>` could be used for simulations where the
requirements for fix alchemy are not given.
The commands below demonstrate how the setup for the second partition
can be done for the example of transforming a pure copper system into a
copper/aluminum bronze.
.. code-block:: LAMMPS
variable name world pure alloy
create_box 2 box
create_atoms 1 box
pair_style eam/alloy
pair_coeff * * AlCu.eam.alloy Cu Al
# replace 5% of copper with aluminum on the second partition only
variable name world pure alloy
if "${name} == alloy" then &
"set type 1 type/fraction 2 0.05 6745234"
# define ramp variable to combine the two different partitions
if "${name} == pure" then &
"variable ramp equal ramp(1.0,0.0)" &
else &
"variable ramp equal ramp(0.0,1.0)"
fix 2 all alchemy v_ramp
The ``examples/PACKAGES/alchemy`` folder contains complete example
inputs for this command.
----------
Restart, fix_modify, output, run start/stop, minimize info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to :doc:`binary restart files <restart>`.
None of the :doc:`fix_modify <fix_modify>` options are relevant to this fix.
This fix stores a global scalar (the current value of :math:`\lambda_p`)
and a global vector of length 3 which contains the potential energy of
the first partition, the second partition and the combined value,
respectively. The global scalar is unitless and "intensive", the vector
is in :doc:`energy units <units>` and "extensive". These values can be
used by any command that uses a global value from a fix as input. See
the :doc:`Howto output <Howto_output>` doc page for an overview of
LAMMPS output options.
This fix is not invoked during :doc:`energy minimization <minimize>`.
Restrictions
""""""""""""
This fix is part of the REPLICA package. It is only enabled if LAMMPS
was built with that package. See the :doc:`Build package
<Build_package>` page for more info.
There may be only one instance of this fix in use at any time.
This fix requires to perform a :ref:`multi-partition run <partition>`
with *exactly* two partitions.
This fix is *not* compatible with :doc:`load balancing <fix_balance>`.
Related commands
""""""""""""""""
:doc:`compute pressure/alchemy <compute_pressure_alchemy>` command,
:doc:`fix adapt <fix_adapt>` command, :doc:`fix adapt/fep <fix_adapt_fep>`
command, :doc:`pair_style hybrid/scaled <pair_hybrid>` command.
Default
"""""""
none

View File

@ -4,7 +4,9 @@
.. index:: fix wall/lj1043
.. index:: fix wall/colloid
.. index:: fix wall/harmonic
.. index:: fix wall/lepton
.. index:: fix wall/morse
.. index:: fix wall/table
fix wall/lj93 command
=====================
@ -23,20 +25,31 @@ fix wall/colloid command
fix wall/harmonic command
=========================
fix wall/lepton command
=========================
fix wall/morse command
======================
fix wall/table command
=========================
Syntax
""""""
.. parsed-literal::
fix ID group-ID style face args ... keyword value ...
fix ID group-ID style [tabstyle] [N] face args ... keyword value ...
* ID, group-ID are documented in :doc:`fix <fix>` command
* style = *wall/lj93* or *wall/lj126* or *wall/lj1043* or *wall/colloid* or *wall/harmonic* or *wall/morse*
* style = *wall/lj93* or *wall/lj126* or *wall/lj1043* or *wall/colloid* or *wall/harmonic* or *wall/lepton* or *wall/morse* or *wall/table*
* tabstyle = *linear* or *spline* = method of table interpolation (only applies to *wall/table*)
* N = use N values in *linear* or *spline* interpolation (only applies to *wall/table*)
* one or more face/arg pairs may be appended
* face = *xlo* or *xhi* or *ylo* or *yhi* or *zlo* or *zhi*
.. spacer
* args for styles *lj93* or *lj126* or *lj1043* or *colloid* or *harmonic*
.. parsed-literal::
@ -50,7 +63,19 @@ Syntax
epsilon can be a variable (see below)
sigma = size factor for wall-particle interaction (distance units)
sigma can be a variable (see below)
cutoff = distance from wall at which wall-particle interaction is cut off (distance units)
cutoff = distance from wall at which wall-particle interactions are cut off (distance units)
* args for style *lepton*
.. parsed-literal::
args = coord expression cutoff
coord = position of wall = EDGE or constant or variable
EDGE = current lo or hi edge of simulation box
constant = number like 0.0 or -30.0 (distance units)
variable = :doc:`equal-style variable <variable>` like v_x or v_wiggle
expression = Lepton expression for the potential (energy units)
cutoff = distance from wall at which wall-particle interactions are cut off (distance units)
* args for style *morse*
@ -67,7 +92,20 @@ Syntax
alpha can be a variable (see below)
r_0 = distance of the potential minimum from the face of region (distance units)
r_0 can be a variable (see below)
cutoff = distance from wall at which wall-particle interaction is cut off (distance units)
cutoff = distance from wall at which wall-particle interactions are cut off (distance units)
* args for style *table*
.. parsed-literal::
args = coord filename keyword cutoff
coord = position of wall = EDGE or constant or variable
EDGE = current lo or hi edge of simulation box
constant = number like 0.0 or -30.0 (distance units)
variable = :doc:`equal-style variable <variable>` like v_x or v_wiggle
filename = file containing tabulated energy and force values
keyword = section identifier to select a specific table in table file
cutoff = distance from wall at which wall-particle interactions are cut off (distance units)
* zero or more keyword/value pairs may be appended
* keyword = *units* or *fld* or *pbc*
@ -91,9 +129,13 @@ Examples
fix wallhi all wall/lj93 xlo -1.0 1.0 1.0 2.5 units box
fix wallhi all wall/lj93 xhi EDGE 1.0 1.0 2.5
fix wallhi all wall/harmonic xhi EDGE 100.0 0.0 4.0 units box
fix wallhi all wall/morse xhi EDGE 1.0 1.0 1.0 2.5 units box
fix wallhi all wall/lj126 v_wiggle 23.2 1.0 1.0 2.5
fix zwalls all wall/colloid zlo 0.0 1.0 1.0 0.858 zhi 40.0 1.0 1.0 0.858
fix xwall mobile wall/table spline 200 EDGE -5.0 walltab.dat HARMONIC 4.0
fix xwalls mobile wall/lepton xlo -5.0 "k*(r-rc)^2;k=100.0" 4.0 xhi 5.0 "k*(r-rc)^2;k=100.0" 4.0
Description
"""""""""""
@ -103,7 +145,7 @@ wall that interacts with the atoms in the group by generating a force
on the atom in a direction perpendicular to the wall. The energy of
wall-particle interactions depends on the style.
For style *wall/lj93*, the energy E is given by the 9/3 potential:
For style *wall/lj93*, the energy E is given by the 9-3 Lennard-Jones potential:
.. math::
@ -111,7 +153,7 @@ For style *wall/lj93*, the energy E is given by the 9/3 potential:
\left(\frac{\sigma}{r}\right)^3 \right]
\qquad r < r_c
For style *wall/lj126*, the energy E is given by the 12/6 potential:
For style *wall/lj126*, the energy E is given by the 12-6 Lennard-Jones potential:
.. math::
@ -119,7 +161,7 @@ For style *wall/lj126*, the energy E is given by the 12/6 potential:
\left(\frac{\sigma}{r}\right)^6 \right]
\qquad r < r_c
For style *wall/lj1043*, the energy E is given by the 10/4/3 potential:
For style *wall/lj1043*, the energy E is given by the 10-4-3 Lennard-Jones potential:
.. math::
@ -138,8 +180,8 @@ of the :doc:`pair_style colloid <pair_colloid>` potential:
& \left. - \frac{1}{6} \left(\frac{2R(D+R) + D(D+2R)
\left[ \ln D - \ln (D+2R) \right]}{D(D+2R)} \right) \right] \qquad r < r_c
For style *wall/harmonic*, the energy E is given by a harmonic spring
potential:
For style *wall/harmonic*, the energy E is given by a repulsive-only harmonic
spring potential:
.. math::
@ -152,6 +194,56 @@ For style *wall/morse*, the energy E is given by a Morse potential:
E = D_0 \left[ e^{- 2 \alpha (r - r_0)} - 2 e^{- \alpha (r - r_0)} \right]
\qquad r < r_c
For style *wall/lepton*, the energy E is provided as an Lepton
expression string using "r" as the distance variable. The `Lepton
library <https://simtk.org/projects/lepton>`_, that the *wall/lepton*
style interfaces with, evaluates this expression string at run time to
compute the wall-particle energy. It also creates an analytical
representation of the first derivative of this expression with respect
to "r" and then uses that to compute the force between the wall and
atoms in the fix group. The Lepton expression must be either enclosed
in quotes or must not contain any whitespace so that LAMMPS recognizes
it as a single keyword.
Optionally, the expression may use "rc" to refer to the cutoff distance
for the given wall. Further constants in the expression can be defined
in the same string as additional expressions separated by semi-colons.
The expression "k*(r-rc)^2;k=100.0" represents a repulsive-only harmonic
spring as in fix *wall/harmonic* with a force constant *K* (same as
:math:`\epsilon` above) of 100 energy units. More details on the Lepton
expression strings are given below.
For style *wall/table*, the energy E and forces are determined from
interpolation tables listed in one or more files as a function of
distance. The interpolation tables are used to evaluate energy and
forces between particles and the wall similar to how analytic formulas
are used for the other wall styles.
The interpolation tables are created as a pre-computation by fitting
cubic splines to the file values and interpolating energy and force
values at each of *N* distances. During a simulation, the tables are
used to interpolate energy and force values as needed for each wall and
particle separated by a distance *R*\ . The interpolation is done in
one of two styles: *linear* or *spline*\ .
For the *linear* style, the distance *R* is used to find the 2
surrounding table values from which an energy or force is computed by
linear interpolation.
For the *spline* style, cubic spline coefficients are computed and
stored for each of the *N* values in the table, one set of splines for
energy, another for force. Note that these splines are different than
the ones used to pre-compute the *N* values. Those splines were fit
to the *Nfile* values in the tabulated file, where often *Nfile* <
*N*\ . The distance *R* is used to find the appropriate set of spline
coefficients which are used to evaluate a cubic polynomial which
computes the energy or force.
For each wall a filename and a keyword must be provided as in the
examples above. The filename specifies a file containing tabulated
energy and force values. The keyword specifies a section of the file.
The format of this file is described below.
In all cases, *r* is the distance from the particle to the wall at
position *coord*, and :math:`r_c` is the *cutoff* distance at which the
particle and wall no longer interact. The energy of the wall
@ -180,11 +272,12 @@ box parameters and timestep and elapsed time. Thus it is easy to
specify a time-dependent wall position. See examples below.
For the *wall/lj93* and *wall/lj126* and *wall/lj1043* styles,
:math:`\epsilon` and :math:`\sigma` are the usual Lennard-Jones parameters, which
determine the strength and size of the particle as it interacts with
the wall. Epsilon has energy units. Note that this :math:`\epsilon` and
:math:`\sigma` may be different than any :math:`\epsilon` or :math:`\sigma` values defined
for a pair style that computes particle-particle interactions.
:math:`\epsilon` and :math:`\sigma` are the usual Lennard-Jones
parameters, which determine the strength and size of the particle as it
interacts with the wall. Epsilon has energy units. Note that this
:math:`\epsilon` and :math:`\sigma` may be different than any
:math:`\epsilon` or :math:`\sigma` values defined for a pair style that
computes particle-particle interactions.
The *wall/lj93* interaction is derived by integrating over a 3d
half-lattice of Lennard-Jones 12/6 particles. The *wall/lj126*
@ -207,11 +300,11 @@ are the number density of the constituent particles, in the wall and
colloid respectively, in units of 1/volume.
The *wall/colloid* interaction is derived by integrating over
constituent LJ particles of size :math:`\sigma` within the colloid particle
and a 3d half-lattice of Lennard-Jones 12/6 particles of size :math:`\sigma`
in the wall. As mentioned in the preceding paragraph, the density of
particles in the wall and colloid can be different, as specified by
the :math:`\epsilon` prefactor.
constituent LJ particles of size :math:`\sigma` within the colloid
particle and a 3d half-lattice of Lennard-Jones 12/6 particles of size
:math:`\sigma` in the wall. As mentioned in the preceding paragraph,
the density of particles in the wall and colloid can be different, as
specified by the :math:`\epsilon` prefactor.
For the *wall/harmonic* style, :math:`\epsilon` is effectively the spring
constant K, and has units (energy/distance\^2). The input parameter
@ -220,20 +313,21 @@ spring is at the *cutoff*\ . This is a repulsive-only spring since the
interaction is truncated at the *cutoff*
For the *wall/morse* style, the three parameters are in this order:
:math:`D_0` the depth of the potential, :math:`\alpha` the width parameter, and
:math:`r_0` the location of the minimum. :math:`D_0` has energy units, :math:`\alpha`
inverse distance units, and :math:`r_0` distance units.
:math:`D_0` the depth of the potential, :math:`\alpha` the width
parameter, and :math:`r_0` the location of the minimum. :math:`D_0` has
energy units, :math:`\alpha` inverse distance units, and :math:`r_0`
distance units.
For any wall, the :math:`\epsilon` and/or :math:`\sigma` and/or :math:`\alpha` parameter can
be specified
as an :doc:`equal-style variable <variable>`, in which case it should be
For any wall that supports them, the :math:`\epsilon` and/or
:math:`\sigma` and/or :math:`\alpha` parameter can be specified as an
:doc:`equal-style variable <variable>`, in which case it should be
specified as v_name, where name is the variable name. As with a
variable wall position, the variable is evaluated each timestep and
the result becomes the current epsilon or sigma of the wall.
Equal-style variables can specify formulas with various mathematical
functions, and include :doc:`thermo_style <thermo_style>` command
keywords for the simulation box parameters and timestep and elapsed
time. Thus it is easy to specify a time-dependent wall interaction.
variable wall position, the variable is evaluated each timestep and the
result becomes the current epsilon or sigma of the wall. Equal-style
variables can specify formulas with various mathematical functions, and
include :doc:`thermo_style <thermo_style>` command keywords for the
simulation box parameters and timestep and elapsed time. Thus it is
easy to specify a time-dependent wall interaction.
.. note::
@ -266,20 +360,19 @@ define the lattice spacings.
The *fld* keyword can be used with a *yes* setting to invoke the wall
constraint before pairwise interactions are computed. This allows an
implicit FLD model using :doc:`pair_style lubricateU <pair_lubricateU>`
to include the wall force in its calculations. If the setting is
*no*, wall forces are imposed after pairwise interactions, in the
usual manner.
to include the wall force in its calculations. If the setting is *no*,
wall forces are imposed after pairwise interactions, in the usual
manner.
The *pbc* keyword can be used with a *yes* setting to allow walls to
be specified in a periodic dimension. See the
:doc:`boundary <boundary>` command for options on simulation box
boundaries. The default for *pbc* is *no*, which means the system
must be non-periodic when using a wall. But you may wish to use a
periodic box. E.g. to allow some particles to interact with the wall
via the fix group-ID, and others to pass through it and wrap around a
periodic box. In this case you should ensure that the wall if
sufficiently far enough away from the box boundary. If you do not,
then particles may interact with both the wall and with periodic
The *pbc* keyword can be used with a *yes* setting to allow walls to be
specified in a periodic dimension. See the :doc:`boundary <boundary>`
command for options on simulation box boundaries. The default for *pbc*
is *no*, which means the system must be non-periodic when using a wall.
But you may wish to use a periodic box. E.g. to allow some particles to
interact with the wall via the fix group-ID, and others to pass through
it and wrap around a periodic box. In this case you should ensure that
the wall if sufficiently far enough away from the box boundary. If you
do not, then particles may interact with both the wall and with periodic
images on the other side of the box, which is probably not what you
want.
@ -328,6 +421,57 @@ perturbation on the particles:
----------
.. include:: lepton_expression.rst
----------
Table file format
"""""""""""""""""
Suitable tables for use with fix *wall/table* can be created by the
Python code in the ``tools/tabulate`` folder of the LAMMPS source code
distribution.
The format of a tabulated file is as follows (without the parenthesized
comments):
.. parsed-literal::
# Tabulated wall potential UNITS: real
HARMONIC (keyword is the first text on a line)
N 100 FP 200 200
(blank line)
1 0.04 1568.16 792.00 (index, distance to wall, energy, force)
2 0.08 1536.64 784.00
3 0.12 1505.44 776.00
...
99 3.96 0.16 8.00
100 4.00 0 0
A section begins with a non-blank line whose first character is not a
"#"; blank lines or lines starting with "#" can be used as comments
between sections. The first line begins with a keyword which identifies
the section. The line can contain additional text, but the initial text
must match the argument specified in the fix *wall/table* command. The
next line lists (in any order) one or more parameters for the table.
Each parameter is a keyword followed by one or more numeric values.
The parameter "N" is required and its value is the number of table
entries that follow. Note that this may be different than the *N*
specified in the fix *wall/table* command. Let Ntable = *N* in the fix
command, and Nfile = "N" in the tabulated file. What LAMMPS does is a
preliminary interpolation by creating splines using the Nfile tabulated
values as nodal points. It uses these to interpolate as needed to
generate energy and force values at Ntable different points. The
resulting tables of length Ntable are then used as described above, when
computing energy and force for wall-particle interactions. This means that
if you want the interpolation tables of length Ntable to match exactly
what is in the tabulated file (with effectively no preliminary
interpolation), you should set Ntable = Nfile.
----------
Restart, fix_modify, output, run start/stop, minimize info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
@ -354,16 +498,15 @@ fix. This allows to set at which level of the :doc:`r-RESPA
<run_style>` integrator the fix is adding its forces. Default is the
outermost level.
This fix computes a global scalar energy and a global vector of
forces, which can be accessed by various :doc:`output commands
<Howto_output>`. Note that the scalar energy is the sum of
interactions with all defined walls. If you want the energy on a
per-wall basis, you need to use multiple fix wall commands. The
length of the vector is equal to the number of walls defined by the
fix. Each vector value is the normal force on a specific wall. Note
that an outward force on a wall will be a negative value for *lo*
walls and a positive value for *hi* walls. The scalar and vector
values calculated by this fix are "extensive".
This fix computes a global scalar energy and a global vector of forces,
which can be accessed by various :doc:`output commands <Howto_output>`.
Note that the scalar energy is the sum of interactions with all defined
walls. If you want the energy on a per-wall basis, you need to use
multiple fix wall commands. The length of the vector is equal to the
number of walls defined by the fix. Each vector value is the normal
force on a specific wall. Note that an outward force on a wall will be
a negative value for *lo* walls and a positive value for *hi* walls.
The scalar and vector values calculated by this fix are "extensive".
No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command.
@ -386,7 +529,11 @@ invoked by the :doc:`minimize <minimize>` command.
Restrictions
""""""""""""
none
Fix *wall/lepton* is part of the LEPTON package and only enabled if
LAMMPS was built with this package. See the :doc:`Build package
<Build_package>` page for more info.
Related commands
""""""""""""""""

View File

@ -3489,6 +3489,7 @@ sz
Sz
Tabbernor
tabinner
tabstyle
Tadmor
Tafipolsky
tagID

View File

@ -0,0 +1 @@
../../../potentials/AlCu.eam.alloy

View File

@ -0,0 +1,62 @@
# Water molecule. SPC/E model.
3 atoms
2 bonds
1 angles
Coords
1 1.12456 0.09298 1.27452
2 1.53683 0.75606 1.89928
3 0.49482 0.56390 0.65678
Types
1 1
2 2
3 2
Charges
1 -0.8472
2 0.4236
3 0.4236
Bonds
1 1 1 2
2 1 1 3
Angles
1 1 2 1 3
Shake Flags
1 1
2 1
3 1
Shake Atoms
1 1 2 3
2 1 2 3
3 1 2 3
Shake Bond Types
1 1 1 1
2 1 1 1
3 1 1 1
Special Bond Counts
1 2 0 0
2 1 1 0
3 1 1 0
Special Bonds
1 2 3
2 1 3
3 1 2

View File

@ -0,0 +1,45 @@
# Example for an alchemical transformation simulation of pure copper into an aluminium bronze
# set up different names for two partitions
variable name world pure alloy
# create pure copper system
units metal
lattice fcc 3.75
region box block 0 6 0 6 0 6
create_box 2 box
timestep 0.002
create_atoms 1 box
displace_atoms all random 0.3 0.3 0.3 57845645
pair_style eam/alloy
pair_coeff * * AlCu.eam.alloy Cu Al
# replace 5% of copper with aluminium on the second partition only
if "${name} == alloy" then &
"set type 1 type/fraction 2 0.05 6745234"
# define ramp variable to combine the two different partitions
if "${name} == pure" then &
"variable ramp equal ramp(1.0,0.0)" &
else &
"variable ramp equal ramp(0.0,1.0)"
velocity all create 5000.0 6567345
fix 1 all nvt temp 2500.0 500.0 0.002
fix 2 all alchemy v_ramp
compute pressure all pressure/alchemy 2
# only need to output a dump file from one partition
#if "${name} == alloy" then &
# "dump 1 all custom 100 ${name}.lammpstrj id type element x y z" &
# "dump_modify 1 element Cu Al"
thermo_style custom step temp press etotal density pe ke f_2 f_2[3]
thermo_modify colname f_2 lambda colname f_2[3] EPot_mixed
thermo_modify press pressure
thermo 100
run 10000 post no

View File

@ -0,0 +1,100 @@
# Example for an alchemical transformation of two water molecules into a hydronium and hydroxyl ion
# WARNING: This input is intended for demonstrating the method only,
# the force field parameters are mostly made up and NOT suitable for production simulations.
# set up different names for two partitions
variable name world twowater twoions
units real
atom_style full
atom_modify map array
region box block -5 5 -5 5 -5 5
boundary p p p
create_box 2 box bond/types 2 angle/types 2 &
extra/bond/per/atom 3 extra/angle/per/atom 3 extra/special/per/atom 3
mass 1 15.9994
mass 2 1.008
pair_style lj/cut/coul/cut 10.0
pair_coeff 1 1 0.1553 3.166
pair_coeff 1 2 0.0 1.0
pair_coeff 2 2 0.0 1.0
bond_style harmonic
bond_coeff * 1000.0 1.0
angle_style harmonic
angle_coeff * 100.0 109.47
molecule water h2o.mol
# create the two molecules we want to transform ...
create_atoms 0 single -2.0 0.0 0.0 mol water 453624
create_atoms 0 single 2.0 0.0 0.0 mol water 767353
# ... and put them in a group
group transform id 1:6
# now fill the rest of the box with more water
create_atoms 0 random 32 34564 NULL mol water 25367 overlap 1.33
# change topology and settings for the two states
# we cannot simply create a different topology directly or
# load a different data file because the order and position
# of all atoms must be maintained across both replica
# we first have to remove all topology data in the transform group
delete_bonds transform bond 1
delete_bonds transform angle 1 remove
# then generate different topologies for the two partitions. select by name.
if "${name} == twowater" then &
"create_bonds single/bond 2 1 2" &
"create_bonds single/bond 2 1 3" &
"create_bonds single/bond 2 4 5" &
"create_bonds single/bond 2 4 6" &
"create_bonds single/angle 2 2 1 3" &
"create_bonds single/angle 2 5 4 6" &
else &
"create_bonds single/bond 2 1 2" &
"create_bonds single/bond 2 3 4" &
"create_bonds single/bond 2 4 5" &
"create_bonds single/bond 2 4 6" &
"create_bonds single/angle 2 3 4 5" &
"create_bonds single/angle 2 5 4 6" &
"create_bonds single/angle 2 3 4 6" &
"set atom 1 charge -1.1354" &
"set atom 2 charge 0.1354" &
"set atom 3 charge 0.56775" &
"set atom 4 charge -0.70305" &
"set atom 5*6 charge 0.56775"
velocity all create 300.0 5463576
timestep 0.2
# define ramp variable to combine the two different partitions
if "${name} == twowater" then &
"variable ramp equal ramp(1.0,0.0)" &
else &
"variable ramp equal ramp(0.0,1.0)"
# since the trajectory and forces are kept identical through fix alchemy,
# we can do fix npt simulations, but we must use the "mixed" pressure
fix integrate all npt temp 300 300 1.0 iso 1.0 1.0 10.0
fix transform all alchemy v_ramp
compute pressure all pressure/alchemy transform
fix_modify integrate press pressure
# only need to output a dump file from one partition
# if "${name} == twowater" then &
# "dump 1 all atom 100 ${name}.lammpstrj" &
# "dump_modify 1 sort id"
thermo_style custom step temp press etotal density pe ke f_transform f_transform[3]
thermo_modify colname f_transform lambda colname f_transform[3] EPot_mixed
thermo_modify press pressure
thermo 100
run 20000

View File

@ -0,0 +1,13 @@
LAMMPS (8 Feb 2023)
Running on 2 partitions of processors
Starting alchemical transformation at 0%
Alchemical transformation progress: 10%
Alchemical transformation progress: 20%
Alchemical transformation progress: 30%
Alchemical transformation progress: 40%
Alchemical transformation progress: 50%
Alchemical transformation progress: 60%
Alchemical transformation progress: 70%
Alchemical transformation progress: 80%
Alchemical transformation progress: 90%
Alchemical transformation progress: 100%

View File

@ -0,0 +1,169 @@
LAMMPS (8 Feb 2023)
Processor partition = 0
using 1 OpenMP thread(s) per MPI task
# Example for an alchemical transformation simulation of pure copper into an aluminium bronze
# set up different names for two partitions
variable name world pure alloy
# create pure copper system
units metal
lattice fcc 3.75
Lattice spacing in x,y,z = 3.75 3.75 3.75
region box block 0 6 0 6 0 6
create_box 2 box
Created orthogonal box = (0 0 0) to (22.5 22.5 22.5)
1 by 1 by 2 MPI processor grid
timestep 0.002
create_atoms 1 box
Created 864 atoms
using lattice units in orthogonal box = (0 0 0) to (22.5 22.5 22.5)
create_atoms CPU = 0.001 seconds
displace_atoms all random 0.3 0.3 0.3 57845645
Displacing atoms ...
pair_style eam/alloy
pair_coeff * * AlCu.eam.alloy Cu Al
Reading eam/alloy potential file AlCu.eam.alloy with DATE: 2008-10-01
# replace 5% of copper with aluminium on the second partition only
if "${name} == alloy" then "set type 1 type/fraction 2 0.05 6745234"
# define ramp variable to combine the two different partitions
if "${name} == pure" then "variable ramp equal ramp(1.0,0.0)" else "variable ramp equal ramp(0.0,1.0)"
variable ramp equal ramp(1.0,0.0)
velocity all create 5000.0 6567345
fix 1 all nvt temp 2500.0 500.0 0.002
fix 2 all alchemy v_ramp
compute pressure all pressure/alchemy 2
# only need to output a dump file from one partition
#if "${name} == alloy" then # "dump 1 all custom 100 ${name}.lammpstrj id type element x y z" # "dump_modify 1 element Cu Al"
thermo_style custom step temp press etotal density pe ke f_2 f_2[3]
thermo_modify colname f_2 lambda colname f_2[3] EPot_mixed
thermo_modify press pressure
thermo 100
run 10000 post no
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 8.6825
ghost atom cutoff = 8.6825
binsize = 4.34125, bins = 6 6 6
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair eam/alloy, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 3.474 | 3.474 | 3.474 Mbytes
Step Temp Press TotEng Density PotEng KinEng lambda EPot_mixed
0 5000 2135632.8 10911.637 8.0039334 10353.88 557.75753 1 10353.88
100 2424.8703 98461.445 -2402.724 8.0039334 -2673.222 270.49793 0.99 -2673.3837
200 2404.4922 111478.55 -2381.5114 8.0039334 -2649.7361 268.22473 0.98 -2650.057
300 2388.2899 109429.75 -2387.7985 8.0039334 -2654.2158 266.41733 0.97 -2654.7075
400 2377.6418 97114.07 -2409.7114 8.0039334 -2674.9409 265.22953 0.96 -2675.755
500 2371.5028 98285.746 -2408.3248 8.0039334 -2672.8695 264.54471 0.95 -2673.6895
600 2368.0363 101125.13 -2402.9816 8.0039334 -2667.1396 264.15802 0.94 -2668.238
700 2364.8386 96916.491 -2410.1795 8.0039334 -2673.9808 263.80131 0.93 -2675.3394
800 2361.5815 101050.97 -2404.7579 8.0039334 -2668.1958 263.43797 0.92 -2669.6797
900 2355.1085 95290.542 -2416.4508 8.0039334 -2679.1667 262.7159 0.91 -2681.0381
1000 2344.579 90348.199 -2430.3553 8.0039334 -2691.8966 261.54132 0.9 -2693.7969
1100 2328.7808 87089.44 -2435.1426 8.0039334 -2694.9216 259.779 0.89 -2696.9199
1200 2310.0924 89628.642 -2438.4943 8.0039334 -2696.1886 257.69429 0.88 -2698.4983
1300 2288.2762 92771.824 -2430.0042 8.0039334 -2685.2648 255.26065 0.87 -2687.6406
1400 2258.3028 83029.221 -2451.9432 8.0039334 -2703.8603 251.91707 0.86 -2706.638
1500 2226.5131 83386 -2452.9658 8.0039334 -2701.3367 248.37089 0.85 -2704.0915
1600 2192.5777 81801.467 -2460.6692 8.0039334 -2705.2546 244.58535 0.84 -2708.3304
1700 2158.7421 84933.294 -2456.2782 8.0039334 -2697.0891 240.81093 0.83 -2700.142
1800 2123.8912 76700.779 -2474.2534 8.0039334 -2711.1767 236.92327 0.82 -2714.6978
1900 2091.3912 82568.985 -2469.6316 8.0039334 -2702.9295 233.29783 0.81 -2706.5643
2000 2061.868 79024.983 -2476.3262 8.0039334 -2706.3307 230.00448 0.8 -2710.7
2100 2036.179 72408.502 -2493.6936 8.0039334 -2720.8324 227.13884 0.79 -2725.1617
2200 2014.0161 81172.694 -2479.0525 8.0039334 -2703.719 224.66652 0.78 -2708.4618
2300 1996.2707 78029.129 -2485.3835 8.0039334 -2708.0706 222.687 0.77 -2712.5894
2400 1982.6409 79691.571 -2483.2441 8.0039334 -2704.4107 221.16658 0.76 -2709.4434
2500 1971.6774 75015.359 -2493.8754 8.0039334 -2713.819 219.94358 0.75 -2719.4159
2600 1963.0369 74845.99 -2493.3203 8.0039334 -2712.3 218.97972 0.74 -2718.1619
2700 1955.2025 76756.042 -2491.6282 8.0039334 -2709.7339 218.10578 0.73 -2716.0963
2800 1947.4326 70627.84 -2507.5853 8.0039334 -2724.8243 217.23904 0.72 -2730.7999
2900 1939.4308 70852.114 -2508.8277 8.0039334 -2725.1742 216.34642 0.71 -2731.5024
3000 1929.3184 75867.616 -2497.0826 8.0039334 -2712.301 215.21837 0.7 -2718.4146
3100 1916.202 68984.855 -2517.8316 8.0039334 -2731.5868 213.75522 0.69 -2738.0966
3200 1901.363 73304.621 -2508.0281 8.0039334 -2720.128 212.09991 0.68 -2727.1933
3300 1881.196 69447.29 -2513.9782 8.0039334 -2723.8285 209.85024 0.67 -2730.768
3400 1856.1833 64973.868 -2526.8095 8.0039334 -2733.8695 207.06004 0.66 -2741.4173
3500 1829.7246 64688.566 -2528.8664 8.0039334 -2732.9749 204.10853 0.65 -2740.986
3600 1800.1245 56451.766 -2547.6377 8.0039334 -2748.4443 200.80659 0.64 -2756.4626
3700 1771.5886 68268.147 -2530.5906 8.0039334 -2728.214 197.62337 0.63 -2735.8618
3800 1740.3894 64187.24 -2539.0772 8.0039334 -2733.2202 194.14306 0.62 -2742.67
3900 1709.6971 61697.296 -2548.5651 8.0039334 -2739.2844 190.71928 0.61 -2748.648
4000 1680.6126 58960.336 -2557.3154 8.0039334 -2744.7902 187.47487 0.6 -2753.7317
4100 1653.386 49607.708 -2575.5217 8.0039334 -2759.9594 184.43769 0.59 -2769.1633
4200 1628.5806 59615.376 -2562.3155 8.0039334 -2743.9861 181.67062 0.58 -2753.41
4300 1605.7638 57213.496 -2568.9241 8.0039334 -2748.0495 179.12536 0.57 -2758.0401
4400 1586.3539 57319.854 -2567.3656 8.0039334 -2744.3258 176.96016 0.56 -2754.0451
4500 1569.1762 51130.713 -2581.1996 8.0039334 -2756.2435 175.04397 0.55 -2767.0321
4600 1554.2279 51209.179 -2582.5415 8.0039334 -2755.918 173.37646 0.54 -2767.2662
4700 1541.2064 51391.73 -2584.9958 8.0039334 -2756.9197 171.92389 0.53 -2768.7565
4800 1529.3566 48164.466 -2590.6042 8.0039334 -2761.2062 170.60203 0.52 -2773.7243
4900 1517.8359 47270.397 -2595.8724 8.0039334 -2765.1893 169.31688 0.51 -2777.023
5000 1506.2157 46127.507 -2595.6789 8.0039334 -2763.6995 168.02063 0.5 -2777.2298
5100 1494.4675 45092.69 -2600.075 8.0039334 -2766.7851 166.7101 0.49 -2779.7181
5200 1480.2051 41485.775 -2607.0151 8.0039334 -2772.1342 165.1191 0.48 -2785.5483
5300 1465.1748 39849.775 -2612.3292 8.0039334 -2775.7716 163.44246 0.47 -2788.9493
5400 1447.9857 39330.898 -2615.0485 8.0039334 -2776.5735 161.52498 0.46 -2790.3996
5500 1427.9752 35674.647 -2624.4226 8.0039334 -2783.7154 159.29278 0.45 -2797.922
5600 1406.1138 33960.907 -2630.1163 8.0039334 -2786.9704 156.85411 0.44 -2801.8887
5700 1383.2834 39122.559 -2621.0951 8.0039334 -2775.4025 154.30734 0.43 -2790.3487
5800 1357.4953 34996.372 -2632.2759 8.0039334 -2783.7065 151.43064 0.42 -2798.8306
5900 1331.345 30380.598 -2640.9488 8.0039334 -2789.4624 148.51354 0.41 -2804.9873
6000 1304.5621 26910.214 -2652.7787 8.0039334 -2798.3046 145.52587 0.4 -2814.8623
6100 1278.2361 34273.343 -2642.9208 8.0039334 -2785.51 142.58917 0.39 -2801.9949
6200 1251.7315 29640.216 -2651.6543 8.0039334 -2791.2868 139.63253 0.38 -2807.555
6300 1226.3243 25302.881 -2660.8448 8.0039334 -2797.6431 136.79832 0.37 -2815.3412
6400 1202.0501 23978.218 -2668.9812 8.0039334 -2803.0717 134.09049 0.36 -2820.0498
6500 1178.656 25315.547 -2668.8266 8.0039334 -2800.3074 131.48085 0.35 -2817.3114
6600 1156.9362 22676.36 -2673.1256 8.0039334 -2802.1835 129.05797 0.34 -2819.6239
6700 1163.8953 22497.41 -2674.4164 8.0039334 -2804.2506 129.83427 0.33 -2821.3556
6800 1123.3867 18193.925 -2685.3997 8.0039334 -2810.7152 125.31548 0.32 -2830.2267
6900 1147.6164 19451.295 -2682.5112 8.0039334 -2810.5295 128.01834 0.31 -2830.1189
7000 1096.0437 16757.031 -2689.5567 8.0039334 -2811.822 122.26532 0.3 -2832.475
7100 1065.1232 11734.429 -2703.0123 8.0039334 -2821.8284 118.8161 0.29 -2841.8886
7200 1048.459 15187.579 -2697.6953 8.0039334 -2814.6525 116.95718 0.28 -2834.2885
7300 1067.9311 13697.721 -2698.4027 8.0039334 -2817.532 119.12932 0.27 -2838.9073
7400 998.4963 13330.213 -2707.915 8.0039334 -2819.2987 111.38377 0.26 -2840.2979
7500 1023.6105 7070.7227 -2712.3293 8.0039334 -2826.5146 114.18529 0.25 -2848.8706
7600 970.8256 7694.074 -2717.03 8.0039334 -2825.3271 108.29706 0.24 -2848.0154
7700 966.64807 2336.6244 -2727.1914 8.0039334 -2835.0224 107.83105 0.23 -2858.6468
7800 961.41051 564.58952 -2731.2826 8.0039334 -2838.5294 107.24679 0.22 -2862.4362
7900 880.63112 3569.7496 -2734.8614 8.0039334 -2833.0971 98.235727 0.21 -2857.2329
8000 904.4189 -883.03123 -2738.386 8.0039334 -2839.2753 100.88929 0.2 -2864.1778
8100 901.36129 -977.71992 -2739.797 8.0039334 -2840.3452 100.54821 0.19 -2864.7239
8200 834.53102 2535.4088 -2741.7378 8.0039334 -2834.831 93.093191 0.18 -2859.9007
8300 830.12299 -6039.909 -2755.2151 8.0039334 -2847.8166 92.601469 0.17 -2873.9613
8400 807.63492 -5386.015 -2755.7433 8.0039334 -2845.8362 90.092891 0.16 -2872.8494
8500 792.64609 -6372.4363 -2758.8515 8.0039334 -2847.2724 88.420864 0.15 -2874.8424
8600 758.58937 -11610.225 -2770.2002 8.0039334 -2854.822 84.621786 0.14 -2882.1413
8700 758.23023 -10178.597 -2769.9169 8.0039334 -2854.4986 84.581724 0.13 -2881.6683
8800 743.6008 -12026.268 -2776.0268 8.0039334 -2858.9766 82.949788 0.12 -2886.1335
8900 734.90694 -17472.954 -2783.3532 8.0039334 -2865.3332 81.979975 0.11 -2893.7244
9000 707.10989 -17006.609 -2785.8037 8.0039334 -2864.6829 78.879173 0.1 -2893.2911
9100 695.13334 -20282.325 -2793.2101 8.0039334 -2870.7532 77.543171 0.09 -2899.891
9200 642.26078 -20368.748 -2798.1031 8.0039334 -2869.7483 71.645157 0.08 -2899.7706
9300 641.79203 -21031.839 -2798.6175 8.0039334 -2870.2104 71.592866 0.07 -2901.0899
9400 640.84125 -20243.066 -2799.2216 8.0039334 -2870.7084 71.486807 0.06 -2901.4655
9500 609.96498 -23936.746 -2809.3896 8.0039334 -2877.4321 68.042512 0.05 -2908.2797
9600 574.1911 -26956.034 -2817.6178 8.0039334 -2881.6696 64.051882 0.04 -2912.6742
9700 567.47641 -28321.949 -2818.8602 8.0039334 -2882.163 63.302848 0.03 -2914.4223
9800 520.37758 -31000.6 -2828.0252 8.0039334 -2886.0741 58.048903 0.02 -2918.4921
9900 506.49368 -32223.744 -2830.1705 8.0039334 -2886.6706 56.500132 0.01 -2920.4741
10000 507.13597 -33930.476 -2834.3236 8.0039334 -2890.8954 56.571781 0 -2924.5423
Loop time of 17.7279 on 2 procs for 10000 steps with 864 atoms
Total wall time: 0:00:17

View File

@ -0,0 +1,172 @@
LAMMPS (8 Feb 2023)
Processor partition = 1
using 1 OpenMP thread(s) per MPI task
# Example for an alchemical transformation simulation of pure copper into an aluminium bronze
# set up different names for two partitions
variable name world pure alloy
# create pure copper system
units metal
lattice fcc 3.75
Lattice spacing in x,y,z = 3.75 3.75 3.75
region box block 0 6 0 6 0 6
create_box 2 box
Created orthogonal box = (0 0 0) to (22.5 22.5 22.5)
1 by 1 by 2 MPI processor grid
timestep 0.002
create_atoms 1 box
Created 864 atoms
using lattice units in orthogonal box = (0 0 0) to (22.5 22.5 22.5)
create_atoms CPU = 0.000 seconds
displace_atoms all random 0.3 0.3 0.3 57845645
Displacing atoms ...
pair_style eam/alloy
pair_coeff * * AlCu.eam.alloy Cu Al
Reading eam/alloy potential file AlCu.eam.alloy with DATE: 2008-10-01
# replace 5% of copper with aluminium on the second partition only
if "${name} == alloy" then "set type 1 type/fraction 2 0.05 6745234"
set type 1 type/fraction 2 0.05 6745234
Setting atom values ...
37 settings made for type/fraction
# define ramp variable to combine the two different partitions
if "${name} == pure" then "variable ramp equal ramp(1.0,0.0)" else "variable ramp equal ramp(0.0,1.0)"
variable ramp equal ramp(0.0,1.0)
velocity all create 5000.0 6567345
fix 1 all nvt temp 2500.0 500.0 0.002
fix 2 all alchemy v_ramp
compute pressure all pressure/alchemy 2
# only need to output a dump file from one partition
#if "${name} == alloy" then # "dump 1 all custom 100 ${name}.lammpstrj id type element x y z" # "dump_modify 1 element Cu Al"
thermo_style custom step temp press etotal density pe ke f_2 f_2[3]
thermo_modify colname f_2 lambda colname f_2[3] EPot_mixed
thermo_modify press pressure
thermo 100
run 10000 post no
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 8.6825
ghost atom cutoff = 8.6825
binsize = 4.34125, bins = 6 6 6
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair eam/alloy, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 3.474 | 3.474 | 3.474 Mbytes
Step Temp Press TotEng Density PotEng KinEng lambda EPot_mixed
0 5000 2135632.8 11134.401 7.8067107 10576.643 557.75753 0 10353.88
100 2502.4638 98461.445 -2410.2394 7.8067107 -2689.393 279.1536 0.01 -2673.3837
200 2471.2133 111478.55 -2390.1144 7.8067107 -2665.7819 275.66756 0.02 -2650.057
300 2442.869 109429.75 -2398.101 7.8067107 -2670.6067 272.50571 0.03 -2654.7075
400 2420.4514 97114.07 -2425.2882 7.8067107 -2695.2932 270.005 0.04 -2675.755
500 2403.3496 98285.746 -2421.1707 7.8067107 -2689.268 268.09727 0.05 -2673.6895
600 2388.6644 101125.13 -2418.9873 7.8067107 -2685.4464 266.45911 0.06 -2668.238
700 2372.4091 96916.491 -2428.7444 7.8067107 -2693.3902 264.64581 0.07 -2675.3394
800 2356.5786 101050.97 -2423.8648 7.8067107 -2686.7446 262.87989 0.08 -2669.6797
900 2337.3256 95290.542 -2439.2282 7.8067107 -2699.9604 260.73219 0.09 -2681.0381
1000 2314.6552 90348.199 -2452.6965 7.8067107 -2710.8998 258.20327 0.1 -2693.7969
1100 2288.9862 87089.44 -2457.7481 7.8067107 -2713.088 255.33986 0.11 -2696.9199
1200 2263.1553 89628.642 -2462.9772 7.8067107 -2715.4356 252.45838 0.12 -2698.4983
1300 2238.1696 92771.824 -2453.8691 7.8067107 -2703.5403 249.67118 0.13 -2687.6406
1400 2209.3333 83029.221 -2477.2462 7.8067107 -2723.7006 246.45446 0.14 -2706.638
1500 2181.9468 83386 -2476.3027 7.8067107 -2719.7022 243.39945 0.15 -2704.0915
1600 2156.3929 81801.467 -2483.9294 7.8067107 -2724.4783 240.54887 0.16 -2708.3304
1700 2133.221 84933.294 -2477.0832 7.8067107 -2715.0473 237.96401 0.17 -2700.142
1800 2110.4496 76700.779 -2495.3147 7.8067107 -2730.7386 235.42383 0.18 -2714.6978
1900 2091.8774 82568.985 -2488.7082 7.8067107 -2722.0603 233.35207 0.19 -2706.5643
2000 2074.8972 79024.983 -2496.7194 7.8067107 -2728.1773 231.45791 0.2 -2710.7
2100 2059.7023 72408.502 -2511.6849 7.8067107 -2741.4478 229.76289 0.21 -2725.1617
2200 2046.5649 81172.694 -2496.9796 7.8067107 -2725.277 228.2974 0.22 -2708.4618
2300 2033.9024 78029.129 -2500.8329 7.8067107 -2727.7178 226.88488 0.23 -2712.5894
2400 2022.0535 79691.571 -2499.8173 7.8067107 -2725.3804 225.56311 0.24 -2709.4434
2500 2008.7841 75015.359 -2512.1238 7.8067107 -2736.2067 224.08289 0.25 -2719.4159
2600 1995.175 74845.99 -2512.2807 7.8067107 -2734.8455 222.56477 0.26 -2718.1619
2700 1979.2542 76756.042 -2512.5095 7.8067107 -2733.2983 220.78879 0.27 -2716.0963
2800 1961.2518 70627.84 -2527.3853 7.8067107 -2746.1659 218.78059 0.28 -2730.7999
2900 1942.4706 70852.114 -2530.3101 7.8067107 -2746.9956 216.68552 0.29 -2731.5024
3000 1922.0973 75867.616 -2518.2668 7.8067107 -2732.6796 214.41284 0.3 -2718.4146
3100 1898.9538 68984.855 -2540.7552 7.8067107 -2752.5863 211.83116 0.31 -2738.0966
3200 1874.9107 73304.621 -2533.0578 7.8067107 -2742.2069 209.14911 0.32 -2727.1933
3300 1848.9824 69447.29 -2538.6006 7.8067107 -2744.8574 206.25677 0.33 -2730.768
3400 1821.4108 64973.868 -2552.8877 7.8067107 -2756.0688 203.18111 0.34 -2741.4173
3500 1795.4926 64688.566 -2555.5739 7.8067107 -2755.8638 200.2899 0.35 -2740.986
3600 1769.4009 56451.766 -2573.338 7.8067107 -2770.7174 197.37934 0.36 -2756.4626
3700 1745.5646 68268.147 -2554.1634 7.8067107 -2748.8838 194.72036 0.37 -2735.8618
3800 1721.4956 64187.24 -2566.0526 7.8067107 -2758.088 192.03542 0.38 -2742.67
3900 1699.517 61697.296 -2573.7098 7.8067107 -2763.2935 189.58368 0.39 -2748.648
4000 1680.2819 58960.336 -2579.7058 7.8067107 -2767.1438 187.43798 0.4 -2753.7317
4100 1662.2079 49607.708 -2596.9862 7.8067107 -2782.408 185.42179 0.41 -2769.1633
4200 1645.509 59615.376 -2582.865 7.8067107 -2766.424 183.55901 0.42 -2753.41
4300 1628.9336 57213.496 -2589.5734 7.8067107 -2771.2834 181.71 0.43 -2758.0401
4400 1614.2369 57319.854 -2586.3446 7.8067107 -2766.4151 180.07055 0.44 -2754.0451
4500 1598.6946 51130.713 -2601.8813 7.8067107 -2780.2181 178.33679 0.45 -2767.0321
4600 1583.2816 51209.179 -2603.9706 7.8067107 -2780.5881 176.61745 0.46 -2767.2662
4700 1567.3743 51391.73 -2607.2614 7.8067107 -2782.1044 174.84296 0.47 -2768.7565
4800 1550.9245 48164.466 -2614.2775 7.8067107 -2787.2854 173.00797 0.48 -2773.7243
4900 1532.697 47270.397 -2618.365 7.8067107 -2789.3397 170.97466 0.49 -2777.023
5000 1513.7604 46127.507 -2621.8979 7.8067107 -2790.7601 168.86225 0.5 -2777.2298
5100 1494.431 45092.69 -2625.438 7.8067107 -2792.144 166.70602 0.51 -2779.7181
5200 1472.5263 41485.775 -2633.6681 7.8067107 -2797.9306 164.26252 0.52 -2785.5483
5300 1450.7978 39849.775 -2638.7965 7.8067107 -2800.6352 161.83868 0.53 -2788.9493
5400 1428.063 39330.898 -2642.8749 7.8067107 -2802.1774 159.30258 0.54 -2790.3996
5500 1404.4139 35674.647 -2652.8811 7.8067107 -2809.5456 156.66449 0.55 -2797.922
5600 1380.8619 33960.907 -2659.5731 7.8067107 -2813.6103 154.03722 0.56 -2801.8887
5700 1357.9957 39122.559 -2650.1374 7.8067107 -2801.6239 151.48646 0.57 -2790.3487
5800 1334.8385 34996.372 -2660.8794 7.8067107 -2809.7826 148.90324 0.58 -2798.8306
5900 1312.6203 30380.598 -2669.3511 7.8067107 -2815.7758 146.42476 0.59 -2804.9873
6000 1290.7337 26910.214 -2681.9175 7.8067107 -2825.9008 143.98328 0.6 -2814.8623
6100 1269.6552 34273.343 -2670.9025 7.8067107 -2812.5345 141.63195 0.61 -2801.9949
6200 1249.4502 29640.216 -2678.1477 7.8067107 -2817.5258 139.37805 0.62 -2807.555
6300 1229.8377 25302.881 -2688.545 7.8067107 -2825.7352 137.19025 0.63 -2815.3412
6400 1211.0142 23978.218 -2694.5096 7.8067107 -2829.6 135.09045 0.64 -2820.0498
6500 1192.3094 25315.547 -2693.4635 7.8067107 -2826.4674 133.0039 0.65 -2817.3114
6600 1174.741 22676.36 -2697.5642 7.8067107 -2828.6083 131.04413 0.66 -2819.6239
6700 1117.0829 22497.41 -2705.1682 7.8067107 -2829.7804 124.61228 0.67 -2821.3556
6800 1125.4062 18193.925 -2713.8679 7.8067107 -2839.4086 125.54075 0.68 -2830.2267
6900 1142.0728 19451.295 -2711.5199 7.8067107 -2838.9199 127.39994 0.69 -2830.1189
7000 1148.9469 16757.031 -2713.1595 7.8067107 -2841.3263 128.16676 0.7 -2832.475
7100 1044.2332 11734.429 -2733.5965 7.8067107 -2850.0822 116.48578 0.71 -2841.8886
7200 1052.3967 15187.579 -2724.5284 7.8067107 -2841.9248 117.39644 0.72 -2834.2885
7300 1045.9123 13697.721 -2730.1401 7.8067107 -2846.8132 116.67309 0.73 -2838.9073
7400 1082.9806 13330.213 -2726.8679 7.8067107 -2847.676 120.80812 0.74 -2840.2979
7500 980.30736 7070.7227 -2746.9678 7.8067107 -2856.3226 109.35476 0.75 -2848.8706
7600 982.86602 7694.074 -2745.5399 7.8067107 -2855.1801 109.64018 0.76 -2848.0154
7700 958.27863 2336.6244 -2758.806 7.8067107 -2865.7035 106.89742 0.77 -2858.6468
7800 991.25495 564.58952 -2758.6032 7.8067107 -2869.1791 110.57598 0.78 -2862.4362
7900 901.65217 3569.7496 -2763.0681 7.8067107 -2863.6488 100.58066 0.79 -2857.2329
8000 871.00782 -883.03123 -2773.2412 7.8067107 -2870.4035 97.162233 0.8 -2864.1778
8100 873.73598 -977.71992 -2772.9758 7.8067107 -2870.4424 97.466563 0.81 -2864.7239
8200 859.27838 2535.4088 -2769.5501 7.8067107 -2865.4039 95.853797 0.82 -2859.9007
8300 874.88664 -6039.909 -2781.7213 7.8067107 -2879.3163 97.594921 0.83 -2873.9613
8400 810.33098 -5386.015 -2787.6011 7.8067107 -2877.9947 90.393641 0.84 -2872.8494
8500 812.50682 -6372.4363 -2789.0713 7.8067107 -2879.7077 90.636359 0.85 -2874.8424
8600 792.27145 -11610.225 -2798.2095 7.8067107 -2886.5886 88.379073 0.86 -2882.1413
8700 737.92522 -10178.597 -2803.4114 7.8067107 -2885.7281 82.316669 0.87 -2881.6683
8800 744.31065 -12026.268 -2806.8078 7.8067107 -2889.8367 83.028973 0.88 -2886.1335
8900 709.31385 -17472.954 -2818.1084 7.8067107 -2897.2334 79.125027 0.89 -2893.7244
9000 704.20763 -17006.609 -2817.9144 7.8067107 -2896.4698 78.555422 0.9 -2893.2911
9100 697.72956 -20282.325 -2824.94 7.8067107 -2902.7728 77.832782 0.91 -2899.891
9200 696.15397 -20368.748 -2824.7243 7.8067107 -2902.3813 77.657023 0.92 -2899.7706
9300 627.98752 -21031.839 -2833.3613 7.8067107 -2903.4142 70.052953 0.93 -2901.0899
9400 603.4933 -20243.066 -2836.1082 7.8067107 -2903.4288 67.320586 0.94 -2901.4655
9500 599.69375 -23936.746 -2843.0066 7.8067107 -2909.9033 66.89674 0.95 -2908.2797
9600 587.42611 -26956.034 -2848.4377 7.8067107 -2913.966 65.528267 0.96 -2912.6742
9700 567.47718 -28321.949 -2852.1171 7.8067107 -2915.42 63.302933 0.97 -2914.4223
9800 524.81105 -31000.6 -2860.6103 7.8067107 -2919.1537 58.543462 0.98 -2918.4921
9900 507.60008 -32223.744 -2864.192 7.8067107 -2920.8155 56.623552 0.99 -2920.4741
10000 521.28866 -33930.476 -2866.3918 7.8067107 -2924.5423 58.150534 1 -2924.5423
Loop time of 17.7277 on 2 procs for 10000 steps with 864 atoms
Total wall time: 0:00:17

View File

@ -0,0 +1,13 @@
LAMMPS (8 Feb 2023)
Running on 2 partitions of processors
Starting alchemical transformation at 0%
Alchemical transformation progress: 10%
Alchemical transformation progress: 20%
Alchemical transformation progress: 30%
Alchemical transformation progress: 40%
Alchemical transformation progress: 50%
Alchemical transformation progress: 60%
Alchemical transformation progress: 70%
Alchemical transformation progress: 80%
Alchemical transformation progress: 90%
Alchemical transformation progress: 100%

View File

@ -0,0 +1,412 @@
LAMMPS (8 Feb 2023)
Processor partition = 0
using 1 OpenMP thread(s) per MPI task
# Example for an alchemical transformation of two water molecules into a hydronium and hydroxyl ion
# WARNING: This input is intended for demonstrating the method only,
# the force field parameters are mostly made up and NOT suitable for production simulations.
# set up different names for two partitions
variable name world twowater twoions
units real
atom_style full
atom_modify map array
region box block -5 5 -5 5 -5 5
boundary p p p
create_box 2 box bond/types 2 angle/types 2 extra/bond/per/atom 3 extra/angle/per/atom 3 extra/special/per/atom 3
Created orthogonal box = (-5 -5 -5) to (5 5 5)
1 by 1 by 2 MPI processor grid
mass 1 15.9994
mass 2 1.008
pair_style lj/cut/coul/cut 10.0
pair_coeff 1 1 0.1553 3.166
pair_coeff 1 2 0.0 1.0
pair_coeff 2 2 0.0 1.0
bond_style harmonic
bond_coeff * 1000.0 1.0
angle_style harmonic
angle_coeff * 100.0 109.47
molecule water h2o.mol
Read molecule template water:
1 molecules
0 fragments
3 atoms with max type 2
2 bonds with max type 1
1 angles with max type 1
0 dihedrals with max type 0
0 impropers with max type 0
# create the two molecules we want to transform ...
create_atoms 0 single -2.0 0.0 0.0 mol water 453624
Created 3 atoms
using lattice units in orthogonal box = (-5 -5 -5) to (5 5 5)
create_atoms CPU = 0.003 seconds
create_atoms 0 single 2.0 0.0 0.0 mol water 767353
Created 3 atoms
using lattice units in orthogonal box = (-5 -5 -5) to (5 5 5)
create_atoms CPU = 0.000 seconds
# ... and put them in a group
group transform id 1:6
6 atoms in group transform
# now fill the rest of the box with more water
create_atoms 0 random 32 34564 NULL mol water 25367 overlap 1.33
Created 96 atoms
using lattice units in orthogonal box = (-5 -5 -5) to (5 5 5)
create_atoms CPU = 0.000 seconds
# change topology and settings for the two states
# we cannot simply create a different topology directly or
# load a different data file because the order and position
# of all atoms must be maintained across both replica
# we first have to remove all topology data in the transform group
delete_bonds transform bond 1
System init for delete_bonds ...
Generated 0 of 1 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 = 12
ghost atom cutoff = 12
binsize = 6, bins = 2 2 2
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair lj/cut/coul/cut, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Deleting bonds ...
68 total bonds, 64 turned on, 4 turned off
34 total angles, 34 turned on, 0 turned off
0 total dihedrals, 0 turned on, 0 turned off
0 total impropers, 0 turned on, 0 turned off
delete_bonds transform angle 1 remove
System init for delete_bonds ...
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Deleting bonds ...
64 total bonds, 64 turned on, 0 turned off
32 total angles, 32 turned on, 0 turned off
0 total dihedrals, 0 turned on, 0 turned off
0 total impropers, 0 turned on, 0 turned off
# then generate different topologies for the two partitions. select by name.
if "${name} == twowater" then "create_bonds single/bond 2 1 2" "create_bonds single/bond 2 1 3" "create_bonds single/bond 2 4 5" "create_bonds single/bond 2 4 6" "create_bonds single/angle 2 2 1 3" "create_bonds single/angle 2 5 4 6" else "create_bonds single/bond 2 1 2" "create_bonds single/bond 2 3 4" "create_bonds single/bond 2 4 5" "create_bonds single/bond 2 4 6" "create_bonds single/angle 2 3 4 5" "create_bonds single/angle 2 5 4 6" "create_bonds single/angle 2 3 4 6" "set atom 1 charge -1.1354" "set atom 2 charge 0.1354" "set atom 3 charge 0.56775" "set atom 4 charge -0.70305" "set atom 5*6 charge 0.56775"
create_bonds single/bond 2 1 2
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
7 = max # of special neighbors
special bonds CPU = 0.000 seconds
create_bonds single/bond 2 1 3
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
7 = max # of special neighbors
special bonds CPU = 0.000 seconds
create_bonds single/bond 2 4 5
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
7 = max # of special neighbors
special bonds CPU = 0.000 seconds
create_bonds single/bond 2 4 6
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
7 = max # of special neighbors
special bonds CPU = 0.000 seconds
create_bonds single/angle 2 2 1 3
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
7 = max # of special neighbors
special bonds CPU = 0.000 seconds
create_bonds single/angle 2 5 4 6
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
7 = max # of special neighbors
special bonds CPU = 0.000 seconds
velocity all create 300.0 5463576
timestep 0.2
# define ramp variable to combine the two different partitions
if "${name} == twowater" then "variable ramp equal ramp(1.0,0.0)" else "variable ramp equal ramp(0.0,1.0)"
variable ramp equal ramp(1.0,0.0)
# since the trajectory and forces are kept identical through fix alchemy,
# we can do fix npt simulations, but we must use the "mixed" pressure
fix integrate all npt temp 300 300 1.0 iso 1.0 1.0 10.0
fix transform all alchemy v_ramp
compute pressure all pressure/alchemy transform
fix_modify integrate press pressure
# only need to output a dump file from one partition
# if "${name} == twowater" then # "dump 1 all atom 100 ${name}.lammpstrj" # "dump_modify 1 sort id"
thermo_style custom step temp press etotal density pe ke f_transform f_transform[3]
thermo_modify colname f_transform lambda colname f_transform[3] EPot_mixed
thermo_modify press pressure
thermo 100
run 20000
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Per MPI rank memory allocation (min/avg/max) = 7.535 | 7.535 | 7.535 Mbytes
Step Temp Press TotEng Density PotEng KinEng lambda EPot_mixed
0 300 184631.17 -802.19609 1.0171193 -892.51464 90.318545 1 -892.51464
100 293.4335 -513.97927 189.09028 0.3029684 100.74865 88.341623 0.995 207.29243
200 320.81838 1513.3 111.09325 0.64509407 14.507087 96.586165 0.99 46.402434
300 261.53825 -3808.6942 -538.67351 0.88817871 -617.41269 78.739179 0.985 -614.76481
400 308.32444 1375.0327 -804.08042 0.97694485 -896.90513 92.824715 0.98 -897.24386
500 292.60623 -12843.384 -1141.5985 1.0140814 -1229.691 88.092563 0.975 -1221.948
600 326.16112 91608.645 2882.4855 1.0263567 2784.2908 98.194659 0.97 2786.0743
700 317.22811 -60420.408 -1517.0601 0.9919143 -1612.5654 95.505272 0.965 -1616.7677
800 309.94673 -56793.931 -1549.4612 1.0024958 -1642.7743 93.313126 0.96 -1640.8606
900 272.80718 -5076.2282 -1266.6775 1.0141078 -1348.8093 82.131824 0.955 -1357.1812
1000 346.52557 -16919.192 -1406.675 1.0170322 -1511.0006 104.32562 0.95 -1514.1398
1100 300.62984 -51826.972 -2469.2821 1.0063592 -2559.7903 90.508164 0.945 -2565.9668
1200 293.72767 45222.698 2039.1938 1.0272336 1950.7636 88.430186 0.94 1951.1683
1300 289.4971 94600.203 2184.5096 1.0298091 2097.3531 87.156524 0.935 2088.1011
1400 328.98666 35468.53 1816.723 1.0198467 1717.6777 99.045321 0.93 1716.9268
1500 392.9407 41220.21 1820.7312 1.0194044 1702.4317 118.29944 0.925 1690.6416
1600 284.90093 -37995.141 -2439.9256 1.0068497 -2525.6984 85.772791 0.92 -2529.5874
1700 267.67454 25275.255 1612.5912 1.0313556 1532.0046 80.586582 0.915 1520.9695
1800 247.16495 -68222.994 -2699.1903 1.0018048 -2773.6022 74.41193 0.91 -2788.9545
1900 328.41849 -51979.665 -2339.7432 1.0154952 -2438.6175 98.874268 0.905 -2461.3422
2000 313.8715 21726.003 1473.9594 1.018831 1379.4647 94.494725 0.9 1363.0739
2100 296.07341 66130.11 1379.1597 1.0224882 1290.0233 89.136398 0.895 1272.1884
2200 282.67889 51746.464 2376.377 1.0362683 2291.2732 85.103821 0.89 2276.1488
2300 281.04207 -71937.759 -2791.0867 1.0111968 -2875.6977 84.611035 0.885 -2892.2526
2400 321.00806 -51658.758 -2507.6376 1.0168161 -2604.2809 96.643269 0.88 -2622.9732
2500 288.95906 49645.753 2361.024 1.0355648 2274.0295 86.99454 0.875 2275.0348
2600 303.0064 -48470.216 -1973.9561 1.000439 -2065.1798 91.223657 0.87 -2082.5895
2700 361.7083 54973.584 1929.0772 1.0223169 1820.1806 108.89656 0.865 1817.1972
2800 289.27827 33564.017 1783.5154 1.0257088 1696.4248 87.090642 0.86 1682.9162
2900 283.94365 -47190.274 -2286.9529 1.0059224 -2372.4375 85.484591 0.855 -2395.9575
3000 337.10996 61988.686 2289.363 1.0258 2187.8721 101.49094 0.85 2168.1085
3100 305.28249 -50123.109 -1913.7375 1.0143567 -2005.6464 91.9089 0.845 -2040.3453
3200 270.19471 -18114.265 -1961.3048 1.0132413 -2042.6502 81.345309 0.84 -2076.9595
3300 263.39996 -109301.89 -2351.6647 0.99956867 -2430.9643 79.299671 0.835 -2471.0269
3400 249.01722 -37585.949 -2423.3849 1.0080932 -2498.3544 74.969576 0.83 -2537.734
3500 267.88868 65528.865 2164.3882 1.0390872 2083.7372 80.651054 0.825 2061.6421
3600 351.46458 -67583.574 -2861.4561 1.0059621 -2967.2687 105.81256 0.82 -3004.5028
3700 332.82565 -61204.843 -2275.2765 1.0053485 -2375.4776 100.20109 0.815 -2415.4435
3800 298.0279 61123.085 1951.1943 1.020672 1861.4695 89.724819 0.81 1831.9734
3900 317.04715 43210.045 1848.3875 1.0287838 1752.9367 95.450792 0.805 1721.1961
4000 261.75174 -111920.72 -3274.707 0.99457106 -3353.5105 78.803455 0.8 -3394.3528
4100 338.34245 89763.083 2115.4809 1.0318272 2013.6189 101.86199 0.795 1973.419
4200 288.52623 19989.792 1758.0617 1.0204119 1671.1975 86.86423 0.79 1633.1439
4300 322.05593 -33791.403 -2107.1643 1.0155065 -2204.1231 96.958741 0.785 -2246.4353
4400 280.59054 -27839.599 -1534.3265 1.0123506 -1618.8016 84.475096 0.78 -1672.1425
4500 296.08336 75206.112 2789.7494 1.0329133 2700.61 89.139393 0.775 2670.4908
4600 288.02094 -67445.101 -2983.5242 0.99579107 -3070.2363 86.712106 0.77 -3132.6352
4700 332.21641 -83964.647 -2746.0748 1.0053915 -2846.0925 100.01768 0.765 -2916.6652
4800 305.52557 -93111.682 -2354.6562 0.99824941 -2446.6383 91.982082 0.76 -2514.039
4900 272.82262 -53664.198 -2790.1342 0.99527907 -2872.2707 82.136472 0.755 -2947.2062
5000 288.96388 39846.089 1975.7895 1.0371205 1888.7935 86.99599 0.75 1833.3716
5100 293.25543 -71819.425 -2916.8817 0.99452016 -3005.1697 88.288011 0.745 -3069.7618
5200 296.16486 -64484.821 -2416.0381 1.0153125 -2505.2021 89.163931 0.74 -2589.6878
5300 342.07246 60255.985 1749.8984 1.0306374 1646.9134 102.98496 0.735 1608.5673
5400 295.53315 61421.189 1620.6432 1.0334762 1531.6695 88.973746 0.73 1492.0969
5500 285.1755 24845.113 1144.9009 1.0335035 1059.0454 85.855455 0.725 1014.0263
5600 276.79246 66244.072 1523.3405 1.0251134 1440.0089 83.331641 0.72 1390.9078
5700 288.43485 14629.129 1208.7278 1.02997 1121.8911 86.836719 0.715 1074.3779
5800 276.64233 59262.97 914.26981 1.0332305 830.98336 83.286443 0.71 763.27415
5900 358.25384 -111203.23 -3370.7104 1.006331 -3478.567 107.85655 0.705 -3561.6283
6000 327.82233 -62936.335 -1881.2426 1.0106476 -1979.9373 98.694786 0.7 -2062.107
6100 309.86553 -59110.381 -2698.4147 1.0076375 -2791.7034 93.28868 0.695 -2870.9566
6200 294.95752 -58011.845 -1819.201 1.0161986 -1908.0014 88.800448 0.69 -1971.2586
6300 307.27252 59016.127 1186.0709 1.0225343 1093.5629 92.508022 0.685 1032.9616
6400 292.21611 -118857.83 -2992.9227 1.0031304 -3080.8978 87.975114 0.68 -3175.9068
6500 332.21108 97132.547 2290.2726 1.0349752 2190.2565 100.01607 0.675 2121.4674
6600 321.93985 -50017.836 -2484.5919 1.0076385 -2581.5157 96.923796 0.67 -2673.6819
6700 299.07231 -98136.241 -3013.1584 1.0106261 -3103.1976 90.039252 0.665 -3194.0694
6800 285.33731 28487.407 455.68104 1.017186 369.77687 85.904169 0.66 294.02418
6900 296.41387 50054.533 2028.1018 1.0445934 1938.8629 89.238897 0.655 1851.1397
7000 318.34109 -71579.897 -3114.0324 1.007304 -3209.8728 95.840345 0.65 -3305.5715
7100 317.2192 12370.315 1139.7687 1.0177238 1044.2661 95.502589 0.645 961.68146
7200 289.91091 43944.333 1213.4685 1.0302599 1126.1874 87.281105 0.64 1039.3329
7300 324.81227 42859.173 1288.5297 1.0300698 1190.7411 97.788572 0.635 1083.5764
7400 305.72634 76516.72 2404.9462 1.0580673 2312.9036 92.042527 0.63 2218.3674
7500 283.77479 -87225.247 -3401.4354 0.9936609 -3486.8692 85.433754 0.625 -3581.9003
7600 318.72048 16084.995 1848.3396 1.0296163 1752.385 95.954566 0.62 1653.5125
7700 307.36895 74007.024 1754.8928 1.0363553 1662.3558 92.537054 0.615 1572.8568
7800 297.44704 28693.429 1261.5958 1.0206402 1172.0459 89.549946 0.61 1093.5903
7900 288.47173 -94644.76 -2455.4369 1.0095244 -2542.2847 86.847823 0.605 -2648.2974
8000 280.5001 63255.987 1584.7287 1.020587 1500.2808 84.44787 0.6 1418.7144
8100 320.23351 68383.584 2300.142 1.0419027 2203.7319 96.410082 0.595 2111.2616
8200 354.86765 50012.316 1350.3752 1.0292074 1243.5381 106.8371 0.59 1149.0631
8300 278.8859 24200.145 772.82478 1.0232468 688.86288 83.961894 0.585 569.83331
8400 295.95754 -12010.401 1078.6687 1.0200526 989.56716 89.101514 0.58 872.63254
8500 289.57525 -64114.236 -3017.5291 1.0062613 -3104.7091 87.18005 0.575 -3227.8592
8600 329.23192 15948.893 1427.4791 1.0271511 1328.3599 99.119161 0.57 1211.3868
8700 327.45998 39407.811 1697.908 1.0343756 1599.3223 98.585695 0.565 1480.9482
8800 296.99753 18017.036 871.11717 1.0178295 781.70256 89.414616 0.56 657.09357
8900 289.10016 79527.35 2536.8041 1.0462904 2449.7671 87.037018 0.555 2338.4742
9000 260.53308 -51430.717 -2680.1664 1.0040128 -2758.603 78.436561 0.55 -2894.7913
9100 314.17867 40043.249 2043.6144 1.0361707 1949.0272 94.5872 0.545 1836.5399
9200 362.21236 -55153.163 -2232.4614 1.0102652 -2341.5097 109.04831 0.54 -2497.8765
9300 266.62049 -72193.959 -2980.9254 1.0063615 -3061.1946 80.269248 0.535 -3225.2604
9400 259.59316 7674.9295 1378.2484 1.0326879 1300.0948 78.153588 0.53 1171.7119
9500 278.72962 -33127.835 -2581.8908 1.0163553 -2665.8057 83.914845 0.525 -2805.1711
9600 299.09039 24570.664 1839.3275 1.025317 1749.2828 90.044695 0.52 1631.8392
9700 336.65655 37767.059 1415.9074 1.0245842 1314.5529 101.35443 0.515 1218.4022
9800 279.68112 -55007.939 -2548.4947 1.0129837 -2632.696 84.201305 0.51 -2775.6909
9900 300.55694 14964.424 1332.287 1.0176315 1241.8008 90.486218 0.505 1127.7276
10000 276.77193 -75638.817 -3100.7483 1.0019055 -3184.0738 83.325459 0.5 -3341.663
10100 316.26926 61548.301 2406.8933 1.0427988 2311.6767 95.216598 0.495 2206.7159
10200 297.28171 56814.839 2073.2348 1.0270036 1983.7347 89.500171 0.49 1859.0176
10300 276.84774 83572.576 1920.2202 1.0322243 1836.8719 83.348283 0.485 1704.2233
10400 263.28687 -16549.994 1144.9186 1.0177296 1065.6529 79.265623 0.48 940.36339
10500 332.79252 47379.311 1538.8168 1.0223403 1438.6257 100.19112 0.475 1301.3762
10600 329.01105 39299.248 1330.9914 1.0230094 1231.9387 99.052663 0.47 1077.5639
10700 339.21335 -4217.0313 981.9193 1.0235915 879.79511 102.12419 0.465 741.87272
10800 297.11192 -80013.424 -3682.9794 1.0009566 -3772.4285 89.449054 0.46 -3958.8283
10900 299.63096 47783.864 1833.1832 1.0435283 1742.9757 90.207441 0.455 1620.9328
11000 363.58243 67370.65 1769.9236 1.0450565 1660.4628 109.46079 0.45 1543.803
11100 306.04664 50246.004 1323.7676 1.0341876 1231.6287 92.138957 0.445 1063.5345
11200 255.68488 43750.967 2205.2392 1.0530607 2128.2623 76.976955 0.44 1986.9636
11300 271.71957 -40289.299 -3083.4093 1.0168497 -3165.2137 81.804388 0.435 -3344.1558
11400 291.74007 -115249.24 -3319.2153 1.0067921 -3407.0471 87.831795 0.43 -3569.0256
11500 270.22077 28235.119 596.78348 1.0195886 515.43032 81.353155 0.425 373.78255
11600 297.08506 29790.701 1031.3514 1.0317561 941.91046 89.440969 0.42 803.92835
11700 295.33119 -101140.58 -3068.1166 1.0107252 -3157.0295 88.912943 0.415 -3348.5652
11800 308.77287 -120312.75 -3553.1266 0.99681611 -3646.0863 92.95972 0.41 -3835.4663
11900 293.86337 82287.969 1847.0953 1.0331446 1758.6242 88.47104 0.405 1625.4846
12000 279.9866 27919.689 2249.3175 1.0384909 2165.0242 84.293273 0.4 2028.6311
12100 292.19439 47035.018 1220.3593 1.0210948 1132.3908 87.968573 0.395 976.68113
12200 317.78325 46886.483 2039.3721 1.0310567 1943.6997 95.672401 0.39 1763.6359
12300 357.44038 51492.35 1898.3396 1.0414835 1790.7279 107.61165 0.385 1638.1905
12400 288.16042 -50528.478 -2837.5599 1.0130798 -2924.314 86.7541 0.38 -3115.1383
12500 300.37356 -114034.29 -3091.586 1.0130272 -3182.017 90.431009 0.375 -3364.511
12600 265.4402 73960.28 1297.3012 1.0343798 1217.3873 79.913907 0.37 1094.544
12700 287.07994 22722.337 1711.9055 1.0268893 1625.4767 86.428809 0.365 1490.443
12800 315.39745 46072.191 926.21362 1.0205906 831.25949 94.954129 0.36 662.83753
12900 307.48549 -120472.73 -3181.5418 1.005689 -3274.1139 92.57214 0.355 -3469.7834
13000 291.00577 -59154.878 -2652.0402 1.012821 -2739.6509 87.610727 0.35 -2966.2448
13100 318.37718 86703.775 2087.145 1.036209 1991.2938 95.851211 0.345 1819.7078
13200 280.41509 -107033.79 -2683.9682 1.0135499 -2768.3905 84.422277 0.34 -2953.8355
13300 275.01919 112086.85 2632.1169 1.0437945 2549.3192 82.797775 0.335 2394.6707
13400 299.46547 -111959.62 -3475.4354 0.98732074 -3565.593 90.157617 0.33 -3792.6798
13500 275.65631 17625.49 1762.6531 1.0255473 1679.6636 82.989588 0.325 1521.2745
13600 302.63525 122466.63 2853.8095 1.0438137 2762.6976 91.111917 0.32 2611.7188
13700 302.21323 -94399.663 -3003.7573 1.0068914 -3094.7422 90.984863 0.315 -3328.4539
13800 305.70483 30039.825 1792.3286 1.0225478 1700.2926 92.036052 0.31 1502.8476
13900 273.15564 -27822.597 -2346.6702 1.0131002 -2428.9069 82.236732 0.305 -2683.7804
14000 257.14635 -1821.0012 1378.2522 1.0172653 1300.8352 77.416947 0.3 1067.8821
14100 323.74174 -76139.363 -2747.4152 1.0139806 -2844.8814 97.466276 0.295 -3052.598
14200 274.99913 54440.943 983.27131 1.0186356 900.47957 82.791736 0.29 767.64274
14300 291.8774 1281.7286 1258.7881 1.0214356 1170.915 87.873139 0.285 1042.8585
14400 308.97245 -47961.551 -2680.7892 1.0155221 -2773.809 93.019806 0.28 -3007.3204
14500 311.05309 86026.739 2115.2413 1.0311818 2021.5951 93.646208 0.275 1830.5463
14600 269.27432 -12972.747 971.48792 1.0172239 890.41971 81.068214 0.27 711.81484
14700 262.20739 -77722.459 -3215.6796 1.0029421 -3294.6202 78.940634 0.265 -3537.1929
14800 300.33592 -107332.8 -2798.6664 1.0126785 -2889.086 90.419677 0.26 -3125.8439
14900 307.0173 -73204.94 -2652.7275 1.016875 -2745.1587 92.431185 0.255 -3016.0143
15000 334.08711 64440.709 1615.3385 1.0369481 1514.7576 100.58087 0.25 1323.9179
15100 293.46703 35179.395 2020.1996 1.0331703 1931.8479 88.351717 0.245 1768.9681
15200 307.80546 54006.291 1111.7619 1.0246134 1019.0935 92.668471 0.24 822.22754
15300 336.59792 33832.907 1282.8271 1.0242407 1181.4903 101.33678 0.235 956.25285
15400 285.46526 -99629.94 -2336.7535 1.0041261 -2422.6962 85.942688 0.23 -2730.1887
15500 269.15938 122546.45 3012.0792 1.0318941 2931.0456 81.033612 0.225 2695.4331
15600 294.50818 -104733.19 -1914.0242 1.0017241 -2002.6894 88.665166 0.22 -2281.5773
15700 321.05125 -40438.501 -1721.9536 1.0125007 -1818.6099 96.656271 0.215 -2084.0893
15800 303.22185 -42224.408 -2145.481 1.0090867 -2236.7695 91.288521 0.21 -2506.3355
15900 281.65025 78652.063 2791.9418 1.0460521 2707.1477 84.794136 0.205 2500.7128
16000 286.5056 63174.412 1725.0409 1.0185277 1638.785 86.255897 0.2 1442.2427
16100 271.74574 -75051.584 -2101.5778 1.0091727 -2183.3901 81.812265 0.195 -2447.1967
16200 266.40007 -64120.09 -2223.3693 1.0064388 -2303.5722 80.202888 0.19 -2525.4243
16300 330.67137 46204.124 1837.3168 1.0271037 1737.7643 99.552523 0.185 1529.8186
16400 310.94573 18510.676 1531.823 1.0188695 1438.2091 93.613887 0.18 1195.3041
16500 270.29191 79005.409 1989.9392 1.0354088 1908.5646 81.374574 0.175 1678.7342
16600 334.24108 17143.221 1644.1483 1.0230561 1543.521 100.62723 0.17 1379.3215
16700 292.28721 -78618.031 -2768.3997 0.99940789 -2856.3962 87.996518 0.165 -3087.379
16800 346.09157 -69398.937 -2647.1375 1.0153026 -2751.3325 104.19496 0.16 -3011.3476
16900 284.37042 39314.526 2287.7061 1.0343186 2202.093 85.613074 0.155 2045.8316
17000 281.69389 86032.163 1817.9125 1.0237583 1733.1052 84.807275 0.15 1528.8391
17100 297.2629 55128.393 2617.4156 1.0419182 2527.9211 89.494508 0.145 2369.0347
17200 328.81472 47063.86 1880.9768 1.0364627 1781.9832 98.993555 0.14 1526.7115
17300 313.41363 -46685.063 -2310.803 1.008117 -2405.1599 94.356878 0.135 -2685.8034
17400 288.17114 68721.523 2771.6788 1.0429105 2684.9215 86.757326 0.13 2490.5845
17500 260.01702 -23324.539 -1436.6738 1.0100415 -1514.955 78.281195 0.125 -1812.4813
17600 297.6633 72795.463 2635.741 1.0362827 2546.126 89.615054 0.12 2336.0152
17700 301.02937 93833.118 2690.518 1.0276466 2599.8896 90.628448 0.115 2364.8751
17800 238.92837 -78317.212 -2175.2589 1.0084077 -2247.1911 71.932208 0.11 -2579.4429
17900 299.27724 -65278.891 -2589.1173 1.0034773 -2679.2182 90.10095 0.105 -2987.498
18000 315.15753 -72437.481 -2338.6068 1.0136139 -2433.4887 94.881898 0.1 -2718.125
18100 268.39411 -42194.209 -2285.3824 1.0108104 -2366.1856 80.803219 0.095 -2656.3853
18200 284.91941 40905.162 2045.1299 1.0266185 1959.3515 85.778354 0.09 1723.6803
18300 329.41629 -56526.814 -2104.8386 1.0137784 -2204.0133 99.174667 0.085 -2540.6829
18400 293.16732 -22085.551 -1652.5444 1.0163557 -1740.8059 88.261484 0.08 -2052.7864
18500 276.28141 29367.359 2314.5497 1.0270087 2231.3719 83.177784 0.075 1971.9405
18600 331.18031 94669.124 2466.3928 1.0225403 2366.6871 99.705745 0.07 2081.8675
18700 265.4491 49872.536 2571.9864 1.0255308 2492.0698 79.916587 0.065 2260.4261
18800 314.51042 60758.629 2560.3258 1.0300818 2465.6387 94.687078 0.06 2219.6547
18900 317.70309 66345.835 1768.2041 1.0248229 1672.5558 95.648268 0.055 1410.3087
19000 291.39831 -96336.931 -2448.6251 1.0100498 -2536.354 87.728905 0.05 -2805.9396
19100 303.37353 -21421.495 -2012.0929 0.99771284 -2103.4271 91.334186 0.045 -2436.2173
19200 293.92948 36383.881 2042.0163 1.0251299 1953.5254 88.490944 0.04 1633.579
19300 287.24409 -46691.027 -2399.698 1.0112067 -2486.1762 86.478228 0.035 -2811.3506
19400 333.42205 21152.63 1524.8699 1.0189912 1424.4893 100.38065 0.03 1118.2463
19500 309.17989 60445.761 2298.6966 1.0338543 2205.6144 93.082259 0.025 1928.6181
19600 255.92246 -32795.547 -1724.7933 1.0157044 -1801.8418 77.04848 0.02 -2213.9484
19700 342.62332 33538.746 2439.138 1.0225905 2335.9872 103.1508 0.015 2081.9185
19800 295.68946 81474.342 2308.3249 1.0240743 2219.3041 89.020804 0.01 1910.5545
19900 306.4947 43488.052 2330.4958 1.0222707 2238.222 92.27385 0.005 1957.4368
20000 313.31679 -25133.284 -1161.6979 1.0163289 -1256.0256 94.327722 0 -1649.7551
Loop time of 8.92653 on 2 procs for 20000 steps with 102 atoms
Performance: 38.716 ns/day, 0.620 hours/ns, 2240.513 timesteps/s, 228.532 katom-step/s
96.3% CPU use with 2 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 4.7448 | 5.9908 | 7.2367 | 50.9 | 67.11
Bond | 0.036126 | 0.03641 | 0.036695 | 0.1 | 0.41
Neigh | 0.082247 | 0.082294 | 0.082342 | 0.0 | 0.92
Comm | 0.68467 | 1.9303 | 3.1759 | 89.7 | 21.62
Output | 0.0023377 | 0.0052347 | 0.0081317 | 4.0 | 0.06
Modify | 0.8194 | 0.82122 | 0.82303 | 0.2 | 9.20
Other | | 0.06029 | | | 0.68
Nlocal: 51 ave 51 max 51 min
Histogram: 2 0 0 0 0 0 0 0 0 0
Nghost: 3317 ave 3317 max 3317 min
Histogram: 2 0 0 0 0 0 0 0 0 0
Neighs: 18320 ave 21941 max 14699 min
Histogram: 1 0 0 0 0 0 0 0 0 1
Total # of neighbors = 36640
Ave neighs/atom = 359.21569
Ave special neighs/atom = 2
Neighbor list builds = 181
Dangerous builds = 0
Total wall time: 0:00:08

View File

@ -0,0 +1,437 @@
LAMMPS (8 Feb 2023)
Processor partition = 1
using 1 OpenMP thread(s) per MPI task
# Example for an alchemical transformation of two water molecules into a hydronium and hydroxyl ion
# WARNING: This input is intended for demonstrating the method only,
# the force field parameters are mostly made up and NOT suitable for production simulations.
# set up different names for two partitions
variable name world twowater twoions
units real
atom_style full
atom_modify map array
region box block -5 5 -5 5 -5 5
boundary p p p
create_box 2 box bond/types 2 angle/types 2 extra/bond/per/atom 3 extra/angle/per/atom 3 extra/special/per/atom 3
Created orthogonal box = (-5 -5 -5) to (5 5 5)
1 by 1 by 2 MPI processor grid
mass 1 15.9994
mass 2 1.008
pair_style lj/cut/coul/cut 10.0
pair_coeff 1 1 0.1553 3.166
pair_coeff 1 2 0.0 1.0
pair_coeff 2 2 0.0 1.0
bond_style harmonic
bond_coeff * 1000.0 1.0
angle_style harmonic
angle_coeff * 100.0 109.47
molecule water h2o.mol
Read molecule template water:
1 molecules
0 fragments
3 atoms with max type 2
2 bonds with max type 1
1 angles with max type 1
0 dihedrals with max type 0
0 impropers with max type 0
# create the two molecules we want to transform ...
create_atoms 0 single -2.0 0.0 0.0 mol water 453624
Created 3 atoms
using lattice units in orthogonal box = (-5 -5 -5) to (5 5 5)
create_atoms CPU = 0.003 seconds
create_atoms 0 single 2.0 0.0 0.0 mol water 767353
Created 3 atoms
using lattice units in orthogonal box = (-5 -5 -5) to (5 5 5)
create_atoms CPU = 0.000 seconds
# ... and put them in a group
group transform id 1:6
6 atoms in group transform
# now fill the rest of the box with more water
create_atoms 0 random 32 34564 NULL mol water 25367 overlap 1.33
Created 96 atoms
using lattice units in orthogonal box = (-5 -5 -5) to (5 5 5)
create_atoms CPU = 0.001 seconds
# change topology and settings for the two states
# we cannot simply create a different topology directly or
# load a different data file because the order and position
# of all atoms must be maintained across both replica
# we first have to remove all topology data in the transform group
delete_bonds transform bond 1
System init for delete_bonds ...
Generated 0 of 1 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 = 12
ghost atom cutoff = 12
binsize = 6, bins = 2 2 2
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair lj/cut/coul/cut, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Deleting bonds ...
68 total bonds, 64 turned on, 4 turned off
34 total angles, 34 turned on, 0 turned off
0 total dihedrals, 0 turned on, 0 turned off
0 total impropers, 0 turned on, 0 turned off
delete_bonds transform angle 1 remove
System init for delete_bonds ...
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Deleting bonds ...
64 total bonds, 64 turned on, 0 turned off
32 total angles, 32 turned on, 0 turned off
0 total dihedrals, 0 turned on, 0 turned off
0 total impropers, 0 turned on, 0 turned off
# then generate different topologies for the two partitions. select by name.
if "${name} == twowater" then "create_bonds single/bond 2 1 2" "create_bonds single/bond 2 1 3" "create_bonds single/bond 2 4 5" "create_bonds single/bond 2 4 6" "create_bonds single/angle 2 2 1 3" "create_bonds single/angle 2 5 4 6" else "create_bonds single/bond 2 1 2" "create_bonds single/bond 2 3 4" "create_bonds single/bond 2 4 5" "create_bonds single/bond 2 4 6" "create_bonds single/angle 2 3 4 5" "create_bonds single/angle 2 5 4 6" "create_bonds single/angle 2 3 4 6" "set atom 1 charge -1.1354" "set atom 2 charge 0.1354" "set atom 3 charge 0.56775" "set atom 4 charge -0.70305" "set atom 5*6 charge 0.56775"
create_bonds single/bond 2 1 2
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
7 = max # of special neighbors
special bonds CPU = 0.002 seconds
create_bonds single/bond 2 3 4
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
7 = max # of special neighbors
special bonds CPU = 0.000 seconds
create_bonds single/bond 2 4 5
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
7 = max # of special neighbors
special bonds CPU = 0.000 seconds
create_bonds single/bond 2 4 6
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
2 = max # of 1-3 neighbors
2 = max # of 1-4 neighbors
7 = max # of special neighbors
special bonds CPU = 0.000 seconds
create_bonds single/angle 2 3 4 5
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
2 = max # of 1-3 neighbors
2 = max # of 1-4 neighbors
7 = max # of special neighbors
special bonds CPU = 0.000 seconds
create_bonds single/angle 2 5 4 6
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
2 = max # of 1-3 neighbors
2 = max # of 1-4 neighbors
7 = max # of special neighbors
special bonds CPU = 0.000 seconds
create_bonds single/angle 2 3 4 6
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
2 = max # of 1-3 neighbors
2 = max # of 1-4 neighbors
7 = max # of special neighbors
special bonds CPU = 0.000 seconds
set atom 1 charge -1.1354
Setting atom values ...
1 settings made for charge
set atom 2 charge 0.1354
Setting atom values ...
1 settings made for charge
set atom 3 charge 0.56775
Setting atom values ...
1 settings made for charge
set atom 4 charge -0.70305
Setting atom values ...
1 settings made for charge
set atom 5*6 charge 0.56775
Setting atom values ...
2 settings made for charge
velocity all create 300.0 5463576
timestep 0.2
# define ramp variable to combine the two different partitions
if "${name} == twowater" then "variable ramp equal ramp(1.0,0.0)" else "variable ramp equal ramp(0.0,1.0)"
variable ramp equal ramp(0.0,1.0)
# since the trajectory and forces are kept identical through fix alchemy,
# we can do fix npt simulations, but we must use the "mixed" pressure
fix integrate all npt temp 300 300 1.0 iso 1.0 1.0 10.0
fix transform all alchemy v_ramp
compute pressure all pressure/alchemy transform
fix_modify integrate press pressure
# only need to output a dump file from one partition
# if "${name} == twowater" then # "dump 1 all atom 100 ${name}.lammpstrj" # "dump_modify 1 sort id"
thermo_style custom step temp press etotal density pe ke f_transform f_transform[3]
thermo_modify colname f_transform lambda colname f_transform[3] EPot_mixed
thermo_modify press pressure
thermo 100
run 20000
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
WARNING: Bond/angle/dihedral extent > half of periodic box length (src/domain.cpp:936)
Per MPI rank memory allocation (min/avg/max) = 7.535 | 7.535 | 7.535 Mbytes
Step Temp Press TotEng Density PotEng KinEng lambda EPot_mixed
0 300 184631.17 10769.267 1.0171193 10678.948 90.318545 0 -892.51464
100 293.4335 -513.97927 21497.846 0.3029684 21409.505 88.341623 0.005 207.29243
200 320.81838 1513.3 3300.6279 0.64509407 3204.0418 96.586165 0.01 46.402434
300 261.53825 -3808.6942 -362.14861 0.88817871 -440.88779 78.739179 0.015 -614.76481
400 308.32444 1375.0327 -821.01681 0.97694485 -913.84152 92.824715 0.02 -897.24386
500 292.60623 -12843.384 -831.87625 1.0140814 -919.96881 88.092563 0.025 -1221.948
600 326.16112 91608.645 2941.9339 1.0263567 2843.7393 98.194659 0.03 2786.0743
700 317.22811 -60420.408 -1637.1259 0.9919143 -1732.6311 95.505272 0.035 -1616.7677
800 309.94673 -56793.931 -1501.6195 1.0024958 -1594.9326 93.313126 0.04 -1640.8606
900 272.80718 -5076.2282 -1452.719 1.0141078 -1534.8508 82.131824 0.045 -1357.1812
1000 346.52557 -16919.192 -1469.4601 1.0170322 -1573.7857 104.32562 0.05 -1514.1398
1100 300.62984 -51826.972 -2581.5818 1.0063592 -2672.09 90.508164 0.055 -2565.9668
1200 293.72767 45222.698 2045.9381 1.0272336 1957.5079 88.430186 0.06 1951.1683
1300 289.4971 94600.203 2042.1709 1.0298091 1955.0144 87.156524 0.065 2088.1011
1400 328.98666 35468.53 1805.9965 1.0198467 1706.9512 99.045321 0.07 1716.9268
1500 392.9407 41220.21 1663.5291 1.0194044 1545.2297 118.29944 0.075 1690.6416
1600 284.90093 -37995.141 -2488.5372 1.0068497 -2574.31 85.772791 0.08 -2529.5874
1700 267.67454 25275.255 1482.7666 1.0313556 1402.18 80.586582 0.085 1520.9695
1800 247.16495 -68222.994 -2869.7712 1.0018048 -2944.1832 74.41193 0.09 -2788.9545
1900 328.41849 -51979.665 -2578.9515 1.0154952 -2677.8258 98.874268 0.095 -2461.3422
2000 313.8715 21726.003 1310.0519 1.018831 1215.5571 94.494725 0.1 1363.0739
2100 296.07341 66130.11 1209.3035 1.0224882 1120.1671 89.136398 0.105 1272.1884
2200 282.67889 51746.464 2238.8823 1.0362683 2153.7785 85.103821 0.11 2276.1488
2300 281.04207 -71937.759 -2935.0422 1.0111968 -3019.6532 84.611035 0.115 -2892.2526
2400 321.00806 -51658.758 -2663.4071 1.0168161 -2760.0503 96.643269 0.12 -2622.9732
2500 288.95906 49645.753 2369.0667 1.0355648 2282.0722 86.99454 0.125 2275.0348
2600 303.0064 -48470.216 -2107.8769 1.000439 -2199.1005 91.223657 0.13 -2082.5895
2700 361.7083 54973.584 1906.9779 1.0223169 1798.0813 108.89656 0.135 1817.1972
2800 289.27827 33564.017 1687.0255 1.0257088 1599.9349 87.090642 0.14 1682.9162
2900 283.94365 -47190.274 -2449.1599 1.0059224 -2534.6445 85.484591 0.145 -2395.9575
3000 337.10996 61988.686 2157.6059 1.0258 2056.115 101.49094 0.15 2168.1085
3100 305.28249 -50123.109 -2137.6015 1.0143567 -2229.5104 91.9089 0.155 -2040.3453
3200 270.19471 -18114.265 -2175.7381 1.0132413 -2257.0834 81.345309 0.16 -2076.9595
3300 263.39996 -109301.89 -2594.4684 0.99956867 -2673.7681 79.299671 0.165 -2471.0269
3400 249.01722 -37585.949 -2655.0291 1.0080932 -2729.9987 74.969576 0.17 -2537.734
3500 267.88868 65528.865 2038.1308 1.0390872 1957.4797 80.651054 0.175 2061.6421
3600 351.46458 -67583.574 -3068.3126 1.0059621 -3174.1251 105.81256 0.18 -3004.5028
3700 332.82565 -61204.843 -2491.3087 1.0053485 -2591.5097 100.20109 0.185 -2415.4435
3800 298.0279 61123.085 1795.9521 1.020672 1706.2273 89.724819 0.19 1831.9734
3900 317.04715 43210.045 1685.6151 1.0287838 1590.1643 95.450792 0.195 1721.1961
4000 261.75174 -111920.72 -3478.9188 0.99457106 -3557.7223 78.803455 0.2 -3394.3528
4100 338.34245 89763.083 1919.3836 1.0318272 1817.5216 101.86199 0.205 1973.419
4200 288.52623 19989.792 1576.8543 1.0204119 1489.99 86.86423 0.21 1633.1439
4300 322.05593 -33791.403 -2303.9654 1.0155065 -2400.9242 96.958741 0.215 -2246.4353
4400 280.59054 -27839.599 -1776.7852 1.0123506 -1861.2603 84.475096 0.22 -1672.1425
4500 296.08336 75206.112 2655.8862 1.0329133 2566.7468 89.139393 0.225 2670.4908
4600 288.02094 -67445.101 -3254.8238 0.99579107 -3341.5359 86.712106 0.23 -3132.6352
4700 332.21641 -83964.647 -3046.3841 1.0053915 -3146.4017 100.01768 0.235 -2916.6652
4800 305.52557 -93111.682 -2635.4926 0.99824941 -2727.4747 91.982082 0.24 -2514.039
4900 272.82262 -53664.198 -3095.9932 0.99527907 -3178.1297 82.136472 0.245 -2947.2062
5000 288.96388 39846.089 1754.1018 1.0371205 1667.1058 86.99599 0.25 1833.3716
5100 293.25543 -71819.425 -3170.1841 0.99452016 -3258.4721 88.288011 0.255 -3069.7618
5200 296.16486 -64484.821 -2740.9832 1.0153125 -2830.1471 89.163931 0.26 -2589.6878
5300 342.07246 60255.985 1605.1961 1.0306374 1502.2111 102.98496 0.265 1608.5673
5400 295.53315 61421.189 1474.0782 1.0334762 1385.1045 88.973746 0.27 1492.0969
5500 285.1755 24845.113 981.19505 1.0335035 895.3396 85.855455 0.275 1014.0263
5600 276.79246 66244.072 1347.9794 1.0251134 1264.6478 83.331641 0.28 1390.9078
5700 288.43485 14629.129 1042.0147 1.02997 955.17799 86.836719 0.285 1074.3779
5800 276.64233 59262.97 680.78976 1.0332305 597.50331 83.286443 0.29 763.27415
5900 358.25384 -111203.23 -3652.2742 1.006331 -3760.1307 107.85655 0.295 -3561.6283
6000 327.82233 -62936.335 -2155.1414 1.0106476 -2253.8362 98.694786 0.3 -2062.107
6100 309.86553 -59110.381 -2958.2613 1.0076375 -3051.5499 93.28868 0.305 -2870.9566
6200 294.95752 -58011.845 -2023.2564 1.0161986 -2112.0569 88.800448 0.31 -1971.2586
6300 307.27252 59016.127 993.68575 1.0225343 901.17773 92.508022 0.315 1032.9616
6400 292.21611 -118857.83 -3289.8257 1.0031304 -3377.8009 87.975114 0.32 -3175.9068
6500 332.21108 97132.547 2078.6137 1.0349752 1978.5976 100.01607 0.325 2121.4674
6600 321.93985 -50017.836 -2763.8832 1.0076385 -2860.807 96.923796 0.33 -2673.6819
6700 299.07231 -98136.241 -3284.4174 1.0106261 -3374.4566 90.039252 0.335 -3194.0694
6800 285.33731 28487.407 232.87902 1.017186 146.97485 85.904169 0.34 294.02418
6900 296.41387 50054.533 1773.8315 1.0445934 1684.5926 89.238897 0.345 1851.1397
7000 318.34109 -71579.897 -3387.4573 1.007304 -3483.2977 95.840345 0.35 -3305.5715
7100 317.2192 12370.315 907.13585 1.0177238 811.63326 95.502589 0.355 961.68146
7200 289.91091 43944.333 972.20602 1.0302599 884.92492 87.281105 0.36 1039.3329
7300 324.81227 42859.173 994.92755 1.0300698 897.13897 97.788572 0.365 1083.5764
7400 305.72634 76516.72 2149.4427 1.0580673 2057.4002 92.042527 0.37 2218.3674
7500 283.77479 -87225.247 -3654.8517 0.9936609 -3740.2855 85.433754 0.375 -3581.9003
7600 318.72048 16084.995 1588.1487 1.0296163 1492.1941 95.954566 0.38 1653.5125
7700 307.36895 74007.024 1522.4279 1.0363553 1429.8909 92.537054 0.385 1572.8568
7800 297.44704 28693.429 1060.4277 1.0206402 970.87774 89.549946 0.39 1093.5903
7900 288.47173 -94644.76 -2723.8234 1.0095244 -2810.6712 86.847823 0.395 -2648.2974
8000 280.5001 63255.987 1380.8125 1.020587 1296.3647 84.44787 0.4 1418.7144
8100 320.23351 68383.584 2071.8202 1.0419027 1975.4101 96.410082 0.405 2111.2616
8200 354.86765 50012.316 1119.9483 1.0292074 1013.1112 106.8371 0.41 1149.0631
8300 278.8859 24200.145 486.00653 1.0232468 402.04464 83.961894 0.415 569.83331
8400 295.95754 -12010.401 800.25292 1.0200526 711.1514 89.101514 0.42 872.63254
8500 289.57525 -64114.236 -3307.2939 1.0062613 -3394.4739 87.18005 0.425 -3227.8592
8600 329.23192 15948.893 1155.4486 1.0271511 1056.3294 99.119161 0.43 1211.3868
8700 327.45998 39407.811 1425.7837 1.0343756 1327.198 98.585695 0.435 1480.9482
8800 296.99753 18017.036 587.91493 1.0178295 498.50031 89.414616 0.44 657.09357
8900 289.10016 79527.35 2286.7077 1.0462904 2199.6707 87.037018 0.445 2338.4742
9000 260.53308 -51430.717 -2982.8072 1.0040128 -3061.2437 78.436561 0.45 -2894.7913
9100 314.17867 40043.249 1796.3896 1.0361707 1701.8024 94.5872 0.455 1836.5399
9200 362.21236 -55153.163 -2572.3893 1.0102652 -2681.4376 109.04831 0.46 -2497.8765
9300 266.62049 -72193.959 -3333.755 1.0063615 -3414.0242 80.269248 0.465 -3225.2604
9400 259.59316 7674.9295 1105.0933 1.0326879 1026.9397 78.153588 0.47 1171.7119
9500 278.72962 -33127.835 -2875.2917 1.0163553 -2959.2065 83.914845 0.475 -2805.1711
9600 299.09039 24570.664 1594.6533 1.025317 1504.6086 90.044695 0.48 1631.8392
9700 336.65655 37767.059 1217.6584 1.0245842 1116.3039 101.35443 0.485 1218.4022
9800 279.68112 -55007.939 -2840.321 1.0129837 -2924.5223 84.201305 0.49 -2775.6909
9900 300.55694 14964.424 1101.8362 1.0176315 1011.35 90.486218 0.495 1127.7276
10000 276.77193 -75638.817 -3415.9268 1.0019055 -3499.2523 83.325459 0.5 -3341.663
10100 316.26926 61548.301 2199.0502 1.0427988 2103.8336 95.216598 0.505 2206.7159
10200 297.28171 56814.839 1828.6916 1.0270036 1739.1915 89.500171 0.51 1859.0176
10300 276.84774 83572.576 1662.6501 1.0322243 1579.3018 83.348283 0.515 1704.2233
10400 263.28687 -16549.994 903.97712 1.0177296 824.71149 79.265623 0.52 940.36339
10500 332.79252 47379.311 1277.3892 1.0223403 1177.1981 100.19112 0.525 1301.3762
10600 329.01105 39299.248 1039.7181 1.0230094 940.66548 99.052663 0.53 1077.5639
10700 339.21335 -4217.0313 724.12043 1.0235915 621.99624 102.12419 0.535 741.87272
10800 297.11192 -80013.424 -4028.1643 1.0009566 -4117.6134 89.449054 0.54 -3958.8283
10900 299.63096 47783.864 1609.2512 1.0435283 1519.0437 90.207441 0.545 1620.9328
11000 363.58243 67370.65 1557.8148 1.0450565 1448.354 109.46079 0.55 1543.803
11100 306.04664 50246.004 1020.8953 1.0341876 928.75637 92.138957 0.555 1063.5345
11200 255.68488 43750.967 1952.9201 1.0530607 1875.9431 76.976955 0.56 1986.9636
11300 271.71957 -40289.299 -3400.121 1.0168497 -3481.9254 81.804388 0.565 -3344.1558
11400 291.74007 -115249.24 -3603.3881 1.0067921 -3691.2199 87.831795 0.57 -3569.0256
11500 270.22077 28235.119 350.43952 1.0195886 269.08637 81.353155 0.575 373.78255
11600 297.08506 29790.701 793.45124 1.0317561 704.01027 89.440969 0.58 803.92835
11700 295.33119 -101140.58 -3395.5279 1.0107252 -3484.4409 88.912943 0.585 -3348.5652
11800 308.77287 -120312.75 -3874.1096 0.99681611 -3967.0693 92.95972 0.59 -3835.4663
11900 293.86337 82287.969 1623.3312 1.0331446 1534.8602 88.47104 0.595 1625.4846
12000 279.9866 27919.689 2021.9956 1.0384909 1937.7024 84.293273 0.6 2028.6311
12100 292.19439 47035.018 962.98803 1.0210948 875.01946 87.968573 0.605 976.68113
12200 317.78325 46886.483 1744.1855 1.0310567 1648.5131 95.672401 0.61 1763.6359
12300 357.44038 51492.35 1650.3113 1.0414835 1542.6996 107.61165 0.615 1638.1905
12400 288.16042 -50528.478 -3145.341 1.0130798 -3232.0951 86.7541 0.62 -3115.1383
12500 300.37356 -114034.29 -3383.5763 1.0130272 -3474.0074 90.431009 0.625 -3364.511
12600 265.4402 73960.28 1102.3119 1.0343798 1022.398 79.913907 0.63 1094.544
12700 287.07994 22722.337 1499.2541 1.0268893 1412.8252 86.428809 0.635 1490.443
12800 315.39745 46072.191 663.05431 1.0205906 568.10018 94.954129 0.64 662.83753
12900 307.48549 -120472.73 -3484.9054 1.005689 -3577.4775 92.57214 0.645 -3469.7834
13000 291.00577 -59154.878 -3000.6461 1.012821 -3088.2569 87.610727 0.65 -2966.2448
13100 318.37718 86703.775 1825.1817 1.036209 1729.3305 95.851211 0.655 1819.7078
13200 280.41509 -107033.79 -2964.9455 1.0135499 -3049.3678 84.422277 0.66 -2953.8355
13300 275.01919 112086.85 2399.5628 1.0437945 2316.765 82.797775 0.665 2394.6707
13400 299.46547 -111959.62 -3814.3709 0.98732074 -3904.5286 90.157617 0.67 -3792.6798
13500 275.65631 17625.49 1528.0027 1.0255473 1445.0131 82.989588 0.675 1521.2745
13600 302.63525 122466.63 2631.7819 1.0438137 2540.67 91.111917 0.68 2611.7188
13700 302.21323 -94399.663 -3344.9423 1.0068914 -3435.9271 90.984863 0.685 -3328.4539
13800 305.70483 30039.825 1506.1765 1.0225478 1414.1404 92.036052 0.69 1502.8476
13900 273.15564 -27822.597 -2713.3946 1.0131002 -2795.6313 82.236732 0.695 -2683.7804
14000 257.14635 -1821.0012 1045.462 1.0172653 968.04508 77.416947 0.7 1067.8821
14100 323.74174 -76139.363 -3042.0486 1.0139806 -3139.5149 97.466276 0.705 -3052.598
14200 274.99913 54440.943 796.17718 1.0186356 713.38545 82.791736 0.71 767.64274
14300 291.8774 1281.7286 1079.6881 1.0214356 991.81498 87.873139 0.715 1042.8585
14400 308.97245 -47961.551 -3005.1106 1.0155221 -3098.1304 93.019806 0.72 -3007.3204
14500 311.05309 86026.739 1851.7257 1.0311818 1758.0795 93.646208 0.725 1830.5463
14600 269.27432 -12972.747 726.82371 1.0172239 645.7555 81.068214 0.73 711.81484
14700 262.20739 -77722.459 -3545.7104 1.0029421 -3624.651 78.940634 0.735 -3537.1929
14800 300.33592 -107332.8 -3118.6094 1.0126785 -3209.0291 90.419677 0.74 -3125.8439
14900 307.0173 -73204.94 -3016.2921 1.016875 -3108.7233 92.431185 0.745 -3016.0143
15000 334.08711 64440.709 1360.8856 1.0369481 1260.3047 100.58087 0.75 1323.9179
15100 293.46703 35179.395 1804.4648 1.0331703 1716.1131 88.351717 0.755 1768.9681
15200 307.80546 54006.291 852.72781 1.0246134 760.05934 92.668471 0.76 822.22754
15300 336.59792 33832.907 988.39905 1.0242407 887.06227 101.33678 0.765 956.25285
15400 285.46526 -99629.94 -2736.0944 1.0041261 -2822.0371 85.942688 0.77 -2730.1887
15500 269.15938 122546.45 2708.063 1.0318941 2627.0294 81.033612 0.775 2695.4331
15600 294.50818 -104733.19 -2271.5729 1.0017241 -2360.238 88.665166 0.78 -2281.5773
15700 321.05125 -40438.501 -2060.144 1.0125007 -2156.8002 96.656271 0.785 -2084.0893
15800 303.22185 -42224.408 -2486.7037 1.0090867 -2577.9922 91.288521 0.79 -2506.3355
15900 281.65025 78652.063 2532.2753 1.0460521 2447.4812 84.794136 0.795 2500.7128
16000 286.5056 63174.412 1479.3631 1.0185277 1393.1072 86.255897 0.8 1442.2427
16100 271.74574 -75051.584 -2429.2879 1.0091727 -2511.1002 81.812265 0.805 -2447.1967
16200 266.40007 -64120.09 -2497.2609 1.0064388 -2577.4638 80.202888 0.81 -2525.4243
16300 330.67137 46204.124 1582.1688 1.0271037 1482.6162 99.552523 0.815 1529.8186
16400 310.94573 18510.676 1235.5974 1.0188695 1141.9835 93.613887 0.82 1195.3041
16500 270.29191 79005.409 1711.3568 1.0354088 1629.9822 81.374574 0.825 1678.7342
16600 334.24108 17143.221 1446.3175 1.0230561 1345.6903 100.62723 0.83 1379.3215
16700 292.28721 -78618.031 -3045.0258 0.99940789 -3133.0223 87.996518 0.835 -3087.379
16800 346.09157 -69398.937 -2956.6793 1.0153026 -3060.8742 104.19496 0.84 -3011.3476
16900 284.37042 39314.526 2102.7814 1.0343186 2017.1683 85.613074 0.845 2045.8316
17000 281.69389 86032.163 1577.5995 1.0237583 1492.7922 84.807275 0.85 1528.8391
17100 297.2629 55128.393 2431.5835 1.0419182 2342.089 89.494508 0.855 2369.0347
17200 328.81472 47063.86 1584.1492 1.0364627 1485.1556 98.993555 0.86 1526.7115
17300 313.41363 -46685.063 -2635.2463 1.008117 -2729.6032 94.356878 0.865 -2685.8034
17400 288.17114 68721.523 2548.303 1.0429105 2461.5456 86.757326 0.87 2490.5845
17500 260.01702 -23324.539 -1776.7039 1.0100415 -1854.9851 78.281195 0.875 -1812.4813
17600 297.6633 72795.463 2396.9788 1.0362827 2307.3638 89.615054 0.88 2336.0152
17700 301.02937 93833.118 2424.9649 1.0276466 2334.3364 90.628448 0.885 2364.8751
17800 238.92837 -78317.212 -2548.5755 1.0084077 -2620.5077 71.932208 0.89 -2579.4429
17900 299.27724 -65278.891 -2933.564 1.0034773 -3023.6649 90.10095 0.895 -2987.498
18000 315.15753 -72437.481 -2654.8693 1.0136139 -2749.7512 94.881898 0.9 -2718.125
18100 268.39411 -42194.209 -2606.045 1.0108104 -2686.8482 80.803219 0.905 -2656.3853
18200 284.91941 40905.162 1786.1505 1.0266185 1700.3722 85.778354 0.91 1723.6803
18300 329.41629 -56526.814 -2472.7835 1.0137784 -2571.9582 99.174667 0.915 -2540.6829
18400 293.16732 -22085.551 -1991.6537 1.0163557 -2079.9152 88.261484 0.92 -2052.7864
18500 276.28141 29367.359 2034.0833 1.0270087 1950.9056 83.177784 0.925 1971.9405
18600 331.18031 94669.124 2160.1352 1.0225403 2060.4295 99.705745 0.93 2081.8675
18700 265.4491 49872.536 2324.2391 1.0255308 2244.3225 79.916587 0.935 2260.4261
18800 314.51042 60758.629 2298.6407 1.0300818 2203.9536 94.687078 0.94 2219.6547
18900 317.70309 66345.835 1490.6939 1.0248229 1395.0457 95.648268 0.945 1410.3087
19000 291.39831 -96336.931 -2732.3994 1.0100498 -2820.1283 87.728905 0.95 -2805.9396
19100 303.37353 -21421.495 -2360.5644 0.99771284 -2451.8986 91.334186 0.955 -2436.2173
19200 293.92948 36383.881 1708.7388 1.0251299 1620.2479 88.490944 0.96 1633.579
19300 287.24409 -46691.027 -2736.6663 1.0112067 -2823.1445 86.478228 0.965 -2811.3506
19400 333.42205 21152.63 1209.1556 1.0189912 1108.7749 100.38065 0.97 1118.2463
19500 309.17989 60445.761 2014.5979 1.0338543 1921.5157 93.082259 0.975 1928.6181
19600 255.92246 -32795.547 -2145.3103 1.0157044 -2222.3587 77.04848 0.98 -2213.9484
19700 342.62332 33538.746 2181.2002 1.0225905 2078.0494 103.1508 0.985 2081.9185
19800 295.68946 81474.342 1996.4567 1.0240743 1907.4359 89.020804 0.99 1910.5545
19900 306.4947 43488.052 2048.2997 1.0222707 1956.0258 92.27385 0.995 1957.4368
20000 313.31679 -25133.284 -1555.4274 1.0163289 -1649.7551 94.327722 1 -1649.7551
Loop time of 8.92592 on 2 procs for 20000 steps with 102 atoms
Performance: 38.719 ns/day, 0.620 hours/ns, 2240.664 timesteps/s, 228.548 katom-step/s
96.2% CPU use with 2 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 4.7753 | 6.0676 | 7.3599 | 52.5 | 67.98
Bond | 0.036352 | 0.036909 | 0.037466 | 0.3 | 0.41
Neigh | 0.085317 | 0.085383 | 0.085449 | 0.0 | 0.96
Comm | 0.72794 | 2.022 | 3.3161 | 91.0 | 22.65
Output | 0.0023255 | 0.005156 | 0.0079865 | 3.9 | 0.06
Modify | 0.64567 | 0.64689 | 0.64812 | 0.2 | 7.25
Other | | 0.06196 | | | 0.69
Nlocal: 51 ave 51 max 51 min
Histogram: 2 0 0 0 0 0 0 0 0 0
Nghost: 3317 ave 3317 max 3317 min
Histogram: 2 0 0 0 0 0 0 0 0 0
Neighs: 18319.5 ave 21940 max 14699 min
Histogram: 1 0 0 0 0 0 0 0 0 1
Total # of neighbors = 36639
Ave neighs/atom = 359.20588
Ave special neighs/atom = 2.0196078
Neighbor list builds = 181
Dangerous builds = 0
Total wall time: 0:00:08

View File

@ -16,6 +16,9 @@ dihedral_style class2
improper_style class2
special_bonds lj/coul 0 0 1
pair_modify tail yes mix sixthpower
variable T equal 530
read_data trimer.data &

View File

@ -18,6 +18,9 @@ dihedral_style class2
improper_style class2
special_bonds lj/coul 0 0 1
pair_modify tail yes mix sixthpower
read_data large_nylon_melt.data.gz &
extra/bond/per/atom 5 &
extra/angle/per/atom 15 &

View File

@ -17,6 +17,9 @@ dihedral_style class2
improper_style class2
special_bonds lj/coul 0 0 1
pair_modify tail yes mix sixthpower
read_data tiny_epoxy.data
velocity all create 300.0 4928459 dist gaussian

View File

@ -19,6 +19,9 @@ dihedral_style class2
improper_style class2
special_bonds lj/coul 0 0 1
pair_modify tail yes mix sixthpower
read_data tiny_nylon.data &
extra/bond/per/atom 5 &
extra/angle/per/atom 15 &

View File

@ -19,6 +19,9 @@ dihedral_style class2
improper_style class2
special_bonds lj/coul 0 0 1
pair_modify tail yes mix sixthpower
read_data tiny_nylon.data &
extra/bond/per/atom 5 &
extra/angle/per/atom 15 &

View File

@ -19,6 +19,9 @@ dihedral_style class2
improper_style class2
special_bonds lj/coul 0 0 1
pair_modify tail yes mix sixthpower
read_data tiny_nylon.data &
extra/bond/per/atom 5 &
extra/angle/per/atom 15 &

View File

@ -19,6 +19,9 @@ dihedral_style class2
improper_style class2
special_bonds lj/coul 0 0 1
pair_modify tail yes mix sixthpower
variable T equal 530
read_data tiny_polystyrene.data &

View File

@ -0,0 +1,110 @@
units real
atom_style bond
boundary f p p
region box block -5.000000000000001 5.000000000000001 -5 5 -5 5
create_box 1 box bond/types 1 extra/bond/per/atom 1 extra/special/per/atom 1
pair_style zero 5.0
pair_coeff * *
mass * 1.0
bond_style zero
bond_coeff * 1.0
create_atoms 1 single -4.0 0.0 0.0
create_atoms 1 single 4.0 0.0 0.0
create_atoms 1 single -5.0 0.0 0.0
create_atoms 1 single 5.0 0.0 0.0
create_bonds single/bond 1 3 1
create_bonds single/bond 1 4 2
group move id 1:2
write_restart walltest.restart
variable name string wall-harmonic
include wall.inc
fix 1 move wall/harmonic xlo -5.0 100 0.0 4.0 xhi 5.0 100 1.0 4.0
fix_modify 1 energy yes
run 5 post no
variable name string lepton-harmonic
include wall.inc
fix 1 move wall/lepton xlo -5.0 "k*(r-rc)^2;k=100.0" 4.0 xhi 5.0 "k*(r-rc)^2;k=100.0" 4.0
fix_modify 1 energy yes
run 5 post no
variable name string bond-harmonic
include wall.inc
bond_style harmonic
bond_coeff 1 100 4.0
run 5 post no
variable name string pair-harmonic
include wall.inc
pair_style harmonic/cut
pair_coeff 1 1 100 4.0
run 5 post no
variable eps index 0.02
variable sig index 2.0
variable name string wall-lj126
include wall.inc
fix 1 move wall/lj126 xlo -5.0 ${eps} ${sig} 4.0 xhi 5.0 ${eps} ${sig} 4.0
fix_modify 1 energy yes
run 5 post no
variable name string lepton-lj126
include wall.inc
fix 1 move wall/lepton xlo -5.0 "4.0*epsilon*((sigma/r)^12 - (sigma/r)^6);epsilon=v_eps;sigma=v_sig" 4.0 &
xhi 5.0 "4.0*epsilon*((sigma/r)^12 - (sigma/r)^6);epsilon=v_eps;sigma=v_sig" 4.0
fix_modify 1 energy yes
run 5 post no
variable name string pair-lj126
include wall.inc
pair_style lj/cut 4.0
pair_coeff 1 1 ${eps} ${sig}
pair_modify shift yes
run 5 post no
variable d0 index 20.0
variable al index 2.0
variable r0 index 1.2
variable name string wall-morse
include wall.inc
fix 1 move wall/morse xlo -5.0 ${d0} ${al} ${r0} 4.0 xhi 5.0 ${d0} ${al} ${r0} 4.0
fix_modify 1 energy yes
run 5 post no
variable name string lepton-morse
include wall.inc
fix 1 move wall/lepton xlo -5.0 "d0*(-1.0 + (1.0 - ralpha) * (1.0 - ralpha));ralpha=exp(-alpha*(r-r0));d0=v_d0;alpha=v_al;r0=v_r0" 4.0 &
xhi 5.0 "d0*(-1.0 + (1.0 - ralpha) * (1.0 - ralpha));ralpha=exp(-alpha*(r-r0));d0=v_d0;alpha=v_al;r0=v_r0" 4.0
fix_modify 1 energy yes
run 5 post no
variable name string bond-morse
include wall.inc
bond_style morse
bond_coeff 1 ${d0} ${al} ${r0}
run 5 post no
variable name string pair-morse
include wall.inc
pair_style morse 4.0
pair_coeff 1 1 ${d0} ${al} ${r0}
pair_modify shift yes
run 5 post no
shell rm -f walltest.restart

129
examples/wall/in.wall.table Normal file
View File

@ -0,0 +1,129 @@
units real
atom_style bond
boundary f p p
region box block -5.000000000000001 5.000000000000001 -5 5 -5 5
create_box 1 box bond/types 1 extra/bond/per/atom 1 extra/special/per/atom 1
pair_style zero 5.0
pair_coeff * *
mass * 1.0
bond_style zero
bond_coeff * 1.0
create_atoms 1 single -4.0 0.0 0.0
create_atoms 1 single 4.0 0.0 0.0
create_atoms 1 single -5.0 0.0 0.0
create_atoms 1 single 5.0 0.0 0.0
create_bonds single/bond 1 3 1
create_bonds single/bond 1 4 2
group move id 1:2
write_restart walltest.restart
variable name string wall-harmonic
include wall.inc
fix 1 move wall/harmonic xlo -5.0 100 0.0 4.0 xhi 5.0 100 1.0 4.0
fix_modify 1 energy yes
run 5 post no
variable name string table-harmonic
include wall.inc
fix 1 move wall/table linear 1000 xlo -5.0 walltab.dat HARMONIC 4.0 xhi 5.0 walltab.dat HARMONIC 4.0
fix_modify 1 energy yes
run 5 post no
variable name string spline-harmonic
include wall.inc
fix 1 move wall/table spline 200 xlo -5.0 walltab.dat HARMONIC 4.0 xhi 5.0 walltab.dat HARMONIC 4.0
fix_modify 1 energy yes
run 5 post no
variable name string bond-harmonic
include wall.inc
bond_style harmonic
bond_coeff 1 100 4.0
run 5 post no
variable name string pair-harmonic
include wall.inc
pair_style harmonic/cut
pair_coeff 1 1 100 4.0
run 5 post no
variable eps index 0.02
variable sig index 2.0
variable name string wall-lj126
include wall.inc
fix 1 move wall/lj126 xlo -5.0 ${eps} ${sig} 4.0 xhi 5.0 ${eps} ${sig} 4.0
fix_modify 1 energy yes
run 5 post no
variable name string table-lj126
include wall.inc
fix 1 move wall/table linear 1000 xlo -5.0 walltab.dat LJ126 4.0 xhi 5.0 walltab.dat LJ126 4.0
fix_modify 1 energy yes
run 5 post no
variable name string spline-lj126
include wall.inc
fix 1 move wall/table spline 200 xlo -5.0 walltab.dat LJ126 4.0 xhi 5.0 walltab.dat LJ126 4.0
fix_modify 1 energy yes
run 5 post no
variable name string pair-lj126
include wall.inc
pair_style lj/cut 4.0
pair_coeff 1 1 ${eps} ${sig}
pair_modify shift yes
run 5 post no
variable d0 index 20.0
variable al index 2.0
variable r0 index 1.2
variable name string wall-morse
include wall.inc
fix 1 move wall/morse xlo -5.0 ${d0} ${al} ${r0} 4.0 xhi 5.0 ${d0} ${al} ${r0} 4.0
fix_modify 1 energy yes
run 5 post no
variable name string table-morse
include wall.inc
fix 1 move wall/table linear 1000 xlo -5.0 walltab.dat MORSE 4.0 xhi 5.0 walltab.dat MORSE 4.0
fix_modify 1 energy yes
run 5 post no
variable name string spline-morse
include wall.inc
fix 1 move wall/table spline 1000 xlo -5.0 walltab.dat MORSE 4.0 xhi 5.0 walltab.dat MORSE 4.0
fix_modify 1 energy yes
run 5 post no
variable name string bond-morse
include wall.inc
bond_style morse
bond_coeff 1 ${d0} ${al} ${r0}
run 5 post no
variable name string pair-morse
include wall.inc
pair_style morse 4.0
pair_coeff 1 1 ${d0} ${al} ${r0}
pair_modify shift yes
run 5 post no
shell rm -f walltest.restart

View File

@ -0,0 +1,882 @@
LAMMPS (8 Feb 2023)
using 1 OpenMP thread(s) per MPI task
units real
atom_style bond
boundary f p p
region box block -5.000000000000001 5.000000000000001 -5 5 -5 5
create_box 1 box bond/types 1 extra/bond/per/atom 1 extra/special/per/atom 1
Created orthogonal box = (-5 -5 -5) to (5 5 5)
1 by 1 by 1 MPI processor grid
pair_style zero 5.0
pair_coeff * *
mass * 1.0
bond_style zero
bond_coeff * 1.0
create_atoms 1 single -4.0 0.0 0.0
Created 1 atoms
using lattice units in orthogonal box = (-5 -5 -5) to (5 5 5)
create_atoms CPU = 0.000 seconds
create_atoms 1 single 4.0 0.0 0.0
Created 1 atoms
using lattice units in orthogonal box = (-5 -5 -5) to (5 5 5)
create_atoms CPU = 0.000 seconds
create_atoms 1 single -5.0 0.0 0.0
Created 1 atoms
using lattice units in orthogonal box = (-5 -5 -5) to (5 5 5)
create_atoms CPU = 0.000 seconds
create_atoms 1 single 5.0 0.0 0.0
Created 1 atoms
using lattice units in orthogonal box = (-5 -5 -5) to (5 5 5)
create_atoms CPU = 0.000 seconds
create_bonds single/bond 1 3 1
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
1 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
create_bonds single/bond 1 4 2
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
1 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
group move id 1:2
2 atoms in group move
write_restart walltest.restart
System init for write_restart ...
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 = 7
ghost atom cutoff = 7
binsize = 3.5, bins = 3 3 3
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair zero, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
variable name string wall-harmonic
include wall.inc
clear
using 1 OpenMP thread(s) per MPI task
read_restart walltest.restart
Reading restart file ...
restart file = 8 Feb 2023, LAMMPS = 8 Feb 2023
restoring atom style bond from restart
orthogonal box = (-5 -5 -5) to (5 5 5)
1 by 1 by 1 MPI processor grid
restoring pair style zero from restart
restoring bond style zero from restart
4 atoms
2 bonds
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
1 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_restart CPU = 0.001 seconds
# log ${name}.log
compute ea move pe/atom
compute pe move reduce sum c_ea
special_bonds lj/coul 1.0 1.0 1.0
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 1 1 1
special bond factors coul: 1 1 1
1 = max # of 1-2 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
thermo_style custom step temp press ke pe etotal c_pe
thermo 1
thermo_modify format float %14.10g
fix 0 move nve
# dump 1 all custom 1 ${name}.dump id x fx
# dump_modify 1 format float %20.15g
fix 1 move wall/harmonic xlo -5.0 100 0.0 4.0 xhi 5.0 100 1.0 4.0
fix_modify 1 energy yes
run 5 post no
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 = 7
ghost atom cutoff = 7
binsize = 3.5, bins = 3 3 3
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair zero, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.429 | 4.429 | 4.429 Mbytes
Step Temp Press KinEng PotEng TotEng c_pe
0 0 0 0 1800 1800 0
1 16146.37291 6600.295604 144.3878119 1652.527054 1796.914866 0
2 59294.04011 24238.149 530.232812 1258.437705 1788.670517 0
3 115302.7492 47133.32419 1031.086781 746.8819904 1777.968771 0
4 165817.4572 67782.66799 1482.811029 285.5057515 1768.31678 0
5 194283.6024 79419.02582 1737.367544 25.51012833 1762.877672 0
Loop time of 7.6828e-05 on 1 procs for 5 steps with 4 atoms
variable name string lepton-harmonic
include wall.inc
clear
using 1 OpenMP thread(s) per MPI task
read_restart walltest.restart
Reading restart file ...
restart file = 8 Feb 2023, LAMMPS = 8 Feb 2023
restoring atom style bond from restart
orthogonal box = (-5 -5 -5) to (5 5 5)
1 by 1 by 1 MPI processor grid
restoring pair style zero from restart
restoring bond style zero from restart
4 atoms
2 bonds
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
1 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_restart CPU = 0.000 seconds
# log ${name}.log
compute ea move pe/atom
compute pe move reduce sum c_ea
special_bonds lj/coul 1.0 1.0 1.0
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 1 1 1
special bond factors coul: 1 1 1
1 = max # of 1-2 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
thermo_style custom step temp press ke pe etotal c_pe
thermo 1
thermo_modify format float %14.10g
fix 0 move nve
# dump 1 all custom 1 ${name}.dump id x fx
# dump_modify 1 format float %20.15g
fix 1 move wall/lepton xlo -5.0 "k*(r-rc)^2;k=100.0" 4.0 xhi 5.0 "k*(r-rc)^2;k=100.0" 4.0
fix_modify 1 energy yes
run 5 post no
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 = 7
ghost atom cutoff = 7
binsize = 3.5, bins = 3 3 3
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair zero, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.429 | 4.429 | 4.429 Mbytes
Step Temp Press KinEng PotEng TotEng c_pe
0 0 0 0 1800 1800 0
1 16146.37291 6600.295604 144.3878119 1652.527054 1796.914866 0
2 59294.04011 24238.149 530.232812 1258.437705 1788.670517 0
3 115302.7492 47133.32419 1031.086781 746.8819904 1777.968771 0
4 165817.4572 67782.66799 1482.811029 285.5057515 1768.31678 0
5 194283.6024 79419.02582 1737.367544 25.51012833 1762.877672 0
Loop time of 0.00134915 on 1 procs for 5 steps with 4 atoms
variable name string bond-harmonic
include wall.inc
clear
using 1 OpenMP thread(s) per MPI task
read_restart walltest.restart
Reading restart file ...
restart file = 8 Feb 2023, LAMMPS = 8 Feb 2023
restoring atom style bond from restart
orthogonal box = (-5 -5 -5) to (5 5 5)
1 by 1 by 1 MPI processor grid
restoring pair style zero from restart
restoring bond style zero from restart
4 atoms
2 bonds
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
1 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_restart CPU = 0.000 seconds
# log ${name}.log
compute ea move pe/atom
compute pe move reduce sum c_ea
special_bonds lj/coul 1.0 1.0 1.0
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 1 1 1
special bond factors coul: 1 1 1
1 = max # of 1-2 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
thermo_style custom step temp press ke pe etotal c_pe
thermo 1
thermo_modify format float %14.10g
fix 0 move nve
# dump 1 all custom 1 ${name}.dump id x fx
# dump_modify 1 format float %20.15g
bond_style harmonic
bond_coeff 1 100 4.0
run 5 post no
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 = 7
ghost atom cutoff = 7
binsize = 3.5, bins = 3 3 3
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair zero, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
WARNING: Communication cutoff 7 is shorter than a bond length based estimate of 8. This may lead to errors. (src/comm.cpp:723)
Per MPI rank memory allocation (min/avg/max) = 4.429 | 4.429 | 4.429 Mbytes
Step Temp Press KinEng PotEng TotEng c_pe
0 0 27427.366 0 1800 1800 900
1 16146.37291 36178.74173 144.3878119 1652.527054 1796.914866 826.263527
2 59294.04011 58444.6962 530.232812 1258.437705 1788.670517 629.2188524
3 115302.7492 83661.44348 1031.086781 746.8819904 1777.968771 373.4409952
4 165817.4572 98424.89283 1482.811029 285.5057515 1768.31678 142.7528758
5 194283.6024 91313.53086 1737.367544 25.51012833 1762.877672 12.75506417
Loop time of 4.6572e-05 on 1 procs for 5 steps with 4 atoms
variable name string pair-harmonic
include wall.inc
clear
using 1 OpenMP thread(s) per MPI task
read_restart walltest.restart
Reading restart file ...
restart file = 8 Feb 2023, LAMMPS = 8 Feb 2023
restoring atom style bond from restart
orthogonal box = (-5 -5 -5) to (5 5 5)
1 by 1 by 1 MPI processor grid
restoring pair style zero from restart
restoring bond style zero from restart
4 atoms
2 bonds
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
1 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_restart CPU = 0.000 seconds
# log ${name}.log
compute ea move pe/atom
compute pe move reduce sum c_ea
special_bonds lj/coul 1.0 1.0 1.0
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 1 1 1
special bond factors coul: 1 1 1
1 = max # of 1-2 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
thermo_style custom step temp press ke pe etotal c_pe
thermo 1
thermo_modify format float %14.10g
fix 0 move nve
# dump 1 all custom 1 ${name}.dump id x fx
# dump_modify 1 format float %20.15g
pair_style harmonic/cut
pair_coeff 1 1 100 4.0
run 5 post no
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 = 6
ghost atom cutoff = 6
binsize = 3, bins = 4 4 4
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair harmonic/cut, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.43 | 4.43 | 4.43 Mbytes
Step Temp Press KinEng PotEng TotEng c_pe
0 0 27427.366 0 1800 1800 900
1 16146.37291 36178.74173 144.3878119 1652.527054 1796.914866 826.263527
2 59294.04011 58444.6962 530.232812 1258.437705 1788.670517 629.2188524
3 115302.7492 83661.44348 1031.086781 746.8819904 1777.968771 373.4409952
4 165817.4572 98424.89283 1482.811029 285.5057515 1768.31678 142.7528758
5 170540.4005 97560.47089 1525.045619 190.8165235 1715.862142 178.0614593
Loop time of 8.4058e-05 on 1 procs for 5 steps with 4 atoms
variable eps index 0.02
variable sig index 2.0
variable name string wall-lj126
include wall.inc
clear
using 1 OpenMP thread(s) per MPI task
read_restart walltest.restart
Reading restart file ...
restart file = 8 Feb 2023, LAMMPS = 8 Feb 2023
restoring atom style bond from restart
orthogonal box = (-5 -5 -5) to (5 5 5)
1 by 1 by 1 MPI processor grid
restoring pair style zero from restart
restoring bond style zero from restart
4 atoms
2 bonds
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
1 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_restart CPU = 0.000 seconds
# log ${name}.log
compute ea move pe/atom
compute pe move reduce sum c_ea
special_bonds lj/coul 1.0 1.0 1.0
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 1 1 1
special bond factors coul: 1 1 1
1 = max # of 1-2 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
thermo_style custom step temp press ke pe etotal c_pe
thermo 1
thermo_modify format float %14.10g
fix 0 move nve
# dump 1 all custom 1 ${name}.dump id x fx
# dump_modify 1 format float %20.15g
fix 1 move wall/lj126 xlo -5.0 ${eps} ${sig} 4.0 xhi 5.0 ${eps} ${sig} 4.0
fix 1 move wall/lj126 xlo -5.0 0.02 ${sig} 4.0 xhi 5.0 ${eps} ${sig} 4.0
fix 1 move wall/lj126 xlo -5.0 0.02 2.0 4.0 xhi 5.0 ${eps} ${sig} 4.0
fix 1 move wall/lj126 xlo -5.0 0.02 2.0 4.0 xhi 5.0 0.02 ${sig} 4.0
fix 1 move wall/lj126 xlo -5.0 0.02 2.0 4.0 xhi 5.0 0.02 2.0 4.0
fix_modify 1 energy yes
run 5 post no
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 = 7
ghost atom cutoff = 7
binsize = 3.5, bins = 3 3 3
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair zero, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.429 | 4.429 | 4.429 Mbytes
Step Temp Press KinEng PotEng TotEng c_pe
0 0 0 0 645.1224609 645.1224609 0
1 178153.8707 72825.53278 1593.128544 0.2259591031 1593.354503 0
2 178262.3593 72869.88065 1594.098696 -0.02237405364 1594.076322 0
3 178259.9436 72868.89314 1594.077094 -0.003385746252 1594.073708 0
4 178259.4975 72868.71081 1594.073105 0 1594.073105 0
5 178259.4975 72868.71081 1594.073105 0 1594.073105 0
WARNING: Bond/angle/dihedral extent > half of periodic box length (src/domain.cpp:936)
Loop time of 4.3942e-05 on 1 procs for 5 steps with 4 atoms
variable name string lepton-lj126
include wall.inc
clear
using 1 OpenMP thread(s) per MPI task
read_restart walltest.restart
Reading restart file ...
restart file = 8 Feb 2023, LAMMPS = 8 Feb 2023
restoring atom style bond from restart
orthogonal box = (-5 -5 -5) to (5 5 5)
1 by 1 by 1 MPI processor grid
restoring pair style zero from restart
restoring bond style zero from restart
4 atoms
2 bonds
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
1 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_restart CPU = 0.000 seconds
# log ${name}.log
compute ea move pe/atom
compute pe move reduce sum c_ea
special_bonds lj/coul 1.0 1.0 1.0
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 1 1 1
special bond factors coul: 1 1 1
1 = max # of 1-2 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
thermo_style custom step temp press ke pe etotal c_pe
thermo 1
thermo_modify format float %14.10g
fix 0 move nve
# dump 1 all custom 1 ${name}.dump id x fx
# dump_modify 1 format float %20.15g
fix 1 move wall/lepton xlo -5.0 "4.0*epsilon*((sigma/r)^12 - (sigma/r)^6);epsilon=v_eps;sigma=v_sig" 4.0 xhi 5.0 "4.0*epsilon*((sigma/r)^12 - (sigma/r)^6);epsilon=v_eps;sigma=v_sig" 4.0
fix_modify 1 energy yes
run 5 post no
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 = 7
ghost atom cutoff = 7
binsize = 3.5, bins = 3 3 3
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair zero, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.429 | 4.429 | 4.429 Mbytes
Step Temp Press KinEng PotEng TotEng c_pe
0 0 0 0 645.1224609 645.1224609 0
1 178153.8707 72825.53278 1593.128544 0.2259591031 1593.354503 0
2 178262.3593 72869.88065 1594.098696 -0.02237405364 1594.076322 0
3 178259.9436 72868.89314 1594.077094 -0.003385746252 1594.073708 0
4 178259.4975 72868.71081 1594.073105 0 1594.073105 0
5 178259.4975 72868.71081 1594.073105 0 1594.073105 0
WARNING: Bond/angle/dihedral extent > half of periodic box length (src/domain.cpp:936)
Loop time of 0.00298781 on 1 procs for 5 steps with 4 atoms
variable name string pair-lj126
include wall.inc
clear
using 1 OpenMP thread(s) per MPI task
read_restart walltest.restart
Reading restart file ...
restart file = 8 Feb 2023, LAMMPS = 8 Feb 2023
restoring atom style bond from restart
orthogonal box = (-5 -5 -5) to (5 5 5)
1 by 1 by 1 MPI processor grid
restoring pair style zero from restart
restoring bond style zero from restart
4 atoms
2 bonds
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
1 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_restart CPU = 0.000 seconds
# log ${name}.log
compute ea move pe/atom
compute pe move reduce sum c_ea
special_bonds lj/coul 1.0 1.0 1.0
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 1 1 1
special bond factors coul: 1 1 1
1 = max # of 1-2 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
thermo_style custom step temp press ke pe etotal c_pe
thermo 1
thermo_modify format float %14.10g
fix 0 move nve
# dump 1 all custom 1 ${name}.dump id x fx
# dump_modify 1 format float %20.15g
pair_style lj/cut 4.0
pair_coeff 1 1 ${eps} ${sig}
pair_coeff 1 1 0.02 ${sig}
pair_coeff 1 1 0.02 2.0
pair_modify shift yes
run 5 post no
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 = 6
ghost atom cutoff = 6
binsize = 3, bins = 4 4 4
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.43 | 4.43 | 4.43 Mbytes
Step Temp Press KinEng PotEng TotEng c_pe
0 0 178343.7047 0 645.1224609 645.1224609 322.5612305
1 178153.8707 72925.96146 1593.128544 0.2259591031 1593.354503 0.1129795516
2 178262.3593 72867.28485 1594.098696 -0.02237405364 1594.076322 -0.01118702682
3 178260.8147 72867.80305 1594.084884 -0.007499601847 1594.077384 -0.005806728722
4 176007.6835 72778.53677 1573.936415 2.772305717 1576.708721 2.772305717
5 1.132219912e+27 4.628275436e+26 1.012479748e+25 3.761972158e+12 1.012479748e+25 3.761972158e+12
WARNING: Bond/angle/dihedral extent > half of periodic box length (src/domain.cpp:936)
Loop time of 4.4455e-05 on 1 procs for 5 steps with 4 atoms
variable d0 index 20.0
variable al index 2.0
variable r0 index 1.2
variable name string wall-morse
include wall.inc
clear
using 1 OpenMP thread(s) per MPI task
read_restart walltest.restart
Reading restart file ...
restart file = 8 Feb 2023, LAMMPS = 8 Feb 2023
restoring atom style bond from restart
orthogonal box = (-5 -5 -5) to (5 5 5)
1 by 1 by 1 MPI processor grid
restoring pair style zero from restart
restoring bond style zero from restart
4 atoms
2 bonds
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
1 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_restart CPU = 0.000 seconds
# log ${name}.log
compute ea move pe/atom
compute pe move reduce sum c_ea
special_bonds lj/coul 1.0 1.0 1.0
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 1 1 1
special bond factors coul: 1 1 1
1 = max # of 1-2 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
thermo_style custom step temp press ke pe etotal c_pe
thermo 1
thermo_modify format float %14.10g
fix 0 move nve
# dump 1 all custom 1 ${name}.dump id x fx
# dump_modify 1 format float %20.15g
fix 1 move wall/morse xlo -5.0 ${d0} ${al} ${r0} 4.0 xhi 5.0 ${d0} ${al} ${r0} 4.0
fix 1 move wall/morse xlo -5.0 20.0 ${al} ${r0} 4.0 xhi 5.0 ${d0} ${al} ${r0} 4.0
fix 1 move wall/morse xlo -5.0 20.0 2.0 ${r0} 4.0 xhi 5.0 ${d0} ${al} ${r0} 4.0
fix 1 move wall/morse xlo -5.0 20.0 2.0 1.2 4.0 xhi 5.0 ${d0} ${al} ${r0} 4.0
fix 1 move wall/morse xlo -5.0 20.0 2.0 1.2 4.0 xhi 5.0 20.0 ${al} ${r0} 4.0
fix 1 move wall/morse xlo -5.0 20.0 2.0 1.2 4.0 xhi 5.0 20.0 2.0 ${r0} 4.0
fix 1 move wall/morse xlo -5.0 20.0 2.0 1.2 4.0 xhi 5.0 20.0 2.0 1.2 4.0
fix_modify 1 energy yes
run 5 post no
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 = 7
ghost atom cutoff = 7
binsize = 3.5, bins = 3 3 3
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair zero, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.429 | 4.429 | 4.429 Mbytes
Step Temp Press KinEng PotEng TotEng c_pe
0 0 0 0 -30.02905654 -30.02905654 0
1 146.0893547 59.71823711 1.30639385 -31.40065042 -30.09425657 0
2 485.8091411 198.5884977 4.34431431 -34.55987817 -30.21556386 0
3 822.0828974 336.0500941 7.351418888 -37.63613582 -30.28471693 0
4 1018.806679 416.4666136 9.110607565 -39.39265114 -30.28204357 0
5 1050.331347 429.3532307 9.392514704 -39.63687095 -30.24435625 0
Loop time of 7.6505e-05 on 1 procs for 5 steps with 4 atoms
variable name string lepton-morse
include wall.inc
clear
using 1 OpenMP thread(s) per MPI task
read_restart walltest.restart
Reading restart file ...
restart file = 8 Feb 2023, LAMMPS = 8 Feb 2023
restoring atom style bond from restart
orthogonal box = (-5 -5 -5) to (5 5 5)
1 by 1 by 1 MPI processor grid
restoring pair style zero from restart
restoring bond style zero from restart
4 atoms
2 bonds
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
1 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_restart CPU = 0.000 seconds
# log ${name}.log
compute ea move pe/atom
compute pe move reduce sum c_ea
special_bonds lj/coul 1.0 1.0 1.0
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 1 1 1
special bond factors coul: 1 1 1
1 = max # of 1-2 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
thermo_style custom step temp press ke pe etotal c_pe
thermo 1
thermo_modify format float %14.10g
fix 0 move nve
# dump 1 all custom 1 ${name}.dump id x fx
# dump_modify 1 format float %20.15g
fix 1 move wall/lepton xlo -5.0 "d0*(-1.0 + (1.0 - ralpha) * (1.0 - ralpha));ralpha=exp(-alpha*(r-r0));d0=v_d0;alpha=v_al;r0=v_r0" 4.0 xhi 5.0 "d0*(-1.0 + (1.0 - ralpha) * (1.0 - ralpha));ralpha=exp(-alpha*(r-r0));d0=v_d0;alpha=v_al;r0=v_r0" 4.0
fix_modify 1 energy yes
run 5 post no
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 = 7
ghost atom cutoff = 7
binsize = 3.5, bins = 3 3 3
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair zero, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.429 | 4.429 | 4.429 Mbytes
Step Temp Press KinEng PotEng TotEng c_pe
0 0 0 0 -30.02905654 -30.02905654 0
1 146.0893547 59.71823711 1.30639385 -31.40065042 -30.09425657 0
2 485.8091411 198.5884977 4.34431431 -34.55987817 -30.21556386 0
3 822.0828974 336.0500941 7.351418888 -37.63613582 -30.28471693 0
4 1018.806679 416.4666136 9.110607565 -39.39265114 -30.28204357 0
5 1050.331347 429.3532307 9.392514704 -39.63687095 -30.24435625 0
Loop time of 0.00266357 on 1 procs for 5 steps with 4 atoms
variable name string bond-morse
include wall.inc
clear
using 1 OpenMP thread(s) per MPI task
read_restart walltest.restart
Reading restart file ...
restart file = 8 Feb 2023, LAMMPS = 8 Feb 2023
restoring atom style bond from restart
orthogonal box = (-5 -5 -5) to (5 5 5)
1 by 1 by 1 MPI processor grid
restoring pair style zero from restart
restoring bond style zero from restart
4 atoms
2 bonds
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
1 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_restart CPU = 0.000 seconds
# log ${name}.log
compute ea move pe/atom
compute pe move reduce sum c_ea
special_bonds lj/coul 1.0 1.0 1.0
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 1 1 1
special bond factors coul: 1 1 1
1 = max # of 1-2 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
thermo_style custom step temp press ke pe etotal c_pe
thermo 1
thermo_modify format float %14.10g
fix 0 move nve
# dump 1 all custom 1 ${name}.dump id x fx
# dump_modify 1 format float %20.15g
bond_style morse
bond_coeff 1 ${d0} ${al} ${r0}
bond_coeff 1 20.0 ${al} ${r0}
bond_coeff 1 20.0 2.0 ${r0}
bond_coeff 1 20.0 2.0 1.2
run 5 post no
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 = 7
ghost atom cutoff = 7
binsize = 3.5, bins = 3 3 3
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair zero, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.429 | 4.429 | 4.429 Mbytes
Step Temp Press KinEng PotEng TotEng c_pe
0 0 2683.187147 0 9.675661328 9.675661328 4.837830664
1 146.0893547 2514.939772 1.30639385 8.304067455 9.610461305 4.152033728
2 485.8091411 2063.804037 4.34431431 5.144839701 9.489154012 2.572419851
3 822.0828974 1456.368913 7.351418888 2.06858205 9.420000938 1.034291025
4 1018.806679 823.4383177 9.110607565 0.3120667313 9.422674297 0.1560333657
5 1050.331347 253.0262957 9.392514704 0.06784692056 9.460361624 0.03392346028
Loop time of 0.000120428 on 1 procs for 5 steps with 4 atoms
variable name string pair-morse
include wall.inc
clear
using 1 OpenMP thread(s) per MPI task
read_restart walltest.restart
Reading restart file ...
restart file = 8 Feb 2023, LAMMPS = 8 Feb 2023
restoring atom style bond from restart
orthogonal box = (-5 -5 -5) to (5 5 5)
1 by 1 by 1 MPI processor grid
restoring pair style zero from restart
restoring bond style zero from restart
4 atoms
2 bonds
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
1 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_restart CPU = 0.000 seconds
# log ${name}.log
compute ea move pe/atom
compute pe move reduce sum c_ea
special_bonds lj/coul 1.0 1.0 1.0
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 1 1 1
special bond factors coul: 1 1 1
1 = max # of 1-2 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
thermo_style custom step temp press ke pe etotal c_pe
thermo 1
thermo_modify format float %14.10g
fix 0 move nve
# dump 1 all custom 1 ${name}.dump id x fx
# dump_modify 1 format float %20.15g
pair_style morse 4.0
pair_coeff 1 1 ${d0} ${al} ${r0}
pair_coeff 1 1 20.0 ${al} ${r0}
pair_coeff 1 1 20.0 2.0 ${r0}
pair_coeff 1 1 20.0 2.0 1.2
pair_modify shift yes
run 5 post no
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 = 6
ghost atom cutoff = 6
binsize = 3, bins = 4 4 4
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair morse, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.43 | 4.43 | 4.43 Mbytes
Step Temp Press KinEng PotEng TotEng c_pe
0 0 2683.187147 0 -30.02905654 -30.02905654 -15.01452827
1 146.0893547 2514.939772 1.30639385 -31.40065042 -30.09425657 -15.70032521
2 485.8091411 2063.804037 4.34431431 -34.55987817 -30.21556386 -17.27993908
3 822.0828974 1456.368913 7.351418888 -37.63613582 -30.28471693 -18.81806791
4 1018.806679 823.4383177 9.110607565 -39.39265114 -30.28204357 -19.69632557
5 1050.331347 253.0262957 9.392514704 -39.63687095 -30.24435625 -19.81843547
Loop time of 3.6356e-05 on 1 procs for 5 steps with 4 atoms
shell rm -f walltest.restart
Total wall time: 0:00:00

View File

@ -0,0 +1,882 @@
LAMMPS (8 Feb 2023)
using 1 OpenMP thread(s) per MPI task
units real
atom_style bond
boundary f p p
region box block -5.000000000000001 5.000000000000001 -5 5 -5 5
create_box 1 box bond/types 1 extra/bond/per/atom 1 extra/special/per/atom 1
Created orthogonal box = (-5 -5 -5) to (5 5 5)
1 by 2 by 2 MPI processor grid
pair_style zero 5.0
pair_coeff * *
mass * 1.0
bond_style zero
bond_coeff * 1.0
create_atoms 1 single -4.0 0.0 0.0
Created 1 atoms
using lattice units in orthogonal box = (-5 -5 -5) to (5 5 5)
create_atoms CPU = 0.000 seconds
create_atoms 1 single 4.0 0.0 0.0
Created 1 atoms
using lattice units in orthogonal box = (-5 -5 -5) to (5 5 5)
create_atoms CPU = 0.000 seconds
create_atoms 1 single -5.0 0.0 0.0
Created 1 atoms
using lattice units in orthogonal box = (-5 -5 -5) to (5 5 5)
create_atoms CPU = 0.000 seconds
create_atoms 1 single 5.0 0.0 0.0
Created 1 atoms
using lattice units in orthogonal box = (-5 -5 -5) to (5 5 5)
create_atoms CPU = 0.000 seconds
create_bonds single/bond 1 3 1
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
1 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
create_bonds single/bond 1 4 2
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
1 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
3 = max # of special neighbors
special bonds CPU = 0.001 seconds
group move id 1:2
2 atoms in group move
write_restart walltest.restart
System init for write_restart ...
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 = 7
ghost atom cutoff = 7
binsize = 3.5, bins = 3 3 3
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair zero, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
variable name string wall-harmonic
include wall.inc
clear
using 1 OpenMP thread(s) per MPI task
read_restart walltest.restart
Reading restart file ...
restart file = 8 Feb 2023, LAMMPS = 8 Feb 2023
restoring atom style bond from restart
orthogonal box = (-5 -5 -5) to (5 5 5)
1 by 2 by 2 MPI processor grid
restoring pair style zero from restart
restoring bond style zero from restart
4 atoms
2 bonds
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
1 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_restart CPU = 0.001 seconds
# log ${name}.log
compute ea move pe/atom
compute pe move reduce sum c_ea
special_bonds lj/coul 1.0 1.0 1.0
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 1 1 1
special bond factors coul: 1 1 1
1 = max # of 1-2 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
thermo_style custom step temp press ke pe etotal c_pe
thermo 1
thermo_modify format float %14.10g
fix 0 move nve
# dump 1 all custom 1 ${name}.dump id x fx
# dump_modify 1 format float %20.15g
fix 1 move wall/harmonic xlo -5.0 100 0.0 4.0 xhi 5.0 100 1.0 4.0
fix_modify 1 energy yes
run 5 post no
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 = 7
ghost atom cutoff = 7
binsize = 3.5, bins = 3 3 3
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair zero, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.32 | 4.379 | 4.559 Mbytes
Step Temp Press KinEng PotEng TotEng c_pe
0 0 0 0 1800 1800 0
1 16146.37291 6600.295604 144.3878119 1652.527054 1796.914866 0
2 59294.04011 24238.149 530.232812 1258.437705 1788.670517 0
3 115302.7492 47133.32419 1031.086781 746.8819904 1777.968771 0
4 165817.4572 67782.66799 1482.811029 285.5057515 1768.31678 0
5 194283.6024 79419.02582 1737.367544 25.51012833 1762.877672 0
Loop time of 0.000266179 on 4 procs for 5 steps with 4 atoms
variable name string lepton-harmonic
include wall.inc
clear
using 1 OpenMP thread(s) per MPI task
read_restart walltest.restart
Reading restart file ...
restart file = 8 Feb 2023, LAMMPS = 8 Feb 2023
restoring atom style bond from restart
orthogonal box = (-5 -5 -5) to (5 5 5)
1 by 2 by 2 MPI processor grid
restoring pair style zero from restart
restoring bond style zero from restart
4 atoms
2 bonds
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
1 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_restart CPU = 0.001 seconds
# log ${name}.log
compute ea move pe/atom
compute pe move reduce sum c_ea
special_bonds lj/coul 1.0 1.0 1.0
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 1 1 1
special bond factors coul: 1 1 1
1 = max # of 1-2 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
thermo_style custom step temp press ke pe etotal c_pe
thermo 1
thermo_modify format float %14.10g
fix 0 move nve
# dump 1 all custom 1 ${name}.dump id x fx
# dump_modify 1 format float %20.15g
fix 1 move wall/lepton xlo -5.0 "k*(r-rc)^2;k=100.0" 4.0 xhi 5.0 "k*(r-rc)^2;k=100.0" 4.0
fix_modify 1 energy yes
run 5 post no
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 = 7
ghost atom cutoff = 7
binsize = 3.5, bins = 3 3 3
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair zero, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.32 | 4.379 | 4.559 Mbytes
Step Temp Press KinEng PotEng TotEng c_pe
0 0 0 0 1800 1800 0
1 16146.37291 6600.295604 144.3878119 1652.527054 1796.914866 0
2 59294.04011 24238.149 530.232812 1258.437705 1788.670517 0
3 115302.7492 47133.32419 1031.086781 746.8819904 1777.968771 0
4 165817.4572 67782.66799 1482.811029 285.5057515 1768.31678 0
5 194283.6024 79419.02582 1737.367544 25.51012833 1762.877672 0
Loop time of 0.00230794 on 4 procs for 5 steps with 4 atoms
variable name string bond-harmonic
include wall.inc
clear
using 1 OpenMP thread(s) per MPI task
read_restart walltest.restart
Reading restart file ...
restart file = 8 Feb 2023, LAMMPS = 8 Feb 2023
restoring atom style bond from restart
orthogonal box = (-5 -5 -5) to (5 5 5)
1 by 2 by 2 MPI processor grid
restoring pair style zero from restart
restoring bond style zero from restart
4 atoms
2 bonds
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
1 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_restart CPU = 0.001 seconds
# log ${name}.log
compute ea move pe/atom
compute pe move reduce sum c_ea
special_bonds lj/coul 1.0 1.0 1.0
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 1 1 1
special bond factors coul: 1 1 1
1 = max # of 1-2 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
thermo_style custom step temp press ke pe etotal c_pe
thermo 1
thermo_modify format float %14.10g
fix 0 move nve
# dump 1 all custom 1 ${name}.dump id x fx
# dump_modify 1 format float %20.15g
bond_style harmonic
bond_coeff 1 100 4.0
run 5 post no
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 = 7
ghost atom cutoff = 7
binsize = 3.5, bins = 3 3 3
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair zero, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
WARNING: Communication cutoff 7 is shorter than a bond length based estimate of 8. This may lead to errors. (src/comm.cpp:723)
Per MPI rank memory allocation (min/avg/max) = 4.32 | 4.379 | 4.559 Mbytes
Step Temp Press KinEng PotEng TotEng c_pe
0 0 27427.366 0 1800 1800 900
1 16146.37291 36178.74173 144.3878119 1652.527054 1796.914866 826.263527
2 59294.04011 58444.6962 530.232812 1258.437705 1788.670517 629.2188524
3 115302.7492 83661.44348 1031.086781 746.8819904 1777.968771 373.4409952
4 165817.4572 98424.89283 1482.811029 285.5057515 1768.31678 142.7528758
5 194283.6024 91313.53086 1737.367544 25.51012833 1762.877672 12.75506417
Loop time of 0.000358068 on 4 procs for 5 steps with 4 atoms
variable name string pair-harmonic
include wall.inc
clear
using 1 OpenMP thread(s) per MPI task
read_restart walltest.restart
Reading restart file ...
restart file = 8 Feb 2023, LAMMPS = 8 Feb 2023
restoring atom style bond from restart
orthogonal box = (-5 -5 -5) to (5 5 5)
1 by 2 by 2 MPI processor grid
restoring pair style zero from restart
restoring bond style zero from restart
4 atoms
2 bonds
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
1 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_restart CPU = 0.001 seconds
# log ${name}.log
compute ea move pe/atom
compute pe move reduce sum c_ea
special_bonds lj/coul 1.0 1.0 1.0
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 1 1 1
special bond factors coul: 1 1 1
1 = max # of 1-2 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
thermo_style custom step temp press ke pe etotal c_pe
thermo 1
thermo_modify format float %14.10g
fix 0 move nve
# dump 1 all custom 1 ${name}.dump id x fx
# dump_modify 1 format float %20.15g
pair_style harmonic/cut
pair_coeff 1 1 100 4.0
run 5 post no
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 = 6
ghost atom cutoff = 6
binsize = 3, bins = 4 4 4
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair harmonic/cut, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.32 | 4.38 | 4.56 Mbytes
Step Temp Press KinEng PotEng TotEng c_pe
0 0 27427.366 0 1800 1800 900
1 16146.37291 36178.74173 144.3878119 1652.527054 1796.914866 826.263527
2 59294.04011 58444.6962 530.232812 1258.437705 1788.670517 629.2188524
3 115302.7492 83661.44348 1031.086781 746.8819904 1777.968771 373.4409952
4 165817.4572 98424.89283 1482.811029 285.5057515 1768.31678 142.7528758
5 170540.4005 97560.47089 1525.045619 190.8165235 1715.862142 178.0614593
Loop time of 0.000341881 on 4 procs for 5 steps with 4 atoms
variable eps index 0.02
variable sig index 2.0
variable name string wall-lj126
include wall.inc
clear
using 1 OpenMP thread(s) per MPI task
read_restart walltest.restart
Reading restart file ...
restart file = 8 Feb 2023, LAMMPS = 8 Feb 2023
restoring atom style bond from restart
orthogonal box = (-5 -5 -5) to (5 5 5)
1 by 2 by 2 MPI processor grid
restoring pair style zero from restart
restoring bond style zero from restart
4 atoms
2 bonds
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
1 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_restart CPU = 0.001 seconds
# log ${name}.log
compute ea move pe/atom
compute pe move reduce sum c_ea
special_bonds lj/coul 1.0 1.0 1.0
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 1 1 1
special bond factors coul: 1 1 1
1 = max # of 1-2 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
thermo_style custom step temp press ke pe etotal c_pe
thermo 1
thermo_modify format float %14.10g
fix 0 move nve
# dump 1 all custom 1 ${name}.dump id x fx
# dump_modify 1 format float %20.15g
fix 1 move wall/lj126 xlo -5.0 ${eps} ${sig} 4.0 xhi 5.0 ${eps} ${sig} 4.0
fix 1 move wall/lj126 xlo -5.0 0.02 ${sig} 4.0 xhi 5.0 ${eps} ${sig} 4.0
fix 1 move wall/lj126 xlo -5.0 0.02 2.0 4.0 xhi 5.0 ${eps} ${sig} 4.0
fix 1 move wall/lj126 xlo -5.0 0.02 2.0 4.0 xhi 5.0 0.02 ${sig} 4.0
fix 1 move wall/lj126 xlo -5.0 0.02 2.0 4.0 xhi 5.0 0.02 2.0 4.0
fix_modify 1 energy yes
run 5 post no
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 = 7
ghost atom cutoff = 7
binsize = 3.5, bins = 3 3 3
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair zero, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.32 | 4.379 | 4.559 Mbytes
Step Temp Press KinEng PotEng TotEng c_pe
0 0 0 0 645.1224609 645.1224609 0
1 178153.8707 72825.53278 1593.128544 0.2259591031 1593.354503 0
2 178262.3593 72869.88065 1594.098696 -0.02237405364 1594.076322 0
3 178259.9436 72868.89314 1594.077094 -0.003385746252 1594.073708 0
4 178259.4975 72868.71081 1594.073105 0 1594.073105 0
5 178259.4975 72868.71081 1594.073105 0 1594.073105 0
WARNING: Bond/angle/dihedral extent > half of periodic box length (src/domain.cpp:936)
Loop time of 0.000345376 on 4 procs for 5 steps with 4 atoms
variable name string lepton-lj126
include wall.inc
clear
using 1 OpenMP thread(s) per MPI task
read_restart walltest.restart
Reading restart file ...
restart file = 8 Feb 2023, LAMMPS = 8 Feb 2023
restoring atom style bond from restart
orthogonal box = (-5 -5 -5) to (5 5 5)
1 by 2 by 2 MPI processor grid
restoring pair style zero from restart
restoring bond style zero from restart
4 atoms
2 bonds
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
1 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_restart CPU = 0.001 seconds
# log ${name}.log
compute ea move pe/atom
compute pe move reduce sum c_ea
special_bonds lj/coul 1.0 1.0 1.0
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 1 1 1
special bond factors coul: 1 1 1
1 = max # of 1-2 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
thermo_style custom step temp press ke pe etotal c_pe
thermo 1
thermo_modify format float %14.10g
fix 0 move nve
# dump 1 all custom 1 ${name}.dump id x fx
# dump_modify 1 format float %20.15g
fix 1 move wall/lepton xlo -5.0 "4.0*epsilon*((sigma/r)^12 - (sigma/r)^6);epsilon=v_eps;sigma=v_sig" 4.0 xhi 5.0 "4.0*epsilon*((sigma/r)^12 - (sigma/r)^6);epsilon=v_eps;sigma=v_sig" 4.0
fix_modify 1 energy yes
run 5 post no
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 = 7
ghost atom cutoff = 7
binsize = 3.5, bins = 3 3 3
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair zero, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.32 | 4.379 | 4.559 Mbytes
Step Temp Press KinEng PotEng TotEng c_pe
0 0 0 0 645.1224609 645.1224609 0
1 178153.8707 72825.53278 1593.128544 0.2259591031 1593.354503 0
2 178262.3593 72869.88065 1594.098696 -0.02237405364 1594.076322 0
3 178259.9436 72868.89314 1594.077094 -0.003385746252 1594.073708 0
4 178259.4975 72868.71081 1594.073105 0 1594.073105 0
5 178259.4975 72868.71081 1594.073105 0 1594.073105 0
WARNING: Bond/angle/dihedral extent > half of periodic box length (src/domain.cpp:936)
Loop time of 0.00332789 on 4 procs for 5 steps with 4 atoms
variable name string pair-lj126
include wall.inc
clear
using 1 OpenMP thread(s) per MPI task
read_restart walltest.restart
Reading restart file ...
restart file = 8 Feb 2023, LAMMPS = 8 Feb 2023
restoring atom style bond from restart
orthogonal box = (-5 -5 -5) to (5 5 5)
1 by 2 by 2 MPI processor grid
restoring pair style zero from restart
restoring bond style zero from restart
4 atoms
2 bonds
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
1 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_restart CPU = 0.001 seconds
# log ${name}.log
compute ea move pe/atom
compute pe move reduce sum c_ea
special_bonds lj/coul 1.0 1.0 1.0
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 1 1 1
special bond factors coul: 1 1 1
1 = max # of 1-2 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
thermo_style custom step temp press ke pe etotal c_pe
thermo 1
thermo_modify format float %14.10g
fix 0 move nve
# dump 1 all custom 1 ${name}.dump id x fx
# dump_modify 1 format float %20.15g
pair_style lj/cut 4.0
pair_coeff 1 1 ${eps} ${sig}
pair_coeff 1 1 0.02 ${sig}
pair_coeff 1 1 0.02 2.0
pair_modify shift yes
run 5 post no
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 = 6
ghost atom cutoff = 6
binsize = 3, bins = 4 4 4
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.32 | 4.38 | 4.56 Mbytes
Step Temp Press KinEng PotEng TotEng c_pe
0 0 178343.7047 0 645.1224609 645.1224609 322.5612305
1 178153.8707 72925.96146 1593.128544 0.2259591031 1593.354503 0.1129795516
2 178262.3593 72867.28485 1594.098696 -0.02237405364 1594.076322 -0.01118702682
3 178260.8147 72867.80305 1594.084884 -0.007499601847 1594.077384 -0.005806728722
4 176007.6835 72778.53677 1573.936415 2.772305717 1576.708721 2.772305717
5 1.132219912e+27 4.628275436e+26 1.012479748e+25 3.761972158e+12 1.012479748e+25 3.761972158e+12
WARNING: Bond/angle/dihedral extent > half of periodic box length (src/domain.cpp:936)
Loop time of 0.000404238 on 4 procs for 5 steps with 4 atoms
variable d0 index 20.0
variable al index 2.0
variable r0 index 1.2
variable name string wall-morse
include wall.inc
clear
using 1 OpenMP thread(s) per MPI task
read_restart walltest.restart
Reading restart file ...
restart file = 8 Feb 2023, LAMMPS = 8 Feb 2023
restoring atom style bond from restart
orthogonal box = (-5 -5 -5) to (5 5 5)
1 by 2 by 2 MPI processor grid
restoring pair style zero from restart
restoring bond style zero from restart
4 atoms
2 bonds
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
1 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_restart CPU = 0.001 seconds
# log ${name}.log
compute ea move pe/atom
compute pe move reduce sum c_ea
special_bonds lj/coul 1.0 1.0 1.0
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 1 1 1
special bond factors coul: 1 1 1
1 = max # of 1-2 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
thermo_style custom step temp press ke pe etotal c_pe
thermo 1
thermo_modify format float %14.10g
fix 0 move nve
# dump 1 all custom 1 ${name}.dump id x fx
# dump_modify 1 format float %20.15g
fix 1 move wall/morse xlo -5.0 ${d0} ${al} ${r0} 4.0 xhi 5.0 ${d0} ${al} ${r0} 4.0
fix 1 move wall/morse xlo -5.0 20.0 ${al} ${r0} 4.0 xhi 5.0 ${d0} ${al} ${r0} 4.0
fix 1 move wall/morse xlo -5.0 20.0 2.0 ${r0} 4.0 xhi 5.0 ${d0} ${al} ${r0} 4.0
fix 1 move wall/morse xlo -5.0 20.0 2.0 1.2 4.0 xhi 5.0 ${d0} ${al} ${r0} 4.0
fix 1 move wall/morse xlo -5.0 20.0 2.0 1.2 4.0 xhi 5.0 20.0 ${al} ${r0} 4.0
fix 1 move wall/morse xlo -5.0 20.0 2.0 1.2 4.0 xhi 5.0 20.0 2.0 ${r0} 4.0
fix 1 move wall/morse xlo -5.0 20.0 2.0 1.2 4.0 xhi 5.0 20.0 2.0 1.2 4.0
fix_modify 1 energy yes
run 5 post no
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 = 7
ghost atom cutoff = 7
binsize = 3.5, bins = 3 3 3
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair zero, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.32 | 4.379 | 4.559 Mbytes
Step Temp Press KinEng PotEng TotEng c_pe
0 0 0 0 -30.02905654 -30.02905654 0
1 146.0893547 59.71823711 1.30639385 -31.40065042 -30.09425657 0
2 485.8091411 198.5884977 4.34431431 -34.55987817 -30.21556386 0
3 822.0828974 336.0500941 7.351418888 -37.63613582 -30.28471693 0
4 1018.806679 416.4666136 9.110607565 -39.39265114 -30.28204357 0
5 1050.331347 429.3532307 9.392514704 -39.63687095 -30.24435625 0
Loop time of 0.000748817 on 4 procs for 5 steps with 4 atoms
variable name string lepton-morse
include wall.inc
clear
using 1 OpenMP thread(s) per MPI task
read_restart walltest.restart
Reading restart file ...
restart file = 8 Feb 2023, LAMMPS = 8 Feb 2023
restoring atom style bond from restart
orthogonal box = (-5 -5 -5) to (5 5 5)
1 by 2 by 2 MPI processor grid
restoring pair style zero from restart
restoring bond style zero from restart
4 atoms
2 bonds
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
1 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_restart CPU = 0.001 seconds
# log ${name}.log
compute ea move pe/atom
compute pe move reduce sum c_ea
special_bonds lj/coul 1.0 1.0 1.0
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 1 1 1
special bond factors coul: 1 1 1
1 = max # of 1-2 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
thermo_style custom step temp press ke pe etotal c_pe
thermo 1
thermo_modify format float %14.10g
fix 0 move nve
# dump 1 all custom 1 ${name}.dump id x fx
# dump_modify 1 format float %20.15g
fix 1 move wall/lepton xlo -5.0 "d0*(-1.0 + (1.0 - ralpha) * (1.0 - ralpha));ralpha=exp(-alpha*(r-r0));d0=v_d0;alpha=v_al;r0=v_r0" 4.0 xhi 5.0 "d0*(-1.0 + (1.0 - ralpha) * (1.0 - ralpha));ralpha=exp(-alpha*(r-r0));d0=v_d0;alpha=v_al;r0=v_r0" 4.0
fix_modify 1 energy yes
run 5 post no
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 = 7
ghost atom cutoff = 7
binsize = 3.5, bins = 3 3 3
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair zero, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.32 | 4.379 | 4.559 Mbytes
Step Temp Press KinEng PotEng TotEng c_pe
0 0 0 0 -30.02905654 -30.02905654 0
1 146.0893547 59.71823711 1.30639385 -31.40065042 -30.09425657 0
2 485.8091411 198.5884977 4.34431431 -34.55987817 -30.21556386 0
3 822.0828974 336.0500941 7.351418888 -37.63613582 -30.28471693 0
4 1018.806679 416.4666136 9.110607565 -39.39265114 -30.28204357 0
5 1050.331347 429.3532307 9.392514704 -39.63687095 -30.24435625 0
Loop time of 0.00347272 on 4 procs for 5 steps with 4 atoms
variable name string bond-morse
include wall.inc
clear
using 1 OpenMP thread(s) per MPI task
read_restart walltest.restart
Reading restart file ...
restart file = 8 Feb 2023, LAMMPS = 8 Feb 2023
restoring atom style bond from restart
orthogonal box = (-5 -5 -5) to (5 5 5)
1 by 2 by 2 MPI processor grid
restoring pair style zero from restart
restoring bond style zero from restart
4 atoms
2 bonds
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
1 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
3 = max # of special neighbors
special bonds CPU = 0.001 seconds
read_restart CPU = 0.001 seconds
# log ${name}.log
compute ea move pe/atom
compute pe move reduce sum c_ea
special_bonds lj/coul 1.0 1.0 1.0
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 1 1 1
special bond factors coul: 1 1 1
1 = max # of 1-2 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
thermo_style custom step temp press ke pe etotal c_pe
thermo 1
thermo_modify format float %14.10g
fix 0 move nve
# dump 1 all custom 1 ${name}.dump id x fx
# dump_modify 1 format float %20.15g
bond_style morse
bond_coeff 1 ${d0} ${al} ${r0}
bond_coeff 1 20.0 ${al} ${r0}
bond_coeff 1 20.0 2.0 ${r0}
bond_coeff 1 20.0 2.0 1.2
run 5 post no
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 = 7
ghost atom cutoff = 7
binsize = 3.5, bins = 3 3 3
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair zero, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.32 | 4.379 | 4.559 Mbytes
Step Temp Press KinEng PotEng TotEng c_pe
0 0 2683.187147 0 9.675661328 9.675661328 4.837830664
1 146.0893547 2514.939772 1.30639385 8.304067455 9.610461305 4.152033728
2 485.8091411 2063.804037 4.34431431 5.144839701 9.489154012 2.572419851
3 822.0828974 1456.368913 7.351418888 2.06858205 9.420000938 1.034291025
4 1018.806679 823.4383177 9.110607565 0.3120667313 9.422674297 0.1560333657
5 1050.331347 253.0262957 9.392514704 0.06784692056 9.460361624 0.03392346028
Loop time of 0.000859458 on 4 procs for 5 steps with 4 atoms
variable name string pair-morse
include wall.inc
clear
using 1 OpenMP thread(s) per MPI task
read_restart walltest.restart
Reading restart file ...
restart file = 8 Feb 2023, LAMMPS = 8 Feb 2023
restoring atom style bond from restart
orthogonal box = (-5 -5 -5) to (5 5 5)
1 by 2 by 2 MPI processor grid
restoring pair style zero from restart
restoring bond style zero from restart
4 atoms
2 bonds
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
1 = max # of 1-2 neighbors
0 = max # of 1-3 neighbors
0 = max # of 1-4 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_restart CPU = 0.001 seconds
# log ${name}.log
compute ea move pe/atom
compute pe move reduce sum c_ea
special_bonds lj/coul 1.0 1.0 1.0
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 1 1 1
special bond factors coul: 1 1 1
1 = max # of 1-2 neighbors
3 = max # of special neighbors
special bonds CPU = 0.000 seconds
thermo_style custom step temp press ke pe etotal c_pe
thermo 1
thermo_modify format float %14.10g
fix 0 move nve
# dump 1 all custom 1 ${name}.dump id x fx
# dump_modify 1 format float %20.15g
pair_style morse 4.0
pair_coeff 1 1 ${d0} ${al} ${r0}
pair_coeff 1 1 20.0 ${al} ${r0}
pair_coeff 1 1 20.0 2.0 ${r0}
pair_coeff 1 1 20.0 2.0 1.2
pair_modify shift yes
run 5 post no
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 = 6
ghost atom cutoff = 6
binsize = 3, bins = 4 4 4
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair morse, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.32 | 4.38 | 4.56 Mbytes
Step Temp Press KinEng PotEng TotEng c_pe
0 0 2683.187147 0 -30.02905654 -30.02905654 -15.01452827
1 146.0893547 2514.939772 1.30639385 -31.40065042 -30.09425657 -15.70032521
2 485.8091411 2063.804037 4.34431431 -34.55987817 -30.21556386 -17.27993908
3 822.0828974 1456.368913 7.351418888 -37.63613582 -30.28471693 -18.81806791
4 1018.806679 823.4383177 9.110607565 -39.39265114 -30.28204357 -19.69632557
5 1050.331347 253.0262957 9.392514704 -39.63687095 -30.24435625 -19.81843547
Loop time of 0.00029769 on 4 procs for 5 steps with 4 atoms
shell rm -f walltest.restart
Total wall time: 0:00:00

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

16
examples/wall/wall.inc Normal file
View File

@ -0,0 +1,16 @@
clear
read_restart walltest.restart
# log ${name}.log
compute ea move pe/atom
compute pe move reduce sum c_ea
special_bonds lj/coul 1.0 1.0 1.0
thermo_style custom step temp press ke pe etotal c_pe
thermo 1
thermo_modify format float %14.10g
fix 0 move nve
# dump 1 all custom 1 ${name}.dump id x fx
# dump_modify 1 format float %20.15g

1212
examples/wall/walltab.dat Normal file

File diff suppressed because it is too large Load Diff

View File

@ -54,7 +54,7 @@ BIN2C = $(CUDA_HOME)/bin/bin2c
CUDR_CPP = mpicxx -DMPI_GERYON -DUCL_NO_EXIT -DMPICH_IGNORE_CXX_SEEK -DOMPI_SKIP_MPICXX=1 -fPIC
CUDR_OPTS = -O2 $(LMP_INC)
CUDR = $(CUDR_CPP) $(CUDR_OPTS) $(CUDA_PROXY) $(CUDA_PRECISION) $(CUDA_INCLUDE) \
CUDR = $(CUDR_CPP) $(CUDR_OPTS) $(CUDA_MPS) $(CUDA_PRECISION) $(CUDA_INCLUDE) \
$(CUDPP_OPT)
# Headers for Geryon

View File

@ -30,7 +30,7 @@ AR = ar
BSH = /bin/sh
CUDPP_OPT =
CUDA_MPS = -DCUDA_PROXY
CUDA_MPS = -DCUDA_MPS_SUPPORT
# device code compiler and settings
@ -53,7 +53,7 @@ BIN2C = $(CUDA_HOME)/bin/bin2c
CUDR_CPP = mpicxx -fopenmp -DMPI_GERYON -DUCL_NO_EXIT -DMPICH_IGNORE_CXX_SEEK -DOMPI_SKIP_MPICXX=1 -fPIC
CUDR_OPTS = -O2 $(LMP_INC)
CUDR = $(CUDR_CPP) $(CUDR_OPTS) $(CUDA_PROXY) $(CUDA_PRECISION) $(CUDA_INCLUDE) \
CUDR = $(CUDR_CPP) $(CUDR_OPTS) $(CUDA_MPS) $(CUDA_PRECISION) $(CUDA_INCLUDE) \
$(CUDPP_OPT)
# Headers for Geryon

View File

@ -18,7 +18,7 @@ OCL_CPP = mpiicpc -std=c++11 -diag-disable=10441 -DMPICH_IGNORE_CXX_SEEK \
$(LMP_INC) $(OCL_INC) $(CPP_OPT)
OCL_LINK = -L$(ONEAPI_ROOT)/compiler/latest/linux/lib -lOpenCL
OCL_PREC = -D_SINGLE_DOUBLE
OCL_TUNE = -DMPI_GERYON -DCUDA_PROXY -DGERYON_NUMA_FISSION -DUCL_NO_EXIT
OCL_TUNE = -DMPI_GERYON -DGERYON_NUMA_FISSION -DUCL_NO_EXIT
BIN_DIR = ./
OBJ_DIR = ./

View File

@ -205,8 +205,7 @@ $(CUDA_HOME)/lib64/stubs), that can be used for linking.
Best performance with the GPU library is typically with multiple MPI processes
sharing the same GPU cards. For NVIDIA, this is most efficient with CUDA
MPS enabled. To prevent runtime errors for GPUs configured in exclusive process
mode with MPS, the GPU library should be build with either of the equivalent
-DCUDA_MPS_SUPPORT or -DCUDA_PROXY flags.
mode with MPS, the GPU library should be build with the -DCUDA_MPS_SUPPORT flag.
------------------------------------------------------------------------------
HIP BUILD NOTES
@ -244,7 +243,6 @@ _SINGLE_SINGLE Build library for single precision mode
_SINGLE_DOUBLE Build library for mixed precision mode
_DOUBLE_DOUBLE Build library for double precision mode
CUDA_MPS_SUPPORT Do not generate errors for exclusive mode for CUDA
CUDA_PROXY Same as above
MPI_GERYON Library should use MPI_Abort for unhandled errors
GERYON_NUMA_FISSION Accelerators with main memory NUMA are split into
multiple virtual accelerators for each NUMA node

View File

@ -277,7 +277,7 @@ int DeviceT::init_device(MPI_Comm /*world*/, MPI_Comm replica, const int ngpu,
MPI_Comm_split(node_comm,my_gpu,0,&_comm_gpu);
MPI_Comm_rank(_comm_gpu,&_gpu_rank);
#if !defined(CUDA_PROXY) && !defined(CUDA_MPS_SUPPORT)
#if !defined(CUDA_MPS_SUPPORT)
if (_procs_per_gpu>1 && !gpu->sharing_supported(my_gpu))
return -7;
#endif

8
src/.gitignore vendored
View File

@ -62,6 +62,8 @@
/angle_lepton.h
/dihedral_lepton.cpp
/dihedral_lepton.h
/fix_wall_lepton.cpp
/fix_wall_lepton.h
/lepton_utils.cpp
/lepton_utils.h
@ -1465,6 +1467,8 @@
/zstd_file_writer.cpp
/zstd_file_writer.h
/compute_pressure_alchemy.cpp
/compute_pressure_alchemy.h
/atom_vec_smd.cpp
/atom_vec_smd.h
/compute_saed.cpp
@ -1531,8 +1535,8 @@
/fix_langevin_drude.h
/fix_mol_swap.cpp
/fix_mol_swap.h
/fix_pimd.cpp
/fix_pimd.h
/fix_alchemy.cpp
/fix_alchemy.h
/fix_pimd_nvt.cpp
/fix_pimd_nvt.h
/fix_qbmsst.cpp

View File

@ -24,7 +24,6 @@
#include <cmath>
using namespace LAMMPS_NS;
using namespace FixConst;
/* ---------------------------------------------------------------------- */

View File

@ -26,7 +26,6 @@
#include <cmath>
using namespace LAMMPS_NS;
using namespace FixConst;
/* ---------------------------------------------------------------------- */

View File

@ -31,7 +31,6 @@
#include <cstring>
using namespace LAMMPS_NS;
using namespace FixConst;
enum{NONE,DIFFUSIVE,MAXWELL,CCL};

View File

@ -29,7 +29,6 @@
#include <cstring>
using namespace LAMMPS_NS;
using namespace FixConst;
/* ---------------------------------------------------------------------- */

View File

@ -19,7 +19,6 @@
#include "atom_masks.h"
using namespace LAMMPS_NS;
using namespace FixConst;
/* ---------------------------------------------------------------------- */

View File

@ -24,7 +24,6 @@
#include <cstring>
using namespace LAMMPS_NS;
using namespace FixConst;
enum{XLO=0,XHI=1,YLO=2,YHI=3,ZLO=4,ZHI=5};
enum{NONE=0,EDGE,CONSTANT,VARIABLE};

View File

@ -115,7 +115,6 @@ cdef create_array(device, void *pointer, shape,is_int):
size=1
for i in shape:
size = size*i
if ( device == 1):
mem = cupy.cuda.UnownedMemory(ptr=int( <uintptr_t> pointer), owner=None, size=size)
memptr = cupy.cuda.MemoryPointer(mem, 0)
@ -146,10 +145,18 @@ cdef class MLIAPDataPy:
self.data = NULL
def update_pair_energy_cpu(self, eij):
cdef double[:] eij_arr = eij
cdef double[:] eij_arr
try:
eij_arr = eij
except:
eij_arr = eij.detach().numpy().astype(np.double)
update_pair_energy(self.data, &eij_arr[0])
def update_pair_energy_gpu(self, eij):
cdef uintptr_t ptr = eij.data.ptr
cdef uintptr_t ptr;
try:
ptr = eij.data.ptr
except:
ptr = eij.data_ptr()
update_pair_energy(self.data, <double*>ptr)
def update_pair_energy(self, eij):
if self.data.dev==0:
@ -158,10 +165,18 @@ cdef class MLIAPDataPy:
self.update_pair_energy_gpu(eij)
def update_pair_forces_cpu(self, fij):
cdef double[:, ::1] fij_arr = fij
cdef double[:, ::1] fij_arr
try:
fij_arr = fij
except:
fij_arr = fij.detach().numpy().astype(np.double)
update_pair_forces(self.data, &fij_arr[0][0])
def update_pair_forces_gpu(self, fij):
cdef uintptr_t ptr = fij.data.ptr
cdef uintptr_t ptr
try:
ptr = fij.data.ptr
except:
ptr = fij.data_ptr()
update_pair_forces(self.data, <double*>ptr)
def update_pair_forces(self, fij):
if self.data.dev==0:
@ -172,7 +187,8 @@ cdef class MLIAPDataPy:
def f(self):
if self.data.f is NULL:
return None
return cupy.asarray(<double[:self.ntotal, :3]> self.data.f)
return create_array(self.data.dev, self.data.f, [self.ntotal, 3],False)
@property
def size_gradforce(self):
@ -205,14 +221,11 @@ cdef class MLIAPDataPy:
descriptors_view[:] = value_view
print("This code has not been tested or optimized for the GPU, if you are getting this warning optimize descriptors")
@write_only_property
def eatoms(self, value):
@property
def eatoms(self):
if self.data.eatoms is NULL:
raise ValueError("attempt to set NULL eatoms")
cdef double[:] eatoms_view = <double[:self.nlistatoms]> &self.data.eatoms[0]
cdef double[:] value_view = value
eatoms_view[:] = value_view
print("This code has not been tested or optimized for the GPU, if you are getting this warning optimize eatoms")
return create_array(self.data.dev, self.data.eatoms, [self.nlistatoms],False)
@write_only_property
@ -351,7 +364,7 @@ cdef class MLIAPDataPy:
# Interface between C and Python compute functions
cdef class MLIAPUnifiedInterface:
cdef class MLIAPUnifiedInterfaceKokkos:
cdef MLIAPDummyModel * model
cdef MLIAPDummyDescriptor * descriptor
cdef unified_impl
@ -404,7 +417,7 @@ cdef public object mliap_unified_connect_kokkos(char *fname, MLIAPDummyModel * m
with open(str_fname, 'rb') as pfile:
unified = pickle.load(pfile)
unified_int = MLIAPUnifiedInterface(unified)
unified_int = MLIAPUnifiedInterfaceKokkos(unified)
unified_int.model = model
unified_int.descriptor = descriptor

View File

@ -269,7 +269,6 @@ MLIAPBuildUnifiedKokkos_t<DeviceType> LAMMPS_NS::build_unified(char *unified_fna
void LAMMPS_NS::update_pair_energy(MLIAPDataKokkosDevice *data, double *eij)
{
double e_total = 0.0;
auto d_eatoms = data->eatoms;
auto d_pair_i= data->pair_i;
const auto nlistatoms = data->nlistatoms;
@ -301,8 +300,13 @@ void LAMMPS_NS::update_pair_forces(MLIAPDataKokkosDevice *data, double *fij)
auto j_atoms = data->jatoms;
auto vflag = data->vflag;
auto rij = data->rij;
int vflag_either=data->pairmliap->vflag_either, vflag_global=data->pairmliap->vflag_global, vflag_atom=data->pairmliap->vflag_atom;
int vflag_global=data->pairmliap->vflag_global, vflag_atom=data->pairmliap->vflag_atom;
if (vflag_atom) {
data->pairmliap->k_vatom.template modify<LMPHostType>();
data->pairmliap->k_vatom.template sync<LMPDeviceType>();
}
auto d_vatom = data->pairmliap->k_vatom.template view<LMPDeviceType>();
Kokkos::View<double[6], LMPDeviceType> virial("virial");
Kokkos::parallel_for(data->npairs,KOKKOS_LAMBDA (int ii) {
@ -310,7 +314,6 @@ void LAMMPS_NS::update_pair_forces(MLIAPDataKokkosDevice *data, double *fij)
int ii3 = ii * 3;
int i = pair_i[ii];
int j = j_atoms[ii];
// must not count any contribution where i is not a local atom
if (i < nlistatoms) {
Kokkos::atomic_add(&f[i*3+0], fij[ii3+0]);
@ -335,7 +338,7 @@ void LAMMPS_NS::update_pair_forces(MLIAPDataKokkosDevice *data, double *fij)
Kokkos::atomic_add(&virial[4], v[4]);
Kokkos::atomic_add(&virial[5], v[5]);
}
if (vflag_atom) {
if (vflag_atom ) {
Kokkos::atomic_add(&d_vatom(i,0), 0.5*v[0]);
Kokkos::atomic_add(&d_vatom(i,1), 0.5*v[1]);
Kokkos::atomic_add(&d_vatom(i,2), 0.5*v[2]);
@ -373,15 +376,11 @@ template class MLIAPDummyModelKokkos<LMPDeviceType>;
template class MLIAPDummyDescriptorKokkos<LMPDeviceType>;
template MLIAPBuildUnifiedKokkos_t<LMPDeviceType> LAMMPS_NS::build_unified(char *unified_fname, MLIAPDataKokkos<LMPDeviceType> *data, LAMMPS *lmp,
char *coefffilename);
//template void LAMMPS_NS::update_pair_energy(MLIAPDataKokkos<LMPDeviceType> *data, double *eij);
//template void LAMMPS_NS::update_pair_forces(MLIAPDataKokkos<LMPDeviceType> *data, double *fij);
#ifdef LMP_KOKKOS_GPU
template class MLIAPDummyModelKokkos<LMPHostType>;
template class MLIAPDummyDescriptorKokkos<LMPHostType>;
template MLIAPBuildUnifiedKokkos_t<LMPHostType> LAMMPS_NS::build_unified(char *unified_fname, MLIAPDataKokkos<LMPHostType> *data, LAMMPS *lmp,
char *coefffilename);
//template void LAMMPS_NS::update_pair_energy(MLIAPDataKokkos<LMPHostType> *data, double *eij);
//template void LAMMPS_NS::update_pair_forces(MLIAPDataKokkos<LMPHostType> *data, double *fij);
#endif
}
#endif

View File

@ -74,7 +74,6 @@ void PairMLIAPKokkos<DeviceType>::compute(int eflag, int vflag)
int is_kokkos_descriptor = (dynamic_cast<MLIAPDescriptorKokkos<DeviceType>*>(descriptor)) != nullptr;
auto model_space = is_kokkos_model ? execution_space : Host;
auto descriptor_space = is_kokkos_descriptor? execution_space : Host;
// consistency checks
if (data->ndescriptors != model->ndescriptors)
error->all(FLERR, "Incompatible model and descriptor descriptor count");
@ -107,12 +106,14 @@ void PairMLIAPKokkos<DeviceType>::compute(int eflag, int vflag)
k_data->sync(model_space, IELEMS_MASK | DESCRIPTORS_MASK);
model->compute_gradients(data);
k_data->modified(model_space, BETAS_MASK);
if (eflag_atom)
if (eflag_atom) {
k_data->modified(model_space, EATOMS_MASK);
}
// calculate force contributions beta_i*dB_i/dR_j
atomKK->sync(descriptor_space,F_MASK);
k_data->sync(descriptor_space, NUMNEIGHS_MASK | IATOMS_MASK | IELEMS_MASK | ELEMS_MASK | BETAS_MASK | JATOMS_MASK | PAIR_I_MASK | JELEMS_MASK | RIJ_MASK );
descriptor->compute_forces(data);
e_tally(data);
@ -293,7 +294,7 @@ void PairMLIAPKokkos<DeviceType>::e_tally(MLIAPData* data)
if (eflag_global) eng_vdwl += data->energy;
if (eflag_atom) {
MLIAPDataKokkos<DeviceType> *k_data = static_cast<MLIAPDataKokkos<DeviceType>*>(data);
k_data->sync(execution_space, IATOMS_MASK | EATOMS_MASK);
k_data->sync(execution_space, IATOMS_MASK | EATOMS_MASK, true);
auto d_iatoms = k_data->k_iatoms.template view<DeviceType>();
auto d_eatoms = k_data->k_eatoms.template view<DeviceType>();
auto d_eatom = k_eatom.template view<DeviceType>();

View File

@ -0,0 +1,138 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
LAMMPS development team: developers@lammps.org
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include "fix_wall_lepton.h"
#include "atom.h"
#include "error.h"
#include "Lepton.h"
#include "lepton_utils.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
FixWallLepton::FixWallLepton(LAMMPS *lmp, int narg, char **arg) : FixWall(lmp, narg, arg)
{
dynamic_group_allow = 1;
}
/* ---------------------------------------------------------------------- */
void FixWallLepton::post_constructor()
{
// check validity of lepton expression
for (int m = 0; m < nwall; ++m) {
// remove whitespace and quotes from expression string and then
// check if the expression can be parsed and evaluated without error
std::string exp_one = LeptonUtils::condense(lstr[m]);
try {
auto parsed = Lepton::Parser::parse(LeptonUtils::substitute(exp_one, lmp));
auto wallpot = parsed.createCompiledExpression();
auto wallforce = parsed.differentiate("r").createCompiledExpression();
wallpot.getVariableReference("r") = 0.0;
wallforce.getVariableReference("r") = 0.0;
wallpot.evaluate();
wallforce.evaluate();
} catch (std::exception &e) {
error->all(FLERR, e.what());
}
}
}
/* ----------------------------------------------------------------------
compute the potential energy offset so it can be shifted to zero at the cutoff
------------------------------------------------------------------------- */
void FixWallLepton::precompute(int m)
{
std::string exp_one = LeptonUtils::condense(lstr[m]);
auto parsed = Lepton::Parser::parse(LeptonUtils::substitute(exp_one, lmp));
auto wallpot = parsed.createCompiledExpression();
try {
wallpot.getVariableReference("rc") = cutoff[m];
} catch (std::exception &) {
; // do nothing
}
wallpot.getVariableReference("r") = cutoff[m];
offset[m] = wallpot.evaluate();
}
/* ----------------------------------------------------------------------
interaction of all particles in group with a wall
m = index of wall coeffs
which = xlo,xhi,ylo,yhi,zlo,zhi
error if any particle is on or behind wall
------------------------------------------------------------------------- */
void FixWallLepton::wall_particle(int m, int which, double coord)
{
std::string exp_one = LeptonUtils::condense(lstr[m]);
auto parsed = Lepton::Parser::parse(LeptonUtils::substitute(exp_one, lmp));
auto wallpot = parsed.createCompiledExpression();
auto wallforce = parsed.differentiate("r").createCompiledExpression();
// set cutoff value, if used
try {
wallpot.getVariableReference("rc") = cutoff[m];
wallforce.getVariableReference("rc") = cutoff[m];
} catch (std::exception &) {
; // do nothing
}
double delta, fwall, vn;
double **x = atom->x;
double **f = atom->f;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int dim = which / 2;
int side = which % 2;
if (side == 0) side = -1;
int onflag = 0;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
if (side < 0)
delta = x[i][dim] - coord;
else
delta = coord - x[i][dim];
if (delta >= cutoff[m]) continue;
if (delta <= 0.0) {
onflag = 1;
continue;
}
wallpot.getVariableReference("r") = delta;
wallforce.getVariableReference("r") = delta;
fwall = side * wallforce.evaluate();
f[i][dim] += fwall;
ewall[0] += wallpot.evaluate() - offset[m];
ewall[m + 1] += fwall;
if (evflag) {
if (side < 0)
vn = -fwall * delta;
else
vn = fwall * delta;
v_tally(dim, i, vn);
}
}
}
if (onflag) error->one(FLERR, "Particle on or inside fix {} surface", style);
}

View File

@ -0,0 +1,41 @@
/* -*- c++ -*- ----------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
LAMMPS development team: developers@lammps.org
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#ifdef FIX_CLASS
// clang-format off
FixStyle(wall/lepton,FixWallLepton);
// clang-format on
#else
#ifndef LMP_FIX_WALL_LEPTON_H
#define LMP_FIX_WALL_LEPTON_H
#include "fix_wall.h"
namespace LAMMPS_NS {
class FixWallLepton : public FixWall {
public:
FixWallLepton(class LAMMPS *, int, char **);
void post_constructor() override;
void precompute(int) override;
void wall_particle(int, int, double) override;
protected:
double offset[6];
};
} // namespace LAMMPS_NS
#endif
#endif

View File

@ -35,6 +35,17 @@
// However, that exposes -too many- headers.
#include "mliap_model_python_couple.h"
#include "mliap_unified_couple.h"
#ifdef LMP_KOKKOS
#include "mliap_model_python_kokkos.h"
#include "mliap_unified_kokkos.h"
// The above should somehow really be included in the next file.
// We could get around this with cython --capi-reexport-cincludes
// However, that exposes -too many- headers.
#include "mliap_model_python_couple_kokkos.h"
#include "mliap_unified_couple_kokkos.h"
#endif
#endif
using namespace LAMMPS_NS;
@ -71,6 +82,16 @@ PythonImpl::PythonImpl(LAMMPS *lmp) : Pointers(lmp)
err = PyImport_AppendInittab("mliap_unified_couple", PyInit_mliap_unified_couple);
if (err) error->all(FLERR, "Could not register MLIAPPY unified embedded python module.");
#ifdef LMP_KOKKOS
// Inform python intialization scheme of the mliappy module.
// This -must- happen before python is initialized.
err = PyImport_AppendInittab("mliap_model_python_couple_kokkos", PyInit_mliap_model_python_couple_kokkos);
if (err) error->all(FLERR, "Could not register MLIAPPY embedded python module.");
err = PyImport_AppendInittab("mliap_unified_couple_kokkos", PyInit_mliap_unified_couple_kokkos);
if (err) error->all(FLERR, "Could not register MLIAPPY unified embedded python module.");
#endif
#endif
Py_Initialize();

View File

@ -216,7 +216,7 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) :
// this looks excessive
// the price of vectorization (all reactions in one command)?
memory->create(rxn_name,nreacts,MAXLINE,"bond/react:rxn_name");
memory->create(rxn_name,nreacts,MAXNAME,"bond/react:rxn_name");
memory->create(nevery,nreacts,"bond/react:nevery");
memory->create(cutsq,nreacts,2,"bond/react:cutsq");
memory->create(unreacted_mol,nreacts,"bond/react:unreacted_mol");
@ -287,7 +287,7 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) :
iarg++;
int n = strlen(arg[iarg]) + 1;
if (n > MAXLINE) error->all(FLERR,"Reaction name (react-ID) is too long (limit: 256 characters)");
if (n > MAXNAME) error->all(FLERR,"Reaction name (react-ID) is too long (limit: 256 characters)");
strcpy(rxn_name[rxn],arg[iarg++]);
int groupid = group->find(arg[iarg++]);
@ -545,6 +545,7 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) :
attempt = nullptr;
nattempt = nullptr;
allnattempt = 0;
my_num_mega = 0;
local_num_mega = 0;
ghostly_num_mega = 0;
restore = nullptr;
@ -555,6 +556,7 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) :
glove_counter = 0;
guess_branch = new int[MAXGUESS]();
pioneer_count = new int[max_natoms];
my_mega_glove = nullptr;
local_mega_glove = nullptr;
ghostly_mega_glove = nullptr;
global_mega_glove = nullptr;
@ -654,6 +656,7 @@ FixBondReact::~FixBondReact()
memory->destroy(restore);
memory->destroy(glove);
memory->destroy(pioneers);
memory->destroy(my_mega_glove);
memory->destroy(local_mega_glove);
memory->destroy(ghostly_mega_glove);
}
@ -936,7 +939,7 @@ void FixBondReact::post_integrate()
if (var_flag[NRATE][rxnID] == 1) {
my_nrate = input->variable->compute_equal(var_id[NRATE][rxnID]);
} else my_nrate = rate_limit[1][rxnID];
if (nrxns_delta > my_nrate) rate_limit_flag = 0;
if (nrxns_delta >= my_nrate) rate_limit_flag = 0;
}
}
if ((update->ntimestep % nevery[rxnID]) ||
@ -1251,6 +1254,7 @@ void FixBondReact::close_partner()
void FixBondReact::superimpose_algorithm()
{
const int nprocs = comm->nprocs;
my_num_mega = 0;
local_num_mega = 0;
ghostly_num_mega = 0;
@ -1269,6 +1273,7 @@ void FixBondReact::superimpose_algorithm()
memory->destroy(restore);
memory->destroy(glove);
memory->destroy(pioneers);
memory->destroy(my_mega_glove);
memory->destroy(local_mega_glove);
memory->destroy(ghostly_mega_glove);
}
@ -1277,18 +1282,14 @@ void FixBondReact::superimpose_algorithm()
memory->create(restore_pt,MAXGUESS,4,"bond/react:restore_pt");
memory->create(pioneers,max_natoms,"bond/react:pioneers");
memory->create(restore,max_natoms,MAXGUESS*4,"bond/react:restore");
memory->create(local_mega_glove,max_natoms+1,allnattempt,"bond/react:local_mega_glove");
memory->create(ghostly_mega_glove,max_natoms+1,allnattempt,"bond/react:ghostly_mega_glove");
memory->create(my_mega_glove,max_natoms+1,allnattempt,"bond/react:local_mega_glove");
for (int i = 0; i < max_natoms+1; i++)
for (int j = 0; j < allnattempt; j++)
my_mega_glove[i][j] = 0;
attempted_rxn = 1;
for (int i = 0; i < max_natoms+1; i++) {
for (int j = 0; j < allnattempt; j++) {
local_mega_glove[i][j] = 0;
ghostly_mega_glove[i][j] = 0;
}
}
// let's finally begin the superimpose loop
for (rxnID = 0; rxnID < nreacts; rxnID++) {
for (lcl_inst = 0; lcl_inst < nattempt[rxnID]; lcl_inst++) {
@ -1335,7 +1336,11 @@ void FixBondReact::superimpose_algorithm()
status = REJECT;
} else {
status = ACCEPT;
glove_ghostcheck();
my_mega_glove[0][my_num_mega] = rxnID;
for (int i = 0; i < onemol->natoms; i++) {
my_mega_glove[i+1][my_num_mega] = glove[i][1];
}
my_num_mega++;
}
} else status = REJECT;
}
@ -1378,7 +1383,13 @@ void FixBondReact::superimpose_algorithm()
if (status == ACCEPT) {
if (fraction[rxnID] < 1.0 &&
random[rxnID]->uniform() >= fraction[rxnID]) status = REJECT;
else glove_ghostcheck();
else {
my_mega_glove[0][my_num_mega] = rxnID;
for (int i = 0; i < onemol->natoms; i++) {
my_mega_glove[i+1][my_num_mega] = glove[i][1];
}
my_num_mega++;
}
}
hang_catch++;
// let's go ahead and catch the simplest of hangs
@ -1394,8 +1405,19 @@ void FixBondReact::superimpose_algorithm()
global_megasize = 0;
ghost_glovecast(); // consolidate all mega_gloves to all processors
memory->create(local_mega_glove,max_natoms+1,my_num_mega,"bond/react:local_mega_glove");
memory->create(ghostly_mega_glove,max_natoms+1,my_num_mega,"bond/react:ghostly_mega_glove");
for (int i = 0; i < max_natoms+1; i++) {
for (int j = 0; j < my_num_mega; j++) {
local_mega_glove[i][j] = 0;
ghostly_mega_glove[i][j] = 0;
}
}
dedup_mega_gloves(LOCAL); // make sure atoms aren't added to more than one reaction
glove_ghostcheck(); // split into 'local' and 'global'
ghost_glovecast(); // consolidate all mega_gloves to all processors
MPI_Allreduce(&local_rxn_count[0],&reaction_count[0],nreacts,MPI_INT,MPI_SUM,world);
@ -2639,14 +2661,14 @@ void FixBondReact::dedup_mega_gloves(int dedup_mode)
{
// dedup_mode == LOCAL for local_dedup
// dedup_mode == GLOBAL for global_mega_glove
for (int i = 0; i < nreacts; i++) {
if (dedup_mode == LOCAL) local_rxn_count[i] = 0;
if (dedup_mode == GLOBAL) ghostly_rxn_count[i] = 0;
}
if (dedup_mode == GLOBAL)
for (int i = 0; i < nreacts; i++)
ghostly_rxn_count[i] = 0;
int dedup_size = 0;
if (dedup_mode == LOCAL) {
dedup_size = local_num_mega;
dedup_size = my_num_mega;
} else if (dedup_mode == GLOBAL) {
dedup_size = global_megasize;
}
@ -2657,7 +2679,7 @@ void FixBondReact::dedup_mega_gloves(int dedup_mode)
if (dedup_mode == LOCAL) {
for (int i = 0; i < dedup_size; i++) {
for (int j = 0; j < max_natoms+1; j++) {
dedup_glove[j][i] = local_mega_glove[j][i];
dedup_glove[j][i] = my_mega_glove[j][i];
}
}
} else if (dedup_mode == GLOBAL) {
@ -2671,11 +2693,8 @@ void FixBondReact::dedup_mega_gloves(int dedup_mode)
// dedup_mask is size dedup_size and filters reactions that have been deleted
// a value of 1 means this reaction instance has been deleted
int *dedup_mask = new int[dedup_size];
int *dup_list = new int[dedup_size];
for (int i = 0; i < dedup_size; i++) {
dedup_mask[i] = 0;
dup_list[i] = 0;
}
// let's randomly mix up our reaction instances first
@ -2699,60 +2718,40 @@ void FixBondReact::dedup_mega_gloves(int dedup_mode)
for (int i = 0; i < dedup_size; i++) {
if (dedup_mask[i] == 0) {
int num_dups = 0;
int myrxnid1 = dedup_glove[0][i];
onemol = atom->molecules[unreacted_mol[myrxnid1]];
for (int j = 0; j < onemol->natoms; j++) {
int check1 = dedup_glove[j+1][i];
for (int ii = i + 1; ii < dedup_size; ii++) {
int already_listed = 0;
for (int jj = 0; jj < num_dups; jj++) {
if (dup_list[jj] == ii) {
already_listed = 1;
break;
}
}
if (dedup_mask[ii] == 0 && already_listed == 0) {
if (dedup_mask[ii] == 0) {
int myrxnid2 = dedup_glove[0][ii];
twomol = atom->molecules[unreacted_mol[myrxnid2]];
for (int jj = 0; jj < twomol->natoms; jj++) {
int check2 = dedup_glove[jj+1][ii];
if (check2 == check1) {
// add this rxn instance as well
if (num_dups == 0) dup_list[num_dups++] = i;
dup_list[num_dups++] = ii;
dedup_mask[ii] = 1;
break;
}
}
}
}
}
// here we choose random number and therefore reaction instance
int myrand = 1;
if (num_dups > 0) {
myrand = floor(random[0]->uniform()*num_dups);
for (int iii = 0; iii < num_dups; iii++) {
if (iii != myrand) dedup_mask[dup_list[iii]] = 1;
}
}
}
}
// we must update local_mega_glove and local_megasize
// we can simply overwrite local_mega_glove column by column
if (dedup_mode == LOCAL) {
int new_local_megasize = 0;
for (int i = 0; i < local_num_mega; i++) {
int my_new_megasize = 0;
for (int i = 0; i < my_num_mega; i++) {
if (dedup_mask[i] == 0) {
local_rxn_count[(int) dedup_glove[0][i]]++;
for (int j = 0; j < max_natoms+1; j++) {
local_mega_glove[j][new_local_megasize] = dedup_glove[j][i];
my_mega_glove[j][my_new_megasize] = dedup_glove[j][i];
}
new_local_megasize++;
my_new_megasize++;
}
}
local_num_mega = new_local_megasize;
my_num_mega = my_new_megasize;
}
// we must update global_mega_glove and global_megasize
@ -2773,7 +2772,6 @@ void FixBondReact::dedup_mega_gloves(int dedup_mode)
memory->destroy(dedup_glove);
delete [] dedup_mask;
delete [] dup_list;
}
/* ----------------------------------------------------------------------
@ -2826,40 +2824,47 @@ void FixBondReact::glove_ghostcheck()
// here we add glove to either local_mega_glove or ghostly_mega_glove
// ghostly_mega_glove includes atoms that are ghosts, either of this proc or another
// 'ghosts of another' indication taken from comm->sendlist
// also includes local gloves that overlap with ghostly gloves, to get dedup right
int ghostly = 0;
#if !defined(MPI_STUBS)
if (comm->style == Comm::BRICK) {
if (create_atoms_flag[rxnID] == 1) {
ghostly = 1;
} else {
for (int i = 0; i < onemol->natoms; i++) {
int ilocal = atom->map(glove[i][1]);
if (ilocal >= atom->nlocal || localsendlist[ilocal] == 1) {
ghostly = 1;
break;
for (int i = 0; i < nreacts; i++)
local_rxn_count[i] = 0;
for (int i = 0; i < my_num_mega; i++) {
rxnID = my_mega_glove[0][i];
onemol = atom->molecules[unreacted_mol[rxnID]];
int ghostly = 0;
#if !defined(MPI_STUBS)
if (comm->style == Comm::BRICK) {
if (create_atoms_flag[rxnID] == 1) {
ghostly = 1;
} else {
for (int j = 0; j < onemol->natoms; j++) {
int ilocal = atom->map(my_mega_glove[j+1][i]);
if (ilocal >= atom->nlocal || localsendlist[ilocal] == 1) {
ghostly = 1;
break;
}
}
}
} else {
ghostly = 1;
}
} else {
ghostly = 1;
}
#endif
#endif
if (ghostly == 1) {
ghostly_mega_glove[0][ghostly_num_mega] = rxnID;
ghostly_rxn_count[rxnID]++; //for debuginng
for (int i = 0; i < onemol->natoms; i++) {
ghostly_mega_glove[i+1][ghostly_num_mega] = glove[i][1];
if (ghostly == 1) {
ghostly_mega_glove[0][ghostly_num_mega] = rxnID;
for (int j = 0; j < onemol->natoms+1; j++) {
ghostly_mega_glove[j][ghostly_num_mega] = my_mega_glove[j][i];
}
ghostly_num_mega++;
} else {
local_mega_glove[0][local_num_mega] = rxnID;
local_rxn_count[rxnID]++;
for (int j = 0; j < onemol->natoms+1; j++) {
local_mega_glove[j][local_num_mega] = my_mega_glove[j][i];
}
local_num_mega++;
}
ghostly_num_mega++;
} else {
local_mega_glove[0][local_num_mega] = rxnID;
local_rxn_count[rxnID]++; //for debuginng
for (int i = 0; i < onemol->natoms; i++) {
local_mega_glove[i+1][local_num_mega] = glove[i][1];
}
local_num_mega++;
}
}
@ -3903,6 +3908,7 @@ read map file
void FixBondReact::read_map_file(int myrxn)
{
int rv;
char line[MAXLINE],keyword[MAXLINE];
char *eof,*ptr;
@ -3927,16 +3933,24 @@ void FixBondReact::read_map_file(int myrxn)
if (strstr(line,"edgeIDs")) sscanf(line,"%d",&nedge);
else if (strstr(line,"equivalences")) {
sscanf(line,"%d",&nequivalent);
rv = sscanf(line,"%d",&nequivalent);
if (rv != 1) error->one(FLERR, "Map file header is incorrectly formatted");
if (nequivalent != onemol->natoms)
error->one(FLERR,"Fix bond/react: Number of equivalences in map file must "
"equal number of atoms in reaction templates");
}
else if (strstr(line,"deleteIDs")) sscanf(line,"%d",&ndelete);
else if (strstr(line,"createIDs")) sscanf(line,"%d",&ncreate);
else if (strstr(line,"chiralIDs")) sscanf(line,"%d",&nchiral);
else if (strstr(line,"constraints")) {
sscanf(line,"%d",&nconstraints[myrxn]);
else if (strstr(line,"deleteIDs")) {
rv = sscanf(line,"%d",&ndelete);
if (rv != 1) error->one(FLERR, "Map file header is incorrectly formatted");
} else if (strstr(line,"createIDs")) {
rv = sscanf(line,"%d",&ncreate);
if (rv != 1) error->one(FLERR, "Map file header is incorrectly formatted");
} else if (strstr(line,"chiralIDs")) {
rv = sscanf(line,"%d",&nchiral);
if (rv != 1) error->one(FLERR, "Map file header is incorrectly formatted");
} else if (strstr(line,"constraints")) {
rv = sscanf(line,"%d",&nconstraints[myrxn]);
if (rv != 1) error->one(FLERR, "Map file header is incorrectly formatted");
if (maxnconstraints < nconstraints[myrxn]) maxnconstraints = nconstraints[myrxn];
constraints.resize(maxnconstraints, std::vector<Constraint>(nreacts));
} else break;
@ -3956,11 +3970,13 @@ void FixBondReact::read_map_file(int myrxn)
if (comm->me == 0) error->warning(FLERR,"Fix bond/react: The BondingIDs section title has been deprecated. Please use InitiatorIDs instead.");
bondflag = 1;
readline(line);
sscanf(line,"%d",&ibonding[myrxn]);
rv = sscanf(line,"%d",&ibonding[myrxn]);
if (rv != 1) error->one(FLERR, "InitiatorIDs section is incorrectly formatted");
if (ibonding[myrxn] > onemol->natoms)
error->one(FLERR,"Fix bond/react: Invalid template atom ID in map file");
readline(line);
sscanf(line,"%d",&jbonding[myrxn]);
rv = sscanf(line,"%d",&jbonding[myrxn]);
if (rv != 1) error->one(FLERR, "InitiatorIDs section is incorrectly formatted");
if (jbonding[myrxn] > onemol->natoms)
error->one(FLERR,"Fix bond/react: Invalid template atom ID in map file");
} else if (strcmp(keyword,"EdgeIDs") == 0) {
@ -3991,10 +4007,11 @@ void FixBondReact::EdgeIDs(char *line, int myrxn)
{
// puts a 1 at edge(edgeID)
int tmp;
int tmp,rv;
for (int i = 0; i < nedge; i++) {
readline(line);
sscanf(line,"%d",&tmp);
rv = sscanf(line,"%d",&tmp);
if (rv != 1) error->one(FLERR, "EdgeIDs section is incorrectly formatted");
if (tmp > onemol->natoms)
error->one(FLERR,"Fix bond/react: Invalid template atom ID in map file");
edge[tmp-1][myrxn] = 1;
@ -4003,11 +4020,11 @@ void FixBondReact::EdgeIDs(char *line, int myrxn)
void FixBondReact::Equivalences(char *line, int myrxn)
{
int tmp1;
int tmp2;
int tmp1,tmp2,rv;
for (int i = 0; i < nequivalent; i++) {
readline(line);
sscanf(line,"%d %d",&tmp1,&tmp2);
rv = sscanf(line,"%d %d",&tmp1,&tmp2);
if (rv != 2) error->one(FLERR, "Equivalences section is incorrectly formatted");
if (tmp1 > onemol->natoms || tmp2 > twomol->natoms)
error->one(FLERR,"Fix bond/react: Invalid template atom ID in map file");
//equivalences is-> clmn 1: post-reacted, clmn 2: pre-reacted
@ -4021,10 +4038,11 @@ void FixBondReact::Equivalences(char *line, int myrxn)
void FixBondReact::DeleteAtoms(char *line, int myrxn)
{
int tmp;
int tmp,rv;
for (int i = 0; i < ndelete; i++) {
readline(line);
sscanf(line,"%d",&tmp);
rv = sscanf(line,"%d",&tmp);
if (rv != 1) error->one(FLERR, "DeleteIDs section is incorrectly formatted");
if (tmp > onemol->natoms)
error->one(FLERR,"Fix bond/react: Invalid template atom ID in map file");
delete_atoms[tmp-1][myrxn] = 1;
@ -4034,10 +4052,11 @@ void FixBondReact::DeleteAtoms(char *line, int myrxn)
void FixBondReact::CreateAtoms(char *line, int myrxn)
{
create_atoms_flag[myrxn] = 1;
int tmp;
int tmp,rv;
for (int i = 0; i < ncreate; i++) {
readline(line);
sscanf(line,"%d",&tmp);
rv = sscanf(line,"%d",&tmp);
if (rv != 1) error->one(FLERR, "CreateIDs section is incorrectly formatted");
create_atoms[tmp-1][myrxn] = 1;
}
if (twomol->xflag == 0)
@ -4055,10 +4074,11 @@ void FixBondReact::CustomCharges(int ifragment, int myrxn)
void FixBondReact::ChiralCenters(char *line, int myrxn)
{
int tmp;
int tmp,rv;
for (int i = 0; i < nchiral; i++) {
readline(line);
sscanf(line,"%d",&tmp);
rv = sscanf(line,"%d",&tmp);
if (rv != 1) error->one(FLERR, "ChiralIDs section is incorrectly formatted");
if (tmp > onemol->natoms)
error->one(FLERR,"Fix bond/react: Invalid template atom ID in map file");
chiral_atoms[tmp-1][0][myrxn] = 1;
@ -4088,6 +4108,7 @@ void FixBondReact::ChiralCenters(char *line, int myrxn)
void FixBondReact::ReadConstraints(char *line, int myrxn)
{
int rv;
double tmp[MAXCONARGS];
char **strargs,*ptr,*lptr;
memory->create(strargs,MAXCONARGS,MAXLINE,"bond/react:strargs");
@ -4129,10 +4150,12 @@ void FixBondReact::ReadConstraints(char *line, int myrxn)
}
if ((ptr = strchr(lptr,')')))
*ptr = '\0';
sscanf(line,"%s",constraint_type);
rv = sscanf(line,"%s",constraint_type);
if (rv != 1) error->one(FLERR, "Constraints section is incorrectly formatted");
if (strcmp(constraint_type,"distance") == 0) {
constraints[i][myrxn].type = DISTANCE;
sscanf(line,"%*s %s %s %lg %lg",strargs[0],strargs[1],&tmp[0],&tmp[1]);
rv = sscanf(line,"%*s %s %s %lg %lg",strargs[0],strargs[1],&tmp[0],&tmp[1]);
if (rv != 4) error->one(FLERR, "Distance constraint is incorrectly formatted");
readID(strargs[0], i, myrxn, 0);
readID(strargs[1], i, myrxn, 1);
// cutoffs
@ -4140,7 +4163,8 @@ void FixBondReact::ReadConstraints(char *line, int myrxn)
constraints[i][myrxn].par[1] = tmp[1]*tmp[1];
} else if (strcmp(constraint_type,"angle") == 0) {
constraints[i][myrxn].type = ANGLE;
sscanf(line,"%*s %s %s %s %lg %lg",strargs[0],strargs[1],strargs[2],&tmp[0],&tmp[1]);
rv = sscanf(line,"%*s %s %s %s %lg %lg",strargs[0],strargs[1],strargs[2],&tmp[0],&tmp[1]);
if (rv != 5) error->one(FLERR, "Angle constraint is incorrectly formatted");
readID(strargs[0], i, myrxn, 0);
readID(strargs[1], i, myrxn, 1);
readID(strargs[2], i, myrxn, 2);
@ -4150,8 +4174,9 @@ void FixBondReact::ReadConstraints(char *line, int myrxn)
constraints[i][myrxn].type = DIHEDRAL;
tmp[2] = 181.0; // impossible range
tmp[3] = 182.0;
sscanf(line,"%*s %s %s %s %s %lg %lg %lg %lg",strargs[0],strargs[1],
rv = sscanf(line,"%*s %s %s %s %s %lg %lg %lg %lg",strargs[0],strargs[1],
strargs[2],strargs[3],&tmp[0],&tmp[1],&tmp[2],&tmp[3]);
if (!(rv == 6 || rv == 8)) error->one(FLERR, "Dihedral constraint is incorrectly formatted");
readID(strargs[0], i, myrxn, 0);
readID(strargs[1], i, myrxn, 1);
readID(strargs[2], i, myrxn, 2);
@ -4163,7 +4188,8 @@ void FixBondReact::ReadConstraints(char *line, int myrxn)
} else if (strcmp(constraint_type,"arrhenius") == 0) {
constraints[i][myrxn].type = ARRHENIUS;
constraints[i][myrxn].par[0] = narrhenius++;
sscanf(line,"%*s %lg %lg %lg %lg",&tmp[0],&tmp[1],&tmp[2],&tmp[3]);
rv = sscanf(line,"%*s %lg %lg %lg %lg",&tmp[0],&tmp[1],&tmp[2],&tmp[3]);
if (rv != 4) error->one(FLERR, "Arrhenius constraint is incorrectly formatted");
constraints[i][myrxn].par[1] = tmp[0];
constraints[i][myrxn].par[2] = tmp[1];
constraints[i][myrxn].par[3] = tmp[2];
@ -4171,7 +4197,8 @@ void FixBondReact::ReadConstraints(char *line, int myrxn)
} else if (strcmp(constraint_type,"rmsd") == 0) {
constraints[i][myrxn].type = RMSD;
strcpy(strargs[0],"0");
sscanf(line,"%*s %lg %s",&tmp[0],strargs[0]);
rv = sscanf(line,"%*s %lg %s",&tmp[0],strargs[0]);
if (!(rv == 1 || rv == 2)) error->one(FLERR, "RMSD constraint is incorrectly formatted");
constraints[i][myrxn].par[0] = tmp[0]; // RMSDmax
constraints[i][myrxn].id[0] = -1; // optional molecule fragment
if (isalpha(strargs[0][0])) {
@ -4411,8 +4438,8 @@ void FixBondReact::write_restart(FILE *fp)
for (int i = 0; i < nreacts; i++) {
set[i].reaction_count_total = reaction_count_total[i];
strncpy(set[i].rxn_name,rxn_name[i],MAXLINE-1);
set[i].rxn_name[MAXLINE-1] = '\0';
strncpy(set[i].rxn_name,rxn_name[i],MAXNAME-1);
set[i].rxn_name[MAXNAME-1] = '\0';
}
int rbufcount = max_rate_limit_steps*nreacts;
@ -4449,13 +4476,16 @@ void FixBondReact::restart(char *buf)
Set *set_restart = (Set *) &buf[n*sizeof(int)];
r_nreacts = set_restart[0].nreacts;
n2cpy = 0;
if (revision > 0) {
r_max_rate_limit_steps = set_restart[0].max_rate_limit_steps;
ibufcount = r_max_rate_limit_steps*r_nreacts;
memory->create(ibuf,r_max_rate_limit_steps,r_nreacts,"bond/react:ibuf");
memcpy(&ibuf[0][0],&buf[sizeof(int)+r_nreacts*sizeof(Set)],sizeof(int)*ibufcount);
n2cpy = r_max_rate_limit_steps;
} else n2cpy = 0;
if (r_max_rate_limit_steps > 0) {
ibufcount = r_max_rate_limit_steps*r_nreacts;
memory->create(ibuf,r_max_rate_limit_steps,r_nreacts,"bond/react:ibuf");
memcpy(&ibuf[0][0],&buf[sizeof(int)+r_nreacts*sizeof(Set)],sizeof(int)*ibufcount);
n2cpy = r_max_rate_limit_steps;
}
}
if (max_rate_limit_steps < n2cpy) n2cpy = max_rate_limit_steps;
for (int i = 0; i < r_nreacts; i++) {
@ -4468,7 +4498,7 @@ void FixBondReact::restart(char *buf)
}
}
}
if (revision > 0) memory->destroy(ibuf);
if (revision > 0 && r_max_rate_limit_steps > 0) memory->destroy(ibuf);
}
/* ----------------------------------------------------------------------

View File

@ -33,7 +33,8 @@ namespace LAMMPS_NS {
class FixBondReact : public Fix {
public:
enum { MAXLINE = 256 }; // max length of line read from files
enum { MAXLINE = 1024 }; // max length of line read from files
enum { MAXNAME = 256 }; // max character length of react-ID
enum { MAXCONIDS = 4 }; // max # of IDs used by any constraint
enum { MAXCONPAR = 5 }; // max # of constraint parameters
@ -154,13 +155,15 @@ class FixBondReact : public Fix {
int pion, neigh, trace; // important indices for various loops. required for restore points
int lcl_inst; // reaction instance
tagint **glove; // 1st colmn: pre-reacted template, 2nd colmn: global IDs
// for all mega_gloves and global_mega_glove: first row is the ID of bond/react
tagint **local_mega_glove; // consolidation local of reaction instances
tagint **ghostly_mega_glove; // consolidation nonlocal of reaction instances
// for all mega_gloves: first row is the ID of bond/react
tagint **my_mega_glove; // local + ghostly reaction instances
tagint **local_mega_glove; // consolidation of local reaction instances
tagint **ghostly_mega_glove; // consolidation of nonlocal reaction instances
tagint **global_mega_glove; // consolidation (inter-processor) of gloves
// containing nonlocal atoms
int *localsendlist; // indicates ghosts of other procs
int my_num_mega; // local + ghostly reaction instances (on this proc)
int local_num_mega; // num of local reaction instances
int ghostly_num_mega; // num of ghostly reaction instances
int global_megasize; // num of reaction instances in global_mega_glove
@ -216,7 +219,7 @@ class FixBondReact : public Fix {
// store restart data
struct Set {
int nreacts;
char rxn_name[MAXLINE];
char rxn_name[MAXNAME];
int reaction_count_total;
int max_rate_limit_steps;
};

View File

@ -0,0 +1,102 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
LAMMPS development team: developers@lammps.org
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include "compute_pressure_alchemy.h"
#include "domain.h"
#include "error.h"
#include "fix.h"
#include "modify.h"
#include "update.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputePressureAlchemy::ComputePressureAlchemy(LAMMPS *lmp, int narg, char **arg) :
Compute(lmp, narg, arg)
{
if (narg != 4) error->all(FLERR, "Illegal compute pressure/alchemy command");
if (igroup) error->all(FLERR, "Compute pressure/alchemy must use group all");
scalar_flag = vector_flag = 1;
size_vector = 6;
extscalar = 0;
extvector = 0;
pressflag = 1;
timeflag = 1;
id_fix = arg[3];
if (!modify->get_fix_by_id(id_fix))
error->all(FLERR, "Could not find compute pressure/alchemy fix ID {} for fix alchemy", id_fix);
vector = new double[size_vector];
}
/* ---------------------------------------------------------------------- */
ComputePressureAlchemy::~ComputePressureAlchemy()
{
delete[] vector;
}
/* ---------------------------------------------------------------------- */
void ComputePressureAlchemy::init()
{
fix = modify->get_fix_by_id(id_fix);
if (!fix)
error->all(FLERR, "Could not find compute pressure/alchemy fix ID {} for fix alchemy", id_fix);
int dim = 0;
void *ptr = fix->extract("pressure", dim);
if (!ptr || (dim != 1)) error->all(FLERR, "Could not extract pressure from fix alchemy");
}
/* ----------------------------------------------------------------------
compute total pressure from tensor, averaged over Pxx, Pyy, Pzz
------------------------------------------------------------------------- */
double ComputePressureAlchemy::compute_scalar()
{
invoked_scalar = update->ntimestep;
if (update->vflag_global != invoked_scalar)
error->all(FLERR, "Virial was not tallied on needed timestep");
compute_vector();
if (domain->dimension == 3) {
scalar = (vector[0] + vector[1] + vector[2]) / 3.0;
} else {
scalar = (vector[0] + vector[1]) / 2.0;
}
return scalar;
}
/* ----------------------------------------------------------------------
extract compute combined system pressure tensor from alchemy fix
------------------------------------------------------------------------- */
void ComputePressureAlchemy::compute_vector()
{
invoked_vector = update->ntimestep;
if (update->vflag_global != invoked_vector)
error->all(FLERR, "Virial was not tallied on needed timestep");
int dim = 0;
double *pressure = (double *) fix->extract("pressure", dim);
if (!pressure || (dim != 1)) error->all(FLERR, "Could not extract pressure from fix alchemy");
for (int i = 0; i < 6; i++) vector[i] = pressure[i];
}

View File

@ -0,0 +1,41 @@
/* -*- c++ -*- ----------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
LAMMPS development team: developers@lammps.org
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#ifdef COMPUTE_CLASS
// clang-format off
ComputeStyle(pressure/alchemy,ComputePressureAlchemy);
// clang-format on
#else
#ifndef LMP_COMPUTE_PRESSURE_ALCHEMY_H
#define LMP_COMPUTE_PRESSURE_ALCHEMY_H
#include "compute.h"
namespace LAMMPS_NS {
class ComputePressureAlchemy : public Compute {
public:
ComputePressureAlchemy(class LAMMPS *, int, char **);
~ComputePressureAlchemy() override;
void init() override;
double compute_scalar() override;
void compute_vector() override;
protected:
class Fix *fix;
std::string id_fix;
};
} // namespace LAMMPS_NS
#endif
#endif

265
src/REPLICA/fix_alchemy.cpp Normal file
View File

@ -0,0 +1,265 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
LAMMPS development team: developers@lammps.org
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include "fix_alchemy.h"
#include "atom.h"
#include "comm.h"
#include "compute.h"
#include "domain.h"
#include "error.h"
#include "input.h"
#include "memory.h"
#include "modify.h"
#include "respa.h"
#include "universe.h"
#include "update.h"
#include "variable.h"
#include <cstring>
using namespace LAMMPS_NS;
using namespace FixConst;
/* ---------------------------------------------------------------------- */
FixAlchemy::FixAlchemy(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg), commbuf(nullptr)
{
if (narg != 4) error->all(FLERR, "Incorrect number of arguments for fix alchemy");
if (universe->nworlds != 2) error->all(FLERR, "Must use exactly two partitions");
if (utils::strmatch(arg[3], "^v_"))
id_lambda = arg[3] + 2;
else
error->all(FLERR, "Must use variable as lambda argument to fix alchemy");
lambda = epot[0] = epot[1] = epot[2] = 0.0;
progress = 0;
for (int i = 0; i < 6; ++i) pressure[i] = 0.0;
no_change_box = 1;
time_depend = 1;
scalar_flag = 1;
extscalar = 0;
vector_flag = 1;
size_vector = 3;
extvector = 1;
ilevel_respa = 0;
nmax = 6;
sync_box = 0;
// set up rank-to-rank communicator for inter-partition communication
int color = comm->me;
int key = universe->iworld;
MPI_Comm_split(universe->uworld, color, key, &samerank);
// check that we have the same domain decomposition on all ranks
int my_nlocal[2] = {0, 0};
int all_nlocal[2] = {0, 0};
my_nlocal[universe->iworld] = atom->nlocal;
MPI_Allreduce(my_nlocal, all_nlocal, 2, MPI_INT, MPI_SUM, samerank);
int fail = (all_nlocal[0] == all_nlocal[1]) ? 0 : 1;
int allfail = 0;
MPI_Allreduce(&fail, &allfail, 1, MPI_INT, MPI_MAX, universe->uworld);
if (allfail)
error->all(FLERR, "Number of atoms and domain decomposition must match for both partitions");
id_pe = std::string(id) + "_pe";
pe = modify->add_compute(id_pe + " all pe");
pe->addstep(update->ntimestep);
id_temp = std::string(id) + "_temp";
temp = modify->add_compute(id_temp + " all temp");
temp->addstep(update->ntimestep);
id_press = std::string(id) + "_press";
press = modify->add_compute(id_press + " all pressure " + id_temp);
press->addstep(update->ntimestep);
}
/* ---------------------------------------------------------------------- */
FixAlchemy::~FixAlchemy()
{
MPI_Comm_free(&samerank);
modify->delete_compute(id_pe);
modify->delete_compute(id_temp);
modify->delete_compute(id_press);
memory->destroy(commbuf);
}
/* ---------------------------------------------------------------------- */
int FixAlchemy::setmask()
{
int mask = 0;
mask |= POST_INTEGRATE;
mask |= POST_FORCE;
return mask;
}
/* ---------------------------------------------------------------------- */
static void synchronize_box(Domain *domain, MPI_Comm samerank)
{
MPI_Bcast(&domain->boxlo[0], 3, MPI_DOUBLE, 0, samerank);
MPI_Bcast(&domain->boxhi[0], 3, MPI_DOUBLE, 0, samerank);
MPI_Bcast(&domain->yz, 1, MPI_DOUBLE, 0, samerank);
MPI_Bcast(&domain->xz, 1, MPI_DOUBLE, 0, samerank);
MPI_Bcast(&domain->xy, 1, MPI_DOUBLE, 0, samerank);
domain->set_global_box();
domain->set_local_box();
}
/* ---------------------------------------------------------------------- */
void FixAlchemy::init()
{
int onenmax = MAX(nmax, 3 * atom->nmax);
MPI_Allreduce(&onenmax, &nmax, 1, MPI_INT, MPI_MAX, universe->uworld);
memory->destroy(commbuf);
memory->create(commbuf, sizeof(double) * nmax, "alchemy:nmax");
if (modify->get_fix_by_style("^balance").size() > 0)
error->all(FLERR, "Fix alchemy is not compatible with load balancing");
if (modify->get_fix_by_style("^alchemy").size() > 1)
error->all(FLERR, "There may only one fix alchemy at a time");
ivar = input->variable->find(id_lambda.c_str());
if (ivar < 0)
error->universe_one(FLERR, fmt::format("Variable {} for fix alchemy does not exist", id_lambda));
if (!input->variable->equalstyle(ivar))
error->universe_one(FLERR,
fmt::format("Variable {} for fix alchemy is invalid style", id_lambda));
lambda = input->variable->compute_equal(ivar);
// synchronize box dimensions, determine if resync during run will be needed.
synchronize_box(domain, samerank);
sync_box = 0;
for (auto ifix : modify->get_fix_list())
if (ifix->box_change) sync_box = 1;
}
/* ---------------------------------------------------------------------- */
void FixAlchemy::setup(int vflag)
{
if (utils::strmatch(update->integrate_style, "^respa")) {
auto respa = dynamic_cast<Respa *>(update->integrate);
respa->copy_flevel_f(ilevel_respa);
post_force_respa(vflag, ilevel_respa, 0);
respa->copy_f_flevel(ilevel_respa);
} else {
post_force(vflag);
}
if (universe->me == 0) {
double delta = update->ntimestep - update->beginstep;
if ((delta != 0.0) && (update->beginstep != update->endstep))
delta /= update->endstep - update->beginstep;
progress = static_cast<int>(delta*100.0);
auto msg = fmt::format("Starting alchemical transformation at {:>3d}%\n", progress);
if (universe->uscreen) fmt::print(universe->uscreen, msg);
if (universe->ulogfile) fmt::print(universe->ulogfile, msg);
}
}
/* ---------------------------------------------------------------------- */
void FixAlchemy::post_integrate()
{
// synchronize atom positions
const int nall = atom->nlocal + atom->nghost;
MPI_Bcast(&atom->x[0][0], 3 * nall, MPI_DOUBLE, 0, samerank);
// synchronize box dimensions, if needed
if (sync_box) synchronize_box(domain, samerank);
}
/* ---------------------------------------------------------------------- */
void FixAlchemy::post_force(int /*vflag*/)
{
if (3 * atom->nmax > nmax) {
nmax = 3 * atom->nmax;
memory->grow(commbuf, sizeof(double) * atom->nmax, "alchemy:commbuf");
}
const int nall = 3 * atom->nlocal;
double *f = &atom->f[0][0];
lambda = input->variable->compute_equal(ivar);
for (int i = 0; i < nall; ++i) commbuf[i] = f[i] * lambda;
MPI_Allreduce(commbuf, f, nall, MPI_DOUBLE, MPI_SUM, samerank);
// sum up potential energy
const double scalefac = 1.0 / comm->nprocs;
commbuf[0] = commbuf[1] = commbuf[2] = 0.0;
commbuf[universe->iworld] = scalefac * pe->compute_scalar();
commbuf[2] = lambda * scalefac * pe->compute_scalar();
MPI_Allreduce(commbuf, epot, 3, MPI_DOUBLE, MPI_SUM, universe->uworld);
pe->addstep(update->ntimestep + 1);
// sum up pressure
press->compute_vector();
for (int i = 0; i < 6; ++i) commbuf[i] = lambda * scalefac * press->vector[i];
MPI_Allreduce(commbuf, pressure, 6, MPI_DOUBLE, MPI_SUM, universe->uworld);
press->addstep(update->ntimestep + 1);
// print progress info
if (universe->me == 0) {
double delta = update->ntimestep - update->beginstep;
if ((delta != 0.0) && (update->beginstep != update->endstep))
delta /= update->endstep - update->beginstep;
int status = static_cast<int>(delta*100.0);
if ((status / 10) > (progress / 10)) {
progress = status;
auto msg = fmt::format(" Alchemical transformation progress: {:>3d}%\n", progress);
if (universe->uscreen) fmt::print(universe->uscreen, msg);
if (universe->ulogfile) fmt::print(universe->ulogfile, msg);
}
}
}
/* ---------------------------------------------------------------------- */
double FixAlchemy::compute_scalar()
{
return lambda;
}
/* ---------------------------------------------------------------------- */
double FixAlchemy::compute_vector(int n)
{
return epot[n];
}
/* ---------------------------------------------------------------------- */
void *FixAlchemy::extract(const char *str, int &dim)
{
dim = 0;
if (strcmp(str, "lambda") == 0) { return &lambda; }
if (strcmp(str, "pe") == 0) { return &epot[2]; }
dim = 1;
if (strcmp(str, "pressure") == 0) { return pressure; }
return nullptr;
}

58
src/REPLICA/fix_alchemy.h Normal file
View File

@ -0,0 +1,58 @@
/* -*- c++ -*- ----------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
LAMMPS development team: developers@lammps.org
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#ifdef FIX_CLASS
// clang-format off
FixStyle(alchemy,FixAlchemy);
// clang-format on
#else
#ifndef LMP_FIX_ALCHEMY_H
#define LMP_FIX_ALCHEMY_H
#include "fix.h"
namespace LAMMPS_NS {
class FixAlchemy : public Fix {
public:
FixAlchemy(class LAMMPS *, int, char **);
~FixAlchemy() override;
int setmask() override;
void init() override;
void setup(int) override;
void post_integrate() override;
void post_force(int) override;
double compute_scalar() override;
double compute_vector(int) override;
void *extract(const char *, int &) override;
protected:
MPI_Comm samerank;
double *commbuf;
class Compute *pe, *temp, *press;
std::string id_pe, id_temp, id_press, id_lambda;
double lambda; // scaling prefactor for combining the partitions
double epot[3]; // last (unscaled) potential energy from each replica and combined energy
double pressure[6]; // joined pressure
int progress; // for progress indicator
int sync_box; // 1 of box dimensions need to be synchronized
int ilevel_respa;
int nmax;
int ivar;
};
} // namespace LAMMPS_NS
#endif
#endif

View File

@ -13,17 +13,19 @@
------------------------------------------------------------------------- */
#include "fix_wall_piston.h"
#include "atom.h"
#include "comm.h"
#include "domain.h"
#include "error.h"
#include "force.h"
#include "lattice.h"
#include "math_const.h"
#include "random_mars.h"
#include "update.h"
#include <cmath>
#include <cstring>
#include "atom.h"
#include "domain.h"
#include "lattice.h"
#include "update.h"
#include "error.h"
#include "random_mars.h"
#include "force.h"
#include "comm.h"
#include "math_const.h"
using namespace LAMMPS_NS;
using namespace FixConst;

View File

@ -27,7 +27,6 @@
#include <cstring>
using namespace LAMMPS_NS;
using namespace FixConst;
enum { XLO, XHI, YLO, YHI, ZLO, ZHI };
enum { NONE, EDGE, CONSTANT, VARIABLE };

View File

@ -319,8 +319,6 @@ void CreateBonds::many()
void CreateBonds::single_bond()
{
int m;
// check that 2 atoms exist
const int nlocal = atom->nlocal;
@ -341,7 +339,8 @@ void CreateBonds::single_bond()
int **bond_type = atom->bond_type;
tagint **bond_atom = atom->bond_atom;
if ((m = idx1) >= 0) {
int m = idx1;
if ((m >= 0) && (m < nlocal)) {
if (num_bond[m] == atom->bond_per_atom)
error->one(FLERR, "New bond exceeded bonds per atom in create_bonds");
bond_type[m][num_bond[m]] = btype;
@ -352,7 +351,8 @@ void CreateBonds::single_bond()
if (force->newton_bond) return;
if ((m = idx2) >= 0) {
m = idx2;
if ((m >= 0) && (m < nlocal)) {
if (num_bond[m] == atom->bond_per_atom)
error->one(FLERR, "New bond exceeded bonds per atom in create_bonds");
bond_type[m][num_bond[m]] = btype;
@ -365,8 +365,6 @@ void CreateBonds::single_bond()
void CreateBonds::single_angle()
{
int m;
// check that 3 atoms exist
const int nlocal = atom->nlocal;
@ -391,7 +389,8 @@ void CreateBonds::single_angle()
tagint **angle_atom2 = atom->angle_atom2;
tagint **angle_atom3 = atom->angle_atom3;
if ((m = idx2) >= 0) {
int m = idx2;
if ((m >= 0) && (m < nlocal)) {
if (num_angle[m] == atom->angle_per_atom)
error->one(FLERR, "New angle exceeded angles per atom in create_bonds");
angle_type[m][num_angle[m]] = atype;
@ -404,7 +403,8 @@ void CreateBonds::single_angle()
if (force->newton_bond) return;
if ((m = idx1) >= 0) {
m = idx1;
if ((m >= 0) && (m < nlocal)) {
if (num_angle[m] == atom->angle_per_atom)
error->one(FLERR, "New angle exceeded angles per atom in create_bonds");
angle_type[m][num_angle[m]] = atype;
@ -414,7 +414,8 @@ void CreateBonds::single_angle()
num_angle[m]++;
}
if ((m = idx3) >= 0) {
m = idx3;
if ((m >= 0) && (m < nlocal)) {
if (num_angle[m] == atom->angle_per_atom)
error->one(FLERR, "New angle exceeded angles per atom in create_bonds");
angle_type[m][num_angle[m]] = atype;
@ -429,8 +430,6 @@ void CreateBonds::single_angle()
void CreateBonds::single_dihedral()
{
int m;
// check that 4 atoms exist
const int nlocal = atom->nlocal;
@ -458,7 +457,8 @@ void CreateBonds::single_dihedral()
tagint **dihedral_atom3 = atom->dihedral_atom3;
tagint **dihedral_atom4 = atom->dihedral_atom4;
if ((m = idx2) >= 0) {
int m = idx2;
if ((m >= 0) && (m < nlocal)) {
if (num_dihedral[m] == atom->dihedral_per_atom)
error->one(FLERR, "New dihedral exceeded dihedrals per atom in create_bonds");
dihedral_type[m][num_dihedral[m]] = dtype;
@ -472,7 +472,8 @@ void CreateBonds::single_dihedral()
if (force->newton_bond) return;
if ((m = idx1) >= 0) {
m = idx1;
if ((m >= 0) && (m < nlocal)) {
if (num_dihedral[m] == atom->dihedral_per_atom)
error->one(FLERR, "New dihedral exceeded dihedrals per atom in create_bonds");
dihedral_type[m][num_dihedral[m]] = dtype;
@ -483,7 +484,8 @@ void CreateBonds::single_dihedral()
num_dihedral[m]++;
}
if ((m = idx3) >= 0) {
m = idx3;
if ((m >= 0) && (m < nlocal)) {
if (num_dihedral[m] == atom->dihedral_per_atom)
error->one(FLERR, "New dihedral exceeded dihedrals per atom in create_bonds");
dihedral_type[m][num_dihedral[m]] = dtype;
@ -494,7 +496,8 @@ void CreateBonds::single_dihedral()
num_dihedral[m]++;
}
if ((m = idx4) >= 0) {
m = idx4;
if ((m >= 0) && (m < nlocal)) {
if (num_dihedral[m] == atom->dihedral_per_atom)
error->one(FLERR, "New dihedral exceeded dihedrals per atom in create_bonds");
dihedral_type[m][num_dihedral[m]] = dtype;
@ -510,8 +513,6 @@ void CreateBonds::single_dihedral()
void CreateBonds::single_improper()
{
int m;
// check that 4 atoms exist
const int nlocal = atom->nlocal;
@ -539,7 +540,8 @@ void CreateBonds::single_improper()
tagint **improper_atom3 = atom->improper_atom3;
tagint **improper_atom4 = atom->improper_atom4;
if ((m = idx2) >= 0) {
int m = idx2;
if ((m >= 0) && (m < nlocal)) {
if (num_improper[m] == atom->improper_per_atom)
error->one(FLERR, "New improper exceeded impropers per atom in create_bonds");
improper_type[m][num_improper[m]] = dtype;
@ -553,7 +555,8 @@ void CreateBonds::single_improper()
if (force->newton_bond) return;
if ((m = idx1) >= 0) {
m = idx1;
if ((m >= 0) && (m < nlocal)) {
if (num_improper[m] == atom->improper_per_atom)
error->one(FLERR, "New improper exceeded impropers per atom in create_bonds");
improper_type[m][num_improper[m]] = dtype;
@ -564,7 +567,8 @@ void CreateBonds::single_improper()
num_improper[m]++;
}
if ((m = idx3) >= 0) {
m = idx3;
if ((m >= 0) && (m < nlocal)) {
if (num_improper[m] == atom->improper_per_atom)
error->one(FLERR, "New improper exceeded impropers per atom in create_bonds");
improper_type[m][num_improper[m]] = dtype;
@ -575,7 +579,8 @@ void CreateBonds::single_improper()
num_improper[m]++;
}
if ((m = idx4) >= 0) {
m = idx4;
if ((m >= 0) && (m < nlocal)) {
if (num_improper[m] == atom->improper_per_atom)
error->one(FLERR, "New improper exceeded impropers per atom in create_bonds");
improper_type[m][num_improper[m]] = dtype;

View File

@ -1,4 +1,3 @@
// clang-format off
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
@ -28,14 +27,14 @@
using namespace LAMMPS_NS;
using namespace FixConst;
enum{XLO=0,XHI=1,YLO=2,YHI=3,ZLO=4,ZHI=5};
enum{NONE=0,EDGE,CONSTANT,VARIABLE};
enum { XLO = 0, XHI = 1, YLO = 2, YHI = 3, ZLO = 4, ZHI = 5 };
enum { NONE = 0, EDGE, CONSTANT, VARIABLE };
static const char *wallpos[] = {"xlo", "xhi", "ylo", "yhi", "zlo", "zhi"};
/* ---------------------------------------------------------------------- */
FixWall::FixWall(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg),
nwall(0)
FixWall::FixWall(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg), nwall(0)
{
scalar_flag = 1;
vector_flag = 1;
@ -53,111 +52,145 @@ FixWall::FixWall(LAMMPS *lmp, int narg, char **arg) :
fldflag = 0;
int pbcflag = 0;
for (int i = 0; i < 6; i++) xstr[i] = estr[i] = sstr[i] = nullptr;
for (int i = 0; i < 6; i++) xstr[i] = estr[i] = sstr[i] = lstr[i] = fstr[i] = kstr[i] = nullptr;
int iarg = 3;
if (utils::strmatch(style, "^wall/table")) iarg = 5;
while (iarg < narg) {
if ((strcmp(arg[iarg],"xlo") == 0) || (strcmp(arg[iarg],"xhi") == 0) ||
(strcmp(arg[iarg],"ylo") == 0) || (strcmp(arg[iarg],"yhi") == 0) ||
(strcmp(arg[iarg],"zlo") == 0) || (strcmp(arg[iarg],"zhi") == 0)) {
if (iarg+5 > narg) error->all(FLERR,"Illegal fix wall command");
int wantargs = 5;
if (utils::strmatch(style, "^wall/lepton")) wantargs = 4;
if (utils::strmatch(style, "^wall/morse")) wantargs = 6;
if ((strcmp(arg[iarg], "xlo") == 0) || (strcmp(arg[iarg], "xhi") == 0) ||
(strcmp(arg[iarg], "ylo") == 0) || (strcmp(arg[iarg], "yhi") == 0) ||
(strcmp(arg[iarg], "zlo") == 0) || (strcmp(arg[iarg], "zhi") == 0)) {
if (iarg + wantargs > narg) error->all(FLERR, "Missing argument for fix {} command", style);
int newwall;
if (strcmp(arg[iarg],"xlo") == 0) newwall = XLO;
else if (strcmp(arg[iarg],"xhi") == 0) newwall = XHI;
else if (strcmp(arg[iarg],"ylo") == 0) newwall = YLO;
else if (strcmp(arg[iarg],"yhi") == 0) newwall = YHI;
else if (strcmp(arg[iarg],"zlo") == 0) newwall = ZLO;
else if (strcmp(arg[iarg],"zhi") == 0) newwall = ZHI;
for (int m = 0; (m < nwall) && (m < 6); m++)
if (strcmp(arg[iarg], "xlo") == 0) {
newwall = XLO;
} else if (strcmp(arg[iarg], "xhi") == 0) {
newwall = XHI;
} else if (strcmp(arg[iarg], "ylo") == 0) {
newwall = YLO;
} else if (strcmp(arg[iarg], "yhi") == 0) {
newwall = YHI;
} else if (strcmp(arg[iarg], "zlo") == 0) {
newwall = ZLO;
} else if (strcmp(arg[iarg], "zhi") == 0) {
newwall = ZHI;
}
for (int m = 0; (m < nwall) && (m < 6); m++) {
if (newwall == wallwhich[m])
error->all(FLERR,"Wall defined twice in fix wall command");
error->all(FLERR, "{} wall defined twice in fix {} command", wallpos[newwall], style);
}
wallwhich[nwall] = newwall;
if (strcmp(arg[iarg+1],"EDGE") == 0) {
if (strcmp(arg[iarg + 1], "EDGE") == 0) {
xstyle[nwall] = EDGE;
int dim = wallwhich[nwall] / 2;
int side = wallwhich[nwall] % 2;
if (side == 0) coord0[nwall] = domain->boxlo[dim];
else coord0[nwall] = domain->boxhi[dim];
} else if (utils::strmatch(arg[iarg+1],"^v_")) {
if (side == 0) {
coord0[nwall] = domain->boxlo[dim];
} else {
coord0[nwall] = domain->boxhi[dim];
}
} else if (utils::strmatch(arg[iarg + 1], "^v_")) {
xstyle[nwall] = VARIABLE;
xstr[nwall] = utils::strdup(arg[iarg+1]+2);
xstr[nwall] = utils::strdup(arg[iarg + 1] + 2);
} else {
xstyle[nwall] = CONSTANT;
coord0[nwall] = utils::numeric(FLERR,arg[iarg+1],false,lmp);
coord0[nwall] = utils::numeric(FLERR, arg[iarg + 1], false, lmp);
}
if (utils::strmatch(arg[iarg+2],"^v_")) {
estr[nwall] = utils::strdup(arg[iarg+2]+2);
estyle[nwall] = VARIABLE;
if (utils::strmatch(style, "^wall/lepton")) {
estyle[nwall] = sstyle[nwall] = CONSTANT;
lstr[nwall] = utils::strdup(arg[iarg + 2]);
cutoff[nwall] = utils::numeric(FLERR, arg[iarg + 3], false, lmp);
} else if (utils::strmatch(style, "^wall/table")) {
estyle[nwall] = sstyle[nwall] = CONSTANT;
fstr[nwall] = utils::strdup(arg[iarg + 2]);
kstr[nwall] = utils::strdup(arg[iarg + 3]);
cutoff[nwall] = utils::numeric(FLERR, arg[iarg + 4], false, lmp);
} else {
epsilon[nwall] = utils::numeric(FLERR,arg[iarg+2],false,lmp);
estyle[nwall] = CONSTANT;
}
if (iarg + 5 > narg) error->all(FLERR, "Missing argument for fix {} command", style);
if (utils::strmatch(style,"^wall/morse")) {
if (utils::strmatch(arg[iarg+3],"^v_")) {
astr[nwall] = utils::strdup(arg[iarg+3]+2);
astyle[nwall] = VARIABLE;
if (utils::strmatch(arg[iarg + 2], "^v_")) {
estr[nwall] = utils::strdup(arg[iarg + 2] + 2);
estyle[nwall] = VARIABLE;
} else {
alpha[nwall] = utils::numeric(FLERR,arg[iarg+3],false,lmp);
astyle[nwall] = CONSTANT;
epsilon[nwall] = utils::numeric(FLERR, arg[iarg + 2], false, lmp);
estyle[nwall] = CONSTANT;
}
++iarg;
}
if (utils::strmatch(arg[iarg+3],"^v_")) {
sstr[nwall] = utils::strdup(arg[iarg+3]+2);
sstyle[nwall] = VARIABLE;
} else {
sigma[nwall] = utils::numeric(FLERR,arg[iarg+3],false,lmp);
sstyle[nwall] = CONSTANT;
}
if (utils::strmatch(style, "^wall/morse")) {
if (utils::strmatch(arg[iarg + 3], "^v_")) {
astr[nwall] = utils::strdup(arg[iarg + 3] + 2);
astyle[nwall] = VARIABLE;
} else {
alpha[nwall] = utils::numeric(FLERR, arg[iarg + 3], false, lmp);
astyle[nwall] = CONSTANT;
}
// adjust so we can share the regular code path
++iarg;
--wantargs;
}
cutoff[nwall] = utils::numeric(FLERR,arg[iarg+4],false,lmp);
if (utils::strmatch(arg[iarg + 3], "^v_")) {
sstr[nwall] = utils::strdup(arg[iarg + 3] + 2);
sstyle[nwall] = VARIABLE;
} else {
sigma[nwall] = utils::numeric(FLERR, arg[iarg + 3], false, lmp);
sstyle[nwall] = CONSTANT;
}
cutoff[nwall] = utils::numeric(FLERR, arg[iarg + 4], false, lmp);
}
nwall++;
iarg += 5;
} else if (strcmp(arg[iarg],"units") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix wall command");
if (strcmp(arg[iarg+1],"box") == 0) scaleflag = 0;
else if (strcmp(arg[iarg+1],"lattice") == 0) scaleflag = 1;
else error->all(FLERR,"Illegal fix wall command");
iarg += wantargs;
} else if (strcmp(arg[iarg], "units") == 0) {
if (iarg + 2 > narg) error->all(FLERR, "Illegal fix {} command", style);
if (strcmp(arg[iarg + 1], "box") == 0)
scaleflag = 0;
else if (strcmp(arg[iarg + 1], "lattice") == 0)
scaleflag = 1;
else
error->all(FLERR, "Illegal fix {} command", style);
iarg += 2;
} else if (strcmp(arg[iarg],"fld") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix wall command");
fldflag = utils::logical(FLERR,arg[iarg+1],false,lmp);
} else if (strcmp(arg[iarg], "fld") == 0) {
if (iarg + 2 > narg) error->all(FLERR, "Illegal fix {} command", style);
fldflag = utils::logical(FLERR, arg[iarg + 1], false, lmp);
iarg += 2;
} else if (strcmp(arg[iarg],"pbc") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix wall command");
pbcflag = utils::logical(FLERR,arg[iarg+1],false,lmp);
} else if (strcmp(arg[iarg], "pbc") == 0) {
if (iarg + 2 > narg) error->all(FLERR, "Illegal fix {} command", style);
pbcflag = utils::logical(FLERR, arg[iarg + 1], false, lmp);
iarg += 2;
} else error->all(FLERR,"Illegal fix wall command");
} else
error->all(FLERR, "Illegal fix {} command", style);
}
size_vector = nwall;
// error checks
if (nwall == 0) error->all(FLERR,"Illegal fix wall command");
for (int m = 0; m < nwall; m++)
if (nwall == 0) error->all(FLERR, "Illegal fix {} command: no walls defined", style);
for (int m = 0; m < nwall; m++) {
if (cutoff[m] <= 0.0)
error->all(FLERR,"Fix wall cutoff <= 0.0");
error->all(FLERR, "Fix {} cutoff <= 0.0 for {} wall", style, wallpos[wallwhich[m]]);
}
for (int m = 0; m < nwall; m++)
if ((wallwhich[m] == ZLO || wallwhich[m] == ZHI) && domain->dimension == 2)
error->all(FLERR,"Cannot use fix wall zlo/zhi for a 2d simulation");
error->all(FLERR, "Cannot use fix {} zlo/zhi for a 2d simulation", style);
if (!pbcflag) {
for (int m = 0; m < nwall; m++) {
if ((wallwhich[m] == XLO || wallwhich[m] == XHI) && domain->xperiodic)
error->all(FLERR,"Cannot use fix wall in periodic dimension");
error->all(FLERR, "Cannot use {} wall in periodic x dimension", wallpos[wallwhich[m]]);
if ((wallwhich[m] == YLO || wallwhich[m] == YHI) && domain->yperiodic)
error->all(FLERR,"Cannot use fix wall in periodic dimension");
error->all(FLERR, "Cannot use {} wall in periodic y dimension", wallpos[wallwhich[m]]);
if ((wallwhich[m] == ZLO || wallwhich[m] == ZHI) && domain->zperiodic)
error->all(FLERR,"Cannot use fix wall in periodic dimension");
error->all(FLERR, "Cannot use {} wall in periodic z dimension", wallpos[wallwhich[m]]);
}
}
@ -172,14 +205,17 @@ FixWall::FixWall(LAMMPS *lmp, int narg, char **arg) :
xscale = domain->lattice->xlattice;
yscale = domain->lattice->ylattice;
zscale = domain->lattice->zlattice;
}
else xscale = yscale = zscale = 1.0;
} else
xscale = yscale = zscale = 1.0;
for (int m = 0; m < nwall; m++) {
if (xstyle[m] != CONSTANT) continue;
if (wallwhich[m] < YLO) coord0[m] *= xscale;
else if (wallwhich[m] < ZLO) coord0[m] *= yscale;
else coord0[m] *= zscale;
if (wallwhich[m] < YLO)
coord0[m] *= xscale;
else if (wallwhich[m] < ZLO)
coord0[m] *= yscale;
else
coord0[m] *= zscale;
}
}
@ -191,8 +227,10 @@ FixWall::FixWall(LAMMPS *lmp, int narg, char **arg) :
for (int m = 0; m < nwall; m++) {
if (xstyle[m] == VARIABLE) xflag = 1;
if (xflag || estyle[m] == VARIABLE || sstyle[m] == VARIABLE) varflag = 1;
if (estyle[m] == VARIABLE || sstyle[m] == VARIABLE) wstyle[m] = VARIABLE;
else wstyle[m] = CONSTANT;
if (estyle[m] == VARIABLE || sstyle[m] == VARIABLE)
wstyle[m] = VARIABLE;
else
wstyle[m] = CONSTANT;
}
eflag = 0;
@ -206,9 +244,12 @@ FixWall::~FixWall()
if (copymode) return;
for (int m = 0; m < nwall; m++) {
delete [] xstr[m];
delete [] estr[m];
delete [] sstr[m];
delete[] xstr[m];
delete[] estr[m];
delete[] sstr[m];
delete[] lstr[m];
delete[] fstr[m];
delete[] kstr[m];
}
}
@ -220,8 +261,10 @@ int FixWall::setmask()
// FLD implicit needs to invoke wall forces before pair style
if (fldflag) mask |= PRE_FORCE;
else mask |= POST_FORCE;
if (fldflag)
mask |= PRE_FORCE;
else
mask |= POST_FORCE;
mask |= POST_FORCE_RESPA;
mask |= MIN_POST_FORCE;
@ -235,24 +278,21 @@ void FixWall::init()
for (int m = 0; m < nwall; m++) {
if (xstyle[m] == VARIABLE) {
xindex[m] = input->variable->find(xstr[m]);
if (xindex[m] < 0)
error->all(FLERR,"Variable name for fix wall does not exist");
if (xindex[m] < 0) error->all(FLERR, "Variable name for fix wall does not exist");
if (!input->variable->equalstyle(xindex[m]))
error->all(FLERR,"Variable for fix wall is invalid style");
error->all(FLERR, "Variable for fix wall is invalid style");
}
if (estyle[m] == VARIABLE) {
eindex[m] = input->variable->find(estr[m]);
if (eindex[m] < 0)
error->all(FLERR,"Variable name for fix wall does not exist");
if (eindex[m] < 0) error->all(FLERR, "Variable name for fix wall does not exist");
if (!input->variable->equalstyle(eindex[m]))
error->all(FLERR,"Variable for fix wall is invalid style");
error->all(FLERR, "Variable for fix wall is invalid style");
}
if (sstyle[m] == VARIABLE) {
sindex[m] = input->variable->find(sstr[m]);
if (sindex[m] < 0)
error->all(FLERR,"Variable name for fix wall does not exist");
if (sindex[m] < 0) error->all(FLERR, "Variable name for fix wall does not exist");
if (!input->variable->equalstyle(sindex[m]))
error->all(FLERR,"Variable for fix wall is invalid style");
error->all(FLERR, "Variable for fix wall is invalid style");
}
}
@ -260,9 +300,9 @@ void FixWall::init()
for (int m = 0; m < nwall; m++) precompute(m);
if (utils::strmatch(update->integrate_style,"^respa")) {
ilevel_respa = (dynamic_cast<Respa *>(update->integrate))->nlevels-1;
if (respa_level >= 0) ilevel_respa = MIN(respa_level,ilevel_respa);
if (utils::strmatch(update->integrate_style, "^respa")) {
ilevel_respa = (dynamic_cast<Respa *>(update->integrate))->nlevels - 1;
if (respa_level >= 0) ilevel_respa = MIN(respa_level, ilevel_respa);
}
}
@ -270,11 +310,11 @@ void FixWall::init()
void FixWall::setup(int vflag)
{
if (utils::strmatch(update->integrate_style,"^verlet")) {
if (utils::strmatch(update->integrate_style, "^verlet")) {
if (!fldflag) post_force(vflag);
} else {
(dynamic_cast<Respa *>(update->integrate))->copy_flevel_f(ilevel_respa);
post_force_respa(vflag,ilevel_respa,0);
post_force_respa(vflag, ilevel_respa, 0);
(dynamic_cast<Respa *>(update->integrate))->copy_f_flevel(ilevel_respa);
}
}
@ -319,25 +359,27 @@ void FixWall::post_force(int vflag)
for (int m = 0; m < nwall; m++) {
if (xstyle[m] == VARIABLE) {
coord = input->variable->compute_equal(xindex[m]);
if (wallwhich[m] < YLO) coord *= xscale;
else if (wallwhich[m] < ZLO) coord *= yscale;
else coord *= zscale;
} else coord = coord0[m];
if (wallwhich[m] < YLO)
coord *= xscale;
else if (wallwhich[m] < ZLO)
coord *= yscale;
else
coord *= zscale;
} else
coord = coord0[m];
if (wstyle[m] == VARIABLE) {
if (estyle[m] == VARIABLE) {
epsilon[m] = input->variable->compute_equal(eindex[m]);
if (epsilon[m] < 0.0)
error->all(FLERR,"Variable evaluation in fix wall gave bad value");
if (epsilon[m] < 0.0) error->all(FLERR, "Variable evaluation in fix wall gave bad value");
}
if (sstyle[m] == VARIABLE) {
sigma[m] = input->variable->compute_equal(sindex[m]);
if (sigma[m] < 0.0)
error->all(FLERR,"Variable evaluation in fix wall gave bad value");
if (sigma[m] < 0.0) error->all(FLERR, "Variable evaluation in fix wall gave bad value");
}
precompute(m);
}
wall_particle(m,wallwhich[m],coord);
wall_particle(m, wallwhich[m], coord);
}
if (varflag) modify->addstep_compute(update->ntimestep + 1);
@ -366,7 +408,7 @@ double FixWall::compute_scalar()
// only sum across procs one time
if (eflag == 0) {
MPI_Allreduce(ewall,ewall_all,nwall+1,MPI_DOUBLE,MPI_SUM,world);
MPI_Allreduce(ewall, ewall_all, nwall + 1, MPI_DOUBLE, MPI_SUM, world);
eflag = 1;
}
return ewall_all[0];
@ -381,8 +423,8 @@ double FixWall::compute_vector(int n)
// only sum across procs one time
if (eflag == 0) {
MPI_Allreduce(ewall,ewall_all,nwall+1,MPI_DOUBLE,MPI_SUM,world);
MPI_Allreduce(ewall, ewall_all, nwall + 1, MPI_DOUBLE, MPI_SUM, world);
eflag = 1;
}
return ewall_all[n+1];
return ewall_all[n + 1];
}

View File

@ -50,8 +50,8 @@ class FixWall : public Fix {
double xscale, yscale, zscale;
int estyle[6], sstyle[6], astyle[6], wstyle[6];
int eindex[6], sindex[6];
char *estr[6], *sstr[6], *astr[6];
int varflag; // 1 if any wall position,epsilon,sigma is a var
char *estr[6], *sstr[6], *astr[6], *lstr[6], *fstr[6], *kstr[6];
int varflag; // 1 if any wall position,epsilon,sigma is a variable
int eflag; // per-wall flag for energy summation
int ilevel_respa;
int fldflag;

View File

@ -16,7 +16,6 @@
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
/* ---------------------------------------------------------------------- */

View File

@ -18,7 +18,6 @@
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
/* ---------------------------------------------------------------------- */

View File

@ -18,7 +18,6 @@
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
/* ---------------------------------------------------------------------- */

View File

@ -18,7 +18,6 @@
#include <cmath>
using namespace LAMMPS_NS;
using namespace FixConst;
/* ---------------------------------------------------------------------- */
@ -72,7 +71,7 @@ void FixWallMorse::wall_particle(int m, int which, double coord)
}
double dr = delta - sigma[m];
double dexp = exp(-alpha[m] * dr);
fwall = side * coeff1[m] * (dexp * dexp - dexp) / delta;
fwall = side * coeff1[m] * (dexp * dexp - dexp);
ewall[0] += epsilon[m] * (dexp * dexp - 2.0 * dexp) - offset[m];
f[i][dim] -= fwall;
ewall[m + 1] += fwall;

472
src/fix_wall_table.cpp Normal file
View File

@ -0,0 +1,472 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
LAMMPS development team: developers@lammps.org
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include "fix_wall_table.h"
#include "atom.h"
#include "comm.h"
#include "error.h"
#include "memory.h"
#include "table_file_reader.h"
#include "tokenizer.h"
#include <cstring>
using namespace LAMMPS_NS;
enum { NONE, LINEAR, SPLINE };
static constexpr double BIGNUM = 1.0e300;
/* ---------------------------------------------------------------------- */
FixWallTable::FixWallTable(LAMMPS *lmp, int narg, char **arg) :
FixWall(lmp, narg, arg), tables(nullptr)
{
dynamic_group_allow = 1;
tabstyle = NONE;
if (strcmp(arg[3], "linear") == 0)
tabstyle = LINEAR;
else if (strcmp(arg[3], "spline") == 0)
tabstyle = SPLINE;
else
error->all(FLERR, "Unknown table style {} in fix {}", arg[3], style);
tablength = utils::inumeric(FLERR, arg[4], false, lmp);
if (tablength < 2) error->all(FLERR, "Illegal number of fix {} table entries", style);
}
/* ---------------------------------------------------------------------- */
void FixWallTable::post_constructor()
{
memory->sfree(tables);
tables = (Table *) memory->smalloc(nwall * sizeof(Table), "wall:tables");
for (int m = 0; m < nwall; ++m) {
Table &tb = tables[m];
null_table(tb);
if (comm->me == 0) read_table(tb, fstr[m], kstr[m]);
bcast_table(tb);
// error check on table parameters
if (tb.ninput <= 1) error->all(FLERR, "Invalid fix {} table length: {}", style, tb.ninput);
tb.lo = tb.rfile[0];
tb.hi = tb.rfile[tb.ninput - 1];
if (tb.lo >= tb.hi) error->all(FLERR, "Fix {} table distance values do not increase", style);
if (cutoff[m] > tb.hi)
error->all(FLERR, "Fix {} wall cutoff {} is larger than table outer cutoff {}", style,
cutoff[m], tb.hi);
// spline read-in data and compute r,e,f arrays within table
spline_table(tb);
compute_table(tb);
}
}
/* ---------------------------------------------------------------------- */
FixWallTable::~FixWallTable()
{
for (int m = 0; m < nwall; m++) free_table(tables[m]);
memory->sfree(tables);
}
/* ----------------------------------------------------------------------
compute the potential energy offset so it can be shifted to zero at the cutoff
------------------------------------------------------------------------- */
void FixWallTable::precompute(int m)
{
double u, mdu;
// always use linear interpolation to determine the offset, since we may be at the
// outer table cutoff and spline interpolation would cause out-of-bounds array accesses
int savedtabstyle = tabstyle;
tabstyle = LINEAR;
uf_lookup(m, cutoff[m], u, mdu);
offset[m] = u;
tabstyle = savedtabstyle;
}
/* ----------------------------------------------------------------------
interaction of all particles in group with a wall
m = index of wall coeffs
which = xlo,xhi,ylo,yhi,zlo,zhi
error if any particle is on or behind wall
------------------------------------------------------------------------- */
void FixWallTable::wall_particle(int m, int which, double coord)
{
double delta, fwall, vn, u, mdu;
double **x = atom->x;
double **f = atom->f;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int dim = which / 2;
int side = which % 2;
if (side == 0) side = -1;
int onflag = 0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (side < 0)
delta = x[i][dim] - coord;
else
delta = coord - x[i][dim];
if (delta >= cutoff[m]) continue;
if (delta <= 0.0) {
onflag = 1;
continue;
}
uf_lookup(m, delta, u, mdu);
fwall = side * mdu;
f[i][dim] -= fwall;
ewall[0] += u - offset[m];
ewall[m + 1] += fwall;
if (evflag) {
if (side < 0)
vn = -fwall * delta;
else
vn = fwall * delta;
v_tally(dim, i, vn);
}
}
if (onflag) error->one(FLERR, "Particle on or inside fix {} surface", style);
}
/* ---------------------------------------------------------------------- */
void FixWallTable::null_table(Table &tb)
{
tb.rfile = tb.efile = tb.ffile = nullptr;
tb.e2file = tb.f2file = nullptr;
tb.r = tb.e = tb.de = nullptr;
tb.f = tb.df = tb.e2 = tb.f2 = nullptr;
}
/* ---------------------------------------------------------------------- */
void FixWallTable::free_table(Table &tb)
{
memory->destroy(tb.rfile);
memory->destroy(tb.efile);
memory->destroy(tb.ffile);
memory->destroy(tb.e2file);
memory->destroy(tb.f2file);
memory->destroy(tb.r);
memory->destroy(tb.e);
memory->destroy(tb.de);
memory->destroy(tb.f);
memory->destroy(tb.df);
memory->destroy(tb.e2);
memory->destroy(tb.f2);
}
/* ---------------------------------------------------------------------- */
void FixWallTable::read_table(Table &tb, const std::string &tabfile, const std::string &keyword)
{
TableFileReader reader(lmp, tabfile, "fix wall/table");
char *line = reader.find_section_start(keyword);
if (!line) error->one(FLERR, "Did not find keyword {} in table file", keyword);
// read args on 2nd line of section
// allocate table arrays for file values
line = reader.next_line();
param_extract(tb, line);
memory->create(tb.rfile, tb.ninput, "wall:rfile");
memory->create(tb.efile, tb.ninput, "wall:efile");
memory->create(tb.ffile, tb.ninput, "wall:ffile");
// read r,e,f table values from file
reader.skip_line();
for (int i = 0; i < tb.ninput; i++) {
line = reader.next_line();
if (!line)
error->one(FLERR, "Data missing when parsing wall table '{}' line {} of {}.", keyword, i + 1,
tb.ninput);
try {
ValueTokenizer values(line);
values.next_int();
tb.rfile[i] = values.next_double();
tb.efile[i] = values.next_double();
tb.ffile[i] = values.next_double();
} catch (TokenizerException &e) {
error->one(FLERR, "Error parsing wall table '{}' line {} of {}. {}\nLine was: {}", keyword,
i + 1, tb.ninput, e.what(), line);
}
}
// warn if force != dE/dr at any point that is not an inflection point
// check via secant approximation to dE/dr
// skip two end points since do not have surrounding secants
// inflection point is where curvature changes sign
double r, e, f, rprev, rnext, eprev, enext, fleft, fright;
int ferror = 0;
for (int i = 1; i < tb.ninput - 1; i++) {
r = tb.rfile[i];
rprev = tb.rfile[i - 1];
rnext = tb.rfile[i + 1];
e = tb.efile[i];
eprev = tb.efile[i - 1];
enext = tb.efile[i + 1];
f = tb.ffile[i];
fleft = -(e - eprev) / (r - rprev);
fright = -(enext - e) / (rnext - r);
if (f < fleft && f < fright) ferror++;
if (f > fleft && f > fright) ferror++;
}
if (ferror)
error->warning(FLERR,
"{} of {} force values in table are inconsistent with -dE/dr.\n"
"WARNING: Should only be flagged at inflection points",
ferror, tb.ninput);
}
/* ----------------------------------------------------------------------
build spline representation of e,f over entire range of read-in table
this function sets these values in e2file,f2file
------------------------------------------------------------------------- */
void FixWallTable::spline_table(Table &tb)
{
memory->create(tb.e2file, tb.ninput, "wall:e2file");
memory->create(tb.f2file, tb.ninput, "wall:f2file");
double ep0 = -tb.ffile[0];
double epn = -tb.ffile[tb.ninput - 1];
spline(tb.rfile, tb.efile, tb.ninput, ep0, epn, tb.e2file);
if (tb.fpflag == 0) {
tb.fplo = (tb.ffile[1] - tb.ffile[0]) / (tb.rfile[1] - tb.rfile[0]);
tb.fphi = (tb.ffile[tb.ninput - 1] - tb.ffile[tb.ninput - 2]) /
(tb.rfile[tb.ninput - 1] - tb.rfile[tb.ninput - 2]);
}
double fp0 = tb.fplo;
double fpn = tb.fphi;
spline(tb.rfile, tb.ffile, tb.ninput, fp0, fpn, tb.f2file);
}
/* ----------------------------------------------------------------------
compute r,e,f vectors from splined values
------------------------------------------------------------------------- */
void FixWallTable::compute_table(Table &tb)
{
// delta = table spacing for N-1 bins
int tlm1 = tablength - 1;
tb.delta = (tb.hi - tb.lo) / tlm1;
tb.invdelta = 1.0 / tb.delta;
tb.deltasq6 = tb.delta * tb.delta / 6.0;
// N-1 evenly spaced bins in r from min to max
// r,e,f = value at lower edge of bin
// de,df values = delta values of e,f
// r,e,f are N in length so de,df arrays can compute difference
memory->create(tb.r, tablength, "wall:r");
memory->create(tb.e, tablength, "wall:e");
memory->create(tb.de, tablength, "wall:de");
memory->create(tb.f, tablength, "wall:f");
memory->create(tb.df, tablength, "wall:df");
memory->create(tb.e2, tablength, "wall:e2");
memory->create(tb.f2, tablength, "wall:f2");
double a;
for (int i = 0; i < tablength; i++) {
a = tb.lo + i * tb.delta;
tb.r[i] = a;
tb.e[i] = splint(tb.rfile, tb.efile, tb.e2file, tb.ninput, a);
tb.f[i] = splint(tb.rfile, tb.ffile, tb.f2file, tb.ninput, a);
}
for (int i = 0; i < tlm1; i++) {
tb.de[i] = tb.e[i + 1] - tb.e[i];
tb.df[i] = tb.f[i + 1] - tb.f[i];
}
// get final elements from linear extrapolation
tb.de[tlm1] = 2.0 * tb.de[tlm1 - 1] - tb.de[tlm1 - 2];
tb.df[tlm1] = 2.0 * tb.df[tlm1 - 1] - tb.df[tlm1 - 2];
double ep0 = -tb.f[0];
double epn = -tb.f[tlm1];
spline(tb.r, tb.e, tablength, ep0, epn, tb.e2);
spline(tb.r, tb.f, tablength, tb.fplo, tb.fphi, tb.f2);
}
/* ----------------------------------------------------------------------
extract attributes from parameter line in table section
format of line: N value FP fplo fphi
N is required, other params are optional
------------------------------------------------------------------------- */
void FixWallTable::param_extract(Table &tb, char *line)
{
tb.ninput = 0;
tb.fpflag = 0;
try {
ValueTokenizer values(line);
while (values.has_next()) {
std::string word = values.next_string();
if (word == "N") {
tb.ninput = values.next_int();
} else if (word == "FP") {
tb.fpflag = 1;
tb.fplo = values.next_double();
tb.fphi = values.next_double();
} else {
error->one(FLERR, "Invalid keyword {} in fix {} table parameters", word, style);
}
}
} catch (TokenizerException &e) {
error->one(FLERR, e.what());
}
if (tb.ninput == 0) error->one(FLERR, "Fix {} parameters did not set N", style);
}
/* ----------------------------------------------------------------------
broadcast read-in table info from proc 0 to other procs
this function communicates these values in Table:
ninput,rfile,efile,ffile,fpflag,fplo,fphi
------------------------------------------------------------------------- */
void FixWallTable::bcast_table(Table &tb)
{
MPI_Bcast(&tb.ninput, 1, MPI_INT, 0, world);
if (comm->me > 0) {
memory->create(tb.rfile, tb.ninput, "wall:rfile");
memory->create(tb.efile, tb.ninput, "wall:efile");
memory->create(tb.ffile, tb.ninput, "wall:ffile");
}
MPI_Bcast(tb.rfile, tb.ninput, MPI_DOUBLE, 0, world);
MPI_Bcast(tb.efile, tb.ninput, MPI_DOUBLE, 0, world);
MPI_Bcast(tb.ffile, tb.ninput, MPI_DOUBLE, 0, world);
MPI_Bcast(&tb.fpflag, 1, MPI_INT, 0, world);
if (tb.fpflag) {
MPI_Bcast(&tb.fplo, 1, MPI_DOUBLE, 0, world);
MPI_Bcast(&tb.fphi, 1, MPI_DOUBLE, 0, world);
}
}
/* ----------------------------------------------------------------------
spline and splint routines modified from Numerical Recipes
------------------------------------------------------------------------- */
void FixWallTable::spline(double *x, double *y, int n, double yp1, double ypn, double *y2)
{
int i, k;
double p, qn, sig, un;
auto u = new double[n];
if (yp1 > BIGNUM)
y2[0] = u[0] = 0.0;
else {
y2[0] = -0.5;
u[0] = (3.0 / (x[1] - x[0])) * ((y[1] - y[0]) / (x[1] - x[0]) - yp1);
}
for (i = 1; i < n - 1; i++) {
sig = (x[i] - x[i - 1]) / (x[i + 1] - x[i - 1]);
p = sig * y2[i - 1] + 2.0;
y2[i] = (sig - 1.0) / p;
u[i] = (y[i + 1] - y[i]) / (x[i + 1] - x[i]) - (y[i] - y[i - 1]) / (x[i] - x[i - 1]);
u[i] = (6.0 * u[i] / (x[i + 1] - x[i - 1]) - sig * u[i - 1]) / p;
}
if (ypn > BIGNUM)
qn = un = 0.0;
else {
qn = 0.5;
un = (3.0 / (x[n - 1] - x[n - 2])) * (ypn - (y[n - 1] - y[n - 2]) / (x[n - 1] - x[n - 2]));
}
y2[n - 1] = (un - qn * u[n - 2]) / (qn * y2[n - 2] + 1.0);
for (k = n - 2; k >= 0; k--) y2[k] = y2[k] * y2[k + 1] + u[k];
delete[] u;
}
/* ---------------------------------------------------------------------- */
double FixWallTable::splint(double *xa, double *ya, double *y2a, int n, double x)
{
int klo, khi, k;
double h, b, a, y;
klo = 0;
khi = n - 1;
while (khi - klo > 1) {
k = (khi + klo) >> 1;
if (xa[k] > x)
khi = k;
else
klo = k;
}
h = xa[khi] - xa[klo];
a = (xa[khi] - x) / h;
b = (x - xa[klo]) / h;
y = a * ya[klo] + b * ya[khi] +
((a * a * a - a) * y2a[klo] + (b * b * b - b) * y2a[khi]) * (h * h) / 6.0;
return y;
}
/* ----------------------------------------------------------------------
calculate potential u and force f at distance x
ensure x is between wall min/max, exit with error if not
------------------------------------------------------------------------- */
void FixWallTable::uf_lookup(int m, double x, double &u, double &f)
{
double fraction, a, b;
const Table &tb = tables[m];
const int itable = static_cast<int>((x - tb.lo) * tb.invdelta);
if (itable < 0)
error->one(FLERR, "Particle / wall distance < table inner cutoff: {:.8}", x);
else if (itable >= tablength)
error->one(FLERR, "Particle / wall distance > table outer cutoff: {:.8}", x);
if (tabstyle == LINEAR) {
fraction = (x - tb.r[itable]) * tb.invdelta;
u = tb.e[itable] + fraction * tb.de[itable];
f = tb.f[itable] + fraction * tb.df[itable];
} else if (tabstyle == SPLINE) {
fraction = (x - tb.r[itable]) * tb.invdelta;
b = (x - tb.r[itable]) * tb.invdelta;
a = 1.0 - b;
u = a * tb.e[itable] + b * tb.e[itable + 1] +
((a * a * a - a) * tb.e2[itable] + (b * b * b - b) * tb.e2[itable + 1]) * tb.deltasq6;
f = a * tb.f[itable] + b * tb.f[itable + 1] +
((a * a * a - a) * tb.f2[itable] + (b * b * b - b) * tb.f2[itable + 1]) * tb.deltasq6;
}
}

67
src/fix_wall_table.h Normal file
View File

@ -0,0 +1,67 @@
/* -*- c++ -*- ----------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
LAMMPS development team: developers@lammps.org
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#ifdef FIX_CLASS
// clang-format off
FixStyle(wall/table,FixWallTable);
// clang-format on
#else
#ifndef LMP_FIX_WALL_TABLE_H
#define LMP_FIX_WALL_TABLE_H
#include "fix_wall.h"
namespace LAMMPS_NS {
class FixWallTable : public FixWall {
public:
FixWallTable(class LAMMPS *, int, char **);
~FixWallTable() override;
void post_constructor() override;
void precompute(int) override;
void wall_particle(int, int, double) override;
protected:
double offset[6];
int tabstyle, tablength;
struct Table {
int ninput, fpflag;
double fplo, fphi;
double lo, hi;
double *rfile, *efile, *ffile;
double *e2file, *f2file;
double delta, invdelta, deltasq6;
double *r, *e, *de, *f, *df, *e2, *f2;
};
Table *tables;
void null_table(Table &);
void free_table(Table &);
void read_table(Table &, const std::string &, const std::string &);
void bcast_table(Table &);
void spline_table(Table &);
void compute_table(Table &);
void param_extract(Table &, char *);
void spline(double *, double *, int, double, double, double *);
double splint(double *, double *, double *, int, double);
void uf_lookup(int, double, double &, double &);
};
} // namespace LAMMPS_NS
#endif
#endif

View File

@ -6,13 +6,14 @@ table, and angle style table
To create tables, you need to define your energy and - optionally -
force functions and then an instance of either the PairTabulate(),
BondTabulate(), AngleTabulate(), or DihedralTabulate() class from the
tabulate module and call its run() method to generate the table. Most
of the settings (number of points, minimum, maximum etc.) are provided
as command line flags. The run() method may be called multiple times to
generate multiple tables, for instance after changing parameters of the
energy/force functions. If the force function is not provided, the
force will be determined through numerical differentiation.
BondTabulate(), AngleTabulate(), DihedralTabulate(), or WallTabulate()
class from the tabulate module and call its run() method to generate the
table. Most of the settings (number of points, minimum, maximum etc.)
are provided as command line flags. The run() method may be called
multiple times to generate multiple tables, for instance after changing
parameters of the energy/force functions. If the force function is not
provided, the force will be determined from the energy function through
numerical differentiation.
Please see the individual tabulation scripts in this folder for examples:
@ -24,7 +25,8 @@ Please see the individual tabulation scripts in this folder for examples:
| angle_harmonic_tabulate.py | creates a table for a harmonic angle potential table |
| dihedral_harmonic_tabulate.py | creates a table for a harmonic dihedral potential table |
| pair_hybrid_tabulate.py | creates a Morse/Lennard-Jones hybrid potential table with smooth switching |
| pair_zbladd_tabulate.py | creates a table for hybrid/overlay to use ZBL repulsion with an EAM potential |
| wall_harmonic_tabulate.py | creates a table for fix wall/table with a simple repulsive harmonic potential |
| wall_multi_tabulate.py | creates a table for fix wall/table with multiple tables |
| ------------------------------|-------------------------------------------------------------------------------|
Common command line flags:

View File

@ -279,6 +279,53 @@ class DihedralTabulate(Tabulate):
if self.args.filename != '-':
self.fp.close()
################################################################################
# create tabulation for fix wall/table
class WallTabulate(Tabulate):
def __init__(self, efunc, ffunc=None, units=None, comment=None):
super(WallTabulate, self).__init__('wall', efunc, ffunc, units, comment)
self.parser.add_argument('--eshift', '-e', dest='eshift', default=False,
action='store_true',
help="Shift potential energy to be zero at outer cutoff")
idx = [a.dest for a in self.parser._actions].index('xmin')
self.parser._actions[idx].required=False
self.parser._actions[idx].default=0.0
try:
self.args = self.parser.parse_args()
except argparse.ArgumentError:
sys.exit()
def run(self, label):
# sanity checks
if self.args.num < 2:
self.helpexit('Expect 2 or more points in table for tabulation')
if self.args.xmin < 0.0:
self.helpexit('Inner cutoff must not be negative')
self.diff = self.args.diff
if not self.forcefunc:
self.diff = True
table, xzero = mktable(self.tstyle, label, self.args.num, self.args.xmin, self.args.xmax,
self.energyfunc, self.args.diff, self.forcefunc)
print("# Minimum energy of tabulated potential is at %g" % xzero)
offset = 0.0
if self.args.eshift:
offset=self.energyfunc(self.args.xmax)
self.openfile(label)
if self.forcefunc:
diffmin = -numdiff(self.args.xmin, self.forcefunc)
diffmax = -numdiff(self.args.xmax, self.forcefunc)
self.fp.write("N %d FP %- 22.15g %- 22.15g\n\n" % (self.args.num, diffmin, diffmax))
else:
self.fp.write("N %d\n\n" % (self.args.num))
self.writetable(table, offset)
if self.args.filename != '-':
self.fp.close()
################################################################################
if __name__ == "__main__":
sys.exit("The tabulate module is not meant to be executed directly")

View File

@ -0,0 +1,25 @@
#!/usr/bin/env python
from tabulate import WallTabulate
################################################################################
import math
k = 100.0
rzero = 4.0
def harmonic_force(r):
dr = r - rzero
f = -2.0 * k * dr
return f
def harmonic_energy(r):
dr = r - rzero
f = k * dr * dr
return f
################################################################################
if __name__ == "__main__":
wtable = WallTabulate(harmonic_energy, harmonic_force, units='real')
wtable.run('HARMONIC')

View File

@ -0,0 +1,64 @@
#!/usr/bin/env python
from tabulate import WallTabulate
import os, sys
################################################################################
import math
k = 100.0
rzero = 4.0
epsilon = 0.02
sigma = 2.0
depth = 20.0
width = 2.0
r0 = 1.2
def harmonic_force(r):
dr = r - rzero
f = -2.0 * k * dr
return f
def harmonic_energy(r):
dr = r - rzero
f = k * dr * dr
return f
def lj126_force(r):
f = -4.0*epsilon*(-12.0*math.pow(sigma/r,12.0)/r + 6.0*math.pow(sigma/r,6.0)/r)
return f
def lj126_energy(r):
f = 4.0*epsilon*(math.pow(sigma/r,12.0) - math.pow(sigma/r,6.0))
return f
def morse_energy(r):
ralpha = math.exp(-width*(r-r0))
f = depth * (-1.0 + (1.0 - ralpha) * (1.0 - ralpha))
return f
def morse_force(r):
ralpha = math.exp(-width*(r-r0))
f = -2.0 * depth * width * (1.0 -ralpha) * ralpha
return f
################################################################################
if __name__ == "__main__":
fname = 'walltab.dat'
if os.path.exists(fname):
os.remove(fname)
sys.argv.append('--filename')
sys.argv.append(fname)
sys.argv.append('--num-points')
sys.argv.append('400')
sys.argv.append('--inner')
sys.argv.append('0.01')
sys.argv.append('--outer')
sys.argv.append('4.0')
wtable = WallTabulate(harmonic_energy, harmonic_force, units='real')
wtable.run('HARMONIC')
wtable = WallTabulate(lj126_energy, lj126_force, units='real')
wtable.run('LJ126')
wtable = WallTabulate(morse_energy, morse_force, units='real')
wtable.run('MORSE')

View File

@ -0,0 +1,82 @@
---
lammps_version: 8 Feb 2023
date_generated: Thu Feb 23 00:40:51 2023
epsilon: 4e-14
skip_tests:
prerequisites: ! |
atom full
fix wall/lepton
pre_commands: ! |
boundary p f p
post_commands: ! |
fix move all nve
fix test solute wall/lepton ylo EDGE "k*(r-rc)^2;k=100.0" 5.0 yhi EDGE "k*(r-rc)^2;k=100.0" 5.0
fix_modify test virial yes
input_file: in.fourmol
natoms: 29
run_stress: ! |2-
0.0000000000000000e+00 -7.2422093200265749e+02 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00
global_scalar: 42.69977443532441
global_vector: ! |-
2 0 -161.92409617466126
run_pos: ! |2
1 -2.7051715090682593e-01 2.4891718422041942e+00 -1.6687343912524535e-01
2 3.1037661579862175e-01 2.9347166386691113e+00 -8.5496435221221156e-01
3 -7.0402515865264603e-01 1.2304739304383521e+00 -6.2777422080240730e-01
4 -1.5818156002522876e+00 1.4837443919066966e+00 -1.2538703954644463e+00
5 -9.0719963033698159e-01 9.2651871779341399e-01 3.9954137559444142e-01
6 2.4831695467823400e-01 2.8312974957866005e-01 -1.2314232372542311e+00
7 3.4143527599853957e-01 -2.2646552136496162e-02 -2.5292291409504188e+00
8 1.1743552256787158e+00 -4.8863229191571117e-01 -6.3783432834416876e-01
9 1.3800524227031346e+00 -2.5274721005121037e-01 2.8353985882456578e-01
10 2.0510765220197009e+00 -1.4604063740411815e+00 -9.8323745080488900e-01
11 1.7878031944407509e+00 -1.9921863272886073e+00 -1.8890602447598965e+00
12 3.0063007038317027e+00 -4.9013350489718083e-01 -1.6231898106978369e+00
13 4.0515402959160571e+00 -8.9202011606485665e-01 -1.6400005529914481e+00
14 2.6066963345462244e+00 -4.1789253964874307e-01 -2.6634003608727506e+00
15 2.9695287185264685e+00 5.5422613167055734e-01 -1.2342022021669503e+00
16 2.6747029695037297e+00 -2.4124119054292041e+00 -2.3435746152831470e-02
17 2.2153577785010934e+00 -2.0897985186506944e+00 1.1963150794337314e+00
18 2.1369701704267587e+00 3.0158507413153752e+00 -3.5179348337454122e+00
19 1.5355837136075348e+00 2.6255292355297897e+00 -4.2353987779858038e+00
20 2.7727573003201997e+00 3.6923910440705336e+00 -3.9330842459619779e+00
21 4.9040128073837339e+00 -4.0752348170758461e+00 -3.6210314709795299e+00
22 4.3582355554510048e+00 -4.2126119427061379e+00 -4.4612844196307497e+00
23 5.7439382849366911e+00 -3.5821957939240279e+00 -3.8766361295959513e+00
24 2.0689243582618388e+00 3.1513346906720905e+00 3.1550389755134005e+00
25 1.3045351331892774e+00 3.2665125705550957e+00 2.5111855258151388e+00
26 2.5809237402747862e+00 4.0117602605470681e+00 3.2212060529139430e+00
27 -1.9611343130344261e+00 -4.3563411931314180e+00 2.1098293115505782e+00
28 -2.7473562684511403e+00 -4.0200819932374339e+00 1.5830052163432258e+00
29 -1.3126000191357743e+00 -3.5962518039473323e+00 2.2746342468733483e+00
run_vel: ! |2
1 8.0432349631399738e-03 1.4401841389211066e-02 4.9594370365888983e-03
2 6.1330361195047721e-03 -2.0880295268721639e-02 -2.0467529305087918e-03
3 -8.3074380171099371e-03 -1.3074180712034015e-02 -4.0925567431707903e-03
4 -3.7694367867060264e-03 -6.5650784618522711e-03 -1.1170951231990144e-03
5 -1.1026343955717478e-02 -9.8958287307442973e-03 -2.8423479505575396e-03
6 -3.9677127674597606e-02 4.6816039080495052e-02 3.7148638820894170e-02
7 9.1033730239907995e-04 -1.0128528243740664e-02 -5.1568250829251872e-02
8 7.9064772413549398e-03 -3.3507427942055241e-03 3.4557101116794005e-02
9 1.5644169779778431e-03 3.7365552198096001e-03 1.5047408727814703e-02
10 2.9201446825927662e-02 -2.9249578944835361e-02 -1.5018077412006624e-02
11 -4.7835961594766378e-03 -3.7481385002840358e-03 -2.3464104088049835e-03
12 2.2696449755579846e-03 -3.4774139663753189e-04 -3.0640769495163746e-03
13 2.7531740375147718e-03 5.8171061651960147e-03 -7.9467453772151639e-04
14 3.5246182201851889e-03 -5.7939995452846414e-03 -3.9478431035191398e-03
15 -1.8547944555517633e-03 -5.8554729566882438e-03 6.2938485388423842e-03
16 1.8681499934669346e-02 -1.3262466149576239e-02 -4.5638651461858082e-02
17 -1.2896270037715950e-02 9.7527666092669853e-03 3.7296535331498307e-02
18 -8.0065791408039360e-04 -8.6270482947906296e-04 -1.4483041230016354e-03
19 1.2452390812060241e-03 -2.5061097279531195e-03 7.2998631045687393e-03
20 3.5930057934746205e-03 3.6938851526077724e-03 3.2322732077980833e-03
21 -1.4689219756964980e-03 -2.7352107824530941e-04 7.0581625180909957e-04
22 -7.0694199165145339e-03 -4.2577148692717511e-03 2.8079117911325202e-04
23 6.0446963236685169e-03 -1.4000131545098867e-03 2.5819754799379759e-03
24 3.1926371811980193e-04 -9.9445676110986579e-04 1.5000003249577114e-04
25 1.3789762510431792e-04 -4.4335895501596235e-03 -8.1808122106664959e-04
26 2.0485904106950169e-03 2.7813358601316649e-03 4.3245727251785661e-03
27 4.5604120562021738e-04 -1.0305522931717997e-03 2.1188058006115548e-04
28 -6.2544520854975905e-03 1.4127711193315927e-03 -1.8429821890767147e-03
29 6.4110631581209827e-04 3.1273432740202478e-03 3.7253671096581838e-03
...

View File

@ -1,6 +1,6 @@
---
lammps_version: 17 Feb 2022
date_generated: Fri Mar 18 22:18:01 2022
lammps_version: 8 Feb 2023
date_generated: Thu Feb 23 15:26:55 2023
epsilon: 4e-14
skip_tests:
prerequisites: ! |
@ -15,68 +15,68 @@ post_commands: ! |
input_file: in.fourmol
natoms: 29
run_stress: ! |2-
0.0000000000000000e+00 -1.6447328969000660e+03 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00
global_scalar: -715.4154062573953
0.0000000000000000e+00 -7.4088044731917480e+03 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00
global_scalar: -860.4604684981359
global_vector: ! |-
2 0 -362.76807567062644
2 0 -1661.6917920590186
run_pos: ! |2
1 -2.7045893790409276e-01 2.5008322800634093e+00 -1.6714018607090519e-01
2 3.0963184116147618e-01 3.0014595399936281e+00 -8.5430140686816214e-01
3 -7.0384894984747937e-01 1.2309015375308219e+00 -6.2768436035697617e-01
4 -1.5818176791640250e+00 1.4837231080448017e+00 -1.2538740983093204e+00
5 -9.0718849446796412e-01 9.2653164987898939e-01 3.9954632131545287e-01
6 2.4831839235845354e-01 2.8313265654301789e-01 -1.2314236357880461e+00
7 3.4143526822589915e-01 -2.2646538152574006e-02 -2.5292291434660381e+00
8 1.1743552107695057e+00 -4.8863225989226533e-01 -6.3783434531274807e-01
9 1.3800524241606595e+00 -2.5274721157120961e-01 2.8353985893838241e-01
10 2.0510765222277745e+00 -1.4604063739388657e+00 -9.8323745091734549e-01
11 1.7878031944633563e+00 -1.9921863273237430e+00 -1.8890602447741953e+00
12 3.0063007043413612e+00 -4.9013350523119031e-01 -1.6231898109107055e+00
13 4.0515402959324174e+00 -8.9202011607291531e-01 -1.6400005529969197e+00
14 2.6066963345867493e+00 -4.1789253967796969e-01 -2.6634003609064330e+00
15 2.9695287187403183e+00 5.5422613159536682e-01 -1.2342022022307726e+00
16 2.6747029696074671e+00 -2.4124119055741526e+00 -2.3435746141560052e-02
17 2.2153577786599099e+00 -2.0897985188852957e+00 1.1963150795174466e+00
18 2.1369701703250228e+00 3.0158507415756075e+00 -3.5179348336071414e+00
19 1.5355837136078994e+00 2.6255292355588757e+00 -4.2353987779851296e+00
20 2.7727573003071933e+00 3.6923910440783931e+00 -3.9330842459453148e+00
21 4.9040128073837348e+00 -4.0752348170758461e+00 -3.6210314709795308e+00
22 4.3582355554510048e+00 -4.2126119427061379e+00 -4.4612844196307497e+00
1 -2.7052284503817647e-01 2.5377015779332015e+00 -1.6774875378942034e-01
2 3.0838020114212900e-01 3.1365125714942814e+00 -8.5319486865475569e-01
3 -7.0337031356085378e-01 1.2321701278769190e+00 -6.2734420450713768e-01
4 -1.5818244447736622e+00 1.4836560550089251e+00 -1.2538854411390039e+00
5 -9.0715422690957381e-01 9.2657174436972001e-01 3.9956243697054195e-01
6 2.4832286843402734e-01 2.8314189926636496e-01 -1.2314248449469583e+00
7 3.4143523635211903e-01 -2.2646489955513913e-02 -2.5292291519080385e+00
8 1.1743551641371968e+00 -4.8863216431954298e-01 -6.3783440815706915e-01
9 1.3800524287137592e+00 -2.5274721633920649e-01 2.8353985915157709e-01
10 2.0510765228876604e+00 -1.4604063735798947e+00 -9.8323745129680751e-01
11 1.7878031945360704e+00 -1.9921863274327181e+00 -1.8890602448178007e+00
12 3.0063007058665141e+00 -4.9013350620738022e-01 -1.6231898115581911e+00
13 4.0515402959817353e+00 -8.9202011609685838e-01 -1.6400005530136157e+00
14 2.6066963347079004e+00 -4.1789253976309604e-01 -2.6634003610076054e+00
15 2.9695287193709681e+00 5.5422613138408361e-01 -1.2342022024260366e+00
16 2.6747029699261105e+00 -2.4124119060177067e+00 -2.3435746107727345e-02
17 2.2153577791583658e+00 -2.0897985196245372e+00 1.1963150797810624e+00
18 2.1369701700141044e+00 3.0158507424085670e+00 -3.5179348331855556e+00
19 1.5355837136077577e+00 2.6255292356409377e+00 -4.2353987779789071e+00
20 2.7727573002707873e+00 3.6923910441005812e+00 -3.9330842458985629e+00
21 4.9040128073837366e+00 -4.0752348170758461e+00 -3.6210314709795313e+00
22 4.3582355554510057e+00 -4.2126119427061379e+00 -4.4612844196307497e+00
23 5.7439382849366911e+00 -3.5821957939240279e+00 -3.8766361295959513e+00
24 2.0689243581498653e+00 3.1513346909599651e+00 3.1550389753492256e+00
25 1.3045351329547377e+00 3.2665125707112610e+00 2.5111855254067215e+00
26 2.5809237402542604e+00 4.0117602605530056e+00 3.2212060528871826e+00
27 -1.9611343130419832e+00 -4.3563411931577498e+00 2.1098293115609912e+00
28 -2.7473562684536628e+00 -4.0200819932434282e+00 1.5830052163452875e+00
29 -1.3126000191369560e+00 -3.5962518039526832e+00 2.2746342468757565e+00
24 2.0689243578022922e+00 3.1513346918494771e+00 3.1550389748497025e+00
25 1.3045351322134413e+00 3.2665125712054777e+00 2.5111855241267289e+00
26 2.5809237401898266e+00 4.0117602605713625e+00 3.2212060528040980e+00
27 -1.9611343130657364e+00 -4.3563411932404206e+00 2.1098293115936815e+00
28 -2.7473562684585944e+00 -4.0200819932554426e+00 1.5830052163493729e+00
29 -1.3126000191406215e+00 -3.5962518039692939e+00 2.2746342468831999e+00
run_vel: ! |2
1 8.1789148947012790e-03 2.6011139448739451e-02 4.4419168461127482e-03
2 4.6260716342741079e-03 4.5085766258259774e-02 -7.0825186386967308e-04
3 -7.9721954985889319e-03 -1.2268783977531032e-02 -3.9361845956729386e-03
4 -3.7725559552080636e-03 -6.6074130975376346e-03 -1.1239964478779332e-03
5 -1.1002605235858455e-02 -9.8680015994752728e-03 -2.8327888280266942e-03
6 -3.9674547907414821e-02 4.6822592792817204e-02 3.7148318739351066e-02
7 9.1031746047128470e-04 -1.0128481892033168e-02 -5.1568253048218646e-02
8 7.9064457287878788e-03 -3.3506582863990068e-03 3.4557045247921400e-02
9 1.5644208034781776e-03 3.7365512668284797e-03 1.5047408581112285e-02
10 2.9201446942760539e-02 -2.9249577856792598e-02 -1.5018077696249433e-02
11 -4.7835960986765723e-03 -3.7481385797508478e-03 -2.3464104367979396e-03
12 2.2696460154049596e-03 -3.4774207770823769e-04 -3.0640773817331617e-03
13 2.7531740760828424e-03 5.8171061464595821e-03 -7.9467455065097717e-04
14 3.5246183046552903e-03 -5.7939996060507011e-03 -3.9478431727489067e-03
15 -1.8547940192371359e-03 -5.8554731130000919e-03 6.2938484079631211e-03
16 1.8681500141579217e-02 -1.3262466439236464e-02 -4.5638651434422119e-02
17 -1.2896269711984213e-02 9.7527661294105131e-03 3.7296535503389051e-02
18 -8.0065813058176056e-04 -8.6270429918499042e-04 -1.4483038312432231e-03
19 1.2452390823893668e-03 -2.5061096678311726e-03 7.2998631081901150e-03
20 3.5930057672106052e-03 3.6938851692874418e-03 3.2322732421069351e-03
21 -1.4689219756942099e-03 -2.7352107824552571e-04 7.0581625180796419e-04
22 -7.0694199165143787e-03 -4.2577148692717762e-03 2.8079117911313845e-04
23 6.0446963236686149e-03 -1.4000131545098178e-03 2.5819754799379282e-03
24 3.1926349353317952e-04 -9.9445617038915342e-04 1.4999970019575790e-04
25 1.3789715718110098e-04 -4.4335892217948255e-03 -8.1808204442383866e-04
26 2.0485903705729164e-03 2.7813358762743667e-03 4.3245726703719217e-03
27 4.5604119012943235e-04 -1.0305523473710114e-03 2.1188060159221209e-04
28 -6.2544520902254328e-03 1.4127711077263102e-03 -1.8429821850450522e-03
29 6.4110631319827462e-04 3.1273432626741622e-03 3.7253671146110553e-03
1 8.1150399525879938e-03 6.2469278935841172e-02 3.3151656604757515e-03
2 2.1567380411534119e-03 1.7915358216757693e-01 1.4693442192945936e-03
3 -7.1017845324814833e-03 -9.9511431531007291e-03 -3.3513817570289613e-03
4 -3.7830796561061893e-03 -6.7399523607674736e-03 -1.1446225458905915e-03
5 -1.0930964471138178e-02 -9.7830218971492900e-03 -2.8011654927760140e-03
6 -3.9666631417159662e-02 4.6843374202377414e-02 3.7147439358181544e-02
7 9.1023281310935661e-04 -1.0128325648562678e-02 -5.1568260731589974e-02
8 7.9063456532381289e-03 -3.3504119308433618e-03 3.4556841455369552e-02
9 1.5644327139035345e-03 3.7365387627339643e-03 1.5047407499366916e-02
10 2.9201447428873879e-02 -2.9249574477797566e-02 -1.5018078715987209e-02
11 -4.7835958975253005e-03 -3.7481388302490464e-03 -2.3464105205019963e-03
12 2.2696491096390347e-03 -3.4774406295422266e-04 -3.0640786872695716e-03
13 2.7531741917975823e-03 5.8171060908898987e-03 -7.9467458985718424e-04
14 3.5246185557631796e-03 -5.7939997826183271e-03 -3.9478433795418670e-03
15 -1.8547927399342281e-03 -5.8554735533316513e-03 6.2938480095073527e-03
16 1.8681500769926061e-02 -1.3262467318026393e-02 -4.5638651349980318e-02
17 -1.2896268698689695e-02 9.7527646273574461e-03 3.7296536040864851e-02
18 -8.0065877706055109e-04 -8.6270259764277839e-04 -1.4483029635571510e-03
19 1.2452390851199488e-03 -2.5061094984920639e-03 7.2998631241499162e-03
20 3.5930056948307956e-03 3.6938852174526323e-03 3.2322733371807980e-03
21 -1.4689219756868180e-03 -2.7352107824634250e-04 7.0581625180429135e-04
22 -7.0694199165138548e-03 -4.2577148692718603e-03 2.8079117911282870e-04
23 6.0446963236688717e-03 -1.4000131545096391e-03 2.5819754799378150e-03
24 3.1926280192234435e-04 -9.9445434351455022e-04 1.4999870519578711e-04
25 1.3789568252928821e-04 -4.4335881727435517e-03 -8.1808460956663540e-04
26 2.0485902447450752e-03 2.7813359267364313e-03 4.3245725007170490e-03
27 4.5604114182182037e-04 -1.0305525160278991e-03 2.1188066858079724e-04
28 -6.2544520979275183e-03 1.4127710874880792e-03 -1.8429821780491747e-03
29 6.4110630514945563e-04 3.1273432277213126e-03 3.7253671297833627e-03
...

View File

@ -0,0 +1,82 @@
---
lammps_version: 8 Feb 2023
date_generated: Thu Feb 23 00:56:30 2023
epsilon: 4e-14
skip_tests:
prerequisites: ! |
atom full
fix wall/table
pre_commands: ! |
boundary p f p
post_commands: ! |
fix move all nve
fix test solute wall/table linear 2000 ylo EDGE ${input_dir}/wall.table HARMONIC 4.0 yhi EDGE ${input_dir}/wall.table HARMONIC 4.0
fix_modify test virial yes
input_file: in.fourmol
natoms: 29
run_stress: ! |2-
0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00
global_scalar: 0
global_vector: ! |-
2 0 0
run_pos: ! |2
1 -2.7045559775384032e-01 2.4912159905679729e+00 -1.6695851791541888e-01
2 3.1004029573899528e-01 2.9612354631094391e+00 -8.5466363037021464e-01
3 -7.0398551400789477e-01 1.2305509955830618e+00 -6.2777526944456274e-01
4 -1.5818159336499285e+00 1.4837407818929933e+00 -1.2538710836062004e+00
5 -9.0719763672789266e-01 9.2652103885675297e-01 3.9954210488374786e-01
6 2.4831720524855985e-01 2.8313021497871271e-01 -1.2314233331711453e+00
7 3.4143527641386412e-01 -2.2646551041391422e-02 -2.5292291414903052e+00
8 1.1743552229100009e+00 -4.8863228565853950e-01 -6.3783432910825522e-01
9 1.3800524229500313e+00 -2.5274721030406683e-01 2.8353985887095157e-01
10 2.0510765220543883e+00 -1.4604063740302866e+00 -9.8323745081712954e-01
11 1.7878031944442556e+00 -1.9921863272948861e+00 -1.8890602447625777e+00
12 3.0063007039340053e+00 -4.9013350496963298e-01 -1.6231898107386231e+00
13 4.0515402959192999e+00 -8.9202011606653986e-01 -1.6400005529924957e+00
14 2.6066963345543819e+00 -4.1789253965514156e-01 -2.6634003608794394e+00
15 2.9695287185712913e+00 5.5422613165234025e-01 -1.2342022021790127e+00
16 2.6747029695228521e+00 -2.4124119054564295e+00 -2.3435746150616152e-02
17 2.2153577785283796e+00 -2.0897985186907717e+00 1.1963150794479436e+00
18 2.1369701704080528e+00 3.0158507413593689e+00 -3.5179348337197793e+00
19 1.5355837136080202e+00 2.6255292355367410e+00 -4.2353987779869007e+00
20 2.7727573003170809e+00 3.6923910440725227e+00 -3.9330842459580020e+00
21 4.9040128073837339e+00 -4.0752348170758461e+00 -3.6210314709795299e+00
22 4.3582355554510048e+00 -4.2126119427061379e+00 -4.4612844196307497e+00
23 5.7439382849366911e+00 -3.5821957939240279e+00 -3.8766361295959513e+00
24 2.0689243582422630e+00 3.1513346907271012e+00 3.1550389754828800e+00
25 1.3045351331492134e+00 3.2665125705842848e+00 2.5111855257433504e+00
26 2.5809237402711274e+00 4.0117602605482832e+00 3.2212060529089896e+00
27 -1.9611343130357228e+00 -4.3563411931359752e+00 2.1098293115523705e+00
28 -2.7473562684513411e+00 -4.0200819932379330e+00 1.5830052163433954e+00
29 -1.3126000191359855e+00 -3.5962518039482929e+00 2.2746342468737835e+00
run_vel: ! |2
1 8.1705744183262381e-03 1.6516406176274288e-02 4.7902264318912917e-03
2 5.4501493445687802e-03 5.1791699408496412e-03 -1.4372931530376625e-03
3 -8.2298292722385660e-03 -1.2926551614621376e-02 -4.0984181178163838e-03
4 -3.7699042590093549e-03 -6.5722892098813894e-03 -1.1184640360133316e-03
5 -1.1021961004346581e-02 -9.8906780939336057e-03 -2.8410737829284403e-03
6 -3.9676663166400034e-02 4.6817061464710256e-02 3.7148491979476124e-02
7 9.1033953013898666e-04 -1.0128524411938794e-02 -5.1568251805019748e-02
8 7.9064712058855742e-03 -3.3507254552631780e-03 3.4557098492564629e-02
9 1.5644176117320923e-03 3.7365546102722164e-03 1.5047408822037646e-02
10 2.9201446820573192e-02 -2.9249578745486147e-02 -1.5018077424322544e-02
11 -4.7835961513517542e-03 -3.7481385134185211e-03 -2.3464104142290089e-03
12 2.2696451841920681e-03 -3.4774154398130373e-04 -3.0640770327796979e-03
13 2.7531740451953164e-03 5.8171061612840502e-03 -7.9467454022160680e-04
14 3.5246182371994213e-03 -5.7939995585585529e-03 -3.9478431172751361e-03
15 -1.8547943640122950e-03 -5.8554729942777795e-03 6.2938485140538675e-03
16 1.8681499973445252e-02 -1.3262466204585334e-02 -4.5638651457003250e-02
17 -1.2896269981100378e-02 9.7527665265956451e-03 3.7296535360836762e-02
18 -8.0065795562956103e-04 -8.6270473963802124e-04 -1.4483040662692239e-03
19 1.2452390821512348e-03 -2.5061097135903924e-03 7.2998631029991060e-03
20 3.5930057870507443e-03 3.6938851567332597e-03 3.2322732161078646e-03
21 -1.4689219756961610e-03 -2.7352107824530291e-04 7.0581625180892197e-04
22 -7.0694199165145105e-03 -4.2577148692717545e-03 2.8079117911323598e-04
23 6.0446963236685230e-03 -1.4000131545098772e-03 2.5819754799379716e-03
24 3.1926367902287880e-04 -9.9445664749276221e-04 1.4999996959365317e-04
25 1.3789754514814532e-04 -4.4335894884532673e-03 -8.1808136725080173e-04
26 2.0485904035217588e-03 2.7813358633835962e-03 4.3245727149206761e-03
27 4.5604120293369840e-04 -1.0305523026921111e-03 2.1188058381358413e-04
28 -6.2544520861855151e-03 1.4127711176146879e-03 -1.8429821884794260e-03
29 6.4110631534402174e-04 3.1273432719593824e-03 3.7253671105656736e-03
...

View File

@ -0,0 +1,82 @@
---
lammps_version: 8 Feb 2023
date_generated: Thu Feb 23 00:56:30 2023
epsilon: 4e-14
skip_tests:
prerequisites: ! |
atom full
fix wall/table
pre_commands: ! |
boundary p f p
post_commands: ! |
fix move all nve
fix test solute wall/table spline 200 ylo EDGE ${input_dir}/wall.table HARMONIC 4.0 yhi EDGE ${input_dir}/wall.table HARMONIC 4.0
fix_modify test virial yes
input_file: in.fourmol
natoms: 29
run_stress: ! |2-
0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00
global_scalar: 0
global_vector: ! |-
2 0 0
run_pos: ! |2
1 -2.7045559775384032e-01 2.4912159905679729e+00 -1.6695851791541888e-01
2 3.1004029573899528e-01 2.9612354631094391e+00 -8.5466363037021464e-01
3 -7.0398551400789477e-01 1.2305509955830618e+00 -6.2777526944456274e-01
4 -1.5818159336499285e+00 1.4837407818929933e+00 -1.2538710836062004e+00
5 -9.0719763672789266e-01 9.2652103885675297e-01 3.9954210488374786e-01
6 2.4831720524855985e-01 2.8313021497871271e-01 -1.2314233331711453e+00
7 3.4143527641386412e-01 -2.2646551041391422e-02 -2.5292291414903052e+00
8 1.1743552229100009e+00 -4.8863228565853950e-01 -6.3783432910825522e-01
9 1.3800524229500313e+00 -2.5274721030406683e-01 2.8353985887095157e-01
10 2.0510765220543883e+00 -1.4604063740302866e+00 -9.8323745081712954e-01
11 1.7878031944442556e+00 -1.9921863272948861e+00 -1.8890602447625777e+00
12 3.0063007039340053e+00 -4.9013350496963298e-01 -1.6231898107386231e+00
13 4.0515402959192999e+00 -8.9202011606653986e-01 -1.6400005529924957e+00
14 2.6066963345543819e+00 -4.1789253965514156e-01 -2.6634003608794394e+00
15 2.9695287185712913e+00 5.5422613165234025e-01 -1.2342022021790127e+00
16 2.6747029695228521e+00 -2.4124119054564295e+00 -2.3435746150616152e-02
17 2.2153577785283796e+00 -2.0897985186907717e+00 1.1963150794479436e+00
18 2.1369701704080528e+00 3.0158507413593689e+00 -3.5179348337197793e+00
19 1.5355837136080202e+00 2.6255292355367410e+00 -4.2353987779869007e+00
20 2.7727573003170809e+00 3.6923910440725227e+00 -3.9330842459580020e+00
21 4.9040128073837339e+00 -4.0752348170758461e+00 -3.6210314709795299e+00
22 4.3582355554510048e+00 -4.2126119427061379e+00 -4.4612844196307497e+00
23 5.7439382849366911e+00 -3.5821957939240279e+00 -3.8766361295959513e+00
24 2.0689243582422630e+00 3.1513346907271012e+00 3.1550389754828800e+00
25 1.3045351331492134e+00 3.2665125705842848e+00 2.5111855257433504e+00
26 2.5809237402711274e+00 4.0117602605482832e+00 3.2212060529089896e+00
27 -1.9611343130357228e+00 -4.3563411931359752e+00 2.1098293115523705e+00
28 -2.7473562684513411e+00 -4.0200819932379330e+00 1.5830052163433954e+00
29 -1.3126000191359855e+00 -3.5962518039482929e+00 2.2746342468737835e+00
run_vel: ! |2
1 8.1705744183262381e-03 1.6516406176274288e-02 4.7902264318912917e-03
2 5.4501493445687802e-03 5.1791699408496412e-03 -1.4372931530376625e-03
3 -8.2298292722385660e-03 -1.2926551614621376e-02 -4.0984181178163838e-03
4 -3.7699042590093549e-03 -6.5722892098813894e-03 -1.1184640360133316e-03
5 -1.1021961004346581e-02 -9.8906780939336057e-03 -2.8410737829284403e-03
6 -3.9676663166400034e-02 4.6817061464710256e-02 3.7148491979476124e-02
7 9.1033953013898666e-04 -1.0128524411938794e-02 -5.1568251805019748e-02
8 7.9064712058855742e-03 -3.3507254552631780e-03 3.4557098492564629e-02
9 1.5644176117320923e-03 3.7365546102722164e-03 1.5047408822037646e-02
10 2.9201446820573192e-02 -2.9249578745486147e-02 -1.5018077424322544e-02
11 -4.7835961513517542e-03 -3.7481385134185211e-03 -2.3464104142290089e-03
12 2.2696451841920681e-03 -3.4774154398130373e-04 -3.0640770327796979e-03
13 2.7531740451953164e-03 5.8171061612840502e-03 -7.9467454022160680e-04
14 3.5246182371994213e-03 -5.7939995585585529e-03 -3.9478431172751361e-03
15 -1.8547943640122950e-03 -5.8554729942777795e-03 6.2938485140538675e-03
16 1.8681499973445252e-02 -1.3262466204585334e-02 -4.5638651457003250e-02
17 -1.2896269981100378e-02 9.7527665265956451e-03 3.7296535360836762e-02
18 -8.0065795562956103e-04 -8.6270473963802124e-04 -1.4483040662692239e-03
19 1.2452390821512348e-03 -2.5061097135903924e-03 7.2998631029991060e-03
20 3.5930057870507443e-03 3.6938851567332597e-03 3.2322732161078646e-03
21 -1.4689219756961610e-03 -2.7352107824530291e-04 7.0581625180892197e-04
22 -7.0694199165145105e-03 -4.2577148692717545e-03 2.8079117911323598e-04
23 6.0446963236685230e-03 -1.4000131545098772e-03 2.5819754799379716e-03
24 3.1926367902287880e-04 -9.9445664749276221e-04 1.4999996959365317e-04
25 1.3789754514814532e-04 -4.4335894884532673e-03 -8.1808136725080173e-04
26 2.0485904035217588e-03 2.7813358633835962e-03 4.3245727149206761e-03
27 4.5604120293369840e-04 -1.0305523026921111e-03 2.1188058381358413e-04
28 -6.2544520861855151e-03 1.4127711176146879e-03 -1.8429821884794260e-03
29 6.4110631534402174e-04 3.1273432719593824e-03 3.7253671105656736e-03
...

View File

@ -0,0 +1,204 @@
# DATE: 2023-02-23 UNITS: real
HARMONIC
N 200 FP 200.000000006796 200.000000002102
1 0.02 1584.04 796
2 0.04 1568.16 792
3 0.06 1552.36 788
4 0.08 1536.64 784
5 0.1 1521 780
6 0.12 1505.44 776
7 0.14 1489.96 772
8 0.16 1474.56 768
9 0.18 1459.24 764
10 0.2 1444 760
11 0.22 1428.84 756
12 0.24 1413.76 752
13 0.26 1398.76 748
14 0.28 1383.84 744
15 0.3 1369 740
16 0.32 1354.24 736
17 0.34 1339.56 732
18 0.36 1324.96 728
19 0.38 1310.44 724
20 0.4 1296 720
21 0.42 1281.64 716
22 0.44 1267.36 712
23 0.46 1253.16 708
24 0.48 1239.04 704
25 0.5 1225 700
26 0.52 1211.04 696
27 0.54 1197.16 692
28 0.56 1183.36 688
29 0.58 1169.64 684
30 0.6 1156 680
31 0.62 1142.44 676
32 0.64 1128.96 672
33 0.66 1115.56 668
34 0.68 1102.24 664
35 0.7 1089 660
36 0.72 1075.84 656
37 0.74 1062.76 652
38 0.76 1049.76 648
39 0.78 1036.84 644
40 0.8 1024 640
41 0.82 1011.24 636
42 0.84 998.56 632
43 0.86 985.96 628
44 0.88 973.44 624
45 0.9 961 620
46 0.92 948.64 616
47 0.94 936.36 612
48 0.96 924.16 608
49 0.98 912.04 604
50 1 900 600
51 1.02 888.04 596
52 1.04 876.16 592
53 1.06 864.36 588
54 1.08 852.64 584
55 1.1 841 580
56 1.12 829.44 576
57 1.14 817.96 572
58 1.16 806.56 568
59 1.18 795.24 564
60 1.2 784 560
61 1.22 772.84 556
62 1.24 761.76 552
63 1.26 750.76 548
64 1.28 739.84 544
65 1.3 729 540
66 1.32 718.24 536
67 1.34 707.56 532
68 1.36 696.96 528
69 1.38 686.44 524
70 1.4 676 520
71 1.42 665.64 516
72 1.44 655.36 512
73 1.46 645.16 508
74 1.48 635.04 504
75 1.5 625 500
76 1.52 615.04 496
77 1.54 605.16 492
78 1.56 595.36 488
79 1.58 585.64 484
80 1.6 576 480
81 1.62 566.44 476
82 1.64 556.96 472
83 1.66 547.56 468
84 1.68 538.24 464
85 1.7 529 460
86 1.72 519.84 456
87 1.74 510.76 452
88 1.76 501.76 448
89 1.78 492.84 444
90 1.8 484 440
91 1.82 475.24 436
92 1.84 466.56 432
93 1.86 457.96 428
94 1.88 449.44 424
95 1.9 441 420
96 1.92 432.64 416
97 1.94 424.36 412
98 1.96 416.16 408
99 1.98 408.04 404
100 2 400 400
101 2.02 392.04 396
102 2.04 384.16 392
103 2.06 376.36 388
104 2.08 368.64 384
105 2.1 361 380
106 2.12 353.44 376
107 2.14 345.96 372
108 2.16 338.56 368
109 2.18 331.24 364
110 2.2 324 360
111 2.22 316.84 356
112 2.24 309.76 352
113 2.26 302.76 348
114 2.28 295.84 344
115 2.3 289 340
116 2.32 282.24 336
117 2.34 275.56 332
118 2.36 268.96 328
119 2.38 262.44 324
120 2.4 256 320
121 2.42 249.64 316
122 2.44 243.36 312
123 2.46 237.16 308
124 2.48 231.04 304
125 2.5 225 300
126 2.52 219.04 296
127 2.54 213.16 292
128 2.56 207.36 288
129 2.58 201.64 284
130 2.6 196 280
131 2.62 190.44 276
132 2.64 184.96 272
133 2.66 179.56 268
134 2.68 174.24 264
135 2.7 169 260
136 2.72 163.84 256
137 2.74 158.76 252
138 2.76 153.76 248
139 2.78 148.84 244
140 2.8 144 240
141 2.82 139.24 236
142 2.84 134.56 232
143 2.86 129.96 228
144 2.88 125.44 224
145 2.9 121 220
146 2.92 116.64 216
147 2.94 112.36 212
148 2.96 108.16 208
149 2.98 104.04 204
150 3 100 200
151 3.02 96.04 196
152 3.04 92.16 192
153 3.06 88.36 188
154 3.08 84.64 184
155 3.1 81 180
156 3.12 77.44 176
157 3.14 73.96 172
158 3.16 70.56 168
159 3.18 67.24 164
160 3.2 64 160
161 3.22 60.84 156
162 3.24 57.76 152
163 3.26 54.76 148
164 3.28 51.84 144
165 3.3 49 140
166 3.32 46.24 136
167 3.34 43.56 132
168 3.36 40.96 128
169 3.38 38.44 124
170 3.4 36 120
171 3.42 33.64 116
172 3.44 31.36 112
173 3.46 29.16 108
174 3.48 27.04 104
175 3.5 25 100
176 3.52 23.04 96
177 3.54 21.16 92
178 3.56 19.36 88
179 3.58 17.64 84
180 3.6 16 80
181 3.62 14.44 76
182 3.64 12.96 72
183 3.66 11.56 68
184 3.68 10.24 64
185 3.7 8.99999999999999 60
186 3.72 7.83999999999999 56
187 3.74 6.75999999999999 52
188 3.76 5.75999999999999 48
189 3.78 4.83999999999999 44
190 3.8 3.99999999999999 39.9999999999999
191 3.82 3.23999999999999 35.9999999999999
192 3.84 2.55999999999999 31.9999999999999
193 3.86 1.96 28
194 3.88 1.44 24
195 3.9 1 20
196 3.92 0.640000000000001 16
197 3.94 0.360000000000001 12
198 3.96 0.16 8.00000000000001
199 3.98 0.0400000000000001 4
200 4 0 -0