Merge branch 'develop' into avoid-bigint-format-scanf
This commit is contained in:
@ -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)
|
||||
|
||||
15
cmake/presets/kokkos-sycl.cmake
Normal file
15
cmake/presets/kokkos-sycl.cmake
Normal 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)
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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>`
|
||||
|
||||
@ -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])
|
||||
|
||||
@ -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>` -
|
||||
|
||||
99
doc/src/compute_fep_ta.rst
Normal file
99
doc/src/compute_fep_ta.rst
Normal 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)
|
||||
@ -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
|
||||
""""""""""""""""
|
||||
|
||||
@ -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
|
||||
""""""""""""""""
|
||||
|
||||
@ -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*
|
||||
|
||||
@ -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
|
||||
|
||||
----------
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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.
|
||||
|
||||
6174
examples/PACKAGES/fep/ta/data.spce
Normal file
6174
examples/PACKAGES/fep/ta/data.spce
Normal file
File diff suppressed because it is too large
Load Diff
49
examples/PACKAGES/fep/ta/in.spce.lmp
Normal file
49
examples/PACKAGES/fep/ta/in.spce.lmp
Normal 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
|
||||
|
||||
689
examples/PACKAGES/fep/ta/log.spce
Normal file
689
examples/PACKAGES/fep/ta/log.spce
Normal 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
|
||||
22
examples/PACKAGES/fep/ta/spce.fep.ta
Normal file
22
examples/PACKAGES/fep/ta/spce.fep.ta
Normal 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
|
||||
@ -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
37
examples/yaml/in.yaml
Normal 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
|
||||
151
examples/yaml/log.7Apr22.yaml.g++.1
Normal file
151
examples/yaml/log.7Apr22.yaml.g++.1
Normal 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
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
2
src/.gitignore
vendored
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
517
src/FEP/compute_fep_ta.cpp
Normal 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
89
src/FEP/compute_fep_ta.h
Normal 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.
|
||||
|
||||
*/
|
||||
@ -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()
|
||||
{
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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
@ -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>
|
||||
|
||||
@ -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");
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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) :
|
||||
|
||||
@ -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];
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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];
|
||||
}
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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];
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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]);
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
66
src/dump.cpp
66
src/dump.cpp
@ -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));
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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
|
||||
|
||||
852
src/fix_move.cpp
852
src/fix_move.cpp
File diff suppressed because it is too large
Load Diff
@ -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
|
||||
|
||||
|
||||
@ -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++;
|
||||
}
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
|
||||
@ -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
|
||||
|
||||
74
unittest/force-styles/tests/fix-timestep-move_linear.yaml
Normal file
74
unittest/force-styles/tests/fix-timestep-move_linear.yaml
Normal 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
|
||||
...
|
||||
74
unittest/force-styles/tests/fix-timestep-move_rotate.yaml
Normal file
74
unittest/force-styles/tests/fix-timestep-move_rotate.yaml
Normal 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
|
||||
...
|
||||
74
unittest/force-styles/tests/fix-timestep-move_transrot.yaml
Normal file
74
unittest/force-styles/tests/fix-timestep-move_transrot.yaml
Normal 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
|
||||
...
|
||||
80
unittest/force-styles/tests/fix-timestep-move_variable.yaml
Normal file
80
unittest/force-styles/tests/fix-timestep-move_variable.yaml
Normal 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
|
||||
...
|
||||
74
unittest/force-styles/tests/fix-timestep-move_wiggle.yaml
Normal file
74
unittest/force-styles/tests/fix-timestep-move_wiggle.yaml
Normal 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
|
||||
...
|
||||
@ -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):
|
||||
|
||||
Reference in New Issue
Block a user