Merge branch 'develop' into avoid-bigint-format-scanf

This commit is contained in:
Axel Kohlmeyer
2022-04-08 17:39:25 -04:00
72 changed files with 10564 additions and 1526 deletions

View File

@ -347,6 +347,10 @@ elseif(GPU_API STREQUAL "HIP")
target_link_libraries(gpu PRIVATE hip::host)
if(HIP_USE_DEVICE_SORT)
if(HIP_PLATFORM STREQUAL "amd")
# newer version of ROCm (5.1+) require c++14 for rocprim
set_property(TARGET gpu PROPERTY CXX_STANDARD 14)
endif()
# add hipCUB
target_include_directories(gpu PRIVATE ${HIP_ROOT_DIR}/../include)
target_compile_definitions(gpu PRIVATE -DUSE_HIP_DEVICE_SORT)

View File

@ -0,0 +1,15 @@
# preset that enables KOKKOS and selects SYCL compilation with OpenMP
# enabled as well. Also sets some performance related compiler flags.
set(PKG_KOKKOS ON CACHE BOOL "" FORCE)
set(Kokkos_ENABLE_SERIAL ON CACHE BOOL "" FORCE)
set(Kokkos_ENABLE_OPENMP ON CACHE BOOL "" FORCE)
set(Kokkos_ENABLE_CUDA OFF CACHE BOOL "" FORCE)
set(Kokkos_ENABLE_SYCL ON CACHE BOOL "" FORCE)
set(Kokkos_ARCH_MAXWELL50 on CACHE BOOL "" FORCE)
set(BUILD_OMP ON CACHE BOOL "" FORCE)
set(CMAKE_CXX_COMPILER clang++ CACHE STRING "" FORCE)
set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE)
set(CMAKE_CXX_STANDARD 17 CACHE STRING "" FORCE)
set(CMAKE_SHARED_LINKER_FLAGS "-Xsycl-target-frontend -O3" CACHE STRING "" FORCE)
set(CMAKE_TUNE_FLAGS "-fgpu-inline-threshold=100000 -Xsycl-target-frontend -O3 -Xsycl-target-frontend -ffp-contract=on -Wno-unknown-cuda-version" CACHE STRING "" FORCE)

View File

@ -638,13 +638,14 @@ This list was last updated for version 3.5.0 of the Kokkos library.
-D CMAKE_CXX_COMPILER=${HOME}/lammps/lib/kokkos/bin/nvcc_wrapper
To simplify compilation, three preset files are included in the
To simplify compilation, four preset files are included in the
``cmake/presets`` folder, ``kokkos-serial.cmake``,
``kokkos-openmp.cmake``, and ``kokkos-cuda.cmake``. They will
enable the KOKKOS package and enable some hardware choice. So to
compile with OpenMP host parallelization, CUDA device
parallelization (for GPUs with CC 5.0 and up) with some common
packages enabled, you can do the following:
``kokkos-openmp.cmake``, ``kokkos-cuda.cmake``, and
``kokkos-sycl.cmake``. They will enable the KOKKOS package and
enable some hardware choice. So to compile with OpenMP host
parallelization, CUDA device parallelization (for GPUs with CC 5.0
and up) with some common packages enabled, you can do the
following:
.. code-block:: bash

View File

@ -63,6 +63,7 @@ KOKKOS, o = OPENMP, t = OPT.
* :doc:`event/displace <compute_event_displace>`
* :doc:`fabric <compute_fabric>`
* :doc:`fep <compute_fep>`
* :doc:`fep/ta <compute_fep_ta>`
* :doc:`force/tally <compute_tally>`
* :doc:`fragment/atom <compute_cluster_atom>`
* :doc:`global/atom <compute_global_atom>`

View File

@ -79,6 +79,10 @@ This data can be extracted and parsed from a log file using python with:
.. code-block:: python
import re, yaml
try:
from yaml import CSafeLoader as Loader, CSafeDumper as Dumper
except ImportError:
from yaml import SafeLoader as Loader, SafeDumper as Dumper
docs = ""
with open("log.lammps") as f:
@ -86,7 +90,7 @@ This data can be extracted and parsed from a log file using python with:
m = re.search(r"^(keywords:.*$|data:$|---$|\.\.\.$| - \[.*\]$)", line)
if m: docs += m.group(0) + '\n'
thermo = list(yaml.load_all(docs, Loader=yaml.SafeLoader))
thermo = list(yaml.load_all(docs, Loader=Loader))
print("Number of runs: ", len(thermo))
print(thermo[1]['keywords'][4], ' = ', thermo[1]['data'][2][4])

View File

@ -208,7 +208,8 @@ The individual style names on the :doc:`Commands compute <Commands_compute>` pag
* :doc:`erotate/sphere/atom <compute_erotate_sphere_atom>` - rotational energy for each spherical particle
* :doc:`event/displace <compute_event_displace>` - detect event on atom displacement
* :doc:`fabric <compute_fabric>` - calculates fabric tensors from pair interactions
* :doc:`fep <compute_fep>` -
* :doc:`fep <compute_fep>` - compute free energies for alchemical transformation from perturbation theory
* :doc:`fep/ta <compute_fep_ta>` - compute free energies for a test area perturbation
* :doc:`force/tally <compute_tally>` - force between two groups of atoms via the tally callback mechanism
* :doc:`fragment/atom <compute_cluster_atom>` - fragment ID for each atom
* :doc:`global/atom <compute_global_atom>` -

View File

@ -0,0 +1,99 @@
.. index:: compute fep/ta
compute fep/ta command
======================
Syntax
""""""
.. parsed-literal::
compute ID group-ID fep/ta temp plane scale_factor keyword value ...
* ID, group-ID are documented in the :doc:`compute <compute>` command
* fep/ta = name of this compute command
* temp = external temperature (as specified for constant-temperature run)
* plane = *xy* or *xz* or *yz*
* scale_factor = multiplicative factor for change in plane area
* zero or more keyword/value pairs may be appended
* keyword = *tail*
.. parsed-literal::
*tail* value = *no* or *yes*
*no* = ignore tail correction to pair energies (usually small in fep)
*yes* = include tail correction to pair energies
Examples
""""""""
.. code-block:: LAMMPS
compute 1 all fep/ta 298 xy 1.0005
Description
"""""""""""
Define a computation that calculates the change in the free energy due
to a test-area (TA) perturbation :ref:`(Gloor) <Gloor>`. The test-area
approach can be used to determine the interfacial tension of the system
in a single simulation:
.. math::
\gamma = \lim_{\Delta \mathcal{A} \to 0} \left( \frac{\Delta A_{0 \to 1 }}{\Delta \mathcal{A}}\right)_{N,V,T}
= - \frac{kT}{\Delta \mathcal{A}} \ln \left< \exp(-(U_1 - U_0)/kT) \right>_0
During the perturbation, both axes of *plane* are scaled by multiplying
:math:`\sqrt{scale\_factor}`, while the other axis divided by
*scale_factor* such that the overall volume of the system is maintained.
The *tail* keyword controls the calculation of the tail correction to
"van der Waals" pair energies beyond the cutoff, if this has been
activated via the :doc:`pair_modify <pair_modify>` command. If the
perturbation is small, the tail contribution to the energy difference
between the reference and perturbed systems should be negligible.
----------
Output info
"""""""""""
This compute calculates a global vector of length 3 which contains the
energy difference ( :math:`U_1-U_0` ) as c_ID[1], the Boltzmann factor
:math:`\exp(-(U_1-U_0)/kT)`, as c_ID[2] and the change in the *plane*
area :math:`\Delta \mathcal{A}` as c_ID[3]. :math:`U_1` is the potential
energy of the perturbed state and :math:`U_0` is the potential energy of
the reference state. The energies include kspace terms if these are
used in the simulation.
These output results can be used by any command that uses a global
scalar or vector from a compute as input. See the :doc:`Howto output
<Howto_output>` page for an overview of LAMMPS output options. For
example, the computed values can be averaged using :doc:`fix ave/time
<fix_ave_time>`.
Restrictions
""""""""""""
Constraints, like fix shake, may lead to incorrect values for energy difference.
This compute is distributed as the FEP 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:`compute fep <compute_fep>`
Default
"""""""
The option defaults are *tail* = *no*\ .
----------
.. _Gloor:
**(Gloor)** Gloor, J Chem Phys, 123, 134703 (2005)

View File

@ -75,10 +75,11 @@ solids undergoing thermal motion.
.. note::
Initial coordinates are stored in "unwrapped" form, by using the
image flags associated with each atom. See the :doc:`dump custom <dump>` command for a discussion of "unwrapped" coordinates.
See the Atoms section of the :doc:`read_data <read_data>` command for a
discussion of image flags and how they are set for each atom. You can
reset the image flags (e.g. to 0) before invoking this compute by
image flags associated with each atom. See the :doc:`dump custom
<dump>` command for a discussion of "unwrapped" coordinates. See the
Atoms section of the :doc:`read_data <read_data>` command for a
discussion of image flags and how they are set for each atom. You
can reset the image flags (e.g. to 0) before invoking this compute by
using the :doc:`set image <set>` command.
.. note::
@ -108,7 +109,8 @@ distance\^2 :doc:`units <units>`.
Restrictions
""""""""""""
none
Compute *msd* cannot be used with a dynamic group.
Related commands
""""""""""""""""

View File

@ -74,8 +74,11 @@ the third is dimensionless.
Restrictions
""""""""""""
This compute is part of the EXTRA-COMPUTE package. It is only enabled if
LAMMPS was built with that package. See the :doc:`Build package <Build_package>` page for more info.
Compute *msd/nongauss* cannot be used with a dynamic group.
This compute is part of the EXTRA-COMPUTE 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
""""""""""""""""

View File

@ -26,6 +26,10 @@ Syntax
N = index of frame written upon first dump
*balance* arg = *yes* or *no*
*buffer* arg = *yes* or *no*
*colname* values = ID string, or *default*
string = new column header name
ID = integer from 1 to N, or integer from -1 to -N, where N = # of quantities being output
*or* a custom dump keyword or reference to compute, fix, property or variable.
*delay* arg = Dstep
Dstep = delay output until this timestep
*element* args = E1 E2 ... EN, where N = # of atom types
@ -40,9 +44,10 @@ Syntax
Np = write one file for every this many processors
*first* arg = *yes* or *no*
*flush* arg = *yes* or *no*
*format* args = *line* string, *int* string, *float* string, M string, or *none*
*format* args = *line* string, *int* string, *float* string, ID string, or *none*
string = C-style format string
M = integer from 1 to N, where N = # of per-atom quantities being output
ID = integer from 1 to N, or integer from -1 to -N, where N = # of quantities being output
*or* a custom dump keyword or reference to compute, fix, property or variable.
*header* arg = *yes* or *no*
*yes* to write the header
*no* to not write the header
@ -375,6 +380,29 @@ performed with dump style *xtc*\ .
----------
The *colname* keyword can be used to change the default header keyword
for dump styles: *atom*, *custom*, and *cfg* and their compressed, ADIOS,
and MPIIO variants. The setting for *ID string* replaces the default
text with the provided string. *ID* can be a positive integer when it
represents the column number counting from the left, a negative integer
when it represents the column number from the right (i.e. -1 is the last
column/keyword), or a custom dump keyword (or compute, fix, property, or
variable reference) and then it replaces the string for that specific
keyword. For *atom* dump styles only the keywords "id", "type", "x",
"y", "z", "ix", "iy", "iz" can be accessed via string regardless of
whether scaled or unwrapped coordinates were enabled or disabled, and
it always assumes 8 columns for indexing regardless of whether image
flags are enabled or not. For dump style *cfg* only the "auxiliary"
keywords (6th or later keyword) may be changed and the column indexing
considers only them (i.e. the 6th keyword is the the 1st column).
The *colname* keyword can be used multiple times. If multiple *colname*
settings refer to the same keyword, the last setting has precedence. A
setting of *default* clears all previous settings, reverting all values
to their default names.
----------
The *format* keyword can be used to change the default numeric format output
by the text-based dump styles: *atom*, *local*, *custom*, *cfg*, and
*xyz* styles, and their MPIIO variants. Only the *line* or *none*

View File

@ -19,6 +19,12 @@ Syntax
* cutlo,cuthi = lo and hi cutoff for Taper radius
* tolerance = precision to which charges will be equilibrated
* params = reaxff or a filename
* one or more keywords or keyword/value pairs may be appended
.. parsed-literal::
keyword = *maxiter*
*maxiter* N = limit the number of iterations to *N*
Examples
""""""""
@ -26,7 +32,7 @@ Examples
.. code-block:: LAMMPS
fix 1 all acks2/reaxff 1 0.0 10.0 1.0e-6 reaxff
fix 1 all acks2/reaxff 1 0.0 10.0 1.0e-6 param.acks2
fix 1 all acks2/reaxff 1 0.0 10.0 1.0e-6 param.acks2 maxiter 500
Description
"""""""""""
@ -44,14 +50,14 @@ the charge equilibration performed by fix acks2/reaxff, see the
The ACKS2 method minimizes the electrostatic energy of the system by
adjusting the partial charge on individual atoms based on interactions
with their neighbors. It requires some parameters for each atom type.
with their neighbors. It requires some parameters for each atom type.
If the *params* setting above is the word "reaxff", then these are
extracted from the :doc:`pair_style reaxff <pair_reaxff>` command and
the ReaxFF force field file it reads in. If a file name is specified
for *params*\ , then the parameters are taken from the specified file
and the file must contain one line for each atom type. The latter form
must be used when performing QeQ with a non-ReaxFF potential. The lines
should be formatted as follows:
for *params*, then the parameters are taken from the specified file
and the file must contain one line for each atom type. The latter
form must be used when performing QeQ with a non-ReaxFF potential.
The lines should be formatted as follows:
.. parsed-literal::
@ -67,13 +73,25 @@ ReaxFF potential file, except that eta is defined here as twice the eta
value in the ReaxFF file. Note that unlike the rest of LAMMPS, the units
of this fix are hard-coded to be A, eV, and electronic charge.
**Restart, fix_modify, output, run start/stop, minimize info:**
The optional *maxiter* keyword allows changing the max number
of iterations in the linear solver. The default value is 200.
.. note::
In order to solve the self-consistent equations for electronegativity
equalization, LAMMPS imposes the additional constraint that all the
charges in the fix group must add up to zero. The initial charge
assignments should also satisfy this constraint. LAMMPS will print a
warning if that is not the case.
Restart, fix_modify, output, run start/stop, minimize info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to :doc:`binary restart files
<restart>`. No global scalar or vector or per-atom quantities are
stored by this fix for access by various :doc:`output commands
<Howto_output>`. No parameter of this fix can be used with the
*start/stop* keywords of the :doc:`run <run>` command.
<restart>`. This fix computes a global scalar (the number of
iterations) for access by various :doc:`output commands <Howto_output>`.
No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command.
This fix is invoked during :doc:`energy minimization <minimize>`.
@ -86,12 +104,12 @@ This fix is invoked during :doc:`energy minimization <minimize>`.
Restrictions
""""""""""""
This fix is part of the REAXFF package. It is only enabled if LAMMPS
was built with that package. See the :doc:`Build package
<Build_package>` doc page for more info.
This fix is part of the REAXFF package. It is only enabled if
LAMMPS was built with that package. See the :doc:`Build package
<Build_package>` page for more info.
This fix does not correctly handle interactions involving multiple
periodic images of the same atom. Hence, it should not be used for
periodic images of the same atom. Hence, it should not be used for
periodic cell dimensions less than 10 angstroms.
This fix may be used in combination with :doc:`fix efield <fix_efield>`
@ -105,7 +123,10 @@ Related commands
:doc:`pair_style reaxff <pair_reaxff>`, :doc:`fix qeq/reaxff <fix_qeq_reaxff>`
**Default:** none
Default
"""""""
maxiter 200
----------

View File

@ -70,7 +70,7 @@ Syntax
*remap* value = *x* or *v* or *none*
x = remap coords of atoms in group into deforming box
v = remap velocities of all atoms when they cross periodic boundaries
v = remap velocities of atoms in group when they cross periodic boundaries
none = no remapping of x or v
*flip* value = *yes* or *no*
allow or disallow box flips when it becomes highly skewed

View File

@ -12,7 +12,7 @@ Syntax
* ID, group-ID are documented in :doc:`fix <fix>` command
* move = style name of this fix command
* style = *linear* or *wiggle* or *rotate* or *variable*
* style = *linear* or *wiggle* or *rotate* or *transrot* or *variable*
.. parsed-literal::
@ -25,6 +25,11 @@ Syntax
Px,Py,Pz = origin point of axis of rotation (distance units)
Rx,Ry,Rz = axis of rotation vector
period = period of rotation (time units)
*transrot* args = Vx Vy Vz Px Py Pz Rx Ry Rz period
Vx,Vy,Vz = components of velocity vector (velocity units)
Px,Py,Pz = origin point of axis of rotation (distance units)
Rx,Ry,Rz = axis of rotation vector
period = period of rotation (time units)
*variable* args = v_dx v_dy v_dz v_vx v_vy v_vz
v_dx,v_dy,v_dz = 3 variable names that calculate x,y,z displacement as function of time, any component can be specified as NULL
v_vx,v_vy,v_vz = 3 variable names that calculate x,y,z velocity as function of time, any component can be specified as NULL
@ -44,6 +49,7 @@ Examples
fix 1 boundary move wiggle 3.0 0.0 0.0 1.0 units box
fix 2 boundary move rotate 0.0 0.0 0.0 0.0 0.0 1.0 5.0
fix 2 boundary move variable v_myx v_myy NULL v_VX v_VY NULL
fix 3 boundary move transrot 0.1 0.1 0.0 0.0 0.0 0.0 0.0 0.0 1.0 5.0 units box
Description
"""""""""""
@ -55,15 +61,17 @@ whose movement can influence nearby atoms.
.. note::
The atoms affected by this fix should not normally be time
integrated by other fixes (e.g. :doc:`fix nve <fix_nve>`, :doc:`fix nvt <fix_nh>`), since that will change their positions and
velocities twice.
The atoms affected by this fix should not normally be time integrated
by other fixes (e.g. :doc:`fix nve <fix_nve>`, :doc:`fix nvt
<fix_nh>`), since that will change their positions and velocities
twice.
.. note::
As atoms move due to this fix, they will pass through periodic
boundaries and be remapped to the other side of the simulation box,
just as they would during normal time integration (e.g. via the :doc:`fix nve <fix_nve>` command). It is up to you to decide whether
just as they would during normal time integration (e.g. via the
:doc:`fix nve <fix_nve>` command). It is up to you to decide whether
periodic boundaries are appropriate with the kind of atom motion you
are prescribing with this fix.
@ -73,11 +81,11 @@ whose movement can influence nearby atoms.
position at the time the fix is specified. These initial coordinates
are stored by the fix in "unwrapped" form, by using the image flags
associated with each atom. See the :doc:`dump custom <dump>` command
for a discussion of "unwrapped" coordinates. See the Atoms section of
the :doc:`read_data <read_data>` command for a discussion of image flags
and how they are set for each atom. You can reset the image flags
(e.g. to 0) before invoking this fix by using the :doc:`set image <set>`
command.
for a discussion of "unwrapped" coordinates. See the Atoms section
of the :doc:`read_data <read_data>` command for a discussion of image
flags and how they are set for each atom. You can reset the image
flags (e.g. to 0) before invoking this fix by using the :doc:`set
image <set>` command.
----------
@ -118,13 +126,13 @@ notation as
where *X0* = (x0,y0,z0) is their position at the time the fix is
specified, *A* is the specified amplitude vector with components
(Ax,Ay,Az), *omega* is 2 PI / *period*, and *delta* is the time
elapsed since the fix was specified. This style also sets the
velocity of each atom to the time derivative of this expression. If
any of the amplitude components is specified as NULL, then the
position and velocity of that component is time integrated the same as
the :doc:`fix nve <fix_nve>` command would perform, using the
corresponding force component on the atom.
(Ax,Ay,Az), *omega* is 2 PI / *period*, and *delta* is the time elapsed
since the fix was specified. This style also sets the velocity of each
atom to the time derivative of this expression. If any of the amplitude
components is specified as NULL, then the position and velocity of that
component is time integrated the same as the :doc:`fix nve <fix_nve>`
command would perform, using the corresponding force component on the
atom.
Note that the *wiggle* style is identical to using the *variable*
style with :doc:`equal-style variables <variable>` that use the
@ -139,21 +147,29 @@ swiggle() and cwiggle() functions. E.g.
variable v equal v_omega*($A-cwiggle(0.0,$A,$T))
fix 1 boundary move variable v_x NULL NULL v_v NULL NULL
The *rotate* style rotates atoms around a rotation axis *R* =
(Rx,Ry,Rz) that goes through a point *P* = (Px,Py,Pz). The *period* of
the rotation is also specified. The direction of rotation for the
atoms around the rotation axis is consistent with the right-hand rule:
if your right-hand thumb points along *R*, then your fingers wrap
around the axis in the direction of rotation.
The *rotate* style rotates atoms around a rotation axis *R* = (Rx,Ry,Rz)
that goes through a point *P* = (Px,Py,Pz). The *period* of the
rotation is also specified. The direction of rotation for the atoms
around the rotation axis is consistent with the right-hand rule: if your
right-hand thumb points along *R*, then your fingers wrap around the
axis in the direction of rotation.
This style also sets the velocity of each atom to (omega cross Rperp)
where omega is its angular velocity around the rotation axis and Rperp
is a perpendicular vector from the rotation axis to the atom. If the
defined :doc:`atom_style <atom_style>` assigns an angular velocity or
angular momentum or orientation to each atom (:doc:`atom styles <atom_style>` sphere, ellipsoid, line, tri, body), then
angular momentum or orientation to each atom (:doc:`atom styles
<atom_style>` sphere, ellipsoid, line, tri, body), then
those properties are also updated appropriately to correspond to the
atom's motion and rotation over time.
The *transrot* style combines the effects of *rotate* and *linear* so
that it is possible to prescribe a rotating group of atoms that also
moves at a constant velocity. The arguments are for the translation
first and then for the rotation. Since the rotation affects all
coordinate components, it is not possible to set any of the
translation vector components to NULL.
The *variable* style allows the position and velocity components of
each atom to be set by formulas specified via the
:doc:`variable <variable>` command. Each of the 6 variables is
@ -165,10 +181,10 @@ Each variable must be of either the *equal* or *atom* style.
a function of the timestep as well as of other simulation values.
*Atom*\ -style variables compute a numeric quantity for each atom, that
can be a function per-atom quantities, such as the atom's position, as
well as of the timestep and other simulation values. Note that this
fix stores the original coordinates of each atom (see note below) so
that per-atom quantity can be used in an atom-style variable formula.
See the :doc:`variable <variable>` command for details.
well as of the timestep and other simulation values. Note that this fix
stores the original coordinates of each atom (see note below) so that
per-atom quantity can be used in an atom-style variable formula. See
the :doc:`variable <variable>` command for details.
The first 3 variables (v_dx,v_dy,v_dz) specified for the *variable*
style are used to calculate a displacement from the atom's original
@ -206,8 +222,9 @@ spacings can be different in x,y,z.
Restart, fix_modify, output, run start/stop, minimize info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
This fix writes the original coordinates of moving atoms to :doc:`binary restart files <restart>`, as well as the initial timestep, so that
the motion can be continuous in a restarted simulation. See the
This fix writes the original coordinates of moving atoms to :doc:`binary
restart files <restart>`, as well as the initial timestep, so that the
motion can be continuous in a restarted simulation. See the
:doc:`read_restart <read_restart>` command for info on how to re-specify
a fix in an input script that reads a restart file, so that the
operation of the fix continues in an uninterrupted fashion.
@ -224,11 +241,12 @@ fix.
This fix produces a per-atom array which can be accessed by various
:doc:`output commands <Howto_output>`. The number of columns for each
atom is 3, and the columns store the original unwrapped x,y,z coords
of each atom. The per-atom values can be accessed on any timestep.
atom is 3, and the columns store the original unwrapped x,y,z coords of
each atom. The per-atom values can be accessed on any timestep.
No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
the :doc:`run <run>` command. This fix is not invoked during
:doc:`energy minimization <minimize>`.
For :doc:`rRESPA time integration <run_style>`, this fix adjusts the
position and velocity of atoms on the outermost rRESPA level.

View File

@ -71,7 +71,7 @@ Syntax
*no_affinity* values = none
*kokkos* args = keyword value ...
zero or more keyword/value pairs may be appended
keywords = *neigh* or *neigh/qeq* or *neigh/thread* or *newton* or *binsize* or *comm* or *comm/exchange* or *comm/forward* *pair/comm/forward* *fix/comm/forward* or *comm/reverse* or *gpu/aware* or *pair/only*
keywords = *neigh* or *neigh/qeq* or *neigh/thread* or *newton* or *binsize* or *comm* or *comm/exchange* or *comm/forward* *comm/pair/forward* *comm/fix/forward* or *comm/reverse* or *gpu/aware* or *pair/only*
*neigh* value = *full* or *half*
full = full neighbor list
half = half neighbor list built in thread-safe manner
@ -90,11 +90,11 @@ Syntax
*binsize* value = size
size = bin size for neighbor list construction (distance units)
*comm* value = *no* or *host* or *device*
use value for comm/exchange and comm/forward and pair/comm/forward and fix/comm/forward and comm/reverse
use value for comm/exchange and comm/forward and comm/pair/forward and comm/fix/forward and comm/reverse
*comm/exchange* value = *no* or *host* or *device*
*comm/forward* value = *no* or *host* or *device*
*pair/comm/forward* value = *no* or *device*
*fix/comm/forward* value = *no* or *device*
*comm/pair/forward* value = *no* or *device*
*comm/fix/forward* value = *no* or *device*
*comm/reverse* value = *no* or *host* or *device*
no = perform communication pack/unpack in non-KOKKOS mode
host = perform pack/unpack on host (e.g. with OpenMP threading)
@ -467,13 +467,13 @@ simple pairwise potentials such as Lennard-Jones do support threading
over both atoms and neighbors.
If the *neigh/transpose* keyword is set to *off*, then the KOKKOS
package will use the same memory layout for building the neigh list on
package will use the same memory layout for building the neighbor list on
GPUs as used for the pair style. When this keyword is set to *on* it
will use a different (transposed) memory layout to build the neigh
will use a different (transposed) memory layout to build the neighbor
list on GPUs. This can be faster in some cases (e.g. ReaxFF HNS
benchmark) but slower in others (e.g. Lennard Jones benchmark). The
copy between different memory layouts is done out of place and
therefore doubles the memory overhead of the neigh list, which can
therefore doubles the memory overhead of the neighbor list, which can
be significant.
The *newton* keyword sets the Newton flags for pairwise and bonded
@ -484,11 +484,12 @@ computation is done, but less communication. However, when running on
CPUs a value of *on* is the default since it can often be faster, just
as it is for non-accelerated pair styles
The *binsize* keyword sets the size of bins used to bin atoms in
neighbor list builds. The same value can be set by the :doc:`neigh_modify binsize <neigh_modify>` command. Making it an option in the package
kokkos command allows it to be set from the command line. The default
value for CPUs is 0.0, which means the LAMMPS default will be used,
which is bins = 1/2 the size of the pairwise cutoff + neighbor skin
The *binsize* keyword sets the size of bins used to bin atoms during
neighbor list builds. The same value can be set by the
:doc:`neigh_modify binsize <neigh_modify>` command. Making it an option
in the package kokkos command allows it to be set from the command line.
The default value for CPUs is 0.0, which means the LAMMPS default will be
used, which is bins = 1/2 the size of the pairwise cutoff + neighbor skin
distance. This is fine when neighbor lists are built on the CPU. For GPU
builds, a 2x larger binsize equal to the pairwise cutoff + neighbor skin
is often faster, which is the default. Note that if you use a
@ -498,8 +499,8 @@ because the GPU is faster at performing pairwise interactions, then this
rule of thumb may give too large a binsize and the default should be
overridden with a smaller value.
The *comm* and *comm/exchange* and *comm/forward* and *pair/comm/forward*
and *fix/comm/forward* and comm/reverse*
The *comm* and *comm/exchange* and *comm/forward* and *comm/pair/forward*
and *comm/fix/forward* and comm/reverse*
keywords determine whether the host or device performs the packing and
unpacking of data when communicating per-atom data between processors.
"Exchange" communication happens only on timesteps that neighbor lists
@ -520,8 +521,8 @@ packing/unpacking data for the communication. A value of *host* means to
use the host, typically a multi-core CPU, and perform the
packing/unpacking in parallel with threads. A value of *device* means to
use the device, typically a GPU, to perform the packing/unpacking
operation. If a value of *host* is used for the *pair/comm/forward* or
*fix/comm/forward* keyword, it will be automatically be changed to *no*
operation. If a value of *host* is used for the *comm/pair/forward* or
*comm/fix/forward* keyword, it will be automatically be changed to *no*
since these keywords don't support *host* mode.
The optimal choice for these keywords depends on the input script and

