Compare commits

..

2211 Commits

Author SHA1 Message Date
b3d9f648ef Merge pull request #2414 from akohlmey/next_lammps_version
Update version strings for next patch release
2020-10-09 20:12:56 -04:00
0460dc3dfb Merge pull request #2413 from akohlmey/progguide-updates
More Programmer Guide and Library Interface updates for next release
2020-10-09 19:30:37 -04:00
51489c1509 dedup anchor 2020-10-09 17:29:31 -04:00
97964604c6 no point in trying a static link of executables 2020-10-09 13:29:13 -04:00
362fe700a5 remove static libraries for cross-compiler. not used with .dll version. 2020-10-09 13:26:52 -04:00
43f2c14c8b print warning when reading data files with non-zero image flags for non-periodic boundaries 2020-10-09 13:24:53 -04:00
57e0e64ffe No MPI communicaton after MPI_Finalize() and no MPI_Finalize() unless we are initialized. 2020-10-09 12:47:13 -04:00
078f931393 add comment to explain using the LAMMPS_LIB_MPI define in example 2020-10-09 11:50:53 -04:00
84c9fcf6e9 add legacy warning to F77 style Fortran wrapper 2020-10-09 11:15:15 -04:00
74e1d0f8cf move Tools compilation script code from CMakeLists.txt to separate Tools.cmake file 2020-10-09 11:15:00 -04:00
5457accb3d make the legacy fortran wrapper work (again) 2020-10-09 07:52:36 -04:00
ca3d10fa39 need to define LAMMPS_LIB_MPI 2020-10-09 07:37:25 -04:00
bafba4235c include versionadded tags 2020-10-09 07:26:01 -04:00
188e1c3828 correct versionadded dates 2020-10-09 07:22:16 -04:00
38bf231361 silence sphinx warning 2020-10-09 07:19:02 -04:00
471acb2ef8 add unit tests for added APIs 2020-10-09 07:16:34 -04:00
7a9b4ef0d4 include FFTW in MinGW cross-compiler libraries. Make static/dynamic explicit 2020-10-09 02:27:31 -04:00
eb3992a69a enable static linkage for executables when cross-compiling with MinGW 2020-10-09 02:26:46 -04:00
bfcb78d5d7 fix bug with string passing 2020-10-09 01:42:48 -04:00
5a207247b6 update version strings for next patch release 2020-10-09 01:12:41 -04:00
6d67fa004c tweak formulation 2020-10-08 23:35:49 -04:00
90d511bc86 add wrappers for new library functions 2020-10-08 22:32:33 -04:00
49ebc5ac40 update versionadded date 2020-10-08 22:32:08 -04:00
5c6bfa6ab5 Merge branch 'master' into progguide-axel 2020-10-08 21:51:22 -04:00
a581b4b85e Merge pull request #2412 from lammps/progguide-updates
Updates to the Programmer Guide part of the Manual
2020-10-08 21:50:37 -04:00
4f4bc427ae implement LAMMPS_LIB_NO_MPI to LAMMPS_LIB_MPI change 2020-10-08 21:50:15 -04:00
9f0002550e Merge pull request #2404 from akohlmey/fortran-portable-string
Make f2c_string utility function of the new Fortran module portable across Fortran compilers
2020-10-08 20:58:51 -04:00
4995ab3264 Merge pull request #2403 from akohlmey/fortran2-updates
Update of fortran2 interface for recent changes in the C-library interface
2020-10-08 20:23:44 -04:00
4a856148ad Merge pull request #2389 from kateryna-goloviznina/coul_tt
Pair style for charge-dipole damping with Tang-Toennies function
2020-10-08 19:47:36 -04:00
677e8afdc5 update section headlines 2020-10-08 10:32:02 -04:00
a89741f7f6 more 'doc page' to 'page' changes 2020-10-08 08:32:15 -04:00
fdbcd202fa Consolidate the redundant instructions for building the manual into one location. 2020-10-08 08:31:58 -04:00
60864f021f replace "doc page" with "page" or equivalent 2020-10-07 22:29:26 -04:00
e683585bba reformat reax/c control file parameter descriptions 2020-10-07 22:28:34 -04:00
353158f7e7 improve errors vs. exception not 2020-10-07 21:56:14 -04:00
20e1697dba add ":class: note" to admonitions where it was missing for consistent formatting 2020-10-07 20:24:56 -04:00
08f8e7ed28 update titles as suggested by steve and move a few entries around 2020-10-07 20:07:30 -04:00
d48b0ebd7b print OS/Compiler info when starting LAMMPS shell 2020-10-07 18:37:27 -04:00
0891a8ce7d better MPI version detection. 2020-10-07 18:37:09 -04:00
ac6e99ae81 implement "mem" command into LAMMPS shell to print current and max memory use 2020-10-07 18:36:43 -04:00
50bfb9142d add library API to print OS/Compiler info (for use with LAMMPS shell) 2020-10-07 18:35:59 -04:00
57cc8d6290 fix incorrectly formatted "notes" 2020-10-07 18:35:05 -04:00
1098ca8749 add some more explanation about exceptions from the library interface perspective 2020-10-07 13:08:49 -04:00
e637c150ba add versionadded tags 2020-10-07 13:08:25 -04:00
395906b387 whitespace 2020-10-07 13:07:57 -04:00
5fa1cd7e86 small corrections 2020-10-07 05:33:55 -04:00
9ea38c545d update global properties tests 2020-10-06 22:43:42 -04:00
355c68f304 Merge branch 'master' into progguide-axel 2020-10-06 21:40:43 -04:00
bf4773c3f7 Merge pull request #2407 from akohlmey/collected-small-fixes
Collected small changes and bugfixes for the next patch release
2020-10-06 20:17:45 -04:00
f0f933a711 allow forward slash in strings for if statements 2020-10-06 18:44:26 -04:00
15f9987c32 add custom commands "cd" and "pwd" to the LAMMPS shell 2020-10-06 18:39:22 -04:00
fb1dab6098 Merge branch 'master' into collected-small-fixes 2020-10-06 18:00:33 -04:00
1ee9e4eabd Merge branch 'master' into progguide-axel 2020-10-06 17:11:47 -04:00
9274912a81 add note about no longer supporting PyPar and remove instructions related to it. 2020-10-06 16:19:43 -04:00
2f857176c8 stay compatible with cmake older than version 3.14 2020-10-06 13:45:46 -04:00
f442d811be Merge commit 'dbf51af7d1565c62902eef22a7aa6f6eb552432b' of github.com:rbberger/lammps into collected-small-fixes 2020-10-06 12:29:36 -04:00
1afd9b1c83 update Python installation docs 2020-10-06 12:15:56 -04:00
887603d856 Merge pull request #2411 from rbberger/fix_wall_gran_region
Corrections for fix wall/gran and wall/gran/region
2020-10-06 11:51:58 -04:00
7dd244a828 Correct fix wall/gran and wall/gran/region docs 2020-10-06 10:45:23 -04:00
18023ad9dc Update fix_wall_gran_region.cpp
Don't store atom tag, just if there is a contact.

Fixes #2306
2020-10-06 10:39:14 -04:00
5d08f629ab fix typo 2020-10-06 05:30:09 -04:00
b5db29bae4 revise python in LAMMPS docs 2020-10-05 22:48:57 -04:00
f2ba00ea9c update label in graph 2020-10-05 21:50:54 -04:00
549e4df506 Merge branch 'progguide-richard' into progguide-axel 2020-10-05 21:04:29 -04:00
80a054471d Merge branch 'progguide-updates' into progguide-richard 2020-10-05 19:31:03 -04:00
5244f49234 Fix broken page 2020-10-05 18:04:30 -04:00
caf434811a Add example to Python_config.rst 2020-10-05 17:54:48 -04:00
b8c66b099d Fix typo 2020-10-05 17:42:43 -04:00
93ed9b4266 Add PyLammps parts 2020-10-05 17:34:50 -04:00
22cca93603 Add tests for neighbor list API 2020-10-05 17:34:08 -04:00
02b10380bc Create ctypes only neighbor list API variant
This moves the lammps.get_neighlist() method to lammps.numpy.get_neighlist().
lammps.get_neighlist() now returns a NeighList object, while the NumPy variants
returns a NumPyNeighList object. The main difference between the two is that while
the ctypes variant returns neighlist elements as

atom idx (int), numneighs (int), neighbors (POINTER(c_int))

the NumPy variant returns

atom idx (int), neighbors (numpy.array)
2020-10-05 16:21:37 -04:00
68147306e7 Add Python_neighbor.rst 2020-10-05 16:15:40 -04:00
c06348c507 Update Python docs 2020-10-05 15:07:57 -04:00
0fb91ec755 Merge pull request #2408 from akohlmey/lammps-shell
Add a LAMMPS shell tool as alternative to the LAMMPS executable for interactive use
2020-10-05 14:42:23 -04:00
d9f7ddfd6d Merge pull request #2409 from mrcdr/math_eigen_impl
PR to relate "math_eigen_impl.h" with an author
2020-10-05 14:07:09 -04:00
8f808a5e6e Update Python_usage.rst and Python_module.rst 2020-10-05 14:06:09 -04:00
ed17eabe17 Add missing code highlights 2020-10-05 14:04:44 -04:00
884295eb5f Add example showing Python exception handling 2020-10-05 14:04:14 -04:00
6672568fca Change links 2020-10-05 14:03:50 -04:00
4f1ed775e9 Add missing docstrings 2020-10-05 14:03:19 -04:00
6933233c56 add tests for the new library APIs 2020-10-05 13:43:11 -04:00
113db3ac73 fold group specific query functions into the more generic ID query functions 2020-10-05 13:41:12 -04:00
68cca6d31a make warning about lack of exception handling more specific 2020-10-05 12:51:42 -04:00
bd206dca10 simplify based on suggestions from @junghans 2020-10-05 11:44:19 -04:00
b6d333535c correct variable name 2020-10-05 11:43:43 -04:00
47e08f63ac Merge pull request #2406 from jrgissing/bond/react-rmsd_constraint_bugfix
bond/react: rmsd constraint bugfix
2020-10-05 10:43:21 -04:00
e08d905504 make a small change to math_eigen_impl.h 2020-10-05 22:32:15 +09:00
3e74e03bbb update all_on/all_off presets to really include all packages 2020-10-04 16:46:29 -04:00
d500ffa784 implement handler for CTRL-C on windows. 2020-10-04 16:42:29 -04:00
f3b33ea0c6 address spelling issues 2020-10-04 14:10:35 -04:00
d1e76068e8 add new APIs to library docs 2020-10-04 14:10:18 -04:00
ffcd905bf1 complete LAMMPS shell docs interation. Warn if exceptions are missing but don't fail 2020-10-04 14:03:34 -04:00
e360219a8a add readme and makefile for LAMMPS shell 2020-10-04 12:28:01 -04:00
e71806196f ignore LAMMPS shell history files 2020-10-04 12:27:40 -04:00
cc14bae240 add LAMMPS shell to README 2020-10-04 12:22:37 -04:00
f6a7cbd2e8 fix typo 2020-10-04 11:31:15 -04:00
2f67f299e5 correct error messages and make use of utils and fmtlib 2020-10-04 11:26:22 -04:00
ecb5078ba7 add signal handler to smoothly interrupt ongoing runs. non-windows only. 2020-10-04 11:25:37 -04:00
f1ed6a9782 change word break characters to make direct variable expansion completion work 2020-10-04 11:25:05 -04:00
9353004e3e add APIs to determine of LAMMPS is running and to interrupt a run cleanly 2020-10-04 11:23:49 -04:00
2eb07f7427 add expansions of IDs and references to IDs 2020-10-04 06:02:14 -04:00
9dfb715296 add support for variable names to id introspection in library interface 2020-10-04 06:01:26 -04:00
b1cc9949e4 include added introspection into docs 2020-10-03 23:38:22 -04:00
1988e4c24c add introspection for various kinds of IDs 2020-10-03 23:38:02 -04:00
c08089c1a7 add missing pkg-config file for readline 2020-10-03 22:35:58 -04:00
4520eef1b0 include readline support to be ready for LAMMPS-Shell 2020-10-03 22:05:52 -04:00
7f3db6f8e3 improve wording 2020-10-03 22:04:54 -04:00
c5514c0a36 windows portability fix 2020-10-03 22:02:13 -04:00
4e8feff52c add support for building the LAMMPS shell in CMake 2020-10-03 22:01:57 -04:00
acf53ff55e add a few more context aware matcher functions 2020-10-03 12:26:40 -04:00
a2f7aae6db add API to query group names 2020-10-03 12:26:17 -04:00
01c85a3032 correct embedded docs 2020-10-03 12:25:56 -04:00
b231fa8a16 add completion for force style names 2020-10-03 11:32:56 -04:00
4cf30ceda1 silence compiler warnings 2020-10-03 09:52:00 -04:00
af8f8d3c11 avoid segfault 2020-10-03 09:51:42 -04:00
024c9238f9 fix issue spotted by compiler warning 2020-10-03 09:51:28 -04:00
22cbac0b01 initial version of LAMMPS shell. without build system support (yet). 2020-10-03 09:49:35 -04:00
946a49662f bond/react: rmsd constraint bugfix
previously, eligible reactions could have been temporarily prevented, at the edge of the box, in serial
2020-10-02 18:43:35 -04:00
fb1bd3e962 Correct links 2020-10-02 18:01:52 -04:00
d91d8de76d Refactor LammpsNumpyWrapper to numpy_wrapper
LammpsNumpyWrapper was a class that was defined inside of the
lammps.numpy property when it was first accessed. This made it hard
to document the methods of this class.

This commit extracts this utility class into the lammps module and
renames it to 'numpy_wrapper'.
2020-10-02 17:28:25 -04:00
0089a35d95 Remove dead code 2020-10-02 17:27:08 -04:00
7355977819 Add missing exception handling for functions that could cause errors 2020-10-02 17:26:14 -04:00
d9cbb354d2 Move lammps exception code into its own property 2020-10-02 17:22:01 -04:00
0475397229 Update Python_usage.rst 2020-10-02 17:19:51 -04:00
60891fe6f9 Add Python_config.rst 2020-10-02 17:19:04 -04:00
b57c8f6b77 Add tests for LAMMPS exceptions in Python 2020-10-02 16:53:41 -04:00
52c6353f86 Fix typo 2020-10-02 15:09:29 -04:00
a0d0f96e52 make f2c_string utility function portable across fortran compilers 2020-10-02 10:36:17 -04:00
1f417f8eb4 mention Fortran interface in examples/COUPLE/fortran2 now that it is up-to-date again 2020-10-02 00:28:13 -04:00
086a71ba46 incorporate LAMMPS fortran2 interface updates and apply a few corrections 2020-10-02 00:07:01 -04:00
2c7a686220 update fortran2 module 2020-10-01 23:20:52 -04:00
51d55aa036 Merge pull request #2400 from akohlmey/code-analysis-fixes
A few more static code analysis fixes
2020-10-01 18:32:50 -04:00
2ea61b21f8 fix small memory leaks 2020-10-01 18:11:19 -04:00
48c45767f9 remove dead code 2020-10-01 18:11:08 -04:00
c5fc3f2c78 Update Python_usage.rst 2020-10-01 18:01:07 -04:00
533c453a08 Update Python docs 2020-10-01 15:00:08 -04:00
243a81e9d8 must initialize eflag_atom and vflag_atom to zero in constructor 2020-10-01 14:49:23 -04:00
9dc42262ec one more edit 2020-10-01 11:34:27 -06:00
343b24dd5e more edits to C library chapter 2020-10-01 10:50:33 -06:00
b94df09570 Merge pull request #2398 from lammps/progguide-updates
Documentation updates plus a few small bugfixes
2020-10-01 11:11:28 -04:00
774ac8b2d9 avoid overflow of per-local-atom computation 2020-10-01 09:49:28 -04:00
4a40a70870 avoid overflow of timestep related computations 2020-10-01 09:48:54 -04:00
8c56f60939 use bigint instead of int for timestep related variable functions to avoid overflows 2020-10-01 09:35:45 -04:00
ea3af3c2bc resolve delete/free() mismatch 2020-10-01 09:34:38 -04:00
9efcaf2d61 update documentation for Windows installer 2020-10-01 00:57:53 -04:00
fb33a71720 look for liblammps.dll in windows binary dir only if that directory exists 2020-10-01 00:34:03 -04:00
507c2cb2a8 Update and reorganize Python docs 2020-09-30 22:20:01 -04:00
a79a7b2704 fix typo reported on lammps-users 2020-09-30 21:24:55 -04:00
77fb2ee311 add list of documented functions at the top of the C-Library doc pages 2020-09-30 21:16:48 -04:00
dc13a61b40 fix spelling 2020-09-30 20:00:53 -04:00
a9b27caf17 Merge branch 'master' into progguide-axel 2020-09-30 19:57:20 -04:00
38d954e038 Update the text to mention returning the handle instead of passing it as an argument. 2020-09-30 19:54:07 -04:00
0d9a2808b4 Merge branch 'progguide-updates' of github.com:lammps/lammps into progguide-axel 2020-09-30 19:50:00 -04:00
6928e79883 Merge pull request #2395 from rbberger/collected-small-fixes
Fixes issues found via Static Code Analysis and from bug reports
2020-09-30 19:23:52 -04:00
4b71e1cbda initial library doc page edits 2020-09-30 15:37:11 -06:00
cbc529881c support hybrid atom styles in in fix propel/self 2020-09-30 14:07:46 -04:00
23279836c9 Invalidate pointer after deallocation 2020-09-30 09:10:40 -04:00
d84300a3ac do not fail when looking for gzip or ffmpeg executables when cross compiling to windows 2020-09-30 00:05:15 -04:00
555fba1e4b add special case for windows installer package where the .dll file is in the bin folder 2020-09-29 18:46:32 -04:00
e4cfb91169 discuss that USER-MESONT package potentials are not bundled and provide URL 2020-09-29 16:57:19 -04:00
0ed935ab76 silence compiler warning on windows 2020-09-29 11:19:12 -04:00
54c4b95c4d small format tweak 2020-09-28 14:09:03 -04:00
b1f6a6799c Merge remote-tracking branch 'github/master' into coul_tt 2020-09-28 13:56:00 -04:00
3b1d07225d corret strmatch() semantics and restore strcmp() in extract function 2020-09-28 13:49:38 -04:00
c217c8df24 shorten example and do not print CPU time output to avoid false positives when comparing 2020-09-28 13:49:08 -04:00
8bc67f17cc fully integrate pair style coul/tt into manual 2020-09-28 13:46:53 -04:00
e0e4e516fc Merge pull request #2396 from akohlmey/openmp-compat-auto
Autodetect OpenMP compatibility setting for known compiler signatures
2020-09-28 13:14:13 -04:00
25bda86ad0 fix typo 2020-09-28 12:52:32 -04:00
d8b55ecd65 Merge pull request #2397 from akohlmey/remove-cilk-array-notation
Remove specializations using cilk array notation from USER-INTEL
2020-09-28 11:56:02 -04:00
405c1b98c5 remove inactive code and documentation for dump image persp option 2020-09-28 08:19:26 -04:00
d868271b01 remove unneeded escapes from input examples 2020-09-28 07:52:38 -04:00
407f445753 remove specializations using cilk array notation 2020-09-28 07:32:11 -04:00
c626208c80 avoid failure with Intel compilers 2020-09-27 19:05:58 -04:00
9d39587d37 expand c-library properties example 2020-09-27 19:05:40 -04:00
fdbdd26585 include intel fortran compiler into intel cmake preset 2020-09-26 22:30:21 -04:00
b11b420b08 small doc update for singularity 2020-09-26 22:30:05 -04:00
d23f7d14c9 typo 2020-09-25 22:20:31 -04:00
7e68746ebe use safe reader function 2020-09-25 22:16:19 -04:00
adef7d4e18 need to check for nthreads < 1 only if OpenMP is enabled 2020-09-25 22:14:21 -04:00
909960514a avoid unneeded division 2020-09-25 22:10:51 -04:00
6967522a4f fix logic error 2020-09-25 22:08:28 -04:00
172bb6050a use safe read function 2020-09-25 22:08:22 -04:00
a963e85846 remove dead code 2020-09-25 21:50:53 -04:00
66c4627775 Merge branch 'collected-small-fixes' of github.com:rbberger/lammps into collected-small-changes 2020-09-25 18:14:50 -04:00
2ffa50f2f8 fix memory leak 2020-09-25 18:13:52 -04:00
ab08a27731 correct data layout for creating integrate style 2020-09-25 18:00:47 -04:00
bd60174fd3 fix argument dimensions 2020-09-25 18:00:19 -04:00
c0384eb264 update code owners 2020-09-25 17:52:51 -04:00
c496b18a9d avoid memory leak 2020-09-25 17:50:02 -04:00
d1321a0860 fix argument dimensions 2020-09-25 17:49:52 -04:00
e378532003 avoid 32-bit integer overflow 2020-09-25 17:31:49 -04:00
5e110fe707 update docs for autodetected OpenMP compatibility 2020-09-25 16:45:39 -04:00
5489c64aef remove trailing whitespace 2020-09-25 16:32:54 -04:00
2e67aa6b47 autodetect OpenMP 4.0 semantic compatibility if not explicitly set 2020-09-25 16:31:45 -04:00
cc5ef652e4 move Using Python with LAMMPS to programmer guide and integrate python module docs 2020-09-25 15:13:05 -04:00
0ffb2ce09c move Tutorials to bottom of Howto section 2020-09-25 15:12:31 -04:00
5e6d222d29 fix up a few internal references 2020-09-25 14:04:44 -04:00
495438105f mass renaming of programmer guide files 2020-09-25 13:59:29 -04:00
9a523fef65 add bibliography 2020-09-25 13:48:22 -04:00
089e55cc37 fix typo 2020-09-25 13:48:05 -04:00
26ad664079 Avoid string duplication and remove memory leak 2020-09-25 13:44:28 -04:00
e1b00e96ed bug fixed 2020-09-25 17:10:54 +02:00
064f735272 source files updated, examples changes 2020-09-25 16:08:20 +02:00
7a35f786fb tweak button size setting for active state, too. 2020-09-24 16:56:05 -04:00
28812b1ea7 Merge pull request #2381 from akohlmey/collected-small-changes
Collected small changes
2020-09-24 16:17:28 -04:00
08270c3498 update container descriptions 2020-09-24 02:17:26 -04:00
02c1480546 update README in examples/COUPLE/simple 2020-09-24 02:17:11 -04:00
ac78f8f1e1 update examples/COUPLE/simple sources to work with the current version of LAMMPS 2020-09-24 01:30:34 -04:00
b350dce573 improve error messages for variables and python commands 2020-09-23 19:02:55 -04:00
2f8a5ddd1f xindy doesn't seem to be required (and is not available on CentOS 8) 2020-09-23 17:13:09 -04:00
85fe94a6dd Merge pull request #2388 from jrgissing/molecule_fragments_check
molecule: findfragments correction
2020-09-23 15:54:37 -04:00
790f636523 rephrase 2020-09-23 15:45:29 -04:00
b6d98707ec molecule: revert overzealous error checking 2020-09-23 11:23:10 -04:00
2b30661b07 molecule: correctly update docs 2020-09-23 10:46:23 -04:00
1be766c8cd molecule fragment: let's add more checks 2020-09-23 10:37:33 -04:00
ed3975054a fix typo 2020-09-23 10:30:19 -04:00
e29f838121 also add error checks 2020-09-23 10:28:48 -04:00
88b8461e0f the right molecule fragment fix 2020-09-23 10:19:38 -04:00
343932f220 document -DLAMMPS_TRAP_FPE 2020-09-23 09:38:07 -04:00
ab4dc9c343 Merge pull request #2378 from junghans/cmake_install_fix
cmake: do not install mpi.h without library
2020-09-22 21:37:57 -04:00
20027cc7ec Merge pull request #2390 from Vsevak/hip_pppm_fix
Fix atomicAdd in PPPM/GPU for the HIP backend
2020-09-22 18:04:12 -04:00
9df1bb4db0 remove obsolete makefiles. Makefile.xk7 is on death watch but Blue Waters still has such nodes 2020-09-22 17:47:14 -04:00
459d51bbea Do not disable atomics for HIP
atomics are disabled for NVIDIA 1.0 cards, which should not affect ROCm HIP
2020-09-22 22:34:24 +03:00
7b4304577a add -std=c++11 flag to compilation of all .cpp files on Linux 2020-09-22 10:58:54 -04:00
2d7b6a9008 remove dead code 2020-09-22 10:12:59 -04:00
b878403aee update a few more singularity container definitions for doc build requirements 2020-09-22 06:01:34 -04:00
1eebdcbd03 fix obvious bugs 2020-09-22 05:34:29 -04:00
b876f451f8 make compiler choice overridable 2020-09-22 05:34:12 -04:00
f186eb7005 be more selective about which elements not to display
we only want to skip the redundant User-Documentation and Programmer-Documentation captions
2020-09-21 22:41:19 -04:00
54aacc47ea add section about citing LAMMPS 2020-09-21 22:40:36 -04:00
cc8b042abf cmake: export LAMMPS_LIB_NO_MPI for serial version 2020-09-21 12:54:56 -06:00
fbcb888ec0 cmake: do not install install mpi.h 2020-09-21 12:41:34 -06:00
51b900b043 Merge remote-tracking branch 'origin/master' into cmake_install_fix 2020-09-21 12:39:51 -06:00
36fdba32e7 Merge pull request #2382 from junghans/cmake_install_fix_2
cmake: install missing utils.h
2020-09-21 13:29:29 -04:00
19bc3d3643 Docs updated 2020-09-21 18:05:57 +02:00
7eab154786 one-line bug when checking for molecule fragments 2020-09-21 11:01:04 -04:00
8099e2a5d9 Docs updated 2020-09-21 16:16:38 +02:00
2206de7c68 Examples added, bug fixed 2020-09-21 16:14:33 +02:00
a1407de09d have make yes/no package terminate with error status for non-existing packages
this closes #2387
2020-09-21 07:09:13 -04:00
c7c7d2f474 Merge pull request #2377 from akohlmey/move-version-to-lammps
Move the members `version` and `num_ver` form Universe class to LAMMPS class
2020-09-21 02:10:08 -04:00
29a7d598ac update formatting style to be more consistent 2020-09-21 02:04:58 -04:00
0a11cc5eb9 make code valgrind clean 2020-09-21 01:55:07 -04:00
486131f4c5 fix segmentation fault bug in USER-PTM. closes #2386 2020-09-21 01:54:36 -04:00
0951fea738 Merge branch 'collected-small-changes' of github.com:akohlmey/lammps into collected-small-changes 2020-09-20 19:20:42 -04:00
acb5fd2ebf Simplify GenerateBinaryHeader utility
The function implementation was incomplete for handling the case
of multiple files. It would generate wrong C code in case more than
one files were specified. Since we don't have this use case, it's
safe to only leave the single input file implementation.

Closes issue #2294
2020-09-20 18:24:43 -04:00
7d07d04989 Use correct library for unit test if LAMMPS_MACHINE_NAME is set 2020-09-20 17:52:24 -04:00
54b9e60dd0 reformat 2020-09-20 14:06:40 -04:00
4cbf821af3 modernize example 2020-09-20 14:03:13 -04:00
774bffe623 relax result precision requirement somewhat 2020-09-20 13:57:04 -04:00
f2bb835e23 cmake: install missing utils.h 2020-09-20 10:44:54 -06:00
dfd447f570 Add missing tools for PDF index build to containers 2020-09-19 23:07:24 -04:00
61ce73273b Add missing -u flag for unbuffered PyLammps tests
Addresses issue #2380
2020-09-19 23:07:13 -04:00
92f8398bed check more thoroughly for prerequisites to translate the PDF manual. update doc/README 2020-09-19 18:16:52 -04:00
705a9a0a8b cmake: do not install mpi.h without library 2020-09-19 15:12:36 -06:00
f72fb7290b fix links 2020-09-19 16:28:20 -04:00
67aeb7a5e5 Merge branch 'move-version-to-lammps' into collected-small-changes 2020-09-19 16:17:01 -04:00
6b0346c299 try use unencrypted download or using wget if normal download of polyfill.js fails 2020-09-19 16:14:08 -04:00
c91ee210e4 simplify variable lookup in set command 2020-09-19 16:04:09 -04:00
9c0808e95a update unit tests for move of version string location 2020-09-19 15:00:03 -04:00
4c51a8ae57 move version and num_ver from Universe to LAMMPS and make num_ver an int 2020-09-19 11:37:08 -04:00
89506efd23 document Pointers class and LAMMPS_NS namespace 2020-09-19 11:16:44 -04:00
73c65d43e1 update list of main folders and descriptions 2020-09-19 02:53:36 -04:00
9030c987e6 tweak formatting and style setting to have the desired structure and layout 2020-09-19 00:54:54 -04:00
6dda562501 skip over uninitialized and internal variables. correctly identify all kinds of boolean values 2020-09-18 23:40:31 -04:00
9cdde97863 correct test logic 2020-09-18 22:37:54 -04:00
5ce6259632 correct reference to function 2020-09-18 22:35:56 -04:00
56d9222156 Merge pull request #2374 from akohlmey/next_patch_version
Step version strings for the next patch release
2020-09-18 21:45:34 -04:00
897a7d0ed4 only try to broadcast if we have a proper communicator 2020-09-18 21:17:31 -04:00
f5fda95da6 Merge branch 'master' into next_patch_version 2020-09-18 21:15:12 -04:00
094a1bea91 Merge pull request #2369 from akohlmey/collected-small-changes
Collected small changes and fixes for the next patch release
2020-09-18 20:20:41 -04:00
51957a6219 fix merge conflict 2020-09-18 19:49:36 -04:00
a0afb9b554 Merge branch 'master' into collected-small-changes 2020-09-18 18:38:47 -04:00
7580176020 Merge pull request #2376 from giacomofiorin/colvars-update
Update Colvars to version 2020-09-17
2020-09-18 18:38:17 -04:00
b520a6287b Revert parts of "Restore PDF index"
We need to update the container image(s) for building the
pdf documentation on ci.lammps.org by adding `latexmk`
and `xindy` before we can re-enable this change to the makefile.

This partially reverts commit 3c3b76a781.
2020-09-18 18:37:26 -04:00
494498df03 update docs on building the PDF version of the manual 2020-09-18 18:27:23 -04:00
906e000e4c Merge pull request #2368 from jrgissing/bond/react-update_all_charges_default
Bond/react update all charges by default
2020-09-18 18:17:54 -04:00
33a2857b33 Fix whitespace 2020-09-18 17:56:12 -04:00
3c3b76a781 Restore PDF index 2020-09-18 17:51:51 -04:00
07c9298558 Fix some broken internal hyperlinks in Colvars PDF 2020-09-18 17:24:12 -04:00
d4cd67ce74 tweak format some more and refactor manual sectioning to be logically correct
now if only there was a way to make the titles of the parts show in the
navigation sidebar.
2020-09-18 17:15:42 -04:00
7deb773440 Update Colvars to version 2020-09-17
Small changes

Implement global map of components (@HanatoK)
https://github.com/Colvars/colvars/pull/363

Format code examples with colored background (@giacomofiorin)
https://github.com/Colvars/colvars/pull/361

replaced jacobi() with an open-source version (@jewettaij)
https://github.com/Colvars/colvars/pull/360
2020-09-18 17:09:18 -04:00
e1397b9a88 Merge branch 'master' into collected-small-changes 2020-09-18 16:11:47 -04:00
34ba8ec83c Merge pull request #2359 from rbberger/python_interface_guide
Library interface updates and Python documentation
2020-09-18 16:11:08 -04:00
635b7c04a5 Update docs and docstrings 2020-09-18 14:49:25 -04:00
de811db221 address spelling issues 2020-09-18 14:13:35 -04:00
ae9abf0f7d correctly update docs 2020-09-18 14:10:32 -04:00
9a6dfbc0ee add some cross referencing 2020-09-18 13:45:33 -04:00
449513703b Merge remote-tracking branch 'origin/master' into python_interface_guide 2020-09-18 12:35:17 -04:00
e0b22a51da Doc updates 2020-09-18 12:35:07 -04:00
1afb355d09 Limit int types to LAMMPS_INT and LAMMPS_INT64
Keep LAMMPS_TAGINT and LAMMPS_BIGINT internal to LAMMPS.
An external caller now only needs to distinguish between 32 and 64bit
integers, doubles and C strings.
2020-09-18 12:05:37 -04:00
edbfdde372 document ubuf union in developer guide 2020-09-18 11:55:06 -04:00
1264184e7b tweak some website layout and style settings
- make previous/next buttoms smaller and show on top and bottom of page
- make tab header items smaller and more rounded
- reduce padding on a few selected items to make pages more compact

remove obsolete lammps.css file variant
2020-09-18 10:55:50 -04:00
df4ab6c39e Merge pull request #2375 from akohlmey/fmtlib-update
Update bundled fmtlib to version 7.0.3
2020-09-18 10:30:18 -04:00
dc89f0879c update specific pull request templates as they are available through the github cli now 2020-09-18 06:54:31 -04:00
3a2457bb3d update bundled fmtlib to version 7.0.3 2020-09-18 06:14:46 -04:00
2b1e249483 add comments to mark LAMMPS specific customizations 2020-09-18 06:12:42 -04:00
1ef36fd20a step version strings for next patch release 2020-09-17 22:16:42 -04:00
0e81803c8b some embedded documentation tweaks 2020-09-17 22:00:58 -04:00
90abe12a3e update LAMMPS version reference 2020-09-17 21:04:43 -04:00
445e57923f add one-time deprecation warning to lammps_open() and lammps_open_no_mpi() 2020-09-17 21:01:38 -04:00
6e22229424 Merge remote-tracking branch 'github/master' into collected-small-changes 2020-09-17 20:27:55 -04:00
94ad6821f7 Merge pull request #2373 from stanmoore1/kk_wkar
Add workaround for performance regression in Kokkos Package
2020-09-17 20:24:39 -04:00
d8b6ebdfc8 Add workaround for performance regression 2020-09-17 16:33:48 -06:00
42aca25a58 Update docs, fix typos 2020-09-17 18:10:08 -04:00
b4a1c9c24c Update examples 2020-09-17 17:08:13 -04:00
cf1ae7afa6 Use wrapper lammps.extract_atom_datatype 2020-09-17 17:04:40 -04:00
6729a42cfa Merge branch 'master' into collected-small-changes 2020-09-17 17:01:44 -04:00
3b96375888 Merge pull request #2371 from arghdos/kokkos_hip_porting
Additional Kokkos/HIP porting work
2020-09-17 16:58:46 -04:00
be72ce2534 Simplify Python examples to use numpy.extract_atom 2020-09-17 16:51:46 -04:00
ab6b69d6bd Add documentation and better autodetect 2020-09-17 16:39:19 -04:00
c06d5f7fb7 Fix type cast 2020-09-17 16:37:25 -04:00
b81ad54baa Simplify extract_atom and extract_global in Python interface
Both extract methods now can auto-detect the datatype of both global
and per-atom properties. Callers can still enforce different types
if needed by specifying the now optional dtype argument.

The numpy wrapper now has a new extract_atom function method, which
replace the extract_atom_darray and extract_atom_iarray method and
autodetects both type and size. All parameters can still be forced
to use different values if needed.
2020-09-17 16:16:27 -04:00
3275419872 Allow Colvars to include headers from the LAMMPS source directory 2020-09-17 14:37:26 -04:00
d88810f13a Add datatype introspection methods to library
Adds lammps_extract_atom_datatype and lammps_extract_global_datatype functions
to allow extracting type information of properties.
2020-09-17 13:43:43 -04:00
4c5aedeaa0 fix typo 2020-09-17 12:50:53 -04:00
91eaaba1be improve portability of docs makefile
- detect if /bin/bash is not found and provide a suitable error message
- use $(MAKE) and $(MFLAGS) variables to handle cases where GNU make is not called "make"
2020-09-17 12:40:09 -04:00
706a898163 Merge remote-tracking branch 'origin/master' into python_interface_guide 2020-09-17 12:08:12 -04:00
9fa43b8b12 Skip Numpy tests if not installed 2020-09-17 12:03:36 -04:00
7bf177a1c7 Fast forward porting work to master
Change-Id: Ieb428e4a001efadf880dbe2c64c2a685cebdd4ae
2020-09-17 10:45:04 -05:00
0522e3d7b6 a few more unittest tweaks 2020-09-17 11:11:44 -04:00
00641f9f24 relax epsilon a little for passing cross-platform tests 2020-09-17 11:01:59 -04:00
5dacfc47ca Change return type of lammps.get_natoms to int
Closes PR #2370
2020-09-17 10:57:49 -04:00
62a63d0cd8 silence compiler warnings 2020-09-17 10:27:06 -04:00
f8f2a94f60 coul/tt pair style added to USER-DRUDE 2020-09-17 15:14:27 +02:00
e2fc70da62 Merge branch 'master' into collected-small-changes 2020-09-17 06:51:21 -04:00
e924fc6d6e Merge pull request #2347 from jewettaij/math_eigen
Replace eigensolver code in LAMMPS with math_eigen.h and updated docs
2020-09-17 00:28:12 -04:00
e839fe0d30 Merge branch 'master' into collected-small-changes 2020-09-16 23:53:29 -04:00
b96512171c set -DCOLVARS_LAMMPS when compiling colvars library 2020-09-16 23:52:06 -04:00
4e304177a1 Merge pull request #2356 from giacomofiorin/colvars-update
Update Colvars to version 2020-07-07
2020-09-16 23:37:02 -04:00
b9919b72d7 make MSM test w/o PBC run faster 2020-09-16 23:36:17 -04:00
429cc0cacf add missing updates for symbolic constants in Atom class 2020-09-16 23:19:10 -04:00
6e9a39cf22 remove trailing whitespace 2020-09-16 22:57:49 -04:00
c14fd3131a Merge pull request #2367 from ndtrung81/rigid-langevin
Fixed a bug in computing the langevin torques applied to rigid bodies
2020-09-16 22:36:04 -04:00
61b83901f5 bond/react: correct new custom_charges logic 2020-09-16 21:28:48 -04:00
55bc1baf97 bond/react: correct recent enum update 2020-09-16 20:33:45 -04:00
b176cdf28c remove trailing whitespace 2020-09-16 18:18:53 -04:00
a8a9fb6eb8 adapt unit test for Jacobi class 2020-09-16 18:17:23 -04:00
12582edfb7 Add numpy.extract_atom_darray test 2020-09-16 18:04:45 -04:00
96f4178d92 add URLs to upstream projects for eigensolvers 2020-09-16 17:53:27 -04:00
942ed3afeb update copyright headers to match LAMMPS' conventions 2020-09-16 17:35:58 -04:00
85d36ad6c4 Condense export of debug macro 2020-09-16 17:28:28 -04:00
55a054a44a bond/react: default charge update docs 2020-09-16 17:09:48 -04:00
6faf436850 bond/react: update all charges by default, even with edge atoms
custom charges has new keyword, now done with molecule fragments (not backwards compatible)
2020-09-16 17:02:49 -04:00
dfcdb61d87 Used existing helper functions to make codes more consise 2020-09-16 15:40:04 -05:00
e6703019bc Update examples to use Python API constants 2020-09-16 16:10:43 -04:00
c82df186b5 Disable zstd tests if library is too old 2020-09-16 15:18:28 -04:00
ccc743e13e Add test for thermo data 2020-09-16 15:14:05 -04:00
bd542efa52 include math_eigen.h, remove it from .gitignore 2020-09-16 14:12:14 -04:00
0931cdd109 relax epsilon for rigid body integrators 2020-09-16 14:07:28 -04:00
fd9e39bf1a update docs 2020-09-16 14:07:06 -04:00
10991ee638 separate the MathEigen implementation into its own header file 2020-09-16 14:06:58 -04:00
8ccd3c03fa Correct test name 2020-09-16 12:54:36 -04:00
2270d8f4ec Add PyLammps.atoms test and fix bug with -echo screen/both 2020-09-16 12:48:20 -04:00
9cdd35e625 Make sure Python tests run unbuffered so PyLammps works 2020-09-16 11:28:38 -04:00
f7a939dec2 update atom_style tester for new jacobi implementation 2020-09-16 10:25:03 -04:00
ca24806f4c Add tests 2020-09-16 10:11:00 -04:00
981d60f1bd update rigid tests for new eigensolver 2020-09-15 22:47:52 -04:00
48ad860889 only do Zstd tests if it is enabled/found. 2020-09-15 22:47:10 -04:00
f5998692d0 Merge branch 'master' into math_eigen 2020-09-15 21:37:05 -04:00
d611b85d7d Merge pull request #2360 from akohlmey/symbolic-atom-constants
Replace numeric with symbolic constants in Atom and AtomVec classes
2020-09-15 21:27:47 -04:00
38f0a2e24c Fix doc build errors 2020-09-15 19:50:28 -04:00
cf7d2109a3 Merge branch 'library-progguide' into symbolic-atom-constants 2020-09-15 19:50:18 -04:00
4b25eb1a34 small tweaks 2020-09-15 19:08:40 -04:00
88cee4ff09 the library interface is for calling from C, so switch nullptr in comments/docs back to NULL 2020-09-15 19:07:07 -04:00
a3765eb75b Merge branch 'master' into library-progguide 2020-09-15 18:58:29 -04:00
7611efeea2 Update python docs 2020-09-15 18:03:26 -04:00
0f6a34775c Merge branch 'master' into symbolic-atom-constants 2020-09-15 17:44:31 -04:00
cebf6d33ba Merge pull request #2358 from eagunn/iss2345
Replace instances of NULL with nullptr
2020-09-15 17:41:24 -04:00
ae68becf4a Fixed a bug in computing the langevin torques applied to rigid bodies 2020-09-15 15:27:24 -05:00
60712e3f90 Add docstrings 2020-09-15 16:22:43 -04:00
f481a403bc Merge pull request #2366 from akohlmey/msm-fix
Apply alternate bugfix to KSpace style MSM that avoids grid level overflow
2020-09-15 16:22:19 -04:00
556dc67fdc Correct filename of generated image 2020-09-15 15:20:38 -04:00
6cfad41be4 Add background_color argument to IPyLammps.image 2020-09-15 15:19:39 -04:00
e5e449795a Add tests for has_style and available_styles 2020-09-15 15:16:19 -04:00
618b08dcfc Merge branch 'master' into symbolic-atom-constants 2020-09-15 14:58:13 -04:00
3dd3c6a2a5 redo fix for class member shadowing while avoiding overflowing levels 2020-09-15 14:48:55 -04:00
16749566f8 Revert "fix issue with local variable shadowing a global variable"
This reverts commit 3368eb79d8.
2020-09-15 14:42:00 -04:00
2165f6ed38 Merge pull request #2363 from akohlmey/consistent-memory-usage
Make memory usage reporting consistent
2020-09-15 14:21:07 -04:00
baa49984c2 update comments 2020-09-15 14:19:40 -04:00
326d9f398c Merge branch 'master' into iss2345 2020-09-15 14:06:16 -04:00
5cbb54b844 Merge branch 'iss2345' of github.com:eagunn/lammps into iss2345 2020-09-15 14:04:16 -04:00
b5832191d8 Merge pull request #2364 from akohlmey/force-test-bugfix
Force style unit test template bugfix
2020-09-15 13:40:13 -04:00
5da50d64c9 reformulate 2020-09-15 12:32:43 -04:00
2f3c916a57 add unit test for lammps_memory_usage() 2020-09-15 12:29:03 -04:00
3576464268 Merge branch 'master' into consistent-memory-usage 2020-09-15 12:25:16 -04:00
9490370eb0 Use consistent naming in PyLAMMPS classes 2020-09-15 12:22:36 -04:00
2c30de65d2 Fix typos in docstring 2020-09-15 12:16:47 -04:00
165444004e Merge pull request #2362 from akohlmey/library-progguide
Updates to C-Library interface progammer guide and reference
2020-09-15 11:51:02 -04:00
db59abf1b9 fix bug in lammps_has_style() 2020-09-15 11:34:24 -04:00
4a48ce76b8 Merge remote-tracking branch 'origin/master' into python_interface_guide 2020-09-15 11:34:16 -04:00
c6bc21febf Merge pull request #2361 from akohlmey/collected-small-changes
Collected small changes for the next patch release
2020-09-15 11:28:25 -04:00
2f3c73217b detect if dt has been changed from default and print warning if reset by units command 2020-09-15 10:50:44 -04:00
b20b234ebe Merge remote-tracking branch 'origin/master' into python_interface_guide 2020-09-15 10:45:28 -04:00
e30864431f add test for missing quartic bond style 2020-09-15 10:12:18 -04:00
2794108837 don't update per-atom pair data if not available 2020-09-15 10:12:07 -04:00
238730b13d update epsilon 2020-09-15 09:55:58 -04:00
c6b6369d2d fix bug in input script templates that would have the timestep setting overwritten by a units command 2020-09-15 09:46:57 -04:00
bc31486fd1 start tests for lammps_extract_global() 2020-09-15 09:27:07 -04:00
bb76215ef0 add library interface to retrieve memory usage info 2020-09-15 01:59:58 -04:00
4b64be77e0 consolidate memory allocation information into a single function (in Info) 2020-09-15 01:59:58 -04:00
0183e999c9 consistently return "memory_usage" as double. 2020-09-15 01:59:58 -04:00
39681acfa4 add cross reference 2020-09-14 21:03:39 -04:00
d27d4912af test lammps_extract_settings() 2020-09-14 20:53:19 -04:00
1e54a9fcf1 complete tests for extracting and resetting the box 2020-09-14 20:27:29 -04:00
5c7f67201b make naming more consistent 2020-09-14 20:27:10 -04:00
93bd851ab0 fix typo 2020-09-14 17:39:31 -04:00
df9f0e244b add false positive 2020-09-14 17:18:14 -04:00
5634dd4394 correct formatting of examples 2020-09-14 17:15:53 -04:00
b1e0990c46 update lammps config settings calls example 2020-09-14 17:11:27 -04:00
f70717710e fix for zstd support. add styles to list at top and document .zst extension requirement 2020-09-14 17:07:09 -04:00
a1b2f82107 test for exceptions add example 2020-09-14 17:01:28 -04:00
4185608e92 complete testing for LAMMPS configuration queries 2020-09-14 14:56:56 -04:00
b455812434 more tests for properties and configuration 2020-09-14 14:25:17 -04:00
f5e9804557 cosmetic 2020-09-14 14:24:34 -04:00
6315b277c8 Revert commit 14dfd3876a which walked-back
the NULL->nullptr changes for lib/awpmd.

Then, hand-applied a minor cleanup to comments, ala Axel's changes to the
rest of the codebase.
2020-09-14 12:05:46 -06:00
430d151660 Revert commit 05d41cd50d which walked-back
the NULL->nullptr changes for lib/poems.

Then, hand-applied a minor cleanup to comments, ala Axel's changes to the
rest of the codebase.
2020-09-14 12:05:46 -06:00
58a17532bf fix up some comments 2020-09-14 12:05:45 -06:00
ec1fe4e445 update molfile plugin headers with latest versions from VMD 2020-09-14 12:05:45 -06:00
a57a5c76a5 T2345: After examining comments changed by batch conversion of NULL
to nullptr, I've corrected a small number where it seemed clear
that the previous NULL should have been either "NULL" (where the
code is looking for a string with that value),  or null char / null byte
(where the comment is talking about the char/byte that terminates
a c-style string).

Also changed 6 places where the batch change had changed 'NULL ptr'
to 'nullptr ptr'. Now they simply say 'nullptr'.
2020-09-14 12:05:45 -06:00
96f0e7e0d0 T2345: Walking back nullptr changes in #defines in STUBS/mpi.h 2020-09-14 12:05:45 -06:00
96b01f2383 T2345: Walking back nullptr changes to lib/awpmd 2020-09-14 12:05:45 -06:00
ed57554e18 T2345: Replace instances of NULL with nullptr
revert lib/poems to remove nullptr changes.
Walking back changes to lib as needed.
2020-09-14 12:05:44 -06:00
f524fa758d T2345: Replace instances of NULL with nullptr
Per guidance from Axel, revert lib/kokkos and lib/colvars
to remove nullptr changes.
2020-09-14 12:05:44 -06:00
9a5d8fd18b Manually resolve two rebase conflicts. 2020-09-14 12:04:51 -06:00
50b80e078d Merge pull request #2354 from stanmoore1/qeq_refactor
small fix qeq/reax refactoring for base and accelerated variants
2020-09-14 12:18:32 -04:00
ac040dc85f update prototype to allow constant strings 2020-09-14 12:17:49 -04:00
f4601235c9 add tests for lammps configuration introspection via library interface 2020-09-14 12:17:24 -04:00
155e7de859 fix bug in lammps_has_style() 2020-09-14 12:16:53 -04:00
a5740d75cf add missing option 2020-09-14 09:27:49 -04:00
3655919c7c tweak minimize summary output format 2020-09-14 09:09:22 -04:00
cc86214fe2 take back too eager change 2020-09-13 17:20:29 -04:00
2438f38afc skip test if atom style is missing 2020-09-13 17:12:21 -04:00
96a5585d65 use more const char pointers 2020-09-13 17:12:11 -04:00
a2fc33b419 update c-library tests 2020-09-13 17:02:32 -04:00
de49325c0f add properties example 2020-09-13 17:00:08 -04:00
fcb38354dc import adapted example input deck 2020-09-13 16:47:29 -04:00
39255da6ae use common main function that allows handling of common command line flags. 2020-09-13 16:46:59 -04:00
5a0623595b make char * argument of lammps_get_thermo() const 2020-09-13 16:46:13 -04:00
b702298e83 fix typo 2020-09-12 19:06:58 -04:00
da0cdb0de4 update formatting of keyword summary 2020-09-12 19:06:30 -04:00
eda04dac98 update conventions and guidelines about C++ standard and requirements 2020-09-12 15:13:23 -04:00
93a0d4c096 fix up some comments 2020-09-12 14:26:34 -04:00
bc850bcd97 update molfile plugin headers with latest versions from VMD 2020-09-12 14:04:23 -04:00
1597cd5dcb T2345: After examining comments changed by batch conversion of NULL
to nullptr, I've corrected a small number where it seemed clear
that the previous NULL should have been either "NULL" (where the
code is looking for a string with that value),  or null char / null byte
(where the comment is talking about the char/byte that terminates
a c-style string).

Also changed 6 places where the batch change had changed 'NULL ptr'
to 'nullptr ptr'. Now they simply say 'nullptr'.
2020-09-12 09:34:39 -06:00
9f0354f816 T2345: Walking back nullptr changes in #defines in STUBS/mpi.h 2020-09-12 09:34:39 -06:00
14dfd3876a T2345: Walking back nullptr changes to lib/awpmd 2020-09-12 09:34:39 -06:00
05d41cd50d T2345: Replace instances of NULL with nullptr
revert lib/poems to remove nullptr changes.
Walking back changes to lib as needed.
2020-09-12 09:34:39 -06:00
13be8085e5 T2345: Replace instances of NULL with nullptr
Per guidance from Axel, revert lib/kokkos and lib/colvars
to remove nullptr changes.
2020-09-12 09:34:39 -06:00
f1ef7d85a8 T2345: Replace instances of NULL with nullptr
The following changes have been applied to src and lib folders:
regex replace: ([^"_])NULL ⇒ \1nullptr (8968 chgs in src, 1153 in lib)
Manually find/change: (void \*) nullptr ⇒ nullptr (1 case)
regex find: ".*?nullptr.*?"
  Manually ~14 cases back to "NULL" in src, ~2 in lib
  regex finds a few false positive where nullptr appears between two
  strings in a function call
2020-09-12 09:34:38 -06:00
69962b4de5 add test for MSM kspace without periodic boundaries 2020-09-12 11:10:38 -04:00
3368eb79d8 fix issue with local variable shadowing a global variable 2020-09-12 11:10:12 -04:00
d7500c3e5a MSM output format tweaks 2020-09-12 11:09:33 -04:00
16d2fef5ad add check that shrinkwrap boundaries are not use when reading a data file while a MSM kspace style is defined 2020-09-12 11:06:20 -04:00
4a8d6016e4 Update docs 2020-09-11 22:49:44 -06:00
828ce84df5 add check for number of local atom indices overflowing neighbor lists for molecular systems 2020-09-11 22:09:09 -04:00
bc1b876a3d make fix widom errors and test output consistent with the fix name capitalization 2020-09-11 19:29:17 -04:00
47b3039b28 update unit tests, too 2020-09-11 19:24:32 -04:00
9d0c3bc665 replace some numeric constants in Atom and AtomVec classes with enumerators 2020-09-11 19:07:55 -04:00
612f1d7ce3 fix typo 2020-09-11 17:49:06 -04:00
7b869e8ee8 Start with more detailed description of PyLammps 2020-09-11 17:09:38 -04:00
77d475d121 Add more tests 2020-09-11 15:48:23 -04:00
58833ce11e Add API tests 2020-09-11 15:21:36 -04:00
cb253b2b1a Add HTML report option for Python 2020-09-11 14:03:13 -04:00
1855f92694 Use include and omit 2020-09-11 12:44:41 -04:00
377163d940 Add target to generate Python coverage XML 2020-09-11 11:36:22 -04:00
101d39142e Merge pull request #2357 from akohlmey/lib-get-mpi-comm
Add ability to retrieve the MPI communicator from LAMMPS instance via library/python interface
2020-09-11 11:20:12 -04:00
97000fa016 Merge remote-tracking branch 'origin/master' into python_interface_guide 2020-09-11 09:48:28 -04:00
ded57ba749 move test to avoid issues with indentation from having tabs follow directly a list-table 2020-09-10 16:16:58 -04:00
4452109b60 address spelling issue 2020-09-10 16:15:03 -04:00
0d5f68bc30 make "new in" and "changed in" leads boldface 2020-09-10 16:14:53 -04:00
3d37fd05f4 disable caching - for now - to avoid bad side effects from sphinx-tabs 2020-09-10 16:14:18 -04:00
e813e2d30a add minimal unit test for lammps_get_mpi_comm() API 2020-09-09 22:12:47 -04:00
bd72ef7996 add API to library/python interface to extract the MPI communicator 2020-09-09 22:03:11 -04:00
b99e005ca1 Update example output files 2020-09-09 18:26:34 -04:00
d43cb34c70 Support debugging flag for Colvars via CMake 2020-09-09 18:19:29 -04:00
85c394453c Update Colvars to version 2020-07-07
This update contains several fixes and small new features or usability
improvements.  Descriptions and authorship information can be accessed from
the pull requests listed below.

Skip the zero-step also when multiple run commands are executed in sequence (@giacomofiorin)
https://github.com/Colvars/colvars/pull/357

Do not accumulate data at step 0 (@giacomofiorin)
https://github.com/Colvars/colvars/pull/345

Support for symmetry permutations of atoms in RMSD (@jhenin)
https://github.com/Colvars/colvars/pull/344

Detect new grid parameters (@jhenin)
https://github.com/Colvars/colvars/pull/341

Only access the output streams in non-threaded regions (@giacomofiorin)
https://github.com/Colvars/colvars/pull/338

Fix incomplete setting of default colvarsRestartFrequency (@giacomofiorin)
https://github.com/Colvars/colvars/pull/334

Fix typo (@e-kwsm)
https://github.com/Colvars/colvars/pull/333

Convert the input keyword to lowercase in read_state_data_key (@HanatoK)
https://github.com/Colvars/colvars/pull/332

Implement reflecting b.c. for ext Lagrangian (@jhenin)
https://github.com/Colvars/colvars/pull/329
2020-09-09 18:19:21 -04:00
ed14793c69 moved eigensolver documentation into pg_dev_utils.rst 2020-09-09 14:59:00 -07:00
3bacf97468 Merge branch 'master' into math_eigen 2020-09-09 14:56:28 -07:00
2ab0878c9e remreduced compile time by removing unnecessary instantiations from math_eigen.cpp 2020-09-09 14:43:28 -07:00
cdd9d693ad Merge pull request #2349 from akohlmey/more-progguide-updates
More Programmer docs updates and related code refactoring
2020-09-09 14:34:41 -04:00
e238201be5 add a couple more versionadded directives 2020-09-09 13:21:19 -04:00
790b2693ba Merge pull request #2353 from junghans/cmake_clean_up
cmake: consistent usage of find variable
2020-09-09 11:04:13 -04:00
a51bebc9e4 Merge pull request #2340 from rbberger/container_update
Singularity Container definitions update
2020-09-09 09:53:48 -04:00
f4c4c62349 adjust test to updated API 2020-09-09 09:27:34 -04:00
03d43bda3c make "New in" and "Changed in" statements boldface to stand out more 2020-09-09 09:25:58 -04:00
2b854ec64f reformulate 2020-09-09 09:25:34 -04:00
a1cf6c087c no need to use a deprecated argument in a newly added API 2020-09-09 09:06:28 -04:00
2a42fe66ad discuss change to get LAMMPS handle as return value instead of argument 2020-09-09 09:06:00 -04:00
56b1300fd3 reverted the default behavior of "jacobi3()". By default it now sorts the eigenvalues again. 2020-09-08 21:58:54 -07:00
dad749b62b make vget()/vgot() inline functions again for optimal performance. 2020-09-08 20:52:51 -04:00
6ade5dd740 changed the default sorting options in "jacobi3()" to be more similar to the original "jacobi()" function from "math_extra.h". This should not have any effect on LAMMPS behavior 2020-09-08 17:05:08 -07:00
c818a00523 remove unwanted docs 2020-09-08 16:53:26 -04:00
ea0a9f00e8 swap order of classes in toctree 2020-09-08 16:45:16 -04:00
ca1b5ed936 fix minor issues 2020-09-08 16:43:10 -04:00
daf8a2313a split developer guide into multiple files 2020-09-08 16:38:06 -04:00
ee25ed3897 update/correct documentation for memory pool classes 2020-09-08 16:36:48 -04:00
9f4a991fc5 move over doxygen comments for a few LAMMPS classes 2020-09-08 16:36:29 -04:00
1273179d03 Fix compile error 2020-09-08 13:42:25 -06:00
9e47452382 recover compilation for platforms using malloc() instead of posix_memalign() 2020-09-08 15:36:21 -04:00
7a9d31328e remove obsolete comment 2020-09-08 15:29:42 -04:00
4f8e627479 QEq refactor 2020-09-08 13:16:45 -06:00
9f7e309f07 small updates to MyPage and convert MyPoolChunk similar to MyPage 2020-09-08 15:13:16 -04:00
a3cc7581b1 rename test for memory pools 2020-09-08 15:12:08 -04:00
f72e5b6d13 Typo 2020-09-08 12:52:32 -06:00
b008ba5ecb Merge remote-tracking branch 'origin/master' into cmake_clean_up 2020-09-08 12:51:49 -06:00
9f8b8529b1 Merge pull request #2348 from akohlmey/use-tabs-with-html
Enable sphinx-tabs extension with the html version of the documentation
2020-09-08 12:02:43 -04:00
22fac9affc more doc update 2020-09-08 09:49:07 -06:00
8fb13f4fd1 cmake: make doc more consistent 2020-09-08 09:43:21 -06:00
5df3deb8e6 update/refactor a few more build documentation files for using tabs 2020-09-08 11:40:21 -04:00
09b8b117fc cmake: consistent usage of find variable 2020-09-08 09:35:45 -06:00
88cc673f78 more use of tabs in Build_extras.rst 2020-09-08 10:11:37 -04:00
dd20776915 fix spelling issues 2020-09-07 21:17:56 -04:00
9b01d5bf95 revise and add tabs to some sections 2020-09-07 21:08:47 -04:00
9afba50d01 update for zstd support 2020-09-07 21:00:45 -04:00
f02db43f63 add discussion and minimal code example for MyPage class. 2020-09-07 16:10:48 -04:00
0ee7c5f434 add more MyPage test variants 2020-09-07 15:27:13 -04:00
ab5c81f7d6 refactor some more to reduce redundant code. 2020-09-07 08:57:37 -04:00
bbb81a8dd0 add unit tester for MyPage class 2020-09-07 08:33:05 -04:00
3089205a54 tweak MyPage docs 2020-09-07 08:32:34 -04:00
0447616aaf address spelling issues 2020-09-07 08:03:41 -04:00
f8ebcc90fb define OneCoeff struct in my_page.h as HyperOneCoeff to resolve compilation issues 2020-09-07 07:57:23 -04:00
f329d56495 updated pg_developer.rst 2020-09-06 20:12:38 -07:00
a57a1404f3 bug fix fix unit tests, improve doc readability, and to prevent accidentally allocating memory on the heap. (Note: All of these changes are related to "jacobi3()". That function instantiates Jacobi without allocating memory on the heap, and this created some headaches. The original code at https://github/jewettaij/jacobi_pd does not have this feature, and the unit tests there do not test for these kinds of errors. Hopefully this commit fixes everything.) 2020-09-06 20:05:47 -07:00
2270d86519 whitespace cleanup and try to recover legacy build 2020-09-06 22:51:58 -04:00
4ca36d9526 add doxygen docs and convert MyPage template class from header only to header plus implementation 2020-09-06 22:26:17 -04:00
485a169ef2 move merge sort to utils namespace 2020-09-06 17:38:53 -04:00
19ce59ba38 use tabs for CMake vs. GNU make in LAMMPS library linking page 2020-09-06 16:50:28 -04:00
d77f08d5fb tweak formatting to look better in the PDF file 2020-09-06 16:49:58 -04:00
fabf762fa8 reverting to previous version of util.h and util.cpp 2020-09-06 11:09:36 -07:00
eb6f7f9740 Merge branch 'master' into math_eigen 2020-09-06 10:59:20 -07:00
d97e8d8cbf fixed linker problems in "utils.h" and "utils.cpp" 2020-09-06 10:12:07 -07:00
b29522273a changed the "trim_and_count_words()" function declaration in "utils.h" to make sphinx happy. Fixed some new spelling mistakes. 2020-09-06 09:40:28 -07:00
9f24f056ff reformat system sizes information and make explanations more concise 2020-09-06 07:12:43 -04:00
77e22c90ac complete using tab/tabs directives in Build_settings 2020-09-06 06:11:12 -04:00
5536c1e6ee make more compact 2020-09-06 06:10:39 -04:00
2ee2009356 removed assert() statements from "superpose3d.h" 2020-09-06 02:30:20 -07:00
c16321e9d3 purged greek characters from "pd_developer.rst"
I replaced the 'Σ' character that was causing problems with PDF generation with the word "sum".  Hopefully PDF documentation generation works now.
2020-09-05 21:44:32 -07:00
77789f9ed8 small tweaks 2020-09-06 00:07:53 -04:00
7b6d07a812 load sphinx extension for content in tabs with html and for transforming them to admonitions for non-html builders 2020-09-05 23:54:10 -04:00
4ad6d99ca0 updated documentation files: "pg_developer.rst", "math_eigen.h", and "false_positives.txt" 2020-09-05 20:08:45 -07:00
7cb774e6bc some corrections before rewriting the doxygen comments to comply with LAMMPS doxygen style. 2020-09-05 16:37:15 -07:00
4b66414bdf fixed a type error in math_eigen.h 2020-09-05 10:38:14 -07:00
58fa72ddc5 replaced all numerical recipes jacobi() code with code from "math_eigen.h". moved "math_eigen.h" into the main "src" directory. 2020-09-05 10:19:19 -07:00
57f82abae3 updated all code in LAMMPS to use the open-source "math_eigen.h" instead of "math_extra.h". Code in "lib" now uses its own abbreviated local version of the "math_eigen.h" file (which is named "jacobi_pd.h"), since it is not clear how code from "lib/" can access the code in "src/" 2020-09-05 01:39:27 -07:00
d995ed0d87 Merge pull request #2344 from akohlmey/use-improved-sphinx-fortran
Use modernized version of sphinx-fortran
2020-09-04 18:46:34 -04:00
75a119d534 divert installation of sphinx-fortran to github branch with parallel read capable version 2020-09-04 17:40:26 -04:00
64728678f1 Merge branch 'python_interface_guide' of github.com:rbberger/lammps into python_interface_guide 2020-09-04 17:15:58 -04:00
96db122377 Add Python coverage collection if enabled 2020-09-04 17:15:51 -04:00
176f7c064d Merge branch 'master' into python_interface_guide 2020-09-04 15:51:56 -04:00
e6592d2324 Merge pull request #2336 from akohlmey/collected-small-changes
Collected small changes for the next patch release
2020-09-04 15:22:31 -04:00
6a40eba2ae Add Ubuntu 20.04 Intel OpenCL container 2020-09-04 15:03:53 -04:00
da0e60c173 Apply changes to remaining containers 2020-09-04 14:43:03 -04:00
f6abdf97c4 Remove -j in distribution container files 2020-09-04 14:28:03 -04:00
41a1c96e06 Update other GPU containers 2020-09-04 14:19:41 -04:00
3bdfbdcf09 Update Ubuntu 18.04 GPU container and add Ubuntu 20.04 2020-09-04 14:06:38 -04:00
ceed9284c1 Merge branch 'master' into collected-small-changes 2020-09-04 13:32:47 -04:00
de777ce994 Merge pull request #2341 from akohlmey/doc-updates
Revised links and related descriptions in the manual
2020-09-04 13:29:58 -04:00
41a3e7c712 update a few links in the programmer guide 2020-09-04 11:59:04 -04:00
60d25c2eea Update Ubuntu 20.04 container 2020-09-04 11:54:08 -04:00
5c22d1197e Merge branch 'master' into doc-updates 2020-09-04 11:50:28 -04:00
d0d3cee28d a few more cosmetic changes 2020-09-04 11:50:02 -04:00
598819229b Fix missing OpenKIM models for testing due to KIM-API packaging 2020-09-04 11:47:38 -04:00
64d3be27a6 Add zstd to containers 2020-09-04 11:46:40 -04:00
90c13b1b14 update build files for plumed 2.6.1 release 2020-09-04 11:44:39 -04:00
7ea4177626 Set Plumed version to 2.6.1 2020-09-04 11:41:44 -04:00
2b1e4749dd first chunk of revised updates to the manual addressing link issues. 2020-09-04 11:39:38 -04:00
c8327e66b3 Merge pull request #2338 from akohlmey/include-cleanup
Update list of included headers for latest updates of the convention
2020-09-04 10:14:12 -04:00
f19ce32bf5 a few more small tweaks 2020-09-04 09:42:11 -04:00
255bf2f8fd update iwyu custom mapping file 2020-09-04 09:41:57 -04:00
f541647d44 some more IWYU tweaks 2020-09-04 09:23:20 -04:00
d6ba95bed6 minor tweaks 2020-09-04 08:05:59 -04:00
2d802411e9 remove pointless stringstream abuse 2020-09-04 08:03:53 -04:00
91a87b745f final second round IWYU cleanup 2020-09-04 08:01:11 -04:00
63e5ca53ef add iwyu mappings for gtest and gmock 2020-09-04 08:00:38 -04:00
bb7447363c more include cleanup and IWYU tweaks 2020-09-04 07:22:39 -04:00
7f6fc8a003 updated math_eigen.h and moved it into the main "src" directory 2020-09-04 04:10:47 -07:00
fc3d9fee5e more USER-OMP updates 2020-09-04 01:32:52 -04:00
d0691d0a5d add mapping for Eigen3 includes 2020-09-04 01:32:15 -04:00
2e0af2fdce some more second pass cleanup 2020-09-04 00:46:23 -04:00
508b49c976 add missing comma 2020-09-04 00:45:41 -04:00
87dfdb8723 add comments/warnings to docs of fix property/atom and fix store/state about restarting 2020-09-04 00:14:01 -04:00
cb618e19d1 small tweak to address formal issues 2020-09-03 18:30:35 -04:00
18cea11100 Merge pull request #66 from junghans/include-cleanup
cmake: use static iwyu-extra-map.imp
2020-09-03 18:27:00 -04:00
5a7189e95f update note for write_data command on missing coefficient data. 2020-09-03 18:24:12 -04:00
ce78be864a move date2num() convernience function from Universe class to utils namespace 2020-09-03 17:47:45 -04:00
390c6ba106 rechecking some corefiles with IWYU after the many updates 2020-09-03 15:28:07 -04:00
93d0358ebc cmake: use static iwyu-extra-map.imp 2020-09-03 11:36:02 -06:00
05c7cfe59f more include updates for USER-OMP 2020-09-03 11:16:32 -04:00
f67bd8eb5d more KOKKOS, USER-OMP, and USER-INTEL include file cleanup 2020-09-03 10:54:06 -04:00
27203304d6 USER-INTEL include handling cleanup 2020-09-03 09:47:48 -04:00
88ddfa4eb0 more IWYU cleanup in packages 2020-09-03 05:20:02 -04:00
55704368d0 include updates for commonly used packages 2020-09-03 01:45:05 -04:00
c7c4297cfc update include handling for commands 2020-09-03 00:51:58 -04:00
c2cf19bdd4 fixes for file readers 2020-09-03 00:32:57 -04:00
baa79bd1c4 add another iwyu-mapping entry 2020-09-03 00:22:28 -04:00
9925122cea more IWYU updates 2020-09-03 00:22:09 -04:00
a4a1f7e848 more IWYU cleanup 2020-09-02 23:49:17 -04:00
047c14d17c tweak iwyu target. generate file with custom mappings 2020-09-02 23:41:16 -04:00
45f80f4f06 more include file updates found by iwyu 2020-09-02 22:52:22 -04:00
7b8fe97a88 remove trailing whitespace 2020-09-02 22:51:42 -04:00
71d111ccd9 get rid of 'using namespace std;' 2020-09-02 22:51:30 -04:00
203e42073a fix compilation error 2020-09-02 22:51:14 -04:00
f88f4cd60e more include file updates 2020-09-02 21:44:04 -04:00
4ba6a4f958 have clang-style output for easier parsing in compilation mode in emacs 2020-09-02 21:43:20 -04:00
79584c842d add false positive 2020-09-02 18:44:12 -04:00
b741a07a34 document IWYU analysis custom build target 2020-09-02 18:43:03 -04:00
5e429b8212 update include conventions and refer to the new CMake build target 2020-09-02 18:42:41 -04:00
4a10111ced add iwyu target to CMake configuration 2020-09-02 18:42:19 -04:00
d5027c125c rename fmt() macro to logfmt() to avoid clashes with fmtlib 2020-09-02 17:58:22 -04:00
1421817276 remove redundant includes 2020-09-02 17:54:29 -04:00
6113169a47 IWYU based include statement cleanup 2020-09-02 17:39:34 -04:00
a38873f3f6 Add venv example to pg_python.rst 2020-09-02 17:34:14 -04:00
2cd0e9edc4 Merge pull request #2335 from rbberger/doc_updates
Update documentation pages headings and update style check tool to detect missing index entries.
2020-09-02 15:46:10 -04:00
a72ebb2ab2 update link and formatting of install via git page in manual. 2020-09-02 15:41:17 -04:00
862bc99772 add links to references of the two parts of the manual 2020-09-02 15:28:27 -04:00
8def5844c8 Skip old styles in check-styles 2020-09-02 14:06:35 -04:00
ac7129b3a9 Revert "Add missing index entries"
These are intentionally left out from docs
2020-09-02 14:02:53 -04:00
0f9c46235c Add missing index entries 2020-09-02 13:56:17 -04:00
515746063f Fix copy&paste error 2020-09-02 13:55:27 -04:00
e519919cae Fix typo 2020-09-02 13:48:11 -04:00
28c90a6dea Update index for kspace_style commands 2020-09-02 13:40:24 -04:00
12aa689e97 fix typo in cfg/zstd tester tool 2020-09-02 13:38:18 -04:00
c812bf7a91 Update headers in improper_*.rst files 2020-09-02 13:03:03 -04:00
a0c9c213fd Update headers in dihedral_*.rst files 2020-09-02 12:57:44 -04:00
d01c985feb Update headers in compute_*.rst files 2020-09-02 12:56:24 -04:00
f4d2523ce0 Update headers in bond_*.rst files 2020-09-02 12:55:18 -04:00
4e27c47f96 Undo lost headers 2020-09-02 12:54:08 -04:00
88e09fe648 Update headers in angle_*.rst files 2020-09-02 12:43:48 -04:00
286d3866e3 Add style index check in check-styles.py 2020-09-02 12:42:18 -04:00
549bdd080c Add kspace_style to fixup_headers.py 2020-09-02 12:37:48 -04:00
84e922eff6 Add other styles to fixup_header.py 2020-09-02 11:55:53 -04:00
8468f4ab2e fix missing comparison and thus reduce memory use in serial case 2020-09-02 11:12:15 -04:00
a4380a548d make more readable 2020-09-02 11:11:48 -04:00
0c88074525 Apply header fix to all remaining fix styles docs 2020-09-02 11:05:33 -04:00
98808fb5ff Skip doc files that don't have common file structure 2020-09-02 11:04:08 -04:00
8d1a117b75 Apply header fix to all remaining pair styles docs 2020-09-02 10:59:01 -04:00
09bc686f71 Avoid extra newline 2020-09-02 10:55:04 -04:00
cc594c0613 include fmt/format.h into pointers.h 2020-09-02 10:52:10 -04:00
e5e2abe446 update include file policy file and policy for pointers.h special case 2020-09-02 10:51:55 -04:00
e479033109 Avoid breaking already fixed headers 2020-09-02 10:51:47 -04:00
3c60a9e08e Update fix_nh.rst 2020-09-02 10:31:21 -04:00
49a6bf5e30 Update pair_class2.rst 2020-09-02 10:30:31 -04:00
3a22f26e87 Update pair_cs.rst 2020-09-02 10:29:46 -04:00
4d6be195ec Add utility to fixup doc headers 2020-09-02 10:29:29 -04:00
e5f1f58aab Update pair_born.rst 2020-09-02 10:26:37 -04:00
a6a49d80b2 Update pair_sdk.rst 2020-09-02 10:19:20 -04:00
7ae98ffae1 Update fix_rigid.rst 2020-09-02 09:50:16 -04:00
dce7a39021 Update pair_buck.rst 2020-09-02 09:47:32 -04:00
77f803b366 Update pair_charmm.rst 2020-09-02 09:14:20 -04:00
a9cf25db4c Update pair_eam.rst 2020-09-02 09:13:59 -04:00
7e733913d7 Update pair_fep_soft.rst 2020-09-02 09:03:00 -04:00
45100528ad Update pair_coul.rst 2020-09-02 08:54:53 -04:00
c50a82af78 apply consistent naming scheme for tester source files and executables 2020-09-01 20:16:39 -04:00
2ffb5ddd5a add kspace dependency to coul/streitz/long test 2020-09-01 17:34:08 -04:00
80519cd109 Merge pull request #2331 from rbberger/zstd_support
Update COMPRESS package
2020-09-01 15:01:04 -04:00
e7dcb79ac5 Merge pull request #1472 from tomswinburne/master
Add fix pafi
2020-09-01 14:36:46 -04:00
35cb41147a update date 2020-09-01 14:16:06 -04:00
60b98f6b91 Require libzstd>=1.4 for Zstd dump styles 2020-09-01 13:52:56 -04:00
45c9478f5a Merge pull request #2333 from akohlmey/iss1109
Fix memory leaks and out-of-range memory access in USER-BOCS package
2020-09-01 13:37:56 -04:00
31bd76efa5 Merge remote-tracking branch 'origin/master' into zstd_support 2020-09-01 12:58:41 -04:00
40ea03234f Update force->inumeric to utils::inumeric 2020-09-01 12:58:27 -04:00
9d3e3526a0 Add false positives and fix spelling in docs 2020-09-01 12:30:35 -04:00
f899a0f484 Reorder init to supress warnings 2020-09-01 12:25:38 -04:00
a2b5c379f2 Update docs for COMPRESS styles 2020-09-01 12:17:08 -04:00
3db1a6d690 Use PkgConfig to find Zstd 2020-09-01 11:14:36 -04:00
ae3a7d8901 minor changes to example 2020-09-01 17:02:24 +02:00
8e0c4d764e Change include for fmt 2020-09-01 10:58:13 -04:00
75b3bbd657 modernize 2020-09-01 10:09:34 -04:00
95aab99c2a remove redundant entries 2020-09-01 09:57:44 -04:00
2802db4493 correct application of the BEGIN_CAPTURE macro 2020-09-01 09:41:26 -04:00
3b765956d2 Manually resolve merge conflict
Merge branch 'iss1109' of https://github.com/eagunn/lammps into iss1109
2020-09-01 06:31:35 -06:00
4f03acc560 Fix merge conflicts caused by code's do-si-do around Axel's additions
to the utils namespace.
2020-09-01 06:30:12 -06:00
2536f28e1a Per comments from Axel, continued the evolution of the output messages.
- Converted Compute message with imputed value to fmt::format style.
- Condensed most error-> output messages to oneliners where fmt::format
is called within the call to the error method. For a couple, the
formatting string/value list were complex enough that I continued using
a temporary string variable to make the code easier to read.
2020-09-01 05:49:29 -06:00
52748f57da Delete extraneous, unused file/folder that should never have gotten
into the repo.
2020-09-01 05:49:29 -06:00
9ef725ea52 Move destruction of splines data structure to FixBocs destructor
from ComputePressure destructor.
2020-09-01 05:49:29 -06:00
e11a3c4799 Remove "test" example files. 2020-09-01 05:49:29 -06:00
4dca927693 Switch dynamically created arrays/matrices to use memory->create and
->destroy, LAMMPS-standard for dynamic memory management.
2020-09-01 05:49:29 -06:00
fe89edc828 Remove c_str() calls from message strings. Message class now accepts
actual strings.
2020-09-01 05:49:29 -06:00
0aa66319fe Change the build_xxx_splines methods to accept a const reference parameter
to the data vector rather than a vector parameter. Vectors are, as all
types are, passed by value in C++. Using a vector directly as a parameter
causes the data to be copied. Using a reference to the vector neatly
avoids that problem.

Also tucked fmt/format.h into its rightful place in the include list
since Axel says there's no absolute rule about it being an exception.
2020-09-01 05:49:29 -06:00
076c834734 Manually reconciled conflict from:
Corrected two issues in code identified by valgrind:
1) memory leaks (the subject of the original #1109) and
2) an invalid memory access (reading from beyond the end of an array).

Also:
- replaced several dynamically-allocated (calloc and free) local arrays with std::vector.
- reorganized include statements per new conventions, and
- updated messages to use strings and fmt.

Added folders and files used in manual testing and verification to examples folder.

No changes in analysis results are expected or intended. This is pure refactoring except for a bit of error message cleanup.
2020-09-01 05:48:49 -06:00
aa12f4f78a Per request from Axel, Revert revert one commit too far:
"Per suggestion from Axel, reformat code to what I believe to be"

This reverts commit b72c1c0eda.
2020-09-01 05:10:44 -06:00
fbffcf3321 spelling 2020-09-01 11:34:11 +02:00
c18eccad39 force -> utils:: 2020-09-01 11:25:25 +02:00
2f182b4606 force-> -> utils:: 2020-09-01 11:24:06 +02:00
c6de769696 Merge branch 'master' of github.com:tomswinburne/lammps 2020-09-01 11:12:29 +02:00
ac080228dc whitespace style fix 2020-09-01 11:12:05 +02:00
0541996919 Merge branch 'master' into master 2020-09-01 10:59:03 +02:00
d601acd0ca merge 2020-09-01 10:57:43 +02:00
2eb6a8a8a4 update python interface 2020-09-01 10:55:45 +02:00
db9de111be updated python interface 2020-09-01 10:54:18 +02:00
fe833e6c87 Add missing #ifdef 2020-08-31 19:49:17 -04:00
0925fc822d Make Zstd support optional 2020-08-31 18:21:58 -04:00
3865de8705 Add lost line 2020-08-31 16:43:06 -04:00
2effd2f707 Merge remote-tracking branch 'origin/master' into zstd_support 2020-08-31 15:38:56 -04:00
c5a2e50bf5 Add Zstd variants of dump local and xyz 2020-08-31 15:38:20 -04:00
a0f82a4b18 Add compression_level parameter to dump xyz/gz and local/gz 2020-08-31 15:00:57 -04:00
443a817152 Add tests for dump local/gz and xyz/gz 2020-08-31 14:54:10 -04:00
24f5807623 Merge pull request #2319 from akohlmey/move-convenience-functions
Move some more convenience functions to utils namespace
2020-08-31 14:29:42 -04:00
99b83333c9 Add dump cfg/zstd 2020-08-31 14:20:52 -04:00
a922355e19 Add compression_level parameter to dump cfg/gz 2020-08-31 14:20:36 -04:00
54ed23448b instantiate bounds() also with long long to make windows happy. 2020-08-31 14:14:51 -04:00
5faca3aef0 Add tests for dump cfg/gz 2020-08-31 13:36:42 -04:00
675cf20e93 Merge remote-tracking branch 'github/master' into move-convenience-functions 2020-08-31 12:58:21 -04:00
22ccde1d13 modernize utils::bounds() implementation and remove duplicate definition. 2020-08-31 12:58:00 -04:00
9a4ec23c7f Merge pull request #2327 from akohlmey/remove-doxygen-tool
Remove doxygen tool folder and references to it in the manual
2020-08-31 12:49:24 -04:00
7fca3b7a65 revert accidental change 2020-08-31 12:46:22 -04:00
1ff34d4b13 avoid doxygen lookup ambiguity 2020-08-31 12:46:05 -04:00
67a5db03c7 Merge pull request #2326 from ndtrung81/gpu-update-makefiles
update makefiles in lib/gpu for more recent architectures
2020-08-31 12:30:28 -04:00
0c7b9a7c63 update utils tester for API change in bound()/boundsbig() 2020-08-31 11:43:25 -04:00
dd03c7232a Merge remote-tracking branch 'github/master' into move-convenience-functions 2020-08-31 11:41:18 -04:00
a4d3b21a43 Merge pull request #2322 from Vsevak/cmake_cuda
Fix CMake building for CUDA 11
2020-08-31 11:33:52 -04:00
cf11945e21 get rid of utils::boundsbig() by making it a template function with two specializations 2020-08-31 11:25:43 -04:00
8034a83ee8 Merge pull request #2325 from akohlmey/fortran-interface
New Fortran interface to LAMMPS
2020-08-31 10:27:10 -04:00
3c71d300e5 Merge pull request #2320 from akohlmey/programmer-guide
Add programmer guide part 2
2020-08-31 10:06:04 -04:00
b72c1c0eda Per suggestion from Axel, reformat code to what I believe to be
LAMMPS standards. I used the .clang-format file from the unit-test
folder but changed all spacing settings to 2 from 4.
2020-08-31 06:31:48 -06:00
0c067700e6 Per comments from Axel, continued the evolution of the output messages.
- Converted Compute message with imputed value to fmt::format style.
- Condensed most error-> output messages to oneliners where fmt::format
is called within the call to the error method. For a couple, the
formatting string/value list were complex enough that I continued using
a temporary string variable to make the code easier to read.
2020-08-31 06:31:48 -06:00
f0b304efcb Delete extraneous, unused file/folder that should never have gotten
into the repo.
2020-08-31 06:31:48 -06:00
69b42ea9ae Move destruction of splines data structure to FixBocs destructor
from ComputePressure destructor.
2020-08-31 06:31:48 -06:00
a4790fdf00 Remove "test" example files. 2020-08-31 06:31:47 -06:00
c75c3451f6 Switch dynamically created arrays/matrices to use memory->create and
->destroy, LAMMPS-standard for dynamic memory management.
2020-08-31 06:31:47 -06:00
e8306a2535 Remove c_str() calls from message strings. Message class now accepts
actual strings.
2020-08-31 06:31:47 -06:00
3760ccd672 Change the build_xxx_splines methods to accept a const reference parameter
to the data vector rather than a vector parameter. Vectors are, as all
types are, passed by value in C++. Using a vector directly as a parameter
causes the data to be copied. Using a reference to the vector neatly
avoids that problem.

Also tucked fmt/format.h into its rightful place in the include list
since Axel says there's no absolute rule about it being an exception.
2020-08-31 06:31:47 -06:00
b241294e84 Corrected two issues in code identified by valgrind:
1) memory leaks (the subject of the original #1109) and
2) an invalid memory access (reading from beyond the end of an array).

Also:
- replaced several dynamically-allocated (calloc and free) local arrays with std::vector.
- reorganized include statements per new conventions, and
- updated messages to use strings and fmt.

Added folders and files used in manual testing and verification to examples folder.

No changes in analysis results are expected or intended. This is pure refactoring except for a bit of error message cleanup.
2020-08-31 06:31:47 -06:00
c7360fb808 include example use of PotentialFileReader class 2020-08-31 07:45:52 -04:00
c84033677c add documentation for potential file reader 2020-08-31 07:31:28 -04:00
33f2cbc713 add docs for TextFileReader class to developer guide 2020-08-31 06:57:16 -04:00
39a9974f3d add ValueTokenizer example and use captions with code-blocks 2020-08-30 23:57:02 -04:00
569b6f95a3 no need to use ValueTokenizer. Make code more compact. 2020-08-30 23:32:17 -04:00
e8e57b0628 remove doxygen tool folder and references to it in the input as it is no longer compatible and needed 2020-08-30 19:59:52 -04:00
ecb1f266b5 More updates 2020-08-30 15:10:29 -05:00
7a5f193c02 Updated several Makefile's in lib/gpu for newer compute capabilities 2020-08-30 15:06:44 -05:00
4484699ab6 fix spelling 2020-08-30 15:52:42 -04:00
65d2ee7464 add work-in-progress marker to fortran library wrapper 2020-08-30 15:23:02 -04:00
199cfeba78 more tweaks. doxygen translation has no more warnings now. 2020-08-30 14:32:53 -04:00
cd0cdf0b74 silence compiler warning 2020-08-30 14:28:29 -04:00
f3ed1dea4d minor tweaks 2020-08-30 14:28:19 -04:00
8d45b724a6 fix bug in conventional build makefile preventing the correct Install.py in the lib folder to be run 2020-08-30 14:12:53 -04:00
4b0999e167 complete documentation of tokenizer classes 2020-08-30 14:12:21 -04:00
5623009962 arch 3.0 is dropped in CUDA 11 2020-08-30 13:12:42 +03:00
96ee132e85 start documenting tokenizer classes 2020-08-30 01:50:37 -04:00
8d2c16ad66 remove trailing whitespace 2020-08-30 00:31:04 -04:00
f123246189 minor doc updates 2020-08-30 00:25:01 -04:00
ceeaf1e988 update and correct documentation for utils functions 2020-08-29 23:51:46 -04:00
9c404e02fd update include file conventions 2020-08-29 22:56:37 -04:00
83a9e5e724 handle spelling issues with new doc text 2020-08-29 22:55:05 -04:00
e51a5ad8f4 import doxygen docs for new utils functions 2020-08-29 22:46:25 -04:00
4396dbd9a3 move Force::open_potential() to utils::open_potential() 2020-08-29 22:37:14 -04:00
798226967f Merge branch 'move-convenience-functions' of github.com:akohlmey/lammps into move-convenience-functions 2020-08-29 22:22:45 -04:00
6b7f4c500f document changes to LAMMPS_POTENTIALS environment variable 2020-08-29 22:22:27 -04:00
5a22f4d7f2 support that LAMMPS_POTENTIALS is a real path variable with multiple entries, not just a single folder 2020-08-29 22:22:03 -04:00
b06ba74d18 support that LAMMPS_POTENTIALS is a real path variable with multiple entries, not just a single folder 2020-08-29 22:09:07 -04:00
05ff352021 add utils::open_potential() function to utils namespace 2020-08-29 22:08:16 -04:00
7413dc783e add tokenizer tests for splitting path environment variables 2020-08-29 22:07:22 -04:00
8601e608ca add unit tests for utils::bounds() and utils::boundsbig() 2020-08-29 22:00:07 -04:00
96d8d12a88 replace calls to force->*numeric() with the corresponding utils::*numeric()
this also removes the now obsolete functions from Force
2020-08-29 20:31:02 -04:00
27b4e93bf5 silence compiler warnings 2020-08-29 18:32:21 -04:00
741a1d1fc9 move Input::expand_args() to utils::expand_args() 2020-08-29 18:32:10 -04:00
fcd0b9f78f move Force::bounds() and Force::boundsbig() to utils. 2020-08-29 18:23:03 -04:00
60dfb6f77f still need to disable variable tracking to silence unwanted warnings on ubuntu 2020-08-28 22:03:27 -04:00
31c91a8928 fix typo 2020-08-28 21:22:06 -04:00
cec18b6aef add docs for the new fortran interface 2020-08-28 20:57:19 -04:00
e44707d5e1 add unittest support for the fortran interface to LAMMPS 2020-08-28 20:56:52 -04:00
3e92647abb add new "official" fortran interface to LAMMPS in new folder "fortran" 2020-08-28 20:56:15 -04:00
2e1b4498bd update false positives 2020-08-28 20:30:00 -04:00
7b6924329f make doxygen docs and code consistent 2020-08-28 20:25:38 -04:00
cb1a2601e1 add more existing programmer guide docs 2020-08-28 20:25:09 -04:00
3be064748d Merge pull request #2318 from akohlmey/programmer-guide
Programmer guide part 1
2020-08-28 20:14:32 -04:00
02ea7af1f7 let dummy tests pass 2020-08-28 18:49:39 -04:00
52f7f3629d Merge branch 'master' into programmer-guide 2020-08-28 18:49:15 -04:00
876c53a275 Merge pull request #2310 from lammps/library-refactor
LAMMPS C library interface and python module refactor
2020-08-28 18:40:16 -04:00
2a365c17e0 update utils namespace documentation including doxygen parts 2020-08-28 18:21:18 -04:00
cb09844182 Add placeholders for future tests 2020-08-28 17:52:15 -04:00
e64a977ae9 include documentation of utility functions in utils:: to developer guide 2020-08-28 17:14:49 -04:00
a1bf772df2 move modifying and extending LAMMPS section to programmer guide 2020-08-28 17:14:29 -04:00
8fcd72405a port over more of the framework of the programmer guide and remove programming details from user guide 2020-08-28 16:32:23 -04:00
2e2763d0f1 update .gitignore for recent additions 2020-08-28 15:34:53 -04:00
17ec3a4fe8 Fix typo 2020-08-28 15:15:01 -04:00
9412d6f6fc Add missing argtypes declarations in lammps.py 2020-08-28 15:12:36 -04:00
ded657120d Merge pull request #2312 from akohlmey/developer-guide
Integrate text from developer.tex file to the manual
2020-08-28 15:01:27 -04:00
6bcc263b41 Ensure LAMMPS pointer is of type c_void_p
Fixes segfaults caused by API change. The API change in
lammps_open and lammps_open_no_mpi makes them return the LAMMPS pointer
via their return value. However due to how ctypes operates, even
if restype is specified to be c_void_p, the function returns an integer.

Without the proper type of the pointer, calling functions without arglists would default
to using 32bit integers to pass an argument, which cuts away parts of the 64bit pointer.
Subsequently, resolving the truncated pointer in the library causes segfaults.

This commit fixes the root cause. But it also highlights the need of specifying
the arglists of all library functions.
2020-08-28 14:21:03 -04:00
caeb0af0d1 Add missing argtypes for lammps_extract_global 2020-08-28 13:54:06 -04:00
167f12a4a4 Add python test for extract_compute of peratom vector 2020-08-28 13:53:36 -04:00
e8cfa185ac update src/.gitignore for new files 2020-08-28 12:31:43 -04:00
899144c0f8 Merge pull request #2314 from jrgissing/bond/react-RMSD_constraint
Bond/react: add RMSD constraint
2020-08-28 12:29:11 -04:00
9f2eba981a a few more tweaks and spellcheck to make this ready for merging 2020-08-28 11:44:31 -04:00
ef50a67169 bond/react: make rmsd constraint lowercase 2020-08-28 11:06:27 -04:00
f8495975d3 transfer the rest of the Developer guide and remove the .tex versions and references to it 2020-08-28 10:52:45 -04:00
2686df3760 Update math_eigen.h
whitespace cleanup
2020-08-28 10:46:22 -04:00
f0788bfe86 transfer of developer.tex almost complete 2020-08-28 09:54:01 -04:00
e777badfa8 Merge pull request #2317 from evoyiatzis/patch-1
removal of a few duplicated lines in the drude polarizer tool
2020-08-28 09:25:01 -04:00
d361f26ca2 removal of a few duplicated lines
The "Velocities" sections is searched for in the input file twice - the second time being redundant.
2020-08-28 11:28:47 +02:00
b16746e46e Merge pull request #2313 from ndtrung81/gpu-bugfix
Fixed bugs in the CPU kernel for beck, beck/omp and the GPU kernel of gauss/gpu
2020-08-27 19:56:50 -04:00
992b981cee Fixes segfault due to uninitialized pointers 2020-08-27 19:02:02 -04:00
b1cca2cf74 update reference data for molecular test with pair style beck 2020-08-27 19:00:20 -04:00
463774319e add missing parenthesis 2020-08-27 17:57:44 -04:00
9c84fe8830 Add missing lammps_extract_compute.argtypes 2020-08-27 17:47:49 -04:00
d7e2be1c81 Start Python interface tests for numpy extensions 2020-08-27 17:47:49 -04:00
0b8136a38b Add extract_compute, extract_fix, and extract_variable to lammps.numpy 2020-08-27 17:47:49 -04:00
a216d3f5f5 Fix typo 2020-08-27 17:47:49 -04:00
26d09ea648 Use datatype constants instead of magic numbers 2020-08-27 17:47:49 -04:00
b1fae04751 use consistent style when referencing packages 2020-08-27 17:44:49 -04:00
7b4891a9a3 document the behavior of the gauss pair style to ignore special bond factors 2020-08-27 17:41:43 -04:00
fa13e23f7a add atomic test for gauss pair style 2020-08-27 17:41:25 -04:00
fdb726629f revert "fix" for pair style beck/gpu and correct beck and beck/omp instead
we should consistently apply factor_lj for both, force and energy, or not
2020-08-27 17:14:05 -04:00
a4f1be8fe3 Merge branch 'master' into gpu-bugfix 2020-08-27 17:05:26 -04:00
a54f99f774 Merge pull request #2315 from lammps/peri-doc-page
fix two typos on pair peri doc page
2020-08-27 17:00:06 -04:00
de4bf77757 two typos on pair peri doc page 2020-08-27 13:32:27 -06:00
32aede7769 minor doc clarification 2020-08-27 14:53:09 -04:00
ab90493e5b bond/react: RMSD, remove debugging statements 2020-08-27 14:45:42 -04:00
0d8baff7a9 Rename LAMMPS_DBLE2D to LAMMPS_DOUBLE2D 2020-08-27 14:03:17 -04:00
2f629db3d4 Refactor Zstd dump styles 2020-08-27 13:43:36 -04:00
5c0edeb679 namespace clarify 2020-08-27 12:43:28 -04:00
977a89e537 add separators 2020-08-27 12:33:03 -04:00
794e74e064 return of the lost enum 2020-08-27 12:22:48 -04:00
91554d6287 move RMSD files to new reaction package 2020-08-27 12:13:07 -04:00
ce2b128cf9 Merge branch 'lammps-master' into bond/react-RMSD_constraint 2020-08-27 12:04:09 -04:00
583a09c808 Merge branch 'master' of https://github.com/lammps/lammps into lammps-master 2020-08-27 12:02:08 -04:00
bc49e854ba bond/react RMSD constraint: manual rebase 2020-08-27 11:53:19 -04:00
e4e15157f8 Fixed bugs in the GPU kernels of pair styles beck/gpu and gauss/gpu involving factor_lj 2020-08-26 23:41:00 -05:00
f314b7e54f update format from enumerate to itemize and start next subsection 2020-08-26 23:05:59 -04:00
6a68743e54 transfer a chunk of text from Developer.tex to the manual. 2020-08-26 22:46:55 -04:00
ced78a72eb Add dump custom/zstd and tests 2020-08-26 19:59:28 -04:00
e9fd8b3ec6 Migrate changes to dump custom/gz and add tests 2020-08-26 19:44:55 -04:00
096cef40a8 remove redundant use of \brief 2020-08-26 19:44:23 -04:00
55829752c9 Merge branch 'master' into library-refactor 2020-08-26 19:08:09 -04:00
2f1086dfe4 Merge branch 'python-refactor' into library-refactor 2020-08-26 19:07:44 -04:00
85764b3774 replace a few more c++-style comments with old-fashion c-style comments 2020-08-26 19:07:29 -04:00
1ad82d7cdb add separator comment lines 2020-08-26 19:07:08 -04:00
dbf51af7d1 Fixes segfault due to uninitialized pointers 2020-08-26 18:41:32 -04:00
78a1b92503 Add dump atom zstd tests 2020-08-26 16:35:35 -04:00
007a43a5b2 Add more atom/gz tests 2020-08-26 16:20:02 -04:00
32aa35009b Start tests for compressed dump styles 2020-08-26 16:04:19 -04:00
046fd3d14b Verify valid compression level ranges 2020-08-26 16:03:18 -04:00
d00807ee9a Merge pull request #2311 from stanmoore1/kk_update_3.2
Update Kokkos library in LAMMPS to v3.2
2020-08-26 15:35:25 -04:00
aeb3e20385 Merge pull request #2307 from Vsevak/zbl_reduce_declaration
Fix NaN in GPU-accelerated Tersoff styles with OpenCL backend
2020-08-26 13:56:49 -04:00
629ead6348 Merge pull request #2309 from lammps/doxygen-integration
Add doxygen and graphviz processing into the documentation build
2020-08-26 13:05:00 -04:00
50b8b1bf60 Fix Kokkos HIP compile error 2020-08-26 11:45:24 -05:00
94db627ba5 fix formatting issue 2020-08-26 12:09:43 -04:00
b4403de026 add false positive 2020-08-26 12:09:35 -04:00
d40b658644 cmake: update kokkos version/checksum 2020-08-26 10:05:14 -06:00
8137ada848 Merge branch 'collected-small-changes' into doxygen-integration 2020-08-26 11:51:45 -04:00
bdc952ac88 Merge branch 'master' into collected-small-changes 2020-08-26 11:51:05 -04:00
f89a0f9fe3 must not try to delete computes if they have not been created and their ids not yet set 2020-08-26 11:50:20 -04:00
c8af729701 Merge branch 'master' into collected-small-changes 2020-08-26 11:49:29 -04:00
4ad68c98a0 Merge pull request #2196 from jibril-b-coulibaly/mindlin_rescale
Implement force history in Mindlin granular pair styles
2020-08-26 11:42:06 -04:00
e2fd95d8ed Merge pull request #2240 from jrgissing/bond/react-reset_mol_ids
support molecule ID resets in fix bond/react
2020-08-26 10:56:21 -04:00
ed63edc9da lammps_has_error() and lammps_get_last_error_message() are always available but dummies without exceptions enabled 2020-08-26 09:10:59 -04:00
48d2a48a1f import updated python module from progguide branch 2020-08-26 09:01:59 -04:00
7ab6def2ca update list of Kokkos GPU archs in manual as well 2020-08-26 03:49:59 -04:00
abbbb0ab06 remove trailing whitespace 2020-08-26 03:42:50 -04:00
aa6dec84ed update list of Kokkos supported architectures 2020-08-26 03:42:42 -04:00
e0439ac94f Add compression_level parameter to dump atom gz 2020-08-26 00:14:32 -04:00
5cb8e73655 Add checksum and compression_level as dump atom/zstd options 2020-08-25 23:59:17 -04:00
0d8454ac25 First version of Zstd dump atom 2020-08-25 23:27:42 -04:00
b8f59fd37c Update from master 2020-08-25 20:29:03 -06:00
4d90c2b74b Update Kokkos library in LAMMPS to v3.2 2020-08-25 20:21:48 -06:00
1c10aa6a4d GIFs are only supported in HTML 2020-08-25 17:15:34 -04:00
c256f2331f JPG folder is no longer needed in HTML output 2020-08-25 16:59:39 -04:00
ae5c0bd8d1 Remove targets to JPG images 2020-08-25 16:44:50 -04:00
3a638440a4 Add missing PDF folder 2020-08-25 16:12:09 -04:00
80e07c69f0 add part of developer guide as to showcase the integration of the programmer guide 2020-08-25 15:07:09 -04:00
df8fb26272 Refactor changes to documentation build
- Added CMake variables for readability
- Moved Mathjax files to _static to avoid special copy logic
- Moved JPG/lammps-logo.png to _static to avoid special copy logic
- Removed dead CMake code
2020-08-25 13:41:31 -04:00
14b66d1f84 tweak test tolerance of reax/c tests for running on ubuntu 18.04 2020-08-25 12:15:19 -04:00
f965786e74 refactor C library interface and add doxygen decorations 2020-08-25 11:45:07 -04:00
69cffb2d04 import test infrastructure for c, c++ and python library usage 2020-08-25 11:03:31 -04:00
024e4c5f21 make formatting and doxygen decorations for utils functions consistent 2020-08-24 20:55:13 -04:00
3f685c346f add doxygen integration with conventional and cmake doc build 2020-08-24 17:58:37 -04:00
dc241abb85 Merge pull request #2305 from akohlmey/next_patch_version
Update version strings for updated patch release
2020-08-24 13:46:50 -04:00
8cbc3e421f clean up 2020-08-24 17:49:38 +02:00
93e4ed9770 Merge pull request #2304 from akohlmey/collected-small-changes
Collected small changes for the next patch release
2020-08-24 11:43:42 -04:00
090ef2d1e8 merge error fix 2020-08-24 17:10:33 +02:00
9bdb7b5b98 gatherscatter 2020-08-24 17:09:16 +02:00
28d59ce594 final steps 2020-08-24 17:04:35 +02:00
2ee6e9077a Merge remote-tracking branch 'upstream/master' into 2020 2020-08-24 17:02:53 +02:00
e8fb7c7ece big update 2020-08-24 16:54:16 +02:00
7e1a3bd4d5 Merge pull request #2302 from akohlmey/consistent-doc-headers
Consistent subsection headers for commands
2020-08-24 10:52:09 -04:00
47a44732e7 add test for fix restrain 2020-08-23 15:29:58 -04:00
8f5e8300ea fix typos in fix restrain docs 2020-08-23 15:29:49 -04:00
0842911cd8 Rename local buffers 'red_acc' in lal_tersoff*
Rename __local red_acc in lal_tersoff
2020-08-23 22:22:28 +03:00
10080079e3 ISO compliance 2020-08-23 11:44:48 -04:00
63abb2dff9 fix broken reset_mol_ids command 2020-08-23 11:32:54 -04:00
01dd80f35e bond/react: actually make reset_mol_ids the default 2020-08-23 11:21:43 -04:00
fb634658de add tests for a few more force manipulation fixes 2020-08-23 07:01:38 -04:00
c503bba008 add custom pair style tests for reax/c and edip/multi 2020-08-23 06:44:33 -04:00
0fb8f6e779 add test for pair style momb 2020-08-22 23:15:20 -04:00
66b17fd2ce dispersion only tests for buckingham 2020-08-22 23:03:20 -04:00
3def826dbe add more tests for variants using long-range dispersion pair styles 2020-08-22 22:55:15 -04:00
f18d0507b3 fix issues with lj/long pair styles when not using long-range for dispersion 2020-08-22 22:54:38 -04:00
c8f2634b44 add tests for tabulated msm coulomb 2020-08-22 22:08:08 -04:00
e78100bdba add (partial) tests for pair styles dpd and dpd/tstat 2020-08-22 22:00:13 -04:00
2907a10937 update version strings for new attempt for a patch release 2020-08-22 16:42:39 -04:00
1879106cc3 Merge pull request #2299 from rbberger/doc_file_size
Avoids HTML doc pages from becoming too large
2020-08-22 15:45:06 -04:00
9152a8e98f avoid division by zero in imaging code 2020-08-22 15:32:04 -04:00
2fd654f4fd silence compiler warnings about unused variables 2020-08-22 15:06:00 -04:00
86153a0f77 avoid division by zero in MathExtra normalize functions 2020-08-22 15:03:27 -04:00
9136f9b9c9 Merge pull request #2303 from rbberger/binary2txt_bug
Fixes a bug in binary2txt
2020-08-22 14:46:29 -04:00
f82b19e21f Fix off-by-one mistake, Fixes #2300 2020-08-22 12:03:24 -04:00
b776e1ee3c convert remaining style doc sections to be a logical header 2020-08-21 23:33:41 -04:00
66438539f2 Avoids HTML doc pages from becoming too large 2020-08-21 19:47:46 -04:00
450fd12d31 Changes needed for Kokkos v3.2 2020-08-21 14:45:12 -05:00
6fc2ab07ef reset_mol_ids: unique created computes 2020-08-21 14:52:39 -04:00
2a6546d6f0 Merge pull request #2296 from akohlmey/next_patch_version
Update version strings for next patch release
2020-08-21 14:43:56 -04:00
921b6d8135 relative threshold for contact frame update based on tangential critical force 2020-08-21 13:20:53 -05:00
cffc667259 Merge pull request #2298 from stanmoore1/mv2_var
Fix MVAPICH2 env variable for CUDA/aware
2020-08-21 14:04:57 -04:00
e0c74a30bc Fix MV2 env variable 2020-08-21 11:08:49 -06:00
7f87ccccc8 Merge branch 'collected-small-changes' into next_patch_version 2020-08-21 11:18:10 -04:00
3c7d59401c Merge pull request #2107 from junghans/offline_gtest
cmake: allow to overwrite GTest URL for offline machines
2020-08-21 10:57:08 -04:00
19c1fa8c94 need to re-initialize lattice variable after new lattice command 2020-08-21 01:01:12 -04:00
ee6ef98b9b remove trailing whitespace 2020-08-21 00:43:40 -04:00
e742ae7475 fix RST syntax and spelling issues in granular pair style docs 2020-08-21 00:31:55 -04:00
900830a4a1 Merge branch 'master' into mindlin_rescale 2020-08-21 00:24:07 -04:00
c9773fc288 Merge branch 'master' into bond/react-reset_mol_ids 2020-08-21 00:19:52 -04:00
4c46119a48 Merge pull request #2280 from lammps/gridcomm-tiled
Support for tiled decompositions in PPPM
2020-08-21 00:16:20 -04:00
42018d3b35 add dispersion only kspace style tests 2020-08-20 23:42:23 -04:00
3183af9b85 fix a few more initialization issues in pppm/disp and pppm/disp/intel 2020-08-20 23:42:00 -04:00
2855f04363 tweak output format 2020-08-20 23:41:32 -04:00
deb24626d1 fix gc vs. gc6 issues in fix pppm/disp 2020-08-20 22:45:37 -04:00
0440b13a6d fix memory leaks 2020-08-20 22:27:15 -04:00
17a9612126 fix pppm/disp initialization issues 2020-08-20 22:17:32 -04:00
0a042be6b8 fix another pppm/disp bug for dispersion-only runs 2020-08-20 22:11:06 -04:00
e7639d4951 Merge pull request #2297 from akohlmey/more-fix-tests
Add a few more unit tests for fixes and fix some issues related to it
2020-08-20 20:18:09 -04:00
287112761c tweak load balancing output format 2020-08-20 18:51:28 -04:00
a742db2369 add a couple of kspace tests using tiled communication 2020-08-20 18:08:10 -04:00
398e929400 Merge branch 'master' into gridcomm-tiled 2020-08-20 17:58:35 -04:00
4fde9022a3 remove tabs 2020-08-20 17:54:26 -04:00
a70a5be2d8 Merge pull request #2289 from akohlmey/reduce-kokkos-compiler-warnings
Reduce compiler warnings in KOKKOS package
2020-08-20 17:52:07 -04:00
203ab71b62 Merge branch 'master' into gridcomm-tiled 2020-08-20 17:00:55 -04:00
c513b60f97 Merge branch 'reduce-kokkos-compiler-warnings' of github.com:akohlmey/lammps into reduce-kokkos-compiler-warnings 2020-08-20 16:59:46 -04:00
f3b0bf8a33 Merge branch 'master' into reduce-kokkos-compiler-warnings 2020-08-20 16:59:31 -04:00
cd7ba1d007 Merge branch 'master' into more-fix-tests 2020-08-20 16:41:29 -04:00
f0335fabb1 Merge pull request #2295 from akohlmey/add-fix-momentum-chunk
Add fix momentum/chunk
2020-08-20 16:40:51 -04:00
d6b19b80d0 Make all Kokkos functors structs 2020-08-20 13:52:53 -06:00
17b998edb3 fix whitespace issue 2020-08-20 15:51:41 -04:00
5306b39251 add tests for a few more wall fixes 2020-08-20 15:42:00 -04:00
56d00e115d add more tests for fixes 2020-08-20 15:32:47 -04:00
92622d9079 add restart support to fix temp/rescale, fix spring/chunk, and fix spring/rg 2020-08-20 15:32:10 -04:00
ff2242385b Tweak format 2020-08-20 12:56:56 -06:00
6862d70759 Merge branch 'master' of github.com:lammps/lammps into reduce-kokkos-compiler-warnings 2020-08-20 11:24:30 -06:00
6efc51d863 Update comment 2020-08-20 11:19:34 -06:00
394b2da585 Port changes to Kokkos 2020-08-20 11:09:21 -06:00
fc9f0dbcbc correct fix npt/cauchy docs 2020-08-20 11:29:30 -04:00
ba00626764 more force adding fix tests 2020-08-20 10:59:39 -04:00
e72ea35c40 add tests for a bunch of rigid fixes 2020-08-20 10:10:25 -04:00
0f11532162 remove class member that was incorrectly shadowing a base class member 2020-08-20 10:10:03 -04:00
ca7fa2aeef make names of fix-timestep inputs consistent with the rest 2020-08-20 09:25:40 -04:00
6bda49e8d8 step version strings for next patch release 2020-08-20 07:46:01 -04:00
ed26d8ef8f revert change to fft3d.cpp that breaks all PPPM styles 2020-08-19 20:24:03 -04:00
2ed18bb841 tweak output format 2020-08-19 20:15:00 -04:00
2feccc2837 fix dispersion gridcomm buffer bug 2020-08-19 20:12:43 -04:00
729b3d2717 major whitespace cleanup 2020-08-19 18:46:35 -04:00
503d3826bb Merge branch 'master' into gridcomm-tiled 2020-08-19 18:36:49 -04:00
fdb1e69768 silence compiler warnings 2020-08-19 18:36:28 -04:00
284cdceae8 silence compiler warnings 2020-08-19 18:19:28 -04:00
ba06a7bf0c final gridcomm comments and flip FFT forward/reverse 2020-08-19 16:05:30 -06:00
8f156bfee6 Fix typo in pppm_gpu.cpp 2020-08-19 14:25:06 -06:00
6f37da4eb2 Whitespace cleanup 2020-08-19 14:10:35 -06:00
5ea7ca94f4 Revert accidental change 2020-08-19 13:54:06 -06:00
073c7ee138 Fix warnings related to virtual function override 2020-08-19 13:29:11 -06:00
33cc932d03 Eigen3 is now hosted at GitLab. The bitbucket repo is gone. Update URLs and MD5s 2020-08-19 15:21:43 -04:00
af50d90b55 add author to README 2020-08-19 15:15:28 -04:00
20c24b1f3b add tests for momentum fixes and nve/limit 2020-08-19 15:08:46 -04:00
b1fbee9bd0 skip testing fix nve/limit for r-RESPA as it is not compatible by design 2020-08-19 15:08:32 -04:00
a0aca4cee4 improve error message 2020-08-19 15:08:04 -04:00
b4ce4a0979 must delete internal computes if they already exist (e.g. after a restart) 2020-08-19 15:07:56 -04:00
cc0d294478 Fix segfault 2020-08-19 13:05:23 -06:00
acd0a62de7 add new fix style momentum/chunk 2020-08-19 14:44:18 -04:00
3a8b2aef17 Small tweaks 2020-08-19 09:45:19 -06:00
e9de1c1a9a Merge pull request #2293 from akohlmey/collected-small-changes
Collected small changes and fixes
2020-08-19 11:11:43 -04:00
fcec5c35ea Remove error check in pppm_kokkos 2020-08-19 08:57:46 -06:00
f7c6e8e6b1 Eigen3 is now hosted at GitLab. The bitbucket repo is gone. Update URLs and MD5s 2020-08-19 10:50:54 -04:00
1413e61553 tweak test presision so it passes with more compilers 2020-08-19 00:59:50 -04:00
7e4e756b23 remove dead code 2020-08-18 22:46:34 -04:00
174a282e0c fix signed vs. unsiged warning 2020-08-18 22:46:26 -04:00
8e74d5ad02 Eigen3 is now hosted at GitLab. The bitbucket repo is gone. Update URLs and MD5s 2020-08-18 21:29:43 -04:00
e4ab49c2e5 bond/react: bond-type-checking docs 2020-08-18 18:12:01 -04:00
4d31afce2d Port changes to PPPMKokkos 2020-08-18 16:06:43 -06:00
df497e4853 bond/react: clarify bond-type-checking error 2020-08-18 17:53:07 -04:00
43f6fa4b29 Merge pull request #2136 from rbberger/refactor-reading
Refactor value parsing code segments and add dump tests
2020-08-18 16:18:33 -04:00
a53ee5664e silence compiler warnings about signed vs. unsigned ints 2020-08-18 15:51:06 -04:00
f6ac4a26c4 reorder initialization in constructor to silence compiler warnings 2020-08-18 15:47:03 -04:00
e2923d2d8c Merge branch 'master' of ssh://github.com/lammps/lammps into gridcomm-tiled 2020-08-18 13:43:33 -06:00
02f66f1e9f protect pragmas with ifdefs 2020-08-18 15:39:44 -04:00
b38bf6c06a silence some more unused parameter/variable warnings 2020-08-18 15:28:23 -04:00
07c47fbd4a silence some more signedness warnings 2020-08-18 15:28:02 -04:00
63575829da reorder initialization 2020-08-18 15:26:37 -04:00
e185537255 avoid uninitialized access 2020-08-18 14:33:14 -04:00
78d5714247 silence signed vs. unsigned integer warnings 2020-08-18 14:33:02 -04:00
a537ffabf9 correct illegal and uninitialized data access issue 2020-08-18 14:19:57 -04:00
2fea8f888a Merge branch 'master' into collected-small-changes 2020-08-18 14:15:06 -04:00
18b12e8979 Merge branch 'master' into reduce-kokkos-compiler-warnings 2020-08-18 13:50:35 -04:00
d63f3d87eb Merge pull request #2292 from akohlmey/warning-no-mixing-data-file
Print warning when writing PairCoeff section in data file may not sufficiently reproduce all pair coefficients
2020-08-18 13:45:44 -04:00
c7f8a6d154 Add format line test to dump atom 2020-08-18 13:15:28 -04:00
72f3c3803e Fix warning with #pragma unroll 2020-08-18 11:13:50 -06:00
216a016a08 Add simple tests for dump cfg 2020-08-18 12:37:16 -04:00
0d38a1418e Merge branch 'master' into warning-no-mixing-data-file 2020-08-18 12:24:01 -04:00
6b024d4697 Merge branch 'master' of github.com:lammps/lammps into reduce-kokkos-compiler-warnings 2020-08-18 10:15:55 -06:00
dae2cb2668 Merge pull request #2286 from weinbe2/fea-snap-ui-optim
Kokkos SNAP optimizations – Pre-computing Cayley-Klein parameters, symmetrized data layouts for host and device backends, reducing number of atomics
2020-08-18 11:55:46 -04:00
9c769fe90e Complete refactor of dump custom tests 2020-08-18 11:53:10 -04:00
6dfe2f3351 Minor code cleanup 2020-08-18 09:21:28 -06:00
d6ea2e9e9b More refactoring 2020-08-17 17:56:33 -04:00
e75ba02701 Merge remote-tracking branch 'origin/master' into refactor-reading 2020-08-17 17:36:01 -04:00
fa0aa7f8d2 Merge pull request #2291 from ThFriedrich/master
fix typos and indentations
2020-08-17 12:11:38 -04:00
23be41a1d3 fix typos and indentations 2020-08-16 04:43:07 +02:00
f0e36c74a8 silence more signedness comparison warnings 2020-08-15 18:10:13 -04:00
365d8f57f1 Refactor dump atom tests 2020-08-14 15:41:24 -04:00
b95cb37f62 correct indentation and silence warning about singed/unsigned comparison 2020-08-14 12:02:23 -04:00
71e0646063 Merge branch 'gridcomm-tiled' of github.com:lammps/lammps into gridcomm-tiled 2020-08-14 09:41:37 -06:00
eb78f8842f another change to pppm/stagger 2020-08-14 09:41:30 -06:00
3aee1b75b1 update README 2020-08-14 11:21:51 -04:00
08a5a05ece reduce compiler warnings in KOKKOS version of USER-DPD code 2020-08-13 20:54:06 -04:00
1939a9e665 silence a few more compiler warnings and remove dead code 2020-08-13 20:13:51 -04:00
4227c5e9e1 silence more compiler warnings about unused parameters and variables 2020-08-13 18:19:35 -04:00
1b60f876e0 Some refactoring of tests 2020-08-13 18:04:34 -04:00
dbcf66cf97 Increase coverage of dump custom 2020-08-13 17:41:06 -04:00
eab8652d3a Fix triclinic binary header in dump custom 2020-08-13 17:40:44 -04:00
2ba4778640 Add missing cleanup 2020-08-13 17:39:57 -04:00
f1afa45b92 Merge branch 'gridcomm-tiled' of ssh://github.com/lammps/lammps into gridcomm-tiled 2020-08-13 14:52:31 -06:00
40e55af8d7 Port GridComm changes to Kokkos 2020-08-13 14:51:58 -06:00
abc3e17619 fix loop control bug in qeq/reax/kk 2020-08-13 16:30:12 -04:00
6778489247 silence a whole bunch more compiler warnings 2020-08-13 16:26:50 -04:00
0d2a280397 silence compiler warnings 2020-08-13 15:46:00 -04:00
fbcc97586f Update binary format of dump custom 2020-08-13 14:45:22 -04:00
6225a7d45c Merge branch 'gridcomm-tiled' of github.com:lammps/lammps into gridcomm-tiled 2020-08-13 12:03:42 -06:00
a1ca4ecbe8 add GridComm API changes to msm/cg/omp 2020-08-13 12:03:32 -06:00
71ec14087d Reduce code duplication in tests 2020-08-13 13:00:37 -04:00
1fb7ba9e4b Add tests for dump_custom 2020-08-13 12:35:47 -04:00
27e8ee7bd8 Fix typo 2020-08-13 12:34:16 -04:00
87a356a211 Add write_dump tests for dump atom 2020-08-13 12:04:54 -04:00
f9697bd9f5 Add optional TIME to binary dump atom format 2020-08-13 11:48:29 -04:00
6d725c9b1c Merge pull request #2287 from akohlmey/lattice-region-tester
Add unittest tool for lattice and region (/w create_box/create_atoms)
2020-08-13 11:47:08 -04:00
6d80435b51 Refactoring dump_atom.cpp 2020-08-13 11:35:05 -04:00
836ba01d51 Rename test_dump.cpp to test_dump_atom.cpp 2020-08-13 11:14:30 -04:00
4157ab3bd3 silence compiler warnings about unused parameters 2020-08-13 11:11:28 -04:00
7b0bfed01d Add failure tests to dump atom 2020-08-13 11:01:16 -04:00
6d825dcb6b Add UNITS information to dump atom binary format 2020-08-13 10:49:03 -04:00
1c2747739a Merge pull request #2284 from akohlmey/fix-tester
Add unit test tool for fixes that do time integration, thermostatting, force manipulations and similar
2020-08-13 10:23:29 -04:00
b27d63059c Add tests for units in dump atom 2020-08-13 10:22:46 -04:00
dc484f06c8 do not mix class and struct for functors: use class consistently 2020-08-13 10:17:14 -04:00
bd7917919b update list of pointer variables to be initialized to NULL in the msm constructor 2020-08-13 09:34:02 -04:00
ba793f2e56 add region tests and a few more death tests for lattice commands 2020-08-12 22:16:50 -04:00
6eb6ab308b more tests for lattice command failures 2020-08-12 22:16:50 -04:00
f8c7c13168 complete lattice testers and start with regions+lattice+create_atoms 2020-08-12 22:16:50 -04:00
33118491a9 update custom lattice example for better syntax highlighting and remove unused lines 2020-08-12 22:16:50 -04:00
1cd2dfee3f add more lattices 2020-08-12 22:16:50 -04:00
5c5774c8a4 add check for compatible lattice command when calling create_atoms
without this check it is possibly to use the dimension keyword after
using lattice and then create atoms with an unsuitable lattice setting
2020-08-12 22:16:49 -04:00
7e558e4628 add tester tool for lattice and region commands 2020-08-12 22:16:49 -04:00
e2cedebd29 more enumerator to class definition in header, so it can be accessed by tester 2020-08-12 22:16:49 -04:00
3a1b88c57f enable MSM to work withe new GridComm class 2020-08-12 17:41:31 -06:00
e00544c8bf Merge branch 'gridcomm-tiled' of github.com:lammps/lammps into gridcomm-tiled 2020-08-12 14:28:25 -06:00
ecec36cc15 remove trial versions of PPPM2 and GridComm2 2020-08-12 14:26:15 -06:00
eae7312680 changes to more PPPM variants for tiled support 2020-08-12 14:25:28 -06:00
a5d27763e5 Added support for symmetrized memory layouts for ui/duidrj for the CPU- and GPU-path SNAP Kokkos implementation, various perf optimizations for ComputeUi/ComputeFusedDeidrj 2020-08-12 16:15:06 -04:00
adf8d638e8 add missing word 2020-08-11 21:23:47 -04:00
5050538d59 add tests for addforce and aveforce fixes 2020-08-11 21:00:16 -04:00
99604a6155 Merge branch 'collected-small-fixes' into fix-tester 2020-08-11 20:26:46 -04:00
68d94f9b59 fix memory leaks in pair style meam/spline 2020-08-11 20:25:35 -04:00
dff8a50a46 fix memory leak in pair style edip 2020-08-11 20:14:39 -04:00
4cfc920d65 remove unused variable 2020-08-11 19:58:51 -04:00
90acace136 fix restart issues in pair style lennard/mdf 2020-08-11 19:57:32 -04:00
3dda6b5752 Increase test coverage of dump atom 2020-08-11 19:00:32 -04:00
ef13372d13 Remove debug message 2020-08-11 18:32:58 -04:00
873b8b0104 Add dump atom tests with image=yes 2020-08-11 18:12:53 -04:00
560c29a0e1 Extends header of new binary format of dump atom 2020-08-11 17:37:46 -04:00
9d486d734b update bond/react for reset_mol_ids->create_computes 2020-08-11 17:29:27 -04:00
3c69ebc669 reset_mold_ids: add create_computes 2020-08-11 17:12:36 -04:00
1238ad5d83 Fix binary2txt output for triclinic 2020-08-11 16:20:05 -04:00
b08751d65a Add triclinic tests for dump atom 2020-08-11 16:17:36 -04:00
51a7038dbf Merge branch 'master' into fix-tester 2020-08-11 16:14:27 -04:00
ac43f8f685 Merge pull request #1865 from danicholson/bond-style-special
Add bond style special
2020-08-11 16:06:26 -04:00
11af732aab tweak precision for edip test 2020-08-11 15:43:03 -04:00
3593d371eb Merge pull request #2285 from twhitehead/comm-for-fix-destructors
Move comm destruction to after modify to leave available for fixes
2020-08-11 15:21:36 -04:00
83f81c42b9 Fix typo 2020-08-11 15:08:58 -04:00
15cd007d7b Merge pull request #2283 from abhiShandy/soft-test
Add unit tests for /soft pair styles
2020-08-11 15:04:54 -04:00
3cae295f5b make test for unsupported pair styles more restrictive and improve docs about that
EAM styles have a single function but are not compatible, so we test for
single_enable == 0 and manybody_flag != 0.
Improve explanation in the documentation about which pair styles are not supported.
2020-08-11 15:04:14 -04:00
f6d91b3b2c move domain/comm commands 2020-08-11 15:02:37 -04:00
2ad9e06bac Sync DumpAtom and binary2txt to generate the same
Modifies the binary dump atom format to include columns information.
binary2txt showcases how to detect the new format by checking for
negative ntimestep values. It increases the binary file size
16 bytes per timestep.
2020-08-11 14:59:01 -04:00
265b7cf11c use new dependency resolver in pip for the documentation build virtual environment 2020-08-11 14:11:44 -04:00
03ca86ee84 Merge branch 'master' into bond-style-special 2020-08-11 13:55:24 -04:00
e3a1fd7c02 Add tests for dumps 2020-08-11 12:55:39 -04:00
46021a57a6 addressed incompatibility with long range coulombics 2020-08-11 12:22:07 -04:00
65d9eef707 add test for pair style extep 2020-08-11 09:57:32 -04:00
6b84cd1c48 add test for pair style morse/smooth/linear 2020-08-11 09:57:23 -04:00
f685a7cc93 fix incorrect sign bug 2020-08-11 09:56:19 -04:00
8fb356d901 fix initialization after restart bug 2020-08-11 09:56:07 -04:00
5c0ec78cd2 add test for pair style e3b 2020-08-11 08:57:40 -04:00
0cb3163bd6 may test for atom types only after system is initialized 2020-08-11 08:57:27 -04:00
172435b662 add tests for lj/expand/coul/long 2020-08-11 08:38:42 -04:00
7ff5a7fccd fix bugs with single and r-RESPA 2020-08-11 08:37:03 -04:00
f77b80180c simplify 2020-08-11 08:36:39 -04:00
175a6c26a7 Add Info::get_mpi_vendor() function 2020-08-10 19:02:39 -04:00
5ee4346700 fixed test for tip4p_long_soft, and mentioned the required coefficients for coul/*/soft sub-styles 2020-08-10 17:16:07 -04:00
b9ce53e096 update tests for r-RESPA testing of fixes 2020-08-10 17:03:19 -04:00
70f37d6613 update for handling r-RESPA properly 2020-08-10 17:02:56 -04:00
33c97618be using hybrid/overaly to add soft repulsion to purely coulombic pair-styles 2020-08-10 16:52:32 -04:00
a7fee0a96f replace strstr with utils::strmatch 2020-08-10 16:28:42 -04:00
5ebac27fd5 safety for division by zero in scaling of the projection 2020-08-10 15:15:47 -05:00
a83147ce20 fixed bug in respa neighbor list 2020-08-10 16:01:28 -04:00
7d8dcb0fb0 Remove strtok from reader_native.cpp 2020-08-10 15:56:06 -04:00
2de98999c1 bug fix formula for frame of reference rotation for granular tangential history 2020-08-10 14:51:00 -05:00
1370090586 Move comm destruction to after modify to leave available for fixes
Needed in some cases to cleanup asynchronous inter-step transfers.
2020-08-10 15:49:52 -04:00
3993f53946 must skip DeathTests if no data file loaded 2020-08-10 15:46:28 -04:00
67af8c000e fix r-RESPA bug in storing global total force data 2020-08-10 15:46:00 -04:00
b12f9d5150 Remove strtok in thermo.cpp 2020-08-10 13:53:59 -04:00
079cc123e5 Remove unused function 2020-08-10 12:27:08 -04:00
e2b113b5e1 Merge branch 'master' into refactor-reading 2020-08-10 12:25:16 -04:00
6f1055a9b1 Merge pull request #2281 from jtclemm/patch_fix_store
Patch fix store to encode the size of per-atom data consistently with other related fixes for restarting.
2020-08-10 12:09:08 -04:00
bf724332d4 implement tangential force history in mindlin/force and mindlin_rescale/force 2020-08-10 10:53:30 -05:00
e3beec8b95 revert permission change and replace 'b/c' with 'because' 2020-08-10 11:37:52 -04:00
0025140902 flag which table - identified by keyword - has a warning 2020-08-10 11:09:10 -04:00
869b09a78f fix typo 2020-08-10 11:08:30 -04:00
b92eda8ab8 enable testing with r-RESPA for real 2020-08-09 17:36:15 -04:00
c3903efb46 add test for berendsen barostat 2020-08-09 16:45:21 -04:00
4b7356f5af add support for testing virial contributions from fixes (as an option) 2020-08-09 16:39:31 -04:00
f1da1ed180 document restart capability of fix temp/csld and fix temp/csvr 2020-08-09 15:29:12 -04:00
e51bec10a8 one more test variant for fix setforce 2020-08-09 15:18:28 -04:00
4708cd7e1f always call MPI_Finalize() before exiting tester program 2020-08-09 15:17:53 -04:00
b223ca1436 cleanup and bugfix 2020-08-09 15:12:38 -04:00
2fcd7b79ab make certain that internal data in RanMars is initialized to avoid false positive with valgrind 2020-08-09 15:12:10 -04:00
f1da2b2f5f add tests for fix/csvr and fix/csld 2020-08-09 14:56:43 -04:00
bbcae3b20c added restart capability to fix temp/csld and fix temp/csvr 2020-08-09 14:56:27 -04:00
383bb7f905 added restart capability to RanMars 2020-08-09 14:56:00 -04:00
897ae681d3 remove dead code 2020-08-09 14:55:35 -04:00
548e108695 simplify 2020-08-09 14:55:11 -04:00
6e9bf8709e add tests for fix rattle 2020-08-09 13:58:10 -04:00
d8cd12b285 print warning only on MPI rank 0 2020-08-09 13:57:04 -04:00
3ebd194090 update documentation for unit testing to include timestepping fix tests 2020-08-09 08:18:35 -04:00
cabb166041 add tests for fix shake 2020-08-09 07:40:24 -04:00
a4eea29d90 add fix setforce test with variables 2020-08-09 07:32:46 -04:00
a6cc775241 add example for wall fix 2020-08-09 07:25:27 -04:00
1989279442 no need to list all dependencies. if atom style full is available, the rest is, too. 2020-08-09 07:25:15 -04:00
2053776118 increase code coverage 2020-08-09 07:13:26 -04:00
d7c1162e9d make plain and omp test consistent 2020-08-09 07:12:56 -04:00
a27a03bc1a now also test for global scalars and vectors and t_target for thermostats 2020-08-09 01:48:12 -04:00
b1e9b6d3fc set variable for checking thermostat target temperature 2020-08-09 01:33:37 -04:00
88f89c8f14 correctly read entire vector 2020-08-09 01:27:56 -04:00
62a501ebda store cumulative energy change in restart file 2020-08-09 01:27:14 -04:00
e94d1c5537 add function to query whether ErrorStats class has data 2020-08-09 01:01:35 -04:00
2edad432ce add support for storing a global scalar and global vector 2020-08-09 00:03:43 -04:00
4b5bc8f63b some more fix tests 2020-08-08 23:14:16 -04:00
6276e72509 also check fix styles. properly detect upper case. 2020-08-08 23:13:57 -04:00
511944d9bd add a first set of tests for timestepping fixes 2020-08-08 22:54:58 -04:00
faac18ffd2 add tester tool for timestep related fixes: integrators, thermostats, force manipulations, constraints 2020-08-08 22:54:17 -04:00
0ce43efc34 reorder folders, so that the fast tests are run first 2020-08-08 22:52:41 -04:00
6cea5a9aef added missing restart_settings() in morse/soft 2020-08-08 17:11:25 -04:00
9bbd6099af unit tests for /soft pair styles 2020-08-08 16:30:27 -04:00
f69dd734b2 update format 2020-08-08 14:48:11 -04:00
d0720794a6 Replaced mistakenly dropped line 2020-08-08 09:24:37 -06:00
41904f7946 Added cautionary comments 2020-08-08 09:15:56 -06:00
2775b93789 Merge pull request #2282 from akohlmey/more-unit-tests
Add more unit tests for pair and kspace styles
2020-08-07 19:06:44 -04:00
54b933164f tweak epsilon 2020-08-07 18:34:39 -04:00
7aae5ba5d1 set molecule ids for testing interlayer potentials 2020-08-07 18:34:25 -04:00
17b7476217 avoid sqrt computation on cutoffs. make single functions consistent with compute 2020-08-07 18:34:10 -04:00
9f469623c0 add test for lj/smooth/linear and gaus/cut 2020-08-07 18:13:58 -04:00
e169a5c785 add tests for pair style coul/streitz 2020-08-07 18:06:57 -04:00
a17633bd20 use open_potential in pair style coul/streitz 2020-08-07 18:06:43 -04:00
c5cd108113 add tests for coul/shield, coul/slater/cut and coul/slater/long 2020-08-07 16:59:21 -04:00
2ffa7430ab fix restart bug in pair style coul/shield 2020-08-07 16:58:56 -04:00
7d26fbc6e2 add test for pair style coul/diel 2020-08-07 16:51:23 -04:00
e217635e9a fix bug in reading binary restarts for pair style coul/diel 2020-08-07 16:51:12 -04:00
0537cc721e add test for pair style edip/multi 2020-08-07 16:32:53 -04:00
ec0c3d60a8 add test for pair style edip 2020-08-07 16:30:12 -04:00
4542a39f21 fix indexing bug in pair style edip/omp 2020-08-07 16:29:53 -04:00
8e0dccee2c add test for pair style meam/sw/spline 2020-08-07 16:08:28 -04:00
51decfcf85 add test for pair style meam/spline 2020-08-07 14:53:11 -04:00
04cc5df27b atom type to element mapping is not done correctly. for now require exactly one atom type per element 2020-08-07 14:52:51 -04:00
1c33bff557 add test for pair style yukawa/colloid 2020-08-07 12:04:23 -04:00
efa8b3486f update colloid test template so it can handle different atom styles 2020-08-07 12:04:06 -04:00
15e969ca5b add triclinic support to ewald/omp 2020-08-07 11:11:52 -04:00
094f52c378 make space style msm an explicit dependency 2020-08-07 00:07:36 -04:00
7d9f6b0dc5 add tests for pair styles from USER-SDK 2020-08-07 00:07:18 -04:00
a42365bf90 add support enforce writing a data file with pair ij as required by sdk styles 2020-08-07 00:05:34 -04:00
1d539ea787 make single function consistent with compute 2020-08-07 00:04:59 -04:00
c6d5715ea1 add tests for meam/c 2020-08-06 23:12:16 -04:00
d2a66cc9ee Merge branch 'master' into gridcomm-tiled 2020-08-06 22:27:35 -04:00
aa393f35db Merge pull request #2279 from akohlmey/collected-small-changes
Collected small changes and fixes
2020-08-06 22:26:20 -04:00
3c21642bf1 Merge branch 'collected-small-changes' into gridcomm-tiled 2020-08-06 21:53:46 -04:00
522a76694f test pppm with triclinic cell 2020-08-06 21:52:37 -04:00
b91419397d update (some) kspace tests to run faster 2020-08-06 21:49:03 -04:00
6dd903cfff Merge branch 'collected-small-changes' into gridcomm-tiled 2020-08-06 18:47:38 -04:00
8327613192 Merge branch 'master' into gridcomm-tiled 2020-08-06 18:35:33 -04:00
cd31006006 add test for pair style python 2020-08-06 17:53:11 -04:00
ec0b3ae8d2 add test for pair style tip4p/cut 2020-08-06 16:54:39 -04:00
e1219399b4 add tests for buck/long/coul/long 2020-08-06 16:26:37 -04:00
fefed73cb9 fix bug in single function of buck/long/coul/long 2020-08-06 16:26:26 -04:00
ad71475e91 more tests 2020-08-06 16:09:47 -04:00
dae97e1151 add tabulation for long-range coulomb 2020-08-06 16:09:36 -04:00
8826ea91e2 inherited single function doesn't match, we need to set single_enable to 0 2020-08-06 16:09:21 -04:00
0d677321d8 more tests for coreshell 2020-08-06 15:50:31 -04:00
ad9483343c reformat pair_coeff section 2020-08-06 15:49:31 -04:00
e93e49a777 restore printing alphabetically sorted lists of missing styles 2020-08-06 15:30:52 -04:00
e777454888 add unittest for pppm/tip4p with kspace_modify diff ad and fix related bug in pppm/tip4p/omp 2020-08-06 14:42:15 -04:00
89694d3f8e small tweak 2020-08-06 11:45:00 -04:00
5caeb2c2ee generalize to allow GridComm to be called from Fixes or Computes 2020-08-06 08:36:59 -06:00
15db052c80 Merge branch 'master' into collected-small-changes 2020-08-05 22:10:10 -04:00
c3075250ee Merge pull request #2273 from abhiShandy/pair-tests-aug4
Bunch of units tests for pair-style, angle-style, bond-style
2020-08-05 22:09:28 -04:00
787d7d28d0 Merge pull request #1296 from Adrian-Diaz/multi-comm-tiled
updated comm tiled to have multi style ghost communication
2020-08-05 21:27:33 -04:00
6b1191b1c0 Forgot to update saving buffer size 2020-08-05 18:59:33 -06:00
ae3df83ed8 Merge pull request #2275 from stanmoore1/kk_hip
First set of changes for Kokkos HIP
2020-08-05 19:52:35 -04:00
458243604b change atom style tests expand covered code paths: tiled vs. brick comm, orthogonal vs. triclinic. relax floating point check precision 2020-08-05 19:27:59 -04:00
27fe315db7 Matching style of other fixes 2020-08-05 17:25:58 -06:00
5f83edd127 remove references to non-existent MPI_Statuses 2020-08-05 17:24:09 -06:00
1871175871 Patched fix/store 2020-08-05 17:20:13 -06:00
ac08bcadf7 use bbox keyword on some replicate commands to increase code coverage 2020-08-05 18:49:05 -04:00
8b76e47d6b support for tiled decompositions in PPPM 2020-08-05 16:44:56 -06:00
0e7c5a014d Merge pull request #2276 from rbberger/fmtlib-upgrade
Upgrades the fmt library to version 7.0.2
2020-08-05 18:34:34 -04:00
65574be178 whitespace fixes 2020-08-05 17:52:16 -04:00
304d6876f4 a few bug fixes for support for multi and triclinic in CommTiled 2020-08-05 15:44:02 -06:00
8f84b6cbe6 Merge branch 'fix_typo_doc_dpd' of github.com:pdebuyl/lammps into collected-small-changes 2020-08-04 19:42:32 -04:00
d53fc62fb0 change fmtlib internal namespace from v7 to v7_lmp to avoid clashes when linking with other fmtlib variants 2020-08-04 19:18:44 -04:00
8558e9bd45 fix bug when applying floating point output formatting to integers 2020-08-04 19:10:19 -04:00
67a9856e0c silence compiler warning when converting MAXBIGINT to a double 2020-08-04 19:07:53 -04:00
ae765f9d6e Add missing KOKKOS_INLINE_FUNCTION 2020-08-04 17:03:54 -05:00
1a642d36ae fix typo in the math of pair style dpd doc
- missing closing backticks for math
- V fixed to v for relative velocity
2020-08-04 22:50:26 +02:00
0b6c7ba502 Add missing KOKKOS_INLINE_FUNCTION 2020-08-04 13:07:35 -05:00
7294936322 Add missing fmt license 2020-08-04 13:39:18 -04:00
c6f5640d48 Simplify #ifdef 2020-08-04 11:25:42 -06:00
2fe7be0d37 Reapply fmt patches for Intel compiler issues
- work around issue of the Intel compiler disguising as clang on MacOS
- {fmt}: don't use [[gnu::fallthrough]] on intel compilers
2020-08-04 13:18:54 -04:00
63cbbf9605 Upgrade embedded fmt library to v7.0.2 2020-08-04 13:17:57 -04:00
ed566bf6af First set of changes for Kokkos HIP 2020-08-04 12:16:26 -05:00
18bc389339 print warning, when mixed pair coeffs were set explicitly but are not written in data file 2020-08-04 07:18:48 -04:00
e860779fa0 formatting update 2020-08-04 07:17:28 -04:00
357716ec4c correctly check of mu and torque flags as those data structures are always accessed. 2020-08-04 07:17:12 -04:00
f9539f9ca6 remove unused code 2020-08-04 07:08:55 -04:00
f895904d2c Merge branch 'pair-tests-aug4' of github.com:abhiShandy/lammps into pair-tests-aug4 2020-08-04 02:18:06 -04:00
5592bac69c Merge branch 'bond-styles-Aug4' into pair-tests-aug4 2020-08-04 02:17:06 -04:00
59c5a62a00 Merge branch 'angle-tests-Aug4' into pair-tests-aug4 2020-08-04 02:16:57 -04:00
feadfaf9be unit tests for angle-class2/p6, angle-cross and angle-mm3 2020-08-04 02:15:11 -04:00
eed7113506 tests for fene, fene/expand 2020-08-04 01:57:23 -04:00
f407db6198 add test for lj/cut/tip4p/cut 2020-08-04 00:11:14 -04:00
b217375744 add tests with AD instead of IK 2020-08-03 23:45:46 -04:00
83519290e7 add kspace tests with slab correction and pppm/stagger 2020-08-03 23:31:32 -04:00
ef8b619840 fix missing support for nozforce in ewald/omp 2020-08-03 23:21:54 -04:00
4e46c0aef4 add missing born/coul/long variant using tabulation 2020-08-03 23:02:29 -04:00
c2ed040529 simplify 2020-08-03 22:49:21 -04:00
89d85436f1 update reference data for triclinic case 2020-08-03 22:42:18 -04:00
f4aede49dc Merge branch 'master' into multi-comm-tiled 2020-08-03 22:37:23 -04:00
ea900b3482 add test input template for tiled with triclinic and multi-cutoff 2020-08-03 22:17:04 -04:00
d89a047461 Simplify write data code 2020-08-03 22:08:06 -04:00
6bc65dc14c reference typos in doc 2020-08-03 20:49:02 -04:00
a921c44a4f fix bug in writing data 2020-08-03 20:48:37 -04:00
de828fceaf test for cosine/squared 2020-08-03 20:48:11 -04:00
0db1c66b03 triclinic compatibility 2020-08-03 20:16:20 -04:00
33aa96b1bf test for buck/mdf, fixed bug in broadcasting inner cutoff, typos in doc 2020-08-03 20:07:24 -04:00
6576c4cbf3 Merge pull request #2260 from akohlmey/collected-small-changes
Collected small changes
2020-08-03 18:02:17 -04:00
ca7039aa96 Merge pull request #2271 from abhiShandy/pair-tests-Aug3
Unit tests for born/coul, ufm, yukawa, soft
2020-08-03 17:23:22 -04:00
9cd0a52c44 Remove old comment 2020-08-03 16:58:56 -04:00
4126ba24c1 Move timespec2seconds to utils 2020-08-03 16:54:53 -04:00
436951fb34 Merge pull request #2270 from akohlmey/check-test-coverage
Add utility to check for missing force style tests
2020-08-03 16:47:49 -04:00
851a22802e add tests for pair style colloid in variants in several neighbor list and comm variants
this does 3 tests:
- regular neighborlist binning with single cutoff communication
- comm style brick with multi-cutoff neighborlists and communication
- comm style tiled with multi-cutoff neighborlists and communication
2020-08-03 16:16:56 -04:00
6dcd962718 fix indentation and whitespace 2020-08-03 16:09:11 -04:00
a6b3ee7a07 fix bugs in comm style tiled with multi-cutoff 2020-08-03 16:08:13 -04:00
7ed748118e add exception for single test for colloid pair style 2020-08-03 16:07:32 -04:00
8d406403bb fix typo in manual 2020-08-03 16:07:06 -04:00
d0be219419 Refactor check-styles.py 2020-08-03 14:26:55 -04:00
9db3004d0c Merge branch 'master' into multi-comm-tiled 2020-08-03 14:08:53 -04:00
f9d1a914fb Update check-packages.py 2020-08-03 13:49:37 -04:00
4549493145 Refactor check-packages.py 2020-08-03 13:47:40 -04:00
944ac44b44 Update pair coul streitz 2020-08-03 13:13:47 -04:00
2ffb29f65e Merge remote-tracking branch 'origin/master' into refactor-reading 2020-08-03 11:50:23 -04:00
23a8b3438d Merge pull request #2267 from abhiShandy/force-tests
unit tests for beck, morse, few LJ derivatives, few buck/coul and born/coul
2020-08-03 11:41:16 -04:00
d09d40af9d make check for alternate linke more restrictive: also check for linker binary. 2020-08-03 11:36:02 -04:00
865e853a41 Refactor check_tests.py 2020-08-03 10:37:45 -04:00
9bc1da64fb pair style gauss does not apply special_bonds 2020-08-03 08:42:36 -04:00
7e5e741ea1 update code for ufm/gpu to match changes in base class where uf4 is removed 2020-08-03 08:12:09 -04:00
d271ee65e8 Merge branch 'pair-tests-Aug3' of github.com:abhiShandy/lammps into pair-tests-Aug3 2020-08-03 08:03:01 -04:00
f3d7f0be2d update test reference data for pair style ufm 2020-08-03 08:01:37 -04:00
69688bbc1a must initialize scale array entries when using mixed parameters 2020-08-03 08:01:13 -04:00
c171b2ceda fix incomplete restart bug in pair style ufm 2020-08-03 08:00:54 -04:00
ad6b37d688 bug in forcelj of gauss_omp 2020-08-03 08:00:41 -04:00
d241b17c8e remove unused setting and array 2020-08-03 07:44:32 -04:00
86c6efc04c sort list of missing styles alphabetically 2020-08-03 07:30:15 -04:00
bb183345bb remove obsolete function 2020-08-03 07:29:53 -04:00
10c0b8d90e passing test for soft 2020-08-03 06:23:23 -04:00
80ceff55d5 failing test for UFM, with cosmetic change in its CPP, and doc correction 2020-08-03 06:01:59 -04:00
8eb84229bd passing tests for born-coul, gauss and yukawa 2020-08-03 05:59:44 -04:00
90028a3c71 properly handle hybrid styles when checking for missing tests 2020-08-03 00:43:41 -04:00
896a08883b add a custom python script to check the completeness of tests inputs 2020-08-03 00:12:51 -04:00
bbb4c39692 Merge branch 'wip-tests' into force-tests 2020-08-01 14:53:10 -04:00
eb91c6feb6 correct data file output format for ZBL style. update reference output. 2020-08-01 14:43:14 -04:00
cc87557fa7 tweak parameters for lj/expand to stabilize test run 2020-08-01 14:24:50 -04:00
6827eb80a8 fix missing initialization bug in lj/cut/coul/wolf and update reference data 2020-08-01 14:18:40 -04:00
a4db52c30f tweak potential parameters for better stability of test run 2020-08-01 14:05:27 -04:00
4c3dc9566c need to explicitly clamp the forces and energy in single function to zero at (implicit) pairwise cutoff 2020-08-01 14:05:04 -04:00
891be9313a fix parameters initialization bug in pair style lj/cubic 2020-08-01 13:37:07 -04:00
7158f47157 bugfix for pair style buck/coul/cut 2020-08-01 11:15:07 -04:00
34279840fc unit tests for few buck/coul and born/coul; remove mixing from buck 2020-08-01 08:52:07 -04:00
d15db7b5a7 fix the atomic numbers in ZBL test 2020-08-01 07:49:06 -04:00
86c53cb211 unit tests for few LJ derivatives and ZBL 2020-08-01 07:39:33 -04:00
2a487f5f47 unit tests for beck, morse, and few LJ derivatives 2020-08-01 07:27:39 -04:00
729cc81f31 make more use of utils::logmesg() 2020-07-31 22:16:06 -04:00
74f50ed1bd Merge branch 'master' into collected-small-changes 2020-07-31 21:51:10 -04:00
75dcd9ae29 Merge pull request #2266 from Vsevak/fix_opencl
Fix handling of CL_DEVICE_TYPE flags
2020-07-31 21:50:33 -04:00
59b5c7c154 Merge pull request #2264 from akohlmey/fix_ttm_parser_update
Refactor parsing of input files in fix ttm and fix ttm/mod
2020-07-31 18:14:54 -04:00
b6b5d369b4 Merge pull request #2265 from abhiShandy/easy-pairs
Unit tests for born, buck, lj96 and mie cut
2020-07-31 15:45:14 -04:00
db47eeb2a9 Fix handling of CL_DEVICE_TYPE flags 2020-07-31 19:21:32 +03:00
067540fef1 diversify exponents in mie/cut test 2020-07-31 12:11:24 -04:00
1017b76c71 reformat pair_coeff section in buck test for better readability 2020-07-31 12:08:00 -04:00
12924346ac unit tests for born, buck, lj96 and mie cut 2020-07-31 11:46:51 -04:00
1f1263645e Document warning about short communication cutoff vs. bond length based estimate 2020-07-31 11:03:26 -04:00
adde2439a6 Merge pull request #2263 from junghans/gitattributes
Add .gitattributes
2020-07-31 00:18:02 -04:00
8cb63194aa optimize utils::strmatch() by using const string reference 2020-07-30 23:42:03 -04:00
814e2e9aaf turn off optimization for Clang compilers when compiling atom style tester 2020-07-30 23:41:24 -04:00
1cf7a12a5f trim whitespace before parsing numbers 2020-07-30 23:40:34 -04:00
c3db11a807 fix argument index bug carried over from syncing with fix ttm 2020-07-30 23:40:09 -04:00
4b91ab0d23 add utils::trim() function to remove leading and trailing whitespace from string 2020-07-30 23:39:37 -04:00
3370d2f8de Add .gitattributes
This will help to strip out some developer-only files from the
GitHub generated tarballs.
2020-07-30 10:51:21 -06:00
45af603c04 Make patch informational too 2020-07-30 12:26:55 -04:00
09e0ad19f5 Merge branch 'collected-small-changes' of github.com:akohlmey/lammps into collected-small-changes 2020-07-30 12:21:46 -04:00
763fa426cf Enable patch status 2020-07-30 12:21:40 -04:00
6812649a65 Merge branch 'collected-small-changes' of github.com:akohlmey/lammps into collected-small-changes 2020-07-30 12:08:43 -04:00
1ae785132c Add codecov.yml 2020-07-30 12:08:15 -04:00
f0e6651780 Merge branch 'first-test' of github.com:abhiShandy/lammps into collected-small-changes 2020-07-30 11:46:06 -04:00
facb2f3c27 fix error in determining A/B parameters. outputs now match lj/mdf as expected. 2020-07-30 11:44:37 -04:00
4a28a708b9 T_initial_set array is only required during reading of the mesh 2020-07-30 10:36:03 -04:00
36f4e6789a simple test for pair-born 2020-07-30 03:30:57 -04:00
6a90a2affe consistently check for presence of all input mesh data 2020-07-29 23:43:45 -04:00
7d46aa6185 Merge pull request #2256 from akohlmey/cmake-use-alternate-linker
Use alternate/faster linker if available
2020-07-29 21:40:17 -04:00
2c3f9b111a whitespace cleanup: replace tabs and remove trailing blanks 2020-07-29 21:36:24 -04:00
8c30b320fd Merge branch 'master' into collected-small-changes 2020-07-29 21:32:16 -04:00
c355348ff9 remove local copy of "me" 2020-07-29 21:31:51 -04:00
df3d04662d Merge pull request #2259 from lammps/rcb-tiled-tri
enable comm_style tiled and load-balancing to work for triclinic boxes
2020-07-29 21:23:20 -04:00
dd001e80d2 Merge branch 'master' into rcb-tiled-tri 2020-07-29 20:37:28 -04:00
b00bfc82c8 Merge pull request #1426 from Adrian-Diaz/comm_tiled_sendself_fix
Add bugfix for comm_tiled_sendself
2020-07-29 20:35:33 -04:00
b402b00882 Merge branch 'master' into comm_tiled_sendself_fix 2020-07-29 18:23:51 -04:00
2fa642d95e document custom linker choice 2020-07-29 18:01:17 -04:00
d0b6ce8284 displace target link options (if supported by CMake version) 2020-07-29 17:46:24 -04:00
1f1767f5af convert linker choice to (advanced) choice. only for Clang and GNU at the moment 2020-07-29 17:36:34 -04:00
2923dcbbd6 Merge pull request #2258 from akohlmey/phana-update
Update phana tool for USER-PHONON from GitHub repo
2020-07-29 16:52:47 -04:00
8c849c0104 add test file for pair style lennard/mdf 2020-07-29 16:41:11 -04:00
6707e64d14 change class name and add write_data support with pair style lennard/mdf 2020-07-29 16:39:44 -04:00
d3b5e50da3 fix bugs in lennard/mdf pair style 2020-07-29 16:39:07 -04:00
59ff6b7abc Add comment explaining the change 2020-07-29 16:33:54 -04:00
cb98fa00da enable CommStyle tiled and load-balancing to work for triclinic 2020-07-29 14:30:49 -06:00
4d9781f9b6 fix typo an reorder 2020-07-29 11:10:14 -04:00
7df8a63045 update phana tool for USER-PHONON from github 2020-07-29 10:48:04 -04:00
1677b76b6c try using faster alternatives to GNU ld when building (many) test executables 2020-07-28 20:56:32 -04:00
cc0cf3b94f consolidate USER-REAXC init error message handling. avoid snprintf and buffer 2020-07-28 20:40:57 -04:00
29c50671da Merge pull request #2254 from Vsevak/fix_opencl
Fix corrupted character in GPU package
2020-07-27 20:08:18 -04:00
ae329acd3b Merge pull request #2255 from akohlmey/charset-cleanup
Charset cleanup in (most) source files
2020-07-27 19:41:36 -04:00
9db34bc18e cosmetic changes to CommTiled for comm multi style 2020-07-27 16:15:41 -06:00
477b97f257 remove some more extended ASCII characters 2020-07-27 17:33:35 -04:00
2bb5c53a47 remove/replace extended ASCII characters from comments 2020-07-27 17:15:29 -04:00
634f274a04 whitespace cleanup: replace tabs and remove trailing whitespace 2020-07-27 17:14:53 -04:00
41535d8de3 Merge pull request #2253 from stanmoore1/kk_snap_bug
Fix issue in pair_snap_kokkos
2020-07-27 14:09:43 -04:00
93f14e9bba Fix broken ASCII symbol in GPU package 2020-07-27 20:16:55 +03:00
6dc52dff73 Fix bug in pair_snap_kokkos 2020-07-27 10:30:04 -06:00
884355b335 Merge pull request #2252 from akohlmey/collected-small-changes
Collected small changes and bugfixes
2020-07-27 12:01:18 -04:00
780fb5b376 add test function to validate updated topology data after reset_atom_ids 2020-07-27 10:43:37 -04:00
1fb1a5f461 fix incorrect ubuf decoding bug in reset_atom_ids 2020-07-27 09:48:13 -04:00
94c9cdbc05 print messages about reading potential files only on MPI rank 0 2020-07-27 06:19:35 -04:00
5452f72bd9 convert fix ttm and fix ttm/mod to use tokenizer class for parsing files 2020-07-25 18:03:18 -04:00
cf83ce6745 reset_mol_ids->reset() version 2020-07-25 00:52:39 -06:00
79984e31db small i/o tweaks 2020-07-24 14:10:30 -04:00
783b28906e Merge pull request #2250 from rbberger/doc-remove-small-images
Remove unnecessary thumbnails
2020-07-23 11:50:07 -04:00
5528d4d18c trim excessive white from images 2020-07-23 00:36:15 -04:00
f60c13c845 fix incorrect link 2020-07-23 00:36:02 -04:00
c21ce0b289 make horizontally aligned image formatting consistent and display "click on" message only with html output 2020-07-23 00:35:49 -04:00
9ceb0fd6a0 update output formatting and send all to screen and log 2020-07-22 22:51:47 -04:00
11e3adc91b make sure per-atom data is initialized to zero 2020-07-22 22:51:16 -04:00
545f50f9ec limit precision 2020-07-22 22:50:57 -04:00
b97f2e5b6b Update compute_saed.rst 2020-07-22 16:48:21 -04:00
bf848c0515 Update compute_xrd.rst 2020-07-22 16:45:56 -04:00
1123add481 Update create_atoms.rst 2020-07-22 16:44:04 -04:00
7f66099732 Update dump_image.rst 2020-07-22 16:41:59 -04:00
b664050e28 Update src/neb.rst 2020-07-22 16:39:18 -04:00
22a1e452ce Update fix_wall_gran_region.rst 2020-07-22 16:35:45 -04:00
e82367b530 Update balance.rst and fix_balance.rst 2020-07-22 16:31:31 -04:00
e6f7a99ae2 Update Python_examples.rst 2020-07-22 16:27:04 -04:00
6f58ed1c83 Merge pull request #2248 from rbberger/docs-include-accel-text
Remove duplicated accelerator text passage in docs
2020-07-22 14:14:57 -04:00
89c42d081f Merge pull request #2247 from rbberger/wsl-docs-update
Update Windows Subsystem for Linux Tutorial
2020-07-22 13:47:15 -04:00
73eccefeb3 Merge pull request #2246 from rbberger/docs-theme-update
Update lammps_theme (based on latest sphinx_rtd_theme)
2020-07-22 12:55:27 -04:00
feebdf9149 print complete read_data and special output to both screen and logfile 2020-07-22 07:23:33 -04:00
f9e7b7dd19 Remove outdated or differently formatted common text blocks 2020-07-21 17:54:33 -04:00
177a93d22d Replace common text block with include 2020-07-21 17:38:56 -04:00
6acc4bc849 Update Windows Subsystem for Linux Tutorial
Fixes #1953
2020-07-21 14:39:08 -04:00
437ff2742d Update lammps_theme (based on latest sphinx_rtd_theme) 2020-07-21 12:44:10 -04:00
938175d2bc Merge pull request #2242 from akohlmey/next_lammps_version
Update version strings for next patch release
2020-07-20 22:33:37 -04:00
472de2e85a Merge pull request #2238 from yafshar/kim_fix
KIM package corrections and refactoring
2020-07-20 21:22:59 -04:00
cbdf1d3a64 consolidate mpi4py link 2020-07-20 20:59:47 -04:00
68df62b869 support verbose option 2020-07-20 20:40:20 -04:00
cac4c5d930 fix merge artifact 2020-07-20 20:40:02 -04:00
5b4275002c Merge branch 'master' into kim_fix 2020-07-20 20:27:41 -04:00
39cefc4eb3 Merge pull request #2241 from yafshar/cmake
Update the deprecated property and fix the empty value on macOS
2020-07-20 12:23:20 -04:00
6d70c393e1 Merge pull request #2239 from akohlmey/collected-small-changes
Collected small changes and fixes for the next patch release
2020-07-20 11:35:11 -04:00
1f819ca333 update the kim_param command test 2020-07-19 18:35:20 -05:00
3390e1d4c5 starting of the kim_property command test 2020-07-19 18:10:00 -05:00
02ff2068cd cosmetic changes 2020-07-19 15:19:53 -04:00
78cfd3ff79 refactor fix tune/kspace
- make use of std::string to simplify code
- skip over trying MSM, if no suitable pair style present
2020-07-19 12:15:07 -04:00
b162cefc5f for ewald we also have evflag_atom that needs to be initialized 2020-07-19 12:12:50 -04:00
0008c0eca3 need to setup bins again if binning style has be reset 2020-07-19 12:12:20 -04:00
674514f822 update the kim_param command test 2020-07-19 10:35:00 -05:00
419404a9b5 Update the KIM error messages 2020-07-19 09:24:01 -05:00
c215278ad1 Update the KIM error messages 2020-07-19 08:41:52 -05:00
c73f8a5500 Update the KIM error messages 2020-07-19 08:13:03 -05:00
c844de03ef Update the KIM error messages 2020-07-19 08:08:30 -05:00
5fec11a0db Update the KIM error messages 2020-07-19 08:04:13 -05:00
262ce37eed silence compiler warning 2020-07-19 07:19:44 -04:00
295d75f230 guess should reset_mol_IDs *after* updating bonds 2020-07-18 21:14:36 -06:00
845b918501 probably better reset_mol_id doc version 2020-07-18 20:59:17 -06:00
edd3fb7108 reset_mol_ids: documented verbose option 2020-07-18 20:51:14 -06:00
65bf187a39 update version string for patch release 2020-07-18 21:51:01 -04:00
0246feb1c2 Merge branch 'kim_fix' of github.com:yafshar/lammps into kim_fix 2020-07-18 20:47:28 -05:00
bba7e3554c simplify building aligned mutable parameter trable using fmtlib 2020-07-18 21:42:33 -04:00
82f5bbf859 update the kim_interactions command test 2020-07-18 20:31:36 -05:00
894a7e4bce update test 2020-07-18 21:10:22 -04:00
c1a650d50d Update the error messages
Update the error messages and removing an extra Error word at the
start of each message.
2020-07-18 20:00:11 -05:00
610fea20dd clean up the code 2020-07-18 19:14:00 -05:00
40a053000d update output formatting of info command 2020-07-18 18:54:03 -04:00
bc47ec5027 update the kim_init command test 2020-07-18 17:23:24 -05:00
fe6efe8861 need header file! 2020-07-18 14:29:39 -06:00
9ec5708f2f Update reset_mol_ids.cpp 2020-07-18 14:21:10 -06:00
05c0b5d5ce Update the deprecated property and fix the empty value on macOS
The `IMPORTED_LINK_INTERFACE_LIBRARIES` is deprecated and is
updated to `INTERFACE_LINK_LIBRARIES` instead.
On macOS `CMAKE_THREAD_LIBS_INIT` is empty since empty the thread
functions are provided by the system libraries. To avoid getting
`set_target_properties called with incorrect number of arguments` error
message, we put it inside double quotes.
2020-07-18 15:12:31 -05:00
e00b0e96f6 bond/react: prevent reset_mol_ids printing 2020-07-18 14:00:46 -06:00
a2547701e6 fix verbose reset_mol_ids 2020-07-18 13:59:30 -06:00
6272b7d2bf add (undocumented) verbosity option to reset_mol_ids 2020-07-18 13:52:13 -06:00
da91f81d40 bond/react:doc clarification 2020-07-18 13:42:47 -06:00
371a5c5b61 bond/react: reset_mol_ids docs 2020-07-18 12:44:34 -06:00
57f639c0e5 bond/react:reset_mol_ids keyword 2020-07-18 12:42:47 -06:00
859da19869 consistently skip death tests at runtime when using OpenMPI without exceptions 2020-07-18 13:09:17 -04:00
e0200cf3d7 consistently skip death tests at runtime when using OpenMPI without exceptions 2020-07-18 13:02:38 -04:00
211beaee48 Merge pull request #2230 from evoyiatzis/widom
Implementation of Widom insertions through a new fix widom command
2020-07-18 11:40:04 -04:00
c9dc5d90d2 Merge remote-tracking branch 'origin/master' into refactor-reading 2020-07-17 23:08:26 -04:00
55c3d139c1 add Widom spc/e example 2020-07-17 21:42:00 -04:00
bf5c1dbc9e accept const std::string as argument in Group::find() 2020-07-17 21:29:16 -04:00
eff159baf4 work around issue of the Intel compiler disguising as clang on macos 2020-07-17 21:28:35 -04:00
4d4ae93ef8 add missing group names in fix widom. refactor group definition in fix widom and gcmc 2020-07-17 21:27:58 -04:00
93ed07f445 accept const std::string as argument in Group::find() 2020-07-17 21:26:53 -04:00
0e6531e2b6 whitespace cleanup 2020-07-17 15:02:53 -04:00
117499e847 avoid floating point exception (log(0)) 2020-07-17 15:02:47 -04:00
c9342aec31 add lj example for fix widom 2020-07-17 15:02:11 -04:00
c5698ac994 Merge branch 'collected-small-fixes' of github.com:rbberger/lammps into collected-small-changes 2020-07-17 14:03:17 -04:00
95c215d5d3 silence compiler warnings 2020-07-17 14:02:18 -04:00
65f9c1abf5 bugfix: reorder instructions 2020-07-17 14:00:16 -04:00
0748b12472 when processing quoted strings, the quotes need to be removed 2020-07-17 13:58:15 -04:00
b3bd36947d add convenience function to allow variable->set() command with a single string argument 2020-07-17 13:57:54 -04:00
5c191e1e6e fix the return call status 2020-07-17 11:21:25 -05:00
cdbcacffce when processing quoted strings, the quotes need to be removed 2020-07-17 10:23:07 -04:00
a0bfe932b5 quote argument that needs to be kept intact 2020-07-17 10:08:26 -04:00
5fe83755b8 start tester tool for KIM commands 2020-07-17 02:23:48 -04:00
2fb6a61f2a refactor code to make better use of std::string and simplify using changes to Variable class API 2020-07-17 01:23:17 -04:00
63bebf58fd add convenience function to allow variable->set() command with a single string argument 2020-07-17 00:46:31 -04:00
dd7bc1d34e use const char * instead of char * so we don't need a cast for string constants 2020-07-17 00:45:58 -04:00
e2efabc6c4 Revert "simplify"
This reverts commit 2be20f424f
as this change has been integrated into a different branch
with additional changes.
2020-07-17 00:35:13 -04:00
0af7fbe98e use const char * instead of char * so we don't need a cast for string constants 2020-07-17 00:34:23 -04:00
abc9cfe30f silence compiler warnings 2020-07-17 00:30:13 -04:00
4743bf4ea0 silence compiler warning 2020-07-17 00:27:03 -04:00
b61276b59d Merge branch 'master' into kim_fix 2020-07-17 00:10:02 -04:00
74c9c15589 simplify and get rid of strtok() 2020-07-17 00:08:07 -04:00
5df8be2ca4 Replace macro with std::to_string
Following the C++ Core Guidelines, Macros must go.
2020-07-16 20:21:12 -05:00
1b0f35c241 Replace macro with std::to_string
Following the C++ Core Guidelines, Macros must go.
2020-07-16 20:19:51 -05:00
168fe438a5 Replace macro with std::to_string
Following the C++ Core Guidelines, Macros must go.
2020-07-16 20:17:59 -05:00
2ba7abe57e silence compiler warnings 2020-07-16 21:14:31 -04:00
fb7923df06 dead code removal 2020-07-16 21:14:22 -04:00
2be20f424f simplify 2020-07-16 21:13:47 -04:00
78ddce5de1 Replace macro with std::to_string
Following the C++ Core Guidelines, Macros must go.
2020-07-16 20:13:40 -05:00
08dd79b1ce Clean up the code 2020-07-16 20:09:17 -05:00
dbbc60b4b8 Clean up the code 2020-07-16 20:04:55 -05:00
dff117fe53 Clean up the code 2020-07-16 20:02:26 -05:00
f163477d3a Clean up the code 2020-07-16 20:00:09 -05:00
54b47212a1 Clean up the code & replace tabs with white spaces 2020-07-16 19:56:22 -05:00
81f8590df1 Clean up the code 2020-07-16 19:49:22 -05:00
96615ea97e Clean up the code 2020-07-16 19:47:31 -05:00
91f97fa74c Remove the previously created KIM log file. 2020-07-16 19:23:51 -05:00
585ed5e1dc Merge pull request #2228 from athomps/compute-mliap
Compute mliap updates
2020-07-16 20:20:45 -04:00
882210613e Fix the write_log_cite interface.
Fix the interface by correcting the data type. The `model_name`
variable is a `char *` and not a `string`.
2020-07-16 19:20:30 -05:00
e98056c0e8 whitespace fixes 2020-07-16 19:03:30 -04:00
31cfc99ad9 add missing empty line 2020-07-16 18:37:16 -04:00
52715cc804 Merge branch 'master' into compute-mliap 2020-07-16 18:35:49 -04:00
ad02d7a5e0 Merge pull request #2219 from lammps/write-bonus-data
Enable write_data for atom styles with bonus data. Add tester code for that and many related cleanups and bugfixes.
2020-07-16 18:21:15 -04:00
34fdfb6b81 allow fix nvt/body npt/body and nph/body to be used for groups other than "all" 2020-07-16 17:56:56 -04:00
92f194ac93 make sure output buffer is initialized 2020-07-16 17:32:17 -04:00
f344629a29 simplify 2020-07-16 17:31:54 -04:00
209d3ff3ff fix typo 2020-07-16 17:31:46 -04:00
35b030015d Merge branch 'master' into write-bonus-data 2020-07-16 12:15:59 -04:00
9a13ad5230 Merge pull request #2206 from ohenrich/mc-fix-bond-create-angle
New fix_bond_create_angle class
2020-07-16 11:54:04 -04:00
ee10b200e0 Merge branch 'master' into write-bonus-data 2020-07-15 22:10:38 -04:00
25a836b729 reformat and rephrase text about availability of fix bond/create/angle only keyword 2020-07-15 21:32:22 -04:00
52b30b11ec add fix bond/create/angle to list in Fix command page 2020-07-15 21:31:22 -04:00
d7ef1b007d Merge branch 'master' into mc-fix-bond-create-angle 2020-07-15 21:21:35 -04:00
29e2c82d71 fix broken line wrap. 2020-07-15 21:00:43 -04:00
4dc61f7f2a make frenkel book anchors globally unique 2020-07-15 20:56:50 -04:00
300beb819b change from DOS/Windows CR/LF to LF 2020-07-15 20:54:58 -04:00
3287f1cddc fully integrate fix widom into manual. fix some style issues and reindent 2020-07-15 20:54:17 -04:00
94464f5390 Merge branch 'master' into widom 2020-07-15 20:46:39 -04:00
581d47a10a move fix widom from USER-MISC to MC package 2020-07-15 20:46:31 -04:00
438346a936 Merge pull request #2237 from yafshar/memory
Fix the system-dependent function call to `malloc_usable_size`.
2020-07-15 20:42:49 -04:00
dff2e93e2a Merge pull request #2236 from stanmoore1/kk_qeq_nevery
Fix issues in Kokkos fix qeq/reax
2020-07-15 20:41:00 -04:00
508a38a7fa Fix the system-dependent function call to malloc_usable_size.
Fix the system-dependent function call to get the size of the
block of memory allocated from the heap.
2020-07-15 17:49:49 -05:00
71344aaa28 Merge branch 'master' of https://github.com/lammps/lammps into kk_qeq_nevery 2020-07-15 16:18:56 -06:00
181b7cf34f Merge branch 'master' into write-bonus-data 2020-07-15 18:14:49 -04:00
0105d1caa5 Merge pull request #2212 from akohlmey/compute-chunk-scalar
Get number of chunks from compute chunk/atom
2020-07-15 18:13:48 -04:00
1021f5753b Merge pull request #2218 from lammps/reset-molecules
new reset_mol_ids command
2020-07-15 18:09:02 -04:00
dee38c26b3 Changed paragraph as per request 2020-07-15 22:51:51 +01:00
a392f212ee Fix issues in Kokkos fix qeq/reax 2020-07-15 15:49:26 -06:00
73a076daf3 don't set CMAKE_TUNE_FLAGS to anything by default 2020-07-15 16:19:48 -04:00
8949b2f165 add recently added names to false positives list 2020-07-15 15:31:12 -04:00
bf37e6aae1 Merge branch 'master' into write-bonus-data 2020-07-15 15:20:34 -04:00
7a312ca8d8 Merge pull request #2231 from stanmoore1/reax_hybrid
Fix issue with Kokkos ReaxFF and pair hybrid
2020-07-15 14:35:35 -04:00
28ee835103 Update fix_widom.rst 2020-07-15 20:35:15 +02:00
1a738f80e2 Update false_positives.txt 2020-07-15 20:14:17 +02:00
4cbe095444 Merge pull request #2234 from akohlmey/collected-small-fixes
Collected small fixes and unittest updates
2020-07-15 14:13:21 -04:00
41a7557cc9 first attempt of a documentation file 2020-07-15 18:53:04 +02:00
74aa1d482a Add missing sync 2020-07-15 10:48:39 -06:00
b37b45c817 use fmtlib to remove BIGINT_FORMAT 2020-07-15 11:55:08 -04:00
aa82608142 print warning for unknown/unsupported CUDA versions 2020-07-15 11:28:33 -04:00
a082895b90 update CMake script for GPU package to include handling of Arch 8.0 and CUDA 11 2020-07-15 11:08:06 -04:00
8108063f47 small bug fix for gather() 2020-07-15 12:21:03 +02:00
6c5d928358 small bug fix for gather() 2020-07-15 11:45:23 +02:00
2580ca78f4 guard better against 32-bit overflows for reax/c lists 2020-07-15 00:13:33 -04:00
e3818f031b don't use error class if pointer variable has not been initialized 2020-07-15 00:12:31 -04:00
2fb0f95324 check against BODY package for body styles 2020-07-14 18:41:52 -04:00
ad818717cc complete tester module for atom style body/nparticle 2020-07-14 18:36:50 -04:00
a7a63ee3fb Merge branch 'write-bonus-data' of github.com:lammps/lammps into write-bonus-data 2020-07-14 16:48:01 -04:00
d37bb0fd6f update intel compiler requirements and document alignment issues 2020-07-14 16:24:17 -04:00
449d7be8f8 updated rules for rounded body particles 2020-07-14 13:25:17 -06:00
1ddd8aa97c Merge branch 'master' into collected-small-fixes 2020-07-14 14:00:24 -04:00
d3392dba45 update tester some more 2020-07-14 13:59:55 -04:00
fd2b5b1cd8 switch completed section from EXPECT to ASSERT 2020-07-14 12:45:54 -04:00
bc3860b462 must advance buffer while package bonus items, but only when a buffer is given 2020-07-14 12:45:22 -04:00
b33974cd19 add code to check for duplicate atom IDs in Bodies section 2020-07-14 12:44:50 -04:00
be440c7125 revert incorrect zeroing of non-existing inertia array elements 2020-07-14 12:44:24 -04:00
dcbdc7452b Don't need virtual keyword 2020-07-14 09:57:04 -06:00
d6e6b840e9 update body/nparticle tester 2020-07-14 11:06:06 -04:00
548629958e zero all six moments of inertia if small. 2020-07-14 11:05:44 -04:00
001dcb6bb1 Fix issue with Kokkos ReaxFF and pair hybrid 2020-07-14 09:02:57 -06:00
9068d17afc Merge pull request #2229 from ellio167/pair_kim_before_box
Update pair_kim.cpp so settings() may come before box is defined
2020-07-14 10:24:05 -04:00
113825f8fc silence compiler warning 2020-07-14 08:12:51 -04:00
20824203ab Merge branch 'write-bonus-data' of github.com:lammps/lammps into write-bonus-data 2020-07-14 08:11:29 -04:00
18928c6602 start writing tester for body/nparticle 2020-07-14 08:11:18 -04:00
4b9c2ab1f1 start writing tester for body/nparticle 2020-07-14 07:21:25 -04:00
a88237df99 source code for fix widom 2020-07-14 13:17:20 +02:00
ea1d447703 fix bug in tester for atom style tri 2020-07-13 21:49:18 -04:00
5a73b1de98 fix typo, reformat paragraph 2020-07-13 21:48:15 -04:00
e5d532c2c1 simplify and make more readable using utils:: functions 2020-07-13 18:59:21 -04:00
40e3fcd750 tweak output format 2020-07-13 18:58:43 -04:00
46675361a6 remove unused class members 2020-07-13 18:58:35 -04:00
315c829bd2 tweak box output format to include decimal point 2020-07-13 15:59:47 -04:00
c589dd5894 consistent initialization and setting of _nthreads and comm->nthreads 2020-07-13 15:59:29 -04:00
6c28adcf3b make sure _need_tag is initialized 2020-07-13 15:59:05 -04:00
da66516dec use references when creating styles 2020-07-13 09:40:58 -04:00
3847a3000c paranoia 2020-07-12 21:40:30 -04:00
f8ad39e7d1 simplify fix generation for package commands 2020-07-12 21:40:22 -04:00
1c5c2d8f22 Merge branch 'master' into reset-molecules 2020-07-12 20:36:34 -04:00
db289ba0b3 update all force style reference results after refactoring of test codes 2020-07-12 20:36:10 -04:00
24b5cd7dec rename test programs to be consistent with the other programs in the unittest tree 2020-07-12 19:22:14 -04:00
9cbb2e9df5 refactor force-style tester programs to get rid of stringstream and local buffers
this uses now fmtlib and also outputs forces sorted by atom id
similarly, for all tests it is make certain that the local tag variable is updated
2020-07-12 19:17:51 -04:00
38011f6ac4 add test for pair style kim 2020-07-12 17:21:35 -04:00
b65f6b3b61 Merge branch 'pair_kim_before_box' of github.com:ellio167/lammps into collected-small-fixes 2020-07-12 16:36:00 -04:00
ed1bdb8ed4 update output formatting 2020-07-12 16:33:47 -04:00
00413ae956 add test for atom style tri 2020-07-12 16:32:59 -04:00
8f95b4a5d9 add tests for deleted bonds and angles to bond/angle tests suites 2020-07-12 15:48:21 -04:00
60f078a8f9 fix buffer size and format bugs in atom_vec_tri.cpp 2020-07-12 15:46:56 -04:00
66274e7863 Update pair_kim.cpp so settings() may come before box is defined
Addresses #2215
2020-07-12 14:23:47 -05:00
116c2a56ca Removed old files 2020-07-11 21:00:41 -06:00
031cae8e49 Fixed spelling errors 2020-07-11 20:31:38 -06:00
38d9c0bedf tweak output formatting 2020-07-11 21:44:31 -04:00
9e1d560fda refactor using fmtlib and utils:: 2020-07-11 21:44:13 -04:00
095c6a9850 Finished cleaning up and testing. MLIAPData class is now fully integrated with ComputeMLIAP and PairMLIAP 2020-07-11 19:01:16 -06:00
5f14d5c87f must not override flag for negative angles and bonds 2020-07-11 18:36:19 -04:00
25e54bd68e Merge branch 'master' into write-bonus-data 2020-07-11 18:31:44 -04:00
284b1618f9 Merge pull request #2227 from akohlmey/collected-small-fixes
Collected small updates and bugfixes
2020-07-11 18:30:27 -04:00
83291fdd67 may not use pair_style kim before box is defined
NOTE: this will not happen when the kim_init and kim_interactions commands are used.
2020-07-11 18:07:25 -04:00
f969d9ab72 add space for terminating NULL byte in MPIIO dump styles.
closes #2225
2020-07-11 13:19:08 -04:00
f307d7f5f9 count total number of styles including aliases, suffixes, and undocumented 2020-07-11 13:18:44 -04:00
cd0b034cab adjust regex for removed styles to correctly handle command styles 2020-07-11 13:18:33 -04:00
b3060bc48e add suppressions for googletest 2020-07-11 13:18:14 -04:00
e42342ff51 zero out additionally allocated struct Param storage 2020-07-11 13:18:04 -04:00
8359a4384a more OpenMPI suppressions 2020-07-11 13:17:51 -04:00
c6dc8b5414 fix initialition issue 2020-07-11 13:17:39 -04:00
9fe0b1cb5e ewald_order needs to be saved in restart 2020-07-11 13:17:24 -04:00
4778887243 fix memory leak in pair style sw/intel for good 2020-07-11 13:17:10 -04:00
510d5277c1 fix typo 2020-07-11 13:16:58 -04:00
b49f0a6a09 avoid memory leak in pair style sw/intel 2020-07-11 13:16:36 -04:00
4b2c1f5edd some more OpenMPI suppressions 2020-07-11 13:16:25 -04:00
d4da99562f use fmtlib for writing data file coefficients. use mixed coefficients for PairIJCoeffs 2020-07-11 13:16:01 -04:00
26e21852ff several fixes to address issues detected by valgrind
- make sure g_ewald_6 is not accessed uninitialized
- fix memory leak
- do not override g_ewald_6 if it is explicitly set
2020-07-11 13:15:37 -04:00
8eb7791342 avoid googletest stalling on exit tests when using OpenMPI 2020-07-11 13:15:16 -04:00
207232c1a3 avoid illegal free() 2020-07-11 13:12:50 -04:00
ed452c3624 synchronize exception based and non-exception based code paths 2020-07-11 13:12:34 -04:00
e6a8f3c8c0 use parenthesis to correct precedence 2020-07-11 13:10:37 -04:00
17d59a4342 small tweak 2020-07-11 13:06:58 -04:00
6f775f6592 fix typo 2020-07-11 13:06:43 -04:00
d0c544224f avoid exception when having a command fail due to an empty string 2020-07-11 13:06:31 -04:00
40e59b27a7 add prototypes for exception handling functions 2020-07-11 13:06:05 -04:00
f8321d77d8 add missing symlink 2020-07-11 13:05:41 -04:00
d32000239b refactor tester 2020-07-11 13:05:03 -04:00
e2e4305fe9 Merge pull request #2226 from akohlmey/ubuntu-stable
Update documentation to recommend lammps-stable packages for Ubuntu
2020-07-11 13:02:00 -04:00
8396ade280 update information about the ubuntu binaries to recommend the new stable packages 2020-07-10 22:50:47 -04:00
6c6c47ce9c Converted pair mliap to use mliap class 2020-07-10 17:19:02 -06:00
6c08503dff Created MLIAP class for data, passes all tests 2020-07-10 16:25:28 -06:00
64dad33c12 whitespace fixes 2020-07-10 18:22:11 -04:00
a5a1706f82 Merge branch 'write-bonus-data' of github.com:lammps/lammps into write-bonus-data 2020-07-10 16:17:22 -06:00
92d225a68c write_data support for body style rounded/polyhedron 2020-07-10 16:17:07 -06:00
07e05300c9 Created MLIAP class for data 2020-07-10 16:08:19 -06:00
f360cca1a3 Created MLIAP class for data 2020-07-10 16:04:04 -06:00
a28db101cc add checks for atom style bond with newton off. add basic test for atom style angle 2020-07-10 17:44:05 -04:00
0825e71a5a whitespace fixes 2020-07-10 13:21:22 -04:00
9b3ffa5487 enables body style rounded/polygon to write to data files 2020-07-10 10:42:36 -06:00
a402de41b7 finalize atom style tester changes 2020-07-10 10:47:30 -04:00
772d75a63a update tester for renaming reset_ids to reset_atom_ids 2020-07-10 10:29:55 -04:00
df63d4147d Merge branch 'reset-molecules' into write-bonus-data 2020-07-10 10:25:08 -04:00
8102045fdb add initial implementation for atom style bond tester 2020-07-10 10:24:54 -04:00
9be30dcf61 add space for terminating NULL byte in MPIIO dump styles.
closes #2225
2020-07-10 09:22:44 -04:00
0c89b517a5 avoid segfaults if fewer than 10 atoms or bounding box length is zero 2020-07-10 08:25:37 -04:00
ab683a03ad start tester for atom style hybrid full ellipsoid 2020-07-10 00:12:57 -04:00
f0af7c686a more death tests to reach 100% coverage 2020-07-09 21:39:55 -04:00
e38f970676 Extended to handle gradgradflag 0/1 options 2020-07-09 19:23:57 -06:00
0d570f5577 Removed a lot of LAMMPS dependence from Descriptor and Model classes 2020-07-09 19:22:41 -06:00
d15264a668 update and expand tester code for reset_mol_ids changes 2020-07-09 21:18:58 -04:00
bade009b6c remove debug code 2020-07-09 20:58:39 -04:00
49780480a8 count total number of styles including aliases, suffixes, and undocumented 2020-07-09 20:52:57 -04:00
9ec77585ea make compress yes the default 2020-07-09 20:46:45 -04:00
9c97ca11fe adjust regex for removed styles to correctly handle command styles 2020-07-09 20:46:31 -04:00
e0e24799c2 simplify formulations a little bit. update example command lines 2020-07-09 19:52:49 -04:00
4a1acffde9 whitespace fixes 2020-07-09 19:36:58 -04:00
9e83279887 minor adjustments to new reset_mol_ids command 2020-07-09 15:40:24 -06:00
f71513f483 update for atom style ellipsoid tester 2020-07-09 11:56:07 -04:00
cc9df9a76d add test module for atom style line 2020-07-09 11:55:52 -04:00
71f13cee9d add missing aspherical particle info to restart files 2020-07-09 11:21:59 -04:00
d7efa8d523 don't do zero byte allocations 2020-07-09 09:26:25 -04:00
0679c01c4b add suppressions for googletest 2020-07-09 09:26:07 -04:00
2b1ca89b57 zero out additionally allocated struct Param storage 2020-07-09 00:31:08 -04:00
ea5015c630 more OpenMPI suppressions 2020-07-09 00:05:18 -04:00
d0cfb0ccae fix initialition issue 2020-07-08 23:49:18 -04:00
e18a11d6bd ewald_order needs to be saved in restart 2020-07-08 23:48:58 -04:00
bebd10712a fix memory leak in pair style sw/intel for good 2020-07-08 22:04:55 -04:00
909bc5a801 fix typo 2020-07-08 21:35:54 -04:00
7ee73e44ad will need ellipsoid field in restart file 2020-07-08 21:18:09 -04:00
4da8ec39de complete testing ellipsoids short of having restart support. 2020-07-08 21:13:28 -04:00
ecc5d3e353 must copy/multiply the numbers of ellipsoids,lines,tris,bodies 2020-07-08 21:12:29 -04:00
7071cff481 avoid memory leak in pair style sw/intel 2020-07-08 20:11:17 -04:00
240c33b503 some more OpenMPI suppressions 2020-07-08 20:10:52 -04:00
f59e391713 avoid leaking empty allocations 2020-07-08 20:10:40 -04:00
2016333cf0 use fmtlib for writing data file coefficients. use mixed coefficients for PairIJCoeffs 2020-07-08 20:09:23 -04:00
7591343702 several fixes to address issues detected by valgrind
- make sure g_ewald_6 is not accessed uninitialized
- fix memory leak
- do not override g_ewald_6 if it is explicitly set
2020-07-08 20:07:54 -04:00
5918d9e6c7 avoid googletest stalling on exit tests when using OpenMPI 2020-07-08 16:31:36 -04:00
bda245339e avoid illegal free() 2020-07-08 16:29:40 -04:00
6cd2c8d117 synchronize exception based and non-exception based code paths 2020-07-08 10:18:01 -04:00
d6665aba99 refactor tester 2020-07-08 10:08:00 -04:00
a98d21f002 Added gradgradflag option to compute mliap 2020-07-07 20:43:40 -06:00
a7369e76cd Added gradgradflag option to compute mliap 2020-07-07 20:42:03 -06:00
06a199f7d0 Added gradgradflag option to compute mliap 2020-07-07 20:28:18 -06:00
a43428fd1b use auto to simplify 2020-07-07 22:19:07 -04:00
cd739c2782 silence compiler warnings 2020-07-07 22:18:52 -04:00
1898fae3f6 simplify 2020-07-07 22:18:37 -04:00
5cef86d7b7 add missing MPI call 2020-07-07 21:37:33 -04:00
8fbc8a7148 make more use of fmtlib and replace fprintf with fputs where possible 2020-07-07 21:34:34 -04:00
c0f1472385 use parenthesis to correct precedence 2020-07-07 21:21:32 -04:00
6e3e13f2a8 remove unused variable 2020-07-07 20:53:50 -04:00
9a268da7de remove unneeded typecasts and use fmt::print() instead of fprintf() 2020-07-07 20:53:42 -04:00
4c67822e6b remove unneeded typecasts 2020-07-07 20:27:01 -04:00
e459ee8a58 whitespace fixes 2020-07-07 20:25:59 -04:00
61e3b41908 Merge pull request #2220 from lammps/doc-radians
clarify units for energy terms with angles
2020-07-07 20:13:56 -04:00
6239a579e8 clarify units for energy terms with angles 2020-07-07 15:19:17 -06:00
416467a154 update reset_mol_ids tests for the latest changes 2020-07-07 17:14:54 -04:00
fd95fc98c5 add support for auto offset and singlezero option 2020-07-07 17:14:29 -04:00
d3853af4be add singlezero keyword to compute fragment/atom to give all single non-bonded atoms an ID of 0 2020-07-07 17:13:43 -04:00
12f62583f9 whitespace cleanup 2020-07-07 13:56:50 -04:00
5c59f6af87 Merge branch 'reset-molecules' of github.com:lammps/lammps into reset-molecules 2020-07-07 13:48:25 -04:00
88fc9360c0 resolve conflicts 2020-07-07 11:46:05 -06:00
37d56a6bf6 small cleanup in "deprecated" styles 2020-07-07 13:40:15 -04:00
955bff7c4e add body support, change bonus buf to 1d so can be variable length 2020-07-07 11:34:30 -06:00
94e9b3bc82 rename reset_ids command to reset_atom_ids 2020-07-07 13:32:00 -04:00
7e140399db add (initial) testing for ellipsoid atom style 2020-07-07 12:36:17 -04:00
f16c6f40a7 shape is converted from diameter to radius, so we have to scale back on writing 2020-07-07 12:24:04 -04:00
94d98b6aea no typecasts needed when outputting ubuf integers with fmtlib auto format 2020-07-07 11:40:01 -04:00
bdac1ae3e7 add missing return statements 2020-07-07 11:14:52 -04:00
0944eda391 final details for offset keyword added to reset_mol_ids 2020-07-07 09:07:48 -06:00
7870a89133 added note to doc page 2020-07-07 08:48:24 -06:00
d6ebf3cd46 Merge branch 'reset-molecules' of github.com:lammps/lammps into reset-molecules 2020-07-07 08:38:03 -06:00
fcc6ed3a58 add offset option to reset_mol_ids command 2020-07-07 08:37:48 -06:00
169206790a small tweak 2020-07-07 10:29:43 -04:00
de7f02e48b fix typo 2020-07-07 09:54:16 -04:00
bb9ab025c1 avoid exception when having a command fail due to an empty string 2020-07-07 09:51:39 -04:00
0b1443ed23 add prototypes for exception handling functions 2020-07-07 09:51:02 -04:00
53d20c9ebc add missing symlink 2020-07-06 21:44:39 -04:00
960addcc2c simplify code string/fmtlib code some more 2020-07-06 21:26:49 -04:00
2351f99bef add (incomplete) tester for reset_mol_ids (with a little use of reset_ids, too) 2020-07-06 21:26:11 -04:00
89f0116eab fix communication data conversion bug corrupting bond list 2020-07-06 21:12:55 -04:00
7918919d30 enable write_data for atom styles with bonus data 2020-07-06 17:30:45 -06:00
91a8df1903 Modified files according to request 2020-07-06 20:20:28 +01:00
d37e943e8d refactor tester 2020-07-06 14:12:50 -04:00
836570ec26 update docs 2020-07-06 14:12:37 -04:00
58cd6a160c Merge branch 'master' into reset-molecules 2020-07-06 14:07:48 -04:00
6bf329098e Merge pull request #2216 from ndtrung81/tersoff-gpu
Cleanup and bugfixes for some 3-body pair styles in the GPU package
2020-07-06 13:35:12 -04:00
a1011b606e new reset_mol_ids command 2020-07-06 10:50:34 -06:00
9e96b71703 Merge pull request #2214 from akohlmey/kspace-tests
Add unit tests for some kspace styles and more pair styles
2020-07-06 12:48:09 -04:00
2977a8aa15 Merge pull request #2211 from athomps/compute-mliap
Add compute style mliap to MLIAP package
2020-07-06 12:47:41 -04:00
d1b5b0a168 Merge pull request #2210 from ohenrich/user-cgdna
Update of example input and log files
2020-07-06 12:47:09 -04:00
d768069cfe Merge pull request #2205 from akohlmey/collected-small-changes
Collected small changes for the next patch release
2020-07-06 12:46:16 -04:00
5d0800beef Merge pull request #2204 from rbberger/doc-changes
Documentation Changes: split pair_lj.rst
2020-07-06 12:19:06 -04:00
47d77530e2 updated as requested by @sjplimp 2020-07-06 11:45:16 -04:00
022252dde0 add a paragraph to the output howto explaining how ambiguity is resolved 2020-07-06 11:13:23 -04:00
9ec72d1406 add tests for unknown commands, quit, and reset_timestep 2020-07-06 10:26:04 -04:00
f1abfe2411 avoid segfault when calling the log command without arguments 2020-07-06 10:25:37 -04:00
461633e6f6 add unit tests for the suffix, thermo, and timestep commands 2020-07-06 00:11:13 -04:00
83d58ba57d we may not use "suffix on" before a suffix is defined. switching back to a non-hybrid suffix must set suffix2 to NULL 2020-07-06 00:10:43 -04:00
1df59c4b95 change lammps2pdb.pl to only ignore the first line of a data file. whitespace fixes 2020-07-05 23:36:00 -04:00
fe12ea2734 simplify compute creation 2020-07-05 22:46:48 -04:00
134a2e8dd6 use fmtlib and utils::logmesg() in fix msst 2020-07-05 22:37:59 -04:00
759797733d Generalized the variable and function names 2020-07-05 18:58:32 -06:00
a0157f8063 use fmtlib consistently when writing data files 2020-07-05 17:16:58 -04:00
443cc4445e have compute property/atom output shape parameters as diameters not radii consistent with the manual 2020-07-05 16:44:44 -04:00
e2a07acb71 add test for units command 2020-07-05 13:20:23 -04:00
ca24cd5006 simplify tests for failures with a varyadic macro 2020-07-05 12:48:52 -04:00
ebfe7f68af More cleanup 2020-07-05 00:20:28 -05:00
c488e6208d Similar bug fixes to vashishta/gpu 2020-07-04 23:52:32 -05:00
69052fa337 add test for lj/mdf 2020-07-05 00:28:02 -04:00
4dee43cc2d adjust accepted relative error for compiler optimization, make pppm/disp inputs 3x faster 2020-07-05 00:10:47 -04:00
84ded03e24 add tests for some core-shell package pair styles 2020-07-04 23:43:15 -04:00
8f6e454522 single functions for CORESHELL styles are not implemented 2020-07-04 23:40:28 -04:00
585466929f add tests for pppm/disp/tip4p and lj/long/tip4p/long 2020-07-04 23:21:57 -04:00
a314b40aa0 skip testing broken pppm/disp/intel style 2020-07-04 23:07:50 -04:00
6e580bbdb5 add tests for long-range dispersion styles 2020-07-04 22:55:59 -04:00
3f068f7671 partial reformat, fix bug in single function 2020-07-04 22:55:38 -04:00
adacc7f2a4 Similar bug fixes for tersoff/mod/gpu and tersoff/zbl/gpu; some cleanup for sw/gpu 2020-07-04 19:08:55 -05:00
11099bb3f7 silence compiler warnings 2020-07-04 19:23:06 -04:00
2eec6c7f65 exclude MSM tests when compiling with single precision 2020-07-04 18:26:00 -04:00
0461599d0a reduce base precision as required when running tests with pppm and FFT_SINGLE 2020-07-04 18:13:55 -04:00
37b2da637d fix KOKKOS bug for FFT_KISSFFT and FFT_SINGLE 2020-07-04 17:39:07 -04:00
df40ffddf3 add some more tests for pair styles 2020-07-04 17:24:28 -04:00
ffe8e1c0e9 add tests for kspace styles using the pair style tester tool 2020-07-04 17:22:27 -04:00
fcec94579c skip tests for single and extract when testing kspace styles (and pair styles are disabled) 2020-07-04 17:21:51 -04:00
75977367a1 fix memory leak 2020-07-04 17:21:19 -04:00
34cfe07f97 fix energy computation bug in pair style nm/cut/omp 2020-07-04 17:20:47 -04:00
37b2778d4b Remove debug output 2020-07-04 13:34:35 -04:00
cfaa3be898 reduce screen output precision 2020-07-04 08:26:00 -04:00
6f8b8c2f71 more application of fmtlib and utils::logmesg() 2020-07-04 08:25:24 -04:00
9de3077b19 change misleading source code formatting 2020-07-04 05:12:35 -04:00
de815ed6ba must not pass NULL pointer now that we use const std::string references 2020-07-04 04:48:16 -04:00
fac3c70d02 update style 2020-07-04 04:47:38 -04:00
9f733fb305 Removed unused variables 2020-07-04 00:23:34 -05:00
6de020805f Fixed a bug with tersoff/gpu with building the short neighbor list 2020-07-03 23:55:26 -05:00
c37b5e50b1 flag error when trying to compute an average of an empty vector 2020-07-03 22:35:53 -04:00
53415592d2 compute gyration/shape/chunk did not update the number of local array rows 2020-07-03 22:20:28 -04:00
14321d1fa0 add option to compute chunk/atom to access the number of chunks as a global scalar 2020-07-03 22:19:44 -04:00
c3f8644613 Merge branch 'master' into compute-mliap 2020-07-03 14:26:38 -06:00
7fe2df423f Added a package README 2020-07-03 14:22:43 -06:00
8dae5d5fc7 Added special_bonds command to input files 2020-07-03 21:03:24 +01:00
feec9673d8 Fixed html and spelling warnings 2020-07-03 14:03:00 -06:00
9d0aee7426 Added doc page for compute mliap and updated examples 2020-07-03 13:43:51 -06:00
def0cf8a7b Corrected typo 2020-07-03 17:54:31 +01:00
59aa8a5e12 Modified files according to PR 2020-07-03 17:48:49 +01:00
fadfb1b482 Allow changing CMAKE_CXX_EXTENSIONS option to resolve #2079 2020-07-03 12:41:49 -04:00
543371374a typo fix 2020-07-03 11:42:31 -04:00
ab785e8a89 Add Coulomb sections in TIP4P page 2020-07-03 11:37:11 -04:00
52b92e743e Add missing reference 2020-07-03 11:33:51 -04:00
1815ab610e remove hard dependency and configure spelling extension only if it can load enchant properly 2020-07-03 11:26:43 -04:00
735f9ad592 address logic error with check for KOKKOS version of hybrid styles 2020-07-03 09:01:59 -04:00
f9dc2b7ca8 Added fix_bond_create_angle files 2020-07-03 13:42:16 +01:00
089c4ed5d9 Added fix/bond/create/angle class and docu 2020-07-03 09:21:00 +01:00
17e419e251 Merge branch 'master' into user-cgdna 2020-07-03 08:19:48 +01:00
2c64809cd8 enlarge buffer for guessed file name 2020-07-02 23:35:25 -04:00
7e16a17f31 use consistently the name of the (unaccelerated) pair style in the potential file reader error messages 2020-07-02 23:23:25 -04:00
0b298c7193 add tests for supported and unsupported unit conversion when opening potentials 2020-07-02 23:07:01 -04:00
d331e75a14 tweak test name 2020-07-02 22:39:08 -04:00
28bbb6afbc Doc page for compute mliap 2020-07-02 17:09:10 -06:00
07afe1c66d Added basic element map 2020-07-02 16:14:15 -06:00
40088f558c Revert "Added fix bond/create/angle code and docu"
This reverts commit 16eab647d4.
2020-07-02 23:11:50 +01:00
db43aadf09 Got compute working for quadratic model 2020-07-02 15:05:14 -06:00
cae9788d42 Changed the compute examples to expose effect of different list orderings 2020-07-02 14:43:48 -06:00
307f54611f use doubles to avoid multiple integer overflows in slope() function 2020-07-02 16:43:00 -04:00
f598ae7ebf update/add error message for using hybrid pair styles with KOKKOS 2020-07-02 16:40:47 -04:00
bf8043fdb8 Correctly reproduced examples/in.snap.compute, not yet for quadratic case 2020-07-02 14:34:11 -06:00
bc36511767 Correctly reproduced examples/in.snap.compute, not yet for quadratic case 2020-07-02 14:32:47 -06:00
3a014a5430 add unit tests for some file operations 2020-07-02 14:50:56 -04:00
4660c043d8 fix typo 2020-07-02 13:31:02 -04:00
a524eaf424 add a few more tests 2020-07-02 10:27:35 -04:00
8929ba42cd enable exceptions by default when testing is enabled, so we can test for failures 2020-07-02 09:50:15 -04:00
c3fe0e77c2 expose guesspath function and add unit test 2020-07-02 09:13:57 -04:00
2a4e51fa38 Fixed a few problems, still not quite matching compute snap 2020-07-01 17:11:02 -06:00
84ee52a6e5 add false positive 2020-07-01 19:09:11 -04:00
7350dd61d5 Tweaked input to match snap/in.snap.compute 2020-07-01 17:06:55 -06:00
70d3d56944 add minimal doc page for compute smd/ulsph/effm 2020-07-01 18:44:24 -04:00
ed56878271 remove specific dump styles from overview page 2020-07-01 18:43:53 -04:00
791bb9f6d5 Update mentions of soft variants 2020-07-01 17:14:30 -04:00
c57564252c Added descriptor file for compute mliap 2020-07-01 15:07:37 -06:00
aee3d9f2cd Generated working example, not quite correct 2020-07-01 15:03:45 -06:00
7671d12ef8 added some more detail to the bond special doc page 2020-07-01 14:55:48 -06:00
0a18c52414 Split pair_lj.rst into three files 2020-07-01 14:27:06 -04:00
c7a31aea97 force environment variable 2020-07-01 09:39:47 -04:00
8d12581f16 silence compiler warnings 2020-07-01 09:39:37 -04:00
558d2eb84f Merge pull request #2203 from akohlmey/collected-small-changes
Various small fixes and cleanups. Bugfixes for atom style hybrid
2020-07-01 06:24:28 -04:00
0a9dd81288 silence compiler warnings 2020-07-01 05:53:46 -04:00
0363fe9b17 revive (some) dead code and add missing force computation/addition 2020-07-01 05:42:53 -04:00
9c7005a91c It compiles, but not yet working 2020-06-30 19:14:01 -06:00
971ca4fe44 add missing lines for atom_vec comm bugfix 2020-06-30 19:20:34 -04:00
503a1f2246 still more dead code 2020-06-30 18:44:00 -04:00
8fd46095ae remove more dead code 2020-06-30 18:41:09 -04:00
9279431593 bugfix for hybrid atom styles from @sjplimp fixing bug reported by @ohenrich 2020-06-30 18:34:46 -04:00
4492d61625 dead code removal 2020-06-30 18:14:47 -04:00
778d431d4c reduce compiler warnings about unused parameters 2020-06-30 18:08:25 -04:00
10dcb08760 remove unused variable 2020-06-30 18:08:06 -04:00
6af407d01e remove trailing whitespace 2020-06-30 17:48:18 -04:00
1035dcd4cc fix possible bug in compute sna 2020-06-30 16:33:57 -04:00
19ee89fa10 use a hard error instead of changing settings without updating the underlying data structures controlled by it 2020-06-30 16:33:32 -04:00
ad38b5d306 whitespace fixes 2020-06-30 16:32:41 -04:00
edfb4076ff remove dead code and unused variables 2020-06-30 16:32:30 -04:00
eafcc06670 secs -> seconds 2020-06-30 13:56:35 -04:00
d4c7455197 reduce output precision 2020-06-30 13:49:50 -04:00
b34b58c713 must not delete atom substyles twice 2020-06-30 13:27:27 -04:00
cccd04f46b Merge branch 'collected-small-changes' of github.com:akohlmey/lammps into collected-small-changes 2020-06-30 12:36:06 -04:00
7488f22981 reduce excess precision in some output data 2020-06-30 10:11:52 -04:00
0f094c2501 Add PyYAML to Fedora 32 container 2020-06-30 10:05:14 -04:00
af2e1bf7c6 Update Ubuntu 18.04 GPU container 2020-06-30 09:38:28 -04:00
2a2219d049 reduce excess precision in some output data 2020-06-30 00:37:32 -04:00
911b95fdc9 std::string.find_last_of() wants a string not a character as argument 2020-06-29 23:26:01 -04:00
f958cacbb4 temporarily add atom style full to list of dependencies for Pair::single() test 2020-06-29 19:36:06 -04:00
ce4ca0e640 tweak epsilon to make test pass with optimization 2020-06-29 19:35:02 -04:00
a73f1d4f03 Merge pull request #2200 from akohlmey/next_lammps_version
Update version strings for next patch release
2020-06-29 14:24:02 -04:00
88a574ff8c Merge pull request #2201 from akohlmey/more-fmtlib-use
Make more use of fmtlib and utils::logmesg()
2020-06-29 13:45:43 -04:00
5c08ce0818 nb3b/harmonic parameters are in real units 2020-06-29 13:28:32 -04:00
3eda735d29 Merge branch 'master' into more-fmtlib-use 2020-06-29 13:04:22 -04:00
6ace98b64e simplifications in REPLICA 2020-06-29 12:35:20 -04:00
5263e457cb Merge pull request #2199 from akohlmey/more-internal-convenience
More application of fix/compute simplification
2020-06-29 12:33:51 -04:00
1e6e237883 avoid bogus error exit when openting potential files without units 2020-06-29 11:58:26 -04:00
e6c4036a62 Merge branch 'master' into more-internal-convenience
# Conflicts:
#	src/group.cpp
2020-06-29 11:50:43 -04:00
96d943513e more output cleanup in MISC, MLIAP, MOLECULE, and POEMS 2020-06-29 11:48:54 -04:00
d84a47707b Merge pull request #2198 from akohlmey/more-unit-convert-support
Add metal2real or real2metal unit conversion support to a few more pair styles
2020-06-29 11:19:37 -04:00
9c762b96a6 Merge pull request #2188 from stanmoore1/kk_snap_ice
Add workaround in Kokkos PairSnap for gcc compiler bug
2020-06-29 10:56:06 -04:00
f46ba32627 Merge pull request #2195 from jrgissing/bond/react-reformat
Bond/react reformat
2020-06-29 10:12:29 -04:00
6de33bc676 Merge pull request #7 from charlessievers/kk_snap_ice
remove jalloy
2020-06-29 08:04:05 -06:00
5e183ecb33 simplify in MANYBODY and MC package 2020-06-29 08:32:51 -04:00
7de4655e69 simplify output in KSPACE package 2020-06-29 08:17:27 -04:00
b1d4ca2b03 simplify class2 dihedral and improper 2020-06-29 01:09:43 -04:00
5e8a877f55 simplify pppm init output 2020-06-29 00:59:33 -04:00
385d239b9e small tweak for passing r-RESPA tests with coulomb table 2020-06-29 00:59:01 -04:00
ab04416bfd fix typo 2020-06-29 00:10:34 -04:00
3a0ae83c96 apply simplifications to standard packages 2020-06-29 00:06:28 -04:00
a1c0b78a3a final set of styles in the src folder to be simplified 2020-06-28 23:25:37 -04:00
5585e3187f step version strings for next patch release 2020-06-28 19:30:24 -04:00
f94eeece72 Update group.h 2020-06-28 19:22:45 -04:00
3cd1341e64 make more use of convenience functions for adding fixes and computes 2020-06-28 18:57:22 -04:00
df29364be8 simplify find/delete fix/compute functions in modify.cpp 2020-06-28 18:39:19 -04:00
f670464a3e use simplified group->assign 2020-06-28 18:02:35 -04:00
f0a983b465 add group::assign convenience version 2020-06-28 17:46:08 -04:00
5911ad49ba use symlink instead of copy of the potential file 2020-06-28 16:50:39 -04:00
435ac9078b add unit conversion to pair styles eim, gw, gw/zbl, and nb3b/harmonic 2020-06-28 16:49:23 -04:00
3044d83c5e Update fix_bond_react.cpp 2020-06-27 14:00:53 -06:00
9afbc71802 only check for consistent cutoff and return it when flagged as kspace compatible 2020-06-27 10:19:57 -04:00
a6cd4a935e Replace accumulated displacement by accumulated force for tangential force in styles mindlin and mindlin_rescale. Change documentation accordingly 2020-06-27 01:17:46 -05:00
b75d9b8224 bond/react: RMSD constraint docs 2020-06-26 23:43:08 -06:00
6a68715d7b bond/react:RMSD constraint 2020-06-26 23:33:40 -06:00
5be366bfae Update group.h 2020-06-26 23:15:54 -06:00
ac05bb7786 Update fix_bond_react.cpp 2020-06-26 22:48:49 -06:00
fa17ba7a8f Merge pull request #86 from lammps/master
rebase
2020-06-26 22:26:40 -06:00
62a7cd0693 more accurate dummy variable name 2020-06-26 22:15:31 -06:00
e7f147a27b bond/react:group->assign convenient version 2020-06-26 21:37:46 -06:00
7f05c578f5 add group::assign convenience version 2020-06-26 21:36:12 -06:00
77a6c7b7dc bond/react:new add_fix format 2020-06-26 20:50:30 -06:00
51174d4ad1 Merge pull request #2192 from rbberger/permission_check_update
Simplify permission check tool: git only stores executable bit
2020-06-26 19:34:17 -04:00
ec58267a71 update code owners 2020-06-26 19:16:35 -04:00
fd66f32a83 Merge pull request #2191 from akohlmey/simpler-add-fix-compute
Simplify adding fixes and computes from inside LAMMPS
2020-06-26 17:29:23 -04:00
21462ede4b Simplify tool: git only stores executable bit 2020-06-26 17:03:10 -04:00
2c815bf3bb fix formatting bug 2020-06-26 16:22:27 -04:00
91502b8bf6 more simplification 2020-06-26 16:22:19 -04:00
41d62b8b8b update temp and press compute creation in temperature and similar fixes 2020-06-26 16:02:14 -04:00
a5651acb49 must not forget to generate compute ids and store them. 2020-06-26 15:42:37 -04:00
1ea0eca2a5 add convenience functions to modify to simplify creation of fixes and computes 2020-06-26 14:49:53 -04:00
7318dd06d3 simplify 2020-06-26 14:04:38 -04:00
05f310ef35 move misplaced neighbor list print log out output call 2020-06-26 14:04:32 -04:00
66271448ae Merge pull request #2167 from Vsevak/master
Update GPU CMake and Makefile scripts for ROCm v3.5
2020-06-26 13:43:32 -04:00
f9a202288c Add missing kmod package to AMD ROCm container 2020-06-26 13:09:16 -04:00
3c19a49605 Merge pull request #2190 from akohlmey/more-fmtlib-uses
Reduce use of local print buffers, simplify output handling with std::string and fmtlib
2020-06-26 12:08:46 -04:00
40b62e11b1 add comment requested by @sjplimp 2020-06-26 11:14:40 -04:00
bdb4cc561c add update README files 2020-06-26 11:11:59 -04:00
74fc64395f output summary simplifications 2020-06-26 10:54:25 -04:00
f56563c747 simplify output handling in Finish class 2020-06-26 08:04:07 -04:00
c4855d95e7 more use of utils::logmesg() and {fmt} 2020-06-26 07:23:22 -04:00
24c3f1f752 fix logic bug triggering failures to read files without UNITS: tag 2020-06-26 07:21:10 -04:00
d4148b1b80 set real units in cmap files 2020-06-26 07:20:42 -04:00
f2a4d12f7e more output simplification with fmtlib, std::string, and utils::logmesg() 2020-06-25 23:48:17 -04:00
84ec2cc39b simplify more code with std::string and fmtlib 2020-06-25 23:13:28 -04:00
e4a3a518f7 more use of fmtlib and std::string 2020-06-25 22:50:38 -04:00
4816c5c7cc simplify 2020-06-25 21:13:22 -04:00
3c78ad0a70 make more use of std::string and fmtlib where beneficial 2020-06-25 21:13:14 -04:00
8caa3e188c remove debug code 2020-06-25 21:11:39 -04:00
d46a1254e4 remove non-ASCII characters. 2020-06-25 21:11:32 -04:00
79c0dda0d6 Merge pull request #2187 from Vsevak/tip4p_pressure_fix
Fix virial computation in GPU accelerated TIP4P
2020-06-25 20:42:48 -04:00
a02f8f8e6e remove jalloy 2020-06-25 17:26:18 -07:00
d55a061286 Merge pull request #2183 from akohlmey/pair-potential-file-unit-convert
Transparently convert supported potential files from metal to real units
2020-06-25 19:31:52 -04:00
e6b3611c2d Update ROCm container to version 3.5 2020-06-25 19:05:28 -04:00
cfa12bc1cf Merge remote-tracking branch 'origin' into compute-mliap 2020-06-25 16:33:51 -06:00
284efadf9b adjust USER-QTB examples to match more closely with LAMMPS' style. add log files. 2020-06-25 17:22:16 -04:00
d926274911 Merge branch 'qtb_example' of github.com:stanmoore1/lammps into pair-potential-file-unit-convert 2020-06-25 17:06:38 -04:00
0fc87dff1a add conversion support to eam variants for KOKKOS 2020-06-25 17:03:17 -04:00
b665ca3bd9 apply the same clamping of "p" to eam/opt that is used in eam 2020-06-25 16:44:08 -04:00
d9f07cef25 document automatic unit conversion with units and pair_coeff commands 2020-06-25 16:05:20 -04:00
c989db60a7 refactor EAM family of potentials to convert the potential data and leave compute functions alone 2020-06-25 15:48:46 -04:00
cd6de39319 whitespace 2020-06-25 15:35:25 -04:00
a519ff2909 Fix broken QTB examples 2020-06-25 13:02:02 -06:00
15b8f855b4 Add workaround in Kokkos pair_snap for gcc compiler bug 2020-06-25 12:29:24 -06:00
29b0ca8ad9 fix bug in OPT package pair style tester 2020-06-25 14:21:50 -04:00
f9be8b3aa0 add missing factor for EAM in OPT package 2020-06-25 14:21:35 -04:00
9e08a739b5 add unit conversion test files for styles with conversion in the compute function 2020-06-25 12:28:06 -04:00
4824c4608c add unit conversion checking support to Force::open_potential() 2020-06-25 12:22:29 -04:00
3c9b40a31a add transparent unit conversion for most of the EAM family of potentials 2020-06-25 11:13:52 -04:00
ec057e313f add warning message when unit conversion is enabled 2020-06-25 10:46:52 -04:00
6420ccafa2 fix bugs with not properly detecting/selecting unit conversions 2020-06-25 10:31:09 -04:00
496bd55dc9 Fix lj/cut/tip4p/long/gpu virial 2020-06-25 17:30:51 +03:00
22d8d0d0b0 add tests for potential file reader and untils functions 2020-06-25 08:00:04 -04:00
3bb3037b55 fix typo 2020-06-25 07:59:40 -04:00
6ec3aac3f0 extra return value 2020-06-25 13:32:13 +02:00
2acf71c3e2 add unit conversion to table pair style 2020-06-25 04:31:34 -04:00
c6b16577f6 add conversion to pair styles tersoff/zbl and tersoff/zbl/omp 2020-06-25 03:46:15 -04:00
43276c8387 add unit conversion to vashishta pair style 2020-06-24 22:06:24 -04:00
b0319c2e70 fix missing newline in thermo output. 2020-06-24 21:47:27 -04:00
85097df2ba add unit conversion to pair style tersoff/mod and tersoff/mod/c 2020-06-24 21:23:40 -04:00
00332d299b add unit conversion support to pair style tersoff/table 2020-06-24 21:05:00 -04:00
db4cb2cb4f Merge pull request #2097 from jibril-b-coulibaly/patch-1
Correct ghost atoms bug in fix adapt
2020-06-24 20:31:58 -04:00
361f636700 add support for passing arguments via environment variable 2020-06-24 20:29:23 -04:00
aa94d3f723 Merge branch 'master' into pair-potential-file-unit-convert 2020-06-24 20:24:51 -04:00
22c88b80dc Merge pull request #2182 from akohlmey/test-updates
Test program updates and related changes
2020-06-24 20:12:33 -04:00
fdf7282030 simplify output creation 2020-06-24 17:38:39 -04:00
a7d2b792a8 Merge branch 'master' into test-updates 2020-06-24 17:25:55 -04:00
5a2704efc2 ensure that local per-thread storage is completely cleared in hybrid styles. 2020-06-24 17:24:47 -04:00
3e39b8c62d make sure class pointers are initialized to NULL and virial accumulator. 2020-06-24 17:23:20 -04:00
3525d1f104 simplify suppression handling by creating a custom local file 2020-06-24 13:35:36 -04:00
57538fb91c add leak sanitizer option 2020-06-24 13:34:47 -04:00
2af8d7a751 add argument passing via TEST_ARGS environment variable to all tests with an explicit main function 2020-06-24 10:17:23 -04:00
f1532e6545 fix a couple more spelling errors 2020-06-24 10:12:54 -04:00
63eab6e6d8 Merge branch 'master' into patch-1 2020-06-24 10:09:05 -04:00
6824b69ae9 add missing include 2020-06-24 09:38:55 -04:00
5ea9b1b38d simplify detection and application of valgrind suppressions 2020-06-24 09:33:19 -04:00
ee5be42026 avoid having to use external test runner script by parsing environment variables directly 2020-06-24 09:32:59 -04:00
f35d517a15 Merge pull request #2179 from charlessievers/fix_python_dynmat
Update dynamical matrix examples
2020-06-23 21:09:27 -04:00
ee08d222d2 Merge pull request #2174 from athomps/mliap
Add MLIAP package
2020-06-23 20:47:59 -04:00
eab88b98ef Merge branch 'master' into fix_python_dynmat 2020-06-23 14:25:31 -07:00
f812b94e40 Update relative paths to dynamic links 2020-06-23 14:23:41 -07:00
f719803e9a correct typos in fix_adapt documentation 2020-06-23 16:17:59 -05:00
47ebd8a3d9 implement mass keyword to turn off/on change in rmass when diameter is changed 2020-06-23 12:48:57 -05:00
8cec13a038 Add memory checker support in CMake
If ENABLE_TESTING is ON, you can now use memory checking tools to run the test
suite and check for memory leaks. By default CMake will try to find valgrind in
your path and set some default options.

To customize this behavior use the MEMORYCHECK_COMMAND and
MEMORYCHECK_COMMAND_OPTIONS variables. To run tests with the memory checker,
use the MemCheck action in ctest:

Run entire test suite:

ctest -T MemCheck

Run single test:

ctest -T MemCheck -R TESTNAME

Run test in verbose mode:

ctest -V -T MemCheck -R TESTNAME
2020-06-23 13:35:59 -04:00
b923037644 change and restore mass using scaling for floating point accuracy 2020-06-23 11:41:33 -05:00
5d1d406e01 must initialize ngrow in the constructor 2020-06-23 11:02:57 -04:00
a766b6a901 make sure numbers for atoms outside the compute group are zero 2020-06-23 10:24:47 -04:00
9aea4e509e Revert "must also reissue hybrid pair style commands after restarts"
This reverts commit ddcc104df6.
2020-06-23 09:50:17 -04:00
b8866c9acc add tests for MLIAP (same data as SNAP) 2020-06-23 09:35:00 -04:00
fefdd3dd9a move MLIAP potential files to potentials folder and replace with symlinks 2020-06-23 09:34:34 -04:00
06a0b3331a may only flag having restart info if all substyles support it 2020-06-23 09:25:25 -04:00
2ace7ef817 may only flag having restart info if all substyles support it 2020-06-23 09:24:51 -04:00
ddcc104df6 must also reissue hybrid pair style commands after restarts 2020-06-23 09:21:47 -04:00
8285e068da single_enable and respa_enable may only be set if *all* styles support it. 2020-06-23 09:19:08 -04:00
68d5d74fd3 add restart and data file handling to pair style zbl 2020-06-23 08:55:47 -04:00
5e57118a35 Merge branch 'mliap' of github.com:athomps/lammps into mliap 2020-06-23 08:53:41 -04:00
cc6371b00b add restart and data file handling to pair style zbl 2020-06-23 08:51:37 -04:00
1a0095e51b Use utils::logmesg() and fmt::format() 2020-06-23 08:32:17 -04:00
b9d989769d pair style zbl does not have restart support 2020-06-23 08:26:55 -04:00
2e48ea8680 include MLIAP package in cross-compiler builds 2020-06-23 07:11:30 -04:00
66414067c8 add tests for SNAP package 2020-06-23 06:51:42 -04:00
fae96f07d9 single_enable and respa_enable may only be set if *all* styles support it. 2020-06-23 06:51:10 -04:00
3d6095c278 Merge branch 'master' into pair-potential-file-unit-convert 2020-06-23 05:40:32 -04:00
1e8ea3af82 add comparisons for pressure (atm vs. bar) 2020-06-23 00:10:46 -04:00
bfef46539f add unit conversion test for pair style sw 2020-06-22 23:29:33 -04:00
fc197ce2aa add transparent unit conversion to pair style sw 2020-06-22 23:29:15 -04:00
a7436a7b76 adjust lj/cut parameters to produce smaller forces 2020-06-22 23:28:58 -04:00
0d7aed3234 remove debug code 2020-06-22 23:28:18 -04:00
516a31796e need to move destruction of base per-atom properties back to atom.cpp so we don't leak memory in read_restart and don't crash with replicate 2020-06-22 23:12:11 -04:00
a0fdb6af47 silence compiler warning 2020-06-22 22:34:08 -04:00
fc090c22f4 fix typo 2020-06-22 22:24:06 -04:00
ae0957bd61 use atom id instead of local index to test per-atom data 2020-06-22 22:19:55 -04:00
13d56f3cad Merge branch 'master' into test-updates 2020-06-22 21:00:33 -04:00
669e8e6fc9 Merge remote-tracking branch 'github/master' into mliap 2020-06-22 20:58:29 -04:00
5e1187832f Merge pull request #2181 from akohlmey/redo-msm-leak-fix
Redo MSM leak fix with fewer modifications to the code
2020-06-22 20:57:59 -04:00
5291a4611c Merge pull request #2180 from akohlmey/atomvec-deallocate-fix
Deallocate per-atom data less aggressively so replicate command keeps working
2020-06-22 20:53:27 -04:00
132afb32f4 add note about dependency on SNAP in the MLIAP overview page 2020-06-22 19:46:44 -04:00
8d5a9ad4af implement alternate version of MSM leak fix 2020-06-22 19:28:24 -04:00
afe6484c44 Revert "reorganize memory (de-)allocation and fix substantial memory leak in MSM"
This reverts commit f78671c1a4.
2020-06-22 19:15:28 -04:00
198258766d ensure that per-arrays are only freed if the last atom style instance is deleted 2020-06-22 18:59:09 -04:00
6fbcb84819 Update dynamical matrix examples 2020-06-22 15:26:04 -07:00
b29b3d52f6 initial implementation of automated unit conversion.
this includes a tester program and implementation into pair style tersoff
2020-06-22 17:57:05 -04:00
3fffe20463 Merge pull request #2172 from weinbe2/fea-snap-yi-aosoa
SNAP optimizations - AoSoA data layouts, chem snap indexing conventions, misc perf improvements
2020-06-22 13:54:06 -04:00
6e714fec42 fix underline 2020-06-22 13:40:30 -04:00
73ed317254 Added compute_mliap.cpp/h to MLIAP package 2020-06-22 11:38:02 -06:00
1f3c3bfb3c snap is listed twice 2020-06-22 13:30:54 -04:00
ac48f2dd67 add a hard dependency of MLIAP on SNAP 2020-06-22 13:30:43 -04:00
b0dd93f06f Whitespace tweak 2020-06-22 10:50:31 -06:00
5a1882e00d Merge branch 'mliap' of github.com:athomps/lammps into mliap 2020-06-22 12:01:34 -04:00
18597a6389 Removed computes 2020-06-22 10:00:19 -06:00
8eb6c2e037 Merge branch 'mliap' of github.com:athomps/lammps into mliap 2020-06-22 11:40:22 -04:00
743a14aea0 Fixed incomplete documentation entries for mliap 2020-06-22 09:35:16 -06:00
233b56105a Merge branch 'master' into mliap 2020-06-22 11:24:49 -04:00
75114afc0e integrate MLIAP package into CMake procedure 2020-06-22 11:24:44 -04:00
bbd9af0d6f Fixed a few minor problems 2020-06-22 09:11:38 -06:00
10ace11c0b Fixed spelling and false positives 2020-06-21 21:10:03 -06:00
9238c2a624 Finished first version of MLIAP package 2020-06-21 19:57:08 -06:00
549c6343f3 Merged MLIAP package into latest LAMMPS created SNAP, quadratic SNAP, and ChemSNAP examples 2020-06-21 18:05:34 -06:00
564974b6a4 Merge remote-tracking branch 'origin/ml_chem_snap' 2020-06-21 16:07:03 -06:00
ab42123005 add test for atom style sphere 2020-06-21 16:56:04 -04:00
a98d03ee0e add missing linefeed 2020-06-21 16:55:55 -04:00
7bb4a2a81a Fix a typo in the GPU Docs 2020-06-21 19:37:59 +03:00
0ba701acd7 Remove trailing space 2020-06-20 17:25:16 +03:00
723b9e6760 Try to keep compatibility with deprecated ROCm hcc compiler 2020-06-20 15:17:54 +03:00
55d6f1a34f Fixed variable name to be more consistent with rest of code. 2020-06-19 19:33:17 -04:00
f5a31fefdc Merge pull request #2171 from athomps/orientorder-components-parity
Switched the sign of spherical harmonics for m odd
2020-06-19 18:46:15 -04:00
9f6b2e97b1 Merge pull request #2169 from lammps/hyper-debug
Tweaks to local hyper dynamics
2020-06-19 17:17:56 -04:00
5148834d23 Merge pull request #2162 from akohlmey/collected-small-changes
Collected small changes
2020-06-19 17:07:07 -04:00
641f924161 Port changes to Kokkos package 2020-06-19 14:44:13 -06:00
b218fc44da Merge branch 'master' of https://github.com/lammps/lammps into orientorder-components-parity 2020-06-19 14:32:00 -06:00
bb40613db3 convert input degrees to internal radians for create_atoms rotate 2020-06-19 15:38:36 -04:00
a862a8c764 use {fmt} 2020-06-19 15:37:53 -04:00
4a2ab6d2f3 mods to fix adapt and doc pages for restarting 2020-06-19 12:48:06 -06:00
c7874fca86 Switched the sign of spherical harmonics for m odd 2020-06-19 12:18:11 -06:00
befd4c8bfd Optimizations to Compute[Yi/Zi/Bi], switching over to an AoSoA data layout on the GPU. CPU vs GPU code paths are now maximally divergent, will include some discussion of that in PR. Small performance tweaks in Compute[UiTot/FusedDeidrj]. 2020-06-19 14:12:29 -04:00
a40f4873fb comment out debug options and make some tallies bigints 2020-06-19 10:35:42 -06:00
3cdf0e286e add comments to explain why 1 item is added to rendezvous buffers. 2020-06-19 12:32:11 -04:00
08cb7664a3 renumber customization comments 2020-06-19 12:31:47 -04:00
4a447f1809 move deleting all array data associated with an atom style to AtomVec base class destructor 2020-06-19 12:31:31 -04:00
4d630904b4 relax a few more test criteria to be compatible with intel compilers 2020-06-19 11:43:59 -04:00
8f4e18ba3a change logic of selecting and allowing sanitizer options to be compatible with unsupported compilers 2020-06-19 11:30:38 -04:00
0249cf7510 better and more general version of the previous commit 2020-06-19 01:10:45 -04:00
a4de04d823 make certain that allocated buffers in Comm::rendezvous_all2all() are not NULL 2020-06-19 00:44:09 -04:00
343241cb63 relax some test epsilons 2020-06-19 00:43:11 -04:00
e934f7bac3 try to work around linker issues with older CMake versions and using coverage or sanitizers 2020-06-19 00:20:20 -04:00
7e2f29bb65 Merge pull request #2168 from charlessievers/chem_snap
Chem snap bugifx
2020-06-18 23:59:25 -04:00
f78671c1a4 reorganize memory (de-)allocation and fix substantial memory leak in MSM 2020-06-18 23:43:16 -04:00
d8e0f553b6 Merge remote-tracking branch 'origin/chem_snap' into chem_snap 2020-06-18 18:21:10 -07:00
9b73b4a6ca Unnecessary loop over zero_yi for non chem snap multielement systems 2020-06-18 18:20:30 -07:00
02ffa46fa7 simplify memory management and plug leaks in pair style bop 2020-06-18 17:12:51 -04:00
8eed1b27ff GPU Makefile cleanup 2020-06-19 00:07:10 +03:00
2ea5d9956a find_package is unnecessary for rocprim 2020-06-19 00:01:03 +03:00
328709513b plug memory leaks in pair style comb and comb3 2020-06-18 16:34:25 -04:00
fcdd2c5026 prevent memory leaks in pair style tersoff/table 2020-06-18 16:13:02 -04:00
b83fab92bf document coding style and sanitizing options 2020-06-18 13:35:07 -04:00
dfe860c4bb update coding style 2020-06-18 13:34:34 -04:00
a42c68892f address memory leak and C versus C++ programming issues in pair style polymorphic 2020-06-18 13:09:58 -04:00
bfe42e3fbe make sure delete gc[n] is safe 2020-06-18 12:40:08 -04:00
5e597e551b avoid false positive 2020-06-18 12:39:40 -04:00
786473a189 allow sanitizers also be active for force style test codes 2020-06-18 12:39:23 -04:00
8816d7fe3e plug small memory leak in pair style eam/cd 2020-06-18 11:52:33 -04:00
b866ea68f6 make sanitizers an explicit cmake option (again) so we can set the flags properly 2020-06-18 11:46:42 -04:00
b0842a3fea tell GNU gcc to not try to optimize the atom style tester tool 2020-06-18 11:45:56 -04:00
41995b4665 avoid false positives about memory leaks in force tester tools 2020-06-18 11:45:26 -04:00
77f6fecc86 Merge pull request #1971 from charlessievers/chem_snap
Chemical specificity for SNAP
2020-06-18 10:11:15 -04:00
547137f737 remove unused code 2020-06-17 23:48:09 -04:00
d6ca98cb44 don't validate compiler flags provided with CMAKE_TUNE_FLAGS anymore
closes #2084
2020-06-17 23:47:55 -04:00
a221f13308 Whitespace tweak 2020-06-17 21:35:04 -06:00
27912754c4 Merge branch 'master' into collected-small-changes 2020-06-17 21:18:29 -04:00
753eb9b76d add tests for atom style charge 2020-06-17 21:17:42 -04:00
586c81b1be Merge pull request #2163 from rbberger/more-whitespace
Coding Standard tool updates
2020-06-17 21:07:01 -04:00
a200756d7b remove a bunch of redundant tests and add checking for restarts and consecutive atom ids 2020-06-17 20:40:04 -04:00
5bb9700124 ensure that a LAMMPS instance could be created and the eim pair style is available 2020-06-17 18:12:12 -04:00
afe874ac5b add test for using write_data/read_data for atom style atomic 2020-06-17 18:11:45 -04:00
f75b8e1688 Fix Makefile for GPU ROCm 3.5 backend 2020-06-18 00:33:46 +03:00
d3baa414d2 Fix cmake for GPU ROCm 3.5 backend 2020-06-17 23:33:16 +03:00
a7967f8b3f Merge remote-tracking branch 'origin/master' 2020-06-17 23:31:06 +03:00
8a93c84e74 make formatting consistent with lj/cut 2020-06-17 15:03:36 -04:00
2d52a09d08 patch the source code to the ScaFaCoS lib with a proper fix instead of working around it with compiler flags 2020-06-17 13:01:29 -04:00
27f1ce71fd now also check all 'xxx_flag' variables 2020-06-17 07:42:50 -04:00
34e46cc336 add workaround to USER-SCAFACOS package CMake script for linker error in FMM with GNU gcc 10.0 2020-06-17 07:41:00 -04:00
73c7ed1e9c start test for atom style charge 2020-06-17 01:42:41 -04:00
e88bb9dd59 call MPI_Finalize() so we don't have spurious memory leaks from MPI reported by valgrind 2020-06-17 01:42:17 -04:00
39b61fbdbe add exit() to one() functions since compilers may not recognize that MPI_Abort() does not return. 2020-06-17 01:30:41 -04:00
61ace42e72 check status of all per-atom fields 2020-06-17 01:25:56 -04:00
d990c1e7c0 simplify through using {fmt} 2020-06-17 01:25:22 -04:00
32c1dcf44f improve match for "id" first checks 2020-06-17 01:25:06 -04:00
db469b5cfd plug memory leak in AtomVec classes 2020-06-17 01:24:36 -04:00
49af2c25ec add tester for atom styles 2020-06-17 00:11:18 -04:00
b97cd78e80 change input and log files for new example to give consistent results in serial and parallel.
the remaining files and logs are updated in PR #2162
2020-06-16 21:11:34 -04:00
1883788725 update SNAP package inputs and reference logs to give consistent results in serial and parallel 2020-06-16 20:59:58 -04:00
47b589bdc6 add [[ noreturn ]] attributes to functions in the Error class that do not return 2020-06-16 18:30:04 -04:00
a2f78e7cda Updated whitespace, implemented low hanging performance boosts 2020-06-16 15:00:35 -07:00
d8fbb5a16b Merge branch 'commands-tests' into collected-small-changes 2020-06-16 16:39:33 -04:00
73a7fb53ff add infrastructure and first example for testing standalone LAMMPS input commands 2020-06-16 12:52:35 -04:00
9d74984144 Fix whitespace 2020-06-16 07:20:09 -04:00
95e79b2347 Keep file permissions while fixing whitespace issues 2020-06-16 07:19:19 -04:00
943d252403 Change regex to detect more whitespace errors 2020-06-16 07:11:31 -04:00
036b2bd82c Add non-zero exit code on whitespace check failure 2020-06-16 07:06:37 -04:00
61235308f1 Add non-zero exit code on permission check failure 2020-06-16 07:05:15 -04:00
093c285475 use GMock initializer instead of GTest 2020-06-16 06:37:35 -04:00
436c7615e0 set metal units and add option to do verbose execution to EIM potential tester 2020-06-16 06:37:09 -04:00
37a0999826 add units metadata check to legacy potential file reading method 2020-06-16 06:36:26 -04:00
b5a809413e set units for potential file reader tests. allow verbose execution. 2020-06-16 06:19:31 -04:00
30d9ffba25 add "UNITS:" tag to new potential files 2020-06-16 05:13:41 -04:00
ae435536f3 use index style variables instead of equal style variable to allow overriding them 2020-06-16 05:13:16 -04:00
5e238b2cf4 Merge branch 'master' into chem_snap 2020-06-16 05:06:11 -04:00
ba26b2f71f Update false positives and fix typos 2020-06-15 17:24:47 -07:00
b55f1829d9 Fixed number of parameters sent to sna kokkos to include bnormflag 2020-06-15 17:09:14 -07:00
39f1fb874f Fixed small merge conflict bug for ylists 2020-06-15 16:53:39 -07:00
ac87f1763c Merge remote-tracking branch 'refs/remotes/origin/chem_snap' into chem_snap 2020-06-15 12:22:11 -07:00
39aee089e7 Merge branch 'master' into chem_snap 2020-06-15 12:20:48 -07:00
622db7053e Merge remote-tracking branch 'origin/master' 2020-06-15 18:38:40 +03:00
f0a3256151 Merge branch 'master' into user-cgdna 2020-06-15 08:41:42 +01:00
5d3f67dff4 Tweaked formulae for K 2020-06-14 13:25:11 -06:00
9dec9314a2 Polished the doc files a bit 2020-06-13 19:20:30 -06:00
6a26094d05 Minor tweaks 2020-06-13 17:57:08 -06:00
30aa4bf454 Added chemsnap keywords and upgraded equations to mathjax 2020-06-13 17:55:45 -06:00
7dd186d0ad Refactored chemsnap input options 2020-06-13 12:50:01 -06:00
7ba731c711 Renamed InP potential files and create standard log files 2020-06-13 10:47:52 -06:00
7ea1e60ec5 Renamed InP potential files and create standard log files 2020-06-13 10:47:29 -06:00
eec9773815 Moved InP files to potentials dir 2020-06-13 10:25:11 -06:00
ebcc68f2cf Renamed InP files and tweaked 2020-06-12 17:58:33 -06:00
574f6307e7 Merge master into chem_snap and update dulist merge conflict 2020-06-12 13:31:43 -07:00
4db9576aac Fixed small multielement and not alloyflag bug 2020-06-10 15:17:45 -07:00
5a200b34fb Updated chem_snap kokkos cuda kernel 2020-06-10 14:27:49 -07:00
62045cfb10 Merge branch 'master' into chem_snap 2020-06-09 14:30:55 -07:00
0143234329 Merge branch 'chem_snap' of https://github.com/charlessievers/lammps into chem_snap 2020-06-09 14:28:03 -07:00
4e5da1c92e Chem SNAP KOKKOS implementation draft 2020-06-09 14:27:01 -07:00
c2b557233e Update value parsing in Molecule 2020-06-09 12:12:52 -04:00
c1f6c004ca Add contains method to ValueTokenizer 2020-06-09 12:11:53 -04:00
65b4d87f99 Merge branch 'master' into user-cgdna 2020-06-02 19:04:33 +01:00
53e3421b6f Merge branch 'master' into chem_snap 2020-06-01 17:22:05 -07:00
37e5df8680 Merge branch 'chem_snap' of https://github.com/charlessievers/lammps into chem_snap 2020-06-01 15:18:41 -07:00
e7e82cfb7c merge master into chemsnap, added chunksize 2020-06-01 14:56:37 -07:00
711f875001 Added fix bond/create/angle code and docu 2020-06-01 15:45:40 +01:00
16eab647d4 Added fix bond/create/angle code and docu 2020-06-01 15:42:45 +01:00
a6d2ae2ee0 implement restart_reset flag for fixes in restart_global list 2020-05-27 12:44:05 -05:00
042cfc521b cmake: allow to overwrite GTest URL for offline machines 2020-05-24 19:38:19 -06:00
6d11515ad0 scale factors in constructor only. Issue with successive fresh runs 2020-05-22 14:35:32 -05:00
1add74b8f7 save diameter and charge scale for restart. Need a switch te default values to 1 during init 2020-05-22 14:04:51 -05:00
03419b398a scale diameter and charge incrementally without using fix store. Corrects bug of fix store array accessed out of bounds 2020-05-19 18:28:18 -05:00
e1362e9a61 Correct ghost atom access out of bounds bug in fix adapt 2020-05-19 16:55:25 -05:00
36bac80978 up-to-date 2020-05-01 18:42:00 +02:00
215ad7e0b9 allreaduce 2020-05-01 17:52:31 +02:00
b96058eac3 gather/scatter custom 2020-05-01 16:53:07 +02:00
a64f70f0b5 removed broken soft link 2020-05-01 16:24:42 +02:00
2571e187d0 updated README, removed broken soft link to potential 2020-05-01 16:23:51 +02:00
64fdaaec3c citation update 2020-05-01 16:19:03 +02:00
2ff463cc6e fixed typo and checked make html 2020-05-01 16:11:25 +02:00
012c344622 updated documentation 2020-05-01 16:10:45 +02:00
6eb9923c68 added documentation 2020-05-01 15:58:32 +02:00
4e0c835e9e fixed dimension in error message 2020-05-01 15:57:16 +02:00
95e81c7e47 allowed 0/1 or no/yes 2020-05-01 14:52:48 +02:00
7c620f7514 removed redundant region check, made com/overdamped "yes" or "no" instead of 0/1 2020-05-01 14:36:06 +02:00
bad3becac3 set com and overdamped flags as keywords with defaults 1,0 2020-05-01 14:28:36 +02:00
79f074eb6a updated potential path in example 2020-05-01 14:27:33 +02:00
feb6e10734 error messages 2020-05-01 13:53:24 +02:00
e708479782 error messages for fix pafi 2020-05-01 13:28:36 +02:00
910d91bc93 some more tweaks to the example 2020-04-29 17:15:46 -04:00
6cd1b45a49 recover compilation with -DLAMMPS_BIGBIG 2020-04-29 17:12:58 -04:00
1ad85980fb fix up include files 2020-04-29 17:12:43 -04:00
d3b88ab3e1 fix documentation translation issues 2020-04-29 17:12:30 -04:00
42d36e360e cosmetic change 2020-04-29 17:02:18 -04:00
db631c941d fix minor memory leak 2020-04-29 16:51:43 -04:00
cc6b55515b add integration into manual and add dummy documentation 2020-04-29 16:51:30 -04:00
46739329c4 update PAFI example: remove unused data, replace potential with existing one, update logs 2020-04-29 16:41:08 -04:00
595bb30e14 Merge branch 'master' into user-pafi 2020-04-29 15:35:29 -04:00
3ab797984b verified cmake compatibility 2020-04-27 18:21:42 +02:00
97ac67840b corrections to headers 2020-04-27 17:40:09 +02:00
2fb71cfb62 Merge pull request #80 from jrgissing/master
import Andrew's PR into create_atoms branch
2020-04-22 22:36:20 -06:00
08b4159c6b Merge pull request #79 from lammps/master
rebase
2020-04-22 22:32:01 -06:00
251517127d Merge pull request #78 from lammps/master
rebase
2020-04-22 22:13:33 -06:00
f63893bd7d citation fix 2020-04-21 17:19:48 +02:00
1c1ff9623f check for compute at fix_init() 2020-04-21 15:07:15 +02:00
1670196bc1 c++ style headers 2020-04-21 15:00:00 +02:00
cbe6e0dcb2 small updates 2020-04-21 14:32:52 +02:00
1cd5db683f typo.. 2020-04-20 19:59:26 +02:00
0f8669c51d updated_extract_atom 2020-04-20 19:55:29 +02:00
4da1ba749f removed changes to atom.cpp 2020-04-20 19:42:04 +02:00
1709bc3f83 cleaned makefile 2020-04-20 19:12:37 +02:00
b1bd0251a9 better example file 2020-04-20 18:32:44 +02:00
8fa2092580 example folder 2020-04-20 10:20:53 +02:00
946cb27267 ignore 2020-04-20 10:20:17 +02:00
0ea2eabbb2 start of clean up 2020-04-17 18:11:59 +02:00
6904e1e6ef Merge pull request #2 from tomswinburne/newfix
update
2020-04-17 16:39:28 +02:00
bddcc3519c update 2020-04-17 14:55:24 +02:00
5b31077cef Merge pull request #1 from tomswinburne/newfix
Newfix
2020-04-17 14:49:57 +02:00
b8d6de2bdc binary example 2020-04-14 21:21:22 +02:00
6cbd61d929 working with library interface 2020-04-14 21:11:32 +02:00
276608738c working new version 2020-04-14 15:11:09 +02:00
430f2ae6aa getting there 2020-04-13 19:28:43 +02:00
39799c62fc update fork 2020-04-13 10:48:20 +02:00
581f65bacd makefile 2020-04-13 10:39:54 +02:00
9a2348ff15 InP example included 2020-04-09 01:18:34 -07:00
a2132f8596 Optimized some bnorm_flags 2020-04-08 13:02:37 -07:00
19f1d0445d Added THIS IS NOT RIGHT note 2020-04-08 10:32:27 -06:00
0443ac2dd4 Created class ComputeSNAP, not completely finished, but compiles 2020-04-07 20:51:39 -06:00
46ee159f14 Added custom tally functions 2020-04-06 17:05:43 -06:00
3cb825c308 Made ev_tally_full() public 2020-04-05 00:28:47 -06:00
47709c4cad Now using mix and match syntax 2020-04-05 00:21:31 -06:00
b5dfdc4fa4 Separated out class hierarchy 2020-04-05 00:17:31 -06:00
789a697d69 Merge pull request #77 from mrcdr/math_eigen_lanczos
modified the "math_eigen.h" file
2020-04-04 20:59:24 -06:00
b84a2481ed Merge remote-tracking branch 'charlie/chem_snap' into ml_chem_snap 2020-04-04 11:38:56 -06:00
94e5e8de76 modified the "math_eigen.h" file to track the commit 9cdfcac069 2020-04-03 01:23:30 +09:00
09c2dec71f Fixed small non chemsnap multielement bug 2020-04-01 17:18:31 -07:00
909e6048c4 Added mliap package 2020-04-01 18:09:18 -06:00
3329caa7f1 First pass at general ML pair style 2020-04-01 18:07:33 -06:00
3dd9ad488f Turned on MLIAPModelSNAP 2020-03-31 21:58:43 -06:00
98c89363c6 Merge branch 'master' into chem_snap 2020-03-31 16:50:08 -07:00
d3d67cebe7 Chem Snap 2020-03-31 16:37:09 -07:00
8789ff6553 Merge branch 'master' into chem_snap 2020-03-30 23:39:06 -07:00
9cdfcac069 Merge pull request #76 from jewettaij/bond-react_create_atoms
libraries for matrix algebra and point cloud registration
2020-03-28 23:33:44 -06:00
8d0cb2a70a removed the "superpose3d" namespace, and renamed "namespace math_eigen" to "namespace MathEigen" (to imitate the style used in "math_extra.h"). 2020-03-23 14:19:04 -07:00
e795d9ff6a added the "math_eigen.h" and "superpose3d.h" files 2020-03-12 17:33:50 -07:00
0fb341f7eb Merge pull request #73 from lammps/master
rebase
2020-03-05 22:46:07 -07:00
b3425afef5 Merge pull request #72 from lammps/master
rebase
2020-03-03 23:12:46 -07:00
a184cb34ee merge master into chem_snap 2020-03-03 10:08:35 -08:00
3298a86bd9 Reduce redundant copying using UCL_H_Vec::view 2020-02-20 18:32:52 +03:00
4b11e43660 Merge pull request #68 from lammps/master
rebase
2020-02-17 21:07:30 -07:00
e982f418d3 remove whitespace issues 2020-02-05 13:54:56 -05:00
b35c271a12 spelling error 2020-01-31 16:31:42 -05:00
aefaab5769 readme for user-misc 2020-01-31 16:00:16 -05:00
14dfe53837 doc edit 2020-01-31 15:54:01 -05:00
035fba10e5 fixed special_bonds requirements 2020-01-31 15:33:59 -05:00
923ccaaff9 fixed error handling 2020-01-31 12:56:02 -05:00
6bb30a3312 revised doc for bond_style special 2020-01-31 12:26:00 -05:00
9b3a93d222 add bond_style special to the list 2020-01-31 11:30:41 -05:00
58a03f12eb draft doc page for bond_style special 2020-01-30 15:25:55 -05:00
ddfdabf189 added bond style special 2020-01-30 14:16:59 -05:00
831c550397 Made if statement block verbose and cleaned it up 2020-01-29 10:51:59 -07:00
453649453e Merge pull request #65 from jrgissing/master
rebase
2020-01-24 21:25:59 -07:00
0bb0d6f265 Fix snap.cpp to not force more coeff if multielement and not alloy_flag 2020-01-24 15:54:19 -07:00
deb45f4bab Updated dbidrj to fix jjz position update and cleaned up random prints sna.cpp 2020-01-24 13:01:09 -07:00
3dc14a4246 Removed unnecessary ztmp calculations, fixed yi chemsnap multiplicity conditions, added zptr to remove additional idouble * idxz_max calculations. 2020-01-21 17:00:29 -07:00
b50f35edb7 Updated Snap to work with ChemSnap 2020-01-17 19:11:36 -07:00
c262d08e84 remove comments 2019-12-04 12:32:04 -05:00
06964c58de Merge branch 'master' into multi-comm-tiled
Conflicts resolved:
    src/comm_tiled.cpp
2019-11-27 12:12:03 -05:00
49d9089a63 USER-PAFI examples 2019-05-22 13:50:07 +02:00
646d833027 USER-PAFI 2019-05-22 10:29:29 +02:00
a76ba95f5b comm_tiled_sendself_fix 2019-04-11 12:51:46 -06:00
0f88513f65 updated comm tiled to have multi 2019-01-21 12:29:31 -05:00
9a3f90294c updated comm tiled to have multi 2019-01-21 11:50:10 -05:00
4885 changed files with 204959 additions and 149589 deletions

3
.gitattributes vendored Normal file
View File

@ -0,0 +1,3 @@
.gitattributes export-ignore
.gitignore export-ignore
.github export-ignore

6
.github/CODEOWNERS vendored
View File

@ -114,11 +114,14 @@ src/info.* @akohlmey @rbberger
src/timer.* @akohlmey
src/min* @sjplimp @stanmoore1
src/utils.* @akohlmey @rbberger
src/math_eigen_impl.h @jewettaij
# tools
tools/msi2lmp/* @akohlmey
tools/emacs/* @HaoZeke
tools/singularity/* @akohlmey @rbberger
tools/code_standard/* @rbberger
tools/valgrind/* @akohlmey
# tests
unittest/* @akohlmey @rbberger
@ -132,6 +135,9 @@ cmake/presets/*.cmake @junghans @rbberger @akohlmey
# python
python/* @rbberger
# fortran
fortran/* @akohlmey
# docs
doc/utils/*/* @rbberger
doc/Makefile @rbberger

View File

@ -67,6 +67,7 @@ How quickly your contribution will be integrated depends largely on how much eff
Here is a checklist of steps you need to follow to submit a single file or user package for our consideration. Following these steps will save both you and us time. See existing files in packages in the source directory for examples. If you are uncertain, please ask on the lammps-users mailing list.
* C++ source code must be compatible with the C++-11 standard. Packages may require a later standard, if justified.
* All source files you provide must compile with the most current version of LAMMPS with multiple configurations. In particular you need to test compiling LAMMPS from scratch with `-DLAMMPS_BIGBIG` set in addition to the default `-DLAMMPS_SMALLBIG` setting. Your code will need to work correctly in serial and in parallel using MPI.
* For consistency with the rest of LAMMPS and especially, if you want your contribution(s) to be added to main LAMMPS code or one of its standard packages, it needs to be written in a style compatible with other LAMMPS source files. This means: 2-character indentation per level, no tabs, no trailing whitespace, no lines over 80 characters. I/O is done via the C-style stdio library, style class header files should not import any system headers, STL containers should be avoided in headers, and forward declarations used where possible or needed. All added code should be placed into the LAMMPS_NS namespace or a sub-namespace; global or static variables should be avoided, as they conflict with the modular nature of LAMMPS and the C++ class structure. There MUST NOT be any "using namespace XXX;" statements in headers. In the implementation file (<name>.cpp) system includes should be placed in angular brackets (<>) and for c-library functions the C++ style header files should be included (<cstdio> instead of <stdio.h>, or <cstring> instead of <string.h>). This all is so the developers can more easily understand, integrate, and maintain your contribution and reduce conflicts with other parts of LAMMPS. This basically means that the code accesses data structures, performs its operations, and is formatted similar to other LAMMPS source files, including the use of the error class for error and warning messages.
* Source, style name, and documentation file should follow the following naming convention: style names should be lowercase and words separated by a forward slash; for a new fix style 'foo/bar', the class should be named FixFooBar, the name of the source files should be 'fix_foo_bar.h' and 'fix_foo_bar.cpp' and the corresponding documentation should be in a file 'fix_foo_bar.rst'.

View File

@ -2,7 +2,7 @@
<!--Briefly describe the new feature(s), enhancement(s), or bugfix(es) included in this pull request.-->
**Related Issues**
**Related Issue(s)**
<!--If this addresses an open GitHub issue for this project, please mention the issue number here, and describe the relation. Use the phrases `fixes #221` or `closes #135`, when you want an issue to be automatically closed when the pull request is merged-->

View File

@ -9,34 +9,37 @@ assignees: ''
**Summary**
<!--Briefly describe the bug or bugs, that are eliminated by this pull request.-->
<!--Briefly describe the bug(s) that are eliminated by this pull request.-->
**Related Issue(s)**
<!--If this request addresses or is related to an existing (open) GitHub issue, e.g. a bug report, mention the issue number number here following a pound sign (aka hashmark), e.g.`#222`.-->
<!--If this addresses an open GitHub issue for this project, please mention the issue number here, and describe the relation. Use the phrases `fixes #221` or `closes #135`, when you want an issue to be automatically closed when the pull request is merged-->
**Author(s)**
<!--Please state name and affiliation of the author or authors that should be credited with the changes in this pull request-->
<!--Please state name and affiliation of the author or authors that should be credited with the changes in this pull request. If this pull request adds new files to the distribution, please also provide a suitable "long-lived" e-mail address (ideally something that can outlive your institution's e-mail, in case you change jobs) for the *corresponding* author, i.e. the person the LAMMPS developers can contact directly with questions and requests related to maintenance and support of this contributed code.-->
**Licensing**
By submitting this pull request I implicitly accept, that my submission is subject to the same licensing terms as the files that are modified.
By submitting this pull request, I agree, that my contribution will be included in LAMMPS and redistributed under either the GNU General Public License version 2 (GPL v2) or the GNU Lesser General Public License version 2.1 (LGPL v2.1).
**Backward Compatibility**
<!--Please state whether any changes in the pull request break backward compatibility for inputs, and - if yes - explain what has been changed and why-->
<!--Please state whether any changes in the pull request will break backward compatibility for inputs, and - if yes - explain what has been changed and why-->
**Detailed Description**
<!--Provide any relevant details about how the fixed bug can be reproduced, how the changes are implemented, how correctness was verified, how other features - if any - in LAMMPS are affected-->
## Post Submission Checklist
**Post Submission Checklist**
<!--Please check the fields below as they are completed *after* the pull request is submitted-->
- [ ] The code in this pull request is complete
<!--Please check the fields below as they are completed **after** the pull request has been submitted. Delete lines that don't apply-->
- [ ] The feature or features in this pull request is complete
- [ ] Licensing information is complete
- [ ] Corresponding author information is complete
- [ ] The source code follows the LAMMPS formatting guidelines
- [ ] The feature has been verified to work with the conventional build system
- [ ] The feature has been verified to work with the CMake based build system
- [ ] Suitable tests have been added to the unittest tree.
## Further Information, Files, and Links
<!--Put any additional information here, attach relevant text or image files, and URLs to external sites (e.g. to download input decks for testing)-->

View File

@ -13,23 +13,31 @@ assignees: ''
**Related Issue(s)**
<!--If this request addresses or is related to an existing (open) GitHub issue, e.g. a bug report, mention the issue number number here following a pound sign (aka hashmark), e.g.`#222`.
<!--If this addresses an open GitHub issue for this project, please mention the issue number here, and describe the relation. Use the phrases `fixes #221` or `closes #135`, when you want an issue to be automatically closed when the pull request is merged-->
**Author(s)**
<!--Please state name and affiliation of the author or authors that should be credited with the changes in this pull request-->
<!--Please state name and affiliation of the author or authors that should be credited with the changes in this pull request. If this pull request adds new files to the distribution, please also provide a suitable "long-lived" e-mail address (ideally something that can outlive your institution's e-mail, in case you change jobs) for the *corresponding* author, i.e. the person the LAMMPS developers can contact directly with questions and requests related to maintenance and support of this contributed code.-->
**Licensing**
By submitting this pull request I implicitly accept, that my submission is subject to the same licensing terms as the files that are modified.
By submitting this pull request, I agree, that my contribution will be included in LAMMPS and redistributed under either the GNU General Public License version 2 (GPL v2) or the GNU Lesser General Public License version 2.1 (LGPL v2.1).
**Backward Compatibility**
<!--Please state whether any changes in the pull request will break backward compatibility for inputs, and - if yes - explain what has been changed and why-->
**Detailed Description**
<!--Provide any relevant details about the included changes.-->
<!--Provide any relevant details about how the changes are implemented, how correctness was verified, how other features - if any - in LAMMPS are affected-->
## Post Submission Checklist
**Post Submission Checklist**
<!--Please check the fields below as they are completed *after* the pull request is submitted-->
- [ ] The pull request is complete
- [ ] The source code follows the LAMMPS formatting guidelines
- [ ] The feature has been verified to work with the conventional build system
- [ ] The feature has been verified to work with the CMake based build system
- [ ] Suitable tests have been added to the unittest tree.

View File

@ -11,32 +11,29 @@ assignees: ''
<!--Briefly describe the new feature(s) included in this pull request.-->
**Related Issues**
**Related Issue(s)**
<!--If this addresses an existing (open) GitHub issue, e.g. a feature request, mention the issue number here following a pound sign (aka hashmark), e.g. `#331`.-->
<!--If this addresses an open GitHub issue for this project, please mention the issue number here, and describe the relation. Use the phrases `fixes #221` or `closes #135`, when you want an issue to be automatically closed when the pull request is merged-->
**Author(s)**
<!--Please state name and affiliation of the author or authors that should be credited with the features added in this pull request. Please provide a suitable "long-lived" e-mail address (e.g. from gmail, yahoo, outlook, etc.) for the *corresponding* author, i.e. the person the LAMMPS developers can contact directly with questions and requests related to maintenance and support of this code. now and in the future-->
<!--Please state name and affiliation of the author or authors that should be credited with the changes in this pull request. If this pull request adds new files to the distribution, please also provide a suitable "long-lived" e-mail address (ideally something that can outlive your institution's e-mail, in case you change jobs) for the *corresponding* author, i.e. the person the LAMMPS developers can contact directly with questions and requests related to maintenance and support of this contributed code.-->
**Licensing**
<!--Please add *yes* or *no* to the following two statements (please contact @lammps/core if you have questions about this)-->
My contribution may be licensed as GPL v2 (default LAMMPS license):
My contribution may be licensed as LGPL (for use as a library with proprietary software):
By submitting this pull request, I agree, that my contribution will be included in LAMMPS and redistributed under either the GNU General Public License version 2 (GPL v2) or the GNU Lesser General Public License version 2.1 (LGPL v2.1).
**Backward Compatibility**
<!--Please state if any of the changes in this pull request will affect backward compatibility for inputs, and - if yes - explain what has been changed and why-->
<!--Please state whether any changes in the pull request will break backward compatibility for inputs, and - if yes - explain what has been changed and why-->
**Implementation Notes**
<!--Provide any relevant details about how the new features are implemented, how correctness was verified, what platforms (OS, compiler, MPI, hardware, number of processors, accelerator(s)) it was tested on-->
<!--Provide any relevant details about how the new feature(s) are implemented, how correctness was verified, how other features - if any - in LAMMPS are affected-->
## Post Submission Checklist
**Post Submission Checklist**
<!--Please check the fields below as they are completed *after* the pull request has been submitted-->
<!--Please check the fields below as they are completed **after** the pull request has been submitted. Delete lines that don't apply-->
- [ ] The feature or features in this pull request is complete
- [ ] Licensing information is complete
@ -46,10 +43,11 @@ My contribution may be licensed as LGPL (for use as a library with proprietary s
- [ ] The added/updated documentation is integrated and tested with the documentation build system
- [ ] The feature has been verified to work with the conventional build system
- [ ] The feature has been verified to work with the CMake based build system
- [ ] Suitable tests have been added to the unittest tree.
- [ ] A package specific README file has been included or updated
- [ ] One or more example input decks are included
## Further Information, Files, and Links
**Further Information, Files, and Links**
<!--Put any additional information here, attach relevant text or image files, and URLs to external sites (e.g. DOIs or webpages)-->

View File

@ -11,17 +11,21 @@ assignees: ''
<!--Briefly describe what kind of updates or enhancements for a package or feature are included. If you are not the original author of the package or feature, please mention, whether your contribution was created independently or in collaboration/cooperation with the original author.-->
**Related Issue(s)**
<!--If this addresses an open GitHub issue for this project, please mention the issue number here, and describe the relation. Use the phrases `fixes #221` or `closes #135`, when you want an issue to be automatically closed when the pull request is merged-->
**Author(s)**
<!--Please state name and affiliation of the author or authors that should be credited with the changes in this pull request-->
**Licensing**
By submitting this pull request I implicitly accept, that my submission is subject to the same licensing terms as the original package or feature(s) that are updated or amended by this pull request.
By submitting this pull request, I agree, that my contribution will be included in LAMMPS and redistributed under either the GNU General Public License version 2 (GPL v2) or the GNU Lesser General Public License version 2.1 (LGPL v2.1).
**Backward Compatibility**
<!--Please state whether any changes in the pull request break backward compatibility for inputs, and - if yes - explain what has been changed and why-->
<!--Please state whether any changes in the pull request will break backward compatibility for inputs, and - if yes - explain what has been changed and why-->
**Implementation Notes**
@ -29,11 +33,19 @@ By submitting this pull request I implicitly accept, that my submission is subje
**Post Submission Checklist**
<!--Please check the fields below as they are completed-->
<!--Please check the fields below as they are completed **after** the pull request has been submitted. Delete lines that don't apply-->
- [ ] The feature or features in this pull request is complete
- [ ] Suitable updates to the existing docs are included
- [ ] One or more example input decks are included
- [ ] Licensing information is complete
- [ ] Corresponding author information is complete
- [ ] The source code follows the LAMMPS formatting guidelines
- [ ] Suitable updates to the existing docs are included
- [ ] The updated documentation is integrated and tested with the documentation build system
- [ ] The feature has been verified to work with the conventional build system
- [ ] The feature has been verified to work with the CMake based build system
- [ ] Suitable tests have been updated or added to the unittest tree.
- [ ] A package specific README file has been updated
- [ ] One or more example input decks are included
**Further Information, Files, and Links**

29
.github/codecov.yml vendored Normal file
View File

@ -0,0 +1,29 @@
comment: false
coverage:
notify:
slack:
default:
url: "secret:HWZbvgtc6OD7F3v3PfrK3/rzCJvScbh69Fi1CkLwuHK0+wIBIHVR+Q5i7q6F9Ln4OChbiRGtYAEUUsT8/jmBu4qDpIi8mx746codc0z/Z3aafLd24pBrCEPLvdCfIZxqPnw3TuUgGhwmMDZf0+thg8YNUr/MbOZ7Li2L6+ZbYuA="
threshold: 10%
only_pulls: false
branches:
- "master"
flags:
- "unit"
paths:
- "src"
status:
project:
default:
branches:
- "master"
paths:
- "src"
informational: true
patch:
default:
branches:
- "master"
paths:
- "src"
informational: true

1
.gitignore vendored
View File

@ -37,6 +37,7 @@ vgcore.*
ehthumbs.db
Thumbs.db
.clang-format
.lammps_history
#cmake
/build*

38
README
View File

@ -22,28 +22,32 @@ more information about the code and its uses.
The LAMMPS distribution includes the following files and directories:
README this file
LICENSE the GNU General Public License (GPL)
bench benchmark problems
cmake CMake build system
doc documentation
examples simple test problems
lib libraries LAMMPS can be linked with
potentials interatomic potential files
python Python wrapper on LAMMPS as a library
src source files
tools pre- and post-processing tools
README this file
LICENSE the GNU General Public License (GPL)
bench benchmark problems
cmake CMake build files
doc documentation
examples simple test problems
fortran Fortran wrapper for LAMMPS
lib additional provided or external libraries
potentials interatomic potential files
python Python wrappers for LAMMPS
src source files
tools pre- and post-processing tools
Point your browser at any of these files to get started:
http://lammps.sandia.gov/doc/Manual.html the LAMMPS manual
http://lammps.sandia.gov/doc/Intro.html hi-level introduction
http://lammps.sandia.gov/doc/Build.html how to build LAMMPS
http://lammps.sandia.gov/doc/Run_head.html how to run LAMMPS
http://lammps.sandia.gov/doc/Developer.pdf LAMMPS developer guide
https://lammps.sandia.gov/doc/Manual.html LAMMPS user manual
https://lammps.sandia.gov/doc/Intro.html hi-level introduction
https://lammps.sandia.gov/doc/Build.html how to build LAMMPS
https://lammps.sandia.gov/doc/Run_head.html how to run LAMMPS
https://lammps.sandia.gov/doc/Commands_all.html Table of available commands
https://lammps.sandia.gov/doc/pg_library.html LAMMPS programmer guide
https://lammps.sandia.gov/doc/Modify.html how to modify and extend LAMMPS
https://lammps.sandia.gov/doc/pg_developer.html LAMMPS developer guide
You can also create these doc pages locally:
% cd doc
% make html # creates HTML pages in doc/html
% make pdf # creates Manual.pdf and Developer.pdf
% make pdf # creates Manual.pdf

View File

@ -57,7 +57,6 @@ check_for_autogen_files(${LAMMPS_SOURCE_DIR})
# compiler tests
# these need ot be done early (before further tests).
#####################################################################
include(CheckCCompilerFlag)
include(CheckIncludeFileCXX)
# set required compiler flags and compiler/CPU arch specific optimizations
@ -70,27 +69,10 @@ if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel")
endif()
endif()
if(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
set(CMAKE_TUNE_DEFAULT "-march=native")
endif()
if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
set(CMAKE_TUNE_DEFAULT "-march=native")
endif()
# we require C++11 without extensions
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# GNU compiler specific features for testing
if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
option(ENABLE_COVERAGE "Enable collecting code coverage data" OFF)
mark_as_advanced(ENABLE_COVERAGE)
if(ENABLE_COVERAGE)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage")
endif()
endif()
set(CMAKE_CXX_EXTENSIONS OFF CACHE BOOL "Use compiler extensions")
########################################################################
# User input options #
@ -108,6 +90,7 @@ if(BUILD_SHARED_LIBS) # for all pkg libs, mpi_stubs and linalg
endif()
option(BUILD_TOOLS "Build and install LAMMPS tools (msi2lmp, binary2txt, chain)" OFF)
option(BUILD_LAMMPS_SHELL "Build and install the LAMMPS shell" OFF)
include(GNUInstallDirs)
file(GLOB ALL_SOURCES ${LAMMPS_SOURCE_DIR}/[^.]*.cpp)
@ -122,8 +105,8 @@ install(TARGETS lmp EXPORT LAMMPS_Targets DESTINATION ${CMAKE_INSTALL_BINDIR})
option(CMAKE_VERBOSE_MAKEFILE "Generate verbose Makefiles" OFF)
set(STANDARD_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS DIPOLE
GRANULAR KSPACE LATTE MANYBODY MC MESSAGE MISC MOLECULE PERI POEMS QEQ
REPLICA RIGID SHOCK SPIN SNAP SRD KIM PYTHON MSCG MPIIO VORONOI
GRANULAR KSPACE LATTE MANYBODY MC MESSAGE MISC MLIAP MOLECULE PERI POEMS
QEQ REPLICA RIGID SHOCK SPIN SNAP SRD KIM PYTHON MSCG MPIIO VORONOI
USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-MESODPD USER-CGSDK USER-COLVARS
USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP USER-H5MD USER-LB
USER-MANIFOLD USER-MEAMC USER-MESONT USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE
@ -175,11 +158,11 @@ else()
file(GLOB MPI_SOURCES ${LAMMPS_SOURCE_DIR}/STUBS/mpi.c)
add_library(mpi_stubs STATIC ${MPI_SOURCES})
set_target_properties(mpi_stubs PROPERTIES OUTPUT_NAME lammps_mpi_stubs${LAMMPS_MACHINE})
target_include_directories(mpi_stubs PUBLIC $<BUILD_INTERFACE:${LAMMPS_SOURCE_DIR}/STUBS> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/lammps/mpi>)
install(FILES ${LAMMPS_SOURCE_DIR}/STUBS/mpi.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/lammps/mpi)
target_include_directories(mpi_stubs PUBLIC $<BUILD_INTERFACE:${LAMMPS_SOURCE_DIR}/STUBS>)
if(BUILD_SHARED_LIBS)
target_link_libraries(lammps PRIVATE mpi_stubs)
target_include_directories(lammps INTERFACE $<BUILD_INTERFACE:${LAMMPS_SOURCE_DIR}/STUBS> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/lammps/mpi>)
target_include_directories(lammps INTERFACE $<BUILD_INTERFACE:${LAMMPS_SOURCE_DIR}/STUBS>)
target_compile_definitions(lammps INTERFACE $<INSTALL_INTERFACE:LAMMPS_LIB_NO_MPI>)
else()
target_link_libraries(lammps PUBLIC mpi_stubs)
endif()
@ -203,13 +186,14 @@ if(NOT ${LAMMPS_MEMALIGN} STREQUAL "0")
target_compile_definitions(lammps PRIVATE -DLAMMPS_MEMALIGN=${LAMMPS_MEMALIGN})
endif()
option(LAMMPS_EXCEPTIONS "enable the use of C++ exceptions for error messages (useful for library interface)" OFF)
option(LAMMPS_EXCEPTIONS "enable the use of C++ exceptions for error messages (useful for library interface)" ${ENABLE_TESTING})
if(LAMMPS_EXCEPTIONS)
target_compile_definitions(lammps PUBLIC -DLAMMPS_EXCEPTIONS)
endif()
# "hard" dependencies between packages resulting
# in an error instead of skipping over files
pkg_depends(MLIAP SNAP)
pkg_depends(MPIIO MPI)
pkg_depends(USER-ATC MANYBODY)
pkg_depends(USER-LB MPI)
@ -235,10 +219,9 @@ if(BUILD_OMP)
message(FATAL_ERROR "Cannot find the 'omp.h' header file required for full OpenMP support")
endif()
if (((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 8.99.9)) OR
((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 9.99.9)) OR
((CMAKE_CXX_COMPILER_ID STREQUAL "Intel") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 18.99.9))
)
if (((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 9.0)) OR
((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 10.0)) OR
((CMAKE_CXX_COMPILER_ID STREQUAL "Intel") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.0)))
# GCC 9.x and later plus Clang 10.x and later implement strict OpenMP 4.0 semantics for consts.
# Intel 18.0 was tested to support both, so we switch to OpenMP 4+ from 19.x onward to be safe.
target_compile_definitions(lammps PRIVATE -DLAMMPS_OMP_COMPAT=4)
@ -248,6 +231,68 @@ if(BUILD_OMP)
target_link_libraries(lammps PRIVATE OpenMP::OpenMP_CXX)
endif()
# Compiler specific features for testing
if(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
option(ENABLE_COVERAGE "Enable collecting code coverage data" OFF)
mark_as_advanced(ENABLE_COVERAGE)
if(ENABLE_COVERAGE)
if(CMAKE_VERSION VERSION_LESS 3.13)
if(CMAKE_CXX_FLAGS)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_${CMAKE_BUILD_TYPE}_FLAGS} --coverage")
endif()
else()
target_compile_options(lammps PUBLIC --coverage)
target_link_options(lammps PUBLIC --coverage)
endif()
endif()
endif()
#######################################
# add custom target for IWYU analysis
#######################################
set(ENABLE_IWYU OFF CACHE BOOL "Add 'iwyu' build target to call the include-what-you-use tool")
mark_as_advanced(ENABLE_IWYU)
if(ENABLE_IWYU)
find_program(IWYU_EXE NAMES include-what-you-use iwyu)
find_program(IWYU_TOOL NAMES iwyu_tool iwyu-tool iwyu_tool.py)
if (IWYU_EXE AND IWYU_TOOL)
add_custom_target(
iwyu
${IWYU_TOOL} -o clang -p ${CMAKE_CURRENT_BINARY_DIR} -- -Xiwyu --mapping_file=${CMAKE_CURRENT_SOURCE_DIR}/iwyu/iwyu-extra-map.imp
COMMENT "Running IWYU")
add_dependencies(iwyu lammps)
else()
message(FATAL_ERROR "To use IWYU you need the include-what-you-use/iwyu executable"
"and the iwyu-tool/iwyu_tool script installed in your PATH")
endif()
endif()
set(ENABLE_SANITIZER "none" CACHE STRING "Select a code sanitizer option (none (default), address, leak, thread, undefined)")
mark_as_advanced(ENABLE_SANITIZER)
set(ENABLE_SANITIZER_VALUES none address leak thread undefined)
set_property(CACHE ENABLE_SANITIZER PROPERTY STRINGS ${ENABLE_SANITIZER_VALUES})
validate_option(ENABLE_SANITIZER ENABLE_SANITIZER_VALUES)
string(TOLOWER ${ENABLE_SANITIZER} ENABLE_SANITIZER)
if(NOT ENABLE_SANITIZER STREQUAL "none")
if((${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") OR (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang"))
if(CMAKE_VERSION VERSION_LESS 3.13)
if(CMAKE_CXX_FLAGS)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=${ENABLE_SANITIZER}")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_${CMAKE_BUILD_TYPE}_FLAGS} -fsanitize=${ENABLE_SANITIZER}")
endif()
else()
target_compile_options(lammps PUBLIC -fsanitize=${ENABLE_SANITIZER})
target_link_options(lammps PUBLIC -fsanitize=${ENABLE_SANITIZER})
endif()
else()
message(WARNING "ENABLE_SANITIZER option not supported by ${CMAKE_CXX_COMPILER_ID} compilers. Ignoring.")
set(ENABLE_SANITIZER "none")
endif()
endif()
if(PKG_MSCG OR PKG_USER-ATC OR PKG_USER-AWPMD OR PKG_USER-QUIP OR PKG_LATTE)
enable_language(C)
find_package(LAPACK)
@ -268,14 +313,13 @@ if(PKG_MSCG OR PKG_USER-ATC OR PKG_USER-AWPMD OR PKG_USER-QUIP OR PKG_LATTE)
endif()
endif()
find_package(JPEG QUIET)
option(WITH_JPEG "Enable JPEG support" ${JPEG_FOUND})
if(WITH_JPEG)
find_package(JPEG REQUIRED)
target_compile_definitions(lammps PRIVATE -DLAMMPS_JPEG)
if(CMAKE_VERSION VERSION_LESS 3.12)
target_include_directories(lammps PRIVATE ${JPEG_INCLUDE_DIR})
target_include_directories(lammps PRIVATE ${JPEG_INCLUDE_DIRS})
target_link_libraries(lammps PRIVATE ${JPEG_LIBRARIES})
else()
target_link_libraries(lammps PRIVATE JPEG::JPEG)
@ -300,20 +344,22 @@ find_program(GZIP_EXECUTABLE gzip)
find_package_handle_standard_args(GZIP REQUIRED_VARS GZIP_EXECUTABLE)
option(WITH_GZIP "Enable GZIP support" ${GZIP_FOUND})
if(WITH_GZIP)
if(NOT GZIP_FOUND)
if(GZIP_FOUND OR ((CMAKE_SYSTEM_NAME STREQUAL Windows) AND CMAKE_CROSSCOMPILING))
target_compile_definitions(lammps PRIVATE -DLAMMPS_GZIP)
else()
message(FATAL_ERROR "gzip executable not found")
endif()
target_compile_definitions(lammps PRIVATE -DLAMMPS_GZIP)
endif()
find_program(FFMPEG_EXECUTABLE ffmpeg)
find_package_handle_standard_args(FFMPEG REQUIRED_VARS FFMPEG_EXECUTABLE)
option(WITH_FFMPEG "Enable FFMPEG support" ${FFMPEG_FOUND})
if(WITH_FFMPEG)
if(NOT FFMPEG_FOUND)
if(FFMPEG_FOUND OR ((CMAKE_SYSTEM_NAME STREQUAL Windows) AND CMAKE_CROSSCOMPILING))
target_compile_definitions(lammps PRIVATE -DLAMMPS_FFMPEG)
else()
message(FATAL_ERROR "ffmpeg executable not found")
endif()
target_compile_definitions(lammps PRIVATE -DLAMMPS_FFMPEG)
endif()
if(BUILD_SHARED_LIBS)
@ -333,17 +379,10 @@ foreach(PKG_WITH_INCL KSPACE PYTHON VORONOI USER-COLVARS USER-MOLFILE USER-NETCD
endif()
endforeach()
set(CMAKE_TUNE_FLAGS "${CMAKE_TUNE_DEFAULT}" CACHE STRING "Compiler specific optimization or instrumentation")
set(CMAKE_TUNE_FLAGS "${CMAKE_TUNE_DEFAULT}" CACHE STRING "Compiler and machine specific optimization flags (compilation only)")
separate_arguments(CMAKE_TUNE_FLAGS)
include(CheckCXXCompilerFlag)
foreach(_FLAG ${CMAKE_TUNE_FLAGS})
string(REGEX REPLACE "[=\"]" "" _FLAGX ${_FLAG})
check_cxx_compiler_flag("${_FLAG}" COMPILER_SUPPORTS${_FLAGX})
if(COMPILER_SUPPORTS${_FLAGX})
target_compile_options(lammps PRIVATE ${_FLAG})
else()
message(WARNING "${_FLAG} found in CMAKE_TUNE_FLAGS, but not supported by the compiler, skipping")
endif()
target_compile_options(lammps PRIVATE ${_FLAG})
endforeach()
########################################################################
# Basic system tests (standard libraries, headers, functions, types) #
@ -538,7 +577,7 @@ if (${_index} GREATER -1)
endif()
set(LAMMPS_CXX_HEADERS angle.h atom.h bond.h citeme.h comm.h compute.h dihedral.h domain.h error.h fix.h force.h group.h improper.h
input.h info.h kspace.h lammps.h lattice.h library.h lmppython.h lmptype.h memory.h modify.h neighbor.h neigh_list.h output.h
pair.h pointers.h region.h timer.h universe.h update.h variable.h)
pair.h pointers.h region.h timer.h universe.h update.h utils.h variable.h)
if(LAMMPS_EXCEPTIONS)
list(APPEND LAMMPS_CXX_HEADERS exceptions.h)
endif()
@ -574,36 +613,7 @@ if(BUILD_SHARED_LIBS)
endif()
install(FILES ${LAMMPS_DOC_DIR}/lammps.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 RENAME ${LAMMPS_BINARY}.1)
if(BUILD_TOOLS)
add_executable(binary2txt ${LAMMPS_TOOLS_DIR}/binary2txt.cpp)
target_compile_definitions(binary2txt PRIVATE -DLAMMPS_${LAMMPS_SIZES})
install(TARGETS binary2txt DESTINATION ${CMAKE_INSTALL_BINDIR})
include(CheckGeneratorSupport)
if(CMAKE_GENERATOR_SUPPORT_FORTRAN)
include(CheckLanguage)
check_language(Fortran)
if(CMAKE_Fortran_COMPILER)
enable_language(Fortran)
add_executable(chain.x ${LAMMPS_TOOLS_DIR}/chain.f)
target_link_libraries(chain.x PRIVATE ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES})
install(TARGETS chain.x DESTINATION ${CMAKE_INSTALL_BINDIR})
else()
message(WARNING "No suitable Fortran compiler found, skipping building 'chain.x'")
endif()
else()
message(WARNING "CMake build doesn't support fortran, skipping building 'chain.x'")
endif()
enable_language(C)
get_filename_component(MSI2LMP_SOURCE_DIR ${LAMMPS_TOOLS_DIR}/msi2lmp/src ABSOLUTE)
file(GLOB MSI2LMP_SOURCES ${MSI2LMP_SOURCE_DIR}/[^.]*.c)
add_executable(msi2lmp ${MSI2LMP_SOURCES})
target_link_libraries(msi2lmp PRIVATE ${MATH_LIBRARIES})
install(TARGETS msi2lmp DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES ${LAMMPS_DOC_DIR}/msi2lmp.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
endif()
include(Tools)
include(Documentation)
###############################################################################
@ -699,6 +709,7 @@ get_target_property(DEFINES lammps COMPILE_DEFINITIONS)
include(FeatureSummary)
feature_summary(DESCRIPTION "The following tools and libraries have been found and configured:" WHAT PACKAGES_FOUND)
message(STATUS "<<< Build configuration >>>
Operating System: ${CMAKE_SYSTEM_NAME}
Build type: ${CMAKE_BUILD_TYPE}
Install path: ${CMAKE_INSTALL_PREFIX}
Generator: ${CMAKE_GENERATOR} using ${CMAKE_MAKE_PROGRAM}
@ -729,6 +740,12 @@ if (${_index} GREATER -1)
endif()
message(STATUS "<<< Linker flags: >>>")
message(STATUS "Executable name: ${LAMMPS_BINARY}")
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.13)
get_target_property(OPTIONS lammps LINK_OPTIONS)
if(OPTIONS)
message(STATUS "Linker options: ${OPTIONS}")
endif()
endif()
if(CMAKE_EXE_LINKER_FLAGS)
message(STATUS "Executable linker flags: ${CMAKE_EXE_LINKER_FLAGS}")
endif()
@ -792,3 +809,9 @@ endif()
if(BUILD_DOC)
message(STATUS "<<< Building HTML Manual >>>")
endif()
if(BUILD_TOOLS)
message(STATUS "<<< Building Tools >>>")
endif()
if(BUILD_LAMMPS_SHELL)
message(STATUS "<<< Building LAMMPS Shell >>>")
endif()

View File

@ -3,11 +3,16 @@
#
# Requires latest gcovr (for GCC 8.1 support):#
# pip install git+https://github.com/gcovr/gcovr.git
#
# For Python coverage the coverage package needs to be installed
###############################################################################
if(ENABLE_COVERAGE)
find_program(GCOVR_BINARY gcovr)
find_package_handle_standard_args(GCOVR DEFAULT_MSG GCOVR_BINARY)
find_program(COVERAGE_BINARY coverage)
find_package_handle_standard_args(COVERAGE DEFAULT_MSG COVERAGE_BINARY)
if(GCOVR_FOUND)
get_filename_component(ABSOLUTE_LAMMPS_SOURCE_DIR ${LAMMPS_SOURCE_DIR} ABSOLUTE)
@ -46,4 +51,30 @@ if(ENABLE_COVERAGE)
)
add_dependencies(reset_coverage clean_coverage_html)
endif()
if(COVERAGE_FOUND)
set(PYTHON_COVERAGE_HTML_DIR ${CMAKE_BINARY_DIR}/python_coverage_html)
add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/unittest/python/.coverage
COMMAND ${COVERAGE_BINARY} combine
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/unittest/python
COMMENT "Combine Python coverage files..."
)
add_custom_target(
gen_python_coverage_html
COMMAND ${COVERAGE_BINARY} html -d ${PYTHON_COVERAGE_HTML_DIR}
DEPENDS ${CMAKE_BINARY_DIR}/unittest/python/.coverage
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/unittest/python
COMMENT "Generating HTML Python coverage report..."
)
add_custom_target(
gen_python_coverage_xml
COMMAND ${COVERAGE_BINARY} xml -o ${CMAKE_BINARY_DIR}/python_coverage.xml
DEPENDS ${CMAKE_BINARY_DIR}/unittest/python/.coverage
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/unittest/python
COMMENT "Generating XML Python coverage report..."
)
endif()
endif()

View File

@ -15,75 +15,93 @@ if(BUILD_DOC)
endif()
set(VIRTUALENV ${Python3_EXECUTABLE} -m virtualenv -p ${Python3_EXECUTABLE})
endif()
find_package(Doxygen 1.8.10 REQUIRED)
file(GLOB DOC_SOURCES ${LAMMPS_DOC_DIR}/src/[^.]*.rst)
add_custom_command(
OUTPUT docenv
COMMAND ${VIRTUALENV} docenv
)
set(DOCENV_BINARY_DIR ${CMAKE_BINARY_DIR}/docenv/bin)
set(DOCENV_REQUIREMENTS_FILE ${LAMMPS_DOC_DIR}/utils/requirements.txt)
set(SPHINX_CONFIG_DIR ${LAMMPS_DOC_DIR}/utils/sphinx-config)
set(SPHINX_CONFIG_FILE_TEMPLATE ${SPHINX_CONFIG_DIR}/conf.py.in)
set(SPHINX_STATIC_DIR ${SPHINX_CONFIG_DIR}/_static)
# configuration and static files are copied to binary dir to avoid collisions with parallel builds
set(DOC_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/doc)
set(DOC_BUILD_CONFIG_FILE ${DOC_BUILD_DIR}/conf.py)
set(DOC_BUILD_STATIC_DIR ${DOC_BUILD_DIR}/_static)
set(DOXYGEN_BUILD_DIR ${DOC_BUILD_DIR}/doxygen)
set(DOXYGEN_XML_DIR ${DOXYGEN_BUILD_DIR}/xml)
# copy entire configuration folder to doc build directory
# files in _static are automatically copied during sphinx-build, so no need to copy them individually
file(COPY ${SPHINX_CONFIG_DIR}/ DESTINATION ${DOC_BUILD_DIR})
# configure paths in conf.py, since relative paths change when file is copied
configure_file(${SPHINX_CONFIG_FILE_TEMPLATE} ${DOC_BUILD_CONFIG_FILE})
add_custom_command(
OUTPUT requirements.txt
DEPENDS docenv
COMMAND ${CMAKE_COMMAND} -E copy ${LAMMPS_DOC_DIR}/utils/requirements.txt requirements.txt
COMMAND ${DOCENV_BINARY_DIR}/pip install -r requirements.txt --upgrade
OUTPUT ${DOC_BUILD_DIR}/requirements.txt
DEPENDS docenv ${DOCENV_REQUIREMENTS_FILE}
COMMAND ${CMAKE_COMMAND} -E copy ${DOCENV_REQUIREMENTS_FILE} ${DOC_BUILD_DIR}/requirements.txt
COMMAND ${DOCENV_BINARY_DIR}/pip install --upgrade pip
COMMAND ${DOCENV_BINARY_DIR}/pip install --upgrade ${LAMMPS_DOC_DIR}/utils/converters
COMMAND ${DOCENV_BINARY_DIR}/pip install --use-feature=2020-resolver -r ${DOC_BUILD_DIR}/requirements.txt --upgrade
)
# download mathjax distribution and unpack to folder "mathjax"
if(NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/mathjax/es5)
if(NOT EXISTS ${DOC_BUILD_STATIC_DIR}/mathjax/es5)
file(DOWNLOAD "https://github.com/mathjax/MathJax/archive/3.0.5.tar.gz"
"${CMAKE_CURRENT_BINARY_DIR}/mathjax.tar.gz"
EXPECTED_MD5 5d9d3799cce77a1a95eee6be04eb68e7)
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf mathjax.tar.gz WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
file(GLOB MATHJAX_VERSION_DIR ${CMAKE_CURRENT_BINARY_DIR}/MathJax-*)
execute_process(COMMAND ${CMAKE_COMMAND} -E rename ${MATHJAX_VERSION_DIR} ${CMAKE_CURRENT_BINARY_DIR}/mathjax)
execute_process(COMMAND ${CMAKE_COMMAND} -E rename ${MATHJAX_VERSION_DIR} ${DOC_BUILD_STATIC_DIR}/mathjax)
endif()
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html/_static/mathjax)
file(COPY ${CMAKE_CURRENT_BINARY_DIR}/mathjax/es5 DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/html/_static/mathjax/)
# for increased browser compatibility
if(NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/html/_static/polyfill.js)
if(NOT EXISTS ${DOC_BUILD_STATIC_DIR}/polyfill.js)
file(DOWNLOAD "https://polyfill.io/v3/polyfill.min.js?features=es6"
"${CMAKE_CURRENT_BINARY_DIR}/html/_static/polyfill.js")
"${DOC_BUILD_STATIC_DIR}/polyfill.js")
endif()
# note, this may run in parallel with other tasks, so we must not use multiple processes here
# set up doxygen and add targets to run it
file(MAKE_DIRECTORY ${DOXYGEN_BUILD_DIR})
file(COPY ${LAMMPS_DOC_DIR}/doxygen/lammps-logo.png DESTINATION ${DOXYGEN_BUILD_DIR}/lammps-logo.png)
configure_file(${LAMMPS_DOC_DIR}/doxygen/Doxyfile.in ${DOXYGEN_BUILD_DIR}/Doxyfile)
get_target_property(LAMMPS_SOURCES lammps SOURCES)
add_custom_command(
OUTPUT html
DEPENDS ${DOC_SOURCES} docenv requirements.txt
COMMAND ${DOCENV_BINARY_DIR}/sphinx-build -b html -c ${LAMMPS_DOC_DIR}/utils/sphinx-config -d ${CMAKE_BINARY_DIR}/doctrees ${LAMMPS_DOC_DIR}/src html
COMMAND ${CMAKE_COMMAND} -E create_symlink Manual.html ${CMAKE_CURRENT_BINARY_DIR}/html/index.html
OUTPUT ${DOXYGEN_XML_DIR}/index.xml
DEPENDS ${DOC_SOURCES} ${LAMMPS_SOURCES}
COMMAND Doxygen::doxygen ${DOXYGEN_BUILD_DIR}/Doxyfile WORKING_DIRECTORY ${DOXYGEN_BUILD_DIR}
COMMAND ${CMAKE_COMMAND} -E touch ${DOXYGEN_XML_DIR}/run.stamp
)
# copy selected image files to html output tree
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/html/JPG)
set(HTML_EXTRA_IMAGES balance_nonuniform.jpg balance_rcb.jpg
balance_uniform.jpg bow_tutorial_01.png bow_tutorial_02.png
bow_tutorial_03.png bow_tutorial_04.png bow_tutorial_05.png
dump1.jpg dump2.jpg examples_mdpd.gif gran_funnel.png gran_mixer.png
hop1.jpg hop2.jpg saed_ewald_intersect.jpg saed_mesh.jpg
screenshot_atomeye.jpg screenshot_gl.jpg screenshot_pymol.jpg
screenshot_vmd.jpg sinusoid.jpg xrd_mesh.jpg)
set(HTML_IMAGE_TARGETS "")
foreach(_IMG ${HTML_EXTRA_IMAGES})
string(PREPEND _IMG JPG/)
list(APPEND HTML_IMAGE_TARGETS "${CMAKE_CURRENT_BINARY_DIR}/html/${_IMG}")
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/html/${_IMG}
DEPENDS ${LAMMPS_DOC_DIR}/src/${_IMG} ${CMAKE_CURRENT_BINARY_DIR}/html/JPG
COMMAND ${CMAKE_COMMAND} -E copy ${LAMMPS_DOC_DIR}/src/${_IMG} ${CMAKE_BINARY_DIR}/html/${_IMG}
)
endforeach()
if(EXISTS ${DOXYGEN_XML_DIR}/run.stamp)
set(SPHINX_EXTRA_OPTS "-E")
else()
set(SPHINX_EXTRA_OPTS "")
endif()
add_custom_command(
OUTPUT html
DEPENDS ${DOC_SOURCES} docenv ${DOC_BUILD_DIR}/requirements.txt ${DOXYGEN_XML_DIR}/index.xml ${BUILD_DOC_CONFIG_FILE}
COMMAND ${DOCENV_BINARY_DIR}/sphinx-build ${SPHINX_EXTRA_OPTS} -b html -c ${DOC_BUILD_DIR} -d ${DOC_BUILD_DIR}/doctrees ${LAMMPS_DOC_DIR}/src ${DOC_BUILD_DIR}/html
COMMAND ${CMAKE_COMMAND} -E create_symlink Manual.html ${DOC_BUILD_DIR}/html/index.html
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LAMMPS_DOC_DIR}/src/PDF ${DOC_BUILD_DIR}/html/PDF
COMMAND ${CMAKE_COMMAND} -E remove -f ${DOXYGEN_XML_DIR}/run.stamp
)
add_custom_target(
doc ALL
DEPENDS html ${CMAKE_CURRENT_BINARY_DIR}/html/_static/mathjax/es5 ${HTML_IMAGE_TARGETS}
DEPENDS html ${DOC_BUILD_STATIC_DIR}/mathjax/es5
SOURCES ${LAMMPS_DOC_DIR}/utils/requirements.txt ${DOC_SOURCES}
)
install(DIRECTORY ${CMAKE_BINARY_DIR}/html DESTINATION ${CMAKE_INSTALL_DOCDIR})
install(DIRECTORY ${DOC_BUILD_DIR}/html DESTINATION ${CMAKE_INSTALL_DOCDIR})
endif()

View File

@ -7,9 +7,11 @@ else()
endif()
include(ExternalProject)
set(GTEST_URL "https://github.com/google/googletest/archive/release-1.10.0.tar.gz" CACHE STRING "URL for GTest tarball")
mark_as_advanced(GTEST_URL)
ExternalProject_Add(googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG release-1.10.0
URL ${GTEST_URL}
URL_MD5 ecd1fa65e7de707cd5c00bdac56022cd
SOURCE_DIR "${CMAKE_BINARY_DIR}/gtest-src"
BINARY_DIR "${CMAKE_BINARY_DIR}/gtest-build"
CMAKE_ARGS ${CMAKE_REQUEST_PIC} ${CMAKE_EXTRA_GTEST_OPTS}
@ -52,26 +54,26 @@ add_library(GTest::GTest UNKNOWN IMPORTED)
set_target_properties(GTest::GTest PROPERTIES
IMPORTED_LOCATION ${GTEST_LIBRARY_PATH}
INTERFACE_INCLUDE_DIRECTORIES ${GTEST_INCLUDE_DIR}
IMPORTED_LINK_INTERFACE_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
INTERFACE_LINK_LIBRARIES "${CMAKE_THREAD_LIBS_INIT}")
add_dependencies(GTest::GTest googletest)
add_library(GTest::GMock UNKNOWN IMPORTED)
set_target_properties(GTest::GMock PROPERTIES
IMPORTED_LOCATION ${GMOCK_LIBRARY_PATH}
INTERFACE_INCLUDE_DIRECTORIES ${GMOCK_INCLUDE_DIR}
IMPORTED_LINK_INTERFACE_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
INTERFACE_LINK_LIBRARIES "${CMAKE_THREAD_LIBS_INIT}")
add_dependencies(GTest::GMock googletest)
add_library(GTest::GTestMain UNKNOWN IMPORTED)
set_target_properties(GTest::GTestMain PROPERTIES
IMPORTED_LOCATION ${GTEST_MAIN_LIBRARY_PATH}
INTERFACE_INCLUDE_DIRECTORIES ${GTEST_INCLUDE_DIR}
IMPORTED_LINK_INTERFACE_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
INTERFACE_LINK_LIBRARIES "${CMAKE_THREAD_LIBS_INIT}")
add_dependencies(GTest::GTestMain googletest)
add_library(GTest::GMockMain UNKNOWN IMPORTED)
set_target_properties(GTest::GMockMain PROPERTIES
IMPORTED_LOCATION ${GMOCK_MAIN_LIBRARY_PATH}
INTERFACE_INCLUDE_DIRECTORIES ${GMOCK_INCLUDE_DIR}
IMPORTED_LINK_INTERFACE_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
INTERFACE_LINK_LIBRARIES "${CMAKE_THREAD_LIBS_INIT}")
add_dependencies(GTest::GMockMain googletest)

View File

@ -1,3 +1,3 @@
# utility script to call GenerateBinaryHeader function
include(${SOURCE_DIR}/Modules/LAMMPSUtils.cmake)
GenerateBinaryHeader(${VARNAME} ${HEADER_FILE} ${SOURCE_FILES})
GenerateBinaryHeader(${VARNAME} ${HEADER_FILE} ${SOURCE_FILE})

View File

@ -71,19 +71,15 @@ macro(pkg_depends PKG1 PKG2)
endmacro()
# CMake-only replacement for bin2c and xxd
function(GenerateBinaryHeader varname outfile files)
function(GenerateBinaryHeader varname outfile infile)
message("Creating ${outfile}...")
file(WRITE ${outfile} "// CMake generated file\n")
math(EXPR ARG_END "${ARGC}-1")
foreach(IDX RANGE 2 ${ARG_END})
list(GET ARGV ${IDX} filename)
file(READ ${filename} content HEX)
string(REGEX REPLACE "([0-9a-f][0-9a-f])" "0x\\1," content "${content}")
string(REGEX REPLACE ",$" "" content "${content}")
file(APPEND ${outfile} "const unsigned char ${varname}[] = { ${content} };\n")
file(APPEND ${outfile} "const unsigned int ${varname}_size = sizeof(${varname});\n")
endforeach()
file(READ ${infile} content HEX)
string(REGEX REPLACE "([0-9a-f][0-9a-f])" "0x\\1," content "${content}")
string(REGEX REPLACE ",$" "" content "${content}")
file(APPEND ${outfile} "const unsigned char ${varname}[] = { ${content} };\n")
file(APPEND ${outfile} "const unsigned int ${varname}_size = sizeof(${varname});\n")
endfunction(GenerateBinaryHeader)
# fetch missing potential files

View File

@ -1,2 +1,10 @@
find_package(ZLIB REQUIRED)
target_link_libraries(lammps PRIVATE ZLIB::ZLIB)
find_package(PkgConfig REQUIRED)
pkg_check_modules(Zstd IMPORTED_TARGET libzstd>=1.4)
if(Zstd_FOUND)
target_compile_definitions(lammps PRIVATE -DLAMMPS_ZSTD)
target_link_libraries(lammps PRIVATE PkgConfig::Zstd)
endif()

View File

@ -64,30 +64,41 @@ if(GPU_API STREQUAL "CUDA")
# build arch/gencode commands for nvcc based on CUDA toolkit version and use choice
# --arch translates directly instead of JIT, so this should be for the preferred or most common architecture
set(GPU_CUDA_GENCODE "-arch=${GPU_ARCH} ")
set(GPU_CUDA_GENCODE "-arch=${GPU_ARCH}")
# Fermi (GPU Arch 2.x) is supported by CUDA 3.2 to CUDA 8.0
if((CUDA_VERSION VERSION_GREATER "3.1") AND (CUDA_VERSION VERSION_LESS "9.0"))
string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_20,code=[sm_20,compute_20] ")
if((CUDA_VERSION VERSION_GREATER_EQUAL "3.2") AND (CUDA_VERSION VERSION_LESS "9.0"))
string(APPEND GPU_CUDA_GENCODE " -gencode arch=compute_20,code=[sm_20,compute_20] ")
endif()
# Kepler (GPU Arch 3.x) is supported by CUDA 5 and later
if(CUDA_VERSION VERSION_GREATER "4.9")
string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_30,code=[sm_30,compute_30] -gencode arch=compute_35,code=[sm_35,compute_35] ")
# Kepler (GPU Arch 3.0) is supported by CUDA 5 to CUDA 10.2
if((CUDA_VERSION VERSION_GREATER_EQUAL "5.0") AND (CUDA_VERSION VERSION_LESS "11.0"))
string(APPEND GPU_CUDA_GENCODE " -gencode arch=compute_30,code=[sm_30,compute_30] ")
endif()
# Kepler (GPU Arch 3.5) is supported by CUDA 5 to CUDA 11
if((CUDA_VERSION VERSION_GREATER_EQUAL "5.0") AND (CUDA_VERSION VERSION_LESS "12.0"))
string(APPEND GPU_CUDA_GENCODE " -gencode arch=compute_35,code=[sm_35,compute_35]")
endif()
# Maxwell (GPU Arch 5.x) is supported by CUDA 6 and later
if(CUDA_VERSION VERSION_GREATER "5.9")
string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_50,code=[sm_50,compute_50] -gencode arch=compute_52,code=[sm_52,compute_52] ")
if(CUDA_VERSION VERSION_GREATER_EQUAL "6.0")
string(APPEND GPU_CUDA_GENCODE " -gencode arch=compute_50,code=[sm_50,compute_50] -gencode arch=compute_52,code=[sm_52,compute_52]")
endif()
# Pascal (GPU Arch 6.x) is supported by CUDA 8 and later
if(CUDA_VERSION VERSION_GREATER "7.9")
string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_60,code=[sm_60,compute_60] -gencode arch=compute_61,code=[sm_61,compute_61] ")
if(CUDA_VERSION VERSION_GREATER_EQUAL "8.0")
string(APPEND GPU_CUDA_GENCODE " -gencode arch=compute_60,code=[sm_60,compute_60] -gencode arch=compute_61,code=[sm_61,compute_61]")
endif()
# Volta (GPU Arch 7.0) is supported by CUDA 9 and later
if(CUDA_VERSION VERSION_GREATER "8.9")
string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_70,code=[sm_70,compute_70] ")
if(CUDA_VERSION VERSION_GREATER_EQUAL "9.0")
string(APPEND GPU_CUDA_GENCODE " -gencode arch=compute_70,code=[sm_70,compute_70]")
endif()
# Turing (GPU Arch 7.5) is supported by CUDA 10 and later
if(CUDA_VERSION VERSION_GREATER "9.9")
string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_75,code=[sm_75,compute_75] ")
if(CUDA_VERSION VERSION_GREATER_EQUAL "10.0")
string(APPEND GPU_CUDA_GENCODE " -gencode arch=compute_75,code=[sm_75,compute_75]")
endif()
# Ampere (GPU Arch 8.0) is supported by CUDA 11 and later
if(CUDA_VERSION VERSION_GREATER_EQUAL "11.0")
string(APPEND GPU_CUDA_GENCODE " -gencode arch=compute_80,code=[sm_80,compute_80]")
endif()
if(CUDA_VERSION VERSION_GREATER_EQUAL "12.0")
message(WARNING "Unsupported CUDA version. Use at your own risk.")
endif()
cuda_compile_fatbin(GPU_GEN_OBJS ${GPU_LIB_CU} OPTIONS ${CUDA_REQUEST_PIC}
@ -226,30 +237,41 @@ elseif(GPU_API STREQUAL "HIP")
# build arch/gencode commands for nvcc based on CUDA toolkit version and use choice
# --arch translates directly instead of JIT, so this should be for the preferred or most common architecture
set(HIP_CUDA_GENCODE "-arch=${HIP_ARCH} ")
set(HIP_CUDA_GENCODE "-arch=${HIP_ARCH}")
# Fermi (GPU Arch 2.x) is supported by CUDA 3.2 to CUDA 8.0
if((CUDA_VERSION VERSION_GREATER "3.1") AND (CUDA_VERSION VERSION_LESS "9.0"))
string(APPEND HIP_CUDA_GENCODE "-gencode arch=compute_20,code=[sm_20,compute_20] ")
if((CUDA_VERSION VERSION_GREATER_EQUAL "3.2") AND (CUDA_VERSION VERSION_LESS "9.0"))
string(APPEND HIP_CUDA_GENCODE " -gencode arch=compute_20,code=[sm_20,compute_20]")
endif()
# Kepler (GPU Arch 3.x) is supported by CUDA 5 and later
if(CUDA_VERSION VERSION_GREATER "4.9")
string(APPEND HIP_CUDA_GENCODE "-gencode arch=compute_30,code=[sm_30,compute_30] -gencode arch=compute_35,code=[sm_35,compute_35] ")
# Kepler (GPU Arch 3.0) is supported by CUDA 5 to CUDA 10.2
if((CUDA_VERSION VERSION_GREATER_EQUAL "5.0") AND (CUDA_VERSION VERSION_LESS "11.0"))
string(APPEND HIP_CUDA_GENCODE " -gencode arch=compute_30,code=[sm_30,compute_30]")
endif()
# Kepler (GPU Arch 3.5) is supported by CUDA 5 to CUDA 11.0
if((CUDA_VERSION VERSION_GREATER_EQUAL "5.0") AND (CUDA_VERSION VERSION_LESS "12.0"))
string(APPEND HIP_CUDA_GENCODE " -gencode arch=compute_35,code=[sm_35,compute_35]")
endif()
# Maxwell (GPU Arch 5.x) is supported by CUDA 6 and later
if(CUDA_VERSION VERSION_GREATER "5.9")
string(APPEND HIP_CUDA_GENCODE "-gencode arch=compute_50,code=[sm_50,compute_50] -gencode arch=compute_52,code=[sm_52,compute_52] ")
if(CUDA_VERSION VERSION_GREATER_EQUAL "6.0")
string(APPEND HIP_CUDA_GENCODE " -gencode arch=compute_50,code=[sm_50,compute_50] -gencode arch=compute_52,code=[sm_52,compute_52]")
endif()
# Pascal (GPU Arch 6.x) is supported by CUDA 8 and later
if(CUDA_VERSION VERSION_GREATER "7.9")
string(APPEND HIP_CUDA_GENCODE "-gencode arch=compute_60,code=[sm_60,compute_60] -gencode arch=compute_61,code=[sm_61,compute_61] ")
if(CUDA_VERSION VERSION_GREATER_EQUAL "8.0")
string(APPEND HIP_CUDA_GENCODE " -gencode arch=compute_60,code=[sm_60,compute_60] -gencode arch=compute_61,code=[sm_61,compute_61]")
endif()
# Volta (GPU Arch 7.0) is supported by CUDA 9 and later
if(CUDA_VERSION VERSION_GREATER "8.9")
string(APPEND HIP_CUDA_GENCODE "-gencode arch=compute_70,code=[sm_70,compute_70] ")
if(CUDA_VERSION VERSION_GREATER_EQUAL "9.0")
string(APPEND HIP_CUDA_GENCODE " -gencode arch=compute_70,code=[sm_70,compute_70]")
endif()
# Turing (GPU Arch 7.5) is supported by CUDA 10 and later
if(CUDA_VERSION VERSION_GREATER "9.9")
string(APPEND HIP_CUDA_GENCODE "-gencode arch=compute_75,code=[sm_75,compute_75] ")
if(CUDA_VERSION VERSION_GREATER_EQUAL "10.0")
string(APPEND HIP_CUDA_GENCODE " -gencode arch=compute_75,code=[sm_75,compute_75]")
endif()
# Ampere (GPU Arch 8.0) is supported by CUDA 11 and later
if(CUDA_VERSION VERSION_GREATER_EQUAL "11.0")
string(APPEND HIP_CUDA_GENCODE " -gencode arch=compute_80,code=[sm_80,compute_80]")
endif()
if(CUDA_VERSION VERSION_GREATER_EQUAL "12.0")
message(WARNING "Unsupported CUDA version. Use at your own risk.")
endif()
endif()
@ -268,10 +290,17 @@ elseif(GPU_API STREQUAL "HIP")
if(HIP_PLATFORM STREQUAL "hcc")
configure_file(${CU_FILE} ${CU_CPP_FILE} COPYONLY)
add_custom_command(OUTPUT ${CUBIN_FILE}
VERBATIM COMMAND ${HIP_HIPCC_EXECUTABLE} --genco -t="${HIP_ARCH}" -f=\"-O3 -ffast-math -DUSE_HIP -D_${GPU_PREC_SETTING} -I${LAMMPS_LIB_SOURCE_DIR}/gpu\" -o ${CUBIN_FILE} ${CU_CPP_FILE}
DEPENDS ${CU_CPP_FILE}
COMMENT "Generating ${CU_NAME}.cubin")
if(HIP_COMPILER STREQUAL "clang")
add_custom_command(OUTPUT ${CUBIN_FILE}
VERBATIM COMMAND ${HIP_HIPCC_EXECUTABLE} --genco --offload-arch=${HIP_ARCH} -O3 -ffast-math -DUSE_HIP -D_${GPU_PREC_SETTING} -I${LAMMPS_LIB_SOURCE_DIR}/gpu -o ${CUBIN_FILE} ${CU_CPP_FILE}
DEPENDS ${CU_CPP_FILE}
COMMENT "Generating ${CU_NAME}.cubin")
else()
add_custom_command(OUTPUT ${CUBIN_FILE}
VERBATIM COMMAND ${HIP_HIPCC_EXECUTABLE} --genco -t="${HIP_ARCH}" -f=\"-O3 -ffast-math -DUSE_HIP -D_${GPU_PREC_SETTING} -I${LAMMPS_LIB_SOURCE_DIR}/gpu\" -o ${CUBIN_FILE} ${CU_CPP_FILE}
DEPENDS ${CU_CPP_FILE}
COMMENT "Generating ${CU_NAME}.cubin")
endif()
elseif(HIP_PLATFORM STREQUAL "nvcc")
add_custom_command(OUTPUT ${CUBIN_FILE}
VERBATIM COMMAND ${HIP_HIPCC_EXECUTABLE} --fatbin --use_fast_math -DUSE_HIP -D_${GPU_PREC_SETTING} ${HIP_CUDA_GENCODE} -I${LAMMPS_LIB_SOURCE_DIR}/gpu -o ${CUBIN_FILE} ${CU_FILE}
@ -280,7 +309,7 @@ elseif(GPU_API STREQUAL "HIP")
endif()
add_custom_command(OUTPUT ${CUBIN_H_FILE}
COMMAND ${CMAKE_COMMAND} -D SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -D VARNAME=${CU_NAME} -D HEADER_FILE=${CUBIN_H_FILE} -D SOURCE_FILES=${CUBIN_FILE} -P ${CMAKE_CURRENT_SOURCE_DIR}/Modules/GenerateBinaryHeader.cmake
COMMAND ${CMAKE_COMMAND} -D SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -D VARNAME=${CU_NAME} -D HEADER_FILE=${CUBIN_H_FILE} -D SOURCE_FILE=${CUBIN_FILE} -P ${CMAKE_CURRENT_SOURCE_DIR}/Modules/GenerateBinaryHeader.cmake
DEPENDS ${CUBIN_FILE}
COMMENT "Generating ${CU_NAME}_cubin.h")

View File

@ -35,8 +35,8 @@ if(DOWNLOAD_KOKKOS)
list(APPEND KOKKOS_LIB_BUILD_ARGS "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}")
include(ExternalProject)
ExternalProject_Add(kokkos_build
URL https://github.com/kokkos/kokkos/archive/3.1.01.tar.gz
URL_MD5 3ccb2100f7fc316891e7dad3bc33fa37
URL https://github.com/kokkos/kokkos/archive/3.2.00.tar.gz
URL_MD5 81569170fe232e5e64ab074f7cca5e50
CMAKE_ARGS ${KOKKOS_LIB_BUILD_ARGS}
BUILD_BYPRODUCTS <INSTALL_DIR>/lib/libkokkoscore.a
)
@ -50,7 +50,7 @@ if(DOWNLOAD_KOKKOS)
target_link_libraries(lammps PRIVATE LAMMPS::KOKKOS)
add_dependencies(LAMMPS::KOKKOS kokkos_build)
elseif(EXTERNAL_KOKKOS)
find_package(Kokkos 3.1.01 REQUIRED CONFIG)
find_package(Kokkos 3.2.00 REQUIRED CONFIG)
target_link_libraries(lammps PRIVATE Kokkos::kokkos)
else()
set(LAMMPS_LIB_KOKKOS_SRC_DIR ${LAMMPS_LIB_SOURCE_DIR}/kokkos)

View File

@ -19,16 +19,16 @@ if(FFT STREQUAL "FFTW3")
find_package(${FFTW} REQUIRED)
target_compile_definitions(lammps PRIVATE -DFFT_FFTW3)
target_link_libraries(lammps PRIVATE ${FFTW}::${FFTW})
if(FFTW3_OMP_LIBRARY OR FFTW3F_OMP_LIBRARY)
if(FFTW3_OMP_LIBRARIES OR FFTW3F_OMP_LIBRARIES)
option(FFT_FFTW_THREADS "Use threaded FFTW library" ON)
else()
option(FFT_FFTW_THREADS "Use threaded FFT library" OFF)
endif()
if(FFT_FFTW_THREADS)
if(FFTW3_OMP_LIBRARY OR FFTW3F_OMP_LIBRARY)
target_compile_definitions(lammps PRIVATE -DFFT_FFTW_THREADS)
target_link_libraries(lammps PRIVATE ${FFTW}::${FFTW}_OMP)
if(FFTW3_OMP_LIBRARIES OR FFTW3F_OMP_LIBRARIES)
target_compile_definitions(lammps PRIVATE -DFFT_FFTW_THREADS)
target_link_libraries(lammps PRIVATE ${FFTW}::${FFTW}_OMP)
else()
message(FATAL_ERROR "Need OpenMP enabled FFTW3 library for FFT_THREADS")
endif()

View File

@ -38,7 +38,7 @@ if(DOWNLOAD_MSCG)
else()
find_package(MSCG)
if(NOT MSCG_FOUND)
message(FATAL_ERROR "MSCG not found, help CMake to find it by setting MSCG_LIBRARY and MSCG_INCLUDE_DIRS, or set DOWNLOAD_MSCG=ON to download it")
message(FATAL_ERROR "MSCG not found, help CMake to find it by setting MSCG_LIBRARY and MSCG_INCLUDE_DIR, or set DOWNLOAD_MSCG=ON to download it")
endif()
target_link_libraries(lammps PRIVATE MSCG::MSCG)
endif()

View File

@ -1,7 +1,7 @@
if(CMAKE_VERSION VERSION_LESS 3.12)
find_package(PythonLibs REQUIRED) # Deprecated since version 3.12
target_include_directories(lammps PRIVATE ${PYTHON_INCLUDE_DIR})
target_link_libraries(lammps PRIVATE ${PYTHON_LIBRARY})
target_include_directories(lammps PRIVATE ${PYTHON_INCLUDE_DIRS})
target_link_libraries(lammps PRIVATE ${PYTHON_LIBRARIES})
else()
find_package(Python REQUIRED COMPONENTS Development)
target_link_libraries(lammps PRIVATE Python::Python)

View File

@ -2,6 +2,8 @@ set(COLVARS_SOURCE_DIR ${LAMMPS_LIB_SOURCE_DIR}/colvars)
file(GLOB COLVARS_SOURCES ${COLVARS_SOURCE_DIR}/[^.]*.cpp)
option(COLVARS_DEBUG "Debugging messages for Colvars (quite verbose)" OFF)
# Build Lepton by default
option(COLVARS_LEPTON "Build and link the Lepton library" ON)
@ -16,11 +18,18 @@ if(COLVARS_LEPTON)
endif()
add_library(colvars STATIC ${COLVARS_SOURCES})
target_compile_definitions(colvars PRIVATE -DLAMMPS_${LAMMPS_SIZES})
target_compile_definitions(colvars PRIVATE -DCOLVARS_LAMMPS)
set_target_properties(colvars PROPERTIES OUTPUT_NAME lammps_colvars${LAMMPS_MACHINE})
target_include_directories(colvars PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/colvars)
# The line below is needed to locate math_eigen_impl.h
target_include_directories(colvars PRIVATE ${LAMMPS_SOURCE_DIR})
target_link_libraries(lammps PRIVATE colvars)
if(COLVARS_DEBUG)
# Need to export the macro publicly to also affect the proxy
target_compile_definitions(colvars PUBLIC -DCOLVARS_DEBUG)
endif()
if(COLVARS_LEPTON)
target_link_libraries(lammps PRIVATE lepton)
target_compile_definitions(colvars PRIVATE -DLEPTON)

View File

@ -77,7 +77,7 @@ else()
foreach(_FLAG -O2 -fp-model fast=2 -no-prec-div -qoverride-limits -qopt-zmm-usage=high -qno-offload -fno-alias -ansi-alias -restrict)
check_cxx_compiler_flag("${_FLAG}" COMPILER_SUPPORTS${_FLAG})
if(COMPILER_SUPPORTS${_FLAG})
target_compile_options(lammps PRIVATE ${_FLAG})
target_compile_options(lammps PRIVATE ${_FLAG})
endif()
endforeach()
endif()

View File

@ -1,4 +1,5 @@
set(MOLFILE_INCLUDE_DIRS "${LAMMPS_LIB_SOURCE_DIR}/molfile" CACHE STRING "Path to VMD molfile plugin headers")
set(MOLFILE_INCLUDE_DIR "${LAMMPS_LIB_SOURCE_DIR}/molfile" CACHE STRING "Path to VMD molfile plugin headers")
set(MOLFILE_INCLUDE_DIRS "${MOLFILE_INCLUDE_DIR}")
add_library(molfile INTERFACE)
target_include_directories(molfile INTERFACE ${MOLFILE_INCLUDE_DIRS})
# no need to link with -ldl on windows

View File

@ -55,8 +55,8 @@ if(DOWNLOAD_PLUMED)
endif()
include(ExternalProject)
ExternalProject_Add(plumed_build
URL https://github.com/plumed/plumed2/releases/download/v2.6.0/plumed-src-2.6.0.tgz
URL_MD5 204d2edae58d9b10ba3ad460cad64191
URL https://github.com/plumed/plumed2/releases/download/v2.6.1/plumed-src-2.6.1.tgz
URL_MD5 89a9a450fc6025299fe16af235957163
BUILD_IN_SOURCE 1
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR>
${CONFIGURE_REQUEST_PIC}

View File

@ -14,40 +14,23 @@ endif()
option(DOWNLOAD_SCAFACOS "Download ScaFaCoS library instead of using an already installed one" ${DOWNLOAD_SCAFACOS_DEFAULT})
if(DOWNLOAD_SCAFACOS)
message(STATUS "ScaFaCoS download requested - we will build our own")
# create variables to pass our compiler flags along to the subsystem compile
# need to apply -fallow-argument-mismatch, if the fortran compiler supports it
include(CheckFortranCompilerFlag)
check_fortran_compiler_flag("-fallow-argument-mismatch" GNUFortran_ARGUMENT_MISMATCH_FLAG)
if(GNUFortran_ARGUMENT_MISMATCH_FLAG)
set(APPEND_Fortran_FLAG "-fallow-argument-mismatch")
endif()
if(CMAKE_Fortran_FLAGS)
set(SCAFACOS_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${APPEND_Fortran_FLAG}")
else()
set(SCAFACOS_Fortran_FLAGS "${CMAKE_Fortran_${CMAKE_BUILD_TYPE}_FLAGS} ${APPEND_Fortran_FLAG}")
endif()
if(CMAKE_CXX_FLAGS)
set(SCAFACOS_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
else()
set(SCAFACOS_CXX_FLAGS "${CMAKE_CXX_${CMAKE_BUILD_TYPE}_FLAGS}")
endif()
if(CMAKE_C_FLAGS)
set(SCAFACOS_C_FLAGS "${CMAKE_C_FLAGS}")
else()
set(SCAFACOS_C_FLAGS "${CMAKE_C_${CMAKE_BUILD_TYPE}_FLAGS}")
endif()
# version 1.0.1 needs a patch to compile and linke cleanly with GCC 10 and later.
file(DOWNLOAD https://download.lammps.org/thirdparty/scafacos-1.0.1-fix.diff ${CMAKE_CURRENT_BINARY_DIR}/scafacos-1.0.1.fix.diff
EXPECTED_HASH MD5=4baa1333bb28fcce102d505e1992d032)
include(ExternalProject)
ExternalProject_Add(scafacos_build
URL https://github.com/scafacos/scafacos/releases/download/v1.0.1/scafacos-1.0.1.tar.gz
URL_MD5 bd46d74e3296bd8a444d731bb10c1738
PATCH_COMMAND patch -p1 < ${CMAKE_CURRENT_BINARY_DIR}/scafacos-1.0.1.fix.diff
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR> --disable-doc
--enable-fcs-solvers=fmm,p2nfft,direct,ewald,p3m
--with-internal-fftw --with-internal-pfft
--with-internal-pnfft ${CONFIGURE_REQUEST_PIC}
FC=${CMAKE_MPI_Fortran_COMPILER} FCFLAGS=${SCAFACOS_Fortran_FLAGS}
CXX=${CMAKE_MPI_CXX_COMPILER} CXXFLAGS=${SCAFACOS_CXX_FLAGS}
CC=${CMAKE_MPI_C_COMPILER} CFLAGS=${SCAFACOS_C_FLAGS}
FC=${CMAKE_MPI_Fortran_COMPILER}
CXX=${CMAKE_MPI_CXX_COMPILER}
CC=${CMAKE_MPI_C_COMPILER}
F77=
BUILD_BYPRODUCTS
<INSTALL_DIR>/lib/libfcs.a

View File

@ -9,8 +9,8 @@ if(DOWNLOAD_EIGEN3)
message(STATUS "Eigen3 download requested - we will build our own")
include(ExternalProject)
ExternalProject_Add(Eigen3_build
URL https://bitbucket.org/eigen/eigen/get/3.3.7.tar.gz
URL_MD5 f2a417d083fe8ca4b8ed2bc613d20f07
URL https://gitlab.com/libeigen/eigen/-/archive/3.3.7/eigen-3.3.7.tar.gz
URL_MD5 9e30f67e8531477de4117506fe44669b
CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND ""
)
ExternalProject_get_property(Eigen3_build SOURCE_DIR)

View File

@ -3,6 +3,51 @@
###############################################################################
option(ENABLE_TESTING "Enable testing" OFF)
if(ENABLE_TESTING)
find_program(VALGRIND_BINARY NAMES valgrind)
# generate custom suppression file
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/lammps.supp "\n")
file(GLOB VALGRIND_SUPPRESSION_FILES ${LAMMPS_TOOLS_DIR}/valgrind/[^.]*.supp)
foreach(SUPP ${VALGRIND_SUPPRESSION_FILES})
file(READ ${SUPP} SUPPRESSIONS)
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/lammps.supp "${SUPPRESSIONS}")
endforeach()
set(VALGRIND_DEFAULT_OPTIONS "--leak-check=full --show-leak-kinds=all --track-origins=yes --suppressions=${CMAKE_BINARY_DIR}/lammps.supp")
set(MEMORYCHECK_COMMAND "${VALGRIND_BINARY}" CACHE FILEPATH "Memory Check Command")
set(MEMORYCHECK_COMMAND_OPTIONS "${VALGRIND_DEFAULT_OPTIONS}" CACHE STRING "Memory Check Command Options")
# check if a faster linker is available.
# only verified with GNU and Clang compilers and new CMake
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.13)
if((${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
OR (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang"))
include(CheckCXXCompilerFlag)
set(CMAKE_CUSTOM_LINKER_DEFAULT default)
check_cxx_compiler_flag(-fuse-ld=lld HAVE_LLD_LINKER_FLAG)
check_cxx_compiler_flag(-fuse-ld=gold HAVE_GOLD_LINKER_FLAG)
check_cxx_compiler_flag(-fuse-ld=bfd HAVE_BFD_LINKER_FLAG)
find_program(HAVE_LLD_LINKER_BIN lld ld.lld)
find_program(HAVE_GOLD_LINKER_BIN ld.gold)
find_program(HAVE_BFD_LINKER_BIN ld.bfd)
if(HAVE_LLD_LINKER_FLAG AND HAVE_LLD_LINKER_BIN)
set(CMAKE_CUSTOM_LINKER_DEFAULT lld)
elseif(HAVE_GOLD_LINKER_FLAG AND HAVE_GOLD_LINKER_BIN)
set(CMAKE_CUSTOM_LINKER_DEFAULT gold)
elseif(HAVE_BFD_LINKER_FLAG AND HAVE_BFD_LINKER_BIN)
set(CMAKE_CUSTOM_LINKER_DEFAULT bfd)
endif()
set(CMAKE_CUSTOM_LINKER_VALUES lld gold bfd default)
set(CMAKE_CUSTOM_LINKER ${CMAKE_CUSTOM_LINKER_DEFAULT} CACHE STRING "Choose a custom linker for faster linking (lld, gold, bfd, default)")
validate_option(CMAKE_CUSTOM_LINKER CMAKE_CUSTOM_LINKER_VALUES)
mark_as_advanced(CMAKE_CUSTOM_LINKER)
if(NOT "${CMAKE_CUSTOM_LINKER}" STREQUAL "default")
target_link_options(lammps PUBLIC -fuse-ld=${CMAKE_CUSTOM_LINKER})
endif()
endif()
endif()
include(CTest)
enable_testing()
get_filename_component(LAMMPS_UNITTEST_DIR ${LAMMPS_SOURCE_DIR}/../unittest ABSOLUTE)
get_filename_component(LAMMPS_UNITTEST_BIN ${CMAKE_BINARY_DIR}/unittest ABSOLUTE)

46
cmake/Modules/Tools.cmake Normal file
View File

@ -0,0 +1,46 @@
if(BUILD_TOOLS)
add_executable(binary2txt ${LAMMPS_TOOLS_DIR}/binary2txt.cpp)
target_compile_definitions(binary2txt PRIVATE -DLAMMPS_${LAMMPS_SIZES})
install(TARGETS binary2txt DESTINATION ${CMAKE_INSTALL_BINDIR})
include(CheckGeneratorSupport)
if(CMAKE_GENERATOR_SUPPORT_FORTRAN)
include(CheckLanguage)
check_language(Fortran)
if(CMAKE_Fortran_COMPILER)
enable_language(Fortran)
add_executable(chain.x ${LAMMPS_TOOLS_DIR}/chain.f)
target_link_libraries(chain.x PRIVATE ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES})
install(TARGETS chain.x DESTINATION ${CMAKE_INSTALL_BINDIR})
else()
message(WARNING "No suitable Fortran compiler found, skipping build of 'chain.x'")
endif()
else()
message(WARNING "CMake build doesn't support fortran, skipping build of 'chain.x'")
endif()
enable_language(C)
get_filename_component(MSI2LMP_SOURCE_DIR ${LAMMPS_TOOLS_DIR}/msi2lmp/src ABSOLUTE)
file(GLOB MSI2LMP_SOURCES ${MSI2LMP_SOURCE_DIR}/[^.]*.c)
add_executable(msi2lmp ${MSI2LMP_SOURCES})
target_link_libraries(msi2lmp PRIVATE ${MATH_LIBRARIES})
install(TARGETS msi2lmp DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES ${LAMMPS_DOC_DIR}/msi2lmp.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
endif()
if(BUILD_LAMMPS_SHELL)
find_package(PkgConfig REQUIRED)
pkg_check_modules(READLINE IMPORTED_TARGET REQUIRED readline)
if(NOT LAMMPS_EXCEPTIONS)
message(WARNING "The LAMMPS shell needs LAMMPS_EXCEPTIONS enabled for full functionality")
endif()
add_executable(lammps-shell ${LAMMPS_TOOLS_DIR}/lammps-shell/lammps-shell.cpp)
# workaround for broken readline pkg-config file on FreeBSD
if(CMAKE_SYSTEM_NAME STREQUAL FreeBSD)
target_include_directories(lammps-shell PRIVATE /usr/local/include)
endif()
target_link_libraries(lammps-shell PRIVATE lammps PkgConfig::READLINE)
install(TARGETS lammps-shell EXPORT LAMMPS_Targets DESTINATION ${CMAKE_INSTALL_BINDIR})
endif()

View File

@ -0,0 +1,7 @@
[
{ include: [ "<bits/types/struct_rusage.h>", private, "<sys/resource.h>", public ] },
{ include: [ "<bits/exception.h>", public, "<exception>", public ] },
{ include: [ "@<Eigen/.*>", private, "<Eigen/Eigen>", public ] },
{ include: [ "@<gtest/.*>", private, "\"gtest/gtest.h\"", public ] },
{ include: [ "@<gmock/.*>", private, "\"gmock/gmock.h\"", public ] },
]

View File

@ -2,9 +2,9 @@
# an existing package selection without losing any other settings
set(ALL_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU
GRANULAR KIM KOKKOS KSPACE LATTE MANYBODY MC MISC MESSAGE MOLECULE
MPIIO MSCG OPT PERI POEMS PYTHON QEQ REPLICA RIGID SHOCK SNAP SPIN
SRD VORONOI
GRANULAR KIM KOKKOS KSPACE LATTE MANYBODY MC MISC MESSAGE MLIAP
MOLECULE MPIIO MSCG OPT PERI POEMS PYTHON QEQ REPLICA RIGID SHOCK
SNAP SPIN SRD VORONOI
USER-ADIOS USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK
USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP
USER-H5MD USER-INTEL USER-LB USER-MANIFOLD USER-MEAMC USER-MESODPD

View File

@ -4,9 +4,9 @@
# with just a working C++ compiler and an MPI library.
set(ALL_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU
GRANULAR KIM KOKKOS KSPACE LATTE MANYBODY MC MISC MESSAGE MOLECULE
MPIIO MSCG OPT PERI POEMS PYTHON QEQ REPLICA RIGID SHOCK SNAP SPIN
SRD VORONOI
GRANULAR KIM KOKKOS KSPACE LATTE MANYBODY MC MISC MESSAGE MLIAP
MOLECULE MPIIO MSCG OPT PERI POEMS PYTHON QEQ REPLICA RIGID SHOCK
SNAP SPIN SRD VORONOI
USER-ADIOS USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK
USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP
USER-H5MD USER-INTEL USER-LB USER-MANIFOLD USER-MEAMC USER-MESODPD

View File

@ -1,7 +1,8 @@
# preset that will enable clang/clang++ with support for MPI and OpenMP (on Linux boxes)
# preset that will enable Intel compilers with support for MPI and OpenMP (on Linux boxes)
set(CMAKE_CXX_COMPILER "icpc" CACHE STRING "" FORCE)
set(CMAKE_C_COMPILER "icc" CACHE STRING "" FORCE)
set(CMAKE_Fortran_COMPILER "ifort" CACHE STRING "" FORCE)
set(MPI_CXX "icpc" CACHE STRING "" FORCE)
set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE)
unset(HAVE_OMP_H_INCLUDE CACHE)
@ -12,5 +13,6 @@ set(OpenMP_C_LIB_NAMES "omp" CACHE STRING "" FORCE)
set(OpenMP_CXX "icpc" CACHE STRING "" FORCE)
set(OpenMP_CXX_FLAGS "-qopenmp" CACHE STRING "" FORCE)
set(OpenMP_CXX_LIB_NAMES "omp" CACHE STRING "" FORCE)
set(OpenMP_Fortran_FLAGS "-qopenmp" CACHE STRING "" FORCE)
set(OpenMP_omp_LIBRARY "libiomp5.so" CACHE PATH "" FORCE)

View File

@ -1,6 +1,6 @@
set(WIN_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU
GRANULAR KSPACE LATTE MANYBODY MC MISC MOLECULE OPT PERI
POEMS QEQ REPLICA RIGID SHOCK SNAP SPIN SRD VORONOI
GRANULAR KSPACE LATTE MANYBODY MC MISC MLIAP MOLECULE OPT
PERI POEMS QEQ REPLICA RIGID SHOCK SNAP SPIN SRD VORONOI
USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK
USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF
USER-FEP USER-INTEL USER-MANIFOLD USER-MEAMC USER-MESODPD

View File

@ -2,8 +2,8 @@
# external libraries. Compared to all_on.cmake some more unusual packages
# are removed. The resulting binary should be able to run most inputs.
set(ALL_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL
DIPOLE GRANULAR KSPACE MANYBODY MC MISC MOLECULE OPT PERI
set(ALL_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE
GRANULAR KSPACE MANYBODY MC MISC MLIAP MOLECULE OPT PERI
POEMS PYTHON QEQ REPLICA RIGID SHOCK SNAP SPIN SRD VORONOI
USER-BOCS USER-CGDNA USER-CGSDK USER-COLVARS USER-DIFFRACTION
USER-DPD USER-DRUDE USER-EFF USER-FEP USER-MEAMC USER-MESODPD

7
doc/.gitignore vendored
View File

@ -1,6 +1,7 @@
/old
/html
/html-offline
/epub
/latex
/mathjax
/spelling
@ -10,3 +11,9 @@
/Developer.pdf
/doctrees
/docenv
/doxygen-warn.log
/utils/sphinx-config/conf.py
/doxygen/Doxyfile
*.el
/utils/sphinx-config/_static/mathjax
/utils/sphinx-config/_static/polyfill.js

View File

@ -1,21 +1,35 @@
# Makefile for LAMMPS documentation
SHELL = /bin/bash
BUILDDIR = ${CURDIR}
RSTDIR = $(BUILDDIR)/src
VENV = $(BUILDDIR)/docenv
MATHJAX = $(BUILDDIR)/mathjax
TXT2RST = $(VENV)/bin/txt2rst
ANCHORCHECK = $(VENV)/bin/rst_anchor_check
SHELL = /bin/bash
HAS_BASH = YES
ifeq (,$(wildcard $(SHELL)))
OSHELL := $(SHELL)
override SHELL = /bin/sh
HAS_BASH = NO
endif
BUILDDIR = ${CURDIR}
RSTDIR = $(BUILDDIR)/src
VENV = $(BUILDDIR)/docenv
TXT2RST = $(VENV)/bin/txt2rst
ANCHORCHECK = $(VENV)/bin/rst_anchor_check
SPHINXCONFIG = $(BUILDDIR)/utils/sphinx-config
MATHJAX = $(SPHINXCONFIG)/_static/mathjax
POLYFILL = $(SPHINXCONFIG)/_static/polyfill.js
PYTHON = $(shell which python3)
PYTHON = $(shell which python3)
DOXYGEN = $(shell which doxygen)
VIRTUALENV = virtualenv
HAS_PYTHON3 = NO
HAS_VIRTUALENV = NO
HAS_DOXYGEN = NO
HAS_PDFLATEX = NO
ifeq ($(shell which python3 >/dev/null 2>&1; echo $$?), 0)
HAS_PYTHON3 = YES
HAS_PYTHON3 = YES
endif
ifeq ($(shell which doxygen >/dev/null 2>&1; echo $$?), 0)
HAS_DOXYGEN = YES
endif
ifeq ($(shell which virtualenv-3 >/dev/null 2>&1; echo $$?), 0)
@ -29,20 +43,30 @@ HAS_VIRTUALENV = YES
endif
ifeq ($(shell which pdflatex >/dev/null 2>&1; echo $$?), 0)
ifeq ($(shell which latexmk >/dev/null 2>&1; echo $$?), 0)
HAS_PDFLATEX = YES
endif
endif
SPHINXEXTRA = -j $(shell $(PYTHON) -c 'import multiprocessing;print(multiprocessing.cpu_count())')
#SPHINXEXTRA = -j $(shell $(PYTHON) -c 'import multiprocessing;print(multiprocessing.cpu_count())') $(shell test -f $(BUILDDIR)/doxygen/xml/run.stamp && printf -- "-E")
.PHONY: help clean-all clean clean-spelling epub mobi rst html pdf spelling anchor_check style_check
# temporarily disable caching so that the hack for the sphinx-tabs extensions to get proper non-html output works
SPHINXEXTRA = -E -j $(shell $(PYTHON) -c 'import multiprocessing;print(multiprocessing.cpu_count())')
# grab list of sources from doxygen config file.
# we only want to use explicitly listed files.
DOXYFILES = $(shell sed -n -e 's/\#.*$$//' -e '/^ *INPUT \+=/,/^[A-Z_]\+ \+=/p' doxygen/Doxyfile.in | sed -e 's/@LAMMPS_SOURCE_DIR@/..\/src/g' -e 's/\\//g' -e 's/ \+/ /' -e 's/[A-Z_]\+ \+= *\(YES\|NO\|\)//')
.PHONY: help clean-all clean clean-spelling epub mobi rst html pdf spelling anchor_check style_check xmlgen
# ------------------------------------------
help:
@if [ "$(HAS_BASH)" == "NO" ] ; then echo "bash was not found at $(OSHELL)! Please use: $(MAKE) SHELL=/path/to/bash" 1>&2; exit 1; fi
@echo "Please use \`make <target>' where <target> is one of"
@echo " html create HTML doc pages in html dir"
@echo " pdf create Developer.pdf and Manual.pdf in this dir"
@echo " html create HTML pages in html dir"
@echo " pdf create Manual.pdf in this dir"
@echo " fetch fetch HTML and PDF files from LAMMPS web site"
@echo " epub create ePUB format manual for e-book readers"
@echo " mobi convert ePUB to MOBI format manual for e-book readers (e.g. Kindle)"
@ -57,23 +81,33 @@ help:
# ------------------------------------------
clean-all: clean
rm -rf $(BUILDDIR)/docenv $(BUILDDIR)/doctrees $(BUILDDIR)/mathjax Manual.pdf Developer.pdf
rm -rf $(BUILDDIR)/docenv $(MATHJAX) $(POLYFILL) $(BUILDDIR)/LAMMPS.mobi $(BUILDDIR)/LAMMPS.epub $(BUILDDIR)/Manual.pdf
clean: clean-spelling
rm -rf html epub latex
rm -rf $(BUILDDIR)/html $(BUILDDIR)/epub $(BUILDDIR)/latex $(BUILDDIR)/doctrees $(BUILDDIR)/doxygen/xml $(BUILDDIR)/doxygen-warn.log $(BUILDDIR)/doxygen/Doxyfile $(SPHINXCONFIG)/conf.py
clean-spelling:
rm -rf spelling
rm -rf $(BUILDDIR)/spelling
html: $(ANCHORCHECK) $(MATHJAX)
$(SPHINXCONFIG)/conf.py: $(SPHINXCONFIG)/conf.py.in
sed -e 's,@DOXYGEN_XML_DIR@,$(BUILDDIR)/doxygen/xml,g' \
-e 's,@LAMMPS_SOURCE_DIR@,$(BUILDDIR)/../src,g' \
-e 's,@LAMMPS_PYTHON_DIR@,$(BUILDDIR)/../python,g' \
-e 's,@LAMMPS_DOC_DIR@,$(BUILDDIR),g' $< > $@
html: xmlgen $(SPHINXCONFIG)/conf.py $(ANCHORCHECK) $(MATHJAX) $(POLYFILL)
@if [ "$(HAS_BASH)" == "NO" ] ; then echo "bash was not found at $(OSHELL)! Please use: $(MAKE) SHELL=/path/to/bash" 1>&2; exit 1; fi
@$(MAKE) $(MFLAGS) -C graphviz all
@(\
. $(VENV)/bin/activate ;\
sphinx-build $(SPHINXEXTRA) -b html -c utils/sphinx-config -d $(BUILDDIR)/doctrees $(RSTDIR) html ;\
. $(VENV)/bin/activate ; env PYTHONWARNINGS= \
sphinx-build $(SPHINXEXTRA) -b html -c $(SPHINXCONFIG) -d $(BUILDDIR)/doctrees $(RSTDIR) html ;\
ln -sf Manual.html html/index.html;\
rm -f $(BUILDDIR)/doxygen/xml/run.stamp;\
echo "############################################" ;\
rst_anchor_check src/*.rst ;\
python utils/check-packages.py -s ../src -d src ;\
python $(BUILDDIR)/utils/check-packages.py -s ../src -d src ;\
env LC_ALL=C grep -n '[^ -~]' $(RSTDIR)/*.rst ;\
python utils/check-styles.py -s ../src -d src ;\
python $(BUILDDIR)/utils/check-styles.py -s ../src -d src ;\
echo "############################################" ;\
deactivate ;\
)
@ -82,30 +116,30 @@ html: $(ANCHORCHECK) $(MATHJAX)
@rm -rf html/USER
@rm -rf html/JPG
@cp -r src/PDF html/PDF
@mkdir -p html/JPG
@cp `grep -A2 '\.\. .*\(image\|figure\)::' src/*.rst | grep ':target:' | sed -e 's,.*:target: JPG/,src/JPG/,' | sort | uniq` html/JPG/
@rm -rf html/PDF/.[sg]*
@mkdir -p html/_static/mathjax
@cp -r $(MATHJAX)/es5 html/_static/mathjax/
@echo "Build finished. The HTML pages are in doc/html."
spelling: $(VENV) utils/sphinx-config/false_positives.txt
spelling: xmlgen $(VENV) $(SPHINXCONFIG)/false_positives.txt
@if [ "$(HAS_BASH)" == "NO" ] ; then echo "bash was not found at $(OSHELL)! Please use: $(MAKE) SHELL=/path/to/bash" 1>&2; exit 1; fi
@(\
. $(VENV)/bin/activate ;\
cp utils/sphinx-config/false_positives.txt $(RSTDIR)/ ; env PYTHONWARNINGS= \
sphinx-build -b spelling -c utils/sphinx-config -d $(BUILDDIR)/doctrees $(RSTDIR) spelling ;\
. $(VENV)/bin/activate ; env PYTHONWARNINGS= \
cp $(SPHINXCONFIG)/false_positives.txt $(RSTDIR)/ ; env PYTHONWARNINGS= \
sphinx-build -b spelling -c $(SPHINXCONFIG) -d $(BUILDDIR)/doctrees $(RSTDIR) spelling ;\
rm -f $(BUILDDIR)/doxygen/xml/run.stamp;\
deactivate ;\
)
@echo "Spell check finished."
epub: $(VENV)
epub: xmlgen $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK)
@if [ "$(HAS_BASH)" == "NO" ] ; then echo "bash was not found at $(OSHELL)! Please use: $(MAKE) SHELL=/path/to/bash" 1>&2; exit 1; fi
@$(MAKE) $(MFLAGS) -C graphviz all
@mkdir -p epub/JPG
@rm -f LAMMPS.epub
@cp src/JPG/lammps-logo.png epub/
@cp src/JPG/*.* epub/JPG
@(\
. $(VENV)/bin/activate ;\
sphinx-build $(SPHINXEXTRA) -b epub -c utils/sphinx-config -d $(BUILDDIR)/doctrees $(RSTDIR) epub ;\
sphinx-build $(SPHINXEXTRA) -b epub -c $(SPHINXCONFIG) -d $(BUILDDIR)/doctrees $(RSTDIR) epub ;\
rm -f $(BUILDDIR)/doxygen/xml/run.stamp;\
deactivate ;\
)
@mv epub/LAMMPS.epub .
@ -117,18 +151,14 @@ mobi: epub
@ebook-convert LAMMPS.epub LAMMPS.mobi
@echo "Conversion finished. The MOBI manual file is created."
pdf: $(ANCHORCHECK)
@if [ "$(HAS_PDFLATEX)" == "NO" ] ; then echo "PDFLaTeX was not found! Please check README.md for further instructions" 1>&2; exit 1; fi
pdf: xmlgen $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK)
@if [ "$(HAS_BASH)" == "NO" ] ; then echo "bash was not found at $(OSHELL)! Please use: $(MAKE) SHELL=/path/to/bash" 1>&2; exit 1; fi
@$(MAKE) $(MFLAGS) -C graphviz all
@if [ "$(HAS_PDFLATEX)" == "NO" ] ; then echo "PDFLaTeX or latexmk were not found! Please check README for further instructions" 1>&2; exit 1; fi
@(\
cd src/Developer; \
pdflatex developer; \
pdflatex developer; \
mv developer.pdf ../../Developer.pdf; \
cd ../../; \
)
@(\
. $(VENV)/bin/activate ;\
sphinx-build $(SPHINXEXTRA) -b latex -c utils/sphinx-config -d $(BUILDDIR)/doctrees $(RSTDIR) latex ;\
. $(VENV)/bin/activate ; env PYTHONWARNINGS= \
sphinx-build $(SPHINXEXTRA) -b latex -c $(SPHINXCONFIG) -d $(BUILDDIR)/doctrees $(RSTDIR) latex ;\
rm -f $(BUILDDIR)/doxygen/xml/run.stamp;\
echo "############################################" ;\
rst_anchor_check src/*.rst ;\
python utils/check-packages.py -s ../src -d src ;\
@ -138,15 +168,13 @@ pdf: $(ANCHORCHECK)
deactivate ;\
)
@cd latex && \
sed 's/latexmk -pdf -dvi- -ps-/pdflatex/g' Makefile > temp && \
mv temp Makefile && \
sed 's/\\begin{equation}//g' LAMMPS.tex > tmp.tex && \
mv tmp.tex LAMMPS.tex && \
sed 's/\\end{equation}//g' LAMMPS.tex > tmp.tex && \
mv tmp.tex LAMMPS.tex && \
make && \
make && \
make && \
sed 's/\\contentsname}{.*}}/\\contentsname}{LAMMPS Documentation}}/g' LAMMPS.tex > tmp.tex && \
mv tmp.tex LAMMPS.tex && \
$(MAKE) $(MFLAGS) && \
mv LAMMPS.pdf ../Manual.pdf && \
cd ../;
@rm -rf latex/_sources
@ -154,12 +182,11 @@ pdf: $(ANCHORCHECK)
@rm -rf latex/USER
@cp -r src/PDF latex/PDF
@rm -rf latex/PDF/.[sg]*
@echo "Build finished. Manual.pdf and Developer.pdf are in this directory."
@echo "Build finished. Manual.pdf is in this directory."
fetch:
@rm -rf html_www Manual_www.pdf Developer_www.pdf
@rm -rf html_www Manual_www.pdf
@curl -s -o Manual_www.pdf http://lammps.sandia.gov/doc/Manual.pdf
@curl -s -o Developer_www.pdf http://lammps.sandia.gov/doc/Developer.pdf
@curl -s -o lammps-doc.tar.gz http://lammps.sandia.gov/tars/lammps-doc.tar.gz
@tar xzf lammps-doc.tar.gz
@rm -f lammps-doc.tar.gz
@ -185,23 +212,37 @@ package_check : $(VENV)
deactivate ;\
)
xmlgen : doxygen/xml/index.xml
doxygen/Doxyfile: doxygen/Doxyfile.in
sed -e 's/@LAMMPS_SOURCE_DIR@/..\/..\/src/g' $< > $@
doxygen/xml/index.xml : $(VENV) doxygen/Doxyfile $(DOXYFILES)
@(cd doxygen; $(DOXYGEN) Doxyfile && touch xml/run.stamp)
# ------------------------------------------
$(VENV):
@if [ "$(HAS_PYTHON3)" == "NO" ] ; then echo "Python3 was not found! Please check README.md for further instructions" 1>&2; exit 1; fi
@if [ "$(HAS_VIRTUALENV)" == "NO" ] ; then echo "virtualenv was not found! Please check README.md for further instructions" 1>&2; exit 1; fi
@if [ "$(HAS_BASH)" == "NO" ] ; then echo "bash was not found at $(OSHELL)! Please use: $(MAKE) SHELL=/path/to/bash" 1>&2; exit 1; fi
@if [ "$(HAS_PYTHON3)" == "NO" ] ; then echo "python3 was not found! Please see README for further instructions" 1>&2; exit 1; fi
@if [ "$(HAS_DOXYGEN)" == "NO" ] ; then echo "doxygen was not found! Please see README for further instructions" 1>&2; exit 1; fi
@if [ "$(HAS_VIRTUALENV)" == "NO" ] ; then echo "virtualenv was not found! Please see README for further instructions" 1>&2; exit 1; fi
@( \
$(VIRTUALENV) -p $(PYTHON) $(VENV); \
. $(VENV)/bin/activate; \
pip install --upgrade pip; \
pip install Sphinx; \
pip install sphinxcontrib-spelling ;\
pip install breathe; \
pip install --use-feature=2020-resolver -r $(BUILDDIR)/utils/requirements.txt; \
deactivate;\
)
$(MATHJAX):
@git clone --depth 1 https://github.com/mathjax/MathJax.git mathjax
@git clone --depth 1 https://github.com/mathjax/MathJax.git $@
# fall back to using wget and/or unencrypted download, if curl fails
$(POLYFILL): $(MATHJAX)
@curl -s -o $@ "https://polyfill.io/v3/polyfill.min.js?features=es6" > /dev/null 2>&1 || \
curl -s -o $@ "http://polyfill.io/v3/polyfill.min.js?features=es6" > /dev/null 2>&1 || \
wget -O $@ "https://polyfill.io/v3/polyfill.min.js?features=es6" > /dev/null 2>&1 || \
wget -O $@ "http://polyfill.io/v3/polyfill.min.js?features=es6" > /dev/null 2>&1
$(TXT2RST) $(ANCHORCHECK): $(VENV)
@( \

View File

@ -1,97 +1,58 @@
LAMMPS Documentation
Depending on how you obtained LAMMPS, this directory has 2 or 3
sub-directories and optionally 2 PDF files and an ePUB file:
Depending on how you obtained LAMMPS and whether you have built
the manual yourself, this directory has a varying number of
sub-directories and files. Here is a list with descriptions:
src content files for LAMMPS documentation
html HTML version of the LAMMPS manual (see html/Manual.html)
utils utilities and settings for building the documentation
Manual.pdf large PDF version of entire manual
Developer.pdf small PDF with info about how LAMMPS is structured
LAMMPS.epub Manual in ePUB format
README this file
src content files for LAMMPS documentation
html HTML version of the LAMMPS manual (see html/Manual.html)
utils utilities and settings for building the documentation
Manual.pdf PDF version of entire manual
LAMMPS.epub Manual in ePUB format
LAMMPS.mobi Manual in MOBI (Kindle) format
lammps.1 man page for the lammps command
msi2lmp.1 man page for the msi2lmp command
doctree temporary data
docenv python virtual environment for generating the manual
doxygen Doxygen configuration and output
.gitignore list of files and folders to be ignored by git
doxygen-warn.log logfile with warnings from running doxygen
If you downloaded LAMMPS as a tarball from the web site, all these
directories and files should be included.
and:
If you downloaded LAMMPS from the public SVN or Git repositories, then
the HTML and PDF files are not included. Instead you need to create
them, in one of three ways:
github-development-workflow.md notes on the LAMMPS development workflow
include-file-conventions.md notes on LAMMPS' include file conventions
documentation_conventions.md notes on writing documentation for LAMMPS
If you downloaded a LAMMPS tarball from lammps.sandia.gov, then the html
folder and the PDF manual should be included. If you downloaded LAMMPS
from GitHub then you either need to download them or build them.
(a) You can "fetch" the current HTML and PDF files from the LAMMPS web
site. Just type "make fetch". This should create a html_www dir and
Manual_www.pdf/Developer_www.pdf files. Note that if new LAMMPS
features have been added more recently than the date of your version,
the fetched documentation will include those changes (but your source
code will not, unless you update your local repository).
site. Just type "make fetch". This should create a html_www directory
and Manual_www.pdf file. These will always represent the latest published
patch/development version of LAMMPS.
(b) You can build the HTML and PDF files yourself, by typing "make
html" or by "make pdf", respectively. This requires various tools
including the Python documentation processing tool Sphinx, which the
build process will attempt to download and install on your system into
a python virtual environment, if not already available. The PDF file
will require a working LaTeX installation with several add-on packages
in addition to the Python/Sphinx setup. See more details below.
(b) You can build the HTML and PDF files yourself, by typing "make html"
or by "make pdf", respectively. This requires various tools and files.
Some of them have to be installed (more on that below). For the rest the
build process will attempt to download and install into a python virtual
environment and local folders.
----------------
The generation of all documentation is managed by the Makefile in this
dir.
Installing prerequisites for the documentation build
Options:
To run the HTML documention build toolchain, python 3.x, doxygen, git,
and virtualenv have to be installed. Also internet access is initially
required to download external files and tools.
make html # generate HTML in html dir using Sphinx
make pdf # generate 2 PDF files (Manual.pdf,Developer.pdf)
# in this dir via Sphinx and PDFLaTeX
make fetch # fetch HTML doc pages and 2 PDF files from web site
# as a tarball and unpack into html dir and 2 PDFs
make epub # generate LAMMPS.epub in ePUB format using Sphinx
make clean # remove intermediate RST files created by HTML build
make clean-all # remove entire build folder and any cached data
----------------
Installing prerequisites for HTML build
To run the HTML documention build toolchain, Python 3 and virtualenv
have to be installed. Here are instructions for common setups:
# Ubuntu
sudo apt-get install python-virtualenv
# Fedora (up to version 21)
# Red Hat Enterprise Linux or CentOS (up to version 7.x)
sudo yum install python3-virtualenv
# Fedora (since version 22)
sudo dnf install python3-virtualenv
# MacOS X
## Python 3
Download the latest Python 3 MacOS X package from
https://www.python.org and install it. This will install both Python
3 and pip3.
## virtualenv
Once Python 3 is installed, open a Terminal and type
pip3 install virtualenv
This will install virtualenv from the Python Package Index.
----------------
Installing prerequisites for PDF build
Same as for HTML plus a compatible LaTeX installation with
support for PDFLaTeX. Also the following LaTeX packages need
to be installed (e.g. from texlive):
Building the PDF format manual requires in addition a compatible LaTeX
installation with support for PDFLaTeX and several add-on LaTeX packages
installed. This includes:
- amsmath
- anysize
- babel
- capt-of
- cmap
@ -105,24 +66,16 @@ to be installed (e.g. from texlive):
- tabulary
- upquote
- wrapfig
Also the latexmk script is required to run PDFLaTeX and related tools.
the required number of times to have self-consistent output and include
updated bibliography and indices.
Building the EPUB format requires LaTeX installation with the same packages
as for the PDF format plus the 'dvipng' command to convert the embedded math
into images. The MOBI format is generated from the EPUB format file by using
the tool 'ebook-convert' from the 'calibre' e-book management software
(https://calibre-ebook.com).
----------------
Installing prerequisites for epub build
## ePUB
Same as for HTML. This uses the same tools and configuration
files as the HTML tree. The ePUB format conversion currently
does not support processing mathematical expressions via MathJAX,
so there will be limitations on some pages. For the time being
until this is resolved, building and using the PDF format file
is recommended instead.
For converting the generated ePUB file to a mobi format file
(for e-book readers like Kindle, that cannot read ePUB), you
also need to have the 'ebook-convert' tool from the "calibre"
software installed. http://calibre-ebook.com/
You first create the ePUB file with 'make epub' and then do:
ebook-convert LAMMPS.epub LAMMPS.mobi
More details this can be found in the manual itself. The online
version is at: https://lammps.sandia.gov/doc/Manual_build.html

View File

@ -0,0 +1,93 @@
# Outline of LAMMPS documentation file conventions
This purpose of this document is to provide a point of reference
for LAMMPS developers and contributors as to what conventions
should be used to structure and format files in the LAMMPS manual.
Last change: 2020-04-23
## File format and tools
In fall 2019, the LAMMPS documentation file format has changed from
a home grown minimal markup designed to generate HTML format files
from a mostly plain text format to using the reStructuredText file
format. For a transition period all files in the old .txt format
were transparently converted to .rst and then processed. The txt2rst
tool is still included in the distribution to obtain an initial .rst
file for integration into the manual. Since the transition to
reStructured text as source format, many of the artifacts or the
translation have been removed though and parts of the documentation
refactored and expanded to take advantage of the capabilities
reStructuredText and associated tools. The conversion from the
source to the final formats (HTML, PDF, and optionally e-book
reader formats ePUB and MOBI) is mostly automated and controlled
by a Makefile in the `doc` folder. This makefile assumes that the
processing is done on a Unix-like machine and Python 3.5 or later
and a matching virtualenv module are available. Additional Python
packages (like the Sphinx tool and several extensions) are
transparently installed into a virtual environment over the
internet using the `pip` package manager. Further requirements
and details are discussed in the manual.
## Work in progress
The refactoring and improving of the documentation is an ongoing
process, so statements in this document may not always be fully
up-to-date. If in doubt, contact the LAMMPS developers.
## General structure
The layout and formatting of added files should follow the example
of the existing files. Since those are directly derived from their
former .txt format versions and the manual has been maintained in
that format for many years, there is a large degree of consistency
already, so comparision with similar files should give you a good
idea what kind of information and sections are needed.
## Formatting conventions
Filenames, folders, paths, (shell) commands, definitions, makefile
settings and similar should be formatted as "literals" with
double backward quotes bracketing the item: \`\`path/to/some/file\`\`
Keywords and options are formatted in italics: \*option\*
Mathematical expressions, equations, symbols are typeset using
either a `.. math:`` block or the `:math:` role.
Groups of shell commands or LAMMPS input script or C/C++ source
code should be typeset into a `.. code-block::` section. A syntax
highlighting extension for LAMMPS input scripts is provided, so
`LAMMPS` can be used to indicate the language in the code block
in addition to `bash`, `c`, or `python`. When no syntax style
is indicated, no syntax highlighting is performed.
As an alternative, e.g. to typeset the syntax of file formats
a `.. parsed-literal::` block can be used, which allows some
formatting directives, which means that related characters need
to be escaped with a preceding backslash: `\*`.
Special remarks can be highlighted with a `.. note::` block and
strong warnings can be put into a `.. warning::` block.
## Required steps when adding a custom style to LAMMPS
When adding a new style (e.g. pair style or a compute or a fix)
or a new command, it is **required** to include the corresponding
documentation. Those are often new files that need to be added.
In order to be included in the documentation, those new files
need to be reference in a `.. toctree::` block. Most of those
use patterns with wildcards, so the addition will be automatic.
However, those additions also need to be added to some lists of
styles or commands. The `make style\_check` command will perform
a test and report any missing entries and list the affected files.
Any references defined with `.. \_refname:` have to be unique
across all documentation files and this can be checked for with
`make anchor\_check`. Finally, a spell-check should be done,
which is triggered via `make spelling`. Any offenses need to
be corrected and false positives should be added to the file
`utils/sphinx-config/false\_positives.txt`.
## Required additional steps when adding a new package to LAMMPS
TODO

1
doc/doxygen/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/xml

533
doc/doxygen/Doxyfile.in Normal file
View File

@ -0,0 +1,533 @@
# Doxyfile 1.8.15 -*- makefile -*-
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = "LAMMPS Programmer's Guide"
PROJECT_NUMBER = "24 August 2020"
PROJECT_BRIEF = "Documentation of the LAMMPS library interface and Python wrapper"
PROJECT_LOGO = lammps-logo.png
CREATE_SUBDIRS = NO
ALLOW_UNICODE_NAMES = NO
OUTPUT_LANGUAGE = English
OUTPUT_TEXT_DIRECTION = LTR
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ALWAYS_DETAILED_SEC = NO
INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = NO
INHERIT_DOCS = YES
TAB_SIZE = 2
# When enabled doxygen tries to link words that correspond to documented
# classes, or namespaces to their corresponding documentation. Such a link can
# be prevented in individual cases by putting a % sign in front of the word or
# globally by setting AUTOLINK_SUPPORT to NO.
# The default value is: YES.
AUTOLINK_SUPPORT = YES
# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
# to include (a tag file for) the STL sources as input, then you should set this
# tag to YES in order to let doxygen match functions declarations and
# definitions whose arguments contain STL classes (e.g. func(std::string);
# versus func(std::string) {}). This also make the inheritance and collaboration
# diagrams that involve STL classes more complete and accurate.
# The default value is: NO.
BUILTIN_STL_SUPPORT = YES
IDL_PROPERTY_SUPPORT = NO
# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
# cache is used to resolve symbols given their name and scope. Since this can be
# an expensive process and often the same symbol appears multiple times in the
# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
# doxygen will become slower. If the cache is too large, memory is wasted. The
# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
# symbols. At the end of a run doxygen will report the cache usage and suggest
# the optimal cache size from a speed point of view.
# Minimum value: 0, maximum value: 9, default value: 0.
LOOKUP_CACHE_SIZE = 2
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
# documentation are documented, even if no documentation was available. Private
# class members and static file members will be hidden unless the
# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
# Note: This will also disable the warnings about undocumented members that are
# normally produced when WARNINGS is set to YES.
# The default value is: NO.
EXTRACT_ALL = NO
# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
# be included in the documentation.
# The default value is: NO.
EXTRACT_PRIVATE = YES
# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
# scope will be included in the documentation.
# The default value is: NO.
EXTRACT_PACKAGE = YES
# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
# included in the documentation.
# The default value is: NO.
EXTRACT_STATIC = YES
# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
# locally in source files will be included in the documentation. If set to NO,
# only classes defined in header files are included. Does not have any effect
# for Java sources.
# The default value is: YES.
EXTRACT_LOCAL_CLASSES = YES
# If this flag is set to YES, the members of anonymous namespaces will be
# extracted and appear in the documentation as a namespace called
# 'anonymous_namespace{file}', where file will be replaced with the base name of
# the file that contains the anonymous namespace. By default anonymous namespace
# are hidden.
# The default value is: NO.
EXTRACT_ANON_NSPACES = YES
# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
# undocumented members inside documented classes or files. If set to NO these
# members will be included in the various overviews, but no documentation
# section is generated. This option has no effect if EXTRACT_ALL is enabled.
# The default value is: NO.
HIDE_UNDOC_MEMBERS = YES
# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
# undocumented classes that are normally visible in the class hierarchy. If set
# to NO, these classes will be included in the various overviews. This option
# has no effect if EXTRACT_ALL is enabled.
# The default value is: NO.
HIDE_UNDOC_CLASSES = YES
# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
# (class|struct|union) declarations. If set to NO, these declarations will be
# included in the documentation.
# The default value is: NO.
HIDE_FRIEND_COMPOUNDS = NO
# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
# documentation blocks found inside the body of a function. If set to NO, these
# blocks will be appended to the function's detailed documentation block.
# The default value is: NO.
HIDE_IN_BODY_DOCS = NO
# The INTERNAL_DOCS tag determines if documentation that is typed after a
# \internal command is included. If the tag is set to NO then the documentation
# will be excluded. Set it to YES to include the internal documentation.
# The default value is: NO.
INTERNAL_DOCS = NO
# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
# names in lower-case letters. If set to YES, upper-case letters are also
# allowed. This is useful if you have classes or files whose names only differ
# in case and if your file system supports case sensitive file names. Windows
# and Mac users are advised to set this option to NO.
# The default value is: system dependent.
CASE_SENSE_NAMES = YES
# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
# their full class and namespace scopes in the documentation. If set to YES, the
# scope will be hidden.
# The default value is: NO.
HIDE_SCOPE_NAMES = YES
# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
# append additional text to a page's title, such as Class Reference. If set to
# YES the compound reference will be hidden.
# The default value is: NO.
HIDE_COMPOUND_REFERENCE= NO
# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
# the files that are included by a file in the documentation of that file.
# The default value is: YES.
SHOW_INCLUDE_FILES = NO
# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
# grouped member an include statement to the documentation, telling the reader
# which file to include in order to use the member.
# The default value is: NO.
SHOW_GROUPED_MEMB_INC = NO
# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
# files with double quotes in the documentation rather than with sharp brackets.
# The default value is: NO.
FORCE_LOCAL_INCLUDES = NO
# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
# documentation for inline members.
# The default value is: YES.
INLINE_INFO = YES
# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
# (detailed) documentation of file and class members alphabetically by member
# name. If set to NO, the members will appear in declaration order.
# The default value is: YES.
SORT_MEMBER_DOCS = NO
# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
# descriptions of file, namespace and class members alphabetically by member
# name. If set to NO, the members will appear in declaration order. Note that
# this will also influence the order of the classes in the class list.
# The default value is: NO.
SORT_BRIEF_DOCS = NO
# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
# (brief and detailed) documentation of class members so that constructors and
# destructors are listed first. If set to NO the constructors will appear in the
# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
# member documentation.
# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
# detailed member documentation.
# The default value is: NO.
SORT_MEMBERS_CTORS_1ST = NO
# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
# of group names into alphabetical order. If set to NO the group names will
# appear in their defined order.
# The default value is: NO.
SORT_GROUP_NAMES = NO
# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
# fully-qualified names, including namespaces. If set to NO, the class list will
# be sorted only by class name, not including the namespace part.
# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
# Note: This option applies only to the class list, not to the alphabetical
# list.
# The default value is: NO.
SORT_BY_SCOPE_NAME = NO
# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
# type resolution of all parameters of a function it will reject a match between
# the prototype and the implementation of a member function even if there is
# only one candidate or it is obvious which candidate to choose by doing a
# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
# accept a match between prototype and implementation in such cases.
# The default value is: NO.
STRICT_PROTO_MATCHING = NO
# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
# list. This list is created by putting \todo commands in the documentation.
# The default value is: YES.
GENERATE_TODOLIST = YES
# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
# list. This list is created by putting \test commands in the documentation.
# The default value is: YES.
GENERATE_TESTLIST = YES
# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
# list. This list is created by putting \bug commands in the documentation.
# The default value is: YES.
GENERATE_BUGLIST = YES
# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
# the deprecated list. This list is created by putting \deprecated commands in
# the documentation.
# The default value is: YES.
GENERATE_DEPRECATEDLIST= YES
# The ENABLED_SECTIONS tag can be used to enable conditional documentation
# sections, marked by \if <section_label> ... \endif and \cond <section_label>
# ... \endcond blocks.
ENABLED_SECTIONS =
# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
# initial value of a variable or macro / define can have for it to appear in the
# documentation. If the initializer consists of more lines than specified here
# it will be hidden. Use a value of 0 to hide initializers completely. The
# appearance of the value of individual variables and macros / defines can be
# controlled using \showinitializer or \hideinitializer command in the
# documentation regardless of this setting.
# Minimum value: 0, maximum value: 10000, default value: 30.
MAX_INITIALIZER_LINES = 30
# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
# the bottom of the documentation of classes and structs. If set to YES, the
# list will mention the files that were used to generate the documentation.
# The default value is: YES.
SHOW_USED_FILES = YES
# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
# will remove the Files entry from the Quick Index and from the Folder Tree View
# (if specified).
# The default value is: YES.
SHOW_FILES = NO
# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
# page. This will remove the Namespaces entry from the Quick Index and from the
# Folder Tree View (if specified).
# The default value is: YES.
SHOW_NAMESPACES = YES
# The FILE_VERSION_FILTER tag can be used to specify a program or script that
# doxygen should invoke to get the current version for each file (typically from
# the version control system). Doxygen will invoke the program by executing (via
# popen()) the command command input-file, where command is the value of the
# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
# by doxygen. Whatever the program writes to standard output is used as the file
# version. For an example see the documentation.
FILE_VERSION_FILTER =
# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
# by doxygen. The layout file controls the global structure of the generated
# output files in an output format independent way. To create the layout file
# that represents doxygen's defaults, run doxygen with the -l option. You can
# optionally specify a file name after the option, if omitted DoxygenLayout.xml
# will be used as the name of the layout file.
#
# Note that if you run doxygen from a directory containing a file called
# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
# tag is left empty.
LAYOUT_FILE =
# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
# the reference definitions. This must be a list of .bib files. The .bib
# extension is automatically appended if omitted. This requires the bibtex tool
# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
# For LaTeX the style of the bibliography can be controlled using
# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
# search path. See also \cite for info how to create references.
CITE_BIB_FILES =
#---------------------------------------------------------------------------
# Configuration options related to warning and progress messages
#---------------------------------------------------------------------------
# The QUIET tag can be used to turn on/off the messages that are generated to
# standard output by doxygen. If QUIET is set to YES this implies that the
# messages are off.
# The default value is: NO.
QUIET = NO
# The WARNINGS tag can be used to turn on/off the warning messages that are
# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
# this implies that the warnings are on.
#
# Tip: Turn warnings on while writing the documentation.
# The default value is: YES.
WARNINGS = YES
# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
# will automatically be disabled.
# The default value is: YES.
WARN_IF_UNDOCUMENTED = YES
# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
# potential errors in the documentation, such as not documenting some parameters
# in a documented function, or documenting parameters that don't exist or using
# markup commands wrongly.
# The default value is: YES.
WARN_IF_DOC_ERROR = YES
# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
# are documented, but have no documentation for their parameters or return
# value. If set to NO, doxygen will only warn about wrong or incomplete
# parameter documentation, but not about the absence of documentation. If
# EXTRACT_ALL is set to YES then this flag will automatically be disabled.
# The default value is: NO.
WARN_NO_PARAMDOC = YES
# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
# a warning is encountered.
# The default value is: NO.
WARN_AS_ERROR = NO
# The WARN_FORMAT tag determines the format of the warning messages that doxygen
# can produce. The string should contain the $file, $line, and $text tags, which
# will be replaced by the file and line number from which the warning originated
# and the warning text. Optionally the format may contain $version, which will
# be replaced by the version of the file (if it could be obtained via
# FILE_VERSION_FILTER)
# The default value is: $file:$line: $text.
WARN_FORMAT = "$file:$line: $text"
# The WARN_LOGFILE tag can be used to specify a file to which warning and error
# messages should be written. If left blank the output is written to standard
# error (stderr).
WARN_LOGFILE = "../doxygen-warn.log"
#---------------------------------------------------------------------------
# Configuration options related to the input files
#---------------------------------------------------------------------------
# The INPUT tag is used to specify the files and/or directories that contain
# documented source files. You may enter file names like myfile.cpp or
# directories like /usr/src/myproject. Separate the files or directories with
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
# Note: If this tag is empty the current directory is searched.
INPUT = @LAMMPS_SOURCE_DIR@/utils.cpp \
@LAMMPS_SOURCE_DIR@/utils.h \
@LAMMPS_SOURCE_DIR@/library.cpp \
@LAMMPS_SOURCE_DIR@/library.h \
@LAMMPS_SOURCE_DIR@/lammps.cpp \
@LAMMPS_SOURCE_DIR@/lammps.h \
@LAMMPS_SOURCE_DIR@/pointers.h \
@LAMMPS_SOURCE_DIR@/lmptype.h \
@LAMMPS_SOURCE_DIR@/atom.cpp \
@LAMMPS_SOURCE_DIR@/atom.h \
@LAMMPS_SOURCE_DIR@/input.cpp \
@LAMMPS_SOURCE_DIR@/input.h \
@LAMMPS_SOURCE_DIR@/tokenizer.cpp \
@LAMMPS_SOURCE_DIR@/tokenizer.h \
@LAMMPS_SOURCE_DIR@/text_file_reader.cpp \
@LAMMPS_SOURCE_DIR@/text_file_reader.h \
@LAMMPS_SOURCE_DIR@/potential_file_reader.cpp \
@LAMMPS_SOURCE_DIR@/potential_file_reader.h \
@LAMMPS_SOURCE_DIR@/my_page.cpp \
@LAMMPS_SOURCE_DIR@/my_page.h \
@LAMMPS_SOURCE_DIR@/my_pool_chunk.cpp \
@LAMMPS_SOURCE_DIR@/my_pool_chunk.h \
@LAMMPS_SOURCE_DIR@/math_eigen.h \
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
# directories that are symbolic links (a Unix file system feature) are excluded
# from the input.
# The default value is: NO.
EXCLUDE_SYMLINKS = YES
#---------------------------------------------------------------------------
# Configuration options related to output
#---------------------------------------------------------------------------
GENERATE_HTML = NO
GENERATE_LATEX = NO
GENERATE_XML = YES
XML_OUTPUT = xml
XML_PROGRAMLISTING = YES
XML_NS_MEMB_FILE_SCOPE = NO
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
# C-preprocessor directives found in the sources and include files.
# The default value is: YES.
#ENABLE_PREPROCESSING = YES
ENABLE_PREPROCESSING = NO
# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
# in the source code. If set to NO, only conditional compilation will be
# performed. Macro expansion can be done in a controlled way by setting
# EXPAND_ONLY_PREDEF to YES.
# The default value is: NO.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
MACRO_EXPANSION = NO
# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
# the macro expansion is limited to the macros specified with the PREDEFINED and
# EXPAND_AS_DEFINED tags.
# The default value is: NO.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
EXPAND_ONLY_PREDEF = NO
# If the SEARCH_INCLUDES tag is set to YES, the include files in the
# INCLUDE_PATH will be searched if a #include is found.
# The default value is: YES.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
SEARCH_INCLUDES = YES
# The INCLUDE_PATH tag can be used to specify one or more directories that
# contain include files that are not input files but should be processed by the
# preprocessor.
# This tag requires that the tag SEARCH_INCLUDES is set to YES.
INCLUDE_PATH =
# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
# patterns (like *.h and *.hpp) to filter out the header-files in the
# directories. If left blank, the patterns specified with FILE_PATTERNS will be
# used.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
INCLUDE_FILE_PATTERNS =
# The PREDEFINED tag can be used to specify one or more macro names that are
# defined before the preprocessor is started (similar to the -D option of e.g.
# gcc). The argument of the tag is a list of macros of the form: name or
# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
# is assumed. To prevent a macro definition from being undefined via #undef or
# recursively expanded use the := operator instead of the = operator.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
PREDEFINED =
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
# tag can be used to specify a list of macro names that should be expanded. The
# macro definition that is found in the sources will be used. Use the PREDEFINED
# tag if you want to use a different macro definition that overrules the
# definition found in the source code.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
EXPAND_AS_DEFINED =
# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
# remove all references to function-like macros that are alone on a line, have
# an all uppercase name, and do not end with a semicolon. Such function macros
# are typically used for boiler-plate code, and will confuse the parser if not
# removed.
# The default value is: YES.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
SKIP_FUNCTION_MACROS = YES

BIN
doc/doxygen/lammps-logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -25,10 +25,10 @@ In the interest of consistency, ONLY ONE of the core LAMMPS developers
should doing the merging itself. This is currently
[@akohlmey](https://github.com/akohlmey) (Axel Kohlmeyer).
If this assignment needs to be changed, it shall be done right after a
stable release. If the currently assigned developer cannot merge outstanding pull
requests in a timely manner, or in other extenuating circumstances,
stable release. If the currently assigned developer cannot merge outstanding pull
requests in a timely manner, or in other extenuating circumstances,
other core LAMMPS developers with merge rights can merge pull requests,
when necessary.
when necessary.
## Pull Requests
@ -136,7 +136,8 @@ Here are some items to check:
* string.h -> cstring
* time.h -> ctime
* Do NOT replace (as they are C++-11): `inttypes.h` and `stdint.h`.
* Code should follow the C++-98 standard. C++-11 is only accepted
* Code must follow the C++-11 standard. C++98-only is no longer accepted
* Code should use `nullptr` instead of `NULL` where applicable.
in individual special purpose packages
* indentation is 2 spaces per level
* there should be NO tabs and no trailing whitespace (review the "checkstyle" test on pull requests)
@ -145,6 +146,8 @@ Here are some items to check:
Forward declarations should be used instead when possible.
* iostreams should be avoided. LAMMPS uses stdio from the C-library.
* use of STL in headers and class definitions should be avoided.
exception is <string>, but it won't need to be explicitly included
since pointers.h already includes it. so std::string can be used directly.
* there MUST NOT be any "using namespace XXX;" statements in headers.
* static class members should be avoided at all cost.
* anything storing atom IDs should be using `tagint` and not `int`.
@ -152,6 +155,8 @@ Here are some items to check:
compiling LAMMPS with `-DLAMMPS_BIGBIG`.
* when including both `lmptype.h` (and using defines or macros from it)
and `mpi.h`, `lmptype.h` must be included first.
* see https://github.com/lammps/lammps/blob/master/doc/include-file-conventions.md
for general include file conventions and best practices
* when pair styles are added, check if settings for flags like
`single_enable`, `writedata`, `reinitflag`, `manybody_flag`
and others are correctly set and supported.

3
doc/graphviz/.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
/*.png
/*.svg
/*.pdf

29
doc/graphviz/Makefile Normal file
View File

@ -0,0 +1,29 @@
# Makefile for generating images with graphviz
#
BUILDDIR = ${CURDIR}/..
IMGDIR = $(BUILDDIR)/src/JPG
IMGSRC = $(wildcard *.dot)
IMGPNG = $(IMGSRC:%.dot=$(IMGDIR)/%.png)
HAS_DOT = NO
ifeq ($(shell which dot >/dev/null 2>&1; echo $$?), 0)
HAS_DOT = YES
endif
all: $(IMGPNG)
clean:
rm -f $(IMGSVG) $(IMGPDF) $(IMGPNG) *~
ifeq ($(HAS_DOT),YES)
$(IMGDIR)/%.png: %.dot
dot -Tpng -o $@ $<
endif
ifeq ($(HAS_DOT),NO)
$(IMGDIR)/%.png: %.dot
@echo '###################################################'
@echo '# Need to install "graphviz" to regenerate graphs #'
@echo '###################################################'
endif

View File

@ -0,0 +1,90 @@
// LAMMPS Class topology
digraph lammps {
rankdir="LR"
La [shape=circle label="LAMMPS"]
At [shape=box label="Atom" color=blue]
Ci [shape=box label="CiteMe"]
Co [shape=box label="Comm" color=blue]
Do [shape=box label="Domain" color=blue]
Er [shape=box label="Error" color=blue]
Fo [shape=box label="Force" color=blue]
Gr [shape=box label="Group" color=blue]
In [shape=box label="Input" color=blue]
Ko [shape=box label="KokkosLMP"]
Ak [shape=box label="AtomKK" color=blue]
Mk [shape=box label="MemoryKK" color=blue]
Me [shape=box label="Memory" color=blue]
Mo [shape=box label="Modify" color=blue]
Ne [shape=box label="Neighbor" color=blue]
Ou [shape=box label="Output" color=blue]
Py [shape=box label="Python" color=blue]
Up [shape=box label="Update" color=blue]
Un [shape=box label="Universe" color=blue]
Ti [shape=box label="Timer" color=blue]
Rg [label="Region" color=red]
Rb [shape=box label="RegionBlock"]
Rs [shape=box label="RegionSphere"]
Av [label="AtomVec" color=red]
It [label="Integrate" color=red]
Mi [label="Min" color=red]
Pa [label="Pair" color=red]
Bo [label="Bond" color=red]
An [label="Angle" color=red]
Di [label="Dihedral" color=red]
Im [label="Improper" color=red]
Ks [label="Kspace" color=red]
Du [label="Dump" color=red]
Fi [label="Fix" color=red]
Cp [label="Compute" color=red]
Th [label="Thermo"]
Va [label="Variable"]
Ew [shape=box label="Ewald"]
Pp [shape=box label="PPPM"]
Ff [label="FFT3d"]
Re [label="Remap"]
Gc [label="GridComm"]
Cb [shape=box label="CommBrick"]
Ct [shape=box label="CommTiled"]
Aa [shape=box label="AtomVecAtomic"]
Am [shape=box label="AtomVecMolecular"]
Lj [shape=box label="PairLJCut"]
Lo [shape=box label="PairLJCutOMP"]
Lg [shape=box label="PairLJCutGPU"]
Te [shape=box label="PairTersoff"]
Bh [shape=box label="BondHarmonic"]
Bf [shape=box label="BondFENE"]
Fa [shape=box label="FixAveTime"]
Fn [shape=box label="FixNVE"]
Fh [shape=box label="FixNH"]
Fp [shape=box label="FixNPT"]
Ft [shape=box label="FixNVT"]
Da [shape=box label="DumpAtom"]
Dc [shape=box label="DumpCustom"]
Dg [shape=box label="DumpCFG"]
Ve [shape=box label="Verlet"]
Rr [shape=box label="Respa"]
Po [shape=box label="PPPMOmp"]
La -> {At Ci Co Do Er Fo Gr In Ko Ak Mk Me Mo Ne Ou Py Ti Up Un} [penwidth=2]
Do -> {Rg} [penwidth=2]
Co -> {Cb Ct} [style=dashed penwidth=2]
Rg -> {Rb Rs} [style=dashed penwidth=2]
In -> Va [penwidth=2]
Mo -> {Fi Cp} [penwidth=2]
Fo -> {Pa Bo An Di Im Ks} [penwidth=2]
Ks -> {Ew Pp} [style=dashed penwidth=2]
Pp -> {Ff Re Gc} [penwidth=2]
Pp -> {Po} [style=dashed penwidth=2]
Up -> {It Mi} [penwidth=2]
It -> {Ve Rr} [style=dashed penwidth=2]
Ou -> {Du Th} [penwidth=2]
Du -> {Da Dc} [style=dashed penwidth=2]
Dc -> {Dg} [style=dashed penwidth=2]
At -> Av [penwidth=2]
Av -> {Aa Am} [style=dashed penwidth=2]
Pa -> {Lj Te} [style=dashed penwidth=2]
Lj -> {Lo Lg} [style=dashed penwidth=2]
Bo -> {Bh Bf} [style=dashed penwidth=2]
Fi -> {Fa Fn Fh} [style=dashed penwidth=2]
Fh -> {Fp Ft} [style=dashed penwidth=2]
}

View File

@ -0,0 +1,27 @@
// LAMMPS -> Python
digraph api {
rankdir="LR";
edge [constraint=false];
input [shape=box label="LAMMPS\nInput Script" height=1.5];
subgraph cluster0 {
style=filled;
color="#e5e5e5";
rank=same;
capi [shape=box style=filled height=1 color="#666666" fontcolor=white label="LAMMPS\nC Library API"];
instance [shape=box style=filled height=1 color="#3465a4" fontcolor=white label="LAMMPS\ninstance\n\n0x01abcdef"];
capi -> instance [dir=both];
label="LAMMPS Shared Library\nor LAMMPS Executable";
}
python [shape=box style=filled color="#4e9a06" fontcolor=white label="Python\nScript" height=1.5];
subgraph cluster1 {
style=filled;
color="#e5e5e5";
lammps [shape=box style=filled height=1 color="#729fcf" label="lammps\n\nptr: 0x01abcdef"];
label="LAMMPS Python Module";
}
input -> instance [constraint=true];
instance -> python [dir=both constraint=true];
python:e -> lammps:w [dir=both constraint=true];
lammps:s -> capi:e [dir=both label=ctypes constraint=true];
}

View File

@ -0,0 +1,30 @@
// PyLammps -> LAMMPS
digraph api {
rankdir="LR";
edge [constraint=false];
python [shape=box style=filled color="#4e9a06" fontcolor=white label="Python\nScript" height=1.5];
subgraph cluster0 {
style=filled;
color="#e5e5e5";
height=1.5;
rank=same;
pylammps [shape=box style=filled height=1 color="#729fcf" label="(I)PyLammps"];
lammps [shape=box style=filled height=1 color="#729fcf" label="lammps\n\nptr: 0x01abcdef"];
pylammps -> lammps [dir=both];
label="LAMMPS Python Module";
}
subgraph cluster1 {
style=filled;
color="#e5e5e5";
height=1.5;
capi [shape=box style=filled height=1 color="#666666" fontcolor=white label="LAMMPS\nC Library API"];
instance [shape=box style=filled height=1 color="#3465a4" fontcolor=white label="LAMMPS\ninstance\n\n0x01abcdef"];
capi -> instance [dir=both constraint=true];
label="LAMMPS Shared Library";
}
python -> pylammps [dir=both constraint=true];
lammps -> capi [dir=both label=ctypes constraint=true];
pylammps:e -> instance:ne [dir=back, style=dashed label="captured standard output"];
}

View File

@ -0,0 +1,24 @@
// Python -> LAMMPS
digraph api {
rankdir="LR";
python [shape=box style=filled color="#4e9a06" fontcolor=white label="Python\nScript" height=1.5];
subgraph cluster0 {
style=filled;
color="#e5e5e5";
height=1.5;
lammps [shape=box style=filled height=1 color="#729fcf" label="lammps\n\nptr: 0x01abcdef"];
label="LAMMPS Python Module";
}
subgraph cluster1 {
style=filled;
color="#e5e5e5";
height=1.5;
capi [shape=box style=filled height=1 color="#666666" fontcolor=white label="LAMMPS\nC Library API"];
instance [shape=box style=filled height=1 color="#3465a4" fontcolor=white label="LAMMPS\ninstance\n\n0x01abcdef"];
capi -> instance [dir=both];
label="LAMMPS Shared Library";
}
python -> lammps [dir=both];
lammps -> capi [dir=both,label=ctypes];
}

View File

@ -3,7 +3,7 @@
This purpose of this document is to provide a point of reference
for LAMMPS developers and contributors as to what include files
and definitions to put where into LAMMPS source.
Last change 2019-07-05
Last change 2020-08-31
## Table of Contents
@ -65,7 +65,7 @@ Header files will typically contain the definition of a (single) class.
These header files should have as few include statements as possible.
This is particularly important for classes that implement a "style" and
thus use a macro of the kind `SomeStyle(some/name,SomeName)`. These will
all be included in the auto-generated `"some_style.h"` files which
all be included in the auto-generated `"some_style.h"` files which
results in a high potential for direct or indirect symbol name clashes.
In the ideal case, the header would only include one file defining the
@ -91,29 +91,31 @@ statements should follow the "include what you use" principle.
Include files should be included in this order:
* the header matching the implementation (`some_class.h` for file `some_class.cpp`)
* mpi.h
* system and library headers (anything that is using angular brackets; C-library headers first, then C++)
* mpi.h (only if needed)
* LAMMPS local headers (preferably in alphabetical order)
* system and library headers (anything that is using angular brackets; preferably in alphabetical order)
* conditional include statements (i.e. anything bracketed with ifdefs)
### Special Cases and Exceptions
#### pointers.h
The `pointer.h` header file also includes `cstdio` and `lmptype.h`
(and through it `stdint.h`, `intttypes.h`, cstdlib, and `climits`).
The `pointer.h` header file also includes (in this order) `lmptype.h`,
`mpi.h`, `cstddef`, `cstdio`, `string`, `utils.h`, and `fmt/format.h`
and through `lmptype.h` indirectly also `climits`, `cstdlib`, `cinttypes`.
This means any header including `pointers.h` can assume that `FILE`,
`NULL`, `INT_MAX` are defined.
`NULL`, `INT_MAX` are defined, and the may freely use the std::string
for arguments. Corresponding implementation files do not need to include
those headers.
## Tools
The [Include What You Use tool](https://include-what-you-use.org/)
can be used to provide supporting information about compliance with
the rules listed here. There are some limitations and the IWYU tool
may give incorrect advice. The tools is activated by setting the
CMake variable `CMAKE_CXX_INCLUDE_WHAT_YOU_USE` variable to the
path of the `include-what-you-use` command. When activated, the
tool will be run after each compilation and provide suggestions for
which include files should be added or removed.
the rules listed here. Through setting `-DENABLE_IWYU=on` when running
CMake, a custom build target is added that will enable recording
the compilation commands and then run the `iwyu_tool` using the
recorded compilation commands information when typing `make iwyu`.
## Legacy Code

View File

@ -1,4 +1,4 @@
.TH LAMMPS "15 June 2020" "2020-06-15"
.TH LAMMPS "9 October 2020" "2020-10-09"
.SH NAME
.B LAMMPS
\- Molecular Dynamics Simulator.

1394
doc/src/Bibliography.rst Normal file

File diff suppressed because it is too large Load Diff

View File

@ -8,7 +8,7 @@ Makefiles, Ninja, Xcode, Visual Studio, KDevelop, CodeBlocks and more).
As an alternative you can download a package with pre-built executables
or automated build trees as described on the :doc:`Install <Install>`
doc page.
page.
.. toctree::
:maxdepth: 1
@ -20,5 +20,6 @@ doc page.
Build_settings
Build_package
Build_extras
Build_manual
Build_windows
Build_development

View File

@ -8,7 +8,6 @@ CMake and make:
* :ref:`Choice of compiler and compile/link options <compile>`
* :ref:`Build the LAMMPS executable and library <exe>`
* :ref:`Including and removing debug support <debug>`
* :ref:`Build the LAMMPS documentation <doc>`
* :ref:`Install LAMMPS after a build <install>`
----------
@ -32,74 +31,80 @@ LAMMPS are also written with support for shared memory parallelization
using the `OpenMP <https://en.wikipedia.org/wiki/OpenMP>`_ threading
standard. A more detailed discussion of that is below.
**CMake build**\ :
.. tabs::
.. code-block:: bash
.. tab:: CMake build
-D BUILD_MPI=value # yes or no, default is yes if CMake finds MPI, else no
-D BUILD_OMP=value # yes or no, default is yes if a compatible compiler is detected
-D LAMMPS_MACHINE=name # name = mpi, serial, mybox, titan, laptop, etc
# no default value
.. code-block:: bash
The executable created by CMake (after running make) is named ``lmp`` unless
the ``LAMMPS_MACHINE`` option is set. When setting ``LAMMPS_MACHINE=name``
the executable will be called ``lmp_name``. Using ``BUILD_MPI=no`` will
enforce building a serial executable using the MPI STUBS library.
-D BUILD_MPI=value # yes or no, default is yes if CMake finds MPI, else no
-D BUILD_OMP=value # yes or no, default is yes if a compatible compiler is detected
-D LAMMPS_MACHINE=name # name = mpi, serial, mybox, titan, laptop, etc
# no default value
**Traditional make**\ :
The executable created by CMake (after running make) is named
``lmp`` unless the ``LAMMPS_MACHINE`` option is set. When setting
``LAMMPS_MACHINE=name`` the executable will be called
``lmp_name``. Using ``BUILD_MPI=no`` will enforce building a
serial executable using the MPI STUBS library.
The build with traditional makefiles has to be done inside the source folder ``src``.
.. tab:: Traditional make
.. code-block:: bash
The build with traditional makefiles has to be done inside the source folder ``src``.
make mpi # parallel build, produces lmp_mpi using Makefile.mpi
make serial # serial build, produces lmp_serial using Makefile/serial
make mybox # uses Makefile.mybox to produce lmp_mybox
.. code-block:: bash
Any ``make machine`` command will look up the make settings from a file
``Makefile.machine`` in the folder ``src/MAKE`` or one of its
sub-directories ``MINE``, ``MACHINES``, or ``OPTIONS``, create a folder
``Obj_machine`` with all objects and generated files and an executable
called ``lmp_machine``\ . The standard parallel build with ``make mpi``
assumes a standard MPI installation with MPI compiler wrappers where all
necessary compiler and linker flags to get access and link with the
suitable MPI headers and libraries are set by the wrapper programs. For
other cases or the serial build, you have to adjust the make file
variables ``MPI_INC``, ``MPI_PATH``, ``MPI_LIB`` as well as ``CC`` and
``LINK``\ . To enable OpenMP threading usually a compiler specific flag
needs to be added to the compile and link commands. For the GNU
compilers, this is ``-fopenmp``\ , which can be added to the ``CC`` and
``LINK`` makefile variables.
make mpi # parallel build, produces lmp_mpi using Makefile.mpi
make serial # serial build, produces lmp_serial using Makefile/serial
make mybox # uses Makefile.mybox to produce lmp_mybox
For the serial build the following make variables are set (see src/MAKE/Makefile.serial):
Any ``make machine`` command will look up the make settings from a
file ``Makefile.machine`` in the folder ``src/MAKE`` or one of its
sub-directories ``MINE``, ``MACHINES``, or ``OPTIONS``, create a
folder ``Obj_machine`` with all objects and generated files and an
executable called ``lmp_machine``\ . The standard parallel build
with ``make mpi`` assumes a standard MPI installation with MPI
compiler wrappers where all necessary compiler and linker flags to
get access and link with the suitable MPI headers and libraries
are set by the wrapper programs. For other cases or the serial
build, you have to adjust the make file variables ``MPI_INC``,
``MPI_PATH``, ``MPI_LIB`` as well as ``CC`` and ``LINK``\ . To
enable OpenMP threading usually a compiler specific flag needs to
be added to the compile and link commands. For the GNU compilers,
this is ``-fopenmp``\ , which can be added to the ``CC`` and
``LINK`` makefile variables.
.. code-block:: make
For the serial build the following make variables are set (see src/MAKE/Makefile.serial):
CC = g++
LINK = g++
MPI_INC = -I../STUBS
MPI_PATH = -L../STUBS
MPI_LIB = -lmpi_stubs
.. code-block:: make
You also need to build the STUBS library for your platform before making
LAMMPS itself. A ``make serial`` build does this for you automatically,
otherwise, type ``make mpi-stubs`` from the src directory, or ``make``
from the ``src/STUBS`` dir. If the build fails, you may need to edit
the ``STUBS/Makefile`` for your platform. The stubs library does not
provide MPI/IO functions required by some LAMMPS packages,
e.g. ``MPIIO`` or ``USER-LB``, and thus is not compatible with those
packages.
CC = g++
LINK = g++
MPI_INC = -I../STUBS
MPI_PATH = -L../STUBS
MPI_LIB = -lmpi_stubs
.. note::
You also need to build the STUBS library for your platform before
making LAMMPS itself. A ``make serial`` build does this for you
automatically, otherwise, type ``make mpi-stubs`` from the src
directory, or ``make`` from the ``src/STUBS`` dir. If the build
fails, you may need to edit the ``STUBS/Makefile`` for your
platform. The stubs library does not provide MPI/IO functions
required by some LAMMPS packages, e.g. ``MPIIO`` or ``USER-LB``,
and thus is not compatible with those packages.
The file ``src/STUBS/mpi.c`` provides a CPU timer function called
``MPI_Wtime()`` that calls ``gettimeofday()``. If your operating system
does not support ``gettimeofday()``, you will need to insert code to
call another timer. Note that the ANSI-standard function ``clock()``
rolls over after an hour or so, and is therefore insufficient for
timing long LAMMPS simulations.
.. note::
**MPI and OpenMP support info**\ :
The file ``src/STUBS/mpi.c`` provides a CPU timer function
called ``MPI_Wtime()`` that calls ``gettimeofday()``. If your
operating system does not support ``gettimeofday()``, you will
need to insert code to call another timer. Note that the
ANSI-standard function ``clock()`` rolls over after an hour or
so, and is therefore insufficient for timing long LAMMPS
simulations.
MPI and OpenMP support in LAMMPS
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
If you are installing MPI yourself to build a parallel LAMMPS
executable, we recommend either MPICH or OpenMPI which are regularly
@ -115,12 +120,12 @@ self-installed MPICH or OpenMPI, so you should study the provided
documentation to find out how to build and link with it.
The majority of OpenMP (threading) support in LAMMPS is provided by the
``USER-OMP`` package; see the :doc:`Speed omp <Speed_omp>` doc page for
details. The ``USER-INTEL`` package also includes OpenMP threading (it
is compatible with ``USER-OMP`` and will usually fall back on styles
from that package, if a ``USER-INTEL`` does not exist) and adds
vectorization support when compiled with compatible compilers, in
particular the Intel compilers on top of OpenMP. Also, the ``KOKKOS``
``USER-OMP`` package; see the :doc:`Speed_omp`
page for details. The ``USER-INTEL`` package also includes OpenMP
threading (it is compatible with ``USER-OMP`` and will usually fall
back on styles from that package, if a ``USER-INTEL`` does not exist)
and adds vectorization support when compiled with compatible compilers,
in particular the Intel compilers on top of OpenMP. Also, the ``KOKKOS``
package can be compiled to include OpenMP threading.
In addition, there are a few commands in LAMMPS that have native OpenMP
@ -128,8 +133,8 @@ support included as well. These are commands in the ``MPIIO``,
``SNAP``, ``USER-DIFFRACTION``, and ``USER-DPD`` packages. In addition
some packages support OpenMP threading indirectly through the libraries
they interface to: e.g. ``LATTE``, ``KSPACE``, and ``USER-COLVARS``.
See the :doc:`Packages details <Packages_details>` doc page for more
info on these packages and the doc pages for their respective commands
See the :doc:`Packages details <Packages_details>` page for more
info on these packages and the pages for their respective commands
for OpenMP threading info.
For CMake, if you use ``BUILD_OMP=yes``, you can use these packages
@ -145,18 +150,19 @@ please refer to its documentation.
.. _default-none-issues:
**OpenMP Compiler compatibility info**\ :
OpenMP Compiler compatibility
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Some compilers do not fully support the ``default(none)`` directive
and others (e.g. GCC version 9 and beyond, Clang version 10 and later)
may implement strict OpenMP 4.0 and later semantics, which are incompatible
Some compilers do not fully support the ``default(none)`` directive and
others (e.g. GCC version 9 and beyond, Clang version 10 and later) may
implement strict OpenMP 4.0 and later semantics, which are incompatible
with the OpenMP 3.1 semantics used in LAMMPS for maximal compatibility
with compiler versions in use. If compilation with OpenMP enabled fails
because of your compiler requiring strict OpenMP 4.0 semantic, you can
change the behavior by adding ``-D LAMMPS_OMP_COMPAT=4`` to the ``LMP_INC``
variable in your makefile, or add it to the command line while configuring
with CMake. CMake will detect the suitable setting for the GNU, Clang,
and Intel compilers.
because of your compiler requiring strict OpenMP 4.0 semantics, you can
change the behavior by adding ``-D LAMMPS_OMP_COMPAT=4`` to the
``LMP_INC`` variable in your makefile, or add it to the command line
while configuring with CMake. LAMMPS will auto-detect a suitable setting
for most GNU, Clang, and Intel compilers.
----------
@ -185,136 +191,144 @@ for their compile/link environments, you can often access different
compilers by simply loading the appropriate module before building
LAMMPS.
**CMake build**\ :
.. tabs::
By default CMake will use a compiler it finds according to internal
preferences and it will add optimization flags appropriate to that
compiler and any :doc:`accelerator packages <Speed_packages>` you have
included in the build.
.. tab:: CMake build
You can tell CMake to look for a specific compiler with setting CMake
variable during configuration. For a few common choices, there are also
presets in the ``cmake/presets`` folder. For convenience, there is a
``CMAKE_TUNE_FLAGS`` variable that can be set to apply global compiler
options. More on that below, but you can also specify the corresponding
``CMAKE_*_FLAGS`` variables individually if you want to experiment with
alternate optimization flags. You should specify all 3 compilers, so
that the (few) LAMMPS source files written in C or Fortran are built
with a compiler consistent with the one used for the C++ files:
By default CMake will use the compiler it finds according to
internal preferences and it will add optimization flags
appropriate to that compiler and any :doc:`accelerator packages
<Speed_packages>` you have included in the build. CMake will
check if the detected or selected compiler is compatible with the
C++ support requirements of LAMMPS and stop with an error, if this
is not the case.
.. code-block:: bash
You can tell CMake to look for a specific compiler with setting
CMake variables (listed below) during configuration. For a few
common choices, there are also presets in the ``cmake/presets``
folder. For convenience, there is a ``CMAKE_TUNE_FLAGS`` variable
that can be set to apply global compiler options (applied to
compilation only), to be used for adding compiler or host specific
optimization flags in addition to the "flags" variables listed
below. You may also specify the corresponding ``CMAKE_*_FLAGS``
variables individually, if you want to experiment with alternate
optimization flags. You should specify all 3 compilers, so that
the (few) LAMMPS source files written in C or Fortran are built
with a compiler consistent with the one used for the C++ files:
-D CMAKE_CXX_COMPILER=name # name of C++ compiler
-D CMAKE_C_COMPILER=name # name of C compiler
-D CMAKE_Fortran_COMPILER=name # name of Fortran compiler
.. code-block:: bash
-D CMAKE_CXX_FLAGS=string # flags to use with C++ compiler
-D CMAKE_C_FLAGS=string # flags to use with C compiler
-D CMAKE_Fortran_FLAGS=string # flags to use with Fortran compiler
-D CMAKE_CXX_COMPILER=name # name of C++ compiler
-D CMAKE_C_COMPILER=name # name of C compiler
-D CMAKE_Fortran_COMPILER=name # name of Fortran compiler
A few example command lines are:
-D CMAKE_CXX_FLAGS=string # flags to use with C++ compiler
-D CMAKE_C_FLAGS=string # flags to use with C compiler
-D CMAKE_Fortran_FLAGS=string # flags to use with Fortran compiler
.. code-block:: bash
A few example command lines are:
# Building with GNU Compilers:
cmake ../cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_Fortran_COMPILER=gfortran
# Building with Intel Compilers:
cmake ../cmake -DCMAKE_C_COMPILER=icc -DCMAKE_CXX_COMPILER=icpc -DCMAKE_Fortran_COMPILER=ifort
# Building with LLVM/Clang Compilers:
cmake ../cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_Fortran_COMPILER=flang
.. code-block:: bash
For compiling with the Clang/LLVM compilers a CMake preset is provided that
can be loaded with `-C ../cmake/presets/clang.cmake`. Similarly,
`-C ../cmake/presets/intel.cmake` should switch the
# Building with GNU Compilers:
cmake ../cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_Fortran_COMPILER=gfortran
# Building with Intel Compilers:
cmake ../cmake -DCMAKE_C_COMPILER=icc -DCMAKE_CXX_COMPILER=icpc -DCMAKE_Fortran_COMPILER=ifort
# Building with LLVM/Clang Compilers:
cmake ../cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_Fortran_COMPILER=flang
In addition you can set ``CMAKE_TUNE_FLAGS`` to specifically add
compiler flags to tune for optimal performance on given hosts. By
default these are initialized to some compiler specific flags, to
optimize the LAMMPS executable with optimizations and instructions
available on the host where LAMMPS is compiled. For example, for Intel
compilers this would be ``-xHost`` and for GNU compilers this would be
``-march=native``. To turn these flags off, do ``-D CMAKE_TUNE_FLAGS=``.
For compiling with the Clang/LLVM compilers a CMake preset is
provided that can be loaded with
`-C ../cmake/presets/clang.cmake`. Similarly,
`-C ../cmake/presets/intel.cmake` should switch the compiler
toolchain to the Intel compilers.
.. note::
In addition you can set ``CMAKE_TUNE_FLAGS`` to specifically add
compiler flags to tune for optimal performance on given hosts. By
default this variable is empty.
When the cmake command completes, it prints a summary to the screen
which compilers it is using and what flags and settings will be used
for the compilation. Note that if the top-level compiler is mpicxx,
it is simply a wrapper on a real compiler. The underlying compiler
info is what CMake will try to determine and report. You should check
to confirm you are using the compiler and optimization flags you want.
.. note::
**Makefile.machine settings for traditional make**\ :
When the cmake command completes, it prints a summary to the
screen which compilers it is using and what flags and settings
will be used for the compilation. Note that if the top-level
compiler is mpicxx, it is simply a wrapper on a real compiler.
The underlying compiler info is what CMake will try to
determine and report. You should check to confirm you are
using the compiler and optimization flags you want.
The "compiler/linker settings" section of a Makefile.machine lists
compiler and linker settings for your C++ compiler, including
optimization flags. For a parallel build it is recommended to use
``mpicxx`` or ``mpiCC``, since these compiler wrappers will include a
variety of settings appropriate for your MPI installation and thus
avoiding the guesswork of finding the right flags.
.. tab:: Makefile.machine settings for traditional make
Parallel build (see ``src/MAKE/Makefile.mpi``):
The "compiler/linker settings" section of a Makefile.machine lists
compiler and linker settings for your C++ compiler, including
optimization flags. For a parallel build it is recommended to use
``mpicxx`` or ``mpiCC``, since these compiler wrappers will
include a variety of settings appropriate for your MPI
installation and thus avoiding the guesswork of finding the right
flags.
.. code-block:: bash
Parallel build (see ``src/MAKE/Makefile.mpi``):
CC = mpicxx
CCFLAGS = -g -O3
LINK = mpicxx
LINKFLAGS = -g -O
.. code-block:: bash
Serial build with GNU gcc (see ``src/MAKE/Makefile.serial``):
CC = mpicxx
CCFLAGS = -g -O3
LINK = mpicxx
LINKFLAGS = -g -O
.. code-block:: make
Serial build with GNU gcc (see ``src/MAKE/Makefile.serial``):
CC = g++
CCFLAGS = -g -O3
LINK = g++
LINKFLAGS = -g -O
.. code-block:: make
CC = g++
CCFLAGS = -g -O3
LINK = g++
LINKFLAGS = -g -O
.. note::
.. note::
If compilation stops with a message like the following:
If compilation stops with a message like the following:
.. code-block::
.. code-block::
g++ -g -O3 -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 -I../STUBS -c ../main.cpp
In file included from ../pointers.h:24:0,
from ../input.h:17,
from ../main.cpp:16:
../lmptype.h:34:2: error: #error LAMMPS requires a C++11 (or later) compliant compiler. Enable C++11 compatibility or upgrade the compiler.
g++ -g -O3 -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 -I../STUBS -c ../main.cpp
In file included from ../pointers.h:24:0,
from ../input.h:17,
from ../main.cpp:16:
../lmptype.h:34:2: error: #error LAMMPS requires a C++11 (or later) compliant compiler. Enable C++11 compatibility or upgrade the compiler.
then you have either an unsupported (old) compiler or you have to
turn on C++11 mode. The latter applies to GCC 4.8.x shipped with
RHEL 7.x and CentOS 7.x. For those compilers, you need to add the
``-std=c++11`` flag. Otherwise, you would have to install a newer
compiler that supports C++11; either as a binary package or through
compiling from source.
then you have either an unsupported (old) compiler or you have
to turn on C++11 mode. The latter applies to GCC 4.8.x shipped
with RHEL 7.x and CentOS 7.x. For those compilers, you need to
add the ``-std=c++11`` flag. Otherwise, you would have to
install a newer compiler that supports C++11; either as a
binary package or through compiling from source.
If you build LAMMPS with any :doc:`accelerator packages
<Speed_packages>` included, there may be specific optimization flags
that are either required or recommended to enable required features and
to achieve optimal performance. You need to include these in the
CCFLAGS and LINKFLAGS settings above. For details, see the individual
package doc pages listed on the :doc:`Speed packages <Speed_packages>`
doc page. Or examine these files in the src/MAKE/OPTIONS directory.
They correspond to each of the 5 accelerator packages and their hardware
variants:
If you build LAMMPS with any :doc:`Speed_packages` included,
there may be specific compiler or linker flags that are either
required or recommended to enable required features and to
achieve optimal performance. You need to include these in the
CCFLAGS and LINKFLAGS settings above. For details, see the
documentation for the individual packages listed on the
:doc:`Speed_packages` page. Or examine these files in the
src/MAKE/OPTIONS directory. They correspond to each of the 5
accelerator packages and their hardware variants:
.. code-block:: bash
.. code-block:: bash
Makefile.opt # OPT package
Makefile.omp # USER-OMP package
Makefile.intel_cpu # USER-INTEL package for CPUs
Makefile.intel_coprocessor # USER-INTEL package for KNLs
Makefile.gpu # GPU package
Makefile.kokkos_cuda_mpi # KOKKOS package for GPUs
Makefile.kokkos_omp # KOKKOS package for CPUs (OpenMP)
Makefile.kokkos_phi # KOKKOS package for KNLs (OpenMP)
Makefile.opt # OPT package
Makefile.omp # USER-OMP package
Makefile.intel_cpu # USER-INTEL package for CPUs
Makefile.intel_coprocessor # USER-INTEL package for KNLs
Makefile.gpu # GPU package
Makefile.kokkos_cuda_mpi # KOKKOS package for GPUs
Makefile.kokkos_omp # KOKKOS package for CPUs (OpenMP)
Makefile.kokkos_phi # KOKKOS package for KNLs (OpenMP)
----------
.. _exe:
.. _library:
Build the LAMMPS executable and library
---------------------------------------
@ -326,54 +340,59 @@ will then process commands provided via a file or from the console
input. The LAMMPS library can also be called from another application
or a scripting language. See the :doc:`Howto couple <Howto_couple>` doc
page for more info on coupling LAMMPS to other codes. See the
:doc:`Python <Python_head>` doc page for more info on wrapping and
:doc:`Python <Python_head>` page for more info on wrapping and
running LAMMPS from Python via its library interface.
**CMake build**\ :
.. tabs::
For CMake builds, you can select through setting CMake variables between
building a shared or a static LAMMPS library and what kind of suffix is
added to them (in case you want to concurrently install multiple variants
of binaries with different settings). If none are set, defaults are applied.
.. tab:: CMake build
.. code-block:: bash
For CMake builds, you can select through setting CMake variables
between building a shared or a static LAMMPS library and what kind
of suffix is added to them (in case you want to concurrently
install multiple variants of binaries with different settings). If
none are set, defaults are applied.
-D BUILD_SHARED_LIBS=value # yes or no (default)
-D LAMMPS_MACHINE=name # name = mpi, serial, mybox, titan, laptop, etc
# no default value
.. code-block:: bash
The compilation will always produce a LAMMPS library and an executable
linked to it. By default this will be a static library named
``liblammps.a`` and an executable named ``lmp`` Setting
``BUILD_SHARED_LIBS=yes`` will instead produce a shared library called
``liblammps.so`` (or ``liblammps.dylib`` or ``liblammps.dll`` depending
on the platform) If ``LAMMPS_MACHINE=name`` is set in addition, the name
of the generated libraries will be changed to either
``liblammps_name.a`` or ``liblammps_name.so``\ , respectively and the
executable will be called ``lmp_name``.
-D BUILD_SHARED_LIBS=value # yes or no (default)
-D LAMMPS_MACHINE=name # name = mpi, serial, mybox, titan, laptop, etc
# no default value
**Traditional make**\ :
The compilation will always produce a LAMMPS library and an
executable linked to it. By default this will be a static library
named ``liblammps.a`` and an executable named ``lmp`` Setting
``BUILD_SHARED_LIBS=yes`` will instead produce a shared library
called ``liblammps.so`` (or ``liblammps.dylib`` or
``liblammps.dll`` depending on the platform) If
``LAMMPS_MACHINE=name`` is set in addition, the name of the
generated libraries will be changed to either ``liblammps_name.a``
or ``liblammps_name.so``\ , respectively and the executable will
be called ``lmp_name``.
With the traditional makefile based build process, the choice of
the generated executable or library depends on the "mode" setting.
Several options are available and ``mode=static`` is the default.
.. tab:: Traditional make
.. code-block:: bash
With the traditional makefile based build process, the choice of
the generated executable or library depends on the "mode" setting.
Several options are available and ``mode=static`` is the default.
make machine # build LAMMPS executable lmp_machine
make mode=static machine # same as "make machine"
make mode=shared machine # build LAMMPS shared lib liblammps_machine.so instead
.. code-block:: bash
The "static" build will generate a static library called
``liblammps_machine.a`` and an executable named ``lmp_machine``\ , while
the "shared" build will generate a shared library
``liblammps_machine.so`` instead and ``lmp_machine`` will be linked to
it. The build step will also create generic soft links, named
``liblammps.a`` and ``liblammps.so``\ , which point to the specific
``liblammps_machine.a/so`` files.
make machine # build LAMMPS executable lmp_machine
make mode=static machine # same as "make machine"
make mode=shared machine # build LAMMPS shared lib liblammps_machine.so instead
CMake and make info
^^^^^^^^^^^^^^^^^^^
The "static" build will generate a static library called
``liblammps_machine.a`` and an executable named ``lmp_machine``\ ,
while the "shared" build will generate a shared library
``liblammps_machine.so`` instead and ``lmp_machine`` will be
linked to it. The build step will also create generic soft links,
named ``liblammps.a`` and ``liblammps.so``\ , which point to the
specific ``liblammps_machine.a/so`` files.
Additional information
^^^^^^^^^^^^^^^^^^^^^^
Note that for creating a shared library, all the libraries it depends on
must be compiled to be compatible with shared libraries. This should be
@ -419,7 +438,7 @@ recommended to ensure the integrity of the system software installation.
.. _debug:
Excluding or removing debug support
Including or removing debug support
-----------------------------------
By default the compilation settings will include the *-g* flag which
@ -446,67 +465,6 @@ the debug information from the LAMMPS executable:
----------
.. _doc:
Build the LAMMPS documentation
----------------------------------------
The LAMMPS manual is written in `reStructuredText <rst_>`_ format which
can be translated to different output format using the `Sphinx <sphinx_>`_
document generator tool. Currently the translation to HTML and PDF (via
LaTeX) are supported. For that to work a Python 3 interpreter and
internet access is required. For the documentation build a python
based virtual environment is set up in the folder doc/docenv and various
python packages are installed into that virtual environment via the pip
tool. The actual translation is then done via make commands.
.. _rst: https://docutils.readthedocs.io/en/sphinx-docs/user/rst/quickstart.html
.. _sphinx: https://sphinx-doc.org
Documentation make option
^^^^^^^^^^^^^^^^^^^^^^^^^
The following make commands can be issued in the doc folder of the
LAMMPS source distribution.
.. code-block:: bash
make html # create HTML doc pages in html directory
make pdf # create Developer.pdf and Manual.pdf in this directory
make fetch # fetch HTML and PDF files from LAMMPS web site
make clean # remove all intermediate files
make clean-all # reset the entire doc build environment
make anchor_check # scan for duplicate anchor labels
make style_check # check for complete and consistent style lists
make package_check # check for complete and consistent package lists
make spelling # spell-check the manual
Thus "make html" will create a "doc/html" directory with the HTML format
manual pages so that you can browse them with a web browser locally on
your system.
.. note::
You can also download a tarball of the documentation for the
current LAMMPS version (HTML and PDF files), from the website
`download page <https://lammps.sandia.gov/download.html>`_.
CMake build option
^^^^^^^^^^^^^^^^^^
It is also possible to create the HTML version of the manual within
the :doc:`CMake build directory <Build_cmake>`. The reason for this
option is to include the installation of the HTML manual pages into
the "install" step when installing LAMMPS after the CMake build via
``make install``. The documentation build is included in the default
build target, but can also be requested independently with ``make doc``.
.. code-block:: bash
-D BUILD_DOC=value # yes or no (default)
----------
.. _tools:
Build LAMMPS tools
@ -515,27 +473,31 @@ Build LAMMPS tools
Some tools described in :doc:`Auxiliary tools <Tools>` can be built directly
using CMake or Make.
CMake build
^^^^^^^^^^^
.. tabs::
.. code-block:: bash
.. tab:: CMake build
-D BUILD_TOOLS=value # yes or no (default)
.. code-block:: bash
The generated binaries will also become part of the LAMMPS installation
(see below).
-D BUILD_TOOLS=value # yes or no (default)
-D BUILD_LAMMPS_SHELL=value # yes or no (default)
Traditional make
^^^^^^^^^^^^^^^^
The generated binaries will also become part of the LAMMPS installation
(see below).
.. code-block:: bash
.. tab:: Traditional make
cd lammps/tools
make all # build all binaries of tools
make binary2txt # build only binary2txt tool
make chain # build only chain tool
make micelle2d # build only micelle2d tool
make thermo_extract # build only thermo_extract tool
.. code-block:: bash
cd lammps/tools
make all # build all binaries of tools
make binary2txt # build only binary2txt tool
make chain # build only chain tool
make micelle2d # build only micelle2d tool
make thermo_extract # build only thermo_extract tool
cd lammps/tools/lammps-shell
make # build LAMMPS shell
----------
@ -550,18 +512,19 @@ a globally visible place on your system, for others to access. Note
that you may need super-user privileges (e.g. sudo) if the directory
you want to copy files to is protected.
CMake build
^^^^^^^^^^^
.. tabs::
.. code-block:: bash
.. tab:: CMake build
cmake -D CMAKE_INSTALL_PREFIX=path [options ...] ../cmake
make # perform make after CMake command
make install # perform the installation into prefix
.. code-block:: bash
Traditional make
^^^^^^^^^^^^^^^^
cmake -D CMAKE_INSTALL_PREFIX=path [options ...] ../cmake
make # perform make after CMake command
make install # perform the installation into prefix
There is no "install" option in the ``src/Makefile`` for LAMMPS. If
you wish to do this you will need to first build LAMMPS, then manually
copy the desired LAMMPS files to the appropriate system directories.
.. tab:: Traditional make
There is no "install" option in the ``src/Makefile`` for LAMMPS.
If you wish to do this you will need to first build LAMMPS, then
manually copy the desired LAMMPS files to the appropriate system
directories.

View File

@ -8,8 +8,8 @@ useful during development, testing or debugging.
.. _compilation:
Verify compilation flags
------------------------
Monitor compilation flags
-------------------------
Sometimes it is necessary to verify the complete sequence of compilation flags
generated by the CMake build. To enable a more verbose output during
@ -19,7 +19,8 @@ compilation you can use the following option.
-D CMAKE_VERBOSE_MAKEFILE=value # value = no (default) or yes
Another way of doing this without reconfiguration is calling make with variable VERBOSE set to 1:
Another way of doing this without reconfiguration is calling make with
variable VERBOSE set to 1:
.. code-block:: bash
@ -27,31 +28,67 @@ Another way of doing this without reconfiguration is calling make with variable
----------
.. _iwyu_processing:
Report missing and unneeded '#include' statements
-------------------------------------------------
The conventions for how and when to use and order include statements in
LAMMPS are `documented in a separate file <https://github.com/lammps/lammps/blob/master/doc/include-file-conventions.md>`_
(also included in the source code distribution). To assist with following
these conventions one can use the `Include What You Use tool <https://include-what-you-use.org/>`_.
This is still under development and for large and complex projects like LAMMPS
there are some false positives, so suggested changes need to be verified manually.
It is recommended to use at least version 0.14, which has much fewer incorrect
reports than earlier versions.
The necessary steps to generate the report can be enabled via a
CMake variable:
.. code-block:: bash
-D ENABLE_IWYU=value # value = no (default) or yes
This will check if the required binary (include-what-you-use or iwyu)
and python script script (iwyu-tool or iwyu_tool or iwyu_tool.py) can
be found in the path. The analysis can then be started with:
.. code-block:: bash
make iwyu
This may first run some compilation, as the analysis is dependent
on recording all commands required to do the compilation.
----------
.. _sanitizer:
Address, Undefined Behavior, and Thread Sanitizer Support
---------------------------------------------------------
Compilers such as GCC and Clang support generating instrumented binaries
which use different sanitizer libraries to detect problems in code
which use different sanitizer libraries to detect problems in the code
during run-time. They can detect issues like:
- `memory leaks <https://clang.llvm.org/docs/AddressSanitizer.html>`_
- `memory leaks <https://clang.llvm.org/docs/AddressSanitizer.html#memory-leak-detection>`_
- `undefined behavior <https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html>`_
- `data races <https://clang.llvm.org/docs/ThreadSanitizer.html>`_
Please note that this kind of instrumentation usually comes with a small
performance hit (much less than using tools like `Valgrind
<https://valgrind.org>`_). The to enable these features additional
compiler flags need to be added to the compilation and linking stages.
This is most easily done through setting the ``CMAKE_TUNE_FLAGS``
variable during configuration. Examples:
Please note that this kind of instrumentation usually comes with a
performance hit (but much less than using tools like `Valgrind
<https://valgrind.org>`_ with a more low level approach). To enable
these features, additional compiler flags need to be added to the
compilation and linking stages. This is done through setting the
``ENABLE_SANITIZER`` variable during configuration. Examples:
.. code-block:: bash
-D CMAKE_TUNE_FLAGS=-fsanitize=address # enable address sanitizer / memory leak checker
-D CMAKE_TUNE_FLAGS=-fsanitize=undefined # enable undefined behavior sanitizer
-D CMAKE_TUNE_FLAGS=-fsanitize=thread # enable thread sanitizer
-D ENABLE_SANITIZER=none # no sanitizer active (default)
-D ENABLE_SANITIZER=address # enable address sanitizer / memory leak checker
-D ENABLE_SANITIZER=leak # enable memory leak checker (only)
-D ENABLE_SANITIZER=undefined # enable undefined behavior sanitizer
-D ENABLE_SANITIZER=thread # enable thread sanitizer
----------
@ -74,7 +111,7 @@ error margin). The status of this automated testing can be viewed on
The unit testing facility is integrated into the CMake build process
of the LAMMPS source code distribution itself. It can be enabled by
setting ``-D ENABLE_TESTING=on`` during the CMake configuration step.
It requires the `YAML <http://pyyaml.org/>`_ library and development
It requires the `PyYAML <http://pyyaml.org/>`_ library and development
headers to compile and will download and compile a recent version of the
`Googletest <https://github.com/google/googletest/>`_ C++ test framework
for implementing the tests.
@ -86,19 +123,21 @@ The output of this command will be looking something like this::
[...]$ ctest
Test project /home/akohlmey/compile/lammps/build-testing
Start 1: MolPairStyle:hybrid-overlay
1/26 Test #1: MolPairStyle:hybrid-overlay ......... Passed 0.02 sec
1/109 Test #1: MolPairStyle:hybrid-overlay ......... Passed 0.02 sec
Start 2: MolPairStyle:hybrid
2/26 Test #2: MolPairStyle:hybrid ................. Passed 0.01 sec
2/109 Test #2: MolPairStyle:hybrid ................. Passed 0.01 sec
Start 3: MolPairStyle:lj_class2
[...]
Start 25: AngleStyle:harmonic
25/26 Test #25: AngleStyle:harmonic ................. Passed 0.01 sec
Start 26: AngleStyle:zero
26/26 Test #26: AngleStyle:zero ..................... Passed 0.01 sec
Start 107: PotentialFileReader
107/109 Test #107: PotentialFileReader ................ Passed 0.04 sec
Start 108: EIMPotentialFileReader
108/109 Test #108: EIMPotentialFileReader ............. Passed 0.03 sec
Start 109: TestSimpleCommands
109/109 Test #109: TestSimpleCommands ................. Passed 0.02 sec
100% tests passed, 0 tests failed out of 26
Total Test time (real) = 0.27 sec
Total Test time (real) = 25.57 sec
The ``ctest`` command has many options, the most important ones are:
@ -117,6 +156,8 @@ The ``ctest`` command has many options, the most important ones are:
- exclude subset of tests matching the regular expression <regex>
* - -N
- dry-run: display list of tests without running them
* - -T memcheck
- run tests with valgrind memory checker (if available)
In its full implementation, the unit test framework will consist of multiple
kinds of tests implemented in different programming languages (C++, C, Python,
@ -152,8 +193,8 @@ A test run is then a a collection multiple individual test runs each
with many comparisons to reference results based on template input
files, individual command settings, relative error margins, and
reference data stored in a YAML format file with ``.yaml``
suffix. Currently the programs ``pair_style``, ``bond_style``, and
``angle_style`` are implemented. They will compare forces, energies and
suffix. Currently the programs ``test_pair_style``, ``test_bond_style``, and
``test_angle_style`` are implemented. They will compare forces, energies and
(global) stress for all atoms after a ``run 0`` calculation and after a
few steps of MD with :doc:`fix nve <fix_nve>`, each in multiple variants
with different settings and also for multiple accelerated styles. If a
@ -165,7 +206,7 @@ Below is an example command and output:
.. parsed-literal::
[tests]$ pair_style mol-pair-lj_cut.yaml
[tests]$ test_pair_style mol-pair-lj_cut.yaml
[==========] Running 6 tests from 1 test suite.
[----------] Global test environment set-up.
[----------] 6 tests from PairStyle
@ -193,8 +234,8 @@ In this particular case, 5 out of 6 sets of tests were conducted, the
tests for the ``lj/cut/opt`` pair style was skipped, since the tests
executable did not include it. To learn what individual tests are performed,
you (currently) need to read the source code. You can use code coverage
recording (see next section) to confirm how well the tests cover the individual
source files.
recording (see next section) to confirm how well the tests cover the code
paths in the individual source files.
The force style test programs have a common set of options:
@ -211,6 +252,14 @@ The force style test programs have a common set of options:
* - -v
- verbose output: also print the executed LAMMPS commands
The ``ctest`` tool has no mechanism to directly pass flags to the individual
test programs, but a workaround has been implemented where these flags can be
set in an environment variable ``TEST_ARGS``. Example:
.. code-block:: bash
env TEST_ARGS=-s ctest -V -R BondStyle
To add a test for a style that is not yet covered, it is usually best
to copy a YAML file for a similar style to a new file, edit the details
of the style (how to call it, how to set its coefficients) and then
@ -244,6 +293,81 @@ and working.
of mis-compiled code (or an undesired large loss of precision due
to significant reordering of operations and thus less error cancellation).
Unit tests for timestepping related fixes
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
A substantial subset of :doc:`fix styles <fix>` are invoked regularly
during MD timestepping and manipulate per-atom properties like
positions, velocities, and forces. For those fix styles, testing can be
done in a very similar fashion as for force fields and thus there is a
test program `test_fix_timestep` that shares a lot of code, properties,
and command line flags with the force field style testers described in
the previous section.
This tester will set up a small molecular system run with verlet run
style for 4 MD steps, then write a binary restart and continue for
another 4 MD steps. At this point coordinates and velocities are
recorded and compared to reference data. Then the system is cleared,
restarted and running the second 4 MD steps again and the data is
compared to the same reference. That is followed by another restart
after which per atom type masses are replaced with per-atom masses and
the second 4 MD steps are repeated again and compared to the same
reference. Also global scalar and vector data of the fix is recorded
and compared. If the fix is a thermostat and thus the internal property
``t_target`` can be extracted, then this is compared to the reference
data. The tests are repeated with the respa run style.
If the fix has a multi-threaded version in the USER-OMP package, then
the entire set of tests is repeated for that version as well.
For this to work, some additional conditions have to be met by the
YAML format test inputs.
- The fix to be tested (and only this fix), should be listed in the
``prerequisites:`` section
- The fix to be tested must be specified in the ``post_commands:``
section with the fix-ID ``test``. This section may contain other
commands and other fixes (e.g. an instance of fix nve for testing
a thermostat or force manipulation fix)
- For fixes that can tally contributions to the global virial, the
line ``fix_modify test virial yes`` should be included in the
``post_commands:`` section of the test input.
- For thermostat fixes the target temperature should be ramped from
an arbitrary value (e.g. 50K) to a pre-defined target temperature
entered as ``${t_target}``.
- For fixes that have thermostatting support included, but do not
have it enabled in the input (e.g. fix rigid with default settings),
the ``post_commands:`` section should contain the line
``variable t_target delete`` to disable the target temperature ramp
check to avoid false positives.
Use custom linker for faster link times when ENABLE_TESTING is active
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
When compiling LAMMPS with enabled tests, most test executables will
need to be linked against the LAMMPS library. Since this can be a very
large library with many C++ objects when many packages are enabled, link
times can become very long on machines that use the GNU BFD linker (e.g.
Linux systems). Alternatives like the ``lld`` linker of the LLVM project
or the ``gold`` linker available with GNU binutils can speed up this step
substantially. CMake will by default test if any of the two can be
enabled and use it when ``ENABLE_TESTING`` is active. It can also be
selected manually through the ``CMAKE_CUSTOM_LINKER`` CMake variable.
Allowed values are ``lld``, ``gold``, ``bfd``, or ``default``. The
``default`` option will use the system default linker otherwise, the
linker is chosen explicitly. This option is only available for the
GNU or Clang C++ compiler.
Tests for other components and utility functions
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Additional tests that validate utility functions or specific components
of LAMMPS are implemented as standalone executable which may, or may not
require creating a suitable LAMMPS instance. These tests are more specific
and do not require YAML format input files. To add a test, either an
existing source file needs to be extended or a new file added, which in turn
requires additions to the ``CMakeLists.txt`` file in the source folder.
Collect and visualize code coverage metrics
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -288,21 +412,41 @@ The images below illustrate how the data is presented.
.. list-table::
* - .. figure:: JPG/coverage-overview-top.png
:target: JPG/coverage-overview-top.png
:scale: 25%
Top of the overview page
- .. figure:: JPG/coverage-overview-manybody.png
:target: JPG/coverage-overview-manybody.png
:scale: 25%
Styles with good coverage
- .. figure:: JPG/coverage-file-top.png
:target: JPG/coverage-file-top.png
:scale: 25%
Top of individual source page
- .. figure:: JPG/coverage-file-branches.png
:target: JPG/coverage-file-branches.png
:scale: 25%
Source page with branches
Coding style utilities
----------------------
To aid with enforcing some of the coding style conventions in LAMMPS
some additional build targets have been added. These require Python 3.5
or later and will only work on Unix-like operating and file systems.
The following options are available.
.. code-block:: bash
make check-whitespace # generate coverage report in HTML format
make fix-whitespace # generate coverage report in XML format
make check-permissions # delete folder with HTML format coverage report
make fix-permissions # delete all collected coverage data and HTML output
For the code in the ``unittest`` tree we are using the `clang-format`
tool (Clang version 8.0 or later is required). If available, the source
code files in the ``unittest`` tree can be updated to conform to the
formatting settings using ``make format-tests``.

File diff suppressed because it is too large Load Diff

View File

@ -4,11 +4,11 @@ Link LAMMPS as a library to another code
LAMMPS is designed as a library of C++ objects that can be
integrated into other applications including Python scripts.
The files ``src/library.cpp`` and ``src/library.h`` define a
C-style API for using LAMMPS as a library. See the :doc:`Howto
library <Howto_library>` page for a description of the interface
and how to use it for your needs.
C-style API for using LAMMPS as a library. See the
:doc:`Howto_library` page
for a description of the interface and how to use it for your needs.
The :doc:`Build basics <Build_basics>` doc page explains how to build
The :doc:`Build_basics` page explains how to build
LAMMPS as either a shared or static library. This results in a file
in the compilation folder called ``liblammps.a`` or ``liblammps_<name>.a``
in case of building a static library. In case of a shared library
@ -41,42 +41,45 @@ The benefit of linking to a static library is, that the resulting
executable is independent of that library since all required
executable code from the library is copied into the calling executable.
CMake build
^^^^^^^^^^^
.. tabs::
This assumes that LAMMPS has been configured without setting a
``LAMMPS_MACHINE`` name, installed with "make install", and the
``PKG_CONFIG_PATH`` environment variable has been updated to include the
``liblammps.pc`` file installed into the configured destination folder.
The commands to compile and link a coupled executable are then:
.. tab:: CMake build
.. code-block:: bash
This assumes that LAMMPS has been configured without setting a
``LAMMPS_MACHINE`` name, installed with "make install", and the
``PKG_CONFIG_PATH`` environment variable has been updated to
include the ``liblammps.pc`` file installed into the configured
destination folder. The commands to compile and link a coupled
executable are then:
mpicc -c -O $(pkgconf liblammps --cflags) caller.c
mpicxx -o caller caller.o -$(pkgconf liblammps --libs)
.. code-block:: bash
Traditional make
^^^^^^^^^^^^^^^^
mpicc -c -O $(pkgconf liblammps --cflags) caller.c
mpicxx -o caller caller.o -$(pkgconf liblammps --libs)
This assumes that LAMMPS has been compiled in the folder
``${HOME}/lammps/src`` with "make mpi". The commands to compile and link
a coupled executable are then:
.. tab:: Traditional make
.. code-block:: bash
This assumes that LAMMPS has been compiled in the folder
``${HOME}/lammps/src`` with "make mpi". The commands to compile
and link a coupled executable are then:
mpicc -c -O -I${HOME}/lammps/src caller.c
mpicxx -o caller caller.o -L${HOME}/lammps/src -llammps_mpi
.. code-block:: bash
The *-I* argument is the path to the location of the ``library.h``
header file containing the interface to the LAMMPS C-style library
interface. The *-L* argument is the path to where the ``liblammps_mpi.a``
file is located. The *-llammps_mpi* argument is shorthand for telling the
compiler to link the file ``liblammps_mpi.a``. If LAMMPS has been
built as a shared library, then the linker will use ``liblammps_mpi.so``
instead. If both files are available, the linker will usually prefer
the shared library. In case of a shared library, you may need to update
the ``LD_LIBRARY_PATH`` environment variable or running the ``caller``
executable will fail since it cannot find the shared library at runtime.
mpicc -c -O -I${HOME}/lammps/src caller.c
mpicxx -o caller caller.o -L${HOME}/lammps/src -llammps_mpi
The *-I* argument is the path to the location of the ``library.h``
header file containing the interface to the LAMMPS C-style library
interface. The *-L* argument is the path to where the
``liblammps_mpi.a`` file is located. The *-llammps_mpi* argument
is shorthand for telling the compiler to link the file
``liblammps_mpi.a``. If LAMMPS has been built as a shared
library, then the linker will use ``liblammps_mpi.so`` instead.
If both files are available, the linker will usually prefer the
shared library. In case of a shared library, you may need to
update the ``LD_LIBRARY_PATH`` environment variable or running the
``caller`` executable will fail since it cannot find the shared
library at runtime.
However, it is only as simple as shown above for the case of a plain
LAMMPS library without any optional packages that depend on libraries
@ -84,61 +87,62 @@ LAMMPS library without any optional packages that depend on libraries
need to include all flags, libraries, and paths for the coupled
executable, that are also required to link the LAMMPS executable.
CMake build
^^^^^^^^^^^
.. tabs::
When using CMake, additional libraries with sources in the lib folder
are built, but not included in ``liblammps.a`` and (currently) not
installed with ``make install`` and not included in the ``pkgconfig``
configuration file. They can be found in the top level build folder,
but you have to determine the necessary link flags manually. It is
therefore recommended to either use the traditional make procedure to
build and link with a static library or build and link with a shared
library instead.
.. tab:: CMake build
Traditional make
^^^^^^^^^^^^^^^^
When using CMake, additional libraries with sources in the lib
folder are built, but not included in ``liblammps.a`` and
(currently) not installed with ``make install`` and not included
in the ``pkgconfig`` configuration file. They can be found in the
top level build folder, but you have to determine the necessary
link flags manually. It is therefore recommended to either use
the traditional make procedure to build and link with a static
library or build and link with a shared library instead.
After you have compiled a static LAMMPS library using the conventional
build system for example with "make mode=static serial". And you also
have installed the ``POEMS`` package after building its bundled library
in ``lib/poems``. Then the commands to build and link the coupled executable
change to:
.. tab:: Traditional make
.. code-block:: bash
After you have compiled a static LAMMPS library using the
conventional build system for example with "make mode=static
serial". And you also have installed the ``POEMS`` package after
building its bundled library in ``lib/poems``. Then the commands
to build and link the coupled executable change to:
gcc -c -O -I${HOME}/lammps/src/STUBS -I${HOME}/lammps/src -caller.c
g++ -o caller caller.o -L${HOME}/lammps/lib/poems \
-L${HOME}/lammps/src/STUBS -L${HOME}/lammps/src -llammps_serial -lpoems -lmpi_stubs
.. code-block:: bash
Note, that you need to link with ``g++`` instead of ``gcc`` even if you have
written your code in C, since LAMMPS itself is C++ code. You can display the
currently applied settings for building LAMMPS for the "serial" machine target
by using the command:
gcc -c -O -I${HOME}/lammps/src/STUBS -I${HOME}/lammps/src -caller.c
g++ -o caller caller.o -L${HOME}/lammps/lib/poems \
-L${HOME}/lammps/src/STUBS -L${HOME}/lammps/src \
-llammps_serial -lpoems -lmpi_stubs
.. code-block:: bash
Note, that you need to link with ``g++`` instead of ``gcc`` even
if you have written your code in C, since LAMMPS itself is C++
code. You can display the currently applied settings for building
LAMMPS for the "serial" machine target by using the command:
make mode=print serial
.. code-block:: bash
Which should output something like:
make mode=print serial
.. code-block:: bash
Which should output something like:
# Compiler:
CXX=g++
# Linker:
LD=g++
# Compilation:
CXXFLAGS=-g -O3 -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 -I${HOME}/compile/lammps/lib/poems -I${HOME}/compile/lammps/src/STUBS
# Linking:
LDFLAGS=-g -O
# Libraries:
LDLIBS=-L${HOME}/compile/lammps/src -llammps_serial -L${HOME}/compile/lammps/lib/poems -L${HOME}/compile/lammps/src/STUBS -lpoems -lmpi_stubs
.. code-block:: bash
From this you can gather the necessary paths and flags. With
makefiles for other *machine* configurations you need to do the
equivalent and replace "serial" with the corresponding "machine" name
of the makefile.
# Compiler:
CXX=g++
# Linker:
LD=g++
# Compilation:
CXXFLAGS=-g -O3 -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 -I${HOME}/compile/lammps/lib/poems -I${HOME}/compile/lammps/src/STUBS
# Linking:
LDFLAGS=-g -O
# Libraries:
LDLIBS=-L${HOME}/compile/lammps/src -llammps_serial -L${HOME}/compile/lammps/lib/poems -L${HOME}/compile/lammps/src/STUBS -lpoems -lmpi_stubs
From this you can gather the necessary paths and flags. With
makefiles for other *machine* configurations you need to do the
equivalent and replace "serial" with the corresponding "machine"
name of the makefile.
Link with LAMMPS as a shared library
------------------------------------
@ -151,35 +155,36 @@ linking the calling executable. Only the *-I* flags are needed. So the
example case from above of the serial version static LAMMPS library with
the POEMS package installed becomes:
CMake build
^^^^^^^^^^^
.. tabs::
The commands with a shared LAMMPS library compiled with the CMake
build process are the same as for the static library.
.. tab:: CMake build
.. code-block:: bash
The commands with a shared LAMMPS library compiled with the CMake
build process are the same as for the static library.
mpicc -c -O $(pkgconf liblammps --cflags) caller.c
mpicxx -o caller caller.o -$(pkgconf --libs)
.. code-block:: bash
Traditional make
^^^^^^^^^^^^^^^^
mpicc -c -O $(pkgconf liblammps --cflags) caller.c
mpicxx -o caller caller.o -$(pkgconf --libs)
The commands with a shared LAMMPS library compiled with the
traditional make build using ``make mode=shared serial`` becomes:
.. tab:: Traditional make
.. code-block:: bash
The commands with a shared LAMMPS library compiled with the
traditional make build using ``make mode=shared serial`` becomes:
gcc -c -O -I${HOME}/lammps/src/STUBS -I${HOME}/lammps/src -caller.c
g++ -o caller caller.o -L${HOME}/lammps/src -llammps_serial
.. code-block:: bash
*Locating liblammps.so at runtime*\ :
gcc -c -O -I${HOME}/lammps/src/STUBS -I${HOME}/lammps/src -caller.c
g++ -o caller caller.o -L${HOME}/lammps/src -llammps_serial
However, now the ``liblammps.so`` file is required at runtime and needs
to be in a folder, where the shared linker program of the operating
system can find it. This would be either a folder like ``/usr/local/lib64``
or ``${HOME}/.local/lib64`` or a folder pointed to by the ``LD_LIBRARY_PATH``
environment variable. You can type
Locating liblammps.so at runtime
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Unlike with a static link, now the ``liblammps.so`` file is required at
runtime and needs to be in a folder, where the shared linker program of
the operating system can find it. This would be either a folder like
``/usr/local/lib64`` or ``${HOME}/.local/lib64`` or a folder pointed to
by the ``LD_LIBRARY_PATH`` environment variable. You can type
.. code-block:: bash
@ -187,9 +192,10 @@ environment variable. You can type
to see what directories are in that list.
Or you can add the LAMMPS src directory (or the directory you performed
a CMake style build in) to your ``LD_LIBRARY_PATH``, so that the current
version of the shared library is always available to programs that use it.
Or you can add the LAMMPS src directory or the directory you performed a
CMake style build in to your ``LD_LIBRARY_PATH`` environment variable,
so that the current version of the shared library is always available to
programs that use it.
For the Bourne or Korn shells (/bin/sh, /bin/ksh, /bin/bash etc.), you
would add something like this to your ``${HOME}/.profile`` file:

View File

@ -27,17 +27,17 @@ additional tools to be available and functioning.
* a few shell utilities: ``ls``, ``mv``, ``ln``, ``rm``, ``grep``, ``sed``, ``tr``, ``cat``, ``touch``, ``diff``, ``dirname``
* python (optional, required for ``make lib-<pkg>`` in the src folder).
python scripts are currently tested with python 2.7 and 3.6. The procedure
for :doc:`building the documentation <Manual_build>` requires python 3.
for :doc:`building the documentation <Build_manual>` requires python 3.5 or later.
Getting started
^^^^^^^^^^^^^^^
To include LAMMPS packages (i.e. optional commands and styles) you must
enable (or "install") them first, as discussed on the :doc:`Build
package <Build_package>` doc page. If a packages requires (provided or
package <Build_package>` page. If a packages requires (provided or
external) libraries, you must configure and build those libraries
**before** building LAMMPS itself and especially **before** enabling
such a package with ``make yes-<package>``. Building :doc:`LAMMPS with
such a package with ``make yes-<package>``. :doc:`Building LAMMPS with
CMake <Build_cmake>` can automate much of this for many types of
machines, especially workstations, desktops, and laptops, so we suggest
you try it first when building LAMMPS in those cases.

View File

@ -1,5 +1,5 @@
Building the LAMMPS manual
**************************
Build the LAMMPS documentation
==============================
Depending on how you obtained LAMMPS and whether you have built the
manual yourself, this directory has a number of sub-directories and
@ -14,12 +14,10 @@ files. Here is a list with descriptions:
lammps.1 # man page for the lammps command
msi2lmp.1 # man page for the msi2lmp command
Manual.pdf # large PDF version of entire manual
Developer.pdf # small PDF with info about how LAMMPS is structured
LAMMPS.epub # Manual in ePUB e-book format
LAMMPS.mobi # Manual in MOBI e-book format
docenv # virtualenv folder for processing the manual sources
doctrees # temporary data from processing the manual
mathjax # code and fonts for rendering math in html
doxygen # doxygen configuration and output
.gitignore # list of files and folders to be ignored by git
doxygen-warn.log # logfile with warnings from running doxygen
@ -34,34 +32,59 @@ and PDF files are not included. Instead you need to create them, in one
of two ways:
a. You can "fetch" the current HTML and PDF files from the LAMMPS web
site. Just type ``make fetch``. This should download a html_www
directory and Manual_www.pdf/Developer_www.pdf files. Note that if
new LAMMPS features have been added more recently than the date of
your LAMMPS version, the fetched documentation will include those
changes (but your source code will not, unless you update your local
repository).
site. Just type ``make fetch``. This should download a ``html_www``
directory and a ``Manual_www.pdf`` file. Note that if new LAMMPS features
have been added more recently than the date of your LAMMPS version, the
fetched documentation will include those changes (but your source code
will not, unless you update your local repository).
b. You can build the HTML or PDF files yourself, by typing ``make html``
or ``make pdf``. This requires various tools and files. Some of them
have to be installed (more on that below). For the rest the build
process will attempt to download and install them into a python
virtual environment and local folders. This download is required
only once, unless you type ``make clean-all``. After that, viewing and
processing of the documentation can be done without internet access.
or ``make pdf`` in the ``doc`` folder. This requires various tools
and files. Some of them have to be installed (see below). For the
rest the build process will attempt to download and install them into
a python virtual environment and local folders.
----------
A current version of the manual (latest patch release, aka unstable
branch) is is available online at:
`https://lammps.sandia.gov/doc/Manual.html
<https://lammps.sandia.gov/doc/Manual.html>`_ A version of the manual
corresponding to the ongoing development (aka master branch) is
available online at: `https://docs.lammps.org/
<https://docs.lammps.org/>`_
The generation of all documentation is managed by the Makefile in the
doc directory. The following documentation related make commands are
available:
Build using GNU make
--------------------
The LAMMPS manual is written in `reStructuredText <rst_>`_ format which
can be translated to different output format using the `Sphinx
<sphinx_>`_ document generator tool. It also incorporates programmer
documentation extracted from the LAMMPS C++ sources through the `Doxygen
<https://doxygen.nl>`_ program. Currently the translation to HTML, PDF
(via LaTeX), ePUB (for many e-book readers) and MOBI (for Amazon Kindle
readers) are supported. For that to work a Python 3 interpreter, the
``doxygen`` tools and internet access to download additional files and
tools are required. This download is usually only required once or
after the documentation folder is returned to a pristine state with
``make clean-all``.
.. _rst: https://docutils.readthedocs.io/en/sphinx-docs/user/rst/quickstart.html
.. _sphinx: https://www.sphinx-doc.org
For the documentation build a python virtual environment is set up in
the folder ``doc/docenv`` and various python packages are installed into
that virtual environment via the ``pip`` tool. For rendering embedded
LaTeX code also the `MathJax <https://www.mathjax.org/>`_ and the
`Polyfill <https://polyfill.io/>`_ JavaScript engines need to be downloaded.
The actual translation is then done via ``make`` commands in the doc
folder. The following ``make`` commands are available:
.. code-block:: bash
make html # generate HTML in html dir using Sphinx
make pdf # generate 2 PDF files (Manual.pdf,Developer.pdf)
# in doc dir via htmldoc and pdflatex
make fetch # fetch HTML doc pages and 2 PDF files from web site
# as a tarball and unpack into html dir and 2 PDFs
make pdf # generate PDF as Manual.pdf using Sphinx and pdflatex
make fetch # fetch HTML pages and PDF files from LAMMPS web site
# and unpack into the html_www folder and Manual_www.pdf
make epub # generate LAMMPS.epub in ePUB format using Sphinx
make mobi # generate LAMMPS.mobi in MOBI format using ebook-convert
@ -75,65 +98,79 @@ available:
----------
Installing prerequisites for HTML build
=======================================
Build using CMake
-----------------
It is also possible to create the HTML version (and **only** the HTML
version) of the manual within the :doc:`CMake build directory
<Build_cmake>`. The reason for this option is to include the
installation of the HTML manual pages into the "install" step when
installing LAMMPS after the CMake build via ``cmake --build . --target
install``. The documentation build is included in the default build
target, but can also be requested independently with
``cmake --build . --target doc``.
.. code-block:: bash
-D BUILD_DOC=value # yes or no (default)
----------
Prerequisites for HTML
----------------------
To run the HTML documentation build toolchain, python 3, git, doxygen,
and virtualenv have to be installed locally. Here are instructions for
common setups:
Ubuntu
------
.. tabs::
.. code-block:: bash
.. tab:: Ubuntu
sudo apt-get install python-virtualenv git doxygen
.. code-block:: bash
Fedora (up to version 21) and Red Hat Enterprise Linux or CentOS (up to version 7.x)
------------------------------------------------------------------------------------
sudo apt-get install python-virtualenv git doxygen
.. code-block:: bash
.. tab:: RHEL or CentOS (Version 7.x)
sudo yum install python3-virtualenv git doxygen
.. code-block:: bash
Fedora (since version 22)
-------------------------
sudo yum install python3-virtualenv git doxygen
.. code-block:: bash
.. tab:: Fedora or RHEL/CentOS (8.x or later)
sudo dnf install python3-virtualenv git doxygen
.. code-block:: bash
MacOS X
-------
sudo dnf install python3-virtualenv git doxygen
Python 3
^^^^^^^^
.. tab:: MacOS X
Download the latest Python 3 MacOS X package from
`https://www.python.org <https://www.python.org>`_
and install it. This will install both Python 3
and pip3.
*Python 3*
virtualenv
^^^^^^^^^^
Download the latest Python 3 MacOS X package from
`https://www.python.org <https://www.python.org>`_ and install it.
This will install both Python 3 and pip3.
Once Python 3 is installed, open a Terminal and type
*virtualenv*
.. code-block:: bash
Once Python 3 is installed, open a Terminal and type
pip3 install virtualenv
.. code-block:: bash
This will install virtualenv from the Python Package Index.
pip3 install virtualenv
Installing prerequisites for PDF build
======================================
This will install virtualenv from the Python Package Index.
Prerequisites for PDF
---------------------
In addition to the tools needed for building the HTML format manual,
a working LaTeX installation with support for PDFLaTeX and a selection
of LaTeX styles/packages are required.
of LaTeX styles/packages are required. To run the PDFLaTeX translation
the ``latexmk`` script needs to be installed as well.
Installing prerequisites for e-book reader builds
=================================================
Prerequisites for ePUB and MOBI
-------------------------------
In addition to the tools needed for building the HTML format manual,
a working LaTeX installation with a few add-on LaTeX packages
@ -150,12 +187,12 @@ files, so you could download and view the PDF version as an alternative.
Instructions for Developers
===========================
---------------------------
When adding new styles or options to the LAMMPS code, corresponding
documentation is required and either existing files in the ``src``
folder need to be updated or new files added. These files are written
in `reStructuredText <rst_>`_ markup for translation with the Sphinx tool.
folder need to be updated or new files added. These files are written in
`reStructuredText <rst_>`_ markup for translation with the Sphinx tool.
Before contributing any documentation, please check that both the HTML
and the PDF format documentation can translate without errors. Please also

View File

@ -7,7 +7,7 @@ rigid-body constraints are in packages. In the src directory, each
package is a sub-directory with the package name in capital letters.
An overview of packages is given on the :doc:`Packages <Packages>` doc
page. Brief overviews of each package are on the :doc:`Packages details <Packages_details>` doc page.
page. Brief overviews of each package are on the :doc:`Packages details <Packages_details>` page.
When building LAMMPS, you can choose to include or exclude each
package. In general there is no need to include a package if you
@ -25,7 +25,7 @@ when building that executable.
For the majority of packages, if you follow the single step below to
include it, you can then build LAMMPS exactly the same as you would
without any packages installed. A few packages may require additional
steps, as explained on the :doc:`Build extras <Build_extras>` doc page.
steps, as explained on the :doc:`Build extras <Build_extras>` page.
These links take you to the extra instructions for those select
packages:
@ -45,97 +45,99 @@ packages:
The mechanism for including packages is simple but different for CMake
versus make.
CMake build
^^^^^^^^^^^
.. tabs::
.. code-block:: csh
.. tab:: CMake build
-D PKG_NAME=value # yes or no (default)
.. code-block:: csh
Examples:
-D PKG_NAME=value # yes or no (default)
.. code-block:: csh
Examples:
-D PKG_MANYBODY=yes
-D PKG_USER-INTEL=yes
.. code-block:: csh
All standard and user packages are included the same way. Note that
USER packages have a hyphen between USER and the rest of the package
name, not an underscore.
-D PKG_MANYBODY=yes
-D PKG_USER-INTEL=yes
See the shortcut section below for how to install many packages at
once with CMake.
All standard and user packages are included the same way. Note
that USER packages have a hyphen between USER and the rest of the
package name, not an underscore.
See the shortcut section below for how to install many packages at
once with CMake.
.. note::
If you switch between building with CMake and make builds, no
packages in the src directory can be installed when you invoke
``cmake``. CMake will give an error if that is not the case,
indicating how you can un-install all packages in the src dir.
.. tab:: Traditional make
.. code-block:: bash
cd lammps/src
make ps # check which packages are currently installed
make yes-name # install a package with name
make no-name # un-install a package with name
make mpi # build LAMMPS with whatever packages are now installed
Examples:
.. code-block:: bash
make no-rigid
make yes-user-intel
All standard and user packages are included the same way.
See the shortcut section below for how to install many packages at
once with make.
.. note::
You must always re-build LAMMPS (via make) after installing or
un-installing a package, for the action to take effect. The
included dependency tracking will make certain only files that
are required to be rebuilt are recompiled.
.. note::
You cannot install or un-install packages and build LAMMPS in a
single make command with multiple targets, e.g. ``make
yes-colloid mpi``. This is because the make procedure creates
a list of source files that will be out-of-date for the build
if the package configuration changes within the same command.
You can include or exclude multiple packages in a single make
command, e.g. ``make yes-colloid no-manybody``.
Information for both build systems
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Almost all packages can be included or excluded in a LAMMPS build,
independent of the other packages. However, some packages include files
derived from files in other packages. LAMMPS checks for this and does
the right thing. Individual files are only included if their
dependencies are already included. Likewise, if a package is excluded,
other files dependent on that package are also excluded.
.. note::
If you toggle back and forth between building with CMake vs
make, no packages in the src directory can be installed when you
invoke cmake. CMake will give an error if that is not the case,
indicating how you can un-install all packages in the src dir.
Traditional make
^^^^^^^^^^^^^^^^
.. code-block:: bash
cd lammps/src
make ps # check which packages are currently installed
make yes-name # install a package with name
make no-name # un-install a package with name
make mpi # build LAMMPS with whatever packages are now installed
Examples:
.. code-block:: bash
make no-rigid
make yes-user-intel
All standard and user packages are included the same way.
See the shortcut section below for how to install many packages at
once with make.
.. note::
You must always re-build LAMMPS (via make) after installing or
un-installing a package, for the action to take effect.
.. note::
You cannot install or un-install packages and build LAMMPS in a
single make command with multiple targets, e.g. make yes-colloid mpi.
This is because the make procedure creates a list of source files that
will be out-of-date for the build if the package configuration changes
within the same command. You can include or exclude multiple packages
in a single make command, e.g. make yes-colloid no-manybody.
CMake and make info
^^^^^^^^^^^^^^^^^^^
Any package can be included or excluded in a LAMMPS build, independent
of all other packages. However, some packages include files derived
from files in other packages. LAMMPS checks for this and does the
right thing. Individual files are only included if their dependencies
are already included. Likewise, if a package is excluded, other files
dependent on that package are also excluded.
When you download a LAMMPS tarball or download LAMMPS source files
from the git repository, no packages are pre-installed in the
src directory.
.. note::
Prior to Aug 2018, if you downloaded a tarball, 3 packages
(KSPACE, MANYBODY, MOLECULE) were pre-installed in the src directory.
That is no longer the case, so that CMake will build as-is without the
need to un-install those packages.
By default no package is installed. Prior to August 2018, however,
if you downloaded a tarball, 3 packages (KSPACE, MANYBODY, MOLECULE)
were pre-installed via the traditional make procedure in the ``src``
directory. That is no longer the case, so that CMake will build
as-is without needing to un-install those packages.
----------
.. _cmake_presets:
CMake presets for installing many packages
""""""""""""""""""""""""""""""""""""""""""
Instead of specifying all the CMake options via the command-line,
CMake allows initializing its settings cache using script files.
@ -168,7 +170,8 @@ one of them as a starting point and customize it to your needs.
in a single cmake run, or change settings incrementally by running
cmake with new flags.
**Example:**
Example
"""""""
.. code-block:: bash

View File

@ -6,7 +6,7 @@ explain how to do this for building both with CMake and make.
* :ref:`C++11 standard compliance <cxx11>` when building all of LAMMPS
* :ref:`FFT library <fft>` for use with the :doc:`kspace_style pppm <kspace_style>` command
* :ref:`Size of LAMMPS data types <size>`
* :ref:`Size of LAMMPS integer types <size>`
* :ref:`Read or write compressed files <gzip>`
* :ref:`Output of JPG and PNG files <graphics>` via the :doc:`dump image <dump_image>` command
* :ref:`Output of movie files <graphics>` via the :doc:`dump_movie <dump_image>` command
@ -44,74 +44,71 @@ require use of an FFT library to compute 1d FFTs. The KISS FFT
library is included with LAMMPS but other libraries can be faster.
LAMMPS can use them if they are available on your system.
CMake build
^^^^^^^^^^^
.. tabs::
.. code-block:: bash
.. tab:: CMake build
-D FFT=value # FFTW3 or MKL or KISS, default is FFTW3 if found, else KISS
-D FFT_SINGLE=value # yes or no (default), no = double precision
-D FFT_PACK=value # array (default) or pointer or memcpy
.. code-block:: bash
.. note::
-D FFT=value # FFTW3 or MKL or KISS, default is FFTW3 if found, else KISS
-D FFT_SINGLE=value # yes or no (default), no = double precision
-D FFT_PACK=value # array (default) or pointer or memcpy
The values for the FFT variable must be in upper-case. This is
an exception to the rule that all CMake variables can be specified
with lower-case values.
.. note::
Usually these settings are all that is needed. If FFTW3 is selected,
then CMake will try to detect, if threaded FFTW libraries are available
and enable them by default. This setting is independent of whether
OpenMP threads are enabled and a packages like KOKKOS or USER-OMP is
used. If CMake cannot detect the FFT library, you can set these variables
to assist:
The values for the FFT variable must be in upper-case. This is
an exception to the rule that all CMake variables can be specified
with lower-case values.
.. code-block:: bash
Usually these settings are all that is needed. If FFTW3 is
selected, then CMake will try to detect, if threaded FFTW
libraries are available and enable them by default. This setting
is independent of whether OpenMP threads are enabled and a
packages like KOKKOS or USER-OMP is used. If CMake cannot detect
the FFT library, you can set these variables to assist:
-D FFTW3_INCLUDE_DIRS=path # path to FFTW3 include files
-D FFTW3_LIBRARIES=path # path to FFTW3 libraries
-D FFT_FFTW_THREADS=on # enable using threaded FFTW3 libraries
-D MKL_INCLUDE_DIRS=path # ditto for Intel MKL library
-D FFT_MKL_THREADS=on # enable using threaded FFTs with MKL libraries
-D MKL_LIBRARIES=path
.. code-block:: bash
Traditional make
^^^^^^^^^^^^^^^^
-D FFTW3_INCLUDE_DIR=path # path to FFTW3 include files
-D FFTW3_LIBRARY=path # path to FFTW3 libraries
-D FFT_FFTW_THREADS=on # enable using threaded FFTW3 libraries
-D MKL_INCLUDE_DIR=path # ditto for Intel MKL library
-D FFT_MKL_THREADS=on # enable using threaded FFTs with MKL libraries
-D MKL_LIBRARY=path # path to MKL libraries
To change the FFT library to be used and its options, you have to edit
your machine Makefile. Below are examples how the makefile variables
could be changed.
.. tab:: Traditional make
.. code-block:: make
To change the FFT library to be used and its options, you have to edit
your machine Makefile. Below are examples how the makefile variables
could be changed.
FFT_INC = -DFFT_FFTW3 # -DFFT_FFTW3, -DFFT_FFTW (same as -DFFT_FFTW3), -DFFT_MKL, or -DFFT_KISS
# default is KISS if not specified
FFT_INC = -DFFT_SINGLE # do not specify for double precision
FFT_INC = -DFFT_FFTW_THREADS # enable using threaded FFTW3 libraries
FFT_INC = -DFFT_MKL_THREADS # enable using threaded FFTs with MKL libraries
FFT_INC = -DFFT_PACK_ARRAY # or -DFFT_PACK_POINTER or -DFFT_PACK_MEMCPY
.. code-block:: make
# default is FFT_PACK_ARRAY if not specified
FFT_INC = -DFFT_FFTW3 # -DFFT_FFTW3, -DFFT_FFTW (same as -DFFT_FFTW3), -DFFT_MKL, or -DFFT_KISS
# default is KISS if not specified
FFT_INC = -DFFT_SINGLE # do not specify for double precision
FFT_INC = -DFFT_FFTW_THREADS # enable using threaded FFTW3 libraries
FFT_INC = -DFFT_MKL_THREADS # enable using threaded FFTs with MKL libraries
FFT_INC = -DFFT_PACK_ARRAY # or -DFFT_PACK_POINTER or -DFFT_PACK_MEMCPY
# default is FFT_PACK_ARRAY if not specified
.. code-block:: make
.. code-block:: make
FFT_INC = -I/usr/local/include
FFT_PATH = -L/usr/local/lib
FFT_LIB = -lfftw3 # FFTW3 double precision
FFT_LIB = -lfftw3 -lfftw3_omp # FFTW3 double precision with threads (needs -DFFT_FFTW_THREADS)
FFT_LIB = -lfftw3 -lfftw3f # FFTW3 single precision
FFT_LIB = -lmkl_intel_lp64 -lmkl_sequential -lmkl_core # MKL with Intel compiler, serial interface
FFT_LIB = -lmkl_gf_lp64 -lmkl_sequential -lmkl_core # MKL with GNU compiler, serial interface
FFT_LIB = -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core # MKL with Intel compiler, threaded interface
FFT_LIB = -lmkl_gf_lp64 -lmkl_gnu_thread -lmkl_core # MKL with GNU compiler, threaded interface
FFT_LIB = -lmkl_rt # MKL with automatic runtime selection of interface libs
FFT_INC = -I/usr/local/include
FFT_PATH = -L/usr/local/lib
FFT_LIB = -lfftw3 # FFTW3 double precision
FFT_LIB = -lfftw3 -lfftw3_omp # FFTW3 double precision with threads (needs -DFFT_FFTW_THREADS)
FFT_LIB = -lfftw3 -lfftw3f # FFTW3 single precision
FFT_LIB = -lmkl_intel_lp64 -lmkl_sequential -lmkl_core # MKL with Intel compiler, serial interface
FFT_LIB = -lmkl_gf_lp64 -lmkl_sequential -lmkl_core # MKL with GNU compiler, serial interface
FFT_LIB = -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core # MKL with Intel compiler, threaded interface
FFT_LIB = -lmkl_gf_lp64 -lmkl_gnu_thread -lmkl_core # MKL with GNU compiler, threaded interface
FFT_LIB = -lmkl_rt # MKL with automatic runtime selection of interface libs
As with CMake, you do not need to set paths in ``FFT_INC`` or ``FFT_PATH``, if
the compiler can find the FFT header and library files in its default search path.
You must specify ``FFT_LIB`` with the appropriate FFT libraries to include in the link.
CMake build
^^^^^^^^^^^
As with CMake, you do not need to set paths in ``FFT_INC`` or
``FFT_PATH``, if the compiler can find the FFT header and library
files in its default search path. You must specify ``FFT_LIB``
with the appropriate FFT libraries to include in the link.
The `KISS FFT library <http://kissfft.sf.net>`_ is included in the LAMMPS
distribution. It is portable across all platforms. Depending on the size
@ -123,8 +120,9 @@ per-timestep CPU cost, FFTs are only a portion of long-range
Coulombics, and 1d FFTs are only a portion of the FFT cost (parallel
communication can be costly). A breakdown of these timings is printed
to the screen at the end of a run when using the
:doc:`kspace_style pppm <kspace_style>` command. The :doc:`Run output <Run_output>`
doc page gives more details. A more detailed (and time consuming)
:doc:`kspace_style pppm <kspace_style>` command. The
:doc:`Screen and logfile output <Run_output>`
page gives more details. A more detailed (and time consuming)
report of the FFT performance is generated with the
:doc:`kspace_modify fftbench yes <kspace_modify>` command.
@ -176,76 +174,103 @@ ARRAY mode.
.. _size:
Size of LAMMPS integer types
------------------------------------
Size of LAMMPS integer types and size limits
--------------------------------------------
LAMMPS has a few integer data types which can be defined as either
4-byte (= 32-bit) or 8-byte (= 64-bit) integers at compile time.
This has an impact on the size of a system that can be simulated
or how large counters can become before "rolling over".
The default setting of "smallbig" is almost always adequate.
CMake build
^^^^^^^^^^^
.. tabs::
.. code-block:: bash
.. tab:: CMake build
-D LAMMPS_SIZES=value # smallbig (default) or bigbig or smallsmall
With CMake the choice of integer types is made via setting a
variable during configuration.
Traditional build
^^^^^^^^^^^^^^^^^
.. code-block:: bash
If you want a setting different from the default, you need to edit your
machine Makefile.
-D LAMMPS_SIZES=value # smallbig (default) or bigbig or smallsmall
.. code-block:: make
If the variable is not set explicitly, "smallbig" is used.
LMP_INC = -DLAMMPS_SMALLBIG # or -DLAMMPS_BIGBIG or -DLAMMPS_SMALLSMALL
.. tab:: Traditional build
The default setting is ``-DLAMMPS_SMALLBIG`` if nothing is specified
If you want a setting different from the default, you need to edit the
``LMP_INC`` variable setting your machine Makefile.
CMake and make info
^^^^^^^^^^^^^^^^^^^
.. code-block:: make
The default "smallbig" setting allows for simulations with:
LMP_INC = -DLAMMPS_SMALLBIG # or -DLAMMPS_BIGBIG or -DLAMMPS_SMALLSMALL
* total atom count = 2\^63 atoms (about 9e18)
* total timesteps = 2\^63 (about 9e18)
* atom IDs = 2\^31 (about 2 billion)
* image flags = roll over at 512
The default setting is ``-DLAMMPS_SMALLBIG`` if nothing is specified
The "bigbig" setting increases the latter two limits. It allows for:
LAMMPS system size restrictions
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* total atom count = 2\^63 atoms (about 9e18)
* total timesteps = 2\^63 (about 9e18)
* atom IDs = 2\^63 (about 9e18)
* image flags = roll over at about 1 million (2\^20)
.. list-table::
:header-rows: 1
:widths: auto
:align: center
The "smallsmall" setting is only needed if your machine does not
support 8-byte integers. It allows for:
* -
- 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`
* total atom count = 2\^31 atoms (about 2 billion)
* total timesteps = 2\^31 (about 2 billion)
* atom IDs = 2\^31 (about 2 billion)
* image flags = roll over at 512 (2\^9)
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.
These are limits for the core of the LAMMPS code, specific features or
some styles may impose additional limits. The :ref:`USER-ATC
<PKG-USER-ATC>` package cannot be compiled with the "bigbig" setting.
Also, there are limitations when using the library interface where some
functions with known issues have been replaced by dummy calls printing a
corresponding error message rather than crashing randomly or corrupting
data.
Atom IDs are not required for atomic systems which do not store bond
topology information, though IDs are enabled by default. The
:doc:`atom_modify id no <atom_modify>` command will turn them off. Atom
IDs are required for molecular systems with bond topology (bonds,
angles, dihedrals, etc). Thus if you model a molecular system with
more than 2 billion atoms, you need the "bigbig" setting.
angles, dihedrals, etc). Similarly, some force or compute or fix styles
require atom IDs. Thus if you model a molecular system or use one of
those styles with more than 2 billion atoms, you need the "bigbig"
setting.
Image flags store 3 values per atom which count the number of times an
atom has moved through the periodic box in each dimension. See the
:doc:`dump <dump>` doc page for a discussion. If an atom moves through
the periodic box more than this limit, the value will "roll over",
e.g. from 511 to -512, which can cause diagnostics like the
mean-squared displacement, as calculated by the :doc:`compute msd <compute_msd>` command, to be faulty.
Regardless of the total system size limits, the maximum number of atoms
per MPI rank (local + ghost atoms) is limited to 2 billion for atomic
systems and 500 million for systems with bonds (the additional
restriction is due to using the 2 upper bits of the local atom index
in neighbor lists for storing special bonds info).
Note that the USER-ATC package and the USER-INTEL package are currently
not compatible with the "bigbig" setting. Also, there are limitations
when using the library interface. Some functions with known issues
have been replaced by dummy calls printing a corresponding error rather
than crashing randomly or corrupting data.
Image flags store 3 values per atom in a single integer which count the
number of times an atom has moved through the periodic box in each
dimension. See the :doc:`dump <dump>` manual page for a discussion. If
an atom moves through the periodic box more than this limit, the value
will "roll over", e.g. from 511 to -512, which can cause diagnostics
like the mean-squared displacement, as calculated by the :doc:`compute
msd <compute_msd>` command, to be faulty.
Also note that the GPU package requires its lib/gpu library to be
compiled with the same size setting, or the link will fail. A CMake
@ -264,54 +289,51 @@ PNG image files. Likewise the :doc:`dump movie <dump_image>` command
outputs movie files in MPEG format. Using these options requires the
following settings:
CMake build
^^^^^^^^^^^
.. tabs::
.. code-block:: bash
.. tab:: CMake build
-D WITH_JPEG=value # yes or no
# default = yes if CMake finds JPEG files, else no
-D WITH_PNG=value # yes or no
# default = yes if CMake finds PNG and ZLIB files, else no
-D WITH_FFMPEG=value # yes or no
# default = yes if CMake can find ffmpeg, else no
.. code-block:: bash
Usually these settings are all that is needed. If CMake cannot find
the graphics header, library, executable files, you can set these
variables:
-D WITH_JPEG=value # yes or no
# default = yes if CMake finds JPEG files, else no
-D WITH_PNG=value # yes or no
# default = yes if CMake finds PNG and ZLIB files, else no
-D WITH_FFMPEG=value # yes or no
# default = yes if CMake can find ffmpeg, else no
.. code-block:: bash
Usually these settings are all that is needed. If CMake cannot
find the graphics header, library, executable files, you can set
these variables:
-D JPEG_INCLUDE_DIR=path # path to jpeglib.h header file
-D JPEG_LIBRARIES=path # path to libjpeg.a (.so) file
-D PNG_INCLUDE_DIR=path # path to png.h header file
-D PNG_LIBRARIES=path # path to libpng.a (.so) file
-D ZLIB_INCLUDE_DIR=path # path to zlib.h header file
-D ZLIB_LIBRARIES=path # path to libz.a (.so) file
-D FFMPEG_EXECUTABLE=path # path to ffmpeg executable
.. code-block:: bash
Traditional make
^^^^^^^^^^^^^^^^
-D JPEG_INCLUDE_DIR=path # path to jpeglib.h header file
-D JPEG_LIBRARY=path # path to libjpeg.a (.so) file
-D PNG_INCLUDE_DIR=path # path to png.h header file
-D PNG_LIBRARY=path # path to libpng.a (.so) file
-D ZLIB_INCLUDE_DIR=path # path to zlib.h header file
-D ZLIB_LIBRARY=path # path to libz.a (.so) file
-D FFMPEG_EXECUTABLE=path # path to ffmpeg executable
.. code-block:: make
.. tab:: Traditional make
LMP_INC = -DLAMMPS_JPEG
LMP_INC = -DLAMMPS_PNG
LMP_INC = -DLAMMPS_FFMPEG
.. code-block:: make
JPG_INC = -I/usr/local/include # path to jpeglib.h, png.h, zlib.h header files if make cannot find them
JPG_PATH = -L/usr/lib # paths to libjpeg.a, libpng.a, libz.a (.so) files if make cannot find them
JPG_LIB = -ljpeg -lpng -lz # library names
LMP_INC = -DLAMMPS_JPEG
LMP_INC = -DLAMMPS_PNG
LMP_INC = -DLAMMPS_FFMPEG
As with CMake, you do not need to set ``JPG_INC`` or ``JPG_PATH``,
if make can find the graphics header and library files. You must
specify ``JPG_LIB``
with a list of graphics libraries to include in the link. You must
insure ffmpeg is in a directory where LAMMPS can find it at runtime,
that is a directory in your PATH environment variable.
JPG_INC = -I/usr/local/include # path to jpeglib.h, png.h, zlib.h header files if make cannot find them
JPG_PATH = -L/usr/lib # paths to libjpeg.a, libpng.a, libz.a (.so) files if make cannot find them
JPG_LIB = -ljpeg -lpng -lz # library names
CMake and make info
^^^^^^^^^^^^^^^^^^^
As with CMake, you do not need to set ``JPG_INC`` or ``JPG_PATH``,
if make can find the graphics header and library files. You must
specify ``JPG_LIB`` with a list of graphics libraries to include
in the link. You must insure ffmpeg is in a directory where
LAMMPS can find it at runtime, that is a directory in your PATH
environment variable.
Using ``ffmpeg`` to output movie files requires that your machine
supports the "popen" function in the standard runtime library.
@ -334,37 +356,34 @@ If this option is enabled, large files can be read or written with
gzip compression by several LAMMPS commands, including
:doc:`read_data <read_data>`, :doc:`rerun <rerun>`, and :doc:`dump <dump>`.
CMake build
^^^^^^^^^^^
.. tabs::
.. code-block:: bash
.. tab:: CMake build
-D WITH_GZIP=value # yes or no
# default is yes if CMake can find gzip, else no
-D GZIP_EXECUTABLE=path # path to gzip executable if CMake cannot find it
.. code-block:: bash
Traditional make
^^^^^^^^^^^^^^^^
-D WITH_GZIP=value # yes or no
# default is yes if CMake can find gzip, else no
-D GZIP_EXECUTABLE=path # path to gzip executable if CMake cannot find it
.. code-block:: make
.. tab:: Traditional make
LMP_INC = -DLAMMPS_GZIP
.. code-block:: make
CMake and make info
^^^^^^^^^^^^^^^^^^^
LMP_INC = -DLAMMPS_GZIP
This option requires that your machine supports the "popen()" function
in the standard runtime library and that a gzip executable can be
This option requires that your operating system fully supports the "popen()"
function in the standard runtime library and that a ``gzip`` executable can be
found by LAMMPS during a run.
.. note::
On some clusters with high-speed networks, using the fork()
library call (required by popen()) can interfere with the fast
communication library and lead to simulations using compressed output
or input to hang or crash. For selected operations, compressed file
I/O is also available using a compression library instead, which is
what the :ref:`COMPRESS package <PKG-COMPRESS>` enables.
On some clusters with high-speed networks, using the "fork()" library
call (required by "popen()") can interfere with the fast communication
library and lead to simulations using compressed output or input to
hang or crash. For selected operations, compressed file I/O is also
available using a compression library instead, which is what the
:ref:`COMPRESS package <PKG-COMPRESS>` enables.
----------
@ -373,65 +392,66 @@ found by LAMMPS during a run.
Memory allocation alignment
---------------------------------------
This setting enables the use of the posix_memalign() call instead of
malloc() when LAMMPS allocates large chunks or memory. This can make
vector instructions on CPUs more efficient, if dynamically allocated
memory is aligned on larger-than-default byte boundaries.
On most current systems, the malloc() implementation returns
This setting enables the use of the "posix_memalign()" call instead of
"malloc()" when LAMMPS allocates large chunks or memory. Vector
instructions on CPUs may become more efficient, if dynamically allocated
memory is aligned on larger-than-default byte boundaries. On most
current operating systems, the "malloc()" implementation returns
pointers that are aligned to 16-byte boundaries. Using SSE vector
instructions efficiently, however, requires memory blocks being
aligned on 64-byte boundaries.
instructions efficiently, however, requires memory blocks being aligned
on 64-byte boundaries.
CMake build
^^^^^^^^^^^
.. tabs::
.. code-block:: bash
.. tab:: CMake build
-D LAMMPS_MEMALIGN=value # 0, 8, 16, 32, 64 (default)
.. code-block:: bash
Use a ``LAMMPS_MEMALIGN`` value of 0 to disable using posix_memalign()
and revert to using the malloc() C-library function instead. When
compiling LAMMPS for Windows systems, malloc() will always be used
and this setting ignored.
-D LAMMPS_MEMALIGN=value # 0, 8, 16, 32, 64 (default)
Traditional make
^^^^^^^^^^^^^^^^
Use a ``LAMMPS_MEMALIGN`` value of 0 to disable using
"posix_memalign()" and revert to using the "malloc()" C-library
function instead. When compiling LAMMPS for Windows systems,
"malloc()" will always be used and this setting is ignored.
.. code-block:: make
.. tab:: Traditional make
LMP_INC = -DLAMMPS_MEMALIGN=value # 8, 16, 32, 64
.. code-block:: make
Do not set ``-DLAMMPS_MEMALIGN``, if you want to have memory allocated
with the malloc() function call instead. ``-DLAMMPS_MEMALIGN`` **cannot**
be used on Windows, as it does use different function calls for
allocating aligned memory, that are not compatible with how LAMMPS
manages its dynamical memory.
LMP_INC = -DLAMMPS_MEMALIGN=value # 8, 16, 32, 64
Do not set ``-DLAMMPS_MEMALIGN``, if you want to have memory
allocated with the "malloc()" function call
instead. ``-DLAMMPS_MEMALIGN`` **cannot** be used on Windows, as
Windows different function calls with different semantics for
allocating aligned memory, that are not compatible with how LAMMPS
manages its dynamical memory.
----------
.. _longlong:
Workaround for long long integers
------------------------------------------------
---------------------------------
If your system or MPI version does not recognize "long long" data
types, the following setting will be needed. It converts "long long"
to a "long" data type, which should be the desired 8-byte integer on
those systems:
CMake build
^^^^^^^^^^^
.. tabs::
.. code-block:: bash
.. tab:: CMake build
-D LAMMPS_LONGLONG_TO_LONG=value # yes or no (default)
.. code-block:: bash
Traditional make
^^^^^^^^^^^^^^^^
-D LAMMPS_LONGLONG_TO_LONG=value # yes or no (default)
.. code-block:: make
.. tab:: Traditional make
LMP_INC = -DLAMMPS_LONGLONG_TO_LONG
.. code-block:: make
LMP_INC = -DLAMMPS_LONGLONG_TO_LONG
----------
@ -446,19 +466,19 @@ Instead, the call stack is unwound and control returns to the caller,
e.g. to Python. Of course, the calling code has to be set up to
*catch* exceptions thrown from within LAMMPS.
CMake build
^^^^^^^^^^^
.. tabs::
.. code-block:: bash
.. tab:: CMake build
-D LAMMPS_EXCEPTIONS=value # yes or no (default)
.. code-block:: bash
Traditional make
^^^^^^^^^^^^^^^^
-D LAMMPS_EXCEPTIONS=value # yes or no (default)
.. code-block:: make
.. tab:: Traditional make
LMP_INC = -DLAMMPS_EXCEPTIONS
.. code-block:: make
LMP_INC = -DLAMMPS_EXCEPTIONS
.. note::
@ -466,3 +486,41 @@ Traditional make
cleanly recover from an exception since not all parallel ranks may
throw an exception and thus other MPI ranks may get stuck waiting for
messages from the ones with errors.
----------
.. _trap_fpe:
Trigger selected floating-point exceptions
------------------------------------------
Many kinds of CPUs have the capability to detect when a calculation
results in an invalid math operation like a division by zero or calling
the square root with a negative argument. The default behavior on
most operating systems is to continue and have values for ``NaN`` (= not
a number) or ``Inf`` (= infinity). This allows software to detect and
recover from such conditions. This behavior can be changed, however,
often through use of compiler flags. On Linux systems (or more general
on systems using the GNU C library), these so-called floating-point traps
can also be selectively enabled through library calls. LAMMPS supports
that by setting the ``-DLAMMPS_TRAP_FPE`` pre-processor define. As it is
done in the ``main()`` function, this applies only to the standalone
executable, not the library.
.. tabs::
.. tab:: CMake build
.. code-block:: bash
-D CMAKE_TUNE_FLAGS=-DLAMMPS_TRAP_FPE
.. tab:: Traditional make
.. code-block:: make
LMP_INC = -DLAMMPS_TRAP_FPE
After compilation with this flag set, the LAMMPS executable will stop
and produce a core dump when a division by zero, overflow, illegal math
function argument or other invalid floating point operation is encountered.

View File

@ -38,7 +38,7 @@ optional Windows feature allows you to run the bash shell from Ubuntu
from within Windows and from there on, you can pretty much use that
shell like you are running on an Ubuntu Linux machine (e.g. installing
software via apt-get and more). For more details on that, please
see :doc:`this tutorial <Howto_bash>`
see :doc:`this tutorial <Howto_wsl>`.
.. _gnu:

38
doc/src/Classes.rst Normal file
View File

@ -0,0 +1,38 @@
LAMMPS C++ base classes
=======================
LAMMPS is designed to be used as a C++ class library where one can set
up and drive a simulation through creating a class instance and then
calling some abstract operations or commands on that class or its member
class instances. These are interfaced to the :doc:`C library API
<Library>`, which providing an additional level of abstraction
simplification for common operations. The C API is also the basis for
calling LAMMPS from Python or Fortran.
When used from a C++ program, most of the symbols and functions in
LAMMPS are wrapped into the ``LAMMPS_NS`` namespace so they will not
collide with your own classes or other libraries. This, however, does
not extend to the additional libraries bundled with LAMMPS in the lib
folder and some of the low-level code of some packages.
Behind the scenes this is implemented through inheritance and
polymorphism where base classes define the abstract interface and
derived classes provide the specialized implementation for specific
models or optimizations or ports to accelerator platforms. This
document will provide an outline of the fundamental class hierarchy and
some selected examples for derived classes of specific models.
.. note::
Please see the :ref:`note about thread-safety <thread-safety>`
in the library Howto doc page.
-----------------------------------
.. toctree::
:caption: Individual Base Classes
:name: lammpsbase
Classes_lammps
Classes_atom
Classes_input

9
doc/src/Classes_atom.rst Normal file
View File

@ -0,0 +1,9 @@
LAMMPS Atom and AtomVec Base Classes
************************************
.. doxygenclass:: LAMMPS_NS::Atom
:project: progguide
:members:

View File

@ -0,0 +1,7 @@
LAMMPS Input Base Class
************************
.. doxygenclass:: LAMMPS_NS::Input
:project: progguide
:members:

View File

@ -0,0 +1,33 @@
LAMMPS Class
************
The LAMMPS class is encapsulating an MD simulation state and thus it is
the class that needs to be created when starting a new simulation system
state. The LAMMPS executable essentially creates one instance of this
class and passes the command line flags and tells it to process the
provided input (a file or ``stdin``). It shuts the class down when
control is returned to it and then exits. When using LAMMPS as a
library from another code it is required to create an instance of this
class, either directly from C++ with ``new LAMMPS()`` or through one
of the library interface functions like :cpp:func:`lammps_open` of the
C-library interface, or the :py:class:`lammps.lammps` class constructor
of the Python module, or the :f:func:`lammps` constructor of the Fortran
module.
In order to avoid clashes of function names, all of the core code in
LAMMPS is placed into the ``LAMMPS_NS`` namespace. Functions or variables
outside of that namespace must be "static", i.e. visible only to the
scope of the file/object they are defined in. Code in packages or the
libraries in the ``lib`` folder may not adhere to this as some of them
are adapted from legacy code or consist of external libraries with their
own requirements and policies.
--------------------
.. doxygenclass:: LAMMPS_NS::LAMMPS
:project: progguide
:members:
.. doxygenclass:: LAMMPS_NS::Pointers
:project: progguide

View File

@ -46,13 +46,6 @@ An alphabetic list of all general LAMMPS commands.
* :doc:`dimension <dimension>`
* :doc:`displace_atoms <displace_atoms>`
* :doc:`dump <dump>`
* :doc:`dump atom/adios <dump_adios>`
* :doc:`dump custom/adios <dump_adios>`
* :doc:`dump image <dump_image>`
* :doc:`dump movie <dump_image>`
* :doc:`dump netcdf <dump_netcdf>`
* :doc:`dump netcdf/mpiio <dump_netcdf>`
* :doc:`dump vtk <dump_vtk>`
* :doc:`dump_modify <dump_modify>`
* :doc:`dynamical_matrix <dynamical_matrix>`
* :doc:`echo <echo>`
@ -108,7 +101,8 @@ An alphabetic list of all general LAMMPS commands.
* :doc:`region <region>`
* :doc:`replicate <replicate>`
* :doc:`rerun <rerun>`
* :doc:`reset_ids <reset_ids>`
* :doc:`reset_atom_ids <reset_atom_ids>`
* :doc:`reset_mol_ids <reset_mol_ids>`
* :doc:`reset_timestep <reset_timestep>`
* :doc:`restart <restart>`
* :doc:`run <run>`

View File

@ -46,6 +46,7 @@ OPT.
* :doc:`oxdna2/fene <bond_oxdna>`
* :doc:`oxrna2/fene <bond_oxdna>`
* :doc:`quartic (o) <bond_quartic>`
* :doc:`special <bond_special>`
* :doc:`table (o) <bond_table>`
.. _angle:

View File

@ -80,6 +80,7 @@ KOKKOS, o = USER-OMP, t = OPT.
* :doc:`ke/eff <compute_ke_eff>`
* :doc:`ke/rigid <compute_ke_rigid>`
* :doc:`mesont <compute_mesont>`
* :doc:`mliap <compute_mliap>`
* :doc:`momentum <compute_momentum>`
* :doc:`msd <compute_msd>`
* :doc:`msd/chunk <compute_msd_chunk>`
@ -122,6 +123,7 @@ KOKKOS, o = USER-OMP, t = OPT.
* :doc:`smd/tlsph/strain/rate <compute_smd_tlsph_strain_rate>`
* :doc:`smd/tlsph/stress <compute_smd_tlsph_stress>`
* :doc:`smd/triangle/vertices <compute_smd_triangle_vertices>`
* :doc:`smd/ulsph/effm <compute_smd_ulsph_effm>`
* :doc:`smd/ulsph/num/neighs <compute_smd_ulsph_num_neighs>`
* :doc:`smd/ulsph/strain <compute_smd_ulsph_strain>`
* :doc:`smd/ulsph/strain/rate <compute_smd_ulsph_strain_rate>`

View File

@ -42,6 +42,7 @@ OPT.
* :doc:`bocs <fix_bocs>`
* :doc:`bond/break <fix_bond_break>`
* :doc:`bond/create <fix_bond_create>`
* :doc:`bond/create/angle <fix_bond_create>`
* :doc:`bond/react <fix_bond_react>`
* :doc:`bond/swap <fix_bond_swap>`
* :doc:`box/relax <fix_box_relax>`
@ -97,6 +98,7 @@ OPT.
* :doc:`manifoldforce <fix_manifoldforce>`
* :doc:`meso/move <fix_meso_move>`
* :doc:`momentum (k) <fix_momentum>`
* :doc:`momentum/chunk <fix_momentum>`
* :doc:`move <fix_move>`
* :doc:`mscg <fix_mscg>`
* :doc:`msst <fix_msst>`
@ -148,6 +150,7 @@ OPT.
* :doc:`orient/bcc <fix_orient>`
* :doc:`orient/fcc <fix_orient>`
* :doc:`orient/eco <fix_orient_eco>`
* :doc:`pafi <fix_pafi>`
* :doc:`phonon <fix_phonon>`
* :doc:`pimd <fix_pimd>`
* :doc:`planeforce <fix_planeforce>`
@ -243,3 +246,4 @@ OPT.
* :doc:`wall/region <fix_wall_region>`
* :doc:`wall/region/ees <fix_wall_ees>`
* :doc:`wall/srd <fix_wall_srd>`
* :doc:`widom <fix_widom>`

View File

@ -81,6 +81,7 @@ OPT.
* :doc:`coul/slater/long <pair_coul_slater>`
* :doc:`coul/shield <pair_coul_shield>`
* :doc:`coul/streitz <pair_coul>`
* :doc:`coul/tt <pair_coul_tt>`
* :doc:`coul/wolf (ko) <pair_coul>`
* :doc:`coul/wolf/cs <pair_cs>`
* :doc:`dpd (gio) <pair_dpd>`
@ -136,22 +137,22 @@ OPT.
* :doc:`lj/class2/soft <pair_fep_soft>`
* :doc:`lj/cubic (go) <pair_lj_cubic>`
* :doc:`lj/cut (gikot) <pair_lj>`
* :doc:`lj/cut/coul/cut (gko) <pair_lj>`
* :doc:`lj/cut/coul/cut (gko) <pair_lj_cut_coul>`
* :doc:`lj/cut/coul/cut/soft (o) <pair_fep_soft>`
* :doc:`lj/cut/coul/debye (gko) <pair_lj>`
* :doc:`lj/cut/coul/dsf (gko) <pair_lj>`
* :doc:`lj/cut/coul/long (gikot) <pair_lj>`
* :doc:`lj/cut/coul/debye (gko) <pair_lj_cut_coul>`
* :doc:`lj/cut/coul/dsf (gko) <pair_lj_cut_coul>`
* :doc:`lj/cut/coul/long (gikot) <pair_lj_cut_coul>`
* :doc:`lj/cut/coul/long/cs <pair_cs>`
* :doc:`lj/cut/coul/long/soft (o) <pair_fep_soft>`
* :doc:`lj/cut/coul/msm (go) <pair_lj>`
* :doc:`lj/cut/coul/wolf (o) <pair_lj>`
* :doc:`lj/cut/coul/msm (go) <pair_lj_cut_coul>`
* :doc:`lj/cut/coul/wolf (o) <pair_lj_cut_coul>`
* :doc:`lj/cut/dipole/cut (go) <pair_dipole>`
* :doc:`lj/cut/dipole/long (g) <pair_dipole>`
* :doc:`lj/cut/dipole/sf (go) <pair_dipole>`
* :doc:`lj/cut/soft (o) <pair_fep_soft>`
* :doc:`lj/cut/thole/long (o) <pair_thole>`
* :doc:`lj/cut/tip4p/cut (o) <pair_lj>`
* :doc:`lj/cut/tip4p/long (got) <pair_lj>`
* :doc:`lj/cut/tip4p/cut (o) <pair_lj_cut_tip4p>`
* :doc:`lj/cut/tip4p/long (got) <pair_lj_cut_tip4p>`
* :doc:`lj/cut/tip4p/long/soft (o) <pair_fep_soft>`
* :doc:`lj/expand (gko) <pair_lj_expand>`
* :doc:`lj/expand/coul/long (g) <pair_lj_expand>`
@ -183,6 +184,7 @@ OPT.
* :doc:`mesont/tpm <pair_mesont_tpm>`
* :doc:`mgpt <pair_mgpt>`
* :doc:`mie/cut (g) <pair_mie>`
* :doc:`mliap <pair_mliap>`
* :doc:`mm3/switch3/coulgauss/long <pair_mm3_switch3_coulgauss_long>`
* :doc:`momb <pair_momb>`
* :doc:`morse (gkot) <pair_morse>`
@ -228,7 +230,6 @@ OPT.
* :doc:`smd/ulsph <pair_smd_ulsph>`
* :doc:`smtbq <pair_smtbq>`
* :doc:`snap (k) <pair_snap>`
* :doc:`snap (k) <pair_snap>`
* :doc:`soft (go) <pair_soft>`
* :doc:`sph/heatconduction <pair_sph_heatconduction>`
* :doc:`sph/idealgas <pair_sph_idealgas>`

View File

@ -17,6 +17,11 @@ ways through the :doc:`compute chunk/atom <compute_chunk_atom>` command
and then averaging is done using :doc:`fix ave/chunk <fix_ave_chunk>`.
Please refer to the :doc:`chunk HOWTO <Howto_chunk>` section for an overview.
Reset_ids command
-----------------
The reset_ids command has been renamed to :doc:`reset_atom_ids <reset_atom_ids>`.
MEAM package
------------
@ -27,7 +32,7 @@ which removes several restrictions (e.g. there can be multiple instances
in hybrid pair styles) and allows for some optimizations leading
to better performance. The new pair style :doc:`meam/c <pair_meamc>` has
the exact same syntax as the old "meam" pair style and thus pair style
:doc:`meam <pair_meamc>` is an alias to the new style and backward
meam is an alias to the new style and backward
compatibility of old inputs is preserved.
REAX package

90
doc/src/Cplusplus.rst Normal file
View File

@ -0,0 +1,90 @@
Using the C++ API directly
**************************
Using the C++ classes of the LAMMPS library is lacking some of the
convenience of the C library API, but it allows a more direct access to
simulation data and thus more low-level manipulations and tighter
integration of LAMMPS into another code. While for the complete C
library API is provided in the ``library.h`` header file, for using
the C++ API it is required to include the individual header files
defining the individual classes in use. Typically the name of the
class and the name of the header follow some simple rule. Examples
are given below.
Creating or deleting a LAMMPS object
*************************************
When using the LAMMPS library interfaces, the core task is to create an
instance of the :cpp:class:`LAMMPS_NS::LAMMPS` class. In C++ this can
be done directly through the ``new`` operator. All further operations
are then initiated through calling member functions of some of the
components of the LAMMPS class or accessing their data members. The
destruction of the LAMMPS instance is correspondingly initiated by using
the ``delete`` operator. Here is a simple example:
.. code-block:: c++
#include "lammps.h"
#include <mpi.h>
#include <iostream>
int main(int argc, char **argv)
{
LAMMPS_NS::LAMMPS *lmp;
// custom argument vector for LAMMPS library
const char *lmpargv[] {"liblammps", "-log", "none"};
int lmpargc = sizeof(lmpargv)/sizeof(const char *);
// explicitly initialize MPI
MPI_Init(&argc, &argv);
// create LAMMPS instance
lmp = new LAMMPS_NS::LAMMPS(lmpargc, (char **)lmpargv, MPI_COMM_WORLD);
// output numerical version string
std::cout << "LAMMPS version ID: " << lmp->num_ver << std::endl;
// delete LAMMPS instance
delete lmp;
// stop MPI environment
MPI_Finalize();
return 0;
}
This minimal example only requires to include the ``lammps.h`` header
file since it only accesses a non-pointer member of the LAMMPS class.
Executing LAMMPS commands
*************************
Once a LAMMPS instance is created by your C++ code, you need to set up a
simulation and that is most conveniently done by "driving" it through
issuing commands like you would do when running a LAMMPS simulation from
an input script. Processing of input in LAMMPS is handled by the
:cpp:class:`Input <LAMMPS_NS::Input>` class an instance of which is a
member of the :cpp:class:`LAMMPS <LAMMPS_NS::LAMMPS>` class. You have
two options: reading commands from a file, or executing a single
command from a string. See below for a small example:
.. code-block:: c++
#include "lammps.h"
#include "input.h"
#include <mpi.h>
using namespace LAMMPS_NS;
int main(int argc, char **argv)
{
const char *lmpargv[] {"liblammps", "-log", "none"};
int lmpargc = sizeof(lmpargv)/sizeof(const char *);
MPI_Init(&argc, &argv);
LAMMPS *lmp = new LAMMPS(lmpargc, (char **)lmpargv, MPI_COMM_WORLD);
lmp->input->file("in.melt");
lmp->input->one("run 100 post no");
delete lmp;
return 0;
}

17
doc/src/Developer.rst Normal file
View File

@ -0,0 +1,17 @@
LAMMPS Developer Guide
**********************
This section describes the internal structure and basic algorithms
of the LAMMPS code. This is a work in progress and additional
information will be added incrementally depending on availability
of time and requests from the LAMMPS user community.
.. toctree::
:maxdepth: 1
Developer_org
Developer_flow
Developer_write
Developer_utils
Classes

View File

@ -1,3 +0,0 @@
/developer.aux
/developer.log
/developer.toc

View File

@ -1,198 +0,0 @@
#FIG 3.2 Produced by xfig version 3.2.5a
Portrait
Center
Inches
Letter
100.00
Single
-2
1200 2
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
2232 1170 3540 1170 3540 1505 2232 1505 2232 1170
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
2220 1830 3015 1830 3015 2219 2220 2219 2220 1830
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
2226 3285 3300 3285 3300 3665 2226 3665 2226 3285
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
2223 5190 3225 5190 3225 5525 2223 5525 2223 5190
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
2232 7125 3090 7125 3090 7478 2232 7478 2232 7125
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
2226 10230 3300 10230 3300 10565 2226 10565 2226 10230
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
4026 10305 4980 10305 4980 10592 4026 10592 4026 10305
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
4029 9900 5205 9900 5205 10250 4029 10250 4029 9900
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
4038 9315 5370 9315 5370 9659 4038 9659 4038 9315
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
4023 8955 4530 8955 4530 9278 4023 9278 4023 8955
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
4029 8475 5190 8475 5190 8762 4029 8762 4029 8475
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
4008 8115 5430 8115 5430 8408 4008 8408 4008 8115
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
4026 7425 4995 7425 4995 7712 4026 7712 4026 7425
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
4035 6720 4650 6720 4650 7025 4035 7025 4035 6720
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
4044 7080 4830 7080 4830 7358 4044 7358 4044 7080
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
4032 6105 5205 6105 5205 6419 4032 6419 4032 6105
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
4026 5715 5115 5715 5115 6062 4026 6062 4026 5715
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
4023 3585 4605 3585 4605 3872 4023 3872 4023 3585
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
3954 1680 5175 1680 5175 1997 3954 1997 3954 1680
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 2.00 120.00 240.00
1620 5235 2100 615
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 2.00 120.00 240.00
1605 5445 2070 10695
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 2.00 120.00 240.00
3120 1935 3855 1800
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 2.00 120.00 240.00
3150 2115 3765 2250
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 2.00 120.00 240.00
3135 7230 3945 6840
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 2.00 120.00 240.00
3150 7335 3945 8610
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 2.00 120.00 240.00
5265 8610 6195 8400
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 2.00 120.00 240.00
5280 8655 6180 8820
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 2.00 120.00 240.00
3345 10290 3930 10020
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 2.00 120.00 240.00
3360 10395 3930 10425
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 2.00 120.00 240.00
3360 10455 3930 10755
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
2193 360 3435 360 3435 647 2193 647 2193 360
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 2.00 120.00 240.00
3398 3472 3923 3307
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 2.00 120.00 240.00
3413 3601 3923 3721
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 2.00 120.00 240.00
3285 2806 3870 2802
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 2.00 120.00 240.00
3315 5372 3900 5368
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
6354 2280 7470 2280 7470 2585 6354 2585 6354 2280
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
6348 1875 7320 1875 7320 2222 6348 2222 6348 1875
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
3954 2070 5505 2070 5505 2372 3954 2372 3954 2070
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 2.00 120.00 240.00
5634 2137 6230 2045
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 2.00 120.00 240.00
5670 2310 6265 2418
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
3900 2640 5400 2640 5400 2975 3900 2975 3900 2640
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
4038 3165 5385 3165 5385 3497 4038 3497 4038 3165
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
4245 4110 5730 4110 5730 4499 4245 4499 4245 4110
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
4233 4545 6390 4545 6390 4862 4233 4862 4233 4545
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
4026 5190 5385 5190 5385 5525 4026 5525 4026 5190
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
4038 7755 5310 7755 5310 8075 4038 8075 4038 7755
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
6270 8250 7365 8250 7365 8610 6270 8610 6270 8250
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
6273 8655 7380 8655 7380 8978 6273 8978 6273 8655
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
4041 10620 5985 10620 5985 10943 4041 10943 4041 10620
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
2217 10830 3135 10830 3135 11156 2217 11156 2217 10830
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
2229 9780 3240 9780 3240 10118 2229 10118 2229 9780
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
2214 9015 3285 9015 3285 9362 2214 9362 2214 9015
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
2208 5850 3420 5850 3420 6209 2208 6209 2208 5850
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
2217 4275 3615 4275 3615 4634 2217 4634 2217 4275
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
2235 2655 3150 2655 3150 3000 2235 3000 2235 2655
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
60 5115 1500 5115 1500 5610 60 5610 60 5115
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 2.00 120.00 240.00
3486 6018 4011 5853
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 2.00 120.00 240.00
3486 6129 3996 6249
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 2.00 120.00 240.00
3361 9291 3991 9531
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 2.00 120.00 240.00
3345 9129 4005 9099
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 2.00 120.00 240.00
3691 4412 4216 4277
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 2.00 120.00 240.00
3695 4561 4175 4711
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
2220 735 3129 735 3129 1043 2220 1043 2220 735
4 0 1 50 -1 18 18 0.0000 4 225 1275 2265 1455 Universe\001
4 0 1 50 -1 18 18 0.0000 4 285 735 2265 2175 Input\001
4 0 1 50 -1 18 18 0.0000 4 225 780 2265 2925 Atom\001
4 0 1 50 -1 18 18 0.0000 4 285 1020 2265 3600 Update\001
4 0 1 50 -1 18 18 0.0000 4 285 1320 2265 4575 Neighbor\001
4 0 1 50 -1 18 18 0.0000 4 225 945 2265 5475 Comm\001
4 0 1 50 -1 18 18 0.0000 4 225 1110 2265 6150 Domain\001
4 0 1 50 -1 18 18 0.0000 4 225 810 2265 7425 Force\001
4 0 1 50 -1 18 18 0.0000 4 285 975 2265 9300 Modify\001
4 0 1 50 -1 18 18 0.0000 4 285 900 2265 10050 Group\001
4 0 1 50 -1 18 18 0.0000 4 285 990 2265 10500 Output\001
4 0 1 50 -1 18 18 0.0000 4 225 825 2265 11100 Timer\001
4 0 0 50 -1 18 18 0.0000 4 225 1170 3990 1950 Variable\001
4 0 4 50 -1 18 18 0.0000 4 225 1470 3990 2325 Command\001
4 0 4 50 -1 18 18 0.0000 4 285 1275 4065 3450 Integrate\001
4 0 4 50 -1 18 18 0.0000 4 225 525 4065 3825 Min\001
4 0 0 50 -1 18 18 0.0000 4 285 1230 4065 5475 Irregular\001
4 0 4 50 -1 18 18 0.0000 4 285 1020 4065 6000 Region\001
4 0 0 50 -1 18 18 0.0000 4 225 975 4065 6375 Lattice\001
4 0 4 50 -1 18 18 0.0000 4 225 435 4065 9225 Fix\001
4 0 4 50 -1 18 18 0.0000 4 285 1305 4065 9600 Compute\001
4 0 4 50 -1 18 18 0.0000 4 225 570 4065 6975 Pair\001
4 0 4 50 -1 18 18 0.0000 4 285 840 4065 7665 Angle\001
4 0 4 50 -1 18 18 0.0000 4 225 1215 4065 8010 Dihedral\001
4 0 4 50 -1 18 18 0.0000 4 285 1305 4065 8355 Improper\001
4 0 4 50 -1 18 18 0.0000 4 285 1095 4065 8700 KSpace\001
4 0 4 50 -1 18 18 0.0000 4 285 855 4065 10545 Dump\001
4 0 0 50 -1 18 18 0.0000 4 225 1815 4065 10890 WriteRestart\001
4 0 0 50 -1 18 18 0.0000 4 225 930 6315 8550 FFT3D\001
4 0 0 50 -1 18 18 0.0000 4 285 1005 6315 8925 Remap\001
4 0 0 50 -1 18 18 0.0000 4 225 885 6390 2175 Finish\001
4 0 0 50 -1 18 18 0.0000 4 285 1050 6390 2550 Special\001
4 0 4 50 -1 18 18 0.0000 4 225 1305 3990 2925 AtomVec\001
4 0 4 50 -1 18 18 0.0000 4 225 765 4065 7320 Bond\001
4 0 0 50 -1 18 18 0.0000 4 225 1095 4065 10200 Thermo\001
4 0 0 50 -1 18 18 0.0000 4 285 1380 4305 4425 NeighList\001
4 0 0 50 -1 18 18 0.0000 4 285 2025 4305 4800 NeighRequest\001
4 0 1 50 -1 18 18 0.0000 4 285 1155 2250 600 Memory\001
4 0 0 50 -1 18 18 0.0000 4 225 1305 120 5475 LAMMPS\001
4 0 1 50 -1 18 18 0.0000 4 225 735 2265 1005 Error\001

Binary file not shown.

View File

@ -1,699 +0,0 @@
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\centerline{\Large \bf LAMMPS Developer Guide}
\centerline{\bf 23 Aug 2011}
\vspace{0.5in}
This document is a developer guide to the LAMMPS molecular dynamics
package, whose WWW site is at lammps.sandia.gov. It describes the
internal structure and algorithms of the code. Sections will be added
as we have time, and in response to requests from developers and
users.
\tableofcontents
\pagebreak
\section{LAMMPS source files}
LAMMPS source files are in two directories of the distribution
tarball. The src directory has the majority of them, all of which are
C++ files (*.cpp and *.h). Many of these files are in the src
directory itself. There are also dozens of ``packages'', which can be
included or excluded when LAMMPS is built. See the
doc/Section\_build.html section of the manual for more information
about packages, or type ``make'' from within the src directory, which
lists package-related commands, such as ``make package-status''. The
source files for each package are in an all-uppercase sub-directory of
src, like src/MOLECULE or src/USER-CUDA. If the package is currently
installed, copies of the package source files will also exist in the
src directory itself. The src/STUBS sub-directory is not a package
but contains a dummy version of the MPI library, used when building a
serial version of the code.
The lib directory also contains source code for external libraries,
used by a few of the packages. Each sub-directory, like meam or gpu,
contains the source files, some of which are in different languages
such as Fortran. The files are compiled into libraries from within
each sub-directory, e.g. performing a ``make'' in the lib/meam directory
creates a libmeam.a file. These libraries are linked to during a
LAMMPS build, if the corresponding package is installed.
LAMMPS C++ source files almost always come in pairs, such as run.cpp
and run.h. The pair of files defines a C++ class, the Run class in
this case, which contains the code invoked by the ``run'' command in a
LAMMPS input script. As this example illustrates, source file and
class names often have a one-to-one correspondence with a command used
in a LAMMPS input script. Some source files and classes do not have a
corresponding input script command, e.g. ``force.cpp'' and the Force
class. They are discussed in the next section.
\pagebreak
\section{Class hierarchy of LAMMPS}
Though LAMMPS has a lot of source files and classes, its class
hierarchy is quite simple, as outlined in Fig \ref{fig:classes}. Each
boxed name refers to a class and has a pair of associated source files
in lammps/src, e.g. ``memory.cpp'' and ``memory.h''. More details on the
class and its methods and data structures can be found by examining
its *.h file.
LAMMPS (lammps.cpp/h) is the top-level class for the entire code. It
holds an ``instance'' of LAMMPS and can be instantiated one or more
times by a calling code. For example, the file src/main.cpp simply
instantiates one instance of LAMMPS and passes it the input script.
The file src/library.cpp contains a C-style library interface to the
LAMMPS class. See the lammps/couple and lammps/python directories for
examples of simple programs that use LAMMPS through its library
interface. A driver program can instantiate the LAMMPS class multiple
times, e.g. to embed several atomistic simulation regions within a
mesoscale or continuum simulation domain.
There are a dozen or so top-level classes within the LAMMPS class that
are visible everywhere in the code. They are shaded blue in Fig
\ref{fig:classes}. Thus any class can refer to the y-coordinate of
local atom $I$ as atom$\rightarrow$x[i][1]. This visibility is
enabled by a bit of cleverness in the Pointers class (see
src/pointers.h) which every class inherits from.
There are a handful of virtual parent classes in LAMMPS that define
what LAMMPS calls ``styles''. They are shaded red in Fig
\ref{fig:classes}. Each of these are parents of a number of child
classes that implement the interface defined by the parent class. For
example, the fix style has around 100 child classes. They are the
possible fixes that can be specified by the fix command in an input
script, e.g. fix nve, fix shake, fix ave/time, etc. The corresponding
classes are Fix (for the parent class), FixNVE, FixShake, FixAveTime,
etc. The source files for these classes are easy to identify in the
src directory, since they begin with the word ``fix'', e,g,
fix\_nve.cpp, fix\_shake,cpp, fix\_ave\_time.cpp, etc.
The one exception is child class files for the ``command'' style. These
implement specific commands in the input script that can be invoked
before/after/between runs or which launch a simulation. Examples are
the create\_box, minimize, run, and velocity commands which encode the
CreateBox, Minimize, Run, and Velocity classes. The corresponding
files are create\_box,cpp, minimize.cpp, run.cpp, and velocity.cpp.
The list of command style files can be found by typing ``grep
COMMAND\_CLASS *.h'' from within the src directory, since that word in
the header file identifies the class as an input script command.
Similar words can be grepped to list files for the other LAMMPS
styles. E.g. ATOM\_CLASS, PAIR\_CLASS, BOND\_CLASS, REGION\_CLASS,
FIX\_CLASS, COMPUTE\_CLASS, DUMP\_CLASS, etc.
\begin{figure}[htb]
\begin{center}
\includegraphics[height=4in]{classes.pdf}
\end{center}
\caption{Class hierarchy within LAMMPS source code.}
\label{fig:classes}
\end{figure}
More details on individual classes in Fig \ref{fig:classes} are as
follows:
\begin{itemize}
\item The Memory class handles allocation of all large vectors and
arrays.
\item The Error class prints all error and warning messages.
\item The Universe class sets up partitions of processors so that
multiple simulations can be run, each on a subset of the processors
allocated for a run, e.g. by the mpirun command.
\item The Input class reads an input script, stores variables, and
invokes stand-alone commands that are child classes of the Command
class.
\item As discussed above, the Command class is a parent class for
certain input script commands that perform a one-time operation
before/after/between simulations or which invoke a simulation. They
are instantiated from within the Input class, invoked, then
immediately destructed.
\item The Finish class is instantiated to print statistics to the
screen after a simulation is performed, by commands like run and
minimize.
\item The Special class walks the bond topology of a molecular system
to find first, second, third neighbors of each atom. It is invoked by
several commands, like read\_data, read\_restart, and replicate.
\item The Atom class stores all per-atom arrays. More precisely, they
are allocated and stored by the AtomVec class, and the Atom class
simply stores a pointer to them. The AtomVec class is a parent
class for atom styles, defined by the atom\_style command.
\item The Update class holds an integrator and a minimizer. The
Integrate class is a parent style for the Verlet and rRESPA time
integrators, as defined by the run\_style input command. The Min
class is a parent style for various energy minimizers.
\item The Neighbor class builds and stores neighbor lists. The
NeighList class stores a single list (for all atoms). The
NeighRequest class is called by pair, fix, or compute styles when
they need a particular kind of neighbor list.
\item The Comm class performs interprocessor communication, typically
of ghost atom information. This usually involves MPI message
exchanges with 6 neighboring processors in the 3d logical grid of
processors mapped to the simulation box. Sometimes the Irregular
class is used, when atoms may migrate to arbitrary processors.
\item The Domain class stores the simulation box geometry, as well as
geometric Regions and any user definition of a Lattice. The latter
are defined by region and lattice commands in an input script.
\item The Force class computes various forces between atoms. The Pair
parent class is for non-bonded or pair-wise forces, which in LAMMPS
lingo includes many-body forces such as the Tersoff 3-body
potential. The Bond, Angle, Dihedral, Improper parent classes are
styles for bonded interactions within a static molecular topology.
The KSpace parent class is for computing long-range Coulombic
interactions. One of its child classes, PPPM, uses the FFT3D and
Remap classes to communicate grid-based information with neighboring
processors.
\item The Modify class stores lists of Fix and Compute classes, both
of which are parent styles.
\item The Group class manipulates groups that atoms are assigned to
via the group command. It also computes various attributes of
groups of atoms.
\item The Output class is used to generate 3 kinds of output from a
LAMMPS simulation: thermodynamic information printed to the screen
and log file, dump file snapshots, and restart files. These
correspond to the Thermo, Dump, and WriteRestart classes
respectively. The Dump class is a parent style.
\item The Timer class logs MPI timing information, output at the end
of a run.
\end{itemize}
%%\pagebreak
%%\section{Spatial decomposition and parallel operations}
%%distributed memory
%%Ref to JCP paper
%%diagram of 3d grid of procs and spatial decomp
%%6-way comm
%%ghost atoms, PBC added when comm (in atom class)
%%\pagebreak
%%\section{Fixes, computes, variables}
%%fixes intercolate in timestep, store per-atom info
%%computes based on current snapshot
%%equal- and atom-style variables
%%output they produce - see write-up in HowTo
\pagebreak
\section{How a timestep works}
The first and most fundamental operation within LAMMPS to understand
is how a timestep is structured. Timestepping is performed by the
Integrate class within the Update class. Since Integrate is a parent
class, corresponding to the run\_style input script command, it has
child classes. In this section, the timestep implemented by the
Verlet child class is described. A similar timestep is implemented by
the Respa child class, for the rRESPA hierarchical timestepping
method. The Min parent class performs energy minimization, so does
not perform a literal timestep. But it has logic similar to what is
described here, to compute forces and invoke fixes at each iteration
of a minimization. Differences between time integration and
minimization are highlighted at the end of this section.
The Verlet class is encoded in the src/verlet.cpp and verlet.h files.
It implements the velocity-Verlet timestepping algorithm. The
workhorse method is Verlet::run(), but first we highlight several
other methods in the class.
\begin{itemize}
\item The init() method is called at the beginning of each dynamics
run. It simply sets some internal flags, based on user settings in
other parts of the code.
\item The setup() or setup\_minimal() methods are also called before
each run. The velocity-Verlet method requires current forces be
calculated before the first timestep, so these routines compute
forces due to all atomic interactions, using the same logic that
appears in the timestepping described next. A few fixes are also
invoked, using the mechanism described in the next section. Various
counters are also initialized before the run begins. The
setup\_minimal() method is a variant that has a flag for performing
less setup. This is used when runs are continued and information
from the previous run is still valid. For example, if repeated
short LAMMPS runs are being invoked, interleaved by other commands,
via the ``pre no'' and ``every'' options of the run command, the
setup\_minimal() method is used.
\item The force\_clear() method initializes force and other arrays to
zero before each timestep, so that forces (torques, etc) can be
accumulated.
\end{itemize}
Now for the Verlet::run() method. Its structure in hi-level pseudo
code is shown in Fig \ref{fig:verlet}. In the actual code in
src/verlet.cpp some of these operations are conditionally invoked.
\begin{figure}[htb]
\begin{center}
\begin{verbatim}
loop over N timesteps:
ev_set()
fix->initial_integrate()
fix->post_integrate()
nflag = neighbor->decide()
if nflag:
fix->pre_exchange()
domain->pbc()
domain->reset_box()
comm->setup()
neighbor->setup_bins()
comm->exchange()
comm->borders()
fix->pre_neighbor()
neighbor->build()
else
comm->forward_comm()
force_clear()
fix->pre_force()
pair->compute()
bond->compute()
angle->compute()
dihedral->compute()
improper->compute()
kspace->compute()
comm->reverse_comm()
fix->post_force()
fix->final_integrate()
fix->end_of_step()
if any output on this step: output->write()
\end{verbatim}
\end{center}
\caption{Pseudo-code for the Verlet::run() method.}
\label{fig:verlet}
\end{figure}
The ev\_set() method (in the parent Integrate class), sets two flags
({\em eflag} and {\em vflag}) for energy and virial computation. Each
flag encodes whether global and/or per-atom energy and virial should
be calculated on this timestep, because some fix or variable or output
will need it. These flags are passed to the various methods that
compute particle interactions, so that they can skip the extra
calculations if the energy and virial are not needed. See the
comments with the Integrate::ev\_set() method which document the flag
values.
At various points of the timestep, fixes are invoked,
e.g. fix$\rightarrow$initial\_integrate(). In the code, this is
actually done via the Modify class which stores all the Fix objects
and lists of which should be invoked at what point in the timestep.
Fixes are the LAMMPS mechanism for tailoring the operations of a
timestep for a particular simulation. As described elsewhere
(unwritten section), each fix has one or more methods, each of which
is invoked at a specific stage of the timestep, as in Fig
\ref{fig:verlet}. All the fixes defined in an input script with an
initial\_integrate() method are invoked at the beginning of each
timestep. Fix nve, nvt, npt are examples, since they perform the
start-of-timestep velocity-Verlet integration to update velocities by
a half-step, and coordinates by a full step. The post\_integrate()
method is next. Only a few fixes use this, e.g. to reflect particles
off box boundaries in the FixWallReflect class.
The decide() method in the Neighbor class determines whether neighbor
lists need to be rebuilt on the current timestep. If not, coordinates
of ghost atoms are acquired by each processor via the forward\_comm()
method of the Comm class. If neighbor lists need to be built, several
operations within the inner if clause of Fig \ref{fig:verlet} are
first invoked. The pre\_exchange() method of any defined fixes is
invoked first. Typically this inserts or deletes particles from the
system.
Periodic boundary conditions are then applied by the Domain class via
its pbc() method to remap particles that have moved outside the
simulation box back into the box. Note that this is not done every
timestep. but only when neighbor lists are rebuilt. This is so that
each processor's sub-domain will have consistent (nearby) atom
coordinates for its owned and ghost atoms. It is also why dumped atom
coordinates can be slightly outside the simulation box.
The box boundaries are then reset (if needed) via the reset\_box()
method of the Domain class, e.g. if box boundaries are shrink-wrapped
to current particle coordinates. A change in the box size or shape
requires internal information for communicating ghost atoms (Comm
class) and neighbor list bins (Neighbor class) be updated. The
setup() method of the Comm class and setup\_bins() method of the
Neighbor class perform the update.
The code is now ready to migrate atoms that have left a processor's
geometric sub-domain to new processors. The exchange() method of the
Comm class performs this operation. The borders() method of the Comm
class then identifies ghost atoms surrounding each processor's
sub-domain and communicates ghost atom information to neighboring
processors. It does this by looping over all the atoms owned by a
processor to make lists of those to send to each neighbor processor.
On subsequent timesteps, the lists are used by the
Comm::forward\_comm() method.
Fixes with a pre\_neighbor() method are then called. These typically
re-build some data structure stored by the fix that depends on the
current atoms owned by each processor.
Now that each processor has a current list of its owned and ghost
atoms, LAMMPS is ready to rebuild neighbor lists via the build()
method of the Neighbor class. This is typically done by binning all
owned and ghost atoms, and scanning a stencil of bins around each
owned atom's bin to make a Verlet list of neighboring atoms within the
force cutoff plus neighbor skin distance.
In the next portion of the timestep, all interaction forces between
particles are computed, after zeroing the per-atom force vector via
the force\_clear() method. If the newton flag is set to ``on'' by the
newton command, forces on both owned and ghost atoms are calculated.
Pairwise forces are calculated first, which enables the global virial
(if requested) to be calculated cheaply (at the end of the
Pair::compute() method), by a dot product of atom coordinates and
forces. By including owned and ghost atoms in the dot product, the
effect of periodic boundary conditions is correctly accounted for.
Molecular topology interactions (bonds, angles, dihedrals, impropers)
are calculated next. The final contribution is from long-range
Coulombic interactions, invoked by the KSpace class.
If the newton flag is on, forces on ghost atoms are communicated and
summed back to their corresponding owned atoms. The reverse\_comm()
method of the Comm class performs this operation, which is essentially
the inverse operation of sending copies of owned atom coordinates to
other processor's ghost atoms.
At this point in the timestep, the total force on each atom is known.
Additional force constraints (external forces, SHAKE, etc) are applied
by Fixes that have a post\_force() method. The second half of the
velocity-Verlet integration is then performed (another half-step
update of the velocities) via fixes like nve, nvt, npt.
At the end of the timestep, fixes that define an end\_of\_step()
method are invoked. These typically perform a diagnostic calculation,
e.g. the ave/time and ave/spatial fixes. The final operation of the
timestep is to perform any requested output, via the write() method of
the Output class. There are 3 kinds of LAMMPS output: thermodynamic
output to the screen and log file, snapshots of atom data to a dump
file, and restart files. See the thermo\_style, dump, and restart
commands for more details.
The iteration performed by an energy minimization is similar to the
dynamics timestep of Fig \ref{fig:verlet}. Forces are computed,
neighbor lists are built as needed, atoms migrate to new processors,
and atom coordinates and forces are communicated to neighboring
processors. The only difference is what Fix class operations are
invoked when. Only a subset of LAMMPS fixes are useful during energy
minimization, as explained in their individual doc pages. The
relevant Fix class methods are min\_pre\_exchange(),
min\_pre\_force(), and min\_post\_force(). Each is invoked at the
appropriate place within the minimization iteration. For example, the
min\_post\_force() method is analogous to the post\_force() method for
dynamics; it is used to alter or constrain forces on each atom, which
affects the minimization procedure.
\pagebreak
\section{Extending LAMMPS}
The Section\_modify.html file in the doc directory of
the LAMMPS distribution gives an overview of how LAMMPS can
be extended by writing new classes that derive from existing
parent classes in LAMMPS. Here, some specific coding
details are provided for writing a new fix.
\subsection{New fixes}
(this section provided by Kirill Lykov)
\vspace{0.25cm}
Writing fixes is a flexible way of extending LAMMPS. Users can
implement many things using fixes:
\begin{itemize}
\item changing particles attributes (positions, velocities, forces, etc.).
Example: FixFreeze.
\item reading/writing data. Example: FixRestart.
\item implementing boundary conditions. Example: FixWall.
\item saving information about particles for future use (previous positions,
for instance). Example: FixStoreState.
\end{itemize}
All fixes are derived from class Fix and must have constructor with the
signature: FixMine(class LAMMPS *, int, char **).
Every fix must be registered in LAMMPS by writing the following lines
of code in the header before include guards:
\begin{center}
\begin{verbatim}
#ifdef FIX_CLASS
FixStyle(your/fix/name,FixMine)
#else
\end{verbatim}
\end{center}
Where ``your/fix/name'' is a name of your fix in the script and FixMine
is the name of the class. This code allows LAMMPS to find your fix
when it parses input script. In addition, your fix header must be
included in the file ``style\_fix.h''. In case if you use LAMMPS make,
this file is generated automatically - all files starting with prefix
fix\_ are included, so call your header the same way. Otherwise, don't
forget to add your include into ``style\_fix.h''.
Let's write a simple fix which will print average velocity at the end
of each timestep. First of all, implement a constructor:
\begin{center}
\begin{verbatim}
FixPrintVel::FixPrintVel(LAMMPS *lmp, int narg, char **arg)
: Fix(lmp, narg, arg)
{
if (narg < 4)
error->all(FLERR,"Illegal fix print command");
nevery = atoi(arg[3]);
if (nevery <= 0)
error->all(FLERR,"Illegal fix print command");
}
\end{verbatim}
\end{center}
In the constructor you should parse your fix arguments which are
specified in the script. All fixes have pretty the same syntax: fix
[fix\_identifier] [group\_name] [fix\_name] [fix\_arguments]. The
first 3 parameters are parsed by Fix class constructor, while
[fix\_arguments] should be parsed by you. In our case, we need to
specify how often we want to print an average velocity. For instance,
once in 50 timesteps: fix 1 print/vel 50. There is a special variable
in Fix class called nevery which specifies how often method
end\_of\_step() is called. Thus all we need to do is just set it up.
The next method we need to implement is setmask():
\begin{center}
\begin{verbatim}
int FixPrintVel::setmask()
{
int mask = 0;
mask |= FixConst::END_OF_STEP;
return mask;
}
\end{verbatim}
\end{center}
Here user specifies which methods of your fix should be called during
the execution. For instance, END\_OF\_STEP corresponds to the
end\_of\_step() method. Overall, there are 8 most important methods,
methods are called in predefined order during the execution of the
verlet algorithm as was mentioned in the Section 3:
\begin{itemize}
\item initial\_integrate()
\item post\_integrate()
\item pre\_exchange()
\item pre\_neighbor()
\item pre\_force()
\item post\_force()
\item final\_integrate()
\item end\_of\_step()
\end{itemize}
Fix developer must understand when he wants to execute his code. In
case if we want to write FixPrintVel, we need only end\_of\_step():
\begin{center}
\begin{verbatim}
void FixPrintVel::end_of_step()
{
// for add3, scale3
using namespace MathExtra;
double** v = atom->v;
int nlocal = atom->nlocal;
double localAvgVel[4]; // 4th element for particles count
memset(localAvgVel, 0, 4 * sizeof(double));
for (int particleInd = 0; particleInd < nlocal; ++particleInd) {
add3(localAvgVel, v[particleInd], localAvgVel);
}
localAvgVel[3] = nlocal;
double globalAvgVel[4];
memset(globalAvgVel, 0, 4 * sizeof(double));
MPI_Allreduce(localAvgVel, globalAvgVel, 4, MPI_DOUBLE, MPI_SUM, world);
scale3(1.0 / globalAvgVel[3], globalAvgVel);
if (comm->me == 0) {
printf("\%e, \%e, \%e\n",
globalAvgVel[0], globalAvgVel[1], globalAvgVel[2]);
}
}
\end{verbatim}
\end{center}
In the code above, we use MathExtra routines defined in
``math\_extra.h''. There are bunch of math functions to work with
arrays of doubles as with math vectors.
In this code we use an instance of Atom class. This object is stored
in the Pointers class (see ``pointers.h''). This object contains all
global information about the simulation system. Data from Pointers
class available to all classes inherited from it using protected
inheritance. Hence when you write you own class, which is going to use
LAMMPS data, don't forget to inherit from Pointers. When writing
fixes we inherit from class Fix which is inherited from Pointers so
there is no need to inherit from it directly.
The code above computes average velocity for all particles in the
simulation. Yet you have one unused parameter in fix call from the
script - [group\_name]. This parameter specifies the group of atoms
used in the fix. So we should compute average for all particles in the
simulation if group\_name == all, but it can be any group. The group
information is specified by groupbit which is defined in class Fix:
\begin{center}
\begin{verbatim}
for (int particleInd = 0; particleInd < nlocal; ++particleInd) {
if (atom->mask[particleInd] & groupbit) {
//Do all job here
}
}
\end{verbatim}
\end{center}
Class Atom encapsulates atoms positions, velocities, forces, etc. User
can access them using particle index. Note, that particle indexes are
usually changed every timestep because of sorting.
Lets consider another Fix example. We want to have a fix which stores
atoms position from previous time step in your fix. The local atoms
indexes will not be valid on the next iteration. In order to handle
this situation there are several methods which should be implemented:
\begin{itemize}
\item \verb|double memory_usage| - return how much memory fix uses
\item \verb|void grow_arrays(int)| - do reallocation of the per particle arrays
in your fix
\item \verb|void copy_arrays(int i, int j, int delflag)| - copy i-th per-particle
information to j-th. Used when atoms sorting is performed. if delflag is set
and atom j owns a body, move the body information to atom i.
\item \verb|void set_arrays(int i)| - sets i-th particle related information to zero
\end{itemize}
Note, that if your class implements these methods, it must call add calls of
add\_callback and delete\_callback to constructor and destructor:
\begin{center}
\begin{verbatim}
FixSavePos::FixSavePos(LAMMPS *lmp, int narg, char **arg) {
//...
atom->add_callback(0);
}
FixSavePos::~FixSavePos() {
atom->delete_callback(id, 0);
}
\end{verbatim}
\end{center}
Since we want to store positions of atoms from previous timestep, we
need to add double** x to the header file. Than add allocation code to
constructor:
\verb|memory->create(this->x, atom->nmax, 3, "FixSavePos:x");|. Free memory
at destructor: \verb|memory->destroy(x);|
Finally, implement mentioned methods:
\begin{center}
\begin{verbatim}
double FixSavePos::memory_usage()
{
int nmax = atom->nmax;
double bytes = 0.0;
bytes += nmax * 3 * sizeof(double);
return bytes;
}
void FixSavePos::grow_arrays(int nmax)
{
memory->grow(this->x, nmax, 3, "FixSavePos:x");
}
void FixSavePos::copy_arrays(int i, int j, int delflag)
{
memcpy(this->x[j], this->x[i], sizeof(double) * 3);
}
void FixSavePos::set_arrays(int i)
{
memset(this->x[i], 0, sizeof(double) * 3);
}
int FixSavePos::pack_exchange(int i, double *buf)
{
int m = 0;
buf[m++] = x[i][0];
buf[m++] = x[i][1];
buf[m++] = x[i][2];
return m;
}
int FixSavePos::unpack_exchange(int nlocal, double *buf)
{
int m = 0;
x[nlocal][0] = buf[m++];
x[nlocal][1] = buf[m++];
x[nlocal][2] = buf[m++];
return m;
}
\end{verbatim}
\end{center}
Now, a little bit about memory allocation. We used Memory class which
is just a bunch of template functions for allocating 1D and 2D
arrays. So you need to add include ``memory.h'' to have access to them.
Finally, if you need to write/read some global information used in
your fix to the restart file, you might do it by setting flag
restart\_global = 1 in the constructor and implementing methods void
write\_restart(FILE *fp) and void restart(char *buf).
\end{document}

236
doc/src/Developer_flow.rst Normal file
View File

@ -0,0 +1,236 @@
How a timestep works
====================
The first and most fundamental operation within LAMMPS to understand is
how a timestep is structured. Timestepping is performed by calling
methods of the Integrate class instance within the Update class. Since
Integrate is a base class, it will point to an instance of a derived
class corresponding to what is selected by the :doc:`run_style
<run_style>` input script command.
In this section, the timestep implemented by the Verlet class is
described. A similar timestep protocol is implemented by the Respa
class, for the r-RESPA hierarchical timestepping method.
The Min base class performs energy minimization, so does not perform a
literal timestep. But it has logic similar to what is described here,
to compute forces and invoke fixes at each iteration of a minimization.
Differences between time integration and minimization are highlighted at
the end of this section.
The Verlet class is encoded in the ``src/verlet.cpp`` and ``verlet.h``
files. It implements the velocity-Verlet timestepping algorithm. The
workhorse method is ``Verlet::run()``, but first we highlight several
other methods in the class.
- The ``init()`` method is called at the beginning of each dynamics
run. It simply sets some internal flags, based on user settings in
other parts of the code.
- The ``setup()`` or ``setup_minimal()`` methods are also called before
each run. The velocity-Verlet method requires current forces be
calculated before the first timestep, so these routines compute
forces due to all atomic interactions, using the same logic that
appears in the timestepping described next. A few fixes are also
invoked, using the mechanism described in the next section. Various
counters are also initialized before the run begins. The
``setup_minimal()`` method is a variant that has a flag for performing
less setup. This is used when runs are continued and information
from the previous run is still valid. For example, if repeated
short LAMMPS runs are being invoked, interleaved by other commands,
via the *pre no* and *every* options of the run command, the
``setup_minimal()`` method is used.
- The ``force_clear()`` method initializes force and other arrays to
zero before each timestep, so that forces (torques, etc) can be
accumulated.
Now for the ``Verlet::run()`` method. Its basic structure in hi-level pseudo
code is shown below. In the actual code in ``src/verlet.cpp`` some of
these operations are conditionally invoked.
.. code-block:: python
loop over N timesteps:
if timeout condition: break
ev_set()
fix->initial_integrate()
fix->post_integrate()
nflag = neighbor->decide()
if nflag:
fix->pre_exchange()
domain->pbc()
domain->reset_box()
comm->setup()
neighbor->setup_bins()
comm->exchange()
comm->borders()
fix->pre_neighbor()
neighbor->build()
fix->post_neighbor()
else:
comm->forward_comm()
force_clear()
fix->pre_force()
pair->compute()
bond->compute()
angle->compute()
dihedral->compute()
improper->compute()
kspace->compute()
fix->pre_reverse()
comm->reverse_comm()
fix->post_force()
fix->final_integrate()
fix->end_of_step()
if any output on this step:
output->write()
# after loop
fix->post_run()
The ``ev_set()`` method (in the parent Integrate class), sets two flags
(*eflag* and *vflag*) for energy and virial computation. Each flag
encodes whether global and/or per-atom energy and virial should be
calculated on this timestep, because some fix or variable or output will
need it. These flags are passed to the various methods that compute
particle interactions, so that they either compute and tally the
corresponding data or can skip the extra calculations if the energy and
virial are not needed. See the comments for the ``Integrate::ev_set()``
method which document the flag values.
At various points of the timestep, fixes are invoked,
e.g. ``fix->initial_integrate()``. In the code, this is actually done
via the Modify class which stores all the Fix objects and lists of which
should be invoked at what point in the timestep. Fixes are the LAMMPS
mechanism for tailoring the operations of a timestep for a particular
simulation. As described elsewhere, each fix has one or more methods,
each of which is invoked at a specific stage of the timestep, as show in
the timestep pseudo-code. All the active fixes defined in an input
script, that are flagged to have an ``initial_integrate()`` method are
invoked at the beginning of each timestep. Examples are :doc:`fix nve
<fix_nve>` or :doc:`fix nvt or fix npt <fix_nh>` which perform the
start-of-timestep velocity-Verlet integration operations to update
velocities by a half-step, and coordinates by a full step. The
``post_integrate()`` method is next for operations that need to happen
immediately after those updates. Only a few fixes use this, e.g. to
reflect particles off box boundaries in the :doc:`FixWallReflect class
<fix_wall_reflect>`.
The ``decide()`` method in the Neighbor class determines whether
neighbor lists need to be rebuilt on the current timestep (conditions
can be changed using the :doc:`neigh_modify every/delay/check
<neigh_modify>` command. If not, coordinates of ghost atoms are
acquired by each processor via the ``forward_comm()`` method of the Comm
class. If neighbor lists need to be built, several operations within
the inner if clause of the pseudo-code are first invoked. The
``pre_exchange()`` method of any defined fixes is invoked first.
Typically this inserts or deletes particles from the system.
Periodic boundary conditions are then applied by the Domain class via
its ``pbc()`` method to remap particles that have moved outside the
simulation box back into the box. Note that this is not done every
timestep, but only when neighbor lists are rebuilt. This is so that
each processor's sub-domain will have consistent (nearby) atom
coordinates for its owned and ghost atoms. It is also why dumped atom
coordinates may be slightly outside the simulation box if not dumped
on a step where the neighbor lists are rebuilt.
The box boundaries are then reset (if needed) via the ``reset_box()``
method of the Domain class, e.g. if box boundaries are shrink-wrapped to
current particle coordinates. A change in the box size or shape
requires internal information for communicating ghost atoms (Comm class)
and neighbor list bins (Neighbor class) be updated. The ``setup()``
method of the Comm class and ``setup_bins()`` method of the Neighbor
class perform the update.
The code is now ready to migrate atoms that have left a processor's
geometric sub-domain to new processors. The ``exchange()`` method of
the Comm class performs this operation. The ``borders()`` method of the
Comm class then identifies ghost atoms surrounding each processor's
sub-domain and communicates ghost atom information to neighboring
processors. It does this by looping over all the atoms owned by a
processor to make lists of those to send to each neighbor processor. On
subsequent timesteps, the lists are used by the ``Comm::forward_comm()``
method.
Fixes with a ``pre_neighbor()`` method are then called. These typically
re-build some data structure stored by the fix that depends on the
current atoms owned by each processor.
Now that each processor has a current list of its owned and ghost
atoms, LAMMPS is ready to rebuild neighbor lists via the ``build()``
method of the Neighbor class. This is typically done by binning all
owned and ghost atoms, and scanning a stencil of bins around each
owned atom's bin to make a Verlet list of neighboring atoms within the
force cutoff plus neighbor skin distance.
In the next portion of the timestep, all interaction forces between
particles are computed, after zeroing the per-atom force vector via the
``force_clear()`` method. If the newton flag is set to *on* by the
newton command, forces are added to both owned and ghost atoms, otherwise
only to owned (aka local) atoms.
Pairwise forces are calculated first, which enables the global virial
(if requested) to be calculated cheaply (at O(N) cost instead of O(N**2)
at the end of the ``Pair::compute()`` method), by a dot product of atom
coordinates and forces. By including owned and ghost atoms in the dot
product, the effect of periodic boundary conditions is correctly
accounted for. Molecular topology interactions (bonds, angles,
dihedrals, impropers) are calculated next (if supported by the current
atom style). The final contribution is from long-range Coulombic
interactions, invoked by the KSpace class.
The ``pre_reverse()`` method in fixes is used for operations that have to
be done *before* the upcoming reverse communication (e.g. to perform
additional data transfers or reductions for data computed during the
force computation and stored with ghost atoms).
If the newton flag is on, forces on ghost atoms are communicated and
summed back to their corresponding owned atoms. The ``reverse_comm()``
method of the Comm class performs this operation, which is essentially
the inverse operation of sending copies of owned atom coordinates to
other processor's ghost atoms.
At this point in the timestep, the total force on each (local) atom is
known. Additional force constraints (external forces, SHAKE, etc) are
applied by Fixes that have a ``post_force()`` method. The second half
of the velocity-Verlet integration, ``final_integrate()`` is then
performed (another half-step update of the velocities) via fixes like
nve, nvt, npt.
At the end of the timestep, fixes that contain an ``end_of_step()``
method are invoked. These typically perform a diagnostic calculation,
e.g. the ave/time and ave/spatial fixes. The final operation of the
timestep is to perform any requested output, via the ``write()`` method
of the Output class. There are 3 kinds of LAMMPS output: thermodynamic
output to the screen and log file, snapshots of atom data to a dump
file, and restart files. See the :doc:`thermo_style <thermo_style>`,
:doc:`dump <dump>`, and :doc:`restart <restart>` commands for more
details.
The the flow of control during energy minimization iterations is
similar to that of a molecular dynamics timestep. Forces are computed,
neighbor lists are built as needed, atoms migrate to new processors, and
atom coordinates and forces are communicated to neighboring processors.
The only difference is what Fix class operations are invoked when. Only
a subset of LAMMPS fixes are useful during energy minimization, as
explained in their individual doc pages. The relevant Fix class methods
are ``min_pre_exchange()``, ``min_pre_force()``, and ``min_post_force()``.
Each fix is invoked at the appropriate place within the minimization
iteration. For example, the ``min_post_force()`` method is analogous to
the ``post_force()`` method for dynamics; it is used to alter or constrain
forces on each atom, which affects the minimization procedure.
After all iterations are completed there is a ``cleanup`` step which
calls the ``post_run()`` method of fixes to perform operations only required
at the end of a calculations (like freeing temporary storage or creating
final outputs).

250
doc/src/Developer_org.rst Normal file
View File

@ -0,0 +1,250 @@
LAMMPS source files
===================
The source files of the LAMMPS code are found in two
directories of the distribution: ``src`` and ``lib``.
Most of the code is C++ but there are small numbers of files
in several other languages.
The core of the code is located in the
``src`` folder and its sub-directories.
A sizable number of these files are in the ``src`` directory
itself, but there are plenty of :doc:`packages <Packages>`, which can be
included or excluded when LAMMPS is built. See the :doc:`Include
packages in build <Build_package>` section of the manual for more
information about that part of the build process. LAMMPS currently
supports building with :doc:`conventional makefiles <Build_make>` and
through :doc:`CMake <Build_cmake>` which differ in how packages are
enabled or disabled for a LAMMPS binary. The source files for each
package are in all-uppercase sub-directories of the ``src`` folder, for
example ``src/MOLECULE`` or ``src/USER-MISC``. The ``src/STUBS``
sub-directory is not a package but contains a dummy MPI library, that is
used when building a serial version of the code. The ``src/MAKE``
directory contains makefiles with settings and flags for a variety of
configuration and machines for the build process with traditional
makefiles.
The ``lib`` directory contains the source code for several supporting
libraries or files with configuration settings to use globally installed
libraries, that are required by some of the optional packages.
Each sub-directory, like ``lib/poems`` or ``lib/gpu``, contains the
source files, some of which are in different languages such as Fortran
or CUDA. These libraries are linked to during a LAMMPS build, if the
corresponding package is installed.
LAMMPS C++ source files almost always come in pairs, such as
``src/run.cpp`` (implementation file) and ``src/run.h`` (header file).
Each pair of files defines a C++
class, for example the :cpp:class:`LAMMPS_NS::Run` class which contains
the code invoked by the :doc:`run <run>` command in a LAMMPS input script.
As this example illustrates, source file and class names often have a
one-to-one correspondence with a command used in a LAMMPS input script.
Some source files and classes do not have a corresponding input script
command, e.g. ``src/force.cpp`` and the :cpp:class:`LAMMPS_NS::Force`
class. They are discussed in the next section.
A small number of C++ classes and utility functions are implemented with
only a ``.h`` file. Examples are the Pointer class or the MathVec functions.
LAMMPS class topology
=====================
Though LAMMPS has a lot of source files and classes, its class topology
is relative flat, as outlined in the :ref:`class-topology` figure. Each
name refers to a class and has a pair of associated source files in the
``src`` folder, for example the class :cpp:class:`LAMMPS_NS::Memory`
corresponds to the files ``memory.cpp`` and ``memory.h``, or the class
:cpp:class:`LAMMPS_NS::AtomVec` corresponds to the files
``atom_vec.cpp`` and ``atom_vec.h``. Full lines in the figure represent
compositing: that is the class to the left holds a pointer to an
instance of the class to the right. Dashed lines instead represent
inheritance: the class to the right is derived from the class on the
left. Classes with a red boundary are not instantiated directly, but
they represent the base classes for "styles". Those "styles" make up
the bulk of the LAMMPS code and only a few typical examples are included
in the figure for demonstration purposes.
.. _class-topology:
.. figure:: JPG/lammps-classes.png
LAMMPS class topology
This figure shows some of the relations of the base classes of the
LAMMPS simulation package. Full lines indicate that a class holds an
instance of the class it is pointing to; dashed lines point to
derived classes that are given as examples of what classes may be
instantiated during a LAMMPS run based on the input commands and
accessed through the API define by their respective base classes. At
the core is the :cpp:class:`LAMMPS <LAMMPS_NS::LAMMPS>` class, which
holds pointers to class instances with specific purposes. Those may
hold instances of other classes, sometimes directly, or only
temporarily, sometimes as derived classes or derived classes or
derived classes, which may also hold instances of other classes.
The :cpp:class:`LAMMPS_NS::LAMMPS` class is the topmost class and
represents what is referred to an "instance" of LAMMPS. It is a
composite holding references to instances of other core classes
providing the core functionality of the MD engine in LAMMPS and through
them abstractions of the required operations. The constructor of the
LAMMPS class will instantiate those instances, process the command line
flags, initialize MPI (if not already done) and set up file pointers for
input and output. The destructor will shut everything down and free all
associated memory. Thus code for the standalone LAMMPS executable in
``main.cpp`` simply initializes MPI, instantiates a single instance of
LAMMPS, and passes it the command line flags and input script. It
deletes the LAMMPS instance after the method reading the input returns
and shuts down the MPI environment before it exits the executable.
The :cpp:class:`LAMMPS_NS::Pointers` is not shown in the
:ref:`class-topology` figure, it holds references to members of the
`LAMMPS_NS::LAMMPS`, so that all classes derived from
:cpp:class:`LAMMPS_NS::Pointers` have direct access to those reference.
From the class topology all classes with blue boundary are referenced in
this class and all classes in the second and third columns, that are not
listed as derived classes are instead derived from
:cpp:class:`LAMMPS_NS::Pointers`.
Since all storage is encapsulated, the LAMMPS class can also be
instantiated multiple times by a calling code, and that can be either
simultaneously or consecutively. When running in parallel with MPI,
care has to be taken, that suitable communicators are used to not
create conflicts between different instances.
The LAMMPS class currently holds instances of 19 classes representing
different core functionalities There are a handful of virtual parent
classes in LAMMPS that define what LAMMPS calls ``styles``. They are
shaded red in the :ref:`class-topology` figure. Each of these are
parents of a number of child classes that implement the interface
defined by the parent class. There are two main categories of these
``styles``: some may only have one instance active at a time (e.g. atom,
pair, bond, angle, dihedral, improper, kspace, comm) and there is a
dedicated pointer variable in the composite class that manages them.
Setups that require a mix of different such styles have to use a
*hybrid* class that manages and forwards calls to the corresponding
sub-styles for the designated subset of atoms or data. or the composite
class may have lists of class instances, e.g. Modify handles lists of
compute and fix styles, while Output handles dumps class instances.
The exception to this scheme are the ``command`` style classes. These
implement specific commands that can be invoked before, after, or between
runs or are commands which launch a simulation. For these an instance
of the class is created, its command() method called and then, after
completion, the class instance deleted. Examples for this are the
create_box, create_atoms, minimize, run, or velocity command styles.
For all those ``styles`` certain naming conventions are employed: for
the fix nve command the class is called FixNVE and the files are
``fix_nve.h`` and ``fix_nve.cpp``. Similarly for fix ave/time we have
FixAveTime and ``fix_ave_time.h`` and ``fix_ave_time.cpp``. Style names
are lower case and without spaces or special characters. A suffix or
multiple appended with a forward slash '/' denotes a variant of the
corresponding class without the suffix. To connect the style name and
the class name, LAMMPS uses macros like the following ATOM\_CLASS,
PAIR\_CLASS, BOND\_CLASS, REGION\_CLASS, FIX\_CLASS, COMPUTE\_CLASS,
or DUMP\_CLASS in the corresponding header file. During compilation
files with the pattern ``style_name.h`` are created that contain include
statements including all headers of all styles of a given type that
are currently active (or "installed).
More details on individual classes in the :ref:`class-topology` are as
follows:
- The Memory class handles allocation of all large vectors and arrays.
- The Error class prints all error and warning messages.
- The Universe class sets up partitions of processors so that multiple
simulations can be run, each on a subset of the processors allocated
for a run, e.g. by the mpirun command.
- The Input class reads and processes input input strings and files,
stores variables, and invokes :doc:`commands <Commands_all>`.
- As discussed above, command style classes are directly derived from
the Pointers class. They provide input script commands that perform
one-time operations before/after/between simulations or which invoke a
simulation. They are instantiated from within the Input class,
invoked, then immediately destructed.
- The Finish class is instantiated to print statistics to the screen
after a simulation is performed, by commands like run and minimize.
- The Special class walks the bond topology of a molecular system to
find first, second, third neighbors of each atom. It is invoked by
several commands, like :doc:`read_data <read_data>`,
:doc:`read_restart <read_restart>`, or :doc:`replicate <replicate>`.
- The Atom class stores per-atom properties associated with atom styles.
More precisely, they are allocated and managed by a class derived from
the AtomVec class, and the Atom class simply stores pointers to them.
The classes derived from AtomVec represent the different atom styles
and they are instantiated through the :doc:`atom_style <atom_style>`
command.
- The Update class holds instances of an integrator and a minimizer
class. The Integrate class is a parent style for the Verlet and
r-RESPA time integrators, as defined by the :doc:`run_style
<run_style>` command. The Min class is a parent style for various
energy minimizers.
- The Neighbor class builds and stores neighbor lists. The NeighList
class stores a single list (for all atoms). A NeighRequest class
instance is created by pair, fix, or compute styles when they need a
particular kind of neighbor list and use the NeighRequest properties
to select the neighbor list settings for the given request. There can
be multiple instances of the NeighRequest class and the Neighbor class
will try to optimize how they are computed by creating copies or
sub-lists where possible.
- The Comm class performs inter-processor communication, typically of
ghost atom information. This usually involves MPI message exchanges
with 6 neighboring processors in the 3d logical grid of processors
mapped to the simulation box. There are two :doc:`communication styles
<comm_style>` enabling different ways to do the domain decomposition.
Sometimes the Irregular class is used, when atoms may migrate to
arbitrary processors.
- The Domain class stores the simulation box geometry, as well as
geometric Regions and any user definition of a Lattice. The latter
are defined by the :doc:`region <region>` and :doc:`lattice <lattice>`
commands in an input script.
- The Force class computes various forces between atoms. The Pair
parent class is for non-bonded or pair-wise forces, which in LAMMPS
also includes many-body forces such as the Tersoff 3-body potential if
those are computed by walking pairwise neighbor lists. The Bond,
Angle, Dihedral, Improper parent classes are styles for bonded
interactions within a static molecular topology. The KSpace parent
class is for computing long-range Coulombic interactions. One of its
child classes, PPPM, uses the FFT3D and Remap classes to redistribute
and communicate grid-based information across the parallel processors.
- The Modify class stores lists of class instances derived from the
:doc:`Fix <fix>` and :doc:`Compute <compute>` base classes.
- The Group class manipulates groups that atoms are assigned to via the
:doc:`group <group>` command. It also has functions to compute
various attributes of groups of atoms.
- The Output class is used to generate 3 kinds of output from a LAMMPS
simulation: thermodynamic information printed to the screen and log
file, dump file snapshots, and restart files. These correspond to the
:doc:`Thermo <thermo_style>`, :doc:`Dump <dump>`, and
:doc:`WriteRestart <write_restart>` classes respectively. The Dump
class is a base class with several derived classes implementing
various dump style variants.
- The Timer class logs timing information, output at the end
of a run.
.. TODO section on "Spatial decomposition and parallel operations"
.. diagram of 3d processor grid, brick vs. tiled. local vs. ghost
.. atoms, 6-way communication with pack/unpack functions,
.. PBC as part of the communication
.. TODO section on "Fixes, Computes, and Variables"
.. how and when data is computed and provided and how it is
.. referenced. flags in Fix/Compute/Variable classes tell
.. style and amount of available data.

484
doc/src/Developer_utils.rst Normal file
View File

@ -0,0 +1,484 @@
LAMMPS utility functions
========================
The ``utils`` sub-namespace inside the ``LAMMPS_NS`` namespace provides
a collection of convenience functions and utilities that perform common
tasks that are required repeatedly throughout the LAMMPS code like
reading or writing to files with error checking or translation of
strings into specific types of numbers with checking for validity. This
reduces redundant implementations and encourages consistent behavior.
I/O with status check
^^^^^^^^^^^^^^^^^^^^^
These are wrappers around the corresponding C library calls like
``fgets()`` or ``fread()``. They will check if there were errors
on reading or an unexpected end-of-file state was reached. In that
case, the functions will stop the calculation with an error message,
indicating the name of the problematic file, if possible.
----------
.. doxygenfunction:: sfgets
:project: progguide
.. doxygenfunction:: sfread
:project: progguide
----------
String to number conversions with validity check
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
These functions should be used to convert strings to numbers. They are
are strongly preferred over C library calls like ``atoi()`` or
``atof()`` since they check if the **entire** provided string is a valid
(floating-point or integer) number, and will error out instead of
silently returning the result of a partial conversion or zero in cases
where the string is not a valid number. This behavior allows to more
easily detect typos or issues when processing input files.
The *do_abort* flag should be set to ``true`` in case this function
is called only on a single MPI rank, as that will then trigger the
a call to ``Error::one()`` for errors instead of ``Error::all()``
and avoids a "hanging" calculation when run in parallel.
Please also see :cpp:func:`is_integer() <LAMMPS_NS::utils::is_integer>`
and :cpp:func:`is_double() <LAMMPS_NS::utils::is_double>` for testing
strings for compliance without conversion.
----------
.. doxygenfunction:: numeric
:project: progguide
.. doxygenfunction:: inumeric
:project: progguide
.. doxygenfunction:: bnumeric
:project: progguide
.. doxygenfunction:: tnumeric
:project: progguide
String processing
^^^^^^^^^^^^^^^^^
The following are functions to help with processing strings
and parsing files or arguments.
----------
.. doxygenfunction:: trim
:project: progguide
.. doxygenfunction:: trim_comment
:project: progguide
.. doxygenfunction:: count_words(const char *text)
:project: progguide
.. doxygenfunction:: count_words(const std::string &text)
:project: progguide
.. doxygenfunction:: count_words(const std::string &text, const std::string &separators)
:project: progguide
.. doxygenfunction:: trim_and_count_words
:project: progguide
.. doxygenfunction:: split_words
:project: progguide
.. doxygenfunction:: strmatch
:project: progguide
.. doxygenfunction:: is_integer
:project: progguide
.. doxygenfunction:: is_double
:project: progguide
File and path functions
^^^^^^^^^^^^^^^^^^^^^^^^^
.. doxygenfunction:: guesspath
:project: progguide
.. doxygenfunction:: path_basename
:project: progguide
.. doxygenfunction:: path_join
:project: progguide
.. doxygenfunction:: file_is_readable
:project: progguide
Potential file functions
^^^^^^^^^^^^^^^^^^^^^^^^
.. doxygenfunction:: get_potential_file_path
:project: progguide
.. doxygenfunction:: get_potential_date
:project: progguide
.. doxygenfunction:: get_potential_units
:project: progguide
.. doxygenfunction:: get_supported_conversions
:project: progguide
.. doxygenfunction:: get_conversion_factor
:project: progguide
.. doxygenfunction:: open_potential(const std::string &name, LAMMPS *lmp, int *auto_convert)
:project: progguide
Argument processing
^^^^^^^^^^^^^^^^^^^
.. doxygenfunction:: bounds
:project: progguide
.. doxygenfunction:: expand_args
:project: progguide
Convenience functions
^^^^^^^^^^^^^^^^^^^^^
.. doxygenfunction:: logmesg
:project: progguide
.. doxygenfunction:: getsyserror
:project: progguide
.. doxygenfunction:: check_packages_for_style
:project: progguide
.. doxygenfunction:: timespec2seconds
:project: progguide
.. doxygenfunction:: date2num
:project: progguide
Customized standard functions
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. doxygenfunction:: merge_sort
:project: progguide
---------------------------
Communication buffer coding with *ubuf*
=========================================
LAMMPS uses communication buffers where it collects data from various
class instances and then exchanges the data with neighboring sub-domains.
For simplicity those buffers are defined as ``double`` buffers and
used for doubles and integer numbers. This presents a unique problem
when 64-bit integers are used. While the storage needed for a ``double``
is also 64-bit, it cannot be used by a simple assignment. To get around
that limitation, LAMMPS uses the :cpp:union:`ubuf <LAMMPS_NS::ubuf>`
union. It is used in the various "pack" and "unpack" functions in the
LAMMPS classes to store and retrieve integers that may be 64-bit from
the communication buffers.
---------------------------
.. doxygenunion:: LAMMPS_NS::ubuf
:project: progguide
---------------------------
Tokenizer classes
=================
The purpose of the tokenizer classes is to simplify the recurring task
of breaking lines of text down into words and/or numbers.
Traditionally, LAMMPS code would be using the ``strtok()`` function from
the C library for that purpose, but that function has two significant
disadvantages: 1) it cannot be used concurrently from different LAMMPS
instances since it stores its status in a global variable and 2) it
modifies the string that it is processing. These classes were
implemented to avoid both of these issues and also to reduce the amount
of code that needs to be written.
The basic procedure is to create an instance of the tokenizer class with
the string to be processed as an argument and then do a loop until all
available tokens are read. The constructor has a default set of
separator characters, but that can be overridden. The default separators
are all "whitespace" characters, i.e. the space character, the tabulator
character, the carriage return character, the linefeed character, and
the form feed character.
.. code-block:: C++
:caption: Tokenizer class example listing entries of the PATH environment variable
#include "tokenizer.h"
#include <cstdlib>
#include <string>
#include <iostream>
using namespace LAMMPS_NS;
int main(int, char **)
{
const char *path = getenv("PATH");
if (path != nullptr) {
Tokenizer p(path,":");
while (p.has_next())
std::cout << "Entry: " << p.next() << "\n";
}
return 0;
}
Most tokenizer operations cannot fail except for
:cpp:func:`LAMMPS_NS::Tokenizer::next` (when used without first
checking with :cpp:func:`LAMMPS_NS::Tokenizer::has_next`) and
:cpp:func:`LAMMPS_NS::Tokenizer::skip`. In case of failure, the class
will throw an exception, so you may need to wrap the code using the
tokenizer into a ``try`` / ``catch`` block to handle errors. The
:cpp:class:`LAMMPS_NS::ValueTokenizer` class may also throw an exception
when a (type of) number is requested as next token that is not
compatible with the string representing the next word.
.. code-block:: C++
:caption: ValueTokenizer class example with exception handling
#include "tokenizer.h"
#include <cstdlib>
#include <string>
#include <iostream>
using namespace LAMMPS_NS;
int main(int, char **)
{
const char *text = "1 2 3 4 5 20.0 21 twentytwo 2.3";
double num1(0),num2(0),num3(0),num4(0);
ValueTokenizer t(text);
// read 4 doubles after skipping over 5 numbers
try {
t.skip(5);
num1 = t.next_double();
num2 = t.next_double();
num3 = t.next_double();
num4 = t.next_double();
} catch (TokenizerException &e) {
std::cout << "Reading numbers failed: " << e.what() << "\n";
}
std::cout << "Values: " << num1 << " " << num2 << " " << num3 << " " << num4 << "\n";
return 0;
}
This code example should produce the following output:
.. code-block::
Reading numbers failed: Not a valid floating-point number: 'twentytwo'
Values: 20 21 0 0
----------
.. doxygenclass:: LAMMPS_NS::Tokenizer
:project: progguide
:members:
.. doxygenclass:: LAMMPS_NS::TokenizerException
:project: progguide
:members:
.. doxygenclass:: LAMMPS_NS::ValueTokenizer
:project: progguide
:members:
.. doxygenclass:: LAMMPS_NS::InvalidIntegerException
:project: progguide
:members: what
.. doxygenclass:: LAMMPS_NS::InvalidFloatException
:project: progguide
:members: what
----------
File reader classes
====================
The purpose of the file reader classes is to simplify the recurring task
of reading and parsing files. They can use the
:cpp:class:`LAMMPS_NS::ValueTokenizer` class to process the read in
text. The :cpp:class:`LAMMPS_NS::TextFileReader` is a more general
version while :cpp:class:`LAMMPS_NS::PotentialFileReader` is specialized
to implement the behavior expected for looking up and reading/parsing
files with potential parameters in LAMMPS. The potential file reader
class requires a LAMMPS instance, requires to be run on MPI rank 0 only,
will use the :cpp:func:`LAMMPS_NS::utils::get_potential_file_path`
function to look up and open the file, and will call the
:cpp:class:`LAMMPS_NS::Error` class in case of failures to read or to
convert numbers, so that LAMMPS will be aborted.
.. code-block:: C++
:caption: Use of PotentialFileReader class in pair style coul/streitz
PotentialFileReader reader(lmp, file, "coul/streitz");
char * line;
while((line = reader.next_line(NPARAMS_PER_LINE))) {
try {
ValueTokenizer values(line);
std::string iname = values.next_string();
int ielement;
for (ielement = 0; ielement < nelements; ielement++)
if (iname == elements[ielement]) break;
if (nparams == maxparam) {
maxparam += DELTA;
params = (Param *) memory->srealloc(params,maxparam*sizeof(Param),
"pair:params");
}
params[nparams].ielement = ielement;
params[nparams].chi = values.next_double();
params[nparams].eta = values.next_double();
params[nparams].gamma = values.next_double();
params[nparams].zeta = values.next_double();
params[nparams].zcore = values.next_double();
} catch (TokenizerException & e) {
error->one(FLERR, e.what());
}
nparams++;
}
A file that would be parsed by the reader code fragment looks like this:
.. parsed-literal::
# DATE: 2015-02-19 UNITS: metal CONTRIBUTOR: Ray Shan CITATION: Streitz and Mintmire, Phys Rev B, 50, 11996-12003 (1994)
#
# X (eV) J (eV) gamma (1/\AA) zeta (1/\AA) Z (e)
Al 0.000000 10.328655 0.000000 0.968438 0.763905
O 5.484763 14.035715 0.000000 2.143957 0.000000
----------
.. doxygenclass:: LAMMPS_NS::TextFileReader
:project: progguide
:members:
.. doxygenclass:: LAMMPS_NS::PotentialFileReader
:project: progguide
:members:
----------
Memory pool classes
===================
The memory pool classes are used for cases where otherwise many
small memory allocations would be needed and where the data would
be either all used or all freed. One example for that is the
storage of neighbor lists. The memory management strategy is
based on the assumption that allocations will be in chunks of similar
sizes. The allocation is then not done per individual call for a
reserved chunk of memory, but for a "page" that can hold multiple
chunks of data. A parameter for the maximum chunk size must be
provided, as that is used to determine whether a new page of memory
must be used.
The :cpp:class:`MyPage <LAMMPS_NS::MyPage>` class offers two ways to
reserve a chunk: 1) with :cpp:func:`get() <LAMMPS_NS::MyPage::get>` the
chunk size needs to be known in advance, 2) with :cpp:func:`vget()
<LAMMPS_NS::MyPage::vget>` a pointer to the next chunk is returned, but
its size is registered later with :cpp:func:`vgot()
<LAMMPS_NS::MyPage::vgot>`.
.. code-block:: C++
:caption: Example of using :cpp:class:`MyPage <LAMMPS_NS::MyPage>`
#include "my_page.h"
using namespace LAMMPS_NS;
MyPage<double> *dpage = new MyPage<double>;
// max size of chunk: 256, size of page: 10240 doubles (=81920 bytes)
dpage->init(256,10240);
double **build_some_lists(int num)
{
dpage->reset();
double **dlist = new double*[num];
for (int i=0; i < num; ++i) {
double *dptr = dpage.vget();
int jnum = 0;
for (int j=0; j < jmax; ++j) {
// compute some dvalue for eligible loop index j
dptr[j] = dvalue;
++jnum;
}
if (dpage.status() != 0) {
// handle out of memory or jnum too large errors
}
dpage.vgot(jnum);
dlist[i] = dptr;
}
return dlist;
}
----------
.. doxygenclass:: LAMMPS_NS::MyPage
:project: progguide
:members:
.. doxygenclass:: LAMMPS_NS::MyPoolChunk
:project: progguide
:members:
----------
Eigensolver functions
=====================
The ``MathEigen`` sub-namespace of the ``LAMMPS_NS`` namespace contains
functions and classes for eigensolvers. Currently only the
:cpp:func:`jacobi3 function <MathEigen::jacobi3>` is used in various
places in LAMMPS. That function is built on top of a group of more
generic eigensolvers that are maintained in the ``math_eigen_impl.h``
header file. This header contains the implementation of three template
classes:
#. "Jacobi" calculates all of the eigenvalues and eigenvectors
of a dense, symmetric, real matrix.
#. The "PEigenDense" class only calculates the principal eigenvalue
(ie. the largest or smallest eigenvalue), and its corresponding
eigenvector. However it is much more efficient than "Jacobi" when
applied to large matrices (larger than 13x13). PEigenDense also can
understand complex-valued Hermitian matrices.
#. The "LambdaLanczos" class is a generalization of "PEigenDense" which can be
applied to arbitrary sparse matrices.
The "math_eigen_impl.h" code is an amalgamation of `jacobi_pd
<https://github.com/jewettaij/jacobi_pd>`_ by Andrew Jewett at Scripps
Research (under CC0-1.0 license) and `Lambda Lanczos
<https://github.com/mrcdr/lambda-lanczos>`_ by Yuya Kurebayashi at
Tohoku University (under MIT license)
----------
.. doxygenfunction:: MathEigen::jacobi3(double const *const *mat, double *eval, double **evec)
:project: progguide
.. doxygenfunction:: MathEigen::jacobi3(double const mat[3][3], double *eval, double evec[3][3])
:project: progguide

253
doc/src/Developer_write.rst Normal file
View File

@ -0,0 +1,253 @@
Writing LAMMPS styles
=====================
The :doc:`Modify` section of the manual gives an overview of how LAMMPS can
be extended by writing new classes that derive from existing
parent classes in LAMMPS. Here, some specific coding
details are provided for writing code for LAMMPS.
Writing a new fix style
^^^^^^^^^^^^^^^^^^^^^^^
Writing fixes is a flexible way of extending LAMMPS. Users can
implement many things using fixes:
- changing particles attributes (positions, velocities, forces, etc.). Examples: FixNVE, FixFreeze.
- reading/writing data. Example: FixRestart.
- adding or modifying properties due to geometry. Example: FixWall.
- interacting with other subsystems or external code: Examples: FixTTM, FixExternal, FixLATTE
- saving information for analysis or future use (previous positions,
for instance). Examples: Fix AveTime, FixStoreState.
All fixes are derived from the Fix base class and must have a
constructor with the signature: ``FixPrintVel(class LAMMPS *, int, char **)``.
Every fix must be registered in LAMMPS by writing the following lines
of code in the header before include guards:
.. code-block:: c
#ifdef FIX_CLASS
FixStyle(print/vel,FixPrintVel)
#else
/* the definition of the FixPrintVel class comes here */
...
#endif
Where ``print/vel`` is the style name of your fix in the input script and
``FixPrintVel`` is the name of the class. The header file would be called
``fix_print_vel.h`` and the implementation file ``fix_print_vel.cpp``.
These conventions allow LAMMPS to automatically integrate it into the
executable when compiling and associate your new fix class with the designated
keyword when it parses the input script.
Let's write a simple fix which will print the average velocity at the end
of each timestep. First of all, implement a constructor:
.. code-block:: C++
FixPrintVel::FixPrintVel(LAMMPS *lmp, int narg, char **arg)
: Fix(lmp, narg, arg)
{
if (narg < 4)
error->all(FLERR,"Illegal fix print/vel command");
nevery = force->inumeric(FLERR,arg[3]);
if (nevery <= 0)
error->all(FLERR,"Illegal fix print/vel command");
}
In the constructor you should parse your fix arguments which are
specified in the script. All fixes have pretty the same syntax:
``fix <fix-ID> <fix group> <fix name> <fix arguments ...>``. The
first 3 parameters are parsed by Fix base class constructor, while
``<fix arguments>`` should be parsed by you. In our case, we need to
specify how often we want to print an average velocity. For instance,
once in 50 timesteps: ``fix 1 print/vel 50``. There is a special variable
in the Fix class called ``nevery`` which specifies how often the method
``end_of_step()`` is called. Thus all we need to do is just set it up.
The next method we need to implement is ``setmask()``:
.. code-block:: C++
int FixPrintVel::setmask()
{
int mask = 0;
mask |= FixConst::END_OF_STEP;
return mask;
}
Here the user specifies which methods of your fix should be called
during execution. The constant ``END_OF_STEP`` corresponds to the
``end_of_step()`` method. The most important available methods that
are called during a timestep and the order in which they are called
are shown in the previous section.
.. code-block:: C++
void FixPrintVel::end_of_step()
{
// for add3, scale3
using namespace MathExtra;
double** v = atom->v;
int nlocal = atom->nlocal;
double localAvgVel[4]; // 4th element for particles count
memset(localAvgVel, 0, 4 * sizeof(double));
for (int particleInd = 0; particleInd < nlocal; ++particleInd) {
add3(localAvgVel, v[particleInd], localAvgVel);
}
localAvgVel[3] = nlocal;
double globalAvgVel[4];
memset(globalAvgVel, 0, 4 * sizeof(double));
MPI_Allreduce(localAvgVel, globalAvgVel, 4, MPI_DOUBLE, MPI_SUM, world);
scale3(1.0 / globalAvgVel[3], globalAvgVel);
if ((comm->me == 0) && screen) {
fmt::print(screen,"{}, {}, {}\n",
globalAvgVel[0], globalAvgVel[1], globalAvgVel[2]);
}
}
In the code above, we use MathExtra routines defined in
``math_extra.h``. There are bunch of math functions to work with
arrays of doubles as with math vectors. It is also important to note
that LAMMPS code should always assume to be run in parallel and that
atom data is thus distributed across the MPI ranks. Thus you can
only process data from local atoms directly and need to use MPI library
calls to combine or exchange data. For serial execution, LAMMPS
comes bundled with the MPI STUBS library that contains the MPI library
function calls in dummy versions that only work for a single MPI rank.
In this code we use an instance of Atom class. This object is stored
in the Pointers class (see ``pointers.h``) which is the base class of
the Fix base class. This object contains references to various class
instances (the original instances are created and held by the LAMMPS
class) with all global information about the simulation system.
Data from the Pointers class is available to all classes inherited from
it using protected inheritance. Hence when you write you own class,
which is going to use LAMMPS data, don't forget to inherit from Pointers
or pass an Pointer to it to all functions that need access. When writing
fixes we inherit from class Fix which is inherited from Pointers so
there is no need to inherit from it directly.
The code above computes average velocity for all particles in the
simulation. Yet you have one unused parameter in fix call from the
script: ``group_name``. This parameter specifies the group of atoms
used in the fix. So we should compute average for all particles in the
simulation only if ``group_name == "all"``, but it can be any group.
The group membership information of an atom is contained in the *mask*
property of and atom and the bit corresponding to a given group is
stored in the groupbit variable which is defined in Fix base class:
.. code-block:: C++
for (int i = 0; i < nlocal; ++i) {
if (atom->mask[i] & groupbit) {
// Do all job here
}
}
Class Atom encapsulates atoms positions, velocities, forces, etc. User
can access them using particle index. Note, that particle indexes are
usually changed every few timesteps because of neighbor list rebuilds
and spatial sorting (to improve cache efficiency).
Let us consider another Fix example: We want to have a fix which stores
atoms position from previous time step in your fix. The local atoms
indexes may not be valid on the next iteration. In order to handle
this situation there are several methods which should be implemented:
- ``double memory_usage()``: return how much memory the fix uses (optional)
- ``void grow_arrays(int)``: do reallocation of the per particle arrays in your fix
- ``void copy_arrays(int i, int j, int delflag)``: copy i-th per-particle
information to j-th. Used when atom sorting is performed. if delflag is set
and atom j owns a body, move the body information to atom i.
- ``void set_arrays(int i)``: sets i-th particle related information to zero
Note, that if your class implements these methods, it must call add calls of
add_callback and delete_callback to constructor and destructor. Since we want
to store positions of atoms from previous timestep, we need to add
``double** xold`` to the header file. Than add allocation code
to the constructor:
.. code-block:: C++
FixSavePos::FixSavePos(LAMMPS *lmp, int narg, char **arg), xold(nullptr)
{
//...
memory->create(xold, atom->nmax, 3, "FixSavePos:x");
atom->add_callback(0);
}
FixSavePos::~FixSavePos() {
atom->delete_callback(id, 0);
memory->destroy(xold);
}
Implement the aforementioned methods:
.. code-block:: C++
double FixSavePos::memory_usage()
{
int nmax = atom->nmax;
double bytes = 0.0;
bytes += nmax * 3 * sizeof(double);
return bytes;
}
void FixSavePos::grow_arrays(int nmax)
{
memory->grow(xold, nmax, 3, "FixSavePos:xold");
}
void FixSavePos::copy_arrays(int i, int j, int delflag)
{
memcpy(xold[j], xold[i], sizeof(double) * 3);
}
void FixSavePos::set_arrays(int i)
{
memset(xold[i], 0, sizeof(double) * 3);
}
int FixSavePos::pack_exchange(int i, double *buf)
{
int m = 0;
buf[m++] = xold[i][0];
buf[m++] = xold[i][1];
buf[m++] = xold[i][2];
return m;
}
int FixSavePos::unpack_exchange(int nlocal, double *buf)
{
int m = 0;
xold[nlocal][0] = buf[m++];
xold[nlocal][1] = buf[m++];
xold[nlocal][2] = buf[m++];
return m;
}
Now, a little bit about memory allocation. We use the Memory class which
is just a bunch of template functions for allocating 1D and 2D
arrays. So you need to add include ``memory.h`` to have access to them.
Finally, if you need to write/read some global information used in
your fix to the restart file, you might do it by setting flag
``restart_global = 1`` in the constructor and implementing methods void
``write_restart(FILE *fp)`` and ``void restart(char *buf)``.
If, in addition, you want to write the per-atom property to restart
files additional settings and functions are needed:
- a fix flag indicating this needs to be set ``restart_peratom = 1;``
- ``atom->add_callback()`` and ``atom->delete_callback()`` must be called
a second time with the final argument set to 1 instead of 0 (indicating
restart processing instead of per-atom data memory management).
- the functions ``void pack_restart(int i, double *buf)`` and
``void unpack_restart(int nlocal, int nth)`` need to be implemented

View File

@ -6,23 +6,25 @@ the steps outlined below:
* Check the `New features and bug fixes
<https://lammps.sandia.gov/bug.html>`_ section of the `LAMMPS WWW site
<lws_>`_ to see if the bug has already been addressed in a patch.
<https://lammps.sandia.gov>`_ or the
`GitHub Releases page <https://github.com/lammps/lammps/releases>`_ to
see if the bug has already been addressed in a patch release.
* Check that your issue can be reproduced with the latest development
version of LAMMPS.
* Check the manual carefully to verify that the unexpected behavior you
are observing is indeed in conflict with the documentation
* Check the `GitHub Issue page <gip_>`_
* Check the `GitHub Issue page <https://github.com/lammps/lammps/issues>`_
if your issue has already been reported and if it is still open.
* Check the `GitHub Pull Requests page <https://github.com/lammps/pulls>`_
if there is already a fix for your bug pending.
* Check the `GitHub Pull Requests page <https://github.com/lammps/lammps/pulls>`_
to see if there is already a fix for your bug pending.
* Check the `mailing list archives <https://lammps.sandia.gov/mail.html>`_
to see if the issue has been discussed before.
If none of these steps yields any useful information, please file a new
bug report on the `GitHub Issue page <gip_>`_. The website will offer
you to select a suitable template with explanations and then you should
replace those explanations with the information that you can provide to
reproduce your issue.
bug report on the `GitHub Issue page <https://github.com/lammps/lammps/issues>`_.
The website will offer you to select a suitable template with explanations
and then you should replace those explanations with the information that
you can provide to reproduce your issue.
The most useful thing you can do to help us verify and fix a bug is to
isolate the problem. Run it on the smallest number of atoms and fewest
@ -33,7 +35,7 @@ Please avoid using binary restart files unless the issue requires it.
In the latter case you should also include an input deck to quickly
generate this restart from a data file or a simple additional input.
This input deck can be used with tools like a debugger or `valgrind
<valgrind_>`_ to further :doc:`debug the crash <Errors_debug>`.
<https://valgrind.org>`_ to further :doc:`debug the crash <Errors_debug>`.
You may also send an email to the LAMMPS mailing list at
"lammps-users at lists.sourceforge.net" describing the problem with the
@ -44,6 +46,3 @@ is overlooked and then forgotten. Issues on GitHub have to be explicitly
closed, so that will *guarantee* that at least one LAMMPS developer will
have looked at it.
.. _lws: https://lammps.sandia.gov
.. _gip: https://github.com/lammps/issues
.. _valgrind: https://valgrind.org

View File

@ -48,8 +48,10 @@ to see it on the screen. If you get an error like "Invalid ...
style", with ... being fix, compute, pair, etc, it means that you
mistyped the style name or that the command is part of an optional
package which was not compiled into your executable. The list of
available styles in your executable can be listed by using :doc:`the -h command-line swith <Run_options>`. The installation and
compilation of optional packages is explained on the :doc:`Build packages <Build_package>` doc page.
available styles in your executable can be listed by using
:doc:`the -h command-line switch <Run_options>`. The installation and
compilation of optional packages is explained on the
:doc:`Build packages <Build_package>` doc page.
For a given command, LAMMPS expects certain arguments in a specified
order. If you mess this up, LAMMPS will often flag the error, but it

View File

@ -502,10 +502,10 @@ Doc page with :doc:`WARNING messages <Errors_warnings>`
*Bond/react: Unknown section in map file*
Please ensure reaction map files are properly formatted.
*Bond/react: Atom affected by reaction too close to template edge*
*Bond/react: Atom/Bond type affected by reaction too close to template edge*
This means an atom which changes type or connectivity during the
reaction is too close to an 'edge' atom defined in the map
file. This could cause incorrect assignment of bonds, angle, etc.
file. This could cause incorrect assignment of bonds, angle, etc.
Generally, this means you must include more atoms in your templates,
such that there are at least two atoms between each atom involved in
the reaction and an edge atom.
@ -1903,6 +1903,12 @@ Doc page with :doc:`WARNING messages <Errors_warnings>`
*Compute %s does not allow use of dynamic group*
Dynamic groups have not yet been enabled for this compute.
*Compute for fix pafi does not calculate a local array*
Self-explanatory.
*Compute for fix pafi must have 9 fields per atom*
Self-explanatory.
*Compute ID for compute chunk /atom does not exist*
Self-explanatory.
@ -2999,9 +3005,6 @@ Doc page with :doc:`WARNING messages <Errors_warnings>`
*Dump image line requires atom style line*
Self-explanatory.
*Dump image persp option is not yet supported*
Self-explanatory.
*Dump image requires one snapshot per file*
Use a "\*" in the filename.
@ -5102,9 +5105,6 @@ Doc page with :doc:`WARNING messages <Errors_warnings>`
The file produced by dump image cannot be binary and must
be for a single processor.
*Invalid dump image persp value*
Persp value must be >= 0.0.
*Invalid dump image theta value*
Theta must be between 0.0 and 180.0 inclusive.
@ -5702,6 +5702,9 @@ Doc page with :doc:`WARNING messages <Errors_warnings>`
*Molecule file has dihedrals but no ndihedrals setting*
Self-explanatory.
*Molecule file has fragments but no nfragments setting*
Self-explanatory.
*Molecule file has impropers but no nimpropers setting*
Self-explanatory.
@ -5711,6 +5714,9 @@ Doc page with :doc:`WARNING messages <Errors_warnings>`
*Molecule file has no Body Integers section*
Self-explanatory.
*Molecule file has no Fragments section*
Self-explanatory.
*Molecule file has special flags but no bonds*
Self-explanatory.
@ -8104,9 +8110,6 @@ keyword to allow for additional bonds to be formed
*Variable for dump image center is invalid style*
Must be an equal-style variable.
*Variable for dump image persp is invalid style*
Must be an equal-style variable.
*Variable for dump image phi is invalid style*
Must be an equal-style variable.
@ -8247,9 +8250,6 @@ keyword to allow for additional bonds to be formed
*Variable name for dump image center does not exist*
Self-explanatory.
*Variable name for dump image persp does not exist*
Self-explanatory.
*Variable name for dump image phi does not exist*
Self-explanatory.

View File

@ -118,6 +118,24 @@ Doc page with :doc:`ERROR messages <Errors_messages>`
incorrect periodic images of atoms in interaction lists. To avoid, either use
:doc:`pair style zero <pair_zero>` with a suitable cutoff or use :doc:`comm_modify cutoff <comm_modify>`.
*Communication cutoff is shorter than a bond length based estimate. This may lead to errors.*
Since LAMMPS stores topology data with individual atoms, all atoms
comprising a bond, angle, dihedral or improper must be present on any
sub-domain that "owns" the atom with the information, either as a
local or a ghost atom. The communication cutoff is what determines up
to what distance from a sub-domain boundary ghost atoms are created.
The communication cutoff is by default the largest non-bonded cutoff
plus the neighbor skin distance, but for short or non-bonded cutoffs
and/or long bonds, this may not be sufficient. This warning indicates
that there is an increased risk of a simulation stopping unexpectedly
because of Bond/Angle/Dihedral/Improper atoms missing. It can be
silenced by manually setting the communication cutoff via
:doc:`comm_modify cutoff <comm_modify>`. However, since the
heuristic used to determine the estimate is not always accurate, it
is not changed automatically and the warning may be ignored depending
on the specific system being simulated.
*Communication cutoff is too small for SNAP micro load balancing, increased to %lf*
Self-explanatory.

View File

@ -27,7 +27,7 @@ be quickly post-processed into a movie using commands described on the
:doc:`dump image <dump_image>` doc page.
Animations of many of the examples can be viewed on the Movies section
of the `LAMMPS web site <lws_>`_.
of the `LAMMPS web site <https://lammps.sandia.gov/movies.html>`_.
There are two kinds of sub-directories in the examples folder. Lower
case named directories contain one or a few simple, quick-to-run
@ -223,4 +223,3 @@ instructions. See the :doc:`Packages_details <Packages_details>` doc
page for more info on specific USER packages.
.. _openkim: https://openkim.org
.. _lws: https://lammps.sandia.gov

211
doc/src/Fortran.rst Normal file
View File

@ -0,0 +1,211 @@
The ``LIBLAMMPS`` Fortran Module
********************************
The ``LIBLAMMPS`` module provides an interface to call LAMMPS from a
Fortran code. It is based on the LAMMPS C-library interface and
requires a Fortran 2003 compatible compiler to be compiled.
While C libraries have a defined binary interface (ABI) and can thus be
used from multiple compiler versions from different vendors for as long
as they are compatible with the hosting operating system, the same is
not true for Fortran codes. Thus the LAMMPS Fortran module needs to be
compiled alongside the code using it from the source code in
``fortran/lammps.f90``. When linking, you also need to
:doc:`link to the LAMMPS library <Build_link>`. A typical command line
for a simple program using the Fortran interface would be:
.. code-block:: bash
mpifort -o testlib.x lammps.f90 testlib.f90 -L. -llammps
Please note, that the MPI compiler wrapper is only required when the
calling the library from an MPI parallel code. Please also note the order
of the source files: the lammps.f90 file needs to be compiled first,
since it provides the ``LIBLAMMPS`` module that is imported by the
Fortran code using the interface.
.. versionadded:: 9Oct2020
.. admonition:: Work in Progress
:class: note
This Fortran module is work in progress and only the documented
functionality is currently available. The final implementation should
cover the entire range of functionality available in the C and
Python library interfaces.
.. note::
A contributed (and complete!) Fortran interface that is more
closely resembling the C-library interface is available
in the ``examples/COUPLE/fortran2`` folder. Please see the
``README`` file in that folder for more information about that
Fortran interface and how to contact its author and maintainer.
----------
Creating or deleting a LAMMPS object
************************************
With the Fortran interface the creation of a :cpp:class:`LAMMPS
<LAMMPS_NS::LAMMPS>` instance is included in the constructor for
creating the :f:func:`lammps` derived type. To import the definition of
that type and its type bound procedures you need to add a ``USE
LIBLAMMPS`` statement. Internally it will call either
:cpp:func:`lammps_open_fortran` or :cpp:func:`lammps_open_no_mpi` from
the C library API to create the class instance. All arguments are
optional and :cpp:func:`lammps_mpi_init` will be called automatically,
if it is needed. Similarly, a possible call to :cpp:func:`lammps_finalize`
is integrated into the :f:func:`close` function and triggered with
the optional logical argument set to ``.true.``. Here is a simple example:
.. code-block:: fortran
PROGRAM testlib
USE LIBLAMMPS ! include the LAMMPS library interface
TYPE(lammps) :: lmp ! derived type to hold LAMMPS instance
CHARACTER(len=*), DIMENSION(*), PARAMETER :: args = &
[ CHARACTER(len=12) :: 'liblammps', '-log', 'none' ]
! create a LAMMPS instance (and initialize MPI)
lmp = lammps(args)
! get and print numerical version code
PRINT*, 'LAMMPS Version: ', lmp%version()
! delete LAMMPS instance (and shuts down MPI)
CALL lmp%close(.true.)
END PROGRAM testlib
--------------------
Executing LAMMPS commands
=========================
Once a LAMMPS instance is created, it is possible to "drive" the LAMMPS
simulation by telling LAMMPS to read commands from a file, or pass
individual or multiple commands from strings or lists of strings. This
is done similar to how it is implemented in the `C-library
<pg_lib_execute>` interface. Before handing off the calls to the
C-library interface, the corresponding Fortran versions of the calls
(:f:func:`file`, :f:func:`command`, :f:func:`commands_list`, and
:f:func:`commands_string`) have to make a copy of the strings passed as
arguments so that they can be modified to be compatible with the
requirements of strings in C without affecting the original strings.
Those copies are automatically deleted after the functions return.
Below is a small demonstration of the uses of the different functions:
.. code-block:: fortran
PROGRAM testcmd
USE LIBLAMMPS
TYPE(lammps) :: lmp
CHARACTER(len=512) :: cmds
CHARACTER(len=40),ALLOCATABLE :: cmdlist(:)
CHARACTER(len=10) :: trimmed
INTEGER :: i
lmp = lammps()
CALL lmp%file('in.melt')
CALL lmp%command('variable zpos index 1.0')
! define 10 groups of 10 atoms each
ALLOCATE(cmdlist(10))
DO i=1,10
WRITE(trimmed,'(I10)') 10*i
WRITE(cmdlist(i),'(A,I1,A,I10,A,A)') &
'group g',i-1,' id ',10*(i-1)+1,':',ADJUSTL(trimmed)
END DO
CALL lmp%commands_list(cmdlist)
! run multiple commands from multi-line string
cmds = 'clear' // NEW_LINE('A') // &
'region box block 0 2 0 2 0 2' // NEW_LINE('A') // &
'create_box 1 box' // NEW_LINE('A') // &
'create_atoms 1 single 1.0 1.0 ${zpos}'
CALL lmp%commands_string(cmds)
CALL lmp%close()
END PROGRAM testcmd
---------------
The ``LIBLAMMPS`` module API
****************************
Below are the detailed descriptions of definitions and interfaces
of the contents of the ``LIBLAMMPS`` Fortran interface to LAMMPS.
.. f:type:: lammps
Derived type that is the general class of the Fortran interface.
It holds a reference to the :cpp:class:`LAMMPS <LAMMPS_NS::LAMMPS>` class instance
that any of the included calls are forwarded to.
:f c_ptr handle: reference to the LAMMPS class
:f close: :f:func:`close`
:f version: :f:func:`version`
:f file: :f:func:`file`
:f command: :f:func:`command`
:f commands_list: :f:func:`commands_list`
:f commands_string: :f:func:`commands_string`
.. f:function:: lammps(args[,comm])
This is the constructor for the Fortran class and will forward
the arguments to a call to either :cpp:func:`lammps_open_fortran`
or :cpp:func:`lammps_open_no_mpi`. If the LAMMPS library has been
compiled with MPI support, it will also initialize MPI, if it has
not already been initialized before.
The *args* argument with the list of command line parameters is
optional and so it the *comm* argument with the MPI communicator.
If *comm* is not provided, ``MPI_COMM_WORLD`` is assumed. For
more details please see the documentation of :cpp:func:`lammps_open`.
:p character(len=*) args(*) [optional]: arguments as list of strings
:o integer comm [optional]: MPI communicator
:r lammps: an instance of the :f:type:`lammps` derived type
.. f:subroutine:: close([finalize])
This method will close down the LAMMPS instance through calling
:cpp:func:`lammps_close`. If the *finalize* argument is present and
has a value of ``.true.``, then this subroutine also calls
:cpp:func:`lammps_mpi_finalize`.
:o logical finalize [optional]: shut down the MPI environment of the LAMMPS library if true.
.. f:function:: version()
This method returns the numeric LAMMPS version like :cpp:func:`lammps_version`
:r integer: LAMMPS version
--------
.. f:subroutine:: file(filename)
This method will call :cpp:func:`lammps_file` to have LAMMPS read
and process commands from a file.
:p character(len=*) filename: name of file with LAMMPS commands
.. f:subroutine:: command(cmd)
This method will call :cpp:func:`lammps_command` to have LAMMPS
execute a single command.
:p character(len=*) cmd: single LAMMPS command
.. f:subroutine:: commands_list(cmds)
This method will call :cpp:func:`lammps_commands_list` to have LAMMPS
execute a list of input lines.
:p character(len=*) cmd(*): list of LAMMPS input lines
.. f:subroutine:: commands_string(str)
This method will call :cpp:func:`lammps_commands_string` to have LAMMPS
execute a block of commands from a string.
:p character(len=*) str: LAMMPS input in string

View File

@ -3,24 +3,12 @@ Howto discussions
These doc pages describe how to perform various tasks with LAMMPS,
both for users and developers. The
`glossary <https://lammps.sandia.gov>`_ website page also lists MD
`glossary <https://lammps.sandia.gov/glossary.html>`_ website page also lists MD
terminology with links to corresponding LAMMPS manual pages. The
example input scripts included in the examples directory of the LAMMPS
distribution and highlighted on the :doc:`Examples <Examples>` doc page
also show how to setup and run various kinds of simulations.
Tutorials howto
===============
.. toctree::
:name: tutorials
:maxdepth: 1
Howto_cmake
Howto_github
Howto_pylammps
Howto_bash
General howto
=============
@ -94,3 +82,16 @@ Packages howto
Howto_drude2
Howto_manifold
Howto_spins
Tutorials howto
===============
.. toctree::
:name: tutorials
:maxdepth: 1
Howto_cmake
Howto_github
Howto_pylammps
Howto_wsl

View File

@ -6,14 +6,14 @@ Use the :doc:`dimension <dimension>` command to specify a 2d simulation.
Make the simulation box periodic in z via the :doc:`boundary <boundary>`
command. This is the default.
If using the :doc:`create box <create_box>` command to define a
If using the :doc:`create_box <create_box>` command to define a
simulation box, set the z dimensions narrow, but finite, so that the
create_atoms command will tile the 3d simulation box with a single z
plane of atoms - e.g.
:doc:`create_atoms <create_atoms>` command will fill the 3d simulation
box with a single z plane of atoms - e.g.
.. code-block:: LAMMPS
:doc:`create box <create_box>` 1 -10 10 -10 10 -0.25 0.25
create box 1 -10 10 -10 10 -0.25 0.25
If using the :doc:`read data <read_data>` command to read in a file of
atom coordinates, set the "zlo zhi" values to be finite but narrow,

View File

@ -1,264 +0,0 @@
Using LAMMPS with Bash on Windows
=================================
**written by Richard Berger**
----------
Starting with Windows 10 you can install Linux tools directly in Windows. This
allows you to compile LAMMPS following the same procedure as on a real Ubuntu
Linux installation. Software can be easily installed using the package manager
via apt-get and all files are accessible in both the Windows Explorer and your
Linux shell (bash). This avoids switching to a different operating system or
installing a virtual machine. Everything runs on Windows.
.. seealso::
You can find more detailed information at the `Windows Subsystem for Linux Installation Guide for Windows 10 <https://docs.microsoft.com/en-us/windows/wsl/install-win10>`_.
Installing Bash on Windows
--------------------------
Prerequisites
^^^^^^^^^^^^^
* Windows 10 (64bit only)
* Latest updates installed
Enable developer mode
^^^^^^^^^^^^^^^^^^^^^
You enable this feature by first opening Windows Settings and enabling
Developer mode. Go to the Windows settings and search for "developer". This
will allow you to install software which comes from outside of the Windows
Store. You might be prompted to reboot your compute. Please do so.
.. image:: JPG/bow_tutorial_01_small.png
:target: JPG/bow_tutorial_01.png
.. image:: JPG/bow_tutorial_02_small.png
:target: JPG/bow_tutorial_02.png
.. image:: JPG/bow_tutorial_03_small.png
:target: JPG/bow_tutorial_03.png
Install Windows Subsystem for Linux
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Next you must ensure that the Window Subsystem for Linux is installed. Again,
search for "enable windows features" in the Settings dialog. This opens a
dialog with a list of features you can install. Add a checkmark to Windows
Subsystem for Linux (Beta) and press OK.
.. image:: JPG/bow_tutorial_04_small.png
:target: JPG/bow_tutorial_04.png
.. image:: JPG/bow_tutorial_05.png
:target: JPG/bow_tutorial_05.png
Install Bash for Windows
^^^^^^^^^^^^^^^^^^^^^^^^
After installation completes, type "bash" in the Windows Start menu search.
Select the first found option. This will launch a command-line window which
will prompt you about installing Ubuntu on Windows. Confirm with "y" and press
enter. This will then download Ubuntu for Windows.
.. image:: JPG/bow_tutorial_06.png
.. image:: JPG/bow_tutorial_07.png
During installation, you will be asked for a new password. This will be used
for installing new software and running commands with sudo.
.. image:: JPG/bow_tutorial_08.png
Type exit to close the command-line window.
Go to the Start menu and type "bash" again. This time you will see a "Bash on
Ubuntu on Windows" Icon. Start this program.
.. image:: JPG/bow_tutorial_09.png
Congratulations, you have installed **Bash on Ubuntu on Windows**\ .
.. image:: JPG/bow_tutorial_10.png
----------
Compiling LAMMPS in Bash on Windows
-----------------------------------
The installation of LAMMPS in this environment is identical to working inside
of a real Ubuntu Linux installation. At the time writing, it uses Ubuntu 16.04.
Installing prerequisite packages
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
First upgrade all existing packages using
.. code-block:: bash
sudo apt update
sudo apt upgrade -y
Next install the following packages, which include compilers and libraries
needed for various LAMMPS features:
.. code-block:: bash
sudo apt install -y build-essential ccache gfortran openmpi-bin libopenmpi-dev libfftw3-dev libjpeg-dev libpng-dev python-dev python-virtualenv libblas-dev liblapack-dev libhdf5-serial-dev hdf5-tools
Files in Ubuntu on Windows
^^^^^^^^^^^^^^^^^^^^^^^^^^
When you launch "Bash on Ubuntu on Windows" you will start out in your Linux
user home directory /home/[username]\ . You can access your Windows user directory
using the /mnt/c/Users/[username] folder.
Download LAMMPS
^^^^^^^^^^^^^^^
Obtain a copy of the LAMMPS code and go into it using "cd"
Option 1: Downloading LAMMPS tarball using wget
"""""""""""""""""""""""""""""""""""""""""""""""
.. code-block:: bash
wget https://lammps.sandia.gov/tars/lammps-stable.tar.gz
tar xvzf lammps-stable.tar.gz
cd lammps-31Mar17
Option 2: Obtaining LAMMPS code from GitHub
"""""""""""""""""""""""""""""""""""""""""""
.. code-block:: bash
git clone https://github.com/lammps/lammps.git
cd lammps
Compiling LAMMPS
^^^^^^^^^^^^^^^^
At this point you can compile LAMMPS like on Ubuntu Linux.
Compiling serial version
""""""""""""""""""""""""
.. code-block:: bash
cd src/
make -j 4 serial
This will create an executable called lmp_serial in the src/ directory
Compiling MPI version
"""""""""""""""""""""
.. code-block:: bash
cd src/
make -j 4 mpi
This will create an executable called lmp_mpi in the src/ directory
----------
Finally, please note the absolute path of your src folder. You can get this using
.. code-block:: bash
pwd
or
.. code-block:: bash
echo $PWD
To run any examples you need the location of the executable. For now, let us
save this location in a temporary variable
.. code-block:: bash
LAMMPS_DIR=$PWD
----------
Running an example script
^^^^^^^^^^^^^^^^^^^^^^^^^
Once compiled you can execute some of the LAMMPS examples. Switch into the
examples/melt folder
.. code-block:: bash
cd ../examples/melt
The full path of the serial executable is $LAMMPS_DIR/lmp_serial, while the mpi
version is $LAMMPS_DIR/lmp_mpi. You can run the melt example with either
version as follows:
.. code-block:: bash
$LAMMPS_DIR/lmp_serial -in in.melt
or
.. code-block:: bash
mpirun -np 4 $LAMMPS_DIR/lmp_mpi -in in.melt
Note the use of our variable $LAMMPS_DIR, which expands into the full path of
the LAMMPS src folder we saved earlier.
Adding your executable directory to your PATH
"""""""""""""""""""""""""""""""""""""""""""""
You can avoid having to type the full path of your LAMMPS binary by adding its
parent folder to the PATH environment variable as follows:
.. code-block:: bash
export PATH=$LAMMPS_DIR:$PATH
Input scripts can then be run like this:
.. code-block:: bash
lmp_serial -in in.melt
or
.. code-block:: bash
mpirun -np 4 lmp_mpi -in in.melt
However, this PATH variable will not persist if you close your bash window.
To persist this setting edit the $HOME/.bashrc file using your favorite editor
and add this line
.. code-block:: bash
export PATH=/full/path/to/your/lammps/src:$PATH
**Example:**
For an executable lmp_serial with a full path
.. code-block:: bash
/home/richard/lammps/src/lmp_serial
the PATH variable should be
.. code-block:: bash
export PATH=/home/richard/lammps/src:$PATH
.. note::
This should give you a jump start when trying to run LAMMPS on Windows.
To become effective in this environment I encourage you to look into Linux
tutorials explaining Bash and Basic Unix commands (e.g., `Linux Journey <https://linuxjourney.com>`_)

View File

@ -102,8 +102,8 @@ documentation for the formula it computes.
* :doc:`pair_style <pair_buck>` buck/coul/cut
* :doc:`pair_style <pair_buck>` buck/coul/long
* :doc:`pair_style <pair_lj>` lj/cut
* :doc:`pair_style <pair_lj>` lj/cut/coul/cut
* :doc:`pair_style <pair_lj>` lj/cut/coul/long
* :doc:`pair_style <pair_lj_cut_coul>` lj/cut/coul/cut
* :doc:`pair_style <pair_lj_cut_coul>` lj/cut/coul/long
* :doc:`pair_style <pair_hbond_dreiding>` hbond/dreiding/lj
* :doc:`pair_style <pair_hbond_dreiding>` hbond/dreiding/morse

View File

@ -9,13 +9,15 @@ surface meshes of discrete points, collections of sub-particles,
deformable objects, etc. Note that other kinds of finite-size
spherical and aspherical particles are also supported by LAMMPS, such
as spheres, ellipsoids, line segments, and triangles, but they are
simpler entities that body particles. See the :doc:`Howto spherical <Howto_spherical>` doc page for a general overview of all
these particle types.
simpler entities than body particles. See the :doc:`Howto spherical
<Howto_spherical>` doc page for a general overview of all these
particle types.
Body particles are used via the :doc:`atom_style body <atom_style>`
command. It takes a body style as an argument. The current body
styles supported by LAMMPS are as follows. The name in the first
column is used as the *bstyle* argument for the :doc:`atom_style body <atom_style>` command.
column is used as the *bstyle* argument for the :doc:`atom_style body
<atom_style>` command.
+----------------------+---------------------------------------------------+
| *nparticle* | rigid body with N sub-particles |
@ -30,8 +32,9 @@ thus how they can be used to compute pairwise body/body or
bond/non-body (point particle) interactions. More details of each
style are described below.
More styles may be added in the future. See the :doc:`Modify body <Modify_body>` doc page for details on how to add a new body
style to the code.
More styles may be added in the future. See the
:doc:`page on creating new body styles <Modify_body>` for details on
how to add a new body style to the code.
----------
@ -55,10 +58,10 @@ interactions, building neighbor lists, migrating particles between
processors, output of particles to a dump file, etc. This means that
interactions between pairs of bodies or between a body and non-body
(point) particle need to be encoded in an appropriate pair style. If
such a pair style were to mimic the :doc:`fix rigid <fix_rigid>` model,
it would need to loop over the entire collection of interactions
between pairs of simple particles within the two bodies, each time a
single body/body interaction was computed.
such a pair style were to mimic the :doc:`fix rigid <fix_rigid>`
model, it would need to loop over the entire collection of
interactions between pairs of simple particles within the two bodies,
each time a single body/body interaction was computed.
Thus it only makes sense to use body particles and develop such a pair
style, when particle/particle interactions are more complex than what
@ -160,27 +163,6 @@ of the body particle.
The :doc:`pair_style body/nparticle <pair_body_nparticle>` command can be used
with this body style to compute body/body and body/non-body interactions.
For output purposes via the :doc:`compute body/local <compute_body_local>` and :doc:`dump local <dump>`
commands, this body style produces one datum for each of the N
sub-particles in a body particle. The datum has 3 values:
.. parsed-literal::
1 = x position of sub-particle
2 = y position of sub-particle
3 = z position of sub-particle
These values are the current position of the sub-particle within the
simulation domain, not a displacement from the center-of-mass (COM) of
the body particle itself. These values are calculated using the
current COM and orientation of the body particle.
For images created by the :doc:`dump image <dump_image>` command, if the
*body* keyword is set, then each body particle is drawn as a
collection of spheres, one for each sub-particle. The size of each
sphere is determined by the *bflag1* parameter for the *body* keyword.
The *bflag2* argument is ignored.
----------
**Specifics of body style rounded/polygon:**
@ -208,7 +190,7 @@ The Nmin and Nmax arguments are used to bound the size of data
structures used internally by each particle.
When the :doc:`read_data <read_data>` command reads a data file for this
body style, the following information must be provided for each entry
body style, the following information must be provided for each body
in the *Bodies* section of the data file:
.. parsed-literal::
@ -219,21 +201,25 @@ in the *Bodies* section of the data file:
x1 y1 z1
...
xN yN zN
i j j k k ...
diameter
where M = 6 + 3\*N + 2\*N + 1, and N is the number of vertices in the
body particle.
where M = 6 + 3\*N + 1, and N is the number of vertices in the body
particle.
The integer line has a single value N. The floating point line(s)
list 6 moments of inertia followed by the coordinates of the N
list 6 moments of inertia, followed by the coordinates of the N
vertices (x1 to zN) as 3N values (with z = 0.0 for each), followed by
2N vertex indices corresponding to the end points of the N edges,
followed by a single diameter value = the rounded diameter of the
circle that surrounds each vertex. The diameter value can be different
for each body particle. These floating-point values can be listed on
as many lines as you wish; see the :doc:`read_data <read_data>` command
for more details.
a diameter value = the rounded diameter of the circle that surrounds
each vertex. The diameter value can be different for each body
particle. These floating-point values can be listed on as many lines
as you wish; see the :doc:`read_data <read_data>` command for more
details.
.. note::
It is important that the vertices for each polygonal body particle be
listed in order around its perimeter, so that edges can be inferred.
LAMMPS does not check that this is the case.
The 6 moments of inertia (ixx,iyy,izz,ixy,ixz,iyz) should be the
values consistent with the current orientation of the rigid body
@ -260,10 +246,6 @@ is consistent with the 6 moments of inertia: ixx iyy izz ixy ixz iyz =
-0.7071 0.7071 0
0.7071 0.7071 0
0.7071 -0.7071 0
0 1
1 2
2 3
3 0
1.0
A rod in 2D, whose length is 4.0, mass 1.0, rounded at two ends
@ -345,8 +327,10 @@ in the *Bodies* section of the data file:
1 2 3 4
diameter
where M = 6 + 3\*N + 2\*E + 4\*F + 1, and N is the number of vertices in
the body particle, E = number of edges, F = number of faces.
where M = 6 + 3\*N + 2\*E + 4\*F + 1, and N is the number of vertices
in the body particle, E = number of edges, F = number of faces. For N
= 1 or 2, the format is simpler. E and F are ignored and no edges or
faces are listed, so that M = 6 + 3\*N + 1.
The integer line has three values: number of vertices (N), number of
edges (E) and number of faces (F). The floating point line(s) list 6
@ -356,16 +340,26 @@ the end points of the E edges, then 4\*F vertex indices defining F
faces. The last value is the diameter value = the rounded diameter of
the sphere that surrounds each vertex. The diameter value can be
different for each body particle. These floating-point values can be
listed on as many lines as you wish; see the
:doc:`read_data <read_data>` command for more details. Because the
maximum number of vertices per face is hard-coded to be 4
(i.e. quadrilaterals), faces with more than 4 vertices need to be
split into triangles or quadrilaterals. For triangular faces, the
last vertex index should be set to -1.
listed on as many lines as you wish; see the :doc:`read_data
<read_data>` command for more details.
The ordering of the 4 vertices within a face should follow
the right-hand rule so that the normal vector of the face points
outwards from the center of mass.
Note that vertices are numbered from 0 to N-1 inclusive. The order of
the 2 vertices in each edge does not matter. Faces can be triangles
or quadrilaterals. In both cases 4 vertices must be specified. For a
triangle the 4th vertex is -1. The 4 vertices within each triangle or
quadrilateral face should be ordered by the right-hand rule so that
the normal vector of the face points outwards from the center of mass.
For polyhedron with faces with more than 4 vertices, you should split
the complex face into multiple simple faces, each of which is a
triangle or quadrilateral.
.. note::
If a face is a quadrilateral then its 4 vertices must be co-planar.
LAMMPS does not check that this is the case. If you have a quad-face
of a polyhedron that is not planar (e.g. a cube whose vertices have
been randomly displaced), then you should represent the single quad
face as two triangle faces instead.
The 6 moments of inertia (ixx,iyy,izz,ixy,ixz,iyz) should be the
values consistent with the current orientation of the rigid body
@ -421,8 +415,8 @@ by circles of diameter 0.5, is specified as follows:
.. parsed-literal::
1 1 13
2
1 3 13
2 1 1
0 1.33333 1.33333 0 0 0
-2 0 0
2 0 0
@ -432,27 +426,34 @@ A sphere whose diameter is 3.0 and mass 1.0, is specified as follows:
.. parsed-literal::
1 1 10
1
1 3 10
1 1 1
0.9 0.9 0.9 0 0 0
0 0 0
3.0
The :doc:`pair_style body/rounded/polhedron <pair_body_rounded_polyhedron>` command can
be used with this body style to compute body/body interactions. The
:doc:`fix wall/body/polyhedron <fix_wall_body_polygon>` command can be
used with this body style to compute the interaction of body particles
with a wall.
The number of edges and faces for a rod or sphere must be listed,
but is ignored.
The :doc:`pair_style body/rounded/polhedron
<pair_body_rounded_polyhedron>` command can be used with this body
style to compute body/body interactions. The :doc:`fix
wall/body/polyhedron <fix_wall_body_polygon>` command can be used with
this body style to compute the interaction of body particles with a
wall.
----------
For output purposes via the :doc:`compute body/local <compute_body_local>` and :doc:`dump local <dump>`
commands, this body style produces one datum for each of the N
sub-particles in a body particle. The datum has 3 values:
**Output specifics for all body styles:**
For the :doc:`compute body/local <compute_body_local>` and :doc:`dump
local <dump>` commands, all 3 of the body styles described on his page
produces one datum for each of the N vertices (of sub-particles) in a
body particle. The datum has 3 values:
.. parsed-literal::
1 = x position of vertex
1 = x position of vertex (or sub-particle)
2 = y position of vertex
3 = z position of vertex
@ -461,15 +462,29 @@ simulation domain, not a displacement from the center-of-mass (COM) of
the body particle itself. These values are calculated using the
current COM and orientation of the body particle.
For images created by the :doc:`dump image <dump_image>` command, if the
*body* keyword is set, then each body particle is drawn as a polygon
consisting of N line segments. Note that the line segments are drawn
between the N vertices, which does not correspond exactly to the
physical extent of the body (because the :doc:`pair_style rounded/polygon <pair_body_rounded_polygon>` defines finite-size
spheres at those point and the line segments between the spheres are
tangent to the spheres). The drawn diameter of each line segment is
determined by the *bflag1* parameter for the *body* keyword. The
*bflag2* argument is ignored.
The :doc:`dump image <dump_image>` command and its *body* keyword can
be used to render body particles.
For the *nparticle* body style, each body is drawn as a
collection of spheres, one for each sub-particle. The size of each
sphere is determined by the *bflag1* parameter for the *body* keyword.
The *bflag2* argument is ignored.
For the *rounded/polygon* body style, each body is drawn as a polygon
with N line segments. For the *rounded/polyhedron* body style, each
face of each body is drawn as a polygon with N line segments. The
drawn diameter of each line segment is determined by the *bflag1*
parameter for the *body* keyword. The *bflag2* argument is ignored.
Note that for both the *rounded/polygon* and *rounded/polyhedron*
styles, line segments are drawn between the pairs of vertices.
Depending on the diameters of the line segments this may be slightly
different than the physical extent of the body as calculated by the
:doc:`pair_style rounded/polygon <pair_body_rounded_polygon>` or
:doc:`pair_style rounded/polyhedron <pair_body_rounded_polyhedron>`
commands. Conceptually, the pair styles define the surface of a 2d or
3d body by lines or planes that are tangent to the finite-size spheres
of specified diameter which are placed on each vertex position.
----------

View File

@ -198,7 +198,8 @@ explained on the :doc:`compute chunk/spread/atom <compute_chunk_spread_atom>` co
(7) An example for using one set of per-chunk values for molecule
chunks, to create a second set of micelle-scale chunks (clustered
molecules, due to hydrophobicity), is explained on the :doc:`compute chunk/reduce <compute_reduce_chunk>` command doc page.
molecules, due to hydrophobicity), is explained on the
:doc:`compute reduce/chunk <compute_reduce_chunk>` command doc page.
(8) An example for using one set of per-chunk values (dipole moment
vectors) for molecule chunks, spreading the values to each atom in

View File

@ -47,7 +47,7 @@ using a shell like Bash.
- Linux: any Terminal window will work
- MacOS X: launch the Terminal application.
- Windows 10: install and run the :doc:`Windows subsystem for Linux <Howto_bash>`
- Windows 10: install and run the :doc:`Windows Subsystem for Linux <Howto_wsl>`
We also assume that you have downloaded and unpacked a recent LAMMPS source code package
or used Git to create a clone of the LAMMPS sources on your compilation machine.
@ -191,19 +191,19 @@ You start the command ``ccmake ../cmake`` in the ``build`` folder.
.. list-table::
* - .. figure:: JPG/ccmake-initial.png
:target: JPG/ccmake-initial.png
:scale: 33%
:align: center
Initial ``ccmake`` screen
- .. figure:: JPG/ccmake-config.png
:target: JPG/ccmake-config.png
:scale: 33%
:align: center
Configure output of ``ccmake``
- .. figure:: JPG/ccmake-options.png
:target: JPG/ccmake-options.png
:scale: 33%
:align: center
Options screen of ``ccmake``
@ -236,19 +236,19 @@ not required, it can also be entered from the GUI.
.. list-table::
* - .. figure:: JPG/cmake-gui-initial.png
:target: JPG/cmake-gui-initial.png
:scale: 40%
:align: center
Initial ``cmake-gui`` screen
- .. figure:: JPG/cmake-gui-popup.png
:target: JPG/cmake-gui-popup.png
:scale: 60%
:align: center
Generator selection in ``cmake-gui``
- .. figure:: JPG/cmake-gui-options.png
:target: JPG/cmake-gui-options.png
:scale: 40%
:align: center
Options screen of ``cmake-gui``
@ -328,10 +328,12 @@ Some common LAMMPS specific variables
- build LAMMPS with OpenMP support (default: ``on`` if compiler supports OpenMP fully, else ``off``)
* - ``BUILD_TOOLS``
- compile some additional executables from the ``tools`` folder (default: ``off``)
* - ``BUILD_LAMMPS_SHELL``
- compile the LAMMPS shell from the ``tools/lammps-shell`` folder (default: ``off``)
* - ``BUILD_DOC``
- include building the HTML format documentation for packaging/installing (default: ``off``)
* - ``CMAKE_TUNE_FLAGS``
- common compiler flags, for optimization or instrumentation (default: compiler specific)
- common compiler flags, for optimization or instrumentation (default:)
* - ``LAMMPS_MACHINE``
- when set to ``name`` the LAMMPS executable and library will be called ``lmp_name`` and ``liblammps_name.a``
* - ``LAMMPS_EXCEPTIONS``

View File

@ -12,96 +12,52 @@ LAMMPS can be coupled to other codes in at least 4 ways. Each has
advantages and disadvantages, which you will have to think about in the
context of your application.
----------
1. Define a new :doc:`fix <fix>` command that calls the other code. In
this scenario, LAMMPS is the driver code. During timestepping,
the fix is invoked, and can make library calls to the other code,
which has been linked to LAMMPS as a library. This is the way how the
:ref:`LATTE <PKG-LATTE>` package, which performs density-functional
tight-binding calculations using the `LATTE software <https://github.com/lanl/LATTE>`_
to compute forces, is hooked to LAMMPS.
See the :doc:`fix latte <fix_latte>` command for more details.
Also see the :doc:`Modify <Modify>` doc pages for info on how to
add a new fix to LAMMPS.
(1) Define a new :doc:`fix <fix>` command that calls the other code. In
this scenario, LAMMPS is the driver code. During its timestepping,
the fix is invoked, and can make library calls to the other code,
which has been linked to LAMMPS as a library. This is the way the
`POEMS <poems_>`_ package that performs constrained rigid-body motion on
groups of atoms is hooked to LAMMPS. See the :doc:`fix poems <fix_poems>` command for more details. See the
:doc:`Modify <Modify>` doc pages for info on how to add a new fix to
LAMMPS.
.. spacer
.. _poems: http://www.rpi.edu/~anderk5/lab
2. Define a new LAMMPS command that calls the other code. This is
conceptually similar to method (1), but in this case LAMMPS and the
other code are on a more equal footing. Note that now the other code
is not called during the timestepping of a LAMMPS run, but between
runs. The LAMMPS input script can be used to alternate LAMMPS runs
with calls to the other code, invoked via the new command. The
:doc:`run <run>` command facilitates this with its *every* option,
which makes it easy to run a few steps, invoke the command, run a few
steps, invoke the command, etc.
----------
In this scenario, the other code can be called as a library, as in
1., or it could be a stand-alone code, invoked by a system() call
made by the command (assuming your parallel machine allows one or
more processors to start up another program). In the latter case the
stand-alone code could communicate with LAMMPS through files that the
command writes and reads.
(2) Define a new LAMMPS command that calls the other code. This is
conceptually similar to method (1), but in this case LAMMPS and the
other code are on a more equal footing. Note that now the other code
is not called during the timestepping of a LAMMPS run, but between
runs. The LAMMPS input script can be used to alternate LAMMPS runs
with calls to the other code, invoked via the new command. The
:doc:`run <run>` command facilitates this with its *every* option, which
makes it easy to run a few steps, invoke the command, run a few steps,
invoke the command, etc.
See the :doc:`Modify command <Modify_command>` doc page for info on how
to add a new command to LAMMPS.
In this scenario, the other code can be called as a library, as in
(1), or it could be a stand-alone code, invoked by a system() call
made by the command (assuming your parallel machine allows one or more
processors to start up another program). In the latter case the
stand-alone code could communicate with LAMMPS through files that the
command writes and reads.
.. spacer
See the :doc:`Modify command <Modify_command>` doc page for info on how
to add a new command to LAMMPS.
3. Use LAMMPS as a library called by another code. In this case the
other code is the driver and calls LAMMPS as needed. Or a wrapper
code could link and call both LAMMPS and another code as libraries.
Again, the :doc:`run <run>` command has options that allow it to be
invoked with minimal overhead (no setup or clean-up) if you wish to
do multiple short runs, driven by another program. Details about
using the library interface are given in the :doc:`library API
<Library>` documentation.
----------
.. spacer
(3) Use LAMMPS as a library called by another code. In this case the
other code is the driver and calls LAMMPS as needed. Or a wrapper
code could link and call both LAMMPS and another code as libraries.
Again, the :doc:`run <run>` command has options that allow it to be
invoked with minimal overhead (no setup or clean-up) if you wish to do
multiple short runs, driven by another program.
Examples of driver codes that call LAMMPS as a library are included in
the examples/COUPLE directory of the LAMMPS distribution; see
examples/COUPLE/README for more details:
* simple: simple driver programs in C++ and C which invoke LAMMPS as a
library
* plugin: simple driver program in C which invokes LAMMPS as a plugin
from a shared library.
* lammps_quest: coupling of LAMMPS and `Quest <quest_>`_, to run classical
MD with quantum forces calculated by a density functional code
* lammps_spparks: coupling of LAMMPS and `SPPARKS <spparks_>`_, to couple
a kinetic Monte Carlo model for grain growth using MD to calculate
strain induced across grain boundaries
.. _quest: http://dft.sandia.gov/Quest
.. _spparks: http://www.sandia.gov/~sjplimp/spparks.html
The :doc:`Build basics <Build_basics>` doc page describes how to build
LAMMPS as a library. Once this is done, you can interface with LAMMPS
either via C++, C, Fortran, or Python (or any other language that
supports a vanilla C-like interface). For example, from C++ you could
create one (or more) "instances" of LAMMPS, pass it an input script to
process, or execute individual commands, all by invoking the correct
class methods in LAMMPS. From C or Fortran you can make function
calls to do the same things. See the :doc:`Python <Python_head>` doc
pages for a description of the Python wrapper provided with LAMMPS
that operates through the LAMMPS library interface.
The files src/library.cpp and library.h contain the C-style interface
to LAMMPS. See the :doc:`Howto library <Howto_library>` doc page for a
description of the interface and how to extend it for your needs.
Note that the lammps_open() function that creates an instance of
LAMMPS takes an MPI communicator as an argument. This means that
instance of LAMMPS will run on the set of processors in the
communicator. Thus the calling code can run LAMMPS on all or a subset
of processors. For example, a wrapper script might decide to
alternate between LAMMPS and another code, allowing them both to run
on all the processors. Or it might allocate half the processors to
LAMMPS and half to the other code and run both codes simultaneously
before syncing them up periodically. Or it might instantiate multiple
instances of LAMMPS to perform different calculations.
----------
(4) Couple LAMMPS with another code in a client/server mode. This is
described on the :doc:`Howto client/server <Howto_client_server>` doc
page.
4. Couple LAMMPS with another code in a client/server mode. This is
described on the :doc:`Howto client/server <Howto_client_server>` doc
page.

View File

@ -29,7 +29,7 @@ molecular systems (:ref:`Lamoureux and Roux <howto-Lamoureux>`):
to the total charge of the core atom).
A detailed tutorial covering the usage of Drude induced dipoles in
LAMMPS is on the :doc:`Howto drude2e <Howto_drude2>` doc page.
LAMMPS is on the :doc:`here <Howto_drude2>`.
As with the core-shell model, the cores and Drude particles should
appear in the data file as standard atoms. The same holds for the

View File

@ -377,7 +377,7 @@ For our phenol example, the groups would be defined as
Note that with the fixes *drude/transform*\ , it is not required to
specify *comm_modify vel yes* because the fixes do it anyway (several
times and for the forces also). To avoid the flying ice cube artifact
:ref:`(Lamoureux) <Lamoureux2>`, where the atoms progressively freeze and the
:ref:`(Lamoureux and Roux) <Lamoureux2>`, where the atoms progressively freeze and the
center of mass of the whole system drifts faster and faster, the *fix
momentum* can be used. For instance:
@ -456,7 +456,7 @@ NPT ensemble using Nose-Hoover thermostat:
.. _Lamoureux2:
**(Lamoureux)** Lamoureux and Roux, J Chem Phys, 119, 3025-3039 (2003)
**(Lamoureux and Roux)** Lamoureux and Roux, J Chem Phys, 119, 3025-3039 (2003)
.. _Schroeder:

Some files were not shown because too many files have changed in this diff Show More