Skip to content

Stable release 29 October 2020

Choose a tag to compare
@akohlmey akohlmey released this 29 Oct 00:04

This stable release corresponds to a significantly larger number of changes than between previous stable releases. There have been over 4000 commits added since the last stable release, while the two previous stable releases have been made after fewer than 2000 commits.

Below is a list of major changes since the last stable release 3 March 2020

General changes:

  • Significant refactoring of the core LAMMPS code to increase code reuse, simplify new additions, improve thread safety, and benefit from C++11 features. In particular the following changes were incorporated:
    • Refactoring of the AtomVec classes to simplify adding new atom styles to the code. Also adding support for writing complete data files for atom styles ellipsoid, line, tri, and body, which had been previously missing.
    • Implementation of string tokenizer and potential file reader classes to improve parsing of text files and avoid the strtok() function. This has lead to substantial reduction in the lines of code used for those cases.
    • Transferring of utility function from class members to standalone functions in the utils namespace. Several new additions of such convenience functions
    • Using const std::string & instead char * or const char * as function argument in many places to simplify string processing and replacing C style string functions with their equivalent or expanded functionality of std::string member functions
    • Incorporation of fmtlib to replace and simplify many cases of output formatting. This avoids many complications with printf() style functions since no special treatment is required for processing bigint or tagint arguments. Since fmtlib has been accepted as a C++20 feature, this is also future proofing the code base.
    • Avoiding use of temporary local buffers for output formatting and thus lowering the risk of buffer overflows. This was enabled by the previous two changed.
    • Replacing NULL with nullptr where applicable for better detection of incorrect use.
  • Major reorganization and significant expansion of the manual:
    • The manual is now split into two parts: a User Guide and a Programmer Guide
    • Most of the content related to using the library interfaces, the Python module (and Python in general) have been moved to the Programmer Guide
    • The content of the external Developer Guide PDF has been incorporated into the Programmer Guide section and expanded
    • The documentation of the C-library interface and Python module has been expanded and the documentation of the individual APIs are now imported from the source code by means of using doxygen (for C/C++) and docstrings (for Python).
    • Redundancies have been reduced, cross-links added, and links to external websites checked, updated or removed.
  • Addition of a unit test facility which is integrated into building LAMMPS with CMake and using the ctest tool that comes with CMake. Tests for a variety of features and styles are included with a code coverage close to 40%. The added tests have exposed a significant number of previously unknown bugs and inconsistencies (e.g. between plain pair styles and suffixed versions or between Pair::compute() and Pair::single()) in the code base, which have been fixed.
  • Significant refactoring of the LAMMPS C-library interface and Python module: several new functions were added, especially for introspection, ad-hoc numerical constants were replaced by symbolic constants defined in enumerators and synchronized betwee C and Python, where possible and needed. Most modifications were done in a backward compatible way.
  • Add support for a "UNITS:" metadata tag to potential and tabulation files and code to error out if the value does not match with the current setting. For some potentials, mainly manybody potentials, support for on-the-fly conversion between "metal" and "real" units was added, so that a file with parameters for "metal" units can be used in a simulation with "real" units, if the pair style supports it.
  • Ordering of #include "" statements has been revised and the lists updated where possible after analyzing with the IWYU tool.
  • Significant refactoring of CMake scripts enabled by moving the minimum required CMake version from 2.8.x to 3.10.x. CMake build support is more reliable, portable to different host operating systems and efficient.
  • Conventional build system now always builds the LAMMPS library and the executable, so the available modes are reduced from 4 to 2: mode=static and mode=shared. The CMake build behaves equivalently.
  • Use pre-processor macros (requiring C++11) to provide compatibility with OpenMP 4.x and later semantics
  • Many small fixes and improvements.
  • Removal of outdated or obsolete makefiles. Removal of obsolete files and folder in the bench folder.

Updates and new commands or styles or packages:

  • New MLIAP package providing a generalized framework for machine-learning potentials. This currently includes an implementation of the SNAP potential
  • New USER-MESONT package for mesoscale modeling of nanotubes.
  • New command reset_mol_ids
  • New fix widom for modeling Widom insertions
  • New fix pafi to perform langevin or brownian dynamics time integration constrained to a potential hyperplane. Intended to be coupled to the PAFI C++ code.
  • Bugfixes, improved documentation, and new functionality for fix bond/react in particular RMSD based constraints.
  • New fix accelerate/cos and compute viscosity/cos in USER-MISC as yet another method to compute viscosity.
  • New fix momentum/chunk to remove per chunk momentum
  • New bond style special to provide a mechanism to implement special bond exclusions beyond 1-4.
  • Ports of more functionality to the KOKKOS package and several performance optimizations. Support for AMD GPUs via HIP. Update of the bundled Kokkos library to version 3.2.
  • Support for triclinic cells when using "tiled" communication style.
  • New pair style for charge-dipole damping with Tang-Toennies function in the USER-DRUDE package
  • Updates, bugfixes and adjustments to LAMMPS requiring C++11 in the USER-COLVARS package (now at version 2020-09-17).
  • Support for building triclinic neighbor lists on the GPU in the GPU package. Bugfixes and performance improvements for GPU styles.
  • Updates to writing binary dump files and binary2atom tool to become consistent with current text mode custom dumps
  • Updates to the user supported examples/COUPLE/fortran and examples/COUPLE/fortran2 wrappers to become compatible with updates to the C-library interface. Also work on a new, "object oriented" Fortran interface has started.
  • New LAMMPS shell command as alternative to the regular LAMMPS executable for improved interactive use.
  • Interface file for use with SWIG to create bindings to the LAMMPS library interface for a wide variety of (mostly scripted) programming languages (like Java, JavaScript, Lua, Perl, Ruby, Tcl and more).
  • Improved support for cross-compiling binaries for Windows on Linux. This enables building a liblammps.dll file and loading the LAMMPS Python module also on Windows.
  • Improved CMake support for building with "ninja" instead of "make".

Backward compatibility notes:

  • A C++11 compatible compiler is now required
  • CMake 3.10 or later is required for configuring and building with CMake
  • The USER-MESO package was renamed to USER-MESODPD to avoid confusion
  • Fix bond/react has been moved from USER-MISC to its own USER-REACTION package
  • The command reset_ids was renamed to reset_atom_ids.
  • Binary restarts using pair styles ufm, buck/mdf, lennard/mdf, coul/shield, coul/diel, and morse/soft are not compatible with older versions of LAMMPS due to bugfixes in the restart handling of those pair styles.
  • The format of binary dump files has changed. binary2text can detect and convert the old and the new format
  • Fixes temp/berendsen, temp/csvr, temp/csld, temp/rescale, fix spring/chunk and fix spring/rg now store their state in binary restart files