View File

@ -21,9 +21,14 @@ Syntax
*norm* value = *yes* or *no*
*flush* value = *yes* or *no*
*line* value = *one* or *multi* or *yaml*
*format* values = *line* string, *int* string, *float* string, M string, or *none*
*colname* values = ID string, or *default*
string = new column header name
ID = integer from 1 to N, or integer from -1 to -N, where N = # of quantities being output
*or* a thermo keyword or reference to compute, fix, property or variable.
*format* values = *line* string, *int* string, *float* string, ID string, or *none*
string = C-style format string
M = integer from 1 to N, where N = # of quantities being output
ID = integer from 1 to N, or integer from -1 to -N, where N = # of quantities being output
*or* a thermo keyword or reference to compute, fix, property or variable.
*temp* value = compute ID that calculates a temperature
*press* value = compute ID that calculates a pressure
@ -36,7 +41,8 @@ Examples
thermo_modify temp myTemp format 3 %15.8g
thermo_modify temp myTemp format line "%ld %g %g %15.8g"
thermo_modify line multi format float %g
themos_modify line yaml format none
thermo_modify line yaml format none
thermo_modify colname 1 Timestep colname -2 Pressure colname f_1[1] AvgDensity
Description
"""""""""""
@ -147,6 +153,20 @@ containing the timestep and CPU time ("multi"), or in a YAML format
block ("yaml"). This modify option overrides the *one*, *multi*, or
*yaml* thermo_style settings.
The *colname* keyword can be used to change the default header keyword
for a column or field of thermodynamic output. The setting for *ID
string* replaces the default text with the provided string. *ID* can be
a positive integer when it represents the column number counting from
the left, a negative integer when it represents the column number from
the right (i.e. -1 is the last column/keyword), or a thermo keyword (or
compute, fix, property, or variable reference) and then it replaces the
string for that specific thermo keyword.
The *colname* keyword can be used multiple times. If multiple *colname*
settings refer to the same keyword, the last setting has precedence. A
setting of *default* clears all previous settings, reverting all values
to their default values.
The *format* keyword can be used to change the default numeric format of
any of quantities the :doc:`thermo_style <thermo_style>` command
outputs. All the specified format strings are C-style formats, e.g. as
@ -155,12 +175,16 @@ argument which is the format string for the entire line of thermo
output, with N fields, which you must enclose in quotes if it is more
than one field. The *int* and *float* keywords take a single format
argument and are applied to all integer or floating-point quantities
output. The setting for *M string* also takes a single format argument
which is used for the Mth value output in each line, e.g. the fifth
column is output in high precision for "format 5 %20.15g".
output. The setting for *ID string* also takes a single format argument
which is used for the indexed value in each line. The interpretation is
the same as for *colname*, i.e. a positive integer is the n-th value
corresponding to the n-th thermo keyword, a negative integer is counting
backwards, and a string matches the entry with the thermo keyword.,
e.g. the fifth column is output in high precision for "format 5 %20.15g"
and the pair energy for "format epair %20.15g".
The *format* keyword can be used multiple times. The precedence is
that for each value in a line of output, the *M* format (if specified)
that for each value in a line of output, the *ID* format (if specified)
is used, else the *int* or *float* setting (if specified) is used,
else the *line* setting (if specified) for that value is used, else
the default setting is used. A setting of *none* clears all previous
@ -173,9 +197,10 @@ settings, reverting all values to their default format.
When specifying the *format int* option you can use a "%d"-style
format identifier in the format string and LAMMPS will convert this
to the corresponding 8-byte form when it is applied to those
keywords. However, when specifying the *line* option or *format M
keywords. However, when specifying the *line* option or *format ID
string* option for *step* and *natoms*, you should specify a format
string appropriate for an 8-byte signed integer, e.g. one with "%ld".
string appropriate for an 8-byte signed integer, e.g. one with "%ld"
or "%lld" depending on the platform.
The *temp* keyword is used to determine how thermodynamic temperature is
calculated, which is used by all thermo quantities that require a

View File

@ -1180,6 +1180,7 @@ Gladky
gld
gle
globbing
Gloor
Glosli
Glotzer
gmail
@ -1428,6 +1429,7 @@ interal
interatomic
Interatomic
interconvert
interfacial
interial
interlayer
intermolecular
@ -1787,6 +1789,7 @@ Liu
Livermore
lj
llammps
lld
LLVM
lm
lmp

View File

@ -23,3 +23,5 @@ to the final states.
* `quicktests` -- very short runs with charged Lennard-Jones atoms to test
*compute fep*, *fix adapt/fep* and *pair lj/cut/coul/long/soft*.
* `ta` -- surface tension of SPCE water without constraints. Test-area method.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,49 @@
units real
boundary p p p
atom_style full
bond_style harmonic
angle_style harmonic
special_bonds lj/coul 0.0 0.0 0.5
pair_style lj/cut/coul/long 12.0 12.0
pair_modify tail no
kspace_style pppm 1.0e-5
read_data data.spce # 8x8x16 SPCE molecules in a 30x30x100 box
bond_coeff 1 517.630258 1.0
angle_coeff 1 37.950526 109.47
pair_coeff 1 1 0.1553 3.166 # O O
pair_coeff 1 2 0.0 1.0 # O H
pair_coeff 2 2 0.0 1.0 # H H
# don't use fix shake with compute fep/ta
# fix SHAKE all shake 0.0001 20 0 b 1
neighbor 2.0 bin
# neigh_modify delay 0 every 1 check yes
timestep 1.0
variable TK equal 300.0
compute TA all fep/ta ${TK} xy 1.0005
velocity all create ${TK} 12345
thermo_style custom step temp press etotal pe c_TA[*]
thermo 5000
fix NVT all nvt temp ${TK} ${TK} 100
run 300000
reset_timestep 0
variable gamma_v equal 100*(pzz-0.5*(pxx+pyy))/2/100 # surface tension via the mechanical route
fix FEP all ave/time 100 1000 100000 c_TA[*] v_gamma_v ave running file spce.fep.ta
run 2000000

View File

@ -0,0 +1,689 @@
LAMMPS (17 Feb 2022)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
package gpu 0
units real
boundary p p p
atom_style full
bond_style harmonic
angle_style harmonic
special_bonds lj/coul 0.0 0.0 0.5
pair_style lj/cut/coul/long 12.0 12.0
pair_modify tail no
kspace_style pppm 1.0e-5
read_data data.spce # 8x8x16 SPCE molecules in a 30x30x100 box
Reading data file ...
orthogonal box = (0 0 0) to (30 30 100)
1 by 1 by 1 MPI processor grid
reading atoms ...
3072 atoms
scanning bonds ...
2 = max bonds/atom
scanning angles ...
1 = max angles/atom
reading bonds ...
2048 bonds
reading angles ...
1024 angles
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0.5
special bond factors coul: 0 0 0.5
2 = max # of 1-2 neighbors
1 = max # of 1-3 neighbors
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.001 seconds
read_data CPU = 0.006 seconds
bond_coeff 1 517.630258 1.0
angle_coeff 1 37.950526 109.47
pair_coeff 1 1 0.1553 3.166 # O O
pair_coeff 1 2 0.0 1.0 # O H
pair_coeff 2 2 0.0 1.0 # H H
# don't use fix shake with compute fep/ta
# fix SHAKE all shake 0.0001 20 0 b 1
neighbor 2.0 bin
# neigh_modify delay 0 every 1 check yes
timestep 1.0
variable TK equal 300.0
compute TA all fep/ta ${TK} xy 1.0005
compute TA all fep/ta 300 xy 1.0005
velocity all create ${TK} 12345
velocity all create 300 12345
thermo_style custom step temp press etotal pe c_TA[*]
thermo 5000
fix NVT all nvt temp ${TK} ${TK} 100
fix NVT all nvt temp 300 ${TK} 100
fix NVT all nvt temp 300 300 100
run 300000
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- GPU package (short-range, long-range and three-body potentials):
@Article{Brown11,
author = {W. M. Brown, P. Wang, S. J. Plimpton, A. N. Tharrington},
title = {Implementing Molecular Dynamics on Hybrid High Performance Computers - Short Range Forces},
journal = {Comp.~Phys.~Comm.},
year = 2011,
volume = 182,
pages = {898--911}
}
@Article{Brown12,
author = {W. M. Brown, A. Kohlmeyer, S. J. Plimpton, A. N. Tharrington},
title = {Implementing Molecular Dynamics on Hybrid High Performance Computers - Particle-Particle Particle-Mesh},
journal = {Comp.~Phys.~Comm.},
year = 2012,
volume = 183,
pages = {449--459}
}
@Article{Brown13,
author = {W. M. Brown, Y. Masako},
title = {Implementing Molecular Dynamics on Hybrid High Performance Computers Three-Body Potentials},
journal = {Comp.~Phys.~Comm.},
year = 2013,
volume = 184,
pages = {2785--2793}
}
@Article{Trung15,
author = {T. D. Nguyen, S. J. Plimpton},
title = {Accelerating dissipative particle dynamics simulations for soft matter systems},
journal = {Comput.~Mater.~Sci.},
year = 2015,
volume = 100,
pages = {173--180}
}
@Article{Trung17,
author = {T. D. Nguyen},
title = {GPU-accelerated Tersoff potentials for massively parallel Molecular Dynamics simulations},
journal = {Comp.~Phys.~Comm.},
year = 2017,
volume = 212,
pages = {113--122}
}
@Article{Nikolskiy19,
author = {V. Nikolskiy, V. Stegailov},
title = {GPU acceleration of four-site water models in LAMMPS},
journal = {Proceeding of the International Conference on Parallel Computing (ParCo 2019), Prague, Czech Republic},
year = 2019
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
PPPM initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:340)
G vector (1/distance) = 0.24270009
grid = 20 20 50
stencil order = 5
estimated absolute RMS force accuracy = 0.0037271514
estimated relative force accuracy = 1.1224206e-05
using double precision FFTW3
3d grid and FFT values/proc = 40824 20000
generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
FEP/TA settings ...
temperature = 300.000000
scale factor = 1.000500
tail no
Per MPI rank memory allocation (min/avg/max) = 10.59 | 10.59 | 10.59 Mbytes
Step Temp Press TotEng PotEng c_TA[1] c_TA[2] c_TA[3]
0 300 5742.8831 8061.6965 5315.4762 -10.940045 93249708 0.45
5000 301.43029 -118.64017 -7888.4723 -10647.786 -0.13617205 1.2566061 0.45
10000 294.49018 -301.44062 -8063.3808 -10759.164 -0.14897537 1.2838851 0.45
15000 294.36123 -407.07728 -8189.2912 -10883.894 0.34568257 0.55998421 0.45
20000 300.95171 111.50248 -8104.1193 -10859.052 0.11293291 0.82742794 0.45
25000 300.28473 388.00598 -8147.8655 -10896.692 0.11270184 0.82774872 0.45
30000 306.62229 -113.93849 -8191.7529 -10998.594 0.26068823 0.6457922 0.45
35000 303.66349 -426.81556 -8269.8364 -11049.593 0.78191631 0.26939311 0.45
40000 291.70214 -50.50854 -8368.0775 -11038.339 0.20120788 0.71354814 0.45
45000 299.74326 -289.18081 -8346.2716 -11090.142 0.4163404 0.49739645 0.45
50000 300.53193 36.834691 -8367.5726 -11118.662 0.20517137 0.70881996 0.45
55000 298.20207 -107.76906 -8274.386 -11004.148 0.7409946 0.2885342 0.45
60000 298.32558 -65.20542 -8433.4884 -11164.381 0.16210976 0.76191344 0.45
65000 297.3149 -102.87381 -8379.2515 -11100.892 0.21193701 0.70082127 0.45
70000 300.78423 -463.75811 -8381.3317 -11134.731 0.32109349 0.58356406 0.45
75000 299.53099 -53.264996 -8495.159 -11237.086 0.44828935 0.47144212 0.45
80000 295.55879 -590.1244 -8432.3435 -11137.909 0.28788374 0.61699451 0.45
85000 298.73289 -234.73297 -8473.8721 -11208.493 -0.11723275 1.2173128 0.45
90000 307.02709 -264.9035 -8303.7625 -11114.309 -0.098959935 1.1805672 0.45
95000 304.79112 199.8891 -8364.2553 -11154.334 0.036986735 0.93984396 0.45
100000 295.49748 -743.18974 -8453.8066 -11158.811 0.249981 0.65749559 0.45
105000 303.11352 -163.70166 -8324.4846 -11099.206 -0.012286442 1.0208231 0.45
110000 294.30278 -33.731015 -8512.8168 -11206.884 -0.0129379 1.0219392 0.45
115000 293.65421 393.24871 -8481.1933 -11169.324 0.75255277 0.28299408 0.45
120000 300.56448 16.832298 -8507.3819 -11258.769 0.13389897 0.79883437 0.45
125000 297.92506 -398.77893 -8576.4403 -11303.666 0.07292658 0.88485917 0.45
130000 303.007 -589.11865 -8560.7259 -11334.472 0.42876446 0.48713794 0.45
135000 310.82674 -203.4991 -8565.3181 -11410.647 0.075268046 0.88139064 0.45
140000 303.68345 -710.20709 -8570.895 -11350.834 -0.1023741 1.1873476 0.45
145000 293.86825 129.05781 -8457.0747 -11147.165 0.39475138 0.51573896 0.45
150000 296.93136 -734.03863 -8577.2763 -11295.406 0.73600373 0.29095985 0.45
155000 296.67522 -290.20206 -8631.0579 -11346.843 -0.30049664 1.6554154 0.45
160000 301.5685 -656.03394 -8646.3196 -11406.898 0.08494101 0.86720512 0.45
165000 295.8808 342.45206 -8602.0309 -11310.544 -0.30873864 1.6784606 0.45
170000 303.33048 -64.144957 -8580.8446 -11357.552 0.13622456 0.79572423 0.45
175000 300.75245 -908.44969 -8566.8005 -11319.909 0.15795135 0.76724659 0.45
180000 301.34603 -350.00512 -8489.0111 -11247.553 0.21089487 0.70204744 0.45
185000 305.96254 62.840515 -8458.0542 -11258.856 -0.050029338 1.0875408 0.45
190000 300.14392 256.935 -8684.6591 -11432.197 0.40144188 0.50998337 0.45
195000 299.32366 -218.70113 -8505.3328 -11245.362 -0.19428451 1.3852659 0.45
200000 307.89424 -569.89954 -8615.1541 -11433.639 0.55121888 0.39668508 0.45
205000 299.34873 334.69765 -8657.6353 -11397.894 0.17751997 0.74247109 0.45
210000 298.54619 -261.12193 -8601.2439 -11334.156 0.74219016 0.28795615 0.45
215000 304.02395 -306.81112 -8531.9913 -11315.047 0.86987192 0.23244073 0.45
220000 299.95916 278.60921 -8682.394 -11428.24 -0.26474202 1.559051 0.45
225000 302.839 -226.36906 -8515.0815 -11287.29 0.060381353 0.90367684 0.45
230000 299.54085 240.08589 -8636.8991 -11378.916 -0.46699438 2.1887589 0.45
235000 297.62792 -138.20813 -8627.0888 -11351.595 -0.035013312 1.0604901 0.45
240000 299.15558 442.88999 -8749.2731 -11487.763 0.14696819 0.78151268 0.45
245000 291.76323 174.70322 -8597.8808 -11268.701 -0.3979188 1.9492946 0.45
250000 308.21961 37.282506 -8603.7127 -11425.176 0.021882894 0.96395922 0.45
255000 307.18484 -493.77408 -8459.5942 -11271.585 0.16914044 0.75298079 0.45
260000 294.17364 -238.05366 -8677.8379 -11370.723 -0.35710078 1.8202968 0.45
265000 289.14461 -304.12454 -8727.2613 -11374.111 0.18045129 0.73882932 0.45
270000 301.51228 -255.75558 -8640.9577 -11401.022 0.49252861 0.43772444 0.45
275000 294.98349 -351.00974 -8678.3965 -11378.695 -0.31576914 1.6983718 0.45
280000 294.37376 279.87325 -8668.9575 -11363.675 0.26328091 0.64298978 0.45
285000 295.68351 249.3086 -8748.533 -11455.24 0.6820904 0.31849899 0.45
290000 298.74266 -749.43024 -8583.8679 -11318.578 0.030414997 0.95026156 0.45
295000 292.67215 -573.39647 -8713.3223 -11392.463 0.25656615 0.65027291 0.45
300000 302.48853 186.71329 -8655.8918 -11424.892 0.20319721 0.71117107 0.45
Loop time of 706.805 on 1 procs for 300000 steps with 3072 atoms
Performance: 36.672 ns/day, 0.654 hours/ns, 424.445 timesteps/s
95.4% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 149.88 | 149.88 | 149.88 | 0.0 | 21.21
Bond | 17.824 | 17.824 | 17.824 | 0.0 | 2.52
Kspace | 517.46 | 517.46 | 517.46 | 0.0 | 73.21
Neigh | 1.3789 | 1.3789 | 1.3789 | 0.0 | 0.20
Comm | 9.412 | 9.412 | 9.412 | 0.0 | 1.33
Output | 0.092 | 0.092 | 0.092 | 0.0 | 0.01
Modify | 8.3026 | 8.3026 | 8.3026 | 0.0 | 1.17
Other | | 2.458 | | | 0.35
Nlocal: 3072 ave 3072 max 3072 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 8370 ave 8370 max 8370 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = -1
Ave neighs/atom = -0.00032552083
Ave special neighs/atom = 2
Neighbor list builds = 14698
Dangerous builds = 21
reset_timestep 0
variable gamma_v equal 100*(pzz-0.5*(pxx+pyy))/2/100 # surface tension via the mechanical route
fix FEP all ave/time 100 1000 100000 c_TA[*] v_gamma_v ave running file spce.fep.ta
run 2000000
PPPM initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:340)
G vector (1/distance) = 0.24270009
grid = 20 20 50
stencil order = 5
estimated absolute RMS force accuracy = 0.0037271514
estimated relative force accuracy = 1.1224206e-05
using double precision FFTW3
3d grid and FFT values/proc = 40824 20000
generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Per MPI rank memory allocation (min/avg/max) = 10.61 | 10.61 | 10.61 Mbytes
Step Temp Press TotEng PotEng c_TA[1] c_TA[2] c_TA[3]
0 302.48853 186.71327 -8655.8918 -11424.892 0.20325452 0.71110271 0.45
5000 296.71986 -573.544 -8510.0832 -11226.277 0.43636365 0.48096787 0.45
10000 302.58189 314.36295 -8636.8139 -11406.669 0.005932853 0.99009761 0.45
15000 296.98096 -950.66627 -8635.9066 -11354.49 0.48058674 0.44658101 0.45
20000 297.11923 -474.65836 -8666.9864 -11386.836 0.27933535 0.62590536 0.45
25000 302.26474 -621.83271 -8655.4227 -11422.375 0.01931686 0.96811729 0.45
30000 300.37645 -358.95128 -8568.7732 -11318.44 0.25415456 0.65290873 0.45
35000 296.5436 179.71411 -8665.0335 -11379.614 0.1911473 0.72569185 0.45
40000 300.79459 92.193193 -8617.7807 -11371.275 0.27587113 0.629553 0.45
45000 298.87827 220.06674 -8695.83 -11431.782 0.28715816 0.61774591 0.45
50000 304.4095 -375.31266 -8614.4396 -11401.025 -0.18683272 1.3680584 0.45
55000 305.11287 128.51602 -8559.8245 -11352.848 0.24122754 0.66722084 0.45
60000 296.56241 302.30371 -8725.6357 -11440.388 -0.27104279 1.5756158 0.45
65000 295.78468 -393.18931 -8716.4616 -11424.095 0.39132466 0.51871194 0.45
70000 297.67504 155.75977 -8641.2451 -11366.182 0.031194864 0.94901929 0.45
75000 298.81381 -207.51201 -8622.9859 -11358.348 -0.11330086 1.2093106 0.45
80000 296.17928 -360.65589 -8679.0048 -11390.25 0.68794433 0.31538684 0.45
85000 303.90294 488.01134 -8643.2028 -11425.151 0.41330713 0.49993365 0.45
90000 296.49425 14.901201 -8636.0539 -11350.182 -0.21538319 1.4351695 0.45
95000 308.63505 137.10659 -8570.395 -11395.661 0.51407684 0.42218544 0.45
100000 302.56638 -402.80803 -8635.0157 -11404.729 0.1552006 0.77079493 0.45
105000 293.79289 -417.74599 -8626.2538 -11315.654 -0.13491963 1.253969 0.45
110000 293.52504 -808.94658 -8684.9259 -11371.874 0.20573374 0.70815164 0.45
115000 307.6821 132.78071 -8639.817 -11456.36 -0.67060193 3.0798018 0.45
120000 303.22974 121.87128 -8714.7295 -11490.515 0.3675961 0.5397742 0.45
125000 303.8202 -34.518279 -8625.1384 -11406.329 0.17151619 0.74998608 0.45
130000 294.5718 -508.86133 -8684.9608 -11381.491 0.23323323 0.67622827 0.45
135000 302.79866 -445.99091 -8627.6163 -11399.456 0.3300839 0.57482965 0.45
140000 297.84052 -78.442467 -8621.5234 -11347.976 0.39157424 0.51849484 0.45
145000 303.64247 463.89678 -8673.8591 -11453.423 0.39692857 0.51385891 0.45
150000 288.38239 28.567607 -8789.6464 -11429.518 -0.045509865 1.0793274 0.45
155000 296.02581 -111.35664 -8674.295 -11384.135 0.23313764 0.67633671 0.45
160000 307.72004 -410.73956 -8578.8169 -11395.707 0.28485416 0.62013794 0.45
165000 300.42279 -483.56039 -8598.0354 -11348.126 0.38342507 0.52563101 0.45
170000 302.51326 -150.99512 -8626.2426 -11395.469 0.2439355 0.66419697 0.45
175000 295.41161 -554.9058 -8760.0201 -11464.238 0.38186652 0.52700696 0.45
180000 296.21987 -194.97724 -8645.4143 -11357.031 0.098453456 0.84777037 0.45
185000 296.52352 -186.85833 -8690.0538 -11404.45 0.6348999 0.34473516 0.45
190000 304.72799 -60.2868 -8667.2005 -11456.701 0.1885985 0.72880108 0.45
195000 306.65221 -871.17267 -8679.3434 -11486.458 0.56138735 0.38997638 0.45
200000 301.07509 362.96369 -8616.9867 -11373.048 -0.53126323 2.4379049 0.45
205000 303.65587 -216.8767 -8564.3182 -11344.005 0.11046546 0.83085967 0.45
210000 296.20891 -474.08356 -8698.3778 -11409.894 -0.11237476 1.2074335 0.45
215000 295.37276 422.46284 -8714.4636 -11418.326 0.042757549 0.93079022 0.45
220000 301.20663 -202.20616 -8577.1827 -11334.449 0.30387837 0.60066105 0.45
225000 306.20481 -90.566175 -8503.5134 -11306.533 0.29188403 0.6128683 0.45
230000 303.54253 -24.255163 -8641.8724 -11420.521 -0.38522168 1.9082173 0.45
235000 300.29265 -572.08074 -8664.2779 -11413.177 0.48055356 0.44660587 0.45
240000 302.90712 -226.88617 -8636.6962 -11409.528 -0.15295452 1.2924832 0.45
245000 305.05222 -68.241521 -8591.0885 -11383.557 -0.19850824 1.3951152 0.45
250000 300.27784 -46.680162 -8746.7288 -11495.492 -0.0098493376 1.0166585 0.45
255000 308.23091 -424.64171 -8573.7405 -11395.307 0.1366107 0.79520901 0.45
260000 296.11619 4.6901264 -8742.1916 -11452.859 -0.12450429 1.2322516 0.45
265000 301.62359 134.42152 -8565.5323 -11326.615 -0.028534957 1.0490284 0.45
270000 306.71999 -62.484213 -8690.7983 -11498.534 0.28432443 0.62068922 0.45
275000 292.91982 532.15442 -8779.2684 -11460.676 -0.40898808 1.9858264 0.45
280000 306.88024 -339.05165 -8557.2761 -11366.479 0.12573772 0.80984534 0.45
285000 303.38798 617.66326 -8630.5787 -11407.813 -0.1310487 1.2458532 0.45
290000 299.66094 302.90333 -8692.267 -11435.383 0.65063395 0.33575584 0.45
295000 304.49009 656.72392 -8710.7918 -11498.115 -0.16849302 1.3266137 0.45
300000 303.80861 -221.66912 -8688.9465 -11470.031 -0.24985266 1.5205954 0.45
305000 300.67136 -498.92059 -8669.6648 -11422.031 0.19219443 0.72441833 0.45
310000 305.7021 -521.59218 -8505.6751 -11304.093 0.52013748 0.4179152 0.45
315000 302.66313 -359.25677 -8682.4925 -11453.091 -0.26135382 1.5502155 0.45
320000 304.5646 441.04962 -8610.9569 -11398.962 0.41662005 0.49716319 0.45
325000 300.04934 -142.59053 -8698.3246 -11444.997 -0.23029219 1.4715132 0.45
330000 305.55522 -212.47771 -8576.3678 -11373.441 0.091594168 0.85758093 0.45
335000 294.79439 -151.62761 -8762.4565 -11461.024 0.14345357 0.78613362 0.45
340000 302.4373 463.41717 -8643.2588 -11411.79 0.36279978 0.54413438 0.45
345000 295.91624 -272.3623 -8678.9725 -11387.81 0.1032874 0.84092407 0.45
350000 300.60829 62.418773 -8633.2343 -11385.023 -0.040578988 1.0704371 0.45
355000 301.41802 -860.82496 -8573.5867 -11332.788 0.04947461 0.9203617 0.45
360000 298.03103 -265.05516 -8619.4232 -11347.619 -0.20903224 1.4199617 0.45
365000 298.08727 -359.76277 -8612.4898 -11341.201 0.040109682 0.93493354 0.45
370000 301.55162 -339.05976 -8687.3746 -11447.799 0.1705358 0.75122045 0.45
375000 299.3933 -290.38029 -8723.9515 -11464.618 -0.1476 1.2809266 0.45
380000 303.02442 -1104.7914 -8626.7252 -11400.631 0.3211992 0.58346059 0.45
385000 301.49421 -613.53228 -8662.2479 -11422.146 -0.42642873 2.0447796 0.45
390000 302.01134 -351.23257 -8662.4664 -11427.099 0.23747904 0.67142935 0.45
395000 307.32962 -443.86959 -8624.8646 -11438.181 0.17359502 0.74737541 0.45
400000 301.67955 -253.92045 -8690.6143 -11452.209 -0.43779134 2.0841261 0.45
405000 302.60773 -97.544471 -8646.8281 -11416.92 0.071259831 0.88733652 0.45
410000 302.48853 -630.99507 -8710.4497 -11479.45 0.28763517 0.61725182 0.45
415000 296.46562 -443.33457 -8763.0661 -11476.932 0.088532948 0.86199583 0.45
420000 295.37803 -70.515081 -8720.0027 -11423.913 0.06359365 0.89882065 0.45
425000 299.31069 -48.284153 -8678.6115 -11418.522 0.063520704 0.89893064 0.45
430000 296.37918 -651.48627 -8784.4246 -11497.5 -0.0094249768 1.0159351 0.45
435000 303.07145 -284.10404 -8558.3149 -11332.651 0.034731239 0.94340646 0.45
440000 293.1823 -280.18182 -8707.2432 -11391.054 0.14151034 0.78870025 0.45
445000 305.55617 -286.4858 -8646.9315 -11444.013 0.26166889 0.64473078 0.45
450000 300.67206 102.89156 -8705.2376 -11457.61 0.88202179 0.2277515 0.45
455000 304.23258 9.5792632 -8571.8771 -11356.843 -0.42835558 2.0513992 0.45
460000 292.30355 265.8009 -8707.4453 -11383.212 0.20592758 0.70792142 0.45
465000 297.62746 193.66269 -8716.5132 -11441.015 0.36938368 0.53815813 0.45
470000 292.53483 -75.549804 -8728.3188 -11406.202 0.49993961 0.43231669 0.45
475000 296.10181 -202.26042 -8657.5804 -11368.116 -0.29829888 1.6493239 0.45
480000 300.24953 249.20038 -8688.6705 -11437.175 0.4372485 0.48025452 0.45
485000 296.41241 -73.46156 -8558.9344 -11272.314 -0.15947631 1.3067001 0.45
490000 302.51379 -654.60188 -8571.28 -11340.512 0.36608136 0.54114742 0.45
495000 300.50497 -127.55361 -8724.7069 -11475.55 0.029571506 0.95160701 0.45
500000 303.60879 183.79306 -8568.3539 -11347.609 0.050255275 0.91915729 0.45
505000 303.19721 -181.45226 -8614.403 -11389.891 0.32941264 0.57547725 0.45
510000 296.74554 -22.844257 -8659.5977 -11376.026 0.017555998 0.97098101 0.45
515000 304.94785 184.89151 -8657.5502 -11449.063 0.36892431 0.53857296 0.45
520000 297.55996 -618.66865 -8737.5039 -11461.388 0.0057510291 0.99039963 0.45
525000 301.79028 298.59479 -8629.0889 -11391.698 0.34316268 0.56235619 0.45
530000 309.73127 127.43322 -8551.5448 -11386.846 0.76278829 0.27817682 0.45
535000 296.10155 231.50902 -8700.9183 -11411.452 0.44398766 0.47485618 0.45
540000 299.71005 -102.1096 -8655.905 -11399.471 0.76085637 0.27907974 0.45
545000 300.14982 -206.19313 -8714.8486 -11462.44 0.22627441 0.68416793 0.45
550000 294.79885 -643.7432 -8605.2486 -11303.857 -0.057557071 1.1013603 0.45
555000 294.17638 -19.930168 -8726.0381 -11418.949 0.40954478 0.50309869 0.45
560000 297.03199 -369.45853 -8470.404 -11189.455 -0.6540448 2.9954437 0.45
565000 291.48707 -349.3956 -8714.1576 -11382.45 0.16175418 0.76236802 0.45
570000 310.66906 -63.356318 -8637.4971 -11481.383 0.025729917 0.95775884 0.45
575000 300.62447 -741.10788 -8620.5725 -11372.509 0.16003059 0.76457532 0.45
580000 303.7169 -69.625554 -8649.3106 -11429.556 0.13011667 0.80391862 0.45
585000 296.8583 22.033506 -8781.0388 -11498.5 0.05826221 0.9068948 0.45
590000 295.12104 251.36802 -8661.2354 -11362.793 0.0042041083 0.99297285 0.45
595000 291.91551 264.01646 -8784.286 -11456.5 -0.3176707 1.7037977 0.45
600000 299.51751 -425.6209 -8680.4016 -11422.205 0.063170047 0.89945954 0.45
605000 296.04489 -702.56187 -8648.8336 -11358.848 0.44150563 0.47683729 0.45
610000 293.08062 387.21018 -8636.9022 -11319.782 0.430424 0.48578377 0.45
615000 300.1062 -406.07366 -8651.5383 -11398.731 0.16393273 0.75958719 0.45
620000 304.45492 -717.77411 -8466.6335 -11253.634 0.14754207 0.78076073 0.45
625000 300.25467 394.44177 -8545.7468 -11294.298 -0.098814662 1.1802796 0.45
630000 301.25687 315.97468 -8555.4413 -11313.167 -0.30209606 1.6598626 0.45
635000 296.62552 -313.8236 -8661.4264 -11376.756 0.82351209 0.25123759 0.45
640000 300.49659 458.65236 -8648.2545 -11399.021 -0.2575 1.5402266 0.45
645000 299.08458 -40.905776 -8589.4621 -11327.303 0.07180479 0.88652576 0.45
650000 299.78807 286.71966 -8663.8862 -11408.166 -0.10586303 1.1943167 0.45
655000 300.2646 175.76273 -8685.9588 -11434.601 -0.4131303 1.9996722 0.45
660000 296.01304 69.482635 -8722.0849 -11431.808 0.65234529 0.33479341 0.45
665000 307.08179 -192.78965 -8554.9636 -11366.011 0.37228163 0.53554848 0.45
670000 298.81489 46.512873 -8651.3386 -11386.71 -0.34071772 1.7709545 0.45
675000 298.09695 -320.42123 -8744.4868 -11473.286 0.21787637 0.6938739 0.45
680000 291.73582 -346.08326 -8809.3602 -11479.93 0.35114775 0.55487414 0.45
685000 299.8583 -53.573198 -8742.9543 -11487.877 -0.032502983 1.056034 0.45
690000 299.56857 -129.53024 -8600.751 -11343.022 0.11604588 0.82311864 0.45
695000 287.63895 77.534045 -8889.5114 -11522.578 0.16150699 0.76268419 0.45
700000 294.71917 -187.77101 -8824.4116 -11522.291 0.33093056 0.57401387 0.45
705000 301.78978 -269.32554 -8594.7858 -11357.39 -0.098783804 1.1802185 0.45
710000 305.58313 -214.43945 -8518.1241 -11315.453 -0.03149037 1.0542418 0.45
715000 306.30354 -121.41526 -8617.5112 -11421.435 0.10640694 0.83653526 0.45
720000 304.94559 91.460869 -8587.9126 -11379.405 -0.4078455 1.982024 0.45
725000 295.36839 -505.69412 -8724.4826 -11428.305 0.71800645 0.29987744 0.45
730000 298.79826 -9.9970862 -8716.023 -11451.242 0.59730469 0.36717499 0.45
735000 300.95964 286.58072 -8641.7744 -11396.779 0.23910326 0.66960256 0.45
740000 298.32007 -198.81619 -8685.7142 -11416.556 0.16840724 0.75390743 0.45
745000 296.06461 157.22083 -8605.3591 -11315.555 0.3149783 0.58958082 0.45
750000 297.27956 -277.36948 -8673.9548 -11395.272 0.058965185 0.90582605 0.45
755000 296.79569 203.4854 -8671.4835 -11388.371 0.097863507 0.84860972 0.45
760000 296.34981 -296.05791 -8699.7009 -11412.507 0.34644945 0.55926433 0.45
765000 302.19536 -657.32604 -8674.9726 -11441.289 -0.25940717 1.5451618 0.45
770000 301.91884 -775.45423 -8695.1619 -11458.947 -0.12199652 1.227079 0.45
775000 299.9563 -211.10367 -8637.8471 -11383.667 0.3478892 0.55791532 0.45
780000 296.00862 -396.64708 -8721.8097 -11431.493 0.25358512 0.65353267 0.45
785000 295.12431 -24.44772 -8734.6065 -11436.194 -0.19904079 1.396362 0.45
790000 308.18585 -171.55104 -8659.2474 -11480.402 0.30853408 0.59598847 0.45
795000 296.45675 -137.73831 -8648.3419 -11362.127 -0.32469954 1.7240046 0.45
800000 301.11214 53.405034 -8663.3832 -11419.784 0.1323728 0.800882 0.45
805000 305.74305 -320.69662 -8642.7722 -11441.565 0.15136393 0.77577146 0.45
810000 305.37725 -264.53003 -8671.4307 -11466.875 0.3113551 0.59317494 0.45
815000 304.38239 -240.94118 -8474.7091 -11261.046 -0.080564405 1.1446952 0.45
820000 296.05915 -369.13085 -8698.3399 -11408.485 -0.028085872 1.0482385 0.45
825000 299.79549 123.66824 -8712.0882 -11456.436 -0.36082461 1.8317026 0.45
830000 296.0201 231.08408 -8726.975 -11436.763 -0.22224484 1.4517833 0.45
835000 294.90197 -293.4635 -8750.8202 -11450.373 -0.13935283 1.2633285 0.45
840000 301.79184 -18.424101 -8689.643 -11452.266 0.19065717 0.72628873 0.45
845000 303.63406 232.88156 -8607.7816 -11387.268 0.16521847 0.75795075 0.45
850000 300.78823 -301.92537 -8697.521 -11450.957 0.043047914 0.93033698 0.45
855000 300.26171 -407.09613 -8617.7866 -11366.403 0.30989277 0.59463173 0.45
860000 303.77064 192.13208 -8630.0944 -11410.831 0.44012319 0.47794432 0.45
865000 300.12867 323.6738 -8735.2213 -11482.619 0.098660075 0.8474766 0.45
870000 299.40232 -213.89349 -8642.3645 -11383.114 0.1478115 0.78040795 0.45
875000 300.46794 23.703316 -8624.9835 -11375.487 0.021260277 0.96496648 0.45
880000 298.40697 20.053507 -8834.9602 -11566.598 0.25906036 0.647558 0.45
885000 299.89193 -56.830889 -8726.8039 -11472.035 -0.14632707 1.2781945 0.45
890000 297.49341 -718.63083 -8683.0987 -11406.373 0.017721028 0.97071226 0.45
895000 293.34825 -483.14011 -8698.5638 -11383.894 -0.34844876 1.7940698 0.45
900000 303.8984 71.405143 -8703.2466 -11485.153 -0.0040127852 1.0067537 0.45
905000 296.96955 99.337161 -8644.502 -11362.981 0.29986926 0.60471403 0.45
910000 294.13396 -276.63831 -8661.5829 -11354.105 -0.24102928 1.4982558 0.45
915000 303.26417 -43.876545 -8575.252 -11351.353 0.013417579 0.97774479 0.45
920000 305.27911 -346.57544 -8582.8329 -11377.379 -0.20901843 1.4199288 0.45
925000 307.27639 482.10278 -8628.8226 -11441.652 -0.26779925 1.5670667 0.45
930000 305.11633 324.47709 -8579.3587 -11372.414 0.68253083 0.31826378 0.45
935000 300.11916 -9.8766723 -8780.2986 -11527.61 -0.13402188 1.2520821 0.45
940000 295.78408 -67.021801 -8735.3706 -11442.998 0.46658388 0.45719462 0.45
945000 300.211 161.55245 -8703.5002 -11451.652 0.062310593 0.90075717 0.45
950000 302.51856 -145.81508 -8539.9241 -11309.199 0.019344642 0.96807218 0.45
955000 297.23872 14.140867 -8682.9686 -11403.912 -0.30285941 1.6619893 0.45
960000 296.19195 158.66375 -8772.8876 -11484.249 0.3298895 0.57501712 0.45
965000 293.56726 -302.80176 -8807.9639 -11495.298 0.16057514 0.76387726 0.45
970000 307.76289 234.82705 -8569.0805 -11386.363 0.40582434 0.50624817 0.45
975000 302.4391 -372.66289 -8569.3448 -11337.893 1.1335506 0.14935733 0.45
980000 292.59861 191.50447 -8796.4307 -11474.898 0.82080866 0.25237947 0.45
985000 301.61407 97.625218 -8720.889 -11481.885 0.12835918 0.80629208 0.45
990000 303.38224 -380.86284 -8666.6015 -11443.783 0.29943962 0.60514999 0.45
995000 299.25364 -139.10643 -8631.5948 -11370.983 0.033070141 0.94603876 0.45
1000000 295.67561 -191.48596 -8566.021 -11272.656 0.34200535 0.56344895 0.45
1005000 304.80384 39.665031 -8603.3665 -11393.562 0.75244137 0.28304697 0.45
1010000 298.87735 -181.49155 -8699.7359 -11435.679 0.23524427 0.67395098 0.45
1015000 289.92007 -182.58369 -8652.9669 -11306.915 -0.61857139 2.8224052 0.45
1020000 300.13923 106.07213 -8618.1949 -11365.69 0.15241071 0.77441051 0.45
1025000 307.39589 -312.91975 -8613.3088 -11427.232 0.44069144 0.47748897 0.45
1030000 298.41225 441.04111 -8696.1929 -11427.879 -0.1456028 1.2766425 0.45
1035000 306.71758 -95.739338 -8471.0526 -11278.766 0.69089513 0.31382964 0.45
1040000 302.24132 -415.80447 -8608.0891 -11374.827 0.0090309238 0.98496572 0.45
1045000 305.58772 -150.58406 -8563.9959 -11361.367 0.062478239 0.90050391 0.45
1050000 303.60025 21.785837 -8623.6613 -11402.839 0.18503623 0.73316896 0.45
1055000 293.38734 613.83617 -8606.7635 -11292.451 -0.2195833 1.4453164 0.45
1060000 305.11418 -29.208186 -8589.4319 -11382.468 -0.095889014 1.1745016 0.45
1065000 294.13176 470.07703 -8724.8028 -11417.305 0.28934127 0.61548789 0.45
1070000 309.64471 -634.00961 -8534.3395 -11368.848 -0.048186981 1.0841851 0.45
1075000 300.56742 -209.29645 -8615.1904 -11366.605 -0.26336339 1.5554498 0.45
1080000 297.94855 218.48741 -8697.7569 -11425.198 -0.0401787 1.0697186 0.45
1085000 308.40523 -177.4101 -8681.0198 -11504.182 0.32537753 0.57938558 0.45
1090000 295.63403 117.27818 -8609.1285 -11315.382 0.27576906 0.62966079 0.45
1095000 300.09566 635.58958 -8552.5989 -11299.695 -0.056458656 1.0993329 0.45
1100000 300.68272 375.84619 -8709.6822 -11462.152 0.28519281 0.61978578 0.45
1105000 303.34279 -980.64631 -8585.6781 -11362.499 0.34352221 0.56201715 0.45
1110000 304.45088 84.082657 -8606.3018 -11393.266 0.019454666 0.96789353 0.45
1115000 296.03894 543.18998 -8568.9408 -11278.901 0.38977572 0.5200614 0.45
1120000 307.38628 -200.46817 -8619.8059 -11433.641 -0.21765351 1.4406454 0.45
1125000 303.36463 -96.322086 -8596.6485 -11373.669 -0.050201944 1.0878558 0.45
1130000 295.03081 19.554539 -8820.2191 -11520.951 0.24816885 0.65949722 0.45
1135000 297.2534 -452.18389 -8614.3296 -11335.407 0.47102824 0.45379893 0.45
1140000 298.03519 -102.40026 -8663.5539 -11391.788 0.42591169 0.48947459 0.45
1145000 295.38879 -444.99161 -8629.1445 -11333.153 0.39655669 0.51417955 0.45
1150000 303.8409 -236.98919 -8595.3972 -11376.777 0.64097267 0.34124136 0.45
1155000 306.07517 -215.50846 -8588.4969 -11390.33 0.036055871 0.94131261 0.45
1160000 294.9636 -931.69596 -8675.0022 -11375.119 0.19752892 0.71796511 0.45
1165000 294.72276 -192.71028 -8637.3451 -11335.257 -0.00048188528 1.0008086 0.45
1170000 301.23614 -213.88646 -8482.7135 -11240.25 0.71933969 0.29920755 0.45
1175000 300.44993 375.9896 -8633.2248 -11383.564 0.30232015 0.60223308 0.45
1180000 300.16377 118.10917 -8654.5233 -11402.243 0.12296714 0.81361774 0.45
1185000 293.70358 210.30955 -8646.4181 -11335.001 0.30210616 0.6024493 0.45
1190000 304.75915 -651.08053 -8575.2958 -11365.082 -0.02759447 1.0473748 0.45
1195000 297.70391 95.378065 -8731.319 -11456.521 0.52250206 0.41626089 0.45
1200000 293.90642 -733.78695 -8697.185 -11387.624 0.13079675 0.80300207 0.45
1205000 303.05224 -511.38179 -8632.6207 -11406.781 -0.20143249 1.4019752 0.45
1210000 293.80664 245.08881 -8756.1441 -11445.67 0.37969913 0.52892642 0.45
1215000 296.59811 308.46776 -8624.2865 -11339.366 0.14440905 0.78487467 0.45
1220000 303.74266 188.84272 -8605.9211 -11386.402 -0.092746405 1.1683266 0.45
1225000 299.9013 -466.73438 -8576.203 -11321.52 0.27417371 0.63134804 0.45
1230000 299.66611 -174.43092 -8604.5105 -11347.674 0.47991062 0.44708777 0.45
1235000 295.89844 394.40733 -8789.3714 -11498.046 0.088629157 0.86185673 0.45
1240000 298.78384 419.34789 -8688.5635 -11423.651 0.22218371 0.68887865 0.45
1245000 299.90866 183.59906 -8698.2559 -11443.64 1.1590193 0.143111 0.45
1250000 296.01051 196.22426 -8831.5506 -11541.251 -0.04226137 1.0734621 0.45
1255000 292.09199 -163.44863 -8711.8649 -11385.695 0.57648767 0.38022263 0.45
1260000 298.83471 -194.96215 -8646.8698 -11382.423 0.10966149 0.83198091 0.45
1265000 302.24158 163.34413 -8653.0984 -11419.838 0.51878502 0.41886437 0.45
1270000 298.29186 -765.77064 -8697.9423 -11428.526 -0.40185995 1.9622238 0.45
1275000 300.55952 -162.42423 -8614.8996 -11366.242 -0.43706076 2.0815736 0.45
1280000 294.52892 156.17026 -8718.8337 -11414.971 0.010263439 0.98293149 0.45
1285000 301.40565 -778.44393 -8670.527 -11429.615 0.025111338 0.95875312 0.45
1290000 294.20057 -918.07774 -8683.4672 -11376.599 0.046386022 0.92514227 0.45
1295000 301.09196 -665.75324 -8687.0149 -11443.231 0.11169829 0.82914327 0.45
1300000 294.16167 -297.06724 -8708.7055 -11401.481 0.11765896 0.82089447 0.45
1305000 303.07886 -538.32897 -8514.6586 -11289.063 -0.047420749 1.0827925 0.45
1310000 302.36674 -40.952458 -8536.8784 -11304.764 -0.42539639 2.0412418 0.45
1315000 302.05477 -60.391628 -8662.9591 -11427.989 0.13452485 0.79799615 0.45
1320000 303.48158 71.63406 -8661.3057 -11439.397 -0.039130791 1.0678399 0.45
1325000 296.35737 -261.05768 -8561.6568 -11274.532 0.44670407 0.47269742 0.45
1330000 296.29207 -147.71061 -8543.8084 -11256.086 0.2909439 0.61383553 0.45
1335000 301.48737 453.77169 -8648.236 -11408.072 0.078354877 0.87683873 0.45
1340000 300.90975 -596.76946 -8621.8298 -11376.378 0.49429189 0.43643168 0.45
1345000 295.08431 -540.90158 -8694.8895 -11396.111 0.17025999 0.75156807 0.45
1350000 296.63006 -197.97304 -8632.9441 -11348.316 -0.29504955 1.6403589 0.45
1355000 305.25857 -242.97453 -8473.9923 -11268.35 0.069838933 0.88945392 0.45
1360000 296.22833 -151.24398 -8660.529 -11372.223 -0.28031505 1.6003133 0.45
1365000 301.25457 -383.71973 -8610.3716 -11368.076 -0.18330657 1.3599906 0.45
1370000 300.8142 -179.49364 -8641.5538 -11395.227 0.23629239 0.67276715 0.45
1375000 307.62118 -82.315057 -8464.9289 -11280.914 0.024560511 0.95963938 0.45
1380000 303.12816 -335.58742 -8512.0211 -11286.877 0.30238814 0.60216441 0.45
1385000 304.36118 711.2159 -8577.0597 -11363.203 0.34444857 0.56114453 0.45
1390000 294.15072 406.74931 -8678.8526 -11371.528 0.29195829 0.61279196 0.45
1395000 300.50629 -164.22554 -8592.1543 -11343.009 0.098759052 0.84733591 0.45
1400000 297.37345 -98.001104 -8741.5121 -11463.689 0.27444766 0.63105799 0.45
1405000 294.17572 -86.526127 -8712.3447 -11405.249 0.4297415 0.48634023 0.45
1410000 310.48104 141.84417 -8647.4854 -11489.65 0.86645808 0.23377559 0.45
1415000 310.06801 -433.29574 -8486.7744 -11325.158 -0.21510676 1.4345042 0.45
1420000 303.98547 -69.701496 -8551.8036 -11334.507 0.16419779 0.75924955 0.45
1425000 301.40096 -115.67827 -8639.4818 -11398.527 0.20161321 0.71306316 0.45
1430000 299.1258 -79.769416 -8721.6844 -11459.902 0.36298014 0.54396978 0.45
1435000 298.45349 180.92871 -8700.7025 -11432.766 0.43843749 0.47929766 0.45
1440000 299.14006 146.72026 -8675.5643 -11413.913 0.50244279 0.43050527 0.45
1445000 299.98035 -404.81666 -8725.6961 -11471.737 0.49995597 0.43230482 0.45
1450000 295.10222 59.166328 -8728.5327 -11429.918 0.04154017 0.93269286 0.45
1455000 292.52514 144.30376 -8743.1245 -11420.919 0.04910241 0.92093649 0.45
1460000 303.68948 -264.34132 -8631.6334 -11411.627 0.23528019 0.67391039 0.45
1465000 302.97467 98.874471 -8689.2883 -11462.739 0.21805801 0.69366252 0.45
1470000 294.50716 133.30708 -8625.4721 -11321.411 0.98143982 0.19276882 0.45
1475000 302.04729 -120.74445 -8637.7677 -11402.729 0.4707242 0.45403042 0.45
1480000 305.16876 -436.598 -8614.8793 -11408.415 0.27111226 0.63459852 0.45
1485000 297.20205 -166.62152 -8598.691 -11319.299 -0.24681532 1.5128679 0.45
1490000 299.73617 -126.47006 -8649.4834 -11393.289 0.47833671 0.44826968 0.45
1495000 295.64416 481.3869 -8697.4378 -11403.784 0.1128182 0.82758717 0.45
1500000 301.34876 -64.948239 -8570.0291 -11328.596 0.10524924 0.83816132 0.45
1505000 297.45753 538.92423 -8678.9073 -11401.854 0.15764246 0.76764423 0.45
1510000 304.47978 -609.79308 -8491.9652 -11279.194 0.40940159 0.50321953 0.45
1515000 301.26466 -130.2245 -8572.0691 -11329.866 0.89811777 0.22168463 0.45
1520000 306.33064 472.83128 -8553.0557 -11357.227 -0.3949103 1.9394824 0.45
1525000 303.77309 446.96086 -8658.8797 -11439.639 0.23907939 0.66962936 0.45
1530000 305.94257 -462.96121 -8683.4501 -11484.069 -0.29365623 1.6365296 0.45
1535000 296.45268 -725.6647 -8564.4464 -11278.194 0.031785638 0.94807932 0.45
1540000 297.90338 -418.20316 -8566.3092 -11293.337 0.50491901 0.42872083 0.45
1545000 304.3796 -281.11491 -8571.3965 -11357.708 0.26286914 0.64343405 0.45
1550000 296.71481 -62.772449 -8680.9078 -11397.055 0.15669974 0.76885909 0.45
1555000 297.50225 148.74592 -8754.0913 -11477.447 0.14286636 0.78690833 0.45
1560000 300.52393 373.85791 -8638.4601 -11389.477 0.089292836 0.8608978 0.45
1565000 295.18741 -197.82529 -8603.6291 -11305.795 0.36113621 0.54565489 0.45
1570000 295.50662 -297.43989 -8727.7936 -11432.881 0.24895806 0.65862474 0.45
1575000 306.12787 745.92559 -8609.3706 -11411.686 0.42705392 0.48853767 0.45
1580000 300.84367 544.00229 -8635.6029 -11389.546 -0.20268104 1.4049145 0.45
1585000 293.01964 208.25986 -8624.1146 -11306.436 -0.013645123 1.0231522 0.45
1590000 304.09 110.80761 -8602.177 -11385.837 -0.39136115 1.9279703 0.45
1595000 289.74205 -521.57012 -8666.417 -11318.735 0.30601242 0.59851474 0.45
1600000 297.3494 368.04946 -8684.986 -11406.943 0.079346518 0.87538143 0.45
1605000 301.19957 -293.44562 -8521.9202 -11279.121 0.49408391 0.43658396 0.45
1610000 299.66627 -592.72965 -8750.1489 -11493.314 -0.20726596 1.415761 0.45
1615000 301.32181 329.96166 -8575.077 -11333.397 0.21514479 0.69706049 0.45
1620000 297.46259 -575.7077 -8604.3396 -11327.332 0.051950054 0.91654801 0.45
1625000 301.143 -578.27016 -8622.6936 -11379.377 0.33929754 0.566014 0.45
1630000 301.9449 119.02272 -8744.8752 -11508.899 0.25690123 0.64990753 0.45
1635000 292.31769 -256.96526 -8729.3974 -11405.293 0.2041501 0.71003527 0.45
1640000 305.17316 -224.04815 -8619.2426 -11412.818 0.61612842 0.35576261 0.45
1645000 299.82547 -453.0871 -8601.8345 -11346.457 0.44515417 0.47392794 0.45
1650000 300.70213 -184.15313 -8604.5269 -11357.175 0.40413562 0.50768423 0.45
1655000 298.34797 241.12842 -8736.9407 -11468.038 0.2219039 0.68920205 0.45
1660000 305.65546 522.2866 -8702.2765 -11500.267 -0.093142651 1.1691034 0.45
1665000 296.92311 -22.202256 -8648.9808 -11367.035 0.21695848 0.69494306 0.45
1670000 293.71721 -216.98365 -8726.8596 -11415.567 0.062675713 0.90020567 0.45
1675000 302.06866 69.039243 -8665.567 -11430.724 0.0012561112 0.99789522 0.45
1680000 292.51483 -764.83087 -8759.3069 -11437.007 0.0022259364 0.99627318 0.45
1685000 300.70748 -239.98915 -8682.5295 -11435.226 0.21854685 0.69309397 0.45
1690000 303.31754 36.443117 -8554.7105 -11331.3 0.18904617 0.72825402 0.45
1695000 300.96783 -365.40002 -8606.9996 -11362.08 0.21317894 0.69936284 0.45
1700000 301.78038 -460.56572 -8703.0763 -11465.594 -0.074311844 1.1327524 0.45
1705000 299.08328 224.74817 -8680.6969 -11418.526 0.14954235 0.77814547 0.45
1710000 303.24064 298.73582 -8637.4191 -11413.304 -0.11628651 1.2153822 0.45
1715000 299.1988 535.86954 -8722.2318 -11461.118 0.51289768 0.42302132 0.45
1720000 300.88716 -11.654893 -8624.0905 -11378.432 0.62281958 0.35179195 0.45
1725000 306.59581 -286.69581 -8574.7957 -11381.394 0.3964476 0.51427364 0.45
1730000 302.58784 590.55523 -8670.9964 -11440.906 -0.28655798 1.6171597 0.45
1735000 295.17235 -60.036989 -8631.671 -11333.699 0.72231294 0.29771902 0.45
1740000 290.06228 -254.79282 -8715.6619 -11370.912 0.35583392 0.55052961 0.45
1745000 306.47487 418.58552 -8590.4226 -11395.914 -0.04975774 1.0870455 0.45
1750000 296.74674 -73.367187 -8727.0183 -11443.458 -0.27066543 1.5746188 0.45
1755000 299.03541 551.77198 -8712.6905 -11450.081 -0.35865936 1.8250619 0.45
1760000 288.98684 -380.17132 -8775.8546 -11421.26 -0.17754854 1.3469184 0.45
1765000 300.76459 -662.80282 -8671.5414 -11424.761 0.078118597 0.87718632 0.45
1770000 301.47287 -498.34628 -8675.582 -11435.285 0.57886218 0.37871122 0.45
1775000 307.18565 -70.676548 -8554.9531 -11366.951 0.38766498 0.52190597 0.45
1780000 302.58164 -329.49774 -8638.9781 -11408.831 0.53149245 0.41003059 0.45
1785000 307.4086 294.59322 -8586.4793 -11400.518 0.34963097 0.55628768 0.45
1790000 295.81491 -366.57154 -8756.8143 -11464.724 0.61653346 0.35552098 0.45
1795000 296.46712 18.92361 -8640.9928 -11354.873 0.21158778 0.70123194 0.45
1800000 290.9851 -805.74081 -8636.1049 -11299.802 0.36361854 0.54338759 0.45
1805000 291.6313 -58.207903 -8707.0768 -11376.689 0.2659117 0.6401586 0.45
1810000 299.14324 327.45026 -8613.3385 -11351.716 0.58264334 0.37631684 0.45
1815000 295.3441 37.594139 -8747.5577 -11451.158 0.10312363 0.84115511 0.45
1820000 297.19616 596.87014 -8601.4315 -11321.985 0.11690702 0.82193051 0.45
1825000 305.23709 -229.45704 -8586.9328 -11381.094 -0.070794327 1.1260885 0.45
1830000 308.48265 -50.225625 -8595.8609 -11419.732 0.28577292 0.61918297 0.45
1835000 301.67215 30.600339 -8561.9509 -11323.478 0.67464985 0.32249901 0.45
1840000 297.44022 -46.915689 -8760.5329 -11483.321 0.20308399 0.71130615 0.45
1845000 294.56439 121.7989 -8819.2766 -11515.739 -0.13859762 1.2617292 0.45
1850000 303.92475 63.511256 -8655.7131 -11437.861 -0.064617898 1.1144821 0.45
1855000 302.36347 -403.0262 -8663.1963 -11431.052 0.63223295 0.34628081 0.45
1860000 292.88227 124.53259 -8622.4528 -11303.517 0.21782313 0.69393587 0.45
1865000 299.49141 1.3922328 -8592.8243 -11334.389 0.024359522 0.95996296 0.45
1870000 295.36403 -1.848842 -8534.7607 -11238.543 0.53331666 0.40877784 0.45
1875000 299.5254 -303.35635 -8642.4199 -11384.296 0.12049946 0.8169925 0.45
1880000 302.15027 -233.4192 -8607.1984 -11373.102 0.42967343 0.48639576 0.45
1885000 293.78387 -312.31798 -8576.6303 -11265.948 0.62050206 0.35316217 0.45
1890000 296.33987 227.42925 -8675.0988 -11387.814 -0.2387251 1.4924762 0.45
1895000 296.4116 -297.41585 -8695.6693 -11409.041 0.1899345 0.72716967 0.45
1900000 305.04631 -744.8928 -8495.6073 -11288.022 -0.092917858 1.1686627 0.45
1905000 299.13767 -233.05542 -8771.8955 -11510.222 -0.053515786 1.0939196 0.45
1910000 301.18529 391.32364 -8594.238 -11351.309 0.17761387 0.74235415 0.45
1915000 304.53139 -205.26743 -8615.1863 -11402.887 -0.65441918 2.9973254 0.45
1920000 304.46794 75.506851 -8696.0461 -11483.166 0.28757039 0.6173189 0.45
1925000 295.83229 -40.226799 -8677.0683 -11385.137 0.34338584 0.56214572 0.45
1930000 298.91694 72.305481 -8662.7622 -11399.068 -0.45255095 2.1363683 0.45
1935000 297.28693 -277.78411 -8678.223 -11399.608 0.32165864 0.58301111 0.45
1940000 295.22194 -153.48885 -8737.0529 -11439.534 0.47753767 0.4488709 0.45
1945000 298.41366 0.98105216 -8615.733 -11347.432 0.061208942 0.90242323 0.45
1950000 298.47932 -461.39566 -8587.8993 -11320.199 0.41883297 0.49532116 0.45
1955000 293.30456 -530.72887 -8712.242 -11397.172 -0.052983042 1.0929425 0.45
1960000 307.27812 -609.68084 -8563.1295 -11375.974 0.10863685 0.83341209 0.45
1965000 309.21876 -661.65884 -8619.5376 -11450.147 -0.00074060514 1.0012431 0.45
1970000 294.16474 130.9219 -8662.5966 -11355.4 -0.048761848 1.0852311 0.45
1975000 293.87023 -652.42226 -8587.2681 -11277.376 -0.42701916 2.0468057 0.45
1980000 302.66906 -396.94893 -8576.3291 -11346.982 0.55938449 0.39128874 0.45
1985000 304.00863 167.22102 -8525.9503 -11308.866 -0.12417188 1.2315647 0.45
1990000 299.53376 -234.11494 -8528.8821 -11270.834 0.58392743 0.37550715 0.45
1995000 296.20959 -99.022727 -8599.3854 -11310.908 0.10920765 0.83261451 0.45
2000000 307.40367 -179.44965 -8545.6064 -11359.6 0.485016 0.44327537 0.45
Loop time of 4787.7 on 1 procs for 2000000 steps with 3072 atoms
Performance: 36.092 ns/day, 0.665 hours/ns, 417.737 timesteps/s
95.4% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 1015.1 | 1015.1 | 1015.1 | 0.0 | 21.20
Bond | 121.19 | 121.19 | 121.19 | 0.0 | 2.53
Kspace | 3455.1 | 3455.1 | 3455.1 | 0.0 | 72.17
Neigh | 8.7475 | 8.7475 | 8.7475 | 0.0 | 0.18
Comm | 58.679 | 58.679 | 58.679 | 0.0 | 1.23
Output | 0.60209 | 0.60209 | 0.60209 | 0.0 | 0.01
Modify | 81.328 | 81.328 | 81.328 | 0.0 | 1.70
Other | | 46.88 | | | 0.98
Nlocal: 3072 ave 3072 max 3072 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 8395 ave 8395 max 8395 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = -1
Ave neighs/atom = -0.00032552083
Ave special neighs/atom = 2
Neighbor list builds = 93794
Dangerous builds = 0
Total wall time: 1:31:34

View File

@ -0,0 +1,22 @@
# Time-averaged data for fix FEP
# TimeStep c_TA[1] c_TA[2] c_TA[3] v_gamma_v
100000 0.168677 0.863546 0.45 65.7437
200000 0.169722 0.861354 0.45 66.6859
300000 0.165507 0.868407 0.45 63.1899
400000 0.162311 0.875704 0.45 60.7859
500000 0.165468 0.872729 0.45 63.2053
600000 0.165267 0.873825 0.45 63.1828
700000 0.167824 0.869356 0.45 65.1722
800000 0.170332 0.866538 0.45 67.0749
900000 0.164396 0.875043 0.45 62.4639
1000000 0.164738 0.87663 0.45 62.5659
1100000 0.168395 0.870496 0.45 65.415
1200000 0.170147 0.867104 0.45 66.7132
1300000 0.170509 0.866709 0.45 66.9833
1400000 0.171152 0.865294 0.45 67.5598
1500000 0.172363 0.863433 0.45 68.547
1600000 0.171538 0.864062 0.45 67.8359
1700000 0.171662 0.864029 0.45 67.9145
1800000 0.170202 0.866069 0.45 66.7697
1900000 0.171403 0.864162 0.45 67.6313
2000000 0.170962 0.864753 0.45 67.2314

View File

@ -118,6 +118,7 @@ ttm: two-temeperature model examples
vashishta: models using the Vashishta potential
voronoi: Voronoi tesselation via compute voronoi/atom command
wall: use of reflective walls with different stochastic models
yaml: demonstrates use of yaml thermo and dump styles
Here is how you might run and visualize one of the sample problems:

37
examples/yaml/in.yaml Normal file
View File

@ -0,0 +1,37 @@
# 3d Lennard-Jones melt
variable x index 1
variable y index 1
variable z index 1
variable xx equal 20*$x
variable yy equal 20*$y
variable zz equal 20*$z
units lj
atom_style atomic
lattice fcc 0.8442
region box block 0 ${xx} 0 ${yy} 0 ${zz}
create_box 1 box
create_atoms 1 box
mass 1 1.0
velocity all create 1.44 87287 loop geom
pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0 2.5
neighbor 0.3 bin
neigh_modify delay 0 every 20 check no
fix 1 all nve
thermo_style yaml
thermo 10
dump 1 all yaml 25 dump.yaml id type x y z ix iy iz vx vy vz
dump_modify 1 sort id thermo yes units yes time yes format 1 %5d format float "% 12.8e" format int %2d
run 100
run 100

View File

@ -0,0 +1,151 @@
LAMMPS (24 Mar 2022)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# 3d Lennard-Jones melt
variable x index 1
variable y index 1
variable z index 1
variable xx equal 20*$x
variable xx equal 20*1
variable yy equal 20*$y
variable yy equal 20*1
variable zz equal 20*$z
variable zz equal 20*1
units lj
atom_style atomic
lattice fcc 0.8442
Lattice spacing in x,y,z = 1.6795962 1.6795962 1.6795962
region box block 0 ${xx} 0 ${yy} 0 ${zz}
region box block 0 20 0 ${yy} 0 ${zz}
region box block 0 20 0 20 0 ${zz}
region box block 0 20 0 20 0 20
create_box 1 box
Created orthogonal box = (0 0 0) to (33.591924 33.591924 33.591924)
1 by 1 by 1 MPI processor grid
create_atoms 1 box
Created 32000 atoms
using lattice units in orthogonal box = (0 0 0) to (33.591924 33.591924 33.591924)
create_atoms CPU = 0.003 seconds
mass 1 1.0
velocity all create 1.44 87287 loop geom
pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0 2.5
neighbor 0.3 bin
neigh_modify delay 0 every 20 check no
fix 1 all nve
thermo_style yaml
thermo 10
dump 1 all yaml 25 dump.yaml id type x y z ix iy iz vx vy vz
dump_modify 1 sort id thermo yes units yes time yes format 1 %5d format float "% 12.8e" format int %2d
run 100
generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 20 steps, delay 0 steps, check no
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 2.8
ghost atom cutoff = 2.8
binsize = 1.4, bins = 24 24 24
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair lj/cut, 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) = 20.56 | 20.56 | 20.56 Mbytes
---
keywords: [Step, Temp, KinEng, PotEng, E_bond, E_angle, E_dihed, E_impro, E_vdwl, E_coul, E_long, Press, ]
data:
- [0, 1.44000000000001, 2.15993250000001, -6.77336805323422, 0, 0, 0, 0, -6.77336805323422, 0, 0, -5.01970725908556, ]
- [10, 1.12539487029313, 1.68803955255514, -6.30005271976029, 0, 0, 0, 0, -6.30005271976029, 0, 0, -2.55968522600129, ]
- [20, 0.625793798302192, 0.938661363368992, -5.55655653922756, 0, 0, 0, 0, -5.55655653922756, 0, 0, 0.973517658007722, ]
- [30, 0.745927295413064, 1.11885597777762, -5.73951278150759, 0, 0, 0, 0, -5.73951278150759, 0, 0, 0.339284096694852, ]
- [40, 0.731026217827733, 1.09650505988764, -5.71764564663628, 0, 0, 0, 0, -5.71764564663628, 0, 0, 0.388973418756238, ]
- [50, 0.740091517740786, 1.11010258482128, -5.73150426762886, 0, 0, 0, 0, -5.73150426762886, 0, 0, 0.335273324523691, ]
- [60, 0.750500641591031, 1.12571578266897, -5.74713299283555, 0, 0, 0, 0, -5.74713299283555, 0, 0, 0.26343139026926, ]
- [70, 0.755436366857812, 1.13311913920702, -5.75480059117447, 0, 0, 0, 0, -5.75480059117447, 0, 0, 0.224276619217515, ]
- [80, 0.759974280364828, 1.13992579675285, -5.76187162670983, 0, 0, 0, 0, -5.76187162670983, 0, 0, 0.191626237124102, ]
- [90, 0.760464250735042, 1.14066072934081, -5.76280209529731, 0, 0, 0, 0, -5.76280209529731, 0, 0, 0.189478083345243, ]
- [100, 0.757453103239936, 1.13614414924569, -5.75850548601596, 0, 0, 0, 0, -5.75850548601596, 0, 0, 0.207261053624723, ]
...
Loop time of 1.89046 on 1 procs for 100 steps with 32000 atoms
Performance: 22851.622 tau/day, 52.897 timesteps/s
99.6% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 1.2896 | 1.2896 | 1.2896 | 0.0 | 68.22
Neigh | 0.17687 | 0.17687 | 0.17687 | 0.0 | 9.36
Comm | 0.014543 | 0.014543 | 0.014543 | 0.0 | 0.77
Output | 0.37678 | 0.37678 | 0.37678 | 0.0 | 19.93
Modify | 0.028638 | 0.028638 | 0.028638 | 0.0 | 1.51
Other | | 0.003975 | | | 0.21
Nlocal: 32000 ave 32000 max 32000 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 19657 ave 19657 max 19657 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 1.20283e+06 ave 1.20283e+06 max 1.20283e+06 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 1202833
Ave neighs/atom = 37.588531
Neighbor list builds = 5
Dangerous builds not checked
run 100
generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
Per MPI rank memory allocation (min/avg/max) = 20.57 | 20.57 | 20.57 Mbytes
---
keywords: [Step, Temp, KinEng, PotEng, E_bond, E_angle, E_dihed, E_impro, E_vdwl, E_coul, E_long, Press, ]
data:
- [100, 0.757453103239935, 1.13614414924569, -5.7585054860159, 0, 0, 0, 0, -5.7585054860159, 0, 0, 0.207261053624721, ]
- [110, 0.759322359337036, 1.13894794576996, -5.7614668389562, 0, 0, 0, 0, -5.7614668389562, 0, 0, 0.194314975399602, ]
- [120, 0.759372342462676, 1.13902291811546, -5.76149365656489, 0, 0, 0, 0, -5.76149365656489, 0, 0, 0.191600048851267, ]
- [130, 0.756833027516501, 1.13521406472659, -5.75777334823494, 0, 0, 0, 0, -5.75777334823494, 0, 0, 0.208792327853067, ]
- [140, 0.759725426691298, 1.13955252790757, -5.76208910746081, 0, 0, 0, 0, -5.76208910746081, 0, 0, 0.193895435346637, ]
- [150, 0.760545839455106, 1.14078310859643, -5.7633284876011, 0, 0, 0, 0, -5.7633284876011, 0, 0, 0.187959630462945, ]
- [160, 0.758404626168493, 1.13757138903589, -5.76023198892283, 0, 0, 0, 0, -5.76023198892283, 0, 0, 0.19692107984108, ]
- [170, 0.758880300638885, 1.13828487844424, -5.76103232235402, 0, 0, 0, 0, -5.76103232235402, 0, 0, 0.197653518549842, ]
- [180, 0.753691827878246, 1.13050241251294, -5.75304767384283, 0, 0, 0, 0, -5.75304767384283, 0, 0, 0.237041776410937, ]
- [190, 0.757361226563721, 1.13600633853809, -5.75852399133222, 0, 0, 0, 0, -5.75852399133222, 0, 0, 0.219529562657488, ]
- [200, 0.759531750132731, 1.13926202214831, -5.76188923485725, 0, 0, 0, 0, -5.76188923485725, 0, 0, 0.209105747192796, ]
...
Loop time of 1.93916 on 1 procs for 100 steps with 32000 atoms
Performance: 22277.687 tau/day, 51.569 timesteps/s
99.4% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 1.3292 | 1.3292 | 1.3292 | 0.0 | 68.55
Neigh | 0.18317 | 0.18317 | 0.18317 | 0.0 | 9.45
Comm | 0.013626 | 0.013626 | 0.013626 | 0.0 | 0.70
Output | 0.38206 | 0.38206 | 0.38206 | 0.0 | 19.70
Modify | 0.027034 | 0.027034 | 0.027034 | 0.0 | 1.39
Other | | 0.004028 | | | 0.21
Nlocal: 32000 ave 32000 max 32000 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 19570 ave 19570 max 19570 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 1.19982e+06 ave 1.19982e+06 max 1.19982e+06 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 1199821
Ave neighs/atom = 37.494406
Neighbor list builds = 5
Dangerous builds not checked
Total wall time: 0:00:04

View File

@ -28,6 +28,11 @@ HIP_HOST_INCLUDE += -I./
# path to hipcub
HIP_HOST_INCLUDE += -I$(HIP_PATH)/../include
ifeq (amd,$(HIP_PLATFORM))
# newer version of ROCm (5.1+) require c++14 for rocprim
HIP_OPTS += -std=c++14
endif
# use mpi
HIP_HOST_OPTS += -DMPI_GERYON -DUCL_NO_EXIT
# this settings should match LAMMPS Makefile

View File

@ -14,14 +14,19 @@
################################################################################
# LAMMPS output formats
# Written by Richard Berger <richard.berger@temple.edu>
# and Axel Kohlmeyer <akohlmey@gmail.com>
################################################################################
import re
import re, yaml
try:
from yaml import CSafeLoader as Loader, CSafeDumper as Dumper
except ImportError:
from yaml import SafeLoader as Loader, SafeDumper as Dumper
class LogFile:
"""Reads LAMMPS log files and extracts the thermo information
It supports both the default thermo output style (including custom) and multi.
It supports the line, multi, and yaml thermo output styles.
:param filename: path to log file
:type filename: str
@ -33,11 +38,13 @@ class LogFile:
STYLE_DEFAULT = 0
STYLE_MULTI = 1
STYLE_YAML = 2
def __init__(self, filename):
alpha = re.compile(r'[a-df-zA-DF-Z]') # except e or E for floating-point numbers
kvpairs = re.compile(r'([a-zA-Z_0-9]+)\s+=\s*([0-9\.eE\-]+)')
style = LogFile.STYLE_DEFAULT
yamllog = ""
self.runs = []
self.errors = []
with open(filename, 'rt') as f:
@ -46,14 +53,33 @@ class LogFile:
for line in f:
if "ERROR" in line or "exited on signal" in line:
self.errors.append(line)
elif line.startswith('Step '):
elif re.match(r'^ *Step ', line):
in_thermo = True
in_data_section = True
keys = line.split()
current_run = {}
for k in keys:
current_run[k] = []
elif line.startswith('---------------- Step'):
elif re.match(r'^(keywords:.*$|data:$|---$| - \[.*\]$)', line):
style = LogFile.STYLE_YAML
yamllog += line;
current_run = {}
elif re.match(r'^\.\.\.$', line):
thermo = yaml.load(yamllog, Loader=Loader)
for k in thermo['keywords']:
current_run[k] = []
for step in thermo['data']:
icol = 0
for k in thermo['keywords']:
current_run[k].append(step[icol])
icol += 1
self.runs.append(current_run)
yamllog = ""
elif re.match(r'^------* Step ', line):
if not in_thermo:
current_run = {'Step': [], 'CPU': []}
in_thermo = True
@ -64,28 +90,29 @@ class LogFile:
cpu = float(str_cpu.split('=')[1].split()[0])
current_run["Step"].append(step)
current_run["CPU"].append(cpu)
elif line.startswith('Loop time of'):
in_thermo = False
self.runs.append(current_run)
if style != LogFile.STYLE_YAML:
self.runs.append(current_run)
elif in_thermo and in_data_section:
if style == LogFile.STYLE_DEFAULT:
if alpha.search(line):
continue
for k, v in zip(keys, map(float, line.split())):
current_run[k].append(v)
elif style == LogFile.STYLE_MULTI:
if '=' not in line:
in_data_section = False
continue
for k,v in kvpairs.findall(line):
if k not in current_run:
current_run[k] = [float(v)]
else:
current_run[k].append(float(v))
class AvgChunkFile:
"""Reads files generated by fix ave/chunk

View File

@ -5,7 +5,14 @@
import sysconfig
import ctypes
library = sysconfig.get_config_vars('INSTSONAME')[0]
pylib = ctypes.CDLL(library)
try:
pylib = ctypes.CDLL(library)
except OSError as e:
if pylib.endswith(".a"):
pylib.strip(".a") + ".so"
pylib = ctypes.CDLL(library)
else:
raise e
if not pylib.Py_IsInitialized():
raise RuntimeError("This interpreter is not compatible with python-based mliap for LAMMPS.")
del sysconfig, ctypes, library, pylib

View File

@ -19,10 +19,75 @@ import numpy as np
import torch
def calc_n_params(model):
"""
Returns the sum of two decimal numbers in binary digits.
Parameters:
model (torch.nn.Module): Network model that maps descriptors to a per atom attribute
Returns:
n_params (int): Number of NN model parameters
"""
return sum(p.nelement() for p in model.parameters())
class TorchWrapper(torch.nn.Module):
def __init__(self, model,n_descriptors,n_elements,n_params=None,device=None,dtype=torch.float64):
"""
A class to wrap Modules to ensure lammps mliap compatability.
...
Attributes
----------
model : torch.nn.Module
Network model that maps descriptors to a per atom attribute
device : torch.nn.Module (None)
Accelerator device
dtype : torch.dtype (torch.float64)
Dtype to use on device
n_params : torch.nn.Module (None)
Number of NN model parameters
n_descriptors : int
Max number of per atom descriptors
n_elements : int
Max number of elements
Methods
-------
forward(descriptors, elems):
Feeds descriptors to network model to produce per atom energies and forces.
"""
def __init__(self, model, n_descriptors, n_elements, n_params=None, device=None, dtype=torch.float64):
"""
Constructs all the necessary attributes for the network module.
Parameters
----------
model : torch.nn.Module
Network model that maps descriptors to a per atom attribute
n_descriptors : int
Max number of per atom descriptors
n_elements : int
Max number of elements
n_params : torch.nn.Module (None)
Number of NN model parameters
device : torch.nn.Module (None)
Accelerator device
dtype : torch.dtype (torch.float64)
Dtype to use on device
"""
super().__init__()
self.model = model
@ -40,26 +105,222 @@ class TorchWrapper(torch.nn.Module):
self.n_descriptors = n_descriptors
self.n_elements = n_elements
def forward(self, elems, bispectrum, beta, energy):
def forward(self, elems, descriptors, beta, energy):
"""
Takes element types and descriptors calculated via lammps and
calculates the per atom energies and forces.
bispectrum = torch.from_numpy(bispectrum).to(dtype=self.dtype, device=self.device).requires_grad_(True)
Parameters
----------
elems : numpy.array
Per atom element types
descriptors : numpy.array
Per atom descriptors
beta : numpy.array
Expired beta array to be filled with new betas
energy : numpy.array
Expired per atom energy array to be filled with new per atom energy
(Note: This is a pointer to the lammps per atom energies)
Returns
-------
None
"""
descriptors = torch.from_numpy(descriptors).to(dtype=self.dtype, device=self.device).requires_grad_(True)
elems = torch.from_numpy(elems).to(dtype=torch.long, device=self.device) - 1
with torch.autograd.enable_grad():
energy_nn = self.model(bispectrum, elems)
energy_nn = self.model(descriptors, elems)
if energy_nn.ndim > 1:
energy_nn = energy_nn.flatten()
beta_nn = torch.autograd.grad(energy_nn.sum(), bispectrum)[0]
beta_nn = torch.autograd.grad(energy_nn.sum(), descriptors)[0]
beta[:] = beta_nn.detach().cpu().numpy().astype(np.float64)
energy[:] = energy_nn.detach().cpu().numpy().astype(np.float64)
class IgnoreElems(torch.nn.Module):
def __init__(self,subnet):
"""
A class to represent a NN model agnostic of element typing.
...
Attributes
----------
subnet : torch.nn.Module
Network model that maps descriptors to a per atom attribute
Methods
-------
forward(descriptors, elems):
Feeds descriptors to network model
"""
def __init__(self, subnet):
"""
Constructs all the necessary attributes for the network module.
Parameters
----------
subnet : torch.nn.Module
Network model that maps descriptors to a per atom attribute
"""
super().__init__()
self.subnet = subnet
def forward(self,bispectrum,elems):
return self.subnet(bispectrum)
def forward(self, descriptors, elems):
"""
Feeds descriptors to network model
Parameters
----------
descriptors : torch.tensor
Per atom descriptors
elems : torch.tensor
Per atom element types
Returns
-------
self.subnet(descriptors) : torch.tensor
Per atom attribute computed by the network model
"""
return self.subnet(descriptors)
class UnpackElems(torch.nn.Module):
"""
A class to represent a NN model pseudo-agnostic of element typing for
systems with multiple element typings.
...
Attributes
----------
subnet : torch.nn.Module
Network model that maps descriptors to a per atom attribute
n_types : int
Number of atom types used in training the NN model.
Methods
-------
forward(descriptors, elems):
Feeds descriptors to network model after adding zeros into
descriptor columns relating to different atom types
"""
def __init__(self, subnet, n_types):
"""
Constructs all the necessary attributes for the network module.
Parameters
----------
subnet : torch.nn.Module
Network model that maps descriptors to a per atom attribute.
n_types : int
Number of atom types used in training the NN model.
"""
super().__init__()
self.subnet = subnet
self.n_types = n_types
def forward(self, descriptors, elems):
"""
Feeds descriptors to network model after adding zeros into
descriptor columns relating to different atom types
Parameters
----------
descriptors : torch.tensor
Per atom descriptors
elems : torch.tensor
Per atom element types
Returns
-------
self.subnet(descriptors) : torch.tensor
Per atom attribute computed by the network model
"""
unpacked_descriptors = torch.zeros(elems.shape[0], self.n_types, descriptors.shape[1], dtype=torch.float64)
for i, ind in enumerate(elems):
unpacked_descriptors[i, ind, :] = descriptors[i]
return self.subnet(torch.reshape(unpacked_descriptors, (elems.shape[0], -1)), elems)
class ElemwiseModels(torch.nn.Module):
"""
A class to represent a NN model dependent on element typing.
...
Attributes
----------
subnets : list of torch.nn.Modules
Per element type network models that maps per element type
descriptors to a per atom attribute.
n_types : int
Number of atom types used in training the NN model.
Methods
-------
forward(descriptors, elems):
Feeds descriptors to network model after adding zeros into
descriptor columns relating to different atom types
"""
def __init__(self, subnets, n_types):
"""
Constructs all the necessary attributes for the network module.
Parameters
----------
subnets : list of torch.nn.Modules
Per element type network models that maps per element
type descriptors to a per atom attribute.
n_types : int
Number of atom types used in training the NN model.
"""
super().__init__()
self.subnets = subnets
self.n_types = n_types
def forward(self, descriptors, elems):
"""
Feeds descriptors to network model after adding zeros into
descriptor columns relating to different atom types
Parameters
----------
descriptors : torch.tensor
Per atom descriptors
elems : torch.tensor
Per atom element types
Returns
-------
self.subnets(descriptors) : torch.tensor
Per atom attribute computed by the network model
"""
per_atom_attributes = torch.zeros(elems.size[0])
given_elems, elem_indices = torch.unique(elems, return_inverse=True)
for i, elem in enumerate(given_elems):
per_atom_attribute[elem_indices == i] = self.subnets[elem](descriptors[elem_indices == i])
return per_atom_attributes

2
src/.gitignore vendored
View File

@ -460,6 +460,8 @@
/compute_fabric.h
/compute_fep.cpp
/compute_fep.h
/compute_fep_ta.cpp
/compute_fep_ta.h
/compute_force_tally.cpp
/compute_force_tally.h
/compute_gyration_shape.cpp

View File

@ -238,6 +238,9 @@ void DumpAtomADIOS::init_style()
columnNames = {"id", "type", "xs", "ys", "zs", "ix", "iy", "iz"};
}
for (int icol = 0; icol < (int)columnNames.size(); ++icol)
if (keyword_user[icol].size()) columnNames[icol] = keyword_user[icol];
// setup function ptrs
if (scale_flag == 1 && image_flag == 0 && domain->triclinic == 0)

View File

@ -214,6 +214,19 @@ void DumpCustomADIOS::write()
void DumpCustomADIOS::init_style()
{
// assemble column string from defaults and user values
delete[] columns;
std::string combined;
int icol = 0;
for (auto item : utils::split_words(columns_default)) {
if (combined.size()) combined += " ";
if (keyword_user[icol].size()) combined += keyword_user[icol];
else combined += item;
++icol;
}
columns = utils::strdup(combined);
// setup boundary string
domain->boundary_string(boundstr);

View File

@ -1,4 +1,3 @@
// clang-format off
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
@ -19,17 +18,17 @@
#include "compute_msd_nongauss.h"
#include "atom.h"
#include "update.h"
#include "group.h"
#include "domain.h"
#include "fix_store.h"
#include "group.h"
#include "update.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputeMSDNonGauss::ComputeMSDNonGauss(LAMMPS *lmp, int narg, char **arg) :
ComputeMSD(lmp, narg, arg)
ComputeMSD(lmp, narg, arg)
{
size_vector = 3;
}
@ -43,8 +42,10 @@ void ComputeMSDNonGauss::compute_vector()
// cm = current center of mass
double cm[3];
if (comflag) group->xcm(igroup,masstotal,cm);
else cm[0] = cm[1] = cm[2] = 0.0;
if (comflag)
group->xcm(igroup, masstotal, cm);
else
cm[0] = cm[1] = cm[2] = 0.0;
// dx,dy,dz = displacement of atom from original position
// original unwrapped position is stored by fix
@ -63,8 +64,8 @@ void ComputeMSDNonGauss::compute_vector()
double yprd = domain->yprd;
double zprd = domain->zprd;
double dx,dy,dz;
int xbox,ybox,zbox;
double dx, dy, dz;
int xbox, ybox, zbox;
double msd[2];
msd[0] = msd[1] = 0.0;
@ -75,11 +76,11 @@ void ComputeMSDNonGauss::compute_vector()
xbox = (image[i] & IMGMASK) - IMGMAX;
ybox = (image[i] >> IMGBITS & IMGMASK) - IMGMAX;
zbox = (image[i] >> IMG2BITS) - IMGMAX;
dx = x[i][0] + xbox*xprd - cm[0] - xoriginal[i][0];
dy = x[i][1] + ybox*yprd - cm[1] - xoriginal[i][1];
dz = x[i][2] + zbox*zprd - cm[2] - xoriginal[i][2];
msd[0] += dx*dx + dy*dy + dz*dz;
msd[1] += (dx*dx + dy*dy + dz*dz)*(dx*dx + dy*dy + dz*dz);
dx = x[i][0] + xbox * xprd - cm[0] - xoriginal[i][0];
dy = x[i][1] + ybox * yprd - cm[1] - xoriginal[i][1];
dz = x[i][2] + zbox * zprd - cm[2] - xoriginal[i][2];
msd[0] += dx * dx + dy * dy + dz * dz;
msd[1] += (dx * dx + dy * dy + dz * dz) * (dx * dx + dy * dy + dz * dz);
}
} else {
@ -88,19 +89,18 @@ void ComputeMSDNonGauss::compute_vector()
xbox = (image[i] & IMGMASK) - IMGMAX;
ybox = (image[i] >> IMGBITS & IMGMASK) - IMGMAX;
zbox = (image[i] >> IMG2BITS) - IMGMAX;
dx = x[i][0] + h[0]*xbox + h[5]*ybox + h[4]*zbox -
cm[0] - xoriginal[i][0];
dy = x[i][1] + h[1]*ybox + h[3]*zbox - cm[1] - xoriginal[i][1];
dz = x[i][2] + h[2]*zbox - cm[2] - xoriginal[i][2];
msd[0] += dx*dx + dy*dy + dz*dz;
msd[1] += (dx*dx + dy*dy + dz*dz)*(dx*dx + dy*dy + dz*dz);
dx = x[i][0] + h[0] * xbox + h[5] * ybox + h[4] * zbox - cm[0] - xoriginal[i][0];
dy = x[i][1] + h[1] * ybox + h[3] * zbox - cm[1] - xoriginal[i][1];
dz = x[i][2] + h[2] * zbox - cm[2] - xoriginal[i][2];
msd[0] += dx * dx + dy * dy + dz * dz;
msd[1] += (dx * dx + dy * dy + dz * dz) * (dx * dx + dy * dy + dz * dz);
}
}
MPI_Allreduce(msd,vector,2,MPI_DOUBLE,MPI_SUM,world);
MPI_Allreduce(msd, vector, 2, MPI_DOUBLE, MPI_SUM, world);
if (nmsd) {
vector[0] /= nmsd;
vector[1] /= nmsd;
vector[2] = (3*vector[1])/(5*vector[0]*vector[0]) - 1;
vector[2] = (3 * vector[1]) / (5 * vector[0] * vector[0]) - 1;
}
}

View File

@ -30,6 +30,8 @@ action () {
action compute_fep.cpp
action compute_fep.h
action compute_fep_ta.cpp
action compute_fep_ta.h
action fix_adapt_fep.cpp
action fix_adapt_fep.h
action pair_coul_cut_soft.cpp

517
src/FEP/compute_fep_ta.cpp Normal file
View File

@ -0,0 +1,517 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Shifeng Ke (Zhejiang University)
------------------------------------------------------------------------- */
#include "compute_fep_ta.h"
#include "angle.h"
#include "atom.h"
#include "bond.h"
#include "comm.h"
#include "dihedral.h"
#include "domain.h"
#include "error.h"
#include "fix.h"
#include "force.h"
#include "improper.h"
#include "kspace.h"
#include "memory.h"
#include "modify.h"
#include "neighbor.h"
#include "pair.h"
#include "timer.h"
#include "update.h"
#include <cmath>
#include <cstring>
using namespace LAMMPS_NS;
enum { X, Y, Z };
/* ---------------------------------------------------------------------- */
ComputeFEPTA::ComputeFEPTA(LAMMPS *lmp, int narg, char **arg) : Compute(lmp, narg, arg)
{
if (narg < 6) error->all(FLERR, "Illegal number of arguments in compute fep/ta");
scalar_flag = 0;
vector_flag = 1;
size_vector = 3;
extvector = 0;
vector = new double[size_vector];
fepinitflag = 0; // avoid init to run entirely when called by write_data
temp_fep = utils::numeric(FLERR, arg[3], false, lmp);
if (strcmp(arg[4], "xy") == 0) {
tan_axis1 = X;
tan_axis2 = Y;
norm_axis = Z;
} else if (strcmp(arg[4], "xz") == 0) {
tan_axis1 = X;
tan_axis2 = Z;
norm_axis = Y;
} else if (strcmp(arg[4], "yz") == 0) {
tan_axis1 = Y;
tan_axis2 = Z;
norm_axis = X;
} else
error->all(FLERR, "Illegal arguments in compute fep/ta");
scale_factor = utils::numeric(FLERR, arg[5], false, lmp);
// optional keywords
tailflag = 0;
int iarg = 6;
while (iarg < narg) {
if (strcmp(arg[iarg], "tail") == 0) {
if (iarg + 2 > narg) error->all(FLERR, "Illegal optional keyword in compute fep/ta");
tailflag = utils::logical(FLERR, arg[iarg + 1], false, lmp);
iarg += 2;
} else
error->all(FLERR, "Illegal optional keyword in compute fep/ta");
}
// allocate space for position, force, energy, virial arrays
x_orig = nullptr;
f_orig = nullptr;
peatom_orig = keatom_orig = nullptr;
pvatom_orig = kvatom_orig = nullptr;
allocate_storage();
fixgpu = nullptr;
}
/* ---------------------------------------------------------------------- */
ComputeFEPTA::~ComputeFEPTA()
{
delete[] vector;
deallocate_storage();
}
/* ---------------------------------------------------------------------- */
void ComputeFEPTA::init()
{
int i, j;
if (!fepinitflag) // avoid init to run entirely when called by write_data
fepinitflag = 1;
else
return;
// setup and error checks
if (domain->dimension == 2) { error->all(FLERR, "Cannot compute fep/ta in 2d simulation"); }
if (tailflag) {
if (force->pair->tail_flag == 0)
error->all(FLERR,
"Compute fep/ta tail when pair style does not "
"compute tail corrections");
}
// detect if package gpu is present
int ifixgpu = modify->find_fix("package_gpu");
if (ifixgpu >= 0) fixgpu = modify->fix[ifixgpu];
if (comm->me == 0) {
auto mesg = fmt::format("FEP/TA settings ...\n temperature = {:f}\n", temp_fep);
mesg += fmt::format(" scale factor = {:f}\n", scale_factor);
mesg += fmt::format(" tail {}\n", (tailflag ? "yes" : "no"));
utils::logmesg(lmp, mesg);
}
}
/* ---------------------------------------------------------------------- */
void ComputeFEPTA::compute_vector()
{
double pe0, pe1;
eflag = 1;
vflag = 0;
invoked_vector = update->ntimestep;
if (atom->nmax > nmax) { // reallocate working arrays if necessary
deallocate_storage();
allocate_storage();
}
backup_xfev(); // backup position, force, energy, virial array values
backup_box(); // backup box size
timer->stamp();
if (force->pair && force->pair->compute_flag) {
force->pair->compute(eflag, vflag);
timer->stamp(Timer::PAIR);
}
if (atom->molecular != Atom::ATOMIC) {
if (force->bond) force->bond->compute(eflag, vflag);
if (force->angle) force->angle->compute(eflag, vflag);
if (force->dihedral) force->dihedral->compute(eflag, vflag);
if (force->improper) force->improper->compute(eflag, vflag);
timer->stamp(Timer::BOND);
}
if (force->kspace && force->kspace->compute_flag) {
force->kspace->compute(eflag, vflag);
timer->stamp(Timer::KSPACE);
}
// accumulate force/energy/virial from /gpu pair styles
// this is required as to empty the answer queue,
// otherwise the force compute on the GPU in the next step would be incorrect
if (fixgpu) fixgpu->post_force(vflag);
pe0 = compute_pe();
change_box();
timer->stamp();
if (force->pair && force->pair->compute_flag) {
force->pair->compute(eflag, vflag);
timer->stamp(Timer::PAIR);
}
if (atom->molecular != Atom::ATOMIC) {
if (force->bond) force->bond->compute(eflag, vflag);
if (force->angle) force->angle->compute(eflag, vflag);
if (force->dihedral) force->dihedral->compute(eflag, vflag);
if (force->improper) force->improper->compute(eflag, vflag);
timer->stamp(Timer::BOND);
}
if (force->kspace && force->kspace->compute_flag) {
force->kspace->compute(eflag, vflag);
timer->stamp(Timer::KSPACE);
}
// accumulate force/energy/virial from /gpu pair styles
// this is required as to empty the answer queue,
// otherwise the force compute on the GPU in the next step would be incorrect
if (fixgpu) fixgpu->post_force(vflag);
pe1 = compute_pe();
restore_xfev(); // restore position, force, energy, virial array values
restore_box(); // restore box size
vector[0] = pe1 - pe0;
vector[1] = exp(-(pe1 - pe0) / (force->boltz * temp_fep));
vector[2] = area_orig * (scale_factor - 1.0);
}
/* ----------------------------------------------------------------------
obtain potential energy from lammps accumulators
------------------------------------------------------------------------- */
double ComputeFEPTA::compute_pe()
{
double eng, eng_potential;
eng = 0.0;
if (force->pair) eng = force->pair->eng_vdwl + force->pair->eng_coul;
if (atom->molecular != Atom::ATOMIC) {
if (force->bond) eng += force->bond->energy;
if (force->angle) eng += force->angle->energy;
if (force->dihedral) eng += force->dihedral->energy;
if (force->improper) eng += force->improper->energy;
}
MPI_Allreduce(&eng, &eng_potential, 1, MPI_DOUBLE, MPI_SUM, world);
if (tailflag) {
double volume = domain->xprd * domain->yprd * domain->zprd;
eng_potential += force->pair->etail / volume;
}
if (force->kspace) eng_potential += force->kspace->energy;
return eng_potential;
}
/* ----------------------------------------------------------------------
apply changes to box
------------------------------------------------------------------------- */
void ComputeFEPTA::change_box()
{
int i;
double **x = atom->x;
int natom = atom->nlocal + atom->nghost;
for (i = 0; i < natom; i++) domain->x2lamda(x[i], x[i]);
domain->boxhi[tan_axis1] *= sqrt(scale_factor);
domain->boxlo[tan_axis1] *= sqrt(scale_factor);
domain->boxhi[tan_axis2] *= sqrt(scale_factor);
domain->boxlo[tan_axis2] *= sqrt(scale_factor);
domain->boxhi[norm_axis] /= scale_factor;
domain->boxlo[norm_axis] /= scale_factor;
domain->set_global_box();
domain->set_local_box();
// remap atom position
for (i = 0; i < natom; i++) domain->lamda2x(x[i], x[i]);
if (force->kspace) force->kspace->setup();
}
/* ----------------------------------------------------------------------
backup box size
------------------------------------------------------------------------- */
void ComputeFEPTA::backup_box()
{
for (int i = 0; i < domain->dimension; i++) {
boxhi_orig[i] = domain->boxhi[i];
boxlo_orig[i] = domain->boxlo[i];
}
area_orig = domain->prd[tan_axis1] * domain->prd[tan_axis2];
}
/* ----------------------------------------------------------------------
restore box size to original values
------------------------------------------------------------------------- */
void ComputeFEPTA::restore_box()
{
for (int i = 0; i < domain->dimension; i++) {
domain->boxhi[i] = boxhi_orig[i];
domain->boxlo[i] = boxlo_orig[i];
}
domain->set_global_box();
domain->set_local_box();
if (force->kspace) force->kspace->setup();
}
/* ----------------------------------------------------------------------
manage storage for position, force, energy, virial arrays
------------------------------------------------------------------------- */
void ComputeFEPTA::allocate_storage()
{
nmax = atom->nmax;
memory->create(x_orig, nmax, 3, "fep:x_orig");
memory->create(f_orig, nmax, 3, "fep:f_orig");
memory->create(peatom_orig, nmax, "fep:peatom_orig");
memory->create(pvatom_orig, nmax, 6, "fep:pvatom_orig");
if (force->kspace) {
memory->create(keatom_orig, nmax, "fep:keatom_orig");
memory->create(kvatom_orig, nmax, 6, "fep:kvatom_orig");
}
}
/* ---------------------------------------------------------------------- */
void ComputeFEPTA::deallocate_storage()
{
memory->destroy(x_orig);
memory->destroy(f_orig);
memory->destroy(peatom_orig);
memory->destroy(pvatom_orig);
memory->destroy(keatom_orig);
memory->destroy(kvatom_orig);
x_orig = nullptr;
f_orig = nullptr;
peatom_orig = keatom_orig = nullptr;
pvatom_orig = kvatom_orig = nullptr;
}
/* ----------------------------------------------------------------------
backup and restore arrays with position, force, energy, virial
------------------------------------------------------------------------- */
void ComputeFEPTA::backup_xfev()
{
int i;
int natom = atom->nlocal + atom->nghost;
double **x = atom->x;
for (i = 0; i < natom; i++) {
x_orig[i][0] = x[i][0];
x_orig[i][1] = x[i][1];
x_orig[i][2] = x[i][2];
}
double **f = atom->f;
for (i = 0; i < natom; i++) {
f_orig[i][0] = f[i][0];
f_orig[i][1] = f[i][1];
f_orig[i][2] = f[i][2];
}
eng_vdwl_orig = force->pair->eng_vdwl;
eng_coul_orig = force->pair->eng_coul;
if (atom->molecular != Atom::ATOMIC) {
if (force->bond) eng_bond_orig = force->bond->energy;
if (force->angle) eng_angle_orig = force->angle->energy;
if (force->dihedral) eng_dihedral_orig = force->dihedral->energy;
if (force->improper) eng_improper_orig = force->improper->energy;
}
pvirial_orig[0] = force->pair->virial[0];
pvirial_orig[1] = force->pair->virial[1];
pvirial_orig[2] = force->pair->virial[2];
pvirial_orig[3] = force->pair->virial[3];
pvirial_orig[4] = force->pair->virial[4];
pvirial_orig[5] = force->pair->virial[5];
if (update->eflag_atom) {
double *peatom = force->pair->eatom;
for (i = 0; i < natom; i++) peatom_orig[i] = peatom[i];
}
if (update->vflag_atom) {
double **pvatom = force->pair->vatom;
for (i = 0; i < natom; i++) {
pvatom_orig[i][0] = pvatom[i][0];
pvatom_orig[i][1] = pvatom[i][1];
pvatom_orig[i][2] = pvatom[i][2];
pvatom_orig[i][3] = pvatom[i][3];
pvatom_orig[i][4] = pvatom[i][4];
pvatom_orig[i][5] = pvatom[i][5];
}
}
if (force->kspace) {
energy_orig = force->kspace->energy;
kvirial_orig[0] = force->kspace->virial[0];
kvirial_orig[1] = force->kspace->virial[1];
kvirial_orig[2] = force->kspace->virial[2];
kvirial_orig[3] = force->kspace->virial[3];
kvirial_orig[4] = force->kspace->virial[4];
kvirial_orig[5] = force->kspace->virial[5];
if (update->eflag_atom) {
double *keatom = force->kspace->eatom;
for (i = 0; i < natom; i++) keatom_orig[i] = keatom[i];
}
if (update->vflag_atom) {
double **kvatom = force->kspace->vatom;
for (i = 0; i < natom; i++) {
kvatom_orig[i][0] = kvatom[i][0];
kvatom_orig[i][1] = kvatom[i][1];
kvatom_orig[i][2] = kvatom[i][2];
kvatom_orig[i][3] = kvatom[i][3];
kvatom_orig[i][4] = kvatom[i][4];
kvatom_orig[i][5] = kvatom[i][5];
}
}
}
}
/* ---------------------------------------------------------------------- */
void ComputeFEPTA::restore_xfev()
{
int i;
int natom = atom->nlocal + atom->nghost;
double **x = atom->x;
for (i = 0; i < natom; i++) {
x[i][0] = x_orig[i][0];
x[i][1] = x_orig[i][1];
x[i][2] = x_orig[i][2];
}
double **f = atom->f;
for (i = 0; i < natom; i++) {
f[i][0] = f_orig[i][0];
f[i][1] = f_orig[i][1];
f[i][2] = f_orig[i][2];
}
force->pair->eng_vdwl = eng_vdwl_orig;
force->pair->eng_coul = eng_coul_orig;
if (atom->molecular != Atom::ATOMIC) {
if (force->bond) force->bond->energy = eng_bond_orig;
if (force->angle) force->angle->energy = eng_angle_orig;
if (force->dihedral) force->dihedral->energy = eng_dihedral_orig;
if (force->improper) force->improper->energy = eng_improper_orig;
}
force->pair->virial[0] = pvirial_orig[0];
force->pair->virial[1] = pvirial_orig[1];
force->pair->virial[2] = pvirial_orig[2];
force->pair->virial[3] = pvirial_orig[3];
force->pair->virial[4] = pvirial_orig[4];
force->pair->virial[5] = pvirial_orig[5];
if (update->eflag_atom) {
double *peatom = force->pair->eatom;
for (i = 0; i < natom; i++) peatom[i] = peatom_orig[i];
}
if (update->vflag_atom) {
double **pvatom = force->pair->vatom;
for (i = 0; i < natom; i++) {
pvatom[i][0] = pvatom_orig[i][0];
pvatom[i][1] = pvatom_orig[i][1];
pvatom[i][2] = pvatom_orig[i][2];
pvatom[i][3] = pvatom_orig[i][3];
pvatom[i][4] = pvatom_orig[i][4];
pvatom[i][5] = pvatom_orig[i][5];
}
}
if (force->kspace) {
force->kspace->energy = energy_orig;
force->kspace->virial[0] = kvirial_orig[0];
force->kspace->virial[1] = kvirial_orig[1];
force->kspace->virial[2] = kvirial_orig[2];
force->kspace->virial[3] = kvirial_orig[3];
force->kspace->virial[4] = kvirial_orig[4];
force->kspace->virial[5] = kvirial_orig[5];
if (update->eflag_atom) {
double *keatom = force->kspace->eatom;
for (i = 0; i < natom; i++) keatom[i] = keatom_orig[i];
}
if (update->vflag_atom) {
double **kvatom = force->kspace->vatom;
for (i = 0; i < natom; i++) {
kvatom[i][0] = kvatom_orig[i][0];
kvatom[i][1] = kvatom_orig[i][1];
kvatom[i][2] = kvatom_orig[i][2];
kvatom[i][3] = kvatom_orig[i][3];
kvatom[i][4] = kvatom_orig[i][4];
kvatom[i][5] = kvatom_orig[i][5];
}
}
}
}

89
src/FEP/compute_fep_ta.h Normal file
View File

@ -0,0 +1,89 @@
/* -*- c++ -*- ----------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Shifeng Ke (Zhejiang University)
------------------------------------------------------------------------- */
#ifdef COMPUTE_CLASS
// clang-format off
ComputeStyle(fep/ta,ComputeFEPTA);
// clang-format on
#else
#ifndef COMPUTE_FEP_TA_H
#define COMPUTE_FEP_TA_H
#include "compute.h"
namespace LAMMPS_NS {
class ComputeFEPTA : public Compute {
public:
ComputeFEPTA(class LAMMPS *, int, char **); // compute ID groupID fep/ta temp xy/xz/yz scale_factor
~ComputeFEPTA() override;
void init() override;
void compute_vector() override;
private:
int tailflag;
int fepinitflag;
int eflag, vflag;
double temp_fep;
double scale_factor;
int tan_axis1, tan_axis2, norm_axis;
double boxlo_orig[3], boxhi_orig[3];
double area_orig;
int nmax;
double **x_orig;
double **f_orig;
double eng_vdwl_orig, eng_coul_orig;
double eng_bond_orig, eng_angle_orig, eng_dihedral_orig, eng_improper_orig;
double pvirial_orig[6];
double *peatom_orig, **pvatom_orig;
double energy_orig;
double kvirial_orig[6];
double *keatom_orig, **kvatom_orig;
class Fix *fixgpu;
double compute_pe();
void change_box();
void backup_box();
void restore_box();
void allocate_storage();
void deallocate_storage();
void backup_xfev();
void restore_xfev();
};
} // namespace LAMMPS_NS
#endif
#endif
/* ERROR/WARNING messages:
E: Illegal ... command
Self-explanatory. Check the input script syntax and compare to the
documentation for the command. You can use -echo screen as a
command-line option when running LAMMPS to see the offending line.
E: Cannot compute fep/ta in 2d simulation
Self-explanatory.
*/

View File

@ -205,7 +205,6 @@ void FixACKS2ReaxFFKokkos<DeviceType>::pre_force(int vflag)
type = atomKK->k_type.view<DeviceType>();
mask = atomKK->k_mask.view<DeviceType>();
nlocal = atomKK->nlocal;
nall = atom->nlocal + atom->nghost;
newton_pair = force->newton_pair;
k_params.template sync<DeviceType>();
@ -219,7 +218,7 @@ void FixACKS2ReaxFFKokkos<DeviceType>::pre_force(int vflag)
d_ilist = k_list->d_ilist;
nn = list->inum;
NN = list->inum + list->gnum;
NN = atom->nlocal + atom->nghost;
copymode = 1;
@ -526,7 +525,7 @@ void FixACKS2ReaxFFKokkos<DeviceType>::allocate_array()
if (efield) get_chi_field();
// init_storage
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType,TagACKS2Zero>(0,NN),*this);
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType,TagACKS2Zero>(0,nn),*this);
}
@ -1377,9 +1376,6 @@ int FixACKS2ReaxFFKokkos<DeviceType>::bicgstab_solve()
template<class DeviceType>
void FixACKS2ReaxFFKokkos<DeviceType>::calculate_Q()
{
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType,TagACKS2CalculateQ1>(0,nn),*this);
pack_flag = 2;
//comm->forward_comm( this ); //Dist_vector( s );
k_s.modify<DeviceType>();
@ -1388,8 +1384,7 @@ void FixACKS2ReaxFFKokkos<DeviceType>::calculate_Q()
k_s.modify<LMPHostType>();
k_s.sync<DeviceType>();
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType,TagACKS2CalculateQ2>(0,NN),*this);
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType,TagACKS2CalculateQ>(0,NN),*this);
}
/* ---------------------------------------------------------------------- */
@ -1822,22 +1817,25 @@ void FixACKS2ReaxFFKokkos<DeviceType>::operator() (TagACKS2Norm3, const int &ii,
template<class DeviceType>
KOKKOS_INLINE_FUNCTION
void FixACKS2ReaxFFKokkos<DeviceType>::operator() (TagACKS2CalculateQ1, const int &ii) const
void FixACKS2ReaxFFKokkos<DeviceType>::operator() (TagACKS2CalculateQ, const int &i) const
{
const int i = d_ilist[ii];
if (mask[i] & groupbit) {
/* backup s */
for (int k = nprev-1; k > 0; --k) {
d_s_hist(i,k) = d_s_hist(i,k-1);
d_s_hist_X(i,k) = d_s_hist_X(i,k-1);
q(i) = d_s(i);
if (i < nlocal) {
/* backup s */
for (int k = nprev-1; k > 0; --k) {
d_s_hist(i,k) = d_s_hist(i,k-1);
d_s_hist_X(i,k) = d_s_hist_X(i,k-1);
}
d_s_hist(i,0) = d_s[i];
d_s_hist_X(i,0) = d_s[NN+i];
}
d_s_hist(i,0) = d_s[i];
d_s_hist_X(i,0) = d_s[NN+i];
}
// last two rows
if (last_rows_flag && ii == 0) {
if (last_rows_flag && i == 0) {
for (int i = 0; i < 2; ++i) {
for (int k = nprev-1; k > 0; --k)
d_s_hist_last(i,k) = d_s_hist_last(i,k-1);
@ -1848,17 +1846,6 @@ void FixACKS2ReaxFFKokkos<DeviceType>::operator() (TagACKS2CalculateQ1, const in
/* ---------------------------------------------------------------------- */
template<class DeviceType>
KOKKOS_INLINE_FUNCTION
void FixACKS2ReaxFFKokkos<DeviceType>::operator() (TagACKS2CalculateQ2, const int &ii) const
{
const int i = d_ilist[ii];
if (mask[i] & groupbit)
q(i) = d_s(i);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void FixACKS2ReaxFFKokkos<DeviceType>::cleanup_copy()
{

View File

@ -54,8 +54,7 @@ struct TagACKS2Precon1B{};
struct TagACKS2Precon2{};
struct TagACKS2Add{};
struct TagACKS2ZeroQGhosts{};
struct TagACKS2CalculateQ1{};
struct TagACKS2CalculateQ2{};
struct TagACKS2CalculateQ{};
template<class DeviceType>
class FixACKS2ReaxFFKokkos : public FixACKS2ReaxFF {
@ -152,10 +151,7 @@ class FixACKS2ReaxFFKokkos : public FixACKS2ReaxFF {
void operator()(TagACKS2ZeroQGhosts, const int&) const;
KOKKOS_INLINE_FUNCTION
void operator()(TagACKS2CalculateQ1, const int&) const;
KOKKOS_INLINE_FUNCTION
void operator()(TagACKS2CalculateQ2, const int&) const;
void operator()(TagACKS2CalculateQ, const int&) const;
KOKKOS_INLINE_FUNCTION
double calculate_H_k(const F_FLOAT &r, const F_FLOAT &shld) const;

View File

@ -208,7 +208,6 @@ void FixQEqReaxFFKokkos<DeviceType>::pre_force(int /*vflag*/)
d_neighbors = k_list->d_neighbors;
d_ilist = k_list->d_ilist;
nn = list->inum;
NN = list->inum + list->gnum;
copymode = 1;
@ -375,7 +374,7 @@ void FixQEqReaxFFKokkos<DeviceType>::allocate_array()
if (efield) get_chi_field();
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType,TagQEqZero>(0,NN),*this);
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType,TagQEqZero>(0,nn),*this);
}
/* ---------------------------------------------------------------------- */
@ -872,7 +871,8 @@ void FixQEqReaxFFKokkos<DeviceType>::sparse_matvec_kokkos(typename AT::t_ffloat2
}
if (neighflag != FULL) {
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType,TagQEqZeroQGhosts>(nn,NN),*this);
int nall = nlocal + atomKK->nghost;
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType,TagQEqZeroQGhosts>(atom->nlocal,nall),*this);
if (need_dup)
dup_o.reset_except(d_o);

View File

@ -1214,6 +1214,12 @@ struct params_lj_coul {
F_FLOAT cut_ljsq,cut_coulsq,lj1,lj2,lj3,lj4,offset;
};
// ReaxFF
struct alignas(4 * sizeof(int)) reax_int4 {
int i0, i1, i2, i3;
};
// Pair SNAP
#define SNAP_KOKKOS_REAL double

File diff suppressed because it is too large Load Diff

View File

@ -90,13 +90,13 @@ struct TagPairReaxComputeMulti1{};
template<int NEIGHFLAG, int EFLAG>
struct TagPairReaxComputeMulti2{};
template<bool POPULATE>
struct TagPairReaxCountAngularTorsion{};
template<int NEIGHFLAG, int EVFLAG>
struct TagPairReaxComputeAngular{};
struct TagPairReaxComputeTorsionPreview{};
struct TagPairReaxComputeAngularPreprocessed{};
template<int NEIGHFLAG, int EVFLAG>
struct TagPairReaxComputeTorsion{};
struct TagPairReaxComputeTorsionPreprocessed{};
template<int NEIGHFLAG, int EVFLAG>
struct TagPairReaxComputeHydrogen{};
@ -120,7 +120,7 @@ class PairReaxFFKokkos : public PairReaxFF {
// "Blocking" factors to reduce thread divergence within some kernels
using blocking_t = unsigned short int;
// "PairReaxFFComputeTorsionBlocking"
// "PairReaxFFComputeTorsion"
static constexpr int compute_torsion_blocksize = 8;
// "PairReaxBuildListsHalfBlocking"
@ -176,9 +176,28 @@ class PairReaxFFKokkos : public PairReaxFF {
KOKKOS_INLINE_FUNCTION
void operator()(TagPairReaxBuildListsHalfPreview<NEIGHFLAG>, const int&) const;
// Isolated function that builds the hbond list, reused across
// TagPairReaxBuildListsHalfBlocking, HalfBlockingPreview, HalfPreview
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void build_hb_list(F_FLOAT, int, int, int, int, int) const;
// Isolated function that builds the bond order list, reused across
// TagPairReaxBuildListsHalfBlocking, HalfBlockingPreview, HalfPreview
// Returns if we need to populate d_d* functions or not
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
bool build_bo_list(int, int, int, int, int, int&, int&) const;
KOKKOS_INLINE_FUNCTION
void operator()(TagPairReaxBuildListsFull, const int&) const;
// Isolated function that computes bond order parameters
// Returns BO_s, BO_pi, BO_pi2, C12, C34, C56 by reference
KOKKOS_INLINE_FUNCTION
void compute_bo(F_FLOAT, int, int, F_FLOAT, F_FLOAT, F_FLOAT,
F_FLOAT&, F_FLOAT&, F_FLOAT&, F_FLOAT&, F_FLOAT&, F_FLOAT&) const;
KOKKOS_INLINE_FUNCTION
void operator()(TagPairReaxZero, const int&) const;
@ -222,24 +241,39 @@ class PairReaxFFKokkos : public PairReaxFF {
KOKKOS_INLINE_FUNCTION
void operator()(TagPairReaxComputeMulti2<NEIGHFLAG,EFLAG>, const int&) const;
template<int NEIGHFLAG, int EVFLAG>
template<bool POPULATE>
KOKKOS_INLINE_FUNCTION
void operator()(TagPairReaxComputeAngular<NEIGHFLAG,EVFLAG>, const int&, EV_FLOAT_REAX&) const;
void operator()(TagPairReaxCountAngularTorsion<POPULATE>, const int&) const;
// Abstraction for computing SBSO2, CSBO2, dSBO1, dsBO2
KOKKOS_INLINE_FUNCTION
void compute_angular_sbo(int, int, int, int) const;
// Abstraction for counting and populating angular intermediates
template<bool POPULATE>
KOKKOS_INLINE_FUNCTION
int preprocess_angular(int, int, int, int, int) const;
// Abstraction for counting and populating torsion intermediated
template<bool POPULATE>
KOKKOS_INLINE_FUNCTION
int preprocess_torsion(int, int, int, F_FLOAT, F_FLOAT, F_FLOAT, int, int, int) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(TagPairReaxComputeAngular<NEIGHFLAG,EVFLAG>, const int&) const;
KOKKOS_INLINE_FUNCTION
void operator()(TagPairReaxComputeTorsionPreview, const int&) const;
void operator()(TagPairReaxComputeAngularPreprocessed<NEIGHFLAG,EVFLAG>, const int&, EV_FLOAT_REAX&) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(TagPairReaxComputeTorsion<NEIGHFLAG,EVFLAG>, const int&, EV_FLOAT_REAX&) const;
void operator()(TagPairReaxComputeAngularPreprocessed<NEIGHFLAG,EVFLAG>, const int&) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(TagPairReaxComputeTorsion<NEIGHFLAG,EVFLAG>, const int&) const;
void operator()(TagPairReaxComputeTorsionPreprocessed<NEIGHFLAG,EVFLAG>, const int&, EV_FLOAT_REAX&) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(TagPairReaxComputeTorsionPreprocessed<NEIGHFLAG,EVFLAG>, const int&) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
@ -395,9 +429,8 @@ class PairReaxFFKokkos : public PairReaxFF {
typename AT::t_float_1d d_bo_rij, d_hb_rsq, d_Deltap, d_Deltap_boc, d_total_bo, d_s;
typename AT::t_float_1d d_Delta, d_Delta_boc, d_Delta_lp, d_dDelta_lp, d_Delta_lp_temp, d_CdDelta;
typename AT::t_ffloat_2d_dl d_BO, d_BO_s, d_BO_pi, d_BO_pi2, d_dBOp;
typename AT::t_ffloat_2d_dl d_dln_BOp_pix, d_dln_BOp_piy, d_dln_BOp_piz;
typename AT::t_ffloat_2d_dl d_dln_BOp_pi2x, d_dln_BOp_pi2y, d_dln_BOp_pi2z;
typename AT::t_ffloat_2d_dl d_BO, d_BO_s, d_BO_pi, d_BO_pi2;
typename AT::t_ffloat_2d_dl d_dln_BOp_pi, d_dln_BOp_pi2;
typename AT::t_ffloat_2d_dl d_C1dbo, d_C2dbo, d_C3dbo;
typename AT::t_ffloat_2d_dl d_C1dbopi, d_C2dbopi, d_C3dbopi, d_C4dbopi;
typename AT::t_ffloat_2d_dl d_C1dbopi2, d_C2dbopi2, d_C3dbopi2, d_C4dbopi2;
@ -447,7 +480,7 @@ class PairReaxFFKokkos : public PairReaxFF {
typename AT::t_int_scalar d_resize_bo, d_resize_hb;
typename AT::t_ffloat_2d_dl d_sum_ovun;
typename AT::t_ffloat_2d_dl d_dBOpx, d_dBOpy, d_dBOpz;
typename AT::t_ffloat_2d_dl d_dBOp;
int neighflag, newton_pair, maxnumneigh, maxhb, maxbo;
int nlocal,nn,NN,eflag,vflag,acks2_flag;
@ -480,15 +513,15 @@ class PairReaxFFKokkos : public PairReaxFF {
typename AT::t_ffloat_1d d_buf;
DAT::tdual_int_scalar k_nbuf_local;
// for fast ComputeTorsion preprocessor kernel
typedef Kokkos::View<int*, LMPPinnedHostType> t_hostpinned_int_1d;
typedef Kokkos::View<reax_int4**, LMPDeviceType::array_layout, DeviceType> t_reax_int4_2d;
t_reax_int4_2d d_angular_pack, d_torsion_pack;
typename AT::t_ffloat_2d d_angular_intermediates;
typename AT::tdual_int_1d k_count_angular_torsion;
typename AT::t_int_1d d_count_angular_torsion;
int inum_store;
t_hostpinned_int_1d counters;
t_hostpinned_int_1d counters_jj_min;
t_hostpinned_int_1d counters_jj_max;
t_hostpinned_int_1d counters_kk_min;
t_hostpinned_int_1d counters_kk_max;
};
template <class DeviceType>

View File

@ -102,13 +102,15 @@ void PairSNAPKokkos<DeviceType, real_type, vector_length>::init_style()
if (force->newton_pair == 0)
error->all(FLERR,"Pair style SNAP requires newton pair on");
// adjust neighbor list request for KOKKOS
// neighbor list request for KOKKOS
neighflag = lmp->kokkos->neighflag;
auto request = neighbor->add_request(this, NeighConst::REQ_FULL);
request->set_kokkos_host(std::is_same<DeviceType,LMPHostType>::value &&
!std::is_same<DeviceType,LMPDeviceType>::value);
request->set_kokkos_device(std::is_same<DeviceType,LMPDeviceType>::value);
if (lmp->kokkos->neighflag == FULL)
if (neighflag == FULL)
error->all(FLERR,"Must use half neighbor list style with pair snap/kk");
}

View File

@ -224,14 +224,25 @@ void DumpAtomMPIIO::init_style()
// setup column string
std::string default_columns;
if (scale_flag == 0 && image_flag == 0)
columns = (char *) "id type x y z";
default_columns = "id type x y z";
else if (scale_flag == 0 && image_flag == 1)
columns = (char *) "id type x y z ix iy iz";
default_columns = "id type x y z ix iy iz";
else if (scale_flag == 1 && image_flag == 0)
columns = (char *) "id type xs ys zs";
default_columns = "id type xs ys zs";
else if (scale_flag == 1 && image_flag == 1)
columns = (char *) "id type xs ys zs ix iy iz";
default_columns = "id type xs ys zs ix iy iz";
int icol = 0;
columns.clear();
for (auto item : utils::split_words(default_columns)) {
if (columns.size()) columns += " ";
if (keyword_user[icol].size()) columns += keyword_user[icol];
else columns += item;
++icol;
}
// setup function ptrs

View File

@ -39,17 +39,6 @@ using namespace LAMMPS_NS;
#define DUMP_BUF_CHUNK_SIZE 16384
#define DUMP_BUF_INCREMENT_SIZE 4096
// clang-format off
enum{ ID, MOL, TYPE, ELEMENT, MASS,
X, Y, Z, XS, YS, ZS, XSTRI, YSTRI, ZSTRI, XU, YU, ZU, XUTRI, YUTRI, ZUTRI,
XSU, YSU, ZSU, XSUTRI, YSUTRI, ZSUTRI,
IX, IY, IZ, VX, VY, VZ, FX, FY, FZ,
Q, MUX, MUY, MUZ, MU, RADIUS, DIAMETER,
OMEGAX, OMEGAY, OMEGAZ, ANGMOMX, ANGMOMY, ANGMOMZ,
TQX, TQY, TQZ, SPIN, ERADIUS, ERVEL, ERFORCE,
COMPUTE, FIX, VARIABLE };
enum{ LT, LE, GT, GE, EQ, NEQ };
// clang-format on
/* ---------------------------------------------------------------------- */
DumpCustomMPIIO::DumpCustomMPIIO(LAMMPS *lmp, int narg, char **arg)
@ -216,6 +205,19 @@ void DumpCustomMPIIO::write()
void DumpCustomMPIIO::init_style()
{
// assemble ITEMS: column string from defaults and user values
delete[] columns;
std::string combined;
int icol = 0;
for (auto item : utils::split_words(columns_default)) {
if (combined.size()) combined += " ";
if (keyword_user[icol].size()) combined += keyword_user[icol];
else combined += item;
++icol;
}
columns = utils::strdup(combined);
// format = copy of default or user-specified line format
delete[] format;

View File

@ -38,17 +38,6 @@ using namespace LAMMPS_NS;
#define DUMP_BUF_CHUNK_SIZE 16384
#define DUMP_BUF_INCREMENT_SIZE 4096
enum{ID,MOL,TYPE,ELEMENT,MASS,
X,Y,Z,XS,YS,ZS,XSTRI,YSTRI,ZSTRI,XU,YU,ZU,XUTRI,YUTRI,ZUTRI,
XSU,YSU,ZSU,XSUTRI,YSUTRI,ZSUTRI,
IX,IY,IZ,
VX,VY,VZ,FX,FY,FZ,
Q,MUX,MUY,MUZ,MU,RADIUS,DIAMETER,
OMEGAX,OMEGAY,OMEGAZ,ANGMOMX,ANGMOMY,ANGMOMZ,
TQX,TQY,TQZ,SPIN,ERADIUS,ERVEL,ERFORCE,
COMPUTE,FIX,VARIABLE};
enum{LT,LE,GT,GE,EQ,NEQ};
/* ---------------------------------------------------------------------- */
DumpXYZMPIIO::DumpXYZMPIIO(LAMMPS *lmp, int narg, char **arg) :

View File

@ -237,7 +237,7 @@ void FixQEqReaxFFOMP::init_storage()
#if defined(_OPENMP)
#pragma omp parallel for schedule(static)
#endif
for (int i = 0; i < NN; i++) {
for (int i = 0; i < nn; i++) {
Hdia_inv[i] = 1. / eta[atom->type[i]];
b_s[i] = -chi[atom->type[i]];
if (efield) b_s[i] -= chi_field[i];
@ -254,17 +254,13 @@ void FixQEqReaxFFOMP::pre_force(int /* vflag */)
{
if (update->ntimestep % nevery) return;
int n = atom->nlocal;
if (reaxff) {
nn = reaxff->list->inum;
NN = reaxff->list->inum + reaxff->list->gnum;
ilist = reaxff->list->ilist;
numneigh = reaxff->list->numneigh;
firstneigh = reaxff->list->firstneigh;
} else {
nn = list->inum;
NN = list->inum + list->gnum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
@ -274,7 +270,7 @@ void FixQEqReaxFFOMP::pre_force(int /* vflag */)
// need to be atom->nmax in length
if (atom->nmax > nmax) reallocate_storage();
if (n > n_cap*DANGER_ZONE || m_fill > m_cap*DANGER_ZONE)
if (atom->nlocal > n_cap*DANGER_ZONE || m_fill > m_cap*DANGER_ZONE)
reallocate_matrix();
if (efield) get_chi_field();
@ -487,6 +483,9 @@ void FixQEqReaxFFOMP::sparse_matvec(sparse_matrix *A, double *x, double *b)
{
int i, j, itr_j;
int ii;
int nlocal = atom->nlocal;
int nall = atom->nlocal + atom->nghost;
int nthreads = comm->nthreads;
#if defined(_OPENMP)
int tid = omp_get_thread_num();
@ -505,15 +504,14 @@ void FixQEqReaxFFOMP::sparse_matvec(sparse_matrix *A, double *x, double *b)
#if defined(_OPENMP)
#pragma omp for schedule(dynamic,50)
#endif
for (ii = nn; ii < NN; ++ii) {
i = ilist[ii];
for (i = nlocal; i < nall; ++i) {
if (atom->mask[i] & groupbit) b[i] = 0;
}
#if defined(_OPENMP)
#pragma omp for schedule(dynamic,50)
#endif
for (i = 0; i < NN; ++i)
for (i = 0; i < nall; ++i)
for (int t=0; t<nthreads; t++) b_temp[t][i] = 0.0;
// Wait for b accumulated and b_temp zeroed.
@ -538,7 +536,7 @@ void FixQEqReaxFFOMP::sparse_matvec(sparse_matrix *A, double *x, double *b)
#pragma omp barrier
#pragma omp for schedule(dynamic,50)
#endif
for (i = 0; i < NN; ++i)
for (i = 0; i < nall; ++i)
for (int t = 0; t < nthreads; ++t) b[i] += b_temp[t][i];
} //end omp parallel
@ -815,6 +813,8 @@ void FixQEqReaxFFOMP::dual_sparse_matvec(sparse_matrix *A, double *x1, double *x
int i, j, itr_j;
int ii;
int indxI, indxJ;
int nlocal = atom->nlocal;
int nall = atom->nlocal + atom->nghost;
int nthreads = comm->nthreads;
#if defined(_OPENMP)
@ -838,8 +838,7 @@ void FixQEqReaxFFOMP::dual_sparse_matvec(sparse_matrix *A, double *x1, double *x
#if defined(_OPENMP)
#pragma omp for schedule(dynamic,50)
#endif
for (ii = nn; ii < NN; ++ii) {
i = ilist[ii];
for (i = nlocal; i < nall; ++i) {
if (atom->mask[i] & groupbit) {
indxI = 2 * i;
b[indxI] = 0;
@ -850,7 +849,7 @@ void FixQEqReaxFFOMP::dual_sparse_matvec(sparse_matrix *A, double *x1, double *x
#if defined(_OPENMP)
#pragma omp for schedule(dynamic,50)
#endif
for (i = 0; i < NN; ++i) {
for (i = 0; i < nall; ++i) {
indxI = 2 * i;
for (int t=0; t<nthreads; t++) {
b_temp[t][indxI] = 0.0;
@ -884,7 +883,7 @@ void FixQEqReaxFFOMP::dual_sparse_matvec(sparse_matrix *A, double *x1, double *x
#pragma omp barrier
#pragma omp for schedule(dynamic,50)
#endif
for (i = 0; i < NN; ++i) {
for (i = 0; i < nall; ++i) {
indxI = 2 * i;
for (int t = 0; t < nthreads; ++t) {
b[indxI] += b_temp[t][indxI];
@ -906,6 +905,8 @@ void FixQEqReaxFFOMP::dual_sparse_matvec(sparse_matrix *A, double *x, double *b)
int i, j, itr_j;
int ii;
int indxI, indxJ;
int nlocal = atom->nlocal;
int nall = atom->nlocal + atom->nghost;
int nthreads = comm->nthreads;
#if defined(_OPENMP)
@ -929,8 +930,7 @@ void FixQEqReaxFFOMP::dual_sparse_matvec(sparse_matrix *A, double *x, double *b)
#if defined(_OPENMP)
#pragma omp for schedule(dynamic,50)
#endif
for (ii = nn; ii < NN; ++ii) {
i = ilist[ii];
for (i = nlocal; i < nall; ++i) {
if (atom->mask[i] & groupbit) {
indxI = 2 * i;
b[indxI] = 0;
@ -941,7 +941,7 @@ void FixQEqReaxFFOMP::dual_sparse_matvec(sparse_matrix *A, double *x, double *b)
#if defined(_OPENMP)
#pragma omp for schedule(dynamic,50)
#endif
for (i = 0; i < NN; ++i) {
for (i = 0; i < nall; ++i) {
indxI = 2 * i;
for (int t=0; t<nthreads; t++) {
b_temp[t][indxI] = 0.0;
@ -975,7 +975,7 @@ void FixQEqReaxFFOMP::dual_sparse_matvec(sparse_matrix *A, double *x, double *b)
#pragma omp barrier
#pragma omp for schedule(dynamic,50)
#endif
for (i = 0; i < NN; ++i) {
for (i = 0; i < nall; ++i) {
indxI = 2 * i;
for (int t = 0; t < nthreads; ++t) {
b[indxI] += b_temp[t][indxI];

View File

@ -356,7 +356,9 @@ void FixPOEMS::init()
for (auto ifix : modify->get_fix_list()) {
if (utils::strmatch(ifix->style, "^poems")) pflag = true;
if (pflag && (ifix->setmask() & POST_FORCE) && !ifix->rigid_flag)
if (comm->me == 0) error->warning(FLERR, "Fix {} alters forces after fix poems", ifix->id);
if (comm->me == 0)
error->warning(FLERR,"Fix {} with ID {} alters forces after fix poems",
ifix->style, ifix->id);
}
}

View File

@ -203,7 +203,8 @@ void FixACKS2ReaxFF::pertype_parameters(char *arg)
void FixACKS2ReaxFF::allocate_storage()
{
nmax = atom->nmax;
int size = nmax*2 + 2;
NN = atom->nlocal + atom->nghost;
const int size = nmax*2 + 2;
// 0 to nn-1: owned atoms related to H matrix
// nn to NN-1: ghost atoms related to H matrix
@ -329,17 +330,15 @@ void FixACKS2ReaxFF::pre_force(int /*vflag*/)
{
if (update->ntimestep % nevery) return;
int n = atom->nlocal;
NN = atom->nlocal + atom->nghost;
if (reaxff) {
nn = reaxff->list->inum;
NN = reaxff->list->inum + reaxff->list->gnum;
ilist = reaxff->list->ilist;
numneigh = reaxff->list->numneigh;
firstneigh = reaxff->list->firstneigh;
} else {
nn = list->inum;
NN = list->inum + list->gnum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
@ -349,7 +348,7 @@ void FixACKS2ReaxFF::pre_force(int /*vflag*/)
// need to be atom->nmax in length
if (atom->nmax > nmax) reallocate_storage();
if (n > n_cap*DANGER_ZONE || m_fill > m_cap*DANGER_ZONE)
if (atom->nlocal > n_cap*DANGER_ZONE || m_fill > m_cap*DANGER_ZONE)
reallocate_matrix();
if (efield) get_chi_field();
@ -626,8 +625,7 @@ void FixACKS2ReaxFF::sparse_matvec_acks2(sparse_matrix *H, sparse_matrix *X, dou
}
}
for (ii = nn; ii < NN; ++ii) {
i = ilist[ii];
for (i = atom->nlocal; i < NN; ++i) {
if (atom->mask[i] & groupbit) {
b[i] = 0;
b[NN + i] = 0;
@ -674,38 +672,34 @@ void FixACKS2ReaxFF::sparse_matvec_acks2(sparse_matrix *H, sparse_matrix *X, dou
void FixACKS2ReaxFF::calculate_Q()
{
int i, k;
pack_flag = 2;
comm->forward_comm(this); //Dist_vector(s);
for (int ii = 0; ii < nn; ++ii) {
i = ilist[ii];
for (int i = 0; i < NN; ++i) {
if (atom->mask[i] & groupbit) {
/* backup s */
for (k = nprev-1; k > 0; --k) {
s_hist[i][k] = s_hist[i][k-1];
s_hist_X[i][k] = s_hist_X[i][k-1];
atom->q[i] = s[i];
if (i < atom->nlocal) {
/* backup s */
for (int k = nprev-1; k > 0; --k) {
s_hist[i][k] = s_hist[i][k-1];
s_hist_X[i][k] = s_hist_X[i][k-1];
}
s_hist[i][0] = s[i];
s_hist_X[i][0] = s[NN+i];
}
s_hist[i][0] = s[i];
s_hist_X[i][0] = s[NN+i];
}
}
// last two rows
if (last_rows_flag) {
for (int i = 0; i < 2; ++i) {
for (k = nprev-1; k > 0; --k)
for (int k = nprev-1; k > 0; --k)
s_hist_last[i][k] = s_hist_last[i][k-1];
s_hist_last[i][0] = s[2*NN+i];
}
}
pack_flag = 2;
comm->forward_comm(this); //Dist_vector(s);
for (int ii = 0; ii < NN; ++ii) {
i = ilist[ii];
if (atom->mask[i] & groupbit)
atom->q[i] = s[i];
}
}
/* ---------------------------------------------------------------------- */

View File

@ -37,7 +37,7 @@ class FixACKS2ReaxFF : public FixQEqReaxFF {
double *get_s() { return s; }
protected:
int last_rows_rank, last_rows_flag;
int NN, last_rows_rank, last_rows_flag;
double **s_hist_X, **s_hist_last;
double *bcut_acks2, bond_softness, **bcut; // acks2 parameters

View File

@ -104,7 +104,7 @@ FixQEqReaxFF::FixQEqReaxFF(LAMMPS *lmp, int narg, char **arg) :
shld = nullptr;
nn = n_cap = 0;
NN = nmax = 0;
nmax = 0;
m_fill = m_cap = 0;
pack_flag = 0;
s = nullptr;
@ -319,7 +319,7 @@ void FixQEqReaxFF::reallocate_storage()
void FixQEqReaxFF::allocate_matrix()
{
int i,ii,n,m;
int i,ii,m;
int mincap;
double safezone;
@ -332,8 +332,7 @@ void FixQEqReaxFF::allocate_matrix()
safezone = REAX_SAFE_ZONE;
}
n = atom->nlocal;
n_cap = MAX((int)(n * safezone), mincap);
n_cap = MAX((int)(atom->nlocal * safezone), mincap);
// determine the total space for the H matrix
@ -493,13 +492,11 @@ void FixQEqReaxFF::setup_pre_force(int vflag)
{
if (reaxff) {
nn = reaxff->list->inum;
NN = reaxff->list->inum + reaxff->list->gnum;
ilist = reaxff->list->ilist;
numneigh = reaxff->list->numneigh;
firstneigh = reaxff->list->firstneigh;
} else {
nn = list->inum;
NN = list->inum + list->gnum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
@ -537,7 +534,7 @@ void FixQEqReaxFF::init_storage()
{
if (efield) get_chi_field();
for (int ii = 0; ii < NN; ii++) {
for (int ii = 0; ii < nn; ii++) {
int i = ilist[ii];
if (atom->mask[i] & groupbit) {
Hdia_inv[i] = 1. / eta[atom->type[i]];
@ -561,13 +558,11 @@ void FixQEqReaxFF::pre_force(int /*vflag*/)
if (reaxff) {
nn = reaxff->list->inum;
NN = reaxff->list->inum + reaxff->list->gnum;
ilist = reaxff->list->ilist;
numneigh = reaxff->list->numneigh;
firstneigh = reaxff->list->firstneigh;
} else {
nn = list->inum;
NN = list->inum + list->gnum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
@ -791,11 +786,9 @@ void FixQEqReaxFF::sparse_matvec(sparse_matrix *A, double *x, double *b)
b[i] = eta[atom->type[i]] * x[i];
}
for (ii = nn; ii < NN; ++ii) {
i = ilist[ii];
if (atom->mask[i] & groupbit)
int nall = atom->nlocal + atom->nghost;
for (i = atom->nlocal; i < nall; ++i)
b[i] = 0;
}
for (ii = 0; ii < nn; ++ii) {
i = ilist[ii];

View File

@ -59,7 +59,7 @@ class FixQEqReaxFF : public Fix {
protected:
int nevery, reaxflag;
int matvecs;
int nn, NN, m_fill;
int nn, m_fill;
int n_cap, nmax, m_cap;
int pack_flag;
int nlevels_respa;

View File

@ -693,7 +693,8 @@ void FixRigid::init()
for (auto ifix : modify->get_fix_list()) {
if (ifix->rigid_flag) rflag = true;
if ((comm->me == 0) && rflag && (ifix->setmask() & POST_FORCE) && !ifix->rigid_flag)
error->warning(FLERR,"Fix {} alters forces after fix rigid", ifix->id);
error->warning(FLERR,"Fix {} with ID {} alters forces after fix rigid",
ifix->style, ifix->id);
}
}

View File

@ -538,7 +538,8 @@ void FixRigidSmall::init()
for (auto ifix : modify->get_fix_list()) {
if (ifix->rigid_flag) rflag = true;
if ((comm->me == 0) && rflag && (ifix->setmask() & POST_FORCE) && !ifix->rigid_flag)
error->warning(FLERR,"Fix {} alters forces after fix rigid", ifix->id);
error->warning(FLERR,"Fix {} with ID {} alters forces after fix rigid/small",
ifix->style, ifix->id);
}
}

View File

@ -1916,7 +1916,12 @@ void DumpVTK::identify_vectors()
name.count(vector3_starts[v3s]+2) )
{
std::string vectorName = name[vector3_starts[v3s]];
vectorName.erase(vectorName.find_first_of('x'));
std::string::size_type erase_start = vectorName.find_first_of('x');
if (erase_start == 0) {
vectorName.erase(0,1);
} else {
vectorName.erase(erase_start);
}
name[vector3_starts[v3s]] = vectorName;
vector_set.insert(vector3_starts[v3s]);
}

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,11 +27,9 @@ using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputeMSD::ComputeMSD(LAMMPS *lmp, int narg, char **arg) :
Compute(lmp, narg, arg),
id_fix(nullptr)
ComputeMSD::ComputeMSD(LAMMPS *lmp, int narg, char **arg) : Compute(lmp, narg, arg), id_fix(nullptr)
{
if (narg < 3) error->all(FLERR,"Illegal compute msd command");
if (narg < 3) error->all(FLERR, "Illegal compute msd command");
vector_flag = 1;
size_vector = 4;
@ -47,28 +44,33 @@ ComputeMSD::ComputeMSD(LAMMPS *lmp, int narg, char **arg) :
int iarg = 3;
while (iarg < narg) {
if (strcmp(arg[iarg],"com") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute msd command");
comflag = utils::logical(FLERR,arg[iarg+1],false,lmp);
if (strcmp(arg[iarg], "com") == 0) {
if (iarg + 2 > narg) error->all(FLERR, "Illegal compute msd command");
comflag = utils::logical(FLERR, arg[iarg + 1], false, lmp);
iarg += 2;
} else if (strcmp(arg[iarg],"average") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute msd command");
avflag = utils::logical(FLERR,arg[iarg+1],false,lmp);
} else if (strcmp(arg[iarg], "average") == 0) {
if (iarg + 2 > narg) error->all(FLERR, "Illegal compute msd command");
avflag = utils::logical(FLERR, arg[iarg + 1], false, lmp);
iarg += 2;
} else error->all(FLERR,"Illegal compute msd command");
} else
error->all(FLERR, "Illegal compute msd command");
}
if (group->dynamic[igroup])
error->all(FLERR, "Compute {} is not compatible with dynamic groups", style);
// create a new fix STORE style for reference positions
// id = compute-ID + COMPUTE_STORE, fix group = compute group
id_fix = utils::strdup(id + std::string("_COMPUTE_STORE"));
fix = (FixStore *) modify->add_fix(fmt::format("{} {} STORE peratom 1 3",
id_fix, group->names[igroup]));
fix = (FixStore *) modify->add_fix(
fmt::format("{} {} STORE peratom 1 3", id_fix, group->names[igroup]));
// calculate xu,yu,zu for fix store array
// skip if reset from restart file
if (fix->restart_reset) fix->restart_reset = 0;
if (fix->restart_reset)
fix->restart_reset = 0;
else {
double **xoriginal = fix->astore;
@ -78,15 +80,17 @@ ComputeMSD::ComputeMSD(LAMMPS *lmp, int narg, char **arg) :
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) domain->unmap(x[i],image[i],xoriginal[i]);
else xoriginal[i][0] = xoriginal[i][1] = xoriginal[i][2] = 0.0;
if (mask[i] & groupbit)
domain->unmap(x[i], image[i], xoriginal[i]);
else
xoriginal[i][0] = xoriginal[i][1] = xoriginal[i][2] = 0.0;
// adjust for COM if requested
if (comflag) {
double cm[3];
masstotal = group->mass(igroup);
group->xcm(igroup,masstotal,cm);
group->xcm(igroup, masstotal, cm);
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
xoriginal[i][0] -= cm[0];
@ -124,7 +128,7 @@ void ComputeMSD::init()
// set fix which stores reference atom coords
fix = (FixStore *) modify->get_fix_by_id(id_fix);
if (!fix) error->all(FLERR,"Could not find compute msd fix with ID {}", id_fix);
if (!fix) error->all(FLERR, "Could not find compute msd fix with ID {}", id_fix);
// nmsd = # of atoms in group
@ -141,8 +145,10 @@ void ComputeMSD::compute_vector()
// cm = current center of mass
double cm[3];
if (comflag) group->xcm(igroup,masstotal,cm);
else cm[0] = cm[1] = cm[2] = 0.0;
if (comflag)
group->xcm(igroup, masstotal, cm);
else
cm[0] = cm[1] = cm[2] = 0.0;
// dx,dy,dz = displacement of atom from reference position
// reference unwrapped position is stored by fix
@ -161,8 +167,8 @@ void ComputeMSD::compute_vector()
double yprd = domain->yprd;
double zprd = domain->zprd;
double dx,dy,dz;
int xbox,ybox,zbox;
double dx, dy, dz;
int xbox, ybox, zbox;
double msd[4];
msd[0] = msd[1] = msd[2] = msd[3] = 0.0;
@ -174,36 +180,34 @@ void ComputeMSD::compute_vector()
double navfac;
if (avflag) {
naverage++;
navfac = 1.0/(naverage+1);
navfac = 1.0 / (naverage + 1);
}
if (domain->triclinic == 0) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
xbox = (image[i] & IMGMASK) - IMGMAX;
ybox = (image[i] >> IMGBITS & IMGMASK) - IMGMAX;
zbox = (image[i] >> IMG2BITS) - IMGMAX;
xtmp = x[i][0] + xbox*xprd - cm[0];
ytmp = x[i][1] + ybox*yprd - cm[1];
ztmp = x[i][2] + zbox*zprd - cm[2];
xtmp = x[i][0] + xbox * xprd - cm[0];
ytmp = x[i][1] + ybox * yprd - cm[1];
ztmp = x[i][2] + zbox * zprd - cm[2];
// use running average position for reference if requested
if (avflag) {
xoriginal[i][0] = (xoriginal[i][0]*naverage + xtmp)*navfac;
xoriginal[i][1] = (xoriginal[i][1]*naverage + ytmp)*navfac;
xoriginal[i][2] = (xoriginal[i][2]*naverage + ztmp)*navfac;
xoriginal[i][0] = (xoriginal[i][0] * naverage + xtmp) * navfac;
xoriginal[i][1] = (xoriginal[i][1] * naverage + ytmp) * navfac;
xoriginal[i][2] = (xoriginal[i][2] * naverage + ztmp) * navfac;
}
dx = xtmp - xoriginal[i][0];
dy = ytmp - xoriginal[i][1];
dz = ztmp - xoriginal[i][2];
msd[0] += dx*dx;
msd[1] += dy*dy;
msd[2] += dz*dz;
msd[3] += dx*dx + dy*dy + dz*dz;
msd[0] += dx * dx;
msd[1] += dy * dy;
msd[2] += dz * dz;
msd[3] += dx * dx + dy * dy + dz * dz;
}
} else {
for (int i = 0; i < nlocal; i++)
@ -211,29 +215,29 @@ void ComputeMSD::compute_vector()
xbox = (image[i] & IMGMASK) - IMGMAX;
ybox = (image[i] >> IMGBITS & IMGMASK) - IMGMAX;
zbox = (image[i] >> IMG2BITS) - IMGMAX;
xtmp = x[i][0] + h[0]*xbox + h[5]*ybox + h[4]*zbox - cm[0];
ytmp = x[i][1] + h[1]*ybox + h[3]*zbox - cm[1];
ztmp = x[i][2] + h[2]*zbox - cm[2];
xtmp = x[i][0] + h[0] * xbox + h[5] * ybox + h[4] * zbox - cm[0];
ytmp = x[i][1] + h[1] * ybox + h[3] * zbox - cm[1];
ztmp = x[i][2] + h[2] * zbox - cm[2];
// use running average position for reference if requested
if (avflag) {
xoriginal[i][0] = (xoriginal[i][0]*naverage + xtmp)*navfac;
xoriginal[i][1] = (xoriginal[i][0]*naverage + xtmp)*navfac;
xoriginal[i][2] = (xoriginal[i][0]*naverage + xtmp)*navfac;
xoriginal[i][0] = (xoriginal[i][0] * naverage + xtmp) * navfac;
xoriginal[i][1] = (xoriginal[i][0] * naverage + xtmp) * navfac;
xoriginal[i][2] = (xoriginal[i][0] * naverage + xtmp) * navfac;
}
dx = xtmp - xoriginal[i][0];
dy = ytmp - xoriginal[i][1];
dz = ztmp - xoriginal[i][2];
msd[0] += dx*dx;
msd[1] += dy*dy;
msd[2] += dz*dz;
msd[3] += dx*dx + dy*dy + dz*dz;
msd[0] += dx * dx;
msd[1] += dy * dy;
msd[2] += dz * dz;
msd[3] += dx * dx + dy * dy + dz * dz;
}
}
MPI_Allreduce(msd,vector,4,MPI_DOUBLE,MPI_SUM,world);
MPI_Allreduce(msd, vector, 4, MPI_DOUBLE, MPI_SUM, world);
if (nmsd) {
vector[0] /= nmsd;
vector[1] /= nmsd;

View File

@ -150,19 +150,19 @@ Dump::Dump(LAMMPS *lmp, int /*narg*/, char **arg) : Pointers(lmp)
Dump::~Dump()
{
delete [] id;
delete [] style;
delete [] filename;
delete [] multiname;
delete[] id;
delete[] style;
delete[] filename;
delete[] multiname;
delete [] format;
delete [] format_default;
delete [] format_line_user;
delete [] format_float_user;
delete [] format_int_user;
delete [] format_bigint_user;
delete[] format;
delete[] format_default;
delete[] format_line_user;
delete[] format_float_user;
delete[] format_int_user;
delete[] format_bigint_user;
delete [] refresh;
delete[] refresh;
// format_column_user is deallocated by child classes that use it
@ -1019,7 +1019,7 @@ void Dump::balance()
memory->destroy(tmp);
memory->destroy(proc_offsets);
memory->destroy(proc_new_offsets);
delete [] request;
delete[] request;
}
/* ----------------------------------------------------------------------
@ -1059,7 +1059,7 @@ void Dump::modify_params(int narg, char **arg)
if (strcmp(id,output->dump[idump]->id) == 0) break;
int n;
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) {
delete [] output->var_dump[idump];
delete[] output->var_dump[idump];
output->var_dump[idump] = utils::strdup(&arg[iarg+1][2]);
n = 0;
} else {
@ -1077,7 +1077,7 @@ void Dump::modify_params(int narg, char **arg)
if (strcmp(id,output->dump[idump]->id) == 0) break;
double delta;
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) {
delete [] output->var_dump[idump];
delete[] output->var_dump[idump];
output->var_dump[idump] = utils::strdup(&arg[iarg+1][2]);
delta = 0.0;
} else {
@ -1107,7 +1107,7 @@ void Dump::modify_params(int narg, char **arg)
MPI_Comm_free(&clustercomm);
MPI_Comm_split(world,icluster,0,&clustercomm);
delete [] multiname;
delete[] multiname;
char *ptr = strchr(filename,'%');
*ptr = '\0';
multiname = utils::strdup(fmt::format("{}{}{}", filename, icluster, ptr+1));
@ -1124,14 +1124,38 @@ void Dump::modify_params(int narg, char **arg)
flush_flag = utils::logical(FLERR,arg[iarg+1],false,lmp);
iarg += 2;
} else if (strcmp(arg[iarg],"colname") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal dump_modify command");
if (strcmp(arg[iarg+1],"default") == 0) {
for (auto item : keyword_user) item.clear();
iarg += 2;
} else {
if (iarg+3 > narg) error->all(FLERR,"Illegal dump_modify command");
int icol = -1;
if (utils::is_integer(arg[iarg + 1])) {
icol = utils::inumeric(FLERR,arg[iarg + 1],false,lmp);
if (icol < 0) icol = keyword_user.size() + icol + 1;
icol--;
} else {
try {
icol = key2col.at(arg[iarg + 1]);
} catch (std::out_of_range &) {
icol = -1;
}
}
if ((icol < 0) || (icol >= (int)keyword_user.size()))
error->all(FLERR, "Illegal thermo_modify command");
keyword_user[icol] = arg[iarg+2];
iarg += 3;
}
} else if (strcmp(arg[iarg],"format") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal dump_modify command");
if (strcmp(arg[iarg+1],"none") == 0) {
delete [] format_line_user;
delete [] format_int_user;
delete [] format_bigint_user;
delete [] format_float_user;
delete[] format_line_user;
delete[] format_int_user;
delete[] format_bigint_user;
delete[] format_float_user;
format_line_user = nullptr;
format_int_user = nullptr;
format_bigint_user = nullptr;
@ -1146,7 +1170,7 @@ void Dump::modify_params(int narg, char **arg)
if (iarg+3 > narg) error->all(FLERR,"Illegal dump_modify command");
if (strcmp(arg[iarg+1],"line") == 0) {
delete [] format_line_user;
delete[] format_line_user;
format_line_user = utils::strdup(arg[iarg+2]);
iarg += 3;
} else { // pass other format options to child classes
@ -1204,7 +1228,7 @@ void Dump::modify_params(int narg, char **arg)
MPI_Comm_free(&clustercomm);
MPI_Comm_split(world,icluster,0,&clustercomm);
delete [] multiname;
delete[] multiname;
char *ptr = strchr(filename,'%');
*ptr = '\0';
multiname = utils::strdup(fmt::format("{}{}{}", filename, icluster, ptr+1));

View File

@ -16,6 +16,8 @@
#include "pointers.h" // IWYU pragma: export
#include <map>
namespace LAMMPS_NS {
class Dump : protected Pointers {
@ -100,6 +102,8 @@ class Dump : protected Pointers {
char *format_bigint_user;
char **format_column_user;
enum { INT, DOUBLE, STRING, BIGINT };
std::map<std::string, int> key2col;
std::vector<std::string> keyword_user;
FILE *fp; // file to write dump to
int size_one; // # of quantities for one atom

View File

@ -38,6 +38,9 @@ DumpAtom::DumpAtom(LAMMPS *lmp, int narg, char **arg) : Dump(lmp, narg, arg)
buffer_allow = 1;
buffer_flag = 1;
format_default = nullptr;
key2col = { { "id", 0 }, { "type", 1 }, { "x", 2 }, { "y", 3 },
{ "z", 4 }, { "ix", 5 }, { "iy", 6 }, { "iz", 7 } };
keyword_user = { "", "", "", "", "", "", "", "" };
}
/* ---------------------------------------------------------------------- */
@ -64,14 +67,25 @@ void DumpAtom::init_style()
// setup column string
std::string default_columns;
if (scale_flag == 0 && image_flag == 0)
columns = (char *) "id type x y z";
default_columns = "id type x y z";
else if (scale_flag == 0 && image_flag == 1)
columns = (char *) "id type x y z ix iy iz";
default_columns = "id type x y z ix iy iz";
else if (scale_flag == 1 && image_flag == 0)
columns = (char *) "id type xs ys zs";
default_columns = "id type xs ys zs";
else if (scale_flag == 1 && image_flag == 1)
columns = (char *) "id type xs ys zs ix iy iz";
default_columns = "id type xs ys zs ix iy iz";
int icol = 0;
columns.clear();
for (auto item : utils::split_words(default_columns)) {
if (columns.size()) columns += " ";
if (keyword_user[icol].size()) columns += keyword_user[icol];
else columns += item;
++icol;
}
// setup function ptrs
@ -201,9 +215,9 @@ void DumpAtom::header_unit_style_binary()
void DumpAtom::header_columns_binary()
{
int len = strlen(columns);
int len = columns.size();
fwrite(&len, sizeof(int), 1, fp);
fwrite(columns, sizeof(char), len, fp);
fwrite(columns.c_str(), sizeof(char), len, fp);
}
/* ---------------------------------------------------------------------- */
@ -293,9 +307,7 @@ void DumpAtom::header_item(bigint ndump)
}
if (time_flag) fmt::print(fp,"ITEM: TIME\n{:.16}\n",compute_time());
fmt::print(fp,"ITEM: TIMESTEP\n{}\n"
"ITEM: NUMBER OF ATOMS\n{}\n",
update->ntimestep, ndump);
fmt::print(fp, "ITEM: TIMESTEP\n{}\nITEM: NUMBER OF ATOMS\n{}\n", update->ntimestep, ndump);
fmt::print(fp,"ITEM: BOX BOUNDS {}\n"
"{:>1.16e} {:>1.16e}\n"
@ -316,9 +328,7 @@ void DumpAtom::header_item_triclinic(bigint ndump)
}
if (time_flag) fmt::print(fp,"ITEM: TIME\n{:.16}\n",compute_time());
fmt::print(fp,"ITEM: TIMESTEP\n{}\n"
"ITEM: NUMBER OF ATOMS\n{}\n",
update->ntimestep, ndump);
fmt::print(fp, "ITEM: TIMESTEP\n{}\nITEM: NUMBER OF ATOMS\n{}\n", update->ntimestep, ndump);
fmt::print(fp,"ITEM: BOX BOUNDS xy xz yz {}\n"
"{:>1.16e} {:>1.16e} {:>1.16e}\n"

View File

@ -36,7 +36,7 @@ class DumpAtom : public Dump {
int scale_flag; // 1 if atom coords are scaled, 0 if no
int image_flag; // 1 if append box count to atom coords, 0 if no
char *columns; // column labels
std::string columns; // column labels
void init_style() override;
int modify_param(int, char **) override;

View File

@ -53,26 +53,26 @@ DumpCFG::DumpCFG(LAMMPS *lmp, int narg, char **arg) :
if (strcmp(earg[2],"xs") == 0) {
if (strcmp(earg[3],"ysu") == 0 || strcmp(earg[4],"zsu") == 0)
error->all(FLERR,
"Dump cfg arguments can not mix xs|ys|zs with xsu|ysu|zsu");
error->all(FLERR,"Dump cfg arguments can not mix xs|ys|zs with xsu|ysu|zsu");
unwrapflag = 0;
} else {
if (strcmp(earg[3],"ys") == 0 || strcmp(earg[4],"zs") == 0)
error->all(FLERR,
"Dump cfg arguments can not mix xs|ys|zs with xsu|ysu|zsu");
error->all(FLERR,"Dump cfg arguments can not mix xs|ys|zs with xsu|ysu|zsu");
unwrapflag = 1;
}
// setup auxiliary property name strings
// convert 'X_ID[m]' (X=c,f,v) to 'X_ID_m'
if (nfield > 5) auxname = new char*[nfield];
if (nfield > 5) auxname = new char*[nfield-5];
else auxname = nullptr;
int i = 0;
key2col.clear();
keyword_user.resize(nfield-5);
for (int iarg = 5; iarg < nfield; iarg++, i++) {
ArgInfo argi(earg[iarg],ArgInfo::COMPUTE|ArgInfo::FIX|ArgInfo::VARIABLE
|ArgInfo::DNAME|ArgInfo::INAME);
ArgInfo argi(earg[iarg],ArgInfo::COMPUTE|ArgInfo::FIX|ArgInfo::VARIABLE|
ArgInfo::DNAME|ArgInfo::INAME);
if (argi.get_dim() == 1) {
std::string newarg = fmt::format("{}_{}_{}", earg[iarg][0], argi.get_name(), argi.get_index1());
@ -80,6 +80,8 @@ DumpCFG::DumpCFG(LAMMPS *lmp, int narg, char **arg) :
} else {
auxname[i] = utils::strdup(earg[iarg]);
}
key2col[earg[iarg]] = i;
keyword_user[i].clear();
}
}
@ -88,8 +90,8 @@ DumpCFG::DumpCFG(LAMMPS *lmp, int narg, char **arg) :
DumpCFG::~DumpCFG()
{
if (auxname) {
for (int i = 0; i < nfield-5; i++) delete [] auxname[i];
delete [] auxname;
for (int i = 0; i < nfield-5; i++) delete[] auxname[i];
delete[] auxname;
}
}
@ -137,7 +139,10 @@ void DumpCFG::write_header(bigint n)
header += fmt::format(".NO_VELOCITY.\n");
header += fmt::format("entry_count = {}\n",nfield-2);
for (int i = 0; i < nfield-5; i++)
header += fmt::format("auxiliary[{}] = {}\n",i,auxname[i]);
if (keyword_user[i].size())
header += fmt::format("auxiliary[{}] = {}\n",i,keyword_user[i]);
else
header += fmt::format("auxiliary[{}] = {}\n",i,auxname[i]);
fmt::print(fp, header);
}

View File

@ -55,14 +55,11 @@ enum{LT,LE,GT,GE,EQ,NEQ,XOR};
DumpCustom::DumpCustom(LAMMPS *lmp, int narg, char **arg) :
Dump(lmp, narg, arg),
idregion(nullptr), thresh_array(nullptr), thresh_op(nullptr), thresh_value(nullptr),
thresh_last(nullptr), thresh_fix(nullptr),
thresh_fixID(nullptr), thresh_first(nullptr),
earg(nullptr), vtype(nullptr), vformat(nullptr), columns(nullptr), choose(nullptr),
dchoose(nullptr), clist(nullptr), field2index(nullptr),
argindex(nullptr), id_compute(nullptr),
compute(nullptr), id_fix(nullptr), fix(nullptr),
id_variable(nullptr), variable(nullptr),
vbuf(nullptr), id_custom(nullptr), custom(nullptr), custom_flag(nullptr),
thresh_last(nullptr), thresh_fix(nullptr), thresh_fixID(nullptr), thresh_first(nullptr),
earg(nullptr), vtype(nullptr), vformat(nullptr), columns(nullptr), columns_default(nullptr),
choose(nullptr), dchoose(nullptr), clist(nullptr), field2index(nullptr), argindex(nullptr),
id_compute(nullptr), compute(nullptr), id_fix(nullptr), fix(nullptr), id_variable(nullptr),
variable(nullptr), vbuf(nullptr), id_custom(nullptr), custom(nullptr), custom_flag(nullptr),
typenames(nullptr), pack_choice(nullptr)
{
if (narg == 5) error->all(FLERR,"No dump custom arguments specified");
@ -180,13 +177,14 @@ DumpCustom::DumpCustom(LAMMPS *lmp, int narg, char **arg) :
// setup column string
cols.clear();
keyword_user.resize(nfield);
for (int iarg = 0; iarg < nfield; iarg++) {
key2col[earg[iarg]] = iarg;
keyword_user[iarg].clear();
if (cols.size()) cols += " ";
cols += earg[iarg];
cols += " ";
}
// remove trailing blank and copy
cols.resize(cols.size()-1);
columns = utils::strdup(cols);
columns_default = utils::strdup(cols);
}
/* ---------------------------------------------------------------------- */
@ -257,6 +255,7 @@ DumpCustom::~DumpCustom()
delete[] format_column_user;
}
delete[] columns_default;
delete[] columns;
}
@ -264,6 +263,19 @@ DumpCustom::~DumpCustom()
void DumpCustom::init_style()
{
// assemble ITEMS: column string from defaults and user values
delete[] columns;
std::string combined;
int icol = 0;
for (auto item : utils::split_words(columns_default)) {
if (combined.size()) combined += " ";
if (keyword_user[icol].size()) combined += keyword_user[icol];
else combined += item;
++icol;
}
columns = utils::strdup(combined);
// format = copy of default or user-specified line format
delete[] format;

View File

@ -60,6 +60,7 @@ class DumpCustom : public Dump {
char **vformat; // format string for each vector element
//
char *columns; // column labels
char *columns_default;
//
int nchoose; // # of selected atoms
int maxlocal; // size of atom selection and variable arrays

File diff suppressed because it is too large Load Diff

View File

@ -249,11 +249,11 @@ void Modify::init()
for (i = 0; i < nfix; i++)
if (!fix[i]->dynamic_group_allow && group->dynamic[fix[i]->igroup])
error->all(FLERR, "Fix {} does not allow use with a dynamic group", fix[i]->id);
error->all(FLERR, "Fix {} does not allow use with a dynamic group", fix[i]->style);
for (i = 0; i < ncompute; i++)
if (!compute[i]->dynamic_group_allow && group->dynamic[compute[i]->igroup])
error->all(FLERR, "Compute {} does not allow use with a dynamic group", compute[i]->id);
error->all(FLERR, "Compute {} does not allow use with a dynamic group", compute[i]->style);
// warn if any particle is time integrated more than once

View File

@ -252,8 +252,12 @@ void Thermo::init()
format[i] += format_this + " ";
else if (lineflag == YAMLLINE)
format[i] += format_this + ", ";
else
format[i] += fmt::format("{:<8} = {} ", keyword[i], format_this);
else {
if (keyword_user[i].size())
format[i] += fmt::format("{:<8} = {} ", keyword_user[i], format_this);
else
format[i] += fmt::format("{:<8} = {} ", keyword[i], format_this);
}
}
// chop off trailing blank or add closing bracket if needed and then add newline
@ -324,11 +328,13 @@ void Thermo::header()
std::string hdr;
if (lineflag == YAMLLINE) hdr = "---\nkeywords: [";
for (int i = 0; i < nfield; i++) {
auto head = keyword[i];
if (keyword_user[i].size()) head = keyword_user[i];
if (lineflag == ONELINE) {
if (vtype[i] == FLOAT)
hdr += fmt::format("{:^14} ", keyword[i]);
hdr += fmt::format("{:^14} ", head);
else if ((vtype[i] == INT) || (vtype[i] == BIGINT))
hdr += fmt::format("{:^11} ", keyword[i]);
hdr += fmt::format("{:^11} ", head);
} else if (lineflag == YAMLLINE) {
hdr += keyword[i];
hdr += ", ";
@ -622,6 +628,29 @@ void Thermo::modify_params(int narg, char **arg)
error->all(FLERR, "Illegal thermo_modify command");
iarg += 2;
} else if (strcmp(arg[iarg], "colname") == 0) {
if (iarg + 2 > narg) error->all(FLERR, "Illegal thermo_modify command");
if (strcmp(arg[iarg + 1], "default") == 0) {
for (auto item : keyword_user) item.clear();
iarg += 2;
} else {
if (iarg + 3 > narg) error->all(FLERR, "Illegal thermo_modify command");
int icol = -1;
if (utils::is_integer(arg[iarg + 1])) {
icol = utils::inumeric(FLERR,arg[iarg + 1],false,lmp);
if (icol < 0) icol = nfield_initial + icol + 1;
icol--;
} else {
try {
icol = key2col.at(arg[iarg + 1]);
} catch (std::out_of_range &) {
icol = -1;
}
}
if ((icol < 0) || (icol >= nfield_initial)) error->all(FLERR, "Illegal thermo_modify command");
keyword_user[icol] = arg[iarg+2];
iarg += 3;
}
} else if (strcmp(arg[iarg], "format") == 0) {
if (iarg + 2 > narg) error->all(FLERR, "Illegal thermo_modify command");
@ -630,7 +659,7 @@ void Thermo::modify_params(int narg, char **arg)
format_int_user.clear();
format_bigint_user.clear();
format_float_user.clear();
for (int i = 0; i < nfield_initial + 1; ++i) format_column_user[i].clear();
for (auto item : format_column_user) item.clear();
iarg += 2;
continue;
}
@ -646,14 +675,24 @@ void Thermo::modify_params(int narg, char **arg)
found = format_int_user.find('d', found);
if (found == std::string::npos)
error->all(FLERR, "Thermo_modify int format does not contain a d conversion character");
format_bigint_user =
format_int_user.replace(found, 1, std::string(BIGINT_FORMAT).substr(1));
format_bigint_user = format_int_user.replace(found, 1, std::string(BIGINT_FORMAT).substr(1));
} else if (strcmp(arg[iarg + 1], "float") == 0) {
format_float_user = arg[iarg + 2];
} else {
int i = utils::inumeric(FLERR, arg[iarg + 1], false, lmp) - 1;
if (i < 0 || i >= nfield_initial + 1) error->all(FLERR, "Illegal thermo_modify command");
format_column_user[i] = arg[iarg + 2];
int icol = -1;
if (utils::is_integer(arg[iarg + 1])) {
icol = utils::inumeric(FLERR, arg[iarg + 1], false, lmp);
if (icol < 0) icol = nfield_initial + icol + 1;
icol--;
} else {
try {
icol = key2col.at(arg[iarg + 1]);
} catch (std::out_of_range &) {
icol = -1;
}
}
if (icol < 0 || icol >= nfield_initial + 1) error->all(FLERR, "Illegal thermo_modify command");
format_column_user[icol] = arg[iarg + 2];
}
iarg += 3;
@ -675,10 +714,12 @@ void Thermo::allocate()
keyword.resize(n);
format.resize(n);
format_column_user.resize(n);
keyword_user.resize(n);
for (int i = 0; i < n; i++) {
keyword[i].clear();
format[i].clear();
format_column_user[i].clear();
keyword_user[i].clear();
}
vfunc = new FnPtr[n];
@ -702,6 +743,12 @@ void Thermo::allocate()
nvariable = 0;
id_variable = new char *[n];
variables = new int[n];
int i = 0;
key2col.clear();
for (auto item : utils::split_words(line)) {
key2col[item] = i++;
}
}
/* ----------------------------------------------------------------------

View File

@ -15,6 +15,7 @@
#define LMP_THERMO_H
#include "pointers.h"
#include <map>
namespace LAMMPS_NS {
@ -47,8 +48,9 @@ class Thermo : protected Pointers {
int nfield, nfield_initial;
int *vtype;
std::string line;
std::vector<std::string> keyword, format, format_column_user;
std::vector<std::string> keyword, format, format_column_user, keyword_user;
std::string format_line_user, format_float_user, format_int_user, format_bigint_user;
std::map<std::string, int> key2col;
int normvalue; // use this for normflag unless natoms = 0
int normuserflag; // 0 if user has not set, 1 if has

View File

@ -0,0 +1,74 @@
---
lammps_version: 24 Mar 2022
date_generated: Sun Apr 3 03:06:24 2022
epsilon: 2e-14
skip_tests:
prerequisites: ! |
atom full
fix move
pre_commands: ! ""
post_commands: ! |
fix test solute move linear 1.0 1.0 1.0
input_file: in.fourmol
natoms: 29
run_pos: ! |2
1 1.7200631633077317e+00 4.4726588069312836e+00 1.8279913975585156e+00
2 2.3019708395540222e+00 4.9515239068888608e+00 1.1431026442709245e+00
3 1.3056462211944140e+00 3.2440473127136711e+00 1.3776619853110796e+00
4 4.2283858353148673e-01 3.4915333140468068e+00 7.5128731549594785e-01
5 1.1049823864064074e+00 2.9356812874307137e+00 2.4022773187148436e+00
6 2.2941260793770599e+00 2.2271928265665291e+00 7.1569059321421302e-01
7 2.3401987106287963e+00 1.9908722649924213e+00 -4.6331132243045614e-01
8 3.1641187171852803e+00 1.5162469404461476e+00 1.3234017623263132e+00
9 3.3777459838125838e+00 1.7463366133047700e+00 2.2687764473032632e+00
10 4.0185283555536984e+00 5.7160331534826425e-01 1.0326647272886698e+00
11 3.7929780509347664e+00 1.2895245923125742e-02 1.1593733568143261e-01
12 5.0030247876861225e+00 1.5107668003242725e+00 3.8113414684627522e-01
13 6.0447273787895934e+00 1.0986800145255375e+00 3.6155527316791636e-01
14 4.6033152817257079e+00 1.5921023849403642e+00 -6.5544135388230629e-01
15 4.9756315249791303e+00 2.5633426972296931e+00 7.5623492454009922e-01
16 4.6517554244980310e+00 -3.9571104249784383e-01 2.0329083359991782e+00
17 4.2309964792710639e+00 -1.0229189433193842e-01 3.1491948328949437e+00
18 2.1384791188033843e+00 3.0177261773770208e+00 -3.5160827596876225e+00
19 1.5349125211132961e+00 2.6315969880333707e+00 -4.2472859440220647e+00
20 2.7641167828863153e+00 3.6833419064000221e+00 -3.9380850623312638e+00
21 4.9064454390208301e+00 -4.0751205255383196e+00 -3.6215576073601046e+00
22 4.3687453488627543e+00 -4.2054270536772504e+00 -4.4651491269372565e+00
23 5.7374928154769504e+00 -3.5763355905184966e+00 -3.8820297194230728e+00
24 2.0684115301174013e+00 3.1518221747664397e+00 3.1554242678474576e+00
25 1.2998381073113014e+00 3.2755513587518097e+00 2.5092990173114837e+00
26 2.5807438597688113e+00 4.0120175892854135e+00 3.2133398379059099e+00
27 -1.9613581876744359e+00 -4.3556300596085160e+00 2.1101467673534788e+00
28 -2.7406520384725965e+00 -4.0207251278130975e+00 1.5828689861678511e+00
29 -1.3108232656499081e+00 -3.5992986322410760e+00 2.2680459788743503e+00
run_vel: ! |2
1 1.0000000000000000e+00 1.0000000000000000e+00 1.0000000000000000e+00
2 1.0000000000000000e+00 1.0000000000000000e+00 1.0000000000000000e+00
3 1.0000000000000000e+00 1.0000000000000000e+00 1.0000000000000000e+00
4 1.0000000000000000e+00 1.0000000000000000e+00 1.0000000000000000e+00
5 1.0000000000000000e+00 1.0000000000000000e+00 1.0000000000000000e+00
6 1.0000000000000000e+00 1.0000000000000000e+00 1.0000000000000000e+00
7 1.0000000000000000e+00 1.0000000000000000e+00 1.0000000000000000e+00
8 1.0000000000000000e+00 1.0000000000000000e+00 1.0000000000000000e+00
9 1.0000000000000000e+00 1.0000000000000000e+00 1.0000000000000000e+00
10 1.0000000000000000e+00 1.0000000000000000e+00 1.0000000000000000e+00
11 1.0000000000000000e+00 1.0000000000000000e+00 1.0000000000000000e+00
12 1.0000000000000000e+00 1.0000000000000000e+00 1.0000000000000000e+00
13 1.0000000000000000e+00 1.0000000000000000e+00 1.0000000000000000e+00
14 1.0000000000000000e+00 1.0000000000000000e+00 1.0000000000000000e+00
15 1.0000000000000000e+00 1.0000000000000000e+00 1.0000000000000000e+00
16 1.0000000000000000e+00 1.0000000000000000e+00 1.0000000000000000e+00
17 1.0000000000000000e+00 1.0000000000000000e+00 1.0000000000000000e+00
18 -6.0936815808025862e-04 -9.3774557532468582e-04 -3.3558072507805731e-04
19 -6.9919768291957119e-04 -3.6060777270430031e-03 4.2833405289822791e-03
20 4.7777805013736515e-03 5.1003745845520452e-03 1.8002873923729241e-03
21 -9.5568188553430398e-04 1.6594630943762931e-04 -1.8199788009966615e-04
22 -3.3137518957653462e-03 -2.8683968287936054e-03 3.6384389958326871e-03
23 2.4209481134686401e-04 -4.5457709985051130e-03 2.7663581642115042e-03
24 2.5447450568861086e-04 4.8412447786110117e-04 -4.8021914527341357e-04
25 4.3722771097312743e-03 -4.5184411669545515e-03 2.5200952006556795e-03
26 -1.9250110555001179e-03 -3.0342169883610837e-03 3.5062814567984532e-03
27 -2.6510179146429716e-04 3.6306203629019116e-04 -5.6235585400647747e-04
28 -2.3068708109787484e-04 -8.5663070212203200e-04 2.1302563179109169e-03
29 -2.5054744388303732e-03 -1.6773997805290820e-04 2.8436699761004796e-03
...

View File

@ -0,0 +1,74 @@
---
lammps_version: 24 Mar 2022
date_generated: Sun Apr 3 03:06:24 2022
epsilon: 2e-14
skip_tests:
prerequisites: ! |
atom full
fix move
pre_commands: ! ""
post_commands: ! |
fix test solute move rotate -0.18 1.1 -1.8 0.1 0.5 1.0 1.0
input_file: in.fourmol
natoms: 29
run_pos: ! |2
1 -2.7993683669226810e-01 2.4726588069312840e+00 -1.7200860244148450e-01
2 3.0197083955402271e-01 2.9515239068888608e+00 -8.5689735572907566e-01
3 -6.9435377880558635e-01 1.2440473127136713e+00 -6.2233801468892025e-01
4 -1.5771614164685133e+00 1.4915333140468072e+00 -1.2487126845040524e+00
5 -8.9501761359359322e-01 9.3568128743071388e-01 4.0227731871484329e-01
6 2.9412607937705959e-01 2.2719282656652884e-01 -1.2843094067857868e+00
7 3.4019871062879570e-01 -9.1277350075789077e-03 -2.4633113224304561e+00
8 1.1641187171852796e+00 -4.8375305955385284e-01 -6.7659823767368665e-01
9 1.3777459838125827e+00 -2.5366338669523070e-01 2.6877644730326344e-01
10 2.0185283555536979e+00 -1.4283966846517369e+00 -9.6733527271132957e-01
11 1.7929780509347653e+00 -1.9871047540768751e+00 -1.8840626643185665e+00
12 3.0030247876861216e+00 -4.8923319967572887e-01 -1.6188658531537241e+00
13 4.0447273787895925e+00 -9.0131998547446424e-01 -1.6384447268320823e+00
14 2.6033152817257070e+00 -4.0789761505963706e-01 -2.6554413538823054e+00
15 2.9756315249791299e+00 5.6334269722969144e-01 -1.2437650754599001e+00
16 2.6517554244980293e+00 -2.3957110424978456e+00 3.2908335999179084e-02
17 2.2309964792710621e+00 -2.1022918943319393e+00 1.1491948328949442e+00
18 2.1384791188033843e+00 3.0177261773770208e+00 -3.5160827596876225e+00
19 1.5349125211132961e+00 2.6315969880333707e+00 -4.2472859440220647e+00
20 2.7641167828863153e+00 3.6833419064000221e+00 -3.9380850623312638e+00
21 4.9064454390208301e+00 -4.0751205255383196e+00 -3.6215576073601046e+00
22 4.3687453488627543e+00 -4.2054270536772504e+00 -4.4651491269372565e+00
23 5.7374928154769504e+00 -3.5763355905184966e+00 -3.8820297194230728e+00
24 2.0684115301174013e+00 3.1518221747664397e+00 3.1554242678474576e+00
25 1.2998381073113014e+00 3.2755513587518097e+00 2.5092990173114837e+00
26 2.5807438597688113e+00 4.0120175892854135e+00 3.2133398379059099e+00
27 -1.9613581876744359e+00 -4.3556300596085160e+00 2.1101467673534788e+00
28 -2.7406520384725965e+00 -4.0207251278130975e+00 1.5828689861678511e+00
29 -1.3108232656499081e+00 -3.5992986322410760e+00 2.2680459788743503e+00
run_vel: ! |2
1 -3.1271203016537847e+00 -1.4706662994868196e+00 1.0480451799087882e+00
2 -7.7244053214512371e+00 2.1699325352629488e+00 -3.1252573548635093e-01
3 2.4896794778365781e+00 -3.5382955941894649e+00 1.5201798493110743e+00
4 -6.4869308833104955e-01 -8.1292033418525875e+00 4.1294709797593985e+00
5 7.0834056891986288e+00 -5.2350417705319234e+00 1.9091803163460987e+00
6 6.3288343933688544e+00 2.3652656077349734e+00 -1.8155162432043723e+00
7 4.3519048787150751e+00 3.2831045265140744e+00 -2.0767427511285446e+00
8 1.2009192080844477e+01 6.8948882185832456e+00 -4.6483633173760710e+00
9 1.3367134079812072e+01 7.5614941211688285e+00 -5.1174604685656222e+00
10 1.6483139579874326e+01 1.1840191844735013e+01 -7.5684098803549391e+00
11 1.7044817849532322e+01 1.1090811320459508e+01 -7.2498874451829867e+00
12 9.4026927142316001e+00 1.7715611543038719e+01 -9.7980750429425196e+00
13 1.1654554684130250e+01 2.3557507710224332e+01 -1.2944209323525191e+01
14 6.0462972823495269e+00 1.6058458836709743e+01 -8.6338591465898240e+00
15 4.5607069302660133e+00 1.7352314681858498e+01 -9.1322280339558510e+00
16 2.4697122832464643e+01 1.4824797394989091e+01 -9.8821109807410092e+00
17 2.6178917667758348e+01 1.1844754445814953e+01 -8.5402689896833106e+00
18 -6.0936815808025862e-04 -9.3774557532468582e-04 -3.3558072507805731e-04
19 -6.9919768291957119e-04 -3.6060777270430031e-03 4.2833405289822791e-03
20 4.7777805013736515e-03 5.1003745845520452e-03 1.8002873923729241e-03
21 -9.5568188553430398e-04 1.6594630943762931e-04 -1.8199788009966615e-04
22 -3.3137518957653462e-03 -2.8683968287936054e-03 3.6384389958326871e-03
23 2.4209481134686401e-04 -4.5457709985051130e-03 2.7663581642115042e-03
24 2.5447450568861086e-04 4.8412447786110117e-04 -4.8021914527341357e-04
25 4.3722771097312743e-03 -4.5184411669545515e-03 2.5200952006556795e-03
26 -1.9250110555001179e-03 -3.0342169883610837e-03 3.5062814567984532e-03
27 -2.6510179146429716e-04 3.6306203629019116e-04 -5.6235585400647747e-04
28 -2.3068708109787484e-04 -8.5663070212203200e-04 2.1302563179109169e-03
29 -2.5054744388303732e-03 -1.6773997805290820e-04 2.8436699761004796e-03
...

View File

@ -0,0 +1,74 @@
---
lammps_version: 24 Mar 2022
date_generated: Sun Apr 3 03:07:42 2022
epsilon: 2e-14
skip_tests:
prerequisites: ! |
atom full
fix move
pre_commands: ! ""
post_commands: ! |
fix test solute move transrot 0.1 0.2 -0.1 -0.18 1.1 -1.8 0.1 0.5 1.0 1.0
input_file: in.fourmol
natoms: 29
run_pos: ! |2
1 -7.9936836692268087e-02 2.8726588069312839e+00 -3.7200860244148448e-01
2 5.0197083955402277e-01 3.3515239068888607e+00 -1.0568973557290757e+00
3 -4.9435377880558634e-01 1.6440473127136714e+00 -8.2233801468892032e-01
4 -1.3771614164685133e+00 1.8915333140468071e+00 -1.4487126845040523e+00
5 -6.9501761359359326e-01 1.3356812874307140e+00 2.0227731871484328e-01
6 4.9412607937705960e-01 6.2719282656652886e-01 -1.4843094067857867e+00
7 5.4019871062879576e-01 3.9087226499242111e-01 -2.6633113224304563e+00
8 1.3641187171852796e+00 -8.3753059553852816e-02 -8.7659823767368672e-01
9 1.5777459838125827e+00 1.4633661330476933e-01 6.8776447303263433e-02
10 2.2185283555536981e+00 -1.0283966846517369e+00 -1.1673352727113295e+00
11 1.9929780509347652e+00 -1.5871047540768752e+00 -2.0840626643185667e+00
12 3.2030247876861218e+00 -8.9233199675728847e-02 -1.8188658531537241e+00
13 4.2447273787895927e+00 -5.0131998547446421e-01 -1.8384447268320823e+00
14 2.8033152817257072e+00 -7.8976150596370420e-03 -2.8554413538823056e+00
15 3.1756315249791300e+00 9.6334269722969146e-01 -1.4437650754599001e+00
16 2.8517554244980294e+00 -1.9957110424978457e+00 -1.6709166400082093e-01
17 2.4309964792710623e+00 -1.7022918943319394e+00 9.4919483289494422e-01
18 2.1384791188033843e+00 3.0177261773770208e+00 -3.5160827596876225e+00
19 1.5349125211132961e+00 2.6315969880333707e+00 -4.2472859440220647e+00
20 2.7641167828863153e+00 3.6833419064000221e+00 -3.9380850623312638e+00
21 4.9064454390208301e+00 -4.0751205255383196e+00 -3.6215576073601046e+00
22 4.3687453488627543e+00 -4.2054270536772504e+00 -4.4651491269372565e+00
23 5.7374928154769504e+00 -3.5763355905184966e+00 -3.8820297194230728e+00
24 2.0684115301174013e+00 3.1518221747664397e+00 3.1554242678474576e+00
25 1.2998381073113014e+00 3.2755513587518097e+00 2.5092990173114837e+00
26 2.5807438597688113e+00 4.0120175892854135e+00 3.2133398379059099e+00
27 -1.9613581876744359e+00 -4.3556300596085160e+00 2.1101467673534788e+00
28 -2.7406520384725965e+00 -4.0207251278130975e+00 1.5828689861678511e+00
29 -1.3108232656499081e+00 -3.5992986322410760e+00 2.2680459788743503e+00
run_vel: ! |2
1 -3.0271203016537847e+00 -1.2706662994868196e+00 9.4804517990878823e-01
2 -7.6244053214512375e+00 2.3699325352629490e+00 -4.1252573548635096e-01
3 2.5896794778365781e+00 -3.3382955941894648e+00 1.4201798493110742e+00
4 -5.4869308833104957e-01 -7.9292033418525874e+00 4.0294709797593988e+00
5 7.1834056891986284e+00 -5.0350417705319233e+00 1.8091803163460987e+00
6 6.4288343933688541e+00 2.5652656077349736e+00 -1.9155162432043724e+00
7 4.4519048787150748e+00 3.4831045265140745e+00 -2.1767427511285447e+00
8 1.2109192080844476e+01 7.0948882185832458e+00 -4.7483633173760706e+00
9 1.3467134079812071e+01 7.7614941211688286e+00 -5.2174604685656218e+00
10 1.6583139579874327e+01 1.2040191844735013e+01 -7.6684098803549388e+00
11 1.7144817849532323e+01 1.1290811320459508e+01 -7.3498874451829863e+00
12 9.5026927142315998e+00 1.7915611543038718e+01 -9.8980750429425193e+00
13 1.1754554684130250e+01 2.3757507710224331e+01 -1.3044209323525191e+01
14 6.1462972823495265e+00 1.6258458836709742e+01 -8.7338591465898237e+00
15 4.6607069302660129e+00 1.7552314681858498e+01 -9.2322280339558507e+00
16 2.4797122832464645e+01 1.5024797394989090e+01 -9.9821109807410089e+00
17 2.6278917667758350e+01 1.2044754445814952e+01 -8.6402689896833103e+00
18 -6.0936815808025862e-04 -9.3774557532468582e-04 -3.3558072507805731e-04
19 -6.9919768291957119e-04 -3.6060777270430031e-03 4.2833405289822791e-03
20 4.7777805013736515e-03 5.1003745845520452e-03 1.8002873923729241e-03
21 -9.5568188553430398e-04 1.6594630943762931e-04 -1.8199788009966615e-04
22 -3.3137518957653462e-03 -2.8683968287936054e-03 3.6384389958326871e-03
23 2.4209481134686401e-04 -4.5457709985051130e-03 2.7663581642115042e-03
24 2.5447450568861086e-04 4.8412447786110117e-04 -4.8021914527341357e-04
25 4.3722771097312743e-03 -4.5184411669545515e-03 2.5200952006556795e-03
26 -1.9250110555001179e-03 -3.0342169883610837e-03 3.5062814567984532e-03
27 -2.6510179146429716e-04 3.6306203629019116e-04 -5.6235585400647747e-04
28 -2.3068708109787484e-04 -8.5663070212203200e-04 2.1302563179109169e-03
29 -2.5054744388303732e-03 -1.6773997805290820e-04 2.8436699761004796e-03
...

View File

@ -0,0 +1,80 @@
---
lammps_version: 24 Mar 2022
date_generated: Sun Apr 3 03:16:48 2022
epsilon: 2e-14
skip_tests:
prerequisites: ! |
atom full
fix move
pre_commands: ! |
variable vx equal 1.0
variable x equal vdisplace(0.0,v_vx)
variable vy equal 0.0
variable y equal 0.0
variable vz equal 0.0
variable z equal 0.0
post_commands: ! |
fix test solute move variable v_x v_y v_z v_vx v_vy v_vz
input_file: in.fourmol
natoms: 29
run_pos: ! |2
1 1.7200631633077317e+00 2.4726588069312840e+00 -1.7200860244148433e-01
2 2.3019708395540222e+00 2.9515239068888608e+00 -8.5689735572907566e-01
3 1.3056462211944140e+00 1.2440473127136711e+00 -6.2233801468892025e-01
4 4.2283858353148673e-01 1.4915333140468066e+00 -1.2487126845040522e+00
5 1.1049823864064074e+00 9.3568128743071344e-01 4.0227731871484346e-01
6 2.2941260793770599e+00 2.2719282656652909e-01 -1.2843094067857870e+00
7 2.3401987106287963e+00 -9.1277350075786561e-03 -2.4633113224304561e+00
8 3.1641187171852803e+00 -4.8375305955385234e-01 -6.7659823767368688e-01
9 3.3777459838125838e+00 -2.5366338669522998e-01 2.6877644730326306e-01
10 4.0185283555536984e+00 -1.4283966846517357e+00 -9.6733527271133024e-01
11 3.7929780509347664e+00 -1.9871047540768743e+00 -1.8840626643185674e+00
12 5.0030247876861225e+00 -4.8923319967572748e-01 -1.6188658531537248e+00
13 6.0447273787895934e+00 -9.0131998547446246e-01 -1.6384447268320836e+00
14 4.6033152817257079e+00 -4.0789761505963579e-01 -2.6554413538823063e+00
15 4.9756315249791303e+00 5.6334269722969288e-01 -1.2437650754599008e+00
16 4.6517554244980310e+00 -2.3957110424978438e+00 3.2908335999178327e-02
17 4.2309964792710639e+00 -2.1022918943319384e+00 1.1491948328949437e+00
18 2.1384791188033843e+00 3.0177261773770208e+00 -3.5160827596876225e+00
19 1.5349125211132961e+00 2.6315969880333707e+00 -4.2472859440220647e+00
20 2.7641167828863153e+00 3.6833419064000221e+00 -3.9380850623312638e+00
21 4.9064454390208301e+00 -4.0751205255383196e+00 -3.6215576073601046e+00
22 4.3687453488627543e+00 -4.2054270536772504e+00 -4.4651491269372565e+00
23 5.7374928154769504e+00 -3.5763355905184966e+00 -3.8820297194230728e+00
24 2.0684115301174013e+00 3.1518221747664397e+00 3.1554242678474576e+00
25 1.2998381073113014e+00 3.2755513587518097e+00 2.5092990173114837e+00
26 2.5807438597688113e+00 4.0120175892854135e+00 3.2133398379059099e+00
27 -1.9613581876744359e+00 -4.3556300596085160e+00 2.1101467673534788e+00
28 -2.7406520384725965e+00 -4.0207251278130975e+00 1.5828689861678511e+00
29 -1.3108232656499081e+00 -3.5992986322410760e+00 2.2680459788743503e+00
run_vel: ! |2
1 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00
2 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00
3 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00
4 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00
5 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00
6 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00
7 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00
8 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00
9 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00
10 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00
11 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00
12 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00
13 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00
14 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00
15 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00
16 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00
17 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00
18 -6.0936815808025862e-04 -9.3774557532468582e-04 -3.3558072507805731e-04
19 -6.9919768291957119e-04 -3.6060777270430031e-03 4.2833405289822791e-03
20 4.7777805013736515e-03 5.1003745845520452e-03 1.8002873923729241e-03
21 -9.5568188553430398e-04 1.6594630943762931e-04 -1.8199788009966615e-04
22 -3.3137518957653462e-03 -2.8683968287936054e-03 3.6384389958326871e-03
23 2.4209481134686401e-04 -4.5457709985051130e-03 2.7663581642115042e-03
24 2.5447450568861086e-04 4.8412447786110117e-04 -4.8021914527341357e-04
25 4.3722771097312743e-03 -4.5184411669545515e-03 2.5200952006556795e-03
26 -1.9250110555001179e-03 -3.0342169883610837e-03 3.5062814567984532e-03
27 -2.6510179146429716e-04 3.6306203629019116e-04 -5.6235585400647747e-04
28 -2.3068708109787484e-04 -8.5663070212203200e-04 2.1302563179109169e-03
29 -2.5054744388303732e-03 -1.6773997805290820e-04 2.8436699761004796e-03
...

View File

@ -0,0 +1,74 @@
---
lammps_version: 24 Mar 2022
date_generated: Sun Apr 3 03:06:24 2022
epsilon: 2e-14
skip_tests:
prerequisites: ! |
atom full
fix move
pre_commands: ! ""
post_commands: ! |
fix test solute move wiggle 1.0 0.5 -1.0 1.0
input_file: in.fourmol
natoms: 29
run_pos: ! |2
1 -2.7993683669226882e-01 2.4726588069312836e+00 -1.7200860244148383e-01
2 3.0197083955402154e-01 2.9515239068888603e+00 -8.5689735572907522e-01
3 -6.9435377880558646e-01 1.2440473127136709e+00 -6.2233801468891981e-01
4 -1.5771614164685137e+00 1.4915333140468063e+00 -1.2487126845040517e+00
5 -8.9501761359359300e-01 9.3568128743071322e-01 4.0227731871484396e-01
6 2.9412607937705959e-01 2.2719282656652884e-01 -1.2843094067857865e+00
7 3.4019871062879559e-01 -9.1277350075789007e-03 -2.4633113224304557e+00
8 1.1641187171852800e+00 -4.8375305955385256e-01 -6.7659823767368643e-01
9 1.3777459838125834e+00 -2.5366338669523020e-01 2.6877644730326355e-01
10 2.0185283555536984e+00 -1.4283966846517360e+00 -9.6733527271132980e-01
11 1.7929780509347661e+00 -1.9871047540768745e+00 -1.8840626643185669e+00
12 3.0030247876861220e+00 -4.8923319967572770e-01 -1.6188658531537243e+00
13 4.0447273787895925e+00 -9.0131998547446268e-01 -1.6384447268320832e+00
14 2.6033152817257070e+00 -4.0789761505963601e-01 -2.6554413538823058e+00
15 2.9756315249791299e+00 5.6334269722969266e-01 -1.2437650754599003e+00
16 2.6517554244980301e+00 -2.3957110424978443e+00 3.2908335999178820e-02
17 2.2309964792710635e+00 -2.1022918943319389e+00 1.1491948328949442e+00
18 2.1384791188033843e+00 3.0177261773770208e+00 -3.5160827596876225e+00
19 1.5349125211132961e+00 2.6315969880333707e+00 -4.2472859440220647e+00
20 2.7641167828863153e+00 3.6833419064000221e+00 -3.9380850623312638e+00
21 4.9064454390208301e+00 -4.0751205255383196e+00 -3.6215576073601046e+00
22 4.3687453488627543e+00 -4.2054270536772504e+00 -4.4651491269372565e+00
23 5.7374928154769504e+00 -3.5763355905184966e+00 -3.8820297194230728e+00
24 2.0684115301174013e+00 3.1518221747664397e+00 3.1554242678474576e+00
25 1.2998381073113014e+00 3.2755513587518097e+00 2.5092990173114837e+00
26 2.5807438597688113e+00 4.0120175892854135e+00 3.2133398379059099e+00
27 -1.9613581876744359e+00 -4.3556300596085160e+00 2.1101467673534788e+00
28 -2.7406520384725965e+00 -4.0207251278130975e+00 1.5828689861678511e+00
29 -1.3108232656499081e+00 -3.5992986322410760e+00 2.2680459788743503e+00
run_vel: ! |2
1 6.2831853071795862e+00 3.1415926535897931e+00 -6.2831853071795862e+00
2 6.2831853071795862e+00 3.1415926535897931e+00 -6.2831853071795862e+00
3 6.2831853071795862e+00 3.1415926535897931e+00 -6.2831853071795862e+00
4 6.2831853071795862e+00 3.1415926535897931e+00 -6.2831853071795862e+00
5 6.2831853071795862e+00 3.1415926535897931e+00 -6.2831853071795862e+00
6 6.2831853071795862e+00 3.1415926535897931e+00 -6.2831853071795862e+00
7 6.2831853071795862e+00 3.1415926535897931e+00 -6.2831853071795862e+00
8 6.2831853071795862e+00 3.1415926535897931e+00 -6.2831853071795862e+00
9 6.2831853071795862e+00 3.1415926535897931e+00 -6.2831853071795862e+00
10 6.2831853071795862e+00 3.1415926535897931e+00 -6.2831853071795862e+00
11 6.2831853071795862e+00 3.1415926535897931e+00 -6.2831853071795862e+00
12 6.2831853071795862e+00 3.1415926535897931e+00 -6.2831853071795862e+00
13 6.2831853071795862e+00 3.1415926535897931e+00 -6.2831853071795862e+00
14 6.2831853071795862e+00 3.1415926535897931e+00 -6.2831853071795862e+00
15 6.2831853071795862e+00 3.1415926535897931e+00 -6.2831853071795862e+00
16 6.2831853071795862e+00 3.1415926535897931e+00 -6.2831853071795862e+00
17 6.2831853071795862e+00 3.1415926535897931e+00 -6.2831853071795862e+00
18 -6.0936815808025862e-04 -9.3774557532468582e-04 -3.3558072507805731e-04
19 -6.9919768291957119e-04 -3.6060777270430031e-03 4.2833405289822791e-03
20 4.7777805013736515e-03 5.1003745845520452e-03 1.8002873923729241e-03
21 -9.5568188553430398e-04 1.6594630943762931e-04 -1.8199788009966615e-04
22 -3.3137518957653462e-03 -2.8683968287936054e-03 3.6384389958326871e-03
23 2.4209481134686401e-04 -4.5457709985051130e-03 2.7663581642115042e-03
24 2.5447450568861086e-04 4.8412447786110117e-04 -4.8021914527341357e-04
25 4.3722771097312743e-03 -4.5184411669545515e-03 2.5200952006556795e-03
26 -1.9250110555001179e-03 -3.0342169883610837e-03 3.5062814567984532e-03
27 -2.6510179146429716e-04 3.6306203629019116e-04 -5.6235585400647747e-04
28 -2.3068708109787484e-04 -8.5663070212203200e-04 2.1302563179109169e-03
29 -2.5054744388303732e-03 -1.6773997805290820e-04 2.8436699761004796e-03
...

View File

@ -7,6 +7,7 @@ EXAMPLES_DIR=os.path.abspath(os.path.join(__file__, '..', '..', '..', 'examples'
DEFAULT_STYLE_EXAMPLE_LOG="melt/log.8Apr21.melt.g++.1"
MULTI_STYLE_EXAMPLE_LOG="peptide/log.27Nov18.peptide.g++.1"
AVG_CHUNK_FILE="VISCOSITY/profile.13Oct16.nemd.2d.g++.1"
YAML_STYLE_EXAMPLE_LOG="yaml/log.7Apr22.yaml.g++.1"
class Logfiles(unittest.TestCase):
def testLogFileNotFound(self):
@ -58,6 +59,27 @@ class Logfiles(unittest.TestCase):
self.assertEqual(run0["Step"], list(range(0,350, 50)))
def testYamlLogFile(self):
log = LogFile(os.path.join(EXAMPLES_DIR, YAML_STYLE_EXAMPLE_LOG))
self.assertEqual(len(log.runs), 2)
run = log.runs[0]
self.assertEqual(len(run.keys()), 12)
self.assertIn("Step", run)
self.assertIn("Temp", run)
self.assertIn("E_vdwl", run)
self.assertIn("E_coul", run)
self.assertIn("E_bond", run)
self.assertIn("E_angle", run)
self.assertIn("Press", run)
self.assertEqual(len(run["Step"]), 11)
self.assertEqual(len(run["Temp"]), 11)
self.assertEqual(len(run["E_vdwl"]), 11)
self.assertEqual(len(run["E_coul"]), 11)
self.assertEqual(len(run["E_bond"]), 11)
self.assertEqual(len(run["E_angle"]), 11)
self.assertEqual(len(run["Press"]), 11)
self.assertEqual(log.runs[0]["Step"], [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100])
class AvgChunkFiles(unittest.TestCase):
def testAvgChunkFileNotFound(self):