Merge remote-tracking branch 'github/develop' into howto-bulk-to-slab

This commit is contained in:
Axel Kohlmeyer
2025-03-25 15:40:55 -04:00
92 changed files with 1369 additions and 1517 deletions

View File

@ -216,7 +216,7 @@ and using the CMake settings:
``` sh
-D CMAKE_OSX_ARCHITECTURES=arm64;x86_64
-D CMAKE_OSX_DEPLOYMENT_TARGER=11.0
-D CMAKE_OSX_DEPLOYMENT_TARGET=11.0
```
This will add the compiler flags `-arch arm64 -arch x86_64
@ -324,6 +324,47 @@ At this point it should be possible to do a fast-forward merge of
### Push branches and tags
## LAMMPS Stable Update Release
After making a stable release, bugfixes from the 'develop' branch
are selectively backported to the 'maintenance' branch. This is
done with "git cherry-pick \<commit hash\>' wherever possible.
The LAMMPS\_UPDATE define in "src/version.h" is set to "Maintenance".
### Prerequesites
When a sufficient number of bugfixes has accumulated or an urgent
or important bugfix needs to be distributed a new stable update
release is made. To make this publicly visible a pull request
is submitted that will merge 'maintenance' into 'stable'. Before
merging, set LAMMPS\_UPDATE in "src/version.h" to "Update #" with
"#" indicating the update count (1, 2, and so on).
Also draft suitable release notes under https://github.com/lammps/lammps/releases
### Fast-forward merge of 'maintenance' into 'stable', apply tag, and publish
Do a fast-forward merge of 'maintenance' to 'stable' and then
apply the stable\_DMmmYYYY\_update# tag and push branch and tag
to GitHub. The corresponding pull request will be automatically
closed. Example:
```
git checkout maintenance
git pull
git checkout stable
git pull
git merge --ff-only maintenance
git tag -s -m 'Update 2 for Stable LAMMPS version 29 August 2024' stable_29Aug2024_update2
git push git@github.com:lammps/lammps.git --tags maintenance stable
```
Associate draft release notes with new tag and publish as "latest release".
On https://ci.lammps.org/ go to "dev", "stable" and manually execute
the "update\_release" task. This will update https://docs.lammps.org/stable
and prepare a stable tarball.
### Build and upload binary packages and source tarball to GitHub
The build procedure is the same as for the feature releases, only
that packages are built from the 'stable' branch.

View File

@ -431,8 +431,8 @@ else()
target_link_libraries(lammps PUBLIC mpi_stubs)
endif()
set(LAMMPS_SIZES "smallbig" CACHE STRING "LAMMPS integer sizes (smallsmall: all 32-bit, smallbig: 64-bit #atoms #timesteps, bigbig: also 64-bit imageint, 64-bit atom ids)")
set(LAMMPS_SIZES_VALUES smallbig bigbig smallsmall)
set(LAMMPS_SIZES "smallbig" CACHE STRING "LAMMPS integer sizes (smallbig: 64-bit #atoms #timesteps, bigbig: also 64-bit imageint, 64-bit atom ids)")
set(LAMMPS_SIZES_VALUES smallbig bigbig)
set_property(CACHE LAMMPS_SIZES PROPERTY STRINGS ${LAMMPS_SIZES_VALUES})
validate_option(LAMMPS_SIZES LAMMPS_SIZES_VALUES)
string(TOUPPER ${LAMMPS_SIZES} LAMMPS_SIZES)

View File

@ -260,8 +260,8 @@ endif()
################
# integer size selection
set(LAMMPS_SIZES "smallbig" CACHE STRING "LAMMPS integer sizes (smallsmall: all 32-bit, smallbig: 64-bit #atoms #timesteps, bigbig: also 64-bit imageint, 64-bit atom ids)")
set(LAMMPS_SIZES_VALUES smallbig bigbig smallsmall)
set(LAMMPS_SIZES "smallbig" CACHE STRING "LAMMPS integer sizes (smallbig: 64-bit #atoms #timesteps, bigbig: also 64-bit imageint, 64-bit atom ids)")
set(LAMMPS_SIZES_VALUES smallbig bigbig)
set_property(CACHE LAMMPS_SIZES PROPERTY STRINGS ${LAMMPS_SIZES_VALUES})
validate_option(LAMMPS_SIZES LAMMPS_SIZES_VALUES)
string(TOUPPER ${LAMMPS_SIZES} LAMMPS_SIZES)

View File

@ -119,6 +119,13 @@ configured) and additional files like LAMMPS API headers, manpages,
potential and force field files. The location of the installation tree
defaults to ``${HOME}/.local``.
.. note::
If you have set `-D CMAKE_INSTALL_PREFIX` to install LAMMPS into a
system location on a Linux machine , you may also have to run (as
root) the `ldconfig` program to update the cache file for fast lookup
of system shared libraries.
.. _cmake_options:
Configuration and build options

View File

@ -255,11 +255,10 @@ Traditional make
Before building LAMMPS, you must build the GPU library in ``lib/gpu``\ .
You can do this manually if you prefer; follow the instructions in
``lib/gpu/README``. Note that the GPU library uses MPI calls, so you must
use the same MPI library (or the STUBS library) settings as the main
LAMMPS code. This also applies to the ``-DLAMMPS_BIGBIG``\ ,
``-DLAMMPS_SMALLBIG``\ , or ``-DLAMMPS_SMALLSMALL`` settings in whichever
Makefile you use.
``lib/gpu/README``. Note that the GPU library uses MPI calls, so you
must use the same MPI library (or the STUBS library) settings as the
main LAMMPS code. This also applies to the ``-DLAMMPS_BIGBIG`` or
``-DLAMMPS_SMALLBIG`` settings in whichever Makefile you use.
You can also build the library in one step from the ``lammps/src`` dir,
using a command like these, which simply invokes the ``lib/gpu/Install.py``

View File

@ -221,9 +221,10 @@ HTML as a quick-n-dirty way of checking your manual page.
This translation uses `Pandoc <https://pandoc.org>`_ instead of Sphinx
and thus all special Sphinx features (cross-references, advanced tables,
embedding of Python docstring and doxygen documentation, and so on) will
not render correctly. But this is a **very fast** way to check the content
as HTML while writing the documentation.
embedding of Python docstrings or doxygen documentation, and so on) will
not render correctly. Most embedded math should render correctly. This
is a **very fast** way to check the syntax and layout of a documentation
file translated to HTML while writing it.
To translate **all** manual pages, you can type ``make fasthtml`` at the
command line. The translated HTML files are then in the ``fasthtml``

View File

