Merge branch 'lammps:develop' into fortran-tinkering
This commit is contained in:
@ -6,10 +6,13 @@ else()
|
||||
endif()
|
||||
option(DOWNLOAD_MDI "Download and compile the MDI library instead of using an already installed one" ${DOWNLOAD_MDI_DEFAULT})
|
||||
|
||||
|
||||
|
||||
|
||||
if(DOWNLOAD_MDI)
|
||||
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_MD5 "f9505fccd4c79301a619f6452dad4ad9" CACHE STRING "MD5 checksum 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 "1c203b7fd462d9934834f643f09f3c06" CACHE STRING "MD5 checksum for MDI tarball")
|
||||
mark_as_advanced(MDI_URL)
|
||||
mark_as_advanced(MDI_MD5)
|
||||
enable_language(C)
|
||||
|
||||
@ -61,6 +61,7 @@ An alphabetic list of general LAMMPS commands.
|
||||
* :doc:`kspace_modify <kspace_modify>`
|
||||
* :doc:`kspace_style <kspace_style>`
|
||||
* :doc:`label <label>`
|
||||
* :doc:`labelmap <labelmap>`
|
||||
* :doc:`lattice <lattice>`
|
||||
* :doc:`log <log>`
|
||||
* :doc:`mass <mass>`
|
||||
|
||||
@ -175,6 +175,12 @@ and parsing files or arguments.
|
||||
.. doxygenfunction:: is_double
|
||||
:project: progguide
|
||||
|
||||
.. doxygenfunction:: is_id
|
||||
:project: progguide
|
||||
|
||||
.. doxygenfunction:: is_type
|
||||
:project: progguide
|
||||
|
||||
Potential file functions
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
@ -205,6 +211,9 @@ Argument processing
|
||||
.. doxygenfunction:: expand_args
|
||||
:project: progguide
|
||||
|
||||
.. doxygenfunction:: expand_type
|
||||
:project: progguide
|
||||
|
||||
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
|
||||
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*
|
||||
This function is called through the library interface. This
|
||||
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*
|
||||
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*
|
||||
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*
|
||||
The three specified lattice orientation vectors must be mutually
|
||||
orthogonal.
|
||||
@ -5863,6 +5877,12 @@ Doc page with :doc:`WARNING messages <Errors_warnings>`
|
||||
*Must not have multiple fixes change box parameter ...*
|
||||
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*
|
||||
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
|
||||
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*
|
||||
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.
|
||||
@ -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
|
||||
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*
|
||||
Fix poems cannot (yet) work with coupled bodies whose joints connect
|
||||
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*
|
||||
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*
|
||||
There was a problem initializing an accelerator for the gpu package
|
||||
|
||||
|
||||
@ -34,6 +34,7 @@ Settings howto
|
||||
:maxdepth: 1
|
||||
|
||||
Howto_2d
|
||||
Howto_type_labels
|
||||
Howto_triclinic
|
||||
Howto_thermostat
|
||||
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
|
||||
|
||||
* 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
|
||||
|
||||
Examples
|
||||
@ -22,6 +22,9 @@ Examples
|
||||
angle_coeff * 5.0
|
||||
angle_coeff 2*10 5.0
|
||||
|
||||
labelmap angle 1 hydroxyl
|
||||
angle_coeff hydroxyl 300.0 107.0
|
||||
|
||||
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
|
||||
: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
|
||||
be used, as in the first example above. Or a wild-card asterisk can be
|
||||
used to set the coefficients for multiple angle types. This takes the
|
||||
form "\*" or "\*n" or "n\*" or "m\*n". If N = the number of angle 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 middle asterisk
|
||||
means all types from m to n (inclusive).
|
||||
:math:`N` can be specified in one of two ways. An explicit numeric
|
||||
value can be used, as in the first example above. Or :math:`N` can be a
|
||||
type label, which is an 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.
|
||||
|
||||
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:
|
||||
For numeric values only, a wild-card asterisk can be used to set the
|
||||
coefficients for multiple angle types. This takes the form "\*" or
|
||||
"\*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
|
||||
|
||||
@ -49,11 +58,11 @@ for all angle types, then overwrite the coeffs for just angle type 2:
|
||||
angle_coeff 2 50.0 107.0
|
||||
|
||||
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
|
||||
script, except that wild-card asterisks should not be used since
|
||||
coefficients for all N types must be listed in the file. For example,
|
||||
under the "Angle Coeffs" section of a data file, the line that
|
||||
corresponds to the first example above would be listed as
|
||||
same format as the arguments of the :doc:`angle_coeff <angle_coeff>`
|
||||
command in an input script, except that wild-card asterisks should not
|
||||
be used since coefficients for all :math:`N` types must be listed in the
|
||||
file. For example, under the "Angle Coeffs" section of a data file, the
|
||||
line that corresponds to the first example above would be listed as
|
||||
|
||||
.. 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
|
||||
rule, in that an additional argument is used in the input script to
|
||||
allow specification of the cross-term coefficients. See its
|
||||
doc page for details.
|
||||
allow specification of the cross-term coefficients. See its doc page
|
||||
for details.
|
||||
|
||||
----------
|
||||
|
||||
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
|
||||
compact form on the :ref:`Commands angle <angle>` doc
|
||||
page.
|
||||
compact form on the :ref:`Commands angle <angle>` doc page.
|
||||
|
||||
On either of those pages, click on the style to display the formula it
|
||||
computes and its coefficients as specified by the associated
|
||||
|
||||
@ -10,7 +10,7 @@ Syntax
|
||||
|
||||
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
|
||||
|
||||
Examples
|
||||
@ -21,7 +21,10 @@ Examples
|
||||
bond_coeff 5 80.0 1.2
|
||||
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 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
|
||||
"""""""""""
|
||||
@ -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
|
||||
: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
|
||||
be used, as in the first example above. Or 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 N = the number of bond types,
|
||||
then an asterisk with no numeric values means all types from 1 to N. A
|
||||
:math:`N` can be specified in one of several ways. An explicit numeric
|
||||
value can be used, as in the first example above. Or :math:`N` can be a
|
||||
type label, which is an 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.
|
||||
|
||||
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
|
||||
asterisk means all types from n to N (inclusive). A middle asterisk
|
||||
means all types from m to n (inclusive).
|
||||
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 bond_coeff command can override a previous setting
|
||||
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
|
||||
same format as the arguments of the bond_coeff command in an 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,
|
||||
under the "Bond Coeffs" section of a data file, the line that
|
||||
coefficients for all :math:`N` types must be listed in the file. For
|
||||
example, under the "Bond Coeffs" section of a data file, the line that
|
||||
corresponds to the first example above would be listed as
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
@ -56,6 +56,7 @@ Commands
|
||||
kspace_modify
|
||||
kspace_style
|
||||
label
|
||||
labelmap
|
||||
lattice
|
||||
log
|
||||
mass
|
||||
|
||||
@ -10,7 +10,7 @@ Syntax
|
||||
|
||||
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
|
||||
|
||||
Examples
|
||||
@ -22,26 +22,35 @@ Examples
|
||||
dihedral_coeff * 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
|
||||
"""""""""""
|
||||
|
||||
Specify the dihedral force field coefficients for one or more dihedral types.
|
||||
The number and meaning of the coefficients depends on the dihedral style.
|
||||
Dihedral coefficients can also be set in the data file read by the
|
||||
:doc:`read_data <read_data>` command or in a restart file.
|
||||
Specify the dihedral force field coefficients for one or more dihedral
|
||||
types. The number and meaning of the coefficients depends on the
|
||||
dihedral style. Dihedral coefficients can also be set in the data 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
|
||||
be used, as in the first example above. Or a wild-card asterisk can be
|
||||
used to set the coefficients for multiple dihedral types. This takes the
|
||||
form "\*" or "\*n" or "m\*" 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 m to N (inclusive). A middle asterisk
|
||||
means all types from m to n (inclusive).
|
||||
:math:`N` can be specified in one of two ways. An explicit numeric
|
||||
value can be used, as in the first example above. Or :math:`N` can be
|
||||
an alphanumeric type label, which is a string defined by the
|
||||
:doc:`labelmap <labelmap>` command or in a corresponding section of a
|
||||
data file read 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 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
|
||||
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
|
||||
|
||||
|
||||
@ -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
|
||||
specified for each of the ntypes LAMMPS atom types. Ntypes is
|
||||
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
|
||||
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
|
||||
so that atom type values are consistent in both codes, then the
|
||||
*elements* keyword is not needed. Otherwise the keyword can be used
|
||||
to insure the two codes are consistent in their definition of atomic
|
||||
species.
|
||||
read by the read_data command.
|
||||
|
||||
If this keyword is specified, then this fix will send the MDI
|
||||
">ELEMENTS" command to the engine, to insure the two codes are
|
||||
consistent in their definition of atomic species. If this keyword is
|
||||
not specified, then this fix will send the MDI >TYPES command to the
|
||||
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
|
||||
|
||||
* 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
|
||||
|
||||
Examples
|
||||
@ -22,27 +22,34 @@ Examples
|
||||
improper_coeff * 80.2 -1 2
|
||||
improper_coeff *4 80.2 -1 2
|
||||
|
||||
labelmap improper 1 benzene
|
||||
improper_coeff benzene 300.0 0.0
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
Specify the improper force field coefficients for one or more improper
|
||||
types. The number and meaning of the coefficients depends on the
|
||||
improper style. Improper coefficients can also be set in the data
|
||||
file read by the :doc:`read_data <read_data>` command or in a restart
|
||||
file.
|
||||
improper style. Improper coefficients can also be set in the data 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
|
||||
be used, as in the first example above. Or a wild-card asterisk can be
|
||||
used to set the coefficients for multiple improper types. This takes
|
||||
the form "\*" or "\*n" or "n\*" or "m\*n". If N = the number of improper
|
||||
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 middle
|
||||
asterisk means all types from m to n (inclusive).
|
||||
:math:`N` can be specified in one of two ways. An explicit numeric
|
||||
value can be used, as in the first example above. Or :math:`N` can be a
|
||||
type label, which is an 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.
|
||||
|
||||
For numeric values only, a wild-card asterisk can be used to set the
|
||||
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
|
||||
setting for the same improper type. For example, these commands set
|
||||
the coeffs for all improper types, then overwrite the coeffs for just
|
||||
setting for the same improper type. For example, these commands set the
|
||||
coeffs for all improper types, then overwrite the coeffs for just
|
||||
improper type 2:
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
@ -53,9 +60,9 @@ improper type 2:
|
||||
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
|
||||
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,
|
||||
under the "Improper Coeffs" section of a data file, the line that
|
||||
corresponds to the first example above would be listed as
|
||||
coefficients for all :math:`N` types must be listed in the file. For
|
||||
example, under the "Improper Coeffs" section of a data file, the line
|
||||
that corresponds to the first example above would be listed as
|
||||
|
||||
.. 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
|
||||
|
||||
* I = atom type (see asterisk form below)
|
||||
* I = atom type (see asterisk form below), or type label
|
||||
* value = mass
|
||||
|
||||
Examples
|
||||
@ -22,6 +22,9 @@ Examples
|
||||
mass * 62.5
|
||||
mass 2* 62.5
|
||||
|
||||
labelmap atom 1 C
|
||||
mass C 12.01
|
||||
|
||||
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
|
||||
what mass units to use.
|
||||
|
||||
The I index can be specified in one of two ways. An explicit numeric
|
||||
value can be used, as in the first example above. 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". 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
|
||||
The I index can be specified in one of several ways. An explicit
|
||||
numeric value can be used, as in the first example above. Or I can be
|
||||
a type label, which is an 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. 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 middle asterisk means all types from m to n
|
||||
(inclusive).
|
||||
|
||||
@ -14,7 +14,7 @@ Syntax
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
*engine* args = zero or more keyword arg pairs
|
||||
*engine* args = zero or more keyword/args pairs
|
||||
keywords = *elements*
|
||||
*elements* args = N_1 N_2 ... N_ntypes
|
||||
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*
|
||||
*mdi* value = args passed to MDI for driver to operate with plugins (required)
|
||||
*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)
|
||||
*connect* 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
|
||||
they expect.
|
||||
|
||||
The *infile* keyword is also required. It is the name of an input
|
||||
script which the engine will open and process. MDI will pass it as a
|
||||
The *infile* keyword is optional. It sets the name of an input script
|
||||
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
|
||||
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
|
||||
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::
|
||||
|
||||
When the single *command* is complete, LAMMPS will send an MDI
|
||||
EXIT command to the plugin engine and the plugin will be removed.
|
||||
The "mdi plugin" command will then exit and the next command
|
||||
(if any) in the LAMMPS input script will be processed. A subsequent
|
||||
"mdi plugin" command could then load the same library plugin or
|
||||
a different one if desired.
|
||||
When the *command* is complete, LAMMPS will send an MDI EXIT
|
||||
command to the plugin engine and the plugin will be removed. The
|
||||
"mdi plugin" command will then exit and the next command (if any)
|
||||
in the LAMMPS input script will be processed. A subsequent "mdi
|
||||
plugin" command could then load the same or a different MDI
|
||||
plugin if desired.
|
||||
|
||||
----------
|
||||
|
||||
|
||||
@ -70,8 +70,9 @@ and underscores.
|
||||
A single template can contain multiple molecules, listed one per file.
|
||||
Some of the commands listed above currently use only the first
|
||||
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
|
||||
to define a system with more than one templated molecule.
|
||||
contains multiple molecules. The :doc:`atom_style template
|
||||
<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
|
||||
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
|
||||
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
|
||||
useful for modeling polydisperse granular rigid bodies. The scale
|
||||
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>`
|
||||
commands, and is as follows.
|
||||
|
||||
A molecule file has a header and a body. The header appears first.
|
||||
The first line of the header is always skipped; it typically contains
|
||||
a description of the file. Then lines are read one at a time. Lines
|
||||
can have a trailing comment starting with '#' that is ignored. If the
|
||||
line is blank (only white-space after comment is deleted), it is
|
||||
A molecule file has a header and a body. The header appears first. The
|
||||
first line of the header and thus of the molecule file is *always* skipped;
|
||||
it typically contains a description of the file or a comment from the software
|
||||
that created the file.
|
||||
|
||||
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
|
||||
value(s) is read from the line. If it does not contain a header
|
||||
keyword, the line begins the body of the file.
|
||||
value(s) is/are read from the line. A line that is *not* blank and does
|
||||
*not* contains a header keyword begins the body of the file.
|
||||
|
||||
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
|
||||
@ -173,31 +184,43 @@ These are the allowed section keywords for the body of the file.
|
||||
* *Special Bond Counts, Special Bonds* = special neighbor 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
|
||||
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
|
||||
details below). This is optional since if these sections are not
|
||||
included, LAMMPS will auto-generate this information. Note that
|
||||
LAMMPS uses this info to properly exclude or weight bonded pairwise
|
||||
interactions between bonded atoms. See the
|
||||
:doc:`special_bonds <special_bonds>` command for more details. One
|
||||
reason to list the special bond info explicitly is for the
|
||||
:doc:`thermalized Drude oscillator model <Howto_drude>` which treats the
|
||||
bonds between nuclear cores and Drude electrons in a different manner.
|
||||
interactions between bonded atoms. See the :doc:`special_bonds
|
||||
<special_bonds>` command for more details. One reason to list the
|
||||
special bond info explicitly is for the :doc:`thermalized Drude
|
||||
oscillator model <Howto_drude>` which treats the bonds between nuclear
|
||||
cores and Drude electrons in a different manner.
|
||||
|
||||
.. note::
|
||||
|
||||
Whether a section is required depends on how the molecule
|
||||
template is used by other LAMMPS commands. For example, to add a
|
||||
molecule via the :doc:`fix deposit <fix_deposit>` command, the Coords
|
||||
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
|
||||
Whether a section is required depends on how the molecule template
|
||||
is used by other LAMMPS commands. For example, to add a molecule
|
||||
via the :doc:`fix deposit <fix_deposit>` command, the Coords 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
|
||||
required, since the molecule will be treated as a rigid body. Some
|
||||
sections are optional. For example, the :doc:`fix pour <fix_pour>`
|
||||
command can be used to add "molecules" which are clusters of
|
||||
finite-size granular particles. If the Diameters section is not
|
||||
specified, each particle in the molecule will have a default diameter
|
||||
of 1.0. See the doc pages for LAMMPS commands that use molecule
|
||||
templates for more details.
|
||||
specified, each particle in the molecule will have a default
|
||||
diameter of 1.0. See the doc pages for LAMMPS commands that use
|
||||
molecule templates for more details.
|
||||
|
||||
Each section is listed below in alphabetic order. The format of each
|
||||
section is described including the number of lines it must contain and
|
||||
@ -222,7 +245,7 @@ order.
|
||||
|
||||
* one line per atom
|
||||
* 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
|
||||
* 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
|
||||
|
||||
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
|
||||
* 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
|
||||
|
||||
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
|
||||
* 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
|
||||
|
||||
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
|
||||
* 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
|
||||
|
||||
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
|
||||
two Shake sections must also appear in the file.
|
||||
|
||||
The a,b,c values are bond types (from 1 to Nbondtypes) for all bonds
|
||||
in the SHAKE cluster that this atom belongs to. 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.
|
||||
The a,b,c values are bond types for all bonds in the SHAKE cluster that
|
||||
this atom belongs to. Bond types may be either numbers (from 1 to Nbondtypes)
|
||||
or bond type labels as defined by the :doc:`labelmap <labelmap>` command
|
||||
or a "Bond Type Labels" section of a data file.
|
||||
|
||||
|
||||
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
|
||||
(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
|
||||
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
|
||||
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 second non-central atom (value c in the Shake Atoms section), and c
|
||||
= 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
|
||||
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
|
||||
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
|
||||
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
|
||||
atom (value d in the Shake Atoms section).
|
||||
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 atom (value d in the Shake Atoms section).
|
||||
|
||||
See the :doc:`fix shake <fix_shake>` page for a further description
|
||||
of SHAKE clusters.
|
||||
|
||||
@ -10,7 +10,7 @@ Syntax
|
||||
|
||||
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
|
||||
|
||||
Examples
|
||||
@ -26,6 +26,10 @@ Examples
|
||||
pair_coeff * 3 morse.table ENTRY1
|
||||
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
|
||||
"""""""""""
|
||||
|
||||
@ -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
|
||||
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
|
||||
can be used for each, as in the first example above. I <= J is
|
||||
required. LAMMPS sets the coefficients for the symmetric J,I
|
||||
interaction to the same values.
|
||||
I and J can be specified in one of several ways. Explicit numeric
|
||||
values can be used for each, as in the first example above. Or, one
|
||||
or both of the types in the I,J pair can be a type label, which is an
|
||||
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
|
||||
I,J arguments to set the coefficients for multiple pairs of atom
|
||||
types. This takes the form "\*" or "\*n" or "n\*" or "m\*n". 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 middle asterisk means all types from m to n
|
||||
(inclusive). Note that only type pairs with I <= J are considered; if
|
||||
asterisks imply type pairs where J < I, they are ignored.
|
||||
For numeric values only, a wildcard asterisk can be used in place of or
|
||||
in conjunction with the I,J arguments to set the coefficients for
|
||||
multiple pairs of atom types. This takes the form "\*" or "\*n" or
|
||||
"n\*" or "m\*n". If :math:`N` is the number of atom 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). For the asterisk
|
||||
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
|
||||
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
|
||||
the "Pair Coeffs" section of a data file, only a single type I is
|
||||
specified, which sets the coefficients for type I interacting with
|
||||
type I. This is because the section has exactly N lines, where N =
|
||||
the number of atom types. For this reason, the wild-card asterisk
|
||||
should also not be used as part of the I argument. Thus in a data
|
||||
file, the line corresponding to the first example above would be listed
|
||||
as
|
||||
type I. This is because the section has exactly :math:`N` lines, where
|
||||
:math:`N` is the number of atom types. For this reason, the wild-card
|
||||
asterisk should also not be used as part of the I argument. Thus in a
|
||||
data file, the line corresponding to the first example above would be
|
||||
listed as
|
||||
|
||||
.. 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
|
||||
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)
|
||||
displacement applied to the coordinates of each atom. Sz must be 0.0
|
||||
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.
|
||||
|
||||
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
|
||||
description of the file. Then lines are read one at a time. Lines
|
||||
can have a trailing comment starting with '#' that is ignored. If the
|
||||
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.
|
||||
first line of the header and thus of the data file is *always* skipped;
|
||||
it typically contains a description of the file or a comment from the
|
||||
software that created the file.
|
||||
|
||||
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. The next line is
|
||||
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.
|
||||
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 a 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
|
||||
value(s) is/are read from the line. A line that is *not* blank and does
|
||||
*not* contain a header keyword begins the body of the file.
|
||||
|
||||
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
|
||||
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
|
||||
* *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
|
||||
* *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.
|
||||
|
||||
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:
|
||||
|
||||
.. 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:
|
||||
|
||||
* one line per improper type
|
||||
@ -568,7 +601,7 @@ input script.
|
||||
.. parsed-literal::
|
||||
|
||||
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
|
||||
|
||||
example:
|
||||
@ -580,8 +613,15 @@ example:
|
||||
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.
|
||||
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
|
||||
integers (1, not 1.0).
|
||||
after the *Atoms* section.
|
||||
|
||||
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:
|
||||
|
||||
* one line per atom
|
||||
@ -670,7 +730,7 @@ of analysis.
|
||||
The per-atom values have these meanings and units, listed alphabetically:
|
||||
|
||||
* 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
|
||||
* bond_nt = bond NT 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
|
||||
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
|
||||
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
|
||||
@ -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:
|
||||
|
||||
* one line per angle type
|
||||
@ -976,7 +1063,7 @@ script.
|
||||
.. parsed-literal::
|
||||
|
||||
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
|
||||
|
||||
* example:
|
||||
@ -985,8 +1072,15 @@ script.
|
||||
|
||||
12 3 17 29
|
||||
|
||||
The *Bonds* section must appear after the *Atoms* section. All values
|
||||
in this section must be integers (1, not 1.0).
|
||||
The *Bonds* section must appear after the *Atoms* section.
|
||||
|
||||
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:
|
||||
|
||||
* one line per dihedral
|
||||
@ -1022,7 +1136,7 @@ Coefficients can also be set via the
|
||||
.. parsed-literal::
|
||||
|
||||
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
|
||||
|
||||
* example:
|
||||
@ -1032,8 +1146,15 @@ Coefficients can also be set via the
|
||||
12 4 17 29 30 21
|
||||
|
||||
The 4 atoms are ordered linearly within the dihedral. The *Dihedrals*
|
||||
section must appear after the *Atoms* section. All values in this
|
||||
section must be integers (1, not 1.0).
|
||||
section must appear after the *Atoms* section.
|
||||
|
||||
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:
|
||||
|
||||
* one line per improper
|
||||
@ -1123,7 +1264,7 @@ Coefficients can also be set via the
|
||||
.. parsed-literal::
|
||||
|
||||
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
|
||||
|
||||
* example:
|
||||
@ -1133,11 +1274,19 @@ Coefficients can also be set via the
|
||||
12 3 17 29 13 100
|
||||
|
||||
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
|
||||
for details.
|
||||
angle used in the formula for each :doc:`improper style
|
||||
<improper_style>`. See the doc pages for individual styles for
|
||||
details.
|
||||
|
||||
The *Impropers* section must appear after the *Atoms* section. All
|
||||
values in this section must be integers (1, not 1.0).
|
||||
The *Impropers* section must appear after the *Atoms* section.
|
||||
|
||||
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::
|
||||
|
||||
ID = atom type (1-N)
|
||||
ID = atom type (1-N or atom type label)
|
||||
mass = mass value
|
||||
|
||||
* 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 -
|
||||
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:
|
||||
|
||||
@ -12,7 +12,7 @@ Syntax
|
||||
restart N root 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)
|
||||
* root = filename to which timestep # is appended
|
||||
* 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
|
||||
simulation every so many timesteps, in either or both of two modes, as
|
||||
a run proceeds. A value of 0 means do not write out any restart
|
||||
files. The two modes are as follows. If one filename is specified, a
|
||||
series of filenames will be created which include the timestep in the
|
||||
filename. If two filenames are specified, only 2 restart files will
|
||||
be created, with those names. LAMMPS will toggle between the 2 names
|
||||
as it writes successive restart files.
|
||||
simulation on timesteps which are a multiple of N. A value of N = 0
|
||||
means do not write out any restart files, which is the default.
|
||||
Restart files are written in one (or both) of two modes as a run
|
||||
proceeds. If one filename is specified, a series of filenames will be
|
||||
created which include the timestep in the filename. If two filenames
|
||||
are specified, only 2 restart files will be created, with those names.
|
||||
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
|
||||
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),
|
||||
angmom(group,dim,region), torque(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)
|
||||
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
|
||||
@ -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) |
|
||||
+--------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
| 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] |
|
||||
+--------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||
@ -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()
|
||||
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
|
||||
|
||||
@ -12,12 +12,14 @@ Syntax
|
||||
|
||||
* file = name of data file to write out
|
||||
* zero or more keyword/value pairs may be appended
|
||||
* keyword = *pair* or *nocoeff*
|
||||
* keyword = *pair* or *nocoeff* or *nofix* or *nolabelmap*
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
*nocoeff* = do not write out force field info
|
||||
*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*
|
||||
*ii* = write one line of pair coefficient info per atom type
|
||||
*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
|
||||
be written to the data file. This can be very helpful, if one wants
|
||||
to make significant changes to the force field or if the parameters
|
||||
are read in separately anyway, e.g. from an include file.
|
||||
Use of the *nocoeff* keyword means no force field parameters are
|
||||
written to the data file. This can be helpful, for example, if you
|
||||
want to make significant changes to the force field or if the force
|
||||
field parameters are read in separately, e.g. from an include file.
|
||||
|
||||
The *nofix* keyword requests that no extra sections read by fixes
|
||||
should be written to the data file (see the *fix* option of the
|
||||
:doc:`read_data <read_data>` command for details). For example, this
|
||||
option excludes sections for user-created per-atom properties
|
||||
from :doc:`fix property/atom <fix_property_atom>`.
|
||||
Use of the *nofix* keyword means no extra sections read by fixes are
|
||||
written to the data file (see the *fix* option of the :doc:`read_data
|
||||
<read_data>` command for details). For example, this option excludes
|
||||
sections for user-created per-atom properties from :doc:`fix
|
||||
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
|
||||
coefficient information is written into the data file. If the value
|
||||
@ -144,4 +169,4 @@ Related commands
|
||||
Default
|
||||
"""""""
|
||||
|
||||
The option defaults are pair = ii.
|
||||
The option defaults are pair = ii and types_style = numeric.
|
||||
|
||||
@ -61,6 +61,7 @@ ajs
|
||||
akohlmey
|
||||
Aktulga
|
||||
al
|
||||
alabel
|
||||
alain
|
||||
Alain
|
||||
Alamos
|
||||
@ -287,6 +288,7 @@ bitrates
|
||||
Bitzek
|
||||
Bjerrum
|
||||
Bkappa
|
||||
blabel
|
||||
Blaise
|
||||
blanchedalmond
|
||||
blocksize
|
||||
@ -750,6 +752,7 @@ dissipative
|
||||
Dissipative
|
||||
distharm
|
||||
dl
|
||||
dlabel
|
||||
dlambda
|
||||
DLAMMPS
|
||||
dll
|
||||
@ -1425,6 +1428,7 @@ ijk
|
||||
ijkl
|
||||
ik
|
||||
Ikeshoji
|
||||
ilabel
|
||||
Ilie
|
||||
ilmenau
|
||||
Ilmenau
|
||||
@ -1714,6 +1718,8 @@ Kusters
|
||||
Kutta
|
||||
Kuznetsov
|
||||
kx
|
||||
labelmap
|
||||
Labelmap
|
||||
Lachet
|
||||
Lackmann
|
||||
Ladd
|
||||
@ -1937,6 +1943,8 @@ Manolopoulos
|
||||
manpages
|
||||
manybody
|
||||
MANYBODY
|
||||
mapID
|
||||
mapIDs
|
||||
Maras
|
||||
Marchetti
|
||||
Marchi
|
||||
@ -2258,6 +2266,7 @@ natively
|
||||
Natoli
|
||||
natoms
|
||||
Natoms
|
||||
Natomtype
|
||||
Nattempt
|
||||
navajowhite
|
||||
Navier
|
||||
@ -3554,6 +3563,7 @@ typeargs
|
||||
typedefs
|
||||
typeI
|
||||
typeJ
|
||||
typelabel
|
||||
typeN
|
||||
typesafe
|
||||
Tz
|
||||
|
||||
@ -13,7 +13,7 @@ Masses
|
||||
2 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
|
||||
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
|
||||
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
|
||||
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
|
||||
between them with MDI messages.
|
||||
|
||||
Within the MDI context, one code is the driver and another code is
|
||||
the engine. The 2 codes can be written in any language; C++ (LAMMPS)
|
||||
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.
|
||||
The 2
|
||||
codes can communicate either via TCP (sockets) or 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.
|
||||
There are more examples of using LAMMPS with quantum codes via MDI in
|
||||
the examples/QM directory.
|
||||
|
||||
Within the MDI context, one code is the driver and another code is the
|
||||
engine. The 2 codes can be written in any language; C++ (LAMMPS) 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. The 2 codes can communicate either via TCP (sockets) or
|
||||
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
|
||||
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
|
||||
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 plugin. Examples for all these use cases are in this directory.
|
||||
The Run.sh file shows how run in all the modes. Type "sh Run.sh"
|
||||
to try them all out.
|
||||
a plugin.
|
||||
|
||||
To use LAMMPS as a plugin engine, you must build it as a shared
|
||||
library. Something like this with make, which also builds the normal
|
||||
LAMMPS executable lmp_mpi:
|
||||
Examples for all these use cases, using LAMMPS as a driver and as an
|
||||
engine are in this directory. The Run.sh file shows how run in all
|
||||
the modes. Type "sh Run.sh" to try them all out.
|
||||
|
||||
cd src
|
||||
make yes-mdi
|
||||
make mode=shlib mpi
|
||||
Examples for using LAMMPS as a driver with the tight-binding code
|
||||
LATTE are in the examples/QM/LATTE sub-directory. See its README file
|
||||
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
|
||||
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
|
||||
|
||||
|
||||
@ -316,6 +316,9 @@ class UCL_Device {
|
||||
std::vector<CUstream> _cq;
|
||||
CUdevice _cu_device;
|
||||
CUcontext _context;
|
||||
#if GERYON_NVD_PRIMARY_CONTEXT
|
||||
CUcontext _old_context;
|
||||
#endif
|
||||
};
|
||||
|
||||
// Grabs the properties for all devices
|
||||
@ -391,8 +394,14 @@ int UCL_Device::set_platform(const int pid) {
|
||||
int UCL_Device::set(int num) {
|
||||
clear();
|
||||
_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));
|
||||
CUresult err=cuCtxCreate(&_context,0,_cu_device);
|
||||
#endif
|
||||
if (err!=CUDA_SUCCESS) {
|
||||
#ifndef UCL_NO_EXIT
|
||||
std::cerr << "UCL Error: Could not access accelerator number " << num
|
||||
@ -401,13 +410,23 @@ int UCL_Device::set(int num) {
|
||||
#endif
|
||||
return UCL_ERROR;
|
||||
}
|
||||
#if GERYON_NVD_PRIMARY_CONTEXT
|
||||
if (_context != _old_context) {
|
||||
CU_SAFE_CALL_NS(cuCtxSetCurrent(_context));
|
||||
}
|
||||
#endif
|
||||
return UCL_SUCCESS;
|
||||
}
|
||||
|
||||
void UCL_Device::clear() {
|
||||
if (_device>-1) {
|
||||
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;
|
||||
}
|
||||
|
||||
@ -7,6 +7,13 @@
|
||||
|
||||
#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
|
||||
#include "mpi.h"
|
||||
#define NVD_GERYON_EXIT do { \
|
||||
|
||||
@ -27,19 +27,17 @@ specify -m and optionally -e, order does not matter
|
||||
|
||||
Examples:
|
||||
|
||||
make lib-poems args="-m serial" # build POEMS lib with same settings as in the serial 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)
|
||||
make lib-mdi args="-m mpi" # build MDI lib with same settings as in the mpi Makefile in src
|
||||
"""
|
||||
|
||||
# settings
|
||||
|
||||
version = "1.4.1"
|
||||
version = "1.4.10"
|
||||
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.
|
||||
checksums = { \
|
||||
'1.4.1' : 'f9505fccd4c79301a619f6452dad4ad9', \
|
||||
'1.4.10' : '1c203b7fd462d9934834f643f09f3c06', \
|
||||
}
|
||||
|
||||
# print error message or help
|
||||
|
||||
@ -15,6 +15,10 @@
|
||||
|
||||
#include "atom.h"
|
||||
#include "citeme.h"
|
||||
#include "error.h"
|
||||
#include "force.h"
|
||||
#include "pair.h"
|
||||
#include "pair_hybrid.h"
|
||||
|
||||
#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;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
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
|
||||
needed in replicate when 2 atom classes exist and it calls pack_restart()
|
||||
|
||||
@ -31,6 +31,7 @@ class AtomVecDielectric : public AtomVec {
|
||||
public:
|
||||
AtomVecDielectric(class LAMMPS *);
|
||||
|
||||
void init() override;
|
||||
void grow_pointers() override;
|
||||
void create_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)
|
||||
{
|
||||
nmax = 0;
|
||||
no_virial_fdotr_compute = 1;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
@ -41,6 +41,7 @@ PairCoulLongDielectric::PairCoulLongDielectric(LAMMPS *_lmp) :
|
||||
{
|
||||
nmax = 0;
|
||||
single_enable = 0;
|
||||
no_virial_fdotr_compute = 1;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
@ -40,6 +40,7 @@ PairLJCutCoulCutDielectric::PairLJCutCoulCutDielectric(LAMMPS *_lmp) : PairLJCut
|
||||
efield = nullptr;
|
||||
epot = nullptr;
|
||||
nmax = 0;
|
||||
no_virial_fdotr_compute = 1;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
@ -93,15 +94,16 @@ void PairLJCutCoulCutDielectric::compute(int eflag, int vflag)
|
||||
for (ii = 0; ii < inum; ii++) {
|
||||
i = ilist[ii];
|
||||
qtmp = q[i];
|
||||
etmp = eps[i];
|
||||
xtmp = x[i][0];
|
||||
ytmp = x[i][1];
|
||||
ztmp = x[i][2];
|
||||
etmp = eps[i];
|
||||
itype = type[i];
|
||||
jlist = firstneigh[i];
|
||||
jnum = numneigh[i];
|
||||
|
||||
// self term Eq. (55) for I_{ii} and Eq. (52) and in Barros et al
|
||||
|
||||
double curvature_threshold = sqrt(area[i]);
|
||||
if (curvature[i] < curvature_threshold) {
|
||||
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;
|
||||
epot = nullptr;
|
||||
nmax = 0;
|
||||
no_virial_fdotr_compute = 1;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
@ -45,6 +45,7 @@ PairLJCutCoulLongDielectric::PairLJCutCoulLongDielectric(LAMMPS *_lmp) : PairLJC
|
||||
efield = nullptr;
|
||||
epot = nullptr;
|
||||
nmax = 0;
|
||||
no_virial_fdotr_compute = 1;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
@ -47,6 +47,7 @@ PairLJCutCoulMSMDielectric::PairLJCutCoulMSMDielectric(LAMMPS *_lmp) : PairLJCut
|
||||
nmax = 0;
|
||||
ftmp = nullptr;
|
||||
efield = nullptr;
|
||||
no_virial_fdotr_compute = 1;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
@ -45,6 +45,7 @@ PairLJLongCoulLongDielectric::PairLJLongCoulLongDielectric(LAMMPS *_lmp) : PairL
|
||||
efield = nullptr;
|
||||
epot = nullptr;
|
||||
nmax = 0;
|
||||
no_virial_fdotr_compute = 1;
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
|
||||
@ -25,7 +25,7 @@ using namespace FixConst;
|
||||
|
||||
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
|
||||
|
||||
if (atom->tag_enable == 0)
|
||||
error->all(FLERR, "Cannot use MDI engine without atom IDs");
|
||||
if (atom->tag_enable == 0) error->all(FLERR, "Cannot use MDI engine without atom IDs");
|
||||
if (atom->natoms && atom->tag_consecutive() == 0)
|
||||
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;
|
||||
while (iarg < narg) {
|
||||
if (strcmp(arg[iarg],"virial") == 0) {
|
||||
if (iarg+2 > narg) error->all(FLERR,"Illegal fix mdi/qm command");
|
||||
if (strcmp(arg[iarg+1],"yes") == 0) virialflag = 1;
|
||||
else if (strcmp(arg[iarg+1],"no") == 0) virialflag = 0;
|
||||
else error->all(FLERR,"Illegal fix mdi/qm command");
|
||||
if (strcmp(arg[iarg], "virial") == 0) {
|
||||
if (iarg + 2 > narg) error->all(FLERR, "Illegal fix mdi/qm command");
|
||||
if (strcmp(arg[iarg + 1], "yes") == 0)
|
||||
virialflag = 1;
|
||||
else if (strcmp(arg[iarg + 1], "no") == 0)
|
||||
virialflag = 0;
|
||||
else
|
||||
error->all(FLERR, "Illegal fix mdi/qm command");
|
||||
iarg += 2;
|
||||
} else if (strcmp(arg[iarg],"add") == 0) {
|
||||
if (iarg+2 > narg) error->all(FLERR,"Illegal fix mdi/qm command");
|
||||
if (strcmp(arg[iarg+1],"yes") == 0) addflag = 1;
|
||||
else if (strcmp(arg[iarg+1],"no") == 0) addflag = 0;
|
||||
else error->all(FLERR,"Illegal fix mdi/qm command");
|
||||
} else if (strcmp(arg[iarg], "add") == 0) {
|
||||
if (iarg + 2 > narg) error->all(FLERR, "Illegal fix mdi/qm command");
|
||||
if (strcmp(arg[iarg + 1], "yes") == 0)
|
||||
addflag = 1;
|
||||
else if (strcmp(arg[iarg + 1], "no") == 0)
|
||||
addflag = 0;
|
||||
else
|
||||
error->all(FLERR, "Illegal fix mdi/qm command");
|
||||
iarg += 2;
|
||||
} else if (strcmp(arg[iarg],"every") == 0) {
|
||||
if (iarg+2 > narg) error->all(FLERR,"Illegal fix mdi/qm command");
|
||||
every = utils::inumeric(FLERR,arg[iarg+1],false,lmp);
|
||||
if (every <= 0) error->all(FLERR,"Illegal fix mdi/qm command");
|
||||
} else if (strcmp(arg[iarg], "every") == 0) {
|
||||
if (iarg + 2 > narg) error->all(FLERR, "Illegal fix mdi/qm command");
|
||||
every = utils::inumeric(FLERR, arg[iarg + 1], false, lmp);
|
||||
if (every <= 0) error->all(FLERR, "Illegal fix mdi/qm command");
|
||||
iarg += 2;
|
||||
} else if (strcmp(arg[iarg],"connect") == 0) {
|
||||
if (iarg+2 > narg) error->all(FLERR,"Illegal fix mdi/qm command");
|
||||
if (strcmp(arg[iarg+1],"yes") == 0) connectflag = 1;
|
||||
else if (strcmp(arg[iarg+1],"no") == 0) connectflag = 0;
|
||||
else error->all(FLERR,"Illegal fix mdi/qm command");
|
||||
} else if (strcmp(arg[iarg], "connect") == 0) {
|
||||
if (iarg + 2 > narg) error->all(FLERR, "Illegal fix mdi/qm command");
|
||||
if (strcmp(arg[iarg + 1], "yes") == 0)
|
||||
connectflag = 1;
|
||||
else if (strcmp(arg[iarg + 1], "no") == 0)
|
||||
connectflag = 0;
|
||||
else
|
||||
error->all(FLERR, "Illegal fix mdi/qm command");
|
||||
iarg += 2;
|
||||
} else if (strcmp(arg[iarg],"elements") == 0) {
|
||||
} else if (strcmp(arg[iarg], "elements") == 0) {
|
||||
int ntypes = atom->ntypes;
|
||||
if (iarg+ntypes+1 > narg) error->all(FLERR,"Illegal fix mdi/qm command");
|
||||
delete [] elements;
|
||||
elements = new int[ntypes+1];
|
||||
if (iarg + ntypes + 1 > narg) error->all(FLERR, "Illegal fix mdi/qm command");
|
||||
delete[] elements;
|
||||
elements = new int[ntypes + 1];
|
||||
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)
|
||||
error->all(FLERR,"Illegal fix mdi/qm command");
|
||||
error->all(FLERR, "Illegal fix mdi/qm command");
|
||||
}
|
||||
iarg += ntypes+1;
|
||||
} else error->all(FLERR,"Illegal fix mdi/qm command");
|
||||
iarg += ntypes + 1;
|
||||
} else
|
||||
error->all(FLERR, "Illegal fix mdi/qm command");
|
||||
}
|
||||
|
||||
// fix output settings are based on optional keywords
|
||||
@ -217,26 +226,26 @@ void FixMDIQM::init()
|
||||
plugin = 1;
|
||||
int method;
|
||||
MDI_Get_method(&method, mdicomm);
|
||||
if (method != MDI_PLUGIN)
|
||||
error->all(FLERR, "MDI internal error for plugin engine");
|
||||
if (method != MDI_PLUGIN) error->all(FLERR, "MDI internal error for plugin engine");
|
||||
}
|
||||
|
||||
// connection should have been already made by "mdi connect" command
|
||||
// only works for stand-alone engines
|
||||
// connection should have been already made by "mdi connect" command
|
||||
// only works for stand-alone engines
|
||||
|
||||
} else {
|
||||
plugin = 0;
|
||||
|
||||
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);
|
||||
char *ptrcomm = (char *) lmp->mdicomm;
|
||||
memcpy(&mdicomm,ptrcomm,nbytes);
|
||||
memcpy(&mdicomm, ptrcomm, nbytes);
|
||||
}
|
||||
}
|
||||
|
||||
// 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
|
||||
// subsequent calls in post_force() will be for same system until new init()
|
||||
|
||||
@ -245,36 +254,41 @@ void FixMDIQM::init()
|
||||
int natoms_exists;
|
||||
int ierr = MDI_Check_command_exists("@DEFAULT", ">NATOMS", mdicomm, &natoms_exists);
|
||||
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);
|
||||
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);
|
||||
if (ierr) error->all(FLERR, "MDI: >NATOMS data");
|
||||
|
||||
} else { // confirm that the engine's NATOMS is correct
|
||||
|
||||
} else {
|
||||
ierr = MDI_Send_command("<NATOMS", mdicomm);
|
||||
if (ierr) error->all(FLERR, "MDI: <NATOMS command");
|
||||
int n;
|
||||
ierr = MDI_Recv(&n, 1, MDI_INT, mdicomm);
|
||||
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 types_exists;
|
||||
ierr = MDI_Check_command_exists("@DEFAULT", ">ELEMENTS", mdicomm, &elements_exists);
|
||||
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);
|
||||
if (ierr) error->all(FLERR, "MDI: >TYPES command check");
|
||||
if ( elements && elements_exists ) {
|
||||
send_elements();
|
||||
} else if ( types_exists ) {
|
||||
send_types();
|
||||
}
|
||||
MPI_Bcast(&types_exists, 1, MPI_INT, 0, world);
|
||||
|
||||
if (elements && elements_exists)
|
||||
send_elements();
|
||||
else if (types_exists)
|
||||
send_types();
|
||||
send_box();
|
||||
}
|
||||
|
||||
@ -301,8 +315,7 @@ void FixMDIQM::post_force(int vflag)
|
||||
|
||||
// if simulation box dynamically changes, send current box to MDI engine
|
||||
|
||||
if (domain->box_change_size || domain->box_change_shape)
|
||||
send_box();
|
||||
if (domain->box_change_size || domain->box_change_shape) send_box();
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
|
||||
// optionally add forces to owned atoms
|
||||
// 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
|
||||
|
||||
if (virialflag) {
|
||||
@ -385,9 +398,9 @@ void FixMDIQM::post_force(int vflag)
|
||||
qm_virial_symmetric[0] = qm_virial[0] * mdi2lmp_pressure;
|
||||
qm_virial_symmetric[1] = qm_virial[4] * 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[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[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[5] = 0.5 * (qm_virial[5] + qm_virial[7]) * mdi2lmp_pressure;
|
||||
}
|
||||
|
||||
// optionally set fix->virial
|
||||
@ -402,8 +415,7 @@ void FixMDIQM::post_force(int vflag)
|
||||
volume = domain->xprd * domain->yprd;
|
||||
else if (domain->dimension == 3)
|
||||
volume = domain->xprd * domain->yprd * domain->zprd;
|
||||
for (int i = 0; i < 6; i++)
|
||||
virial[i] = qm_virial_symmetric[i]*volume/nprocs;
|
||||
for (int i = 0; i < 6; i++) virial[i] = qm_virial_symmetric[i] * volume / nprocs;
|
||||
}
|
||||
}
|
||||
|
||||
@ -447,10 +459,9 @@ void FixMDIQM::reallocate()
|
||||
|
||||
if (atom->natoms > maxbuf) {
|
||||
bigint nsize = atom->natoms * 3;
|
||||
if (nsize > MAXSMALLINT)
|
||||
error->all(FLERR, "Natoms too large to use with fix mdi/qm");
|
||||
if (nsize > MAXSMALLINT) 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(buf3);
|
||||
memory->destroy(buf3all);
|
||||
@ -467,7 +478,7 @@ void FixMDIQM::reallocate()
|
||||
|
||||
void FixMDIQM::send_types()
|
||||
{
|
||||
int n = static_cast<int> (atom->natoms);
|
||||
int n = static_cast<int>(atom->natoms);
|
||||
memset(ibuf1, 0, n * sizeof(int));
|
||||
|
||||
// use local atomID to index into ordered ibuf1
|
||||
@ -496,7 +507,7 @@ void FixMDIQM::send_types()
|
||||
|
||||
void FixMDIQM::send_elements()
|
||||
{
|
||||
int n = static_cast<int> (atom->natoms);
|
||||
int n = static_cast<int>(atom->natoms);
|
||||
memset(ibuf1, 0, n * sizeof(int));
|
||||
|
||||
// use local atomID to index into ordered ibuf1
|
||||
@ -530,7 +541,9 @@ void FixMDIQM::send_box()
|
||||
int celldispl_exists;
|
||||
int ierr = MDI_Check_command_exists("@DEFAULT", ">NATOMS", mdicomm, &celldispl_exists);
|
||||
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);
|
||||
if (ierr) error->all(FLERR, "MDI: >CELL_DISPL command");
|
||||
cell[0] = domain->boxlo[0] * lmp2mdi_length;
|
||||
@ -608,18 +621,17 @@ void FixMDIQM::unit_conversions()
|
||||
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;
|
||||
lmp2mdi_pressure = 1.0;
|
||||
|
||||
if (lmpunits == REAL) {
|
||||
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;
|
||||
} else if (lmpunits == METAL) {
|
||||
lmp2mdi_pressure =
|
||||
ev_to_hartree / (angstrom_to_bohr * angstrom_to_bohr * angstrom_to_bohr) / force->nktv2p;
|
||||
lmp2mdi_pressure = ev_to_hartree / (angstrom_to_bohr * angstrom_to_bohr * angstrom_to_bohr);
|
||||
mdi2lmp_pressure = 1.0 / lmp2mdi_pressure;
|
||||
}
|
||||
}
|
||||
|
||||
@ -40,7 +40,7 @@ class FixMDIQM : public Fix {
|
||||
|
||||
private:
|
||||
int nprocs;
|
||||
int every,virialflag,addflag,connectflag;
|
||||
int every, virialflag, addflag, connectflag;
|
||||
int plugin;
|
||||
int maxlocal;
|
||||
int sumflag;
|
||||
@ -48,7 +48,7 @@ class FixMDIQM : public Fix {
|
||||
|
||||
double qm_energy;
|
||||
int lmpunits;
|
||||
double qm_virial[9],qm_virial_symmetric[6];
|
||||
double qm_virial[9], qm_virial_symmetric[6];
|
||||
double **fqm;
|
||||
|
||||
MDI_Comm mdicomm;
|
||||
|
||||
@ -23,12 +23,8 @@
|
||||
#define LAMMPS_LIB_MPI 1
|
||||
#include "library.h"
|
||||
|
||||
#include "mdi_engine.h"
|
||||
|
||||
#include <cstring>
|
||||
|
||||
using namespace LAMMPS_NS;
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
/** 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 *``.
|
||||
* \return 0 on no error. */
|
||||
|
||||
int MDI_Plugin_init_lammps()
|
||||
int MDI_Plugin_init_lammps(void *plugin_state)
|
||||
{
|
||||
// initialize MDI
|
||||
|
||||
int mdi_argc;
|
||||
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_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
|
||||
|
||||
@ -90,14 +87,23 @@ int MDI_Plugin_init_lammps()
|
||||
if (!found_filename) MPI_Abort(MPI_COMM_WORLD, 1);
|
||||
|
||||
// create and run a LAMMPS instance
|
||||
// lammps_open() expects a first arg (not used) which is executable name
|
||||
// same as if called from main.cpp
|
||||
// need to add an initial pseudo arg to mdi_argc & mdi_argv
|
||||
// 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;
|
||||
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
|
||||
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
|
||||
// must contain "mdi engine" command
|
||||
@ -110,25 +116,3 @@ int MDI_Plugin_init_lammps()
|
||||
|
||||
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
|
||||
#define LAMMPS_LIBRARY_MDI_H
|
||||
|
||||
/* C style library calls to LAMMPS when a LAMMPS shared library is
|
||||
* used as a plugin through MolSSI Driver Interface (MDI). */
|
||||
/* C style library call to LAMMPS when a LAMMPS shared library is
|
||||
* used as a plugin through MolSSI Driver Interface (MDI) */
|
||||
|
||||
#include <mdi.h>
|
||||
|
||||
extern "C" {
|
||||
int MDI_Plugin_init_lammps();
|
||||
int lammps_execute_mdi_command(const char *, MDI_Comm, void *);
|
||||
int MDI_Plugin_init_lammps(void *plugin_state);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -44,7 +44,7 @@ void MDICommand::command(int narg, char **arg)
|
||||
} else if (strcmp(arg[0], "connect") == 0) {
|
||||
|
||||
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_Get_communicator(&mdicomm, 0);
|
||||
@ -53,23 +53,23 @@ void MDICommand::command(int narg, char **arg)
|
||||
MDI_Accept_communicator(&mdicomm);
|
||||
if (mdicomm == MDI_COMM_NULL)
|
||||
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);
|
||||
char *ptrcomm = (char *) memory->smalloc(nbytes,"mdi:mdicomm");
|
||||
memcpy(ptrcomm,&mdicomm,nbytes);
|
||||
char *ptrcomm = (char *) memory->smalloc(nbytes, "mdi:mdicomm");
|
||||
memcpy(ptrcomm, &mdicomm, nbytes);
|
||||
|
||||
lmp->mdicomm = (void *) ptrcomm;
|
||||
|
||||
} else if (strcmp(arg[0], "exit") == 0) {
|
||||
|
||||
if (lmp->mdicomm == nullptr)
|
||||
error->all(FLERR,"MDI cannot send exit to unconnected engine");
|
||||
if (lmp->mdicomm == nullptr) error->all(FLERR, "MDI cannot send exit to unconnected engine");
|
||||
|
||||
MDI_Comm mdicomm;
|
||||
int nbytes = sizeof(MDI_Comm);
|
||||
char *ptrcomm = (char *) lmp->mdicomm;
|
||||
memcpy(&mdicomm,ptrcomm,nbytes);
|
||||
memcpy(&mdicomm, ptrcomm, nbytes);
|
||||
|
||||
int ierr = MDI_Send_command("EXIT", mdicomm);
|
||||
if (ierr) error->all(FLERR, "MDI: EXIT command");
|
||||
@ -77,5 +77,6 @@ void MDICommand::command(int narg, char **arg)
|
||||
memory->sfree(ptrcomm);
|
||||
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 };
|
||||
|
||||
#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
|
||||
@ -65,7 +65,7 @@ enum { TYPE, CHARGE, MASS, COORD, VELOCITY, FORCE, ADDFORCE };
|
||||
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
|
||||
|
||||
@ -80,18 +80,19 @@ MDIEngine::MDIEngine(LAMMPS *_lmp, int narg, char ** arg) : Pointers(_lmp)
|
||||
|
||||
int iarg = 0;
|
||||
while (iarg < narg) {
|
||||
if (strcmp(arg[iarg],"elements") == 0) {
|
||||
if (strcmp(arg[iarg], "elements") == 0) {
|
||||
int ntypes = atom->ntypes;
|
||||
delete [] elements;
|
||||
elements = new int[ntypes+1];
|
||||
if (iarg+ntypes+1 > narg) error->all(FLERR,"Illegal mdi engine command");
|
||||
delete[] elements;
|
||||
elements = new int[ntypes + 1];
|
||||
if (iarg + ntypes + 1 > narg) error->all(FLERR, "Illegal mdi engine command");
|
||||
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)
|
||||
error->all(FLERR,"Illegal mdi engine command");
|
||||
error->all(FLERR, "Illegal mdi engine command");
|
||||
}
|
||||
iarg += ntypes+1;
|
||||
} else error->all(FLERR,"Illegal mdi engine command");
|
||||
iarg += ntypes + 1;
|
||||
} else
|
||||
error->all(FLERR, "Illegal mdi engine command");
|
||||
}
|
||||
|
||||
// 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) {
|
||||
int ntypes = atom->ntypes;
|
||||
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] == 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;
|
||||
|
||||
maxatom = 0;
|
||||
sys_natoms = static_cast<int> (atom->natoms);
|
||||
sys_natoms = static_cast<int>(atom->natoms);
|
||||
reallocate();
|
||||
|
||||
nsteps = 0;
|
||||
@ -184,10 +185,10 @@ MDIEngine::MDIEngine(LAMMPS *_lmp, int narg, char ** arg) : Pointers(_lmp)
|
||||
|
||||
mdi_commands();
|
||||
|
||||
// register the execute_command function with MDI
|
||||
// only used when engine runs in plugin mode
|
||||
// register a callback function with MDI 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
|
||||
|
||||
@ -291,11 +292,22 @@ void MDIEngine::engine_node(const char *node)
|
||||
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
|
||||
called by engine_node() in loop
|
||||
also called by MDI itself via lib::lammps_execute_mdi_command()
|
||||
when LAMMPS is running as a plugin
|
||||
called by engine_node() in loop when engine runs as stand-alone code
|
||||
called by execute_command_plugin_wrapper() when engine runs as plugin lib
|
||||
---------------------------------------------------------------------- */
|
||||
|
||||
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();
|
||||
|
||||
} else if (strcmp(command, ">ELEMENTS") == 0) {
|
||||
if (!elements)
|
||||
error->all(FLERR,"MDI engine command did not define element list");
|
||||
if (!elements) error->all(FLERR, "MDI engine command did not define element list");
|
||||
receive_elements();
|
||||
|
||||
} else if (strcmp(command, ">FORCES") == 0) {
|
||||
@ -362,7 +373,7 @@ int MDIEngine::execute_command(const char *command, MDI_Comm mdicomm)
|
||||
else
|
||||
receive_double3(VELOCITY);
|
||||
|
||||
// -----------------------------------------------
|
||||
// -----------------------------------------------
|
||||
|
||||
} else if (strcmp(command, "<@") == 0) {
|
||||
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) {
|
||||
send_double3(VELOCITY);
|
||||
|
||||
// -----------------------------------------------
|
||||
// -----------------------------------------------
|
||||
|
||||
// MDI action commands at @DEFAULT node
|
||||
// MDI action commands at @DEFAULT node
|
||||
|
||||
} else if (strcmp(command, "MD") == 0) {
|
||||
md();
|
||||
@ -421,9 +432,9 @@ int MDIEngine::execute_command(const char *command, MDI_Comm mdicomm)
|
||||
} else if (strcmp(command, "OPTG") == 0) {
|
||||
optg();
|
||||
|
||||
// -----------------------------------------------
|
||||
// -----------------------------------------------
|
||||
|
||||
// MDI node commands
|
||||
// MDI node commands
|
||||
|
||||
} else if (strcmp(command, "@INIT_MD") == 0) {
|
||||
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);
|
||||
node_match = false;
|
||||
|
||||
// exit command
|
||||
// exit command
|
||||
|
||||
} else if (strcmp(command, "EXIT") == 0) {
|
||||
exit_command = true;
|
||||
|
||||
// -------------------------------------------------------
|
||||
// custom LAMMPS commands
|
||||
// -------------------------------------------------------
|
||||
// -------------------------------------------------------
|
||||
// custom LAMMPS commands
|
||||
// -------------------------------------------------------
|
||||
|
||||
} else if (strcmp(command, "NBYTES") == 0) {
|
||||
nbytes_command();
|
||||
@ -478,9 +489,9 @@ int MDIEngine::execute_command(const char *command, MDI_Comm mdicomm)
|
||||
} else if (strcmp(command, "<KE") == 0) {
|
||||
send_ke();
|
||||
|
||||
// -------------------------------------------------------
|
||||
// unknown command
|
||||
// -------------------------------------------------------
|
||||
// -------------------------------------------------------
|
||||
// unknown command
|
||||
// -------------------------------------------------------
|
||||
|
||||
} else {
|
||||
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
|
||||
// optionally set charges if specified by ">CHARGES"
|
||||
|
||||
tagint* sys_ids;
|
||||
tagint *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)
|
||||
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;
|
||||
|
||||
// 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)
|
||||
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;
|
||||
}
|
||||
}
|
||||
if (itype > ntypes)
|
||||
error->all(FLERR,"MDI element not found in element list");
|
||||
if (itype > ntypes) error->all(FLERR, "MDI element not found in element list");
|
||||
}
|
||||
}
|
||||
|
||||
@ -1493,6 +1510,9 @@ void MDIEngine::send_pe()
|
||||
/* ----------------------------------------------------------------------
|
||||
<STRESS command
|
||||
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()
|
||||
@ -1837,6 +1857,8 @@ void MDIEngine::unit_conversions()
|
||||
}
|
||||
|
||||
// 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;
|
||||
lmp2mdi_pressure = 1.0;
|
||||
|
||||
@ -22,8 +22,6 @@ namespace LAMMPS_NS {
|
||||
class MDIEngine : protected Pointers {
|
||||
public:
|
||||
MDIEngine(class LAMMPS *, int, char **);
|
||||
|
||||
int execute_command(const char *command, MDI_Comm mdicomm);
|
||||
void engine_node(const char *node);
|
||||
|
||||
private:
|
||||
@ -87,9 +85,13 @@ class MDIEngine : protected Pointers {
|
||||
class Irregular *irregular; // irregular comm if new COORDS
|
||||
// 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
|
||||
|
||||
void mdi_engine(int, char **);
|
||||
int execute_command(const char *, MDI_Comm);
|
||||
void mdi_commands();
|
||||
|
||||
void mdi_md();
|
||||
|
||||
@ -72,18 +72,23 @@ MDIPlugin::MDIPlugin(LAMMPS *_lmp, int narg, char **arg) : Pointers(_lmp)
|
||||
|
||||
// error checks
|
||||
|
||||
if (!mdi_arg || !infile_arg || !lammps_command)
|
||||
error->all(FLERR, "MDI plugin must specify mdi, infile, command keywords");
|
||||
if (!mdi_arg || !lammps_command)
|
||||
error->all(FLERR, "MDI plugin must specify mdi and command keywords");
|
||||
|
||||
// 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];
|
||||
plugin_args[0] = 0;
|
||||
strcat(plugin_args, "-mdi \"");
|
||||
strcat(plugin_args, mdi_arg);
|
||||
strcat(plugin_args, "\" -in ");
|
||||
strcat(plugin_args, infile_arg);
|
||||
strcat(plugin_args, "\"");
|
||||
if (infile_arg) {
|
||||
strcat(plugin_args, " -in ");
|
||||
strcat(plugin_args, infile_arg);
|
||||
}
|
||||
if (extra_arg) {
|
||||
strcat(plugin_args, " ");
|
||||
strcat(plugin_args, extra_arg);
|
||||
@ -91,7 +96,8 @@ MDIPlugin::MDIPlugin(LAMMPS *_lmp, int narg, char **arg) : Pointers(_lmp)
|
||||
|
||||
// launch the MDI plugin library
|
||||
// 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);
|
||||
|
||||
@ -99,8 +105,9 @@ MDIPlugin::MDIPlugin(LAMMPS *_lmp, int narg, char **arg) : Pointers(_lmp)
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
callback function from MDI_Launch_plugin()
|
||||
this function wraps entire interaction of LAMMPS driver with the plugin
|
||||
wrapper on entire interaction of LAMMPS as a driver with the plugin engine
|
||||
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)
|
||||
|
||||
@ -26,6 +26,9 @@ class MDIPlugin : protected Pointers {
|
||||
private:
|
||||
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 *);
|
||||
};
|
||||
|
||||
|
||||
@ -23,6 +23,7 @@
|
||||
#include "math_const.h"
|
||||
#include "memory.h"
|
||||
#include "neigh_list.h"
|
||||
#include "suffix.h"
|
||||
|
||||
#include <cmath>
|
||||
|
||||
@ -37,6 +38,7 @@ static constexpr double EPSILON = 1.0e-6;
|
||||
PairLJCutCoulCutDielectricOMP::PairLJCutCoulCutDielectricOMP(LAMMPS *_lmp) :
|
||||
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;
|
||||
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 efield_i, epot_i;
|
||||
int *ilist, *jlist, *numneigh, **firstneigh;
|
||||
@ -130,10 +132,10 @@ void PairLJCutCoulCutDielectricOMP::eval(int iifrom, int iito, ThrData *const th
|
||||
|
||||
i = ilist[ii];
|
||||
qtmp = q[i];
|
||||
etmp = eps[i];
|
||||
xtmp = x[i].x;
|
||||
ytmp = x[i].y;
|
||||
ztmp = x[i].z;
|
||||
etmp = eps[i];
|
||||
itype = type[i];
|
||||
jlist = firstneigh[i];
|
||||
jnum = numneigh[i];
|
||||
@ -141,6 +143,7 @@ void PairLJCutCoulCutDielectricOMP::eval(int iifrom, int iito, ThrData *const th
|
||||
extmp = eytmp = eztmp = 0.0;
|
||||
|
||||
// self term Eq. (55) for I_{ii} and Eq. (52) and in Barros et al
|
||||
|
||||
double curvature_threshold = sqrt(area[i]);
|
||||
if (curvature[i] < curvature_threshold) {
|
||||
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;
|
||||
}
|
||||
|
||||
epot[i] = 0;
|
||||
epot[i] = 0.0;
|
||||
|
||||
for (jj = 0; jj < jnum; jj++) {
|
||||
j = jlist[jj];
|
||||
@ -167,9 +170,10 @@ void PairLJCutCoulCutDielectricOMP::eval(int iifrom, int iito, ThrData *const th
|
||||
|
||||
if (rsq < cutsq[itype][jtype]) {
|
||||
r2inv = 1.0 / rsq;
|
||||
const double rinv = sqrt(r2inv);
|
||||
|
||||
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;
|
||||
epot_i = efield_i;
|
||||
} else
|
||||
@ -182,7 +186,6 @@ void PairLJCutCoulCutDielectricOMP::eval(int iifrom, int iito, ThrData *const th
|
||||
forcelj = 0.0;
|
||||
|
||||
fpair_i = (factor_coul * etmp * forcecoul + factor_lj * forcelj) * r2inv;
|
||||
|
||||
fxtmp += delx * fpair_i;
|
||||
fytmp += dely * fpair_i;
|
||||
fztmp += delz * fpair_i;
|
||||
@ -193,29 +196,18 @@ void PairLJCutCoulCutDielectricOMP::eval(int iifrom, int iito, ThrData *const th
|
||||
eztmp += delz * efield_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 (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
|
||||
ecoul = 0.0;
|
||||
ecoul *= 0.5;
|
||||
if (rsq < cut_ljsq[itype][jtype]) {
|
||||
evdwl = r6inv * (lj3[itype][jtype] * r6inv - lj4[itype][jtype]) - offset[itype][jtype];
|
||||
evdwl *= factor_lj;
|
||||
} else
|
||||
evdwl = 0.0;
|
||||
}
|
||||
|
||||
if (EVFLAG)
|
||||
ev_tally_thr(this, i, j, nlocal, NEWTON_PAIR, evdwl, ecoul, fpair_i, delx, dely, delz,
|
||||
thr);
|
||||
if (EVFLAG) ev_tally_full_thr(this, i, evdwl, ecoul, fpair_i, delx, dely, delz, thr);
|
||||
}
|
||||
}
|
||||
f[i].x += fxtmp;
|
||||
|
||||
@ -23,6 +23,7 @@
|
||||
#include "math_const.h"
|
||||
#include "memory.h"
|
||||
#include "neigh_list.h"
|
||||
#include "suffix.h"
|
||||
|
||||
#include <cmath>
|
||||
|
||||
@ -37,6 +38,7 @@ static constexpr double EPSILON = 1.0e-6;
|
||||
PairLJCutCoulDebyeDielectricOMP::PairLJCutCoulDebyeDielectricOMP(LAMMPS *_lmp) :
|
||||
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;
|
||||
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 r, rinv, screening;
|
||||
int *ilist, *jlist, *numneigh, **firstneigh;
|
||||
@ -185,7 +187,6 @@ void PairLJCutCoulDebyeDielectricOMP::eval(int iifrom, int iito, ThrData *const
|
||||
forcelj = 0.0;
|
||||
|
||||
fpair_i = (factor_coul * etmp * forcecoul + factor_lj * forcelj) * r2inv;
|
||||
|
||||
fxtmp += delx * fpair_i;
|
||||
fytmp += dely * fpair_i;
|
||||
fztmp += delz * fpair_i;
|
||||
@ -196,19 +197,11 @@ void PairLJCutCoulDebyeDielectricOMP::eval(int iifrom, int iito, ThrData *const
|
||||
eztmp += delz * efield_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 (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
|
||||
ecoul = 0.0;
|
||||
ecoul *= 0.5;
|
||||
if (rsq < cut_ljsq[itype][jtype]) {
|
||||
evdwl = r6inv * (lj3[itype][jtype] * r6inv - lj4[itype][jtype]) - offset[itype][jtype];
|
||||
evdwl *= factor_lj;
|
||||
@ -216,9 +209,7 @@ void PairLJCutCoulDebyeDielectricOMP::eval(int iifrom, int iito, ThrData *const
|
||||
evdwl = 0.0;
|
||||
}
|
||||
|
||||
if (EVFLAG)
|
||||
ev_tally_thr(this, i, j, nlocal, NEWTON_PAIR, evdwl, ecoul, fpair_i, delx, dely, delz,
|
||||
thr);
|
||||
if (EVFLAG) ev_tally_full_thr(this, i, evdwl, ecoul, fpair_i, delx, dely, delz, thr);
|
||||
}
|
||||
}
|
||||
f[i].x += fxtmp;
|
||||
|
||||
@ -24,6 +24,7 @@
|
||||
#include "math_const.h"
|
||||
#include "memory.h"
|
||||
#include "neigh_list.h"
|
||||
#include "suffix.h"
|
||||
|
||||
#include <cmath>
|
||||
|
||||
@ -39,6 +40,7 @@ static constexpr double EPSILON = 1.0e-6;
|
||||
PairLJCutCoulLongDielectricOMP::PairLJCutCoulLongDielectricOMP(LAMMPS *_lmp) :
|
||||
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 (rsq < cut_coulsq) {
|
||||
if (!ncoultablebits || rsq <= tabinnersq)
|
||||
ecoul = prefactor * (etmp + eps[j]) * erfc;
|
||||
ecoul = prefactor * 0.5 * (etmp + eps[j]) * erfc;
|
||||
else {
|
||||
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;
|
||||
} 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 dely, const double delz, ThrData * const thr)
|
||||
{
|
||||
|
||||
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) {
|
||||
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[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) {
|
||||
|
||||
399
src/atom.cpp
399
src/atom.cpp
@ -24,6 +24,7 @@
|
||||
#include "force.h"
|
||||
#include "group.h"
|
||||
#include "input.h"
|
||||
#include "label_map.h"
|
||||
#include "math_const.h"
|
||||
#include "memory.h"
|
||||
#include "modify.h"
|
||||
@ -48,14 +49,15 @@ using namespace MathConst;
|
||||
|
||||
#define DELTA 1
|
||||
#define EPSILON 1.0e-6
|
||||
#define MAXLINE 256
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
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
|
||||
* 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;
|
||||
nlocal = nghost = nmax = 0;
|
||||
@ -222,6 +224,10 @@ Atom::Atom(LAMMPS *lmp) : Pointers(lmp)
|
||||
nmolecule = 0;
|
||||
molecules = nullptr;
|
||||
|
||||
// type labels
|
||||
|
||||
lmap = nullptr;
|
||||
|
||||
// custom atom arrays
|
||||
|
||||
nivector = ndvector = niarray = ndarray = 0;
|
||||
@ -339,6 +345,10 @@ Atom::~Atom()
|
||||
for (int i = 0; i < nmolecule; i++) delete molecules[i];
|
||||
memory->sfree(molecules);
|
||||
|
||||
// delete label map
|
||||
|
||||
delete lmap;
|
||||
|
||||
// delete per-type arrays
|
||||
|
||||
delete[] mass;
|
||||
@ -616,6 +626,7 @@ void Atom::set_atomflag_defaults()
|
||||
// 3rd customization section: customize by adding new flag
|
||||
// identical list as 2nd customization in atom.h
|
||||
|
||||
labelmapflag = 0;
|
||||
sphere_flag = ellipsoid_flag = line_flag = tri_flag = body_flag = 0;
|
||||
quat_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,
|
||||
int type_offset, int shiftflag, double *shift)
|
||||
int type_offset, int shiftflag, double *shift,
|
||||
int labelflag, int *ilabel)
|
||||
{
|
||||
int xptr,iptr;
|
||||
imageint imagedata;
|
||||
double xdata[3],lamda[3];
|
||||
double *coord;
|
||||
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
|
||||
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';
|
||||
int nwords = utils::trim_and_count_words(buf);
|
||||
*next = '\n';
|
||||
auto values = Tokenizer(buf).as_vector();
|
||||
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))
|
||||
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
|
||||
// if periodic and I am lo/hi proc, adjust bounds by EPSILON
|
||||
// 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++) {
|
||||
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';
|
||||
auto values = Tokenizer(utils::trim_comment(buf)).as_vector();
|
||||
if (values.size() == 0) {
|
||||
auto values = Tokenizer(buf).as_vector();
|
||||
int nvalues = values.size();
|
||||
if ((nvalues == 0) || (utils::strmatch(values[0],"^#.*"))) {
|
||||
// skip over empty or comment lines
|
||||
} else if ((int)values.size() != nwords) {
|
||||
error->all(FLERR, "Incorrect atom format in data file: {}", utils::trim(buf));
|
||||
} else if ((nvalues < nwords) ||
|
||||
((nvalues > nwords) && (!utils::strmatch(values[nwords],"^#")))) {
|
||||
error->all(FLERR, "Incorrect format in {}: {}", location, utils::trim(buf));
|
||||
} else {
|
||||
int imx = 0, imy = 0, imz = 0;
|
||||
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] &&
|
||||
coord[1] >= sublo[1] && coord[1] < subhi[1] &&
|
||||
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 (mol_offset) molecule[nlocal-1] += mol_offset;
|
||||
if (type_offset) {
|
||||
type[nlocal-1] += type_offset;
|
||||
if (type[nlocal-1] > ntypes)
|
||||
error->one(FLERR,"Invalid atom type in Atoms section of data file");
|
||||
|
||||
switch (utils::is_type(typestr)) {
|
||||
case 0: { // numeric
|
||||
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;
|
||||
@ -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,
|
||||
int type_offset)
|
||||
int type_offset, int labelflag, int *ilabel)
|
||||
{
|
||||
int m,itype;
|
||||
tagint atom1,atom2;
|
||||
char *next;
|
||||
std::string typestr;
|
||||
int newton_bond = force->newton_bond;
|
||||
auto location = "Bonds section of data file";
|
||||
|
||||
for (int i = 0; i < n; i++) {
|
||||
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';
|
||||
ValueTokenizer values(utils::trim_comment(buf));
|
||||
// skip over empty of comment lines
|
||||
if (values.has_next()) {
|
||||
try {
|
||||
values.next_int();
|
||||
itype = values.next_int();
|
||||
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));
|
||||
auto values = Tokenizer(buf).as_vector();
|
||||
int nwords = values.size();
|
||||
for (std::size_t i = 0; i < values.size(); ++i) {
|
||||
if (utils::strmatch(values[i], "^#")) {
|
||||
nwords = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 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) {
|
||||
atom1 += 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) ||
|
||||
(atom2 <= 0) || (atom2 > map_tag_max) || (atom1 == atom2))
|
||||
error->one(FLERR,"Invalid atom ID in {}: {}", location, utils::trim(buf));
|
||||
if (itype <= 0 || itype > nbondtypes)
|
||||
error->one(FLERR,"Invalid bond type in {}: {}", location, utils::trim(buf));
|
||||
error->all(FLERR,"Invalid atom ID in {}: {}", location, utils::trim(buf));
|
||||
if ((itype <= 0) || (itype > nbondtypes))
|
||||
error->all(FLERR,"Invalid bond type {} in {}: {}", itype, location, utils::trim(buf));
|
||||
if ((m = map(atom1)) >= 0) {
|
||||
if (count) count[m]++;
|
||||
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,
|
||||
int type_offset)
|
||||
int type_offset, int labelflag, int *ilabel)
|
||||
{
|
||||
int m,itype;
|
||||
tagint atom1,atom2,atom3;
|
||||
char *next;
|
||||
std::string typestr;
|
||||
int newton_bond = force->newton_bond;
|
||||
auto location = "Angles section of data file";
|
||||
|
||||
for (int i = 0; i < n; i++) {
|
||||
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';
|
||||
ValueTokenizer values(utils::trim_comment(buf));
|
||||
// skip over empty or comment lines
|
||||
if (values.has_next()) {
|
||||
try {
|
||||
values.next_int();
|
||||
itype = values.next_int();
|
||||
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));
|
||||
auto values = Tokenizer(buf).as_vector();
|
||||
int nwords = values.size();
|
||||
for (std::size_t i = 0; i < values.size(); ++i) {
|
||||
if (utils::strmatch(values[i], "^#")) {
|
||||
nwords = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 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) {
|
||||
atom1 += id_offset;
|
||||
atom2 += 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) ||
|
||||
(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))
|
||||
error->one(FLERR,"Invalid atom ID in {}: {}", location, utils::trim(buf));
|
||||
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 (count) count[m]++;
|
||||
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,
|
||||
int type_offset)
|
||||
int type_offset, int labelflag, int *ilabel)
|
||||
{
|
||||
int m,itype;
|
||||
tagint atom1,atom2,atom3,atom4;
|
||||
char *next;
|
||||
std::string typestr;
|
||||
int newton_bond = force->newton_bond;
|
||||
auto location = "Dihedrals section of data file";
|
||||
|
||||
for (int i = 0; i < n; i++) {
|
||||
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';
|
||||
ValueTokenizer values(utils::trim_comment(buf));
|
||||
// skip over empty or comment lines
|
||||
if (values.has_next()) {
|
||||
try {
|
||||
values.next_int();
|
||||
itype = values.next_int();
|
||||
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));
|
||||
auto values = Tokenizer(buf).as_vector();
|
||||
int nwords = values.size();
|
||||
for (std::size_t i = 0; i < values.size(); ++i) {
|
||||
if (utils::strmatch(values[i], "^#")) {
|
||||
nwords = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 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) {
|
||||
atom1 += id_offset;
|
||||
atom2 += id_offset;
|
||||
atom3 += 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) ||
|
||||
(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))
|
||||
error->one(FLERR, "Invalid atom ID in {}: {}", location, utils::trim(buf));
|
||||
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 (count) count[m]++;
|
||||
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,
|
||||
int type_offset)
|
||||
int type_offset, int labelflag, int *ilabel)
|
||||
{
|
||||
int m,itype;
|
||||
tagint atom1,atom2,atom3,atom4;
|
||||
char *next;
|
||||
std::string typestr;
|
||||
int newton_bond = force->newton_bond;
|
||||
auto location = "Impropers section of data file";
|
||||
|
||||
for (int i = 0; i < n; i++) {
|
||||
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';
|
||||
ValueTokenizer values(utils::trim_comment(buf));
|
||||
// skip over empty or comment lines
|
||||
if (values.has_next()) {
|
||||
try {
|
||||
values.next_int();
|
||||
itype = values.next_int();
|
||||
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));
|
||||
auto values = Tokenizer(buf).as_vector();
|
||||
int nwords = values.size();
|
||||
for (std::size_t i = 0; i < values.size(); ++i) {
|
||||
if (utils::strmatch(values[i], "^#")) {
|
||||
nwords = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 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) {
|
||||
atom1 += id_offset;
|
||||
atom2 += id_offset;
|
||||
atom3 += 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) ||
|
||||
(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))
|
||||
error->one(FLERR, "Invalid atom ID in {}: {}", location, utils::trim(buf));
|
||||
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 (count) count[m]++;
|
||||
else {
|
||||
@ -1717,30 +1856,63 @@ void Atom::allocate_type_arrays()
|
||||
called from reading of data file
|
||||
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;
|
||||
double mass_one;
|
||||
ValueTokenizer values(utils::trim_comment(str));
|
||||
if (values.has_next()) {
|
||||
try {
|
||||
itype = values.next_int() + type_offset;
|
||||
mass_one = values.next_double();
|
||||
if (values.has_next()) throw TokenizerException("Too many tokens", "");
|
||||
auto location = "Masses section of data file";
|
||||
auto values = Tokenizer(str).as_vector();
|
||||
int nwords = values.size();
|
||||
for (std::size_t i = 0; i < values.size(); ++i) {
|
||||
if (utils::strmatch(values[i], "^#")) {
|
||||
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", "");
|
||||
if (mass_one <= 0.0) throw TokenizerException("Invalid mass value", "");
|
||||
} catch (TokenizerException &e) {
|
||||
error->all(file,line,"{} in Masses section of data file: {}", e.what(), utils::trim(str));
|
||||
switch (utils::is_type(typestr)) {
|
||||
|
||||
case 0: { // numeric
|
||||
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;
|
||||
mass_setflag[itype] = 1;
|
||||
case 1: { // type label
|
||||
if (!atom->labelmapflag)
|
||||
error->all(file, line, "Invalid atom type in {}: {}", location, utils::trim(str));
|
||||
itype = lmap->find(typestr, Atom::ATOM);
|
||||
if (itype == -1)
|
||||
error->all(file, line, "Unknown atom type {} in {}: {}", typestr, location,
|
||||
utils::trim(str));
|
||||
break;
|
||||
}
|
||||
|
||||
default: // invalid
|
||||
error->one(file, line, "Invalid {}: {}", location, utils::trim(str));
|
||||
break;
|
||||
}
|
||||
itype += type_offset;
|
||||
mass_one = utils::numeric(file, line, values[1], false, lmp);
|
||||
|
||||
if (itype < 1 || itype > ntypes)
|
||||
error->all(file, line, "Invalid atom type {} in {}: {}", itype, location, utils::trim(str));
|
||||
|
||||
if (mass_one <= 0.0)
|
||||
error->all(file, line, "Invalid mass value {} in {}: {}", mass_one, location, utils::trim(str));
|
||||
mass[itype] = mass_one;
|
||||
mass_setflag[itype] = 1;
|
||||
}
|
||||
// clang-format off
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
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)
|
||||
{
|
||||
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;
|
||||
utils::bounds(file,line,arg[0],1,ntypes,lo,hi,error);
|
||||
char *typestr = utils::expand_type(file, line, arg[0], Atom::ATOM, lmp);
|
||||
if (typestr) arg[0] = typestr;
|
||||
|
||||
int lo, hi;
|
||||
utils::bounds(file, line, arg[0], 1, ntypes, lo, hi, error);
|
||||
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);
|
||||
if (value <= 0.0) error->all(file,line,"Invalid atom mass value {}", value);
|
||||
const double value = utils::numeric(FLERR, arg[1], false, lmp);
|
||||
if (value <= 0.0)
|
||||
error->all(file, line, "Invalid atom mass value {} for type {}", value, arg[0]);
|
||||
|
||||
for (int itype = lo; itype <= hi; itype++) {
|
||||
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
|
||||
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 { GROW = 0, RESTART = 1, BORDER = 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 };
|
||||
|
||||
// atom counts
|
||||
@ -181,6 +183,7 @@ class Atom : protected Pointers {
|
||||
// most are existence flags for per-atom vectors and arrays
|
||||
// 1 if variable is used, 0 if not
|
||||
|
||||
int labelmapflag, types_style;
|
||||
int sphere_flag, ellipsoid_flag, line_flag, tri_flag, body_flag;
|
||||
int peri_flag, electron_flag;
|
||||
int wavepacket_flag, sph_flag;
|
||||
@ -251,6 +254,10 @@ class Atom : protected Pointers {
|
||||
int nmolecule;
|
||||
class Molecule **molecules;
|
||||
|
||||
// type label maps
|
||||
|
||||
class LabelMap *lmap;
|
||||
|
||||
// extra peratom info in restart file destined for fix & diag
|
||||
|
||||
double **extra;
|
||||
@ -324,18 +331,19 @@ class Atom : protected Pointers {
|
||||
|
||||
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_bonds(int, char *, int *, tagint, int);
|
||||
void data_angles(int, char *, int *, tagint, int);
|
||||
void data_dihedrals(int, char *, int *, tagint, int);
|
||||
void data_impropers(int, char *, int *, tagint, int);
|
||||
void data_bonds(int, char *, int *, tagint, int, int, int *);
|
||||
void data_angles(int, char *, int *, tagint, int, int, int *);
|
||||
void data_dihedrals(int, char *, int *, tagint, int, int, int *);
|
||||
void data_impropers(int, char *, int *, tagint, int, int, int *);
|
||||
void data_bonus(int, char *, AtomVec *, tagint);
|
||||
void data_bodies(int, char *, AtomVec *, tagint);
|
||||
void data_fix_compute_variable(int, int);
|
||||
|
||||
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, char **);
|
||||
void set_mass(double *);
|
||||
@ -349,6 +357,8 @@ class Atom : protected Pointers {
|
||||
std::vector<Molecule *>get_molecule_by_id(const std::string &);
|
||||
void add_molecule_atom(class Molecule *, int, int, tagint);
|
||||
|
||||
void add_label_map();
|
||||
|
||||
void first_reorder();
|
||||
virtual void sort();
|
||||
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
#include "error.h"
|
||||
#include "fix.h"
|
||||
#include "force.h"
|
||||
#include "label_map.h"
|
||||
#include "math_const.h"
|
||||
#include "memory.h"
|
||||
#include "modify.h"
|
||||
@ -1649,12 +1650,24 @@ void AtomVec::create_atom(int itype, double *coord)
|
||||
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
|
||||
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;
|
||||
void *pdata;
|
||||
@ -1692,6 +1705,10 @@ void AtomVec::data_atom(double *coord, imageint imagetmp, const std::vector<std:
|
||||
} else if (datatype == Atom::INT) {
|
||||
if (cols == 0) {
|
||||
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);
|
||||
} else {
|
||||
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
|
||||
|
||||
if (tag[nlocal] <= 0) error->one(FLERR, "Invalid atom ID in Atoms section of data file");
|
||||
if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes)
|
||||
error->one(FLERR, "Invalid atom type in Atoms section of data file");
|
||||
if (tag[nlocal] <= 0)
|
||||
error->one(FLERR, "Invalid atom ID {} in line {} of Atoms section of data file",
|
||||
tag[nlocal], nlocal+1);
|
||||
|
||||
// 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) {
|
||||
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 {
|
||||
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)
|
||||
{
|
||||
std::string typestr;
|
||||
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++;
|
||||
}
|
||||
}
|
||||
@ -2075,8 +2099,13 @@ int AtomVec::pack_angle(tagint **buf)
|
||||
|
||||
void AtomVec::write_angle(FILE *fp, int n, tagint **buf, int index)
|
||||
{
|
||||
std::string typestr;
|
||||
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++;
|
||||
}
|
||||
}
|
||||
@ -2135,9 +2164,13 @@ int AtomVec::pack_dihedral(tagint **buf)
|
||||
|
||||
void AtomVec::write_dihedral(FILE *fp, int n, tagint **buf, int index)
|
||||
{
|
||||
std::string typestr;
|
||||
for (int i = 0; i < n; i++) {
|
||||
fmt::print(fp, "{} {} {} {} {} {}\n", index, buf[i][0], buf[i][1], buf[i][2], buf[i][3],
|
||||
buf[i][4]);
|
||||
typestr = std::to_string(buf[i][0]);
|
||||
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++;
|
||||
}
|
||||
}
|
||||
@ -2196,9 +2229,13 @@ int AtomVec::pack_improper(tagint **buf)
|
||||
|
||||
void AtomVec::write_improper(FILE *fp, int n, tagint **buf, int index)
|
||||
{
|
||||
std::string typestr;
|
||||
for (int i = 0; i < n; i++) {
|
||||
fmt::print(fp, "{} {} {} {} {} {}\n", index, buf[i][0], buf[i][1], buf[i][2], buf[i][3],
|
||||
buf[i][4]);
|
||||
typestr = std::to_string(buf[i][0]);
|
||||
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++;
|
||||
}
|
||||
}
|
||||
|
||||
@ -124,6 +124,7 @@ class AtomVec : protected Pointers {
|
||||
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> &, std::string &);
|
||||
virtual void data_atom_post(int) {}
|
||||
virtual void data_atom_bonus(int, const std::vector<std::string> &) {}
|
||||
virtual void data_body(int, int, int, int *, double *) {}
|
||||
|
||||
@ -108,46 +108,50 @@ void CreateBox::command(int narg, char **arg)
|
||||
while (iarg < narg) {
|
||||
if (strcmp(arg[iarg], "bond/types") == 0) {
|
||||
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);
|
||||
iarg += 2;
|
||||
} else if (strcmp(arg[iarg], "angle/types") == 0) {
|
||||
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);
|
||||
iarg += 2;
|
||||
} else if (strcmp(arg[iarg], "dihedral/types") == 0) {
|
||||
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "create_box dihedral/types", error);
|
||||
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);
|
||||
iarg += 2;
|
||||
} else if (strcmp(arg[iarg], "improper/types") == 0) {
|
||||
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "create_box improper/types", error);
|
||||
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);
|
||||
iarg += 2;
|
||||
} 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 (!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);
|
||||
iarg += 2;
|
||||
} 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 (!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);
|
||||
iarg += 2;
|
||||
} 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 (!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);
|
||||
iarg += 2;
|
||||
} 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 (!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);
|
||||
iarg += 2;
|
||||
} else if (strcmp(arg[iarg], "extra/special/per/atom") == 0) {
|
||||
|
||||
@ -33,6 +33,7 @@
|
||||
#include "improper.h"
|
||||
#include "integrate.h"
|
||||
#include "kspace.h"
|
||||
#include "label_map.h"
|
||||
#include "memory.h"
|
||||
#include "min.h"
|
||||
#include "modify.h"
|
||||
@ -789,6 +790,7 @@ int Input::execute_command()
|
||||
else if (!strcmp(command,"improper_style")) improper_style();
|
||||
else if (!strcmp(command,"kspace_modify")) kspace_modify();
|
||||
else if (!strcmp(command,"kspace_style")) kspace_style();
|
||||
else if (!strcmp(command,"labelmap")) labelmap();
|
||||
else if (!strcmp(command,"lattice")) lattice();
|
||||
else if (!strcmp(command,"mass")) mass();
|
||||
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");
|
||||
if (atom->avec->angles_allow == 0)
|
||||
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);
|
||||
delete[] newarg;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
@ -1367,7 +1372,10 @@ void Input::bond_coeff()
|
||||
error->all(FLERR,"Bond_coeff command before bond_style is defined");
|
||||
if (atom->avec->bonds_allow == 0)
|
||||
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);
|
||||
delete[] newarg;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
@ -1470,7 +1478,10 @@ void Input::dihedral_coeff()
|
||||
error->all(FLERR,"Dihedral_coeff command before dihedral_style is defined");
|
||||
if (atom->avec->dihedrals_allow == 0)
|
||||
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);
|
||||
delete[] newarg;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
@ -1547,7 +1558,10 @@ void Input::improper_coeff()
|
||||
error->all(FLERR,"Improper_coeff command before improper_style is defined");
|
||||
if (atom->avec->impropers_allow == 0)
|
||||
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);
|
||||
delete[] newarg;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
@ -1577,6 +1591,14 @@ void Input::kspace_style()
|
||||
force->create_kspace(arg[0],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) {
|
||||
if (lmp->kokkos == nullptr || lmp->kokkos->kokkos_exists == 0)
|
||||
error->all(FLERR,
|
||||
"Package kokkos command without KOKKOS package enabled");
|
||||
error->all(FLERR, "Package kokkos command without KOKKOS package enabled");
|
||||
lmp->kokkos->accelerator(narg-1,&arg[1]);
|
||||
|
||||
} else if (strcmp(arg[0],"omp") == 0) {
|
||||
if (!modify->check_package("OMP"))
|
||||
error->all(FLERR,
|
||||
"Package omp command without OPENMP package installed");
|
||||
error->all(FLERR, "Package omp command without OPENMP package installed");
|
||||
|
||||
std::string fixcmd = "package_omp all OMP";
|
||||
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) {
|
||||
if (!modify->check_package("INTEL"))
|
||||
error->all(FLERR,
|
||||
"Package intel command without INTEL package installed");
|
||||
error->all(FLERR, "Package intel command without INTEL package installed");
|
||||
|
||||
std::string fixcmd = "package_intel all INTEL";
|
||||
for (int i = 1; i < narg; i++) fixcmd += std::string(" ") + arg[i];
|
||||
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)
|
||||
error->all(FLERR,"Pair_coeff command before pair_style is defined");
|
||||
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");
|
||||
|
||||
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);
|
||||
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() override;
|
||||
void file(); // process all input
|
||||
void file(const char *); // process an input script
|
||||
char *one(const std::string &); // process a single command
|
||||
void substitute(char *&, char *&, int &, int &, int);
|
||||
// substitute for variables in a string
|
||||
void write_echo(const std::string &); // send text to active echo file pointers
|
||||
void file(); // process all input
|
||||
void file(const char *); // process an input script
|
||||
char *one(const std::string &); // process a single command
|
||||
void substitute(char *&, char *&, int &, int &, int); // substitute for variables in a string
|
||||
void write_echo(const std::string &); // send text to active echo file pointers
|
||||
|
||||
protected:
|
||||
char *command; // ptr to current command
|
||||
@ -113,6 +112,7 @@ class Input : protected Pointers {
|
||||
void improper_style();
|
||||
void kspace_modify();
|
||||
void kspace_style();
|
||||
void labelmap();
|
||||
void lattice();
|
||||
void mass();
|
||||
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,
|
||||
EXTRA_BOND_PER_ATOM,EXTRA_ANGLE_PER_ATOM,EXTRA_DIHEDRAL_PER_ATOM,
|
||||
EXTRA_IMPROPER_PER_ATOM,EXTRA_SPECIAL_PER_ATOM,ATOM_MAXSPECIAL,
|
||||
NELLIPSOIDS,NLINES,NTRIS,NBODIES,
|
||||
ATIME,ATIMESTEP};
|
||||
NELLIPSOIDS,NLINES,NTRIS,NBODIES,ATIME,ATIMESTEP,LABELMAP};
|
||||
|
||||
#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;
|
||||
}
|
||||
|
||||
// calculate timestep and/or time for next dump
|
||||
// set next_dump and next_time_dump, 0 arg for setup()
|
||||
// only do this if dump written or dump has not been written yet
|
||||
// calculate timestep or time for next dump
|
||||
// set next_dump and next_time_dump
|
||||
|
||||
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()
|
||||
// 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;
|
||||
|
||||
// do not write restart files at start of run
|
||||
// set next_restart values to multiple of every or variable value
|
||||
// wrap variable eval with clear/add
|
||||
// if no restarts, set next_restart to last+1 so will not influence next
|
||||
// do not write restart files at start of run
|
||||
// set next_restart values to multiple of every or variable value
|
||||
// wrap variable eval with clear/add
|
||||
// if no restarts, set next_restart to last+1 so will not influence next
|
||||
|
||||
if (restart_flag && update->restrict_output == 0) {
|
||||
if (restart_flag_single) {
|
||||
if (restart_every_single)
|
||||
next_restart_single =
|
||||
(ntimestep/restart_every_single)*restart_every_single +
|
||||
restart_every_single;
|
||||
else {
|
||||
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;
|
||||
}
|
||||
} else next_restart_single = update->laststep + 1;
|
||||
if (restart_flag_double) {
|
||||
if (restart_every_double)
|
||||
next_restart_double =
|
||||
(ntimestep/restart_every_double)*restart_every_double +
|
||||
restart_every_double;
|
||||
else {
|
||||
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;
|
||||
}
|
||||
} else next_restart_double = update->laststep + 1;
|
||||
next_restart = MIN(next_restart_single,next_restart_double);
|
||||
} else next_restart = update->laststep + 1;
|
||||
if (restart_flag && update->restrict_output == 0) {
|
||||
if (restart_flag_single) {
|
||||
if (restart_every_single) {
|
||||
next_restart_single =
|
||||
(ntimestep/restart_every_single)*restart_every_single +
|
||||
restart_every_single;
|
||||
} else {
|
||||
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;
|
||||
}
|
||||
} else next_restart_single = update->laststep + 1;
|
||||
if (restart_flag_double) {
|
||||
if (restart_every_double)
|
||||
next_restart_double =
|
||||
(ntimestep/restart_every_double)*restart_every_double +
|
||||
restart_every_double;
|
||||
else {
|
||||
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;
|
||||
}
|
||||
} else next_restart_double = update->laststep + 1;
|
||||
next_restart = MIN(next_restart_single,next_restart_double);
|
||||
} 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
|
||||
// insure thermo output on last step of run
|
||||
// thermo may invoke computes so wrap with clear/add
|
||||
|
||||
modify->clearstep_compute();
|
||||
modify->clearstep_compute();
|
||||
|
||||
thermo->header();
|
||||
thermo->compute(0);
|
||||
last_thermo = ntimestep;
|
||||
thermo->header();
|
||||
thermo->compute(0);
|
||||
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 = (ntimestep/thermo_every)*thermo_every + thermo_every;
|
||||
next_thermo = MIN(next_thermo,update->laststep);
|
||||
} else next_thermo = update->laststep;
|
||||
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 = (ntimestep/thermo_every)*thermo_every + thermo_every;
|
||||
next_thermo = MIN(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,next_thermo);
|
||||
}
|
||||
next = MIN(next_dump_any,next_restart);
|
||||
next = MIN(next,next_thermo);
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
perform all output for this timestep
|
||||
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
|
||||
------------------------------------------------------------------------- */
|
||||
/* ----------------------------------------------------------------------
|
||||
perform all output for this timestep
|
||||
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
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
void Output::write(bigint ntimestep)
|
||||
{
|
||||
// perform dump if its next_dump = current ntimestep
|
||||
// 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_any to smallest next_dump
|
||||
// wrap step dumps that invoke computes or do variable eval with clear/add
|
||||
// NOTE:
|
||||
// not wrapping time dumps means that Integrate::ev_set()
|
||||
// needs to trigger all per-atom eng/virial computes
|
||||
// on a timestep where any time dump will be output
|
||||
// could wrap time dumps as well, if timestep size did not vary
|
||||
// if wrap when timestep size varies frequently,
|
||||
// then can do many unneeded addstep() --> inefficient
|
||||
// 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
|
||||
// what other command may have added it
|
||||
void Output::write(bigint ntimestep)
|
||||
{
|
||||
// perform dump if its next_dump = current ntimestep
|
||||
// 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_any to smallest next_dump
|
||||
// wrap step dumps that invoke computes or do variable eval with clear/add
|
||||
// NOTE:
|
||||
// not wrapping time dumps means that Integrate::ev_set()
|
||||
// needs to trigger all per-atom eng/virial computes
|
||||
// on a timestep where any time dump will be output
|
||||
// could wrap time dumps as well, if timestep size did not vary
|
||||
// if wrap when timestep size varies frequently,
|
||||
// then can do many unneeded addstep() --> inefficient
|
||||
// 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
|
||||
// what other command may have added it
|
||||
|
||||
if (next_dump_any == ntimestep) {
|
||||
next_dump_any = next_time_dump_any = MAXBIGINT;
|
||||
if (next_dump_any == ntimestep) {
|
||||
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 (last_dump[idump] == ntimestep) continue;
|
||||
if (next_dump[idump] == ntimestep) {
|
||||
if (last_dump[idump] == ntimestep) continue;
|
||||
|
||||
if (mode_dump[idump] == 0 &&
|
||||
(dump[idump]->clearstep || var_dump[idump]))
|
||||
modify->clearstep_compute();
|
||||
if (mode_dump[idump] == 0 &&
|
||||
(dump[idump]->clearstep || var_dump[idump]))
|
||||
modify->clearstep_compute();
|
||||
|
||||
// perform dump
|
||||
// reset next_dump and next_time_dump, 1 arg for write()
|
||||
// perform dump
|
||||
// set next_dump and next_time_dump
|
||||
|
||||
dump[idump]->write();
|
||||
last_dump[idump] = ntimestep;
|
||||
calculate_next_dump(WRITE,idump,ntimestep);
|
||||
dump[idump]->write();
|
||||
last_dump[idump] = ntimestep;
|
||||
calculate_next_dump(WRITE,idump,ntimestep);
|
||||
|
||||
if (mode_dump[idump] == 0 &&
|
||||
(dump[idump]->clearstep || var_dump[idump]))
|
||||
modify->addstep_compute(next_dump[idump]);
|
||||
}
|
||||
if (mode_dump[idump] == 0 &&
|
||||
(dump[idump]->clearstep || var_dump[idump]))
|
||||
modify->addstep_compute(next_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_dump_any = MIN(next_dump_any,next_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_dump_any = MIN(next_dump_any,next_dump[idump]);
|
||||
}
|
||||
}
|
||||
|
||||
// next_restart does not force output on last step of run
|
||||
// for toggle = 0, replace "*" with current timestep in restart filename
|
||||
// next restart variable may invoke computes so wrap with clear/add
|
||||
// next_restart does not force output on last step of run
|
||||
// for toggle = 0, replace "*" with current timestep in restart filename
|
||||
// next restart variable may invoke computes so wrap with clear/add
|
||||
|
||||
if (next_restart == ntimestep) {
|
||||
if (next_restart_single == ntimestep) {
|
||||
if (next_restart == 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;
|
||||
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 (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;
|
||||
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 (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);
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
// insure next_thermo forces output on last step of run
|
||||
// thermo may invoke computes so wrap with clear/add
|
||||
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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
// insure next_thermo forces output on last step of run
|
||||
// thermo may invoke computes so wrap with clear/add
|
||||
|
||||
// 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 = MIN(next,next_thermo);
|
||||
}
|
||||
// next = next timestep any output will be done
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
force a snapshot to be written for all dumps
|
||||
called from PRD and TAD
|
||||
------------------------------------------------------------------------- */
|
||||
next = MIN(next_dump_any,next_restart);
|
||||
next = MIN(next,next_thermo);
|
||||
}
|
||||
|
||||
void Output::write_dump(bigint ntimestep)
|
||||
{
|
||||
for (int idump = 0; idump < ndump; idump++) {
|
||||
dump[idump]->write();
|
||||
last_dump[idump] = ntimestep;
|
||||
}
|
||||
}
|
||||
/* ----------------------------------------------------------------------
|
||||
force a snapshot to be written for all dumps
|
||||
called from PRD and TAD
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
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::write_dump(bigint ntimestep)
|
||||
{
|
||||
for (int idump = 0; idump < ndump; idump++) {
|
||||
dump[idump]->write();
|
||||
last_dump[idump] = ntimestep;
|
||||
}
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
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)
|
||||
{
|
||||
// dump mode is by timestep
|
||||
// just set next_dump
|
||||
{
|
||||
// dump mode is by timestep
|
||||
// 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 = WRITE: increment nextdump by every_dump
|
||||
// which = SETUP: next_dump = next multiple of every_dump
|
||||
// which = WRITE: increment next_dump by every_dump
|
||||
// current step is already multiple of every_dump
|
||||
|
||||
if (which == SETUP)
|
||||
next_dump[idump] = (ntimestep/every_dump[idump])*every_dump[idump] + every_dump[idump];
|
||||
else if (which == WRITE)
|
||||
next_dump[idump] += every_dump[idump];
|
||||
if (which == SETUP)
|
||||
next_dump[idump] = (ntimestep/every_dump[idump])*every_dump[idump] + every_dump[idump];
|
||||
else if (which == WRITE)
|
||||
next_dump[idump] += every_dump[idump];
|
||||
|
||||
} else {
|
||||
next_dump[idump] = static_cast<bigint>
|
||||
(input->variable->compute_equal(ivar_dump[idump]));
|
||||
if (next_dump[idump] <= ntimestep)
|
||||
error->all(FLERR,"Dump every variable returned a bad timestep");
|
||||
}
|
||||
} else {
|
||||
next_dump[idump] = static_cast<bigint>
|
||||
(input->variable->compute_equal(ivar_dump[idump]));
|
||||
if (next_dump[idump] <= ntimestep)
|
||||
error->all(FLERR,"Dump every variable returned a bad timestep");
|
||||
}
|
||||
|
||||
// dump mode is by simulation time
|
||||
// set next_time_dump and next_dump
|
||||
// dump mode is by simulation time
|
||||
// set next_time_dump and next_dump
|
||||
|
||||
} else {
|
||||
} else {
|
||||
|
||||
bigint nextdump;
|
||||
double nexttime;
|
||||
double tcurrent = update->atime +
|
||||
(ntimestep - update->atimestep) * update->dt;
|
||||
bigint nextdump;
|
||||
double nexttime;
|
||||
double tcurrent = update->atime +
|
||||
(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 = WRITE: increment nexttime by every_time_dump
|
||||
// which = RESET_DT: no change to previous nexttime (only timestep has changed)
|
||||
// which = SETUP: nexttime = next multiple of every_time_dump
|
||||
// which = WRITE: increment nexttime by every_time_dump
|
||||
// which = RESET_DT: no change to previous nexttime (only timestep has changed)
|
||||
|
||||
switch (which) {
|
||||
case SETUP:
|
||||
nexttime = static_cast<bigint> (tcurrent/every_time_dump[idump]) *
|
||||
every_time_dump[idump] + every_time_dump[idump];
|
||||
break;
|
||||
switch (which) {
|
||||
case SETUP:
|
||||
nexttime = static_cast<bigint> (tcurrent/every_time_dump[idump]) *
|
||||
every_time_dump[idump] + every_time_dump[idump];
|
||||
break;
|
||||
|
||||
case WRITE:
|
||||
nexttime = next_time_dump[idump] + every_time_dump[idump];
|
||||
break;
|
||||
case WRITE:
|
||||
nexttime = next_time_dump[idump] + every_time_dump[idump];
|
||||
break;
|
||||
|
||||
case RESET_DT:
|
||||
nexttime = next_time_dump[idump];
|
||||
break;
|
||||
case RESET_DT:
|
||||
nexttime = next_time_dump[idump];
|
||||
break;
|
||||
|
||||
default:
|
||||
nexttime = 0;
|
||||
error->all(FLERR,"Unexpected argument to calculate_next_dump");
|
||||
}
|
||||
default:
|
||||
nexttime = 0;
|
||||
error->all(FLERR,"Unexpected argument to calculate_next_dump");
|
||||
}
|
||||
|
||||
nextdump = ntimestep +
|
||||
static_cast<bigint> ((nexttime - tcurrent - EPSDT*update->dt) / update->dt) + 1;
|
||||
nextdump = ntimestep +
|
||||
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) {
|
||||
double tnext = update->atime +
|
||||
(ntimestep+1 - update->atimestep) * update->dt;
|
||||
int multiple = static_cast<int>
|
||||
((tnext - nexttime) / every_time_dump[idump]);
|
||||
nexttime = nexttime + (multiple+1)*every_time_dump[idump];
|
||||
nextdump = ntimestep +
|
||||
static_cast<bigint> ((nexttime - tcurrent - EPSDT*update->dt) / update->dt) + 1;
|
||||
}
|
||||
if (nextdump == ntimestep) {
|
||||
double tnext = update->atime +
|
||||
(ntimestep+1 - update->atimestep) * update->dt;
|
||||
int multiple = static_cast<int>
|
||||
((tnext - nexttime) / every_time_dump[idump]);
|
||||
nexttime = nexttime + (multiple+1)*every_time_dump[idump];
|
||||
nextdump = ntimestep +
|
||||
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
|
||||
// unless next_time_dump < 0.0, which means variable never yet evaluated
|
||||
// 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
|
||||
|
||||
if (which < RESET_DT || next_time_dump[idump] < 0.0) {
|
||||
nexttime = input->variable->compute_equal(ivar_dump[idump]);
|
||||
} else
|
||||
nexttime = next_time_dump[idump];
|
||||
if (which < RESET_DT || next_time_dump[idump] < 0.0) {
|
||||
nexttime = input->variable->compute_equal(ivar_dump[idump]);
|
||||
} else
|
||||
nexttime = next_time_dump[idump];
|
||||
|
||||
if (nexttime <= tcurrent)
|
||||
error->all(FLERR,"Dump every/time variable returned a bad time");
|
||||
if (nexttime <= tcurrent)
|
||||
error->all(FLERR,"Dump every/time variable returned a bad time");
|
||||
|
||||
nextdump = ntimestep +
|
||||
static_cast<bigint> ((nexttime - tcurrent - EPSDT*update->dt) / update->dt) + 1;
|
||||
if (nextdump <= ntimestep)
|
||||
error->all(FLERR,"Dump every/time variable too small for next timestep");
|
||||
}
|
||||
nextdump = ntimestep +
|
||||
static_cast<bigint> ((nexttime - tcurrent - EPSDT*update->dt) / update->dt) + 1;
|
||||
if (nextdump <= ntimestep)
|
||||
error->all(FLERR,"Dump every/time variable too small for next timestep");
|
||||
}
|
||||
|
||||
next_time_dump[idump] = nexttime;
|
||||
next_dump[idump] = nextdump;
|
||||
}
|
||||
}
|
||||
next_time_dump[idump] = nexttime;
|
||||
next_dump[idump] = nextdump;
|
||||
}
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
@ -589,112 +589,112 @@ int Output::check_time_dumps(bigint ntimestep)
|
||||
return nowflag;
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
force restart file(s) to be written
|
||||
called from PRD and TAD
|
||||
------------------------------------------------------------------------- */
|
||||
/* ----------------------------------------------------------------------
|
||||
force restart file(s) to be written
|
||||
called from PRD and TAD
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
void Output::write_restart(bigint ntimestep)
|
||||
{
|
||||
if (restart_flag_single) {
|
||||
std::string file = restart1;
|
||||
std::size_t found = file.find('*');
|
||||
if (found != std::string::npos)
|
||||
file.replace(found,1,fmt::format("{}",update->ntimestep));
|
||||
restart->write(file);
|
||||
}
|
||||
void Output::write_restart(bigint ntimestep)
|
||||
{
|
||||
if (restart_flag_single) {
|
||||
std::string file = restart1;
|
||||
std::size_t found = file.find('*');
|
||||
if (found != std::string::npos)
|
||||
file.replace(found,1,fmt::format("{}",update->ntimestep));
|
||||
restart->write(file);
|
||||
}
|
||||
|
||||
if (restart_flag_double) {
|
||||
if (restart_toggle == 0) {
|
||||
restart->write(restart2a);
|
||||
restart_toggle = 1;
|
||||
} else {
|
||||
restart->write(restart2b);
|
||||
restart_toggle = 0;
|
||||
}
|
||||
}
|
||||
if (restart_flag_double) {
|
||||
if (restart_toggle == 0) {
|
||||
restart->write(restart2a);
|
||||
restart_toggle = 1;
|
||||
} else {
|
||||
restart->write(restart2b);
|
||||
restart_toggle = 0;
|
||||
}
|
||||
}
|
||||
|
||||
last_restart = ntimestep;
|
||||
}
|
||||
last_restart = ntimestep;
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
timestep is being changed, called by update->reset_timestep()
|
||||
for dumps, require that no dump is "active"
|
||||
meaning that a snapshot has already been output
|
||||
reset next output values for restart and thermo
|
||||
reset to smallest value >= new timestep
|
||||
if next timestep set by variable evaluation,
|
||||
eval for ntimestep-1, so current ntimestep can be returned if needed
|
||||
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
|
||||
------------------------------------------------------------------------- */
|
||||
/* ----------------------------------------------------------------------
|
||||
timestep is being changed, called by update->reset_timestep()
|
||||
for dumps, require that no dump is "active"
|
||||
meaning that a snapshot has already been output
|
||||
reset next output values for restart and thermo
|
||||
reset to smallest value >= new timestep
|
||||
if next timestep set by variable evaluation,
|
||||
eval for ntimestep-1, so current ntimestep can be returned if needed
|
||||
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
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
void Output::reset_timestep(bigint ntimestep)
|
||||
{
|
||||
next_dump_any = MAXBIGINT;
|
||||
for (int idump = 0; idump < ndump; idump++)
|
||||
if ((last_dump[idump] >= 0) && !update->whichflag && !dump[idump]->multifile)
|
||||
error->all(FLERR, "Cannot reset timestep with active dump - must undump first");
|
||||
void Output::reset_timestep(bigint ntimestep)
|
||||
{
|
||||
next_dump_any = MAXBIGINT;
|
||||
for (int idump = 0; idump < ndump; idump++)
|
||||
if ((last_dump[idump] >= 0) && !update->whichflag && !dump[idump]->multifile)
|
||||
error->all(FLERR, "Cannot reset timestep with active dump - must undump first");
|
||||
|
||||
if (restart_flag_single) {
|
||||
if (restart_every_single) {
|
||||
next_restart_single =
|
||||
(ntimestep/restart_every_single)*restart_every_single;
|
||||
if (next_restart_single < ntimestep)
|
||||
next_restart_single += restart_every_single;
|
||||
} else {
|
||||
modify->clearstep_compute();
|
||||
update->ntimestep--;
|
||||
auto nextrestart = static_cast<bigint>
|
||||
(input->variable->compute_equal(ivar_restart_single));
|
||||
if (nextrestart < ntimestep)
|
||||
error->all(FLERR,"Restart variable returned a bad timestep");
|
||||
update->ntimestep++;
|
||||
next_restart_single = nextrestart;
|
||||
modify->addstep_compute(next_restart_single);
|
||||
}
|
||||
} else next_restart_single = update->laststep + 1;
|
||||
if (restart_flag_single) {
|
||||
if (restart_every_single) {
|
||||
next_restart_single =
|
||||
(ntimestep/restart_every_single)*restart_every_single;
|
||||
if (next_restart_single < ntimestep)
|
||||
next_restart_single += restart_every_single;
|
||||
} else {
|
||||
modify->clearstep_compute();
|
||||
update->ntimestep--;
|
||||
auto nextrestart = static_cast<bigint>
|
||||
(input->variable->compute_equal(ivar_restart_single));
|
||||
if (nextrestart < ntimestep)
|
||||
error->all(FLERR,"Restart variable returned a bad timestep");
|
||||
update->ntimestep++;
|
||||
next_restart_single = nextrestart;
|
||||
modify->addstep_compute(next_restart_single);
|
||||
}
|
||||
} else next_restart_single = update->laststep + 1;
|
||||
|
||||
if (restart_flag_double) {
|
||||
if (restart_every_double) {
|
||||
next_restart_double =
|
||||
(ntimestep/restart_every_double)*restart_every_double;
|
||||
if (next_restart_double < ntimestep)
|
||||
next_restart_double += restart_every_double;
|
||||
} else {
|
||||
modify->clearstep_compute();
|
||||
update->ntimestep--;
|
||||
auto nextrestart = static_cast<bigint>
|
||||
(input->variable->compute_equal(ivar_restart_double));
|
||||
if (nextrestart < ntimestep)
|
||||
error->all(FLERR,"Restart variable returned a bad timestep");
|
||||
update->ntimestep++;
|
||||
next_restart_double = nextrestart;
|
||||
modify->addstep_compute(next_restart_double);
|
||||
}
|
||||
} else next_restart_double = update->laststep + 1;
|
||||
if (restart_flag_double) {
|
||||
if (restart_every_double) {
|
||||
next_restart_double =
|
||||
(ntimestep/restart_every_double)*restart_every_double;
|
||||
if (next_restart_double < ntimestep)
|
||||
next_restart_double += restart_every_double;
|
||||
} else {
|
||||
modify->clearstep_compute();
|
||||
update->ntimestep--;
|
||||
auto nextrestart = static_cast<bigint>
|
||||
(input->variable->compute_equal(ivar_restart_double));
|
||||
if (nextrestart < ntimestep)
|
||||
error->all(FLERR,"Restart variable returned a bad timestep");
|
||||
update->ntimestep++;
|
||||
next_restart_double = nextrestart;
|
||||
modify->addstep_compute(next_restart_double);
|
||||
}
|
||||
} 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) {
|
||||
modify->clearstep_compute();
|
||||
update->ntimestep--;
|
||||
next_thermo = static_cast<bigint>
|
||||
(input->variable->compute_equal(ivar_thermo));
|
||||
if (next_thermo < ntimestep)
|
||||
error->all(FLERR,"Thermo_modify every variable returned a bad timestep");
|
||||
update->ntimestep++;
|
||||
next_thermo = MIN(next_thermo,update->laststep);
|
||||
modify->addstep_compute(next_thermo);
|
||||
} else if (thermo_every) {
|
||||
next_thermo = (ntimestep/thermo_every)*thermo_every;
|
||||
if (next_thermo < ntimestep) next_thermo += thermo_every;
|
||||
next_thermo = MIN(next_thermo,update->laststep);
|
||||
} else next_thermo = update->laststep;
|
||||
if (var_thermo) {
|
||||
modify->clearstep_compute();
|
||||
update->ntimestep--;
|
||||
next_thermo = static_cast<bigint>
|
||||
(input->variable->compute_equal(ivar_thermo));
|
||||
if (next_thermo < ntimestep)
|
||||
error->all(FLERR,"Thermo_modify every variable returned a bad timestep");
|
||||
update->ntimestep++;
|
||||
next_thermo = MIN(next_thermo,update->laststep);
|
||||
modify->addstep_compute(next_thermo);
|
||||
} else if (thermo_every) {
|
||||
next_thermo = (ntimestep/thermo_every)*thermo_every;
|
||||
if (next_thermo < ntimestep) next_thermo += thermo_every;
|
||||
next_thermo = MIN(next_thermo,update->laststep);
|
||||
} else next_thermo = update->laststep;
|
||||
|
||||
next = MIN(next_dump_any,next_restart);
|
||||
next = MIN(next,next_thermo);
|
||||
}
|
||||
next = MIN(next_dump_any,next_restart);
|
||||
next = MIN(next,next_thermo);
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
timestep size is being changed
|
||||
@ -728,7 +728,6 @@ void Output::reset_dt()
|
||||
next = MIN(next,next_thermo);
|
||||
}
|
||||
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
add a Dump to list of Dumps
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
@ -25,6 +25,7 @@ PairStyle(hybrid,PairHybrid);
|
||||
namespace LAMMPS_NS {
|
||||
|
||||
class PairHybrid : public Pair {
|
||||
friend class AtomVecDielectric;
|
||||
friend class ComputeSpin;
|
||||
friend class FixGPU;
|
||||
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