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
|
||||||
|
|||||||
@ -13,7 +13,7 @@ Masses
|
|||||||
2 1
|
2 1
|
||||||
3 1
|
3 1
|
||||||
|
|
||||||
Atoms # dielectric: id mol type q x y z normx normy normz area_per_patch ed em epsilon curvature
|
Atoms # dielectric : id mol type q x y z normx normy normz area_per_patch ed em epsilon curvature
|
||||||
|
|
||||||
1 0 1 0 0 0 9.99798 0 0 1 0.866 8 6 6 0
|
1 0 1 0 0 0 9.99798 0 0 1 0.866 8 6 6 0
|
||||||
2 0 1 0 0.500101 0.866201 9.99798 0 0 1 0.866 8 6 6 0
|
2 0 1 0 0.500101 0.866201 9.99798 0 0 1 0.866 8 6 6 0
|
||||||
|
|||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
|
|||||||
@ -25,7 +25,7 @@ using namespace FixConst;
|
|||||||
|
|
||||||
enum { NATIVE, REAL, METAL }; // LAMMPS units which MDI supports
|
enum { NATIVE, REAL, METAL }; // LAMMPS units which MDI supports
|
||||||
|
|
||||||
#define MAXELEMENT 103 // used elsewhere in MDI package
|
#define MAXELEMENT 103 // used elsewhere in MDI package
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
@ -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");
|
||||||
|
|
||||||
@ -55,41 +54,51 @@ FixMDIQM::FixMDIQM(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg)
|
|||||||
|
|
||||||
int iarg = 3;
|
int iarg = 3;
|
||||||
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");
|
||||||
every = utils::inumeric(FLERR,arg[iarg+1],false,lmp);
|
every = utils::inumeric(FLERR, arg[iarg + 1], false, lmp);
|
||||||
if (every <= 0) error->all(FLERR,"Illegal fix mdi/qm command");
|
if (every <= 0) error->all(FLERR, "Illegal fix mdi/qm command");
|
||||||
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;
|
||||||
if (iarg+ntypes+1 > narg) error->all(FLERR,"Illegal fix mdi/qm command");
|
if (iarg + ntypes + 1 > narg) error->all(FLERR, "Illegal fix mdi/qm command");
|
||||||
delete [] elements;
|
delete[] elements;
|
||||||
elements = new int[ntypes+1];
|
elements = new int[ntypes + 1];
|
||||||
for (int i = 1; i <= ntypes; i++) {
|
for (int i = 1; i <= ntypes; i++) {
|
||||||
elements[i] = utils::inumeric(FLERR,arg[iarg+i],false,lmp);
|
elements[i] = utils::inumeric(FLERR, arg[iarg + i], false, lmp);
|
||||||
if (elements[i] < 1 || elements[i] > MAXELEMENT)
|
if (elements[i] < 1 || elements[i] > MAXELEMENT)
|
||||||
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,26 +226,26 @@ 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
|
||||||
// only works for stand-alone engines
|
// only works for stand-alone engines
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
plugin = 0;
|
plugin = 0;
|
||||||
|
|
||||||
if (lmp->mdicomm == nullptr)
|
if (lmp->mdicomm == nullptr)
|
||||||
error->all(FLERR,"Fix mdi/qm is not connected to engine via mdi connect");
|
error->all(FLERR, "Fix mdi/qm is not connected to engine via mdi connect");
|
||||||
|
|
||||||
int nbytes = sizeof(MDI_Comm);
|
int nbytes = sizeof(MDI_Comm);
|
||||||
char *ptrcomm = (char *) lmp->mdicomm;
|
char *ptrcomm = (char *) lmp->mdicomm;
|
||||||
memcpy(&mdicomm,ptrcomm,nbytes);
|
memcpy(&mdicomm, ptrcomm, nbytes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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);
|
||||||
send_elements();
|
|
||||||
} else if ( types_exists ) {
|
if (elements && elements_exists)
|
||||||
send_types();
|
send_elements();
|
||||||
}
|
else if (types_exists)
|
||||||
|
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
|
||||||
|
|
||||||
@ -319,7 +332,7 @@ void FixMDIQM::post_force(int vflag)
|
|||||||
buf3[3 * index + 2] = x[i][2] * lmp2mdi_length;
|
buf3[3 * index + 2] = x[i][2] * lmp2mdi_length;
|
||||||
}
|
}
|
||||||
|
|
||||||
int n = static_cast<int> (atom->natoms);
|
int n = static_cast<int>(atom->natoms);
|
||||||
MPI_Reduce(buf3, buf3all, 3 * n, MPI_DOUBLE, MPI_SUM, 0, world);
|
MPI_Reduce(buf3, buf3all, 3 * n, MPI_DOUBLE, MPI_SUM, 0, world);
|
||||||
|
|
||||||
// send current coords to MDI engine
|
// send current coords to MDI engine
|
||||||
@ -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) {
|
||||||
@ -385,9 +398,9 @@ void FixMDIQM::post_force(int vflag)
|
|||||||
qm_virial_symmetric[0] = qm_virial[0] * mdi2lmp_pressure;
|
qm_virial_symmetric[0] = qm_virial[0] * mdi2lmp_pressure;
|
||||||
qm_virial_symmetric[1] = qm_virial[4] * mdi2lmp_pressure;
|
qm_virial_symmetric[1] = qm_virial[4] * mdi2lmp_pressure;
|
||||||
qm_virial_symmetric[2] = qm_virial[8] * mdi2lmp_pressure;
|
qm_virial_symmetric[2] = qm_virial[8] * mdi2lmp_pressure;
|
||||||
qm_virial_symmetric[3] = 0.5*(qm_virial[1]+qm_virial[3]) * mdi2lmp_pressure;
|
qm_virial_symmetric[3] = 0.5 * (qm_virial[1] + qm_virial[3]) * mdi2lmp_pressure;
|
||||||
qm_virial_symmetric[4] = 0.5*(qm_virial[2]+qm_virial[6]) * mdi2lmp_pressure;
|
qm_virial_symmetric[4] = 0.5 * (qm_virial[2] + qm_virial[6]) * mdi2lmp_pressure;
|
||||||
qm_virial_symmetric[5] = 0.5*(qm_virial[5]+qm_virial[7]) * mdi2lmp_pressure;
|
qm_virial_symmetric[5] = 0.5 * (qm_virial[5] + qm_virial[7]) * mdi2lmp_pressure;
|
||||||
}
|
}
|
||||||
|
|
||||||
// optionally set fix->virial
|
// optionally set fix->virial
|
||||||
@ -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,10 +459,9 @@ 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);
|
||||||
memory->destroy(buf3);
|
memory->destroy(buf3);
|
||||||
memory->destroy(buf3all);
|
memory->destroy(buf3all);
|
||||||
@ -467,7 +478,7 @@ void FixMDIQM::reallocate()
|
|||||||
|
|
||||||
void FixMDIQM::send_types()
|
void FixMDIQM::send_types()
|
||||||
{
|
{
|
||||||
int n = static_cast<int> (atom->natoms);
|
int n = static_cast<int>(atom->natoms);
|
||||||
memset(ibuf1, 0, n * sizeof(int));
|
memset(ibuf1, 0, n * sizeof(int));
|
||||||
|
|
||||||
// use local atomID to index into ordered ibuf1
|
// use local atomID to index into ordered ibuf1
|
||||||
@ -496,7 +507,7 @@ void FixMDIQM::send_types()
|
|||||||
|
|
||||||
void FixMDIQM::send_elements()
|
void FixMDIQM::send_elements()
|
||||||
{
|
{
|
||||||
int n = static_cast<int> (atom->natoms);
|
int n = static_cast<int>(atom->natoms);
|
||||||
memset(ibuf1, 0, n * sizeof(int));
|
memset(ibuf1, 0, n * sizeof(int));
|
||||||
|
|
||||||
// use local atomID to index into ordered ibuf1
|
// use local atomID to index into ordered ibuf1
|
||||||
@ -530,7 +541,9 @@ 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");
|
||||||
if ( celldispl_exists ) {
|
MPI_Bcast(&celldispl_exists, 1, MPI_INT, 0, world);
|
||||||
|
|
||||||
|
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");
|
||||||
cell[0] = domain->boxlo[0] * lmp2mdi_length;
|
cell[0] = domain->boxlo[0] * lmp2mdi_length;
|
||||||
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -40,7 +40,7 @@ class FixMDIQM : public Fix {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
int nprocs;
|
int nprocs;
|
||||||
int every,virialflag,addflag,connectflag;
|
int every, virialflag, addflag, connectflag;
|
||||||
int plugin;
|
int plugin;
|
||||||
int maxlocal;
|
int maxlocal;
|
||||||
int sumflag;
|
int sumflag;
|
||||||
@ -48,7 +48,7 @@ class FixMDIQM : public Fix {
|
|||||||
|
|
||||||
double qm_energy;
|
double qm_energy;
|
||||||
int lmpunits;
|
int lmpunits;
|
||||||
double qm_virial[9],qm_virial_symmetric[6];
|
double qm_virial[9], qm_virial_symmetric[6];
|
||||||
double **fqm;
|
double **fqm;
|
||||||
|
|
||||||
MDI_Comm mdicomm;
|
MDI_Comm mdicomm;
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -44,7 +44,7 @@ void MDICommand::command(int narg, char **arg)
|
|||||||
} else if (strcmp(arg[0], "connect") == 0) {
|
} else if (strcmp(arg[0], "connect") == 0) {
|
||||||
|
|
||||||
if (lmp->mdicomm != nullptr)
|
if (lmp->mdicomm != nullptr)
|
||||||
error->all(FLERR,"MDI cannot connect to already connected engine");
|
error->all(FLERR, "MDI cannot connect to already connected engine");
|
||||||
|
|
||||||
MDI_Comm mdicomm;
|
MDI_Comm mdicomm;
|
||||||
MDI_Get_communicator(&mdicomm, 0);
|
MDI_Get_communicator(&mdicomm, 0);
|
||||||
@ -53,23 +53,23 @@ 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");
|
||||||
memcpy(ptrcomm,&mdicomm,nbytes);
|
memcpy(ptrcomm, &mdicomm, nbytes);
|
||||||
|
|
||||||
lmp->mdicomm = (void *) ptrcomm;
|
lmp->mdicomm = (void *) ptrcomm;
|
||||||
|
|
||||||
} 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);
|
||||||
char *ptrcomm = (char *) lmp->mdicomm;
|
char *ptrcomm = (char *) lmp->mdicomm;
|
||||||
memcpy(&mdicomm,ptrcomm,nbytes);
|
memcpy(&mdicomm, ptrcomm, nbytes);
|
||||||
|
|
||||||
int ierr = MDI_Send_command("EXIT", mdicomm);
|
int ierr = MDI_Send_command("EXIT", mdicomm);
|
||||||
if (ierr) error->all(FLERR, "MDI: EXIT command");
|
if (ierr) error->all(FLERR, "MDI: EXIT command");
|
||||||
@ -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");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -54,7 +54,7 @@ enum { DEFAULT, MD, OPT }; // top-level MDI engine modes
|
|||||||
|
|
||||||
enum { TYPE, CHARGE, MASS, COORD, VELOCITY, FORCE, ADDFORCE };
|
enum { TYPE, CHARGE, MASS, COORD, VELOCITY, FORCE, ADDFORCE };
|
||||||
|
|
||||||
#define MAXELEMENT 103 // used elsewhere in MDI package
|
#define MAXELEMENT 103 // used elsewhere in MDI package
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
trigger LAMMPS to start acting as an MDI engine
|
trigger LAMMPS to start acting as an MDI engine
|
||||||
@ -65,7 +65,7 @@ enum { TYPE, CHARGE, MASS, COORD, VELOCITY, FORCE, ADDFORCE };
|
|||||||
when EXIT command is received, mdi engine command exits
|
when EXIT command is received, mdi engine command exits
|
||||||
---------------------------------------------------------------------- */
|
---------------------------------------------------------------------- */
|
||||||
|
|
||||||
MDIEngine::MDIEngine(LAMMPS *_lmp, int narg, char ** arg) : Pointers(_lmp)
|
MDIEngine::MDIEngine(LAMMPS *_lmp, int narg, char **arg) : Pointers(_lmp)
|
||||||
{
|
{
|
||||||
// check requirements for LAMMPS to work with MDI as an engine
|
// check requirements for LAMMPS to work with MDI as an engine
|
||||||
|
|
||||||
@ -80,18 +80,19 @@ MDIEngine::MDIEngine(LAMMPS *_lmp, int narg, char ** arg) : Pointers(_lmp)
|
|||||||
|
|
||||||
int iarg = 0;
|
int iarg = 0;
|
||||||
while (iarg < narg) {
|
while (iarg < narg) {
|
||||||
if (strcmp(arg[iarg],"elements") == 0) {
|
if (strcmp(arg[iarg], "elements") == 0) {
|
||||||
int ntypes = atom->ntypes;
|
int ntypes = atom->ntypes;
|
||||||
delete [] elements;
|
delete[] elements;
|
||||||
elements = new int[ntypes+1];
|
elements = new int[ntypes + 1];
|
||||||
if (iarg+ntypes+1 > narg) error->all(FLERR,"Illegal mdi engine command");
|
if (iarg + ntypes + 1 > narg) error->all(FLERR, "Illegal mdi engine command");
|
||||||
for (int i = 1; i <= ntypes; i++) {
|
for (int i = 1; i <= ntypes; i++) {
|
||||||
elements[i] = utils::inumeric(FLERR,arg[iarg+i],false,lmp);
|
elements[i] = utils::inumeric(FLERR, arg[iarg + i], false, lmp);
|
||||||
if (elements[i] < 0 || elements[i] > MAXELEMENT)
|
if (elements[i] < 0 || elements[i] > MAXELEMENT)
|
||||||
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
|
||||||
@ -99,10 +100,10 @@ MDIEngine::MDIEngine(LAMMPS *_lmp, int narg, char ** arg) : Pointers(_lmp)
|
|||||||
if (elements) {
|
if (elements) {
|
||||||
int ntypes = atom->ntypes;
|
int ntypes = atom->ntypes;
|
||||||
for (int i = 1; i < ntypes; i++)
|
for (int i = 1; i < ntypes; i++)
|
||||||
for (int j = i+1; j <= ntypes; j++) {
|
for (int j = i + 1; j <= ntypes; j++) {
|
||||||
if (elements[i] == 0 || elements[j] == 0) continue;
|
if (elements[i] == 0 || elements[j] == 0) continue;
|
||||||
if (elements[i] == elements[j])
|
if (elements[i] == elements[j])
|
||||||
error->all(FLERR,"MDI engine element cannot map to multiple types");
|
error->all(FLERR, "MDI engine element cannot map to multiple types");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -167,7 +168,7 @@ MDIEngine::MDIEngine(LAMMPS *_lmp, int narg, char ** arg) : Pointers(_lmp)
|
|||||||
ibuf1 = ibuf1all = nullptr;
|
ibuf1 = ibuf1all = nullptr;
|
||||||
|
|
||||||
maxatom = 0;
|
maxatom = 0;
|
||||||
sys_natoms = static_cast<int> (atom->natoms);
|
sys_natoms = static_cast<int>(atom->natoms);
|
||||||
reallocate();
|
reallocate();
|
||||||
|
|
||||||
nsteps = 0;
|
nsteps = 0;
|
||||||
@ -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) {
|
||||||
@ -362,7 +373,7 @@ int MDIEngine::execute_command(const char *command, MDI_Comm mdicomm)
|
|||||||
else
|
else
|
||||||
receive_double3(VELOCITY);
|
receive_double3(VELOCITY);
|
||||||
|
|
||||||
// -----------------------------------------------
|
// -----------------------------------------------
|
||||||
|
|
||||||
} else if (strcmp(command, "<@") == 0) {
|
} else if (strcmp(command, "<@") == 0) {
|
||||||
ierr = MDI_Send(node_engine, MDI_NAME_LENGTH, MDI_CHAR, mdicomm);
|
ierr = MDI_Send(node_engine, MDI_NAME_LENGTH, MDI_CHAR, mdicomm);
|
||||||
@ -411,9 +422,9 @@ int MDIEngine::execute_command(const char *command, MDI_Comm mdicomm)
|
|||||||
} else if (strcmp(command, "<VELOCITIES") == 0) {
|
} else if (strcmp(command, "<VELOCITIES") == 0) {
|
||||||
send_double3(VELOCITY);
|
send_double3(VELOCITY);
|
||||||
|
|
||||||
// -----------------------------------------------
|
// -----------------------------------------------
|
||||||
|
|
||||||
// MDI action commands at @DEFAULT node
|
// MDI action commands at @DEFAULT node
|
||||||
|
|
||||||
} else if (strcmp(command, "MD") == 0) {
|
} else if (strcmp(command, "MD") == 0) {
|
||||||
md();
|
md();
|
||||||
@ -421,9 +432,9 @@ int MDIEngine::execute_command(const char *command, MDI_Comm mdicomm)
|
|||||||
} else if (strcmp(command, "OPTG") == 0) {
|
} else if (strcmp(command, "OPTG") == 0) {
|
||||||
optg();
|
optg();
|
||||||
|
|
||||||
// -----------------------------------------------
|
// -----------------------------------------------
|
||||||
|
|
||||||
// MDI node commands
|
// MDI node commands
|
||||||
|
|
||||||
} else if (strcmp(command, "@INIT_MD") == 0) {
|
} else if (strcmp(command, "@INIT_MD") == 0) {
|
||||||
if (mode != DEFAULT) error->all(FLERR, "MDI: MDI engine is already performing a simulation");
|
if (mode != DEFAULT) error->all(FLERR, "MDI: MDI engine is already performing a simulation");
|
||||||
@ -458,14 +469,14 @@ int MDIEngine::execute_command(const char *command, MDI_Comm mdicomm)
|
|||||||
strncpy(node_driver, command, MDI_COMMAND_LENGTH);
|
strncpy(node_driver, command, MDI_COMMAND_LENGTH);
|
||||||
node_match = false;
|
node_match = false;
|
||||||
|
|
||||||
// exit command
|
// exit command
|
||||||
|
|
||||||
} else if (strcmp(command, "EXIT") == 0) {
|
} else if (strcmp(command, "EXIT") == 0) {
|
||||||
exit_command = true;
|
exit_command = true;
|
||||||
|
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
// custom LAMMPS commands
|
// custom LAMMPS commands
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
|
|
||||||
} else if (strcmp(command, "NBYTES") == 0) {
|
} else if (strcmp(command, "NBYTES") == 0) {
|
||||||
nbytes_command();
|
nbytes_command();
|
||||||
@ -478,9 +489,9 @@ int MDIEngine::execute_command(const char *command, MDI_Comm mdicomm)
|
|||||||
} else if (strcmp(command, "<KE") == 0) {
|
} else if (strcmp(command, "<KE") == 0) {
|
||||||
send_ke();
|
send_ke();
|
||||||
|
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
// unknown command
|
// unknown command
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
error->all(FLERR, "MDI: Unknown command {} received from driver", command);
|
error->all(FLERR, "MDI: Unknown command {} received from driver", command);
|
||||||
@ -998,9 +1009,9 @@ void MDIEngine::create_system()
|
|||||||
// create list of 1 to sys_natoms IDs
|
// create list of 1 to sys_natoms IDs
|
||||||
// optionally set charges if specified by ">CHARGES"
|
// optionally set charges if specified by ">CHARGES"
|
||||||
|
|
||||||
tagint* sys_ids;
|
tagint *sys_ids;
|
||||||
memory->create(sys_ids, sys_natoms, "mdi:sys_ids");
|
memory->create(sys_ids, sys_natoms, "mdi:sys_ids");
|
||||||
for (int i = 0; i < sys_natoms; i++) sys_ids[i] = i+1;
|
for (int i = 0; i < sys_natoms; i++) sys_ids[i] = i + 1;
|
||||||
|
|
||||||
if (flag_velocities)
|
if (flag_velocities)
|
||||||
lammps_create_atoms(lmp, sys_natoms, sys_ids, sys_types, sys_coords, sys_velocities, nullptr,
|
lammps_create_atoms(lmp, sys_natoms, sys_ids, sys_types, sys_coords, sys_velocities, nullptr,
|
||||||
@ -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, "\"");
|
||||||
strcat(plugin_args, infile_arg);
|
if (infile_arg) {
|
||||||
|
strcat(plugin_args, " -in ");
|
||||||
|
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) {
|
||||||
|
|||||||
399
src/atom.cpp
399
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
mass[itype] = mass_one;
|
case 1: { // type label
|
||||||
mass_setflag[itype] = 1;
|
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_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);
|
||||||
|
|
||||||
int lo,hi;
|
char *typestr = utils::expand_type(file, line, arg[0], Atom::ATOM, lmp);
|
||||||
utils::bounds(file,line,arg[0],1,ntypes,lo,hi,error);
|
if (typestr) arg[0] = typestr;
|
||||||
|
|
||||||
|
int lo, hi;
|
||||||
|
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]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -1710,9 +1729,30 @@ void Input::pair_coeff()
|
|||||||
if (force->pair == nullptr)
|
if (force->pair == nullptr)
|
||||||
error->all(FLERR,"Pair_coeff command before pair_style is defined");
|
error->all(FLERR,"Pair_coeff command before pair_style is defined");
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|||||||
12
src/input.h
12
src/input.h
@ -34,12 +34,11 @@ class Input : protected Pointers {
|
|||||||
|
|
||||||
Input(class LAMMPS *, int, char **);
|
Input(class LAMMPS *, int, char **);
|
||||||
~Input() override;
|
~Input() override;
|
||||||
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:
|
||||||
char *command; // ptr to current command
|
char *command; // ptr to current command
|
||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
1230
src/molecule.cpp
1230
src/molecule.cpp
File diff suppressed because it is too large
Load Diff
715
src/output.cpp
715
src/output.cpp
@ -237,12 +237,10 @@ 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()
|
||||||
// since don't know what computes the dump will invoke
|
// since don't know what computes the dump will invoke
|
||||||
@ -261,322 +259,324 @@ void Output::setup(int memflag)
|
|||||||
|
|
||||||
} else next_dump_any = update->laststep + 1;
|
} else next_dump_any = update->laststep + 1;
|
||||||
|
|
||||||
// do not write restart files at start of run
|
// do not write restart files at start of run
|
||||||
// set next_restart values to multiple of every or variable value
|
// set next_restart values to multiple of every or variable value
|
||||||
// wrap variable eval with clear/add
|
// wrap variable eval with clear/add
|
||||||
// if no restarts, set next_restart to last+1 so will not influence next
|
// if no restarts, set next_restart to last+1 so will not influence next
|
||||||
|
|
||||||
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)
|
||||||
error->all(FLERR,"Restart variable returned a bad timestep");
|
error->all(FLERR,"Restart variable returned a bad timestep");
|
||||||
next_restart_single = nextrestart;
|
next_restart_single = nextrestart;
|
||||||
}
|
}
|
||||||
} else next_restart_single = update->laststep + 1;
|
} else next_restart_single = update->laststep + 1;
|
||||||
if (restart_flag_double) {
|
if (restart_flag_double) {
|
||||||
if (restart_every_double)
|
if (restart_every_double)
|
||||||
next_restart_double =
|
next_restart_double =
|
||||||
(ntimestep/restart_every_double)*restart_every_double +
|
(ntimestep/restart_every_double)*restart_every_double +
|
||||||
restart_every_double;
|
restart_every_double;
|
||||||
else {
|
else {
|
||||||
auto nextrestart = static_cast<bigint>
|
auto nextrestart = static_cast<bigint>
|
||||||
(input->variable->compute_equal(ivar_restart_double));
|
(input->variable->compute_equal(ivar_restart_double));
|
||||||
if (nextrestart <= ntimestep)
|
if (nextrestart <= ntimestep)
|
||||||
error->all(FLERR,"Restart variable returned a bad timestep");
|
error->all(FLERR,"Restart variable returned a bad timestep");
|
||||||
next_restart_double = nextrestart;
|
next_restart_double = nextrestart;
|
||||||
}
|
}
|
||||||
} else next_restart_double = update->laststep + 1;
|
} else next_restart_double = update->laststep + 1;
|
||||||
next_restart = MIN(next_restart_single,next_restart_double);
|
next_restart = MIN(next_restart_single,next_restart_double);
|
||||||
} else next_restart = update->laststep + 1;
|
} else next_restart = update->laststep + 1;
|
||||||
|
|
||||||
// print memory usage unless being called between multiple runs
|
// print memory usage unless being called between multiple runs
|
||||||
|
|
||||||
if (memflag) memory_usage();
|
if (memflag) memory_usage();
|
||||||
|
|
||||||
// set next_thermo to multiple of every or variable eval if var defined
|
// set next_thermo to multiple of every or variable eval if var defined
|
||||||
// insure thermo output on last step of run
|
// insure thermo output on last step of run
|
||||||
// thermo may invoke computes so wrap with clear/add
|
// thermo may invoke computes so wrap with clear/add
|
||||||
|
|
||||||
modify->clearstep_compute();
|
modify->clearstep_compute();
|
||||||
|
|
||||||
thermo->header();
|
thermo->header();
|
||||||
thermo->compute(0);
|
thermo->compute(0);
|
||||||
last_thermo = ntimestep;
|
last_thermo = ntimestep;
|
||||||
|
|
||||||
if (var_thermo) {
|
if (var_thermo) {
|
||||||
next_thermo = static_cast<bigint>
|
next_thermo = static_cast<bigint>
|
||||||
(input->variable->compute_equal(ivar_thermo));
|
(input->variable->compute_equal(ivar_thermo));
|
||||||
if (next_thermo <= ntimestep)
|
if (next_thermo <= ntimestep)
|
||||||
error->all(FLERR,"Thermo every variable returned a bad timestep");
|
error->all(FLERR,"Thermo every variable returned a bad timestep");
|
||||||
} else if (thermo_every) {
|
} else if (thermo_every) {
|
||||||
next_thermo = (ntimestep/thermo_every)*thermo_every + thermo_every;
|
next_thermo = (ntimestep/thermo_every)*thermo_every + thermo_every;
|
||||||
next_thermo = MIN(next_thermo,update->laststep);
|
next_thermo = MIN(next_thermo,update->laststep);
|
||||||
} else next_thermo = update->laststep;
|
} else next_thermo = update->laststep;
|
||||||
|
|
||||||
modify->addstep_compute(next_thermo);
|
modify->addstep_compute(next_thermo);
|
||||||
|
|
||||||
// next = next timestep any output will be done
|
// next = next timestep any output will be done
|
||||||
|
|
||||||
next = MIN(next_dump_any,next_restart);
|
next = MIN(next_dump_any,next_restart);
|
||||||
next = MIN(next,next_thermo);
|
next = MIN(next,next_thermo);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
perform all output for this timestep
|
perform all output for this timestep
|
||||||
only perform output if next matches current step and last output doesn't
|
only perform output if next matches current step and last output doesn't
|
||||||
do dump/restart before thermo so thermo CPU time will include them
|
do dump/restart before thermo so thermo CPU time will include them
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void Output::write(bigint ntimestep)
|
void Output::write(bigint ntimestep)
|
||||||
{
|
{
|
||||||
// perform dump if its next_dump = current ntimestep
|
// perform dump if its next_dump = current ntimestep
|
||||||
// but not if it was already written on this step
|
// but not if it was already written on this step
|
||||||
// set next_dump and also next_time_dump for mode_dump = 1
|
// set next_dump and also next_time_dump for mode_dump = 1
|
||||||
// set next_dump_any to smallest next_dump
|
// set next_dump_any to smallest next_dump
|
||||||
// wrap step dumps that invoke computes or do variable eval with clear/add
|
// wrap step dumps that invoke computes or do variable eval with clear/add
|
||||||
// NOTE:
|
// NOTE:
|
||||||
// not wrapping time dumps means that Integrate::ev_set()
|
// not wrapping time dumps means that Integrate::ev_set()
|
||||||
// needs to trigger all per-atom eng/virial computes
|
// needs to trigger all per-atom eng/virial computes
|
||||||
// on a timestep where any time dump will be output
|
// on a timestep where any time dump will be output
|
||||||
// could wrap time dumps as well, if timestep size did not vary
|
// could wrap time dumps as well, if timestep size did not vary
|
||||||
// if wrap when timestep size varies frequently,
|
// if wrap when timestep size varies frequently,
|
||||||
// then can do many unneeded addstep() --> inefficient
|
// then can do many unneeded addstep() --> inefficient
|
||||||
// hard to know if timestep varies, since run every could change it
|
// hard to know if timestep varies, since run every could change it
|
||||||
// can't remove an uneeded addstep from a compute, b/c don't know
|
// can't remove an uneeded addstep from a compute, b/c don't know
|
||||||
// what other command may have added it
|
// what other command may have added it
|
||||||
|
|
||||||
if (next_dump_any == ntimestep) {
|
if (next_dump_any == ntimestep) {
|
||||||
next_dump_any = next_time_dump_any = MAXBIGINT;
|
next_dump_any = next_time_dump_any = MAXBIGINT;
|
||||||
|
|
||||||
for (int idump = 0; idump < ndump; idump++) {
|
for (int idump = 0; idump < ndump; idump++) {
|
||||||
|
|
||||||
if (next_dump[idump] == ntimestep) {
|
if (next_dump[idump] == ntimestep) {
|
||||||
if (last_dump[idump] == ntimestep) continue;
|
if (last_dump[idump] == ntimestep) continue;
|
||||||
|
|
||||||
if (mode_dump[idump] == 0 &&
|
if (mode_dump[idump] == 0 &&
|
||||||
(dump[idump]->clearstep || var_dump[idump]))
|
(dump[idump]->clearstep || var_dump[idump]))
|
||||||
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;
|
||||||
calculate_next_dump(WRITE,idump,ntimestep);
|
calculate_next_dump(WRITE,idump,ntimestep);
|
||||||
|
|
||||||
if (mode_dump[idump] == 0 &&
|
if (mode_dump[idump] == 0 &&
|
||||||
(dump[idump]->clearstep || var_dump[idump]))
|
(dump[idump]->clearstep || var_dump[idump]))
|
||||||
modify->addstep_compute(next_dump[idump]);
|
modify->addstep_compute(next_dump[idump]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mode_dump[idump] && (dump[idump]->clearstep || var_dump[idump]))
|
if (mode_dump[idump] && (dump[idump]->clearstep || var_dump[idump]))
|
||||||
next_time_dump_any = MIN(next_time_dump_any,next_dump[idump]);
|
next_time_dump_any = MIN(next_time_dump_any,next_dump[idump]);
|
||||||
next_dump_any = MIN(next_dump_any,next_dump[idump]);
|
next_dump_any = MIN(next_dump_any,next_dump[idump]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// next_restart does not force output on last step of run
|
// next_restart does not force output on last step of run
|
||||||
// for toggle = 0, replace "*" with current timestep in restart filename
|
// for toggle = 0, replace "*" with current timestep in restart filename
|
||||||
// next restart variable may invoke computes so wrap with clear/add
|
// next restart variable may invoke computes so wrap with clear/add
|
||||||
|
|
||||||
if (next_restart == ntimestep) {
|
if (next_restart == ntimestep) {
|
||||||
if (next_restart_single == ntimestep) {
|
if (next_restart_single == ntimestep) {
|
||||||
|
std::string file = restart1;
|
||||||
|
std::size_t found = file.find('*');
|
||||||
|
if (found != std::string::npos)
|
||||||
|
file.replace(found,1,fmt::format("{}",update->ntimestep));
|
||||||
|
|
||||||
std::string file = restart1;
|
if (last_restart != ntimestep) restart->write(file);
|
||||||
std::size_t found = file.find('*');
|
|
||||||
if (found != std::string::npos)
|
|
||||||
file.replace(found,1,fmt::format("{}",update->ntimestep));
|
|
||||||
|
|
||||||
if (last_restart != ntimestep) restart->write(file);
|
if (restart_every_single) next_restart_single += restart_every_single;
|
||||||
|
else {
|
||||||
|
modify->clearstep_compute();
|
||||||
|
auto nextrestart = static_cast<bigint>
|
||||||
|
(input->variable->compute_equal(ivar_restart_single));
|
||||||
|
if (nextrestart <= ntimestep)
|
||||||
|
error->all(FLERR,"Restart variable returned a bad timestep");
|
||||||
|
next_restart_single = nextrestart;
|
||||||
|
modify->addstep_compute(next_restart_single);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (restart_every_single) next_restart_single += restart_every_single;
|
if (next_restart_double == ntimestep) {
|
||||||
else {
|
if (last_restart != ntimestep) {
|
||||||
modify->clearstep_compute();
|
if (restart_toggle == 0) {
|
||||||
auto nextrestart = static_cast<bigint>
|
restart->write(restart2a);
|
||||||
(input->variable->compute_equal(ivar_restart_single));
|
restart_toggle = 1;
|
||||||
if (nextrestart <= ntimestep)
|
} else {
|
||||||
error->all(FLERR,"Restart variable returned a bad timestep");
|
restart->write(restart2b);
|
||||||
next_restart_single = nextrestart;
|
restart_toggle = 0;
|
||||||
modify->addstep_compute(next_restart_single);
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (next_restart_double == ntimestep) {
|
|
||||||
if (last_restart != ntimestep) {
|
|
||||||
if (restart_toggle == 0) {
|
|
||||||
restart->write(restart2a);
|
|
||||||
restart_toggle = 1;
|
|
||||||
} else {
|
|
||||||
restart->write(restart2b);
|
|
||||||
restart_toggle = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (restart_every_double) next_restart_double += restart_every_double;
|
|
||||||
else {
|
|
||||||
modify->clearstep_compute();
|
|
||||||
auto nextrestart = static_cast<bigint>
|
|
||||||
(input->variable->compute_equal(ivar_restart_double));
|
|
||||||
if (nextrestart <= ntimestep)
|
|
||||||
error->all(FLERR,"Restart variable returned a bad timestep");
|
|
||||||
next_restart_double = nextrestart;
|
|
||||||
modify->addstep_compute(next_restart_double);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
last_restart = ntimestep;
|
|
||||||
next_restart = MIN(next_restart_single,next_restart_double);
|
|
||||||
}
|
|
||||||
|
|
||||||
// insure next_thermo forces output on last step of run
|
if (restart_every_double) next_restart_double += restart_every_double;
|
||||||
// thermo may invoke computes so wrap with clear/add
|
else {
|
||||||
|
modify->clearstep_compute();
|
||||||
|
auto nextrestart = static_cast<bigint>
|
||||||
|
(input->variable->compute_equal(ivar_restart_double));
|
||||||
|
if (nextrestart <= ntimestep)
|
||||||
|
error->all(FLERR,"Restart variable returned a bad timestep");
|
||||||
|
next_restart_double = nextrestart;
|
||||||
|
modify->addstep_compute(next_restart_double);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
last_restart = ntimestep;
|
||||||
|
next_restart = MIN(next_restart_single,next_restart_double);
|
||||||
|
}
|
||||||
|
|
||||||
if (next_thermo == ntimestep) {
|
// insure next_thermo forces output on last step of run
|
||||||
modify->clearstep_compute();
|
// thermo may invoke computes so wrap with clear/add
|
||||||
if (last_thermo != ntimestep) thermo->compute(1);
|
|
||||||
last_thermo = ntimestep;
|
|
||||||
if (var_thermo) {
|
|
||||||
next_thermo = static_cast<bigint>
|
|
||||||
(input->variable->compute_equal(ivar_thermo));
|
|
||||||
if (next_thermo <= ntimestep)
|
|
||||||
error->all(FLERR,"Thermo every variable returned a bad timestep");
|
|
||||||
} else if (thermo_every) next_thermo += thermo_every;
|
|
||||||
else next_thermo = update->laststep;
|
|
||||||
next_thermo = MIN(next_thermo,update->laststep);
|
|
||||||
modify->addstep_compute(next_thermo);
|
|
||||||
}
|
|
||||||
|
|
||||||
// next = next timestep any output will be done
|
if (next_thermo == ntimestep) {
|
||||||
|
modify->clearstep_compute();
|
||||||
|
if (last_thermo != ntimestep) thermo->compute(1);
|
||||||
|
last_thermo = ntimestep;
|
||||||
|
if (var_thermo) {
|
||||||
|
next_thermo = static_cast<bigint>
|
||||||
|
(input->variable->compute_equal(ivar_thermo));
|
||||||
|
if (next_thermo <= ntimestep)
|
||||||
|
error->all(FLERR,"Thermo every variable returned a bad timestep");
|
||||||
|
} else if (thermo_every) next_thermo += thermo_every;
|
||||||
|
else next_thermo = update->laststep;
|
||||||
|
next_thermo = MIN(next_thermo,update->laststep);
|
||||||
|
modify->addstep_compute(next_thermo);
|
||||||
|
}
|
||||||
|
|
||||||
next = MIN(next_dump_any,next_restart);
|
// next = next timestep any output will be done
|
||||||
next = MIN(next,next_thermo);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
next = MIN(next_dump_any,next_restart);
|
||||||
force a snapshot to be written for all dumps
|
next = MIN(next,next_thermo);
|
||||||
called from PRD and TAD
|
}
|
||||||
------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
void Output::write_dump(bigint ntimestep)
|
/* ----------------------------------------------------------------------
|
||||||
{
|
force a snapshot to be written for all dumps
|
||||||
for (int idump = 0; idump < ndump; idump++) {
|
called from PRD and TAD
|
||||||
dump[idump]->write();
|
------------------------------------------------------------------------- */
|
||||||
last_dump[idump] = ntimestep;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
void Output::write_dump(bigint ntimestep)
|
||||||
calculate when next dump occurs for Dump instance idump
|
{
|
||||||
operates in one of two modes, based on mode_dump flag
|
for (int idump = 0; idump < ndump; idump++) {
|
||||||
for timestep mode, set next_dump
|
dump[idump]->write();
|
||||||
for simulation time mode, set next_time_dump and next_dump
|
last_dump[idump] = ntimestep;
|
||||||
which flag depends on caller
|
}
|
||||||
SETUP = from setup() at start of run
|
}
|
||||||
WRITE = from write() during run each time a dump file is written
|
|
||||||
RESET_DT = from reset_dt() called from fix dt/reset when it changes timestep size
|
/* ----------------------------------------------------------------------
|
||||||
------------------------------------------------------------------------- */
|
calculate when next dump occurs for Dump instance idump
|
||||||
|
operates in one of two modes, based on mode_dump flag
|
||||||
|
for timestep mode, set next_dump
|
||||||
|
for simulation time mode, set next_time_dump and next_dump
|
||||||
|
which flag depends on caller
|
||||||
|
SETUP = from setup() at start of run
|
||||||
|
WRITE = from write() during run each time a dump file is written
|
||||||
|
RESET_DT = from reset_dt() called from fix dt/reset when it changes timestep size
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void Output::calculate_next_dump(int which, int idump, bigint ntimestep)
|
void Output::calculate_next_dump(int which, int idump, bigint ntimestep)
|
||||||
{
|
{
|
||||||
// dump mode is by timestep
|
// dump mode is by timestep
|
||||||
// just set next_dump
|
// just set next_dump
|
||||||
|
|
||||||
if (mode_dump[idump] == 0) {
|
if (mode_dump[idump] == 0) {
|
||||||
|
|
||||||
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];
|
||||||
else if (which == WRITE)
|
else if (which == WRITE)
|
||||||
next_dump[idump] += every_dump[idump];
|
next_dump[idump] += every_dump[idump];
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
next_dump[idump] = static_cast<bigint>
|
next_dump[idump] = static_cast<bigint>
|
||||||
(input->variable->compute_equal(ivar_dump[idump]));
|
(input->variable->compute_equal(ivar_dump[idump]));
|
||||||
if (next_dump[idump] <= ntimestep)
|
if (next_dump[idump] <= ntimestep)
|
||||||
error->all(FLERR,"Dump every variable returned a bad timestep");
|
error->all(FLERR,"Dump every variable returned a bad timestep");
|
||||||
}
|
}
|
||||||
|
|
||||||
// dump mode is by simulation time
|
// dump mode is by simulation time
|
||||||
// set next_time_dump and next_dump
|
// set next_time_dump and next_dump
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
bigint nextdump;
|
bigint nextdump;
|
||||||
double nexttime;
|
double nexttime;
|
||||||
double tcurrent = update->atime +
|
double tcurrent = update->atime +
|
||||||
(ntimestep - update->atimestep) * update->dt;
|
(ntimestep - update->atimestep) * update->dt;
|
||||||
|
|
||||||
if (every_time_dump[idump] > 0.0) {
|
if (every_time_dump[idump] > 0.0) {
|
||||||
|
|
||||||
// which = SETUP: nexttime = next multiple of every_time_dump
|
// which = SETUP: nexttime = next multiple of every_time_dump
|
||||||
// which = WRITE: increment nexttime by every_time_dump
|
// which = WRITE: increment nexttime by every_time_dump
|
||||||
// which = RESET_DT: no change to previous nexttime (only timestep has changed)
|
// which = RESET_DT: no change to previous nexttime (only timestep has changed)
|
||||||
|
|
||||||
switch (which) {
|
switch (which) {
|
||||||
case SETUP:
|
case SETUP:
|
||||||
nexttime = static_cast<bigint> (tcurrent/every_time_dump[idump]) *
|
nexttime = static_cast<bigint> (tcurrent/every_time_dump[idump]) *
|
||||||
every_time_dump[idump] + every_time_dump[idump];
|
every_time_dump[idump] + every_time_dump[idump];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WRITE:
|
case WRITE:
|
||||||
nexttime = next_time_dump[idump] + every_time_dump[idump];
|
nexttime = next_time_dump[idump] + every_time_dump[idump];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RESET_DT:
|
case RESET_DT:
|
||||||
nexttime = next_time_dump[idump];
|
nexttime = next_time_dump[idump];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
nexttime = 0;
|
nexttime = 0;
|
||||||
error->all(FLERR,"Unexpected argument to calculate_next_dump");
|
error->all(FLERR,"Unexpected argument to calculate_next_dump");
|
||||||
}
|
}
|
||||||
|
|
||||||
nextdump = ntimestep +
|
nextdump = ntimestep +
|
||||||
static_cast<bigint> ((nexttime - tcurrent - EPSDT*update->dt) / update->dt) + 1;
|
static_cast<bigint> ((nexttime - tcurrent - EPSDT*update->dt) / update->dt) + 1;
|
||||||
|
|
||||||
// if delta is too small to reach next timestep, use multiple of delta
|
// if delta is too small to reach next timestep, use multiple of delta
|
||||||
|
|
||||||
if (nextdump == ntimestep) {
|
if (nextdump == ntimestep) {
|
||||||
double tnext = update->atime +
|
double tnext = update->atime +
|
||||||
(ntimestep+1 - update->atimestep) * update->dt;
|
(ntimestep+1 - update->atimestep) * update->dt;
|
||||||
int multiple = static_cast<int>
|
int multiple = static_cast<int>
|
||||||
((tnext - nexttime) / every_time_dump[idump]);
|
((tnext - nexttime) / every_time_dump[idump]);
|
||||||
nexttime = nexttime + (multiple+1)*every_time_dump[idump];
|
nexttime = nexttime + (multiple+1)*every_time_dump[idump];
|
||||||
nextdump = ntimestep +
|
nextdump = ntimestep +
|
||||||
static_cast<bigint> ((nexttime - tcurrent - EPSDT*update->dt) / update->dt) + 1;
|
static_cast<bigint> ((nexttime - tcurrent - EPSDT*update->dt) / update->dt) + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// do not re-evaulate variable for which = RESET_DT, leave nexttime as-is
|
// do not re-evaulate variable for which = RESET_DT, leave nexttime as-is
|
||||||
// unless next_time_dump < 0.0, which means variable never yet evaluated
|
// unless next_time_dump < 0.0, which means variable never yet evaluated
|
||||||
|
|
||||||
if (which < RESET_DT || next_time_dump[idump] < 0.0) {
|
if (which < RESET_DT || next_time_dump[idump] < 0.0) {
|
||||||
nexttime = input->variable->compute_equal(ivar_dump[idump]);
|
nexttime = input->variable->compute_equal(ivar_dump[idump]);
|
||||||
} else
|
} else
|
||||||
nexttime = next_time_dump[idump];
|
nexttime = next_time_dump[idump];
|
||||||
|
|
||||||
if (nexttime <= tcurrent)
|
if (nexttime <= tcurrent)
|
||||||
error->all(FLERR,"Dump every/time variable returned a bad time");
|
error->all(FLERR,"Dump every/time variable returned a bad time");
|
||||||
|
|
||||||
nextdump = ntimestep +
|
nextdump = ntimestep +
|
||||||
static_cast<bigint> ((nexttime - tcurrent - EPSDT*update->dt) / update->dt) + 1;
|
static_cast<bigint> ((nexttime - tcurrent - EPSDT*update->dt) / update->dt) + 1;
|
||||||
if (nextdump <= ntimestep)
|
if (nextdump <= ntimestep)
|
||||||
error->all(FLERR,"Dump every/time variable too small for next timestep");
|
error->all(FLERR,"Dump every/time variable too small for next timestep");
|
||||||
}
|
}
|
||||||
|
|
||||||
next_time_dump[idump] = nexttime;
|
next_time_dump[idump] = nexttime;
|
||||||
next_dump[idump] = nextdump;
|
next_dump[idump] = nextdump;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
@ -589,112 +589,112 @@ int Output::check_time_dumps(bigint ntimestep)
|
|||||||
return nowflag;
|
return nowflag;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
force restart file(s) to be written
|
force restart file(s) to be written
|
||||||
called from PRD and TAD
|
called from PRD and TAD
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void Output::write_restart(bigint ntimestep)
|
void Output::write_restart(bigint ntimestep)
|
||||||
{
|
{
|
||||||
if (restart_flag_single) {
|
if (restart_flag_single) {
|
||||||
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)
|
||||||
file.replace(found,1,fmt::format("{}",update->ntimestep));
|
file.replace(found,1,fmt::format("{}",update->ntimestep));
|
||||||
restart->write(file);
|
restart->write(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (restart_flag_double) {
|
if (restart_flag_double) {
|
||||||
if (restart_toggle == 0) {
|
if (restart_toggle == 0) {
|
||||||
restart->write(restart2a);
|
restart->write(restart2a);
|
||||||
restart_toggle = 1;
|
restart_toggle = 1;
|
||||||
} else {
|
} else {
|
||||||
restart->write(restart2b);
|
restart->write(restart2b);
|
||||||
restart_toggle = 0;
|
restart_toggle = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
last_restart = ntimestep;
|
last_restart = ntimestep;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
timestep is being changed, called by update->reset_timestep()
|
timestep is being changed, called by update->reset_timestep()
|
||||||
for dumps, require that no dump is "active"
|
for dumps, require that no dump is "active"
|
||||||
meaning that a snapshot has already been output
|
meaning that a snapshot has already been output
|
||||||
reset next output values for restart and thermo
|
reset next output values for restart and thermo
|
||||||
reset to smallest value >= new timestep
|
reset to smallest value >= new timestep
|
||||||
if next timestep set by variable evaluation,
|
if next timestep set by variable evaluation,
|
||||||
eval for ntimestep-1, so current ntimestep can be returned if needed
|
eval for ntimestep-1, so current ntimestep can be returned if needed
|
||||||
no guarantee that variable can be evaluated for ntimestep-1
|
no guarantee that variable can be evaluated for ntimestep-1
|
||||||
e.g. if it depends on computes, but live with that rare case for now
|
e.g. if it depends on computes, but live with that rare case for now
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void Output::reset_timestep(bigint ntimestep)
|
void Output::reset_timestep(bigint ntimestep)
|
||||||
{
|
{
|
||||||
next_dump_any = MAXBIGINT;
|
next_dump_any = MAXBIGINT;
|
||||||
for (int idump = 0; idump < ndump; idump++)
|
for (int idump = 0; idump < ndump; idump++)
|
||||||
if ((last_dump[idump] >= 0) && !update->whichflag && !dump[idump]->multifile)
|
if ((last_dump[idump] >= 0) && !update->whichflag && !dump[idump]->multifile)
|
||||||
error->all(FLERR, "Cannot reset timestep with active dump - must undump first");
|
error->all(FLERR, "Cannot reset timestep with active dump - must undump first");
|
||||||
|
|
||||||
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;
|
||||||
if (next_restart_single < ntimestep)
|
if (next_restart_single < ntimestep)
|
||||||
next_restart_single += restart_every_single;
|
next_restart_single += restart_every_single;
|
||||||
} else {
|
} else {
|
||||||
modify->clearstep_compute();
|
modify->clearstep_compute();
|
||||||
update->ntimestep--;
|
update->ntimestep--;
|
||||||
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)
|
||||||
error->all(FLERR,"Restart variable returned a bad timestep");
|
error->all(FLERR,"Restart variable returned a bad timestep");
|
||||||
update->ntimestep++;
|
update->ntimestep++;
|
||||||
next_restart_single = nextrestart;
|
next_restart_single = nextrestart;
|
||||||
modify->addstep_compute(next_restart_single);
|
modify->addstep_compute(next_restart_single);
|
||||||
}
|
}
|
||||||
} else next_restart_single = update->laststep + 1;
|
} else next_restart_single = update->laststep + 1;
|
||||||
|
|
||||||
if (restart_flag_double) {
|
if (restart_flag_double) {
|
||||||
if (restart_every_double) {
|
if (restart_every_double) {
|
||||||
next_restart_double =
|
next_restart_double =
|
||||||
(ntimestep/restart_every_double)*restart_every_double;
|
(ntimestep/restart_every_double)*restart_every_double;
|
||||||
if (next_restart_double < ntimestep)
|
if (next_restart_double < ntimestep)
|
||||||
next_restart_double += restart_every_double;
|
next_restart_double += restart_every_double;
|
||||||
} else {
|
} else {
|
||||||
modify->clearstep_compute();
|
modify->clearstep_compute();
|
||||||
update->ntimestep--;
|
update->ntimestep--;
|
||||||
auto nextrestart = static_cast<bigint>
|
auto nextrestart = static_cast<bigint>
|
||||||
(input->variable->compute_equal(ivar_restart_double));
|
(input->variable->compute_equal(ivar_restart_double));
|
||||||
if (nextrestart < ntimestep)
|
if (nextrestart < ntimestep)
|
||||||
error->all(FLERR,"Restart variable returned a bad timestep");
|
error->all(FLERR,"Restart variable returned a bad timestep");
|
||||||
update->ntimestep++;
|
update->ntimestep++;
|
||||||
next_restart_double = nextrestart;
|
next_restart_double = nextrestart;
|
||||||
modify->addstep_compute(next_restart_double);
|
modify->addstep_compute(next_restart_double);
|
||||||
}
|
}
|
||||||
} else next_restart_double = update->laststep + 1;
|
} else next_restart_double = update->laststep + 1;
|
||||||
|
|
||||||
next_restart = MIN(next_restart_single,next_restart_double);
|
next_restart = MIN(next_restart_single,next_restart_double);
|
||||||
|
|
||||||
if (var_thermo) {
|
if (var_thermo) {
|
||||||
modify->clearstep_compute();
|
modify->clearstep_compute();
|
||||||
update->ntimestep--;
|
update->ntimestep--;
|
||||||
next_thermo = static_cast<bigint>
|
next_thermo = static_cast<bigint>
|
||||||
(input->variable->compute_equal(ivar_thermo));
|
(input->variable->compute_equal(ivar_thermo));
|
||||||
if (next_thermo < ntimestep)
|
if (next_thermo < ntimestep)
|
||||||
error->all(FLERR,"Thermo_modify every variable returned a bad timestep");
|
error->all(FLERR,"Thermo_modify every variable returned a bad timestep");
|
||||||
update->ntimestep++;
|
update->ntimestep++;
|
||||||
next_thermo = MIN(next_thermo,update->laststep);
|
next_thermo = MIN(next_thermo,update->laststep);
|
||||||
modify->addstep_compute(next_thermo);
|
modify->addstep_compute(next_thermo);
|
||||||
} else if (thermo_every) {
|
} else if (thermo_every) {
|
||||||
next_thermo = (ntimestep/thermo_every)*thermo_every;
|
next_thermo = (ntimestep/thermo_every)*thermo_every;
|
||||||
if (next_thermo < ntimestep) next_thermo += thermo_every;
|
if (next_thermo < ntimestep) next_thermo += thermo_every;
|
||||||
next_thermo = MIN(next_thermo,update->laststep);
|
next_thermo = MIN(next_thermo,update->laststep);
|
||||||
} else next_thermo = update->laststep;
|
} else next_thermo = update->laststep;
|
||||||
|
|
||||||
next = MIN(next_dump_any,next_restart);
|
next = MIN(next_dump_any,next_restart);
|
||||||
next = MIN(next,next_thermo);
|
next = MIN(next,next_thermo);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
timestep size is being changed
|
timestep size is being changed
|
||||||
@ -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;
|
||||||
|
|||||||
1660
src/read_data.cpp
1660
src/read_data.cpp
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user