@ -13,7 +13,8 @@ explains how to do this for building both with CMake and make.
* `Size of LAMMPS integer types and size limits`_
* `Read or write compressed files`_
* `Output of JPEG, PNG, and movie files`_ via the :doc:`dump image <dump_image>` or :doc:`dump movie <dump_image>` commands
* `Support for downloading files`_
* `Support for downloading files from the input`_
* `Prevent download of large potential files`_
* `Memory allocation alignment`_
* `Workaround for long long integers`_
* `Exception handling when using LAMMPS as a library`_ to capture errors
@ -315,7 +316,7 @@ large counters can become before "rolling over". The default setting of
.. code-block:: bash
-D LAMMPS_SIZES=value # smallbig (default) or bigbig or smallsmall
-D LAMMPS_SIZES=value # smallbig (default) or bigbig
If the variable is not set explicitly, "smallbig" is used.
@ -326,7 +327,7 @@ large counters can become before "rolling over". The default setting of
.. code-block:: make
LMP_INC = -DLAMMPS_SMALLBIG # or -DLAMMPS_BIGBIG or -DLAMMPS_SMALLSMALL
LMP_INC = -DLAMMPS_SMALLBIG # or -DLAMMPS_BIGBIG
The default setting is ``-DLAMMPS_SMALLBIG`` if nothing is specified
@ -335,34 +336,27 @@ LAMMPS system size restrictions
.. list-table::
:header-rows: 1
:widths: 18 27 28 27
:widths: 27 36 37
:align: center
* -
- smallbig
- bigbig
- smallsmall
* - Total atom count
- :math:`2^{63}` atoms (= :math:`9.223 \cdot 10^{18}`)
- :math:`2^{63}` atoms (= :math:`9.223 \cdot 10^{18}`)
- :math:`2^{31}` atoms (= :math:`2.147 \cdot 10^9`)
* - Total timesteps
- :math:`2^{63}` steps (= :math:`9.223 \cdot 10^{18}`)
- :math:`2^{63}` steps (= :math:`9.223 \cdot 10^{18}`)
- :math:`2^{31}` steps (= :math:`2.147 \cdot 10^9`)
* - Atom ID values
- :math:`1 \le i \le 2^{31} (= 2.147 \cdot 10^9)`
- :math:`1 \le i \le 2^{63} (= 9.223 \cdot 10^{18})`
- :math:`1 \le i \le 2^{31} (= 2.147 \cdot 10^9)`
* - Image flag values
- :math:`-512 \le i \le 511`
- :math:`- 1\,048\,576 \le i \le 1\,048\,575`
- :math:`-512 \le i \le 511`
The "bigbig" setting increases the size of image flags and atom IDs over
"smallbig" and the "smallsmall" setting is only needed if your machine
does not support 64-bit integers or incurs performance penalties when
using them.
the default "smallbig" setting.
These are limits for the core of the LAMMPS code, specific features or
some styles may impose additional limits. The :ref:`ATC
@ -516,8 +510,8 @@ during a run.
.. _libcurl:
Support for downloading files
-----------------------------
Support for downloading files from the input
--------------------------------------------
.. versionadded:: 29Aug2024
@ -560,6 +554,25 @@ LAMMPS is compiled accordingly which needs the following settings:
----------
.. _download_pot:
Prevent download of large potential files
-----------------------------------------
.. versionadded:: 8Feb2023
LAMMPS bundles a selection of potential files in the ``potentials``
folder as examples of how those kinds of potential files look like and
for use with the provided input examples in the ``examples`` tree. To
keep the size of the distributed LAMMPS source package small, very large
potential files (> 5 MBytes) are not bundled, but only downloaded on
demand when the :doc:`corresponding package <Packages_list>` is
installed. This automatic download can be prevented when :doc:`building
LAMMPS with CMake <Build_cmake>` by adding the setting `-D
DOWNLOAD_POTENTIALS=off` when configuring.
----------
.. _align:
Memory allocation alignment

View File

@ -6233,8 +6233,9 @@ Doc page with :doc:`WARNING messages <Errors_warnings>`
Atom IDs must be positive integers.
*One or more atom IDs is too big*
The limit on atom IDs is set by the SMALLBIG, BIGBIG, SMALLSMALL
setting in your LAMMPS build. See the :doc:`Build settings <Build_settings>` page for more info.
The limit on atom IDs is set by the SMALLBIG, BIGBIG
setting in your LAMMPS build. See the
:doc:`Build settings <Build_settings>` page for more info.
*One or more atom IDs is zero*
Either all atoms IDs must be zero or none of them.

View File

@ -2773,8 +2773,7 @@ Procedures Bound to the :f:type:`lammps` Derived Type
END SUBROUTINE external_callback
END INTERFACE
where ``c_bigint`` is ``c_int`` if ``-DLAMMPS_SMALLSMALL`` was used and
``c_int64_t`` otherwise; and ``c_tagint`` is ``c_int64_t`` if
where ``c_bigint`` is ``c_int64_t`` and ``c_tagint`` is ``c_int64_t`` if
``-DLAMMPS_BIGBIG`` was used and ``c_int`` otherwise.
The argument *caller* to :f:subr:`set_fix_external_callback` is unlimited

View File

@ -2,14 +2,18 @@ Moltemplate Tutorial
====================
In this tutorial, we are going to use the tool :ref:`Moltemplate
<moltemplate>` to set up a classical molecular dynamic simulation using
the :ref:`OPLS-AA force field <OPLSAA96>`. The first
task is to describe an organic compound and create a complete input deck
for LAMMPS. The second task is to map the OPLS-AA force field to a
molecular sample created with an external tool, e.g. PACKMOL, and
exported as a PDB file. The files used in this tutorial can be found
in the ``tools/moltemplate/tutorial-files`` folder of the LAMMPS
source code distribution.
<Moltemplate1>` from https://moltemplate.org/ to set up a classical
molecular dynamic simulation using the :ref:`OPLS-AA force field
<oplsaa2024>`. The first task is to describe an organic compound and
create a complete input deck for LAMMPS. The second task is to use
moltemplate to build a polymer. The third task is to map the OPLS-AA
force field to a molecular sample created with an external tool,
e.g. PACKMOL, and exported as a PDB file. The files used in this
tutorial can be found in the ``tools/moltemplate/tutorial-files`` folder
of the LAMMPS source code distribution.
Many more examples can be found here: https://moltemplate.org/examples.html
Simulating an organic solvent
"""""""""""""""""""""""""""""
@ -17,14 +21,13 @@ Simulating an organic solvent
This example aims to create a cubic box of the organic solvent
formamide.
The first step is to create a molecular topology in the
LAMMPS-template (LT) file format representing a single molecule, which
will be stored in a Moltemplate object called ``_FAM inherits OPLSAA {}``.
The first step is to create a molecular topology in the LAMMPS-template
(LT) file format representing a single molecule, which will be
stored in a Moltemplate object called ``_FAM inherits OPLSAA {}``.
This command states that the object ``_FAM`` is based on an existing
object called ``OPLSAA``, which contains OPLS-AA parameters, atom type
definitions, partial charges, masses and bond-angle rules for many organic
and biological compounds.
The atomic structure is the starting point to populate the command
``write('Data Atoms') {}``, which will write the ``Atoms`` section in the
LAMMPS data file. The OPLS-AA force field uses the ``atom_style full``,
@ -36,21 +39,23 @@ to the ``molID``, except that the same variable is used for the whole
molecule. The atom types are assigned using ``@``-type variables. The
assignment of atom types (e.g. ``@atom:177``, ``@atom:178``) is done using
the OPLS-AA atom types defined in the "In Charges" section of the file
``oplsaa.lt``, looking for a reasonable match with the description of the atom.
``oplsaa2024.lt``, looking for a reasonable match with the description of the atom.
The resulting file (``formamide.lt``) follows:
.. code-block:: bash
import /usr/local/moltemplate/moltemplate/force_fields/oplsaa2024.lt # defines OPLSAA
_FAM inherits OPLSAA {
# atomID molID atomType charge coordX coordY coordZ
write('Data Atoms') {
$atom:C00 $mol @atom:177 0.00 0.100 0.490 0.0
$atom:O01 $mol @atom:178 0.00 1.091 -0.250 0.0
$atom:N02 $mol @atom:179 0.00 -1.121 -0.181 0.0
$atom:H03 $mol @atom:182 0.00 -2.013 0.272 0.0
$atom:H04 $mol @atom:182 0.00 -1.056 -1.190 0.0
$atom:H05 $mol @atom:221 0.00 0.144 1.570 0.0
$atom:C00 $mol @atom:235 0.00 0.100 0.490 0.0
$atom:O01 $mol @atom:236 0.00 1.091 -0.250 0.0
$atom:N02 $mol @atom:237 0.00 -1.121 -0.181 0.0
$atom:H03 $mol @atom:240 0.00 -2.013 0.272 0.0
$atom:H04 $mol @atom:240 0.00 -1.056 -1.190 0.0
$atom:H05 $mol @atom:279 0.00 0.144 1.570 0.0
}
# A list of the bonds in the molecule:
@ -64,16 +69,17 @@ The resulting file (``formamide.lt``) follows:
}
}
You don't have to specify the charge in this example because they will
be assigned according to the atom type. Analogously, only a
"Data Bond List" section is needed as the atom type will determine the
bond type. The other bonded interactions (e.g. angles,
dihedrals, and impropers) will be automatically generated by
You don't have to specify the charge in this example because the OPLSAA
force-field assigns charge according to the atom type. (This is not true
when using other force fields.) A "Data Bond List" section is needed as
the atom type will determine the bond type. The other bonded interactions
(e.g. angles, dihedrals, and impropers) will be automatically generated by
Moltemplate.
If the simulation is non-neutral, or Moltemplate complains that you have
missing bond, angle, or dihedral types, this means at least one of your
atom types is incorrect.
If the simulation is not charge-neutral, or Moltemplate complains that
you have missing bond, angle, or dihedral types, this probably means that
at least one of your atom types is incorrect (or that perhaps there is no
suitable atom type currently defined in the ``oplsaa2024.lt`` file).
The second step is to create a master file with instructions to build a
starting structure and the LAMMPS commands to run an NPT simulation. The
@ -81,11 +87,9 @@ master file (``solv_01.lt``) follows:
.. code-block:: bash
# Import the force field.
import /usr/local/moltemplate/moltemplate/force_fields/oplsaa.lt
import formamide.lt # after oplsaa.lt, as it depends on it.
import formamide.lt # Defines "_FAM" and OPLSAA
# Create the input sample.
# Distribute the molecules on a 5x5x5 cubic grid with spacing 4.6
solv = new _FAM [5].move( 4.6, 0, 0)
[5].move( 0, 4.6, 0)
[5].move( 0, 0, 4.6)
@ -98,8 +102,11 @@ master file (``solv_01.lt``) follows:
-11.5 11.5 zlo zhi
}
# Create an input deck for LAMMPS.
write_once("In Init"){
# Note: The lines below in the "In Run" section are often omitted.
write_once("In Run"){
# Create an input deck for LAMMPS.
# Run an NPT simulation.
# Input variables.
variable run string solv_01 # output name
variable ts equal 1 # timestep
@ -109,12 +116,6 @@ master file (``solv_01.lt``) follows:
variable equi equal 5000 # Equilibration steps
variable prod equal 30000 # Production steps
# PBC (set them before the creation of the box).
boundary p p p
}
# Run an NPT simulation.
write_once("In Run"){
# Derived variables.
variable tcouple equal \$\{ts\}*100
variable pcouple equal \$\{ts\}*1000
@ -143,7 +144,7 @@ master file (``solv_01.lt``) follows:
unfix NPT
}
The first two commands insert the content of files ``oplsaa.lt`` and
The first two commands insert the content of files ``oplsaa2024.lt`` and
``formamide.lt`` into the master file. At this point, we can use the
command ``solv = new _FAM [N]`` to create N copies of a molecule of type
``_FAM``. In this case, we create an array of 5*5*5 molecules on a cubic
@ -153,21 +154,37 @@ the sample was created from scratch, we also specify the simulation box
size in the "Data Boundary" section.
The LAMMPS setting for the force field are specified in the file
``oplsaa.lt`` and are written automatically in the input deck. We also
``oplsaa2024.lt`` and are written automatically in the input deck. We also
specify the boundary conditions and a set of variables in
the "In Init" section. The remaining commands to run an NPT simulation
the "In Init" section.
The remaining commands to run an NPT simulation
are written in the "In Run" section. Note that in this script, LAMMPS
variables are protected with the escape character ``\`` to distinguish
them from Moltemplate variables, e.g. ``\$\{run\}`` is a LAMMPS
variable that is written in the input deck as ``${run}``.
(Note: Moltemplate can be slow to run, so you need to change you run
settings frequently, I recommended moving those commands (from "In Run")
out of your .lt files and into a separate file. Moltemplate creates a
file named ``run.in.EXAMPLE`` for this purpose. You can put your run
settings and fixes that file and then invoke LAMMPS using
``mpirun -np 4 lmp -in run.in.EXAMPLE`` instead.)
Compile the master file with:
.. code-block:: bash
moltemplate.sh -overlay-all solv_01.lt
moltemplate.sh solv_01.lt
cleanup_moltemplate.sh # <-- optional: see below
And execute the simulation with the following:
(Note: The optional "cleanup_moltemplate.sh" command deletes
unused atom types, which sometimes makes LAMMPS run faster.
But it does not work with many-body pair styles or dreiding-style h-bonds.
Fortunately most force fields, including OPLSAA, don't use those features.)
Then execute the simulation with the following:
.. code-block:: bash
@ -180,15 +197,116 @@ And execute the simulation with the following:
Snapshot of the sample at the beginning and end of the simulation.
Rendered with Ovito.
Building a simple polymer
"""""""""""""""""""""""""
Moltemplate is particularly useful for building polymers (and other molecules
with sub-units). As an simple example, consider butane:
.. figure:: JPG/butane.jpg
The ``butane.lt`` file below defines Butane as a polymer containing
4 monomers (of type ``CH3``, ``CH2``, ``CH2``, ``CH3``).
.. code-block:: bash
import /usr/local/moltemplate/moltemplate/force_fields/oplsaa2024.lt # defines OPLSAA
CH3 inherits OPLSAA {
# atomID molID atomType charge coordX coordY coordZ
write("Data Atoms") {
$atom:c $mol:... @atom:54 0.0 0.000000 0.4431163 0.000000
$atom:h1 $mol:... @atom:60 0.0 0.000000 1.0741603 0.892431
$atom:h2 $mol:... @atom:60 0.0 0.000000 1.0741603 -0.892431
$atom:h3 $mol:... @atom:60 0.0 -0.892431 -0.1879277 0.000000
}
# (Using "$mol:..." indicates this object ("CH3") is part of a larger
# molecule. Moltemplate will share the molecule-ID with that molecule.)
# A list of the bonds within the "CH3" molecular sub-unit:
# BondID AtomID1 AtomID2
write('Data Bond List') {
$bond:ch1 $atom:c $atom:h1
$bond:ch2 $atom:c $atom:h2
$bond:ch3 $atom:c $atom:h3
}
}
CH2 inherits OPLSAA {
# atomID molID atomType charge coordX coordY coordZ
write("Data Atoms") {
$atom:c $mol:... @atom:57 0.0 0.000000 0.4431163 0.000000
$atom:h1 $mol:... @atom:60 0.0 0.000000 1.0741603 0.892431
$atom:h2 $mol:... @atom:60 0.0 0.000000 1.0741603 -0.892431
}
# A list of the bonds within the "CH2" molecular sub-unit:
# BondID AtomID1 AtomID2
write('Data Bond List') {
$bond:ch1 $atom:c $atom:h1
$bond:ch2 $atom:c $atom:h2
}
}
Butane inherits OPLSAA {
create_var {$mol} # optional:force all monomers to share the same molecule-ID
# - Create 4 monomers
# - Move them along the X axis using ".move()",
# - Rotate them 180 degrees with respect to the previous monomer
monomer1 = new CH3
monomer2 = new CH2.rot(180,1,0,0).move(1.2533223,0,0)
monomer3 = new CH2.move(2.5066446,0,0)
monomer4 = new CH3.rot(180,0,0,1).move(3.7599669,0,0)
# A list of the bonds connecting different monomers together:
write('Data Bond List') {
$bond:b1 $atom:monomer1/c $atom:monomer2/c
$bond:b2 $atom:monomer2/c $atom:monomer3/c
$bond:b3 $atom:monomer3/c $atom:monomer4/c
}
}
Again, you don't have to specify the charge in this example because OPLSAA
assigns charges according to the atom type.
This ``Butane`` object is a molecule which can be used anywhere other molecules
can be used. (You can arrange ``Butane`` molecules on a lattice, as we did previously.
You can also modify individual butane molecules by adding or deleting atoms or bonds.
You can add bonds between specific butane molecules or use ``Butane`` as a
subunit to define even larger molecules. See the moltemplate manual for details.)
How to build a complex polymer
""""""""""""""""""""""""""""""""""""""""""
A similar procedure can be used to create more complicated polymers,
such as the NIPAM polymer example shown below. For details, see:
https://github.com/jewettaij/moltemplate/tree/master/examples/all_atom/force_field_OPLSAA/NIPAM_polymer+water+ions
Mapping an existing structure
"""""""""""""""""""""""""""""
Another helpful way to use Moltemplate is mapping an existing molecular
sample to a force field. This is useful when a complex sample is
assembled from different simulations or created with specialized
software (e.g. PACKMOL). As in the previous example, all molecular
species in the sample must be defined using single-molecule Moltemplate
objects. For this example, we use a short polymer in a box containing
sample to a force field. This is useful when a complex sample is assembled
from different simulations or created with specialized software (e.g. PACKMOL).
(Note: The previous link shows how to build this entire system from scratch
using only moltemplate. However here we will assume instead that we obtained
a PDB file for this system using PACKMOL.)
As in the previous examples, all molecular species in the sample
are defined using single-molecule Moltemplate objects.
For this example, we use a short polymer in a box containing
water molecules and ions in the PDB file ``model.pdb``.
It is essential to understand that the order of atoms in the PDB file
@ -246,25 +364,25 @@ The resulting master LT file defining short annealing at a fixed volume
.. code-block:: bash
# Use the OPLS-AA force field for all species.
import /usr/local/moltemplate/moltemplate/force_fields/oplsaa.lt
import /usr/local/moltemplate/moltemplate/force_fields/oplsaa2024.lt
import PolyNIPAM.lt
# Define the SPC water and ions as in the OPLS-AA
Ca inherits OPLSAA {
write("Data Atoms"){
$atom:a1 $mol:. @atom:354 0.0 0.00000 0.00000 0.000000
$atom:a1 $mol:. @atom:412 0.0 0.00000 0.00000 0.000000
}
}
Cl inherits OPLSAA {
write("Data Atoms"){
$atom:a1 $mol:. @atom:344 0.0 0.00000 0.00000 0.000000
$atom:a1 $mol:. @atom:401 0.0 0.00000 0.00000 0.000000
}
}
SPC inherits OPLSAA {
write("Data Atoms"){
$atom:O $mol:. @atom:76 0. 0.0000000 0.00000 0.000000
$atom:H1 $mol:. @atom:77 0. 0.8164904 0.00000 0.5773590
$atom:H2 $mol:. @atom:77 0. -0.8164904 0.00000 0.5773590
$atom:O $mol:. @atom:9991 0. 0.0000000 0.00000 0.0000000
$atom:H1 $mol:. @atom:9990 0. 0.8164904 0.00000 0.5773590
$atom:H2 $mol:. @atom:9990 0. -0.8164904 0.00000 0.5773590
}
write("Data Bond List") {
$bond:OH1 $atom:O $atom:H1
@ -285,8 +403,15 @@ The resulting master LT file defining short annealing at a fixed volume
0 26 zlo zhi
}
# Define the input variables.
write_once("In Init"){
boundary p p p # "p p p" is the default. This line is optional.
neighbor 3 bin # (This line is also optional in this example.)
}
# Note: The lines below in the "In Run" section are often omitted.
# Run an NVT simulation.
write_once("In Run"){
# Input variables.
variable run string sample01 # output name
variable ts equal 2 # timestep
@ -294,13 +419,6 @@ The resulting master LT file defining short annealing at a fixed volume
variable p equal 1. # equilibrium pressure
variable equi equal 30000 # equilibration steps
# PBC (set them before the creation of the box).
boundary p p p
neighbor 3 bin
}
# Run an NVT simulation.
write_once("In Run"){
# Set the output.
thermo 1000
thermo_style custom step etotal evdwl ecoul elong ebond eangle &
@ -314,8 +432,8 @@ The resulting master LT file defining short annealing at a fixed volume
write_data \$\{run\}.min
# Set the constrains.
group watergroup type @atom:76 @atom:77
fix 0 watergroup shake 0.0001 10 0 b @bond:042_043 a @angle:043_042_043
group watergroup type @atom:9991 @atom:9990
fix 0 watergroup shake 0.0001 10 0 b @bond:spcO_spcH a @angle:spcH_spcO_spcH
# Short annealing.
timestep \$\{ts\}
@ -327,7 +445,7 @@ The resulting master LT file defining short annealing at a fixed volume
In this example, the water model is SPC and it is defined in the
``oplsaa.lt`` file with atom types ``@atom:76`` and ``@atom:77``. For
``oplsaa2024.lt`` file with atom types ``@atom:9991`` and ``@atom:9990``. For
water we also use the ``group`` and ``fix shake`` commands with
Moltemplate ``@``-type variables, to ensure consistency with the
numerical values assigned during compilation. To identify the bond and
@ -336,19 +454,20 @@ are:
.. code-block:: bash
replace{ @atom:76 @atom:76_b042_a042_d042_i042 }
replace{ @atom:77 @atom:77_b043_a043_d043_i043 }
replace{ @atom:9991 @atom:9991_bspcO_aspcO_dspcO_ispcO }
replace{ @atom:9990 @atom:9990_bspcH_aspcH_dspcH_ispcH }
From which we can identify the following "Data Bonds By Type":
``@bond:042_043 @atom:*_b042*_a*_d*_i* @atom:*_b043*_a*_d*_i*`` and
"Data Angles By Type": ``@angle:043_042_043 @atom:*_b*_a043*_d*_i*
@atom:*_b*_a042*_d*_i* @atom:*_b*_a043*_d*_i*``
``@bond:spcO_spcH @atom:*_bspcO*_a*_d*_i* @atom:*_bspcH*_a*_d*_i*``
and "Data Angles By Type":
``@angle:spcH_spcO_spcH @atom:*_b*_aspcH*_d*_i* @atom:*_b*_aspcO*_d*_i* @atom:*_b*_aspcH*_d*_i*``
Compile the master file with:
.. code-block:: bash
moltemplate.sh -overlay-all -pdb model.pdb sample01.lt
moltemplate.sh -pdb model.pdb sample01.lt
cleanup_moltemplate.sh
And execute the simulation with the following:
@ -363,8 +482,13 @@ And execute the simulation with the following:
Sample visualized with Ovito loading the trajectory into the DATA
file written after minimization.
------------
.. _OPLSAA96:
.. _oplsaa2024:
**(OPLS-AA)** Jorgensen, Maxwell, Tirado-Rives, J Am Chem Soc, 118(45), 11225-11236 (1996).
**(OPLS-AA)** Jorgensen, W.L., Ghahremanpour, M.M., Saar, A., Tirado-Rives, J., J. Phys. Chem. B, 128(1), 250-262 (2024).
.. _Moltemplate1:
**(Moltemplate)** Jewett et al., J. Mol. Biol., 433(11), 166841 (2021)

View File

@ -62,17 +62,17 @@ with :ref:`PNG, JPEG and FFMPEG output support <graphics>` enabled.
cd $LAMMPS_DIR/src
# add packages if necessary
# add LAMMPS packages if necessary
make yes-MOLECULE
make yes-PYTHON
# compile shared library using Makefile
make mpi mode=shlib LMP_INC="-DLAMMPS_PNG -DLAMMPS_JPEG -DLAMMPS_FFMPEG" JPG_LIB="-lpng -ljpeg"
Step 2: Installing the LAMMPS Python package
""""""""""""""""""""""""""""""""""""""""""""
Step 2: Installing the LAMMPS Python module
"""""""""""""""""""""""""""""""""""""""""""
Next install the LAMMPS Python package into your current Python installation with:
Next install the LAMMPS Python module into your current Python installation with:
.. code-block:: bash
@ -89,6 +89,29 @@ privileges) or into your personal Python module folder.
Recompiling the shared library requires re-installing the Python
package.
.. _externally_managed:
.. admonition:: Handling an "externally-managed-environment" Error
:class: Hint
Some Python installations made through Linux distributions
(e.g. Ubuntu 24.04LTS or later) will prevent installing the LAMMPS
Python module into a system folder or a corresponding folder of the
individual user as attempted by ``make install-python`` with an error
stating that an *externally managed* python installation must be only
managed by the same package package management tool. This is an
optional setting, so not all Linux distributions follow it currently
(Spring 2025). The reasoning and explanations for this error can be
found in the `Python Packaging User Guide
<https://packaging.python.org/en/latest/specifications/externally-managed-environments/>`_
These guidelines suggest to create a virtual environment and install
the LAMMPS Python module there (see below). This is generally a good
idea and the LAMMPS developers recommend this, too. If, however, you
want to proceed and install the LAMMPS Python module regardless, you
can install the "wheel" file (see above) manually with the ``pip``
command by adding the ``--break-system-packages`` flag.
Installation inside of a virtual environment
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 94 KiB

BIN
doc/src/JPG/butane.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -19,9 +19,9 @@ there are now a few requirements for including new changes or extensions.
be added.
- New features should also be implemented and documented not just
for the C interface, but also the Python and Fortran interfaces.
- All additions should work and be compatible with ``-DLAMMPS_BIGBIG``,
``-DLAMMPS_SMALLBIG``, ``-DLAMMPS_SMALLSMALL`` as well as when
compiling with and without MPI support.
- All additions should work and be compatible with
``-DLAMMPS_BIGBIG``, ``-DLAMMPS_SMALLBIG`` as well as when compiling
with and without MPI support.
- The ``library.h`` file should be kept compatible to C code at
a level similar to C89. Its interfaces may not reference any
custom data types (e.g. ``bigint``, ``tagint``, and so on) that

View File

@ -110,13 +110,16 @@ folder that the dynamic loader searches or inside of the installed
.. code-block:: bash
python install.py -p <python package> -l <shared library> -v <version.h file> [-n]
python install.py -p <python package> -l <shared library> -v <version.h file> [-n] [-f]
* The ``-p`` flag points to the ``lammps`` Python package folder to be installed,
* the ``-l`` flag points to the LAMMPS shared library file to be installed,
* the ``-v`` flag points to the LAMMPS version header file to extract the version date,
* and the optional ``-n`` instructs the script to only build a wheel file
but not attempt to install it.
* the optional ``-n`` instructs the script to only build a wheel file but not attempt
to install it,
* and the optional ``-f`` argument instructs the script to force installation even if
pip would otherwise refuse installation with an
:ref:`error about externally managed environments <externally_managed>`.
.. tab:: Virtual environment
@ -198,6 +201,10 @@ folder that the dynamic loader searches or inside of the installed
The ``PYTHONPATH`` needs to point to the parent folder that contains the ``lammps`` package!
In case you run into an "externally-managed-environment" error when
trying to install the LAMMPS Python module, please refer to
:ref:`corresponding paragraph <externally_managed>` in the Python HOWTO
page to learn about options for handling this error.
To verify if LAMMPS can be successfully started from Python, start the
Python interpreter, load the ``lammps`` Python module and create a

View File

@ -930,7 +930,7 @@ dependencies and redirects the download to the local cache.
mkdir build
cd build
cmake -D LAMMPS_DOWNLOADS_URL=${HTTP_CACHE_URL} -C "${LAMMPS_HTTP_CACHE_CONFIG}" -C ../cmake/presets/most.cmake ../cmake
cmake -D LAMMPS_DOWNLOADS_URL=${HTTP_CACHE_URL} -C "${LAMMPS_HTTP_CACHE_CONFIG}" -C ../cmake/presets/most.cmake -D DOWNLOAD_POTENTIALS=off ../cmake
make -j 8
deactivate_caches

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 B

View File

@ -137,6 +137,7 @@
{# the master_doc variable was renamed to root_doc in Sphinx 4 (master_doc still exists in later Sphinx versions) #}
{%- set _logo_url = logo_url|default(pathto('_static/' + (logo or ""), 1)) %}
{%- set _root_doc = root_doc|default(master_doc) %}
<div id="sidebar-top-target"></div>
<a href="{{ pathto(_root_doc) }}"{% if not theme_logo_only %} class="icon icon-home"{% endif %}>
{% if not theme_logo_only %}{{ project }}{% endif %}
{%- if logo or logo_url %}
@ -172,6 +173,15 @@
</div>
{%- endblock %}
</div>
<!-- <div style="padding: 4px;">
<center>
<a href="#sidebar-top-target"><img src="_static/up.png" alt="(Up)"/> Go to top</a>
</center>
</div>
-->
<div style="position: fixed; bottom: 0px; width: 300px; height: 64px; padding: 4px; background-color: #272525; text-align: center">
<a href="#sidebar-top-target" class="fa fa-caret-up" style="color: white"> Go to top</a>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

View File

@ -856,6 +856,7 @@ DNi
Dobnikar
Dobson
docenv
docstrings
Dodds
dodgerblue
dof
@ -1336,6 +1337,7 @@ Gflop
gfortran
ghostneigh
ghostwhite
Ghahremanpour
Giacomo
GiB
gif
@ -3262,6 +3264,7 @@ resquared
REsquared
restartfile
restartinfo
reStructuredText
Restrepo
rethrowing
Revenga

View File

@ -24,7 +24,7 @@
* Follow the behavior of regular LAMMPS compilation and assume
* -DLAMMPS_SMALLBIG when no define is set.
*/
#if !defined(LAMMPS_BIGBIG) && !defined(LAMMPS_SMALLBIG) && !defined(LAMMPS_SMALLSMALL)
#if !defined(LAMMPS_BIGBIG) && !defined(LAMMPS_SMALLBIG)
#define LAMMPS_SMALLBIG
#endif
@ -100,8 +100,6 @@ extern "C" {
#if defined(LAMMPS_BIGBIG)
typedef void (*FixExternalFnPtr)(void *, int64_t, int, int64_t *, double **, double **);
#elif defined(LAMMPS_SMALLSMALL)
typedef void (*FixExternalFnPtr)(void *, int, int, int *, double **, double **);
#else
typedef void (*FixExternalFnPtr)(void *, int64_t, int, int *, double **, double **);
#endif

View File

@ -15,12 +15,12 @@ Masses
PairIJ Coeffs # dpd/coul/slater/long
1 1 78 4.5 yes 1
1 2 78 4.5 yes 1
1 3 78 4.5 yes 1
2 2 78 4.5 no 1
2 3 78 4.5 no 1
3 3 78 4.5 no 1
1 1 78 4.5 no 1
1 2 78 4.5 no 1
1 3 78 4.5 no 1
2 2 78 4.5 yes 1
2 3 78 4.5 yes 1
3 3 78 4.5 yes 1
Atoms # full

View File

@ -10,49 +10,47 @@ variable cut_coul equal 2.0
# Initialize LAMMPS run for 3-d periodic
#-------------------------------------------------------------------------------
units lj
boundary p p p # periodic at all axes
atom_style full
dimension 3
units lj
boundary p p p # periodic at all axes
atom_style full
dimension 3
bond_style none
angle_style none
dihedral_style none
improper_style none
bond_style none
angle_style none
dihedral_style none
improper_style none
newton on
comm_modify vel yes # store info of ghost atoms btw processors
newton on
comm_modify vel yes # store info of ghost atoms btw processors
#-------------------------------------------------------------------------------
# Box creation and configuration
#-------------------------------------------------------------------------------
# Define pair style and coefficients
pair_style dpd/coul/slater/long ${T} ${cut_DPD} ${seed} ${lambda} ${cut_coul}
read_data data.dpd_coul_slater_long
pair_style dpd/coul/slater/long ${T} ${cut_DPD} ${seed} ${lambda} ${cut_coul}
# Enable long range electrostatics solver
kspace_style pppm 1e-04
kspace_style pppm 1e-04
read_data data.dpd_coul_slater_long
# Construct neighbors every steps
neighbor 1.0 bin
neigh_modify every 1 delay 0 check yes
neighbor 1.0 bin
neigh_modify every 1 delay 0 check yes
#-------------------------------------------------------------------------------
# Run the simulation
#-------------------------------------------------------------------------------
thermo_style custom step temp press vol evdwl ecoul elong pe ke fnorm fmax
thermo_modify norm no
thermo 100
thermo_style custom step temp press vol evdwl ecoul elong pe ke fnorm fmax
thermo_modify norm no
thermo 100
timestep 0.01
run_style verlet
timestep 0.01
run_style verlet
fix 1 all nve
fix 1 all nve
run 1000
unfix 1
run 1000

View File

@ -1,147 +0,0 @@
LAMMPS (17 Apr 2024 - Development - patch_17Apr2024-262-g0aff26705c-modified)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# DPD Ionic Fluid
variable T equal 1.0
variable cut_DPD equal 1.0
variable seed equal 165412
variable lambda equal 0.25
variable cut_coul equal 2.0
#-------------------------------------------------------------------------------
# Initialize LAMMPS run for 3-d periodic
#-------------------------------------------------------------------------------
units lj
boundary p p p # periodic at all axes
atom_style full
dimension 3
bond_style none
angle_style none
dihedral_style none
improper_style none
newton on
comm_modify vel yes # store info of ghost atoms btw processors
#-------------------------------------------------------------------------------
# Box creation and configuration
#-------------------------------------------------------------------------------
# Define pair style and coefficients
pair_style dpd/coul/slater/long ${T} ${cut_DPD} ${seed} ${lambda} ${cut_coul}
pair_style dpd/coul/slater/long 1 ${cut_DPD} ${seed} ${lambda} ${cut_coul}
pair_style dpd/coul/slater/long 1 1 ${seed} ${lambda} ${cut_coul}
pair_style dpd/coul/slater/long 1 1 165412 ${lambda} ${cut_coul}
pair_style dpd/coul/slater/long 1 1 165412 0.25 ${cut_coul}
pair_style dpd/coul/slater/long 1 1 165412 0.25 2
read_data data.dpd_coul_slater_long
Reading data file ...
orthogonal box = (0 0 0) to (5 5 5)
1 by 1 by 1 MPI processor grid
reading atoms ...
375 atoms
reading velocities ...
375 velocities
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
# Enable long range electrostatics solver
kspace_style pppm 1e-04
# Construct neighbors every steps
neighbor 1.0 bin
neigh_modify every 1 delay 0 check yes
#-------------------------------------------------------------------------------
# Run the simulation
#-------------------------------------------------------------------------------
thermo_style custom step temp press vol evdwl ecoul elong pe ke fnorm fmax
thermo_modify norm no
thermo 100
timestep 0.01
run_style verlet
fix 1 all nve
run 1000
PPPM initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 1.4828454
grid = 20 20 20
stencil order = 5
estimated absolute RMS force accuracy = 7.7240141e-05
estimated relative force accuracy = 7.7240141e-05
using double precision FFTW3
3d grid and FFT values/proc = 24389 8000
Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 3
ghost atom cutoff = 3
binsize = 1.5, bins = 4 4 4
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair dpd/coul/slater/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 8.359 | 8.359 | 8.359 Mbytes
Step Temp Press Volume E_vdwl E_coul E_long PotEng KinEng Fnorm Fmax
0 0.9849949 69.271905 125 4673.0443 0 -30.365103 4642.6792 552.58214 646.76798 65.851035
100 1.0614027 69.794624 125 4659.0139 0 -31.906319 4627.1075 595.44692 612.94396 60.338653
200 0.9422517 68.721098 125 4687.8862 0 -33.81531 4654.0709 528.6032 620.25627 62.726994
300 0.8956649 69.323482 125 4721.0824 0 -33.854275 4687.2281 502.46801 670.22699 73.087908
400 0.99584547 69.670416 125 4713.9086 0 -30.783633 4683.125 558.66931 607.65881 59.224652
500 1.0565931 69.497816 125 4701.2584 0 -26.80545 4674.4529 592.74873 646.18907 71.398122
600 1.0071523 70.26222 125 4659.2061 0 -29.98909 4629.217 565.01243 630.00244 58.264115
700 1.0507355 67.920078 125 4695.255 0 -32.649209 4662.6058 589.46259 651.80459 70.573524
800 0.98561942 68.279591 125 4745.7603 0 -28.98491 4716.7754 552.9325 627.14371 67.196483
900 0.96470105 70.742864 125 4706.3605 0 -30.271633 4676.0889 541.19729 644.43036 79.474998
1000 1.0204819 70.164419 125 4654.6077 0 -27.797433 4626.8103 572.49035 624.19728 71.825307
Loop time of 2.10153 on 1 procs for 1000 steps with 375 atoms
Performance: 411128.483 tau/day, 475.843 timesteps/s, 178.441 katom-step/s
99.7% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 1.1779 | 1.1779 | 1.1779 | 0.0 | 56.05
Bond | 6.507e-05 | 6.507e-05 | 6.507e-05 | 0.0 | 0.00
Kspace | 0.74636 | 0.74636 | 0.74636 | 0.0 | 35.51
Neigh | 0.12903 | 0.12903 | 0.12903 | 0.0 | 6.14
Comm | 0.039726 | 0.039726 | 0.039726 | 0.0 | 1.89
Output | 0.00027587 | 0.00027587 | 0.00027587 | 0.0 | 0.01
Modify | 0.0037596 | 0.0037596 | 0.0037596 | 0.0 | 0.18
Other | | 0.004451 | | | 0.21
Nlocal: 375 ave 375 max 375 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 3613 ave 3613 max 3613 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 62354 ave 62354 max 62354 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 62354
Ave neighs/atom = 166.27733
Ave special neighs/atom = 0
Neighbor list builds = 65
Dangerous builds = 0
unfix 1
Total wall time: 0:00:02

View File

@ -1,147 +0,0 @@
LAMMPS (17 Apr 2024 - Development - patch_17Apr2024-262-g0aff26705c-modified)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# DPD Ionic Fluid
variable T equal 1.0
variable cut_DPD equal 1.0
variable seed equal 165412
variable lambda equal 0.25
variable cut_coul equal 2.0
#-------------------------------------------------------------------------------
# Initialize LAMMPS run for 3-d periodic
#-------------------------------------------------------------------------------
units lj
boundary p p p # periodic at all axes
atom_style full
dimension 3
bond_style none
angle_style none
dihedral_style none
improper_style none
newton on
comm_modify vel yes # store info of ghost atoms btw processors
#-------------------------------------------------------------------------------
# Box creation and configuration
#-------------------------------------------------------------------------------
# Define pair style and coefficients
pair_style dpd/coul/slater/long ${T} ${cut_DPD} ${seed} ${lambda} ${cut_coul}
pair_style dpd/coul/slater/long 1 ${cut_DPD} ${seed} ${lambda} ${cut_coul}
pair_style dpd/coul/slater/long 1 1 ${seed} ${lambda} ${cut_coul}
pair_style dpd/coul/slater/long 1 1 165412 ${lambda} ${cut_coul}
pair_style dpd/coul/slater/long 1 1 165412 0.25 ${cut_coul}
pair_style dpd/coul/slater/long 1 1 165412 0.25 2
read_data data.dpd_coul_slater_long
Reading data file ...
orthogonal box = (0 0 0) to (5 5 5)
1 by 2 by 2 MPI processor grid
reading atoms ...
375 atoms
reading velocities ...
375 velocities
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
# Enable long range electrostatics solver
kspace_style pppm 1e-04
# Construct neighbors every steps
neighbor 1.0 bin
neigh_modify every 1 delay 0 check yes
#-------------------------------------------------------------------------------
# Run the simulation
#-------------------------------------------------------------------------------
thermo_style custom step temp press vol evdwl ecoul elong pe ke fnorm fmax
thermo_modify norm no
thermo 100
timestep 0.01
run_style verlet
fix 1 all nve
run 1000
PPPM initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 1.4828454
grid = 20 20 20
stencil order = 5
estimated absolute RMS force accuracy = 7.7240141e-05
estimated relative force accuracy = 7.7240141e-05
using double precision FFTW3
3d grid and FFT values/proc = 10469 2000
Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 3
ghost atom cutoff = 3
binsize = 1.5, bins = 4 4 4
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair dpd/coul/slater/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 7.208 | 7.208 | 7.209 Mbytes
Step Temp Press Volume E_vdwl E_coul E_long PotEng KinEng Fnorm Fmax
0 0.9849949 69.076433 125 4673.0443 0 -30.365103 4642.6792 552.58214 613.18374 70.700582
100 0.95374867 69.110009 125 4681.1097 0 -31.260804 4649.8489 535.053 629.95109 62.05418
200 1.0076152 69.824904 125 4670.7458 0 -28.382203 4642.3636 565.27213 656.8501 72.049813
300 1.0014752 69.666331 125 4696.454 0 -26.943577 4669.5105 561.8276 631.49861 74.737274
400 0.98863876 69.731774 125 4700.7552 0 -23.816077 4676.9391 554.62634 637.74742 68.928573
500 0.95782852 68.588075 125 4698.588 0 -29.249543 4669.3385 537.3418 646.31897 68.800569
600 0.97443232 70.864079 125 4674.8821 0 -26.415644 4648.4664 546.65653 606.50755 78.664429
700 0.98783988 68.908299 125 4692.5536 0 -28.092022 4664.4616 554.17817 638.98401 69.691814
800 0.98000145 69.83977 125 4706.6365 0 -29.648365 4676.9881 549.78082 626.84362 73.133934
900 1.0526251 69.466078 125 4671.9648 0 -30.941117 4641.0237 590.52269 618.1049 62.333546
1000 0.98340746 69.527121 125 4728.2894 0 -31.869907 4696.4195 551.69159 630.14208 61.392611
Loop time of 0.928543 on 4 procs for 1000 steps with 375 atoms
Performance: 930490.137 tau/day, 1076.956 timesteps/s, 403.859 katom-step/s
98.9% CPU use with 4 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.30761 | 0.34974 | 0.38864 | 4.9 | 37.67
Bond | 8.4633e-05 | 9.0539e-05 | 9.9184e-05 | 0.0 | 0.01
Kspace | 0.39038 | 0.42976 | 0.47215 | 4.4 | 46.28
Neigh | 0.033986 | 0.035576 | 0.036791 | 0.5 | 3.83
Comm | 0.10247 | 0.10324 | 0.10481 | 0.3 | 11.12
Output | 0.00024145 | 0.00027404 | 0.00036867 | 0.0 | 0.03
Modify | 0.0022402 | 0.0025068 | 0.0026343 | 0.3 | 0.27
Other | | 0.007356 | | | 0.79
Nlocal: 93.75 ave 96 max 93 min
Histogram: 3 0 0 0 0 0 0 0 0 1
Nghost: 2289.75 ave 2317 max 2271 min
Histogram: 1 1 0 0 1 0 0 0 0 1
Neighs: 15590.2 ave 16765 max 14540 min
Histogram: 1 0 1 0 0 1 0 0 0 1
Total # of neighbors = 62361
Ave neighs/atom = 166.296
Ave special neighs/atom = 0
Neighbor list builds = 64
Dangerous builds = 0
unfix 1
Total wall time: 0:00:00

View File

@ -0,0 +1,145 @@
LAMMPS (4 Feb 2025 - Development - patch_4Feb2025-468-gd830412228-modified)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:99)
using 1 OpenMP thread(s) per MPI task
# DPD Ionic Fluid
variable T equal 1.0
variable cut_DPD equal 1.0
variable seed equal 165412
variable lambda equal 0.25
variable cut_coul equal 2.0
#-------------------------------------------------------------------------------
# Initialize LAMMPS run for 3-d periodic
#-------------------------------------------------------------------------------
units lj
boundary p p p # periodic at all axes
atom_style full
dimension 3
bond_style none
angle_style none
dihedral_style none
improper_style none
newton on
comm_modify vel yes # store info of ghost atoms btw processors
#-------------------------------------------------------------------------------
# Box creation and configuration
#-------------------------------------------------------------------------------
# Define pair style and coefficients
pair_style dpd/coul/slater/long ${T} ${cut_DPD} ${seed} ${lambda} ${cut_coul}
pair_style dpd/coul/slater/long 1 ${cut_DPD} ${seed} ${lambda} ${cut_coul}
pair_style dpd/coul/slater/long 1 1 ${seed} ${lambda} ${cut_coul}
pair_style dpd/coul/slater/long 1 1 165412 ${lambda} ${cut_coul}
pair_style dpd/coul/slater/long 1 1 165412 0.25 ${cut_coul}
pair_style dpd/coul/slater/long 1 1 165412 0.25 2
# Enable long range electrostatics solver
kspace_style pppm 1e-04
read_data data.dpd_coul_slater_long
Reading data file ...
orthogonal box = (0 0 0) to (5 5 5)
1 by 1 by 1 MPI processor grid
reading atoms ...
375 atoms
reading velocities ...
375 velocities
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.001 seconds
read_data CPU = 0.004 seconds
# Construct neighbors every steps
neighbor 1.0 bin
neigh_modify every 1 delay 0 check yes
#-------------------------------------------------------------------------------
# Run the simulation
#-------------------------------------------------------------------------------
thermo_style custom step temp press vol evdwl ecoul elong pe ke fnorm fmax
thermo_modify norm no
thermo 100
timestep 0.01
run_style verlet
fix 1 all nve
run 1000
PPPM initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 1.4828454
grid = 20 20 20
stencil order = 5
estimated absolute RMS force accuracy = 7.7240141e-05
estimated relative force accuracy = 7.7240141e-05
using double precision KISS FFT
3d grid and FFT values/proc = 24389 8000
Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 3
ghost atom cutoff = 3
binsize = 1.5, bins = 4 4 4
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair dpd/coul/slater/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 8.359 | 8.359 | 8.359 Mbytes
Step Temp Press Volume E_vdwl E_coul E_long PotEng KinEng Fnorm Fmax
0 0.9849949 69.242343 125 4673.0443 -3.2653869 -30.365103 4639.4138 552.58214 646.89929 65.851035
100 1.023885 69.716134 125 4676.9465 -4.9878506 -34.092864 4637.8658 574.39949 663.35845 94.350026
200 1.0286646 69.674249 125 4636.201 -4.6314926 -33.406897 4598.1626 577.08087 614.52805 62.295431
300 0.9745797 69.689534 125 4679.9157 -4.3964184 -30.560567 4644.9588 546.73921 603.46282 60.56253
400 0.99487931 69.17085 125 4678.0362 -4.9518269 -34.446596 4638.6378 558.12729 656.99738 88.090014
500 0.97732377 69.551562 125 4684.3709 -5.0851581 -33.863212 4645.4226 548.27864 647.12533 75.851935
600 0.95396337 68.358297 125 4706.824 -4.269168 -33.634096 4668.9207 535.17345 604.31276 63.41042
700 0.99397324 68.365109 125 4669.1062 -4.700146 -35.014001 4629.3921 557.61899 633.29262 74.300913
800 1.0157864 69.263686 125 4664.1398 -4.0142381 -34.372669 4625.7529 569.85616 595.81462 67.046561
900 0.9925779 70.008922 125 4652.3023 -2.7845751 -33.095293 4616.4224 556.8362 620.13154 82.785317
1000 0.97336501 68.973657 125 4688.8002 -5.5239266 -36.42345 4646.8529 546.05777 625.66451 64.948859
Loop time of 0.755094 on 1 procs for 1000 steps with 375 atoms
Performance: 1144228.093 tau/day, 1324.338 timesteps/s, 496.627 katom-step/s
99.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.14421 | 0.14421 | 0.14421 | 0.0 | 19.10
Bond | 3.8885e-05 | 3.8885e-05 | 3.8885e-05 | 0.0 | 0.01
Kspace | 0.53292 | 0.53292 | 0.53292 | 0.0 | 70.58
Neigh | 0.056741 | 0.056741 | 0.056741 | 0.0 | 7.51
Comm | 0.017676 | 0.017676 | 0.017676 | 0.0 | 2.34
Output | 0.00024925 | 0.00024925 | 0.00024925 | 0.0 | 0.03
Modify | 0.0016688 | 0.0016688 | 0.0016688 | 0.0 | 0.22
Other | | 0.001588 | | | 0.21
Nlocal: 375 ave 375 max 375 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 3570 ave 3570 max 3570 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 19729 ave 19729 max 19729 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 19729
Ave neighs/atom = 52.610667
Ave special neighs/atom = 0
Neighbor list builds = 66
Dangerous builds = 0
Total wall time: 0:00:00

View File

@ -0,0 +1,145 @@
LAMMPS (4 Feb 2025 - Development - patch_4Feb2025-468-gd830412228-modified)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:99)
using 1 OpenMP thread(s) per MPI task
# DPD Ionic Fluid
variable T equal 1.0
variable cut_DPD equal 1.0
variable seed equal 165412
variable lambda equal 0.25
variable cut_coul equal 2.0
#-------------------------------------------------------------------------------
# Initialize LAMMPS run for 3-d periodic
#-------------------------------------------------------------------------------
units lj
boundary p p p # periodic at all axes
atom_style full
dimension 3
bond_style none
angle_style none
dihedral_style none
improper_style none
newton on
comm_modify vel yes # store info of ghost atoms btw processors
#-------------------------------------------------------------------------------
# Box creation and configuration
#-------------------------------------------------------------------------------
# Define pair style and coefficients
pair_style dpd/coul/slater/long ${T} ${cut_DPD} ${seed} ${lambda} ${cut_coul}
pair_style dpd/coul/slater/long 1 ${cut_DPD} ${seed} ${lambda} ${cut_coul}
pair_style dpd/coul/slater/long 1 1 ${seed} ${lambda} ${cut_coul}
pair_style dpd/coul/slater/long 1 1 165412 ${lambda} ${cut_coul}
pair_style dpd/coul/slater/long 1 1 165412 0.25 ${cut_coul}
pair_style dpd/coul/slater/long 1 1 165412 0.25 2
# Enable long range electrostatics solver
kspace_style pppm 1e-04
read_data data.dpd_coul_slater_long
Reading data file ...
orthogonal box = (0 0 0) to (5 5 5)
1 by 2 by 2 MPI processor grid
reading atoms ...
375 atoms
reading velocities ...
375 velocities
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
# Construct neighbors every steps
neighbor 1.0 bin
neigh_modify every 1 delay 0 check yes
#-------------------------------------------------------------------------------
# Run the simulation
#-------------------------------------------------------------------------------
thermo_style custom step temp press vol evdwl ecoul elong pe ke fnorm fmax
thermo_modify norm no
thermo 100
timestep 0.01
run_style verlet
fix 1 all nve
run 1000
PPPM initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 1.4828454
grid = 20 20 20
stencil order = 5
estimated absolute RMS force accuracy = 7.7240141e-05
estimated relative force accuracy = 7.7240141e-05
using double precision KISS FFT
3d grid and FFT values/proc = 10469 2000
Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 3
ghost atom cutoff = 3
binsize = 1.5, bins = 4 4 4
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair dpd/coul/slater/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 7.208 | 7.208 | 7.209 Mbytes
Step Temp Press Volume E_vdwl E_coul E_long PotEng KinEng Fnorm Fmax
0 0.9849949 69.04687 125 4673.0443 -3.2653869 -30.365103 4639.4138 552.58214 613.14254 70.700582
100 1.0206537 69.308834 125 4676.3153 -4.5693306 -33.647673 4638.0983 572.58672 630.70953 76.020236
200 0.99990746 68.572978 125 4707.1556 -3.4977853 -33.275671 4670.3821 560.94809 633.00167 77.040049
300 0.91055241 69.390592 125 4685.5268 -2.9764038 -29.986737 4652.5637 510.8199 614.61006 62.799933
400 1.0080135 69.442971 125 4677.3078 -4.8740989 -32.908722 4639.525 565.49557 649.20121 61.033612
500 0.99500653 68.275189 125 4718.6774 -4.2475783 -35.206868 4679.223 558.19867 657.3073 74.738502
600 1.052925 70.601712 125 4703.6749 -2.8511316 -34.085418 4666.7383 590.69094 641.70441 59.043346
700 0.96467445 69.502018 125 4720.4257 -4.3345734 -34.310005 4681.7811 541.18237 656.24965 72.433637
800 1.0657358 70.960958 125 4685.5637 -5.8903418 -35.207202 4644.4661 597.87781 595.54446 61.462159
900 1.0273388 68.735518 125 4693.5106 -2.4175829 -28.602387 4662.4906 576.33707 598.80294 71.747886
1000 0.9702835 69.885576 125 4701.4385 -3.6513555 -29.487331 4668.2999 544.32904 666.55262 73.231425
Loop time of 0.270344 on 4 procs for 1000 steps with 375 atoms
Performance: 3195929.791 tau/day, 3698.993 timesteps/s, 1.387 Matom-step/s
99.3% CPU use with 4 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.031268 | 0.035485 | 0.039491 | 1.6 | 13.13
Bond | 3.3378e-05 | 3.4848e-05 | 3.5667e-05 | 0.0 | 0.01
Kspace | 0.18632 | 0.19083 | 0.19556 | 0.8 | 70.59
Neigh | 0.012413 | 0.012991 | 0.013598 | 0.4 | 4.81
Comm | 0.028195 | 0.028407 | 0.028626 | 0.1 | 10.51
Output | 0.00013369 | 0.00015738 | 0.00022498 | 0.0 | 0.06
Modify | 0.00055373 | 0.00059062 | 0.00068807 | 0.0 | 0.22
Other | | 0.001846 | | | 0.68
Nlocal: 93.75 ave 95 max 92 min
Histogram: 1 0 0 0 0 0 2 0 0 1
Nghost: 2286 ave 2307 max 2269 min
Histogram: 1 0 1 0 0 1 0 0 0 1
Neighs: 4945 ave 5443 max 4513 min
Histogram: 1 0 1 0 0 1 0 0 0 1
Total # of neighbors = 19780
Ave neighs/atom = 52.746667
Ave special neighs/atom = 0
Neighbor list builds = 66
Dangerous builds = 0
Total wall time: 0:00:00

View File

@ -131,8 +131,8 @@ endif()
################
# integer size selection
set(LAMMPS_SIZES "smallbig" CACHE STRING "LAMMPS integer sizes (smallsmall: all 32-bit, smallbig: 64-bit #atoms #timesteps, bigbig: also 64-bit imageint, 64-bit atom ids)")
set(LAMMPS_SIZES_VALUES smallbig bigbig smallsmall)
set(LAMMPS_SIZES "smallbig" CACHE STRING "LAMMPS integer sizes (smallbig: 64-bit #atoms #timesteps, bigbig: also 64-bit imageint, 64-bit atom ids)")
set(LAMMPS_SIZES_VALUES smallbig bigbig)
set_property(CACHE LAMMPS_SIZES PROPERTY STRINGS ${LAMMPS_SIZES_VALUES})
validate_option(LAMMPS_SIZES LAMMPS_SIZES_VALUES)
string(TOUPPER ${LAMMPS_SIZES} LAMMPS_SIZES)

View File

@ -334,14 +334,6 @@ MODULE LIBLAMMPS
! Interface templates for fix external callbacks
ABSTRACT INTERFACE
SUBROUTINE external_callback_smallsmall(caller, timestep, ids, x, fexternal)
IMPORT :: c_int, c_double
CLASS(*), INTENT(INOUT) :: caller
INTEGER(c_int), INTENT(IN) :: timestep
INTEGER(c_int), DIMENSION(:), INTENT(IN) :: ids
REAL(c_double), DIMENSION(:,:), INTENT(IN) :: x
REAL(c_double), DIMENSION(:,:), INTENT(OUT) :: fexternal
END SUBROUTINE external_callback_smallsmall
SUBROUTINE external_callback_smallbig(caller, timestep, ids, x, fexternal)
IMPORT :: c_int, c_double, c_int64_t
CLASS(*), INTENT(INOUT) :: caller
@ -363,8 +355,6 @@ MODULE LIBLAMMPS
! Derived type for fix external callback data
TYPE fix_external_data
CHARACTER(LEN=:), ALLOCATABLE :: id
PROCEDURE(external_callback_smallsmall), NOPASS, POINTER :: &
callback_smallsmall => NULL()
PROCEDURE(external_callback_smallbig), NOPASS, POINTER :: &
callback_smallbig => NULL()
PROCEDURE(external_callback_bigbig), NOPASS, POINTER :: &
@ -2262,7 +2252,7 @@ CONTAINS
CALL lammps_free(Cname)
END SUBROUTINE lmp_scatter_atoms_subset_double
! equivalent function to lammps_gather_bonds (LAMMPS_SMALLSMALL or SMALLBIG)
! equivalent function to lammps_gather_bonds (LAMMPS_SMALLBIG)
SUBROUTINE lmp_gather_bonds_small(self, data)
CLASS(lammps), INTENT(IN) :: self
INTEGER(c_int), DIMENSION(:), ALLOCATABLE, TARGET, INTENT(OUT) :: data
@ -2304,7 +2294,7 @@ CONTAINS
CALL lammps_gather_bonds(self%handle, Cdata)
END SUBROUTINE lmp_gather_bonds_big
! equivalent function to lammps_gather_angles (LAMMPS_SMALLSMALL or SMALLBIG)
! equivalent function to lammps_gather_angles (LAMMPS_SMALLBIG)
SUBROUTINE lmp_gather_angles_small(self, data)
CLASS(lammps), INTENT(IN) :: self
INTEGER(c_int), DIMENSION(:), ALLOCATABLE, TARGET, INTENT(OUT) :: data
@ -2346,7 +2336,7 @@ CONTAINS
CALL lammps_gather_angles(self%handle, Cdata)
END SUBROUTINE lmp_gather_angles_big
! equivalent function to lammps_gather_dihedrals (LAMMPS_SMALLSMALL or SMALLBIG)
! equivalent function to lammps_gather_dihedrals (LAMMPS_SMALLBIG)
SUBROUTINE lmp_gather_dihedrals_small(self, data)
CLASS(lammps), INTENT(IN) :: self
INTEGER(c_int), DIMENSION(:), ALLOCATABLE, TARGET, INTENT(OUT) :: data
@ -2388,7 +2378,7 @@ CONTAINS
CALL lammps_gather_dihedrals(self%handle, Cdata)
END SUBROUTINE lmp_gather_dihedrals_big
! equivalent function to lammps_gather_impropers (LAMMPS_SMALLSMALL or SMALLBIG)
! equivalent function to lammps_gather_impropers (LAMMPS_SMALLBIG)
SUBROUTINE lmp_gather_impropers_small(self, data)
CLASS(lammps), INTENT(IN) :: self
INTEGER(c_int), DIMENSION(:), ALLOCATABLE, TARGET, INTENT(OUT) :: data
@ -2763,7 +2753,7 @@ CONTAINS
IF (tagint_size /= 4_c_int .AND. (PRESENT(id) .OR. PRESENT(image))) THEN
CALL lmp_error(self, LMP_ERROR_ALL + LMP_ERROR_WORLD, &
'Unable to create_atoms; your id/image array types are incompatible&
& with LAMMPS_SMALLBIG and LAMMPS_SMALLSMALL [Fortran/create_atoms]')
& with LAMMPS_SMALLBIG [Fortran/create_atoms]')
END IF
n = SIZE(type, KIND=c_int)
IF (PRESENT(bexpand)) THEN
@ -3360,7 +3350,7 @@ CONTAINS
construct_fix_external_data%id = ' '
END FUNCTION construct_fix_external_data
! equivalent function to lammps_set_fix_external_callback for -DSMALLSMALL
! equivalent function to lammps_set_fix_external_callback
! note that "caller" is wrapped into a fix_external_data derived type along
! with the fix id and the Fortran calling function.
SUBROUTINE lmp_set_fix_external_callback(self, id, callback, caller)
@ -3394,11 +3384,7 @@ CONTAINS
ext_data(this_fix)%id = id
ext_data(this_fix)%lammps_instance => self
IF (SIZE_TAGINT == 4_c_int .AND. SIZE_BIGINT == 4_c_int) THEN
! -DSMALLSMALL
c_callback = C_FUNLOC(callback_wrapper_smallsmall)
CALL set_fix_external_callback_smallsmall(this_fix, callback)
ELSE IF (SIZE_TAGINT == 8_c_int .AND. SIZE_BIGINT == 8_c_int) THEN
IF (SIZE_TAGINT == 8_c_int .AND. SIZE_BIGINT == 8_c_int) THEN
! -DBIGBIG
c_callback = C_FUNLOC(callback_wrapper_bigbig)
CALL set_fix_external_callback_bigbig(this_fix, callback)
@ -3420,12 +3406,6 @@ CONTAINS
END SUBROUTINE lmp_set_fix_external_callback
! Wrappers to assign callback pointers with explicit interfaces
SUBROUTINE set_fix_external_callback_smallsmall(id, callback)
INTEGER, INTENT(IN) :: id
PROCEDURE(external_callback_smallsmall) :: callback
ext_data(id)%callback_smallsmall => callback
END SUBROUTINE set_fix_external_callback_smallsmall
SUBROUTINE set_fix_external_callback_smallbig(id, callback)
INTEGER, INTENT(IN) :: id
@ -3450,9 +3430,7 @@ CONTAINS
DO i = 1, SIZE(ext_data) - 1
c_id = f2c_string(ext_data(i)%id)
c_caller = C_LOC(ext_data(i))
IF (SIZE_TAGINT == 4_c_int .AND. SIZE_BIGINT == 4_c_int) THEN
c_callback = C_FUNLOC(callback_wrapper_smallsmall)
ELSE IF (SIZE_TAGINT == 8_c_int .AND. SIZE_BIGINT == 8_c_int) THEN
IF (SIZE_TAGINT == 8_c_int .AND. SIZE_BIGINT == 8_c_int) THEN
c_callback = C_FUNLOC(callback_wrapper_bigbig)
ELSE
c_callback = C_FUNLOC(callback_wrapper_smallbig)
@ -3464,34 +3442,6 @@ CONTAINS
END SUBROUTINE rebind_external_callback_data
! companions to lmp_set_fix_external_callback to change interface
SUBROUTINE callback_wrapper_smallsmall(caller, timestep, nlocal, ids, x, &
fexternal) BIND(C)
TYPE(c_ptr), INTENT(IN), VALUE :: caller
INTEGER(c_int), INTENT(IN), VALUE :: timestep
INTEGER(c_int), INTENT(IN), VALUE :: nlocal
TYPE(c_ptr), INTENT(IN), VALUE :: ids, x, fexternal
TYPE(c_ptr), DIMENSION(:), POINTER :: x0, f0
INTEGER(c_int), DIMENSION(:), POINTER :: f_ids => NULL()
REAL(c_double), DIMENSION(:,:), POINTER :: f_x => NULL(), &
f_fexternal => NULL()
TYPE(fix_external_data), POINTER :: f_caller => NULL()
CALL C_F_POINTER(ids, f_ids, [nlocal])
CALL C_F_POINTER(x, x0, [nlocal])
CALL C_F_POINTER(x0(1), f_x, [3, nlocal])
CALL C_F_POINTER(fexternal, f0, [nlocal])
CALL C_F_POINTER(f0(1), f_fexternal, [3, nlocal])
IF (C_ASSOCIATED(caller)) THEN
CALL C_F_POINTER(caller, f_caller)
CALL f_caller%callback_smallsmall(f_caller%caller, timestep, f_ids, &
f_x, f_fexternal)
ELSE
CALL lmp_error(f_caller%lammps_instance, &
LMP_ERROR_ALL + LMP_ERROR_WORLD, &
'Got null pointer from "caller"; this should never happen;&
& please report a bug')
END IF
END SUBROUTINE callback_wrapper_smallsmall
SUBROUTINE callback_wrapper_smallbig(caller, timestep, nlocal, ids, x, &
fexternal) BIND(C)

View File

@ -11,8 +11,8 @@ EXTRAMAKE = Makefile.lammps.opencl
# OCL_TUNE = -DCYPRESS_OCL # -- Uncomment for AMD Cypress
OCL_TUNE = -DGENERIC_OCL # -- Uncomment for generic device
# this setting should match LAMMPS Makefile
# one of LAMMPS_SMALLBIG (default), LAMMPS_BIGBIG and LAMMPS_SMALLSMALL
# this setting should match the LAMMPS Makefile
# either LAMMPS_SMALLBIG (default) or LAMMPS_BIGBIG
LMP_INC = -DLAMMPS_SMALLBIG

View File

@ -11,8 +11,8 @@ ifeq ($(CUDA_HOME),)
CUDA_HOME = /usr/local/cuda
endif
# this setting should match LAMMPS Makefile
# one of LAMMPS_SMALLBIG (default), LAMMPS_BIGBIG and LAMMPS_SMALLSMALL
# this setting should match the LAMMPS Makefile
# either LAMMPS_SMALLBIG (default) or LAMMPS_BIGBIG
LMP_INC = -DLAMMPS_SMALLBIG

View File

@ -11,8 +11,8 @@ ifeq ($(CUDA_HOME),)
CUDA_HOME = /usr/local/cuda
endif
# this setting should match LAMMPS Makefile
# one of LAMMPS_SMALLBIG (default), LAMMPS_BIGBIG and LAMMPS_SMALLSMALL
# this setting should match the LAMMPS Makefile
# either LAMMPS_SMALLBIG (default) or LAMMPS_BIGBIG
LMP_INC = -DLAMMPS_SMALLBIG

View File

@ -7,8 +7,8 @@
# - change HIP_ARCH for your GPU
# ------------------------------------------------------------------------- */
# this setting should match LAMMPS Makefile
# one of LAMMPS_SMALLBIG (default), LAMMPS_BIGBIG and LAMMPS_SMALLSMALL
# this setting should match the LAMMPS Makefile
# either LAMMPS_SMALLBIG (default) or LAMMPS_BIGBIG
LMP_INC = -DLAMMPS_SMALLBIG

View File

@ -51,8 +51,8 @@ CUDA_ARCH = -arch=sm_60
# Hopper hardware
#CUDA_ARCH = -arch=sm_90
# this setting should match LAMMPS Makefile
# one of LAMMPS_SMALLBIG (default), LAMMPS_BIGBIG and LAMMPS_SMALLSMALL
# this setting should match the LAMMPS Makefile
# either LAMMPS_SMALLBIG (default) or LAMMPS_BIGBIG
LMP_INC = -DLAMMPS_SMALLBIG

View File

@ -51,8 +51,8 @@ CUDA_CODE = -gencode arch=compute_50,code=[sm_50,compute_50] -gencode arch=compu
CUDA_ARCH += $(CUDA_CODE)
# this setting should match LAMMPS Makefile
# one of LAMMPS_SMALLBIG (default), LAMMPS_BIGBIG and LAMMPS_SMALLSMALL
# this setting should match the LAMMPS Makefile
# either LAMMPS_SMALLBIG (default) or LAMMPS_BIGBIG
LMP_INC = -DLAMMPS_SMALLBIG

View File

@ -6,8 +6,8 @@
EXTRAMAKE = Makefile.lammps.opencl
# this setting should match LAMMPS Makefile
# one of LAMMPS_SMALLBIG (default), LAMMPS_BIGBIG and LAMMPS_SMALLSMALL
# this setting should match the LAMMPS Makefile
# either LAMMPS_SMALLBIG (default) or LAMMPS_BIGBIG
LMP_INC = -DLAMMPS_SMALLBIG

View File

@ -6,8 +6,8 @@
EXTRAMAKE = Makefile.lammps.opencl
# this setting should match LAMMPS Makefile
# one of LAMMPS_SMALLBIG (default), LAMMPS_BIGBIG and LAMMPS_SMALLSMALL
# this setting should match the LAMMPS Makefile
# either LAMMPS_SMALLBIG (default) or LAMMPS_BIGBIG
LMP_INC = -DLAMMPS_SMALLBIG

View File

@ -6,8 +6,8 @@
EXTRAMAKE = Makefile.lammps.opencl
# this setting should match LAMMPS Makefile
# one of LAMMPS_SMALLBIG (default), LAMMPS_BIGBIG and LAMMPS_SMALLSMALL
# this setting should match the LAMMPS Makefile
# either LAMMPS_SMALLBIG (default) or LAMMPS_BIGBIG
LMP_INC = -DLAMMPS_SMALLBIG

View File

@ -45,8 +45,8 @@ CUDA_ARCH = -arch=sm_60
#CUDA_ARCH = -arch=sm_80
#CUDA_ARCH = -arch=sm_86
# this setting should match LAMMPS Makefile
# one of LAMMPS_SMALLBIG (default), LAMMPS_BIGBIG and LAMMPS_SMALLSMALL
# this setting should match the LAMMPS Makefile
# either LAMMPS_SMALLBIG (default) or LAMMPS_BIGBIG
LMP_INC = -DLAMMPS_SMALLBIG

View File

@ -136,10 +136,10 @@ IMPORTANT: If you re-build the library, e.g. for a different precision
Makefile.linux clean, to ensure all previous derived files are removed
before the new build is done.
NOTE: The system-specific setting LAMMPS_SMALLBIG (default), LAMMPS_BIGBIG,
or LAMMPS_SMALLSMALL if specified when building LAMMPS (i.e. in
src/MAKE/Makefile.foo) should be consistent with that specified
when building libgpu.a (i.e. by LMP_INC in the lib/gpu/Makefile.bar).
NOTE: The system-specific setting LAMMPS_SMALLBIG (default) or LAMMPS_BIGBIG
- if specified when building LAMMPS (i.e. in src/MAKE/Makefile.foo) -
should be consistent with that specified when building libgpu.a (i.e.
by LMP_INC in the lib/gpu/Makefile.bar).
------------------------------------------------------------------------------

View File

@ -23,9 +23,6 @@
#include "inttypes.h"
#define tagint int64_t
#endif
#ifdef LAMMPS_SMALLSMALL
#define tagint int
#endif
#ifndef _DOUBLE_DOUBLE
_texture( pos_tex,float4);
_texture( q_tex,float);
@ -43,9 +40,6 @@ _texture( q_tex,int2);
#ifdef LAMMPS_BIGBIG
#define tagint long
#endif
#ifdef LAMMPS_SMALLSMALL
#define tagint int
#endif
#endif // defined(NV_KERNEL) || defined(USE_HIP)

View File

@ -287,16 +287,16 @@ __kernel void k_dpd_coul_slater_long(const __global numtyp4 *restrict x_,
// apply Slater electrostatic force if distance below Slater cutoff
// and the two species have a slater coeff
// cutsq[mtype].z -> Coulombic squared cutoff
if ( cutsq[mtype].z != 0.0 && rsq < cutsq[mtype].z){
// cutsq[mtype].z -> Slater cutoff
// extra[j].x -> q[j] ; particle j charge
if ( rsq < cutsq[mtype].z ){
numtyp r2inv=ucl_recip(rsq);
numtyp _erfc;
numtyp grij = g_ewald * r;
numtyp expm2 = ucl_exp(-grij*grij);
numtyp t = ucl_recip((numtyp)1.0 + EWALD_P*grij);
_erfc = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2;
numtyp prefactor = extra[j].x;
prefactor *= qqrd2e * cutsq[mtype].z * qtmp/r;
numtyp prefactor = qqrd2e * extra[j].x * qtmp / r;
numtyp rlamdainv = r * lamdainv;
numtyp exprlmdainv = ucl_exp((numtyp)-2.0*rlamdainv);
numtyp slater_term = exprlmdainv*((numtyp)1.0 + ((numtyp)2.0*rlamdainv*((numtyp)1.0+rlamdainv)));
@ -306,9 +306,9 @@ __kernel void k_dpd_coul_slater_long(const __global numtyp4 *restrict x_,
if (EVFLAG && eflag) {
numtyp e_slater = ((numtyp)1.0 + rlamdainv)*exprlmdainv;
numtyp e = prefactor*(_erfc-e_slater);
if (factor_coul > (numtyp)0) e -= factor_coul*prefactor*((numtyp)1.0 - e_slater);
e_coul += e;
numtyp e_sf = prefactor*(_erfc-e_slater);
if (factor_coul > (numtyp)0) e_sf -= factor_coul*prefactor*((numtyp)1.0 - e_slater);
e_coul += e_sf;
}
} // if cut_coulsq
@ -471,16 +471,16 @@ __kernel void k_dpd_coul_slater_long_fast(const __global numtyp4 *restrict x_,
// apply Slater electrostatic force if distance below Slater cutoff
// and the two species have a slater coeff
// cutsq[mtype].z -> Coulombic squared cutoff
if ( cutsq[mtype].z != 0.0 && rsq < cutsq[mtype].z){
// cutsq[mtype].z -> Slater cutoff
// extra[j].x -> q[j] ; particle j charge
if ( rsq < cutsq[mtype].z ){
numtyp r2inv=ucl_recip(rsq);
numtyp _erfc;
numtyp grij = g_ewald * r;
numtyp expm2 = ucl_exp(-grij*grij);
numtyp t = ucl_recip((numtyp)1.0 + EWALD_P*grij);
_erfc = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2;
numtyp prefactor = extra[j].x;
prefactor *= qqrd2e * cutsq[mtype].z * qtmp/r;
numtyp prefactor = qqrd2e * extra[j].x * qtmp / r;
numtyp rlamdainv = r * lamdainv;
numtyp exprlmdainv = ucl_exp((numtyp)-2.0*rlamdainv);
numtyp slater_term = exprlmdainv*((numtyp)1.0 + ((numtyp)2.0*rlamdainv*((numtyp)1.0+rlamdainv)));

View File

@ -65,7 +65,7 @@ class DPDCoulSlaterLong : public BaseDPD<numtyp, acctyp> {
/// coeff.x = a0, coeff.y = gamma, coeff.z = sigma, coeff.w = cut_dpd
UCL_D_Vec<numtyp4> coeff;
/// cutsq.x = cutsq, cutsq.y = cut_dpdsq, cutsq.w = cut_slatersq
/// cutsq.x = cutsq, cutsq.y = cut_dpdsq, cutsq.z = cut_slatersq
UCL_D_Vec<numtyp4> cutsq;
/// Special LJ values

View File

@ -23,9 +23,6 @@
#include "inttypes.h"
#define tagint int64_t
#endif
#ifdef LAMMPS_SMALLSMALL
#define tagint int
#endif
#ifndef _DOUBLE_DOUBLE
_texture( pos_tex,float4);
_texture( q_tex,float);
@ -43,9 +40,6 @@ _texture( q_tex,int2);
#ifdef LAMMPS_BIGBIG
#define tagint long
#endif
#ifdef LAMMPS_SMALLSMALL
#define tagint int
#endif
#endif // defined(NV_KERNEL) || defined(USE_HIP)

View File

@ -27,9 +27,6 @@
#define tagint int64_t
#endif
#endif
#ifdef LAMMPS_SMALLSMALL
#define tagint int
#endif
#ifndef _DOUBLE_DOUBLE
_texture( pos_tex,float4);
_texture( q_tex,float);
@ -50,9 +47,6 @@ _texture( q_tex,int2);
#define tagint int64_t
#endif
#endif
#ifdef LAMMPS_SMALLSMALL
#define tagint int
#endif
#define pos_tex x_
#define q_tex q_
#endif

View File

@ -28,9 +28,6 @@
#define tagint int64_t
#endif
#endif
#ifdef LAMMPS_SMALLSMALL
#define tagint int
#endif
#ifndef _DOUBLE_DOUBLE
_texture( pos_tex,float4);
#else
@ -140,9 +137,6 @@ __kernel void kernel_calc_cell_counts(const unsigned *restrict cell_id,
#ifdef LAMMPS_BIGBIG
#define tagint long
#endif
#ifdef LAMMPS_SMALLSMALL
#define tagint int
#endif
#endif
__kernel void transpose(__global tagint *restrict out,

View File

@ -150,8 +150,7 @@ enum{SPHERE_SPHERE,SPHERE_ELLIPSE,ELLIPSE_SPHERE,ELLIPSE_ELLIPSE};
// default to 32-bit smallint and other ints, 64-bit bigint:
// same as defined in src/lmptype.h
#if !defined(LAMMPS_SMALLSMALL) && !defined(LAMMPS_BIGBIG) && \
!defined(LAMMPS_SMALLBIG)
#if !defined(LAMMPS_BIGBIG) && !defined(LAMMPS_SMALLBIG)
#define LAMMPS_SMALLBIG
#endif
@ -164,9 +163,5 @@ typedef int tagint;
typedef int64_t tagint;
#define OCL_INT_TYPE "-DLAMMPS_BIGBIG"
#endif
#ifdef LAMMPS_SMALLSMALL
typedef int tagint;
#define OCL_INT_TYPE "-DLAMMPS_SMALLSMALL"
#endif
#endif // LAL_PRECISION_H

View File

@ -406,7 +406,6 @@ ucl_inline int sbmask15(int j) { return j >> SBBITS15 & 7; };
// default to 32-bit smallint and other ints, 64-bit bigint:
// same as defined in src/lmptype.h
#if !defined(LAMMPS_SMALLSMALL) && !defined(LAMMPS_BIGBIG) && \
!defined(LAMMPS_SMALLBIG)
#if !defined(LAMMPS_BIGBIG) && !defined(LAMMPS_SMALLBIG)
#define LAMMPS_SMALLBIG
#endif

View File

@ -27,6 +27,8 @@ parser.add_argument("-w", "--wheeldir", required=False,
help="path to a directory where the created wheel will be stored")
parser.add_argument("-v", "--versionfile", required=True,
help="path to the LAMMPS version.h source file")
parser.add_argument("-f", "--force", action="store_true", required=False, default=False,
help="force installation of LAMMPS Python package")
args = parser.parse_args()
@ -145,7 +147,10 @@ else:
py_exe = sys.executable
try:
txt = subprocess.check_output([py_exe, '-m', 'pip', 'install', '--force-reinstall', wheel], stderr=subprocess.STDOUT, shell=False)
if args.force:
txt = subprocess.check_output([py_exe, '-m', 'pip', 'install', '--force-reinstall', '--break-system-packages', wheel], stderr=subprocess.STDOUT, shell=False)
else:
txt = subprocess.check_output([py_exe, '-m', 'pip', 'install', '--force-reinstall', wheel], stderr=subprocess.STDOUT, shell=False)
print(txt.decode('UTF-8'))
sys.exit(0)
except subprocess.CalledProcessError as err:
@ -154,7 +159,10 @@ except subprocess.CalledProcessError as err:
sys.exit(errmsg + "You need to uninstall the LAMMPS python module manually first.\n")
try:
print('Installing wheel into system site-packages folder failed. Trying user folder now')
txt = subprocess.check_output([sys.executable, '-m', 'pip', 'install', '--user', '--force-reinstall', wheel], stderr=subprocess.STDOUT, shell=False)
if args.force:
txt = subprocess.check_output([sys.executable, '-m', 'pip', 'install', '--user', '--force-reinstall', '--break-system-packages', wheel], stderr=subprocess.STDOUT, shell=False)
else:
txt = subprocess.check_output([sys.executable, '-m', 'pip', 'install', '--user', '--force-reinstall', wheel], stderr=subprocess.STDOUT, shell=False)
print(txt.decode('UTF-8'))
except:
sys.exit('Failed to install wheel ' + wheel)

View File

@ -440,7 +440,7 @@ double BondBPMSpringPlastic::single(int type, double rsq, int i, int j, double &
double r = sqrt(rsq);
double rinv = 1.0 / r;
double e = (r - r0) / r0;
double e = (r0 != 0.0) ? (r - r0) / r0 : 0.0;
if (normalize_flag)
fforce = -k[type] * (e - ep);
@ -460,7 +460,7 @@ double BondBPMSpringPlastic::single(int type, double rsq, int i, int j, double &
fforce *= rinv;
if (smooth_flag) {
double smooth = (r - r0) / (r0 * ecrit[type]);
double smooth = (r0 != 0.0) ? (r - r0) / (r0 * ecrit[type]) : 0.0;
smooth *= smooth;
smooth *= smooth;
smooth *= smooth;

View File

@ -473,7 +473,8 @@ void PairDPDCoulSlaterLong::read_restart_settings(FILE *fp)
void PairDPDCoulSlaterLong::write_data(FILE *fp)
{
for (int i = 1; i <= atom->ntypes; i++)
fprintf(fp,"%d %g %g\n",i,a0[i][i],gamma[i][i]);
fprintf(fp,"%d %g %g %s %g\n",i,a0[i][i],gamma[i][i],
(cut_slatersq[i][i] == 0.0) ? "no" : "yes", cut_dpd[i][i]);
}
/* ----------------------------------------------------------------------
@ -485,7 +486,7 @@ void PairDPDCoulSlaterLong::write_data_all(FILE *fp)
for (int i = 1; i <= atom->ntypes; i++)
for (int j = i; j <= atom->ntypes; j++)
fprintf(fp,"%d %d %g %g %s %g\n",i,j,a0[i][j],gamma[i][j],
(cut_slatersq[i][j] == 0.0) ? "yes" : "no", cut_dpd[i][j]);
(cut_slatersq[i][j] == 0.0) ? "no" : "yes", cut_dpd[i][j]);
}
/* ---------------------------------------------------------------------- */

View File

@ -882,7 +882,7 @@ void ComputeStressMop::compute_dihedrals()
double x_atom_4[3] = {0.0, 0.0, 0.0};
// initialization
for (int i = 0; i < nvalues; i++) { dihedral_local[i] = 0.0; }
for (int i = 0; i < nvalues; i++) dihedral_local[i] = 0.0;
double local_contribution[3] = {0.0, 0.0, 0.0};
for (atom2 = 0; atom2 < nlocal; atom2++) {
@ -1118,10 +1118,6 @@ void ComputeStressMop::compute_dihedrals()
df[2] = sgn * (f1[2] + f3[2]);
}
// no if matches
else {
df[0] = df[1] = df[2] = 0.0;
}
local_contribution[0] += df[0] / area * nktv2p;
local_contribution[1] += df[1] / area * nktv2p;
local_contribution[2] += df[2] / area * nktv2p;

View File

@ -2301,7 +2301,7 @@ void Atom::first_reorder()
// nfirst = index of first atom not in firstgroup
// when find firstgroup atom out of place, swap it with atom nfirst
int bitmask = group->bitmask[firstgroup];
const int bitmask = group->get_bitmask_by_id(FLERR, firstgroupname, "Atom::first_reorder");
nfirst = 0;
while (nfirst < nlocal && mask[nfirst] & bitmask) nfirst++;

View File

@ -52,9 +52,7 @@ void ChangeBox::command(int narg, char **arg)
// group
int igroup = group->find(arg[0]);
if (igroup == -1) error->all(FLERR,"Could not find change_box group ID {}", arg[0]);
int groupbit = group->bitmask[igroup];
int groupbit = group->get_bitmask_by_id(FLERR, arg[0], "change_box");
// parse operation arguments
// allocate ops to max possible length

View File

@ -48,11 +48,11 @@ Compute::Compute(LAMMPS *lmp, int narg, char **arg) :
id = utils::strdup(arg[0]);
if (!utils::is_id(id))
error->all(FLERR,"Compute ID must be alphanumeric or underscore characters");
error->all(FLERR,"Compute ID {} must only have alphanumeric or underscore characters", id);
groupbit = group->get_bitmask_by_id(FLERR, arg[1], fmt::format("compute {}", arg[2]));
igroup = group->find(arg[1]);
if (igroup == -1) error->all(FLERR,"Could not find compute group ID");
groupbit = group->bitmask[igroup];
if (igroup == -1) error->all(FLERR,"Could not find compute group ID {}", arg[1]);
style = utils::strdup(arg[2]);

View File

@ -39,8 +39,7 @@ ComputeCoordAtom::ComputeCoordAtom(LAMMPS *lmp, int narg, char **arg) :
{
if (narg < 5) error->all(FLERR, "Illegal compute coord/atom command");
jgroup = group->find("all");
jgroupbit = group->bitmask[jgroup];
jgroupbit = group->get_bitmask_by_id(FLERR, "all", "compute coord/atom");
cstyle = NONE;
if (strcmp(arg[3], "cutoff") == 0) {
@ -50,11 +49,10 @@ ComputeCoordAtom::ComputeCoordAtom(LAMMPS *lmp, int narg, char **arg) :
int iarg = 5;
if ((narg > 6) && (strcmp(arg[5], "group") == 0)) {
delete[] group2;
group2 = utils::strdup(arg[6]);
iarg += 2;
jgroup = group->find(group2);
if (jgroup == -1) error->all(FLERR, "Compute coord/atom group2 ID does not exist");
jgroupbit = group->bitmask[jgroup];
jgroupbit = group->get_bitmask_by_id(FLERR, group2, "compute coord/atom");
}
ncol = narg - iarg + 1;

View File

@ -46,7 +46,7 @@ class ComputeCoordAtom : public Compute {
double **carray;
char *group2;
int jgroup, jgroupbit;
int jgroupbit;
class ComputeOrientOrderAtom *c_orientorder;
char *id_orientorder;

View File

@ -54,9 +54,7 @@ ComputeGroupGroup::ComputeGroupGroup(LAMMPS *lmp, int narg, char **arg) :
extvector = 1;
group2 = utils::strdup(arg[3]);
jgroup = group->find(group2);
if (jgroup == -1) error->all(FLERR, "Compute group/group group ID does not exist");
jgroupbit = group->bitmask[jgroup];
jgroupbit = group->get_bitmask_by_id(FLERR, group2, "compute group/group");
pairflag = 1;
kspaceflag = 0;
@ -147,9 +145,7 @@ void ComputeGroupGroup::init()
// recheck that group 2 has not been deleted
jgroup = group->find(group2);
if (jgroup == -1) error->all(FLERR, "Compute group/group group ID does not exist");
jgroupbit = group->bitmask[jgroup];
jgroupbit = group->get_bitmask_by_id(FLERR, group2, "compute group/group");
// need an occasional half neighbor list

View File

@ -35,7 +35,7 @@ class ComputeGroupGroup : public Compute {
private:
char *group2;
int jgroup, jgroupbit, othergroupbit;
int jgroupbit;
double **cutsq;
double e_self, e_correction;
int pairflag, kspaceflag, boundaryflag, molflag;

View File

@ -59,12 +59,8 @@ void CreateBonds::command(int narg, char **arg)
if (strcmp(arg[0], "many") == 0) {
style = MANY;
if (narg != 6) error->all(FLERR, "No optional keywords allowed with create_bonds many");
igroup = group->find(arg[1]);
if (igroup == -1) error->all(FLERR, "Cannot find create_bonds first group ID {}", arg[1]);
group1bit = group->bitmask[igroup];
igroup = group->find(arg[2]);
if (igroup == -1) error->all(FLERR, "Cannot find create_bonds second group ID {}", arg[2]);
group2bit = group->bitmask[igroup];
group1bit = group->get_bitmask_by_id(FLERR, arg[1], "create_bonds");
group2bit = group->get_bitmask_by_id(FLERR, arg[2], "create_bonds");
btype = utils::inumeric(FLERR, arg[3], false, lmp);
rmin = utils::numeric(FLERR, arg[4], false, lmp);
rmax = utils::numeric(FLERR, arg[5], false, lmp);

View File

@ -30,7 +30,7 @@ class CreateBonds : public Command {
void command(int, char **) override;
private:
int igroup, group1bit, group2bit;
int group1bit, group2bit;
int btype, atype, dtype;
tagint batom1, batom2, aatom1, aatom2, aatom3, datom1, datom2, datom3, datom4;
double rmin, rmax;

View File

@ -87,8 +87,8 @@ void DeleteAtoms::command(int narg, char **arg)
error->all(FLERR, "Unknown delete_atoms sub-command: {}", arg[0]);
if (allflag) {
int igroup = group->find("all");
if ((igroup >= 0) && modify->check_rigid_group_overlap(group->bitmask[igroup]))
int igroupbit = group->get_bitmask_by_id(FLERR, "all", "delete_atoms");
if (modify->check_rigid_group_overlap(igroupbit))
error->warning(FLERR, "Attempting to delete atoms in rigid bodies");
} else {
if (modify->check_rigid_list_overlap(dlist))
@ -216,8 +216,7 @@ void DeleteAtoms::delete_group(int narg, char **arg)
{
if (narg < 2) utils::missing_cmd_args(FLERR, "delete_atoms group", error);
int igroup = group->find(arg[1]);
if (igroup == -1) error->all(FLERR, "Could not find delete_atoms group ID {}", arg[1]);
int groupbit = group->get_bitmask_by_id(FLERR, arg[1], "delete_atoms");
options(narg - 2, &arg[2]);
// check for special case of group = all
@ -234,8 +233,6 @@ void DeleteAtoms::delete_group(int narg, char **arg)
for (int i = 0; i < nlocal; i++) dlist[i] = 0;
int *mask = atom->mask;
int groupbit = group->bitmask[igroup];
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) dlist[i] = 1;
}
@ -281,18 +278,11 @@ void DeleteAtoms::delete_overlap(int narg, char **arg)
const double cut = utils::numeric(FLERR, arg[1], false, lmp);
const double cutsq = cut * cut;
const int group1bit = group->get_bitmask_by_id(FLERR, arg[2], "delete_atoms");
const int group2bit = group->get_bitmask_by_id(FLERR, arg[3], "delete_atoms");
int igroup1 = group->find(arg[2]);
if (igroup1 < 0)
error->all(FLERR, "Could not find delete_atoms overlap first group ID {}", arg[2]);
int igroup2 = group->find(arg[3]);
if (igroup2 < 0)
error->all(FLERR, "Could not find delete_atoms overlap second group ID {}", arg[3]);
options(narg - 4, &arg[4]);
const int group1bit = group->bitmask[igroup1];
const int group2bit = group->bitmask[igroup2];
if (comm->me == 0) utils::logmesg(lmp, "System init for delete_atoms ...\n");
// request a full neighbor list for use by this command
@ -454,9 +444,7 @@ void DeleteAtoms::delete_random(int narg, char **arg)
error->all(FLERR, "Unknown delete_atoms random style: {}", arg[1]);
}
int igroup = group->find(arg[4]);
if (igroup == -1) error->all(FLERR, "Could not find delete_atoms random group ID {}", arg[4]);
int groupbit = group->get_bitmask_by_id(FLERR, arg[4], "delete_atoms");
auto region = domain->get_region_by_id(arg[5]);
if (!region && (strcmp(arg[5], "NULL") != 0))
error->all(FLERR, "Could not find delete_atoms random region ID {}", arg[5]);
@ -477,7 +465,6 @@ void DeleteAtoms::delete_random(int narg, char **arg)
double **x = atom->x;
int *mask = atom->mask;
int groupbit = group->bitmask[igroup];
if (region) region->prematch();
// delete approximate fraction of atoms in both group and region

View File

@ -56,11 +56,9 @@ void DeleteBonds::command(int narg, char **arg)
if (comm->me == 0) utils::logmesg(lmp,"Deleting bonds ...\n");
// identify group
// get group bitmask
int igroup = group->find(arg[0]);
if (igroup == -1) error->all(FLERR,"Cannot find delete_bonds group ID");
int groupbit = group->bitmask[igroup];
int groupbit = group->get_bitmask_by_id(FLERR, arg[0], "delete_bonds");
// set style and which = type value

View File

@ -74,8 +74,7 @@ void DisplaceAtoms::command(int narg, char **arg)
// group and style
igroup = group->find(arg[0]);
if (igroup == -1) error->all(FLERR,"Could not find displace_atoms group ID");
groupbit = group->bitmask[igroup];
groupbit = group->get_bitmask_by_id(FLERR, arg[0], "displace_atoms");
if (modify->check_rigid_group_overlap(groupbit))
error->warning(FLERR,"Attempting to displace atoms in rigid bodies");

View File

@ -58,7 +58,7 @@ Dump::Dump(LAMMPS *lmp, int /*narg*/, char **arg) :
id = utils::strdup(arg[0]);
igroup = group->find(arg[1]);
groupbit = group->bitmask[igroup];
groupbit = group->get_bitmask_by_id(FLERR, arg[1], fmt::format("dump {}", arg[2]));
style = utils::strdup(arg[2]);
@ -311,6 +311,7 @@ void Dump::init()
int Dump::count()
{
// group all
if (igroup == 0) return atom->nlocal;
int *mask = atom->mask;

View File

@ -48,8 +48,8 @@ Fix::Fix(LAMMPS *lmp, int /*narg*/, char **arg) :
error->all(FLERR,"Fix ID must be alphanumeric or underscore characters");
igroup = group->find(arg[1]);
if (igroup == -1) error->all(FLERR,"Could not find fix group ID");
groupbit = group->bitmask[igroup];
if (igroup == -1) error->all(FLERR,"Could not find fix {} group ID {}", arg[2], arg[1]);
groupbit = group->get_bitmask_by_id(FLERR, arg[1], fmt::format("fix {}",arg[2]));
style = utils::strdup(arg[2]);

View File

@ -294,6 +294,7 @@ void FixHalt::end_of_step()
for (int i = 0; i < universe->nworlds; ++i) {
if (universe->me == universe->root_proc[i]) continue;
MPI_Wait(req + i, MPI_STATUS_IGNORE);
MPI_Request_free(req + i);
}
}

View File

@ -271,7 +271,7 @@ FixNH::FixNH(LAMMPS *lmp, int narg, char **arg) :
delete[] id_dilate;
id_dilate = utils::strdup(arg[iarg+1]);
int idilate = group->find(id_dilate);
if (idilate == -1)
if (idilate < 0)
error->all(FLERR,"Fix {} dilate group ID {} does not exist", style, id_dilate);
}
iarg += 2;
@ -629,12 +629,8 @@ void FixNH::init()
{
// recheck that dilate group has not been deleted
if (allremap == 0) {
int idilate = group->find(id_dilate);
if (idilate == -1)
error->all(FLERR,"Fix {} dilate group ID {} does not exist", style, id_dilate);
dilate_group_bit = group->bitmask[idilate];
}
if (allremap == 0)
dilate_group_bit = group->get_bitmask_by_id(FLERR, id_dilate, fmt::format("fix {}", style));
// ensure no conflict with fix deform

View File

@ -41,7 +41,7 @@ enum{BOX,LATTICE,FRACTION};
FixRecenter::FixRecenter(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg)
{
if (narg < 6) error->all(FLERR,"Illegal fix recenter command");
if (narg < 6) utils::missing_cmd_args(FLERR,"fix recenter", error);
xcom = ycom = zcom = 0.0;
xflag = yflag = zflag = 1;
@ -74,17 +74,15 @@ FixRecenter::FixRecenter(LAMMPS *lmp, int narg, char **arg) :
int iarg = 6;
while (iarg < narg) {
if (strcmp(arg[iarg],"shift") == 0) {
int igroup2 = group->find(arg[iarg+1]);
if (igroup2 < 0) error->all(FLERR,"Could not find fix recenter group ID");
group2bit = group->bitmask[igroup2];
group2bit = group->get_bitmask_by_id(FLERR, arg[iarg+1], "fix recenter");
iarg += 2;
} else if (strcmp(arg[iarg],"units") == 0) {
if (strcmp(arg[iarg+1],"box") == 0) scaleflag = BOX;
else if (strcmp(arg[iarg+1],"lattice") == 0) scaleflag = LATTICE;
else if (strcmp(arg[iarg+1],"fraction") == 0) scaleflag = FRACTION;
else error->all(FLERR,"Illegal fix recenter command");
else error->all(FLERR,"Unknown fix recenter units argument {}", arg[iarg+1]);
iarg += 2;
} else error->all(FLERR,"Illegal fix recenter command");
} else error->all(FLERR,"Unknown fix recenter keyword {}", arg[iarg]);
}
// scale xcom,ycom,zcom
@ -103,8 +101,7 @@ FixRecenter::FixRecenter(LAMMPS *lmp, int narg, char **arg) :
// cannot have 0 atoms in group
if (group->count(igroup) == 0)
error->all(FLERR,"Fix recenter group has no atoms");
if (group->count(igroup) == 0) error->all(FLERR,"Fix recenter group {} has no atoms", arg[1]);
}
/* ---------------------------------------------------------------------- */

View File

@ -73,11 +73,9 @@ FixSpring::FixSpring(LAMMPS *lmp, int narg, char **arg) :
group2 = utils::strdup(arg[4]);
igroup2 = group->find(arg[4]);
if (igroup2 == -1)
error->all(FLERR,"Fix spring couple group ID does not exist");
if (igroup2 == igroup)
error->all(FLERR,"Two groups cannot be the same in fix spring couple");
group2bit = group->bitmask[igroup2];
error->all(FLERR,"The two groups cannot be the same in fix spring couple");
group2bit = group->get_bitmask_by_id(FLERR, arg[4], "fix spring");
k_spring = utils::numeric(FLERR,arg[5],false,lmp);
xflag = yflag = zflag = 1;
@ -121,9 +119,7 @@ void FixSpring::init()
if (group2) {
igroup2 = group->find(group2);
if (igroup2 == -1)
error->all(FLERR,"Fix spring couple group ID does not exist");
group2bit = group->bitmask[igroup2];
group2bit = group->get_bitmask_by_id(FLERR, group2, "fix spring");
}
masstotal = group->mass(igroup);

View File

@ -649,6 +649,19 @@ int Group::find_unused()
return -1;
}
/* ----------------------------------------------------------------------
return group bitmask for given group id. Error out if group is not found.
------------------------------------------------------------------------- */
int Group::get_bitmask_by_id(const std::string &file, int line, const std::string &name,
const std::string &caller)
{
int igroup = find(name);
if (igroup < 0)
error->all(file, line, "Group ID {} requested by {} does not exist", name, caller);
return bitmask[igroup];
}
/* ----------------------------------------------------------------------
add atoms to group that are in same molecules as atoms already in group
do not include molID = 0

View File

@ -31,11 +31,13 @@ class Group : protected Pointers {
Group(class LAMMPS *);
~Group() override;
void assign(int, char **); // assign atoms to a group
void assign(const std::string &); // convenience function
void create(const std::string &, int *); // add flagged atoms to a group
int find(const std::string &); // lookup name in list of groups
int find_or_create(const char *); // lookup name or create new group
int get_bitmask_by_id(const std::string &, int, const std::string &, const std::string &);
void write_restart(FILE *);
void read_restart(FILE *);

View File

@ -304,8 +304,6 @@ void Info::command(int narg, char **arg)
fputs("-DLAMMPS_BIGBIG\n",out);
#elif defined(LAMMPS_SMALLBIG)
fputs("-DLAMMPS_SMALLBIG\n",out);
#else // defined(LAMMPS_SMALLSMALL)
fputs("-DLAMMPS_SMALLSMALL\n",out);
#endif
if (has_gzip_support()) utils::print(out,"\n{}\n",platform::compress_info());

View File

@ -694,11 +694,6 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) :
sizeof(tagint) != 8 || sizeof(bigint) != 8)
error->all(FLERR,"Small to big integers are not sized correctly");
#endif
#ifdef LAMMPS_SMALLSMALL
if (sizeof(smallint) != 4 || sizeof(imageint) != 4 ||
sizeof(tagint) != 4 || sizeof(bigint) != 4)
error->all(FLERR,"Small to big integers are not sized correctly");
#endif
// create Kokkos class if KOKKOS installed, unless explicitly switched off
// instantiation creates dummy Kokkos class if KOKKOS is not installed
@ -1487,8 +1482,6 @@ void LAMMPS::print_config(FILE *fp)
fputs("-DLAMMPS_BIGBIG\n",fp);
#elif defined(LAMMPS_SMALLBIG)
fputs("-DLAMMPS_SMALLBIG\n",fp);
#else // defined(LAMMPS_SMALLSMALL)
fputs("-DLAMMPS_SMALLSMALL\n",fp);
#endif
utils::print(fp,"sizeof(smallint): {}-bit\n"

View File

@ -24,7 +24,7 @@
/* We follow the behavior of regular LAMMPS compilation and assume
* -DLAMMPS_SMALLBIG when no define is set. */
#if !defined(LAMMPS_BIGBIG) && !defined(LAMMPS_SMALLBIG) && !defined(LAMMPS_SMALLSMALL)
#if !defined(LAMMPS_BIGBIG) && !defined(LAMMPS_SMALLBIG)
#define LAMMPS_SMALLBIG
#endif

View File

@ -80,10 +80,16 @@ static constexpr uint32_t MEMCPYMASK = (static_cast<uint32_t>(1) << 31) - 1U;
// default to 32-bit smallint and other ints, 64-bit bigint
#if !defined(LAMMPS_SMALLSMALL) && !defined(LAMMPS_BIGBIG) && !defined(LAMMPS_SMALLBIG)
#if !defined(LAMMPS_BIGBIG) && !defined(LAMMPS_SMALLBIG)
#define LAMMPS_SMALLBIG
#endif
// we no longer support LAMMPS_SMALLSMALL
#if defined(LAMMPS_SMALLSMALL)
#error LAMMPS no longer supports -DLAMMPS_SMALLSMALL
#endif
// allow user override of LONGLONG to LONG, necessary for some machines/MPI
#ifdef LAMMPS_LONGLONG_TO_LONG
@ -162,40 +168,6 @@ typedef int64_t bigint;
#endif
// for machines that do not support 64-bit ints
// 32-bit smallint/imageint/tagint/bigint
#ifdef LAMMPS_SMALLSMALL
typedef int smallint;
typedef int imageint;
typedef int tagint;
typedef int bigint;
#define MAXSMALLINT INT_MAX
#define MAXTAGINT INT_MAX
#define MAXBIGINT INT_MAX
#define MAXDOUBLEINT INT_MAX
#define MPI_LMP_TAGINT MPI_INT
#define MPI_LMP_IMAGEINT MPI_INT
#define MPI_LMP_BIGINT MPI_INT
#define TAGINT_FORMAT "%d"
#define BIGINT_FORMAT "%d"
#define LAMMPS_TAGINT LAMMPS_INT
#define LAMMPS_TAGINT_2D LAMMPS_INT_2D
#define LAMMPS_BIGINT LAMMPS_INT
#define LAMMPS_BIGINT_2D LAMMPS_INT_2D
#define IMGMASK 1023
#define IMGMAX 512
#define IMGBITS 10
#define IMG2BITS 20
#endif
/** Data structure for packing 32-bit and 64-bit integers
* into double (communication) buffers
*

View File

@ -272,16 +272,18 @@ void utils::print(FILE *fp, const std::string &mesg)
void utils::fmtargs_print(FILE *fp, fmt::string_view format, fmt::format_args args)
{
try {
print(fp, fmt::vformat(format, args));
} catch (fmt::format_error &) {
; // do nothing
}
print(fp, fmt::vformat(format, args));
}
std::string utils::errorurl(int errorcode)
{
return fmt::format("\nFor more information see https://docs.lammps.org/err{:04d}", errorcode);
std::string url;
try {
url = fmt::format("\nFor more information see https://docs.lammps.org/err{:04d}", errorcode);
} catch (std::exception &) {
url = std::string("\nFor more information see https://docs.lammps.org/Errors_details.html");
}
return url;
}
void utils::flush_buffers(LAMMPS *lmp)

View File

@ -23,7 +23,7 @@
#include <cstring>
// these must match settings in src/lmptype.h which builds LAMMPS with
// -DLAMMPS_SMALLBIG (the default), -DLAMMPS_BIGBIG, or -DLAMMPS_SMALLSMALL
// -DLAMMPS_SMALLBIG (the default) or -DLAMMPS_BIGBIG
// you can edit the tools/Makefile to enforce the same setting
// for the build of binary2txt, e.g.
// g++ -g -DLAMMPS_BIGBIG binarytxt.o -o binary2txt
@ -36,7 +36,7 @@
#define PRId64 "ld"
#endif
#if !defined(LAMMPS_SMALLSMALL) && !defined(LAMMPS_BIGBIG) && !defined(LAMMPS_SMALLBIG)
#if !defined(LAMMPS_BIGBIG) && !defined(LAMMPS_SMALLBIG)
#define LAMMPS_SMALLBIG
#endif
@ -44,10 +44,6 @@
typedef int tagint;
typedef int64_t bigint;
#define BIGINT_FORMAT "%" PRId64
#elif defined(LAMMPS_SMALLSMALL)
typedef int tagint;
typedef int bigint;
#define BIGINT_FORMAT "%d"
#else /* LAMMPS_BIGBIG */
typedef int64_t tagint;
typedef int64_t bigint;

View File

@ -94,8 +94,8 @@ endif()
option(BUILD_WHAM "Download and compile WHAM executable from Grossfield Lab" YES)
if(BUILD_WHAM)
set(WHAM_URL "http://membrane.urmc.rochester.edu/sites/default/files/wham/wham-release-2.0.11.tgz" CACHE STRING "URL for WHAM tarball")
set(WHAM_MD5 "f56751ac71a8d1c485b9ebd4ccff8dbe" CACHE STRING "MD5 checksum of WHAM tarball")
set(WHAM_URL "http://membrane.urmc.rochester.edu/sites/default/files/wham/wham-release-2.1.0.tgz" CACHE STRING "URL for WHAM tarball")
set(WHAM_MD5 "4ed6e24254925ec124f44bb381c3b87f" CACHE STRING "MD5 checksum of WHAM tarball")
mark_as_advanced(WHAM_URL)
mark_as_advanced(WHAM_MD5)
@ -122,7 +122,7 @@ if(BUILD_WHAM)
if(PATCH_FOUND)
message(STATUS "Apply patch to customize WHAM using ${Patch_EXECUTABLE}")
execute_process(
COMMAND ${Patch_EXECUTABLE} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/update-wham-2.0.11.patch
COMMAND ${Patch_EXECUTABLE} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/update-wham-2.1.0.patch
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/_deps/src/wham/
)
endif()

View File

@ -61,7 +61,6 @@
Highlight warnings and error messages in Output window
Make Tutorial wizards more compact
Include download and compilation of WHAM software from Alan Grossfield
Add dialog to run WHAM directly from LAMMPS-GUI
Add entry to Run menu to restart the LAMMPS instance
Use mutex to avoid corruption of thermo data
</description>

View File

@ -1,73 +1,29 @@
diff --git a/.gitignore b/.gitignore
index 28ac6ef..a401160 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,6 +6,8 @@ doc.toc
wham-dist.tar.gz
*.o
+*~
wham/wham
wham-2d/wham-2d
+/build
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..b4f0fe6
--- /dev/null
index b4f0fe6..a61cec8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -0,0 +1,38 @@
+# Custom minimal -*- CMake -*- file for wham
+
+cmake_minimum_required(VERSION 3.16)
+project(wham VERSION 2.0.11
+ DESCRIPTION "WHAM: a fast, memory efficient implementation of the Weighted Histogram Analysis Method"
+ LANGUAGES C
+ HOMEPAGE_URL http://membrane.urmc.rochester.edu/content/wham/)
+
+include(GNUInstallDirs)
+
+add_executable(wham
+ nr/ran2.c
+ nr/locate.c
+ wham/wham.c
+ wham/file_read.c
+ wham/histogram.c
+ wham/bootstrap.c
+)
+target_include_directories(wham PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/wham)
+target_link_libraries(wham PRIVATE m)
+install(TARGETS wham DESTINATION ${CMAKE_INSTALL_BINDIR})
+
+add_executable(wham-2d
+ nr/ran2.c
+ nr/locate.c
+ wham-2d/wham-2d.c
+ wham-2d/file_read.c
+ wham-2d/histogram.c
+ wham/bootstrap.c
+)
+target_include_directories(wham-2d PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/wham)
+target_link_libraries(wham-2d PRIVATE m)
+install(TARGETS wham-2d DESTINATION ${CMAKE_INSTALL_BINDIR})
+
+install(FILES doc/doc.pdf
+ TYPE DOC
+ PERMISSIONS OWNER_READ GROUP_READ WORLD_READ
+)
diff --git a/nr/locate.c b/nr/locate.c
index 9f92dc0..f3bf294 100644
--- a/nr/locate.c
+++ b/nr/locate.c
@@ -11,7 +11,7 @@ void locate(double xx[], int n, double x, int *j)
ascnd=(xx[n] > xx[0]); // I think this makes it zero based
while (ju-jl > 1) {
jm=(ju+jl) >> 1;
- if (x > xx[jm] == ascnd)
+ if ((x > xx[jm]) == ascnd)
jl=jm;
else
ju=jm;
@@ -1,7 +1,7 @@
# Custom minimal -*- CMake -*- file for wham
cmake_minimum_required(VERSION 3.16)
-project(wham VERSION 2.0.11
+project(wham VERSION 2.1.0
DESCRIPTION "WHAM: a fast, memory efficient implementation of the Weighted Histogram Analysis Method"
LANGUAGES C
HOMEPAGE_URL http://membrane.urmc.rochester.edu/content/wham/)
diff --git a/doc/doc.tex b/doc/doc.tex
index cf36616..84ee891 100644
--- a/doc/doc.tex
+++ b/doc/doc.tex
@@ -53,7 +53,7 @@ Suggestions and patches are welcome.
\subsection{New in release 2.1.0}
-Two changes, both contributed by Alex Kohlmeyer. First, we switched from old
+Two changes, both contributed by Axel Kohlmeyer. First, we switched from old
make to CMake for the build. Second, we changed how energy units are set; where
it used to be a compile-time option, now it is set on the command line.
diff --git a/wham-2d/histogram.c b/wham-2d/histogram.c
index 1bd1329..b5d1c01 100644
--- a/wham-2d/histogram.c
@ -127,99 +83,10 @@ index 1bd1329..b5d1c01 100644
-
-
diff --git a/wham-2d/wham-2d.c b/wham-2d/wham-2d.c
index fb6e059..a6b8483 100644
index 76389ac..05fe7cf 100644
--- a/wham-2d/wham-2d.c
+++ b/wham-2d/wham-2d.c
@@ -25,7 +25,7 @@
#include <time.h>
#include "wham-2d.h"
-#define COMMAND_LINE "Command line: wham-2d Px[=0|pi|val] hist_min_x hist_max_x num_bins_x Py[=0|pi|val] hist_min_y hist_max_y num_bins_y tol temperature numpad metadatafile freefile use_mask\n"
+#define COMMAND_LINE "Command line: wham-2d [units <real|metal|lj|...>] Px[=0|pi|val] hist_min_x hist_max_x num_bins_x Py[=0|pi|val] hist_min_y hist_max_y num_bins_y tol temperature numpad metadatafile freefile use_mask\n"
double HIST_MAXx,HIST_MINx,BIN_WIDTHx;
double HIST_MAXy,HIST_MINy,BIN_WIDTHy;
double TOL;
@@ -35,7 +35,7 @@ int NUM_BINSx, NUM_BINSy;
int PERIODICx, PERIODICy;
double PERIODx, PERIODy;
double *data1,**num,***bias;
-
+double k_B = k_B_DEFAULT;
int main(int argc, char *argv[])
{
@@ -57,7 +57,7 @@ double sum;
int iteration;
int max_iteration = 100000;
int numpad;
-int **mask;
+int **mask = NULL;
int use_mask;
cpu1 = ((double) clock())/CLOCKS_PER_SEC;
@@ -76,6 +76,61 @@ for (i=0; i<argc; i++)
}
printf("\n");
+// set k_B according to LAMMPS units settings
+if (strcmp(argv[1],"units") == 0)
+ {
+ if (argc < 3)
+ {
+ printf( COMMAND_LINE );
+ exit(-1);
+ }
+
+ if (strcmp(argv[2], "lj") == 0)
+ {
+ k_B = 1.0;
+ }
+ else if (strcmp(argv[2], "real") == 0)
+ {
+ k_B = 0.0019872067;
+ }
+ else if (strcmp(argv[2], "metal") == 0)
+ {
+ k_B = 8.617343e-5;
+ }
+ else if (strcmp(argv[2], "si") == 0)
+ {
+ k_B = 1.3806504e-23;
+ }
+ else if (strcmp(argv[2], "cgs") == 0)
+ {
+ k_B = 1.3806504e-16;
+ }
+ else if (strcmp(argv[2], "electron") == 0)
+ {
+ k_B = 3.16681534e-6;
+ }
+ else if (strcmp(argv[2], "micro") == 0)
+ {
+ k_B = 1.3806504e-8;
+ }
+ else if (strcmp(argv[2], "nano") == 0)
+ {
+ k_B = 0.013806504;
+ }
+ else if (strcmp(argv[2], "default") == 0)
+ {
+ k_B = k_B_DEFAULT;
+ }
+ else
+ {
+ printf("Unknown unit style: %s\n%s", argv[2], COMMAND_LINE);
+ exit(-1);
+ }
+ printf("# Setting value of k_B to = %.15g\n", k_B);
+ argc -= 2;
+ argv += 2;
+ }
+
PERIODICx = parse_periodic(argv[1], &PERIODx);
if (PERIODICx)
{
@@ -360,8 +415,8 @@ while ( ! iConverged || first)
@@ -417,8 +417,8 @@ while ( ! iConverged || first)
for (j=0; j< NUM_BINSy; j++)
{
calc_coor(i,j,coor);
@ -230,7 +97,7 @@ index fb6e059..a6b8483 100644
}
}
@@ -444,8 +499,9 @@ if (!FREEFILE)
@@ -501,8 +501,9 @@ if (!FREEFILE)
for (j=0; j< NUM_BINSy; j++)
{
calc_coor(i,j,coor);
@ -242,7 +109,7 @@ index fb6e059..a6b8483 100644
}
}
exit(errno);
@@ -461,25 +517,28 @@ else
@@ -518,25 +519,28 @@ else
for (j=-numpad; j<0; j++)
{
calc_coor(i,j,coor);
@ -280,7 +147,7 @@ index fb6e059..a6b8483 100644
}
fprintf(FREEFILE, "\n");
}
@@ -490,25 +549,28 @@ else
@@ -547,25 +551,28 @@ else
for (j=-numpad; j<0; j++)
{
calc_coor(i,j,coor);
@ -318,7 +185,7 @@ index fb6e059..a6b8483 100644
}
fprintf(FREEFILE, "\n");
}
@@ -519,25 +581,28 @@ else
@@ -576,25 +583,28 @@ else
for (j=-numpad; j<0; j++)
{
calc_coor(NUM_BINSx+i,j,coor);
@ -356,30 +223,6 @@ index fb6e059..a6b8483 100644
}
fprintf(FREEFILE, "\n");
}
diff --git a/wham-2d/wham-2d.h b/wham-2d/wham-2d.h
index b17e4bd..5fc17ff 100644
--- a/wham-2d/wham-2d.h
+++ b/wham-2d/wham-2d.h
@@ -20,15 +20,15 @@ extern int NUM_BINSy;
extern int PERIODICx,PERIODICy; // flags to turn on periodicity
extern double PERIODx, PERIODy; // flags to control periodic interval
+extern double k_B;
// A couple of predefined periodic units
#define DEGREES 360.0
#define RADIANS 6.28318530717959
-#define k_B 0.001982923700 // Boltzmann's constant in kcal/mol K
-//#define k_B 0.0083144621 // Boltzmann's constant kJ/mol-K
-//#define k_B 1.0 // Boltzmann's constant in reduced units
-
+#define k_B_DEFAULT 0.001982923700 // Boltzmann's constant in kcal/mol K
+//#define k_B_DEFAULT 0.0083144621 // Boltzmann's constant kJ/mol-K
+//#define k_B_DEFAULT 1.0 // Boltzmann's constant in reduced units
// Value inserted for the free energy of masked values
diff --git a/wham/histogram.c b/wham/histogram.c
index bc52d74..635b39f 100644
--- a/wham/histogram.c
@ -432,7 +275,7 @@ index bc52d74..635b39f 100644
+return HIST_MIN + BIN_WIDTH*((double)i+0.5);
}
diff --git a/wham/wham.c b/wham/wham.c
index 487871b..edb8125 100644
index 19cf695..7bdbce1 100644
--- a/wham/wham.c
+++ b/wham/wham.c
@@ -1,4 +1,4 @@
@ -441,25 +284,11 @@ index 487871b..edb8125 100644
* WHAM -- Weighted Histogram Analysis Method
*
* Reference 1: Computer Physics Communications, 91(1995) 275-282, Benoit Roux
@@ -21,7 +21,7 @@
#include "wham.h"
-#define COMMAND_LINE "Command line: wham [P|Ppi|Pval] hist_min hist_max num_bins tol temperature numpad metadatafile freefile [num_MC_trials randSeed]\n"
+#define COMMAND_LINE "Command line: wham [units <real|metal|lj|...>] [P|Ppi|Pval] hist_min hist_max num_bins tol temperature numpad metadatafile freefile [num_MC_trials randSeed]\n"
double HIST_MAX,HIST_MIN,BIN_WIDTH,TOL;
double *HISTOGRAM;
@@ -29,6 +29,7 @@ double kT;
int NUM_BINS;
int PERIODIC;
double PERIOD;
+double k_B = k_B_DEFAULT;
int main(int argc, char *argv[])
{
@@ -41,7 +42,7 @@ int first;
int bin_min;
@@ -39,10 +39,9 @@ double kT; // temperature
int i,j;
int len;
int first;
-int bin_min;
int have_energy;
char *freefile;
-FILE *METAFILE, *FREEFILE;
@ -467,69 +296,7 @@ index 487871b..edb8125 100644
struct hist_group *hist_group;
struct histogram *hp;
double coor;
@@ -82,6 +83,61 @@ for (i=0; i<argc; i++)
}
printf("\n");
+// set k_B according to LAMMPS units settings
+if (strcmp(argv[1],"units") == 0)
+ {
+ if (argc < 3)
+ {
+ printf( COMMAND_LINE );
+ exit(-1);
+ }
+
+ if (strcmp(argv[2], "lj") == 0)
+ {
+ k_B = 1.0;
+ }
+ else if (strcmp(argv[2], "real") == 0)
+ {
+ k_B = 0.0019872067;
+ }
+ else if (strcmp(argv[2], "metal") == 0)
+ {
+ k_B = 8.617343e-5;
+ }
+ else if (strcmp(argv[2], "si") == 0)
+ {
+ k_B = 1.3806504e-23;
+ }
+ else if (strcmp(argv[2], "cgs") == 0)
+ {
+ k_B = 1.3806504e-16;
+ }
+ else if (strcmp(argv[2], "electron") == 0)
+ {
+ k_B = 3.16681534e-6;
+ }
+ else if (strcmp(argv[2], "micro") == 0)
+ {
+ k_B = 1.3806504e-8;
+ }
+ else if (strcmp(argv[2], "nano") == 0)
+ {
+ k_B = 0.013806504;
+ }
+ else if (strcmp(argv[2], "default") == 0)
+ {
+ k_B = k_B_DEFAULT;
+ }
+ else
+ {
+ printf("Unknown unit style: %s\n%s", argv[2], COMMAND_LINE);
+ exit(-1);
+ }
+ printf("# Setting value of k_B to = %.15g\n", k_B);
+ argc -= 2;
+ argv += 2;
+ }
+
if (toupper(argv[1][0]) == 'P')
{
PERIODIC = 1;
@@ -123,7 +179,7 @@ if (argc != 9 && argc !=11)
@@ -179,7 +178,7 @@ if (argc != 9 && argc !=11)
printf( COMMAND_LINE );
exit(-1);
}
@ -538,7 +305,7 @@ index 487871b..edb8125 100644
HIST_MIN = atof(argv[1]);
HIST_MAX = atof(argv[2]);
NUM_BINS = atoi(argv[3]);
@@ -213,13 +269,13 @@ if (!ave_pdf2)
@@ -269,13 +268,13 @@ if (!ave_pdf2)
printf("couldn't allocate space for ave_pdf2: %s\n", strerror(errno));
exit(errno);
}
@ -554,7 +321,7 @@ index 487871b..edb8125 100644
i = get_numwindows(METAFILE);
printf("#Number of windows = %d\n", i);
@@ -248,7 +304,7 @@ assert(i == hist_group->num_windows);
@@ -304,7 +303,7 @@ assert(i == hist_group->num_windows);
// Figure out if we have trajectories at different temperatures.
// Missing temperatures are set to -1 in read_metadata, and
// since we require that either all trajectories specify a temperature
@ -563,7 +330,7 @@ index 487871b..edb8125 100644
// have to check one of them
if (hist_group->kT[0] > 0)
{
@@ -257,7 +313,7 @@ if (hist_group->kT[0] > 0)
@@ -313,7 +312,7 @@ if (hist_group->kT[0] > 0)
else
{
have_energy = 0;
@ -572,7 +339,7 @@ index 487871b..edb8125 100644
{
hist_group->kT[i] = kT;
}
@@ -269,7 +325,7 @@ if (!final_f)
@@ -325,7 +324,7 @@ if (!final_f)
{
printf("couldn't allocate space for final_f: %s\n", strerror(errno));
exit(errno);
@ -581,7 +348,7 @@ index 487871b..edb8125 100644
free(HISTOGRAM);
@@ -305,7 +361,8 @@ while (! is_converged(hist_group) || first )
@@ -361,7 +360,8 @@ while (! is_converged(hist_group) || first )
for (i=0; i< NUM_BINS; i++)
{
coor = calc_coor(i);
@ -591,7 +358,7 @@ index 487871b..edb8125 100644
}
printf("\n");
@@ -319,7 +376,7 @@ while (! is_converged(hist_group) || first )
@@ -375,7 +375,7 @@ while (! is_converged(hist_group) || first )
}
}
// Cheesy bailout if we're going on too long
@ -600,7 +367,16 @@ index 487871b..edb8125 100644
{
printf("Too many iterations: %d\n", iteration);
break;
@@ -383,11 +440,11 @@ for (i=0; i< num_mc_runs; i++)
@@ -408,7 +408,7 @@ for (i=0; i < NUM_BINS; i++)
}
// Compute the free energy from the normalized probability
-bin_min = calc_free(free_ene, prob,kT);
+ calc_free(free_ene, prob,kT);
// Do the requested number of bootstrap monte carlo error analysis runs.
if (num_mc_runs <= 0)
@@ -439,11 +439,11 @@ for (i=0; i< num_mc_runs; i++)
//printf("Faking %d: %d %d\n", i,j,hp->num_points);
num_used = hp->last - hp->first + 1;
mk_new_hist(hp->cum, hp->data, num_used, hp->num_mc_samples, &idum);
@ -614,7 +390,7 @@ index 487871b..edb8125 100644
// perform WHAM iterations on the fake data sets
iteration = 0;
first = 1;
@@ -403,7 +460,7 @@ for (i=0; i< num_mc_runs; i++)
@@ -459,7 +459,7 @@ for (i=0; i< num_mc_runs; i++)
printf("Too many iterations: %d\n", iteration);
break;
}
@ -623,7 +399,7 @@ index 487871b..edb8125 100644
printf("#MC trial %d: %d iterations\n", i, iteration);
printf("#PMF values\n");
// accumulate the average and stdev of the resulting probabilities
@@ -419,18 +476,19 @@ for (i=0; i< num_mc_runs; i++)
@@ -475,18 +475,19 @@ for (i=0; i< num_mc_runs; i++)
for (j=0; j < NUM_BINS; j++)
{
pdf = -kT*log(prob[j]);
@ -647,7 +423,7 @@ index 487871b..edb8125 100644
for (i=0; i < NUM_BINS; i++)
{
ave_p[i] /= (double)num_mc_runs;
@@ -457,12 +515,12 @@ if (!FREEFILE)
@@ -513,12 +514,12 @@ if (!FREEFILE)
for (i=0; i< NUM_BINS; i++)
{
coor = calc_coor(i);
@ -663,7 +439,7 @@ index 487871b..edb8125 100644
}
exit(errno);
@@ -470,38 +528,37 @@ if (!FREEFILE)
@@ -526,38 +527,37 @@ if (!FREEFILE)
else
{
// write out header
@ -714,7 +490,7 @@ index 487871b..edb8125 100644
}
}
@@ -515,7 +572,7 @@ exit(0);
@@ -571,7 +571,7 @@ exit(0);
/*
* Perform a single WHAM iteration
*/
@ -723,7 +499,7 @@ index 487871b..edb8125 100644
int have_energy)
{
int i,j;
@@ -535,9 +592,9 @@ for (i=0; i<NUM_BINS; i++)
@@ -591,9 +591,9 @@ for (i=0; i<NUM_BINS; i++)
num += (double) get_histval( &(hist_group->hists[j]),i);
bias = calc_bias(hist_group,j,coor);
bf = exp((hist_group->F_old[j] - bias) / hist_group->kT[j]);
@ -736,27 +512,3 @@ index 487871b..edb8125 100644
* number of points.
*/
if (have_energy)
diff --git a/wham/wham.h b/wham/wham.h
index aacc1e8..7d509f2 100644
--- a/wham/wham.h
+++ b/wham/wham.h
@@ -15,14 +15,16 @@ extern double kT;
extern int NUM_BINS;
extern int PERIODIC;
extern double PERIOD;
+extern double k_B;
+
// Some predefined periodic units
#define DEGREES 360.0
#define RADIANS 6.28318530717959
-#define k_B 0.001982923700 // Boltzmann's constant in kcal/mol K
-//#define k_B 0.0083144621 // Boltzmann's constant kJ/mol-K
-//#define k_B 1.0 // Boltzmann's constant in reduced units
+#define k_B_DEFAULT 0.001982923700 // Boltzmann's constant in kcal/mol K
+//#define k_B_DEFAULT 0.0083144621 // Boltzmann's constant kJ/mol-K
+//#define k_B_DEFAULT 1.0 // Boltzmann's constant in reduced units
// global (untrimmed) histogram, global to prevent reallocation

View File

@ -1,393 +1,419 @@
# The oplsaa2023.lt file contains force-field parameters, atom type definitions,
# partial charges, masses and bond-angle rules for the atoms in your system.
import /usr/local/moltemplate/moltemplate/force_fields/oplsaa2024.lt
# It defines these atom types:
# atom-type charge mass btype epsilon sigma description
# @atom:54 -0.18 12.011 CT 0.066 3.5 "n-CH3 all-atom C: alkanes"
# @atom:57 -0.12 12.011 CT 0.066 3.51 "CH2 all-atom C: alkanes"
# @atom:58 -0.06 12.011 CT 0.066 3.50 "CH all-atom C: alkanes"
# @atom:60 0.06 1.008 HC 0.026 2.48 "H all-atom H: alkanes"
# @atom:229 0.14 12.011 CT 0.066 3.50 "C on N: secondary N-CHR2 amide"
# @atom:235 0.5 12.011 C~ 0.105 3.75 "C: C=O in amide. Acyl R in amides"
# @atom:236 -0.5 15.999 O~ 0.21 2.96 "O: C=O in amide. is neutral - use"
# @atom:238 -0.5 14.007 N~ 0.17 3.25 "N: secondary amide 279 for formyl H"
# @atom:241 0.3 1.008 H~ 0 0 "H on N: secondary amide"
# (Note: Future versions of OPLSAA might use different @atom type numbers.)
PolyNIPAM inherits OPLSAA {
# Charges will be overwritten.
write("Data Atoms") {
$atom:81_1 $mol @atom:81 0.0 -2.357 -0.245 0.629
$atom:81_2 $mol @atom:81 0.0 -1.194 0.752 0.778
$atom:85_1 $mol @atom:85 0.0 -2.027 -1.242 0.957
$atom:177_1 $mol @atom:177 0.0 -1.743 2.168 0.640
$atom:85_2 $mol @atom:85 0.0 -0.366 0.490 0.103
$atom:180_1 $mol @atom:180 0.0 -1.147 2.943 -0.274
$atom:178_1 $mol @atom:178 0.0 -2.700 2.545 1.293
$atom:171_1 $mol @atom:171 0.0 -1.602 4.322 -0.446
$atom:183_1 $mol @atom:183 0.0 -0.241 2.724 -0.647
$atom:80_1 $mol @atom:80 0.0 -2.662 4.430 -1.547
$atom:80_2 $mol @atom:80 0.0 -0.400 5.227 -0.741
$atom:85_3 $mol @atom:85 0.0 -2.053 4.672 0.501
$atom:85_4 $mol @atom:85 0.0 -3.539 3.796 -1.342
$atom:85_5 $mol @atom:85 0.0 -2.245 4.148 -2.526
$atom:85_6 $mol @atom:85 0.0 -3.006 5.475 -1.612
$atom:85_7 $mol @atom:85 0.0 0.080 4.944 -1.690
$atom:85_8 $mol @atom:85 0.0 0.355 5.185 0.060
$atom:85_9 $mol @atom:85 0.0 -0.737 6.273 -0.826
$atom:85_10 $mol @atom:85 0.0 -3.156 0.050 1.336
$atom:85_11 $mol @atom:85 0.0 -0.808 0.718 1.811
$atom:81_3 $mol @atom:81 0.0 -4.482 -0.662 -0.732
$atom:82_1 $mol @atom:82 0.0 -2.984 -0.308 -0.783
$atom:85_12 $mol @atom:85 0.0 -4.918 0.018 0.014
$atom:177_2 $mol @atom:177 0.0 -2.344 -1.080 -1.873
$atom:180_2 $mol @atom:180 0.0 -1.131 -1.604 -1.620
$atom:178_2 $mol @atom:178 0.0 -2.876 -1.219 -2.965
$atom:171_2 $mol @atom:171 0.0 -0.391 -2.304 -2.661
$atom:183_2 $mol @atom:183 0.0 -0.690 -1.494 -0.727
$atom:80_3 $mol @atom:80 0.0 0.802 -3.029 -2.033
$atom:80_4 $mol @atom:80 0.0 0.094 -1.373 -3.777
$atom:85_13 $mol @atom:85 0.0 -1.054 -3.067 -3.111
$atom:85_14 $mol @atom:85 0.0 0.481 -3.774 -1.288
$atom:85_15 $mol @atom:85 0.0 1.485 -2.319 -1.542
$atom:85_16 $mol @atom:85 0.0 1.368 -3.558 -2.817
$atom:85_17 $mol @atom:85 0.0 0.761 -0.594 -3.382
$atom:85_18 $mol @atom:85 0.0 -0.738 -0.879 -4.300
$atom:85_19 $mol @atom:85 0.0 0.653 -1.964 -4.521
$atom:85_20 $mol @atom:85 0.0 -4.937 -0.363 -1.697
$atom:85_21 $mol @atom:85 0.0 -2.967 0.717 -1.203
$atom:81_4 $mol @atom:81 0.0 -6.422 -2.235 -0.754
$atom:82_2 $mol @atom:82 0.0 -4.928 -2.114 -0.469
$atom:85_22 $mol @atom:85 0.0 -6.565 -1.832 -1.770
$atom:177_3 $mol @atom:177 0.0 -4.663 -2.569 0.992
$atom:180_3 $mol @atom:180 0.0 -3.960 -3.716 1.081
$atom:178_3 $mol @atom:178 0.0 -4.967 -1.904 1.963
$atom:171_3 $mol @atom:171 0.0 -3.354 -4.204 2.319
$atom:183_3 $mol @atom:183 0.0 -4.127 -4.397 0.356
$atom:80_5 $mol @atom:80 0.0 -4.295 -4.572 3.473
$atom:80_6 $mol @atom:80 0.0 -2.271 -3.244 2.828
$atom:85_23 $mol @atom:85 0.0 -2.826 -5.135 2.038
$atom:85_24 $mol @atom:85 0.0 -4.973 -5.396 3.211
$atom:85_25 $mol @atom:85 0.0 -4.909 -3.718 3.794
$atom:85_26 $mol @atom:85 0.0 -3.683 -4.896 4.331
$atom:85_27 $mol @atom:85 0.0 -2.695 -2.272 3.123
$atom:85_28 $mol @atom:85 0.0 -1.484 -3.073 2.079
$atom:85_29 $mol @atom:85 0.0 -1.791 -3.686 3.717
$atom:85_30 $mol @atom:85 0.0 -6.661 -3.312 -0.799
$atom:85_31 $mol @atom:85 0.0 -4.422 -2.764 -1.206
$atom:81_5 $mol @atom:81 0.0 -8.861 -2.101 -0.226
$atom:82_3 $mol @atom:82 0.0 -7.457 -1.604 0.194
$atom:85_32 $mol @atom:85 0.0 -8.826 -3.186 -0.048
$atom:177_4 $mol @atom:177 0.0 -7.425 -0.036 0.256
$atom:180_4 $mol @atom:180 0.0 -6.870 0.431 1.405
$atom:178_4 $mol @atom:178 0.0 -8.004 0.653 -0.558
$atom:171_4 $mol @atom:171 0.0 -7.168 1.765 1.912
$atom:183_4 $mol @atom:183 0.0 -6.797 -0.317 2.080
$atom:80_7 $mol @atom:80 0.0 -8.664 2.017 2.147
$atom:80_8 $mol @atom:80 0.0 -6.545 2.857 1.036
$atom:85_33 $mol @atom:85 0.0 -6.669 1.831 2.899
$atom:85_34 $mol @atom:85 0.0 -9.114 1.252 2.800
$atom:85_35 $mol @atom:85 0.0 -9.236 2.024 1.205
$atom:85_36 $mol @atom:85 0.0 -8.786 3.001 2.625
$atom:85_37 $mol @atom:85 0.0 -7.002 2.900 0.037
$atom:85_38 $mol @atom:85 0.0 -5.460 2.706 0.913
$atom:85_39 $mol @atom:85 0.0 -6.693 3.836 1.521
$atom:85_40 $mol @atom:85 0.0 -9.602 -1.708 0.496
$atom:85_41 $mol @atom:85 0.0 -7.328 -2.030 1.207
$atom:81_6 $mol @atom:81 0.0 -10.877 -2.392 -1.741
$atom:82_4 $mol @atom:82 0.0 -9.440 -1.848 -1.636
$atom:85_42 $mol @atom:85 0.0 -11.441 -2.051 -0.857
$atom:177_5 $mol @atom:177 0.0 -8.631 -2.553 -2.770
$atom:180_5 $mol @atom:180 0.0 -8.499 -1.785 -3.863
$atom:178_5 $mol @atom:178 0.0 -8.181 -3.684 -2.688
$atom:171_5 $mol @atom:171 0.0 -7.938 -2.258 -5.119
$atom:183_5 $mol @atom:183 0.0 -9.049 -0.943 -3.902
$atom:80_9 $mol @atom:80 0.0 -8.792 -3.342 -5.780
$atom:80_10 $mol @atom:80 0.0 -6.470 -2.687 -5.003
$atom:85_43 $mol @atom:85 0.0 -7.963 -1.383 -5.795
$atom:85_44 $mol @atom:85 0.0 -9.825 -2.995 -5.943
$atom:85_45 $mol @atom:85 0.0 -8.838 -4.264 -5.179
$atom:85_46 $mol @atom:85 0.0 -8.360 -3.594 -6.761
$atom:85_47 $mol @atom:85 0.0 -6.361 -3.605 -4.407
$atom:85_48 $mol @atom:85 0.0 -5.850 -1.903 -4.541
$atom:85_49 $mol @atom:85 0.0 -6.071 -2.887 -6.011
$atom:85_50 $mol @atom:85 0.0 -11.356 -1.921 -2.619
$atom:85_51 $mol @atom:85 0.0 -9.494 -0.756 -1.795
$atom:81_7 $mol @atom:81 0.0 -12.476 -4.326 -2.296
$atom:82_5 $mol @atom:82 0.0 -11.042 -3.918 -1.914
$atom:85_52 $mol @atom:85 0.0 -12.606 -4.028 -3.347
$atom:177_6 $mol @atom:177 0.0 -10.631 -4.675 -0.614
$atom:180_6 $mol @atom:180 0.0 -9.796 -5.703 -0.861
$atom:178_6 $mol @atom:178 0.0 -11.127 -4.453 0.474
$atom:171_6 $mol @atom:171 0.0 -9.186 -6.529 0.183
$atom:183_6 $mol @atom:183 0.0 -9.206 -5.554 -1.669
$atom:80_11 $mol @atom:80 0.0 -10.225 -7.315 0.995
$atom:80_12 $mol @atom:80 0.0 -8.204 -5.783 1.100
$atom:85_53 $mol @atom:85 0.0 -8.602 -7.290 -0.368
$atom:85_54 $mol @atom:85 0.0 -10.889 -7.898 0.339
$atom:85_55 $mol @atom:85 0.0 -10.843 -6.658 1.625
$atom:85_56 $mol @atom:85 0.0 -9.699 -8.020 1.659
$atom:85_57 $mol @atom:85 0.0 -8.739 -5.060 1.735
$atom:85_58 $mol @atom:85 0.0 -7.431 -5.245 0.530
$atom:85_59 $mol @atom:85 0.0 -7.700 -6.510 1.757
$atom:85_60 $mol @atom:85 0.0 -12.525 -5.430 -2.285
$atom:85_61 $mol @atom:85 0.0 -10.438 -4.244 -2.777
$atom:81_8 $mol @atom:81 0.0 -14.920 -4.584 -1.600
$atom:82_6 $mol @atom:82 0.0 -13.632 -3.752 -1.465
$atom:85_62 $mol @atom:85 0.0 -14.649 -5.586 -1.247
$atom:177_7 $mol @atom:177 0.0 -13.893 -2.285 -1.914
$atom:180_7 $mol @atom:180 0.0 -13.965 -1.422 -0.889
$atom:178_7 $mol @atom:178 0.0 -13.974 -1.956 -3.082
$atom:171_7 $mol @atom:171 0.0 -14.239 0.001 -1.025
$atom:183_7 $mol @atom:183 0.0 -13.577 -1.708 -0.004
$atom:80_13 $mol @atom:80 0.0 -15.680 0.246 -1.480
$atom:80_14 $mol @atom:80 0.0 -13.267 0.807 -1.893
$atom:85_63 $mol @atom:85 0.0 -14.156 0.414 -0.002
$atom:85_64 $mol @atom:85 0.0 -16.408 -0.251 -0.821
$atom:85_65 $mol @atom:85 0.0 -15.849 -0.114 -2.507
$atom:85_66 $mol @atom:85 0.0 -15.890 1.327 -1.461
$atom:85_67 $mol @atom:85 0.0 -13.268 0.469 -2.940
$atom:85_68 $mol @atom:85 0.0 -12.239 0.760 -1.513
$atom:85_69 $mol @atom:85 0.0 -13.597 1.859 -1.881
$atom:85_70 $mol @atom:85 0.0 -15.637 -4.195 -0.859
$atom:85_71 $mol @atom:85 0.0 -13.362 -3.817 -0.395
$atom:81_9 $mol @atom:81 0.0 -17.064 -5.395 -2.685
$atom:82_7 $mol @atom:82 0.0 -15.684 -4.733 -2.934
$atom:85_72 $mol @atom:85 0.0 -17.540 -4.759 -1.921
$atom:177_8 $mol @atom:177 0.0 -14.870 -5.540 -3.996
$atom:180_8 $mol @atom:180 0.0 -14.373 -4.756 -4.977
$atom:178_8 $mol @atom:178 0.0 -14.748 -6.750 -3.981
$atom:171_8 $mol @atom:171 0.0 -13.393 -5.268 -5.940
$atom:183_8 $mol @atom:183 0.0 -14.174 -3.807 -4.679
$atom:80_15 $mol @atom:80 0.0 -14.106 -6.091 -7.020
$atom:80_16 $mol @atom:80 0.0 -12.175 -6.042 -5.407
$atom:85_73 $mol @atom:85 0.0 -12.988 -4.367 -6.439
$atom:85_74 $mol @atom:85 0.0 -14.926 -5.528 -7.494
$atom:85_75 $mol @atom:85 0.0 -14.530 -7.019 -6.606
$atom:85_76 $mol @atom:85 0.0 -13.392 -6.372 -7.812
$atom:85_77 $mol @atom:85 0.0 -12.467 -7.007 -4.964
$atom:85_78 $mol @atom:85 0.0 -11.600 -5.477 -4.663
$atom:85_79 $mol @atom:85 0.0 -11.507 -6.251 -6.259
$atom:85_80 $mol @atom:85 0.0 -17.675 -5.258 -3.598
$atom:85_81 $mol @atom:85 0.0 -15.938 -3.724 -3.313
$atom:81_10 $mol @atom:81 0.0 -18.749 -7.194 -2.096
$atom:82_8 $mol @atom:82 0.0 -17.248 -6.883 -2.287
$atom:85_82 $mol @atom:85 0.0 -19.267 -6.796 -2.989
$atom:177_9 $mol @atom:177 0.0 -16.454 -7.269 -0.999
$atom:180_9 $mol @atom:180 0.0 -15.335 -7.967 -1.254
$atom:178_9 $mol @atom:178 0.0 -16.762 -6.899 0.120
$atom:171_9 $mol @atom:171 0.0 -14.367 -8.387 -0.248
$atom:183_9 $mol @atom:183 0.0 -15.240 -8.331 -2.192
$atom:80_17 $mol @atom:80 0.0 -14.904 -9.451 0.715
$atom:80_18 $mol @atom:80 0.0 -13.725 -7.242 0.549
$atom:85_83 $mol @atom:85 0.0 -13.545 -8.861 -0.817
$atom:85_84 $mol @atom:85 0.0 -15.290 -10.333 0.182
$atom:85_85 $mol @atom:85 0.0 -15.717 -9.064 1.350
$atom:85_86 $mol @atom:85 0.0 -14.087 -9.788 1.373
$atom:85_87 $mol @atom:85 0.0 -14.468 -6.647 1.100
$atom:85_88 $mol @atom:85 0.0 -13.139 -6.565 -0.089
$atom:85_89 $mol @atom:85 0.0 -13.036 -7.679 1.290
$atom:85_90 $mol @atom:85 0.0 -18.877 -8.292 -2.150
$atom:85_91 $mol @atom:85 0.0 -16.939 -7.505 -3.147
$atom:80_19 $mol @atom:80 0.0 -20.999 -7.206 -1.036
$atom:82_9 $mol @atom:82 0.0 -19.540 -6.757 -0.843
$atom:85_92 $mol @atom:85 0.0 -21.046 -8.300 -1.156
$atom:85_93 $mol @atom:85 0.0 -21.439 -6.747 -1.936
$atom:177_10 $mol @atom:177 0.0 -19.578 -5.207 -0.628
$atom:180_10 $mol @atom:180 0.0 -19.061 -4.828 0.557
$atom:178_10 $mol @atom:178 0.0 -20.185 -4.465 -1.375
$atom:171_10 $mol @atom:171 0.0 -18.878 -3.426 0.994
$atom:183_10 $mol @atom:183 0.0 -18.342 -5.450 0.901
$atom:80_20 $mol @atom:80 0.0 -19.984 -2.451 0.558
$atom:80_21 $mol @atom:80 0.0 -17.509 -2.857 0.610
$atom:85_94 $mol @atom:85 0.0 -18.906 -3.470 2.099
$atom:85_95 $mol @atom:85 0.0 -20.991 -2.887 0.651
$atom:85_96 $mol @atom:85 0.0 -19.829 -2.132 -0.485
$atom:85_97 $mol @atom:85 0.0 -19.955 -1.550 1.193
$atom:85_98 $mol @atom:85 0.0 -17.405 -2.773 -0.482
$atom:85_99 $mol @atom:85 0.0 -16.684 -3.475 0.993
$atom:85_100 $mol @atom:85 0.0 -17.407 -1.849 1.043
$atom:85_101 $mol @atom:85 0.0 -21.621 -6.939 -0.168
$atom:85_102 $mol @atom:85 0.0 -19.160 -7.294 0.044
$atom:57_1 $mol:. @atom:57 0.0 -2.357 -0.245 0.629
$atom:57_2 $mol:. @atom:57 0.0 -1.194 0.752 0.778
$atom:60_1 $mol:. @atom:60 0.0 -2.027 -1.242 0.957
$atom:235_1 $mol:. @atom:235 0.0 -1.743 2.168 0.640
$atom:60_2 $mol:. @atom:60 0.0 -0.366 0.490 0.103
$atom:238_1 $mol:. @atom:238 0.0 -1.147 2.943 -0.274
$atom:236_1 $mol:. @atom:236 0.0 -2.700 2.545 1.293
$atom:229_1 $mol:. @atom:229 0.0 -1.602 4.322 -0.446
$atom:241_1 $mol:. @atom:241 0.0 -0.241 2.724 -0.647
$atom:54_1 $mol:. @atom:54 0.0 -2.662 4.430 -1.547
$atom:54_2 $mol:. @atom:54 0.0 -0.400 5.227 -0.741
$atom:60_3 $mol:. @atom:60 0.0 -2.053 4.672 0.501
$atom:60_4 $mol:. @atom:60 0.0 -3.539 3.796 -1.342
$atom:60_5 $mol:. @atom:60 0.0 -2.245 4.148 -2.526
$atom:60_6 $mol:. @atom:60 0.0 -3.006 5.475 -1.612
$atom:60_7 $mol:. @atom:60 0.0 0.080 4.944 -1.690
$atom:60_8 $mol:. @atom:60 0.0 0.355 5.185 0.060
$atom:60_9 $mol:. @atom:60 0.0 -0.737 6.273 -0.826
$atom:60_10 $mol:. @atom:60 0.0 -3.156 0.050 1.336
$atom:60_11 $mol:. @atom:60 0.0 -0.808 0.718 1.811
$atom:57_3 $mol:. @atom:57 0.0 -4.482 -0.662 -0.732
$atom:58_1 $mol:. @atom:58 0.0 -2.984 -0.308 -0.783
$atom:60_12 $mol:. @atom:60 0.0 -4.918 0.018 0.014
$atom:235_2 $mol:. @atom:235 0.0 -2.344 -1.080 -1.873
$atom:238_2 $mol:. @atom:238 0.0 -1.131 -1.604 -1.620
$atom:236_2 $mol:. @atom:236 0.0 -2.876 -1.219 -2.965
$atom:229_2 $mol:. @atom:229 0.0 -0.391 -2.304 -2.661
$atom:241_2 $mol:. @atom:241 0.0 -0.690 -1.494 -0.727
$atom:54_3 $mol:. @atom:54 0.0 0.802 -3.029 -2.033
$atom:54_4 $mol:. @atom:54 0.0 0.094 -1.373 -3.777
$atom:60_13 $mol:. @atom:60 0.0 -1.054 -3.067 -3.111
$atom:60_14 $mol:. @atom:60 0.0 0.481 -3.774 -1.288
$atom:60_15 $mol:. @atom:60 0.0 1.485 -2.319 -1.542
$atom:60_16 $mol:. @atom:60 0.0 1.368 -3.558 -2.817
$atom:60_17 $mol:. @atom:60 0.0 0.761 -0.594 -3.382
$atom:60_18 $mol:. @atom:60 0.0 -0.738 -0.879 -4.300
$atom:60_19 $mol:. @atom:60 0.0 0.653 -1.964 -4.521
$atom:60_20 $mol:. @atom:60 0.0 -4.937 -0.363 -1.697
$atom:60_21 $mol:. @atom:60 0.0 -2.967 0.717 -1.203
$atom:57_4 $mol:. @atom:57 0.0 -6.422 -2.235 -0.754
$atom:58_2 $mol:. @atom:58 0.0 -4.928 -2.114 -0.469
$atom:60_22 $mol:. @atom:60 0.0 -6.565 -1.832 -1.770
$atom:235_3 $mol:. @atom:235 0.0 -4.663 -2.569 0.992
$atom:238_3 $mol:. @atom:238 0.0 -3.960 -3.716 1.081
$atom:236_3 $mol:. @atom:236 0.0 -4.967 -1.904 1.963
$atom:229_3 $mol:. @atom:229 0.0 -3.354 -4.204 2.319
$atom:241_3 $mol:. @atom:241 0.0 -4.127 -4.397 0.356
$atom:54_5 $mol:. @atom:54 0.0 -4.295 -4.572 3.473
$atom:54_6 $mol:. @atom:54 0.0 -2.271 -3.244 2.828
$atom:60_23 $mol:. @atom:60 0.0 -2.826 -5.135 2.038
$atom:60_24 $mol:. @atom:60 0.0 -4.973 -5.396 3.211
$atom:60_25 $mol:. @atom:60 0.0 -4.909 -3.718 3.794
$atom:60_26 $mol:. @atom:60 0.0 -3.683 -4.896 4.331
$atom:60_27 $mol:. @atom:60 0.0 -2.695 -2.272 3.123
$atom:60_28 $mol:. @atom:60 0.0 -1.484 -3.073 2.079
$atom:60_29 $mol:. @atom:60 0.0 -1.791 -3.686 3.717
$atom:60_30 $mol:. @atom:60 0.0 -6.661 -3.312 -0.799
$atom:60_31 $mol:. @atom:60 0.0 -4.422 -2.764 -1.206
$atom:57_5 $mol:. @atom:57 0.0 -8.861 -2.101 -0.226
$atom:58_3 $mol:. @atom:58 0.0 -7.457 -1.604 0.194
$atom:60_32 $mol:. @atom:60 0.0 -8.826 -3.186 -0.048
$atom:235_4 $mol:. @atom:235 0.0 -7.425 -0.036 0.256
$atom:238_4 $mol:. @atom:238 0.0 -6.870 0.431 1.405
$atom:236_4 $mol:. @atom:236 0.0 -8.004 0.653 -0.558
$atom:229_4 $mol:. @atom:229 0.0 -7.168 1.765 1.912
$atom:241_4 $mol:. @atom:241 0.0 -6.797 -0.317 2.080
$atom:54_7 $mol:. @atom:54 0.0 -8.664 2.017 2.147
$atom:54_8 $mol:. @atom:54 0.0 -6.545 2.857 1.036
$atom:60_33 $mol:. @atom:60 0.0 -6.669 1.831 2.899
$atom:60_34 $mol:. @atom:60 0.0 -9.114 1.252 2.800
$atom:60_35 $mol:. @atom:60 0.0 -9.236 2.024 1.205
$atom:60_36 $mol:. @atom:60 0.0 -8.786 3.001 2.625
$atom:60_37 $mol:. @atom:60 0.0 -7.002 2.900 0.037
$atom:60_38 $mol:. @atom:60 0.0 -5.460 2.706 0.913
$atom:60_39 $mol:. @atom:60 0.0 -6.693 3.836 1.521
$atom:60_40 $mol:. @atom:60 0.0 -9.602 -1.708 0.496
$atom:60_41 $mol:. @atom:60 0.0 -7.328 -2.030 1.207
$atom:57_6 $mol:. @atom:57 0.0 -10.877 -2.392 -1.741
$atom:58_4 $mol:. @atom:58 0.0 -9.440 -1.848 -1.636
$atom:60_42 $mol:. @atom:60 0.0 -11.441 -2.051 -0.857
$atom:235_5 $mol:. @atom:235 0.0 -8.631 -2.553 -2.770
$atom:238_5 $mol:. @atom:238 0.0 -8.499 -1.785 -3.863
$atom:236_5 $mol:. @atom:236 0.0 -8.181 -3.684 -2.688
$atom:229_5 $mol:. @atom:229 0.0 -7.938 -2.258 -5.119
$atom:241_5 $mol:. @atom:241 0.0 -9.049 -0.943 -3.902
$atom:54_9 $mol:. @atom:54 0.0 -8.792 -3.342 -5.780
$atom:54_10 $mol:. @atom:54 0.0 -6.470 -2.687 -5.003
$atom:60_43 $mol:. @atom:60 0.0 -7.963 -1.383 -5.795
$atom:60_44 $mol:. @atom:60 0.0 -9.825 -2.995 -5.943
$atom:60_45 $mol:. @atom:60 0.0 -8.838 -4.264 -5.179
$atom:60_46 $mol:. @atom:60 0.0 -8.360 -3.594 -6.761
$atom:60_47 $mol:. @atom:60 0.0 -6.361 -3.605 -4.407
$atom:60_48 $mol:. @atom:60 0.0 -5.850 -1.903 -4.541
$atom:60_49 $mol:. @atom:60 0.0 -6.071 -2.887 -6.011
$atom:60_50 $mol:. @atom:60 0.0 -11.356 -1.921 -2.619
$atom:60_51 $mol:. @atom:60 0.0 -9.494 -0.756 -1.795
$atom:57_7 $mol:. @atom:57 0.0 -12.476 -4.326 -2.296
$atom:58_5 $mol:. @atom:58 0.0 -11.042 -3.918 -1.914
$atom:60_52 $mol:. @atom:60 0.0 -12.606 -4.028 -3.347
$atom:235_6 $mol:. @atom:235 0.0 -10.631 -4.675 -0.614
$atom:238_6 $mol:. @atom:238 0.0 -9.796 -5.703 -0.861
$atom:236_6 $mol:. @atom:236 0.0 -11.127 -4.453 0.474
$atom:229_6 $mol:. @atom:229 0.0 -9.186 -6.529 0.183
$atom:241_6 $mol:. @atom:241 0.0 -9.206 -5.554 -1.669
$atom:54_11 $mol:. @atom:54 0.0 -10.225 -7.315 0.995
$atom:54_12 $mol:. @atom:54 0.0 -8.204 -5.783 1.100
$atom:60_53 $mol:. @atom:60 0.0 -8.602 -7.290 -0.368
$atom:60_54 $mol:. @atom:60 0.0 -10.889 -7.898 0.339
$atom:60_55 $mol:. @atom:60 0.0 -10.843 -6.658 1.625
$atom:60_56 $mol:. @atom:60 0.0 -9.699 -8.020 1.659
$atom:60_57 $mol:. @atom:60 0.0 -8.739 -5.060 1.735
$atom:60_58 $mol:. @atom:60 0.0 -7.431 -5.245 0.530
$atom:60_59 $mol:. @atom:60 0.0 -7.700 -6.510 1.757
$atom:60_60 $mol:. @atom:60 0.0 -12.525 -5.430 -2.285
$atom:60_61 $mol:. @atom:60 0.0 -10.438 -4.244 -2.777
$atom:57_8 $mol:. @atom:57 0.0 -14.920 -4.584 -1.600
$atom:58_6 $mol:. @atom:58 0.0 -13.632 -3.752 -1.465
$atom:60_62 $mol:. @atom:60 0.0 -14.649 -5.586 -1.247
$atom:235_7 $mol:. @atom:235 0.0 -13.893 -2.285 -1.914
$atom:238_7 $mol:. @atom:238 0.0 -13.965 -1.422 -0.889
$atom:236_7 $mol:. @atom:236 0.0 -13.974 -1.956 -3.082
$atom:229_7 $mol:. @atom:229 0.0 -14.239 0.001 -1.025
$atom:241_7 $mol:. @atom:241 0.0 -13.577 -1.708 -0.004
$atom:54_13 $mol:. @atom:54 0.0 -15.680 0.246 -1.480
$atom:54_14 $mol:. @atom:54 0.0 -13.267 0.807 -1.893
$atom:60_63 $mol:. @atom:60 0.0 -14.156 0.414 -0.002
$atom:60_64 $mol:. @atom:60 0.0 -16.408 -0.251 -0.821
$atom:60_65 $mol:. @atom:60 0.0 -15.849 -0.114 -2.507
$atom:60_66 $mol:. @atom:60 0.0 -15.890 1.327 -1.461
$atom:60_67 $mol:. @atom:60 0.0 -13.268 0.469 -2.940
$atom:60_68 $mol:. @atom:60 0.0 -12.239 0.760 -1.513
$atom:60_69 $mol:. @atom:60 0.0 -13.597 1.859 -1.881
$atom:60_70 $mol:. @atom:60 0.0 -15.637 -4.195 -0.859
$atom:60_71 $mol:. @atom:60 0.0 -13.362 -3.817 -0.395
$atom:57_9 $mol:. @atom:57 0.0 -17.064 -5.395 -2.685
$atom:58_7 $mol:. @atom:58 0.0 -15.684 -4.733 -2.934
$atom:60_72 $mol:. @atom:60 0.0 -17.540 -4.759 -1.921
$atom:235_8 $mol:. @atom:235 0.0 -14.870 -5.540 -3.996
$atom:238_8 $mol:. @atom:238 0.0 -14.373 -4.756 -4.977
$atom:236_8 $mol:. @atom:236 0.0 -14.748 -6.750 -3.981
$atom:229_8 $mol:. @atom:229 0.0 -13.393 -5.268 -5.940
$atom:241_8 $mol:. @atom:241 0.0 -14.174 -3.807 -4.679
$atom:54_15 $mol:. @atom:54 0.0 -14.106 -6.091 -7.020
$atom:54_16 $mol:. @atom:54 0.0 -12.175 -6.042 -5.407
$atom:60_73 $mol:. @atom:60 0.0 -12.988 -4.367 -6.439
$atom:60_74 $mol:. @atom:60 0.0 -14.926 -5.528 -7.494
$atom:60_75 $mol:. @atom:60 0.0 -14.530 -7.019 -6.606
$atom:60_76 $mol:. @atom:60 0.0 -13.392 -6.372 -7.812
$atom:60_77 $mol:. @atom:60 0.0 -12.467 -7.007 -4.964
$atom:60_78 $mol:. @atom:60 0.0 -11.600 -5.477 -4.663
$atom:60_79 $mol:. @atom:60 0.0 -11.507 -6.251 -6.259
$atom:60_80 $mol:. @atom:60 0.0 -17.675 -5.258 -3.598
$atom:60_81 $mol:. @atom:60 0.0 -15.938 -3.724 -3.313
$atom:57_10 $mol:. @atom:57 0.0 -18.749 -7.194 -2.096
$atom:58_8 $mol:. @atom:58 0.0 -17.248 -6.883 -2.287
$atom:60_82 $mol:. @atom:60 0.0 -19.267 -6.796 -2.989
$atom:235_9 $mol:. @atom:235 0.0 -16.454 -7.269 -0.999
$atom:238_9 $mol:. @atom:238 0.0 -15.335 -7.967 -1.254
$atom:236_9 $mol:. @atom:236 0.0 -16.762 -6.899 0.120
$atom:229_9 $mol:. @atom:229 0.0 -14.367 -8.387 -0.248
$atom:241_9 $mol:. @atom:241 0.0 -15.240 -8.331 -2.192
$atom:54_17 $mol:. @atom:54 0.0 -14.904 -9.451 0.715
$atom:54_18 $mol:. @atom:54 0.0 -13.725 -7.242 0.549
$atom:60_83 $mol:. @atom:60 0.0 -13.545 -8.861 -0.817
$atom:60_84 $mol:. @atom:60 0.0 -15.290 -10.333 0.182
$atom:60_85 $mol:. @atom:60 0.0 -15.717 -9.064 1.350
$atom:60_86 $mol:. @atom:60 0.0 -14.087 -9.788 1.373
$atom:60_87 $mol:. @atom:60 0.0 -14.468 -6.647 1.100
$atom:60_88 $mol:. @atom:60 0.0 -13.139 -6.565 -0.089
$atom:60_89 $mol:. @atom:60 0.0 -13.036 -7.679 1.290
$atom:60_90 $mol:. @atom:60 0.0 -18.877 -8.292 -2.150
$atom:60_91 $mol:. @atom:60 0.0 -16.939 -7.505 -3.147
$atom:54_19 $mol:. @atom:54 0.0 -20.999 -7.206 -1.036
$atom:58_9 $mol:. @atom:58 0.0 -19.540 -6.757 -0.843
$atom:60_92 $mol:. @atom:60 0.0 -21.046 -8.300 -1.156
$atom:60_93 $mol:. @atom:60 0.0 -21.439 -6.747 -1.936
$atom:235_10 $mol:. @atom:235 0.0 -19.578 -5.207 -0.628
$atom:238_10 $mol:. @atom:238 0.0 -19.061 -4.828 0.557
$atom:236_10 $mol:. @atom:236 0.0 -20.185 -4.465 -1.375
$atom:229_10 $mol:. @atom:229 0.0 -18.878 -3.426 0.994
$atom:241_10 $mol:. @atom:241 0.0 -18.342 -5.450 0.901
$atom:54_20 $mol:. @atom:54 0.0 -19.984 -2.451 0.558
$atom:54_21 $mol:. @atom:54 0.0 -17.509 -2.857 0.610
$atom:60_94 $mol:. @atom:60 0.0 -18.906 -3.470 2.099
$atom:60_95 $mol:. @atom:60 0.0 -20.991 -2.887 0.651
$atom:60_96 $mol:. @atom:60 0.0 -19.829 -2.132 -0.485
$atom:60_97 $mol:. @atom:60 0.0 -19.955 -1.550 1.193
$atom:60_98 $mol:. @atom:60 0.0 -17.405 -2.773 -0.482
$atom:60_99 $mol:. @atom:60 0.0 -16.684 -3.475 0.993
$atom:60_100 $mol:. @atom:60 0.0 -17.407 -1.849 1.043
$atom:60_101 $mol:. @atom:60 0.0 -21.621 -6.939 -0.168
$atom:60_102 $mol:. @atom:60 0.0 -19.160 -7.294 0.044
}
# Note: You don't have to specify the charge in this example because we are
# using the OPLSAA force-field which assigns charge according to
# atom-type. Just leave these numbers as 0.00 for now.
# Note: LAMMPS expects an integer in the 2nd column (the Molecule-ID number).
# If we put "$mol:." there, moltemplate will generate this integer for you
write("Data Bond List") {
$bond:id1 $atom:81_1 $atom:81_2
$bond:id2 $atom:81_1 $atom:85_1
$bond:id3 $atom:81_1 $atom:85_10
$bond:id4 $atom:81_1 $atom:82_1
$bond:id5 $atom:81_2 $atom:177_1
$bond:id6 $atom:81_2 $atom:85_2
$bond:id7 $atom:81_2 $atom:85_11
$bond:id8 $atom:177_1 $atom:180_1
$bond:id9 $atom:177_1 $atom:178_1
$bond:id10 $atom:180_1 $atom:171_1
$bond:id11 $atom:180_1 $atom:183_1
$bond:id12 $atom:171_1 $atom:80_1
$bond:id13 $atom:171_1 $atom:80_2
$bond:id14 $atom:85_3 $atom:171_1
$bond:id15 $atom:85_4 $atom:80_1
$bond:id16 $atom:85_5 $atom:80_1
$bond:id17 $atom:85_6 $atom:80_1
$bond:id18 $atom:85_7 $atom:80_2
$bond:id19 $atom:85_8 $atom:80_2
$bond:id20 $atom:85_9 $atom:80_2
$bond:id21 $atom:81_3 $atom:82_1
$bond:id22 $atom:81_3 $atom:85_12
$bond:id23 $atom:81_3 $atom:85_20
$bond:id24 $atom:81_3 $atom:82_2
$bond:id25 $atom:177_2 $atom:82_1
$bond:id26 $atom:85_21 $atom:82_1
$bond:id27 $atom:177_2 $atom:180_2
$bond:id28 $atom:177_2 $atom:178_2
$bond:id29 $atom:180_2 $atom:171_2
$bond:id30 $atom:180_2 $atom:183_2
$bond:id31 $atom:171_2 $atom:80_3
$bond:id32 $atom:171_2 $atom:80_4
$bond:id33 $atom:85_13 $atom:171_2
$bond:id34 $atom:85_14 $atom:80_3
$bond:id35 $atom:85_15 $atom:80_3
$bond:id36 $atom:85_16 $atom:80_3
$bond:id37 $atom:85_17 $atom:80_4
$bond:id38 $atom:85_18 $atom:80_4
$bond:id39 $atom:85_19 $atom:80_4
$bond:id40 $atom:81_4 $atom:82_2
$bond:id41 $atom:81_4 $atom:85_22
$bond:id42 $atom:81_4 $atom:85_30
$bond:id43 $atom:81_4 $atom:82_3
$bond:id44 $atom:177_3 $atom:82_2
$bond:id45 $atom:85_31 $atom:82_2
$bond:id46 $atom:177_3 $atom:180_3
$bond:id47 $atom:177_3 $atom:178_3
$bond:id48 $atom:180_3 $atom:171_3
$bond:id49 $atom:180_3 $atom:183_3
$bond:id50 $atom:171_3 $atom:80_5
$bond:id51 $atom:171_3 $atom:80_6
$bond:id52 $atom:85_23 $atom:171_3
$bond:id53 $atom:85_24 $atom:80_5
$bond:id54 $atom:85_25 $atom:80_5
$bond:id55 $atom:85_26 $atom:80_5
$bond:id56 $atom:85_27 $atom:80_6
$bond:id57 $atom:85_28 $atom:80_6
$bond:id58 $atom:85_29 $atom:80_6
$bond:id59 $atom:81_5 $atom:82_3
$bond:id60 $atom:81_5 $atom:85_32
$bond:id61 $atom:81_5 $atom:85_40
$bond:id62 $atom:81_5 $atom:82_4
$bond:id63 $atom:177_4 $atom:82_3
$bond:id64 $atom:85_41 $atom:82_3
$bond:id65 $atom:177_4 $atom:180_4
$bond:id66 $atom:177_4 $atom:178_4
$bond:id67 $atom:180_4 $atom:171_4
$bond:id68 $atom:180_4 $atom:183_4
$bond:id69 $atom:171_4 $atom:80_7
$bond:id70 $atom:171_4 $atom:80_8
$bond:id71 $atom:85_33 $atom:171_4
$bond:id72 $atom:85_34 $atom:80_7
$bond:id73 $atom:85_35 $atom:80_7
$bond:id74 $atom:85_36 $atom:80_7
$bond:id75 $atom:85_37 $atom:80_8
$bond:id76 $atom:85_38 $atom:80_8
$bond:id77 $atom:85_39 $atom:80_8
$bond:id78 $atom:81_6 $atom:82_4
$bond:id79 $atom:81_6 $atom:85_42
$bond:id80 $atom:81_6 $atom:85_50
$bond:id81 $atom:81_6 $atom:82_5
$bond:id82 $atom:177_5 $atom:82_4
$bond:id83 $atom:85_51 $atom:82_4
$bond:id84 $atom:177_5 $atom:180_5
$bond:id85 $atom:177_5 $atom:178_5
$bond:id86 $atom:180_5 $atom:171_5
$bond:id87 $atom:180_5 $atom:183_5
$bond:id88 $atom:171_5 $atom:80_9
$bond:id89 $atom:171_5 $atom:80_10
$bond:id90 $atom:85_43 $atom:171_5
$bond:id91 $atom:85_44 $atom:80_9
$bond:id92 $atom:85_45 $atom:80_9
$bond:id93 $atom:85_46 $atom:80_9
$bond:id94 $atom:85_47 $atom:80_10
$bond:id95 $atom:85_48 $atom:80_10
$bond:id96 $atom:85_49 $atom:80_10
$bond:id97 $atom:81_7 $atom:82_5
$bond:id98 $atom:81_7 $atom:85_52
$bond:id99 $atom:81_7 $atom:85_60
$bond:id100 $atom:81_7 $atom:82_6
$bond:id101 $atom:177_6 $atom:82_5
$bond:id102 $atom:85_61 $atom:82_5
$bond:id103 $atom:177_6 $atom:180_6
$bond:id104 $atom:177_6 $atom:178_6
$bond:id105 $atom:180_6 $atom:171_6
$bond:id106 $atom:180_6 $atom:183_6
$bond:id107 $atom:171_6 $atom:80_11
$bond:id108 $atom:171_6 $atom:80_12
$bond:id109 $atom:85_53 $atom:171_6
$bond:id110 $atom:85_54 $atom:80_11
$bond:id111 $atom:85_55 $atom:80_11
$bond:id112 $atom:85_56 $atom:80_11
$bond:id113 $atom:85_57 $atom:80_12
$bond:id114 $atom:85_58 $atom:80_12
$bond:id115 $atom:85_59 $atom:80_12
$bond:id116 $atom:81_8 $atom:82_6
$bond:id117 $atom:81_8 $atom:85_62
$bond:id118 $atom:81_8 $atom:85_70
$bond:id119 $atom:81_8 $atom:82_7
$bond:id120 $atom:177_7 $atom:82_6
$bond:id121 $atom:85_71 $atom:82_6
$bond:id122 $atom:177_7 $atom:180_7
$bond:id123 $atom:177_7 $atom:178_7
$bond:id124 $atom:180_7 $atom:171_7
$bond:id125 $atom:180_7 $atom:183_7
$bond:id126 $atom:171_7 $atom:80_13
$bond:id127 $atom:171_7 $atom:80_14
$bond:id128 $atom:85_63 $atom:171_7
$bond:id129 $atom:85_64 $atom:80_13
$bond:id130 $atom:85_65 $atom:80_13
$bond:id131 $atom:85_66 $atom:80_13
$bond:id132 $atom:85_67 $atom:80_14
$bond:id133 $atom:85_68 $atom:80_14
$bond:id134 $atom:85_69 $atom:80_14
$bond:id135 $atom:81_9 $atom:82_7
$bond:id136 $atom:81_9 $atom:85_72
$bond:id137 $atom:81_9 $atom:85_80
$bond:id138 $atom:81_9 $atom:82_8
$bond:id139 $atom:177_8 $atom:82_7
$bond:id140 $atom:85_81 $atom:82_7
$bond:id141 $atom:177_8 $atom:180_8
$bond:id142 $atom:177_8 $atom:178_8
$bond:id143 $atom:180_8 $atom:171_8
$bond:id144 $atom:180_8 $atom:183_8
$bond:id145 $atom:171_8 $atom:80_15
$bond:id146 $atom:171_8 $atom:80_16
$bond:id147 $atom:85_73 $atom:171_8
$bond:id148 $atom:85_74 $atom:80_15
$bond:id149 $atom:85_75 $atom:80_15
$bond:id150 $atom:85_76 $atom:80_15
$bond:id151 $atom:85_77 $atom:80_16
$bond:id152 $atom:85_78 $atom:80_16
$bond:id153 $atom:85_79 $atom:80_16
$bond:id154 $atom:81_10 $atom:82_8
$bond:id155 $atom:81_10 $atom:85_82
$bond:id156 $atom:81_10 $atom:85_90
$bond:id157 $atom:81_10 $atom:82_9
$bond:id158 $atom:177_9 $atom:82_8
$bond:id159 $atom:85_91 $atom:82_8
$bond:id160 $atom:177_9 $atom:180_9
$bond:id161 $atom:177_9 $atom:178_9
$bond:id162 $atom:180_9 $atom:171_9
$bond:id163 $atom:180_9 $atom:183_9
$bond:id164 $atom:171_9 $atom:80_17
$bond:id165 $atom:171_9 $atom:80_18
$bond:id166 $atom:85_83 $atom:171_9
$bond:id167 $atom:85_84 $atom:80_17
$bond:id168 $atom:85_85 $atom:80_17
$bond:id169 $atom:85_86 $atom:80_17
$bond:id170 $atom:85_87 $atom:80_18
$bond:id171 $atom:85_88 $atom:80_18
$bond:id172 $atom:85_89 $atom:80_18
$bond:id173 $atom:80_19 $atom:82_9
$bond:id174 $atom:85_92 $atom:80_19
$bond:id175 $atom:85_93 $atom:80_19
$bond:id176 $atom:85_101 $atom:80_19
$bond:id177 $atom:177_10 $atom:82_9
$bond:id178 $atom:85_102 $atom:82_9
$bond:id179 $atom:177_10 $atom:180_10
$bond:id180 $atom:177_10 $atom:178_10
$bond:id181 $atom:180_10 $atom:171_10
$bond:id182 $atom:180_10 $atom:183_10
$bond:id183 $atom:171_10 $atom:80_20
$bond:id184 $atom:171_10 $atom:80_21
$bond:id185 $atom:85_94 $atom:171_10
$bond:id186 $atom:85_95 $atom:80_20
$bond:id187 $atom:85_96 $atom:80_20
$bond:id188 $atom:85_97 $atom:80_20
$bond:id189 $atom:85_98 $atom:80_21
$bond:id190 $atom:85_99 $atom:80_21
$bond:id191 $atom:85_100 $atom:80_21
$bond:id1 $atom:57_1 $atom:57_2
$bond:id2 $atom:57_1 $atom:60_1
$bond:id3 $atom:57_1 $atom:60_10
$bond:id4 $atom:57_1 $atom:58_1
$bond:id5 $atom:57_2 $atom:235_1
$bond:id6 $atom:57_2 $atom:60_2
$bond:id7 $atom:57_2 $atom:60_11
$bond:id8 $atom:235_1 $atom:238_1
$bond:id9 $atom:235_1 $atom:236_1
$bond:id10 $atom:238_1 $atom:229_1
$bond:id11 $atom:238_1 $atom:241_1
$bond:id12 $atom:229_1 $atom:54_1
$bond:id13 $atom:229_1 $atom:54_2
$bond:id14 $atom:60_3 $atom:229_1
$bond:id15 $atom:60_4 $atom:54_1
$bond:id16 $atom:60_5 $atom:54_1
$bond:id17 $atom:60_6 $atom:54_1
$bond:id18 $atom:60_7 $atom:54_2
$bond:id19 $atom:60_8 $atom:54_2
$bond:id20 $atom:60_9 $atom:54_2
$bond:id21 $atom:57_3 $atom:58_1
$bond:id22 $atom:57_3 $atom:60_12
$bond:id23 $atom:57_3 $atom:60_20
$bond:id24 $atom:57_3 $atom:58_2
$bond:id25 $atom:235_2 $atom:58_1
$bond:id26 $atom:60_21 $atom:58_1
$bond:id27 $atom:235_2 $atom:238_2
$bond:id28 $atom:235_2 $atom:236_2
$bond:id29 $atom:238_2 $atom:229_2
$bond:id30 $atom:238_2 $atom:241_2
$bond:id31 $atom:229_2 $atom:54_3
$bond:id32 $atom:229_2 $atom:54_4
$bond:id33 $atom:60_13 $atom:229_2
$bond:id34 $atom:60_14 $atom:54_3
$bond:id35 $atom:60_15 $atom:54_3
$bond:id36 $atom:60_16 $atom:54_3
$bond:id37 $atom:60_17 $atom:54_4
$bond:id38 $atom:60_18 $atom:54_4
$bond:id39 $atom:60_19 $atom:54_4
$bond:id40 $atom:57_4 $atom:58_2
$bond:id41 $atom:57_4 $atom:60_22
$bond:id42 $atom:57_4 $atom:60_30
$bond:id43 $atom:57_4 $atom:58_3
$bond:id44 $atom:235_3 $atom:58_2
$bond:id45 $atom:60_31 $atom:58_2
$bond:id46 $atom:235_3 $atom:238_3
$bond:id47 $atom:235_3 $atom:236_3
$bond:id48 $atom:238_3 $atom:229_3
$bond:id49 $atom:238_3 $atom:241_3
$bond:id50 $atom:229_3 $atom:54_5
$bond:id51 $atom:229_3 $atom:54_6
$bond:id52 $atom:60_23 $atom:229_3
$bond:id53 $atom:60_24 $atom:54_5
$bond:id54 $atom:60_25 $atom:54_5
$bond:id55 $atom:60_26 $atom:54_5
$bond:id56 $atom:60_27 $atom:54_6
$bond:id57 $atom:60_28 $atom:54_6
$bond:id58 $atom:60_29 $atom:54_6
$bond:id59 $atom:57_5 $atom:58_3
$bond:id60 $atom:57_5 $atom:60_32
$bond:id61 $atom:57_5 $atom:60_40
$bond:id62 $atom:57_5 $atom:58_4
$bond:id63 $atom:235_4 $atom:58_3
$bond:id64 $atom:60_41 $atom:58_3
$bond:id65 $atom:235_4 $atom:238_4
$bond:id66 $atom:235_4 $atom:236_4
$bond:id67 $atom:238_4 $atom:229_4
$bond:id68 $atom:238_4 $atom:241_4
$bond:id69 $atom:229_4 $atom:54_7
$bond:id70 $atom:229_4 $atom:54_8
$bond:id71 $atom:60_33 $atom:229_4
$bond:id72 $atom:60_34 $atom:54_7
$bond:id73 $atom:60_35 $atom:54_7
$bond:id74 $atom:60_36 $atom:54_7
$bond:id75 $atom:60_37 $atom:54_8
$bond:id76 $atom:60_38 $atom:54_8
$bond:id77 $atom:60_39 $atom:54_8
$bond:id78 $atom:57_6 $atom:58_4
$bond:id79 $atom:57_6 $atom:60_42
$bond:id80 $atom:57_6 $atom:60_50
$bond:id81 $atom:57_6 $atom:58_5
$bond:id82 $atom:235_5 $atom:58_4
$bond:id83 $atom:60_51 $atom:58_4
$bond:id84 $atom:235_5 $atom:238_5
$bond:id85 $atom:235_5 $atom:236_5
$bond:id86 $atom:238_5 $atom:229_5
$bond:id87 $atom:238_5 $atom:241_5
$bond:id88 $atom:229_5 $atom:54_9
$bond:id89 $atom:229_5 $atom:54_10
$bond:id90 $atom:60_43 $atom:229_5
$bond:id91 $atom:60_44 $atom:54_9
$bond:id92 $atom:60_45 $atom:54_9
$bond:id93 $atom:60_46 $atom:54_9
$bond:id94 $atom:60_47 $atom:54_10
$bond:id95 $atom:60_48 $atom:54_10
$bond:id96 $atom:60_49 $atom:54_10
$bond:id97 $atom:57_7 $atom:58_5
$bond:id98 $atom:57_7 $atom:60_52
$bond:id99 $atom:57_7 $atom:60_60
$bond:id100 $atom:57_7 $atom:58_6
$bond:id101 $atom:235_6 $atom:58_5
$bond:id102 $atom:60_61 $atom:58_5
$bond:id103 $atom:235_6 $atom:238_6
$bond:id104 $atom:235_6 $atom:236_6
$bond:id105 $atom:238_6 $atom:229_6
$bond:id106 $atom:238_6 $atom:241_6
$bond:id107 $atom:229_6 $atom:54_11
$bond:id108 $atom:229_6 $atom:54_12
$bond:id109 $atom:60_53 $atom:229_6
$bond:id110 $atom:60_54 $atom:54_11
$bond:id111 $atom:60_55 $atom:54_11
$bond:id112 $atom:60_56 $atom:54_11
$bond:id113 $atom:60_57 $atom:54_12
$bond:id114 $atom:60_58 $atom:54_12
$bond:id115 $atom:60_59 $atom:54_12
$bond:id116 $atom:57_8 $atom:58_6
$bond:id117 $atom:57_8 $atom:60_62
$bond:id118 $atom:57_8 $atom:60_70
$bond:id119 $atom:57_8 $atom:58_7
$bond:id120 $atom:235_7 $atom:58_6
$bond:id121 $atom:60_71 $atom:58_6
$bond:id122 $atom:235_7 $atom:238_7
$bond:id123 $atom:235_7 $atom:236_7
$bond:id124 $atom:238_7 $atom:229_7
$bond:id125 $atom:238_7 $atom:241_7
$bond:id126 $atom:229_7 $atom:54_13
$bond:id127 $atom:229_7 $atom:54_14
$bond:id128 $atom:60_63 $atom:229_7
$bond:id129 $atom:60_64 $atom:54_13
$bond:id130 $atom:60_65 $atom:54_13
$bond:id131 $atom:60_66 $atom:54_13
$bond:id132 $atom:60_67 $atom:54_14
$bond:id133 $atom:60_68 $atom:54_14
$bond:id134 $atom:60_69 $atom:54_14
$bond:id135 $atom:57_9 $atom:58_7
$bond:id136 $atom:57_9 $atom:60_72
$bond:id137 $atom:57_9 $atom:60_80
$bond:id138 $atom:57_9 $atom:58_8
$bond:id139 $atom:235_8 $atom:58_7
$bond:id140 $atom:60_81 $atom:58_7
$bond:id141 $atom:235_8 $atom:238_8
$bond:id142 $atom:235_8 $atom:236_8
$bond:id143 $atom:238_8 $atom:229_8
$bond:id144 $atom:238_8 $atom:241_8
$bond:id145 $atom:229_8 $atom:54_15
$bond:id146 $atom:229_8 $atom:54_16
$bond:id147 $atom:60_73 $atom:229_8
$bond:id148 $atom:60_74 $atom:54_15
$bond:id149 $atom:60_75 $atom:54_15
$bond:id150 $atom:60_76 $atom:54_15
$bond:id151 $atom:60_77 $atom:54_16
$bond:id152 $atom:60_78 $atom:54_16
$bond:id153 $atom:60_79 $atom:54_16
$bond:id154 $atom:57_10 $atom:58_8
$bond:id155 $atom:57_10 $atom:60_82
$bond:id156 $atom:57_10 $atom:60_90
$bond:id157 $atom:57_10 $atom:58_9
$bond:id158 $atom:235_9 $atom:58_8
$bond:id159 $atom:60_91 $atom:58_8
$bond:id160 $atom:235_9 $atom:238_9
$bond:id161 $atom:235_9 $atom:236_9
$bond:id162 $atom:238_9 $atom:229_9
$bond:id163 $atom:238_9 $atom:241_9
$bond:id164 $atom:229_9 $atom:54_17
$bond:id165 $atom:229_9 $atom:54_18
$bond:id166 $atom:60_83 $atom:229_9
$bond:id167 $atom:60_84 $atom:54_17
$bond:id168 $atom:60_85 $atom:54_17
$bond:id169 $atom:60_86 $atom:54_17
$bond:id170 $atom:60_87 $atom:54_18
$bond:id171 $atom:60_88 $atom:54_18
$bond:id172 $atom:60_89 $atom:54_18
$bond:id173 $atom:54_19 $atom:58_9
$bond:id174 $atom:60_92 $atom:54_19
$bond:id175 $atom:60_93 $atom:54_19
$bond:id176 $atom:60_101 $atom:54_19
$bond:id177 $atom:235_10 $atom:58_9
$bond:id178 $atom:60_102 $atom:58_9
$bond:id179 $atom:235_10 $atom:238_10
$bond:id180 $atom:235_10 $atom:236_10
$bond:id181 $atom:238_10 $atom:229_10
$bond:id182 $atom:238_10 $atom:241_10
$bond:id183 $atom:229_10 $atom:54_20
$bond:id184 $atom:229_10 $atom:54_21
$bond:id185 $atom:60_94 $atom:229_10
$bond:id186 $atom:60_95 $atom:54_20
$bond:id187 $atom:60_96 $atom:54_20
$bond:id188 $atom:60_97 $atom:54_20
$bond:id189 $atom:60_98 $atom:54_21
$bond:id190 $atom:60_99 $atom:54_21
$bond:id191 $atom:60_100 $atom:54_21
}
} # end of "PolyNIPAM inherits OPLSAA" type definition

View File

@ -1,24 +1,35 @@
# The "oplsaa.lt" file contains force-field parameters, atom type definitions,
# The oplsaa2024.lt file contains force-field parameters, atom type definitions,
# partial charges, masses and bond-angle rules for the atoms in your system.
import /usr/local/moltemplate/moltemplate/force_fields/oplsaa2024.lt
# It defines these atom types:
# atom-type charge mass btype epsilon sigma description
# @atom:235 0.5 12.011 C~ 0.105 3.75 "C: C=O in amide. Acyl R in amides"
# @atom:236 -0.5 15.999 O~ 0.21 2.96 "O: C=O in amide. is neutral - use"
# @atom:237 -0.76 14.007 N~ 0.17 3.25 "N: primary amide. alkane params"
# @atom:240 0.38 1.008 H~ 0 0 "H on N: primary amide"
# @atom:279 0 1.008 HC 0.03 2.42 "AA H-alpha in aldehyde & formamide"
# (Note: Future versions of OPLSAA might use different @atom type numbers.)
_FAM inherits OPLSAA {
# atom-id mol-id atom-type charge X Y Z # comment
# atomID molID atomType charge coordX coordY coordZ
write('Data Atoms') {
$atom:C00 $mol @atom:177 0.00 0.100014490 0.490422099 0.0
$atom:O01 $mol @atom:178 0.00 1.091153187 -0.250749643 0.0
$atom:N02 $mol @atom:179 0.00 -1.121616690 -0.181085754 0.0
$atom:H03 $mol @atom:182 0.00 -2.013715893 0.272535813 0.0
$atom:H04 $mol @atom:182 0.00 -1.056768463 -1.190185868 0.0
$atom:H05 $mol @atom:221 0.00 0.144676387 1.570292021 0.0
$atom:C00 $mol @atom:235 0.00 0.100014490 0.490422099 0.0
$atom:O01 $mol @atom:236 0.00 1.091153187 -0.250749643 0.0
$atom:N02 $mol @atom:237 0.00 -1.121616690 -0.181085754 0.0
$atom:H03 $mol @atom:240 0.00 -2.013715893 0.272535813 0.0
$atom:H04 $mol @atom:240 0.00 -1.056768463 -1.190185868 0.0
$atom:H05 $mol @atom:279 0.00 0.144676387 1.570292021 0.0
}
# Note: You don't have to specify the charge in this example because we are
# using the OPLSAA force-field which assigns charge according to
# atom-type. Just leave these numbers as 0.00 for now.
# Note: LAMMPS expects an integer in the 2nd column (the Molecule-ID number).
# If we put "$mol" there, moltemplate will generate this integer for you
# If we put "$mol" there, moltemplate will generate this integer for you
# A list of the bonds in the molecule:
# BondID AtomID1 AtomID2
@ -32,6 +43,6 @@ _FAM inherits OPLSAA {
}
# In the "Data Bond List" section we don't have to specify the bond type.
# The bond-type will be determined by the atom type (according to "oplsaa.lt")
# Bond types will be determined by the atom type (according to oplsaa2024.lt).
}

View File

@ -1,23 +1,25 @@
# Use the OPLS-AA force field for all species.
import /usr/local/moltemplate/moltemplate/force_fields/oplsaa.lt
import /usr/local/moltemplate/moltemplate/force_fields/oplsaa2024.lt
import PolyNIPAM.lt
# Define the SPC water and ions as in the OPLS-AA
Ca inherits OPLSAA {
write("Data Atoms"){
$atom:a1 $mol:. @atom:354 0.0 0.00000 0.00000 0.000000
$atom:a1 $mol:. @atom:412 0.0 0.00000 0.00000 0.000000
}
}
Cl inherits OPLSAA {
write("Data Atoms"){
$atom:a1 $mol:. @atom:344 0.0 0.00000 0.00000 0.000000
$atom:a1 $mol:. @atom:401 0.0 0.00000 0.00000 0.000000
}
}
SPC inherits OPLSAA {
write("Data Atoms"){
$atom:O $mol:. @atom:76 0. 0.0000000 0.00000 0.000000
$atom:H1 $mol:. @atom:77 0. 0.8164904 0.00000 0.5773590
$atom:H2 $mol:. @atom:77 0. -0.8164904 0.00000 0.5773590
$atom:O $mol:. @atom:9991 0. 0.0000000 0.00000 0.000000
$atom:H1 $mol:. @atom:9990 0. 0.8164904 0.00000 0.5773590
$atom:H2 $mol:. @atom:9990 0. -0.8164904 0.00000 0.5773590
}
write("Data Bond List") {
$bond:OH1 $atom:O $atom:H1
@ -38,37 +40,38 @@ write_once("Data Boundary"){
0 26 zlo zhi
}
# Define the input variables.
write_once("In Init"){
boundary p p p # "p p p" is the default. This line is optional.
neighbor 3 bin # (This line is also optional in this example.)
}
# Note: The lines below in the "In Run" section are often omitted.
# Run an NVT simulation.
write_once("In Run"){
# Input variables.
variable run string sample01 # output name
variable ts equal 2 # timestep
variable temp equal 298.15 # equilibrium temperature
variable p equal 1. # equilibrium pressure
variable equi equal 30000 # equilibration steps
# PBC (set them before the creation of the box).
boundary p p p
neighbor 3 bin
}
# Run an NVT simulation.
write_once("In Run"){
# Set the output.
thermo 1000
thermo_style custom step etotal evdwl ecoul elong ebond eangle edihed eimp pe ke temp press atoms vol density cpu
thermo_style custom step etotal evdwl ecoul elong ebond eangle &
edihed eimp pe ke temp press atoms vol density cpu
thermo_modify flush yes
compute pe1 all pe/atom pair
dump TRJ all custom 100 \$\{run\}.dump id xu yu zu c_pe1
# Minimise the input structure, just in case.
minimize .01 .001 1000 100000
write_data \$\{run\}.min
# Set the constrains.
group watergroup type @atom:76 @atom:77
fix 0 watergroup shake 0.0001 10 0 b @bond:042_043 a @angle:043_042_043
group watergroup type @atom:9991 @atom:9990
fix 0 watergroup shake 0.0001 10 0 b @bond:spcO_spcH a @angle:spcH_spcO_spcH
# Short annealing.
timestep \$\{ts\}
fix 1 all nvt temp \$\{temp\} \$\{temp\} \$(100*dt)
@ -76,3 +79,4 @@ write_once("In Run"){
run \$\{equi\}
unfix 1
}

View File

@ -1,8 +1,6 @@
# Import the force field.
import /usr/local/moltemplate/moltemplate/force_fields/oplsaa.lt
import formamide.lt # after oplsaa.lt, as it depends on it.
import formamide.lt # Defines "_FAM" and OPLSAA
# Create the input sample.
# Distribute the molecules on a 5x5x5 cubic grid with spacing 4.6
solv = new _FAM [5].move( 4.6, 0, 0)
[5].move( 0, 4.6, 0)
[5].move( 0, 0, 4.6)
@ -15,8 +13,11 @@ write_once("Data Boundary") {
-11.5 11.5 zlo zhi
}
# Create an input deck for LAMMPS.
write_once("In Init"){
# Note: The lines below in the "In Run" section are often omitted.
write_once("In Run"){
# Create an input deck for LAMMPS.
# Run an NPT simulation.
# Input variables.
variable run string solv_01 # output name
variable ts equal 1 # timestep
@ -26,26 +27,20 @@ write_once("In Init"){
variable equi equal 5000 # Equilibration steps
variable prod equal 30000 # Production steps
# PBC (set them before the creation of the box).
boundary p p p
}
# Run an NPT simulation.
write_once("In Run"){
# Derived variables.
variable tcouple equal \$\{ts\}*100
variable pcouple equal \$\{ts\}*1000
# Output.
thermo \$d
thermo_style custom step etotal evdwl ecoul elong ebond eangle edihed eimp &
ke pe temp press vol density cpu
thermo_style custom step etotal evdwl ecoul elong ebond eangle &
edihed eimp ke pe temp press vol density cpu
thermo_modify flush yes
# Trajectory.
dump TRJ all dcd \$d \$\{run\}.dcd
dump_modify TRJ unwrap yes
# Thermalisation and relaxation, NPT ensemble.
timestep \$\{ts\}
fix NPT all npt temp \$\{temp\} \$\{temp\} \$\{tcouple\} iso \$p \$p \$\{pcouple\}
@ -59,3 +54,4 @@ write_once("In Run"){
run \$\{prod\}
unfix NPT
}

View File

@ -14,10 +14,7 @@ using ::testing::HasSubstr;
using ::testing::StartsWith;
extern "C" {
#ifdef LAMMPS_SMALLSMALL
typedef int32_t step_t;
typedef int32_t tag_t;
#elif LAMMPS_SMALLBIG
#if LAMMPS_SMALLBIG
using step_t = int64_t;
using tag_t = int32_t;
#else

View File

@ -127,15 +127,9 @@ TEST_F(LibraryProperties, thermo)
const char *key = (const char *)lammps_last_thermo(lmp, "keyword", 0);
EXPECT_THAT(key, StrEq("Step"));
ival = *(int *)lammps_last_thermo(lmp, "type", 0);
#if defined(LAMMPS_SMALLSMALL)
EXPECT_EQ(ival, LAMMPS_INT);
ival = *(int *)lammps_last_thermo(lmp, "data", 0);
EXPECT_EQ(ival, 2);
#else
EXPECT_EQ(ival, LAMMPS_INT64);
bval = *(bigint *)lammps_last_thermo(lmp, "data", 0);
EXPECT_EQ(bval, 2);
#endif
key = (const char *)lammps_last_thermo(lmp, "keyword", 1);
EXPECT_THAT(key, StrEq("Temp"));
@ -253,11 +247,7 @@ TEST_F(LibraryProperties, box)
TEST_F(LibraryProperties, setting)
{
#if defined(LAMMPS_SMALLSMALL)
EXPECT_EQ(lammps_extract_setting(lmp, "bigint"), 4);
#else
EXPECT_EQ(lammps_extract_setting(lmp, "bigint"), 8);
#endif
#if defined(LAMMPS_BIGBIG)
EXPECT_EQ(lammps_extract_setting(lmp, "tagint"), 8);
EXPECT_EQ(lammps_extract_setting(lmp, "imageint"), 8);
@ -375,15 +365,9 @@ TEST_F(LibraryProperties, global)
char *c_ptr = (char *)lammps_extract_global(lmp, "units");
EXPECT_THAT(c_ptr, StrEq("real"));
#if defined(LAMMPS_SMALLSMALL)
EXPECT_EQ(lammps_extract_global_datatype(lmp, "ntimestep"), LAMMPS_INT);
int *i_ptr = (int *)lammps_extract_global(lmp, "ntimestep");
EXPECT_EQ((*i_ptr), 2);
#else
EXPECT_EQ(lammps_extract_global_datatype(lmp, "ntimestep"), LAMMPS_INT64);
auto *b_ptr = (int64_t *)lammps_extract_global(lmp, "ntimestep");
EXPECT_EQ((*b_ptr), 2);
#endif
EXPECT_EQ(lammps_extract_global_datatype(lmp, "dt"), LAMMPS_DOUBLE);
auto *d_ptr = (double *)lammps_extract_global(lmp, "dt");

View File

@ -256,6 +256,41 @@ TEST_F(GroupTest, Molecular)
command("group three include xxx"););
}
TEST_F(GroupTest, Bitmap)
{
atomic_system();
BEGIN_HIDE_OUTPUT();
command("group one region left");
command("group two region right");
command("group three empty");
command("group four region left");
command("group four region right");
command("group six subtract four one");
END_HIDE_OUTPUT();
int bm_one = group->get_bitmask_by_id(FLERR, "one", "unittest 1");
int bm_two = group->get_bitmask_by_id(FLERR, "two", "unittest 2");
int bm_three = group->get_bitmask_by_id(FLERR, "three", "unittest 3");
int bm_four = group->get_bitmask_by_id(FLERR, "four", "unittest 4");
int bm_six = group->get_bitmask_by_id(FLERR, "six", "unittest 6");
int nlocal = lmp->atom->natoms;
auto mask = lmp->atom->mask;
for (int i = 0; i < nlocal; ++i) {
if ((mask[i] & bm_one) && (mask[i] & bm_two)) {
EXPECT_NE((mask[i] & bm_four), 0);
}
if (mask[i] & bm_two) {
EXPECT_NE((mask[i] & bm_six), 0);
}
EXPECT_EQ((mask[i] & bm_three), 0);
}
TEST_FAILURE(".*ERROR: Group ID five requested by unittest 5 does not exist.*",
group->get_bitmask_by_id(FLERR, "five", "unittest 5"););
}
TEST_F(GroupTest, Dynamic)
{
atomic_system();

View File

@ -2,7 +2,7 @@
lammps_version: 17 Feb 2022
tags: unstable
date_generated: Fri Mar 18 22:17:36 2022
epsilon: 2.5e-13
epsilon: 1.0e-11
skip_tests:
prerequisites: ! |
atom full

View File

@ -85,11 +85,7 @@ TEST_F(LAMMPS_extract_global, units)
TEST_F(LAMMPS_extract_global, ntimestep)
{
f_lammps_setup_extract_global();
#ifdef LAMMPS_SMALLSMALL
EXPECT_EQ(f_lammps_extract_global_ntimestep(), 0);
#else
EXPECT_EQ(f_lammps_extract_global_ntimestep_big(), 0l);
#endif
};
TEST_F(LAMMPS_extract_global, dt)
@ -134,17 +130,10 @@ TEST_F(LAMMPS_extract_global, boxprops)
TEST_F(LAMMPS_extract_global, atomprops)
{
f_lammps_setup_extract_global();
#ifdef LAMMPS_SMALLSMALL
EXPECT_EQ(f_lammps_extract_global_natoms(), 2);
EXPECT_EQ(f_lammps_extract_global_nbonds(), 0);
EXPECT_EQ(f_lammps_extract_global_nangles(), 0);
EXPECT_EQ(f_lammps_extract_global_ndihedrals(), 0);
#else
EXPECT_EQ(f_lammps_extract_global_natoms_big(), 2l);
EXPECT_EQ(f_lammps_extract_global_nbonds_big(), 0l);
EXPECT_EQ(f_lammps_extract_global_nangles_big(), 0l);
EXPECT_EQ(f_lammps_extract_global_ndihedrals_big(), 0l);
#endif
EXPECT_EQ(f_lammps_extract_global_ntypes(), 1);
EXPECT_EQ(f_lammps_extract_global_nlocal(), 2);
@ -163,15 +152,8 @@ TEST_F(LAMMPS_extract_global, fullprops)
if (!lammps_has_style(lmp, "atom", "full")) GTEST_SKIP();
// This is not currently the world's most convincing test....
f_lammps_setup_full_extract_global();
#ifdef LAMMPS_SMALLSMALL
EXPECT_EQ(f_lammps_extract_global_natoms(), 2);
EXPECT_EQ(f_lammps_extract_global_nbonds(), 0);
EXPECT_EQ(f_lammps_extract_global_nangles(), 0);
EXPECT_EQ(f_lammps_extract_global_ndihedrals(), 0);
#else
EXPECT_EQ(f_lammps_extract_global_natoms_big(), 2l);
EXPECT_EQ(f_lammps_extract_global_nbonds_big(), 0l);
EXPECT_EQ(f_lammps_extract_global_nangles_big(), 0l);
EXPECT_EQ(f_lammps_extract_global_ndihedrals_big(), 0l);
#endif
}

View File

@ -98,11 +98,7 @@ TEST_F(LAMMPS_thermo, last_thermo)
thermostr = (char *)f_lammps_last_thermo_string(6);
EXPECT_STREQ(thermostr, "Press");
free(thermostr);
#if defined(LAMMPS_SMALLSMALL)
EXPECT_EQ(f_lammps_last_thermo_type(1), multitype::LAMMPS_INT);
#else
EXPECT_EQ(f_lammps_last_thermo_type(1), multitype::LAMMPS_INT64);
#endif
EXPECT_EQ(f_lammps_last_thermo_int(1), 15);
EXPECT_EQ(f_lammps_last_thermo_type(2), multitype::LAMMPS_DOUBLE);
EXPECT_EQ(f_lammps_last_thermo_type(3), multitype::LAMMPS_DOUBLE);

View File

@ -77,11 +77,7 @@ TEST_F(LAMMPS_properties, get_mpi_comm)
TEST_F(LAMMPS_properties, extract_setting)
{
#if defined(LAMMPS_SMALLSMALL)
EXPECT_EQ(f_lammps_extract_setting("bigint"), 4);
#else
EXPECT_EQ(f_lammps_extract_setting("bigint"), 8);
#endif
#if defined(LAMMPS_BIGBIG)
EXPECT_EQ(f_lammps_extract_setting("tagint"), 8);
EXPECT_EQ(f_lammps_extract_setting("imageint"), 8);

View File

@ -25,11 +25,7 @@ TEST(Types, ubuf)
double buf[3];
double d1 = 0.1;
int i1 = -10;
#if defined(LAMMPS_SMALLSMALL)
bigint b1 = 2048;
#else
bigint b1 = (1L << 58) + (1L << 50);
#endif
buf[0] = d1;
buf[1] = ubuf(i1).d;
buf[2] = ubuf(b1).d;
@ -58,11 +54,7 @@ TEST(Types, multitype)
EXPECT_EQ(m[1].type, multitype::LAMMPS_INT);
EXPECT_EQ(m[2].type, multitype::LAMMPS_DOUBLE);
#if defined(LAMMPS_SMALLSMALL)
EXPECT_EQ(m[3].type, multitype::LAMMPS_INT);
#else
EXPECT_EQ(m[3].type, multitype::LAMMPS_INT64);
#endif
EXPECT_EQ(m[4].type, multitype::LAMMPS_INT);
EXPECT_EQ(m[5].type, multitype::LAMMPS_DOUBLE);
EXPECT_EQ(m[6].type, multitype::LAMMPS_NONE);
@ -71,9 +63,7 @@ TEST(Types, multitype)
EXPECT_EQ(m[1].data.i, i1);
EXPECT_EQ(m[2].data.d, d1);
#if !defined(LAMMPS_SMALLSMALL)
EXPECT_EQ(m[3].data.b, -((1L << 40) + (1L << 50)));
#endif
EXPECT_EQ(m[4].data.i, -1023);
EXPECT_EQ(m[5].data.d, -2.225);
}