Merge branch 'lammps:develop' into fortran-tinkering
This commit is contained in:
@ -6,10 +6,13 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
option(DOWNLOAD_MDI "Download and compile the MDI library instead of using an already installed one" ${DOWNLOAD_MDI_DEFAULT})
|
option(DOWNLOAD_MDI "Download and compile the MDI library instead of using an already installed one" ${DOWNLOAD_MDI_DEFAULT})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if(DOWNLOAD_MDI)
|
if(DOWNLOAD_MDI)
|
||||||
message(STATUS "MDI download requested - we will build our own")
|
message(STATUS "MDI download requested - we will build our own")
|
||||||
set(MDI_URL "https://github.com/MolSSI-MDI/MDI_Library/archive/v1.4.1.tar.gz" CACHE STRING "URL for MDI tarball")
|
set(MDI_URL "https://github.com/MolSSI-MDI/MDI_Library/archive/v1.4.10.tar.gz" CACHE STRING "URL for MDI tarball")
|
||||||
set(MDI_MD5 "f9505fccd4c79301a619f6452dad4ad9" CACHE STRING "MD5 checksum for MDI tarball")
|
set(MDI_MD5 "1c203b7fd462d9934834f643f09f3c06" CACHE STRING "MD5 checksum for MDI tarball")
|
||||||
mark_as_advanced(MDI_URL)
|
mark_as_advanced(MDI_URL)
|
||||||
mark_as_advanced(MDI_MD5)
|
mark_as_advanced(MDI_MD5)
|
||||||
enable_language(C)
|
enable_language(C)
|
||||||
|
|||||||
@ -61,6 +61,7 @@ An alphabetic list of general LAMMPS commands.
|
|||||||
* :doc:`kspace_modify <kspace_modify>`
|
* :doc:`kspace_modify <kspace_modify>`
|
||||||
* :doc:`kspace_style <kspace_style>`
|
* :doc:`kspace_style <kspace_style>`
|
||||||
* :doc:`label <label>`
|
* :doc:`label <label>`
|
||||||
|
* :doc:`labelmap <labelmap>`
|
||||||
* :doc:`lattice <lattice>`
|
* :doc:`lattice <lattice>`
|
||||||
* :doc:`log <log>`
|
* :doc:`log <log>`
|
||||||
* :doc:`mass <mass>`
|
* :doc:`mass <mass>`
|
||||||
|
|||||||
@ -175,6 +175,12 @@ and parsing files or arguments.
|
|||||||
.. doxygenfunction:: is_double
|
.. doxygenfunction:: is_double
|
||||||
:project: progguide
|
:project: progguide
|
||||||
|
|
||||||
|
.. doxygenfunction:: is_id
|
||||||
|
:project: progguide
|
||||||
|
|
||||||
|
.. doxygenfunction:: is_type
|
||||||
|
:project: progguide
|
||||||
|
|
||||||
Potential file functions
|
Potential file functions
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
@ -205,6 +211,9 @@ Argument processing
|
|||||||
.. doxygenfunction:: expand_args
|
.. doxygenfunction:: expand_args
|
||||||
:project: progguide
|
:project: progguide
|
||||||
|
|
||||||
|
.. doxygenfunction:: expand_type
|
||||||
|
:project: progguide
|
||||||
|
|
||||||
Convenience functions
|
Convenience functions
|
||||||
^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
|||||||
@ -5453,6 +5453,11 @@ Doc page with :doc:`WARNING messages <Errors_warnings>`
|
|||||||
Mass command must set a type from 1-N where N is the number of atom
|
Mass command must set a type from 1-N where N is the number of atom
|
||||||
types.
|
types.
|
||||||
|
|
||||||
|
*Invalid label2type() function syntax in variable formula*
|
||||||
|
The first argument must be a label map kind (atom, bond, angle,
|
||||||
|
dihedral, or improper) and the second argument must be a valid type
|
||||||
|
label that has been assigned to a numeric type.
|
||||||
|
|
||||||
*Invalid use of library file() function*
|
*Invalid use of library file() function*
|
||||||
This function is called through the library interface. This
|
This function is called through the library interface. This
|
||||||
error should not occur. Contact the developers if it does.
|
error should not occur. Contact the developers if it does.
|
||||||
@ -5585,9 +5590,18 @@ Doc page with :doc:`WARNING messages <Errors_warnings>`
|
|||||||
*LJ6 off not supported in pair_style buck/long/coul/long*
|
*LJ6 off not supported in pair_style buck/long/coul/long*
|
||||||
Self-explanatory.
|
Self-explanatory.
|
||||||
|
|
||||||
|
*Label map is incomplete: all types must be assigned a unique type label*
|
||||||
|
For a given type-kind (atom types, bond types, etc.) to be written to
|
||||||
|
the data file, all associated types must be assigned a type label, and
|
||||||
|
each type label can be assigned to only one numeric type.
|
||||||
|
|
||||||
*Label wasn't found in input script*
|
*Label wasn't found in input script*
|
||||||
Self-explanatory.
|
Self-explanatory.
|
||||||
|
|
||||||
|
*Labelmap command before simulation box is defined*
|
||||||
|
The labelmap command cannot be used before a read_data,
|
||||||
|
read_restart, or create_box command.
|
||||||
|
|
||||||
*Lattice orient vectors are not orthogonal*
|
*Lattice orient vectors are not orthogonal*
|
||||||
The three specified lattice orientation vectors must be mutually
|
The three specified lattice orientation vectors must be mutually
|
||||||
orthogonal.
|
orthogonal.
|
||||||
@ -5863,6 +5877,12 @@ Doc page with :doc:`WARNING messages <Errors_warnings>`
|
|||||||
*Must not have multiple fixes change box parameter ...*
|
*Must not have multiple fixes change box parameter ...*
|
||||||
Self-explanatory.
|
Self-explanatory.
|
||||||
|
|
||||||
|
*Must read Angle Type Labels before Angles*
|
||||||
|
An Angle Type Labels section of a data file must come before the Angles section.
|
||||||
|
|
||||||
|
*Must read Atom Type Labels before Atoms*
|
||||||
|
An Atom Type Labels section of a data file must come before the Atoms section.
|
||||||
|
|
||||||
*Must read Atoms before Angles*
|
*Must read Atoms before Angles*
|
||||||
The Atoms section of a data file must come before an Angles section.
|
The Atoms section of a data file must come before an Angles section.
|
||||||
|
|
||||||
@ -5893,6 +5913,15 @@ Doc page with :doc:`WARNING messages <Errors_warnings>`
|
|||||||
The Atoms section of a data file must come before a Velocities
|
The Atoms section of a data file must come before a Velocities
|
||||||
section.
|
section.
|
||||||
|
|
||||||
|
*Must read Bond Type Labels before Bonds*
|
||||||
|
A Bond Type Labels section of a data file must come before the Bonds section.
|
||||||
|
|
||||||
|
*Must read Dihedral Type Labels before Dihedrals*
|
||||||
|
An Dihedral Type Labels section of a data file must come before the Dihedrals section.
|
||||||
|
|
||||||
|
*Must read Improper Type Labels before Impropers*
|
||||||
|
An Improper Type Labels section of a data file must come before the Impropers section.
|
||||||
|
|
||||||
*Must re-specify non-restarted pair style (xxx) after read_restart*
|
*Must re-specify non-restarted pair style (xxx) after read_restart*
|
||||||
For pair styles, that do not store their settings in a restart file,
|
For pair styles, that do not store their settings in a restart file,
|
||||||
it must be defined with a new 'pair_style' command after read_restart.
|
it must be defined with a new 'pair_style' command after read_restart.
|
||||||
@ -7849,6 +7878,10 @@ keyword to allow for additional bonds to be formed
|
|||||||
Number of local atoms times number of columns must fit in a 32-bit
|
Number of local atoms times number of columns must fit in a 32-bit
|
||||||
integer for dump.
|
integer for dump.
|
||||||
|
|
||||||
|
*Topology type exceeds system topology type*
|
||||||
|
The number of bond, angle, etc types exceeds the system setting. See
|
||||||
|
the create_box or read_data command for how to specify these values.
|
||||||
|
|
||||||
*Tree structure in joint connections*
|
*Tree structure in joint connections*
|
||||||
Fix poems cannot (yet) work with coupled bodies whose joints connect
|
Fix poems cannot (yet) work with coupled bodies whose joints connect
|
||||||
the bodies in a tree structure.
|
the bodies in a tree structure.
|
||||||
@ -7873,6 +7906,13 @@ keyword to allow for additional bonds to be formed
|
|||||||
*Two groups cannot be the same in fix spring couple*
|
*Two groups cannot be the same in fix spring couple*
|
||||||
Self-explanatory.
|
Self-explanatory.
|
||||||
|
|
||||||
|
*The %s type label %s is already in use for type %s*
|
||||||
|
For a given type-kind (atom types, bond types, etc.), a given type
|
||||||
|
label can be assigned to only one numeric type.
|
||||||
|
|
||||||
|
*Type label string %s for %s type %s is invalid*
|
||||||
|
See the labelmap command documentation for valid type labels.
|
||||||
|
|
||||||
*Unable to initialize accelerator for use*
|
*Unable to initialize accelerator for use*
|
||||||
There was a problem initializing an accelerator for the gpu package
|
There was a problem initializing an accelerator for the gpu package
|
||||||
|
|
||||||
|
|||||||
@ -34,6 +34,7 @@ Settings howto
|
|||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
Howto_2d
|
Howto_2d
|
||||||
|
Howto_type_labels
|
||||||
Howto_triclinic
|
Howto_triclinic
|
||||||
Howto_thermostat
|
Howto_thermostat
|
||||||
Howto_barostat
|
Howto_barostat
|
||||||
|
|||||||
126
doc/src/Howto_type_labels.rst
Normal file
126
doc/src/Howto_type_labels.rst
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
Type labels
|
||||||
|
===========
|
||||||
|
|
||||||
|
.. versionadded:: TBD
|
||||||
|
|
||||||
|
Each atom in LAMMPS has an associated numeric atom type. Similarly,
|
||||||
|
each bond, angle, dihedral, and improper is assigned a bond type,
|
||||||
|
angle type, and so on. The primary use of these types is to map
|
||||||
|
potential (force field) parameters to the interactions of the atom,
|
||||||
|
bond, angle, dihedral, and improper.
|
||||||
|
|
||||||
|
By default, type values are entered as integers from 1 to Ntypes
|
||||||
|
wherever they appear in LAMMPS input or output files. The total number
|
||||||
|
Ntypes for each interaction is "locked in" when the simulation box
|
||||||
|
is created.
|
||||||
|
|
||||||
|
A recent addition to LAMMPS is the option to use strings - referred
|
||||||
|
to as type labels - as an alternative. Using type labels instead of
|
||||||
|
numeric types can be advantageous in various scenarios. For example,
|
||||||
|
type labels can make inputs more readable and generic (i.e. usable through
|
||||||
|
the :doc:`include command <include>` for different systems with different
|
||||||
|
numerical values assigned to types. This generality also applies to
|
||||||
|
other inputs like data files read by :doc:`read_data <read_data>` or
|
||||||
|
molecule template files read by the :doc:`molecule <molecule>`
|
||||||
|
command. See below for a list of other commands that can use
|
||||||
|
type labels in different ways.
|
||||||
|
|
||||||
|
LAMMPS will *internally* continue to use numeric types, which means
|
||||||
|
that many previous restrictions still apply. For example, the total
|
||||||
|
number of types is locked in when creating the simulation box, and
|
||||||
|
potential parameters for each type must be provided even if not used
|
||||||
|
by any interactions.
|
||||||
|
|
||||||
|
A collection of type labels for all type-kinds (atom types, bond types,
|
||||||
|
etc.) is stored as a "label map" which is simply a list of numeric types
|
||||||
|
and their associated type labels. Within a type-kind, each type label
|
||||||
|
must be unique. It can be assigned to only one numeric type. To read
|
||||||
|
and write type labels to data files for a given type-kind, *all*
|
||||||
|
associated numeric types need have a type label assigned. Partial
|
||||||
|
maps can be saved with the :doc:`labelmap write <labelmap>` command
|
||||||
|
and read back with the :doc:`include <include>` command.
|
||||||
|
|
||||||
|
Valid type labels can contain most ASCII characters, but cannot start
|
||||||
|
with a number, a '#', or a '*'. Also, labels must not contain whitespace
|
||||||
|
characters. When using the :doc:`labelmap command <labelmap>` in the
|
||||||
|
LAMMPS input, if certain characters appear in the type label, such as
|
||||||
|
the single (') or double (") quote or the '#' character, the label
|
||||||
|
must be put in either double, single, or triple (""") quotes. Triple
|
||||||
|
quotes allow for the most generic type label strings, but they require
|
||||||
|
to have a leading and trailing blank space. When defining type labels
|
||||||
|
the blanks will be ignored. Example:
|
||||||
|
|
||||||
|
.. code-block:: LAMMPS
|
||||||
|
|
||||||
|
labelmap angle 1 """ C1'-C2"-C3# """
|
||||||
|
|
||||||
|
This command will map the string ```C1'-C2"-C3#``` to the angle type 1.
|
||||||
|
|
||||||
|
There are two ways to define label maps. One is via the :doc:`labelmap
|
||||||
|
<labelmap>` command. The other is via the :doc:`read_data <read_data>`
|
||||||
|
command. A data file can have sections such as *Atom Type Labels*, *Bond
|
||||||
|
Type Labels*, etc., which assign type labels to numeric types. The
|
||||||
|
label map can be written out to data files by the :doc:`write_data
|
||||||
|
<write_data>` command. This map is also written to and read from
|
||||||
|
restart files, by the :doc:`write_restart <write_restart>` and
|
||||||
|
:doc:`read_restart <read_restart>` commands.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
Use of type labels in LAMMPS input or output
|
||||||
|
""""""""""""""""""""""""""""""""""""""""""""
|
||||||
|
|
||||||
|
Many LAMMPS input script commands that take a numeric type as an
|
||||||
|
argument can use the associated type label instead. If a type label
|
||||||
|
is not defined for a particular numeric type, only its numeric type
|
||||||
|
can be used.
|
||||||
|
|
||||||
|
This example assigns labels to the atom types, and then uses the type
|
||||||
|
labels to redefine the pair coefficients.
|
||||||
|
|
||||||
|
.. code-block:: LAMMPS
|
||||||
|
|
||||||
|
pair_coeff 1 2 1.0 1.0 # numeric types
|
||||||
|
labelmap atom 1 C 2 H
|
||||||
|
pair_coeff C H 1.0 1.0 # type labels
|
||||||
|
|
||||||
|
Adding support for type labels to various commands is an ongoing
|
||||||
|
project. If an input script command (or a section in a file read by a
|
||||||
|
command) allows substituting a type label for a numeric type argument,
|
||||||
|
it will be explicitly mentioned in that command's documentation page.
|
||||||
|
|
||||||
|
As a temporary measure, input script commands can take advantage of
|
||||||
|
variables and how they can be expanded during processing of the input.
|
||||||
|
The variables can use functions that will translate type label strings
|
||||||
|
to their respective number as defined in the current label map. See the
|
||||||
|
:doc:`variable <variable>` command for details.
|
||||||
|
|
||||||
|
For example, here is how the pair_coeff command could be used with
|
||||||
|
type labels if it did not yet support them, either with an explicit
|
||||||
|
variable command or an implicit variable used in the pair_coeff
|
||||||
|
command.
|
||||||
|
|
||||||
|
.. code-block:: LAMMPS
|
||||||
|
|
||||||
|
labelmap atom 1 C 2 H
|
||||||
|
variable atom1 equal label2type(atom,C)
|
||||||
|
variable atom2 equal label2type(atom,H)
|
||||||
|
pair_coeff ${atom1} ${atom2} 1.0 1.0
|
||||||
|
|
||||||
|
.. code-block:: LAMMPS
|
||||||
|
|
||||||
|
labelmap atom 1 C 2 H
|
||||||
|
pair_coeff $(label2type(atom,C)) $(label2type(atom,H)) 80.0 1.2
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
Commands that can use label types
|
||||||
|
"""""""""""""""""""""""""""""""""
|
||||||
|
|
||||||
|
Any workflow that involves reading multiple data files, molecule
|
||||||
|
templates or a combination of the two can be streamlined by using type
|
||||||
|
labels instead of numeric types, because types are automatically synced
|
||||||
|
between the files. The creation of simulation-ready reaction templates
|
||||||
|
for :doc:`fix bond/react <fix_bond_react>` is much simpler when using
|
||||||
|
type labels, and results in templates that can be used without
|
||||||
|
modification in multiple simulations or different systems.
|
||||||
@ -10,7 +10,7 @@ Syntax
|
|||||||
|
|
||||||
angle_coeff N args
|
angle_coeff N args
|
||||||
|
|
||||||
* N = angle type (see asterisk form below)
|
* N = numeric angle type (see asterisk form below), or type label
|
||||||
* args = coefficients for one or more angle types
|
* args = coefficients for one or more angle types
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
@ -22,6 +22,9 @@ Examples
|
|||||||
angle_coeff * 5.0
|
angle_coeff * 5.0
|
||||||
angle_coeff 2*10 5.0
|
angle_coeff 2*10 5.0
|
||||||
|
|
||||||
|
labelmap angle 1 hydroxyl
|
||||||
|
angle_coeff hydroxyl 300.0 107.0
|
||||||
|
|
||||||
Description
|
Description
|
||||||
"""""""""""
|
"""""""""""
|
||||||
|
|
||||||
@ -30,18 +33,24 @@ The number and meaning of the coefficients depends on the angle style.
|
|||||||
Angle coefficients can also be set in the data file read by the
|
Angle coefficients can also be set in the data file read by the
|
||||||
:doc:`read_data <read_data>` command or in a restart file.
|
:doc:`read_data <read_data>` command or in a restart file.
|
||||||
|
|
||||||
N can be specified in one of two ways. An explicit numeric value can
|
:math:`N` can be specified in one of two ways. An explicit numeric
|
||||||
be used, as in the first example above. Or a wild-card asterisk can be
|
value can be used, as in the first example above. Or :math:`N` can be a
|
||||||
used to set the coefficients for multiple angle types. This takes the
|
type label, which is an alphanumeric string defined by the
|
||||||
form "\*" or "\*n" or "n\*" or "m\*n". If N = the number of angle types,
|
:doc:`labelmap <labelmap>` command or in a section of a data file read
|
||||||
then an asterisk with no numeric values means all types from 1 to N. A
|
by the :doc:`read_data <read_data>` command.
|
||||||
leading asterisk means all types from 1 to n (inclusive). A trailing
|
|
||||||
asterisk means all types from n to N (inclusive). A middle asterisk
|
|
||||||
means all types from m to n (inclusive).
|
|
||||||
|
|
||||||
Note that using an :doc:`angle_coeff <angle_coeff>` command can override a previous setting
|
For numeric values only, a wild-card asterisk can be used to set the
|
||||||
for the same angle type. For example, these commands set the coeffs
|
coefficients for multiple angle types. This takes the form "\*" or
|
||||||
for all angle types, then overwrite the coeffs for just angle type 2:
|
"\*n" or "n\*" or "m\*n". If :math:`N` is the number of angle types,
|
||||||
|
then an asterisk with no numeric values means all types from 1 to
|
||||||
|
:math:`N`. A leading asterisk means all types from 1 to n (inclusive).
|
||||||
|
A trailing asterisk means all types from n to :math:`N` (inclusive). A
|
||||||
|
middle asterisk means all types from m to n (inclusive).
|
||||||
|
|
||||||
|
Note that using an :doc:`angle_coeff <angle_coeff>` command can
|
||||||
|
override a previous setting for the same angle type. For example,
|
||||||
|
these commands set the coeffs for all angle types, then overwrite the
|
||||||
|
coeffs for just angle type 2:
|
||||||
|
|
||||||
.. code-block:: LAMMPS
|
.. code-block:: LAMMPS
|
||||||
|
|
||||||
@ -49,11 +58,11 @@ for all angle types, then overwrite the coeffs for just angle type 2:
|
|||||||
angle_coeff 2 50.0 107.0
|
angle_coeff 2 50.0 107.0
|
||||||
|
|
||||||
A line in a data file that specifies angle coefficients uses the exact
|
A line in a data file that specifies angle coefficients uses the exact
|
||||||
same format as the arguments of the :doc:`angle_coeff <angle_coeff>` command in an input
|
same format as the arguments of the :doc:`angle_coeff <angle_coeff>`
|
||||||
script, except that wild-card asterisks should not be used since
|
command in an input script, except that wild-card asterisks should not
|
||||||
coefficients for all N types must be listed in the file. For example,
|
be used since coefficients for all :math:`N` types must be listed in the
|
||||||
under the "Angle Coeffs" section of a data file, the line that
|
file. For example, under the "Angle Coeffs" section of a data file, the
|
||||||
corresponds to the first example above would be listed as
|
line that corresponds to the first example above would be listed as
|
||||||
|
|
||||||
.. parsed-literal::
|
.. parsed-literal::
|
||||||
|
|
||||||
@ -61,15 +70,14 @@ corresponds to the first example above would be listed as
|
|||||||
|
|
||||||
The :doc:`angle_style class2 <angle_class2>` is an exception to this
|
The :doc:`angle_style class2 <angle_class2>` is an exception to this
|
||||||
rule, in that an additional argument is used in the input script to
|
rule, in that an additional argument is used in the input script to
|
||||||
allow specification of the cross-term coefficients. See its
|
allow specification of the cross-term coefficients. See its doc page
|
||||||
doc page for details.
|
for details.
|
||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
The list of all angle styles defined in LAMMPS is given on the
|
The list of all angle styles defined in LAMMPS is given on the
|
||||||
:doc:`angle_style <angle_style>` doc page. They are also listed in more
|
:doc:`angle_style <angle_style>` doc page. They are also listed in more
|
||||||
compact form on the :ref:`Commands angle <angle>` doc
|
compact form on the :ref:`Commands angle <angle>` doc page.
|
||||||
page.
|
|
||||||
|
|
||||||
On either of those pages, click on the style to display the formula it
|
On either of those pages, click on the style to display the formula it
|
||||||
computes and its coefficients as specified by the associated
|
computes and its coefficients as specified by the associated
|
||||||
|
|||||||
@ -10,7 +10,7 @@ Syntax
|
|||||||
|
|
||||||
bond_coeff N args
|
bond_coeff N args
|
||||||
|
|
||||||
* N = bond type (see asterisk form below)
|
* N = numeric bond type (see asterisk form below), or type label
|
||||||
* args = coefficients for one or more bond types
|
* args = coefficients for one or more bond types
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
@ -21,7 +21,10 @@ Examples
|
|||||||
bond_coeff 5 80.0 1.2
|
bond_coeff 5 80.0 1.2
|
||||||
bond_coeff * 30.0 1.5 1.0 1.0
|
bond_coeff * 30.0 1.5 1.0 1.0
|
||||||
bond_coeff 1*4 30.0 1.5 1.0 1.0
|
bond_coeff 1*4 30.0 1.5 1.0 1.0
|
||||||
bond_coeff 1 harmonic 200.0 1.0
|
bond_coeff 1 harmonic 200.0 1.0 (for bond_style hybrid)
|
||||||
|
|
||||||
|
labelmap bond 5 carbonyl
|
||||||
|
bond_coeff carbonyl 80.0 1.2
|
||||||
|
|
||||||
Description
|
Description
|
||||||
"""""""""""
|
"""""""""""
|
||||||
@ -31,14 +34,19 @@ The number and meaning of the coefficients depends on the bond style.
|
|||||||
Bond coefficients can also be set in the data file read by the
|
Bond coefficients can also be set in the data file read by the
|
||||||
:doc:`read_data <read_data>` command or in a restart file.
|
:doc:`read_data <read_data>` command or in a restart file.
|
||||||
|
|
||||||
N can be specified in one of two ways. An explicit numeric value can
|
:math:`N` can be specified in one of several ways. An explicit numeric
|
||||||
be used, as in the first example above. Or a wild-card asterisk can be
|
value can be used, as in the first example above. Or :math:`N` can be a
|
||||||
used to set the coefficients for multiple bond types. This takes the
|
type label, which is an alphanumeric string defined by the
|
||||||
form "\*" or "\*n" or "n\*" or "m\*n". If N = the number of bond types,
|
:doc:`labelmap <labelmap>` command or in a section of a data file read
|
||||||
then an asterisk with no numeric values means all types from 1 to N. A
|
by the :doc:`read_data <read_data>` command.
|
||||||
|
|
||||||
|
For numeric values only, a wild-card asterisk can be used to set the
|
||||||
|
coefficients for multiple bond types. This takes the form "\*" or "\*n"
|
||||||
|
or "n\*" or "m\*n". If :math:`N` is the number of bond types, then an
|
||||||
|
asterisk with no numeric values means all types from 1 to :math:`N`. A
|
||||||
leading asterisk means all types from 1 to n (inclusive). A trailing
|
leading asterisk means all types from 1 to n (inclusive). A trailing
|
||||||
asterisk means all types from n to N (inclusive). A middle asterisk
|
asterisk means all types from n to :math:`N` (inclusive). A middle
|
||||||
means all types from m to n (inclusive).
|
asterisk means all types from m to n (inclusive).
|
||||||
|
|
||||||
Note that using a bond_coeff command can override a previous setting
|
Note that using a bond_coeff command can override a previous setting
|
||||||
for the same bond type. For example, these commands set the coeffs
|
for the same bond type. For example, these commands set the coeffs
|
||||||
@ -52,8 +60,8 @@ for all bond types, then overwrite the coeffs for just bond type 2:
|
|||||||
A line in a data file that specifies bond coefficients uses the exact
|
A line in a data file that specifies bond coefficients uses the exact
|
||||||
same format as the arguments of the bond_coeff command in an input
|
same format as the arguments of the bond_coeff command in an input
|
||||||
script, except that wild-card asterisks should not be used since
|
script, except that wild-card asterisks should not be used since
|
||||||
coefficients for all N types must be listed in the file. For example,
|
coefficients for all :math:`N` types must be listed in the file. For
|
||||||
under the "Bond Coeffs" section of a data file, the line that
|
example, under the "Bond Coeffs" section of a data file, the line that
|
||||||
corresponds to the first example above would be listed as
|
corresponds to the first example above would be listed as
|
||||||
|
|
||||||
.. parsed-literal::
|
.. parsed-literal::
|
||||||
|
|||||||
@ -56,6 +56,7 @@ Commands
|
|||||||
kspace_modify
|
kspace_modify
|
||||||
kspace_style
|
kspace_style
|
||||||
label
|
label
|
||||||
|
labelmap
|
||||||
lattice
|
lattice
|
||||||
log
|
log
|
||||||
mass
|
mass
|
||||||
|
|||||||
@ -10,7 +10,7 @@ Syntax
|
|||||||
|
|
||||||
dihedral_coeff N args
|
dihedral_coeff N args
|
||||||
|
|
||||||
* N = dihedral type (see asterisk form below)
|
* N = numeric dihedral type (see asterisk form below) or alphanumeric type label
|
||||||
* args = coefficients for one or more dihedral types
|
* args = coefficients for one or more dihedral types
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
@ -22,26 +22,35 @@ Examples
|
|||||||
dihedral_coeff * 80.0 1 3 0.5
|
dihedral_coeff * 80.0 1 3 0.5
|
||||||
dihedral_coeff 2* 80.0 1 3 0.5
|
dihedral_coeff 2* 80.0 1 3 0.5
|
||||||
|
|
||||||
|
labelmap dihedral 1 backbone
|
||||||
|
dihedral_coeff backbone 80.0 1 3
|
||||||
|
|
||||||
Description
|
Description
|
||||||
"""""""""""
|
"""""""""""
|
||||||
|
|
||||||
Specify the dihedral force field coefficients for one or more dihedral types.
|
Specify the dihedral force field coefficients for one or more dihedral
|
||||||
The number and meaning of the coefficients depends on the dihedral style.
|
types. The number and meaning of the coefficients depends on the
|
||||||
Dihedral coefficients can also be set in the data file read by the
|
dihedral style. Dihedral coefficients can also be set in the data file
|
||||||
:doc:`read_data <read_data>` command or in a restart file.
|
read by the :doc:`read_data <read_data>` command or in a restart file.
|
||||||
|
|
||||||
N can be specified in one of two ways. An explicit numeric value can
|
:math:`N` can be specified in one of two ways. An explicit numeric
|
||||||
be used, as in the first example above. Or a wild-card asterisk can be
|
value can be used, as in the first example above. Or :math:`N` can be
|
||||||
used to set the coefficients for multiple dihedral types. This takes the
|
an alphanumeric type label, which is a string defined by the
|
||||||
form "\*" or "\*n" or "m\*" or "m\*n". If :math:`N` is the number of dihedral
|
:doc:`labelmap <labelmap>` command or in a corresponding section of a
|
||||||
types, then an asterisk with no numeric values means all types from 1 to
|
data file read by the :doc:`read_data <read_data>` command.
|
||||||
:math:`N`. A leading asterisk means all types from 1 to n (inclusive). A
|
|
||||||
trailing asterisk means all types from m to N (inclusive). A middle asterisk
|
For numeric values only, a wild-card asterisk can be used to set the
|
||||||
means all types from m to n (inclusive).
|
coefficients for multiple dihedral types. This takes the form "\*" or
|
||||||
|
"\*n" or "n\*" or "m\*n". If :math:`N` is the number of dihedral types,
|
||||||
|
then an asterisk with no numeric values means all types from 1 to
|
||||||
|
:math:`N`. A leading asterisk means all types from 1 to n (inclusive).
|
||||||
|
A trailing asterisk means all types from n to :math:`N` (inclusive). A
|
||||||
|
middle asterisk means all types from m to n (inclusive).
|
||||||
|
|
||||||
Note that using a dihedral_coeff command can override a previous setting
|
Note that using a dihedral_coeff command can override a previous setting
|
||||||
for the same dihedral type. For example, these commands set the coeffs
|
for the same dihedral type. For example, these commands set the coeffs
|
||||||
for all dihedral types, then overwrite the coeffs for just dihedral type 2:
|
for all dihedral types, then overwrite the coeffs for just dihedral type
|
||||||
|
2:
|
||||||
|
|
||||||
.. code-block:: LAMMPS
|
.. code-block:: LAMMPS
|
||||||
|
|
||||||
|
|||||||
@ -125,13 +125,14 @@ LAMMPS atom type corresponds to. This is specified by the atomic
|
|||||||
number of the element, e.g. 13 for Al. An atomic number must be
|
number of the element, e.g. 13 for Al. An atomic number must be
|
||||||
specified for each of the ntypes LAMMPS atom types. Ntypes is
|
specified for each of the ntypes LAMMPS atom types. Ntypes is
|
||||||
typically specified via the create_box command or in the data file
|
typically specified via the create_box command or in the data file
|
||||||
read by the read_data command. If this keyword is not specified, then
|
read by the read_data command.
|
||||||
this fix will send the LAMMPS atom type for each atom to the MDI
|
|
||||||
engine. If both the LAMMPS driver and the MDI engine are initialized
|
If this keyword is specified, then this fix will send the MDI
|
||||||
so that atom type values are consistent in both codes, then the
|
">ELEMENTS" command to the engine, to insure the two codes are
|
||||||
*elements* keyword is not needed. Otherwise the keyword can be used
|
consistent in their definition of atomic species. If this keyword is
|
||||||
to insure the two codes are consistent in their definition of atomic
|
not specified, then this fix will send the MDI >TYPES command to the
|
||||||
species.
|
engine. This is fine if both the LAMMPS driver and the MDI engine are
|
||||||
|
initialized so that the atom type values are consistent in both codes.
|
||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
|||||||
@ -10,7 +10,7 @@ Syntax
|
|||||||
|
|
||||||
improper_coeff N args
|
improper_coeff N args
|
||||||
|
|
||||||
* N = improper type (see asterisk form below)
|
* N = numeric improper type (see asterisk form below), or type label
|
||||||
* args = coefficients for one or more improper types
|
* args = coefficients for one or more improper types
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
@ -22,27 +22,34 @@ Examples
|
|||||||
improper_coeff * 80.2 -1 2
|
improper_coeff * 80.2 -1 2
|
||||||
improper_coeff *4 80.2 -1 2
|
improper_coeff *4 80.2 -1 2
|
||||||
|
|
||||||
|
labelmap improper 1 benzene
|
||||||
|
improper_coeff benzene 300.0 0.0
|
||||||
|
|
||||||
Description
|
Description
|
||||||
"""""""""""
|
"""""""""""
|
||||||
|
|
||||||
Specify the improper force field coefficients for one or more improper
|
Specify the improper force field coefficients for one or more improper
|
||||||
types. The number and meaning of the coefficients depends on the
|
types. The number and meaning of the coefficients depends on the
|
||||||
improper style. Improper coefficients can also be set in the data
|
improper style. Improper coefficients can also be set in the data file
|
||||||
file read by the :doc:`read_data <read_data>` command or in a restart
|
read by the :doc:`read_data <read_data>` command or in a restart file.
|
||||||
file.
|
|
||||||
|
|
||||||
N can be specified in one of two ways. An explicit numeric value can
|
:math:`N` can be specified in one of two ways. An explicit numeric
|
||||||
be used, as in the first example above. Or a wild-card asterisk can be
|
value can be used, as in the first example above. Or :math:`N` can be a
|
||||||
used to set the coefficients for multiple improper types. This takes
|
type label, which is an alphanumeric string defined by the
|
||||||
the form "\*" or "\*n" or "n\*" or "m\*n". If N = the number of improper
|
:doc:`labelmap <labelmap>` command or in a section of a data file read
|
||||||
types, then an asterisk with no numeric values means all types from 1
|
by the :doc:`read_data <read_data>` command.
|
||||||
to N. A leading asterisk means all types from 1 to n (inclusive). A
|
|
||||||
trailing asterisk means all types from n to N (inclusive). A middle
|
For numeric values only, a wild-card asterisk can be used to set the
|
||||||
asterisk means all types from m to n (inclusive).
|
coefficients for multiple improper types. This takes the form "\*" or
|
||||||
|
"\*n" or "n\*" or "m\*n". If :math:`N` = the number of improper types,
|
||||||
|
then an asterisk with no numeric values means all types from 1 to
|
||||||
|
:math:`N`. A leading asterisk means all types from 1 to n (inclusive).
|
||||||
|
A trailing asterisk means all types from n to :math:`N` (inclusive). A
|
||||||
|
middle asterisk means all types from m to n (inclusive).
|
||||||
|
|
||||||
Note that using an improper_coeff command can override a previous
|
Note that using an improper_coeff command can override a previous
|
||||||
setting for the same improper type. For example, these commands set
|
setting for the same improper type. For example, these commands set the
|
||||||
the coeffs for all improper types, then overwrite the coeffs for just
|
coeffs for all improper types, then overwrite the coeffs for just
|
||||||
improper type 2:
|
improper type 2:
|
||||||
|
|
||||||
.. code-block:: LAMMPS
|
.. code-block:: LAMMPS
|
||||||
@ -53,9 +60,9 @@ improper type 2:
|
|||||||
A line in a data file that specifies improper coefficients uses the
|
A line in a data file that specifies improper coefficients uses the
|
||||||
exact same format as the arguments of the improper_coeff command in an
|
exact same format as the arguments of the improper_coeff command in an
|
||||||
input script, except that wild-card asterisks should not be used since
|
input script, except that wild-card asterisks should not be used since
|
||||||
coefficients for all N types must be listed in the file. For example,
|
coefficients for all :math:`N` types must be listed in the file. For
|
||||||
under the "Improper Coeffs" section of a data file, the line that
|
example, under the "Improper Coeffs" section of a data file, the line
|
||||||
corresponds to the first example above would be listed as
|
that corresponds to the first example above would be listed as
|
||||||
|
|
||||||
.. parsed-literal::
|
.. parsed-literal::
|
||||||
|
|
||||||
|
|||||||
98
doc/src/labelmap.rst
Normal file
98
doc/src/labelmap.rst
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
.. index:: labelmap
|
||||||
|
|
||||||
|
labelmap command
|
||||||
|
==================
|
||||||
|
|
||||||
|
Syntax
|
||||||
|
""""""
|
||||||
|
|
||||||
|
.. code-block:: LAMMPS
|
||||||
|
|
||||||
|
labelmap option args
|
||||||
|
|
||||||
|
* *option* = *atom* or *bond* or *angle* or *dihedral* or *improper* or *clear* or *write*
|
||||||
|
|
||||||
|
.. parsed-literal::
|
||||||
|
|
||||||
|
*clear* = no args
|
||||||
|
*write* arg = filename
|
||||||
|
*atom* or *bond* or *angle* or *dihedral* or *improper*
|
||||||
|
args = list of one or more numeric-type/type-label pairs
|
||||||
|
|
||||||
|
Examples
|
||||||
|
""""""""
|
||||||
|
|
||||||
|
.. code-block:: LAMMPS
|
||||||
|
|
||||||
|
labelmap atom 3 carbon 4 'c3"' 5 "c1'" 6 "c#"
|
||||||
|
labelmap bond 1 carbonyl 2 nitrile 3 """ c1'-c2" """
|
||||||
|
labelmap atom $(label2type(atom,carbon)) C # change type label from 'carbon' to 'C'
|
||||||
|
labelmap clear
|
||||||
|
labelmap write mymap.include
|
||||||
|
|
||||||
|
Description
|
||||||
|
"""""""""""
|
||||||
|
|
||||||
|
.. versionadded:: TBD
|
||||||
|
|
||||||
|
Define alphanumeric type labels to associate with one or more numeric
|
||||||
|
atom, bond, angle, dihedral or improper types. A collection of type
|
||||||
|
labels for all atom types, bond types, etc. is stored as a label map.
|
||||||
|
|
||||||
|
The label map can also be defined by the :doc:`read_data <read_data>`
|
||||||
|
command when it reads these sections in a data file: Atom Type Labels,
|
||||||
|
Bond Type Labels, etc. See the :doc:`Howto type labels
|
||||||
|
<Howto_type_labels>` doc page for a general discussion of how type
|
||||||
|
labels can be used.
|
||||||
|
|
||||||
|
Valid type labels can contain any alphanumeric character, but must not
|
||||||
|
start with a number, a '#', or a '*' character. They can contain other
|
||||||
|
standard ASCII characters such as angular or square brackets '<' and '>'
|
||||||
|
or '[' and ']', parenthesis '(' and ')', dash '-', underscore '_', plus
|
||||||
|
'+' and equals '=' signs and more. They must not contain blanks or any
|
||||||
|
other whitespace. Note that type labels must be put in single or double
|
||||||
|
quotation marks if they contain the '#' character or if they contain a
|
||||||
|
double (") or single quotation mark ('). If the label contains both
|
||||||
|
a single and a double quotation mark, then triple quotation (""") must
|
||||||
|
be used. When enclosing a type label with quotation marks, the
|
||||||
|
LAMMPS input parser may require adding leading or trailing blanks
|
||||||
|
around the type label so it can identify the enclosing quotation
|
||||||
|
marks. Those blanks will be removed when defining the label.
|
||||||
|
|
||||||
|
A *labelmap* command can only modify the label map for one type-kind
|
||||||
|
(atom types, bond types, etc). Any number of numeric-type/type-label
|
||||||
|
pairs may follow. If a type label already exists for the same numeric
|
||||||
|
type, it will be overwritten. Type labels must be unique; assigning the
|
||||||
|
same type label to multiple numeric types within the same type-kind is
|
||||||
|
not allowed. When reading and writing data files, it is required that
|
||||||
|
there is a label defined for *every* numeric type within a given
|
||||||
|
type-kind in order to write out the type label section for that
|
||||||
|
type-kind.
|
||||||
|
|
||||||
|
The *clear* option resets the labelmap and thus discards all previous
|
||||||
|
settings.
|
||||||
|
|
||||||
|
The *write* option takes a filename as argument and writes the current
|
||||||
|
label mappings to a file as labelmap commands, so the file can be copied
|
||||||
|
into a new LAMMPS input file or read in using the :doc:`include
|
||||||
|
<include>` command.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
Restrictions
|
||||||
|
""""""""""""
|
||||||
|
|
||||||
|
This command must come after the simulation box is defined by a
|
||||||
|
:doc:`read_data <read_data>`, :doc:`read_restart <read_restart>`, or
|
||||||
|
:doc:`create_box <create_box>` command.
|
||||||
|
|
||||||
|
Related commands
|
||||||
|
""""""""""""""""
|
||||||
|
|
||||||
|
:doc:`read_data <read_data>`, :doc:`write_data <write_data>`,
|
||||||
|
:doc:`molecule <molecule>`, :doc:`fix bond/react <fix_bond_react>`
|
||||||
|
|
||||||
|
Default
|
||||||
|
"""""""
|
||||||
|
|
||||||
|
none
|
||||||
@ -10,7 +10,7 @@ Syntax
|
|||||||
|
|
||||||
mass I value
|
mass I value
|
||||||
|
|
||||||
* I = atom type (see asterisk form below)
|
* I = atom type (see asterisk form below), or type label
|
||||||
* value = mass
|
* value = mass
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
@ -22,6 +22,9 @@ Examples
|
|||||||
mass * 62.5
|
mass * 62.5
|
||||||
mass 2* 62.5
|
mass 2* 62.5
|
||||||
|
|
||||||
|
labelmap atom 1 C
|
||||||
|
mass C 12.01
|
||||||
|
|
||||||
Description
|
Description
|
||||||
"""""""""""
|
"""""""""""
|
||||||
|
|
||||||
@ -30,12 +33,16 @@ values can also be set in the :doc:`read_data <read_data>` data file
|
|||||||
using the "Masses" keyword. See the :doc:`units <units>` command for
|
using the "Masses" keyword. See the :doc:`units <units>` command for
|
||||||
what mass units to use.
|
what mass units to use.
|
||||||
|
|
||||||
The I index can be specified in one of two ways. An explicit numeric
|
The I index can be specified in one of several ways. An explicit
|
||||||
value can be used, as in the first example above. Or a wild-card
|
numeric value can be used, as in the first example above. Or I can be
|
||||||
asterisk can be used to set the mass for multiple atom types. This
|
a type label, which is an alphanumeric string defined by the
|
||||||
takes the form "\*" or "\*n" or "n\*" or "m\*n". If N = the number of
|
:doc:`labelmap <labelmap>` command or in a section of a data file read
|
||||||
atom types, then an asterisk with no numeric values means all types
|
by the :doc:`read_data <read_data>` command, and which converts
|
||||||
from 1 to N. A leading asterisk means all types from 1 to n
|
internally to a numeric type. Or a wild-card asterisk can be used to
|
||||||
|
set the mass for multiple atom types. This takes the form "\*" or
|
||||||
|
"\*n" or "n\*" or "m\*n", where m and n are numbers. If N = the
|
||||||
|
number of atom types, then an asterisk with no numeric values means
|
||||||
|
all types from 1 to N. A leading asterisk means all types from 1 to n
|
||||||
(inclusive). A trailing asterisk means all types from n to N
|
(inclusive). A trailing asterisk means all types from n to N
|
||||||
(inclusive). A middle asterisk means all types from m to n
|
(inclusive). A middle asterisk means all types from m to n
|
||||||
(inclusive).
|
(inclusive).
|
||||||
|
|||||||
@ -14,7 +14,7 @@ Syntax
|
|||||||
|
|
||||||
.. parsed-literal::
|
.. parsed-literal::
|
||||||
|
|
||||||
*engine* args = zero or more keyword arg pairs
|
*engine* args = zero or more keyword/args pairs
|
||||||
keywords = *elements*
|
keywords = *elements*
|
||||||
*elements* args = N_1 N_2 ... N_ntypes
|
*elements* args = N_1 N_2 ... N_ntypes
|
||||||
N_1,N_2,...N_ntypes = atomic number for each of ntypes LAMMPS atom types
|
N_1,N_2,...N_ntypes = atomic number for each of ntypes LAMMPS atom types
|
||||||
@ -24,7 +24,7 @@ Syntax
|
|||||||
keywords = *mdi* or *infile* or *extra* or *command*
|
keywords = *mdi* or *infile* or *extra* or *command*
|
||||||
*mdi* value = args passed to MDI for driver to operate with plugins (required)
|
*mdi* value = args passed to MDI for driver to operate with plugins (required)
|
||||||
*infile* value = filename the engine will read at start-up (optional)
|
*infile* value = filename the engine will read at start-up (optional)
|
||||||
*extra* value = aditional command-line args to pass to engine library when loaded
|
*extra* value = aditional command-line args to pass to engine library when loaded (optional)
|
||||||
*command* value = a LAMMPS input script command to execute (required)
|
*command* value = a LAMMPS input script command to execute (required)
|
||||||
*connect* args = none
|
*connect* args = none
|
||||||
*exit* args = none
|
*exit* args = none
|
||||||
@ -289,11 +289,11 @@ are required. The -name setting can be anything you choose. MDI
|
|||||||
drivers and engines can query their names to verify they are values
|
drivers and engines can query their names to verify they are values
|
||||||
they expect.
|
they expect.
|
||||||
|
|
||||||
The *infile* keyword is also required. It is the name of an input
|
The *infile* keyword is optional. It sets the name of an input script
|
||||||
script which the engine will open and process. MDI will pass it as a
|
which the engine will open and process. MDI will pass it as a
|
||||||
command-line argument to the library when it is launched. The file
|
command-line argument to the library when it is launched. The file
|
||||||
typically contains settings that an MD or QM code will use for its
|
typically contains settings that an MD or QM code will use for its
|
||||||
subsequent calculations.
|
calculations.
|
||||||
|
|
||||||
The *extra* keyword is optional. It contains additional command-line
|
The *extra* keyword is optional. It contains additional command-line
|
||||||
arguments which MDI will pass to the library when it is launched.
|
arguments which MDI will pass to the library when it is launched.
|
||||||
@ -309,12 +309,12 @@ could specify a filename with multiple LAMMPS commands.
|
|||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
When the single *command* is complete, LAMMPS will send an MDI
|
When the *command* is complete, LAMMPS will send an MDI EXIT
|
||||||
EXIT command to the plugin engine and the plugin will be removed.
|
command to the plugin engine and the plugin will be removed. The
|
||||||
The "mdi plugin" command will then exit and the next command
|
"mdi plugin" command will then exit and the next command (if any)
|
||||||
(if any) in the LAMMPS input script will be processed. A subsequent
|
in the LAMMPS input script will be processed. A subsequent "mdi
|
||||||
"mdi plugin" command could then load the same library plugin or
|
plugin" command could then load the same or a different MDI
|
||||||
a different one if desired.
|
plugin if desired.
|
||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
|||||||
@ -70,8 +70,9 @@ and underscores.
|
|||||||
A single template can contain multiple molecules, listed one per file.
|
A single template can contain multiple molecules, listed one per file.
|
||||||
Some of the commands listed above currently use only the first
|
Some of the commands listed above currently use only the first
|
||||||
molecule in the template, and will issue a warning if the template
|
molecule in the template, and will issue a warning if the template
|
||||||
contains multiple molecules. The :doc:`atom_style template <atom_style>` command allows multiple-molecule templates
|
contains multiple molecules. The :doc:`atom_style template
|
||||||
to define a system with more than one templated molecule.
|
<atom_style>` command allows multiple-molecule templates to define a
|
||||||
|
system with more than one templated molecule.
|
||||||
|
|
||||||
Each filename can be followed by optional keywords which are applied
|
Each filename can be followed by optional keywords which are applied
|
||||||
only to the molecule in the file as used in this template. This is to
|
only to the molecule in the file as used in this template. This is to
|
||||||
@ -88,6 +89,12 @@ molecule file. E.g. if *toff* = 2, and the file uses atom types
|
|||||||
individual values will be ignored if the molecule template does not
|
individual values will be ignored if the molecule template does not
|
||||||
use that attribute (e.g. no bonds).
|
use that attribute (e.g. no bonds).
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
Offsets are **ignored** on lines using type labels, as the type
|
||||||
|
labels will determine the actual types directly depending on the
|
||||||
|
current :doc:`labelmap <labelmap>` settings.
|
||||||
|
|
||||||
The *scale* keyword scales the size of the molecule. This can be
|
The *scale* keyword scales the size of the molecule. This can be
|
||||||
useful for modeling polydisperse granular rigid bodies. The scale
|
useful for modeling polydisperse granular rigid bodies. The scale
|
||||||
factor is applied to each of these properties in the molecule file, if
|
factor is applied to each of these properties in the molecule file, if
|
||||||
@ -118,14 +125,18 @@ The format of an individual molecule file is similar but
|
|||||||
(not identical) to the data file read by the :doc:`read_data <read_data>`
|
(not identical) to the data file read by the :doc:`read_data <read_data>`
|
||||||
commands, and is as follows.
|
commands, and is as follows.
|
||||||
|
|
||||||
A molecule file has a header and a body. The header appears first.
|
A molecule file has a header and a body. The header appears first. The
|
||||||
The first line of the header is always skipped; it typically contains
|
first line of the header and thus of the molecule file is *always* skipped;
|
||||||
a description of the file. Then lines are read one at a time. Lines
|
it typically contains a description of the file or a comment from the software
|
||||||
can have a trailing comment starting with '#' that is ignored. If the
|
that created the file.
|
||||||
line is blank (only white-space after comment is deleted), it is
|
|
||||||
|
Then lines are read one line at a time. Lines can have a trailing
|
||||||
|
comment starting with '#' that is ignored. There *must* be at least one
|
||||||
|
blank between any valid content and the comment. If the line is blank
|
||||||
|
(i.e. contains only white-space after comments are deleted), it is
|
||||||
skipped. If the line contains a header keyword, the corresponding
|
skipped. If the line contains a header keyword, the corresponding
|
||||||
value(s) is read from the line. If it does not contain a header
|
value(s) is/are read from the line. A line that is *not* blank and does
|
||||||
keyword, the line begins the body of the file.
|
*not* contains a header keyword begins the body of the file.
|
||||||
|
|
||||||
The body of the file contains zero or more sections. The first line
|
The body of the file contains zero or more sections. The first line
|
||||||
of a section has only a keyword. The next line is skipped. The
|
of a section has only a keyword. The next line is skipped. The
|
||||||
@ -173,31 +184,43 @@ These are the allowed section keywords for the body of the file.
|
|||||||
* *Special Bond Counts, Special Bonds* = special neighbor info
|
* *Special Bond Counts, Special Bonds* = special neighbor info
|
||||||
* *Shake Flags, Shake Atoms, Shake Bond Types* = SHAKE info
|
* *Shake Flags, Shake Atoms, Shake Bond Types* = SHAKE info
|
||||||
|
|
||||||
|
For the Types, Bonds, Angles, Dihedrals, and Impropers sections, each
|
||||||
|
atom/bond/angle/etc type can be specified either as a number (numeric
|
||||||
|
type) or as an alphanumeric type label. The latter is only allowed if
|
||||||
|
type labels have been defined, either by the :doc:`labelmap
|
||||||
|
<labelmap>` command or in data files read by the :doc:`read_data
|
||||||
|
<read_data>` command which have sections for Atom Type Labels, Bond
|
||||||
|
Type Labels, Angle Type Labels, etc. See the :doc:`Howto type labels
|
||||||
|
<Howto_type_labels>` doc page for the allowed syntax of type labels
|
||||||
|
and a general discussion of how type labels can be used.
|
||||||
|
When using type labels, any values specified as *offset* are ignored.
|
||||||
|
|
||||||
If a Bonds section is specified then the Special Bond Counts and
|
If a Bonds section is specified then the Special Bond Counts and
|
||||||
Special Bonds sections can also be used, if desired, to explicitly
|
Special Bonds sections can also be used, if desired, to explicitly
|
||||||
list the 1-2, 1-3, 1-4 neighbors within the molecule topology (see
|
list the 1-2, 1-3, 1-4 neighbors within the molecule topology (see
|
||||||
details below). This is optional since if these sections are not
|
details below). This is optional since if these sections are not
|
||||||
included, LAMMPS will auto-generate this information. Note that
|
included, LAMMPS will auto-generate this information. Note that
|
||||||
LAMMPS uses this info to properly exclude or weight bonded pairwise
|
LAMMPS uses this info to properly exclude or weight bonded pairwise
|
||||||
interactions between bonded atoms. See the
|
interactions between bonded atoms. See the :doc:`special_bonds
|
||||||
:doc:`special_bonds <special_bonds>` command for more details. One
|
<special_bonds>` command for more details. One reason to list the
|
||||||
reason to list the special bond info explicitly is for the
|
special bond info explicitly is for the :doc:`thermalized Drude
|
||||||
:doc:`thermalized Drude oscillator model <Howto_drude>` which treats the
|
oscillator model <Howto_drude>` which treats the bonds between nuclear
|
||||||
bonds between nuclear cores and Drude electrons in a different manner.
|
cores and Drude electrons in a different manner.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
Whether a section is required depends on how the molecule
|
Whether a section is required depends on how the molecule template
|
||||||
template is used by other LAMMPS commands. For example, to add a
|
is used by other LAMMPS commands. For example, to add a molecule
|
||||||
molecule via the :doc:`fix deposit <fix_deposit>` command, the Coords
|
via the :doc:`fix deposit <fix_deposit>` command, the Coords and
|
||||||
and Types sections are required. To add a rigid body via the :doc:`fix pour <fix_pour>` command, the Bonds (Angles, etc) sections are not
|
Types sections are required. To add a rigid body via the :doc:`fix
|
||||||
|
pour <fix_pour>` command, the Bonds (Angles, etc) sections are not
|
||||||
required, since the molecule will be treated as a rigid body. Some
|
required, since the molecule will be treated as a rigid body. Some
|
||||||
sections are optional. For example, the :doc:`fix pour <fix_pour>`
|
sections are optional. For example, the :doc:`fix pour <fix_pour>`
|
||||||
command can be used to add "molecules" which are clusters of
|
command can be used to add "molecules" which are clusters of
|
||||||
finite-size granular particles. If the Diameters section is not
|
finite-size granular particles. If the Diameters section is not
|
||||||
specified, each particle in the molecule will have a default diameter
|
specified, each particle in the molecule will have a default
|
||||||
of 1.0. See the doc pages for LAMMPS commands that use molecule
|
diameter of 1.0. See the doc pages for LAMMPS commands that use
|
||||||
templates for more details.
|
molecule templates for more details.
|
||||||
|
|
||||||
Each section is listed below in alphabetic order. The format of each
|
Each section is listed below in alphabetic order. The format of each
|
||||||
section is described including the number of lines it must contain and
|
section is described including the number of lines it must contain and
|
||||||
@ -222,7 +245,7 @@ order.
|
|||||||
|
|
||||||
* one line per atom
|
* one line per atom
|
||||||
* line syntax: ID type
|
* line syntax: ID type
|
||||||
* type = atom type of atom
|
* type = atom type of atom (1-Natomtype, or type label)
|
||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
@ -289,7 +312,7 @@ included, the default mass for each atom is derived from its volume
|
|||||||
|
|
||||||
* one line per bond
|
* one line per bond
|
||||||
* line syntax: ID type atom1 atom2
|
* line syntax: ID type atom1 atom2
|
||||||
* type = bond type (1-Nbondtype)
|
* type = bond type (1-Nbondtype, or type label)
|
||||||
* atom1,atom2 = IDs of atoms in bond
|
* atom1,atom2 = IDs of atoms in bond
|
||||||
|
|
||||||
The IDs for the two atoms in each bond should be values
|
The IDs for the two atoms in each bond should be values
|
||||||
@ -301,7 +324,7 @@ from 1 to Natoms, where Natoms = # of atoms in the molecule.
|
|||||||
|
|
||||||
* one line per angle
|
* one line per angle
|
||||||
* line syntax: ID type atom1 atom2 atom3
|
* line syntax: ID type atom1 atom2 atom3
|
||||||
* type = angle type (1-Nangletype)
|
* type = angle type (1-Nangletype, or type label)
|
||||||
* atom1,atom2,atom3 = IDs of atoms in angle
|
* atom1,atom2,atom3 = IDs of atoms in angle
|
||||||
|
|
||||||
The IDs for the three atoms in each angle should be values from 1 to
|
The IDs for the three atoms in each angle should be values from 1 to
|
||||||
@ -315,7 +338,7 @@ which the angle is computed) is the atom2 in the list.
|
|||||||
|
|
||||||
* one line per dihedral
|
* one line per dihedral
|
||||||
* line syntax: ID type atom1 atom2 atom3 atom4
|
* line syntax: ID type atom1 atom2 atom3 atom4
|
||||||
* type = dihedral type (1-Ndihedraltype)
|
* type = dihedral type (1-Ndihedraltype, or type label)
|
||||||
* atom1,atom2,atom3,atom4 = IDs of atoms in dihedral
|
* atom1,atom2,atom3,atom4 = IDs of atoms in dihedral
|
||||||
|
|
||||||
The IDs for the four atoms in each dihedral should be values from 1 to
|
The IDs for the four atoms in each dihedral should be values from 1 to
|
||||||
@ -328,7 +351,7 @@ ordered linearly within the dihedral.
|
|||||||
|
|
||||||
* one line per improper
|
* one line per improper
|
||||||
* line syntax: ID type atom1 atom2 atom3 atom4
|
* line syntax: ID type atom1 atom2 atom3 atom4
|
||||||
* type = improper type (1-Nimpropertype)
|
* type = improper type (1-Nimpropertype, or type label)
|
||||||
* atom1,atom2,atom3,atom4 = IDs of atoms in improper
|
* atom1,atom2,atom3,atom4 = IDs of atoms in improper
|
||||||
|
|
||||||
The IDs for the four atoms in each improper should be values from 1 to
|
The IDs for the four atoms in each improper should be values from 1 to
|
||||||
@ -447,11 +470,15 @@ This section is only needed when molecules created using the template
|
|||||||
will be constrained by SHAKE via the "fix shake" command. The other
|
will be constrained by SHAKE via the "fix shake" command. The other
|
||||||
two Shake sections must also appear in the file.
|
two Shake sections must also appear in the file.
|
||||||
|
|
||||||
The a,b,c values are bond types (from 1 to Nbondtypes) for all bonds
|
The a,b,c values are bond types for all bonds in the SHAKE cluster that
|
||||||
in the SHAKE cluster that this atom belongs to. The number of values
|
this atom belongs to. Bond types may be either numbers (from 1 to Nbondtypes)
|
||||||
that must appear is determined by the shake flag for the atom (see the
|
or bond type labels as defined by the :doc:`labelmap <labelmap>` command
|
||||||
Shake Flags section above). All atoms in a particular cluster should
|
or a "Bond Type Labels" section of a data file.
|
||||||
list their a,b,c values identically.
|
|
||||||
|
|
||||||
|
The number of values that must appear is determined by the shake flag
|
||||||
|
for the atom (see the Shake Flags section above). All atoms in a
|
||||||
|
particular cluster should list their a,b,c values identically.
|
||||||
|
|
||||||
If flag = 0, no a,b,c values are listed on the line, just the
|
If flag = 0, no a,b,c values are listed on the line, just the
|
||||||
(ignored) ID.
|
(ignored) ID.
|
||||||
@ -459,8 +486,9 @@ If flag = 0, no a,b,c values are listed on the line, just the
|
|||||||
If flag = 1, a,b,c are listed, where a = bondtype of the bond between
|
If flag = 1, a,b,c are listed, where a = bondtype of the bond between
|
||||||
the central atom and the first non-central atom (value b in the Shake
|
the central atom and the first non-central atom (value b in the Shake
|
||||||
Atoms section), b = bondtype of the bond between the central atom and
|
Atoms section), b = bondtype of the bond between the central atom and
|
||||||
the second non-central atom (value c in the Shake Atoms section), and c =
|
the second non-central atom (value c in the Shake Atoms section), and c
|
||||||
the angle type (1 to Nangletypes) of the angle between the 3 atoms.
|
= the angle type (1 to Nangletypes, or angle type label) of the angle
|
||||||
|
between the 3 atoms.
|
||||||
|
|
||||||
If flag = 2, only a is listed, where a = bondtype of the bond between
|
If flag = 2, only a is listed, where a = bondtype of the bond between
|
||||||
the 2 atoms in the cluster.
|
the 2 atoms in the cluster.
|
||||||
@ -473,9 +501,9 @@ and the second non-central atom (value c in the Shake Atoms section).
|
|||||||
If flag = 4, a,b,c are listed, where a = bondtype of the bond between
|
If flag = 4, a,b,c are listed, where a = bondtype of the bond between
|
||||||
the central atom and the first non-central atom (value b in the Shake
|
the central atom and the first non-central atom (value b in the Shake
|
||||||
Atoms section), b = bondtype of the bond between the central atom and
|
Atoms section), b = bondtype of the bond between the central atom and
|
||||||
the second non-central atom (value c in the Shake Atoms section), and c =
|
the second non-central atom (value c in the Shake Atoms section), and c
|
||||||
bondtype of the bond between the central atom and the third non-central
|
= bondtype of the bond between the central atom and the third
|
||||||
atom (value d in the Shake Atoms section).
|
non-central atom (value d in the Shake Atoms section).
|
||||||
|
|
||||||
See the :doc:`fix shake <fix_shake>` page for a further description
|
See the :doc:`fix shake <fix_shake>` page for a further description
|
||||||
of SHAKE clusters.
|
of SHAKE clusters.
|
||||||
|
|||||||
@ -10,7 +10,7 @@ Syntax
|
|||||||
|
|
||||||
pair_coeff I J args
|
pair_coeff I J args
|
||||||
|
|
||||||
* I,J = atom types (see asterisk form below)
|
* I,J = numeric atom types (see asterisk form below), or type labels
|
||||||
* args = coefficients for one or more pairs of atom types
|
* args = coefficients for one or more pairs of atom types
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
@ -26,6 +26,10 @@ Examples
|
|||||||
pair_coeff * 3 morse.table ENTRY1
|
pair_coeff * 3 morse.table ENTRY1
|
||||||
pair_coeff 1 2 lj/cut 1.0 1.0 2.5 # (for pair_style hybrid)
|
pair_coeff 1 2 lj/cut 1.0 1.0 2.5 # (for pair_style hybrid)
|
||||||
|
|
||||||
|
labelmap atom 1 C
|
||||||
|
labelmap atom 2 H
|
||||||
|
pair_coeff C H 1.0 1.0 2.5
|
||||||
|
|
||||||
Description
|
Description
|
||||||
"""""""""""
|
"""""""""""
|
||||||
|
|
||||||
@ -34,20 +38,27 @@ atom types. The number and meaning of the coefficients depends on the
|
|||||||
pair style. Pair coefficients can also be set in the data file read
|
pair style. Pair coefficients can also be set in the data file read
|
||||||
by the :doc:`read_data <read_data>` command or in a restart file.
|
by the :doc:`read_data <read_data>` command or in a restart file.
|
||||||
|
|
||||||
I and J can be specified in one of two ways. Explicit numeric values
|
I and J can be specified in one of several ways. Explicit numeric
|
||||||
can be used for each, as in the first example above. I <= J is
|
values can be used for each, as in the first example above. Or, one
|
||||||
required. LAMMPS sets the coefficients for the symmetric J,I
|
or both of the types in the I,J pair can be a type label, which is an
|
||||||
interaction to the same values.
|
alphanumeric string defined by the :doc:`labelmap <labelmap>` command
|
||||||
|
or in a section of a data file read by the :doc:`read_data
|
||||||
|
<read_data>` command, and which converts internally to a numeric type.
|
||||||
|
Internally, LAMMPS will set coefficients for the symmetric J,I
|
||||||
|
interaction to the same values as the I,J interaction.
|
||||||
|
|
||||||
A wildcard asterisk can be used in place of or in conjunction with the
|
For numeric values only, a wildcard asterisk can be used in place of or
|
||||||
I,J arguments to set the coefficients for multiple pairs of atom
|
in conjunction with the I,J arguments to set the coefficients for
|
||||||
types. This takes the form "\*" or "\*n" or "n\*" or "m\*n". If N = the
|
multiple pairs of atom types. This takes the form "\*" or "\*n" or
|
||||||
number of atom types, then an asterisk with no numeric values means all
|
"n\*" or "m\*n". If :math:`N` is the number of atom types, then an
|
||||||
types from 1 to N. A leading asterisk means all types from 1 to n
|
asterisk with no numeric values means all types from 1 to :math:`N`. A
|
||||||
(inclusive). A trailing asterisk means all types from n to N
|
leading asterisk means all types from 1 to n (inclusive). A trailing
|
||||||
(inclusive). A middle asterisk means all types from m to n
|
asterisk means all types from n to :math:`N` (inclusive). A middle
|
||||||
(inclusive). Note that only type pairs with I <= J are considered; if
|
asterisk means all types from m to n (inclusive). For the asterisk
|
||||||
asterisks imply type pairs where J < I, they are ignored.
|
syntax, only type pairs with I <= J are considered; if asterisks imply
|
||||||
|
type pairs where J < I, they are ignored. Again internally, LAMMPS will
|
||||||
|
set the coefficients for the symmetric J,I interactions to the same
|
||||||
|
values as the I <= J interactions.
|
||||||
|
|
||||||
Note that a pair_coeff command can override a previous setting for the
|
Note that a pair_coeff command can override a previous setting for the
|
||||||
same I,J pair. For example, these commands set the coeffs for all I,J
|
same I,J pair. For example, these commands set the coeffs for all I,J
|
||||||
@ -63,11 +74,11 @@ same format as the arguments of the pair_coeff command in an input
|
|||||||
script, with the exception of the I,J type arguments. In each line of
|
script, with the exception of the I,J type arguments. In each line of
|
||||||
the "Pair Coeffs" section of a data file, only a single type I is
|
the "Pair Coeffs" section of a data file, only a single type I is
|
||||||
specified, which sets the coefficients for type I interacting with
|
specified, which sets the coefficients for type I interacting with
|
||||||
type I. This is because the section has exactly N lines, where N =
|
type I. This is because the section has exactly :math:`N` lines, where
|
||||||
the number of atom types. For this reason, the wild-card asterisk
|
:math:`N` is the number of atom types. For this reason, the wild-card
|
||||||
should also not be used as part of the I argument. Thus in a data
|
asterisk should also not be used as part of the I argument. Thus in a
|
||||||
file, the line corresponding to the first example above would be listed
|
data file, the line corresponding to the first example above would be
|
||||||
as
|
listed as
|
||||||
|
|
||||||
.. parsed-literal::
|
.. parsed-literal::
|
||||||
|
|
||||||
|
|||||||
@ -164,6 +164,12 @@ other types already exist. All five offset values must be specified,
|
|||||||
but individual values will be ignored if the data file does not use
|
but individual values will be ignored if the data file does not use
|
||||||
that attribute (e.g. no bonds).
|
that attribute (e.g. no bonds).
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
Offsets are **ignored** on lines using type labels, as the type
|
||||||
|
labels will determine the actual types directly depending on the
|
||||||
|
current :doc:`labelmap <labelmap>` settings.
|
||||||
|
|
||||||
The *shift* keyword can be used to specify an (Sx, Sy, Sz)
|
The *shift* keyword can be used to specify an (Sx, Sy, Sz)
|
||||||
displacement applied to the coordinates of each atom. Sz must be 0.0
|
displacement applied to the coordinates of each atom. Sz must be 0.0
|
||||||
for a 2d simulation. This is a mechanism for adding structured
|
for a 2d simulation. This is a mechanism for adding structured
|
||||||
@ -227,22 +233,27 @@ The file will be read line by line, but there is a limit of 254
|
|||||||
characters per line and characters beyond that limit will be ignored.
|
characters per line and characters beyond that limit will be ignored.
|
||||||
|
|
||||||
A data file has a header and a body. The header appears first. The
|
A data file has a header and a body. The header appears first. The
|
||||||
first line of the header is always skipped; it typically contains a
|
first line of the header and thus of the data file is *always* skipped;
|
||||||
description of the file. Then lines are read one at a time. Lines
|
it typically contains a description of the file or a comment from the
|
||||||
can have a trailing comment starting with '#' that is ignored. If the
|
software that created the file.
|
||||||
line is blank (only white-space after comment is deleted), it is
|
|
||||||
skipped. If the line contains a header keyword, the corresponding
|
|
||||||
value(s) is read from the line. If it does not contain a header
|
|
||||||
keyword, the line begins the body of the file.
|
|
||||||
|
|
||||||
The body of the file contains zero or more sections. The first line
|
Then lines are read one line at a time. Lines can have a trailing
|
||||||
of a section has only a keyword. This line can have a trailing
|
comment starting with '#' that is ignored. There *must* be at least one
|
||||||
comment starting with '#' that is either ignored or can be used to
|
blank between any valid content and the comment. If a line is blank
|
||||||
check for a style match, as described below. The next line is
|
(i.e. contains only white-space after comments are deleted), it is
|
||||||
skipped. The remaining lines of the section contain values. The
|
skipped. If the line contains a header keyword, the corresponding
|
||||||
number of lines depends on the section keyword as described below.
|
value(s) is/are read from the line. A line that is *not* blank and does
|
||||||
Zero or more blank lines can be used between sections. Sections can
|
*not* contain a header keyword begins the body of the file.
|
||||||
appear in any order, with a few exceptions as noted below.
|
|
||||||
|
The body of the file contains zero or more sections. The first line of
|
||||||
|
a section has only a keyword. This line can have a trailing comment
|
||||||
|
starting with '#' that is either ignored or can be used to check for a
|
||||||
|
style match, as described below. There must be a blank between the
|
||||||
|
keyword and any comment. The *next* line is *always* skipped. The
|
||||||
|
remaining lines of the section contain values. The number of lines
|
||||||
|
depends on the section keyword as described below. Zero or more blank
|
||||||
|
lines can be used *between* sections. Sections can appear in any order,
|
||||||
|
with a few exceptions as noted below.
|
||||||
|
|
||||||
The keyword *fix* can be used one or more times. Each usage specifies
|
The keyword *fix* can be used one or more times. Each usage specifies
|
||||||
a fix that will be used to process a specific portion of the data
|
a fix that will be used to process a specific portion of the data
|
||||||
@ -477,6 +488,7 @@ These are the section keywords for the body of the file.
|
|||||||
|
|
||||||
* *Atoms, Velocities, Masses, Ellipsoids, Lines, Triangles, Bodies* = atom-property sections
|
* *Atoms, Velocities, Masses, Ellipsoids, Lines, Triangles, Bodies* = atom-property sections
|
||||||
* *Bonds, Angles, Dihedrals, Impropers* = molecular topology sections
|
* *Bonds, Angles, Dihedrals, Impropers* = molecular topology sections
|
||||||
|
* *Atom Type Labels, Bond Type Labels, Angle Type Labels, Dihedral Type Labels, Improper Type Labels* = type label maps
|
||||||
* *Pair Coeffs, PairIJ Coeffs, Bond Coeffs, Angle Coeffs, Dihedral Coeffs, Improper Coeffs* = force field sections
|
* *Pair Coeffs, PairIJ Coeffs, Bond Coeffs, Angle Coeffs, Dihedral Coeffs, Improper Coeffs* = force field sections
|
||||||
* *BondBond Coeffs, BondAngle Coeffs, MiddleBondTorsion Coeffs, EndBondTorsion Coeffs, AngleTorsion Coeffs, AngleAngleTorsion Coeffs, BondBond13 Coeffs, AngleAngle Coeffs* = class 2 force field sections
|
* *BondBond Coeffs, BondAngle Coeffs, MiddleBondTorsion Coeffs, EndBondTorsion Coeffs, AngleTorsion Coeffs, AngleAngleTorsion Coeffs, BondBond13 Coeffs, AngleAngle Coeffs* = class 2 force field sections
|
||||||
|
|
||||||
@ -503,7 +515,8 @@ section is described including the number of lines it must contain and
|
|||||||
rules (if any) for where it can appear in the data file.
|
rules (if any) for where it can appear in the data file.
|
||||||
|
|
||||||
Any individual line in the various sections can have a trailing
|
Any individual line in the various sections can have a trailing
|
||||||
comment starting with "#" for annotation purposes. E.g. in the
|
comment starting with "#" for annotation purposes. There must be at least
|
||||||
|
one blank between valid content and the comment. E.g. in the
|
||||||
Atoms section:
|
Atoms section:
|
||||||
|
|
||||||
.. parsed-literal::
|
.. parsed-literal::
|
||||||
@ -536,6 +549,26 @@ input script.
|
|||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
*Angle Type Labels* section:
|
||||||
|
|
||||||
|
* one line per angle type
|
||||||
|
* line syntax: ID label
|
||||||
|
|
||||||
|
.. parsed-literal::
|
||||||
|
|
||||||
|
ID = angle type (1-N)
|
||||||
|
label = alphanumeric type label
|
||||||
|
|
||||||
|
Define alphanumeric type labels for each numeric angle type. These
|
||||||
|
can be used in the Angles section in place of a numeric type, but only
|
||||||
|
if the this section appears before the Angles section.
|
||||||
|
|
||||||
|
See the :doc:`Howto type labels <Howto_type_labels>` doc page for the
|
||||||
|
allowed syntax of type labels and a general discussion of how type
|
||||||
|
labels can be used.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
*AngleAngle Coeffs* section:
|
*AngleAngle Coeffs* section:
|
||||||
|
|
||||||
* one line per improper type
|
* one line per improper type
|
||||||
@ -568,7 +601,7 @@ input script.
|
|||||||
.. parsed-literal::
|
.. parsed-literal::
|
||||||
|
|
||||||
ID = number of angle (1-Nangles)
|
ID = number of angle (1-Nangles)
|
||||||
type = angle type (1-Nangletype)
|
type = angle type (1-Nangletype, or type label)
|
||||||
atom1,atom2,atom3 = IDs of 1st,2nd,3rd atom in angle
|
atom1,atom2,atom3 = IDs of 1st,2nd,3rd atom in angle
|
||||||
|
|
||||||
example:
|
example:
|
||||||
@ -580,8 +613,15 @@ example:
|
|||||||
The 3 atoms are ordered linearly within the angle. Thus the central
|
The 3 atoms are ordered linearly within the angle. Thus the central
|
||||||
atom (around which the angle is computed) is the atom2 in the list.
|
atom (around which the angle is computed) is the atom2 in the list.
|
||||||
E.g. H,O,H for a water molecule. The *Angles* section must appear
|
E.g. H,O,H for a water molecule. The *Angles* section must appear
|
||||||
after the *Atoms* section. All values in this section must be
|
after the *Atoms* section.
|
||||||
integers (1, not 1.0).
|
|
||||||
|
All values in this section must be integers (1, not 1.0). However,
|
||||||
|
the type can be a numeric value or an alphanumeric label. The latter
|
||||||
|
is only allowed if the type label has been defined by the
|
||||||
|
:doc:`labelmap <labelmap>` command or an Angle Type Labels section
|
||||||
|
earlier in the data file. See the :doc:`Howto type labels
|
||||||
|
<Howto_type_labels>` doc page for the allowed syntax of type labels
|
||||||
|
and a general discussion of how type labels can be used.
|
||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
@ -597,6 +637,26 @@ integers (1, not 1.0).
|
|||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
*Atom Type Labels* section:
|
||||||
|
|
||||||
|
* one line per atom type
|
||||||
|
* line syntax: ID label
|
||||||
|
|
||||||
|
.. parsed-literal::
|
||||||
|
|
||||||
|
ID = numeric atom type (1-N)
|
||||||
|
label = alphanumeric type label
|
||||||
|
|
||||||
|
Define alphanumeric type labels for each numeric atom type. These
|
||||||
|
can be used in the Atoms section in place of a numeric type, but only
|
||||||
|
if the Atom Type Labels section appears before the Atoms section.
|
||||||
|
|
||||||
|
See the :doc:`Howto type labels <Howto_type_labels>` doc page for the
|
||||||
|
allowed syntax of type labels and a general discussion of how type
|
||||||
|
labels can be used.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
*Atoms* section:
|
*Atoms* section:
|
||||||
|
|
||||||
* one line per atom
|
* one line per atom
|
||||||
@ -670,7 +730,7 @@ of analysis.
|
|||||||
The per-atom values have these meanings and units, listed alphabetically:
|
The per-atom values have these meanings and units, listed alphabetically:
|
||||||
|
|
||||||
* atom-ID = integer ID of atom
|
* atom-ID = integer ID of atom
|
||||||
* atom-type = type of atom (1-Ntype)
|
* atom-type = type of atom (1-Ntype, or type label)
|
||||||
* bodyflag = 1 for body particles, 0 for point particles
|
* bodyflag = 1 for body particles, 0 for point particles
|
||||||
* bond_nt = bond NT factor for MESONT particles (?? units)
|
* bond_nt = bond NT factor for MESONT particles (?? units)
|
||||||
* buckling = buckling factor for MESONT particles (?? units)
|
* buckling = buckling factor for MESONT particles (?? units)
|
||||||
@ -722,6 +782,13 @@ not used (e.g. an atomic system with no bonds), and you don't care if
|
|||||||
unique atom IDs appear in dump files, then the atom-IDs can all be set
|
unique atom IDs appear in dump files, then the atom-IDs can all be set
|
||||||
to 0.
|
to 0.
|
||||||
|
|
||||||
|
The atom-type can be a numeric value or an alphanumeric label. The
|
||||||
|
latter is only allowed if the type label has been defined by the
|
||||||
|
:doc:`labelmap <labelmap>` command or an Atom Type Labels section
|
||||||
|
earlier in the data file. See the :doc:`Howto type labels
|
||||||
|
<Howto_type_labels>` doc page for the allowed syntax of type labels
|
||||||
|
and a general discussion of how type labels can be used.
|
||||||
|
|
||||||
The molecule ID is a second identifier attached to an atom. Normally, it
|
The molecule ID is a second identifier attached to an atom. Normally, it
|
||||||
is a number from 1 to N, identifying which molecule the atom belongs
|
is a number from 1 to N, identifying which molecule the atom belongs
|
||||||
to. It can be 0 if it is a non-bonded atom or if you don't care to
|
to. It can be 0 if it is a non-bonded atom or if you don't care to
|
||||||
@ -932,6 +999,26 @@ script.
|
|||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
*Bond Type Labels* section:
|
||||||
|
|
||||||
|
* one line per bond type
|
||||||
|
* line syntax: ID label
|
||||||
|
|
||||||
|
.. parsed-literal::
|
||||||
|
|
||||||
|
ID = bond type (1-N)
|
||||||
|
label = alphanumeric type label
|
||||||
|
|
||||||
|
Define alphanumeric type labels for each numeric bond type. These can
|
||||||
|
be used in the Bonds section in place of a numeric type, but only if
|
||||||
|
the this section appears before the Angles section.
|
||||||
|
|
||||||
|
See the :doc:`Howto type labels <Howto_type_labels>` doc page for the
|
||||||
|
allowed syntax of type labels and a general discussion of how type
|
||||||
|
labels can be used.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
*BondAngle Coeffs* section:
|
*BondAngle Coeffs* section:
|
||||||
|
|
||||||
* one line per angle type
|
* one line per angle type
|
||||||
@ -976,7 +1063,7 @@ script.
|
|||||||
.. parsed-literal::
|
.. parsed-literal::
|
||||||
|
|
||||||
ID = bond number (1-Nbonds)
|
ID = bond number (1-Nbonds)
|
||||||
type = bond type (1-Nbondtype)
|
type = bond type (1-Nbondtype, or type label)
|
||||||
atom1,atom2 = IDs of 1st,2nd atom in bond
|
atom1,atom2 = IDs of 1st,2nd atom in bond
|
||||||
|
|
||||||
* example:
|
* example:
|
||||||
@ -985,8 +1072,15 @@ script.
|
|||||||
|
|
||||||
12 3 17 29
|
12 3 17 29
|
||||||
|
|
||||||
The *Bonds* section must appear after the *Atoms* section. All values
|
The *Bonds* section must appear after the *Atoms* section.
|
||||||
in this section must be integers (1, not 1.0).
|
|
||||||
|
All values in this section must be integers (1, not 1.0). However,
|
||||||
|
the type can be a numeric value or an alphanumeric label. The latter
|
||||||
|
is only allowed if the type label has been defined by the
|
||||||
|
:doc:`labelmap <labelmap>` command or a Bond Type Labels section
|
||||||
|
earlier in the data file. See the :doc:`Howto type labels
|
||||||
|
<Howto_type_labels>` doc page for the allowed syntax of type labels
|
||||||
|
and a general discussion of how type labels can be used.
|
||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
@ -1014,6 +1108,26 @@ Coefficients can also be set via the
|
|||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
*Dihedral Type Labels* section:
|
||||||
|
|
||||||
|
* one line per dihedral type
|
||||||
|
* line syntax: ID label
|
||||||
|
|
||||||
|
.. parsed-literal::
|
||||||
|
|
||||||
|
ID = dihedral type (1-N)
|
||||||
|
label = alphanumeric type label
|
||||||
|
|
||||||
|
Define alphanumeric type labels for each numeric dihedral type. These
|
||||||
|
can be used in the Dihedrals section in place of a numeric type, but
|
||||||
|
only if the this section appears before the Dihedrals section.
|
||||||
|
|
||||||
|
See the :doc:`Howto type labels <Howto_type_labels>` doc page for the
|
||||||
|
allowed syntax of type labels and a general discussion of how type
|
||||||
|
labels can be used.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
*Dihedrals* section:
|
*Dihedrals* section:
|
||||||
|
|
||||||
* one line per dihedral
|
* one line per dihedral
|
||||||
@ -1022,7 +1136,7 @@ Coefficients can also be set via the
|
|||||||
.. parsed-literal::
|
.. parsed-literal::
|
||||||
|
|
||||||
ID = number of dihedral (1-Ndihedrals)
|
ID = number of dihedral (1-Ndihedrals)
|
||||||
type = dihedral type (1-Ndihedraltype)
|
type = dihedral type (1-Ndihedraltype, or type label)
|
||||||
atom1,atom2,atom3,atom4 = IDs of 1st,2nd,3rd,4th atom in dihedral
|
atom1,atom2,atom3,atom4 = IDs of 1st,2nd,3rd,4th atom in dihedral
|
||||||
|
|
||||||
* example:
|
* example:
|
||||||
@ -1032,8 +1146,15 @@ Coefficients can also be set via the
|
|||||||
12 4 17 29 30 21
|
12 4 17 29 30 21
|
||||||
|
|
||||||
The 4 atoms are ordered linearly within the dihedral. The *Dihedrals*
|
The 4 atoms are ordered linearly within the dihedral. The *Dihedrals*
|
||||||
section must appear after the *Atoms* section. All values in this
|
section must appear after the *Atoms* section.
|
||||||
section must be integers (1, not 1.0).
|
|
||||||
|
All values in this section must be integers (1, not 1.0). However,
|
||||||
|
the type can be a numeric value or an alphanumeric label. The latter
|
||||||
|
is only allowed if the type label has been defined by the
|
||||||
|
:doc:`labelmap <labelmap>` command or a Dihedral Type Labels section
|
||||||
|
earlier in the data file. See the :doc:`Howto type labels
|
||||||
|
<Howto_type_labels>` doc page for the allowed syntax of type labels
|
||||||
|
and a general discussion of how type labels can be used.
|
||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
@ -1115,6 +1236,26 @@ Coefficients can also be set via the
|
|||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
*Improper Type Labels* section:
|
||||||
|
|
||||||
|
* one line per improper type
|
||||||
|
* line syntax: ID label
|
||||||
|
|
||||||
|
.. parsed-literal::
|
||||||
|
|
||||||
|
ID = improper type (1-N)
|
||||||
|
label = alphanumeric type label
|
||||||
|
|
||||||
|
Define alphanumeric type labels for each numeric improper type. These
|
||||||
|
can be used in the Impropers section in place of a numeric type, but
|
||||||
|
only if the this section appears before the Impropers section.
|
||||||
|
|
||||||
|
See the :doc:`Howto type labels <Howto_type_labels>` doc page for the
|
||||||
|
allowed syntax of type labels and a general discussion of how type
|
||||||
|
labels can be used.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
*Impropers* section:
|
*Impropers* section:
|
||||||
|
|
||||||
* one line per improper
|
* one line per improper
|
||||||
@ -1123,7 +1264,7 @@ Coefficients can also be set via the
|
|||||||
.. parsed-literal::
|
.. parsed-literal::
|
||||||
|
|
||||||
ID = number of improper (1-Nimpropers)
|
ID = number of improper (1-Nimpropers)
|
||||||
type = improper type (1-Nimpropertype)
|
type = improper type (1-Nimpropertype, or type label)
|
||||||
atom1,atom2,atom3,atom4 = IDs of 1st,2nd,3rd,4th atom in improper
|
atom1,atom2,atom3,atom4 = IDs of 1st,2nd,3rd,4th atom in improper
|
||||||
|
|
||||||
* example:
|
* example:
|
||||||
@ -1133,11 +1274,19 @@ Coefficients can also be set via the
|
|||||||
12 3 17 29 13 100
|
12 3 17 29 13 100
|
||||||
|
|
||||||
The ordering of the 4 atoms determines the definition of the improper
|
The ordering of the 4 atoms determines the definition of the improper
|
||||||
angle used in the formula for each :doc:`improper style <improper_style>`. See the doc pages for individual styles
|
angle used in the formula for each :doc:`improper style
|
||||||
for details.
|
<improper_style>`. See the doc pages for individual styles for
|
||||||
|
details.
|
||||||
|
|
||||||
The *Impropers* section must appear after the *Atoms* section. All
|
The *Impropers* section must appear after the *Atoms* section.
|
||||||
values in this section must be integers (1, not 1.0).
|
|
||||||
|
All values in this section must be integers (1, not 1.0). However,
|
||||||
|
the type can be a numeric value or an alphanumeric label. The latter
|
||||||
|
is only allowed if the type label has been defined by the
|
||||||
|
:doc:`labelmap <labelmap>` command or a Improper Type Labels section
|
||||||
|
earlier in the data file. See the :doc:`Howto type labels
|
||||||
|
<Howto_type_labels>` doc page for the allowed syntax of type labels
|
||||||
|
and a general discussion of how type labels can be used.
|
||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
@ -1181,7 +1330,7 @@ The *Lines* section must appear after the *Atoms* section.
|
|||||||
|
|
||||||
.. parsed-literal::
|
.. parsed-literal::
|
||||||
|
|
||||||
ID = atom type (1-N)
|
ID = atom type (1-N or atom type label)
|
||||||
mass = mass value
|
mass = mass value
|
||||||
|
|
||||||
* example:
|
* example:
|
||||||
@ -1195,6 +1344,13 @@ This defines the mass of each atom type. This can also be set via the
|
|||||||
used for atom styles that define a mass for individual atoms -
|
used for atom styles that define a mass for individual atoms -
|
||||||
e.g. :doc:`atom_style sphere <atom_style>`.
|
e.g. :doc:`atom_style sphere <atom_style>`.
|
||||||
|
|
||||||
|
Using type labels instead of atom type numbers is only allowed if the
|
||||||
|
type label has been defined by the :doc:`labelmap <labelmap>` command or
|
||||||
|
a Atom Type Labels section earlier in the data file. See the
|
||||||
|
:doc:`Howto type labels <Howto_type_labels>` doc page for the allowed
|
||||||
|
syntax of type labels and a general discussion of how type labels can be
|
||||||
|
used.
|
||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
*MiddleBondTorsion Coeffs* section:
|
*MiddleBondTorsion Coeffs* section:
|
||||||
|
|||||||
@ -12,7 +12,7 @@ Syntax
|
|||||||
restart N root keyword value ...
|
restart N root keyword value ...
|
||||||
restart N file1 file2 keyword value ...
|
restart N file1 file2 keyword value ...
|
||||||
|
|
||||||
* N = write a restart file every this many timesteps
|
* N = write a restart file on timesteps which are multipls of N
|
||||||
* N can be a variable (see below)
|
* N can be a variable (see below)
|
||||||
* root = filename to which timestep # is appended
|
* root = filename to which timestep # is appended
|
||||||
* file1,file2 = two full filenames, toggle between them when writing file
|
* file1,file2 = two full filenames, toggle between them when writing file
|
||||||
@ -42,13 +42,14 @@ Description
|
|||||||
"""""""""""
|
"""""""""""
|
||||||
|
|
||||||
Write out a binary restart file with the current state of the
|
Write out a binary restart file with the current state of the
|
||||||
simulation every so many timesteps, in either or both of two modes, as
|
simulation on timesteps which are a multiple of N. A value of N = 0
|
||||||
a run proceeds. A value of 0 means do not write out any restart
|
means do not write out any restart files, which is the default.
|
||||||
files. The two modes are as follows. If one filename is specified, a
|
Restart files are written in one (or both) of two modes as a run
|
||||||
series of filenames will be created which include the timestep in the
|
proceeds. If one filename is specified, a series of filenames will be
|
||||||
filename. If two filenames are specified, only 2 restart files will
|
created which include the timestep in the filename. If two filenames
|
||||||
be created, with those names. LAMMPS will toggle between the 2 names
|
are specified, only 2 restart files will be created, with those names.
|
||||||
as it writes successive restart files.
|
LAMMPS will toggle between the 2 names as it writes successive restart
|
||||||
|
files.
|
||||||
|
|
||||||
Note that you can specify the restart command twice, once with a
|
Note that you can specify the restart command twice, once with a
|
||||||
single filename and once with two filenames. This would allow you,
|
single filename and once with two filenames. This would allow you,
|
||||||
|
|||||||
@ -66,7 +66,7 @@ Syntax
|
|||||||
bound(group,dir,region), gyration(group,region), ke(group,reigon),
|
bound(group,dir,region), gyration(group,region), ke(group,reigon),
|
||||||
angmom(group,dim,region), torque(group,dim,region),
|
angmom(group,dim,region), torque(group,dim,region),
|
||||||
inertia(group,dimdim,region), omega(group,dim,region)
|
inertia(group,dimdim,region), omega(group,dim,region)
|
||||||
special functions = sum(x), min(x), max(x), ave(x), trap(x), slope(x), gmask(x), rmask(x), grmask(x,y), next(x), is_file(name), is_os(name), extract_setting(name)
|
special functions = sum(x), min(x), max(x), ave(x), trap(x), slope(x), gmask(x), rmask(x), grmask(x,y), next(x), is_file(name), is_os(name), extract_setting(name), label2type(kind,label)
|
||||||
feature functions = is_active(category,feature), is_available(category,feature), is_defined(category,id)
|
feature functions = is_active(category,feature), is_available(category,feature), is_defined(category,id)
|
||||||
atom value = id[i], mass[i], type[i], mol[i], x[i], y[i], z[i], vx[i], vy[i], vz[i], fx[i], fy[i], fz[i], q[i]
|
atom value = id[i], mass[i], type[i], mol[i], x[i], y[i], z[i], vx[i], vy[i], vz[i], fx[i], fy[i], fz[i], q[i]
|
||||||
atom vector = id, mass, type, mol, x, y, z, vx, vy, vz, fx, fy, fz, q
|
atom vector = id, mass, type, mol, x, y, z, vx, vy, vz, fx, fy, fz, q
|
||||||
@ -505,7 +505,7 @@ references, and references to other variables.
|
|||||||
+--------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
+--------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||||
| Region functions | count(ID,IDR), mass(ID,IDR), charge(ID,IDR), xcm(ID,dim,IDR), vcm(ID,dim,IDR), fcm(ID,dim,IDR), bound(ID,dir,IDR), gyration(ID,IDR), ke(ID,IDR), angmom(ID,dim,IDR), torque(ID,dim,IDR), inertia(ID,dimdim,IDR), omega(ID,dim,IDR) |
|
| Region functions | count(ID,IDR), mass(ID,IDR), charge(ID,IDR), xcm(ID,dim,IDR), vcm(ID,dim,IDR), fcm(ID,dim,IDR), bound(ID,dir,IDR), gyration(ID,IDR), ke(ID,IDR), angmom(ID,dim,IDR), torque(ID,dim,IDR), inertia(ID,dimdim,IDR), omega(ID,dim,IDR) |
|
||||||
+--------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
+--------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||||
| Special functions | sum(x), min(x), max(x), ave(x), trap(x), slope(x), gmask(x), rmask(x), grmask(x,y), next(x) |
|
| Special functions | sum(x), min(x), max(x), ave(x), trap(x), slope(x), gmask(x), rmask(x), grmask(x,y), next(x), label2type(kind,label) |
|
||||||
+--------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
+--------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||||
| Atom values | id[i], mass[i], type[i], mol[i], x[i], y[i], z[i], vx[i], vy[i], vz[i], fx[i], fy[i], fz[i], q[i] |
|
| Atom values | id[i], mass[i], type[i], mol[i], x[i], y[i], z[i], vx[i], vy[i], vz[i], fx[i], fy[i], fz[i], q[i] |
|
||||||
+--------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
+--------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||||
@ -962,6 +962,12 @@ types, bond types and so on. For the full list of available keywords
|
|||||||
*name* and their meaning, see the documentation for extract_setting()
|
*name* and their meaning, see the documentation for extract_setting()
|
||||||
via the link in this paragraph.
|
via the link in this paragraph.
|
||||||
|
|
||||||
|
The label2type() function converts type labels into numeric types, using label
|
||||||
|
maps created by the :doc:`labelmap <labelmap>` or :doc:`read_data <read_data>`
|
||||||
|
commands. The first argument is the label map kind (atom, bond, angle,
|
||||||
|
dihedral, or improper) and the second argument is the label. The function
|
||||||
|
returns the corresponding numeric type.
|
||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
Feature Functions
|
Feature Functions
|
||||||
|
|||||||
@ -12,12 +12,14 @@ Syntax
|
|||||||
|
|
||||||
* file = name of data file to write out
|
* file = name of data file to write out
|
||||||
* zero or more keyword/value pairs may be appended
|
* zero or more keyword/value pairs may be appended
|
||||||
* keyword = *pair* or *nocoeff*
|
* keyword = *pair* or *nocoeff* or *nofix* or *nolabelmap*
|
||||||
|
|
||||||
.. parsed-literal::
|
.. parsed-literal::
|
||||||
|
|
||||||
*nocoeff* = do not write out force field info
|
*nocoeff* = do not write out force field info
|
||||||
*nofix* = do not write out extra sections read by fixes
|
*nofix* = do not write out extra sections read by fixes
|
||||||
|
*nolabelmap* = do not write out type labels
|
||||||
|
*types* value = *numeric* or *labels*
|
||||||
*pair* value = *ii* or *ij*
|
*pair* value = *ii* or *ij*
|
||||||
*ii* = write one line of pair coefficient info per atom type
|
*ii* = write one line of pair coefficient info per atom type
|
||||||
*ij* = write one line of pair coefficient info per IJ atom type pair
|
*ij* = write one line of pair coefficient info per IJ atom type pair
|
||||||
@ -94,16 +96,39 @@ data file is read.
|
|||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
The *nocoeff* keyword requests that no force field parameters should
|
Use of the *nocoeff* keyword means no force field parameters are
|
||||||
be written to the data file. This can be very helpful, if one wants
|
written to the data file. This can be helpful, for example, if you
|
||||||
to make significant changes to the force field or if the parameters
|
want to make significant changes to the force field or if the force
|
||||||
are read in separately anyway, e.g. from an include file.
|
field parameters are read in separately, e.g. from an include file.
|
||||||
|
|
||||||
The *nofix* keyword requests that no extra sections read by fixes
|
Use of the *nofix* keyword means no extra sections read by fixes are
|
||||||
should be written to the data file (see the *fix* option of the
|
written to the data file (see the *fix* option of the :doc:`read_data
|
||||||
:doc:`read_data <read_data>` command for details). For example, this
|
<read_data>` command for details). For example, this option excludes
|
||||||
option excludes sections for user-created per-atom properties
|
sections for user-created per-atom properties from :doc:`fix
|
||||||
from :doc:`fix property/atom <fix_property_atom>`.
|
property/atom <fix_property_atom>`.
|
||||||
|
|
||||||
|
The *nolabelmap* and *types* keywords refer to type labels that may be
|
||||||
|
defined for numeric atom types, bond types, angle types, etc. The
|
||||||
|
label map can be defined in two ways, either by the :doc:`labelmap
|
||||||
|
<labelmap>` command or in data files read by the :doc:`read_data
|
||||||
|
<read_data>` command which have sections for Atom Type Labels, Bond
|
||||||
|
Type Labels, Angle Type Labels, etc. See the :doc:`Howto type labels
|
||||||
|
<Howto_type_labels>` doc page for the allowed syntax of type labels
|
||||||
|
and a general discussion of how type labels can be used.
|
||||||
|
|
||||||
|
Use of the *nolabelmap* keyword means that even if type labels exist
|
||||||
|
for a given type-kind (Atoms, Bonds, Angles, etc.), type labels are
|
||||||
|
not written to the data file. By default, they are written if they
|
||||||
|
exist. A type label must be defined for every numeric type (within a
|
||||||
|
given type-kind) to be written to the data file.
|
||||||
|
|
||||||
|
The *types* keyword determines how atom types, bond types, angle
|
||||||
|
types, etc are written into these data file sections: Atoms, Bonds,
|
||||||
|
Angles, etc. The default is the *numeric* setting, even if type label
|
||||||
|
maps exist. If the *labels* setting is used, type labels will be
|
||||||
|
written to the data file, if the corresponding label map exists. Note
|
||||||
|
that when using *types labels*, the *nolabelmap* keyword cannot be
|
||||||
|
used.
|
||||||
|
|
||||||
The *pair* keyword lets you specify in what format the pair
|
The *pair* keyword lets you specify in what format the pair
|
||||||
coefficient information is written into the data file. If the value
|
coefficient information is written into the data file. If the value
|
||||||
@ -144,4 +169,4 @@ Related commands
|
|||||||
Default
|
Default
|
||||||
"""""""
|
"""""""
|
||||||
|
|
||||||
The option defaults are pair = ii.
|
The option defaults are pair = ii and types_style = numeric.
|
||||||
|
|||||||
@ -61,6 +61,7 @@ ajs
|
|||||||
akohlmey
|
akohlmey
|
||||||
Aktulga
|
Aktulga
|
||||||
al
|
al
|
||||||
|
alabel
|
||||||
alain
|
alain
|
||||||
Alain
|
Alain
|
||||||
Alamos
|
Alamos
|
||||||
@ -287,6 +288,7 @@ bitrates
|
|||||||
Bitzek
|
Bitzek
|
||||||
Bjerrum
|
Bjerrum
|
||||||
Bkappa
|
Bkappa
|
||||||
|
blabel
|
||||||
Blaise
|
Blaise
|
||||||
blanchedalmond
|
blanchedalmond
|
||||||
blocksize
|
blocksize
|
||||||
@ -750,6 +752,7 @@ dissipative
|
|||||||
Dissipative
|
Dissipative
|
||||||
distharm
|
distharm
|
||||||
dl
|
dl
|
||||||
|
dlabel
|
||||||
dlambda
|
dlambda
|
||||||
DLAMMPS
|
DLAMMPS
|
||||||
dll
|
dll
|
||||||
@ -1425,6 +1428,7 @@ ijk
|
|||||||
ijkl
|
ijkl
|
||||||
ik
|
ik
|
||||||
Ikeshoji
|
Ikeshoji
|
||||||
|
ilabel
|
||||||
Ilie
|
Ilie
|
||||||
ilmenau
|
ilmenau
|
||||||
Ilmenau
|
Ilmenau
|
||||||
@ -1714,6 +1718,8 @@ Kusters
|
|||||||
Kutta
|
Kutta
|
||||||
Kuznetsov
|
Kuznetsov
|
||||||
kx
|
kx
|
||||||
|
labelmap
|
||||||
|
Labelmap
|
||||||
Lachet
|
Lachet
|
||||||
Lackmann
|
Lackmann
|
||||||
Ladd
|
Ladd
|
||||||
@ -1937,6 +1943,8 @@ Manolopoulos
|
|||||||
manpages
|
manpages
|
||||||
manybody
|
manybody
|
||||||
MANYBODY
|
MANYBODY
|
||||||
|
mapID
|
||||||
|
mapIDs
|
||||||
Maras
|
Maras
|
||||||
Marchetti
|
Marchetti
|
||||||
Marchi
|
Marchi
|
||||||
@ -2258,6 +2266,7 @@ natively
|
|||||||
Natoli
|
Natoli
|
||||||
natoms
|
natoms
|
||||||
Natoms
|
Natoms
|
||||||
|
Natomtype
|
||||||
Nattempt
|
Nattempt
|
||||||
navajowhite
|
navajowhite
|
||||||
Navier
|
Navier
|
||||||
@ -3554,6 +3563,7 @@ typeargs
|
|||||||
typedefs
|
typedefs
|
||||||
typeI
|
typeI
|
||||||
typeJ
|
typeJ
|
||||||
|
typelabel
|
||||||
typeN
|
typeN
|
||||||
typesafe
|
typesafe
|
||||||
Tz
|
Tz
|
||||||
|
|||||||
24
examples/QM/LATTE/2uo2.lmp
Normal file
24
examples/QM/LATTE/2uo2.lmp
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
LAMMPS Description
|
||||||
|
|
||||||
|
6 atoms
|
||||||
|
|
||||||
|
2 atom types
|
||||||
|
|
||||||
|
0.0000000000000000 10.800000000000001 xlo xhi
|
||||||
|
0.0000000000000000 5.4000000000000004 ylo yhi
|
||||||
|
0.0000000000000000 5.4000000000000004 zlo zhi
|
||||||
|
3.3065463576978537E-016 3.3065463576978537E-016 3.3065463576978537E-016 xy xz yz
|
||||||
|
|
||||||
|
Masses
|
||||||
|
|
||||||
|
1 238.05078125000000
|
||||||
|
2 15.994915008544922
|
||||||
|
|
||||||
|
Atoms
|
||||||
|
|
||||||
|
1 1 1 0.0 2.70000 8.10000 0.00000
|
||||||
|
2 1 2 0.0 1.35000 9.45000 1.35000
|
||||||
|
3 1 2 0.0 4.05000 9.45000 1.35000
|
||||||
|
4 1 1 0.0 2.70000 10.80000 2.70000
|
||||||
|
5 1 2 0.0 1.35000 12.15000 4.05000
|
||||||
|
6 1 2 0.0 4.05000 12.15000 4.05000
|
||||||
27
examples/QM/LATTE/3uo2.lmp
Normal file
27
examples/QM/LATTE/3uo2.lmp
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
LAMMPS Description
|
||||||
|
|
||||||
|
9 atoms
|
||||||
|
|
||||||
|
2 atom types
|
||||||
|
|
||||||
|
0.0000000000000000 16.199999999999999 xlo xhi
|
||||||
|
0.0000000000000000 5.4000000000000004 ylo yhi
|
||||||
|
0.0000000000000000 5.4000000000000004 zlo zhi
|
||||||
|
3.3065463576978537E-016 3.3065463576978537E-016 3.3065463576978537E-016 xy xz yz
|
||||||
|
|
||||||
|
Masses
|
||||||
|
|
||||||
|
1 238.05078125000000
|
||||||
|
2 15.994915008544922
|
||||||
|
|
||||||
|
Atoms
|
||||||
|
|
||||||
|
1 1 1 0.0 2.70000 8.10000 0.00000
|
||||||
|
2 1 2 0.0 1.35000 9.45000 1.35000
|
||||||
|
3 1 2 0.0 4.05000 9.45000 1.35000
|
||||||
|
4 1 1 0.0 2.70000 10.80000 2.70000
|
||||||
|
5 1 2 0.0 1.35000 12.15000 4.05000
|
||||||
|
6 1 2 0.0 4.05000 12.15000 4.05000
|
||||||
|
7 1 1 0.0 2.70000 13.50000 5.40000
|
||||||
|
8 1 2 0.0 1.35000 14.85000 6.75000
|
||||||
|
9 1 2 0.0 4.05000 14.85000 6.75000
|
||||||
30
examples/QM/LATTE/4uo2.lmp
Normal file
30
examples/QM/LATTE/4uo2.lmp
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
LAMMPS Description
|
||||||
|
|
||||||
|
12 atoms
|
||||||
|
|
||||||
|
2 atom types
|
||||||
|
|
||||||
|
0.0000000000000000 10.800000000000001 xlo xhi
|
||||||
|
0.0000000000000000 10.800000000000001 ylo yhi
|
||||||
|
0.0000000000000000 5.4000000000000004 zlo zhi
|
||||||
|
6.6130927153957075E-016 3.3065463576978537E-016 3.3065463576978537E-016 xy xz yz
|
||||||
|
|
||||||
|
Masses
|
||||||
|
|
||||||
|
1 238.05078125000000
|
||||||
|
2 15.994915008544922
|
||||||
|
|
||||||
|
Atoms
|
||||||
|
|
||||||
|
1 1 1 0.0 2.70000 8.10000 0.00000
|
||||||
|
2 1 2 0.0 1.35000 9.45000 1.35000
|
||||||
|
3 1 2 0.0 4.05000 9.45000 1.35000
|
||||||
|
4 1 1 0.0 5.40000 8.10000 2.70000
|
||||||
|
5 1 2 0.0 4.05000 9.45000 4.05000
|
||||||
|
6 1 2 0.0 6.75000 9.45000 4.05000
|
||||||
|
7 1 1 0.0 2.70000 10.80000 2.70000
|
||||||
|
8 1 2 0.0 1.35000 12.15000 4.05000
|
||||||
|
9 1 2 0.0 4.05000 12.15000 4.05000
|
||||||
|
10 1 1 0.0 5.40000 10.80000 5.40000
|
||||||
|
11 1 2 0.0 4.05000 12.15000 6.75000
|
||||||
|
12 1 2 0.0 6.75000 12.15000 6.75000
|
||||||
149
examples/QM/LATTE/README
Normal file
149
examples/QM/LATTE/README
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
LATTE is a semi-empirical tight-binding quantum code, developed
|
||||||
|
primarily at Los Alamos National Labs.
|
||||||
|
|
||||||
|
See these links:
|
||||||
|
|
||||||
|
https://www.osti.gov/biblio/1526907-los-alamos-transferable-tight-binding-energetics-latte-version
|
||||||
|
https://github.com/lanl/LATTE
|
||||||
|
|
||||||
|
LAMMPS has 2 ways of working with LATTE:
|
||||||
|
|
||||||
|
(1) Via its LATTE package and the fix latte command
|
||||||
|
must run LAMMPS on a single processor, it calls LATTE as a library
|
||||||
|
|
||||||
|
(2) Via its MDI package and the code-coupling MDI library
|
||||||
|
(a) can run LAMMPS and LATTE as stand-alone codes
|
||||||
|
LAMMPS can be run on any number of procs
|
||||||
|
LATTE must run on a single proc, but can use OpenMP
|
||||||
|
(b) can run LAMMPS with LATTE as a plug-in library
|
||||||
|
must run LAMMPS on a single processor
|
||||||
|
|
||||||
|
Examples for use case (1) are in the examples/latte dir. Use case (2)
|
||||||
|
is illustrated in this dir.
|
||||||
|
|
||||||
|
NOTE: If you compare MDI runs in this dir to similar fix latte runs in
|
||||||
|
examples/latte, the answers for energy and virial will be differnt.
|
||||||
|
This is b/c the version of LATTE used by the fix latte command within
|
||||||
|
the LATTE package is older than the version of LATTE used here.
|
||||||
|
|
||||||
|
------------------
|
||||||
|
Building 3 codes needed to run these examples
|
||||||
|
|
||||||
|
(1) Download and build MDI
|
||||||
|
|
||||||
|
% git clone git@github.com:MolSSI-MDI/MDI_Library.git mdi
|
||||||
|
% cd mdi
|
||||||
|
% mkdir build; cd build
|
||||||
|
% cmake .. # includes support for all langauges (incl Fortran, Python)
|
||||||
|
% make
|
||||||
|
|
||||||
|
(2) Download and build LATTE with MDI support
|
||||||
|
|
||||||
|
% git clone git@github.com:lanl/LATTE.git latte
|
||||||
|
% cd latte
|
||||||
|
% git checkout skimLATTE-progress # goto branch with MDI support
|
||||||
|
% cp makefiles/makefile.CHOICES.mdi makefile.CHOICES # so can now edit
|
||||||
|
% edit makefile.CHOICES settings to have these settings:
|
||||||
|
MAKELIB = OFF, SHARED = ON, MDI = ON
|
||||||
|
MDI_PATH must point to CMake build of MDI in (1),
|
||||||
|
e.g. /home/sjplimp/mdi/build/MDI_Library
|
||||||
|
comment out 2 LIB lines with CUDA-CUDART_LIBRARY
|
||||||
|
% make clean
|
||||||
|
% make # creates liblatte.so and LATTE_DOUBLE with support for MDI
|
||||||
|
|
||||||
|
(3) Build LAMMPS with its MDI package
|
||||||
|
also with the MOLECULE package for these example scripts
|
||||||
|
|
||||||
|
Build with CMake (NOTE: do not use traditional make for this use case)
|
||||||
|
|
||||||
|
% cd lammps
|
||||||
|
% mkdir build; cd build
|
||||||
|
% cmake -D PKG_MDI=yes -D PKG_MOLECULE=yes ../cmake
|
||||||
|
% make # creates lmp
|
||||||
|
|
||||||
|
(4) Copy LAMMPS and LATTE executables into this dir
|
||||||
|
|
||||||
|
Copy the LAMMPS executable into this dir as lmp_mpi.
|
||||||
|
Copy the LATTE executable LATTE_DOUBLE into this dir.
|
||||||
|
The run commands below assume you have done this.
|
||||||
|
|
||||||
|
(5) Insure LD_LIBRARY_PATH includes the dir where MDI was built in (1)
|
||||||
|
with its libmdi.so file, e.g. mdi/build/MDI_Library. This is needed
|
||||||
|
so when LATTE_DOUBLE runs as an executable it will able to find
|
||||||
|
libmdi.so.
|
||||||
|
|
||||||
|
------------------
|
||||||
|
Notes on LATTE usage
|
||||||
|
|
||||||
|
You must run this version of LATTE on a single MPI processor.
|
||||||
|
However, you can use OpenMP with LATTE. To do this you need to build
|
||||||
|
LATTE with OpenMP support by editing the makefile.CHOICES file to
|
||||||
|
include -fopenmp with FFLAGS and LINKFLAGS. Also -lapack and -lblas
|
||||||
|
need to be added to LIB, and those libraries must be available on your
|
||||||
|
system. For best performance you should also build LATTE with its
|
||||||
|
PROGRESS and BML libraries. Building those libs is more complex,
|
||||||
|
see details here:
|
||||||
|
|
||||||
|
https://github.com/lanl/LATTE_SUPER/tree/allMachines/Laptop
|
||||||
|
|
||||||
|
At run time, you need to also first set an environment variable for
|
||||||
|
the number of OpenMP threads to use, e.g.
|
||||||
|
|
||||||
|
% export OMP_NUM_THREADS=12
|
||||||
|
|
||||||
|
By default LATTE reads the latte.in file for its parameters. That
|
||||||
|
file specifies other files LATTE will read. With MDI, the driver code
|
||||||
|
(e.g. LAMMPS) can use the >FNAME command to specify an alternate
|
||||||
|
filename to use instead of latte.in.
|
||||||
|
|
||||||
|
By default LATTE writes out a log.latte file with info about its
|
||||||
|
calculations. An "OUTFILE= logfile" setting in latte.in can rename
|
||||||
|
this file.
|
||||||
|
|
||||||
|
---------
|
||||||
|
Run example #1: AIMD
|
||||||
|
|
||||||
|
* Run with MPI: 1 proc each
|
||||||
|
|
||||||
|
mpirun -np 1 lmp_mpi -mdi "-name LMP -role DRIVER -method MPI" \
|
||||||
|
-in in.aimd -log log.aimd.lammps.mpi : \
|
||||||
|
-np 1 LATTE_DOUBLE -mdi "-name LATTE -role ENGINE -method MPI"
|
||||||
|
|
||||||
|
* Run with MPI: 2 procs for LAMMPS, 1 for LATTE
|
||||||
|
|
||||||
|
mpirun -np 2 lmp_mpi -mdi "-name LMP -role DRIVER -method MPI" \
|
||||||
|
-in in.aimd -log log.aimd.lammps.mpi : \
|
||||||
|
-np 1 LATTE_DOUBLE -mdi "-name LATTE -role ENGINE -method MPI"
|
||||||
|
|
||||||
|
* Run in plugin mode: 1 proc
|
||||||
|
|
||||||
|
lmp_mpi -mdi \
|
||||||
|
"-name LMP -role DRIVER -method LINK -plugin_path /home/sjplimp/latte/git" \
|
||||||
|
-in in.aimd.plugin -log log.aimd.lammps.plugin
|
||||||
|
|
||||||
|
NOTE: The -plugin_path needs to point to where LATTE was built in step
|
||||||
|
(2).
|
||||||
|
|
||||||
|
---------
|
||||||
|
Run example #2: sequence of configurations
|
||||||
|
|
||||||
|
* Run with MPI: 1 proc each
|
||||||
|
|
||||||
|
mpirun -np 1 lmp_mpi -mdi "-name LMP -role DRIVER -method MPI" \
|
||||||
|
-in in.series -log log.series.lammps.mpi : \
|
||||||
|
-np 1 LATTE_DOUBLE -mdi "-name LATTE -role ENGINE -method MPI"
|
||||||
|
|
||||||
|
* Run with MPI: 2 procs for LAMMPS, 1 for LATTE
|
||||||
|
|
||||||
|
mpirun -np 2 lmp_mpi -mdi "-name LMP -role DRIVER -method MPI" \
|
||||||
|
-in in.series -log log.series.lammps.mpi : \
|
||||||
|
-np 1 LATTE_DOUBLE -mdi "-name LATTE -role ENGINE -method MPI"
|
||||||
|
|
||||||
|
* Run in plugin mode: 1 proc
|
||||||
|
|
||||||
|
lmp_mpi -mdi \
|
||||||
|
"-name LMP -role DRIVER -method LINK -plugin_path /home/sjplimp/latte/git" \
|
||||||
|
-in in.series.plugin -log log.series.lammps.plugin
|
||||||
|
|
||||||
|
NOTE: The -plugin_path needs to point to where LATTE was built in step
|
||||||
|
(2).
|
||||||
1384
examples/QM/LATTE/bondints.table
Normal file
1384
examples/QM/LATTE/bondints.table
Normal file
File diff suppressed because it is too large
Load Diff
315
examples/QM/LATTE/dump.8Sep22.aimd.mpi.1
Normal file
315
examples/QM/LATTE/dump.8Sep22.aimd.mpi.1
Normal file
@ -0,0 +1,315 @@
|
|||||||
|
ITEM: TIMESTEP
|
||||||
|
0
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.7 2.7 0 -0.601491 0.335597 -0.87242 -2.27066e-14 -1.33391e-14 2.31141e-14
|
||||||
|
2 2 1.35 4.05 1.35 8.2897 4.55901 5.97376 2.35473 2.21578e-14 7.40069e-15
|
||||||
|
3 2 4.05 4.05 1.35 1.7742 6.51885 0.385522 -2.35473 2.97071e-15 -2.01341e-14
|
||||||
|
4 1 2.7 1.65327e-16 2.7 -0.325605 -1.03244 0.724324 -2.90278e-14 6.77422e-15 2.86766e-15
|
||||||
|
5 2 1.35 1.35 4.05 2.42711 -1.49109 -2.41596 2.35473 5.79901e-15 -1.19594e-14
|
||||||
|
6 2 4.05 1.35 4.05 1.30688 0.784281 -1.73922 -2.35473 -1.38761e-14 1.09382e-14
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
1
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69985 2.70008 -0.000218105 -0.601467 0.335616 -0.872428 0.00470101 0.00380515 -0.00141625
|
||||||
|
2 2 1.35212 4.05114 1.35149 8.64389 4.55886 5.97363 2.34251 -0.00209926 -0.00172976
|
||||||
|
3 2 4.0504 4.05163 1.3501 1.41949 6.51866 0.385561 -2.34936 -0.00247497 0.00051716
|
||||||
|
4 1 2.69992 -0.00025811 2.70018 -0.325581 -1.03243 0.724334 0.00481137 0.00249244 0.00195665
|
||||||
|
5 2 1.35065 1.34963 4.0494 2.78199 -1.49112 -2.4159 2.3517 -0.00043711 0.000874754
|
||||||
|
6 2 4.05028 1.3502 4.04957 0.951796 0.784184 -1.73923 -2.35436 -0.00128625 -0.00020256
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
2
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.6997 2.70017 -0.000436214 -0.601396 0.335673 -0.872449 0.00939888 0.00756163 -0.00288164
|
||||||
|
2 2 1.35432 4.05228 1.35299 8.99615 4.55837 5.97323 2.32921 -0.00431846 -0.00355855
|
||||||
|
3 2 4.05071 4.05326 1.35019 1.06567 6.5181 0.385678 -2.34304 -0.00494314 0.00103532
|
||||||
|
4 1 2.69984 -0.000516214 2.70036 -0.325507 -1.03239 0.724364 0.00976944 0.00512657 0.00403686
|
||||||
|
5 2 1.35139 1.34925 4.04879 3.13634 -1.49122 -2.4157 2.34776 -0.000851489 0.00177498
|
||||||
|
6 2 4.05048 1.35039 4.04913 0.596838 0.783892 -1.73928 -2.3531 -0.00257512 -0.000406965
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
3
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69955 2.70025 -0.00065433 -0.601277 0.335769 -0.872486 0.0141006 0.0112702 -0.00439552
|
||||||
|
2 2 1.35661 4.05342 1.35448 9.34633 4.55754 5.97255 2.31482 -0.00666433 -0.00549143
|
||||||
|
3 2 4.05093 4.05489 1.35029 0.712875 6.51717 0.385873 -2.33577 -0.00740896 0.00154764
|
||||||
|
4 1 2.69976 -0.000774304 2.70054 -0.325382 -1.03232 0.724417 0.0148831 0.00790884 0.00624833
|
||||||
|
5 2 1.35222 1.34888 4.04819 3.49003 -1.49137 -2.41536 2.3429 -0.0012407 0.00270313
|
||||||
|
6 2 4.05058 1.35059 4.0487 0.242138 0.783407 -1.73935 -2.35094 -0.00386511 -0.000612161
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
4
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.6994 2.70034 -0.000872457 -0.60111 0.335902 -0.872539 0.0188131 0.0149318 -0.00595718
|
||||||
|
2 2 1.359 4.05456 1.35597 9.69425 4.55635 5.97156 2.29933 -0.00914346 -0.00753331
|
||||||
|
3 2 4.05107 4.05652 1.35039 0.361248 6.51586 0.386144 -2.32753 -0.00987687 0.00204727
|
||||||
|
4 1 2.69967 -0.00103238 2.70072 -0.325204 -1.03223 0.724492 0.020161 0.0108455 0.00859866
|
||||||
|
5 2 1.35314 1.34851 4.04758 3.84292 -1.49159 -2.41488 2.33711 -0.00160232 0.00366164
|
||||||
|
6 2 4.0506 1.35078 4.04826 -0.112168 0.782727 -1.73946 -2.34789 -0.00515472 -0.000817084
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
5
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69925 2.70042 -0.0010906 -0.600896 0.336071 -0.872607 0.0235434 0.0185473 -0.00756588
|
||||||
|
2 2 1.36146 4.0557 1.35747 10.0397 4.55478 5.97026 2.2827 -0.0117623 -0.00968894
|
||||||
|
3 2 4.05111 4.05815 1.35048 0.0109366 6.51419 0.386489 -2.31832 -0.0123511 0.00252727
|
||||||
|
4 1 2.69959 -0.00129042 2.70091 -0.324972 -1.0321 0.724592 0.0256115 0.0139425 0.0110953
|
||||||
|
5 2 1.35414 1.34814 4.04698 4.19487 -1.49186 -2.41425 2.33039 -0.00193394 0.0046529
|
||||||
|
6 2 4.05052 1.35098 4.04783 -0.465946 0.781852 -1.7396 -2.34393 -0.00644244 -0.00102066
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
6
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.6991 2.7005 -0.00130876 -0.600633 0.336277 -0.872692 0.0282985 0.0221175 -0.00922083
|
||||||
|
2 2 1.36401 4.05684 1.35896 10.3827 4.55279 5.96863 2.26494 -0.0145272 -0.0119629
|
||||||
|
3 2 4.05107 4.05978 1.35058 -0.337913 6.51214 0.386904 -2.30814 -0.0148362 0.00298071
|
||||||
|
4 1 2.69951 -0.00154843 2.70109 -0.324684 -1.03194 0.724717 0.0312427 0.0172058 0.0137455
|
||||||
|
5 2 1.35523 1.34776 4.04638 4.54573 -1.49217 -2.41347 2.32273 -0.00223319 0.00567932
|
||||||
|
6 2 4.05036 1.35117 4.04739 -0.819058 0.780784 -1.73977 -2.33906 -0.00772673 -0.00122181
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
7
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69895 2.70059 -0.00152695 -0.600322 0.336519 -0.872794 0.0330853 0.0256435 -0.0109212
|
||||||
|
2 2 1.36665 4.05797 1.36045 10.7228 4.55038 5.96665 2.24601 -0.0174443 -0.0143597
|
||||||
|
3 2 4.05094 4.0614 1.35068 -0.685154 6.50971 0.387385 -2.29698 -0.0173365 0.00340068
|
||||||
|
4 1 2.69943 -0.00180639 2.70127 -0.324338 -1.03175 0.724871 0.0370626 0.020641 0.0165564
|
||||||
|
5 2 1.35641 1.34739 4.04577 4.89536 -1.49253 -2.41254 2.31411 -0.0024977 0.00674323
|
||||||
|
6 2 4.05012 1.35137 4.04696 -1.17137 0.779522 -1.73997 -2.33329 -0.00900604 -0.00141944
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
8
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.6988 2.70067 -0.00174516 -0.599962 0.336797 -0.872914 0.0379108 0.0291262 -0.0126661
|
||||||
|
2 2 1.36938 4.05911 1.36194 11.06 4.54752 5.96429 2.2259 -0.0205196 -0.0168834
|
||||||
|
3 2 4.05073 4.06303 1.35077 -1.03064 6.50691 0.387927 -2.28482 -0.0198564 0.00378025
|
||||||
|
4 1 2.69935 -0.0020643 2.70145 -0.323932 -1.03153 0.725054 0.0430788 0.0242538 0.0195348
|
||||||
|
5 2 1.35768 1.34702 4.04517 5.24362 -1.49292 -2.41144 2.30452 -0.0027252 0.00784692
|
||||||
|
6 2 4.04978 1.35156 4.04652 -1.52274 0.778068 -1.7402 -2.32659 -0.0102788 -0.00161245
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
9
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69865 2.70076 -0.0019634 -0.599553 0.337109 -0.873051 0.0427817 0.0325667 -0.0144547
|
||||||
|
2 2 1.37218 4.06025 1.36343 11.3941 4.54418 5.96155 2.20459 -0.023759 -0.019538
|
||||||
|
3 2 4.05043 4.06466 1.35087 -1.37421 6.50372 0.388522 -2.27166 -0.0224003 0.00411244
|
||||||
|
4 1 2.69927 -0.00232215 2.70163 -0.323464 -1.03126 0.725268 0.0492987 0.0280495 0.0226874
|
||||||
|
5 2 1.35904 1.34664 4.04457 5.59036 -1.49335 -2.41017 2.29396 -0.00291347 0.00899259
|
||||||
|
6 2 4.04935 1.35176 4.04609 -1.87303 0.776422 -1.74045 -2.31898 -0.0115434 -0.00179972
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
10
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.6985 2.70084 -0.00218168 -0.599095 0.337456 -0.873207 0.0477049 0.0359661 -0.0162858
|
||||||
|
2 2 1.37507 4.06138 1.36492 11.7248 4.54034 5.95839 2.18206 -0.0271682 -0.0223275
|
||||||
|
3 2 4.05004 4.06628 1.35097 -1.71572 6.50015 0.389163 -2.25748 -0.0249726 0.0043903
|
||||||
|
4 1 2.69919 -0.00257993 2.70181 -0.322932 -1.03096 0.725515 0.0557294 0.0320331 0.0260207
|
||||||
|
5 2 1.36048 1.34627 4.04397 5.93543 -1.4938 -2.40872 2.2824 -0.00306026 0.0101825
|
||||||
|
6 2 4.04884 1.35195 4.04565 -2.2221 0.774587 -1.74074 -2.31042 -0.0127983 -0.00198013
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
11
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69835 2.70092 -0.00240001 -0.598586 0.337838 -0.873382 0.0526872 0.0393256 -0.0181586
|
||||||
|
2 2 1.37805 4.06252 1.36641 12.0521 4.53597 5.9548 2.15829 -0.0307526 -0.0252554
|
||||||
|
3 2 4.04957 4.06791 1.35106 -2.05501 6.49619 0.389841 -2.24228 -0.0275775 0.00460683
|
||||||
|
4 1 2.69911 -0.00283763 2.70199 -0.322334 -1.03061 0.725796 0.0623777 0.0362096 0.0295409
|
||||||
|
5 2 1.362 1.3459 4.04336 6.27868 -1.49427 -2.40709 2.26985 -0.00316333 0.0114188
|
||||||
|
6 2 4.04824 1.35215 4.04522 -2.56981 0.772563 -1.74105 -2.30093 -0.0140417 -0.00215255
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
12
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.6982 2.70101 -0.00261837 -0.598027 0.338253 -0.873575 0.0577351 0.0426463 -0.0200718
|
||||||
|
2 2 1.3811 4.06365 1.3679 12.3757 4.53105 5.95076 2.13326 -0.0345179 -0.0283253
|
||||||
|
3 2 4.04901 4.06953 1.35116 -2.39194 6.49183 0.390547 -2.22604 -0.0302194 0.00475506
|
||||||
|
4 1 2.69903 -0.00309524 2.70217 -0.321667 -1.03022 0.726114 0.06925 0.0405836 0.0332542
|
||||||
|
5 2 1.36362 1.34552 4.04276 6.61997 -1.49475 -2.40527 2.25627 -0.00322051 0.0127037
|
||||||
|
6 2 4.04756 1.35234 4.04478 -2.91602 0.770353 -1.74139 -2.29048 -0.0152721 -0.00231583
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
13
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69805 2.70109 -0.00283679 -0.597416 0.338702 -0.873788 0.0628554 0.0459295 -0.0220243
|
||||||
|
2 2 1.38423 4.06478 1.36939 12.6954 4.52555 5.94625 2.10694 -0.0384688 -0.0315401
|
||||||
|
3 2 4.04837 4.07115 1.35126 -2.72634 6.48707 0.39127 -2.20874 -0.0329024 0.00482793
|
||||||
|
4 1 2.69895 -0.00335274 2.70236 -0.320929 -1.02979 0.726471 0.0763523 0.0451591 0.0371659
|
||||||
|
5 2 1.36531 1.34515 4.04216 6.95912 -1.49523 -2.40326 2.24165 -0.00322965 0.0140393
|
||||||
|
6 2 4.04678 1.35253 4.04434 -3.26057 0.767958 -1.74175 -2.27906 -0.0164877 -0.0024688
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
14
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.6979 2.70118 -0.00305527 -0.596753 0.339184 -0.874022 0.0680546 0.0491768 -0.0240145
|
||||||
|
2 2 1.38745 4.06591 1.37087 13.0111 4.51944 5.94124 2.07932 -0.0426096 -0.0349018
|
||||||
|
3 2 4.04765 4.07277 1.35136 -3.05804 6.4819 0.391997 -2.19038 -0.035631 0.00481829
|
||||||
|
4 1 2.69887 -0.00361013 2.70254 -0.320118 -1.0293 0.726868 0.0836894 0.0499393 0.0412807
|
||||||
|
5 2 1.3671 1.34478 4.04156 7.296 -1.49572 -2.40103 2.22598 -0.00318867 0.0154277
|
||||||
|
6 2 4.04593 1.35272 4.04391 -3.60334 0.765381 -1.74213 -2.26667 -0.0176868 -0.00261028
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
15
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69775 2.70126 -0.0032738 -0.596036 0.339698 -0.874275 0.0733392 0.0523895 -0.0260413
|
||||||
|
2 2 1.39074 4.06704 1.37236 13.3225 4.51268 5.93571 2.05037 -0.0469451 -0.0384133
|
||||||
|
3 2 4.04685 4.07439 1.35146 -3.3869 6.47632 0.392716 -2.17093 -0.038409 0.00471919
|
||||||
|
4 1 2.69879 -0.00386739 2.70272 -0.319232 -1.02877 0.727309 0.0912666 0.0549279 0.0456036
|
||||||
|
5 2 1.36896 1.3444 4.04096 7.63043 -1.49619 -2.3986 2.20924 -0.00309551 0.0168709
|
||||||
|
6 2 4.04498 1.35291 4.04347 -3.94416 0.762625 -1.74253 -2.25329 -0.0188678 -0.0027391
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
16
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.6976 2.70135 -0.00349241 -0.595266 0.340245 -0.87455 0.0787153 0.055569 -0.0281032
|
||||||
|
2 2 1.39411 4.06817 1.37384 13.6294 4.50526 5.92964 2.02007 -0.0514799 -0.042077
|
||||||
|
3 2 4.04596 4.07601 1.35155 -3.71274 6.47031 0.393413 -2.15039 -0.0412405 0.00452364
|
||||||
|
4 1 2.69871 -0.00412452 2.7029 -0.318268 -1.02819 0.727794 0.0990893 0.0601283 0.0501398
|
||||||
|
5 2 1.37091 1.34403 4.04036 7.96225 -1.49665 -2.39594 2.19142 -0.00294819 0.0183708
|
||||||
|
6 2 4.04395 1.3531 4.04304 -4.28288 0.759692 -1.74296 -2.2389 -0.0200287 -0.00285406
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
17
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69745 2.70143 -0.00371108 -0.594441 0.340824 -0.874845 0.0841889 0.0587168 -0.0301987
|
||||||
|
2 2 1.39755 4.0693 1.37532 13.9317 4.49714 5.92301 1.9884 -0.0562187 -0.0458954
|
||||||
|
3 2 4.04499 4.07763 1.35165 -4.0354 6.46388 0.394073 -2.12872 -0.0441293 0.0042247
|
||||||
|
4 1 2.69863 -0.00438149 2.70308 -0.317223 -1.02755 0.728326 0.107162 0.0655439 0.054894
|
||||||
|
5 2 1.37294 1.34365 4.03976 8.2913 -1.49708 -2.39305 2.17248 -0.00274479 0.0199293
|
||||||
|
6 2 4.04284 1.35329 4.0426 -4.61936 0.756586 -1.74339 -2.2235 -0.0211679 -0.00295392
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
18
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69731 2.70152 -0.00392983 -0.593559 0.341435 -0.875162 0.0897661 0.0618346 -0.0323262
|
||||||
|
2 2 1.40107 4.07042 1.3768 14.229 4.48829 5.91578 1.95532 -0.0611659 -0.0498706
|
||||||
|
3 2 4.04394 4.07924 1.35175 -4.3547 6.457 0.394679 -2.10593 -0.0470792 0.0038154
|
||||||
|
4 1 2.69855 -0.00463829 2.70327 -0.316095 -1.02686 0.728907 0.11549 0.0711775 0.0598705
|
||||||
|
5 2 1.37506 1.34328 4.03916 8.61741 -1.49747 -2.38993 2.15241 -0.00248344 0.0215483
|
||||||
|
6 2 4.04164 1.35348 4.04217 -4.95344 0.753309 -1.74385 -2.20706 -0.0222835 -0.00303744
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
19
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69716 2.7016 -0.00414866 -0.592621 0.342077 -0.8755 0.0954526 0.0649239 -0.0344841
|
||||||
|
2 2 1.40467 4.07154 1.37828 14.5213 4.47868 5.90795 1.92083 -0.0663258 -0.0540045
|
||||||
|
3 2 4.04281 4.08086 1.35185 -4.67049 6.44967 0.395215 -2.08198 -0.050094 0.00328881
|
||||||
|
4 1 2.69847 -0.00489492 2.70345 -0.314881 -1.02611 0.72954 0.124076 0.0770317 0.0650736
|
||||||
|
5 2 1.37725 1.3429 4.03857 8.94041 -1.49782 -2.38655 2.13119 -0.00216234 0.0232295
|
||||||
|
6 2 4.04036 1.35367 4.04173 -5.28496 0.749867 -1.74431 -2.18956 -0.0233735 -0.00310338
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
20
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69701 2.70169 -0.00436758 -0.591624 0.342751 -0.875861 0.101254 0.0679866 -0.0366705
|
||||||
|
2 2 1.40833 4.07266 1.37976 14.8083 4.46827 5.89948 1.88489 -0.0717024 -0.0582989
|
||||||
|
3 2 4.0416 4.08247 1.35195 -4.98257 6.44189 0.395662 -2.05686 -0.0531772 0.00263798
|
||||||
|
4 1 2.69839 -0.00515135 2.70363 -0.313579 -1.0253 0.730227 0.132925 0.0831089 0.0705072
|
||||||
|
5 2 1.37953 1.34253 4.03797 9.26012 -1.49812 -2.38291 2.1088 -0.00177977 0.0249746
|
||||||
|
6 2 4.039 1.35386 4.04129 -5.61376 0.746262 -1.74478 -2.171 -0.0244362 -0.00315046
|
||||||
315
examples/QM/LATTE/dump.8Sep22.aimd.mpi.2
Normal file
315
examples/QM/LATTE/dump.8Sep22.aimd.mpi.2
Normal file
@ -0,0 +1,315 @@
|
|||||||
|
ITEM: TIMESTEP
|
||||||
|
0
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.7 2.7 0 -0.601491 0.335597 -0.87242 -2.27066e-14 -1.33391e-14 2.31141e-14
|
||||||
|
2 2 1.35 4.05 1.35 8.2897 4.55901 5.97376 2.35473 2.21578e-14 7.40069e-15
|
||||||
|
3 2 4.05 4.05 1.35 1.7742 6.51885 0.385522 -2.35473 2.97071e-15 -2.01341e-14
|
||||||
|
4 1 2.7 1.65327e-16 2.7 -0.325605 -1.03244 0.724324 -2.90278e-14 6.77422e-15 2.86766e-15
|
||||||
|
5 2 1.35 1.35 4.05 2.42711 -1.49109 -2.41596 2.35473 5.79901e-15 -1.19594e-14
|
||||||
|
6 2 4.05 1.35 4.05 1.30688 0.784281 -1.73922 -2.35473 -1.38761e-14 1.09382e-14
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
1
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69985 2.70008 -0.000218105 -0.601467 0.335616 -0.872428 0.00470101 0.00380515 -0.00141625
|
||||||
|
2 2 1.35212 4.05114 1.35149 8.64389 4.55886 5.97363 2.34251 -0.00209926 -0.00172976
|
||||||
|
3 2 4.0504 4.05163 1.3501 1.41949 6.51866 0.385561 -2.34936 -0.00247497 0.00051716
|
||||||
|
4 1 2.69992 -0.00025811 2.70018 -0.325581 -1.03243 0.724334 0.00481137 0.00249244 0.00195665
|
||||||
|
5 2 1.35065 1.34963 4.0494 2.78199 -1.49112 -2.4159 2.3517 -0.00043711 0.000874754
|
||||||
|
6 2 4.05028 1.3502 4.04957 0.951796 0.784184 -1.73923 -2.35436 -0.00128625 -0.00020256
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
2
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.6997 2.70017 -0.000436214 -0.601396 0.335673 -0.872449 0.00939888 0.00756163 -0.00288164
|
||||||
|
2 2 1.35432 4.05228 1.35299 8.99615 4.55837 5.97323 2.32921 -0.00431846 -0.00355855
|
||||||
|
3 2 4.05071 4.05326 1.35019 1.06567 6.5181 0.385678 -2.34304 -0.00494314 0.00103532
|
||||||
|
4 1 2.69984 -0.000516214 2.70036 -0.325507 -1.03239 0.724364 0.00976944 0.00512657 0.00403686
|
||||||
|
5 2 1.35139 1.34925 4.04879 3.13634 -1.49122 -2.4157 2.34776 -0.000851489 0.00177498
|
||||||
|
6 2 4.05048 1.35039 4.04913 0.596838 0.783892 -1.73928 -2.3531 -0.00257512 -0.000406965
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
3
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69955 2.70025 -0.00065433 -0.601277 0.335769 -0.872486 0.0141006 0.0112702 -0.00439552
|
||||||
|
2 2 1.35661 4.05342 1.35448 9.34633 4.55754 5.97255 2.31482 -0.00666433 -0.00549143
|
||||||
|
3 2 4.05093 4.05489 1.35029 0.712875 6.51717 0.385873 -2.33577 -0.00740896 0.00154764
|
||||||
|
4 1 2.69976 -0.000774304 2.70054 -0.325382 -1.03232 0.724417 0.0148831 0.00790884 0.00624833
|
||||||
|
5 2 1.35222 1.34888 4.04819 3.49003 -1.49137 -2.41536 2.3429 -0.0012407 0.00270313
|
||||||
|
6 2 4.05058 1.35059 4.0487 0.242138 0.783407 -1.73935 -2.35094 -0.00386511 -0.000612161
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
4
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.6994 2.70034 -0.000872457 -0.60111 0.335902 -0.872539 0.0188131 0.0149318 -0.00595718
|
||||||
|
2 2 1.359 4.05456 1.35597 9.69425 4.55635 5.97156 2.29933 -0.00914346 -0.00753331
|
||||||
|
3 2 4.05107 4.05652 1.35039 0.361248 6.51586 0.386144 -2.32753 -0.00987687 0.00204727
|
||||||
|
4 1 2.69967 -0.00103238 2.70072 -0.325204 -1.03223 0.724492 0.020161 0.0108455 0.00859866
|
||||||
|
5 2 1.35314 1.34851 4.04758 3.84292 -1.49159 -2.41488 2.33711 -0.00160232 0.00366164
|
||||||
|
6 2 4.0506 1.35078 4.04826 -0.112168 0.782727 -1.73946 -2.34789 -0.00515472 -0.000817084
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
5
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69925 2.70042 -0.0010906 -0.600896 0.336071 -0.872607 0.0235434 0.0185473 -0.00756588
|
||||||
|
2 2 1.36146 4.0557 1.35747 10.0397 4.55478 5.97026 2.2827 -0.0117623 -0.00968894
|
||||||
|
3 2 4.05111 4.05815 1.35048 0.0109366 6.51419 0.386489 -2.31832 -0.0123511 0.00252727
|
||||||
|
4 1 2.69959 -0.00129042 2.70091 -0.324972 -1.0321 0.724592 0.0256115 0.0139425 0.0110953
|
||||||
|
5 2 1.35414 1.34814 4.04698 4.19487 -1.49186 -2.41425 2.33039 -0.00193394 0.0046529
|
||||||
|
6 2 4.05052 1.35098 4.04783 -0.465946 0.781852 -1.7396 -2.34393 -0.00644244 -0.00102066
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
6
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.6991 2.7005 -0.00130876 -0.600633 0.336277 -0.872692 0.0282985 0.0221175 -0.00922083
|
||||||
|
2 2 1.36401 4.05684 1.35896 10.3827 4.55279 5.96863 2.26494 -0.0145272 -0.0119629
|
||||||
|
3 2 4.05107 4.05978 1.35058 -0.337913 6.51214 0.386904 -2.30814 -0.0148362 0.00298071
|
||||||
|
4 1 2.69951 -0.00154843 2.70109 -0.324684 -1.03194 0.724717 0.0312427 0.0172058 0.0137455
|
||||||
|
5 2 1.35523 1.34776 4.04638 4.54573 -1.49217 -2.41347 2.32273 -0.00223319 0.00567932
|
||||||
|
6 2 4.05036 1.35117 4.04739 -0.819058 0.780784 -1.73977 -2.33906 -0.00772673 -0.00122181
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
7
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69895 2.70059 -0.00152695 -0.600322 0.336519 -0.872794 0.0330853 0.0256435 -0.0109212
|
||||||
|
2 2 1.36665 4.05797 1.36045 10.7228 4.55038 5.96665 2.24601 -0.0174443 -0.0143597
|
||||||
|
3 2 4.05094 4.0614 1.35068 -0.685154 6.50971 0.387385 -2.29698 -0.0173365 0.00340068
|
||||||
|
4 1 2.69943 -0.00180639 2.70127 -0.324338 -1.03175 0.724871 0.0370626 0.020641 0.0165564
|
||||||
|
5 2 1.35641 1.34739 4.04577 4.89536 -1.49253 -2.41254 2.31411 -0.0024977 0.00674323
|
||||||
|
6 2 4.05012 1.35137 4.04696 -1.17137 0.779522 -1.73997 -2.33329 -0.00900604 -0.00141944
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
8
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.6988 2.70067 -0.00174516 -0.599962 0.336797 -0.872914 0.0379108 0.0291262 -0.0126661
|
||||||
|
2 2 1.36938 4.05911 1.36194 11.06 4.54752 5.96429 2.2259 -0.0205196 -0.0168834
|
||||||
|
3 2 4.05073 4.06303 1.35077 -1.03064 6.50691 0.387927 -2.28482 -0.0198564 0.00378025
|
||||||
|
4 1 2.69935 -0.0020643 2.70145 -0.323932 -1.03153 0.725054 0.0430788 0.0242538 0.0195348
|
||||||
|
5 2 1.35768 1.34702 4.04517 5.24362 -1.49292 -2.41144 2.30452 -0.0027252 0.00784692
|
||||||
|
6 2 4.04978 1.35156 4.04652 -1.52274 0.778068 -1.7402 -2.32659 -0.0102788 -0.00161245
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
9
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69865 2.70076 -0.0019634 -0.599553 0.337109 -0.873051 0.0427817 0.0325667 -0.0144547
|
||||||
|
2 2 1.37218 4.06025 1.36343 11.3941 4.54418 5.96155 2.20459 -0.023759 -0.019538
|
||||||
|
3 2 4.05043 4.06466 1.35087 -1.37421 6.50372 0.388522 -2.27166 -0.0224003 0.00411244
|
||||||
|
4 1 2.69927 -0.00232215 2.70163 -0.323464 -1.03126 0.725268 0.0492987 0.0280495 0.0226874
|
||||||
|
5 2 1.35904 1.34664 4.04457 5.59036 -1.49335 -2.41017 2.29396 -0.00291347 0.00899259
|
||||||
|
6 2 4.04935 1.35176 4.04609 -1.87303 0.776422 -1.74045 -2.31898 -0.0115434 -0.00179972
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
10
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.6985 2.70084 -0.00218168 -0.599095 0.337456 -0.873207 0.0477049 0.0359661 -0.0162858
|
||||||
|
2 2 1.37507 4.06138 1.36492 11.7248 4.54034 5.95839 2.18206 -0.0271682 -0.0223275
|
||||||
|
3 2 4.05004 4.06628 1.35097 -1.71572 6.50015 0.389163 -2.25748 -0.0249726 0.0043903
|
||||||
|
4 1 2.69919 -0.00257993 2.70181 -0.322932 -1.03096 0.725515 0.0557294 0.0320331 0.0260207
|
||||||
|
5 2 1.36048 1.34627 4.04397 5.93543 -1.4938 -2.40872 2.2824 -0.00306026 0.0101825
|
||||||
|
6 2 4.04884 1.35195 4.04565 -2.2221 0.774587 -1.74074 -2.31042 -0.0127983 -0.00198013
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
11
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69835 2.70092 -0.00240001 -0.598586 0.337838 -0.873382 0.0526872 0.0393256 -0.0181586
|
||||||
|
2 2 1.37805 4.06252 1.36641 12.0521 4.53597 5.9548 2.15829 -0.0307526 -0.0252554
|
||||||
|
3 2 4.04957 4.06791 1.35106 -2.05501 6.49619 0.389841 -2.24228 -0.0275775 0.00460683
|
||||||
|
4 1 2.69911 -0.00283763 2.70199 -0.322334 -1.03061 0.725796 0.0623777 0.0362096 0.0295409
|
||||||
|
5 2 1.362 1.3459 4.04336 6.27868 -1.49427 -2.40709 2.26985 -0.00316333 0.0114188
|
||||||
|
6 2 4.04824 1.35215 4.04522 -2.56981 0.772563 -1.74105 -2.30093 -0.0140417 -0.00215255
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
12
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.6982 2.70101 -0.00261837 -0.598027 0.338253 -0.873575 0.0577351 0.0426463 -0.0200718
|
||||||
|
2 2 1.3811 4.06365 1.3679 12.3757 4.53105 5.95076 2.13326 -0.0345179 -0.0283253
|
||||||
|
3 2 4.04901 4.06953 1.35116 -2.39194 6.49183 0.390547 -2.22604 -0.0302194 0.00475506
|
||||||
|
4 1 2.69903 -0.00309524 2.70217 -0.321667 -1.03022 0.726114 0.06925 0.0405836 0.0332542
|
||||||
|
5 2 1.36362 1.34552 4.04276 6.61997 -1.49475 -2.40527 2.25627 -0.00322051 0.0127037
|
||||||
|
6 2 4.04756 1.35234 4.04478 -2.91602 0.770353 -1.74139 -2.29048 -0.0152721 -0.00231583
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
13
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69805 2.70109 -0.00283679 -0.597416 0.338702 -0.873788 0.0628554 0.0459295 -0.0220243
|
||||||
|
2 2 1.38423 4.06478 1.36939 12.6954 4.52555 5.94625 2.10694 -0.0384688 -0.0315401
|
||||||
|
3 2 4.04837 4.07115 1.35126 -2.72634 6.48707 0.39127 -2.20874 -0.0329024 0.00482793
|
||||||
|
4 1 2.69895 -0.00335274 2.70236 -0.320929 -1.02979 0.726471 0.0763523 0.0451591 0.0371659
|
||||||
|
5 2 1.36531 1.34515 4.04216 6.95912 -1.49523 -2.40326 2.24165 -0.00322965 0.0140393
|
||||||
|
6 2 4.04678 1.35253 4.04434 -3.26057 0.767958 -1.74175 -2.27906 -0.0164877 -0.0024688
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
14
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.6979 2.70118 -0.00305527 -0.596753 0.339184 -0.874022 0.0680546 0.0491768 -0.0240145
|
||||||
|
2 2 1.38745 4.06591 1.37087 13.0111 4.51944 5.94124 2.07932 -0.0426096 -0.0349018
|
||||||
|
3 2 4.04765 4.07277 1.35136 -3.05804 6.4819 0.391997 -2.19038 -0.035631 0.00481829
|
||||||
|
4 1 2.69887 -0.00361013 2.70254 -0.320118 -1.0293 0.726868 0.0836894 0.0499393 0.0412807
|
||||||
|
5 2 1.3671 1.34478 4.04156 7.296 -1.49572 -2.40103 2.22598 -0.00318867 0.0154277
|
||||||
|
6 2 4.04593 1.35272 4.04391 -3.60334 0.765381 -1.74213 -2.26667 -0.0176868 -0.00261028
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
15
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69775 2.70126 -0.0032738 -0.596036 0.339698 -0.874275 0.0733392 0.0523895 -0.0260413
|
||||||
|
2 2 1.39074 4.06704 1.37236 13.3225 4.51268 5.93571 2.05037 -0.0469451 -0.0384133
|
||||||
|
3 2 4.04685 4.07439 1.35146 -3.3869 6.47632 0.392716 -2.17093 -0.038409 0.00471919
|
||||||
|
4 1 2.69879 -0.00386739 2.70272 -0.319232 -1.02877 0.727309 0.0912666 0.0549279 0.0456036
|
||||||
|
5 2 1.36896 1.3444 4.04096 7.63043 -1.49619 -2.3986 2.20924 -0.00309551 0.0168709
|
||||||
|
6 2 4.04498 1.35291 4.04347 -3.94416 0.762625 -1.74253 -2.25329 -0.0188678 -0.0027391
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
16
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.6976 2.70135 -0.00349241 -0.595266 0.340245 -0.87455 0.0787153 0.055569 -0.0281032
|
||||||
|
2 2 1.39411 4.06817 1.37384 13.6294 4.50526 5.92964 2.02007 -0.0514799 -0.042077
|
||||||
|
3 2 4.04596 4.07601 1.35155 -3.71274 6.47031 0.393413 -2.15039 -0.0412405 0.00452364
|
||||||
|
4 1 2.69871 -0.00412452 2.7029 -0.318268 -1.02819 0.727794 0.0990893 0.0601283 0.0501398
|
||||||
|
5 2 1.37091 1.34403 4.04036 7.96225 -1.49665 -2.39594 2.19142 -0.00294819 0.0183708
|
||||||
|
6 2 4.04395 1.3531 4.04304 -4.28288 0.759692 -1.74296 -2.2389 -0.0200287 -0.00285406
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
17
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69745 2.70143 -0.00371108 -0.594441 0.340824 -0.874845 0.0841889 0.0587168 -0.0301987
|
||||||
|
2 2 1.39755 4.0693 1.37532 13.9317 4.49714 5.92301 1.9884 -0.0562187 -0.0458954
|
||||||
|
3 2 4.04499 4.07763 1.35165 -4.0354 6.46388 0.394073 -2.12872 -0.0441293 0.0042247
|
||||||
|
4 1 2.69863 -0.00438149 2.70308 -0.317223 -1.02755 0.728326 0.107162 0.0655439 0.054894
|
||||||
|
5 2 1.37294 1.34365 4.03976 8.2913 -1.49708 -2.39305 2.17248 -0.00274479 0.0199293
|
||||||
|
6 2 4.04284 1.35329 4.0426 -4.61936 0.756586 -1.74339 -2.2235 -0.0211679 -0.00295392
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
18
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69731 2.70152 -0.00392983 -0.593559 0.341435 -0.875162 0.0897661 0.0618346 -0.0323262
|
||||||
|
2 2 1.40107 4.07042 1.3768 14.229 4.48829 5.91578 1.95532 -0.0611659 -0.0498706
|
||||||
|
3 2 4.04394 4.07924 1.35175 -4.3547 6.457 0.394679 -2.10593 -0.0470792 0.0038154
|
||||||
|
4 1 2.69855 -0.00463829 2.70327 -0.316095 -1.02686 0.728907 0.11549 0.0711775 0.0598705
|
||||||
|
5 2 1.37506 1.34328 4.03916 8.61741 -1.49747 -2.38993 2.15241 -0.00248344 0.0215483
|
||||||
|
6 2 4.04164 1.35348 4.04217 -4.95344 0.753309 -1.74385 -2.20706 -0.0222835 -0.00303744
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
19
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69716 2.7016 -0.00414866 -0.592621 0.342077 -0.8755 0.0954526 0.0649239 -0.0344841
|
||||||
|
2 2 1.40467 4.07154 1.37828 14.5213 4.47868 5.90795 1.92083 -0.0663258 -0.0540045
|
||||||
|
3 2 4.04281 4.08086 1.35185 -4.67049 6.44967 0.395215 -2.08198 -0.050094 0.00328881
|
||||||
|
4 1 2.69847 -0.00489492 2.70345 -0.314881 -1.02611 0.72954 0.124076 0.0770317 0.0650736
|
||||||
|
5 2 1.37725 1.3429 4.03857 8.94041 -1.49782 -2.38655 2.13119 -0.00216234 0.0232295
|
||||||
|
6 2 4.04036 1.35367 4.04173 -5.28496 0.749867 -1.74431 -2.18956 -0.0233735 -0.00310338
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
20
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69701 2.70169 -0.00436758 -0.591624 0.342751 -0.875861 0.101254 0.0679866 -0.0366705
|
||||||
|
2 2 1.40833 4.07266 1.37976 14.8083 4.46827 5.89948 1.88489 -0.0717024 -0.0582989
|
||||||
|
3 2 4.0416 4.08247 1.35195 -4.98257 6.44189 0.395662 -2.05686 -0.0531772 0.00263798
|
||||||
|
4 1 2.69839 -0.00515135 2.70363 -0.313579 -1.0253 0.730227 0.132925 0.0831089 0.0705072
|
||||||
|
5 2 1.37953 1.34253 4.03797 9.26012 -1.49812 -2.38291 2.1088 -0.00177977 0.0249746
|
||||||
|
6 2 4.039 1.35386 4.04129 -5.61376 0.746262 -1.74478 -2.171 -0.0244362 -0.00315046
|
||||||
315
examples/QM/LATTE/dump.8Sep22.aimd.plugin
Normal file
315
examples/QM/LATTE/dump.8Sep22.aimd.plugin
Normal file
@ -0,0 +1,315 @@
|
|||||||
|
ITEM: TIMESTEP
|
||||||
|
0
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.7 2.7 0 -0.601491 0.335597 -0.87242 -2.27066e-14 -1.33391e-14 2.31141e-14
|
||||||
|
2 2 1.35 4.05 1.35 8.2897 4.55901 5.97376 2.35473 2.21578e-14 7.40069e-15
|
||||||
|
3 2 4.05 4.05 1.35 1.7742 6.51885 0.385522 -2.35473 2.97071e-15 -2.01341e-14
|
||||||
|
4 1 2.7 1.65327e-16 2.7 -0.325605 -1.03244 0.724324 -2.90278e-14 6.77422e-15 2.86766e-15
|
||||||
|
5 2 1.35 1.35 4.05 2.42711 -1.49109 -2.41596 2.35473 5.79901e-15 -1.19594e-14
|
||||||
|
6 2 4.05 1.35 4.05 1.30688 0.784281 -1.73922 -2.35473 -1.38761e-14 1.09382e-14
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
1
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69985 2.70008 -0.000218105 -0.601467 0.335616 -0.872428 0.00470101 0.00380515 -0.00141625
|
||||||
|
2 2 1.35212 4.05114 1.35149 8.64389 4.55886 5.97363 2.34251 -0.00209926 -0.00172976
|
||||||
|
3 2 4.0504 4.05163 1.3501 1.41949 6.51866 0.385561 -2.34936 -0.00247497 0.00051716
|
||||||
|
4 1 2.69992 -0.00025811 2.70018 -0.325581 -1.03243 0.724334 0.00481137 0.00249244 0.00195665
|
||||||
|
5 2 1.35065 1.34963 4.0494 2.78199 -1.49112 -2.4159 2.3517 -0.00043711 0.000874754
|
||||||
|
6 2 4.05028 1.3502 4.04957 0.951796 0.784184 -1.73923 -2.35436 -0.00128625 -0.00020256
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
2
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.6997 2.70017 -0.000436214 -0.601396 0.335673 -0.872449 0.00939888 0.00756163 -0.00288164
|
||||||
|
2 2 1.35432 4.05228 1.35299 8.99615 4.55837 5.97323 2.32921 -0.00431846 -0.00355855
|
||||||
|
3 2 4.05071 4.05326 1.35019 1.06567 6.5181 0.385678 -2.34304 -0.00494314 0.00103532
|
||||||
|
4 1 2.69984 -0.000516214 2.70036 -0.325507 -1.03239 0.724364 0.00976944 0.00512657 0.00403686
|
||||||
|
5 2 1.35139 1.34925 4.04879 3.13634 -1.49122 -2.4157 2.34776 -0.000851489 0.00177498
|
||||||
|
6 2 4.05048 1.35039 4.04913 0.596838 0.783892 -1.73928 -2.3531 -0.00257512 -0.000406965
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
3
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69955 2.70025 -0.00065433 -0.601277 0.335769 -0.872486 0.0141006 0.0112702 -0.00439552
|
||||||
|
2 2 1.35661 4.05342 1.35448 9.34633 4.55754 5.97255 2.31482 -0.00666433 -0.00549143
|
||||||
|
3 2 4.05093 4.05489 1.35029 0.712875 6.51717 0.385873 -2.33577 -0.00740896 0.00154764
|
||||||
|
4 1 2.69976 -0.000774304 2.70054 -0.325382 -1.03232 0.724417 0.0148831 0.00790884 0.00624833
|
||||||
|
5 2 1.35222 1.34888 4.04819 3.49003 -1.49137 -2.41536 2.3429 -0.0012407 0.00270313
|
||||||
|
6 2 4.05058 1.35059 4.0487 0.242138 0.783407 -1.73935 -2.35094 -0.00386511 -0.000612161
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
4
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.6994 2.70034 -0.000872457 -0.60111 0.335902 -0.872539 0.0188131 0.0149318 -0.00595718
|
||||||
|
2 2 1.359 4.05456 1.35597 9.69425 4.55635 5.97156 2.29933 -0.00914346 -0.00753331
|
||||||
|
3 2 4.05107 4.05652 1.35039 0.361248 6.51586 0.386144 -2.32753 -0.00987687 0.00204727
|
||||||
|
4 1 2.69967 -0.00103238 2.70072 -0.325204 -1.03223 0.724492 0.020161 0.0108455 0.00859866
|
||||||
|
5 2 1.35314 1.34851 4.04758 3.84292 -1.49159 -2.41488 2.33711 -0.00160232 0.00366164
|
||||||
|
6 2 4.0506 1.35078 4.04826 -0.112168 0.782727 -1.73946 -2.34789 -0.00515472 -0.000817084
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
5
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69925 2.70042 -0.0010906 -0.600896 0.336071 -0.872607 0.0235434 0.0185473 -0.00756588
|
||||||
|
2 2 1.36146 4.0557 1.35747 10.0397 4.55478 5.97026 2.2827 -0.0117623 -0.00968894
|
||||||
|
3 2 4.05111 4.05815 1.35048 0.0109366 6.51419 0.386489 -2.31832 -0.0123511 0.00252727
|
||||||
|
4 1 2.69959 -0.00129042 2.70091 -0.324972 -1.0321 0.724592 0.0256115 0.0139425 0.0110953
|
||||||
|
5 2 1.35414 1.34814 4.04698 4.19487 -1.49186 -2.41425 2.33039 -0.00193394 0.0046529
|
||||||
|
6 2 4.05052 1.35098 4.04783 -0.465946 0.781852 -1.7396 -2.34393 -0.00644244 -0.00102066
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
6
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.6991 2.7005 -0.00130876 -0.600633 0.336277 -0.872692 0.0282985 0.0221175 -0.00922083
|
||||||
|
2 2 1.36401 4.05684 1.35896 10.3827 4.55279 5.96863 2.26494 -0.0145272 -0.0119629
|
||||||
|
3 2 4.05107 4.05978 1.35058 -0.337913 6.51214 0.386904 -2.30814 -0.0148362 0.00298071
|
||||||
|
4 1 2.69951 -0.00154843 2.70109 -0.324684 -1.03194 0.724717 0.0312427 0.0172058 0.0137455
|
||||||
|
5 2 1.35523 1.34776 4.04638 4.54573 -1.49217 -2.41347 2.32273 -0.00223319 0.00567932
|
||||||
|
6 2 4.05036 1.35117 4.04739 -0.819058 0.780784 -1.73977 -2.33906 -0.00772673 -0.00122181
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
7
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69895 2.70059 -0.00152695 -0.600322 0.336519 -0.872794 0.0330853 0.0256435 -0.0109212
|
||||||
|
2 2 1.36665 4.05797 1.36045 10.7228 4.55038 5.96665 2.24601 -0.0174443 -0.0143597
|
||||||
|
3 2 4.05094 4.0614 1.35068 -0.685154 6.50971 0.387385 -2.29698 -0.0173365 0.00340068
|
||||||
|
4 1 2.69943 -0.00180639 2.70127 -0.324338 -1.03175 0.724871 0.0370626 0.020641 0.0165564
|
||||||
|
5 2 1.35641 1.34739 4.04577 4.89536 -1.49253 -2.41254 2.31411 -0.0024977 0.00674323
|
||||||
|
6 2 4.05012 1.35137 4.04696 -1.17137 0.779522 -1.73997 -2.33329 -0.00900604 -0.00141944
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
8
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.6988 2.70067 -0.00174516 -0.599962 0.336797 -0.872914 0.0379108 0.0291262 -0.0126661
|
||||||
|
2 2 1.36938 4.05911 1.36194 11.06 4.54752 5.96429 2.2259 -0.0205196 -0.0168834
|
||||||
|
3 2 4.05073 4.06303 1.35077 -1.03064 6.50691 0.387927 -2.28482 -0.0198564 0.00378025
|
||||||
|
4 1 2.69935 -0.0020643 2.70145 -0.323932 -1.03153 0.725054 0.0430788 0.0242538 0.0195348
|
||||||
|
5 2 1.35768 1.34702 4.04517 5.24362 -1.49292 -2.41144 2.30452 -0.0027252 0.00784692
|
||||||
|
6 2 4.04978 1.35156 4.04652 -1.52274 0.778068 -1.7402 -2.32659 -0.0102788 -0.00161245
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
9
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69865 2.70076 -0.0019634 -0.599553 0.337109 -0.873051 0.0427817 0.0325667 -0.0144547
|
||||||
|
2 2 1.37218 4.06025 1.36343 11.3941 4.54418 5.96155 2.20459 -0.023759 -0.019538
|
||||||
|
3 2 4.05043 4.06466 1.35087 -1.37421 6.50372 0.388522 -2.27166 -0.0224003 0.00411244
|
||||||
|
4 1 2.69927 -0.00232215 2.70163 -0.323464 -1.03126 0.725268 0.0492987 0.0280495 0.0226874
|
||||||
|
5 2 1.35904 1.34664 4.04457 5.59036 -1.49335 -2.41017 2.29396 -0.00291347 0.00899259
|
||||||
|
6 2 4.04935 1.35176 4.04609 -1.87303 0.776422 -1.74045 -2.31898 -0.0115434 -0.00179972
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
10
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.6985 2.70084 -0.00218168 -0.599095 0.337456 -0.873207 0.0477049 0.0359661 -0.0162858
|
||||||
|
2 2 1.37507 4.06138 1.36492 11.7248 4.54034 5.95839 2.18206 -0.0271682 -0.0223275
|
||||||
|
3 2 4.05004 4.06628 1.35097 -1.71572 6.50015 0.389163 -2.25748 -0.0249726 0.0043903
|
||||||
|
4 1 2.69919 -0.00257993 2.70181 -0.322932 -1.03096 0.725515 0.0557294 0.0320331 0.0260207
|
||||||
|
5 2 1.36048 1.34627 4.04397 5.93543 -1.4938 -2.40872 2.2824 -0.00306026 0.0101825
|
||||||
|
6 2 4.04884 1.35195 4.04565 -2.2221 0.774587 -1.74074 -2.31042 -0.0127983 -0.00198013
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
11
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69835 2.70092 -0.00240001 -0.598586 0.337838 -0.873382 0.0526872 0.0393256 -0.0181586
|
||||||
|
2 2 1.37805 4.06252 1.36641 12.0521 4.53597 5.9548 2.15829 -0.0307526 -0.0252554
|
||||||
|
3 2 4.04957 4.06791 1.35106 -2.05501 6.49619 0.389841 -2.24228 -0.0275775 0.00460683
|
||||||
|
4 1 2.69911 -0.00283763 2.70199 -0.322334 -1.03061 0.725796 0.0623777 0.0362096 0.0295409
|
||||||
|
5 2 1.362 1.3459 4.04336 6.27868 -1.49427 -2.40709 2.26985 -0.00316333 0.0114188
|
||||||
|
6 2 4.04824 1.35215 4.04522 -2.56981 0.772563 -1.74105 -2.30093 -0.0140417 -0.00215255
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
12
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.6982 2.70101 -0.00261837 -0.598027 0.338253 -0.873575 0.0577351 0.0426463 -0.0200718
|
||||||
|
2 2 1.3811 4.06365 1.3679 12.3757 4.53105 5.95076 2.13326 -0.0345179 -0.0283253
|
||||||
|
3 2 4.04901 4.06953 1.35116 -2.39194 6.49183 0.390547 -2.22604 -0.0302194 0.00475506
|
||||||
|
4 1 2.69903 -0.00309524 2.70217 -0.321667 -1.03022 0.726114 0.06925 0.0405836 0.0332542
|
||||||
|
5 2 1.36362 1.34552 4.04276 6.61997 -1.49475 -2.40527 2.25627 -0.00322051 0.0127037
|
||||||
|
6 2 4.04756 1.35234 4.04478 -2.91602 0.770353 -1.74139 -2.29048 -0.0152721 -0.00231583
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
13
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69805 2.70109 -0.00283679 -0.597416 0.338702 -0.873788 0.0628554 0.0459295 -0.0220243
|
||||||
|
2 2 1.38423 4.06478 1.36939 12.6954 4.52555 5.94625 2.10694 -0.0384688 -0.0315401
|
||||||
|
3 2 4.04837 4.07115 1.35126 -2.72634 6.48707 0.39127 -2.20874 -0.0329024 0.00482793
|
||||||
|
4 1 2.69895 -0.00335274 2.70236 -0.320929 -1.02979 0.726471 0.0763523 0.0451591 0.0371659
|
||||||
|
5 2 1.36531 1.34515 4.04216 6.95912 -1.49523 -2.40326 2.24165 -0.00322965 0.0140393
|
||||||
|
6 2 4.04678 1.35253 4.04434 -3.26057 0.767958 -1.74175 -2.27906 -0.0164877 -0.0024688
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
14
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.6979 2.70118 -0.00305527 -0.596753 0.339184 -0.874022 0.0680546 0.0491768 -0.0240145
|
||||||
|
2 2 1.38745 4.06591 1.37087 13.0111 4.51944 5.94124 2.07932 -0.0426096 -0.0349018
|
||||||
|
3 2 4.04765 4.07277 1.35136 -3.05804 6.4819 0.391997 -2.19038 -0.035631 0.00481829
|
||||||
|
4 1 2.69887 -0.00361013 2.70254 -0.320118 -1.0293 0.726868 0.0836894 0.0499393 0.0412807
|
||||||
|
5 2 1.3671 1.34478 4.04156 7.296 -1.49572 -2.40103 2.22598 -0.00318867 0.0154277
|
||||||
|
6 2 4.04593 1.35272 4.04391 -3.60334 0.765381 -1.74213 -2.26667 -0.0176868 -0.00261028
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
15
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69775 2.70126 -0.0032738 -0.596036 0.339698 -0.874275 0.0733392 0.0523895 -0.0260413
|
||||||
|
2 2 1.39074 4.06704 1.37236 13.3225 4.51268 5.93571 2.05037 -0.0469451 -0.0384133
|
||||||
|
3 2 4.04685 4.07439 1.35146 -3.3869 6.47632 0.392716 -2.17093 -0.038409 0.00471919
|
||||||
|
4 1 2.69879 -0.00386739 2.70272 -0.319232 -1.02877 0.727309 0.0912666 0.0549279 0.0456036
|
||||||
|
5 2 1.36896 1.3444 4.04096 7.63043 -1.49619 -2.3986 2.20924 -0.00309551 0.0168709
|
||||||
|
6 2 4.04498 1.35291 4.04347 -3.94416 0.762625 -1.74253 -2.25329 -0.0188678 -0.0027391
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
16
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.6976 2.70135 -0.00349241 -0.595266 0.340245 -0.87455 0.0787153 0.055569 -0.0281032
|
||||||
|
2 2 1.39411 4.06817 1.37384 13.6294 4.50526 5.92964 2.02007 -0.0514799 -0.042077
|
||||||
|
3 2 4.04596 4.07601 1.35155 -3.71274 6.47031 0.393413 -2.15039 -0.0412405 0.00452364
|
||||||
|
4 1 2.69871 -0.00412452 2.7029 -0.318268 -1.02819 0.727794 0.0990893 0.0601283 0.0501398
|
||||||
|
5 2 1.37091 1.34403 4.04036 7.96225 -1.49665 -2.39594 2.19142 -0.00294819 0.0183708
|
||||||
|
6 2 4.04395 1.3531 4.04304 -4.28288 0.759692 -1.74296 -2.2389 -0.0200287 -0.00285406
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
17
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69745 2.70143 -0.00371108 -0.594441 0.340824 -0.874845 0.0841889 0.0587168 -0.0301987
|
||||||
|
2 2 1.39755 4.0693 1.37532 13.9317 4.49714 5.92301 1.9884 -0.0562187 -0.0458954
|
||||||
|
3 2 4.04499 4.07763 1.35165 -4.0354 6.46388 0.394073 -2.12872 -0.0441293 0.0042247
|
||||||
|
4 1 2.69863 -0.00438149 2.70308 -0.317223 -1.02755 0.728326 0.107162 0.0655439 0.054894
|
||||||
|
5 2 1.37294 1.34365 4.03976 8.2913 -1.49708 -2.39305 2.17248 -0.00274479 0.0199293
|
||||||
|
6 2 4.04284 1.35329 4.0426 -4.61936 0.756586 -1.74339 -2.2235 -0.0211679 -0.00295392
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
18
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69731 2.70152 -0.00392983 -0.593559 0.341435 -0.875162 0.0897661 0.0618346 -0.0323262
|
||||||
|
2 2 1.40107 4.07042 1.3768 14.229 4.48829 5.91578 1.95532 -0.0611659 -0.0498706
|
||||||
|
3 2 4.04394 4.07924 1.35175 -4.3547 6.457 0.394679 -2.10593 -0.0470792 0.0038154
|
||||||
|
4 1 2.69855 -0.00463829 2.70327 -0.316095 -1.02686 0.728907 0.11549 0.0711775 0.0598705
|
||||||
|
5 2 1.37506 1.34328 4.03916 8.61741 -1.49747 -2.38993 2.15241 -0.00248344 0.0215483
|
||||||
|
6 2 4.04164 1.35348 4.04217 -4.95344 0.753309 -1.74385 -2.20706 -0.0222835 -0.00303744
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
19
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69716 2.7016 -0.00414866 -0.592621 0.342077 -0.8755 0.0954526 0.0649239 -0.0344841
|
||||||
|
2 2 1.40467 4.07154 1.37828 14.5213 4.47868 5.90795 1.92083 -0.0663258 -0.0540045
|
||||||
|
3 2 4.04281 4.08086 1.35185 -4.67049 6.44967 0.395215 -2.08198 -0.050094 0.00328881
|
||||||
|
4 1 2.69847 -0.00489492 2.70345 -0.314881 -1.02611 0.72954 0.124076 0.0770317 0.0650736
|
||||||
|
5 2 1.37725 1.3429 4.03857 8.94041 -1.49782 -2.38655 2.13119 -0.00216234 0.0232295
|
||||||
|
6 2 4.04036 1.35367 4.04173 -5.28496 0.749867 -1.74431 -2.18956 -0.0233735 -0.00310338
|
||||||
|
ITEM: TIMESTEP
|
||||||
|
20
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z vx vy vz fx fy fz
|
||||||
|
1 1 2.69701 2.70169 -0.00436758 -0.591624 0.342751 -0.875861 0.101254 0.0679866 -0.0366705
|
||||||
|
2 2 1.40833 4.07266 1.37976 14.8083 4.46827 5.89948 1.88489 -0.0717024 -0.0582989
|
||||||
|
3 2 4.0416 4.08247 1.35195 -4.98257 6.44189 0.395662 -2.05686 -0.0531772 0.00263798
|
||||||
|
4 1 2.69839 -0.00515135 2.70363 -0.313579 -1.0253 0.730227 0.132925 0.0831089 0.0705072
|
||||||
|
5 2 1.37953 1.34253 4.03797 9.26012 -1.49812 -2.38291 2.1088 -0.00177977 0.0249746
|
||||||
|
6 2 4.039 1.35386 4.04129 -5.61376 0.746262 -1.74478 -2.171 -0.0244362 -0.00315046
|
||||||
15
examples/QM/LATTE/dump.8Sep22.series.mpi.1.2uo2
Normal file
15
examples/QM/LATTE/dump.8Sep22.series.mpi.1.2uo2
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
ITEM: TIMESTEP
|
||||||
|
0
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z fx fy fz
|
||||||
|
1 1 2.7 2.7 0 -2.27066e-14 -1.33391e-14 2.31141e-14
|
||||||
|
2 2 1.35 4.05 1.35 2.35473 2.21578e-14 7.40069e-15
|
||||||
|
3 2 4.05 4.05 1.35 -2.35473 2.97071e-15 -2.01341e-14
|
||||||
|
4 1 2.7 1.65327e-16 2.7 -2.90278e-14 6.77422e-15 2.86766e-15
|
||||||
|
5 2 1.35 1.35 4.05 2.35473 5.79901e-15 -1.19594e-14
|
||||||
|
6 2 4.05 1.35 4.05 -2.35473 -1.38761e-14 1.09382e-14
|
||||||
18
examples/QM/LATTE/dump.8Sep22.series.mpi.1.3uo2
Normal file
18
examples/QM/LATTE/dump.8Sep22.series.mpi.1.3uo2
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
ITEM: TIMESTEP
|
||||||
|
0
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
9
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.6199999999999999e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z fx fy fz
|
||||||
|
1 1 2.7 2.7 0 -1.27436e-13 0.760572 0.760572
|
||||||
|
2 2 1.35 4.05 1.35 0.682428 -0.329901 -0.329901
|
||||||
|
3 2 4.05 4.05 1.35 -0.682428 -0.329901 -0.329901
|
||||||
|
4 1 2.7 1.65327e-16 2.7 -8.06311e-14 -1.57101 -1.57101
|
||||||
|
5 2 1.35 1.35 4.05 2.79365 0.684734 0.684734
|
||||||
|
6 2 4.05 1.35 4.05 -2.79365 0.684734 0.684734
|
||||||
|
7 1 2.7 2.7 0 -1.30843e-13 0.760572 0.760572
|
||||||
|
8 2 1.35 4.05 1.35 0.682428 -0.329901 -0.329901
|
||||||
|
9 2 4.05 4.05 1.35 -0.682428 -0.329901 -0.329901
|
||||||
21
examples/QM/LATTE/dump.8Sep22.series.mpi.1.4uo2
Normal file
21
examples/QM/LATTE/dump.8Sep22.series.mpi.1.4uo2
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
ITEM: TIMESTEP
|
||||||
|
0
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
12
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 6.6130927153957075e-16
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z fx fy fz
|
||||||
|
1 1 2.7 8.1 0 -0.433947 2.16479 1.55466
|
||||||
|
2 2 1.35 9.45 1.35 1.64718 -0.119006 0.375837
|
||||||
|
3 2 4.05 9.45 1.35 0.999862 -1.02573 0.037629
|
||||||
|
4 1 5.4 8.1 2.7 0.433947 2.16479 1.55466
|
||||||
|
5 2 4.05 9.45 4.05 -0.999862 -1.02573 0.037629
|
||||||
|
6 2 6.75 9.45 4.05 -1.64718 -0.119006 0.375837
|
||||||
|
7 1 2.7 1.65327e-16 2.7 -0.211437 1.63064 -0.0728897
|
||||||
|
8 2 1.35 1.35 4.05 0.461807 -1.3955 -1.94959
|
||||||
|
9 2 4.05 1.35 4.05 0.708573 -1.2552 0.0543549
|
||||||
|
10 1 5.4 0 0 0.211437 1.63064 -0.0728897
|
||||||
|
11 2 4.05 1.35 1.35 -0.708573 -1.2552 0.0543549
|
||||||
|
12 2 6.75 1.35 1.35 -0.461807 -1.3955 -1.94959
|
||||||
15
examples/QM/LATTE/dump.8Sep22.series.mpi.2.2uo2
Normal file
15
examples/QM/LATTE/dump.8Sep22.series.mpi.2.2uo2
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
ITEM: TIMESTEP
|
||||||
|
0
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z fx fy fz
|
||||||
|
1 1 2.7 2.7 0 -2.27066e-14 -1.33391e-14 2.31141e-14
|
||||||
|
2 2 1.35 4.05 1.35 2.35473 2.21578e-14 7.40069e-15
|
||||||
|
3 2 4.05 4.05 1.35 -2.35473 2.97071e-15 -2.01341e-14
|
||||||
|
4 1 2.7 1.65327e-16 2.7 -2.90278e-14 6.77422e-15 2.86766e-15
|
||||||
|
5 2 1.35 1.35 4.05 2.35473 5.79901e-15 -1.19594e-14
|
||||||
|
6 2 4.05 1.35 4.05 -2.35473 -1.38761e-14 1.09382e-14
|
||||||
18
examples/QM/LATTE/dump.8Sep22.series.mpi.2.3uo2
Normal file
18
examples/QM/LATTE/dump.8Sep22.series.mpi.2.3uo2
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
ITEM: TIMESTEP
|
||||||
|
0
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
9
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.6199999999999999e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z fx fy fz
|
||||||
|
1 1 2.7 2.7 0 -1.27436e-13 0.760572 0.760572
|
||||||
|
2 2 1.35 4.05 1.35 0.682428 -0.329901 -0.329901
|
||||||
|
3 2 4.05 4.05 1.35 -0.682428 -0.329901 -0.329901
|
||||||
|
4 1 2.7 1.65327e-16 2.7 -8.06311e-14 -1.57101 -1.57101
|
||||||
|
5 2 1.35 1.35 4.05 2.79365 0.684734 0.684734
|
||||||
|
6 2 4.05 1.35 4.05 -2.79365 0.684734 0.684734
|
||||||
|
7 1 2.7 2.7 0 -1.30843e-13 0.760572 0.760572
|
||||||
|
8 2 1.35 4.05 1.35 0.682428 -0.329901 -0.329901
|
||||||
|
9 2 4.05 4.05 1.35 -0.682428 -0.329901 -0.329901
|
||||||
21
examples/QM/LATTE/dump.8Sep22.series.mpi.2.4uo2
Normal file
21
examples/QM/LATTE/dump.8Sep22.series.mpi.2.4uo2
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
ITEM: TIMESTEP
|
||||||
|
0
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
12
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 6.6130927153957075e-16
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z fx fy fz
|
||||||
|
1 1 2.7 8.1 0 -0.433947 2.16479 1.55466
|
||||||
|
2 2 1.35 9.45 1.35 1.64718 -0.119006 0.375837
|
||||||
|
3 2 4.05 9.45 1.35 0.999862 -1.02573 0.037629
|
||||||
|
4 1 5.4 8.1 2.7 0.433947 2.16479 1.55466
|
||||||
|
5 2 4.05 9.45 4.05 -0.999862 -1.02573 0.037629
|
||||||
|
6 2 6.75 9.45 4.05 -1.64718 -0.119006 0.375837
|
||||||
|
7 1 2.7 1.65327e-16 2.7 -0.211437 1.63064 -0.0728897
|
||||||
|
8 2 1.35 1.35 4.05 0.461807 -1.3955 -1.94959
|
||||||
|
9 2 4.05 1.35 4.05 0.708573 -1.2552 0.0543549
|
||||||
|
10 1 5.4 0 0 0.211437 1.63064 -0.0728897
|
||||||
|
11 2 4.05 1.35 1.35 -0.708573 -1.2552 0.0543549
|
||||||
|
12 2 6.75 1.35 1.35 -0.461807 -1.3955 -1.94959
|
||||||
15
examples/QM/LATTE/dump.8Sep22.series.plugin.2uo2
Normal file
15
examples/QM/LATTE/dump.8Sep22.series.plugin.2uo2
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
ITEM: TIMESTEP
|
||||||
|
0
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
6
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z fx fy fz
|
||||||
|
1 1 2.7 2.7 0 -2.27066e-14 -1.33391e-14 2.31141e-14
|
||||||
|
2 2 1.35 4.05 1.35 2.35473 2.21578e-14 7.40069e-15
|
||||||
|
3 2 4.05 4.05 1.35 -2.35473 2.97071e-15 -2.01341e-14
|
||||||
|
4 1 2.7 1.65327e-16 2.7 -2.90278e-14 6.77422e-15 2.86766e-15
|
||||||
|
5 2 1.35 1.35 4.05 2.35473 5.79901e-15 -1.19594e-14
|
||||||
|
6 2 4.05 1.35 4.05 -2.35473 -1.38761e-14 1.09382e-14
|
||||||
18
examples/QM/LATTE/dump.8Sep22.series.plugin.3uo2
Normal file
18
examples/QM/LATTE/dump.8Sep22.series.plugin.3uo2
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
ITEM: TIMESTEP
|
||||||
|
0
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
9
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.6199999999999999e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z fx fy fz
|
||||||
|
1 1 2.7 2.7 0 -1.27436e-13 0.760572 0.760572
|
||||||
|
2 2 1.35 4.05 1.35 0.682428 -0.329901 -0.329901
|
||||||
|
3 2 4.05 4.05 1.35 -0.682428 -0.329901 -0.329901
|
||||||
|
4 1 2.7 1.65327e-16 2.7 -8.06311e-14 -1.57101 -1.57101
|
||||||
|
5 2 1.35 1.35 4.05 2.79365 0.684734 0.684734
|
||||||
|
6 2 4.05 1.35 4.05 -2.79365 0.684734 0.684734
|
||||||
|
7 1 2.7 2.7 0 -1.30843e-13 0.760572 0.760572
|
||||||
|
8 2 1.35 4.05 1.35 0.682428 -0.329901 -0.329901
|
||||||
|
9 2 4.05 4.05 1.35 -0.682428 -0.329901 -0.329901
|
||||||
21
examples/QM/LATTE/dump.8Sep22.series.plugin.4uo2
Normal file
21
examples/QM/LATTE/dump.8Sep22.series.plugin.4uo2
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
ITEM: TIMESTEP
|
||||||
|
0
|
||||||
|
ITEM: NUMBER OF ATOMS
|
||||||
|
12
|
||||||
|
ITEM: BOX BOUNDS xy xz yz pp pp pp
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 6.6130927153957075e-16
|
||||||
|
0.0000000000000000e+00 1.0800000000000001e+01 3.3065463576978537e-16
|
||||||
|
0.0000000000000000e+00 5.4000000000000004e+00 3.3065463576978537e-16
|
||||||
|
ITEM: ATOMS id type x y z fx fy fz
|
||||||
|
1 1 2.7 8.1 0 -0.433947 2.16479 1.55466
|
||||||
|
2 2 1.35 9.45 1.35 1.64718 -0.119006 0.375837
|
||||||
|
3 2 4.05 9.45 1.35 0.999862 -1.02573 0.037629
|
||||||
|
4 1 5.4 8.1 2.7 0.433947 2.16479 1.55466
|
||||||
|
5 2 4.05 9.45 4.05 -0.999862 -1.02573 0.037629
|
||||||
|
6 2 6.75 9.45 4.05 -1.64718 -0.119006 0.375837
|
||||||
|
7 1 2.7 1.65327e-16 2.7 -0.211437 1.63064 -0.0728897
|
||||||
|
8 2 1.35 1.35 4.05 0.461807 -1.3955 -1.94959
|
||||||
|
9 2 4.05 1.35 4.05 0.708573 -1.2552 0.0543549
|
||||||
|
10 1 5.4 0 0 0.211437 1.63064 -0.0728897
|
||||||
|
11 2 4.05 1.35 1.35 -0.708573 -1.2552 0.0543549
|
||||||
|
12 2 6.75 1.35 1.35 -0.461807 -1.3955 -1.94959
|
||||||
15
examples/QM/LATTE/electrons.dat
Normal file
15
examples/QM/LATTE/electrons.dat
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
Noelem= 2
|
||||||
|
Element basis Numel Es Ep Ed Ef Mass HubbardU Wss Wpp Wdd Wff
|
||||||
|
U sdf 6.0 -4.08 0.0 0.816 -0.586 238.05078 9.0 0.0 0.0 0.0 0.0
|
||||||
|
O sp 6.0 -23.77 -8.85 0.0 0.0 15.994915 12.2 0.0 0.0 0.0 0.0
|
||||||
|
|
||||||
|
|
||||||
|
W spd 6.0 -4.52 0.53 -2.91 0.0 183.84 7.048 0.0 0.0 0.0 0.0
|
||||||
|
Mo sd 6.0 -3.29 0.0 -1.98 0.0 95.95 6.48 0.0 0.0 0.0 0.0
|
||||||
|
S sp 6.0 -14.00 -3.97 0.0 0.0 32.06 8.28 0.0 -0.4278 0.0 0.0
|
||||||
|
|
||||||
|
|
||||||
|
N sp 5.000000 -18.543798 -7.862407 0.000000 0.000000 14.006700 17.053958 0.000000 -0.6934 0.000000 0.000000
|
||||||
|
H s 1.000000 -6.237968 0.000000 0.000000 0.000000 1.007900 13.684855 -2.23400 0.000000 0.000000 0.000000
|
||||||
|
C sp 4.000000 -13.736556 -4.748938 0.000000 0.000000 12.010000 10.522540 0.000000 -0.618100 0.000000 0.000000
|
||||||
|
O sp 6.000000 -23.833752 -9.645001 0.000000 0.000000 15.999400 14.443874 0.000000 -0.757650 0.000000 0.000000
|
||||||
26
examples/QM/LATTE/in.aimd
Normal file
26
examples/QM/LATTE/in.aimd
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# AIMD test of two UO2 molecules with LATTE in MDI stand-alone mode
|
||||||
|
|
||||||
|
units metal
|
||||||
|
atom_style full
|
||||||
|
atom_modify sort 0 0.0
|
||||||
|
|
||||||
|
read_data 2uo2.lmp
|
||||||
|
|
||||||
|
velocity all create 300.0 87287 loop geom
|
||||||
|
|
||||||
|
neighbor 1.0 bin
|
||||||
|
neigh_modify every 1 delay 0 check yes
|
||||||
|
|
||||||
|
timestep 0.00025
|
||||||
|
|
||||||
|
fix 1 all nve
|
||||||
|
|
||||||
|
fix 2 all mdi/qm virial yes elements 92 8
|
||||||
|
|
||||||
|
thermo_style custom step temp pe etotal press
|
||||||
|
thermo 1
|
||||||
|
|
||||||
|
dump 1 all custom 1 dump.aimd.mpi &
|
||||||
|
id type x y z vx vy vz fx fy fz
|
||||||
|
|
||||||
|
run 20
|
||||||
27
examples/QM/LATTE/in.aimd.plugin
Normal file
27
examples/QM/LATTE/in.aimd.plugin
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
# AIMD test of two UO2 molecules with LATTE in MDI plugin mode
|
||||||
|
|
||||||
|
units metal
|
||||||
|
atom_style full
|
||||||
|
atom_modify sort 0 0.0
|
||||||
|
|
||||||
|
read_data 2uo2.lmp
|
||||||
|
|
||||||
|
velocity all create 300.0 87287 loop geom
|
||||||
|
|
||||||
|
neighbor 1.0 bin
|
||||||
|
neigh_modify every 1 delay 0 check yes
|
||||||
|
|
||||||
|
timestep 0.00025
|
||||||
|
|
||||||
|
fix 1 all nve
|
||||||
|
|
||||||
|
fix 2 all mdi/qm virial yes elements 92 8
|
||||||
|
|
||||||
|
thermo_style custom step temp pe etotal press
|
||||||
|
thermo 1
|
||||||
|
|
||||||
|
dump 1 all custom 1 dump.aimd.plugin &
|
||||||
|
id type x y z vx vy vz fx fy fz
|
||||||
|
|
||||||
|
mdi plugin latte_mdi mdi "-role ENGINE -name LATTE -method LINK" &
|
||||||
|
command "run 20"
|
||||||
37
examples/QM/LATTE/in.series
Normal file
37
examples/QM/LATTE/in.series
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
# Series of single-point calcs of 2,3,4 UO2 molecules
|
||||||
|
# with LATTE in MDI stand-alone mode
|
||||||
|
|
||||||
|
variable files index 2uo2 3uo2 4uo2
|
||||||
|
|
||||||
|
mdi connect
|
||||||
|
|
||||||
|
label LOOP
|
||||||
|
|
||||||
|
units metal
|
||||||
|
atom_style full
|
||||||
|
atom_modify sort 0 0.0
|
||||||
|
|
||||||
|
read_data ${files}.lmp
|
||||||
|
|
||||||
|
neighbor 0.3 bin
|
||||||
|
neigh_modify every 1 delay 0 check yes
|
||||||
|
|
||||||
|
timestep 0.001
|
||||||
|
|
||||||
|
fix 1 all mdi/qm virial yes elements 92 8 connect no
|
||||||
|
|
||||||
|
thermo_style custom step temp pe etotal press
|
||||||
|
thermo 1
|
||||||
|
|
||||||
|
run 0
|
||||||
|
|
||||||
|
write_dump all custom dump.series.mpi.${files} &
|
||||||
|
id type x y z fx fy fz modify sort id
|
||||||
|
|
||||||
|
clear
|
||||||
|
|
||||||
|
next files
|
||||||
|
|
||||||
|
jump SELF LOOP
|
||||||
|
|
||||||
|
mdi exit
|
||||||
32
examples/QM/LATTE/in.series.plugin
Normal file
32
examples/QM/LATTE/in.series.plugin
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# Series of single-point calcs of 2,3,4 UO2 molecules
|
||||||
|
# with LATTE in MDI plugin mode
|
||||||
|
|
||||||
|
variable files index 2uo2 3uo2 4uo2
|
||||||
|
|
||||||
|
label LOOP
|
||||||
|
|
||||||
|
units metal
|
||||||
|
atom_style full
|
||||||
|
atom_modify sort 0 0.0
|
||||||
|
|
||||||
|
read_data ${files}.lmp
|
||||||
|
|
||||||
|
neighbor 0.3 bin
|
||||||
|
neigh_modify every 1 delay 0 check yes
|
||||||
|
|
||||||
|
fix 1 all mdi/qm virial yes elements 92 8
|
||||||
|
|
||||||
|
thermo_style custom step temp pe etotal press
|
||||||
|
thermo 1
|
||||||
|
|
||||||
|
mdi plugin latte_mdi mdi "-role ENGINE -name LATTE -method LINK" &
|
||||||
|
command "run 0"
|
||||||
|
|
||||||
|
write_dump all custom dump.series.plugin.${files} &
|
||||||
|
id type x y z fx fy fz modify sort id
|
||||||
|
|
||||||
|
clear
|
||||||
|
|
||||||
|
next files
|
||||||
|
|
||||||
|
jump SELF LOOP
|
||||||
67
examples/QM/LATTE/latte.in
Executable file
67
examples/QM/LATTE/latte.in
Executable file
@ -0,0 +1,67 @@
|
|||||||
|
#General controls
|
||||||
|
CONTROL{
|
||||||
|
XCONTROL= 1
|
||||||
|
BASISTYPE= NONORTHO
|
||||||
|
PARAMPATH= './'
|
||||||
|
SCLTYPE= TABLE
|
||||||
|
DEBUGON= 0
|
||||||
|
FERMIM= 6
|
||||||
|
CGORLIB= 1 CGTOL= 1.0e-6
|
||||||
|
KBT= 1.0
|
||||||
|
NORECS= 5
|
||||||
|
ENTROPYKIND= 1
|
||||||
|
PPOTON= 2 VDWON= 0
|
||||||
|
SPINON= 0 SPINTOL= 1.0e-4
|
||||||
|
ELECTRO= 1 ELECMETH= 0 ELEC_ETOL= 0.001 ELEC_QTOL= 1.0e-12
|
||||||
|
COULACC= 1.0e-6 COULCUT= -500.0 COULR1= 500.0
|
||||||
|
MAXSCF= 250
|
||||||
|
BREAKTOL= 1.0E-12 MINSP2ITER= 22 SP2CONV= REL
|
||||||
|
FULLQCONV= 1 QITER= 0
|
||||||
|
QMIX= 0.05 SPINMIX= 0.05 MDMIX= 0.05
|
||||||
|
#QMIX= 0.25 SPINMIX= 0.25 MDMIX= 0.25
|
||||||
|
ORDERNMOL= 0
|
||||||
|
SPARSEON= 0 THRESHOLDON= 1 NUMTHRESH= 1.0e-6 FILLINSTOP= 100 BLKSZ= 4
|
||||||
|
MSPARSE= 3000
|
||||||
|
LCNON= 0 LCNITER= 4 CHTOL= 0.01
|
||||||
|
SKIN= 1.0
|
||||||
|
RELAX= 0 RELAXTYPE= SD MAXITER= 100 RLXFTOL= 0.001
|
||||||
|
MDON= 1
|
||||||
|
PBCON= 1
|
||||||
|
RESTART= 0
|
||||||
|
CHARGE= 0
|
||||||
|
XBO= 1
|
||||||
|
XBODISON= 1
|
||||||
|
XBODISORDER= 5
|
||||||
|
NGPU= 2
|
||||||
|
KON= 0
|
||||||
|
COMPFORCE= 1
|
||||||
|
DOSFIT= 0 INTS2FIT= 1 BETA= 1000.0 NFITSTEP= 5000 QFIT= 0 MCSIGMA= 0.2
|
||||||
|
PPFITON= 0
|
||||||
|
ALLFITON= 0
|
||||||
|
PPSTEP= 500 BISTEP= 500 PP2FIT= 2 BINT2FIT= 6
|
||||||
|
PPBETA= 1000.0 PPSIGMA= 0.01 PPNMOL= 10 PPNGEOM= 200
|
||||||
|
PARREP= 0
|
||||||
|
ER= 1.0
|
||||||
|
#DOKERNEL= T
|
||||||
|
}
|
||||||
|
|
||||||
|
MDCONTROL{
|
||||||
|
MAXITER= 2000
|
||||||
|
UDNEIGH= 1
|
||||||
|
DT= 0.5
|
||||||
|
TEMPERATURE= 1.0e-10 RNDIST= GAUSSIAN SEEDINIT= UNIFORM
|
||||||
|
DUMPFREQ= 250
|
||||||
|
RSFREQ= 500
|
||||||
|
WRTFREQ= 1
|
||||||
|
TOINITTEMP5= 1
|
||||||
|
THERMPER= 500
|
||||||
|
THERMRUN= 50000
|
||||||
|
NVTON= 0 NPTON= 0 AVEPER= 1000 FRICTION= 1000.0 SEED= 54
|
||||||
|
PTARGET= 0.0 NPTTYPE= ISO
|
||||||
|
SHOCKON= 0
|
||||||
|
SHOCKSTART= 100000
|
||||||
|
SHOCKDIR= 1
|
||||||
|
UPARTICLE= 500.0 USHOCK= -4590.0 C0= 1300.0
|
||||||
|
MDADAPT= 0
|
||||||
|
GETHUG= 0 E0= -795.725 V0= 896.984864 P0= 0.083149
|
||||||
|
}
|
||||||
102
examples/QM/LATTE/log.8Sep22.aimd.lammps.mpi.1
Normal file
102
examples/QM/LATTE/log.8Sep22.aimd.lammps.mpi.1
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
LAMMPS (23 Jun 2022)
|
||||||
|
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
|
||||||
|
using 1 OpenMP thread(s) per MPI task
|
||||||
|
# AIMD test of two UO2 molecules with LATTE in MDI stand-alone mode
|
||||||
|
|
||||||
|
units metal
|
||||||
|
atom_style full
|
||||||
|
atom_modify sort 0 0.0
|
||||||
|
|
||||||
|
read_data 2uo2.lmp
|
||||||
|
Reading data file ...
|
||||||
|
triclinic box = (0 0 0) to (10.8 5.4 5.4) with tilt (3.3065464e-16 3.3065464e-16 3.3065464e-16)
|
||||||
|
1 by 1 by 1 MPI processor grid
|
||||||
|
reading atoms ...
|
||||||
|
6 atoms
|
||||||
|
Finding 1-2 1-3 1-4 neighbors ...
|
||||||
|
special bond factors lj: 0 0 0
|
||||||
|
special bond factors coul: 0 0 0
|
||||||
|
0 = max # of 1-2 neighbors
|
||||||
|
0 = max # of 1-3 neighbors
|
||||||
|
0 = max # of 1-4 neighbors
|
||||||
|
1 = max # of special neighbors
|
||||||
|
special bonds CPU = 0.000 seconds
|
||||||
|
read_data CPU = 0.003 seconds
|
||||||
|
|
||||||
|
velocity all create 300.0 87287 loop geom
|
||||||
|
|
||||||
|
neighbor 1.0 bin
|
||||||
|
neigh_modify every 1 delay 0 check yes
|
||||||
|
|
||||||
|
timestep 0.00025
|
||||||
|
|
||||||
|
fix 1 all nve
|
||||||
|
|
||||||
|
fix 2 all mdi/qm virial yes elements 92 8
|
||||||
|
|
||||||
|
thermo_style custom step temp pe etotal press
|
||||||
|
thermo 1
|
||||||
|
|
||||||
|
dump 1 all custom 1 dump.aimd.mpi id type x y z vx vy vz fx fy fz
|
||||||
|
|
||||||
|
run 20
|
||||||
|
Neighbor list info ...
|
||||||
|
update every 1 steps, delay 0 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 0
|
||||||
|
ghost atom cutoff = 0
|
||||||
|
binsize = 10.8, bins = 1 1 1
|
||||||
|
0 neighbor lists, perpetual/occasional/extra = 0 0 0
|
||||||
|
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210)
|
||||||
|
Per MPI rank memory allocation (min/avg/max) = 6.489 | 6.489 | 6.489 Mbytes
|
||||||
|
Step Temp PotEng TotEng Press
|
||||||
|
0 300 -50.539035 -50.345145 -120197.6
|
||||||
|
1 307.57345 -50.544722 -50.345937 -120123.27
|
||||||
|
2 316.3757 -50.551342 -50.346868 -120035.12
|
||||||
|
3 326.39203 -50.558885 -50.347938 -119933.11
|
||||||
|
4 337.60559 -50.567341 -50.349146 -119817.17
|
||||||
|
5 349.99734 -50.576697 -50.350493 -119687.24
|
||||||
|
6 363.54606 -50.586939 -50.351979 -119543.23
|
||||||
|
7 378.22834 -50.598054 -50.353605 -119385.07
|
||||||
|
8 394.0186 -50.610024 -50.355369 -119212.67
|
||||||
|
9 410.88903 -50.622831 -50.357273 -119025.94
|
||||||
|
10 428.80963 -50.636457 -50.359317 -118824.77
|
||||||
|
11 447.74819 -50.65088 -50.3615 -118609.06
|
||||||
|
12 467.67027 -50.666079 -50.363823 -118378.7
|
||||||
|
13 488.53922 -50.68203 -50.366287 -118133.58
|
||||||
|
14 510.31617 -50.698708 -50.36889 -117873.58
|
||||||
|
15 532.96002 -50.716086 -50.371633 -117598.57
|
||||||
|
16 556.42747 -50.734137 -50.374517 -117308.44
|
||||||
|
17 580.67298 -50.75283 -50.377541 -117003.05
|
||||||
|
18 605.64879 -50.772136 -50.380705 -116682.27
|
||||||
|
19 631.30497 -50.792023 -50.38401 -116345.95
|
||||||
|
20 657.58937 -50.812455 -50.387454 -115993.97
|
||||||
|
Loop time of 3.40001 on 1 procs for 20 steps with 6 atoms
|
||||||
|
|
||||||
|
Performance: 0.127 ns/day, 188.889 hours/ns, 5.882 timesteps/s
|
||||||
|
100.0% CPU use with 1 MPI tasks x 1 OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Bond | 1.2223e-05 | 1.2223e-05 | 1.2223e-05 | 0.0 | 0.00
|
||||||
|
Neigh | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Comm | 6.0971e-05 | 6.0971e-05 | 6.0971e-05 | 0.0 | 0.00
|
||||||
|
Output | 0.0009257 | 0.0009257 | 0.0009257 | 0.0 | 0.03
|
||||||
|
Modify | 3.3989 | 3.3989 | 3.3989 | 0.0 | 99.97
|
||||||
|
Other | | 6.824e-05 | | | 0.00
|
||||||
|
|
||||||
|
Nlocal: 6 ave 6 max 6 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Nghost: 2 ave 2 max 2 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 = 0
|
||||||
|
Ave neighs/atom = 0
|
||||||
|
Ave special neighs/atom = 0
|
||||||
|
Neighbor list builds = 0
|
||||||
|
Dangerous builds = 0
|
||||||
|
Total wall time: 0:00:03
|
||||||
102
examples/QM/LATTE/log.8Sep22.aimd.lammps.mpi.2
Normal file
102
examples/QM/LATTE/log.8Sep22.aimd.lammps.mpi.2
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
LAMMPS (23 Jun 2022)
|
||||||
|
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
|
||||||
|
using 1 OpenMP thread(s) per MPI task
|
||||||
|
# AIMD test of two UO2 molecules with LATTE in MDI stand-alone mode
|
||||||
|
|
||||||
|
units metal
|
||||||
|
atom_style full
|
||||||
|
atom_modify sort 0 0.0
|
||||||
|
|
||||||
|
read_data 2uo2.lmp
|
||||||
|
Reading data file ...
|
||||||
|
triclinic box = (0 0 0) to (10.8 5.4 5.4) with tilt (3.3065464e-16 3.3065464e-16 3.3065464e-16)
|
||||||
|
2 by 1 by 1 MPI processor grid
|
||||||
|
reading atoms ...
|
||||||
|
6 atoms
|
||||||
|
Finding 1-2 1-3 1-4 neighbors ...
|
||||||
|
special bond factors lj: 0 0 0
|
||||||
|
special bond factors coul: 0 0 0
|
||||||
|
0 = max # of 1-2 neighbors
|
||||||
|
0 = max # of 1-3 neighbors
|
||||||
|
0 = max # of 1-4 neighbors
|
||||||
|
1 = max # of special neighbors
|
||||||
|
special bonds CPU = 0.000 seconds
|
||||||
|
read_data CPU = 0.005 seconds
|
||||||
|
|
||||||
|
velocity all create 300.0 87287 loop geom
|
||||||
|
|
||||||
|
neighbor 1.0 bin
|
||||||
|
neigh_modify every 1 delay 0 check yes
|
||||||
|
|
||||||
|
timestep 0.00025
|
||||||
|
|
||||||
|
fix 1 all nve
|
||||||
|
|
||||||
|
fix 2 all mdi/qm virial yes elements 92 8
|
||||||
|
|
||||||
|
thermo_style custom step temp pe etotal press
|
||||||
|
thermo 1
|
||||||
|
|
||||||
|
dump 1 all custom 1 dump.aimd.mpi id type x y z vx vy vz fx fy fz
|
||||||
|
|
||||||
|
run 20
|
||||||
|
Neighbor list info ...
|
||||||
|
update every 1 steps, delay 0 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 0
|
||||||
|
ghost atom cutoff = 0
|
||||||
|
binsize = 10.8, bins = 1 1 1
|
||||||
|
0 neighbor lists, perpetual/occasional/extra = 0 0 0
|
||||||
|
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210)
|
||||||
|
Per MPI rank memory allocation (min/avg/max) = 5.485 | 5.987 | 6.489 Mbytes
|
||||||
|
Step Temp PotEng TotEng Press
|
||||||
|
0 300 -50.539035 -50.345145 -120197.6
|
||||||
|
1 307.57345 -50.544722 -50.345937 -120123.27
|
||||||
|
2 316.3757 -50.551342 -50.346868 -120035.12
|
||||||
|
3 326.39203 -50.558885 -50.347938 -119933.11
|
||||||
|
4 337.60559 -50.567341 -50.349146 -119817.17
|
||||||
|
5 349.99734 -50.576697 -50.350493 -119687.24
|
||||||
|
6 363.54606 -50.586939 -50.351979 -119543.23
|
||||||
|
7 378.22834 -50.598054 -50.353605 -119385.07
|
||||||
|
8 394.0186 -50.610024 -50.355369 -119212.67
|
||||||
|
9 410.88903 -50.622831 -50.357273 -119025.94
|
||||||
|
10 428.80963 -50.636457 -50.359317 -118824.77
|
||||||
|
11 447.74819 -50.65088 -50.3615 -118609.06
|
||||||
|
12 467.67027 -50.666079 -50.363823 -118378.7
|
||||||
|
13 488.53922 -50.68203 -50.366287 -118133.58
|
||||||
|
14 510.31617 -50.698708 -50.36889 -117873.58
|
||||||
|
15 532.96002 -50.716086 -50.371633 -117598.57
|
||||||
|
16 556.42747 -50.734137 -50.374517 -117308.44
|
||||||
|
17 580.67298 -50.75283 -50.377541 -117003.05
|
||||||
|
18 605.64879 -50.772136 -50.380705 -116682.27
|
||||||
|
19 631.30497 -50.792023 -50.38401 -116345.95
|
||||||
|
20 657.58937 -50.812455 -50.387454 -115993.97
|
||||||
|
Loop time of 25.2055 on 2 procs for 20 steps with 6 atoms
|
||||||
|
|
||||||
|
Performance: 0.017 ns/day, 1400.306 hours/ns, 0.793 timesteps/s
|
||||||
|
99.9% CPU use with 2 MPI tasks x 1 OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Bond | 1.746e-05 | 2.5213e-05 | 3.2966e-05 | 0.0 | 0.00
|
||||||
|
Neigh | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Comm | 4.3862e-05 | 5.4267e-05 | 6.4671e-05 | 0.0 | 0.00
|
||||||
|
Output | 0.001642 | 0.0018189 | 0.0019957 | 0.4 | 0.01
|
||||||
|
Modify | 25.203 | 25.203 | 25.203 | 0.0 | 99.99
|
||||||
|
Other | | 0.000307 | | | 0.00
|
||||||
|
|
||||||
|
Nlocal: 3 ave 6 max 0 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 1
|
||||||
|
Nghost: 1 ave 2 max 0 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 1
|
||||||
|
Neighs: 0 ave 0 max 0 min
|
||||||
|
Histogram: 2 0 0 0 0 0 0 0 0 0
|
||||||
|
|
||||||
|
Total # of neighbors = 0
|
||||||
|
Ave neighs/atom = 0
|
||||||
|
Ave special neighs/atom = 0
|
||||||
|
Neighbor list builds = 0
|
||||||
|
Dangerous builds = 0
|
||||||
|
Total wall time: 0:00:26
|
||||||
103
examples/QM/LATTE/log.8Sep22.aimd.lammps.plugin
Normal file
103
examples/QM/LATTE/log.8Sep22.aimd.lammps.plugin
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
LAMMPS (23 Jun 2022)
|
||||||
|
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
|
||||||
|
using 1 OpenMP thread(s) per MPI task
|
||||||
|
# AIMD test of two UO2 molecules with LATTE in MDI plugin mode
|
||||||
|
|
||||||
|
units metal
|
||||||
|
atom_style full
|
||||||
|
atom_modify sort 0 0.0
|
||||||
|
|
||||||
|
read_data 2uo2.lmp
|
||||||
|
Reading data file ...
|
||||||
|
triclinic box = (0 0 0) to (10.8 5.4 5.4) with tilt (3.3065464e-16 3.3065464e-16 3.3065464e-16)
|
||||||
|
1 by 1 by 1 MPI processor grid
|
||||||
|
reading atoms ...
|
||||||
|
6 atoms
|
||||||
|
Finding 1-2 1-3 1-4 neighbors ...
|
||||||
|
special bond factors lj: 0 0 0
|
||||||
|
special bond factors coul: 0 0 0
|
||||||
|
0 = max # of 1-2 neighbors
|
||||||
|
0 = max # of 1-3 neighbors
|
||||||
|
0 = max # of 1-4 neighbors
|
||||||
|
1 = max # of special neighbors
|
||||||
|
special bonds CPU = 0.000 seconds
|
||||||
|
read_data CPU = 0.004 seconds
|
||||||
|
|
||||||
|
velocity all create 300.0 87287 loop geom
|
||||||
|
|
||||||
|
neighbor 1.0 bin
|
||||||
|
neigh_modify every 1 delay 0 check yes
|
||||||
|
|
||||||
|
timestep 0.00025
|
||||||
|
|
||||||
|
fix 1 all nve
|
||||||
|
|
||||||
|
fix 2 all mdi/qm virial yes elements 92 8
|
||||||
|
|
||||||
|
thermo_style custom step temp pe etotal press
|
||||||
|
thermo 1
|
||||||
|
|
||||||
|
dump 1 all custom 1 dump.aimd.plugin id type x y z vx vy vz fx fy fz
|
||||||
|
|
||||||
|
mdi plugin latte_mdi mdi "-role ENGINE -name LATTE -method LINK" command "run 20"
|
||||||
|
run 20
|
||||||
|
Neighbor list info ...
|
||||||
|
update every 1 steps, delay 0 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 0
|
||||||
|
ghost atom cutoff = 0
|
||||||
|
binsize = 10.8, bins = 1 1 1
|
||||||
|
0 neighbor lists, perpetual/occasional/extra = 0 0 0
|
||||||
|
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210)
|
||||||
|
Per MPI rank memory allocation (min/avg/max) = 6.489 | 6.489 | 6.489 Mbytes
|
||||||
|
Step Temp PotEng TotEng Press
|
||||||
|
0 300 -50.539035 -50.345145 -120197.6
|
||||||
|
1 307.57345 -50.544722 -50.345937 -120123.27
|
||||||
|
2 316.3757 -50.551342 -50.346868 -120035.12
|
||||||
|
3 326.39203 -50.558885 -50.347938 -119933.11
|
||||||
|
4 337.60559 -50.567341 -50.349146 -119817.17
|
||||||
|
5 349.99734 -50.576697 -50.350493 -119687.24
|
||||||
|
6 363.54606 -50.586939 -50.351979 -119543.23
|
||||||
|
7 378.22834 -50.598054 -50.353605 -119385.07
|
||||||
|
8 394.0186 -50.610024 -50.355369 -119212.67
|
||||||
|
9 410.88903 -50.622831 -50.357273 -119025.94
|
||||||
|
10 428.80963 -50.636457 -50.359317 -118824.77
|
||||||
|
11 447.74819 -50.65088 -50.3615 -118609.06
|
||||||
|
12 467.67027 -50.666079 -50.363823 -118378.7
|
||||||
|
13 488.53922 -50.68203 -50.366287 -118133.58
|
||||||
|
14 510.31617 -50.698708 -50.36889 -117873.58
|
||||||
|
15 532.96002 -50.716086 -50.371633 -117598.57
|
||||||
|
16 556.42747 -50.734137 -50.374517 -117308.44
|
||||||
|
17 580.67298 -50.75283 -50.377541 -117003.05
|
||||||
|
18 605.64879 -50.772136 -50.380705 -116682.27
|
||||||
|
19 631.30497 -50.792023 -50.38401 -116345.95
|
||||||
|
20 657.58937 -50.812455 -50.387454 -115993.97
|
||||||
|
Loop time of 2.74435 on 1 procs for 20 steps with 6 atoms
|
||||||
|
|
||||||
|
Performance: 0.157 ns/day, 152.464 hours/ns, 7.288 timesteps/s
|
||||||
|
99.8% CPU use with 1 MPI tasks x 1 OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Bond | 1.299e-05 | 1.299e-05 | 1.299e-05 | 0.0 | 0.00
|
||||||
|
Neigh | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Comm | 7.9198e-05 | 7.9198e-05 | 7.9198e-05 | 0.0 | 0.00
|
||||||
|
Output | 0.001118 | 0.001118 | 0.001118 | 0.0 | 0.04
|
||||||
|
Modify | 2.743 | 2.743 | 2.743 | 0.0 | 99.95
|
||||||
|
Other | | 0.0001456 | | | 0.01
|
||||||
|
|
||||||
|
Nlocal: 6 ave 6 max 6 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Nghost: 2 ave 2 max 2 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 = 0
|
||||||
|
Ave neighs/atom = 0
|
||||||
|
Ave special neighs/atom = 0
|
||||||
|
Neighbor list builds = 0
|
||||||
|
Dangerous builds = 0
|
||||||
|
Total wall time: 0:00:03
|
||||||
12604
examples/QM/LATTE/log.8Sep22.aimd.latte.1
Normal file
12604
examples/QM/LATTE/log.8Sep22.aimd.latte.1
Normal file
File diff suppressed because it is too large
Load Diff
12604
examples/QM/LATTE/log.8Sep22.aimd.latte.2
Normal file
12604
examples/QM/LATTE/log.8Sep22.aimd.latte.2
Normal file
File diff suppressed because it is too large
Load Diff
12604
examples/QM/LATTE/log.8Sep22.aimd.latte.plugin
Normal file
12604
examples/QM/LATTE/log.8Sep22.aimd.latte.plugin
Normal file
File diff suppressed because it is too large
Load Diff
263
examples/QM/LATTE/log.8Sep22.series.lammps.mpi.1
Normal file
263
examples/QM/LATTE/log.8Sep22.series.lammps.mpi.1
Normal file
@ -0,0 +1,263 @@
|
|||||||
|
LAMMPS (23 Jun 2022)
|
||||||
|
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
|
||||||
|
using 1 OpenMP thread(s) per MPI task
|
||||||
|
# Series of single-point calcs of 2,3,4 UO2 molecules
|
||||||
|
# with LATTE in MDI stand-alone mode
|
||||||
|
|
||||||
|
variable files index 2uo2 3uo2 4uo2
|
||||||
|
|
||||||
|
mdi connect
|
||||||
|
|
||||||
|
label LOOP
|
||||||
|
|
||||||
|
units metal
|
||||||
|
atom_style full
|
||||||
|
atom_modify sort 0 0.0
|
||||||
|
|
||||||
|
read_data ${files}.lmp
|
||||||
|
read_data 2uo2.lmp
|
||||||
|
Reading data file ...
|
||||||
|
triclinic box = (0 0 0) to (10.8 5.4 5.4) with tilt (3.3065464e-16 3.3065464e-16 3.3065464e-16)
|
||||||
|
1 by 1 by 1 MPI processor grid
|
||||||
|
reading atoms ...
|
||||||
|
6 atoms
|
||||||
|
Finding 1-2 1-3 1-4 neighbors ...
|
||||||
|
special bond factors lj: 0 0 0
|
||||||
|
special bond factors coul: 0 0 0
|
||||||
|
0 = max # of 1-2 neighbors
|
||||||
|
0 = max # of 1-3 neighbors
|
||||||
|
0 = max # of 1-4 neighbors
|
||||||
|
1 = max # of special neighbors
|
||||||
|
special bonds CPU = 0.000 seconds
|
||||||
|
read_data CPU = 0.003 seconds
|
||||||
|
|
||||||
|
neighbor 0.3 bin
|
||||||
|
neigh_modify every 1 delay 0 check yes
|
||||||
|
|
||||||
|
timestep 0.001
|
||||||
|
|
||||||
|
fix 1 all mdi/qm virial yes elements 92 8 connect no
|
||||||
|
|
||||||
|
thermo_style custom step temp pe etotal press
|
||||||
|
thermo 1
|
||||||
|
|
||||||
|
run 0
|
||||||
|
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
|
||||||
|
Neighbor list info ...
|
||||||
|
update every 1 steps, delay 0 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 0
|
||||||
|
ghost atom cutoff = 0
|
||||||
|
binsize = 10.8, bins = 1 1 1
|
||||||
|
0 neighbor lists, perpetual/occasional/extra = 0 0 0
|
||||||
|
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210)
|
||||||
|
Per MPI rank memory allocation (min/avg/max) = 5.238 | 5.238 | 5.238 Mbytes
|
||||||
|
Step Temp PotEng TotEng Press
|
||||||
|
0 0 -50.539035 -50.539035 -120855.2
|
||||||
|
Loop time of 1.397e-06 on 1 procs for 0 steps with 6 atoms
|
||||||
|
|
||||||
|
71.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 | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Bond | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Neigh | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Comm | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Output | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Modify | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Other | | 1.397e-06 | | |100.00
|
||||||
|
|
||||||
|
Nlocal: 6 ave 6 max 6 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Nghost: 2 ave 2 max 2 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 = 0
|
||||||
|
Ave neighs/atom = 0
|
||||||
|
Ave special neighs/atom = 0
|
||||||
|
Neighbor list builds = 0
|
||||||
|
Dangerous builds = 0
|
||||||
|
|
||||||
|
write_dump all custom dump.series.mpi.${files} id type x y z fx fy fz modify sort id
|
||||||
|
write_dump all custom dump.series.mpi.2uo2 id type x y z fx fy fz modify sort id
|
||||||
|
|
||||||
|
clear
|
||||||
|
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
|
||||||
|
using 1 OpenMP thread(s) per MPI task
|
||||||
|
|
||||||
|
next files
|
||||||
|
|
||||||
|
jump SELF LOOP
|
||||||
|
|
||||||
|
units metal
|
||||||
|
atom_style full
|
||||||
|
atom_modify sort 0 0.0
|
||||||
|
|
||||||
|
read_data ${files}.lmp
|
||||||
|
read_data 3uo2.lmp
|
||||||
|
Reading data file ...
|
||||||
|
triclinic box = (0 0 0) to (16.2 5.4 5.4) with tilt (3.3065464e-16 3.3065464e-16 3.3065464e-16)
|
||||||
|
1 by 1 by 1 MPI processor grid
|
||||||
|
reading atoms ...
|
||||||
|
9 atoms
|
||||||
|
Finding 1-2 1-3 1-4 neighbors ...
|
||||||
|
special bond factors lj: 0 0 0
|
||||||
|
special bond factors coul: 0 0 0
|
||||||
|
0 = max # of 1-2 neighbors
|
||||||
|
0 = max # of 1-3 neighbors
|
||||||
|
0 = max # of 1-4 neighbors
|
||||||
|
1 = max # of special neighbors
|
||||||
|
special bonds CPU = 0.000 seconds
|
||||||
|
read_data CPU = 0.002 seconds
|
||||||
|
|
||||||
|
neighbor 0.3 bin
|
||||||
|
neigh_modify every 1 delay 0 check yes
|
||||||
|
|
||||||
|
timestep 0.001
|
||||||
|
|
||||||
|
fix 1 all mdi/qm virial yes elements 92 8 connect no
|
||||||
|
|
||||||
|
thermo_style custom step temp pe etotal press
|
||||||
|
thermo 1
|
||||||
|
|
||||||
|
run 0
|
||||||
|
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
|
||||||
|
Neighbor list info ...
|
||||||
|
update every 1 steps, delay 0 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 0
|
||||||
|
ghost atom cutoff = 0
|
||||||
|
binsize = 16.2, bins = 1 1 1
|
||||||
|
0 neighbor lists, perpetual/occasional/extra = 0 0 0
|
||||||
|
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210)
|
||||||
|
Per MPI rank memory allocation (min/avg/max) = 5.238 | 5.238 | 5.238 Mbytes
|
||||||
|
Step Temp PotEng TotEng Press
|
||||||
|
0 0 -78.155679 -78.155679 -99931.431
|
||||||
|
Loop time of 1.117e-06 on 1 procs for 0 steps with 9 atoms
|
||||||
|
|
||||||
|
89.5% CPU use with 1 MPI tasks x 1 OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Bond | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Neigh | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Comm | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Output | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Modify | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Other | | 1.117e-06 | | |100.00
|
||||||
|
|
||||||
|
Nlocal: 9 ave 9 max 9 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Nghost: 3 ave 3 max 3 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 = 0
|
||||||
|
Ave neighs/atom = 0
|
||||||
|
Ave special neighs/atom = 0
|
||||||
|
Neighbor list builds = 0
|
||||||
|
Dangerous builds = 0
|
||||||
|
|
||||||
|
write_dump all custom dump.series.mpi.${files} id type x y z fx fy fz modify sort id
|
||||||
|
write_dump all custom dump.series.mpi.3uo2 id type x y z fx fy fz modify sort id
|
||||||
|
|
||||||
|
clear
|
||||||
|
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
|
||||||
|
using 1 OpenMP thread(s) per MPI task
|
||||||
|
|
||||||
|
next files
|
||||||
|
|
||||||
|
jump SELF LOOP
|
||||||
|
|
||||||
|
units metal
|
||||||
|
atom_style full
|
||||||
|
atom_modify sort 0 0.0
|
||||||
|
|
||||||
|
read_data ${files}.lmp
|
||||||
|
read_data 4uo2.lmp
|
||||||
|
Reading data file ...
|
||||||
|
triclinic box = (0 0 0) to (10.8 10.8 5.4) with tilt (6.6130927e-16 3.3065464e-16 3.3065464e-16)
|
||||||
|
1 by 1 by 1 MPI processor grid
|
||||||
|
reading atoms ...
|
||||||
|
12 atoms
|
||||||
|
Finding 1-2 1-3 1-4 neighbors ...
|
||||||
|
special bond factors lj: 0 0 0
|
||||||
|
special bond factors coul: 0 0 0
|
||||||
|
0 = max # of 1-2 neighbors
|
||||||
|
0 = max # of 1-3 neighbors
|
||||||
|
0 = max # of 1-4 neighbors
|
||||||
|
1 = max # of special neighbors
|
||||||
|
special bonds CPU = 0.000 seconds
|
||||||
|
read_data CPU = 0.001 seconds
|
||||||
|
|
||||||
|
neighbor 0.3 bin
|
||||||
|
neigh_modify every 1 delay 0 check yes
|
||||||
|
|
||||||
|
timestep 0.001
|
||||||
|
|
||||||
|
fix 1 all mdi/qm virial yes elements 92 8 connect no
|
||||||
|
|
||||||
|
thermo_style custom step temp pe etotal press
|
||||||
|
thermo 1
|
||||||
|
|
||||||
|
run 0
|
||||||
|
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
|
||||||
|
Neighbor list info ...
|
||||||
|
update every 1 steps, delay 0 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 0
|
||||||
|
ghost atom cutoff = 0
|
||||||
|
binsize = 10.8, bins = 1 1 1
|
||||||
|
0 neighbor lists, perpetual/occasional/extra = 0 0 0
|
||||||
|
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210)
|
||||||
|
Per MPI rank memory allocation (min/avg/max) = 5.238 | 5.238 | 5.238 Mbytes
|
||||||
|
Step Temp PotEng TotEng Press
|
||||||
|
0 0 -102.35713 -102.35713 -31036.168
|
||||||
|
Loop time of 1.466e-06 on 1 procs for 0 steps with 12 atoms
|
||||||
|
|
||||||
|
136.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 | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Bond | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Neigh | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Comm | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Output | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Modify | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Other | | 1.466e-06 | | |100.00
|
||||||
|
|
||||||
|
Nlocal: 12 ave 12 max 12 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Nghost: 5 ave 5 max 5 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 = 0
|
||||||
|
Ave neighs/atom = 0
|
||||||
|
Ave special neighs/atom = 0
|
||||||
|
Neighbor list builds = 0
|
||||||
|
Dangerous builds = 0
|
||||||
|
|
||||||
|
write_dump all custom dump.series.mpi.${files} id type x y z fx fy fz modify sort id
|
||||||
|
write_dump all custom dump.series.mpi.4uo2 id type x y z fx fy fz modify sort id
|
||||||
|
|
||||||
|
clear
|
||||||
|
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
|
||||||
|
using 1 OpenMP thread(s) per MPI task
|
||||||
|
|
||||||
|
next files
|
||||||
|
|
||||||
|
jump SELF LOOP
|
||||||
|
|
||||||
|
mdi exit
|
||||||
|
Total wall time: 0:00:02
|
||||||
263
examples/QM/LATTE/log.8Sep22.series.lammps.mpi.2
Normal file
263
examples/QM/LATTE/log.8Sep22.series.lammps.mpi.2
Normal file
@ -0,0 +1,263 @@
|
|||||||
|
LAMMPS (23 Jun 2022)
|
||||||
|
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
|
||||||
|
using 1 OpenMP thread(s) per MPI task
|
||||||
|
# Series of single-point calcs of 2,3,4 UO2 molecules
|
||||||
|
# with LATTE in MDI stand-alone mode
|
||||||
|
|
||||||
|
variable files index 2uo2 3uo2 4uo2
|
||||||
|
|
||||||
|
mdi connect
|
||||||
|
|
||||||
|
label LOOP
|
||||||
|
|
||||||
|
units metal
|
||||||
|
atom_style full
|
||||||
|
atom_modify sort 0 0.0
|
||||||
|
|
||||||
|
read_data ${files}.lmp
|
||||||
|
read_data 2uo2.lmp
|
||||||
|
Reading data file ...
|
||||||
|
triclinic box = (0 0 0) to (10.8 5.4 5.4) with tilt (3.3065464e-16 3.3065464e-16 3.3065464e-16)
|
||||||
|
2 by 1 by 1 MPI processor grid
|
||||||
|
reading atoms ...
|
||||||
|
6 atoms
|
||||||
|
Finding 1-2 1-3 1-4 neighbors ...
|
||||||
|
special bond factors lj: 0 0 0
|
||||||
|
special bond factors coul: 0 0 0
|
||||||
|
0 = max # of 1-2 neighbors
|
||||||
|
0 = max # of 1-3 neighbors
|
||||||
|
0 = max # of 1-4 neighbors
|
||||||
|
1 = max # of special neighbors
|
||||||
|
special bonds CPU = 0.000 seconds
|
||||||
|
read_data CPU = 0.004 seconds
|
||||||
|
|
||||||
|
neighbor 0.3 bin
|
||||||
|
neigh_modify every 1 delay 0 check yes
|
||||||
|
|
||||||
|
timestep 0.001
|
||||||
|
|
||||||
|
fix 1 all mdi/qm virial yes elements 92 8 connect no
|
||||||
|
|
||||||
|
thermo_style custom step temp pe etotal press
|
||||||
|
thermo 1
|
||||||
|
|
||||||
|
run 0
|
||||||
|
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
|
||||||
|
Neighbor list info ...
|
||||||
|
update every 1 steps, delay 0 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 0
|
||||||
|
ghost atom cutoff = 0
|
||||||
|
binsize = 10.8, bins = 1 1 1
|
||||||
|
0 neighbor lists, perpetual/occasional/extra = 0 0 0
|
||||||
|
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210)
|
||||||
|
Per MPI rank memory allocation (min/avg/max) = 5.234 | 5.236 | 5.238 Mbytes
|
||||||
|
Step Temp PotEng TotEng Press
|
||||||
|
0 0 -50.539035 -50.539035 -120855.2
|
||||||
|
Loop time of 1.956e-06 on 2 procs for 0 steps with 6 atoms
|
||||||
|
|
||||||
|
127.8% CPU use with 2 MPI tasks x 1 OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Bond | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Neigh | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Comm | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Output | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Modify | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Other | | 1.956e-06 | | |100.00
|
||||||
|
|
||||||
|
Nlocal: 3 ave 6 max 0 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 1
|
||||||
|
Nghost: 1 ave 2 max 0 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 1
|
||||||
|
Neighs: 0 ave 0 max 0 min
|
||||||
|
Histogram: 2 0 0 0 0 0 0 0 0 0
|
||||||
|
|
||||||
|
Total # of neighbors = 0
|
||||||
|
Ave neighs/atom = 0
|
||||||
|
Ave special neighs/atom = 0
|
||||||
|
Neighbor list builds = 0
|
||||||
|
Dangerous builds = 0
|
||||||
|
|
||||||
|
write_dump all custom dump.series.mpi.${files} id type x y z fx fy fz modify sort id
|
||||||
|
write_dump all custom dump.series.mpi.2uo2 id type x y z fx fy fz modify sort id
|
||||||
|
|
||||||
|
clear
|
||||||
|
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
|
||||||
|
using 1 OpenMP thread(s) per MPI task
|
||||||
|
|
||||||
|
next files
|
||||||
|
|
||||||
|
jump SELF LOOP
|
||||||
|
|
||||||
|
units metal
|
||||||
|
atom_style full
|
||||||
|
atom_modify sort 0 0.0
|
||||||
|
|
||||||
|
read_data ${files}.lmp
|
||||||
|
read_data 3uo2.lmp
|
||||||
|
Reading data file ...
|
||||||
|
triclinic box = (0 0 0) to (16.2 5.4 5.4) with tilt (3.3065464e-16 3.3065464e-16 3.3065464e-16)
|
||||||
|
2 by 1 by 1 MPI processor grid
|
||||||
|
reading atoms ...
|
||||||
|
9 atoms
|
||||||
|
Finding 1-2 1-3 1-4 neighbors ...
|
||||||
|
special bond factors lj: 0 0 0
|
||||||
|
special bond factors coul: 0 0 0
|
||||||
|
0 = max # of 1-2 neighbors
|
||||||
|
0 = max # of 1-3 neighbors
|
||||||
|
0 = max # of 1-4 neighbors
|
||||||
|
1 = max # of special neighbors
|
||||||
|
special bonds CPU = 0.000 seconds
|
||||||
|
read_data CPU = 0.001 seconds
|
||||||
|
|
||||||
|
neighbor 0.3 bin
|
||||||
|
neigh_modify every 1 delay 0 check yes
|
||||||
|
|
||||||
|
timestep 0.001
|
||||||
|
|
||||||
|
fix 1 all mdi/qm virial yes elements 92 8 connect no
|
||||||
|
|
||||||
|
thermo_style custom step temp pe etotal press
|
||||||
|
thermo 1
|
||||||
|
|
||||||
|
run 0
|
||||||
|
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
|
||||||
|
Neighbor list info ...
|
||||||
|
update every 1 steps, delay 0 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 0
|
||||||
|
ghost atom cutoff = 0
|
||||||
|
binsize = 16.2, bins = 1 1 1
|
||||||
|
0 neighbor lists, perpetual/occasional/extra = 0 0 0
|
||||||
|
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210)
|
||||||
|
Per MPI rank memory allocation (min/avg/max) = 5.234 | 5.236 | 5.238 Mbytes
|
||||||
|
Step Temp PotEng TotEng Press
|
||||||
|
0 0 -78.155679 -78.155679 -99931.431
|
||||||
|
Loop time of 2.375e-06 on 2 procs for 0 steps with 9 atoms
|
||||||
|
|
||||||
|
147.4% CPU use with 2 MPI tasks x 1 OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Bond | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Neigh | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Comm | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Output | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Modify | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Other | | 2.375e-06 | | |100.00
|
||||||
|
|
||||||
|
Nlocal: 4.5 ave 9 max 0 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 1
|
||||||
|
Nghost: 1.5 ave 3 max 0 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 1
|
||||||
|
Neighs: 0 ave 0 max 0 min
|
||||||
|
Histogram: 2 0 0 0 0 0 0 0 0 0
|
||||||
|
|
||||||
|
Total # of neighbors = 0
|
||||||
|
Ave neighs/atom = 0
|
||||||
|
Ave special neighs/atom = 0
|
||||||
|
Neighbor list builds = 0
|
||||||
|
Dangerous builds = 0
|
||||||
|
|
||||||
|
write_dump all custom dump.series.mpi.${files} id type x y z fx fy fz modify sort id
|
||||||
|
write_dump all custom dump.series.mpi.3uo2 id type x y z fx fy fz modify sort id
|
||||||
|
|
||||||
|
clear
|
||||||
|
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
|
||||||
|
using 1 OpenMP thread(s) per MPI task
|
||||||
|
|
||||||
|
next files
|
||||||
|
|
||||||
|
jump SELF LOOP
|
||||||
|
|
||||||
|
units metal
|
||||||
|
atom_style full
|
||||||
|
atom_modify sort 0 0.0
|
||||||
|
|
||||||
|
read_data ${files}.lmp
|
||||||
|
read_data 4uo2.lmp
|
||||||
|
Reading data file ...
|
||||||
|
triclinic box = (0 0 0) to (10.8 10.8 5.4) with tilt (6.6130927e-16 3.3065464e-16 3.3065464e-16)
|
||||||
|
1 by 2 by 1 MPI processor grid
|
||||||
|
reading atoms ...
|
||||||
|
12 atoms
|
||||||
|
Finding 1-2 1-3 1-4 neighbors ...
|
||||||
|
special bond factors lj: 0 0 0
|
||||||
|
special bond factors coul: 0 0 0
|
||||||
|
0 = max # of 1-2 neighbors
|
||||||
|
0 = max # of 1-3 neighbors
|
||||||
|
0 = max # of 1-4 neighbors
|
||||||
|
1 = max # of special neighbors
|
||||||
|
special bonds CPU = 0.000 seconds
|
||||||
|
read_data CPU = 0.002 seconds
|
||||||
|
|
||||||
|
neighbor 0.3 bin
|
||||||
|
neigh_modify every 1 delay 0 check yes
|
||||||
|
|
||||||
|
timestep 0.001
|
||||||
|
|
||||||
|
fix 1 all mdi/qm virial yes elements 92 8 connect no
|
||||||
|
|
||||||
|
thermo_style custom step temp pe etotal press
|
||||||
|
thermo 1
|
||||||
|
|
||||||
|
run 0
|
||||||
|
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
|
||||||
|
Neighbor list info ...
|
||||||
|
update every 1 steps, delay 0 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 0
|
||||||
|
ghost atom cutoff = 0
|
||||||
|
binsize = 10.8, bins = 1 1 1
|
||||||
|
0 neighbor lists, perpetual/occasional/extra = 0 0 0
|
||||||
|
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210)
|
||||||
|
Per MPI rank memory allocation (min/avg/max) = 5.238 | 5.238 | 5.238 Mbytes
|
||||||
|
Step Temp PotEng TotEng Press
|
||||||
|
0 0 -102.35713 -102.35713 -31036.168
|
||||||
|
Loop time of 2.4445e-06 on 2 procs for 0 steps with 12 atoms
|
||||||
|
|
||||||
|
122.7% CPU use with 2 MPI tasks x 1 OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Bond | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Neigh | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Comm | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Output | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Modify | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Other | | 2.444e-06 | | |100.00
|
||||||
|
|
||||||
|
Nlocal: 6 ave 6 max 6 min
|
||||||
|
Histogram: 2 0 0 0 0 0 0 0 0 0
|
||||||
|
Nghost: 2.5 ave 4 max 1 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 1
|
||||||
|
Neighs: 0 ave 0 max 0 min
|
||||||
|
Histogram: 2 0 0 0 0 0 0 0 0 0
|
||||||
|
|
||||||
|
Total # of neighbors = 0
|
||||||
|
Ave neighs/atom = 0
|
||||||
|
Ave special neighs/atom = 0
|
||||||
|
Neighbor list builds = 0
|
||||||
|
Dangerous builds = 0
|
||||||
|
|
||||||
|
write_dump all custom dump.series.mpi.${files} id type x y z fx fy fz modify sort id
|
||||||
|
write_dump all custom dump.series.mpi.4uo2 id type x y z fx fy fz modify sort id
|
||||||
|
|
||||||
|
clear
|
||||||
|
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
|
||||||
|
using 1 OpenMP thread(s) per MPI task
|
||||||
|
|
||||||
|
next files
|
||||||
|
|
||||||
|
jump SELF LOOP
|
||||||
|
|
||||||
|
mdi exit
|
||||||
|
Total wall time: 0:00:08
|
||||||
256
examples/QM/LATTE/log.8Sep22.series.lammps.plugin
Normal file
256
examples/QM/LATTE/log.8Sep22.series.lammps.plugin
Normal file
@ -0,0 +1,256 @@
|
|||||||
|
LAMMPS (23 Jun 2022)
|
||||||
|
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
|
||||||
|
using 1 OpenMP thread(s) per MPI task
|
||||||
|
# Series of single-point calcs of 2,3,4 UO2 molecules
|
||||||
|
# with LATTE in MDI plugin mode
|
||||||
|
|
||||||
|
variable files index 2uo2 3uo2 4uo2
|
||||||
|
|
||||||
|
label LOOP
|
||||||
|
|
||||||
|
units metal
|
||||||
|
atom_style full
|
||||||
|
atom_modify sort 0 0.0
|
||||||
|
|
||||||
|
read_data ${files}.lmp
|
||||||
|
read_data 2uo2.lmp
|
||||||
|
Reading data file ...
|
||||||
|
triclinic box = (0 0 0) to (10.8 5.4 5.4) with tilt (3.3065464e-16 3.3065464e-16 3.3065464e-16)
|
||||||
|
1 by 1 by 1 MPI processor grid
|
||||||
|
reading atoms ...
|
||||||
|
6 atoms
|
||||||
|
Finding 1-2 1-3 1-4 neighbors ...
|
||||||
|
special bond factors lj: 0 0 0
|
||||||
|
special bond factors coul: 0 0 0
|
||||||
|
0 = max # of 1-2 neighbors
|
||||||
|
0 = max # of 1-3 neighbors
|
||||||
|
0 = max # of 1-4 neighbors
|
||||||
|
1 = max # of special neighbors
|
||||||
|
special bonds CPU = 0.000 seconds
|
||||||
|
read_data CPU = 0.004 seconds
|
||||||
|
|
||||||
|
neighbor 0.3 bin
|
||||||
|
neigh_modify every 1 delay 0 check yes
|
||||||
|
|
||||||
|
fix 1 all mdi/qm virial yes elements 92 8
|
||||||
|
|
||||||
|
thermo_style custom step temp pe etotal press
|
||||||
|
thermo 1
|
||||||
|
|
||||||
|
mdi plugin latte_mdi mdi "-role ENGINE -name LATTE -method LINK" command "run 0"
|
||||||
|
run 0
|
||||||
|
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
|
||||||
|
Neighbor list info ...
|
||||||
|
update every 1 steps, delay 0 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 0
|
||||||
|
ghost atom cutoff = 0
|
||||||
|
binsize = 10.8, bins = 1 1 1
|
||||||
|
0 neighbor lists, perpetual/occasional/extra = 0 0 0
|
||||||
|
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210)
|
||||||
|
Per MPI rank memory allocation (min/avg/max) = 5.238 | 5.238 | 5.238 Mbytes
|
||||||
|
Step Temp PotEng TotEng Press
|
||||||
|
0 0 -50.539035 -50.539035 -120855.2
|
||||||
|
Loop time of 1.396e-06 on 1 procs for 0 steps with 6 atoms
|
||||||
|
|
||||||
|
143.3% CPU use with 1 MPI tasks x 1 OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Bond | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Neigh | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Comm | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Output | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Modify | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Other | | 1.396e-06 | | |100.00
|
||||||
|
|
||||||
|
Nlocal: 6 ave 6 max 6 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Nghost: 2 ave 2 max 2 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 = 0
|
||||||
|
Ave neighs/atom = 0
|
||||||
|
Ave special neighs/atom = 0
|
||||||
|
Neighbor list builds = 0
|
||||||
|
Dangerous builds = 0
|
||||||
|
|
||||||
|
write_dump all custom dump.series.plugin.${files} id type x y z fx fy fz modify sort id
|
||||||
|
write_dump all custom dump.series.plugin.2uo2 id type x y z fx fy fz modify sort id
|
||||||
|
|
||||||
|
clear
|
||||||
|
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
|
||||||
|
using 1 OpenMP thread(s) per MPI task
|
||||||
|
|
||||||
|
next files
|
||||||
|
|
||||||
|
jump SELF LOOP
|
||||||
|
|
||||||
|
units metal
|
||||||
|
atom_style full
|
||||||
|
atom_modify sort 0 0.0
|
||||||
|
|
||||||
|
read_data ${files}.lmp
|
||||||
|
read_data 3uo2.lmp
|
||||||
|
Reading data file ...
|
||||||
|
triclinic box = (0 0 0) to (16.2 5.4 5.4) with tilt (3.3065464e-16 3.3065464e-16 3.3065464e-16)
|
||||||
|
1 by 1 by 1 MPI processor grid
|
||||||
|
reading atoms ...
|
||||||
|
9 atoms
|
||||||
|
Finding 1-2 1-3 1-4 neighbors ...
|
||||||
|
special bond factors lj: 0 0 0
|
||||||
|
special bond factors coul: 0 0 0
|
||||||
|
0 = max # of 1-2 neighbors
|
||||||
|
0 = max # of 1-3 neighbors
|
||||||
|
0 = max # of 1-4 neighbors
|
||||||
|
1 = max # of special neighbors
|
||||||
|
special bonds CPU = 0.000 seconds
|
||||||
|
read_data CPU = 0.002 seconds
|
||||||
|
|
||||||
|
neighbor 0.3 bin
|
||||||
|
neigh_modify every 1 delay 0 check yes
|
||||||
|
|
||||||
|
fix 1 all mdi/qm virial yes elements 92 8
|
||||||
|
|
||||||
|
thermo_style custom step temp pe etotal press
|
||||||
|
thermo 1
|
||||||
|
|
||||||
|
mdi plugin latte_mdi mdi "-role ENGINE -name LATTE -method LINK" command "run 0"
|
||||||
|
run 0
|
||||||
|
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
|
||||||
|
Neighbor list info ...
|
||||||
|
update every 1 steps, delay 0 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 0
|
||||||
|
ghost atom cutoff = 0
|
||||||
|
binsize = 16.2, bins = 1 1 1
|
||||||
|
0 neighbor lists, perpetual/occasional/extra = 0 0 0
|
||||||
|
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210)
|
||||||
|
Per MPI rank memory allocation (min/avg/max) = 5.238 | 5.238 | 5.238 Mbytes
|
||||||
|
Step Temp PotEng TotEng Press
|
||||||
|
0 0 -78.155679 -78.155679 -99931.431
|
||||||
|
Loop time of 1.117e-06 on 1 procs for 0 steps with 9 atoms
|
||||||
|
|
||||||
|
89.5% CPU use with 1 MPI tasks x 1 OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Bond | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Neigh | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Comm | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Output | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Modify | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Other | | 1.117e-06 | | |100.00
|
||||||
|
|
||||||
|
Nlocal: 9 ave 9 max 9 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Nghost: 3 ave 3 max 3 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 = 0
|
||||||
|
Ave neighs/atom = 0
|
||||||
|
Ave special neighs/atom = 0
|
||||||
|
Neighbor list builds = 0
|
||||||
|
Dangerous builds = 0
|
||||||
|
|
||||||
|
write_dump all custom dump.series.plugin.${files} id type x y z fx fy fz modify sort id
|
||||||
|
write_dump all custom dump.series.plugin.3uo2 id type x y z fx fy fz modify sort id
|
||||||
|
|
||||||
|
clear
|
||||||
|
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
|
||||||
|
using 1 OpenMP thread(s) per MPI task
|
||||||
|
|
||||||
|
next files
|
||||||
|
|
||||||
|
jump SELF LOOP
|
||||||
|
|
||||||
|
units metal
|
||||||
|
atom_style full
|
||||||
|
atom_modify sort 0 0.0
|
||||||
|
|
||||||
|
read_data ${files}.lmp
|
||||||
|
read_data 4uo2.lmp
|
||||||
|
Reading data file ...
|
||||||
|
triclinic box = (0 0 0) to (10.8 10.8 5.4) with tilt (6.6130927e-16 3.3065464e-16 3.3065464e-16)
|
||||||
|
1 by 1 by 1 MPI processor grid
|
||||||
|
reading atoms ...
|
||||||
|
12 atoms
|
||||||
|
Finding 1-2 1-3 1-4 neighbors ...
|
||||||
|
special bond factors lj: 0 0 0
|
||||||
|
special bond factors coul: 0 0 0
|
||||||
|
0 = max # of 1-2 neighbors
|
||||||
|
0 = max # of 1-3 neighbors
|
||||||
|
0 = max # of 1-4 neighbors
|
||||||
|
1 = max # of special neighbors
|
||||||
|
special bonds CPU = 0.000 seconds
|
||||||
|
read_data CPU = 0.001 seconds
|
||||||
|
|
||||||
|
neighbor 0.3 bin
|
||||||
|
neigh_modify every 1 delay 0 check yes
|
||||||
|
|
||||||
|
fix 1 all mdi/qm virial yes elements 92 8
|
||||||
|
|
||||||
|
thermo_style custom step temp pe etotal press
|
||||||
|
thermo 1
|
||||||
|
|
||||||
|
mdi plugin latte_mdi mdi "-role ENGINE -name LATTE -method LINK" command "run 0"
|
||||||
|
run 0
|
||||||
|
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
|
||||||
|
Neighbor list info ...
|
||||||
|
update every 1 steps, delay 0 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 0
|
||||||
|
ghost atom cutoff = 0
|
||||||
|
binsize = 10.8, bins = 1 1 1
|
||||||
|
0 neighbor lists, perpetual/occasional/extra = 0 0 0
|
||||||
|
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:210)
|
||||||
|
Per MPI rank memory allocation (min/avg/max) = 5.238 | 5.238 | 5.238 Mbytes
|
||||||
|
Step Temp PotEng TotEng Press
|
||||||
|
0 0 -102.35713 -102.35713 -31036.168
|
||||||
|
Loop time of 1.048e-06 on 1 procs for 0 steps with 12 atoms
|
||||||
|
|
||||||
|
190.8% CPU use with 1 MPI tasks x 1 OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Bond | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Neigh | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Comm | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Output | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Modify | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Other | | 1.048e-06 | | |100.00
|
||||||
|
|
||||||
|
Nlocal: 12 ave 12 max 12 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Nghost: 5 ave 5 max 5 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 = 0
|
||||||
|
Ave neighs/atom = 0
|
||||||
|
Ave special neighs/atom = 0
|
||||||
|
Neighbor list builds = 0
|
||||||
|
Dangerous builds = 0
|
||||||
|
|
||||||
|
write_dump all custom dump.series.plugin.${files} id type x y z fx fy fz modify sort id
|
||||||
|
write_dump all custom dump.series.plugin.4uo2 id type x y z fx fy fz modify sort id
|
||||||
|
|
||||||
|
clear
|
||||||
|
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
|
||||||
|
using 1 OpenMP thread(s) per MPI task
|
||||||
|
|
||||||
|
next files
|
||||||
|
|
||||||
|
jump SELF LOOP
|
||||||
|
Total wall time: 0:00:01
|
||||||
3209
examples/QM/LATTE/log.8Sep22.series.latte.1
Normal file
3209
examples/QM/LATTE/log.8Sep22.series.latte.1
Normal file
File diff suppressed because it is too large
Load Diff
3209
examples/QM/LATTE/log.8Sep22.series.latte.2
Normal file
3209
examples/QM/LATTE/log.8Sep22.series.latte.2
Normal file
File diff suppressed because it is too large
Load Diff
178
examples/QM/LATTE/ppots.dftb
Normal file
178
examples/QM/LATTE/ppots.dftb
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
3
|
||||||
|
U O
|
||||||
|
101
|
||||||
|
1.0000000000000000 53.452052832272599
|
||||||
|
1.0520000000000000 48.423668742582244
|
||||||
|
1.1040000000000001 43.721445018814535
|
||||||
|
1.1560000000000001 39.334296276283553
|
||||||
|
1.2080000000000000 35.251137130303420
|
||||||
|
1.2600000000000000 31.460882196188166
|
||||||
|
1.3120000000000001 27.952446089251964
|
||||||
|
1.3639999999999999 24.714743424808852
|
||||||
|
1.4159999999999999 21.736688818172937
|
||||||
|
1.4680000000000000 19.007196884658306
|
||||||
|
1.5200000000000000 16.515182239579076
|
||||||
|
1.5720000000000001 14.249559498249329
|
||||||
|
1.6240000000000001 12.199243275983154
|
||||||
|
1.6760000000000002 10.353148188094648
|
||||||
|
1.7280000000000000 8.7001888498979163
|
||||||
|
1.7800000000000000 7.2292798767070447
|
||||||
|
1.8320000000000001 5.9293358838361092
|
||||||
|
1.8839999999999999 4.7892714865992376
|
||||||
|
1.9359999999999999 3.7980013003104953
|
||||||
|
1.9880000000000000 2.9444399402839894
|
||||||
|
2.0400000000000000 2.2175020218338095
|
||||||
|
2.0920000000000001 1.6061021602740548
|
||||||
|
2.1440000000000001 1.0991549709188142
|
||||||
|
2.1960000000000002 0.68557506908218180
|
||||||
|
2.2480000000000002 0.35427707007825704
|
||||||
|
2.2999999999999998 9.4175589221130632E-002
|
||||||
|
2.3520000000000003 -0.10581475817510910
|
||||||
|
2.4039999999999999 -0.25677935679635860
|
||||||
|
2.4560000000000000 -0.36980359132853102
|
||||||
|
2.5080000000000000 -0.45596679597127698
|
||||||
|
2.5600000000000001 -0.52381995798172376
|
||||||
|
2.6120000000000001 -0.57548542297431915
|
||||||
|
2.6640000000000001 -0.61207888691334400
|
||||||
|
2.7160000000000002 -0.63471604576307783
|
||||||
|
2.7679999999999998 -0.64451259548780349
|
||||||
|
2.8200000000000003 -0.64258423205180126
|
||||||
|
2.8719999999999999 -0.63004665141935134
|
||||||
|
2.9240000000000004 -0.60801554955473625
|
||||||
|
2.9760000000000000 -0.57760662242223493
|
||||||
|
3.0280000000000000 -0.53993556598613002
|
||||||
|
3.0800000000000001 -0.49611807621070214
|
||||||
|
3.1320000000000001 -0.44726984906023193
|
||||||
|
3.1840000000000002 -0.39450658049900023
|
||||||
|
3.2359999999999998 -0.33894396649128961
|
||||||
|
3.2880000000000003 -0.28169770300137842
|
||||||
|
3.3399999999999999 -0.22388348599354982
|
||||||
|
3.3920000000000003 -0.16661701143208349
|
||||||
|
3.4440000000000000 -0.11101397528126161
|
||||||
|
3.4960000000000004 -5.8190073505363524E-002
|
||||||
|
3.5480000000000000 -9.2610020686722198E-003
|
||||||
|
3.6000000000000001 3.4657543064533058E-002
|
||||||
|
3.6519999999999997 7.2695102245010301E-002
|
||||||
|
3.7040000000000002 0.10496216108368017
|
||||||
|
3.7560000000000002 0.13181444150650151
|
||||||
|
3.8080000000000003 0.15360766543943441
|
||||||
|
3.8599999999999999 0.17069755480843840
|
||||||
|
3.9119999999999999 0.18343983153947352
|
||||||
|
3.9640000000000004 0.19219021755849935
|
||||||
|
4.0160000000000000 0.19730443479147558
|
||||||
|
4.0679999999999996 0.19913820516436204
|
||||||
|
4.1200000000000001 0.19804725060311840
|
||||||
|
4.1719999999999997 0.19438729303370450
|
||||||
|
4.2240000000000002 0.18851405438207983
|
||||||
|
4.2759999999999998 0.18078325657420447
|
||||||
|
4.3280000000000003 0.17155062153603778
|
||||||
|
4.3799999999999999 0.16117187119353987
|
||||||
|
4.4320000000000004 0.15000272747267010
|
||||||
|
4.4840000000000000 0.13839891229938861
|
||||||
|
4.5359999999999996 0.12671614759965491
|
||||||
|
4.5880000000000001 0.11531015529942858
|
||||||
|
4.6400000000000006 0.10450791010072910
|
||||||
|
4.6920000000000002 9.4401608127654982E-002
|
||||||
|
4.7439999999999998 8.4968801575229971E-002
|
||||||
|
4.7960000000000003 7.6186266463431560E-002
|
||||||
|
4.8480000000000008 6.8030778812237541E-002
|
||||||
|
4.9000000000000004 6.0479114641625663E-002
|
||||||
|
4.9520000000000000 5.3508049971573365E-002
|
||||||
|
5.0040000000000004 4.7094360822058187E-002
|
||||||
|
5.0560000000000000 4.1214823213057958E-002
|
||||||
|
5.1080000000000005 3.5846213164550077E-002
|
||||||
|
5.1600000000000001 3.0965306696512353E-002
|
||||||
|
5.2119999999999997 2.6548879828922314E-002
|
||||||
|
5.2640000000000002 2.2573708581757501E-002
|
||||||
|
5.3159999999999998 1.9016568974995669E-002
|
||||||
|
5.3680000000000003 1.5854237028614312E-002
|
||||||
|
5.4199999999999999 1.3063488762591162E-002
|
||||||
|
5.4719999999999995 1.0621100196903764E-002
|
||||||
|
5.5240000000000000 8.5038473515297100E-003
|
||||||
|
5.5760000000000005 6.6885062464466568E-003
|
||||||
|
5.6280000000000001 5.1518529016322447E-003
|
||||||
|
5.6799999999999997 3.8706633370640541E-003
|
||||||
|
5.7320000000000002 2.8217135727196876E-003
|
||||||
|
5.7840000000000007 1.9817796285767830E-003
|
||||||
|
5.8360000000000003 1.3276375246129659E-003
|
||||||
|
5.8879999999999999 8.3606328080583568E-004
|
||||||
|
5.9400000000000004 4.8383291713300426E-004
|
||||||
|
5.9920000000000009 2.4772245357209625E-004
|
||||||
|
6.0440000000000005 1.0450791010072858E-004
|
||||||
|
6.0960000000000001 3.0965306696512431E-005
|
||||||
|
6.1480000000000006 3.8706633370639547E-006
|
||||||
|
6.2000000000000002 0.0000000000000000
|
||||||
|
O O
|
||||||
|
20
|
||||||
|
0.59999999999999998 29923.073152218909
|
||||||
|
0.70000000000000007 4662.8666204588562
|
||||||
|
0.80000000000000004 849.06541460837946
|
||||||
|
0.90000000000000002 174.94775568214448
|
||||||
|
1.0000000000000000 39.499570511324919
|
||||||
|
1.1000000000000001 9.4630438308109763
|
||||||
|
1.2000000000000002 2.3294935751104737
|
||||||
|
1.3000000000000003 0.57058726754144162
|
||||||
|
1.4000000000000001 0.13466360499250576
|
||||||
|
1.5000000000000002 2.9654028763683022E-002
|
||||||
|
1.6000000000000001 5.9001110666872716E-003
|
||||||
|
1.7000000000000002 1.0271110256853976E-003
|
||||||
|
1.8000000000000003 1.5149315970664778E-004
|
||||||
|
1.9000000000000001 1.8332630772941197E-005
|
||||||
|
2.0000000000000000 1.7625863466525047E-006
|
||||||
|
2.1000000000000001 1.3037897449239816E-007
|
||||||
|
2.2000000000000002 7.1851191723432173E-009
|
||||||
|
2.3000000000000003 2.8567178835137876E-010
|
||||||
|
2.4000000000000004 7.9349720447872060E-012
|
||||||
|
2.5000000000000004 1.4910967552225071E-013
|
||||||
|
U U
|
||||||
|
50
|
||||||
|
0.10000000000000001 74348.981230147430
|
||||||
|
0.20000000000000001 40311.628875481227
|
||||||
|
0.30000000000000004 22512.215747793147
|
||||||
|
0.40000000000000002 12931.185562052075
|
||||||
|
0.50000000000000000 7629.3983056130000
|
||||||
|
0.59999999999999998 4617.1471175675460
|
||||||
|
0.70000000000000007 2862.1227331610016
|
||||||
|
0.80000000000000004 1814.8199558215895
|
||||||
|
0.90000000000000002 1175.4637167411634
|
||||||
|
1.0000000000000000 776.63138285251296
|
||||||
|
1.1000000000000001 522.69735907852555
|
||||||
|
1.2000000000000002 357.86149706462436
|
||||||
|
1.3000000000000003 248.89064787141209
|
||||||
|
1.4000000000000001 175.60252392080037
|
||||||
|
1.5000000000000002 125.51081146835013
|
||||||
|
1.6000000000000001 90.752660563379663
|
||||||
|
1.7000000000000002 66.292603562046978
|
||||||
|
1.8000000000000003 48.853749739571974
|
||||||
|
1.9000000000000001 36.270829284225563
|
||||||
|
2.0000000000000000 27.092149160250134
|
||||||
|
2.1000000000000001 20.330846347361575
|
||||||
|
2.2000000000000002 15.307107145388191
|
||||||
|
2.3000000000000003 11.546652254529212
|
||||||
|
2.4000000000000004 8.7145303726582952
|
||||||
|
2.5000000000000004 6.5713781993663156
|
||||||
|
2.6000000000000001 4.9441671799982290
|
||||||
|
2.7000000000000002 3.7064118746112378
|
||||||
|
2.8000000000000003 2.7646343058611356
|
||||||
|
2.9000000000000004 2.0490135318783476
|
||||||
|
3.0000000000000004 1.5068662861359490
|
||||||
|
3.1000000000000001 1.0980623443850352
|
||||||
|
3.2000000000000002 0.79177413418881881
|
||||||
|
3.3000000000000003 0.56415350027012756
|
||||||
|
3.4000000000000004 0.39665649152896415
|
||||||
|
3.5000000000000004 0.27482281511443302
|
||||||
|
3.6000000000000001 0.18737497023545538
|
||||||
|
3.7000000000000002 0.12554244470464804
|
||||||
|
3.8000000000000003 8.2544745767756542E-002
|
||||||
|
3.9000000000000004 5.3187278866042048E-002
|
||||||
|
4.0000000000000000 3.3538623216095062E-002
|
||||||
|
4.0999999999999996 2.0668142493140005E-002
|
||||||
|
4.2000000000000002 1.2430141080200409E-002
|
||||||
|
4.2999999999999998 7.2856566327403139E-003
|
||||||
|
4.3999999999999995 4.1560332011683883E-003
|
||||||
|
4.5000000000000000 2.3041281035584126E-003
|
||||||
|
4.5999999999999996 1.2397986929553748E-003
|
||||||
|
4.7000000000000002 6.4656516755885957E-004
|
||||||
|
4.7999999999999998 3.2635453161844339E-004
|
||||||
|
4.9000000000000004 1.5921458192287997E-004
|
||||||
|
5.0000000000000000 7.4970692168027886E-005
|
||||||
21
examples/QM/README
Normal file
21
examples/QM/README
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
Each of the directories shows how to use LAMMPS in tandem with a
|
||||||
|
specific quantum code
|
||||||
|
|
||||||
|
LATTE = semi-empirical tight-binding code from LANL
|
||||||
|
https://www.osti.gov/biblio/1526907-los-alamos-transferable-tight-binding-energetics-latte-version
|
||||||
|
https://github.com/lanl/LATTE
|
||||||
|
|
||||||
|
To be added later (as of Aug 2022):
|
||||||
|
|
||||||
|
Quantum Espresso (QE) = DFT code for materials modeling
|
||||||
|
https://www.quantum-espresso.org/
|
||||||
|
|
||||||
|
DFT-FE = real-space DFT code from U Michigan
|
||||||
|
https://github.com/dftfeDevelopers/dftfe
|
||||||
|
|
||||||
|
INQ = DFT code from LLNL
|
||||||
|
https://github.com/LLNL/inq
|
||||||
|
|
||||||
|
NWChem = computational chemistry code from PNNL
|
||||||
|
focus here is on DFT portion of NWChem
|
||||||
|
https://www.nwchem-sw.org
|
||||||
@ -189,6 +189,9 @@ corresponding doc page in the manual for more info. See the
|
|||||||
https://docs.lammps.org/Build_package.html page for more info about
|
https://docs.lammps.org/Build_package.html page for more info about
|
||||||
installing and building packages.
|
installing and building packages.
|
||||||
|
|
||||||
|
The QM directory has examples of how to use LAMMPS in tandem with
|
||||||
|
several quantum codes.
|
||||||
|
|
||||||
The TIP4P directory has an example for testing forces computed on a
|
The TIP4P directory has an example for testing forces computed on a
|
||||||
GPU.
|
GPU.
|
||||||
|
|
||||||
|
|||||||
@ -2,15 +2,17 @@ These are examples that work the MDI package in LAMMPS which uses the
|
|||||||
MolSSI MDI library for coupling codes together and communicating
|
MolSSI MDI library for coupling codes together and communicating
|
||||||
between them with MDI messages.
|
between them with MDI messages.
|
||||||
|
|
||||||
Within the MDI context, one code is the driver and another code is
|
There are more examples of using LAMMPS with quantum codes via MDI in
|
||||||
the engine. The 2 codes can be written in any language; C++ (LAMMPS)
|
the examples/QM directory.
|
||||||
and Python are illustrated here. The 2 codes can each be stand-alone
|
|
||||||
codes, in which case they can be run on different numbers of processors.
|
Within the MDI context, one code is the driver and another code is the
|
||||||
The 2
|
engine. The 2 codes can be written in any language; C++ (LAMMPS) and
|
||||||
codes can communicate either via TCP (sockets) or via MPI. For the
|
Python are illustrated here. The 2 codes can each be stand-alone
|
||||||
TCP case, the driver and engine need to be launched separately,
|
codes, in which case they can be run on different numbers of
|
||||||
e.g. in 2 windows on your desktop machine. For the MPI case, a single
|
processors. The 2 codes can communicate either via TCP (sockets) or
|
||||||
mpirun command launches both codes.
|
via MPI. For the TCP case, the driver and engine need to be launched
|
||||||
|
separately, e.g. in 2 windows on your desktop machine. For the MPI
|
||||||
|
case, a single mpirun command launches both codes.
|
||||||
|
|
||||||
Alternatively the engine code can be a plugin library which the driver
|
Alternatively the engine code can be a plugin library which the driver
|
||||||
code loads, in which case the driver and engine run on the same
|
code loads, in which case the driver and engine run on the same
|
||||||
@ -19,17 +21,39 @@ processors.
|
|||||||
LAMMPS supports operating in all these MDI modes. It can be an engine
|
LAMMPS supports operating in all these MDI modes. It can be an engine
|
||||||
operating either as a stand-alone code or as a plugin. It can also be
|
operating either as a stand-alone code or as a plugin. It can also be
|
||||||
a driver and couple to an engine that is either a stand-alone code or
|
a driver and couple to an engine that is either a stand-alone code or
|
||||||
a plugin. Examples for all these use cases are in this directory.
|
a plugin.
|
||||||
The Run.sh file shows how run in all the modes. Type "sh Run.sh"
|
|
||||||
to try them all out.
|
|
||||||
|
|
||||||
To use LAMMPS as a plugin engine, you must build it as a shared
|
Examples for all these use cases, using LAMMPS as a driver and as an
|
||||||
library. Something like this with make, which also builds the normal
|
engine are in this directory. The Run.sh file shows how run in all
|
||||||
LAMMPS executable lmp_mpi:
|
the modes. Type "sh Run.sh" to try them all out.
|
||||||
|
|
||||||
cd src
|
Examples for using LAMMPS as a driver with the tight-binding code
|
||||||
make yes-mdi
|
LATTE are in the examples/QM/LATTE sub-directory. See its README file
|
||||||
make mode=shlib mpi
|
for more info.
|
||||||
|
|
||||||
|
-------------------------------------------------
|
||||||
|
|
||||||
|
Here is how to build LAMMPS with MDI support. Both as an executable
|
||||||
|
and a shared library. The former is needed to use LAMMPS as an MDI
|
||||||
|
driver or as an MDI engine in stand-alone mode. The latter is needed
|
||||||
|
to use LAMMPS as an MDI engine in plugin mode.
|
||||||
|
|
||||||
|
Build via regular make:
|
||||||
|
|
||||||
|
% cd lammps/src
|
||||||
|
% make lib-mdi args="-m mpi" # download, install MDI in lib/mdi w/ MPI support
|
||||||
|
% make yes-mdi # include MDI package in LAMMPS build
|
||||||
|
% make mode=shlib mpi # creates lmp_mpi and liblammps.so
|
||||||
|
|
||||||
|
Build via CMake:
|
||||||
|
|
||||||
|
cd lammps
|
||||||
|
mkdir build; cd build
|
||||||
|
cmake -D PKG_MDI=yes -D BUILD_SHARED_LIBS=yes ../cmake
|
||||||
|
make # creates lmp and liblammps.so
|
||||||
|
|
||||||
|
Both of these build procedures build LAMMPS both as an executable
|
||||||
|
(lmp_mpi) and as a shared library (liblammps.so).
|
||||||
|
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
|
|
||||||
@ -39,9 +63,9 @@ Python/mpi4py are using same the same version of MPI.
|
|||||||
|
|
||||||
You will also need MDI installed in your Python. You cannot use the
|
You will also need MDI installed in your Python. You cannot use the
|
||||||
LAMMPS build of the MDI library for this, b/c LAMMPS builds MDI as a
|
LAMMPS build of the MDI library for this, b/c LAMMPS builds MDI as a
|
||||||
static library, not shared, which Python requires.
|
static library, while Python requires a shared library.
|
||||||
|
|
||||||
You can install MDI in your Python via conda:
|
Instead you can install MDI in your Python via conda:
|
||||||
|
|
||||||
% conda install -c conda-forge pymdi=1.4.1
|
% conda install -c conda-forge pymdi=1.4.1
|
||||||
|
|
||||||
|
|||||||
@ -316,6 +316,9 @@ class UCL_Device {
|
|||||||
std::vector<CUstream> _cq;
|
std::vector<CUstream> _cq;
|
||||||
CUdevice _cu_device;
|
CUdevice _cu_device;
|
||||||
CUcontext _context;
|
CUcontext _context;
|
||||||
|
#if GERYON_NVD_PRIMARY_CONTEXT
|
||||||
|
CUcontext _old_context;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
// Grabs the properties for all devices
|
// Grabs the properties for all devices
|
||||||
@ -391,8 +394,14 @@ int UCL_Device::set_platform(const int pid) {
|
|||||||
int UCL_Device::set(int num) {
|
int UCL_Device::set(int num) {
|
||||||
clear();
|
clear();
|
||||||
_device=_properties[num].device_id;
|
_device=_properties[num].device_id;
|
||||||
|
#if GERYON_NVD_PRIMARY_CONTEXT
|
||||||
|
CU_SAFE_CALL_NS(cuCtxGetCurrent(&_old_context));
|
||||||
|
CU_SAFE_CALL_NS(cuDeviceGet(&_cu_device,_device));
|
||||||
|
CUresult err=cuDevicePrimaryCtxRetain(&_context,_cu_device);
|
||||||
|
#else
|
||||||
CU_SAFE_CALL_NS(cuDeviceGet(&_cu_device,_device));
|
CU_SAFE_CALL_NS(cuDeviceGet(&_cu_device,_device));
|
||||||
CUresult err=cuCtxCreate(&_context,0,_cu_device);
|
CUresult err=cuCtxCreate(&_context,0,_cu_device);
|
||||||
|
#endif
|
||||||
if (err!=CUDA_SUCCESS) {
|
if (err!=CUDA_SUCCESS) {
|
||||||
#ifndef UCL_NO_EXIT
|
#ifndef UCL_NO_EXIT
|
||||||
std::cerr << "UCL Error: Could not access accelerator number " << num
|
std::cerr << "UCL Error: Could not access accelerator number " << num
|
||||||
@ -401,13 +410,23 @@ int UCL_Device::set(int num) {
|
|||||||
#endif
|
#endif
|
||||||
return UCL_ERROR;
|
return UCL_ERROR;
|
||||||
}
|
}
|
||||||
|
#if GERYON_NVD_PRIMARY_CONTEXT
|
||||||
|
if (_context != _old_context) {
|
||||||
|
CU_SAFE_CALL_NS(cuCtxSetCurrent(_context));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
return UCL_SUCCESS;
|
return UCL_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UCL_Device::clear() {
|
void UCL_Device::clear() {
|
||||||
if (_device>-1) {
|
if (_device>-1) {
|
||||||
for (int i=1; i<num_queues(); i++) pop_command_queue();
|
for (int i=1; i<num_queues(); i++) pop_command_queue();
|
||||||
cuCtxDestroy(_context);
|
#if GERYON_NVD_PRIMARY_CONTEXT
|
||||||
|
CU_SAFE_CALL_NS(cuCtxSetCurrent(_old_context));
|
||||||
|
CU_SAFE_CALL_NS(cuDevicePrimaryCtxRelease(_cu_device));
|
||||||
|
#else
|
||||||
|
cuCtxDestroy(_context));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
_device=-1;
|
_device=-1;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,6 +7,13 @@
|
|||||||
|
|
||||||
#define CUDA_INT_TYPE size_t
|
#define CUDA_INT_TYPE size_t
|
||||||
|
|
||||||
|
// Use the primary context for GPU access to enable compatibility with tools
|
||||||
|
// like OpenMPI accessing the GPU through the runtime interface.
|
||||||
|
// Set to 0 to revert to old behavior
|
||||||
|
#ifndef GERYON_NVD_PRIMARY_CONTEXT
|
||||||
|
#define GERYON_NVD_PRIMARY_CONTEXT 1
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef MPI_GERYON
|
#ifdef MPI_GERYON
|
||||||
#include "mpi.h"
|
#include "mpi.h"
|
||||||
#define NVD_GERYON_EXIT do { \
|
#define NVD_GERYON_EXIT do { \
|
||||||
|
|||||||
@ -27,19 +27,17 @@ specify -m and optionally -e, order does not matter
|
|||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
make lib-poems args="-m serial" # build POEMS lib with same settings as in the serial Makefile in src
|
make lib-mdi args="-m mpi" # build MDI lib with same settings as in the mpi Makefile in src
|
||||||
make lib-colvars args="-m mpi" # build COLVARS lib with same settings as in the mpi Makefile in src
|
|
||||||
make lib-meam args="-m ifort" # build MEAM lib with custom Makefile.ifort (using Intel Fortran)
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# settings
|
# settings
|
||||||
|
|
||||||
version = "1.4.1"
|
version = "1.4.10"
|
||||||
url = "https://github.com/MolSSI-MDI/MDI_Library/archive/v%s.tar.gz" % version
|
url = "https://github.com/MolSSI-MDI/MDI_Library/archive/v%s.tar.gz" % version
|
||||||
|
|
||||||
# known checksums for different MDI versions. used to validate the download.
|
# known checksums for different MDI versions. used to validate the download.
|
||||||
checksums = { \
|
checksums = { \
|
||||||
'1.4.1' : 'f9505fccd4c79301a619f6452dad4ad9', \
|
'1.4.10' : '1c203b7fd462d9934834f643f09f3c06', \
|
||||||
}
|
}
|
||||||
|
|
||||||
# print error message or help
|
# print error message or help
|
||||||
|
|||||||
@ -15,6 +15,10 @@
|
|||||||
|
|
||||||
#include "atom.h"
|
#include "atom.h"
|
||||||
#include "citeme.h"
|
#include "citeme.h"
|
||||||
|
#include "error.h"
|
||||||
|
#include "force.h"
|
||||||
|
#include "pair.h"
|
||||||
|
#include "pair_hybrid.h"
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
@ -87,6 +91,42 @@ AtomVecDielectric::AtomVecDielectric(LAMMPS *_lmp) : AtomVec(_lmp)
|
|||||||
bond_per_atom = angle_per_atom = dihedral_per_atom = improper_per_atom = 0;
|
bond_per_atom = angle_per_atom = dihedral_per_atom = improper_per_atom = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void AtomVecDielectric::init()
|
||||||
|
{
|
||||||
|
AtomVec::init();
|
||||||
|
|
||||||
|
// since atom style dielectric modifies the charge q, it will produce incorrect results
|
||||||
|
// with pair styles using coulomb without dielectric support.
|
||||||
|
|
||||||
|
std::string pair_style(force->pair_style);
|
||||||
|
if ((pair_style != "none") && (pair_style != "zero") && !utils::strmatch(force->pair_style,"/dielectric")) {
|
||||||
|
bool mismatch = false;
|
||||||
|
if (utils::strmatch(force->pair_style,"^reaxff")) mismatch = true;
|
||||||
|
if (utils::strmatch(force->pair_style,"^comb")) mismatch = true;
|
||||||
|
if (utils::strmatch(force->pair_style,"coul")) mismatch = true;
|
||||||
|
if (utils::strmatch(force->pair_style,"tip4p")) mismatch = true;
|
||||||
|
if (utils::strmatch(force->pair_style,"dipole")) mismatch = true;
|
||||||
|
|
||||||
|
if (utils::strmatch(force->pair_style,"^hybrid")) {
|
||||||
|
auto hybrid = dynamic_cast<PairHybrid *>(force->pair);
|
||||||
|
if (hybrid) {
|
||||||
|
for (int i = 0; i < hybrid->nstyles; i++) {
|
||||||
|
if (utils::strmatch(hybrid->keywords[i],"^reaxff")) mismatch = true;
|
||||||
|
if (utils::strmatch(hybrid->keywords[i],"^comb")) mismatch = true;
|
||||||
|
if (utils::strmatch(hybrid->keywords[i],"coul")) mismatch = true;
|
||||||
|
if (utils::strmatch(hybrid->keywords[i],"tip4p")) mismatch = true;
|
||||||
|
if (utils::strmatch(hybrid->keywords[i],"dipole")) mismatch = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (mismatch)
|
||||||
|
error->all(FLERR, "Pair style {} is not compatible with atom style {}",
|
||||||
|
pair_style, atom->get_style());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
set local copies of all grow ptrs used by this class, except defaults
|
set local copies of all grow ptrs used by this class, except defaults
|
||||||
needed in replicate when 2 atom classes exist and it calls pack_restart()
|
needed in replicate when 2 atom classes exist and it calls pack_restart()
|
||||||
|
|||||||
@ -31,6 +31,7 @@ class AtomVecDielectric : public AtomVec {
|
|||||||
public:
|
public:
|
||||||
AtomVecDielectric(class LAMMPS *);
|
AtomVecDielectric(class LAMMPS *);
|
||||||
|
|
||||||
|
void init() override;
|
||||||
void grow_pointers() override;
|
void grow_pointers() override;
|
||||||
void create_atom_post(int) override;
|
void create_atom_post(int) override;
|
||||||
void data_atom_post(int) override;
|
void data_atom_post(int) override;
|
||||||
|
|||||||
@ -38,6 +38,7 @@ static constexpr double EPSILON = 1.0e-6;
|
|||||||
PairCoulCutDielectric::PairCoulCutDielectric(LAMMPS *_lmp) : PairCoulCut(_lmp), efield(nullptr)
|
PairCoulCutDielectric::PairCoulCutDielectric(LAMMPS *_lmp) : PairCoulCut(_lmp), efield(nullptr)
|
||||||
{
|
{
|
||||||
nmax = 0;
|
nmax = 0;
|
||||||
|
no_virial_fdotr_compute = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|||||||
@ -41,6 +41,7 @@ PairCoulLongDielectric::PairCoulLongDielectric(LAMMPS *_lmp) :
|
|||||||
{
|
{
|
||||||
nmax = 0;
|
nmax = 0;
|
||||||
single_enable = 0;
|
single_enable = 0;
|
||||||
|
no_virial_fdotr_compute = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|||||||
@ -40,6 +40,7 @@ PairLJCutCoulCutDielectric::PairLJCutCoulCutDielectric(LAMMPS *_lmp) : PairLJCut
|
|||||||
efield = nullptr;
|
efield = nullptr;
|
||||||
epot = nullptr;
|
epot = nullptr;
|
||||||
nmax = 0;
|
nmax = 0;
|
||||||
|
no_virial_fdotr_compute = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -93,15 +94,16 @@ void PairLJCutCoulCutDielectric::compute(int eflag, int vflag)
|
|||||||
for (ii = 0; ii < inum; ii++) {
|
for (ii = 0; ii < inum; ii++) {
|
||||||
i = ilist[ii];
|
i = ilist[ii];
|
||||||
qtmp = q[i];
|
qtmp = q[i];
|
||||||
|
etmp = eps[i];
|
||||||
xtmp = x[i][0];
|
xtmp = x[i][0];
|
||||||
ytmp = x[i][1];
|
ytmp = x[i][1];
|
||||||
ztmp = x[i][2];
|
ztmp = x[i][2];
|
||||||
etmp = eps[i];
|
|
||||||
itype = type[i];
|
itype = type[i];
|
||||||
jlist = firstneigh[i];
|
jlist = firstneigh[i];
|
||||||
jnum = numneigh[i];
|
jnum = numneigh[i];
|
||||||
|
|
||||||
// self term Eq. (55) for I_{ii} and Eq. (52) and in Barros et al
|
// self term Eq. (55) for I_{ii} and Eq. (52) and in Barros et al
|
||||||
|
|
||||||
double curvature_threshold = sqrt(area[i]);
|
double curvature_threshold = sqrt(area[i]);
|
||||||
if (curvature[i] < curvature_threshold) {
|
if (curvature[i] < curvature_threshold) {
|
||||||
double sf = curvature[i] / (4.0 * MY_PIS * curvature_threshold) * area[i] * q[i];
|
double sf = curvature[i] / (4.0 * MY_PIS * curvature_threshold) * area[i] * q[i];
|
||||||
|
|||||||
@ -40,6 +40,7 @@ PairLJCutCoulDebyeDielectric::PairLJCutCoulDebyeDielectric(LAMMPS *_lmp) : PairL
|
|||||||
efield = nullptr;
|
efield = nullptr;
|
||||||
epot = nullptr;
|
epot = nullptr;
|
||||||
nmax = 0;
|
nmax = 0;
|
||||||
|
no_virial_fdotr_compute = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|||||||
@ -45,6 +45,7 @@ PairLJCutCoulLongDielectric::PairLJCutCoulLongDielectric(LAMMPS *_lmp) : PairLJC
|
|||||||
efield = nullptr;
|
efield = nullptr;
|
||||||
epot = nullptr;
|
epot = nullptr;
|
||||||
nmax = 0;
|
nmax = 0;
|
||||||
|
no_virial_fdotr_compute = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|||||||
@ -47,6 +47,7 @@ PairLJCutCoulMSMDielectric::PairLJCutCoulMSMDielectric(LAMMPS *_lmp) : PairLJCut
|
|||||||
nmax = 0;
|
nmax = 0;
|
||||||
ftmp = nullptr;
|
ftmp = nullptr;
|
||||||
efield = nullptr;
|
efield = nullptr;
|
||||||
|
no_virial_fdotr_compute = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|||||||
@ -45,6 +45,7 @@ PairLJLongCoulLongDielectric::PairLJLongCoulLongDielectric(LAMMPS *_lmp) : PairL
|
|||||||
efield = nullptr;
|
efield = nullptr;
|
||||||
epot = nullptr;
|
epot = nullptr;
|
||||||
nmax = 0;
|
nmax = 0;
|
||||||
|
no_virial_fdotr_compute = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
|
|||||||
@ -33,8 +33,7 @@ FixMDIQM::FixMDIQM(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg)
|
|||||||
{
|
{
|
||||||
// check requirements for LAMMPS to work with MDI as an engine
|
// check requirements for LAMMPS to work with MDI as an engine
|
||||||
|
|
||||||
if (atom->tag_enable == 0)
|
if (atom->tag_enable == 0) error->all(FLERR, "Cannot use MDI engine without atom IDs");
|
||||||
error->all(FLERR, "Cannot use MDI engine without atom IDs");
|
|
||||||
if (atom->natoms && atom->tag_consecutive() == 0)
|
if (atom->natoms && atom->tag_consecutive() == 0)
|
||||||
error->all(FLERR, "MDI engine requires consecutive atom IDs");
|
error->all(FLERR, "MDI engine requires consecutive atom IDs");
|
||||||
|
|
||||||
@ -57,15 +56,21 @@ FixMDIQM::FixMDIQM(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg)
|
|||||||
while (iarg < narg) {
|
while (iarg < narg) {
|
||||||
if (strcmp(arg[iarg], "virial") == 0) {
|
if (strcmp(arg[iarg], "virial") == 0) {
|
||||||
if (iarg + 2 > narg) error->all(FLERR, "Illegal fix mdi/qm command");
|
if (iarg + 2 > narg) error->all(FLERR, "Illegal fix mdi/qm command");
|
||||||
if (strcmp(arg[iarg+1],"yes") == 0) virialflag = 1;
|
if (strcmp(arg[iarg + 1], "yes") == 0)
|
||||||
else if (strcmp(arg[iarg+1],"no") == 0) virialflag = 0;
|
virialflag = 1;
|
||||||
else error->all(FLERR,"Illegal fix mdi/qm command");
|
else if (strcmp(arg[iarg + 1], "no") == 0)
|
||||||
|
virialflag = 0;
|
||||||
|
else
|
||||||
|
error->all(FLERR, "Illegal fix mdi/qm command");
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
} else if (strcmp(arg[iarg], "add") == 0) {
|
} else if (strcmp(arg[iarg], "add") == 0) {
|
||||||
if (iarg + 2 > narg) error->all(FLERR, "Illegal fix mdi/qm command");
|
if (iarg + 2 > narg) error->all(FLERR, "Illegal fix mdi/qm command");
|
||||||
if (strcmp(arg[iarg+1],"yes") == 0) addflag = 1;
|
if (strcmp(arg[iarg + 1], "yes") == 0)
|
||||||
else if (strcmp(arg[iarg+1],"no") == 0) addflag = 0;
|
addflag = 1;
|
||||||
else error->all(FLERR,"Illegal fix mdi/qm command");
|
else if (strcmp(arg[iarg + 1], "no") == 0)
|
||||||
|
addflag = 0;
|
||||||
|
else
|
||||||
|
error->all(FLERR, "Illegal fix mdi/qm command");
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
} else if (strcmp(arg[iarg], "every") == 0) {
|
} else if (strcmp(arg[iarg], "every") == 0) {
|
||||||
if (iarg + 2 > narg) error->all(FLERR, "Illegal fix mdi/qm command");
|
if (iarg + 2 > narg) error->all(FLERR, "Illegal fix mdi/qm command");
|
||||||
@ -74,9 +79,12 @@ FixMDIQM::FixMDIQM(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg)
|
|||||||
iarg += 2;
|
iarg += 2;
|
||||||
} else if (strcmp(arg[iarg], "connect") == 0) {
|
} else if (strcmp(arg[iarg], "connect") == 0) {
|
||||||
if (iarg + 2 > narg) error->all(FLERR, "Illegal fix mdi/qm command");
|
if (iarg + 2 > narg) error->all(FLERR, "Illegal fix mdi/qm command");
|
||||||
if (strcmp(arg[iarg+1],"yes") == 0) connectflag = 1;
|
if (strcmp(arg[iarg + 1], "yes") == 0)
|
||||||
else if (strcmp(arg[iarg+1],"no") == 0) connectflag = 0;
|
connectflag = 1;
|
||||||
else error->all(FLERR,"Illegal fix mdi/qm command");
|
else if (strcmp(arg[iarg + 1], "no") == 0)
|
||||||
|
connectflag = 0;
|
||||||
|
else
|
||||||
|
error->all(FLERR, "Illegal fix mdi/qm command");
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
} else if (strcmp(arg[iarg], "elements") == 0) {
|
} else if (strcmp(arg[iarg], "elements") == 0) {
|
||||||
int ntypes = atom->ntypes;
|
int ntypes = atom->ntypes;
|
||||||
@ -89,7 +97,8 @@ FixMDIQM::FixMDIQM(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg)
|
|||||||
error->all(FLERR, "Illegal fix mdi/qm command");
|
error->all(FLERR, "Illegal fix mdi/qm command");
|
||||||
}
|
}
|
||||||
iarg += ntypes + 1;
|
iarg += ntypes + 1;
|
||||||
} else error->all(FLERR,"Illegal fix mdi/qm command");
|
} else
|
||||||
|
error->all(FLERR, "Illegal fix mdi/qm command");
|
||||||
}
|
}
|
||||||
|
|
||||||
// fix output settings are based on optional keywords
|
// fix output settings are based on optional keywords
|
||||||
@ -217,8 +226,7 @@ void FixMDIQM::init()
|
|||||||
plugin = 1;
|
plugin = 1;
|
||||||
int method;
|
int method;
|
||||||
MDI_Get_method(&method, mdicomm);
|
MDI_Get_method(&method, mdicomm);
|
||||||
if (method != MDI_PLUGIN)
|
if (method != MDI_PLUGIN) error->all(FLERR, "MDI internal error for plugin engine");
|
||||||
error->all(FLERR, "MDI internal error for plugin engine");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// connection should have been already made by "mdi connect" command
|
// connection should have been already made by "mdi connect" command
|
||||||
@ -237,6 +245,7 @@ void FixMDIQM::init()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// send natoms, atom types or elements, and simulation box to engine
|
// send natoms, atom types or elements, and simulation box to engine
|
||||||
|
// confirm engine count of NATOMS is correct
|
||||||
// this will trigger setup of a new system
|
// this will trigger setup of a new system
|
||||||
// subsequent calls in post_force() will be for same system until new init()
|
// subsequent calls in post_force() will be for same system until new init()
|
||||||
|
|
||||||
@ -245,36 +254,41 @@ void FixMDIQM::init()
|
|||||||
int natoms_exists;
|
int natoms_exists;
|
||||||
int ierr = MDI_Check_command_exists("@DEFAULT", ">NATOMS", mdicomm, &natoms_exists);
|
int ierr = MDI_Check_command_exists("@DEFAULT", ">NATOMS", mdicomm, &natoms_exists);
|
||||||
if (ierr) error->all(FLERR, "MDI: >NATOMS command check");
|
if (ierr) error->all(FLERR, "MDI: >NATOMS command check");
|
||||||
if ( natoms_exists ) {
|
MPI_Bcast(&natoms_exists, 1, MPI_INT, 0, world);
|
||||||
|
|
||||||
|
if (natoms_exists) {
|
||||||
ierr = MDI_Send_command(">NATOMS", mdicomm);
|
ierr = MDI_Send_command(">NATOMS", mdicomm);
|
||||||
if (ierr) error->all(FLERR, "MDI: >NATOMS command");
|
if (ierr) error->all(FLERR, "MDI: >NATOMS command");
|
||||||
int n = static_cast<int>(atom->natoms);
|
int n = static_cast<int>(atom->natoms);
|
||||||
ierr = MDI_Send(&n, 1, MDI_INT, mdicomm);
|
ierr = MDI_Send(&n, 1, MDI_INT, mdicomm);
|
||||||
if (ierr) error->all(FLERR, "MDI: >NATOMS data");
|
if (ierr) error->all(FLERR, "MDI: >NATOMS data");
|
||||||
|
|
||||||
} else { // confirm that the engine's NATOMS is correct
|
} else {
|
||||||
|
|
||||||
ierr = MDI_Send_command("<NATOMS", mdicomm);
|
ierr = MDI_Send_command("<NATOMS", mdicomm);
|
||||||
if (ierr) error->all(FLERR, "MDI: <NATOMS command");
|
if (ierr) error->all(FLERR, "MDI: <NATOMS command");
|
||||||
int n;
|
int n;
|
||||||
ierr = MDI_Recv(&n, 1, MDI_INT, mdicomm);
|
ierr = MDI_Recv(&n, 1, MDI_INT, mdicomm);
|
||||||
if (ierr) error->all(FLERR, "MDI: <NATOMS data");
|
if (ierr) error->all(FLERR, "MDI: <NATOMS data");
|
||||||
if ( n != atom->natoms ) error->all(FLERR, "MDI: Engine has the wrong number of atoms, and does not support the >NATOMS command.");
|
MPI_Bcast(&n, 1, MPI_INT, 0, world);
|
||||||
|
|
||||||
|
if (n != atom->natoms)
|
||||||
|
error->all(FLERR, "MDI: Engine has wrong atom count and does not support >NATOMS command");
|
||||||
}
|
}
|
||||||
|
|
||||||
int elements_exists;
|
int elements_exists;
|
||||||
int types_exists;
|
int types_exists;
|
||||||
ierr = MDI_Check_command_exists("@DEFAULT", ">ELEMENTS", mdicomm, &elements_exists);
|
ierr = MDI_Check_command_exists("@DEFAULT", ">ELEMENTS", mdicomm, &elements_exists);
|
||||||
if (ierr) error->all(FLERR, "MDI: >ELEMENTS command check");
|
if (ierr) error->all(FLERR, "MDI: >ELEMENTS command check");
|
||||||
|
MPI_Bcast(&elements_exists, 1, MPI_INT, 0, world);
|
||||||
|
|
||||||
ierr = MDI_Check_command_exists("@DEFAULT", ">TYPES", mdicomm, &types_exists);
|
ierr = MDI_Check_command_exists("@DEFAULT", ">TYPES", mdicomm, &types_exists);
|
||||||
if (ierr) error->all(FLERR, "MDI: >TYPES command check");
|
if (ierr) error->all(FLERR, "MDI: >TYPES command check");
|
||||||
if ( elements && elements_exists ) {
|
MPI_Bcast(&types_exists, 1, MPI_INT, 0, world);
|
||||||
|
|
||||||
|
if (elements && elements_exists)
|
||||||
send_elements();
|
send_elements();
|
||||||
} else if ( types_exists ) {
|
else if (types_exists)
|
||||||
send_types();
|
send_types();
|
||||||
}
|
|
||||||
send_box();
|
send_box();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,8 +315,7 @@ void FixMDIQM::post_force(int vflag)
|
|||||||
|
|
||||||
// if simulation box dynamically changes, send current box to MDI engine
|
// if simulation box dynamically changes, send current box to MDI engine
|
||||||
|
|
||||||
if (domain->box_change_size || domain->box_change_shape)
|
if (domain->box_change_size || domain->box_change_shape) send_box();
|
||||||
send_box();
|
|
||||||
|
|
||||||
// gather all coords, ordered by atomID
|
// gather all coords, ordered by atomID
|
||||||
|
|
||||||
@ -358,7 +371,6 @@ void FixMDIQM::post_force(int vflag)
|
|||||||
fqm[i][2] = buf3[3 * index + 2] * mdi2lmp_force;
|
fqm[i][2] = buf3[3 * index + 2] * mdi2lmp_force;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// optionally add forces to owned atoms
|
// optionally add forces to owned atoms
|
||||||
// use atomID of local atoms to index into ordered buf3
|
// use atomID of local atoms to index into ordered buf3
|
||||||
|
|
||||||
@ -372,7 +384,8 @@ void FixMDIQM::post_force(int vflag)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// optionally request stress tensor from MDI engine, convert to virial
|
// optionally request stress tensor from MDI engine, convert to 6-value virial
|
||||||
|
// MDI defines virial tensor as intensive (divided by volume), LAMMPS does not
|
||||||
// qm_virial = fix output for global QM virial
|
// qm_virial = fix output for global QM virial
|
||||||
|
|
||||||
if (virialflag) {
|
if (virialflag) {
|
||||||
@ -402,8 +415,7 @@ void FixMDIQM::post_force(int vflag)
|
|||||||
volume = domain->xprd * domain->yprd;
|
volume = domain->xprd * domain->yprd;
|
||||||
else if (domain->dimension == 3)
|
else if (domain->dimension == 3)
|
||||||
volume = domain->xprd * domain->yprd * domain->zprd;
|
volume = domain->xprd * domain->yprd * domain->zprd;
|
||||||
for (int i = 0; i < 6; i++)
|
for (int i = 0; i < 6; i++) virial[i] = qm_virial_symmetric[i] * volume / nprocs;
|
||||||
virial[i] = qm_virial_symmetric[i]*volume/nprocs;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -447,8 +459,7 @@ void FixMDIQM::reallocate()
|
|||||||
|
|
||||||
if (atom->natoms > maxbuf) {
|
if (atom->natoms > maxbuf) {
|
||||||
bigint nsize = atom->natoms * 3;
|
bigint nsize = atom->natoms * 3;
|
||||||
if (nsize > MAXSMALLINT)
|
if (nsize > MAXSMALLINT) error->all(FLERR, "Natoms too large to use with fix mdi/qm");
|
||||||
error->all(FLERR, "Natoms too large to use with fix mdi/qm");
|
|
||||||
|
|
||||||
maxbuf = static_cast<int>(atom->natoms);
|
maxbuf = static_cast<int>(atom->natoms);
|
||||||
memory->destroy(ibuf1);
|
memory->destroy(ibuf1);
|
||||||
@ -530,6 +541,8 @@ void FixMDIQM::send_box()
|
|||||||
int celldispl_exists;
|
int celldispl_exists;
|
||||||
int ierr = MDI_Check_command_exists("@DEFAULT", ">NATOMS", mdicomm, &celldispl_exists);
|
int ierr = MDI_Check_command_exists("@DEFAULT", ">NATOMS", mdicomm, &celldispl_exists);
|
||||||
if (ierr) error->all(FLERR, "MDI: >CELL_DISPL command check");
|
if (ierr) error->all(FLERR, "MDI: >CELL_DISPL command check");
|
||||||
|
MPI_Bcast(&celldispl_exists, 1, MPI_INT, 0, world);
|
||||||
|
|
||||||
if (celldispl_exists) {
|
if (celldispl_exists) {
|
||||||
ierr = MDI_Send_command(">CELL_DISPL", mdicomm);
|
ierr = MDI_Send_command(">CELL_DISPL", mdicomm);
|
||||||
if (ierr) error->all(FLERR, "MDI: >CELL_DISPL command");
|
if (ierr) error->all(FLERR, "MDI: >CELL_DISPL command");
|
||||||
@ -608,18 +621,17 @@ void FixMDIQM::unit_conversions()
|
|||||||
mdi2lmp_force = angstrom_to_bohr / ev_to_hartree;
|
mdi2lmp_force = angstrom_to_bohr / ev_to_hartree;
|
||||||
}
|
}
|
||||||
|
|
||||||
// pressure or stress units = force/area = energy/volume
|
// stress units = force/area = energy/volume
|
||||||
|
|
||||||
mdi2lmp_pressure = 1.0;
|
mdi2lmp_pressure = 1.0;
|
||||||
lmp2mdi_pressure = 1.0;
|
lmp2mdi_pressure = 1.0;
|
||||||
|
|
||||||
if (lmpunits == REAL) {
|
if (lmpunits == REAL) {
|
||||||
lmp2mdi_pressure = (kelvin_to_hartree / force->boltz) /
|
lmp2mdi_pressure = (kelvin_to_hartree / force->boltz) /
|
||||||
(angstrom_to_bohr * angstrom_to_bohr * angstrom_to_bohr) / force->nktv2p;
|
(angstrom_to_bohr * angstrom_to_bohr * angstrom_to_bohr);
|
||||||
mdi2lmp_pressure = 1.0 / lmp2mdi_pressure;
|
mdi2lmp_pressure = 1.0 / lmp2mdi_pressure;
|
||||||
} else if (lmpunits == METAL) {
|
} else if (lmpunits == METAL) {
|
||||||
lmp2mdi_pressure =
|
lmp2mdi_pressure = ev_to_hartree / (angstrom_to_bohr * angstrom_to_bohr * angstrom_to_bohr);
|
||||||
ev_to_hartree / (angstrom_to_bohr * angstrom_to_bohr * angstrom_to_bohr) / force->nktv2p;
|
|
||||||
mdi2lmp_pressure = 1.0 / lmp2mdi_pressure;
|
mdi2lmp_pressure = 1.0 / lmp2mdi_pressure;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,12 +23,8 @@
|
|||||||
#define LAMMPS_LIB_MPI 1
|
#define LAMMPS_LIB_MPI 1
|
||||||
#include "library.h"
|
#include "library.h"
|
||||||
|
|
||||||
#include "mdi_engine.h"
|
|
||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
using namespace LAMMPS_NS;
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
/** Initialize an instance of LAMMPS as an MDI plugin
|
/** Initialize an instance of LAMMPS as an MDI plugin
|
||||||
@ -52,15 +48,16 @@ command-line argument, which must be provided by the MDI driver.
|
|||||||
* \param class_obj pointer to an instance of an mdi/engine fix cast to ``void *``.
|
* \param class_obj pointer to an instance of an mdi/engine fix cast to ``void *``.
|
||||||
* \return 0 on no error. */
|
* \return 0 on no error. */
|
||||||
|
|
||||||
int MDI_Plugin_init_lammps()
|
int MDI_Plugin_init_lammps(void *plugin_state)
|
||||||
{
|
{
|
||||||
// initialize MDI
|
// initialize MDI
|
||||||
|
|
||||||
int mdi_argc;
|
int mdi_argc;
|
||||||
char **mdi_argv;
|
char **mdi_argv;
|
||||||
|
|
||||||
|
if (MDI_Set_plugin_state(plugin_state)) MPI_Abort(MPI_COMM_WORLD, 1);
|
||||||
if (MDI_Plugin_get_argc(&mdi_argc)) MPI_Abort(MPI_COMM_WORLD, 1);
|
if (MDI_Plugin_get_argc(&mdi_argc)) MPI_Abort(MPI_COMM_WORLD, 1);
|
||||||
if (MDI_Plugin_get_argv(&mdi_argv)) MPI_Abort(MPI_COMM_WORLD, 1);
|
if (MDI_Plugin_get_argv(&mdi_argv)) MPI_Abort(MPI_COMM_WORLD, 1);
|
||||||
if (MDI_Init(&mdi_argc, &mdi_argv)) MPI_Abort(MPI_COMM_WORLD, 1);
|
|
||||||
|
|
||||||
// get the MPI intra-communicator for this code
|
// get the MPI intra-communicator for this code
|
||||||
|
|
||||||
@ -90,14 +87,23 @@ int MDI_Plugin_init_lammps()
|
|||||||
if (!found_filename) MPI_Abort(MPI_COMM_WORLD, 1);
|
if (!found_filename) MPI_Abort(MPI_COMM_WORLD, 1);
|
||||||
|
|
||||||
// create and run a LAMMPS instance
|
// create and run a LAMMPS instance
|
||||||
// lammps_open() expects a first arg (not used) which is executable name
|
// need to add an initial pseudo arg to mdi_argc & mdi_argv
|
||||||
// same as if called from main.cpp
|
// b/c lammps_open() expects first arg to be an executable name
|
||||||
|
// same as if it were called from main.cpp
|
||||||
|
|
||||||
|
int mdi_argc_extra = mdi_argc + 1;
|
||||||
|
char **mdi_argv_extra = new char *[mdi_argc_extra];
|
||||||
|
|
||||||
|
mdi_argv_extra[0] = (char *) "MDI_plugin_engine";
|
||||||
|
for (int i = 0; i < mdi_argc; i++) mdi_argv_extra[i + 1] = mdi_argv[i];
|
||||||
|
|
||||||
void *lmp = nullptr;
|
void *lmp = nullptr;
|
||||||
if (lammps_config_has_mpi_support() > 0)
|
if (lammps_config_has_mpi_support() > 0)
|
||||||
lmp = lammps_open(mdi_argc + 1, &mdi_argv[-1], mpi_world_comm, nullptr);
|
lmp = lammps_open(mdi_argc_extra, mdi_argv_extra, mpi_world_comm, nullptr);
|
||||||
else
|
else
|
||||||
lmp = lammps_open_no_mpi(mdi_argc + 1, &mdi_argv[-1], nullptr);
|
lmp = lammps_open_no_mpi(mdi_argc_extra, mdi_argv_extra, nullptr);
|
||||||
|
|
||||||
|
delete[] mdi_argv_extra;
|
||||||
|
|
||||||
// process the specified input script
|
// process the specified input script
|
||||||
// must contain "mdi engine" command
|
// must contain "mdi engine" command
|
||||||
@ -110,25 +116,3 @@ int MDI_Plugin_init_lammps()
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
/** Execute an MDI command
|
|
||||||
*
|
|
||||||
\verbatim embed:rst
|
|
||||||
|
|
||||||
This function is called by the MolSSI Driver Interface Library (MDI)
|
|
||||||
when LAMMPS is run as a plugin, and should not otherwise be used.
|
|
||||||
The function executes a single command from an external MDI driver.
|
|
||||||
|
|
||||||
\endverbatim
|
|
||||||
* \param command string buffer corresponding to the command to be executed
|
|
||||||
* \param comm MDI communicator that can be used to communicated with the driver.
|
|
||||||
* \param class_obj pointer to an instance of an mdi/engine fix cast to ``void *``.
|
|
||||||
* \return 0 on no error, 1 on error. */
|
|
||||||
|
|
||||||
int lammps_execute_mdi_command(const char *command, MDI_Comm comm, void *class_obj)
|
|
||||||
{
|
|
||||||
auto mdi_engine = (MDIEngine *) class_obj;
|
|
||||||
return mdi_engine->execute_command(command, comm);
|
|
||||||
}
|
|
||||||
|
|||||||
@ -14,13 +14,12 @@
|
|||||||
#ifndef LAMMPS_LIBRARY_MDI_H
|
#ifndef LAMMPS_LIBRARY_MDI_H
|
||||||
#define LAMMPS_LIBRARY_MDI_H
|
#define LAMMPS_LIBRARY_MDI_H
|
||||||
|
|
||||||
/* C style library calls to LAMMPS when a LAMMPS shared library is
|
/* C style library call to LAMMPS when a LAMMPS shared library is
|
||||||
* used as a plugin through MolSSI Driver Interface (MDI). */
|
* used as a plugin through MolSSI Driver Interface (MDI) */
|
||||||
|
|
||||||
#include <mdi.h>
|
#include <mdi.h>
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
int MDI_Plugin_init_lammps();
|
int MDI_Plugin_init_lammps(void *plugin_state);
|
||||||
int lammps_execute_mdi_command(const char *, MDI_Comm, void *);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -53,7 +53,8 @@ void MDICommand::command(int narg, char **arg)
|
|||||||
MDI_Accept_communicator(&mdicomm);
|
MDI_Accept_communicator(&mdicomm);
|
||||||
if (mdicomm == MDI_COMM_NULL)
|
if (mdicomm == MDI_COMM_NULL)
|
||||||
error->all(FLERR, "MDI unable to connect to stand-alone engine");
|
error->all(FLERR, "MDI unable to connect to stand-alone engine");
|
||||||
} else error->all(FLERR, "Cannot use mdi connect with plugin engine");
|
} else
|
||||||
|
error->all(FLERR, "Cannot use mdi connect with plugin engine");
|
||||||
|
|
||||||
int nbytes = sizeof(MDI_Comm);
|
int nbytes = sizeof(MDI_Comm);
|
||||||
char *ptrcomm = (char *) memory->smalloc(nbytes, "mdi:mdicomm");
|
char *ptrcomm = (char *) memory->smalloc(nbytes, "mdi:mdicomm");
|
||||||
@ -63,8 +64,7 @@ void MDICommand::command(int narg, char **arg)
|
|||||||
|
|
||||||
} else if (strcmp(arg[0], "exit") == 0) {
|
} else if (strcmp(arg[0], "exit") == 0) {
|
||||||
|
|
||||||
if (lmp->mdicomm == nullptr)
|
if (lmp->mdicomm == nullptr) error->all(FLERR, "MDI cannot send exit to unconnected engine");
|
||||||
error->all(FLERR,"MDI cannot send exit to unconnected engine");
|
|
||||||
|
|
||||||
MDI_Comm mdicomm;
|
MDI_Comm mdicomm;
|
||||||
int nbytes = sizeof(MDI_Comm);
|
int nbytes = sizeof(MDI_Comm);
|
||||||
@ -77,5 +77,6 @@ void MDICommand::command(int narg, char **arg)
|
|||||||
memory->sfree(ptrcomm);
|
memory->sfree(ptrcomm);
|
||||||
lmp->mdicomm = nullptr;
|
lmp->mdicomm = nullptr;
|
||||||
|
|
||||||
} else error->all(FLERR, "Illegal mdi command");
|
} else
|
||||||
|
error->all(FLERR, "Illegal mdi command");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -91,7 +91,8 @@ MDIEngine::MDIEngine(LAMMPS *_lmp, int narg, char ** arg) : Pointers(_lmp)
|
|||||||
error->all(FLERR, "Illegal mdi engine command");
|
error->all(FLERR, "Illegal mdi engine command");
|
||||||
}
|
}
|
||||||
iarg += ntypes + 1;
|
iarg += ntypes + 1;
|
||||||
} else error->all(FLERR,"Illegal mdi engine command");
|
} else
|
||||||
|
error->all(FLERR, "Illegal mdi engine command");
|
||||||
}
|
}
|
||||||
|
|
||||||
// error check an MDI element does not map to multiple atom types
|
// error check an MDI element does not map to multiple atom types
|
||||||
@ -184,10 +185,10 @@ MDIEngine::MDIEngine(LAMMPS *_lmp, int narg, char ** arg) : Pointers(_lmp)
|
|||||||
|
|
||||||
mdi_commands();
|
mdi_commands();
|
||||||
|
|
||||||
// register the execute_command function with MDI
|
// register a callback function with MDI used when engine runs in plugin mode
|
||||||
// only used when engine runs in plugin mode
|
// execute_command_plugin_wrapper() must be a static method
|
||||||
|
|
||||||
MDI_Set_execute_command_func(lammps_execute_mdi_command, this);
|
MDI_Set_execute_command_func(execute_command_plugin_wrapper, this);
|
||||||
|
|
||||||
// one-time operation to establish a connection with the driver
|
// one-time operation to establish a connection with the driver
|
||||||
|
|
||||||
@ -291,11 +292,22 @@ void MDIEngine::engine_node(const char *node)
|
|||||||
node_match = true;
|
node_match = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
wrapper function on execute_command()
|
||||||
|
invoked as callback by MDI when engine operates in plugin mode
|
||||||
|
this is a static method in mdi_engine.h
|
||||||
|
---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int MDIEngine::execute_command_plugin_wrapper(const char *command, MDI_Comm comm, void *class_obj)
|
||||||
|
{
|
||||||
|
auto mdi_engine = (MDIEngine *) class_obj;
|
||||||
|
return mdi_engine->execute_command(command, comm);
|
||||||
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
process a single driver command
|
process a single driver command
|
||||||
called by engine_node() in loop
|
called by engine_node() in loop when engine runs as stand-alone code
|
||||||
also called by MDI itself via lib::lammps_execute_mdi_command()
|
called by execute_command_plugin_wrapper() when engine runs as plugin lib
|
||||||
when LAMMPS is running as a plugin
|
|
||||||
---------------------------------------------------------------------- */
|
---------------------------------------------------------------------- */
|
||||||
|
|
||||||
int MDIEngine::execute_command(const char *command, MDI_Comm mdicomm)
|
int MDIEngine::execute_command(const char *command, MDI_Comm mdicomm)
|
||||||
@ -334,8 +346,7 @@ int MDIEngine::execute_command(const char *command, MDI_Comm mdicomm)
|
|||||||
receive_coords();
|
receive_coords();
|
||||||
|
|
||||||
} else if (strcmp(command, ">ELEMENTS") == 0) {
|
} else if (strcmp(command, ">ELEMENTS") == 0) {
|
||||||
if (!elements)
|
if (!elements) error->all(FLERR, "MDI engine command did not define element list");
|
||||||
error->all(FLERR,"MDI engine command did not define element list");
|
|
||||||
receive_elements();
|
receive_elements();
|
||||||
|
|
||||||
} else if (strcmp(command, ">FORCES") == 0) {
|
} else if (strcmp(command, ">FORCES") == 0) {
|
||||||
@ -1148,9 +1159,16 @@ void MDIEngine::receive_cell()
|
|||||||
for (int icell = 0; icell < 9; icell++) sys_cell[icell] *= mdi2lmp_length;
|
for (int icell = 0; icell < 9; icell++) sys_cell[icell] *= mdi2lmp_length;
|
||||||
|
|
||||||
// error check that edge vectors match LAMMPS triclinic requirement
|
// error check that edge vectors match LAMMPS triclinic requirement
|
||||||
|
// 3,7,6 = xy, yz, xz tilt factors
|
||||||
|
|
||||||
if (sys_cell[1] != 0.0 || sys_cell[2] != 0.0 || sys_cell[5] != 0.0)
|
if (sys_cell[1] != 0.0 || sys_cell[2] != 0.0 || sys_cell[5] != 0.0)
|
||||||
error->all(FLERR, "MDI: Received cell edges are not LAMMPS compatible");
|
error->all(FLERR, "MDI: Received cell edges are not an upper triangular matrix");
|
||||||
|
|
||||||
|
if (sys_cell[3] != 0.0 || sys_cell[7] != 0.0 || sys_cell[6] != 0.0)
|
||||||
|
if (!domain->triclinic)
|
||||||
|
error->all(FLERR,
|
||||||
|
"MDI: Received cell edges are for a triclinic box, "
|
||||||
|
"but LAMMPS is using an orthogonal box");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -1227,8 +1245,7 @@ void MDIEngine::receive_elements()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (itype > ntypes)
|
if (itype > ntypes) error->all(FLERR, "MDI element not found in element list");
|
||||||
error->all(FLERR,"MDI element not found in element list");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1493,6 +1510,9 @@ void MDIEngine::send_pe()
|
|||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
<STRESS command
|
<STRESS command
|
||||||
send 9-component stress tensor (no kinetic energy term)
|
send 9-component stress tensor (no kinetic energy term)
|
||||||
|
should be intensive quantity (divided by volume in pressure compute)
|
||||||
|
MDI stress tensor units are energy/volume,
|
||||||
|
so conversion factor includes nktv2p to convert pressure back to virial
|
||||||
---------------------------------------------------------------------- */
|
---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void MDIEngine::send_stress()
|
void MDIEngine::send_stress()
|
||||||
@ -1837,6 +1857,8 @@ void MDIEngine::unit_conversions()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// pressure or stress units = force/area = energy/volume
|
// pressure or stress units = force/area = energy/volume
|
||||||
|
// MDI energy/volume = Hartree/Bohr^3,
|
||||||
|
// so need to remove LAMMPS nktv2p from pressure
|
||||||
|
|
||||||
mdi2lmp_pressure = 1.0;
|
mdi2lmp_pressure = 1.0;
|
||||||
lmp2mdi_pressure = 1.0;
|
lmp2mdi_pressure = 1.0;
|
||||||
|
|||||||
@ -22,8 +22,6 @@ namespace LAMMPS_NS {
|
|||||||
class MDIEngine : protected Pointers {
|
class MDIEngine : protected Pointers {
|
||||||
public:
|
public:
|
||||||
MDIEngine(class LAMMPS *, int, char **);
|
MDIEngine(class LAMMPS *, int, char **);
|
||||||
|
|
||||||
int execute_command(const char *command, MDI_Comm mdicomm);
|
|
||||||
void engine_node(const char *node);
|
void engine_node(const char *node);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -87,9 +85,13 @@ class MDIEngine : protected Pointers {
|
|||||||
class Irregular *irregular; // irregular comm if new COORDS
|
class Irregular *irregular; // irregular comm if new COORDS
|
||||||
// are highly displaced
|
// are highly displaced
|
||||||
|
|
||||||
|
// static method for MDI to callback to, when LAMMPS used as plugin engine
|
||||||
|
|
||||||
|
static int execute_command_plugin_wrapper(const char *, MDI_Comm, void *);
|
||||||
|
|
||||||
// class methods
|
// class methods
|
||||||
|
|
||||||
void mdi_engine(int, char **);
|
int execute_command(const char *, MDI_Comm);
|
||||||
void mdi_commands();
|
void mdi_commands();
|
||||||
|
|
||||||
void mdi_md();
|
void mdi_md();
|
||||||
|
|||||||
@ -72,18 +72,23 @@ MDIPlugin::MDIPlugin(LAMMPS *_lmp, int narg, char **arg) : Pointers(_lmp)
|
|||||||
|
|
||||||
// error checks
|
// error checks
|
||||||
|
|
||||||
if (!mdi_arg || !infile_arg || !lammps_command)
|
if (!mdi_arg || !lammps_command)
|
||||||
error->all(FLERR, "MDI plugin must specify mdi, infile, command keywords");
|
error->all(FLERR, "MDI plugin must specify mdi and command keywords");
|
||||||
|
|
||||||
// build full plugin_args string for args to plugin library
|
// build full plugin_args string for args to plugin library
|
||||||
|
|
||||||
int n = strlen(mdi_arg) + strlen(infile_arg) + strlen(extra_arg) + 16;
|
int n = strlen(mdi_arg) + 16;
|
||||||
|
if (infile_arg) n += strlen(infile_arg);
|
||||||
|
if (extra_arg) n += strlen(extra_arg);
|
||||||
auto plugin_args = new char[n];
|
auto plugin_args = new char[n];
|
||||||
plugin_args[0] = 0;
|
plugin_args[0] = 0;
|
||||||
strcat(plugin_args, "-mdi \"");
|
strcat(plugin_args, "-mdi \"");
|
||||||
strcat(plugin_args, mdi_arg);
|
strcat(plugin_args, mdi_arg);
|
||||||
strcat(plugin_args, "\" -in ");
|
strcat(plugin_args, "\"");
|
||||||
|
if (infile_arg) {
|
||||||
|
strcat(plugin_args, " -in ");
|
||||||
strcat(plugin_args, infile_arg);
|
strcat(plugin_args, infile_arg);
|
||||||
|
}
|
||||||
if (extra_arg) {
|
if (extra_arg) {
|
||||||
strcat(plugin_args, " ");
|
strcat(plugin_args, " ");
|
||||||
strcat(plugin_args, extra_arg);
|
strcat(plugin_args, extra_arg);
|
||||||
@ -91,7 +96,8 @@ MDIPlugin::MDIPlugin(LAMMPS *_lmp, int narg, char **arg) : Pointers(_lmp)
|
|||||||
|
|
||||||
// launch the MDI plugin library
|
// launch the MDI plugin library
|
||||||
// path for lib was specified in -mdi command-line arg when LAMMPS started
|
// path for lib was specified in -mdi command-line arg when LAMMPS started
|
||||||
// this calls back to plugin_wrapper, which must issue MDI EXIT at end
|
// this calls back to plugin_wrapper(), which issues MDI EXIT at end & returns
|
||||||
|
// plugin_wrapper() must be a static method
|
||||||
|
|
||||||
MDI_Launch_plugin(plugin_name, plugin_args, &world, plugin_wrapper, (void *) this);
|
MDI_Launch_plugin(plugin_name, plugin_args, &world, plugin_wrapper, (void *) this);
|
||||||
|
|
||||||
@ -99,8 +105,9 @@ MDIPlugin::MDIPlugin(LAMMPS *_lmp, int narg, char **arg) : Pointers(_lmp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
callback function from MDI_Launch_plugin()
|
wrapper on entire interaction of LAMMPS as a driver with the plugin engine
|
||||||
this function wraps entire interaction of LAMMPS driver with the plugin
|
invoked as a callback by MDI once plugin library engine is launched
|
||||||
|
this is a static method in mdi_plugin.h
|
||||||
---------------------------------------------------------------------- */
|
---------------------------------------------------------------------- */
|
||||||
|
|
||||||
int MDIPlugin::plugin_wrapper(void * /*pmpicomm*/, MDI_Comm mdicomm, void *vptr)
|
int MDIPlugin::plugin_wrapper(void * /*pmpicomm*/, MDI_Comm mdicomm, void *vptr)
|
||||||
|
|||||||
@ -26,6 +26,9 @@ class MDIPlugin : protected Pointers {
|
|||||||
private:
|
private:
|
||||||
char *lammps_command;
|
char *lammps_command;
|
||||||
|
|
||||||
|
// static method for MDI to callback to
|
||||||
|
// when LAMMPS is a driver which launches a plugin engine
|
||||||
|
|
||||||
static int plugin_wrapper(void *, MDI_Comm, void *);
|
static int plugin_wrapper(void *, MDI_Comm, void *);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -23,6 +23,7 @@
|
|||||||
#include "math_const.h"
|
#include "math_const.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "neigh_list.h"
|
#include "neigh_list.h"
|
||||||
|
#include "suffix.h"
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
@ -37,6 +38,7 @@ static constexpr double EPSILON = 1.0e-6;
|
|||||||
PairLJCutCoulCutDielectricOMP::PairLJCutCoulCutDielectricOMP(LAMMPS *_lmp) :
|
PairLJCutCoulCutDielectricOMP::PairLJCutCoulCutDielectricOMP(LAMMPS *_lmp) :
|
||||||
PairLJCutCoulCutDielectric(_lmp), ThrOMP(_lmp, THR_PAIR)
|
PairLJCutCoulCutDielectric(_lmp), ThrOMP(_lmp, THR_PAIR)
|
||||||
{
|
{
|
||||||
|
suffix_flag |= Suffix::OMP;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -99,7 +101,7 @@ void PairLJCutCoulCutDielectricOMP::eval(int iifrom, int iito, ThrData *const th
|
|||||||
{
|
{
|
||||||
int i, j, ii, jj, jnum, itype, jtype;
|
int i, j, ii, jj, jnum, itype, jtype;
|
||||||
double qtmp, etmp, xtmp, ytmp, ztmp, delx, dely, delz, evdwl, ecoul;
|
double qtmp, etmp, xtmp, ytmp, ztmp, delx, dely, delz, evdwl, ecoul;
|
||||||
double fpair_i, fpair_j;
|
double fpair_i;
|
||||||
double rsq, r2inv, r6inv, forcecoul, forcelj, factor_coul, factor_lj;
|
double rsq, r2inv, r6inv, forcecoul, forcelj, factor_coul, factor_lj;
|
||||||
double efield_i, epot_i;
|
double efield_i, epot_i;
|
||||||
int *ilist, *jlist, *numneigh, **firstneigh;
|
int *ilist, *jlist, *numneigh, **firstneigh;
|
||||||
@ -130,10 +132,10 @@ void PairLJCutCoulCutDielectricOMP::eval(int iifrom, int iito, ThrData *const th
|
|||||||
|
|
||||||
i = ilist[ii];
|
i = ilist[ii];
|
||||||
qtmp = q[i];
|
qtmp = q[i];
|
||||||
|
etmp = eps[i];
|
||||||
xtmp = x[i].x;
|
xtmp = x[i].x;
|
||||||
ytmp = x[i].y;
|
ytmp = x[i].y;
|
||||||
ztmp = x[i].z;
|
ztmp = x[i].z;
|
||||||
etmp = eps[i];
|
|
||||||
itype = type[i];
|
itype = type[i];
|
||||||
jlist = firstneigh[i];
|
jlist = firstneigh[i];
|
||||||
jnum = numneigh[i];
|
jnum = numneigh[i];
|
||||||
@ -141,6 +143,7 @@ void PairLJCutCoulCutDielectricOMP::eval(int iifrom, int iito, ThrData *const th
|
|||||||
extmp = eytmp = eztmp = 0.0;
|
extmp = eytmp = eztmp = 0.0;
|
||||||
|
|
||||||
// self term Eq. (55) for I_{ii} and Eq. (52) and in Barros et al
|
// self term Eq. (55) for I_{ii} and Eq. (52) and in Barros et al
|
||||||
|
|
||||||
double curvature_threshold = sqrt(area[i]);
|
double curvature_threshold = sqrt(area[i]);
|
||||||
if (curvature[i] < curvature_threshold) {
|
if (curvature[i] < curvature_threshold) {
|
||||||
double sf = curvature[i] / (4.0 * MY_PIS * curvature_threshold) * area[i] * q[i];
|
double sf = curvature[i] / (4.0 * MY_PIS * curvature_threshold) * area[i] * q[i];
|
||||||
@ -151,7 +154,7 @@ void PairLJCutCoulCutDielectricOMP::eval(int iifrom, int iito, ThrData *const th
|
|||||||
efield[i][0] = efield[i][1] = efield[i][2] = 0;
|
efield[i][0] = efield[i][1] = efield[i][2] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
epot[i] = 0;
|
epot[i] = 0.0;
|
||||||
|
|
||||||
for (jj = 0; jj < jnum; jj++) {
|
for (jj = 0; jj < jnum; jj++) {
|
||||||
j = jlist[jj];
|
j = jlist[jj];
|
||||||
@ -167,9 +170,10 @@ void PairLJCutCoulCutDielectricOMP::eval(int iifrom, int iito, ThrData *const th
|
|||||||
|
|
||||||
if (rsq < cutsq[itype][jtype]) {
|
if (rsq < cutsq[itype][jtype]) {
|
||||||
r2inv = 1.0 / rsq;
|
r2inv = 1.0 / rsq;
|
||||||
|
const double rinv = sqrt(r2inv);
|
||||||
|
|
||||||
if (rsq < cut_coulsq[itype][jtype] && rsq > EPSILON) {
|
if (rsq < cut_coulsq[itype][jtype] && rsq > EPSILON) {
|
||||||
efield_i = qqrd2e * q[j] * sqrt(r2inv);
|
efield_i = qqrd2e * q[j] * rinv;
|
||||||
forcecoul = qtmp * efield_i;
|
forcecoul = qtmp * efield_i;
|
||||||
epot_i = efield_i;
|
epot_i = efield_i;
|
||||||
} else
|
} else
|
||||||
@ -182,7 +186,6 @@ void PairLJCutCoulCutDielectricOMP::eval(int iifrom, int iito, ThrData *const th
|
|||||||
forcelj = 0.0;
|
forcelj = 0.0;
|
||||||
|
|
||||||
fpair_i = (factor_coul * etmp * forcecoul + factor_lj * forcelj) * r2inv;
|
fpair_i = (factor_coul * etmp * forcecoul + factor_lj * forcelj) * r2inv;
|
||||||
|
|
||||||
fxtmp += delx * fpair_i;
|
fxtmp += delx * fpair_i;
|
||||||
fytmp += dely * fpair_i;
|
fytmp += dely * fpair_i;
|
||||||
fztmp += delz * fpair_i;
|
fztmp += delz * fpair_i;
|
||||||
@ -193,29 +196,18 @@ void PairLJCutCoulCutDielectricOMP::eval(int iifrom, int iito, ThrData *const th
|
|||||||
eztmp += delz * efield_i;
|
eztmp += delz * efield_i;
|
||||||
epot[i] += epot_i;
|
epot[i] += epot_i;
|
||||||
|
|
||||||
if (NEWTON_PAIR || j >= nlocal) {
|
|
||||||
fpair_j = (factor_coul * eps[j] * forcecoul + factor_lj * forcelj) * r2inv;
|
|
||||||
f[j].x -= delx * fpair_j;
|
|
||||||
f[j].y -= dely * fpair_j;
|
|
||||||
f[j].z -= delz * fpair_j;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (EFLAG) {
|
if (EFLAG) {
|
||||||
if (rsq < cut_coulsq[itype][jtype]) {
|
if (rsq < cut_coulsq[itype][jtype]) {
|
||||||
ecoul = factor_coul * qqrd2e * qtmp * q[j] * (etmp + eps[j]) * sqrt(r2inv);
|
ecoul = factor_coul * qqrd2e * qtmp * q[j] * 0.5 * (etmp + eps[j]) * rinv;
|
||||||
} else
|
} else
|
||||||
ecoul = 0.0;
|
ecoul = 0.0;
|
||||||
ecoul *= 0.5;
|
|
||||||
if (rsq < cut_ljsq[itype][jtype]) {
|
if (rsq < cut_ljsq[itype][jtype]) {
|
||||||
evdwl = r6inv * (lj3[itype][jtype] * r6inv - lj4[itype][jtype]) - offset[itype][jtype];
|
evdwl = r6inv * (lj3[itype][jtype] * r6inv - lj4[itype][jtype]) - offset[itype][jtype];
|
||||||
evdwl *= factor_lj;
|
evdwl *= factor_lj;
|
||||||
} else
|
} else
|
||||||
evdwl = 0.0;
|
evdwl = 0.0;
|
||||||
}
|
}
|
||||||
|
if (EVFLAG) ev_tally_full_thr(this, i, evdwl, ecoul, fpair_i, delx, dely, delz, thr);
|
||||||
if (EVFLAG)
|
|
||||||
ev_tally_thr(this, i, j, nlocal, NEWTON_PAIR, evdwl, ecoul, fpair_i, delx, dely, delz,
|
|
||||||
thr);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
f[i].x += fxtmp;
|
f[i].x += fxtmp;
|
||||||
|
|||||||
@ -23,6 +23,7 @@
|
|||||||
#include "math_const.h"
|
#include "math_const.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "neigh_list.h"
|
#include "neigh_list.h"
|
||||||
|
#include "suffix.h"
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
@ -37,6 +38,7 @@ static constexpr double EPSILON = 1.0e-6;
|
|||||||
PairLJCutCoulDebyeDielectricOMP::PairLJCutCoulDebyeDielectricOMP(LAMMPS *_lmp) :
|
PairLJCutCoulDebyeDielectricOMP::PairLJCutCoulDebyeDielectricOMP(LAMMPS *_lmp) :
|
||||||
PairLJCutCoulDebyeDielectric(_lmp), ThrOMP(_lmp, THR_PAIR)
|
PairLJCutCoulDebyeDielectric(_lmp), ThrOMP(_lmp, THR_PAIR)
|
||||||
{
|
{
|
||||||
|
suffix_flag |= Suffix::OMP;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -99,7 +101,7 @@ void PairLJCutCoulDebyeDielectricOMP::eval(int iifrom, int iito, ThrData *const
|
|||||||
{
|
{
|
||||||
int i, j, ii, jj, jnum, itype, jtype;
|
int i, j, ii, jj, jnum, itype, jtype;
|
||||||
double qtmp, etmp, xtmp, ytmp, ztmp, delx, dely, delz, evdwl, ecoul;
|
double qtmp, etmp, xtmp, ytmp, ztmp, delx, dely, delz, evdwl, ecoul;
|
||||||
double fpair_i, fpair_j;
|
double fpair_i;
|
||||||
double rsq, r2inv, r6inv, forcecoul, forcelj, factor_coul, factor_lj, efield_i, epot_i;
|
double rsq, r2inv, r6inv, forcecoul, forcelj, factor_coul, factor_lj, efield_i, epot_i;
|
||||||
double r, rinv, screening;
|
double r, rinv, screening;
|
||||||
int *ilist, *jlist, *numneigh, **firstneigh;
|
int *ilist, *jlist, *numneigh, **firstneigh;
|
||||||
@ -185,7 +187,6 @@ void PairLJCutCoulDebyeDielectricOMP::eval(int iifrom, int iito, ThrData *const
|
|||||||
forcelj = 0.0;
|
forcelj = 0.0;
|
||||||
|
|
||||||
fpair_i = (factor_coul * etmp * forcecoul + factor_lj * forcelj) * r2inv;
|
fpair_i = (factor_coul * etmp * forcecoul + factor_lj * forcelj) * r2inv;
|
||||||
|
|
||||||
fxtmp += delx * fpair_i;
|
fxtmp += delx * fpair_i;
|
||||||
fytmp += dely * fpair_i;
|
fytmp += dely * fpair_i;
|
||||||
fztmp += delz * fpair_i;
|
fztmp += delz * fpair_i;
|
||||||
@ -196,19 +197,11 @@ void PairLJCutCoulDebyeDielectricOMP::eval(int iifrom, int iito, ThrData *const
|
|||||||
eztmp += delz * efield_i;
|
eztmp += delz * efield_i;
|
||||||
epot[i] += epot_i;
|
epot[i] += epot_i;
|
||||||
|
|
||||||
if (NEWTON_PAIR || j >= nlocal) {
|
|
||||||
fpair_j = (factor_coul * eps[j] * forcecoul + factor_lj * forcelj) * r2inv;
|
|
||||||
f[j].x -= delx * fpair_j;
|
|
||||||
f[j].y -= dely * fpair_j;
|
|
||||||
f[j].z -= delz * fpair_j;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (EFLAG) {
|
if (EFLAG) {
|
||||||
if (rsq < cut_coulsq[itype][jtype]) {
|
if (rsq < cut_coulsq[itype][jtype]) {
|
||||||
ecoul = factor_coul * qqrd2e * qtmp * q[j] * (etmp + eps[j]) * rinv * screening;
|
ecoul = factor_coul * qqrd2e * qtmp * q[j] * 0.5 * (etmp + eps[j]) * rinv * screening;
|
||||||
} else
|
} else
|
||||||
ecoul = 0.0;
|
ecoul = 0.0;
|
||||||
ecoul *= 0.5;
|
|
||||||
if (rsq < cut_ljsq[itype][jtype]) {
|
if (rsq < cut_ljsq[itype][jtype]) {
|
||||||
evdwl = r6inv * (lj3[itype][jtype] * r6inv - lj4[itype][jtype]) - offset[itype][jtype];
|
evdwl = r6inv * (lj3[itype][jtype] * r6inv - lj4[itype][jtype]) - offset[itype][jtype];
|
||||||
evdwl *= factor_lj;
|
evdwl *= factor_lj;
|
||||||
@ -216,9 +209,7 @@ void PairLJCutCoulDebyeDielectricOMP::eval(int iifrom, int iito, ThrData *const
|
|||||||
evdwl = 0.0;
|
evdwl = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (EVFLAG)
|
if (EVFLAG) ev_tally_full_thr(this, i, evdwl, ecoul, fpair_i, delx, dely, delz, thr);
|
||||||
ev_tally_thr(this, i, j, nlocal, NEWTON_PAIR, evdwl, ecoul, fpair_i, delx, dely, delz,
|
|
||||||
thr);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
f[i].x += fxtmp;
|
f[i].x += fxtmp;
|
||||||
|
|||||||
@ -24,6 +24,7 @@
|
|||||||
#include "math_const.h"
|
#include "math_const.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "neigh_list.h"
|
#include "neigh_list.h"
|
||||||
|
#include "suffix.h"
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
@ -39,6 +40,7 @@ static constexpr double EPSILON = 1.0e-6;
|
|||||||
PairLJCutCoulLongDielectricOMP::PairLJCutCoulLongDielectricOMP(LAMMPS *_lmp) :
|
PairLJCutCoulLongDielectricOMP::PairLJCutCoulLongDielectricOMP(LAMMPS *_lmp) :
|
||||||
PairLJCutCoulLongDielectric(_lmp), ThrOMP(_lmp, THR_PAIR)
|
PairLJCutCoulLongDielectric(_lmp), ThrOMP(_lmp, THR_PAIR)
|
||||||
{
|
{
|
||||||
|
suffix_flag |= Suffix::OMP;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -229,10 +231,10 @@ void PairLJCutCoulLongDielectricOMP::eval(int iifrom, int iito, ThrData *const t
|
|||||||
if (EFLAG) {
|
if (EFLAG) {
|
||||||
if (rsq < cut_coulsq) {
|
if (rsq < cut_coulsq) {
|
||||||
if (!ncoultablebits || rsq <= tabinnersq)
|
if (!ncoultablebits || rsq <= tabinnersq)
|
||||||
ecoul = prefactor * (etmp + eps[j]) * erfc;
|
ecoul = prefactor * 0.5 * (etmp + eps[j]) * erfc;
|
||||||
else {
|
else {
|
||||||
table = etable[itable] + fraction * detable[itable];
|
table = etable[itable] + fraction * detable[itable];
|
||||||
ecoul = qtmp * q[j] * (etmp + eps[j]) * table;
|
ecoul = qtmp * q[j] * 0.5 * (etmp + eps[j]) * table;
|
||||||
}
|
}
|
||||||
if (factor_coul < 1.0) ecoul -= (1.0 - factor_coul) * prefactor;
|
if (factor_coul < 1.0) ecoul -= (1.0 - factor_coul) * prefactor;
|
||||||
} else
|
} else
|
||||||
|
|||||||
@ -597,9 +597,8 @@ void ThrOMP::ev_tally_full_thr(Pair * const pair, const int i, const double evdw
|
|||||||
const double ecoul, const double fpair, const double delx,
|
const double ecoul, const double fpair, const double delx,
|
||||||
const double dely, const double delz, ThrData * const thr)
|
const double dely, const double delz, ThrData * const thr)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (pair->eflag_either)
|
if (pair->eflag_either)
|
||||||
e_tally_thr(pair, i, i+1, i, 0, evdwl, ecoul, thr);
|
e_tally_thr(pair, i, /*j*/ i+1, /*nlocal*/ i+1, /*newton_pair*/ 0, evdwl, ecoul, thr);
|
||||||
|
|
||||||
if (pair->vflag_either) {
|
if (pair->vflag_either) {
|
||||||
double v[6];
|
double v[6];
|
||||||
@ -610,7 +609,7 @@ void ThrOMP::ev_tally_full_thr(Pair * const pair, const int i, const double evdw
|
|||||||
v[4] = delx*delz*fpair;
|
v[4] = delx*delz*fpair;
|
||||||
v[5] = dely*delz*fpair;
|
v[5] = dely*delz*fpair;
|
||||||
|
|
||||||
v_tally_thr(pair, i, i+1, i, 0, v, thr);
|
v_tally_thr(pair, i, /*j*/ i+1, /*nlocal*/ i+1, /*newton_pair*/ 0, v, thr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pair->num_tally_compute > 0) {
|
if (pair->num_tally_compute > 0) {
|
||||||
|
|||||||
389
src/atom.cpp
389
src/atom.cpp
@ -24,6 +24,7 @@
|
|||||||
#include "force.h"
|
#include "force.h"
|
||||||
#include "group.h"
|
#include "group.h"
|
||||||
#include "input.h"
|
#include "input.h"
|
||||||
|
#include "label_map.h"
|
||||||
#include "math_const.h"
|
#include "math_const.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "modify.h"
|
#include "modify.h"
|
||||||
@ -48,14 +49,15 @@ using namespace MathConst;
|
|||||||
|
|
||||||
#define DELTA 1
|
#define DELTA 1
|
||||||
#define EPSILON 1.0e-6
|
#define EPSILON 1.0e-6
|
||||||
|
#define MAXLINE 256
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
one instance per AtomVec style in style_atom.h
|
one instance per AtomVec style in style_atom.h
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
template <typename T> static AtomVec *avec_creator(LAMMPS *lmp)
|
template <typename T> static AtomVec *avec_creator(LAMMPS *_lmp)
|
||||||
{
|
{
|
||||||
return new T(lmp);
|
return new T(_lmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -85,9 +87,9 @@ are updated by the AtomVec class as needed.
|
|||||||
* instances of classes derived from the AtomVec base
|
* instances of classes derived from the AtomVec base
|
||||||
* class, which correspond to the selected atom style.
|
* class, which correspond to the selected atom style.
|
||||||
*
|
*
|
||||||
* \param lmp pointer to the base LAMMPS class */
|
* \param _lmp pointer to the base LAMMPS class */
|
||||||
|
|
||||||
Atom::Atom(LAMMPS *lmp) : Pointers(lmp)
|
Atom::Atom(LAMMPS *_lmp) : Pointers(_lmp)
|
||||||
{
|
{
|
||||||
natoms = 0;
|
natoms = 0;
|
||||||
nlocal = nghost = nmax = 0;
|
nlocal = nghost = nmax = 0;
|
||||||
@ -222,6 +224,10 @@ Atom::Atom(LAMMPS *lmp) : Pointers(lmp)
|
|||||||
nmolecule = 0;
|
nmolecule = 0;
|
||||||
molecules = nullptr;
|
molecules = nullptr;
|
||||||
|
|
||||||
|
// type labels
|
||||||
|
|
||||||
|
lmap = nullptr;
|
||||||
|
|
||||||
// custom atom arrays
|
// custom atom arrays
|
||||||
|
|
||||||
nivector = ndvector = niarray = ndarray = 0;
|
nivector = ndvector = niarray = ndarray = 0;
|
||||||
@ -339,6 +345,10 @@ Atom::~Atom()
|
|||||||
for (int i = 0; i < nmolecule; i++) delete molecules[i];
|
for (int i = 0; i < nmolecule; i++) delete molecules[i];
|
||||||
memory->sfree(molecules);
|
memory->sfree(molecules);
|
||||||
|
|
||||||
|
// delete label map
|
||||||
|
|
||||||
|
delete lmap;
|
||||||
|
|
||||||
// delete per-type arrays
|
// delete per-type arrays
|
||||||
|
|
||||||
delete[] mass;
|
delete[] mass;
|
||||||
@ -616,6 +626,7 @@ void Atom::set_atomflag_defaults()
|
|||||||
// 3rd customization section: customize by adding new flag
|
// 3rd customization section: customize by adding new flag
|
||||||
// identical list as 2nd customization in atom.h
|
// identical list as 2nd customization in atom.h
|
||||||
|
|
||||||
|
labelmapflag = 0;
|
||||||
sphere_flag = ellipsoid_flag = line_flag = tri_flag = body_flag = 0;
|
sphere_flag = ellipsoid_flag = line_flag = tri_flag = body_flag = 0;
|
||||||
quat_flag = 0;
|
quat_flag = 0;
|
||||||
peri_flag = electron_flag = 0;
|
peri_flag = electron_flag = 0;
|
||||||
@ -1032,24 +1043,34 @@ void Atom::deallocate_topology()
|
|||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void Atom::data_atoms(int n, char *buf, tagint id_offset, tagint mol_offset,
|
void Atom::data_atoms(int n, char *buf, tagint id_offset, tagint mol_offset,
|
||||||
int type_offset, int shiftflag, double *shift)
|
int type_offset, int shiftflag, double *shift,
|
||||||
|
int labelflag, int *ilabel)
|
||||||
{
|
{
|
||||||
int xptr,iptr;
|
int xptr,iptr;
|
||||||
imageint imagedata;
|
imageint imagedata;
|
||||||
double xdata[3],lamda[3];
|
double xdata[3],lamda[3];
|
||||||
double *coord;
|
double *coord;
|
||||||
char *next;
|
char *next;
|
||||||
|
std::string typestr;
|
||||||
|
auto location = "Atoms section of data file";
|
||||||
|
|
||||||
// use the first line to detect and validate the number of words/tokens per line
|
// use the first line to detect and validate the number of words/tokens per line
|
||||||
next = strchr(buf,'\n');
|
next = strchr(buf,'\n');
|
||||||
if (!next) error->all(FLERR, "Missing data in Atoms section of data file");
|
if (!next) error->all(FLERR, "Missing data in {}", location);
|
||||||
*next = '\0';
|
*next = '\0';
|
||||||
int nwords = utils::trim_and_count_words(buf);
|
auto values = Tokenizer(buf).as_vector();
|
||||||
*next = '\n';
|
int nwords = values.size();
|
||||||
|
for (std::size_t i = 0; i < values.size(); ++i) {
|
||||||
|
if (utils::strmatch(values[i], "^#")) {
|
||||||
|
nwords = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ((nwords != avec->size_data_atom) && (nwords != avec->size_data_atom + 3))
|
if ((nwords != avec->size_data_atom) && (nwords != avec->size_data_atom + 3))
|
||||||
error->all(FLERR,"Incorrect atom format in data file: {}", utils::trim(buf));
|
error->all(FLERR,"Incorrect format in {}: {}", location, utils::trim(buf));
|
||||||
|
|
||||||
|
*next = '\n';
|
||||||
// set bounds for my proc
|
// set bounds for my proc
|
||||||
// if periodic and I am lo/hi proc, adjust bounds by EPSILON
|
// if periodic and I am lo/hi proc, adjust bounds by EPSILON
|
||||||
// insures all data atoms will be owned even with round-off
|
// insures all data atoms will be owned even with round-off
|
||||||
@ -1120,13 +1141,15 @@ void Atom::data_atoms(int n, char *buf, tagint id_offset, tagint mol_offset,
|
|||||||
|
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
next = strchr(buf,'\n');
|
next = strchr(buf,'\n');
|
||||||
if (!next) error->all(FLERR, "Missing data in Atoms section of data file");
|
if (!next) error->all(FLERR, "Missing data in {}", location);
|
||||||
*next = '\0';
|
*next = '\0';
|
||||||
auto values = Tokenizer(utils::trim_comment(buf)).as_vector();
|
auto values = Tokenizer(buf).as_vector();
|
||||||
if (values.size() == 0) {
|
int nvalues = values.size();
|
||||||
|
if ((nvalues == 0) || (utils::strmatch(values[0],"^#.*"))) {
|
||||||
// skip over empty or comment lines
|
// skip over empty or comment lines
|
||||||
} else if ((int)values.size() != nwords) {
|
} else if ((nvalues < nwords) ||
|
||||||
error->all(FLERR, "Incorrect atom format in data file: {}", utils::trim(buf));
|
((nvalues > nwords) && (!utils::strmatch(values[nwords],"^#")))) {
|
||||||
|
error->all(FLERR, "Incorrect format in {}: {}", location, utils::trim(buf));
|
||||||
} else {
|
} else {
|
||||||
int imx = 0, imy = 0, imz = 0;
|
int imx = 0, imy = 0, imz = 0;
|
||||||
if (imageflag) {
|
if (imageflag) {
|
||||||
@ -1161,14 +1184,36 @@ void Atom::data_atoms(int n, char *buf, tagint id_offset, tagint mol_offset,
|
|||||||
if (coord[0] >= sublo[0] && coord[0] < subhi[0] &&
|
if (coord[0] >= sublo[0] && coord[0] < subhi[0] &&
|
||||||
coord[1] >= sublo[1] && coord[1] < subhi[1] &&
|
coord[1] >= sublo[1] && coord[1] < subhi[1] &&
|
||||||
coord[2] >= sublo[2] && coord[2] < subhi[2]) {
|
coord[2] >= sublo[2] && coord[2] < subhi[2]) {
|
||||||
avec->data_atom(xdata,imagedata,values);
|
avec->data_atom(xdata,imagedata,values,typestr);
|
||||||
|
typestr = utils::utf8_subst(typestr);
|
||||||
if (id_offset) tag[nlocal-1] += id_offset;
|
if (id_offset) tag[nlocal-1] += id_offset;
|
||||||
if (mol_offset) molecule[nlocal-1] += mol_offset;
|
if (mol_offset) molecule[nlocal-1] += mol_offset;
|
||||||
if (type_offset) {
|
|
||||||
type[nlocal-1] += type_offset;
|
switch (utils::is_type(typestr)) {
|
||||||
if (type[nlocal-1] > ntypes)
|
case 0: { // numeric
|
||||||
error->one(FLERR,"Invalid atom type in Atoms section of data file");
|
int itype = utils::inumeric(FLERR, typestr, true, lmp) + type_offset;
|
||||||
|
if ((itype < 1) || (itype > ntypes))
|
||||||
|
error->one(FLERR, "Invalid atom type {} in {}: {}", itype, location,
|
||||||
|
utils::trim(buf));
|
||||||
|
type[nlocal - 1] = itype;
|
||||||
|
if (labelflag) type[nlocal - 1] = ilabel[itype - 1];
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
case 1: { // type label
|
||||||
|
if (!atom->labelmapflag)
|
||||||
|
error->one(FLERR, "Invalid line in {}: {}", location, utils::trim(buf));
|
||||||
|
type[nlocal - 1] = lmap->find(typestr, Atom::ATOM);
|
||||||
|
if (type[nlocal - 1] == -1)
|
||||||
|
error->one(FLERR, "Invalid line in {}: {}", location, utils::trim(buf));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: // invalid
|
||||||
|
error->one(FLERR, "Invalid line in {}: {}", location, utils::trim(buf));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type[nlocal-1] <= 0 || type[nlocal-1] > ntypes)
|
||||||
|
error->one(FLERR,"Invalid atom type {} in {}", location, typestr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
buf = next + 1;
|
buf = next + 1;
|
||||||
@ -1217,41 +1262,64 @@ void Atom::data_vels(int n, char *buf, tagint id_offset)
|
|||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void Atom::data_bonds(int n, char *buf, int *count, tagint id_offset,
|
void Atom::data_bonds(int n, char *buf, int *count, tagint id_offset,
|
||||||
int type_offset)
|
int type_offset, int labelflag, int *ilabel)
|
||||||
{
|
{
|
||||||
int m,itype;
|
int m,itype;
|
||||||
tagint atom1,atom2;
|
tagint atom1,atom2;
|
||||||
char *next;
|
char *next;
|
||||||
|
std::string typestr;
|
||||||
int newton_bond = force->newton_bond;
|
int newton_bond = force->newton_bond;
|
||||||
auto location = "Bonds section of data file";
|
auto location = "Bonds section of data file";
|
||||||
|
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
next = strchr(buf,'\n');
|
next = strchr(buf,'\n');
|
||||||
if (!next) error->all(FLERR, "Missing data in Bonds section of data file");
|
if (!next) error->all(FLERR, "Missing data in {}", location);
|
||||||
*next = '\0';
|
*next = '\0';
|
||||||
ValueTokenizer values(utils::trim_comment(buf));
|
auto values = Tokenizer(buf).as_vector();
|
||||||
// skip over empty of comment lines
|
int nwords = values.size();
|
||||||
if (values.has_next()) {
|
for (std::size_t i = 0; i < values.size(); ++i) {
|
||||||
try {
|
if (utils::strmatch(values[i], "^#")) {
|
||||||
values.next_int();
|
nwords = i;
|
||||||
itype = values.next_int();
|
break;
|
||||||
atom1 = values.next_tagint();
|
|
||||||
atom2 = values.next_tagint();
|
|
||||||
if (values.has_next()) throw TokenizerException("Too many tokens","");
|
|
||||||
} catch (TokenizerException &e) {
|
|
||||||
error->one(FLERR,"{} in {}: {}", e.what(), location, utils::trim(buf));
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// skip over empty or comment lines
|
||||||
|
// Bonds line is: number(ignored), bond type, atomID 1, atomID 2
|
||||||
|
if (nwords > 0) {
|
||||||
|
if (nwords != 4) error->all(FLERR, "Incorrect format in {}: {}", location, utils::trim(buf));
|
||||||
|
typestr = utils::utf8_subst(values[1]);
|
||||||
|
atom1 = utils::tnumeric(FLERR, values[2], false, lmp);
|
||||||
|
atom2 = utils::tnumeric(FLERR, values[3], false, lmp);
|
||||||
if (id_offset) {
|
if (id_offset) {
|
||||||
atom1 += id_offset;
|
atom1 += id_offset;
|
||||||
atom2 += id_offset;
|
atom2 += id_offset;
|
||||||
}
|
}
|
||||||
itype += type_offset;
|
|
||||||
|
switch (utils::is_type(typestr)) {
|
||||||
|
case 0: { // numeric
|
||||||
|
itype = utils::inumeric(FLERR, typestr, false, lmp) + type_offset;
|
||||||
|
if ((itype < 1) || (itype > nbondtypes))
|
||||||
|
error->all(FLERR, "Invalid bond type {} in {}: {}", itype, location, utils::trim(buf));
|
||||||
|
if (labelflag) itype = ilabel[itype - 1];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 1: { // type label
|
||||||
|
if (!atom->labelmapflag) error->all(FLERR, "Invalid {}: {}", location, utils::trim(buf));
|
||||||
|
itype = lmap->find(typestr, Atom::BOND);
|
||||||
|
if (itype == -1) error->all(FLERR, "Invalid {}: {}", location, utils::trim(buf));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: // invalid
|
||||||
|
error->one(FLERR, "Invalid {}: {}", location, utils::trim(buf));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if ((atom1 <= 0) || (atom1 > map_tag_max) ||
|
if ((atom1 <= 0) || (atom1 > map_tag_max) ||
|
||||||
(atom2 <= 0) || (atom2 > map_tag_max) || (atom1 == atom2))
|
(atom2 <= 0) || (atom2 > map_tag_max) || (atom1 == atom2))
|
||||||
error->one(FLERR,"Invalid atom ID in {}: {}", location, utils::trim(buf));
|
error->all(FLERR,"Invalid atom ID in {}: {}", location, utils::trim(buf));
|
||||||
if (itype <= 0 || itype > nbondtypes)
|
if ((itype <= 0) || (itype > nbondtypes))
|
||||||
error->one(FLERR,"Invalid bond type in {}: {}", location, utils::trim(buf));
|
error->all(FLERR,"Invalid bond type {} in {}: {}", itype, location, utils::trim(buf));
|
||||||
if ((m = map(atom1)) >= 0) {
|
if ((m = map(atom1)) >= 0) {
|
||||||
if (count) count[m]++;
|
if (count) count[m]++;
|
||||||
else {
|
else {
|
||||||
@ -1285,37 +1353,60 @@ void Atom::data_bonds(int n, char *buf, int *count, tagint id_offset,
|
|||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void Atom::data_angles(int n, char *buf, int *count, tagint id_offset,
|
void Atom::data_angles(int n, char *buf, int *count, tagint id_offset,
|
||||||
int type_offset)
|
int type_offset, int labelflag, int *ilabel)
|
||||||
{
|
{
|
||||||
int m,itype;
|
int m,itype;
|
||||||
tagint atom1,atom2,atom3;
|
tagint atom1,atom2,atom3;
|
||||||
char *next;
|
char *next;
|
||||||
|
std::string typestr;
|
||||||
int newton_bond = force->newton_bond;
|
int newton_bond = force->newton_bond;
|
||||||
auto location = "Angles section of data file";
|
auto location = "Angles section of data file";
|
||||||
|
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
next = strchr(buf,'\n');
|
next = strchr(buf,'\n');
|
||||||
if (!next) error->all(FLERR, "Missing data in Angles section of data file");
|
if (!next) error->all(FLERR, "Missing data in {}", location);
|
||||||
*next = '\0';
|
*next = '\0';
|
||||||
ValueTokenizer values(utils::trim_comment(buf));
|
auto values = Tokenizer(buf).as_vector();
|
||||||
// skip over empty or comment lines
|
int nwords = values.size();
|
||||||
if (values.has_next()) {
|
for (std::size_t i = 0; i < values.size(); ++i) {
|
||||||
try {
|
if (utils::strmatch(values[i], "^#")) {
|
||||||
values.next_int();
|
nwords = i;
|
||||||
itype = values.next_int();
|
break;
|
||||||
atom1 = values.next_tagint();
|
|
||||||
atom2 = values.next_tagint();
|
|
||||||
atom3 = values.next_tagint();
|
|
||||||
if (values.has_next()) throw TokenizerException("Too many tokens","");
|
|
||||||
} catch (TokenizerException &e) {
|
|
||||||
error->one(FLERR,"{} in {}: {}", e.what(), location, utils::trim(buf));
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// skip over empty or comment lines
|
||||||
|
// Angles line is: number(ignored), angle type, atomID 1, atomID 2, atomID 3
|
||||||
|
if (nwords > 0) {
|
||||||
|
if (nwords != 5) error->all(FLERR, "Incorrect format in {}: {}", location, utils::trim(buf));
|
||||||
|
typestr = utils::utf8_subst(values[1]);
|
||||||
|
atom1 = utils::tnumeric(FLERR, values[2], false, lmp);
|
||||||
|
atom2 = utils::tnumeric(FLERR, values[3], false, lmp);
|
||||||
|
atom3 = utils::tnumeric(FLERR, values[4], false, lmp);
|
||||||
if (id_offset) {
|
if (id_offset) {
|
||||||
atom1 += id_offset;
|
atom1 += id_offset;
|
||||||
atom2 += id_offset;
|
atom2 += id_offset;
|
||||||
atom3 += id_offset;
|
atom3 += id_offset;
|
||||||
}
|
}
|
||||||
itype += type_offset;
|
|
||||||
|
switch (utils::is_type(typestr)) {
|
||||||
|
case 0: { // numeric
|
||||||
|
itype = utils::inumeric(FLERR, typestr, false, lmp) + type_offset;
|
||||||
|
if ((itype < 1) || (itype > nangletypes))
|
||||||
|
error->all(FLERR, "Invalid angle type {} in {}: {}", itype, location, utils::trim(buf));
|
||||||
|
if (labelflag) itype = ilabel[itype - 1];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 1: { // type label
|
||||||
|
if (!atom->labelmapflag) error->all(FLERR, "Invalid {}: {}", location, utils::trim(buf));
|
||||||
|
itype = lmap->find(typestr, Atom::ANGLE);
|
||||||
|
if (itype == -1) error->all(FLERR, "Invalid {}: {}", location, utils::trim(buf));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: // invalid
|
||||||
|
error->one(FLERR, "Invalid {}: {}", location, utils::trim(buf));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if ((atom1 <= 0) || (atom1 > map_tag_max) ||
|
if ((atom1 <= 0) || (atom1 > map_tag_max) ||
|
||||||
(atom2 <= 0) || (atom2 > map_tag_max) ||
|
(atom2 <= 0) || (atom2 > map_tag_max) ||
|
||||||
@ -1323,7 +1414,7 @@ void Atom::data_angles(int n, char *buf, int *count, tagint id_offset,
|
|||||||
(atom1 == atom2) || (atom1 == atom3) || (atom2 == atom3))
|
(atom1 == atom2) || (atom1 == atom3) || (atom2 == atom3))
|
||||||
error->one(FLERR,"Invalid atom ID in {}: {}", location, utils::trim(buf));
|
error->one(FLERR,"Invalid atom ID in {}: {}", location, utils::trim(buf));
|
||||||
if (itype <= 0 || itype > nangletypes)
|
if (itype <= 0 || itype > nangletypes)
|
||||||
error->one(FLERR,"Invalid angle type in {}: {}", location, utils::trim(buf));
|
error->one(FLERR,"Invalid angle type {} in {}: {}", itype, location, utils::trim(buf));
|
||||||
if ((m = map(atom2)) >= 0) {
|
if ((m = map(atom2)) >= 0) {
|
||||||
if (count) count[m]++;
|
if (count) count[m]++;
|
||||||
else {
|
else {
|
||||||
@ -1369,39 +1460,63 @@ void Atom::data_angles(int n, char *buf, int *count, tagint id_offset,
|
|||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void Atom::data_dihedrals(int n, char *buf, int *count, tagint id_offset,
|
void Atom::data_dihedrals(int n, char *buf, int *count, tagint id_offset,
|
||||||
int type_offset)
|
int type_offset, int labelflag, int *ilabel)
|
||||||
{
|
{
|
||||||
int m,itype;
|
int m,itype;
|
||||||
tagint atom1,atom2,atom3,atom4;
|
tagint atom1,atom2,atom3,atom4;
|
||||||
char *next;
|
char *next;
|
||||||
|
std::string typestr;
|
||||||
int newton_bond = force->newton_bond;
|
int newton_bond = force->newton_bond;
|
||||||
auto location = "Dihedrals section of data file";
|
auto location = "Dihedrals section of data file";
|
||||||
|
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
next = strchr(buf,'\n');
|
next = strchr(buf,'\n');
|
||||||
if (!next) error->all(FLERR, "Missing data in Dihedrals section of data file");
|
if (!next) error->all(FLERR, "Missing data in {}", location);
|
||||||
*next = '\0';
|
*next = '\0';
|
||||||
ValueTokenizer values(utils::trim_comment(buf));
|
auto values = Tokenizer(buf).as_vector();
|
||||||
// skip over empty or comment lines
|
int nwords = values.size();
|
||||||
if (values.has_next()) {
|
for (std::size_t i = 0; i < values.size(); ++i) {
|
||||||
try {
|
if (utils::strmatch(values[i], "^#")) {
|
||||||
values.next_int();
|
nwords = i;
|
||||||
itype = values.next_int();
|
break;
|
||||||
atom1 = values.next_tagint();
|
|
||||||
atom2 = values.next_tagint();
|
|
||||||
atom3 = values.next_tagint();
|
|
||||||
atom4 = values.next_tagint();
|
|
||||||
if (values.has_next()) throw TokenizerException("Too many tokens","");
|
|
||||||
} catch (TokenizerException &e) {
|
|
||||||
error->one(FLERR,"{} in {}: {}", e.what(), location, utils::trim(buf));
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// skip over empty or comment lines
|
||||||
|
// Dihedrals line is: number(ignored), bond type, atomID 1, atomID 2, atomID 3, atomID 4
|
||||||
|
if (nwords > 0) {
|
||||||
|
if (nwords != 6) error->all(FLERR, "Incorrect format in {}: {}", location, utils::trim(buf));
|
||||||
|
typestr = utils::utf8_subst(values[1]);
|
||||||
|
atom1 = utils::tnumeric(FLERR, values[2], false, lmp);
|
||||||
|
atom2 = utils::tnumeric(FLERR, values[3], false, lmp);
|
||||||
|
atom3 = utils::tnumeric(FLERR, values[4], false, lmp);
|
||||||
|
atom4 = utils::tnumeric(FLERR, values[5], false, lmp);
|
||||||
if (id_offset) {
|
if (id_offset) {
|
||||||
atom1 += id_offset;
|
atom1 += id_offset;
|
||||||
atom2 += id_offset;
|
atom2 += id_offset;
|
||||||
atom3 += id_offset;
|
atom3 += id_offset;
|
||||||
atom4 += id_offset;
|
atom4 += id_offset;
|
||||||
}
|
}
|
||||||
itype += type_offset;
|
|
||||||
|
switch (utils::is_type(typestr)) {
|
||||||
|
case 0: { // numeric
|
||||||
|
itype = utils::inumeric(FLERR, typestr, false, lmp) + type_offset;
|
||||||
|
if ((itype < 1) || (itype > ndihedraltypes))
|
||||||
|
error->all(FLERR, "Invalid dihedral type {} in {}: {}", itype, location,
|
||||||
|
utils::trim(buf));
|
||||||
|
if (labelflag) itype = ilabel[itype - 1];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 1: { // type label
|
||||||
|
if (!atom->labelmapflag) error->all(FLERR, "Invalid {}: {}", location, utils::trim(buf));
|
||||||
|
itype = lmap->find(typestr, Atom::DIHEDRAL);
|
||||||
|
if (itype == -1) error->all(FLERR, "Invalid {}: {}", location, utils::trim(buf));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: // invalid
|
||||||
|
error->one(FLERR, "Invalid {}: {}", location, utils::trim(buf));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if ((atom1 <= 0) || (atom1 > map_tag_max) ||
|
if ((atom1 <= 0) || (atom1 > map_tag_max) ||
|
||||||
(atom2 <= 0) || (atom2 > map_tag_max) ||
|
(atom2 <= 0) || (atom2 > map_tag_max) ||
|
||||||
@ -1411,7 +1526,7 @@ void Atom::data_dihedrals(int n, char *buf, int *count, tagint id_offset,
|
|||||||
(atom2 == atom3) || (atom2 == atom4) || (atom3 == atom4))
|
(atom2 == atom3) || (atom2 == atom4) || (atom3 == atom4))
|
||||||
error->one(FLERR, "Invalid atom ID in {}: {}", location, utils::trim(buf));
|
error->one(FLERR, "Invalid atom ID in {}: {}", location, utils::trim(buf));
|
||||||
if (itype <= 0 || itype > ndihedraltypes)
|
if (itype <= 0 || itype > ndihedraltypes)
|
||||||
error->one(FLERR, "Invalid dihedral type in {}: {}", location, utils::trim(buf));
|
error->one(FLERR, "Invalid dihedral type {} in {}: {}", itype, location, utils::trim(buf));
|
||||||
if ((m = map(atom2)) >= 0) {
|
if ((m = map(atom2)) >= 0) {
|
||||||
if (count) count[m]++;
|
if (count) count[m]++;
|
||||||
else {
|
else {
|
||||||
@ -1471,39 +1586,63 @@ void Atom::data_dihedrals(int n, char *buf, int *count, tagint id_offset,
|
|||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void Atom::data_impropers(int n, char *buf, int *count, tagint id_offset,
|
void Atom::data_impropers(int n, char *buf, int *count, tagint id_offset,
|
||||||
int type_offset)
|
int type_offset, int labelflag, int *ilabel)
|
||||||
{
|
{
|
||||||
int m,itype;
|
int m,itype;
|
||||||
tagint atom1,atom2,atom3,atom4;
|
tagint atom1,atom2,atom3,atom4;
|
||||||
char *next;
|
char *next;
|
||||||
|
std::string typestr;
|
||||||
int newton_bond = force->newton_bond;
|
int newton_bond = force->newton_bond;
|
||||||
auto location = "Impropers section of data file";
|
auto location = "Impropers section of data file";
|
||||||
|
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
next = strchr(buf,'\n');
|
next = strchr(buf,'\n');
|
||||||
if (!next) error->all(FLERR, "Missing data in Impropers section of data file");
|
if (!next) error->all(FLERR, "Missing data in {}", location);
|
||||||
*next = '\0';
|
*next = '\0';
|
||||||
ValueTokenizer values(utils::trim_comment(buf));
|
auto values = Tokenizer(buf).as_vector();
|
||||||
// skip over empty or comment lines
|
int nwords = values.size();
|
||||||
if (values.has_next()) {
|
for (std::size_t i = 0; i < values.size(); ++i) {
|
||||||
try {
|
if (utils::strmatch(values[i], "^#")) {
|
||||||
values.next_int();
|
nwords = i;
|
||||||
itype = values.next_int();
|
break;
|
||||||
atom1 = values.next_tagint();
|
|
||||||
atom2 = values.next_tagint();
|
|
||||||
atom3 = values.next_tagint();
|
|
||||||
atom4 = values.next_tagint();
|
|
||||||
if (values.has_next()) throw TokenizerException("Too many tokens","");
|
|
||||||
} catch (TokenizerException &e) {
|
|
||||||
error->one(FLERR,"{} in {}: {}", e.what(), location, utils::trim(buf));
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// skip over empty or comment lines
|
||||||
|
// Impropers line is: number(ignored), bond type, atomID 1, atomID 2, atomID 3, atomID 4
|
||||||
|
if (nwords > 0) {
|
||||||
|
if (nwords != 6) error->all(FLERR, "Incorrect format in {}: {}", location, utils::trim(buf));
|
||||||
|
typestr = utils::utf8_subst(values[1]);
|
||||||
|
atom1 = utils::tnumeric(FLERR, values[2], false, lmp);
|
||||||
|
atom2 = utils::tnumeric(FLERR, values[3], false, lmp);
|
||||||
|
atom3 = utils::tnumeric(FLERR, values[4], false, lmp);
|
||||||
|
atom4 = utils::tnumeric(FLERR, values[5], false, lmp);
|
||||||
if (id_offset) {
|
if (id_offset) {
|
||||||
atom1 += id_offset;
|
atom1 += id_offset;
|
||||||
atom2 += id_offset;
|
atom2 += id_offset;
|
||||||
atom3 += id_offset;
|
atom3 += id_offset;
|
||||||
atom4 += id_offset;
|
atom4 += id_offset;
|
||||||
}
|
}
|
||||||
itype += type_offset;
|
|
||||||
|
switch (utils::is_type(typestr)) {
|
||||||
|
case 0: { // numeric
|
||||||
|
itype = utils::inumeric(FLERR, typestr, false, lmp) + type_offset;
|
||||||
|
if ((itype < 1) || (itype > nimpropertypes))
|
||||||
|
error->all(FLERR, "Invalid improper type {} in {}: {}", itype, location,
|
||||||
|
utils::trim(buf));
|
||||||
|
if (labelflag) itype = ilabel[itype - 1];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 1: { // type label
|
||||||
|
if (!atom->labelmapflag) error->all(FLERR, "Invalid {}: {}", location, utils::trim(buf));
|
||||||
|
itype = lmap->find(typestr, Atom::IMPROPER);
|
||||||
|
if (itype == -1) error->all(FLERR, "Invalid {}: {}", location, utils::trim(buf));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: // invalid
|
||||||
|
error->one(FLERR, "Invalid {}: {}", location, utils::trim(buf));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if ((atom1 <= 0) || (atom1 > map_tag_max) ||
|
if ((atom1 <= 0) || (atom1 > map_tag_max) ||
|
||||||
(atom2 <= 0) || (atom2 > map_tag_max) ||
|
(atom2 <= 0) || (atom2 > map_tag_max) ||
|
||||||
@ -1513,7 +1652,7 @@ void Atom::data_impropers(int n, char *buf, int *count, tagint id_offset,
|
|||||||
(atom2 == atom3) || (atom2 == atom4) || (atom3 == atom4))
|
(atom2 == atom3) || (atom2 == atom4) || (atom3 == atom4))
|
||||||
error->one(FLERR, "Invalid atom ID in {}: {}", location, utils::trim(buf));
|
error->one(FLERR, "Invalid atom ID in {}: {}", location, utils::trim(buf));
|
||||||
if (itype <= 0 || itype > nimpropertypes)
|
if (itype <= 0 || itype > nimpropertypes)
|
||||||
error->one(FLERR, "Invalid improper type in {}: {}", location, utils::trim(buf));
|
error->one(FLERR, "Invalid improper type {} in {}: {}", itype, location, utils::trim(buf));
|
||||||
if ((m = map(atom2)) >= 0) {
|
if ((m = map(atom2)) >= 0) {
|
||||||
if (count) count[m]++;
|
if (count) count[m]++;
|
||||||
else {
|
else {
|
||||||
@ -1717,30 +1856,63 @@ void Atom::allocate_type_arrays()
|
|||||||
called from reading of data file
|
called from reading of data file
|
||||||
type_offset may be used when reading multiple data files
|
type_offset may be used when reading multiple data files
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
void Atom::set_mass(const char *file, int line, const char *str, int type_offset)
|
void Atom::set_mass(const char *file, int line, const char *str, int type_offset, int labelflag,
|
||||||
|
int *ilabel)
|
||||||
{
|
{
|
||||||
if (mass == nullptr) error->all(file, line, "Cannot set mass for atom style {}", atom_style);
|
if (mass == nullptr) error->all(file, line, "Cannot set mass for atom style {}", atom_style);
|
||||||
|
|
||||||
int itype;
|
int itype;
|
||||||
double mass_one;
|
double mass_one;
|
||||||
ValueTokenizer values(utils::trim_comment(str));
|
auto location = "Masses section of data file";
|
||||||
if (values.has_next()) {
|
auto values = Tokenizer(str).as_vector();
|
||||||
try {
|
int nwords = values.size();
|
||||||
itype = values.next_int() + type_offset;
|
for (std::size_t i = 0; i < values.size(); ++i) {
|
||||||
mass_one = values.next_double();
|
if (utils::strmatch(values[i], "^#")) {
|
||||||
if (values.has_next()) throw TokenizerException("Too many tokens", "");
|
nwords = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (nwords != 2) error->all(file, line, "Invalid format in {}: {}", location, str);
|
||||||
|
auto typestr = utils::utf8_subst(values[0]);
|
||||||
|
|
||||||
if (itype < 1 || itype > ntypes) throw TokenizerException("Invalid atom type", "");
|
switch (utils::is_type(typestr)) {
|
||||||
if (mass_one <= 0.0) throw TokenizerException("Invalid mass value", "");
|
|
||||||
} catch (TokenizerException &e) {
|
case 0: { // numeric
|
||||||
error->all(file,line,"{} in Masses section of data file: {}", e.what(), utils::trim(str));
|
itype = utils::inumeric(file, line, typestr, false, lmp);
|
||||||
|
if ((itype < 1) || (itype > ntypes))
|
||||||
|
error->all(file, line, "Invalid atom type {} in {}: {}", itype, location, utils::trim(str));
|
||||||
|
if (labelflag) itype = ilabel[itype - 1];
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case 1: { // type label
|
||||||
|
if (!atom->labelmapflag)
|
||||||
|
error->all(file, line, "Invalid atom type in {}: {}", location, utils::trim(str));
|
||||||
|
itype = lmap->find(typestr, Atom::ATOM);
|
||||||
|
if (itype == -1)
|
||||||
|
error->all(file, line, "Unknown atom type {} in {}: {}", typestr, location,
|
||||||
|
utils::trim(str));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default: // invalid
|
||||||
|
error->one(file, line, "Invalid {}: {}", location, utils::trim(str));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
itype += type_offset;
|
||||||
|
mass_one = utils::numeric(file, line, values[1], false, lmp);
|
||||||
|
|
||||||
|
if (itype < 1 || itype > ntypes)
|
||||||
|
error->all(file, line, "Invalid atom type {} in {}: {}", itype, location, utils::trim(str));
|
||||||
|
|
||||||
|
if (mass_one <= 0.0)
|
||||||
|
error->all(file, line, "Invalid mass value {} in {}: {}", mass_one, location, utils::trim(str));
|
||||||
mass[itype] = mass_one;
|
mass[itype] = mass_one;
|
||||||
mass_setflag[itype] = 1;
|
mass_setflag[itype] = 1;
|
||||||
}
|
}
|
||||||
}
|
// clang-format off
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
set a mass and flag it as set
|
set a mass and flag it as set
|
||||||
@ -1765,15 +1937,20 @@ void Atom::set_mass(const char *file, int line, int itype, double value)
|
|||||||
|
|
||||||
void Atom::set_mass(const char *file, int line, int /*narg*/, char **arg)
|
void Atom::set_mass(const char *file, int line, int /*narg*/, char **arg)
|
||||||
{
|
{
|
||||||
if (mass == nullptr) error->all(file,line, "Cannot set atom mass for atom style {}", atom_style);
|
if (mass == nullptr)
|
||||||
|
error->all(file,line, "Cannot set per-type atom mass for atom style {}", atom_style);
|
||||||
|
|
||||||
|
char *typestr = utils::expand_type(file, line, arg[0], Atom::ATOM, lmp);
|
||||||
|
if (typestr) arg[0] = typestr;
|
||||||
|
|
||||||
int lo, hi;
|
int lo, hi;
|
||||||
utils::bounds(file, line, arg[0], 1, ntypes, lo, hi, error);
|
utils::bounds(file, line, arg[0], 1, ntypes, lo, hi, error);
|
||||||
if ((lo < 1) || (hi > ntypes))
|
if ((lo < 1) || (hi > ntypes))
|
||||||
error->all(file,line,"Invalid type {} for atom mass {}", arg[1]);
|
error->all(file, line, "Invalid atom type {} for atom mass", arg[0]);
|
||||||
|
|
||||||
const double value = utils::numeric(FLERR, arg[1], false, lmp);
|
const double value = utils::numeric(FLERR, arg[1], false, lmp);
|
||||||
if (value <= 0.0) error->all(file,line,"Invalid atom mass value {}", value);
|
if (value <= 0.0)
|
||||||
|
error->all(file, line, "Invalid atom mass value {} for type {}", value, arg[0]);
|
||||||
|
|
||||||
for (int itype = lo; itype <= hi; itype++) {
|
for (int itype = lo; itype <= hi; itype++) {
|
||||||
mass[itype] = value;
|
mass[itype] = value;
|
||||||
@ -2011,6 +2188,16 @@ void Atom::add_molecule_atom(Molecule *onemol, int iatom, int ilocal, tagint off
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
allocate space for type label map
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void Atom::add_label_map()
|
||||||
|
{
|
||||||
|
labelmapflag = 1;
|
||||||
|
lmap = new LabelMap(lmp,ntypes,nbondtypes,nangletypes,ndihedraltypes,nimpropertypes);
|
||||||
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
reorder owned atoms so those in firstgroup appear first
|
reorder owned atoms so those in firstgroup appear first
|
||||||
called by comm->exchange() if atom_modify first group is set
|
called by comm->exchange() if atom_modify first group is set
|
||||||
|
|||||||
22
src/atom.h
22
src/atom.h
@ -32,6 +32,8 @@ class Atom : protected Pointers {
|
|||||||
enum { DOUBLE, INT, BIGINT };
|
enum { DOUBLE, INT, BIGINT };
|
||||||
enum { GROW = 0, RESTART = 1, BORDER = 2 };
|
enum { GROW = 0, RESTART = 1, BORDER = 2 };
|
||||||
enum { ATOMIC = 0, MOLECULAR = 1, TEMPLATE = 2 };
|
enum { ATOMIC = 0, MOLECULAR = 1, TEMPLATE = 2 };
|
||||||
|
enum { ATOM = 0, BOND = 1, ANGLE = 2, DIHEDRAL = 3, IMPROPER = 4 };
|
||||||
|
enum { NUMERIC = 0, LABELS = 1};
|
||||||
enum { MAP_NONE = 0, MAP_ARRAY = 1, MAP_HASH = 2, MAP_YES = 3 };
|
enum { MAP_NONE = 0, MAP_ARRAY = 1, MAP_HASH = 2, MAP_YES = 3 };
|
||||||
|
|
||||||
// atom counts
|
// atom counts
|
||||||
@ -181,6 +183,7 @@ class Atom : protected Pointers {
|
|||||||
// most are existence flags for per-atom vectors and arrays
|
// most are existence flags for per-atom vectors and arrays
|
||||||
// 1 if variable is used, 0 if not
|
// 1 if variable is used, 0 if not
|
||||||
|
|
||||||
|
int labelmapflag, types_style;
|
||||||
int sphere_flag, ellipsoid_flag, line_flag, tri_flag, body_flag;
|
int sphere_flag, ellipsoid_flag, line_flag, tri_flag, body_flag;
|
||||||
int peri_flag, electron_flag;
|
int peri_flag, electron_flag;
|
||||||
int wavepacket_flag, sph_flag;
|
int wavepacket_flag, sph_flag;
|
||||||
@ -251,6 +254,10 @@ class Atom : protected Pointers {
|
|||||||
int nmolecule;
|
int nmolecule;
|
||||||
class Molecule **molecules;
|
class Molecule **molecules;
|
||||||
|
|
||||||
|
// type label maps
|
||||||
|
|
||||||
|
class LabelMap *lmap;
|
||||||
|
|
||||||
// extra peratom info in restart file destined for fix & diag
|
// extra peratom info in restart file destined for fix & diag
|
||||||
|
|
||||||
double **extra;
|
double **extra;
|
||||||
@ -324,18 +331,19 @@ class Atom : protected Pointers {
|
|||||||
|
|
||||||
void deallocate_topology();
|
void deallocate_topology();
|
||||||
|
|
||||||
void data_atoms(int, char *, tagint, tagint, int, int, double *);
|
void data_atoms(int, char *, tagint, tagint, int, int, double *,
|
||||||
|
int, int *);
|
||||||
void data_vels(int, char *, tagint);
|
void data_vels(int, char *, tagint);
|
||||||
void data_bonds(int, char *, int *, tagint, int);
|
void data_bonds(int, char *, int *, tagint, int, int, int *);
|
||||||
void data_angles(int, char *, int *, tagint, int);
|
void data_angles(int, char *, int *, tagint, int, int, int *);
|
||||||
void data_dihedrals(int, char *, int *, tagint, int);
|
void data_dihedrals(int, char *, int *, tagint, int, int, int *);
|
||||||
void data_impropers(int, char *, int *, tagint, int);
|
void data_impropers(int, char *, int *, tagint, int, int, int *);
|
||||||
void data_bonus(int, char *, AtomVec *, tagint);
|
void data_bonus(int, char *, AtomVec *, tagint);
|
||||||
void data_bodies(int, char *, AtomVec *, tagint);
|
void data_bodies(int, char *, AtomVec *, tagint);
|
||||||
void data_fix_compute_variable(int, int);
|
void data_fix_compute_variable(int, int);
|
||||||
|
|
||||||
virtual void allocate_type_arrays();
|
virtual void allocate_type_arrays();
|
||||||
void set_mass(const char *, int, const char *, int);
|
void set_mass(const char *, int, const char *, int, int, int *);
|
||||||
void set_mass(const char *, int, int, double);
|
void set_mass(const char *, int, int, double);
|
||||||
void set_mass(const char *, int, int, char **);
|
void set_mass(const char *, int, int, char **);
|
||||||
void set_mass(double *);
|
void set_mass(double *);
|
||||||
@ -349,6 +357,8 @@ class Atom : protected Pointers {
|
|||||||
std::vector<Molecule *>get_molecule_by_id(const std::string &);
|
std::vector<Molecule *>get_molecule_by_id(const std::string &);
|
||||||
void add_molecule_atom(class Molecule *, int, int, tagint);
|
void add_molecule_atom(class Molecule *, int, int, tagint);
|
||||||
|
|
||||||
|
void add_label_map();
|
||||||
|
|
||||||
void first_reorder();
|
void first_reorder();
|
||||||
virtual void sort();
|
virtual void sort();
|
||||||
|
|
||||||
|
|||||||
@ -19,6 +19,7 @@
|
|||||||
#include "error.h"
|
#include "error.h"
|
||||||
#include "fix.h"
|
#include "fix.h"
|
||||||
#include "force.h"
|
#include "force.h"
|
||||||
|
#include "label_map.h"
|
||||||
#include "math_const.h"
|
#include "math_const.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "modify.h"
|
#include "modify.h"
|
||||||
@ -1649,12 +1650,24 @@ void AtomVec::create_atom(int itype, double *coord)
|
|||||||
atom->nlocal++;
|
atom->nlocal++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
version of data_atom without extract option
|
||||||
|
temporary fix for Kokkos compilation
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void AtomVec::data_atom(double *coord, imageint imagetmp, const std::vector<std::string> &values)
|
||||||
|
{
|
||||||
|
std::string strtmp;
|
||||||
|
data_atom(coord, imagetmp, values, strtmp);
|
||||||
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
unpack one line from Atoms section of data file
|
unpack one line from Atoms section of data file
|
||||||
initialize other peratom quantities
|
initialize other peratom quantities
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void AtomVec::data_atom(double *coord, imageint imagetmp, const std::vector<std::string> &values)
|
void AtomVec::data_atom(double *coord, imageint imagetmp, const std::vector<std::string> &values,
|
||||||
|
std::string &extract)
|
||||||
{
|
{
|
||||||
int m, n, datatype, cols;
|
int m, n, datatype, cols;
|
||||||
void *pdata;
|
void *pdata;
|
||||||
@ -1692,6 +1705,10 @@ void AtomVec::data_atom(double *coord, imageint imagetmp, const std::vector<std:
|
|||||||
} else if (datatype == Atom::INT) {
|
} else if (datatype == Atom::INT) {
|
||||||
if (cols == 0) {
|
if (cols == 0) {
|
||||||
int *vec = *((int **) pdata);
|
int *vec = *((int **) pdata);
|
||||||
|
if (vec == atom->type) { // custom treatment of atom types
|
||||||
|
extract = values[ivalue++];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
vec[nlocal] = utils::inumeric(FLERR, values[ivalue++], true, lmp);
|
vec[nlocal] = utils::inumeric(FLERR, values[ivalue++], true, lmp);
|
||||||
} else {
|
} else {
|
||||||
int **array = *((int ***) pdata);
|
int **array = *((int ***) pdata);
|
||||||
@ -1712,9 +1729,9 @@ void AtomVec::data_atom(double *coord, imageint imagetmp, const std::vector<std:
|
|||||||
|
|
||||||
// error checks applicable to all styles
|
// error checks applicable to all styles
|
||||||
|
|
||||||
if (tag[nlocal] <= 0) error->one(FLERR, "Invalid atom ID in Atoms section of data file");
|
if (tag[nlocal] <= 0)
|
||||||
if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes)
|
error->one(FLERR, "Invalid atom ID {} in line {} of Atoms section of data file",
|
||||||
error->one(FLERR, "Invalid atom type in Atoms section of data file");
|
tag[nlocal], nlocal+1);
|
||||||
|
|
||||||
// if needed, modify unpacked values or initialize other peratom values
|
// if needed, modify unpacked values or initialize other peratom values
|
||||||
|
|
||||||
@ -1806,7 +1823,10 @@ void AtomVec::write_data(FILE *fp, int n, double **buf)
|
|||||||
}
|
}
|
||||||
} else if (datatype == Atom::INT) {
|
} else if (datatype == Atom::INT) {
|
||||||
if (cols == 0) {
|
if (cols == 0) {
|
||||||
fmt::print(fp, " {}", ubuf(buf[i][j++]).i);
|
if (atom->types_style == Atom::LABELS &&
|
||||||
|
atom->peratom[mdata_atom.index[nn]].name == "type") {
|
||||||
|
fmt::print(fp," {}",atom->lmap->typelabel[ubuf(buf[i][j++]).i-1]);
|
||||||
|
} else fmt::print(fp, " {}", ubuf(buf[i][j++]).i);
|
||||||
} else {
|
} else {
|
||||||
for (m = 0; m < cols; m++) fmt::print(fp, " {}", ubuf(buf[i][j++]).i);
|
for (m = 0; m < cols; m++) fmt::print(fp, " {}", ubuf(buf[i][j++]).i);
|
||||||
}
|
}
|
||||||
@ -2013,8 +2033,12 @@ int AtomVec::pack_bond(tagint **buf)
|
|||||||
|
|
||||||
void AtomVec::write_bond(FILE *fp, int n, tagint **buf, int index)
|
void AtomVec::write_bond(FILE *fp, int n, tagint **buf, int index)
|
||||||
{
|
{
|
||||||
|
std::string typestr;
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
fmt::print(fp, "{} {} {} {}\n", index, buf[i][0], buf[i][1], buf[i][2]);
|
typestr = std::to_string(buf[i][0]);
|
||||||
|
if (atom->types_style == Atom::LABELS)
|
||||||
|
typestr = atom->lmap->btypelabel[buf[i][0]-1];
|
||||||
|
fmt::print(fp, "{} {} {} {}\n", index, typestr, buf[i][1], buf[i][2]);
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2075,8 +2099,13 @@ int AtomVec::pack_angle(tagint **buf)
|
|||||||
|
|
||||||
void AtomVec::write_angle(FILE *fp, int n, tagint **buf, int index)
|
void AtomVec::write_angle(FILE *fp, int n, tagint **buf, int index)
|
||||||
{
|
{
|
||||||
|
std::string typestr;
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
fmt::print(fp, "{} {} {} {} {}\n", index, buf[i][0], buf[i][1], buf[i][2], buf[i][3]);
|
typestr = std::to_string(buf[i][0]);
|
||||||
|
if (atom->types_style == Atom::LABELS)
|
||||||
|
typestr = atom->lmap->atypelabel[buf[i][0]-1];
|
||||||
|
fmt::print(fp, "{} {} {} {} {}\n", index,
|
||||||
|
typestr, buf[i][1], buf[i][2], buf[i][3]);
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2135,9 +2164,13 @@ int AtomVec::pack_dihedral(tagint **buf)
|
|||||||
|
|
||||||
void AtomVec::write_dihedral(FILE *fp, int n, tagint **buf, int index)
|
void AtomVec::write_dihedral(FILE *fp, int n, tagint **buf, int index)
|
||||||
{
|
{
|
||||||
|
std::string typestr;
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
fmt::print(fp, "{} {} {} {} {} {}\n", index, buf[i][0], buf[i][1], buf[i][2], buf[i][3],
|
typestr = std::to_string(buf[i][0]);
|
||||||
buf[i][4]);
|
if (atom->types_style == Atom::LABELS)
|
||||||
|
typestr = atom->lmap->dtypelabel[buf[i][0]-1];
|
||||||
|
fmt::print(fp, "{} {} {} {} {} {}\n", index, typestr,
|
||||||
|
buf[i][1], buf[i][2], buf[i][3], buf[i][4]);
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2196,9 +2229,13 @@ int AtomVec::pack_improper(tagint **buf)
|
|||||||
|
|
||||||
void AtomVec::write_improper(FILE *fp, int n, tagint **buf, int index)
|
void AtomVec::write_improper(FILE *fp, int n, tagint **buf, int index)
|
||||||
{
|
{
|
||||||
|
std::string typestr;
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
fmt::print(fp, "{} {} {} {} {} {}\n", index, buf[i][0], buf[i][1], buf[i][2], buf[i][3],
|
typestr = std::to_string(buf[i][0]);
|
||||||
buf[i][4]);
|
if (atom->types_style == Atom::LABELS)
|
||||||
|
typestr = atom->lmap->itypelabel[buf[i][0]-1];
|
||||||
|
fmt::print(fp, "{} {} {} {} {} {}\n", index, typestr,
|
||||||
|
buf[i][1], buf[i][2], buf[i][3], buf[i][4]);
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -124,6 +124,7 @@ class AtomVec : protected Pointers {
|
|||||||
virtual void create_atom_post(int) {}
|
virtual void create_atom_post(int) {}
|
||||||
|
|
||||||
virtual void data_atom(double *, imageint, const std::vector<std::string> &);
|
virtual void data_atom(double *, imageint, const std::vector<std::string> &);
|
||||||
|
virtual void data_atom(double *, imageint, const std::vector<std::string> &, std::string &);
|
||||||
virtual void data_atom_post(int) {}
|
virtual void data_atom_post(int) {}
|
||||||
virtual void data_atom_bonus(int, const std::vector<std::string> &) {}
|
virtual void data_atom_bonus(int, const std::vector<std::string> &) {}
|
||||||
virtual void data_body(int, int, int, int *, double *) {}
|
virtual void data_body(int, int, int, int *, double *) {}
|
||||||
|
|||||||
@ -108,46 +108,50 @@ void CreateBox::command(int narg, char **arg)
|
|||||||
while (iarg < narg) {
|
while (iarg < narg) {
|
||||||
if (strcmp(arg[iarg], "bond/types") == 0) {
|
if (strcmp(arg[iarg], "bond/types") == 0) {
|
||||||
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "create_box bond/type", error);
|
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "create_box bond/type", error);
|
||||||
if (!atom->avec->bonds_allow) error->all(FLERR, "No bonds allowed with this atom style");
|
if (!atom->avec->bonds_allow)
|
||||||
|
error->all(FLERR, "No bonds allowed with atom style {}", atom->get_style());
|
||||||
atom->nbondtypes = utils::inumeric(FLERR, arg[iarg + 1], false, lmp);
|
atom->nbondtypes = utils::inumeric(FLERR, arg[iarg + 1], false, lmp);
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
} else if (strcmp(arg[iarg], "angle/types") == 0) {
|
} else if (strcmp(arg[iarg], "angle/types") == 0) {
|
||||||
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "create_box angle/types", error);
|
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "create_box angle/types", error);
|
||||||
if (!atom->avec->angles_allow) error->all(FLERR, "No angles allowed with this atom style");
|
if (!atom->avec->angles_allow)
|
||||||
|
error->all(FLERR, "No angles allowed with atom style {}", atom->get_style());
|
||||||
atom->nangletypes = utils::inumeric(FLERR, arg[iarg + 1], false, lmp);
|
atom->nangletypes = utils::inumeric(FLERR, arg[iarg + 1], false, lmp);
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
} else if (strcmp(arg[iarg], "dihedral/types") == 0) {
|
} else if (strcmp(arg[iarg], "dihedral/types") == 0) {
|
||||||
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "create_box dihedral/types", error);
|
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "create_box dihedral/types", error);
|
||||||
if (!atom->avec->dihedrals_allow)
|
if (!atom->avec->dihedrals_allow)
|
||||||
error->all(FLERR, "No dihedrals allowed with this atom style");
|
error->all(FLERR, "No dihedrals allowed with atom style {}", atom->get_style());
|
||||||
atom->ndihedraltypes = utils::inumeric(FLERR, arg[iarg + 1], false, lmp);
|
atom->ndihedraltypes = utils::inumeric(FLERR, arg[iarg + 1], false, lmp);
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
} else if (strcmp(arg[iarg], "improper/types") == 0) {
|
} else if (strcmp(arg[iarg], "improper/types") == 0) {
|
||||||
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "create_box improper/types", error);
|
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "create_box improper/types", error);
|
||||||
if (!atom->avec->impropers_allow)
|
if (!atom->avec->impropers_allow)
|
||||||
error->all(FLERR, "No impropers allowed with this atom style");
|
error->all(FLERR, "No impropers allowed with atom style {}", atom->get_style());
|
||||||
atom->nimpropertypes = utils::inumeric(FLERR, arg[iarg + 1], false, lmp);
|
atom->nimpropertypes = utils::inumeric(FLERR, arg[iarg + 1], false, lmp);
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
} else if (strcmp(arg[iarg], "extra/bond/per/atom") == 0) {
|
} else if (strcmp(arg[iarg], "extra/bond/per/atom") == 0) {
|
||||||
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "create_box extra/bond/per/atom", error);
|
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "create_box extra/bond/per/atom", error);
|
||||||
if (!atom->avec->bonds_allow) error->all(FLERR, "No bonds allowed with this atom style");
|
if (!atom->avec->bonds_allow)
|
||||||
|
error->all(FLERR, "No bonds allowed with atom style {}", atom->get_style());
|
||||||
atom->bond_per_atom = utils::inumeric(FLERR, arg[iarg + 1], false, lmp);
|
atom->bond_per_atom = utils::inumeric(FLERR, arg[iarg + 1], false, lmp);
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
} else if (strcmp(arg[iarg], "extra/angle/per/atom") == 0) {
|
} else if (strcmp(arg[iarg], "extra/angle/per/atom") == 0) {
|
||||||
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "create_box extra/angle/per/atom", error);
|
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "create_box extra/angle/per/atom", error);
|
||||||
if (!atom->avec->angles_allow) error->all(FLERR, "No angles allowed with this atom style");
|
if (!atom->avec->angles_allow)
|
||||||
|
error->all(FLERR, "No angles allowed with atom style {}", atom->get_style());
|
||||||
atom->angle_per_atom = utils::inumeric(FLERR, arg[iarg + 1], false, lmp);
|
atom->angle_per_atom = utils::inumeric(FLERR, arg[iarg + 1], false, lmp);
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
} else if (strcmp(arg[iarg], "extra/dihedral/per/atom") == 0) {
|
} else if (strcmp(arg[iarg], "extra/dihedral/per/atom") == 0) {
|
||||||
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "create_box extra/dihedral/per/atom", error);
|
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "create_box extra/dihedral/per/atom", error);
|
||||||
if (!atom->avec->dihedrals_allow)
|
if (!atom->avec->dihedrals_allow)
|
||||||
error->all(FLERR, "No dihedrals allowed with this atom style");
|
error->all(FLERR, "No dihedrals allowed with atom style {}", atom->get_style());
|
||||||
atom->dihedral_per_atom = utils::inumeric(FLERR, arg[iarg + 1], false, lmp);
|
atom->dihedral_per_atom = utils::inumeric(FLERR, arg[iarg + 1], false, lmp);
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
} else if (strcmp(arg[iarg], "extra/improper/per/atom") == 0) {
|
} else if (strcmp(arg[iarg], "extra/improper/per/atom") == 0) {
|
||||||
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "create_box extra/improper/per/atom", error);
|
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "create_box extra/improper/per/atom", error);
|
||||||
if (!atom->avec->impropers_allow)
|
if (!atom->avec->impropers_allow)
|
||||||
error->all(FLERR, "No impropers allowed with this atom style");
|
error->all(FLERR, "No impropers allowed with atom style {}", atom->get_style());
|
||||||
atom->improper_per_atom = utils::inumeric(FLERR, arg[iarg + 1], false, lmp);
|
atom->improper_per_atom = utils::inumeric(FLERR, arg[iarg + 1], false, lmp);
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
} else if (strcmp(arg[iarg], "extra/special/per/atom") == 0) {
|
} else if (strcmp(arg[iarg], "extra/special/per/atom") == 0) {
|
||||||
|
|||||||
@ -33,6 +33,7 @@
|
|||||||
#include "improper.h"
|
#include "improper.h"
|
||||||
#include "integrate.h"
|
#include "integrate.h"
|
||||||
#include "kspace.h"
|
#include "kspace.h"
|
||||||
|
#include "label_map.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "min.h"
|
#include "min.h"
|
||||||
#include "modify.h"
|
#include "modify.h"
|
||||||
@ -789,6 +790,7 @@ int Input::execute_command()
|
|||||||
else if (!strcmp(command,"improper_style")) improper_style();
|
else if (!strcmp(command,"improper_style")) improper_style();
|
||||||
else if (!strcmp(command,"kspace_modify")) kspace_modify();
|
else if (!strcmp(command,"kspace_modify")) kspace_modify();
|
||||||
else if (!strcmp(command,"kspace_style")) kspace_style();
|
else if (!strcmp(command,"kspace_style")) kspace_style();
|
||||||
|
else if (!strcmp(command,"labelmap")) labelmap();
|
||||||
else if (!strcmp(command,"lattice")) lattice();
|
else if (!strcmp(command,"lattice")) lattice();
|
||||||
else if (!strcmp(command,"mass")) mass();
|
else if (!strcmp(command,"mass")) mass();
|
||||||
else if (!strcmp(command,"min_modify")) min_modify();
|
else if (!strcmp(command,"min_modify")) min_modify();
|
||||||
@ -1326,7 +1328,10 @@ void Input::angle_coeff()
|
|||||||
error->all(FLERR,"Angle_coeff command before angle_style is defined");
|
error->all(FLERR,"Angle_coeff command before angle_style is defined");
|
||||||
if (atom->avec->angles_allow == 0)
|
if (atom->avec->angles_allow == 0)
|
||||||
error->all(FLERR,"Angle_coeff command when no angles allowed");
|
error->all(FLERR,"Angle_coeff command when no angles allowed");
|
||||||
|
char *newarg = utils::expand_type(FLERR, arg[0], Atom::ANGLE, lmp);
|
||||||
|
if (newarg) arg[0] = newarg;
|
||||||
force->angle->coeff(narg,arg);
|
force->angle->coeff(narg,arg);
|
||||||
|
delete[] newarg;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -1367,7 +1372,10 @@ void Input::bond_coeff()
|
|||||||
error->all(FLERR,"Bond_coeff command before bond_style is defined");
|
error->all(FLERR,"Bond_coeff command before bond_style is defined");
|
||||||
if (atom->avec->bonds_allow == 0)
|
if (atom->avec->bonds_allow == 0)
|
||||||
error->all(FLERR,"Bond_coeff command when no bonds allowed");
|
error->all(FLERR,"Bond_coeff command when no bonds allowed");
|
||||||
|
char *newarg = utils::expand_type(FLERR, arg[0], Atom::BOND, lmp);
|
||||||
|
if (newarg) arg[0] = newarg;
|
||||||
force->bond->coeff(narg,arg);
|
force->bond->coeff(narg,arg);
|
||||||
|
delete[] newarg;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -1470,7 +1478,10 @@ void Input::dihedral_coeff()
|
|||||||
error->all(FLERR,"Dihedral_coeff command before dihedral_style is defined");
|
error->all(FLERR,"Dihedral_coeff command before dihedral_style is defined");
|
||||||
if (atom->avec->dihedrals_allow == 0)
|
if (atom->avec->dihedrals_allow == 0)
|
||||||
error->all(FLERR,"Dihedral_coeff command when no dihedrals allowed");
|
error->all(FLERR,"Dihedral_coeff command when no dihedrals allowed");
|
||||||
|
char *newarg = utils::expand_type(FLERR, arg[0], Atom::DIHEDRAL, lmp);
|
||||||
|
if (newarg) arg[0] = newarg;
|
||||||
force->dihedral->coeff(narg,arg);
|
force->dihedral->coeff(narg,arg);
|
||||||
|
delete[] newarg;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -1547,7 +1558,10 @@ void Input::improper_coeff()
|
|||||||
error->all(FLERR,"Improper_coeff command before improper_style is defined");
|
error->all(FLERR,"Improper_coeff command before improper_style is defined");
|
||||||
if (atom->avec->impropers_allow == 0)
|
if (atom->avec->impropers_allow == 0)
|
||||||
error->all(FLERR,"Improper_coeff command when no impropers allowed");
|
error->all(FLERR,"Improper_coeff command when no impropers allowed");
|
||||||
|
char *newarg = utils::expand_type(FLERR, arg[0], Atom::IMPROPER, lmp);
|
||||||
|
if (newarg) arg[0] = newarg;
|
||||||
force->improper->coeff(narg,arg);
|
force->improper->coeff(narg,arg);
|
||||||
|
delete[] newarg;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -1577,6 +1591,14 @@ void Input::kspace_style()
|
|||||||
force->create_kspace(arg[0],1);
|
force->create_kspace(arg[0],1);
|
||||||
if (force->kspace) force->kspace->settings(narg-1,&arg[1]);
|
if (force->kspace) force->kspace->settings(narg-1,&arg[1]);
|
||||||
}
|
}
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void Input::labelmap()
|
||||||
|
{
|
||||||
|
if (domain->box_exist == 0) error->all(FLERR,"Labelmap command before simulation box is defined");
|
||||||
|
if (!atom->labelmapflag) atom->add_label_map();
|
||||||
|
atom->lmap->modify_lmap(narg,arg);
|
||||||
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
@ -1676,14 +1698,12 @@ void Input::package()
|
|||||||
|
|
||||||
} else if (strcmp(arg[0],"kokkos") == 0) {
|
} else if (strcmp(arg[0],"kokkos") == 0) {
|
||||||
if (lmp->kokkos == nullptr || lmp->kokkos->kokkos_exists == 0)
|
if (lmp->kokkos == nullptr || lmp->kokkos->kokkos_exists == 0)
|
||||||
error->all(FLERR,
|
error->all(FLERR, "Package kokkos command without KOKKOS package enabled");
|
||||||
"Package kokkos command without KOKKOS package enabled");
|
|
||||||
lmp->kokkos->accelerator(narg-1,&arg[1]);
|
lmp->kokkos->accelerator(narg-1,&arg[1]);
|
||||||
|
|
||||||
} else if (strcmp(arg[0],"omp") == 0) {
|
} else if (strcmp(arg[0],"omp") == 0) {
|
||||||
if (!modify->check_package("OMP"))
|
if (!modify->check_package("OMP"))
|
||||||
error->all(FLERR,
|
error->all(FLERR, "Package omp command without OPENMP package installed");
|
||||||
"Package omp command without OPENMP package installed");
|
|
||||||
|
|
||||||
std::string fixcmd = "package_omp all OMP";
|
std::string fixcmd = "package_omp all OMP";
|
||||||
for (int i = 1; i < narg; i++) fixcmd += std::string(" ") + arg[i];
|
for (int i = 1; i < narg; i++) fixcmd += std::string(" ") + arg[i];
|
||||||
@ -1691,14 +1711,13 @@ void Input::package()
|
|||||||
|
|
||||||
} else if (strcmp(arg[0],"intel") == 0) {
|
} else if (strcmp(arg[0],"intel") == 0) {
|
||||||
if (!modify->check_package("INTEL"))
|
if (!modify->check_package("INTEL"))
|
||||||
error->all(FLERR,
|
error->all(FLERR, "Package intel command without INTEL package installed");
|
||||||
"Package intel command without INTEL package installed");
|
|
||||||
|
|
||||||
std::string fixcmd = "package_intel all INTEL";
|
std::string fixcmd = "package_intel all INTEL";
|
||||||
for (int i = 1; i < narg; i++) fixcmd += std::string(" ") + arg[i];
|
for (int i = 1; i < narg; i++) fixcmd += std::string(" ") + arg[i];
|
||||||
modify->add_fix(fixcmd);
|
modify->add_fix(fixcmd);
|
||||||
|
|
||||||
} else error->all(FLERR,"Illegal package command");
|
} else error->all(FLERR,"Unknown package keyword: {}", arg[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -1712,7 +1731,28 @@ void Input::pair_coeff()
|
|||||||
if ((narg < 2) || (force->pair->one_coeff && ((strcmp(arg[0],"*") != 0)
|
if ((narg < 2) || (force->pair->one_coeff && ((strcmp(arg[0],"*") != 0)
|
||||||
|| (strcmp(arg[1],"*") != 0))))
|
|| (strcmp(arg[1],"*") != 0))))
|
||||||
error->all(FLERR,"Incorrect args for pair coefficients");
|
error->all(FLERR,"Incorrect args for pair coefficients");
|
||||||
|
|
||||||
|
char *newarg0 = utils::expand_type(FLERR, arg[0], Atom::ATOM, lmp);
|
||||||
|
if (newarg0) arg[0] = newarg0;
|
||||||
|
char *newarg1 = utils::expand_type(FLERR, arg[1], Atom::ATOM, lmp);
|
||||||
|
if (newarg1) arg[1] = newarg1;
|
||||||
|
|
||||||
|
// if arg[1] < arg[0], and neither contain a wildcard, reorder
|
||||||
|
|
||||||
|
int itype,jtype;
|
||||||
|
if (strchr(arg[0],'*') == nullptr && strchr(arg[1],'*') == nullptr) {
|
||||||
|
itype = utils::numeric(FLERR,arg[0],false,lmp);
|
||||||
|
jtype = utils::numeric(FLERR,arg[1],false,lmp);
|
||||||
|
if (jtype < itype) {
|
||||||
|
char *str = arg[0];
|
||||||
|
arg[0] = arg[1];
|
||||||
|
arg[1] = str;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
force->pair->coeff(narg,arg);
|
force->pair->coeff(narg,arg);
|
||||||
|
delete[] newarg0;
|
||||||
|
delete[] newarg1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|||||||
@ -37,8 +37,7 @@ class Input : protected Pointers {
|
|||||||
void file(); // process all input
|
void file(); // process all input
|
||||||
void file(const char *); // process an input script
|
void file(const char *); // process an input script
|
||||||
char *one(const std::string &); // process a single command
|
char *one(const std::string &); // process a single command
|
||||||
void substitute(char *&, char *&, int &, int &, int);
|
void substitute(char *&, char *&, int &, int &, int); // substitute for variables in a string
|
||||||
// substitute for variables in a string
|
|
||||||
void write_echo(const std::string &); // send text to active echo file pointers
|
void write_echo(const std::string &); // send text to active echo file pointers
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -113,6 +112,7 @@ class Input : protected Pointers {
|
|||||||
void improper_style();
|
void improper_style();
|
||||||
void kspace_modify();
|
void kspace_modify();
|
||||||
void kspace_style();
|
void kspace_style();
|
||||||
|
void labelmap();
|
||||||
void lattice();
|
void lattice();
|
||||||
void mass();
|
void mass();
|
||||||
void min_modify();
|
void min_modify();
|
||||||
|
|||||||
489
src/label_map.cpp
Normal file
489
src/label_map.cpp
Normal file
@ -0,0 +1,489 @@
|
|||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
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.
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#include "label_map.h"
|
||||||
|
|
||||||
|
#include "atom.h"
|
||||||
|
#include "comm.h"
|
||||||
|
#include "error.h"
|
||||||
|
#include "force.h"
|
||||||
|
#include "memory.h"
|
||||||
|
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
|
using namespace LAMMPS_NS;
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
LabelMap::LabelMap(LAMMPS *_lmp, int _natomtypes, int _nbondtypes, int _nangletypes,
|
||||||
|
int _ndihedraltypes, int _nimpropertypes) :
|
||||||
|
Pointers(_lmp),
|
||||||
|
natomtypes(_natomtypes), nbondtypes(_nbondtypes), nangletypes(_nangletypes),
|
||||||
|
ndihedraltypes(_ndihedraltypes), nimpropertypes(_nimpropertypes)
|
||||||
|
{
|
||||||
|
lmap2lmap.atom = lmap2lmap.bond = lmap2lmap.angle = lmap2lmap.dihedral = lmap2lmap.improper =
|
||||||
|
nullptr;
|
||||||
|
reset_type_labels();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
LabelMap::~LabelMap()
|
||||||
|
{
|
||||||
|
delete[] lmap2lmap.atom;
|
||||||
|
delete[] lmap2lmap.bond;
|
||||||
|
delete[] lmap2lmap.angle;
|
||||||
|
delete[] lmap2lmap.dihedral;
|
||||||
|
delete[] lmap2lmap.improper;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
reset/allocate character-based type arrays (labels) of length ntypes
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void LabelMap::reset_type_labels()
|
||||||
|
{
|
||||||
|
typelabel_map.clear();
|
||||||
|
typelabel.resize(natomtypes);
|
||||||
|
delete[] lmap2lmap.atom;
|
||||||
|
lmap2lmap.atom = new int[natomtypes];
|
||||||
|
for (auto &i : typelabel) i.clear();
|
||||||
|
memset(lmap2lmap.atom, 0, natomtypes * sizeof(int));
|
||||||
|
|
||||||
|
btypelabel_map.clear();
|
||||||
|
btypelabel.resize(nbondtypes);
|
||||||
|
delete[] lmap2lmap.bond;
|
||||||
|
for (auto &i : btypelabel) i.clear();
|
||||||
|
lmap2lmap.bond = new int[nbondtypes];
|
||||||
|
memset(lmap2lmap.bond, 0, nbondtypes * sizeof(int));
|
||||||
|
|
||||||
|
atypelabel_map.clear();
|
||||||
|
atypelabel.resize(nangletypes);
|
||||||
|
delete[] lmap2lmap.angle;
|
||||||
|
for (auto &i : atypelabel) i.clear();
|
||||||
|
lmap2lmap.angle = new int[nangletypes];
|
||||||
|
memset(lmap2lmap.angle, 0, nangletypes * sizeof(int));
|
||||||
|
|
||||||
|
dtypelabel_map.clear();
|
||||||
|
dtypelabel.resize(ndihedraltypes);
|
||||||
|
delete[] lmap2lmap.dihedral;
|
||||||
|
for (auto &i : dtypelabel) i.clear();
|
||||||
|
lmap2lmap.dihedral = new int[ndihedraltypes];
|
||||||
|
memset(lmap2lmap.dihedral, 0, ndihedraltypes * sizeof(int));
|
||||||
|
|
||||||
|
itypelabel_map.clear();
|
||||||
|
itypelabel.resize(nimpropertypes);
|
||||||
|
delete[] lmap2lmap.improper;
|
||||||
|
for (auto &i : itypelabel) i.clear();
|
||||||
|
lmap2lmap.improper = new int[nimpropertypes];
|
||||||
|
memset(lmap2lmap.improper, 0, nimpropertypes * sizeof(int));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
labelmap command in input script
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void LabelMap::modify_lmap(int narg, char **arg)
|
||||||
|
{
|
||||||
|
if ((narg < 1) || ((narg > 2) && ((narg % 2) == 0)))
|
||||||
|
error->all(FLERR, "Incorrect number of arguments for labelmap command");
|
||||||
|
|
||||||
|
int ntypes;
|
||||||
|
std::vector<std::string> *labels;
|
||||||
|
std::unordered_map<std::string, int> *labels_map;
|
||||||
|
const std::string tlabel(arg[0]);
|
||||||
|
if (tlabel == "atom") {
|
||||||
|
ntypes = natomtypes;
|
||||||
|
labels = &typelabel;
|
||||||
|
labels_map = &typelabel_map;
|
||||||
|
} else if (tlabel == "bond") {
|
||||||
|
ntypes = nbondtypes;
|
||||||
|
labels = &btypelabel;
|
||||||
|
labels_map = &btypelabel_map;
|
||||||
|
} else if (tlabel == "angle") {
|
||||||
|
ntypes = nangletypes;
|
||||||
|
labels = &atypelabel;
|
||||||
|
labels_map = &atypelabel_map;
|
||||||
|
} else if (tlabel == "dihedral") {
|
||||||
|
ntypes = ndihedraltypes;
|
||||||
|
labels = &dtypelabel;
|
||||||
|
labels_map = &dtypelabel_map;
|
||||||
|
} else if (tlabel == "improper") {
|
||||||
|
ntypes = nimpropertypes;
|
||||||
|
labels = &itypelabel;
|
||||||
|
labels_map = &itypelabel_map;
|
||||||
|
} else if (tlabel == "clear") {
|
||||||
|
if (narg != 1) error->all(FLERR, "Incorrect number of arguments for labelmap clear command");
|
||||||
|
reset_type_labels();
|
||||||
|
return;
|
||||||
|
} else if (tlabel == "write") {
|
||||||
|
if (narg != 2) error->all(FLERR, "Incorrect number of arguments for labelmap write command");
|
||||||
|
write_map(arg[1]);
|
||||||
|
return;
|
||||||
|
} else
|
||||||
|
error->all(FLERR, "Unknown labelmap keyword {}", tlabel);
|
||||||
|
|
||||||
|
int iarg = 1;
|
||||||
|
if (narg == 1) utils::missing_cmd_args(FLERR, "labelmap " + tlabel, error);
|
||||||
|
while (iarg < narg) {
|
||||||
|
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "labelmap " + tlabel, error);
|
||||||
|
if (ntypes < 1) error->all(FLERR, "No {} types allowed with current box settings", tlabel);
|
||||||
|
int itype = utils::inumeric(FLERR, arg[iarg++], false, lmp);
|
||||||
|
if ((itype < 1) || (itype > ntypes))
|
||||||
|
error->all(FLERR, "Labelmap {} type {} must be within 1-{}", tlabel, itype, ntypes);
|
||||||
|
std::string slabel = utils::utf8_subst(utils::trim(arg[iarg++]));
|
||||||
|
if (utils::is_type(slabel) != 1)
|
||||||
|
error->all(FLERR, "Type label string {} for {} type {} is invalid", slabel, tlabel, itype);
|
||||||
|
int found = search(slabel, (*labels_map));
|
||||||
|
if ((found != -1) && (found != itype))
|
||||||
|
error->all(FLERR, "The {} type label {} is already in use for type {}", tlabel, slabel,
|
||||||
|
(*labels_map)[slabel]);
|
||||||
|
std::string &str = (*labels)[itype - 1];
|
||||||
|
if (!str.empty()) (*labels_map).erase(str);
|
||||||
|
str = slabel;
|
||||||
|
(*labels_map)[slabel] = itype;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
copy another map (lmap2) into this one
|
||||||
|
if label already exists, leave in place
|
||||||
|
else, put new label in next available slot
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void LabelMap::merge_lmap(LabelMap *lmap2, int mode)
|
||||||
|
{
|
||||||
|
switch (mode) {
|
||||||
|
case Atom::ATOM:
|
||||||
|
for (auto &it : lmap2->typelabel) find_or_create(it, typelabel, typelabel_map);
|
||||||
|
break;
|
||||||
|
case Atom::BOND:
|
||||||
|
for (auto &it : lmap2->btypelabel) find_or_create(it, btypelabel, btypelabel_map);
|
||||||
|
break;
|
||||||
|
case Atom::ANGLE:
|
||||||
|
for (auto &it : lmap2->atypelabel) find_or_create(it, atypelabel, atypelabel_map);
|
||||||
|
break;
|
||||||
|
case Atom::DIHEDRAL:
|
||||||
|
for (auto &it : lmap2->dtypelabel) find_or_create(it, dtypelabel, dtypelabel_map);
|
||||||
|
break;
|
||||||
|
case Atom::IMPROPER:
|
||||||
|
for (auto &it : lmap2->itypelabel) find_or_create(it, itypelabel, itypelabel_map);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
get mapping between this label map and another (lmap2)
|
||||||
|
values of lmap2lmap point to equivalent types in lmap2
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void LabelMap::create_lmap2lmap(LabelMap *lmap2, int mode)
|
||||||
|
{
|
||||||
|
switch (mode) {
|
||||||
|
case Atom::ATOM:
|
||||||
|
for (int i = 0; i < natomtypes; ++i)
|
||||||
|
lmap2lmap.atom[i] = search(typelabel[i], lmap2->typelabel_map);
|
||||||
|
break;
|
||||||
|
case Atom::BOND:
|
||||||
|
for (int i = 0; i < nbondtypes; ++i)
|
||||||
|
lmap2lmap.bond[i] = search(btypelabel[i], lmap2->btypelabel_map);
|
||||||
|
break;
|
||||||
|
case Atom::ANGLE:
|
||||||
|
for (int i = 0; i < nangletypes; ++i)
|
||||||
|
lmap2lmap.angle[i] = search(atypelabel[i], lmap2->atypelabel_map);
|
||||||
|
break;
|
||||||
|
case Atom::DIHEDRAL:
|
||||||
|
for (int i = 0; i < ndihedraltypes; ++i)
|
||||||
|
lmap2lmap.dihedral[i] = search(dtypelabel[i], lmap2->dtypelabel_map);
|
||||||
|
break;
|
||||||
|
case Atom::IMPROPER:
|
||||||
|
for (int i = 0; i < nimpropertypes; ++i)
|
||||||
|
lmap2lmap.improper[i] = search(itypelabel[i], lmap2->itypelabel_map);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
find type label with name or create type if it doesn't exist
|
||||||
|
return numeric type
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int LabelMap::find_or_create(const std::string &mylabel, std::vector<std::string> &labels,
|
||||||
|
std::unordered_map<std::string, int> &labels_map)
|
||||||
|
{
|
||||||
|
auto search = labels_map.find(mylabel);
|
||||||
|
if (search != labels_map.end()) return search->second;
|
||||||
|
|
||||||
|
// if no match found, create new label at next available index
|
||||||
|
// label map assumed to be intialized with numeric index
|
||||||
|
// user labels are assumed to be alphanumeric (not a number)
|
||||||
|
|
||||||
|
auto labels_map_size = labels_map.size();
|
||||||
|
if (labels_map_size < labels.size()) {
|
||||||
|
labels[labels_map_size] = mylabel;
|
||||||
|
int index = static_cast<int>(labels_map_size + 1);
|
||||||
|
labels_map[mylabel] = index;
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if label cannot be found or created, need more space reserved
|
||||||
|
|
||||||
|
error->all(FLERR, "Topology type exceeds system topology type");
|
||||||
|
|
||||||
|
// never reaches here, just to prevent compiler warning
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
return numeric type given a type label
|
||||||
|
return -1 if type not yet defined
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int LabelMap::find(const std::string &mylabel, int mode) const
|
||||||
|
{
|
||||||
|
switch (mode) {
|
||||||
|
case Atom::ATOM:
|
||||||
|
return search(mylabel, typelabel_map);
|
||||||
|
break;
|
||||||
|
case Atom::BOND:
|
||||||
|
return search(mylabel, btypelabel_map);
|
||||||
|
break;
|
||||||
|
case Atom::ANGLE:
|
||||||
|
return search(mylabel, atypelabel_map);
|
||||||
|
break;
|
||||||
|
case Atom::DIHEDRAL:
|
||||||
|
return search(mylabel, dtypelabel_map);
|
||||||
|
break;
|
||||||
|
case Atom::IMPROPER:
|
||||||
|
return search(mylabel, itypelabel_map);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
get type given type labels map
|
||||||
|
return -1 if type not yet defined
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int LabelMap::search(const std::string &mylabel,
|
||||||
|
const std::unordered_map<std::string, int> &labels_map) const
|
||||||
|
{
|
||||||
|
auto search = labels_map.find(mylabel);
|
||||||
|
if (search == labels_map.end()) return -1;
|
||||||
|
return search->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
check that all types have been assigned a unique type label
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
bool LabelMap::is_complete(int mode) const
|
||||||
|
{
|
||||||
|
switch (mode) {
|
||||||
|
case Atom::ATOM:
|
||||||
|
return static_cast<int>(typelabel_map.size()) == natomtypes;
|
||||||
|
break;
|
||||||
|
case Atom::BOND:
|
||||||
|
return static_cast<int>(btypelabel_map.size()) == nbondtypes;
|
||||||
|
break;
|
||||||
|
case Atom::ANGLE:
|
||||||
|
return static_cast<int>(atypelabel_map.size()) == nangletypes;
|
||||||
|
break;
|
||||||
|
case Atom::DIHEDRAL:
|
||||||
|
return static_cast<int>(dtypelabel_map.size()) == ndihedraltypes;
|
||||||
|
break;
|
||||||
|
case Atom::IMPROPER:
|
||||||
|
return static_cast<int>(itypelabel_map.size()) == nimpropertypes;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
proc 0 writes to data file
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void LabelMap::write_data(FILE *fp)
|
||||||
|
{
|
||||||
|
if (is_complete(Atom::ATOM)) {
|
||||||
|
fmt::print(fp, "\nAtom Type Labels\n\n");
|
||||||
|
for (int i = 0; i < natomtypes; i++) fmt::print(fp, "{} {}\n", i + 1, typelabel[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (force->bond && is_complete(Atom::BOND)) {
|
||||||
|
fmt::print(fp, "\nBond Type Labels\n\n");
|
||||||
|
for (int i = 0; i < nbondtypes; i++) fmt::print(fp, "{} {}\n", i + 1, btypelabel[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (force->angle && is_complete(Atom::ANGLE)) {
|
||||||
|
fmt::print(fp, "\nAngle Type Labels\n\n");
|
||||||
|
for (int i = 0; i < nangletypes; i++) fmt::print(fp, "{} {}\n", i + 1, atypelabel[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (force->dihedral && is_complete(Atom::DIHEDRAL)) {
|
||||||
|
fmt::print(fp, "\nDihedral Type Labels\n\n");
|
||||||
|
for (int i = 0; i < ndihedraltypes; i++) fmt::print(fp, "{} {}\n", i + 1, dtypelabel[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (force->improper && is_complete(Atom::IMPROPER)) {
|
||||||
|
fmt::print(fp, "\nImproper Type Labels\n\n");
|
||||||
|
for (int i = 0; i < nimpropertypes; i++) fmt::print(fp, "{} {}\n", i + 1, itypelabel[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
proc 0 reads from restart file, bcasts
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void LabelMap::read_restart(FILE *fp)
|
||||||
|
{
|
||||||
|
char *charlabel;
|
||||||
|
|
||||||
|
for (int i = 0; i < natomtypes; i++) {
|
||||||
|
charlabel = read_string(fp);
|
||||||
|
typelabel[i] = charlabel;
|
||||||
|
typelabel_map[charlabel] = i + 1;
|
||||||
|
delete[] charlabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < nbondtypes; i++) {
|
||||||
|
charlabel = read_string(fp);
|
||||||
|
btypelabel[i] = charlabel;
|
||||||
|
btypelabel_map[charlabel] = i + 1;
|
||||||
|
delete[] charlabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < nangletypes; i++) {
|
||||||
|
charlabel = read_string(fp);
|
||||||
|
atypelabel[i] = charlabel;
|
||||||
|
atypelabel_map[charlabel] = i + 1;
|
||||||
|
delete[] charlabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < ndihedraltypes; i++) {
|
||||||
|
charlabel = read_string(fp);
|
||||||
|
dtypelabel[i] = charlabel;
|
||||||
|
dtypelabel_map[charlabel] = i + 1;
|
||||||
|
delete[] charlabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < nimpropertypes; i++) {
|
||||||
|
charlabel = read_string(fp);
|
||||||
|
itypelabel[i] = charlabel;
|
||||||
|
itypelabel_map[charlabel] = i + 1;
|
||||||
|
delete[] charlabel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
proc 0 writes to restart file
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void LabelMap::write_restart(FILE *fp)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < natomtypes; i++) write_string(typelabel[i], fp);
|
||||||
|
|
||||||
|
for (int i = 0; i < nbondtypes; i++) write_string(btypelabel[i], fp);
|
||||||
|
|
||||||
|
for (int i = 0; i < nangletypes; i++) write_string(atypelabel[i], fp);
|
||||||
|
|
||||||
|
for (int i = 0; i < ndihedraltypes; i++) write_string(dtypelabel[i], fp);
|
||||||
|
|
||||||
|
for (int i = 0; i < nimpropertypes; i++) write_string(itypelabel[i], fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
read a char string (including nullptr) and bcast it
|
||||||
|
str is allocated here, ptr is returned, caller must deallocate
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
char *LabelMap::read_string(FILE *fp)
|
||||||
|
{
|
||||||
|
int n = read_int(fp);
|
||||||
|
if (n < 0) error->all(FLERR, "Illegal size string or corrupt restart");
|
||||||
|
char *value = new char[n];
|
||||||
|
if (comm->me == 0) utils::sfread(FLERR, value, sizeof(char), n, fp, nullptr, error);
|
||||||
|
MPI_Bcast(value, n, MPI_CHAR, 0, world);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
write a flag and a C-style char string (including the terminating null
|
||||||
|
byte) into the restart file
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void LabelMap::write_string(const std::string &str, FILE *fp)
|
||||||
|
{
|
||||||
|
const char *cstr = str.c_str();
|
||||||
|
int n = strlen(cstr) + 1;
|
||||||
|
fwrite(&n, sizeof(int), 1, fp);
|
||||||
|
fwrite(cstr, sizeof(char), n, fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
read an int from restart file and bcast it
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int LabelMap::read_int(FILE *fp)
|
||||||
|
{
|
||||||
|
int value;
|
||||||
|
if ((comm->me == 0) && (fread(&value, sizeof(int), 1, fp) < 1)) value = -1;
|
||||||
|
MPI_Bcast(&value, 1, MPI_INT, 0, world);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
write out all current label map values as labelmap commands
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void LabelMap::write_map(const std::string &filename)
|
||||||
|
{
|
||||||
|
if (comm->me == 0) {
|
||||||
|
FILE *fp = fopen(filename.c_str(), "w");
|
||||||
|
if (!fp) error->one(FLERR, "Cannot open label map file {}: {}", filename, utils::getsyserror());
|
||||||
|
if (typelabel_map.size() > 0) {
|
||||||
|
fputs("labelmap atom", fp);
|
||||||
|
for (int i = 0; i < natomtypes; ++i)
|
||||||
|
if (!typelabel[i].empty()) fmt::print(fp, " {} \"\"\" {} \"\"\"", i + 1, typelabel[i]);
|
||||||
|
fputc('\n', fp);
|
||||||
|
}
|
||||||
|
if (btypelabel_map.size() > 0) {
|
||||||
|
fputs("labelmap bond", fp);
|
||||||
|
for (int i = 0; i < nbondtypes; ++i)
|
||||||
|
if (!btypelabel[i].empty()) fmt::print(fp, " {} \"\"\" {} \"\"\"", i + 1, btypelabel[i]);
|
||||||
|
fputc('\n', fp);
|
||||||
|
}
|
||||||
|
if (atypelabel_map.size() > 0) {
|
||||||
|
fputs("labelmap angle", fp);
|
||||||
|
for (int i = 0; i < nangletypes; ++i)
|
||||||
|
if (!atypelabel[i].empty()) fmt::print(fp, " {} \"\"\" {} \"\"\"", i + 1, atypelabel[i]);
|
||||||
|
fputc('\n', fp);
|
||||||
|
}
|
||||||
|
if (dtypelabel_map.size() > 0) {
|
||||||
|
fputs("labelmap dihedral", fp);
|
||||||
|
for (int i = 0; i < ndihedraltypes; ++i)
|
||||||
|
if (!dtypelabel[i].empty()) fmt::print(fp, " {} \"\"\" {} \"\"\"", i + 1, dtypelabel[i]);
|
||||||
|
fputc('\n', fp);
|
||||||
|
}
|
||||||
|
if (itypelabel_map.size() > 0) {
|
||||||
|
fputs("labelmap improper", fp);
|
||||||
|
for (int i = 0; i < nimpropertypes; ++i)
|
||||||
|
if (!itypelabel[i].empty()) fmt::print(fp, " {} \"\"\" {} \"\"\"", i + 1, itypelabel[i]);
|
||||||
|
fputc('\n', fp);
|
||||||
|
}
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
}
|
||||||
78
src/label_map.h
Normal file
78
src/label_map.h
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
/* -*- 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.
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#ifndef LMP_LABEL_MAP_H
|
||||||
|
#define LMP_LABEL_MAP_H
|
||||||
|
|
||||||
|
#include "pointers.h" // IWYU pragma: export
|
||||||
|
|
||||||
|
#include <unordered_map>
|
||||||
|
|
||||||
|
namespace LAMMPS_NS {
|
||||||
|
|
||||||
|
class LabelMap : protected Pointers {
|
||||||
|
friend class AtomVec;
|
||||||
|
friend class ReadData;
|
||||||
|
public:
|
||||||
|
LabelMap(LAMMPS *lmp, int, int, int, int, int);
|
||||||
|
~LabelMap();
|
||||||
|
|
||||||
|
void modify_lmap(int, char **); // labelmap command in the input script
|
||||||
|
void merge_lmap(LabelMap *, int); // copy another lmap into this one
|
||||||
|
void create_lmap2lmap(LabelMap *, int); // index mapping between two lmaps
|
||||||
|
int find(const std::string &, int) const; // find numeric type of type label
|
||||||
|
bool is_complete(int) const; // check if all types are assigned
|
||||||
|
|
||||||
|
// input/output for atom class label map
|
||||||
|
|
||||||
|
void write_data(FILE *);
|
||||||
|
void read_restart(FILE *fp);
|
||||||
|
void write_restart(FILE *);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
int natomtypes, nbondtypes, nangletypes, ndihedraltypes, nimpropertypes;
|
||||||
|
std::vector<std::string> typelabel, btypelabel, atypelabel;
|
||||||
|
std::vector<std::string> dtypelabel, itypelabel;
|
||||||
|
std::unordered_map<std::string, int> typelabel_map;
|
||||||
|
std::unordered_map<std::string, int> btypelabel_map;
|
||||||
|
std::unordered_map<std::string, int> atypelabel_map;
|
||||||
|
std::unordered_map<std::string, int> dtypelabel_map;
|
||||||
|
std::unordered_map<std::string, int> itypelabel_map;
|
||||||
|
|
||||||
|
// per-type data struct mapping this label map to another
|
||||||
|
|
||||||
|
struct Lmap2Lmap {
|
||||||
|
int *atom;
|
||||||
|
int *bond;
|
||||||
|
int *angle;
|
||||||
|
int *dihedral;
|
||||||
|
int *improper;
|
||||||
|
};
|
||||||
|
|
||||||
|
Lmap2Lmap lmap2lmap;
|
||||||
|
|
||||||
|
void reset_type_labels();
|
||||||
|
int find_or_create(const std::string &, std::vector<std::string> &,
|
||||||
|
std::unordered_map<std::string, int> &); // look up type or create new type
|
||||||
|
int search(const std::string &,
|
||||||
|
const std::unordered_map<std::string, int> &) const; // look up type index
|
||||||
|
char *read_string(FILE *);
|
||||||
|
void write_string(const std::string &, FILE *);
|
||||||
|
int read_int(FILE *);
|
||||||
|
|
||||||
|
void write_map(const std::string &);
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace LAMMPS_NS
|
||||||
|
|
||||||
|
#endif
|
||||||
@ -37,8 +37,7 @@ enum{VERSION,SMALLINT,TAGINT,BIGINT,
|
|||||||
COMM_MODE,COMM_CUTOFF,COMM_VEL,NO_PAIR,
|
COMM_MODE,COMM_CUTOFF,COMM_VEL,NO_PAIR,
|
||||||
EXTRA_BOND_PER_ATOM,EXTRA_ANGLE_PER_ATOM,EXTRA_DIHEDRAL_PER_ATOM,
|
EXTRA_BOND_PER_ATOM,EXTRA_ANGLE_PER_ATOM,EXTRA_DIHEDRAL_PER_ATOM,
|
||||||
EXTRA_IMPROPER_PER_ATOM,EXTRA_SPECIAL_PER_ATOM,ATOM_MAXSPECIAL,
|
EXTRA_IMPROPER_PER_ATOM,EXTRA_SPECIAL_PER_ATOM,ATOM_MAXSPECIAL,
|
||||||
NELLIPSOIDS,NLINES,NTRIS,NBODIES,
|
NELLIPSOIDS,NLINES,NTRIS,NBODIES,ATIME,ATIMESTEP,LABELMAP};
|
||||||
ATIME,ATIMESTEP};
|
|
||||||
|
|
||||||
#define LB_FACTOR 1.1
|
#define LB_FACTOR 1.1
|
||||||
|
|
||||||
|
|||||||
662
src/molecule.cpp
662
src/molecule.cpp
File diff suppressed because it is too large
Load Diff
@ -237,11 +237,9 @@ void Output::setup(int memflag)
|
|||||||
last_dump[idump] = ntimestep;
|
last_dump[idump] = ntimestep;
|
||||||
}
|
}
|
||||||
|
|
||||||
// calculate timestep and/or time for next dump
|
// calculate timestep or time for next dump
|
||||||
// set next_dump and next_time_dump, 0 arg for setup()
|
// set next_dump and next_time_dump
|
||||||
// only do this if dump written or dump has not been written yet
|
|
||||||
|
|
||||||
if (writeflag || last_dump[idump] < 0)
|
|
||||||
calculate_next_dump(SETUP,idump,ntimestep);
|
calculate_next_dump(SETUP,idump,ntimestep);
|
||||||
|
|
||||||
// if dump not written now, use addstep_compute_all()
|
// if dump not written now, use addstep_compute_all()
|
||||||
@ -268,11 +266,11 @@ void Output::setup(int memflag)
|
|||||||
|
|
||||||
if (restart_flag && update->restrict_output == 0) {
|
if (restart_flag && update->restrict_output == 0) {
|
||||||
if (restart_flag_single) {
|
if (restart_flag_single) {
|
||||||
if (restart_every_single)
|
if (restart_every_single) {
|
||||||
next_restart_single =
|
next_restart_single =
|
||||||
(ntimestep/restart_every_single)*restart_every_single +
|
(ntimestep/restart_every_single)*restart_every_single +
|
||||||
restart_every_single;
|
restart_every_single;
|
||||||
else {
|
} else {
|
||||||
auto nextrestart = static_cast<bigint>
|
auto nextrestart = static_cast<bigint>
|
||||||
(input->variable->compute_equal(ivar_restart_single));
|
(input->variable->compute_equal(ivar_restart_single));
|
||||||
if (nextrestart <= ntimestep)
|
if (nextrestart <= ntimestep)
|
||||||
@ -365,7 +363,7 @@ void Output::setup(int memflag)
|
|||||||
modify->clearstep_compute();
|
modify->clearstep_compute();
|
||||||
|
|
||||||
// perform dump
|
// perform dump
|
||||||
// reset next_dump and next_time_dump, 1 arg for write()
|
// set next_dump and next_time_dump
|
||||||
|
|
||||||
dump[idump]->write();
|
dump[idump]->write();
|
||||||
last_dump[idump] = ntimestep;
|
last_dump[idump] = ntimestep;
|
||||||
@ -388,7 +386,6 @@ void Output::setup(int memflag)
|
|||||||
|
|
||||||
if (next_restart == ntimestep) {
|
if (next_restart == ntimestep) {
|
||||||
if (next_restart_single == ntimestep) {
|
if (next_restart_single == ntimestep) {
|
||||||
|
|
||||||
std::string file = restart1;
|
std::string file = restart1;
|
||||||
std::size_t found = file.find('*');
|
std::size_t found = file.find('*');
|
||||||
if (found != std::string::npos)
|
if (found != std::string::npos)
|
||||||
@ -407,6 +404,7 @@ void Output::setup(int memflag)
|
|||||||
modify->addstep_compute(next_restart_single);
|
modify->addstep_compute(next_restart_single);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (next_restart_double == ntimestep) {
|
if (next_restart_double == ntimestep) {
|
||||||
if (last_restart != ntimestep) {
|
if (last_restart != ntimestep) {
|
||||||
if (restart_toggle == 0) {
|
if (restart_toggle == 0) {
|
||||||
@ -417,6 +415,7 @@ void Output::setup(int memflag)
|
|||||||
restart_toggle = 0;
|
restart_toggle = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (restart_every_double) next_restart_double += restart_every_double;
|
if (restart_every_double) next_restart_double += restart_every_double;
|
||||||
else {
|
else {
|
||||||
modify->clearstep_compute();
|
modify->clearstep_compute();
|
||||||
@ -489,8 +488,9 @@ void Output::calculate_next_dump(int which, int idump, bigint ntimestep)
|
|||||||
|
|
||||||
if (every_dump[idump]) {
|
if (every_dump[idump]) {
|
||||||
|
|
||||||
// which = SETUP: nextdump = next multiple of every_dump
|
// which = SETUP: next_dump = next multiple of every_dump
|
||||||
// which = WRITE: increment nextdump by every_dump
|
// which = WRITE: increment next_dump by every_dump
|
||||||
|
// current step is already multiple of every_dump
|
||||||
|
|
||||||
if (which == SETUP)
|
if (which == SETUP)
|
||||||
next_dump[idump] = (ntimestep/every_dump[idump])*every_dump[idump] + every_dump[idump];
|
next_dump[idump] = (ntimestep/every_dump[idump])*every_dump[idump] + every_dump[idump];
|
||||||
@ -728,7 +728,6 @@ void Output::reset_dt()
|
|||||||
next = MIN(next,next_thermo);
|
next = MIN(next,next_thermo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
add a Dump to list of Dumps
|
add a Dump to list of Dumps
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|||||||
@ -25,6 +25,7 @@ PairStyle(hybrid,PairHybrid);
|
|||||||
namespace LAMMPS_NS {
|
namespace LAMMPS_NS {
|
||||||
|
|
||||||
class PairHybrid : public Pair {
|
class PairHybrid : public Pair {
|
||||||
|
friend class AtomVecDielectric;
|
||||||
friend class ComputeSpin;
|
friend class ComputeSpin;
|
||||||
friend class FixGPU;
|
friend class FixGPU;
|
||||||
friend class FixIntel;
|
friend class FixIntel;
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -44,8 +44,7 @@ class ReadData : public Command {
|
|||||||
int nlocal_previous;
|
int nlocal_previous;
|
||||||
bigint natoms;
|
bigint natoms;
|
||||||
bigint nbonds, nangles, ndihedrals, nimpropers;
|
bigint nbonds, nangles, ndihedrals, nimpropers;
|
||||||
int ntypes;
|
int ntypes, nbondtypes, nangletypes, ndihedraltypes, nimpropertypes;
|
||||||
int nbondtypes, nangletypes, ndihedraltypes, nimpropertypes;
|
|
||||||
|
|
||||||
bigint nellipsoids;
|
bigint nellipsoids;
|
||||||
class AtomVecEllipsoid *avec_ellipsoid;
|
class AtomVecEllipsoid *avec_ellipsoid;
|
||||||
@ -56,6 +55,10 @@ class ReadData : public Command {
|
|||||||
bigint nbodies;
|
bigint nbodies;
|
||||||
class AtomVecBody *avec_body;
|
class AtomVecBody *avec_body;
|
||||||
|
|
||||||
|
// type labels
|
||||||
|
|
||||||
|
class LabelMap *lmap;
|
||||||
|
|
||||||
// box info
|
// box info
|
||||||
|
|
||||||
double boxlo[3], boxhi[3];
|
double boxlo[3], boxhi[3];
|
||||||
@ -64,7 +67,8 @@ class ReadData : public Command {
|
|||||||
|
|
||||||
// optional args
|
// optional args
|
||||||
|
|
||||||
int addflag, offsetflag, shiftflag, coeffflag;
|
int addflag, offsetflag, shiftflag, coeffflag, settypeflag;
|
||||||
|
int tlabelflag, blabelflag, alabelflag, dlabelflag, ilabelflag;
|
||||||
tagint addvalue;
|
tagint addvalue;
|
||||||
int toffset, boffset, aoffset, doffset, ioffset;
|
int toffset, boffset, aoffset, doffset, ioffset;
|
||||||
double shift[3];
|
double shift[3];
|
||||||
@ -85,7 +89,7 @@ class ReadData : public Command {
|
|||||||
void header(int);
|
void header(int);
|
||||||
void parse_keyword(int);
|
void parse_keyword(int);
|
||||||
void skip_lines(bigint);
|
void skip_lines(bigint);
|
||||||
void parse_coeffs(char *, const char *, int, int, int);
|
void parse_coeffs(char *, const char *, int, int, int, int, int *);
|
||||||
int style_match(const char *, const char *);
|
int style_match(const char *, const char *);
|
||||||
|
|
||||||
void atoms();
|
void atoms();
|
||||||
@ -107,6 +111,7 @@ class ReadData : public Command {
|
|||||||
void anglecoeffs(int);
|
void anglecoeffs(int);
|
||||||
void dihedralcoeffs(int);
|
void dihedralcoeffs(int);
|
||||||
void impropercoeffs(int);
|
void impropercoeffs(int);
|
||||||
|
void typelabels(int);
|
||||||
|
|
||||||
void fix(Fix *, char *);
|
void fix(Fix *, char *);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -27,6 +27,7 @@
|
|||||||
#include "group.h"
|
#include "group.h"
|
||||||
#include "improper.h"
|
#include "improper.h"
|
||||||
#include "irregular.h"
|
#include "irregular.h"
|
||||||
|
#include "label_map.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "modify.h"
|
#include "modify.h"
|
||||||
#include "mpiio.h"
|
#include "mpiio.h"
|
||||||
@ -559,6 +560,10 @@ std::string ReadRestart::file_search(const std::string &inpfile)
|
|||||||
bigint maxnum = -1;
|
bigint maxnum = -1;
|
||||||
loc = pattern.find('*');
|
loc = pattern.find('*');
|
||||||
if (loc != std::string::npos) {
|
if (loc != std::string::npos) {
|
||||||
|
// the regex matcher in utils::strmatch() only checks the first 256 characters.
|
||||||
|
if (loc > 256)
|
||||||
|
error->one(FLERR, "Filename part before '*' is too long to find restart with largest step");
|
||||||
|
|
||||||
// convert pattern to equivalent regexp
|
// convert pattern to equivalent regexp
|
||||||
pattern.replace(loc,1,"\\d+");
|
pattern.replace(loc,1,"\\d+");
|
||||||
|
|
||||||
@ -889,6 +894,11 @@ void ReadRestart::type_arrays()
|
|||||||
atom->set_mass(mass);
|
atom->set_mass(mass);
|
||||||
delete[] mass;
|
delete[] mass;
|
||||||
|
|
||||||
|
} else if (flag == LABELMAP) {
|
||||||
|
read_int();
|
||||||
|
atom->add_label_map();
|
||||||
|
atom->lmap->read_restart(fp);
|
||||||
|
|
||||||
} else error->all(FLERR,
|
} else error->all(FLERR,
|
||||||
"Invalid flag in type arrays section of restart file");
|
"Invalid flag in type arrays section of restart file");
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user