Compare commits

..

795 Commits

Author SHA1 Message Date
2a068b248a Merge pull request #4645 from akohlmey/improve-tests-for-set
Add or improve unit test programs to improve test coverage and specifically check recent additions
2025-07-16 20:13:37 -04:00
58948b71a9 add tests for run command 2025-07-16 17:50:15 -04:00
f80b015e27 output message of incorrect exceptions 2025-07-16 17:50:05 -04:00
d1d8a019f9 improve error messages for run command 2025-07-16 17:49:15 -04:00
ab6de4c384 test velocity command 2025-07-16 14:17:32 -04:00
13d3cfa2b6 more test coverage for utils::bounds() 2025-07-16 12:52:18 -04:00
3daa0c0726 add tests for utils::logical() and utils::*numeric() 2025-07-16 09:54:25 -04:00
b37ebc6b33 add tests for utils::check_packages_for_style() 2025-07-16 07:23:41 -04:00
d542651d60 consolidate redundant functionality into one function 2025-07-16 07:15:42 -04:00
a19cb93558 add test for utils::point_to_error() 2025-07-16 04:41:37 -04:00
88cb95f2ad add tests for utils::print() with/without file pointer and with/without format 2025-07-15 20:04:47 -04:00
8c564460e6 Merge branch 'develop' into improve-tests-for-set 2025-07-15 19:32:02 -04:00
351df5488f Merge pull request #4660 from akohlmey/remove-deprecation-warnings
Remove various deprecation and removal warnings for the stable release
2025-07-15 14:10:28 -04:00
2584db928d Merge pull request #4591 from VeeEM/fix-elstop-kokkos
Create kokkos version of fix electron stopping
2025-07-15 13:48:41 -04:00
d555b88cb1 Merge pull request #4573 from ndtrung81/kokkos-vector-size
Support setting threads per atom with neigh/thread on with the KOKKOS package
2025-07-15 12:21:30 -04:00
a1f21f9ea5 Update GNU Makefile build 2025-07-15 09:09:53 -06:00
41987dd20f Merge branch 'develop' of github.com:lammps/lammps into fix-elstop-kokkos 2025-07-15 09:07:22 -06:00
7335aa7046 Add error checks to prevent unexpected behavior 2025-07-15 09:03:28 -06:00
90e59e8484 Merge branch 'develop' of github.com:lammps/lammps into kokkos-vector-size 2025-07-15 08:54:12 -06:00
da148ac331 Remove various deprecation and removal warnings for the stable release 2025-07-15 07:12:42 -04:00
f79dd13c9b Merge pull request #4655 from jmgoff/mliap_indexing
updated indexing for mliap ace and other small fixes
2025-07-15 02:28:40 -04:00
4bc3edc94d Merge pull request #4601 from weinbe2/feature/batch-snap-ilp
SNAP/Kokkos work batching and instruction-level parallelism optimizations
2025-07-15 00:53:23 -04:00
e6ca347b5c Merge branch 'feature/batch-snap-ilp' of github.com:weinbe2/lammps into feature/batch-snap-ilp 2025-07-14 22:20:03 -06:00
151b713a60 whitespace 2025-07-14 22:19:55 -06:00
73eaa41af0 Merge pull request #4659 from stanmoore1/kk_update_4.6.2
Update Kokkos library in LAMMPS to v4.6.2
2025-07-14 23:46:54 -04:00
4995cd372d Merge pull request #4657 from yotamfe/bosonic-pimd-doc
Documentation for fix pimd/*/bosonic
2025-07-14 22:38:19 -04:00
8d5c50db1f Merge branch 'develop' into feature/batch-snap-ilp 2025-07-14 21:40:47 -04:00
929bc35133 Added various documentation about the *_batch values to pair_snap_kokkos.h 2025-07-14 21:34:13 -04:00
af1d4b7bf9 Added self to contributors list (a few years late) 2025-07-14 21:25:02 -04:00
65f8f8695f Added documentation on initializing ulist_wrapper in evaluate_ui_jbend 2025-07-14 21:24:17 -04:00
dcdd57c130 Merge pull request #4658 from evoyiatzis/patch-1
Improve text in compute stress/mop rst file
2025-07-14 21:15:22 -04:00
625811cc11 Clean up an intermediate comment in compute_sna_grid_kokkos.h 2025-07-14 21:09:22 -04:00
f8124ebe4c Merge pull request #4615 from akohlmey/roll-back-neighbor-swap
Roll back neighbor swap changes and flag items that need fixing
2025-07-14 20:43:13 -04:00
587be04ebc Tuning for AMD GPUs 2025-07-14 15:05:29 -07:00
a6653a2097 Update docs 2025-07-14 14:16:21 -06:00
e2a1e6459f Revert changes to Makefile 2025-07-14 14:11:40 -06:00
51383ede3d Update cmake 2025-07-14 13:59:57 -06:00
1a7fdf0ab2 Update Kokkos library in LAMMPS to v4.6.2 2025-07-14 13:53:42 -06:00
37253a21e3 Merge branch 'develop' of github.com:lammps/lammps into feature/batch-snap-ilp 2025-07-14 13:40:37 -06:00
b0ae7f8112 Fix warning by removing parentheses 2025-07-14 13:40:29 -06:00
4ff44d2a2f remove whitespace 2025-07-13 21:38:39 +02:00
4112954399 Improve text and use consistent symbols for the local stress 2025-07-13 21:33:37 +02:00
c6f788df01 missing whitespace 2025-07-13 20:37:11 +03:00
58b367dcdd trailing whitespace 2025-07-13 20:35:53 +03:00
6296d5bab6 typo 2025-07-13 19:56:28 +03:00
5382f9c645 integrate bosonic pimd documentation removed at fcb2eee686 2025-07-13 19:12:11 +03:00
919ef6d369 Merge branch 'develop' into mliap_indexing 2025-07-12 06:39:13 -04:00
88b56e0668 Remove statement without effect 2025-07-12 06:38:21 -04:00
d863b4c55f Merge branch 'develop' into roll-back-neighbor-swap 2025-07-11 21:03:03 -04:00
d34d6b79e3 Merge pull request #4653 from akohlmey/collected-small-changes
Collected small changes and fixes
2025-07-11 21:01:40 -04:00
e58290ee08 small doc update 2025-07-11 19:43:35 -04:00
906e3fd070 port support for per-type masses over from fix neighbor/swap 2025-07-11 19:18:28 -04:00
2a87321554 Merge branch 'collected-small-changes' of github.com:akohlmey/lammps into collected-small-changes 2025-07-11 18:47:53 -04:00
47a0fe90ec make Atom::set_mass() as called from pair styles compatible with per-atom masses 2025-07-11 18:47:07 -04:00
363ad54383 make fix neighbor/swap compatible with per-atom masses 2025-07-11 18:45:53 -04:00
7a739d03f6 Merge pull request #4651 from akohlmey/lammps-gui-improvements
LAMMPS-GUI Improvements
2025-07-11 17:41:12 -04:00
0e6991659f Merge branch 'develop' of github.com:lammps/lammps into feature/batch-snap-ilp 2025-07-11 13:09:16 -07:00
9d15c19387 Merge pull request #4642 from evoyiatzis/patch-1
Fix parallel execution of bonds for compute stress/mop and stress/mop/profile
2025-07-11 13:34:11 -04:00
6152906deb Revert "Handle per-atom masses"
This reverts commit 29dc28c615.
2025-07-11 13:01:08 -04:00
29dc28c615 Handle per-atom masses 2025-07-11 10:44:19 -06:00
6d335fb5a6 Fixed assignment of local i in pick_i_swap_atom. i, j should both be owned not ghost atoms on swapping procs 2025-07-11 10:26:36 -06:00
8d4615f96f Fix issues in GNU Makefile build system with KOKKOS package 2025-07-11 09:00:01 -06:00
4a1a932df6 Merge branch 'develop' into patch-1 2025-07-11 15:43:07 +02:00
9b42419446 fix logic bug 2025-07-11 07:09:28 -04:00
1b3ebcc857 account for all large memory allocations 2025-07-11 06:44:55 -04:00
3efdf22850 use memory->create() and memory->destroy() consistently
memory->smalloc() and memory->sfree() are not type-safe
2025-07-11 06:35:53 -04:00
1ff281dd3c make sure i is initialized, use comm->me instead of calling MPI_Comm_rank() 2025-07-11 06:34:47 -04:00
491f5d96b8 id_center should be of type tagint 2025-07-11 06:33:46 -04:00
bc3c85b6a4 re-add fix neighbor/swap doc page 2025-07-11 06:20:57 -04:00
efd0510873 update example outputs 2025-07-11 06:00:34 -04:00
5eb61491f0 Merge branch 'develop' into roll-back-neighbor-swap 2025-07-11 05:54:47 -04:00
192901f6d0 add sanity check to error out when the index picking fails. 2025-07-11 05:54:36 -04:00
4ed5e585c1 silence some warnings, either by changing the code or adding // NOLINT comments 2025-07-11 04:56:13 -04:00
72b5f21c57 correct implementation of restart for fix sprint/chunk 2025-07-11 04:42:38 -04:00
57d4c472a0 Updated pick_i_swap_atom for MPI_Bcast to avoid memory access leak 2025-07-11 02:39:57 -06:00
3e8807bee0 Merge branch 'develop' into collected-small-changes 2025-07-11 00:10:01 -04:00
b751add30b Merge remote-tracking branch 'github/develop' into lammps-gui-improvements 2025-07-11 00:06:52 -04:00
5fc24a8ba3 Merge pull request #4654 from akohlmey/clang-tidy-updates
Apply code modernization suggestions from clang-tidy
2025-07-11 00:06:18 -04:00
fd410779ac silence compiler warnings and apply small corrections 2025-07-11 00:02:53 -04:00
597346413e add 'make upgrade' target to doc makefile to update python packages in docenv 2025-07-10 23:00:16 -04:00
dcd073f8bd add small tweaks to the LAMMPS-GUI banner and how it is shown 2025-07-10 22:42:24 -04:00
440dae924d only restore old paths, if they exist, i.e. we are called from within LAMMPS-GUI 2025-07-10 20:26:02 -04:00
36e6469c9e fully restore original script code 2025-07-10 20:25:22 -04:00
f211c9dae0 comment and jnum variable 2025-07-10 17:48:03 -06:00
acfe419de2 updated ij indexing for mliap ace 2025-07-10 17:04:47 -06:00
74fe512c67 Merge remote-tracking branch 'github/develop' into roll-back-neighbor-swap 2025-07-10 18:29:54 -04:00
3515c5c6be try to suppres clang-tidy warnings 2025-07-10 18:29:28 -04:00
02e60884a3 disable clang-tidy on some code 2025-07-10 17:48:05 -04:00
6ced05927f use using instead of typedef 2025-07-10 17:40:05 -04:00
8807f6aafc disable clang-tidy 2025-07-10 17:32:43 -04:00
216d2b692f define lattice_t with using =, and move definition into the MEAM class scope 2025-07-10 17:25:55 -04:00
0b6444b9e5 replace #define and typedef with using = 2025-07-10 17:20:33 -04:00
8b4c6f7f98 exclude typedef struct from clang-tidy processing 2025-07-10 17:20:13 -04:00
3dba42f62e should use utils::inumeric for integer arguments 2025-07-10 17:08:34 -04:00
93efb0fcb7 disable clang-tidy checking 2025-07-10 17:03:15 -04:00
4f7777cc10 remove most standard C++ class functions, the struct is C-style. 2025-07-10 16:35:24 -04:00
445d10ae5a modernize by replacing C-style typedefs with C++ style using = 2025-07-10 15:58:45 -04:00
cde0d3dcdc another const cast to make the IBM LLVM compiler happy 2025-07-10 15:16:56 -04:00
05c044a712 whitespace 2025-07-10 13:00:45 -06:00
ff58d0319e Fix more issues with compute sna/grid/kk 2025-07-10 12:58:06 -06:00
1aabe28858 use qualified auto and using 2025-07-10 05:54:27 -04:00
90ad9e44f1 cosmetic suggestions from GitHub Copilot 2025-07-10 05:05:37 -04:00
fed5564520 add ticks to range sliders 2025-07-10 04:33:31 -04:00
d5b137c4e3 enable option to open the tutorial webpage for tutorial 8 2025-07-10 04:05:58 -04:00
1c8cf634db fix halt may only reset the timer timeout, if it trigged the timeout itself 2025-07-10 04:05:34 -04:00
61c6d32861 minor doc tweaks for readability 2025-07-10 01:01:41 -04:00
bd4c07772b update docs and screen shot 2025-07-10 00:50:19 -04:00
c70bda0cd2 add a couple horizontal separator lines 2025-07-10 00:44:05 -04:00
e517ee25d5 avoid uninitialized access to normflag 2025-07-10 00:43:39 -04:00
cfae257f8f fix typo 2025-07-10 00:12:48 -04:00
8a8a3228f3 avoid crashes when switching to a new file or a new empty document and close all windows 2025-07-10 00:10:18 -04:00
23343d5e5c add tooltips 2025-07-10 00:09:27 -04:00
2a25ce9d6e spelling a re-wrap 2025-07-10 00:09:10 -04:00
31ede566e9 intergrate the rest of simon's suggestions 2025-07-10 00:08:52 -04:00
35fcf5775c hack trying to appease macOS 2025-07-09 23:16:34 -04:00
054939bb23 Merge remote-tracking branch 'github/develop' into lammps-gui-improvements 2025-07-09 22:22:42 -04:00
a2971c5e42 Merge pull request #4650 from akohlmey/collected-small-changes
Collected small changes and fixes
2025-07-09 22:21:58 -04:00
ecfe7046e3 add rangeslider to chart window to plot subsets of data 2025-07-09 22:17:50 -04:00
9f11057b47 Revert "add stop button to chart display"
This reverts commit 1bb746aa87.
2025-07-09 21:29:31 -04:00
1bb746aa87 add stop button to chart display 2025-07-09 21:18:40 -04:00
7a98929a67 add rangeslider custom widget 2025-07-09 21:18:27 -04:00
a0b5e8ff73 refactor chart viewer title line. Now has two rows. display units and thermo norm 2025-07-09 20:08:24 -04:00
e09a87d121 remove rubberband feature since undoing the zoom doesn't work properly 2025-07-09 16:40:05 -04:00
0c8ac043e6 Merge branch 'develop' into collected-small-changes 2025-07-09 10:43:32 -04:00
6fef2326d6 Merge pull request #4649 from akohlmey/use-qualified-auto
Use qualified auto for improved readability
2025-07-09 10:42:00 -04:00
dec1fd2b92 apply and edit some changes suggested by @simongravelle 2025-07-09 10:41:08 -04:00
8f50f4fc96 Merge pull request #4638 from stanmoore1/backport_bugfixes
Backport bugfixes from #4608
2025-07-09 09:07:51 -04:00
c5c409062c Remove unused vars 2025-07-08 17:26:28 -06:00
a9c3eb5206 whitespace 2025-07-08 16:40:50 -06:00
cfe813c963 Fix bugs in Kokkos compute sna/grid 2025-07-08 16:16:47 -06:00
7ac03b6c9e fix crash on trying to free a NULL communicator 2025-07-08 16:17:48 -04:00
0cd2dac112 set LAMMPS-GUI version number to 1.7 2025-07-08 08:42:50 -04:00
711886034a to update the time stamp on the app bundle purge it during configure 2025-07-08 08:19:01 -04:00
6387689979 redesign the General settings preference tab and add defaults for tutorial buttons 2025-07-08 06:41:11 -04:00
b500c879f5 must use recursive delete on app bundle folder 2025-07-08 04:50:25 -04:00
4d9861e6a2 automatically quit the entire application when closing the editor window
avoid crashes and segfaults when simulation is still running
2025-07-08 04:40:44 -04:00
8aaf77c271 there is not much meaning in completing capture in the destructor.
the user should have already called EndCapture() if needed.
calling it in the destructor just causes memory corruption.
2025-07-08 04:34:41 -04:00
ace1b8026c must use a platform specific copy command 2025-07-08 03:01:16 -04:00
2b8b84788b fix grammar and reformat 2025-07-08 02:09:30 -04:00
7a2c051b69 delete app bundle folder. It will be recreated by macdeplotqt. 2025-07-07 21:35:54 -04:00
5ec4a6bd2e prevent using Restart LAMMPS while running and rename to Relaunch LAMMPS 2025-07-07 21:24:32 -04:00
4b2a04aab8 document Relaunch LAMMPS Instance 2025-07-07 21:21:16 -04:00
fd98ef2a59 fix typo 2025-07-07 20:22:06 -04:00
892c969ee6 save and restore PATH and LD_LIBRARY_PATH, so that xdg-open can launch a native executable 2025-07-07 20:21:54 -04:00
fd86feae7f Merge branch 'develop' into backport_bugfixes 2025-07-07 13:45:51 -06:00
a2439038c6 Fix issue with Kokkos SNAP on GPUs 2025-07-07 12:44:01 -06:00
0502d421b0 must use error->one() since only rank 0 is active at this point 2025-07-07 12:36:01 -04:00
1dc8c2d9a2 add a timeout option to the geturl command and set a default of 5 mins
the library default is to wait forever. Also the limit for connecting
was reduced to 30 seconds from 300.
2025-07-07 11:24:14 -04:00
5a158d59b4 small tweaks to error message boxes 2025-07-07 11:00:17 -04:00
25556a1bc1 add unit tests for additional conditions for splitting strings 2025-07-07 07:10:22 -04:00
adc202bd71 simplify 2025-07-07 06:39:15 -04:00
e4f9874974 simplify 2025-07-07 06:37:55 -04:00
adead22aef align with common conventions for pages documenting multiple similar styles 2025-07-07 05:46:25 -04:00
40b510c2c2 avoid crash when splitting line with incomplete quoting into words 2025-07-07 05:45:48 -04:00
ea939f6355 update changelog 2025-07-07 05:44:23 -04:00
477c3524b9 must clear variables before starting a new run since "clear" does not delete them 2025-07-07 05:38:57 -04:00
806000c9ee avoid crash from out-of-range access to string for partially quoted text 2025-07-07 05:18:01 -04:00
ddfc3f2d0b fix typo 2025-07-07 03:50:47 -04:00
9f0551104a display new LAMMPS-GUI banner image in docs and empty editor windows 2025-07-07 03:38:19 -04:00
a239e2b900 make sure these variables are always initialized 2025-07-06 14:03:50 -04:00
916655e382 use using 2025-07-06 13:57:28 -04:00
8ba1b9b122 use bool literals instead of integer constants 2025-07-06 13:57:19 -04:00
eaa3159c7f reorder initializer 2025-07-06 13:57:04 -04:00
fbf8856978 Mention LAMMPS-GUI as an example application for liblammpsplugin.h/.c 2025-07-06 13:41:16 -04:00
8e75c387ec modernize 2025-07-06 13:40:33 -04:00
72d73c4c45 remove unused class member and dead code 2025-07-06 13:05:36 -04:00
cdded2d51c improve error message 2025-07-06 05:25:03 -04:00
0d973d5a80 remove dead code and apply changes for clean compilation w/o OpenMP 2025-07-06 05:18:40 -04:00
449c59cf49 implement suggestion from GitHub CoPilot to make code consistent and simpler 2025-07-06 04:51:18 -04:00
1bf8f51664 add missing screenshot 2025-07-06 03:57:24 -04:00
50d15cded3 make precedence explicit 2025-07-06 03:18:46 -04:00
6722e55d5e should include C-math header since we use round() 2025-07-06 03:12:05 -04:00
44922cea16 show warning dialog at end of run, if I/O buffer usage was very high 2025-07-06 03:07:35 -04:00
da8ce40ffd track buffer usage and add API to query the maximum buffer use ratio 2025-07-06 03:05:46 -04:00
64080dce3e reduce overhead and avoid stalling by increasing the pipe buffer from 1k to the maximum of 64k 2025-07-06 01:25:08 -04:00
2d9f244c6c update LAMMPS-GUI documentation for most recent changes 2025-07-06 00:01:42 -04:00
01aa952968 update help index 2025-07-05 23:13:17 -04:00
7a74cad978 Merge remote-tracking branch 'github/develop' into lammps-gui-improvements 2025-07-05 23:11:32 -04:00
dd484cbde5 small improvements suggested by GitHub Copilot 2025-07-05 23:10:43 -04:00
1d377a1f26 add a CPU usage percentage indicator to the status bar 2025-07-05 19:49:32 -04:00
38d4c58115 support setting intel precision and gpu neigh and pair/only from preferences 2025-07-05 18:42:45 -04:00
ddc10064a2 set LAMMPS-GUI version to 1.6.15 2025-07-05 18:41:18 -04:00
e40d9c0eb2 resolve hotkey conflict for selecting GPU accelerator package 2025-07-05 14:08:42 -04:00
7863df8a76 update nthreads text field when accelerator is selected
the text is reset to 1 and editing disabled for None and Opt
2025-07-05 13:25:46 -04:00
2d8f3aaede document short-circuiting for ternary() variable function 2025-07-05 12:27:09 -04:00
b3eaf7e7f4 cache spcpu and tpcpu values so these thermo keywords can be used multiple times 2025-07-05 11:57:59 -04:00
7505ae3628 make handling of threads and accelerator selection more consistent, also buffer length 2025-07-05 10:49:22 -04:00
cbfedda573 only reset cached thermo data if first run or thermo style changed
this preserves last data from previous run for properties that are zero on the first step
2025-07-05 08:32:56 -04:00
8fbaf43319 make sphinx happy 2025-07-04 19:50:01 -04:00
1bf9fac5bb Merge remote-tracking branch 'github/develop' into collected-small-changes 2025-07-04 19:49:10 -04:00
276a6dcaa3 Merge remote-tracking branch 'github/develop' into patch-1 2025-07-04 19:44:25 -04:00
d20ef0d734 modify processing of ternary() so that only the first and one of the other arguments are evaluated 2025-07-04 19:09:52 -04:00
a85906236c fix typo 2025-07-04 18:14:08 -04:00
7ce7990bf9 Merge remote-tracking branch 'github/develop' into roll-back-neighbor-swap 2025-07-04 18:11:34 -04:00
b11c549dbd remove "fixed" comments, small stype updates 2025-07-04 18:09:57 -04:00
3dc92f8cc4 update handling of threads. make nthreads and LammpsGui class member 2025-07-04 17:46:51 -04:00
80b41eea9d Fixed cleanup TODO and tested functionality. MPI memory leak remains. 2025-07-04 15:39:22 -06:00
6795a2a066 Merge pull request #4019 from draneyj/develop
add hybrid monte carlo fix
2025-07-04 17:27:19 -04:00
70ba11e6bc small performance optimization by using std::move() 2025-07-04 17:12:48 -04:00
5fa2b88011 fix unlikely memory leaks 2025-07-04 17:12:27 -04:00
d34fc34e7b small optimization by using std::move() 2025-07-04 17:05:10 -04:00
553f2e0507 use move semantics 2025-07-04 17:00:28 -04:00
3218ad7c2a try to optimize by using emplace back 2025-07-04 17:00:18 -04:00
da0de5b81c guarantee that class members are not accessed uninitialized 2025-07-04 16:59:50 -04:00
a96d1f6363 tweak message to remain compatible with derived classes calling the same function 2025-07-04 16:30:13 -04:00
459bce40ad move constants from header to implementation, replace defines, and remove unused ones 2025-07-04 16:29:54 -04:00
602dd3b81b improve errors. add warning if non-nve time integration is used w/o rigid 2025-07-04 16:17:22 -04:00
479f7b9c1e spelling and add missing reference declarations to citations 2025-07-04 16:12:59 -04:00
d01478b2b1 remove one too many static added 2025-07-04 11:36:07 -04:00
d587e49403 add further guidance to documentation 2025-07-04 10:16:23 -04:00
3b6dbe6344 use qualified auto 2025-07-04 07:09:51 -04:00
ff3159cc76 use qualified auto 2025-07-04 07:02:07 -04:00
0ac62fdb28 flag statements and sections of code that we don't want to modernize 2025-07-04 06:58:37 -04:00
1462165b36 using macro instead of c++ function for nested min() 2025-07-04 06:46:05 -04:00
9b90b68e35 use using instead of typedef 2025-07-04 06:44:56 -04:00
fc6a643e53 make local functions static so their symbols are not exported 2025-07-04 06:26:12 -04:00
437e19c968 remove unused "using" statements 2025-07-04 06:08:25 -04:00
b0757e71ef Merge branch 'lammps:develop' into patch-1 2025-07-04 11:21:29 +02:00
03345a5999 improve errors 2025-07-04 05:10:45 -04:00
9a7c08c7e9 delete is safe for null pointers 2025-07-04 05:10:30 -04:00
c6c7131088 make constexpr and static 2025-07-04 05:09:44 -04:00
0e03822d59 hide global variables in anonymous namespace 2025-07-04 05:09:25 -04:00
68c2085f7a improve errors 2025-07-04 05:09:00 -04:00
281483bb25 don't truncate bigint to int 2025-07-04 05:08:44 -04:00
86731f99f6 new thermo keyword cpuuse for %CPU utilization 2025-07-04 04:40:28 -04:00
fedf0949db make some thermo settings accessible 2025-07-04 04:12:26 -04:00
d93002af6c improve error messages 2025-07-03 19:47:29 -04:00
31f1438a04 whitespace 2025-07-03 18:08:16 -04:00
d5f15d9151 Merge branch 'develop' into draneyj/develop 2025-07-03 18:07:18 -04:00
eb2600e05d clarify documentation 2025-07-03 17:23:24 -04:00
49bac65477 Merge branch 'develop' into improve-tests-for-set 2025-07-03 17:01:31 -04:00
78809d8f16 Merge pull request #4646 from akohlmey/lammps-gui-avoid-plot-slowdown
Reduce Impact of LAMMPS-GUI ChartViewer Performance Regression and Apply clang-tidy Fixes
2025-07-03 16:56:56 -04:00
acb2cbaaee update example log files 2025-07-03 14:38:46 -06:00
c69d95fd31 Merge branch 'develop' into patch-1 2025-07-03 23:07:12 +03:00
4bf7191833 whitespace 2025-07-03 15:48:01 -04:00
2cc7e0d1a4 fix handling cases with flags enabled but no potentials defined 2025-07-03 22:46:11 +03:00
df20f1f3fd update and relax epsilon ARM64 2025-07-03 15:45:04 -04:00
7ccaa18543 Merge branch 'develop' into lammps-gui-avoid-plot-slowdown 2025-07-03 15:40:28 -04:00
65f822ce72 plug memory leaks 2025-07-03 15:25:37 -04:00
a4e536e584 Merge pull request #4637 from akohlmey/collected-small-changes
Collected small changes and fixes
2025-07-03 15:12:38 -04:00
ac182284dd memory management matching comm classes 2025-07-03 14:09:07 -04:00
07567a6cc6 change defaults 2025-07-03 10:46:21 -04:00
9fd39a0657 add OpenMP parallelization to smoothing loop 2025-07-03 10:29:37 -04:00
466ffd82a3 add missing weblink 2025-07-03 09:17:39 -04:00
2c8c2bf278 rewrite based on suggestions from @simongravelle 2025-07-03 09:17:24 -04:00
04b5f042d2 Merge branch 'develop' into improve-tests-for-set 2025-07-03 05:42:23 -04:00
e999aaf4f3 Merge remote-tracking branch 'github/develop' into lammps-gui-avoid-plot-slowdown 2025-07-03 05:40:14 -04:00
c5e153ae29 update help index for recently added commands 2025-07-03 05:30:14 -04:00
c1f505f15f apply fixes suggested by GitHub Copilot 2025-07-03 05:24:02 -04:00
5118e38418 update changelog 2025-07-03 04:42:35 -04:00
6c709043b2 fix a couple bugs in processing special bonds JSON data for molecules 2025-07-03 04:27:44 -04:00
5ccbedb3c9 recover compilation when loading LAMMPS library dynamically 2025-07-03 03:46:17 -04:00
b45b6a74d1 improve and modernize using clang-tidy 2025-07-03 03:38:48 -04:00
436af21334 use qualified auto 2025-07-02 23:19:30 -04:00
b19e84541a update change log 2025-07-02 23:00:00 -04:00
4316267cc8 modernize calc_sgsmooth() and related functions and classes 2025-07-02 22:57:39 -04:00
705fc2aaf7 improve formatting of "about" text when LAMMPS is running. 2025-07-02 22:42:36 -04:00
98fd8e5f56 small performance tweak and make compatible with QT 5.12.x on Ubuntu 20.04LTS 2025-07-02 22:36:27 -04:00
a17aeca1ee discuss slowdown of simulations with too frequent thermo output and enabled smoothing 2025-07-02 22:11:24 -04:00
dfdac70dc6 speed up smoothed data series updates by avoiding append. 2025-07-02 22:10:47 -04:00
9994608532 we get better multi-thread performance without processor affinity 2025-07-02 22:05:58 -04:00
3334267265 fix example 2025-07-02 20:47:19 -04:00
875ac608a6 Only plot raw data in chartviewer by default.
Smoothing can slow down simulations with frequent thermo output or long runs.
One can always switch to smoothed or both outputs after the run (and back).
2025-07-02 20:27:48 -04:00
87a5898696 add domain calls 2025-07-02 19:54:05 -04:00
76d6117c6f add tests for fix set to tests for changing types and charges 2025-07-02 18:38:37 -04:00
f0620006f0 add explicit comm exchange 2025-07-02 18:03:02 -04:00
ba5d1b80d7 fix valgrind complaints 2025-07-02 17:51:38 -04:00
9741952ad5 ensure that flags are initialized across classes. use more C++ style variable declarations 2025-07-02 17:22:22 -04:00
a49c747519 simplify and make compatible with larger systems. 2025-07-02 17:09:05 -04:00
2f5d51e7cd cosmetic tweaks and generate log files 2025-07-02 15:02:32 -06:00
d9d5a4d8ec must use Error::one() when only on one MPI rank 2025-07-02 07:33:35 -04:00
e7a124206a add example command line for using install.py manually 2025-07-02 07:32:26 -04:00
3f92bad7f5 update description of using install.py to be more specific. mention -w flag 2025-07-01 09:29:07 -04:00
a1261a54c3 randomize solvent velocities as well when fix rigid enabled 2025-07-01 09:28:33 -04:00
74ed5134b3 no longer need to check for tags 2025-07-01 09:27:52 -04:00
004267c6ec fixed documentation 2025-07-01 09:26:52 -04:00
f7b911181e fix for parallel angle and dihedral stress calculation 2025-07-01 14:13:30 +02:00
acbdceb087 replace typedef with using 2025-06-30 23:32:58 -04:00
42e7b801d4 update code for default destructors 2025-06-30 23:32:32 -04:00
a79b945128 add explicit scope when calling virtual functions inside constructor or destructor
virtual dispatch is not available in those cases
2025-06-30 22:55:22 -04:00
b972821896 Merge branch 'develop' of github.com:lammps/lammps into backport_bugfixes 2025-06-30 20:51:38 -06:00
cb52abd965 no need for std::move on a const reference. used auto 2025-06-30 22:36:22 -04:00
d4eb800739 remove redundant static qualifiers 2025-06-30 22:32:21 -04:00
60b9fdf897 improve error messages 2025-06-30 22:17:51 -04:00
a2054657c7 determine argument offset value to be used with error pointers 2025-06-30 22:14:24 -04:00
3cf9b018a7 make certain that variables are initialized before used 2025-06-30 21:06:36 -04:00
f5c31f9df2 remove erroneous comm_forward = 12 2025-06-30 18:24:54 -04:00
5143423e92 remove old log files 2025-06-30 18:17:57 -04:00
97653e2626 fix examples 2025-06-30 18:16:30 -04:00
57fda06ecd ensure fix_rigid images are correct after false exchange 2025-06-30 17:09:34 -04:00
fff0b62aad track KE when momenta aren't resampled 2025-06-30 17:06:06 -04:00
de41dd53b2 make enum use consistent by moving it to the header 2025-06-30 16:31:53 -04:00
de97c8acdd correct function names 2025-06-30 16:09:34 -04:00
f547ddd2e9 fix a couple more cut-n-paste bugs 2025-06-30 15:55:56 -04:00
e6673ca64d remove redundant comparison 2025-06-30 15:37:19 -04:00
3e7f52ea91 fix bug detected by static code analysis 2025-06-30 15:27:33 -04:00
792d0e4d84 use anonymous namespace 2025-06-30 15:20:17 -04:00
e5374ce8e5 refactor/modernize handling of internal fixes in pair styles srp and srp/react 2025-06-30 14:42:08 -04:00
58a911c6a0 update use of const for known keywords 2025-06-30 10:07:27 -04:00
e74aeafbfb remove whitespace from compute_stress_mop_profile.cpp 2025-06-30 16:01:32 +02:00
1d3030023f use qualified auto and improve errors 2025-06-30 09:52:11 -04:00
f1215e904a replace typedef with using 2025-06-30 09:46:22 -04:00
85f1eebd73 modernize by using anonymous namespace 2025-06-30 09:45:15 -04:00
0f5d18917c Fix bond contributions to compute stress/mop/profile 2025-06-30 15:35:03 +02:00
23f941e0bb Fix parallel execution of bonds for compute stress/mop 2025-06-30 15:27:15 +02:00
22ec573638 avoid uninitialized access, remove commented out code 2025-06-30 09:00:06 -04:00
7c35e8407c avoid uninitialized access 2025-06-29 23:14:55 -04:00
4680fa669c relax epsilon to pass tests on macOS 2025-06-29 22:40:52 -04:00
3ae21e0bfb Merge remote-tracking branch 'github/develop' into collected-small-changes 2025-06-29 22:32:43 -04:00
63fcdb6e52 Merge pull request #4634 from akohlmey/static-analysis-updates
Updates for LAMMPS from static code analysis
2025-06-29 22:25:15 -04:00
cd44539429 modernize by using anonymous namespace 2025-06-29 19:56:42 -04:00
47332f8e46 no need to make member const 2025-06-29 19:28:00 -04:00
fee96bc777 make double to bool/int/tagint conversions explicit 2025-06-29 19:10:29 -04:00
b279ba9a40 follow one definition rule by moving functions into class definition 2025-06-29 18:47:40 -04:00
087b9a3b6e bugfix for improper style class2/kk taken from PR 4593
passes unit test for Kokkos/OpenMP
2025-06-29 18:18:24 -04:00
5a468fc05c Merge branch 'develop' into backport_bugfixes 2025-06-29 18:11:13 -04:00
9b378fadf4 Merge branch 'develop' into collected-small-changes 2025-06-29 02:41:19 -04:00
ed712e053f recognize a couple more Windows build numbers 2025-06-28 09:55:20 -04:00
0c68c4d493 Merge pull request #4636 from wapisani/fix_bond_create_inter_intra
Add support for inter-/intra-molecular bonding to fix bond/create
2025-06-28 09:43:54 -04:00
3e12c3f773 flag move constructor and swap operator as noexcept for performance 2025-06-28 05:21:25 -04:00
7bc86899b3 type fixes and error message updates 2025-06-28 05:20:49 -04:00
ac7013432b don't use double as boolean, use qualified auto 2025-06-28 04:48:47 -04:00
039fb94faa improve errors and apply clang-format 2025-06-28 04:45:02 -04:00
8c64b2090f process tilt parameters correctly and consistent with FixNH class 2025-06-28 04:38:10 -04:00
77417e2223 use correct type 2025-06-28 04:37:24 -04:00
2e4f29c900 use correct type and converions function 2025-06-28 04:24:46 -04:00
8dae514e03 use correct types 2025-06-28 04:06:36 -04:00
22a42446d3 tap_flag is integer and thus we should use utils::inumeric() 2025-06-28 03:58:27 -04:00
2968bfa8d9 nsvector_total should be an int 2025-06-28 03:53:34 -04:00
669f60b692 use qualified auto and avoid redundant types 2025-06-28 03:51:09 -04:00
1bdf30103f used correct type parser and make conversions explicit 2025-06-28 03:50:51 -04:00
4992caed95 more modernization of DIFFRACTION package 2025-06-28 03:37:42 -04:00
f425f2ab26 modernize 2025-06-28 03:30:10 -04:00
309e374867 use utils::inumeric() for parsing integers, using qualified auto 2025-06-28 03:19:17 -04:00
d5a344a5c8 modernize 2025-06-28 03:18:52 -04:00
481749dc35 modernize argument processing and error messages 2025-06-28 03:07:17 -04:00
14b1241db2 use utils::inumeric() for reading integer arguments 2025-06-28 03:05:03 -04:00
4d26bd5fd5 ndouble is an int 2025-06-28 03:04:44 -04:00
5fe4c9149f use qualified auto 2025-06-28 03:04:33 -04:00
a24aeb3fc6 icut, jcut should be doubles 2025-06-28 03:04:23 -04:00
0cd4ea4d04 don't use doubles as boolean 2025-06-28 02:34:58 -04:00
8726deb9b6 newton_bond is int not double 2025-06-28 02:34:39 -04:00
46561f57bd use utils::inumeric() to parse integers 2025-06-28 02:34:22 -04:00
aacc30c4d7 no benefit from declaring _tid const 2025-06-28 02:33:55 -04:00
2833b7adbd make cast to double explicit 2025-06-28 02:33:38 -04:00
11c4a8b49c use math.h function without std:: prefix 2025-06-28 02:22:25 -04:00
c28869124b don't truncate cuberoot to single precision 2025-06-28 02:22:09 -04:00
bd98354691 make cast to double precision explicit 2025-06-28 02:17:25 -04:00
109aec74ea remove one more implicit truncation of precision. update unit test again. 2025-06-28 02:06:49 -04:00
588ed11e85 avoid comparison with different signedness 2025-06-28 02:01:48 -04:00
be5602c44f apply clang-format 2025-06-28 02:01:32 -04:00
e78d85725b convert to internal linkage with anonymous namespace 2025-06-28 02:01:23 -04:00
1b36451f6a modernize. turn static inline into just inline 2025-06-27 23:58:11 -04:00
d168de00db silence compiler warnings 2025-06-27 23:57:37 -04:00
0c6ce8f23c fix typo 2025-06-27 23:27:44 -04:00
3ffe858a8b remove dead code and protect from neighbor list with special neighbors
this addresses most of issue #4639
2025-06-27 23:25:15 -04:00
c279d194dc be paranoid about invalid molecule templates 2025-06-27 22:47:50 -04:00
6b58058bca memory is accumulated in doubles not ints 2025-06-27 22:38:48 -04:00
0b73966a23 avoid unneeded copies by using const references where allowed 2025-06-27 22:36:23 -04:00
5cecfb5c4d use explicit type cast 2025-06-27 22:20:41 -04:00
d2d613c8b4 bugfix: incorrect application of abs() to doubles
@jtclemm this looks like a real bug.
Can you please check how much of an impact this change has?
2025-06-27 22:20:32 -04:00
8ddd474145 use qualified auto, make implicit type casts explicit 2025-06-27 22:13:44 -04:00
a8fe7e9252 modernize 2025-06-27 22:13:16 -04:00
3dd0971aeb update unit test reference 2025-06-27 22:06:09 -04:00
888543ce6d improve loopup accuracy 2025-06-27 22:05:40 -04:00
58e67e95f8 Merge remote-tracking branch 'github/develop' into static-analysis-updates 2025-06-27 21:48:40 -04:00
e41fb67903 update unit tests for changes to tabulated coulomb 2025-06-27 21:48:03 -04:00
a8d4666233 more accurate processing of coulomb tables through explicit type casts 2025-06-27 21:47:53 -04:00
4397a62be9 Merge remote-tracking branch 'github/develop' into collected-small-changes 2025-06-27 18:59:45 -04:00
575411c92c Merge pull request #4580 from stanmoore1/kk_update_4.6.1
Update Kokkos library in LAMMPS to v4.6.1
2025-06-27 15:05:16 -04:00
e139d935ab missed one conversion to general fix style 2025-06-27 14:26:16 -04:00
786f113d3e whitespace 2025-06-27 14:24:11 -04:00
6052744175 modernize error messages 2025-06-27 14:21:42 -04:00
d1ea7fa678 Small tweak from @cjknight for Aurora performance 2025-06-27 10:11:09 -06:00
bfb26e7ee0 Merge branch 'develop' of github.com:lammps/lammps into feature/batch-snap-ilp 2025-06-27 10:06:28 -06:00
bfd027e806 Fix compile error 2025-06-27 10:01:23 -06:00
f1d19c96cb Merge branch 'develop' of github.com:lammps/lammps into kk_update_4.6.1 2025-06-27 09:50:48 -06:00
afb427a94d Fix GPU/CPU data transfer issues 2025-06-27 09:37:31 -06:00
f090a63536 Fix more data issues 2025-06-27 09:31:18 -06:00
339c570b3e Fix Kokkos MLIAP data transfer issues on GPUs 2025-06-27 09:30:03 -06:00
07eeb6c5f9 add note about compile failure 2025-06-27 09:41:46 -04:00
a02eff6e40 document removal of Error::message() 2025-06-26 18:47:39 -04:00
77ea2b3af0 update unit tests for missing error->message() 2025-06-26 18:37:44 -04:00
7d7327e706 recommend to install the release version of gcovr 2025-06-26 18:29:17 -04:00
2bf03dbcdf apply clang-format 2025-06-26 18:28:59 -04:00
82c2bfe47c remove message() from Error class as it is superseded by utils::logmesg()
Also fix the few remaining cases to used utils::logmesg()
2025-06-26 18:27:09 -04:00
7b79382fa7 Update fix_bond_create.rst with inter/intra-molecular bonding info 2025-06-26 15:24:31 -05:00
a4121d44a2 Added molecule_keyword
Associated with the inter/intra-molecular bonding change
2025-06-26 15:12:10 -05:00
d5e938f949 Added support for inter/intra-molecular bonding
Copy over inter/intra-molecular bonding from fix bond/react
2025-06-26 15:10:19 -05:00
8095b9eec0 use qualified auto 2025-06-26 14:49:56 -04:00
bf1ad04555 don't use floating point as boolean 2025-06-26 14:49:47 -04:00
4a58be05fa simplify 2025-06-26 14:42:13 -04:00
f763420c53 use qualified auto 2025-06-26 01:06:27 -04:00
fe7bdf5941 make destructor virtual 2025-06-26 01:06:16 -04:00
ed279cb9f9 fix up more cases where floating point numbers were used as boolean 2025-06-26 00:59:02 -04:00
5ad24fc733 restore old version and add comment why it cannot be modernized 2025-06-26 00:22:59 -04:00
4309666fa2 remove exception qualifier 2025-06-26 00:11:29 -04:00
3c13eebcb2 must use override instead of virtual 2025-06-25 23:56:25 -04:00
e24b329e1b avoid unnecessary string copies as parameters 2025-06-25 23:51:22 -04:00
3e9560190c don't use floating point numbers as booleans 2025-06-25 23:48:06 -04:00
7597a227f4 modernize: replace typedef with using, use = default for default members 2025-06-25 23:39:38 -04:00
2a3afae3ff modernize: use range based loop and .data() of containers 2025-06-25 23:39:03 -04:00
ad8d722c68 use C++11 style initializer 2025-06-25 23:19:08 -04:00
1906444a1d use utils::inumeric() for integers and use qualified auto 2025-06-25 23:16:17 -04:00
de46b3b8bf modernize in colvars package 2025-06-25 23:11:26 -04:00
e9b5e55f18 used .data() to access underlying raw data of container 2025-06-25 20:22:30 -04:00
96d1704b8e need another epsilon relaxation 2025-06-25 20:21:23 -04:00
9cc2638c91 modernize code 2025-06-25 20:02:41 -04:00
b093094d5e avoid copying vectors as arguments and pass a const reference instead 2025-06-25 19:57:05 -04:00
7d86d7f89a use 'const int' instead of 'int const' to be consistent with the rest of LAMMPS 2025-06-25 19:56:59 -04:00
202aeaf1a5 remove redundant return statements at the end of functions returning void 2025-06-25 19:46:46 -04:00
fce4006fda address minor memory management issues 2025-06-25 19:46:15 -04:00
6934a31878 relax epsilon again to pass test on macOS 2025-06-25 19:30:19 -04:00
cb9b0cdaf2 update unit test and its epsilon due to removal of single precision math in pair style 2025-06-25 19:01:18 -04:00
c1665cd378 convert to double directly 2025-06-25 18:50:08 -04:00
03067d0059 promote constants to double to avoid float/double conversions 2025-06-25 18:47:23 -04:00
f6befb18ae follow LAMMPS programming style more closely 2025-06-25 18:41:26 -04:00
5711acc9ef avoid float/double conversions but convert directly to double 2025-06-25 18:41:08 -04:00
dcd521e9c6 fix static code analysis issues in Info class 2025-06-25 12:43:05 -04:00
80758cef2d make Param args const 2025-06-25 12:12:53 -04:00
4bd0258bfd add more casts to double for table lookup 2025-06-25 12:12:07 -04:00
5d3a080db7 Merge remote-tracking branch 'github/develop' into static-analysis-updates 2025-06-25 11:20:44 -04:00
b7be53f3fc Merge pull request #4633 from jtclemm/rheo
Fixes to RHEO package
2025-06-25 11:18:27 -04:00
7e3c61b831 use explicit typecase in coulomb table lookup in a few more cases 2025-06-25 07:28:05 -04:00
4e28af6219 move typecast to the proper position to avoid implicit type conversion 2025-06-25 07:14:46 -04:00
dba24555d1 fully unroll loop 2025-06-25 06:58:15 -04:00
fdc3f50298 correct API leading to undesired int/double conversions, remove dead code 2025-06-25 06:54:13 -04:00
af81f944d7 must revert changes due to broken GCC in Rocky/CentOS/RHEL 8.x 2025-06-25 06:48:16 -04:00
5b10e2f653 make exception settings consistent 2025-06-25 06:27:49 -04:00
a03d2a66c9 recover compilation of INTEL package 2025-06-25 01:00:35 -04:00
9fbb49f401 use qualified auto 2025-06-25 00:46:11 -04:00
d4ba431117 use nullptr instead of NULL 2025-06-25 00:31:44 -04:00
b0dd929b6d add missing overrides 2025-06-25 00:31:33 -04:00
3b1f639ddf add default constructor and default virtual destructor 2025-06-25 00:17:52 -04:00
a92fa56a3e formatting 2025-06-25 00:17:30 -04:00
8ca9aafff2 remove prototype of non-existing member function 2025-06-25 00:17:18 -04:00
e84c6743d9 must use utils::inumeric() for integers 2025-06-25 00:16:55 -04:00
8a04b9c498 remove redundant typecast 2025-06-25 00:16:14 -04:00
7edf4e567f remove redundant void function argument 2025-06-24 23:53:23 -04:00
656ea3569e use qualified auto 2025-06-24 23:53:09 -04:00
b672c30428 add missing overrides and format them consistently 2025-06-24 23:52:59 -04:00
337fca1305 use using instead of typedef 2025-06-24 23:51:59 -04:00
29651c4bb1 we're parsing an integer here 2025-06-24 23:29:19 -04:00
54eed8af02 .c_str() is not needed here 2025-06-24 23:28:53 -04:00
92ccbd13a5 correctly apply override 2025-06-24 23:28:32 -04:00
766a07c5d4 use explicit cast to double when promoting float lookup value from coulomb table 2025-06-24 23:24:32 -04:00
278cc0a039 replace implicit bool on floating point number with explicit comparison
also re-indent for consistency
2025-06-24 23:20:49 -04:00
33cc2117c6 use qualified auto 2025-06-24 23:19:57 -04:00
57ec008a66 use qualified auto 2025-06-24 22:52:29 -04:00
230121c2c7 make use of override consistent 2025-06-24 22:48:44 -04:00
f5d54a825f use qualified auto 2025-06-24 22:48:31 -04:00
61bfc38961 use explicit scope since virtual tables are not active yet 2025-06-24 22:48:01 -04:00
0cd6c5c3ec remove dead code 2025-06-24 22:36:51 -04:00
c242294227 use auto for redundant type specification 2025-06-24 22:36:39 -04:00
bf90e9b03e must used override 2025-06-24 22:35:43 -04:00
af9a3d933b make consistent for both branches 2025-06-24 22:15:04 -04:00
687e1ddb53 consolidate procs2grid2d implementation and initialization before call 2025-06-24 22:02:52 -04:00
03611c95ae improve error messages 2025-06-24 20:38:29 -04:00
db244166ca Merge branch 'develop' into rheo 2025-06-24 20:29:18 -04:00
8dad9a0f68 Merge pull request #4630 from akohlmey/collected-small-changes
Collected small changes and fixes
2025-06-24 20:17:41 -04:00
08d81a5ac2 Correcting simple variable type mistake 2025-06-24 12:08:54 -06:00
938f7fa0ef remove clang-tidy support from CMake since we now run this automatically 2025-06-24 07:49:57 -04:00
63c9987ec8 make scope explicit since virtual tables are not set up in constructor 2025-06-24 06:13:13 -04:00
d0c460e7f7 flag move constructor and swap function as noexcept for improved performance 2025-06-24 06:12:49 -04:00
e8780449d8 remove redundant part from logical expressions 2025-06-24 05:47:36 -04:00
df04fc943d make implicit boolean conversions explicit 2025-06-24 05:47:05 -04:00
264750e47c no need to run sphinx-build twice after updating sphinxfortran extension from upstream 2025-06-24 00:41:10 -04:00
b61410bde0 some additional explanations for neighbor boost single error 2025-06-24 00:16:00 -04:00
80fbdceff2 reformate for improved readability and make some updates due to changes in the code 2025-06-24 00:09:46 -04:00
24b15f7e46 add false positives 2025-06-24 00:09:18 -04:00
e45299f620 must load numpy into docenv to correctly process python numpy wrapper docs 2025-06-24 00:09:09 -04:00
179cce90bc use C++11 style of disabling constructors 2025-06-23 23:20:26 -04:00
8c12ab5db0 update a few more rounding cases with std::lround() 2025-06-23 23:17:14 -04:00
f7f5a3e3e4 replace static_cast<int>(val + 0.5) with C++11's std::lround() 2025-06-23 23:07:13 -04:00
7e3d6026d4 Restoring rheo options to set 2025-06-23 20:53:51 -06:00
d5d8887eb9 improve error messages 2025-06-23 22:49:17 -04:00
56f839f2e1 replace custom nint() function with C++11's std::lround() 2025-06-23 22:49:06 -04:00
a7b7be26dc improve errors 2025-06-23 22:42:48 -04:00
50ba0e577e cast to double before printing 2025-06-23 22:37:27 -04:00
727c0b251a Clarifying exception in fix deform doc 2025-06-23 20:35:53 -06:00
b94c41c05a Fixing some static code analysis issues in RHEO 2025-06-23 20:35:36 -06:00
e9a578a212 t status
Merge branch 'develop' into rheo
2025-06-23 19:50:29 -06:00
750e663be8 try to suppress false positive from static code analysis (natom is always > 0) 2025-06-23 19:21:00 -04:00
8305c97b69 address some issues flagged by static code analysis 2025-06-23 19:20:32 -04:00
8cf24edc21 improve error messages and suppress static code analysis warnings 2025-06-23 19:20:00 -04:00
249c6d6de9 add emacs local variable tweaks and add some missing docstrings 2025-06-23 16:51:33 -04:00
bfa19f678d future-proof iarray() and darray() conversions and document them 2025-06-23 16:29:12 -04:00
8401b6aee8 use utils::inumeric() instead of utils::numeric() for integers 2025-06-23 06:57:51 -04:00
9d6758f269 merge two if statements with the same condition following each other 2025-06-23 06:43:59 -04:00
70d36b1b4c when finalizing from the fortran module we should also free the external fix storage 2025-06-22 21:48:57 -04:00
4a9fa1ba87 restore compilation without -DNDEBUG 2025-06-22 18:40:58 -04:00
b3c403f464 run KOKKOS force style unit tests with serial when OpenMP is not available 2025-06-22 18:29:45 -04:00
12dcaa2d03 eliminate compiler warnings 2025-06-22 18:12:20 -04:00
1e6eeda958 remove dead code and address warnings from static code analysis 2025-06-22 17:49:47 -04:00
c6478e245a fix up emitterutils source file in bundled yaml-cpp in ML-PACE for GCC 15+ 2025-06-22 17:22:41 -04:00
cfe87f928d update email address 2025-06-22 16:36:50 -04:00
469846e73c correct broken doc line 2025-06-22 07:22:36 -04:00
9b382dac41 apply more pylint recommendations 2025-06-21 23:22:34 -04:00
679806206d detect header keywords and section titles from data files and print suitable error 2025-06-21 17:59:54 -04:00
c118af34e0 small doc update 2025-06-21 17:58:49 -04:00
46fc4b21a5 make fix deposit and fix pour compatible with body particles from molecule templates 2025-06-21 17:17:39 -04:00
2b3af7b371 silence compiler warnings 2025-06-21 17:05:36 -04:00
aecc85e3d5 avoid out-of-bounds memory access when registering fix external callbacks 2025-06-21 16:42:39 -04:00
e3b1d27e0a whitespace 2025-06-21 14:34:01 -04:00
06d47f7279 didn't count if atom-id was used 2025-06-21 14:32:18 -04:00
fc9efa1586 update documentation for the recently added sections in JSON format molecule files 2025-06-21 13:48:11 -04:00
0310959053 use consistent formatting of error messages and comments 2025-06-21 12:59:40 -04:00
9360038013 implement the processing for special bonds in JSON 2025-06-21 12:59:15 -04:00
0caaca8a05 honor atom-ids in Special Bonds section 2025-06-21 12:36:31 -04:00
9d38652033 consistently quote JSON fields with double quotes 2025-06-21 12:34:17 -04:00
c08ee92801 correctly honor atom-id in Special Bond Counts section 2025-06-20 23:05:58 -04:00
95fb6c75d2 support special:counts section for JSON data, only special:bonds missing 2025-06-20 23:05:38 -04:00
67582ebf14 some error hint updates based on recent discussions on MatSci.org 2025-06-20 17:45:37 -04:00
8dff25296b restore pylammps.py 2025-06-20 14:42:52 -04:00
b036c911e7 fix copy-n-paste bug 2025-06-20 14:23:22 -04:00
6f72a56b4c stricter matching of header items and skip comments right away 2025-06-20 14:12:25 -04:00
fb088cdc57 require .json extension for JSON format molecule files 2025-06-20 14:12:00 -04:00
c98ebb669e trigger warning on the correct fix style name 2025-06-20 10:08:14 -04:00
bb0bd289b7 update unit tests 2025-06-20 08:38:09 -04:00
b909a782b6 revert double adding of body info in create_atoms 2025-06-20 08:07:17 -04:00
6fff591c0d more checks 2025-06-20 07:51:58 -04:00
c6057f3780 support creating body particles from molecule templates in create_atoms 2025-06-20 07:31:58 -04:00
765b3ad487 need fewer checks with JSON data 2025-06-20 07:30:59 -04:00
9615cb466c support processing "bodies" sections from JSON data 2025-06-20 07:30:43 -04:00
500373d72b correct error message 2025-06-20 07:24:35 -04:00
25fecf7b7d update format 2025-06-20 07:24:21 -04:00
18455d07fe list possible pair styles with SPC Howto. Add comment about cutof vs. long-range coulomb 2025-06-20 04:24:13 -04:00
c8ce2a0390 minor tweaks and modernizations, apply clang-format 2025-06-18 20:09:44 -04:00
7601a217b7 modernize and improve error messages 2025-06-18 20:02:47 -04:00
af3b1c5423 store fix rigid/small id and check if it still exists during init() 2025-06-18 20:02:24 -04:00
fc3d971119 replace outdated inputs with new versions 2025-06-18 20:00:51 -04:00
b864116719 spelling edits 2025-06-18 15:46:58 -06:00
d022f1cf48 whitespace changes 2025-06-18 15:26:34 -06:00
4fa97ee0dd changes to doc page and cosmetic changes to src files 2025-06-18 14:47:01 -06:00
97d7e9e4a1 correct cut-n-paste errors 2025-06-18 10:16:19 -04:00
8c0894fa84 fix issues causing failed tests 2025-06-18 07:49:15 -04:00
004816a4ba update tests for changed argument names 2025-06-18 07:09:03 -04:00
6934932383 document function 2025-06-18 06:55:30 -04:00
3f6dfa27bd apply pylint and refactor accordingly 2025-06-18 06:51:17 -04:00
40d88e9bda revert incorrect additions 2025-06-18 03:35:28 -04:00
210fdb8b98 process "shake:atoms" and "shake:types" sections in JSON data 2025-06-18 00:08:28 -04:00
ad722310b1 reformatted code and doc page 2025-06-17 15:28:21 -06:00
e01640c4f5 fix out-of-bounds initialization for cvatom array 2025-06-17 17:02:00 -04:00
07c91f396e fix out-of-bounds access bug reported in issue #4632 2025-06-17 16:43:07 -04:00
c5628e5ccd Merge branch 'develop' into hmc 2025-06-17 14:27:03 -06:00
ec2ef5b14c fix more issues with reading Shake sections in native file format 2025-06-17 13:55:16 -04:00
03a418809d implement general shake flags checking and partial JSON processing 2025-06-17 10:32:36 -04:00
2f088749ad add shake entries to schema 2025-06-17 10:31:49 -04:00
635719a2ec Correct implementation to actually follow the documentation. 2025-06-17 10:31:17 -04:00
72ea12b0f9 fixed compilation error due to a typo 2025-06-17 08:42:22 -05:00
632bc8f20d Removed line apparently copied from compute displace/atom 2025-06-17 14:56:43 +02:00
9a81c95104 document unchanging group size restriction in compute msd 2025-06-17 06:02:43 -04:00
624c7a5ab8 improve errors in compute msd 2025-06-17 05:57:24 -04:00
eeaca93974 the number of atoms in the compute msd group must not change 2025-06-17 05:51:03 -04:00
515ccac51c avoid copies of C++ strings 2025-06-16 20:19:53 -04:00
53fec5563c Merge pull request #4543 from d-immel/apip
adaptive-precision interatomic potentials (APIP)
2025-06-16 15:56:12 -04:00
47fae6b786 Merge pull request #4628 from akohlmey/collected-small-changes
Collected small changes and fixes
2025-06-16 13:41:25 -04:00
0538518dbd add missing entries to .gitignore 2025-06-16 12:43:12 -04:00
a5e4123606 Merge branch 'develop' into feature/batch-snap-ilp 2025-06-16 12:31:50 -04:00
0a1ade0bce Merge branch 'develop' into roll-back-neighbor-swap 2025-06-15 17:45:13 -04:00
8f31b62e15 make flow of control more obvious 2025-06-15 17:39:06 -04:00
d640543185 fix whitespace 2025-06-15 15:29:35 -05:00
b5809aff67 updated the doc page for the new parameters 2025-06-15 15:20:56 -05:00
b3423e9b7a allow nbor build and bond block sizes to be specified from the command line 2025-06-15 15:04:42 -05:00
d38f97e465 remove dead code 2025-06-15 05:40:39 -04:00
bb1b854b47 check for empty molecule to avoid division by zero 2025-06-15 05:40:16 -04:00
d95d97db28 remove dead code, avoid uninitialized access 2025-06-15 05:25:19 -04:00
a6b30c35ac use more obvious flow of control that does not confuse static code analysis 2025-06-15 05:24:37 -04:00
7fb930daed start adding tests for JSON format molecule files 2025-06-15 00:00:59 -04:00
72538fbb84 warn about inconsistent units only during the first pass reading the file 2025-06-14 23:36:20 -04:00
d775aa1566 Update MC.cmake
add missing `set_property()` call
2025-06-14 19:23:36 -04:00
1fc6d4d3b6 Update MC.cmake
add missing `endif()`
2025-06-14 19:22:14 -04:00
97d09c2ec4 update changelog 2025-06-14 19:14:01 -04:00
4bc5bc3d18 update label only when needed 2025-06-14 19:09:53 -04:00
c5c1f47c20 move redundant code to find pointer to main widget to helper function 2025-06-14 19:04:43 -04:00
fdc199e7cc Merge branch 'develop' into develop 2025-06-14 18:15:12 -04:00
0ea4ba28bf Merge remote-tracking branch 'github/develop' into apip 2025-06-14 18:00:41 -04:00
6004a58ab4 fix spelling issues 2025-06-14 17:59:01 -04:00
90df96b16f fix bugs detected by GitHub Copilot 2025-06-14 17:33:06 -04:00
7dc4e17e0c fix compilation with MPI STUBS 2025-06-14 12:59:07 -04:00
2d5f02a398 add lammps_add_molecule API to the C-library interface and python/fortran module 2025-06-14 12:46:36 -04:00
faa1dbc19d add missing type check and setting of ntypes for json data molecules 2025-06-14 11:48:11 -04:00
ea23af48d3 only perform size check if section is present 2025-06-14 11:47:24 -04:00
e2cd2a1a17 make error handling for checking the handle and its state more consistent 2025-06-14 11:18:12 -04:00
88f5ad160a use "const std::string &" instead of "const char *" it will be converted anyway 2025-06-14 11:16:06 -04:00
81bfcb80e7 add missing prototype 2025-06-14 11:15:05 -04:00
df1d70bf99 move up re-initialization one level to avoid uninitialized access 2025-06-14 09:05:29 -04:00
ced0d350f0 handling parsing exceptions and check for error creating a backup 2025-06-14 09:02:00 -04:00
4b32e58f90 make sure that all molecule members are initialized 2025-06-14 08:48:25 -04:00
1475111f7f use different ccache storage keys for gcc and clang 2025-06-14 06:10:47 -04:00
848ef74459 download sphinx_toolbox extension and enable "collaps" directive 2025-06-14 06:04:54 -04:00
5013b80434 Merge remote-tracking branch 'github/develop' into collected-small-changes 2025-06-14 05:20:05 -04:00
08d2856558 Merge pull request #4627 from Saric-Group/bugfix/bond-react-peratom-mass
Fix segfault when masses are missing in post-reaction template in per-atom systems
2025-06-14 05:18:47 -04:00
2c9dac5505 Merge branch 'develop' into bugfix/bond-react-peratom-mass 2025-06-13 16:39:44 +02:00
4d6a085361 make include guard consistent with file name 2025-06-13 08:58:48 -04:00
88f777226e restore example 2025-06-13 08:57:37 -04:00
22082854ad restore documentation files 2025-06-13 08:55:10 -04:00
ca6558fea4 Merge branch 'develop' into roll-back-neighbor-swap 2025-06-13 08:48:50 -04:00
1ba1b7111d Merge branch 'develop' into apip 2025-06-13 08:42:29 -04:00
ee165e72de minor changes of APIP doc page 2025-06-13 12:15:03 +02:00
3a628ce4b1 simplify by returning new variable index in creator function and avoid calling finder 2025-06-13 04:37:09 -04:00
c5920eeb8d stop installing components from the downloaded pace library 2025-06-13 03:30:33 -04:00
5b8c505c2d only strip debug info 2025-06-13 02:19:01 -04:00
c79a1a6bed flag as development version 2025-06-13 02:18:35 -04:00
4865235998 small doc tweaks and update for the simplified installation 2025-06-12 22:49:38 -04:00
dcf604875c cosmetic 2025-06-12 22:34:56 -04:00
3052bc7f4c make added comments consistent and consistently formatted 2025-06-12 22:31:33 -04:00
6df845a8d8 Merge remote-tracking branch 'github/develop' into apip 2025-06-12 22:27:03 -04:00
fa59b1c6f2 correct and simplify install script for legacy build system 2025-06-12 22:25:55 -04:00
f84bbf9326 Update logs of APIP examples. 2025-06-12 20:30:45 +02:00
00ffebc929 Remove not required variable from PairLambdaZoneAPIP. 2025-06-12 19:24:43 +02:00
d7cd2795c5 add error to CreateAtoms for per-atom systems 2025-06-11 17:28:42 +02:00
3ab3663659 updated the doc page for the pair/team/size and nbin/atoms/per/bin keywords 2025-06-10 23:37:34 -05:00
91896bc444 initialized atoms_per_bin 2025-06-10 17:32:56 -05:00
c309d6e99e allow atoms_per_bin used for neighbor builds to be specified from the command line 2025-06-10 15:21:54 -05:00
e9146a6467 using teamsize_max if specified from the command line 2025-06-09 11:51:05 -05:00
8305e27835 allow to set pair team size with neigh/thread on from -pk kokkos 2025-06-07 16:07:36 -05:00
ccc078f036 Add apip to documentation of read_dump and compute property/atom. 2025-06-06 14:41:52 +02:00
9a65ab2c4d Merge branch 'develop' into apip_devel and solve merge conflict in set. 2025-06-06 13:32:00 +02:00
1e7dc5126e Flag code that needs improving with TODO comments 2025-06-05 23:06:55 -04:00
654cd0fe00 improve argument parsing and error messages 2025-06-05 22:52:40 -04:00
e5f0e23a11 clang-format apip package. 2025-06-05 20:46:32 +02:00
6c798f1847 Update APIP naming in documentation. 2025-06-05 20:05:37 +02:00
20f123ddd1 Update notation in APIP examples. 2025-06-05 17:22:19 +02:00
bc93311309 Fix typos. 2025-06-05 17:21:03 +02:00
19a108bd21 Add apip suffix in pair_styles lambda/input and lambda/input/csp. 2025-06-05 15:38:38 +02:00
4fcbdbe3a1 pair_style lambda/zone -> pair_style lambda/zone/apip 2025-06-05 15:15:06 +02:00
1086db672c Capitalise apip in PACE class names. 2025-06-05 15:01:51 +02:00
f34284fca0 Capitalise apip in EAM class names. 2025-06-05 14:40:21 +02:00
94d39239b5 fix lambda -> fix lambda/apip 2025-06-05 14:29:43 +02:00
dd4afb16ad fix lambda_thermostat -> fix lambda_thermostat/apip 2025-06-05 14:06:17 +02:00
1d5efd05bd fix apip_atom_weight -> fix atom_weight/apip 2025-06-05 13:22:13 +02:00
964605f25a remove commented out code 2025-06-05 06:50:28 -04:00
74e8ed7a49 follow LAMMPS' conventions for initializing class members more closely 2025-06-05 06:46:43 -04:00
b6a57c2480 Add apip prefix to internal variable names. 2025-06-05 12:44:01 +02:00
21d3f68939 modernize looking up voronoi compute and check for it in init(), too 2025-06-05 06:42:08 -04:00
78e538c9fc store inv_r_0 instead of r_0 to replace division by faster multiplication 2025-06-05 06:32:50 -04:00
e31f864620 correct offset for parsing optional arguments 2025-06-05 06:25:27 -04:00
3f1944cace more accurate detection of known keywords 2025-06-05 06:23:58 -04:00
cf79cf8e72 simplify use of MathSpecial::square() 2025-06-05 06:18:29 -04:00
4b56fd4cd2 replace redundant get_distance() with sqrt(MathExtra::distsqr())
Also avoid repetitive computation of distance.
2025-06-05 06:15:48 -04:00
8abd42ed2f complete embedded citation handling 2025-06-05 06:02:03 -04:00
467cbbc188 Revert "refactor fix neighbor/swap"
This reverts commit 594953ed0b.
2025-06-05 05:54:13 -04:00
9d37f28a86 Revert "Cleaned options reading index error"
This reverts commit ef6cdbf00e.
2025-06-05 05:54:10 -04:00
7bf5d5899f Revert "update error message"
This reverts commit df3467a114.
2025-06-05 05:54:04 -04:00
61f9cb66e2 Revert "remove dead code and redundant implementation."
This reverts commit 3dadcab047.
2025-06-05 05:54:02 -04:00
99e8085cda Revert "make fix neighbor/swap valgrind clean"
This reverts commit 6a2e796538.
2025-06-05 05:53:56 -04:00
41bd3437f6 Revert "make attempt_swap valgrind clean. now fails in pair->compute()."
This reverts commit deef742897.
2025-06-05 05:53:46 -04:00
bd26d7a742 Add apip names in read_dump. 2025-06-05 11:09:35 +02:00
d3f00eeff4 Add apip names in set. 2025-06-05 10:59:32 +02:00
67d668cb62 Add apip names in compute property/atom. 2025-06-05 10:54:06 +02:00
9d4aad2588 Remove APIP from dump_custom, fix store/state and variable. 2025-06-05 10:45:36 +02:00
4da7fad87e Merge branch 'develop' into feature/batch-snap-ilp 2025-06-03 11:17:55 -04:00
cf7011bf64 nvc++ compiler workaround 2025-05-23 13:48:42 -07:00
ae8542a020 Fixed up whitespace 2025-05-23 10:57:38 -07:00
446630e3ba Added compile-time support for running the legacy codepaths on the GPU; misc cleanup and fixes 2025-05-22 14:14:13 -07:00
8c314c7bda Reduced template parameters, improved code reuse between ComputeFusedDeidrj paths 2025-05-22 14:06:26 -07:00
13500710ce Added register tiling to ComputeBi 2025-05-22 13:57:09 -07:00
c787ce60a7 Added directional fusion to ComputeFusedDeidrj 2025-05-22 13:50:41 -07:00
103c44e3c1 Added register tiling to ComputeUi 2025-05-22 13:28:33 -07:00
c1fe6c9109 Added register tiling to ComputeYi/Zi/YiWithZlist 2025-05-22 13:14:44 -07:00
c03e19d2dd Added support for extra padding to data structures to simplify extra vectorization 2025-05-22 13:01:35 -07:00
24149fc793 Create kokkos version of fix electron stopping 2025-05-11 09:25:15 +03:00
011f05f9ff Update docs 2025-05-07 13:06:07 -06:00
955d5da09c Update CMake 2025-05-07 12:58:33 -06:00
b5cac76937 Restore default value 2025-05-07 12:55:54 -06:00
9f0c87cf81 Merge branch 'develop' of github.com:lammps/lammps into kk_update_4.6.1 2025-05-07 12:42:07 -06:00
9c8e03c4f4 Port changes from Kokkos develop branch to Makefile.kokkos 2025-05-07 12:41:53 -06:00
dc07a1471e Properly processing >1 fix set force 2025-05-05 12:45:35 -06:00
7c30111fa0 Fixing passed arg from type to index 2025-05-05 11:50:59 -06:00
597a841f40 Update Kokkos library in LAMMPS to v4.6.1 2025-04-30 17:21:22 -06:00
e62f45b2b5 fixed whitespace 2025-04-28 09:21:14 -05:00
f7e53b06e4 updated doc page for threads/per/atom 2025-04-27 08:56:53 -05:00
c74e7292c0 allow to set vectorsize (threads per atom) with neigh/thread from -pk kokkos 2025-04-26 17:44:24 -05:00
7c0fd42ab4 Move atom_vec_apip to src/APIP. 2025-04-11 10:21:18 +02:00
8c1aada9cb Support constant lambda in APIP. 2025-04-10 16:05:16 +02:00
139ecd0e90 Merge branch 'lammps:develop' into develop_ap 2025-04-08 16:03:25 +02:00
535d08895a Add APIP package. 2025-04-08 15:26:45 +02:00
60e1e52ec1 add whitespace to end of file 2025-01-19 12:21:41 -05:00
cba09fc0f5 improved error handling for user specifying rigid fix 2025-01-18 17:40:07 -05:00
be7d3a5f4b moved body struct inside class 2025-01-18 17:34:07 -05:00
5436411178 Merge branch 'develop' into develop 2025-01-18 17:05:57 -05:00
fbbeba5912 removed friend class status for fixHMC 2025-01-18 14:35:10 -05:00
d34a8a4807 moved body momentum randomization into fix rigid small 2025-01-18 14:29:34 -05:00
2e57a2ee23 remove exchange and borders on restored state. Causes atoms to be lost. 2024-12-14 17:26:24 -05:00
875ad66afc add exchange and borders on restored state 2024-12-14 16:44:26 -05:00
9a4361336d update documentation 2024-12-14 16:40:54 -05:00
6cb46bc7f0 update documentation 2024-12-14 16:40:24 -05:00
b953dbd856 use a larger timestep with fix rigid example 2024-12-14 16:06:10 -05:00
ea664476d3 change ra keyword to resample 2024-12-14 15:59:09 -05:00
e0253e1058 cleanup 2024-09-21 11:41:25 -04:00
ee50ee2a9b working with exchange 2024-09-13 21:19:48 -04:00
0d151b948f remove commented code in store 2024-09-02 12:27:57 -04:00
36d6f1f95c forgot to hit save 2024-09-02 12:24:39 -04:00
0aa4118e89 implement exchange store and restore 2024-09-02 12:24:13 -04:00
a6ac272e7e fix negation operator and arg starting number 2024-01-29 12:29:27 -05:00
e374b073bc pass integrator as arg for rigid, typo fix 2024-01-25 14:53:40 -05:00
846e365e94 added flags for single execution to init and setup 2024-01-25 14:25:59 -05:00
64fe4c171c added checks for seed, temp ge 0.0 2024-01-24 14:35:46 -05:00
33c52c2a4a Merge branch 'develop' into draneyj/develop 2024-01-04 21:12:46 -05:00
e83f0d3f26 update fix hmc examples and add reference log files 2023-12-19 17:53:48 -05:00
2f692b9bff silence compiler warnings about unused variables 2023-12-19 17:28:00 -05:00
33bfc1d1ca changed vector output 2023-12-19 15:28:01 -05:00
b0205dbe07 add examples for hmc 2023-12-19 15:02:53 -05:00
8968cbf49d setup fix_rigid before saving state 2023-12-19 14:07:24 -05:00
08f78f8060 properly force reneighbor on next timestep 2023-12-19 09:57:57 -05:00
64dc621027 check for rigid flag before fix_rigid 2023-12-18 19:34:13 -05:00
acdc4244ec initialize stored_body 2023-12-18 19:32:00 -05:00
c18de5dbd8 change how check for additional virial fixes is done 2023-12-18 18:48:20 -05:00
c13455bfa3 removed redundant acc_frac calculation in compute_vector 2023-12-18 18:00:41 -05:00
19be6d5f94 remove access to internal members of modify in loops 2023-12-18 17:59:30 -05:00
66411317cb check for tags and compatible neighbor list settings 2023-12-17 15:37:09 -05:00
b895b52fc1 small programming style update 2023-12-17 15:36:43 -05:00
17ddf26121 plug some more memory leaks 2023-12-17 12:07:53 -05:00
a65e85a12e avoid memory leaks and uninitialized data 2023-12-17 12:01:48 -05:00
2da1800357 must move function to Fix::init() since queried info may not be current during constructor 2023-12-17 12:01:33 -05:00
d392b17ff1 some more simplification and cleanup 2023-12-17 11:49:19 -05:00
623f2c4ea0 simplify creation of internal fixes and computes, use unique ID 2023-12-17 11:38:33 -05:00
7761b6022b small doc fix 2023-12-17 11:37:12 -05:00
1b9e33a17f initialized all class member pointer to NULL 2023-12-17 11:00:32 -05:00
f67b045f02 explain dependency on RIGID package 2023-12-17 10:52:31 -05:00
e91c72a0d2 replace non-ASCII characters so that PDF builds won't fail 2023-12-15 19:41:52 -05:00
dc17dc3f84 update for coding convention compliance 2023-12-15 18:53:46 -05:00
81a4da5da3 build system integration and handling of dependency on fix rigid/small 2023-12-15 18:50:42 -05:00
5506f42005 documentation intergration and fixes 2023-12-15 18:48:27 -05:00
51b38c5b24 make the Body struct standalone so we can use a forward declaration 2023-12-15 18:14:28 -05:00
06a445fd4c revert protection settings and add FixHMC as friend class instead 2023-12-15 17:46:51 -05:00
4a7f543036 change my email 2023-12-15 13:49:09 -05:00
f4e9523152 exclude .git-blame-ignore 2023-12-15 13:44:12 -05:00
c37ba54d27 rename git blame ignore file 2023-12-15 13:30:44 -05:00
a307d5ca7e add set_v back to public 2023-12-15 13:27:33 -05:00
e9ed0ec9cb add line at eof 2023-12-15 13:06:16 -05:00
a8df05939c merge upstream 2023-12-15 13:04:33 -05:00
5bd14e1b0f Added MC pkg to CI files 2023-12-14 14:49:39 -05:00
c8756f7f55 fixing merge issues 2023-12-14 13:34:55 -05:00
8f338f785e fixing merge issues 2023-12-14 13:33:28 -05:00
1033e727b8 reallocation conflict resolved 2023-12-14 13:26:48 -05:00
063e966ec3 Merge branch 'norealloc' into develop 2023-12-14 13:19:56 -05:00
473ccd98dc only copying ntotal in save peratom 2023-12-14 13:19:32 -05:00
52e14995fc removed realloc to test 2023-12-14 13:12:30 -05:00
c9a14ad8fb faster by not reallocating peratom vector 2023-12-14 12:38:45 -05:00
bd69063088 trying to increase speed by minimizing reallocations 2023-12-14 12:08:24 -05:00
c78e2a5dd3 touch up docs 2023-12-14 11:47:08 -05:00
8d252d75cf Added ra (resampling upon acceptance) to hmc doc). 2023-12-14 11:30:51 -05:00
dbf716edd0 moving hmc to MC package 2023-12-14 11:08:01 -05:00
19235f072f add contributing authors 2023-12-14 11:03:23 -05:00
940778b2ec more formatting 2023-12-14 10:55:09 -05:00
8115785673 formatting 2023-12-14 10:53:37 -05:00
129b63ac54 added memory usage calculation 2023-12-14 10:46:53 -05:00
c6417581bc minor edit to reset atom_map 2023-12-14 09:13:27 -05:00
31f753c7d0 current_peratom updated every time 2023-12-14 09:09:52 -05:00
95c6a9c25b make resample on accept default no 2023-12-13 12:07:34 -05:00
0461caf23e make resample on accept an option 2023-12-13 12:05:54 -05:00
57554c48b9 check for nullptr at source before copying or allocating 2023-12-13 12:03:48 -05:00
24e408b463 uncomment reverse_comm 2023-12-13 11:59:17 -05:00
539385afff remove unnecessary code and comments 2023-12-13 11:53:10 -05:00
63d6f1a1e2 removed random p when move accepted 2023-12-13 11:11:50 -05:00
37ba666309 remove tuning 2023-12-13 10:56:28 -05:00
1fc6a0e6dd Clarified the hmc algorithm in the doc file fix_hmc.rst 2023-12-12 15:18:11 -05:00
be22c63659 Added the default to the docs file fix_hmc.rst 2023-12-12 15:11:59 -05:00
3be9cc0a4f Touched up the docs file fix_hmc.rst 2023-12-12 14:56:05 -05:00
7d8ec9f8be temporarily removing parameter tuning 2023-12-10 17:18:57 -05:00
31869a5d6b adding more stored vectors just in case 2023-12-10 16:34:11 -05:00
1a908b2edd Merge branch 'develop' of github.com:draneyj/lammps_hmc into develop 2023-12-10 15:14:31 -05:00
c3fe7d4b58 added xcmimage to restoration, fixed lost atoms 2023-12-10 15:11:49 -05:00
f42f861328 Updated GA CI files to work on draneyj/lammps_hmc repo. 2023-12-10 14:58:53 -05:00
d4c0b24eac added atom tag storage 2023-12-10 10:57:55 -05:00
d155ac70f1 comment out rot keyword 2023-12-09 18:47:28 -05:00
83bbdd71f3 initialize map flag 2023-12-09 18:46:43 -05:00
cf68591184 remove erroneous line 2023-12-09 18:38:09 -05:00
8171741ccb trying to accept chaning number of atoms 2023-12-09 18:24:13 -05:00
5120af1aba added more keywords to the documentation 2023-12-01 16:26:23 -05:00
1356cb54a9 Documentation description modified, related commands, default and references added. 2023-12-01 14:17:58 -05:00
fa71278070 Syntax, Examples and Description added to fix_hmc.rst 2023-12-01 13:51:06 -05:00
5a91f3d51a Added fix_hmc.rst 2023-12-01 12:13:21 -05:00
b0550648bf Added group filter to body random velocities 2023-11-29 16:00:57 -05:00
8339cdc76a properly weight vcm for rigid bodies 2023-11-29 15:33:00 -05:00
04a7c6e920 modernize arg parse syntax 2023-11-29 00:35:59 -05:00
e1c1cc34bb random velocities for bodies and mom arg for zero vcm 2023-11-29 00:31:33 -05:00
d1290dc6cc add body copy for rigid bodies 2023-11-27 14:22:40 -05:00
966398d470 missed a line I needed to remove 2023-11-20 09:15:12 -05:00
3588fddef2 Merge pull request #1 from draneyj/pr_practice
added templates to class, allowing error
2023-11-20 07:40:48 -05:00
e7313515c1 added templates to class, allowing error 2023-11-19 16:35:45 -05:00
040b23ab27 removed warning aboout rigid support 2023-11-19 16:20:11 -05:00
496802c908 remove comments in restore_saved_state 2023-11-19 16:18:17 -05:00
920b49d5a8 peratom copy working (for x at least) 2023-11-18 18:56:30 -05:00
7692824bcf runs with new atom copy 2023-11-17 15:52:51 -05:00
aab3773a90 restored accidentally deleted code 2023-11-17 14:16:47 -05:00
e5f4d60888 re-added restoration function 2023-11-17 12:46:58 -05:00
d20b4c4c94 added restoration function 2023-11-17 12:19:49 -05:00
ebe287555c trying to store peratom data 2023-11-16 11:06:51 -05:00
645541bcc7 properly initialize vector output 2023-11-14 15:37:17 -05:00
e865df16a8 now runs without error 2023-11-14 14:33:44 -05:00
18583434b1 hacked away at the outdated code until it compiled 2023-11-11 18:03:48 -05:00
2413da64a4 adding source files from original implementation 2023-11-08 14:24:44 -05:00
1014 changed files with 120563 additions and 8772 deletions

View File

@ -110,7 +110,7 @@ git clone -b release --depth 10 https://github.com/lammps/lammps.git lammps-rele
cmake -S lammps-release/cmake -B build-release -G Ninja -D CMAKE_INSTALL_PREFIX=$PWD/lammps-static -D CMAKE_TOOLCHAIN_FILE=/usr/musl/share/cmake/linux-musl.cmake -C lammps-release/cmake/presets/most.cmake -C lammps-release/cmake/presets/kokkos-openmp.cmake -D DOWNLOAD_POTENTIALS=OFF -D BUILD_MPI=OFF -D BUILD_TESTING=OFF -D CMAKE_BUILD_TYPE=Release -D PKG_ATC=ON -D PKG_AWPMD=ON -D PKG_MANIFOLD=ON -D PKG_MESONT=ON -D PKG_MGPT=ON -D PKG_ML-PACE=ON -D PKG_ML-RANN=ON -D PKG_MOLFILE=ON -D PKG_PTM=ON -D PKG_QTB=ON -D PKG_SMTBQ=ON
cmake --build build-release --target all
cmake --build build-release --target install
/usr/musl/bin/x86_64-linux-musl-strip lammps-static/bin/*
/usr/musl/bin/x86_64-linux-musl-strip -g lammps-static/bin/*
tar -czvvf ../lammps-linux-x86_64-4Feb2025.tar.gz lammps-static
exit # fedora 41 container
cd ..

View File

@ -55,8 +55,8 @@ jobs:
uses: actions/cache@v4
with:
path: ${{ env.CCACHE_DIR }}
key: linux-cpp23-ccache-${{ github.sha }}
restore-keys: linux-cpp23-ccache-
key: linux-cpp23-ccache-${{ matrix.idx }}-${{ github.sha }}
restore-keys: linux-cpp23-ccache-${{ matrix.idx }}
- name: Building LAMMPS via CMake
shell: bash

View File

@ -3,9 +3,6 @@
# CMake build system
# This file is part of LAMMPS
cmake_minimum_required(VERSION 3.16)
if(CMAKE_VERSION VERSION_LESS 3.20)
message(WARNING "LAMMPS is planning to require at least CMake version 3.20 by Summer 2025. Please upgrade!")
endif()
########################################
# initialize version variables with project command
if(POLICY CMP0048)
@ -156,9 +153,6 @@ endif()
if(CMAKE_CXX_STANDARD LESS 11)
message(FATAL_ERROR "C++ standard must be set to at least 11")
endif()
if(CMAKE_CXX_STANDARD LESS 17)
message(WARNING "Selecting C++17 standard is preferred over C++${CMAKE_CXX_STANDARD}")
endif()
if(PKG_KOKKOS AND (CMAKE_CXX_STANDARD LESS 17))
set(CMAKE_CXX_STANDARD 17)
endif()
@ -244,15 +238,6 @@ option(CMAKE_POSITION_INDEPENDENT_CODE "Create object compatible with shared lib
option(BUILD_TOOLS "Build and install LAMMPS tools (msi2lmp, binary2txt, chain)" OFF)
option(BUILD_LAMMPS_GUI "Build and install the LAMMPS GUI" OFF)
# Support using clang-tidy for C++ files with selected options
set(ENABLE_CLANG_TIDY OFF CACHE BOOL "Include clang-tidy processing when compiling")
if(ENABLE_CLANG_TIDY)
set(CMAKE_CXX_CLANG_TIDY "clang-tidy;-checks=-*,performance-trivially-destructible,performance-unnecessary-copy-initialization,performance-unnecessary-value-param,readability-redundant-control-flow,readability-redundant-declaration,readability-redundant-function-ptr-dereference,readability-redundant-member-init,readability-redundant-string-cstr,readability-redundant-string-init,readability-simplify-boolean-expr,readability-static-accessed-through-instance,readability-static-definition-in-anonymous-namespace,readability-qualified-auto,misc-unused-parameters,modernize-deprecated-ios-base-aliases,modernize-loop-convert,modernize-shrink-to-fit,modernize-use-auto,modernize-use-using,modernize-use-override,modernize-use-bool-literals,modernize-use-emplace,modernize-return-braced-init-list,modernize-use-equals-default,modernize-use-equals-delete,modernize-replace-random-shuffle,modernize-deprecated-headers,modernize-use-nullptr,modernize-use-noexcept,modernize-redundant-void-arg;-fix;-header-filter=.*,header-filter=library.h,header-filter=fmt/*.h" CACHE STRING "clang-tidy settings")
else()
unset(CMAKE_CXX_CLANG_TIDY CACHE)
endif()
file(GLOB ALL_SOURCES CONFIGURE_DEPENDS ${LAMMPS_SOURCE_DIR}/[^.]*.cpp)
file(GLOB MAIN_SOURCES CONFIGURE_DEPENDS ${LAMMPS_SOURCE_DIR}/main.cpp)
list(REMOVE_ITEM ALL_SOURCES ${MAIN_SOURCES})
@ -277,6 +262,7 @@ option(CMAKE_VERBOSE_MAKEFILE "Generate verbose Makefiles" OFF)
set(STANDARD_PACKAGES
ADIOS
AMOEBA
APIP
ASPHERE
ATC
AWPMD
@ -369,17 +355,6 @@ foreach(PKG ${STANDARD_PACKAGES} ${SUFFIX_PACKAGES})
option(PKG_${PKG} "Build ${PKG} Package" OFF)
endforeach()
set(DEPRECATED_PACKAGES AWPMD ATC POEMS)
foreach(PKG ${DEPRECATED_PACKAGES})
if(PKG_${PKG})
message(WARNING
"The ${PKG} package will be removed from LAMMPS in Summer 2025 due to lack of "
"maintenance and use of code constructs that conflict with modern C++ compilers "
"and standards. Please contact developers@lammps.org if you have any concerns "
"about this step.")
endif()
endforeach()
######################################################
# packages with special compiler needs or external libs
######################################################
@ -476,6 +451,7 @@ pkg_depends(ELECTRODE KSPACE)
pkg_depends(EXTRA-MOLECULE MOLECULE)
pkg_depends(MESONT MOLECULE)
pkg_depends(RHEO BPM)
pkg_depends(APIP ML-PACE)
# detect if we may enable OpenMP support by default
set(BUILD_OMP_DEFAULT OFF)

View File

@ -57,8 +57,8 @@ if(DOWNLOAD_KOKKOS)
list(APPEND KOKKOS_LIB_BUILD_ARGS "-DCMAKE_CXX_EXTENSIONS=${CMAKE_CXX_EXTENSIONS}")
list(APPEND KOKKOS_LIB_BUILD_ARGS "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}")
include(ExternalProject)
set(KOKKOS_URL "https://github.com/kokkos/kokkos/archive/4.6.00.tar.gz" CACHE STRING "URL for KOKKOS tarball")
set(KOKKOS_MD5 "61b2b69ae50d83eedcc7d47a3fa3d6cb" CACHE STRING "MD5 checksum of KOKKOS tarball")
set(KOKKOS_URL "https://github.com/kokkos/kokkos/archive/4.6.02.tar.gz" CACHE STRING "URL for KOKKOS tarball")
set(KOKKOS_MD5 "14c02fac07bfcec48a1654f88ddee9c6" CACHE STRING "MD5 checksum of KOKKOS tarball")
mark_as_advanced(KOKKOS_URL)
mark_as_advanced(KOKKOS_MD5)
GetFallbackURL(KOKKOS_URL KOKKOS_FALLBACK)
@ -83,7 +83,7 @@ if(DOWNLOAD_KOKKOS)
add_dependencies(LAMMPS::KOKKOSCORE kokkos_build)
add_dependencies(LAMMPS::KOKKOSCONTAINERS kokkos_build)
elseif(EXTERNAL_KOKKOS)
find_package(Kokkos 4.6.00 REQUIRED CONFIG)
find_package(Kokkos 4.6.02 REQUIRED CONFIG)
target_link_libraries(lammps PRIVATE Kokkos::kokkos)
else()
set(LAMMPS_LIB_KOKKOS_SRC_DIR ${LAMMPS_LIB_SOURCE_DIR}/kokkos)

View File

@ -8,6 +8,16 @@ if(NOT PKG_MANYBODY)
set_property(TARGET lammps PROPERTY SOURCES "${LAMMPS_SOURCES}")
endif()
# fix hmc may only be installed if also fix rigid/small from RIGID is installed
if(NOT PKG_RIGID)
get_property(LAMMPS_FIX_HEADERS GLOBAL PROPERTY FIX)
list(REMOVE_ITEM LAMMPS_FIX_HEADERS ${LAMMPS_SOURCE_DIR}/MC/fix_hmc.h)
set_property(GLOBAL PROPERTY FIX "${LAMMPS_FIX_HEADERS}")
get_target_property(LAMMPS_SOURCES lammps SOURCES)
list(REMOVE_ITEM LAMMPS_SOURCES ${LAMMPS_SOURCE_DIR}/MC/fix_hmc.cpp)
set_property(TARGET lammps PROPERTY SOURCES "${LAMMPS_SOURCES}")
endif()
# fix neighbor/swap may only be installed if also the VORONOI package is installed
if(NOT PKG_VORONOI)
get_property(LAMMPS_FIX_HEADERS GLOBAL PROPERTY FIX)

View File

@ -53,7 +53,13 @@ else()
add_library(yaml-cpp::yaml-cpp ALIAS yaml-cpp)
endif()
add_subdirectory(${lib-pace} build-pace)
# fixup yaml-cpp/emitterutils.cpp for GCC 15+ until patch is applied
file(READ ${lib-pace}/yaml-cpp/src/emitterutils.cpp yaml_emitterutils)
string(REPLACE "#include <sstream>" "#include <sstream>\n#include <cinttypes>" yaml_tmp_emitterutils "${yaml_emitterutils}")
string(REPLACE "#include <cinttypes>\n#include <cinttypes>" "#include <cinttypes>" yaml_emitterutils "${yaml_tmp_emitterutils}")
file(WRITE ${lib-pace}/yaml-cpp/src/emitterutils.cpp "${yaml_emitterutils}")
add_subdirectory(${lib-pace} build-pace EXCLUDE_FROM_ALL)
set_target_properties(pace PROPERTIES CXX_EXTENSIONS ON OUTPUT_NAME lammps_pace${LAMMPS_MACHINE})
if(CMAKE_PROJECT_NAME STREQUAL "lammps")

View File

@ -7,6 +7,11 @@ export LC_ALL=C
BASEDIR="$(dirname "$0")"
EXENAME="$(basename "$0")"
# save old settings (for restoring them later)
OLDPATH="${PATH}"
OLDLDLIB="${LD_LIBRARY_PATH}"
# prepend path to find our custom executables
PATH="${BASEDIR}/bin:${PATH}"
# append to LD_LIBRARY_PATH to prefer local (newer) libs
@ -15,6 +20,8 @@ LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${BASEDIR}/lib"
# set some environment variables for LAMMPS etc.
LAMMPS_POTENTIALS="${BASEDIR}/share/lammps/potentials"
MSI2LMP_LIBRARY="${BASEDIR}/share/lammps/frc_files"
export LD_LIBRARY_PATH LAMMPS_POTENTIALS MSI2LMP_LIBRARY PATH
# export everything
export LD_LIBRARY_PATH LAMMPS_POTENTIALS MSI2LMP_LIBRARY PATH OLDPATH OLDLDLIB
exec "${BASEDIR}/bin/${EXENAME}" "$@"

View File

@ -33,6 +33,14 @@
#
#---------------------------------------------
# restore previously saved environment variables, if available
if [ -n "${OLDPATH}" ]
then
PATH="${OLDPATH}"
LD_LIBRARY_PATH="${OLDLDLIB}"
export PATH LD_LIBRARY_PATH
fi
NEW_LIBRARY_PATH="/usr/local/lib64"
for s in $(echo $LD_LIBRARY_PATH | sed -e 's/:/ /g')
do \

View File

@ -4,6 +4,7 @@
set(ALL_PACKAGES
ADIOS
AMOEBA
APIP
ASPHERE
ATC
AWPMD

View File

@ -6,6 +6,7 @@
set(ALL_PACKAGES
ADIOS
AMOEBA
APIP
ASPHERE
ATC
AWPMD

View File

@ -3,6 +3,7 @@
set(PACKAGES_WITH_LIB
ADIOS
APIP
ATC
AWPMD
COMPRESS

View File

@ -99,8 +99,6 @@ html: xmlgen globbed-tocs $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK) $(MATHJ
@(\
. $(VENV)/bin/activate ; env PYTHONWARNINGS= PYTHONDONTWRITEBYTECODE=1 \
sphinx-build -E $(SPHINXEXTRA) -b html -c $(SPHINXCONFIG) -d $(BUILDDIR)/doctrees $(RSTDIR) html ;\
touch $(RSTDIR)/Fortran.rst ; env PYTHONWARNINGS= PYTHONDONTWRITEBYTECODE=1 \
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 "############################################" ; env PYTHONWARNINGS= PYTHONDONTWRITEBYTECODE=1 \
@ -162,8 +160,6 @@ epub: xmlgen globbed-tocs $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK)
@(\
. $(VENV)/bin/activate ; env PYTHONWARNINGS= PYTHONDONTWRITEBYTECODE=1 \
sphinx-build -E $(SPHINXEXTRA) -b epub -c $(SPHINXCONFIG) -d $(BUILDDIR)/doctrees $(RSTDIR) epub ;\
touch $(RSTDIR)/Fortran.rst ; env PYTHONWARNINGS= PYTHONDONTWRITEBYTECODE=1 \
sphinx-build $(SPHINXEXTRA) -b epub -c $(SPHINXCONFIG) -d $(BUILDDIR)/doctrees $(RSTDIR) epub ;\
rm -f $(BUILDDIR)/doxygen/xml/run.stamp;\
deactivate ;\
)
@ -183,8 +179,6 @@ pdf: xmlgen globbed-tocs $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK)
@(\
. $(VENV)/bin/activate ; env PYTHONWARNINGS= PYTHONDONTWRITEBYTECODE=1 \
sphinx-build -E $(SPHINXEXTRA) -b latex -c $(SPHINXCONFIG) -d $(BUILDDIR)/doctrees $(RSTDIR) latex ;\
touch $(RSTDIR)/Fortran.rst ; env PYTHONWARNINGS= PYTHONDONTWRITEBYTECODE=1 \
sphinx-build $(SPHINXEXTRA) -b latex -c $(SPHINXCONFIG) -d $(BUILDDIR)/doctrees $(RSTDIR) latex ;\
rm -f $(BUILDDIR)/doxygen/xml/run.stamp;\
echo "############################################" ; env PYTHONWARNINGS= PYTHONDONTWRITEBYTECODE=1 \
rst_anchor_check src/*.rst ;\
@ -256,6 +250,15 @@ link_check : $(VENV) html
deactivate ;\
)
upgrade: $(VENV)
@(\
. $(VENV)/bin/activate; \
pip $(PIP_OPTIONS) install --upgrade pip; \
pip $(PIP_OPTIONS) install --upgrade wheel; \
pip $(PIP_OPTIONS) install --upgrade -r $(BUILDDIR)/utils/requirements.txt; \
deactivate;\
)
xmlgen : doxygen/xml/index.xml
doxygen/Doxyfile: doxygen/Doxyfile.in

View File

@ -28,28 +28,6 @@ variable VERBOSE set to 1:
----------
.. _clang-tidy:
Enable static code analysis with clang-tidy (CMake only)
--------------------------------------------------------
The `clang-tidy tool <https://clang.llvm.org/extra/clang-tidy/>`_ is a
static code analysis tool to diagnose (and potentially fix) typical
programming errors or coding style violations. It has a modular framework
of tests that can be adjusted to help identifying problems before they
become bugs and also assist in modernizing large code bases (like LAMMPS).
It can be enabled for all C++ code with the following CMake flag
.. code-block:: bash
-D ENABLE_CLANG_TIDY=value # value = no (default) or yes
With this flag enabled all source files will be processed twice, first to
be compiled and then to be analyzed. Please note that the analysis can be
significantly more time-consuming than the compilation itself.
----------
.. _iwyu_processing:
Report missing and unneeded '#include' statements (CMake only)
@ -523,7 +501,7 @@ to do this to install it via pip:
.. code-block:: bash
pip install git+https://github.com/gcovr/gcovr.git
python3 -m pip install gcovr
After post-processing with ``gen_coverage_html`` the results are in
a folder ``coverage_html`` and can be viewed with a web browser.

View File

@ -35,6 +35,7 @@ This is the list of packages that may require additional steps.
:columns: 6
* :ref:`ADIOS <adios>`
* :ref:`APIP <apip>`
* :ref:`ATC <atc>`
* :ref:`AWPMD <awpmd>`
* :ref:`COLVARS <colvar>`
@ -614,6 +615,9 @@ They must be specified in uppercase.
* - ZEN4
- HOST
- AMD Zen4 architecture
* - ZEN5
- HOST
- AMD Zen5 architecture
* - RISCV_SG2042
- HOST
- SG2042 (RISC-V) CPUs
@ -668,6 +672,12 @@ They must be specified in uppercase.
* - HOPPER90
- GPU
- NVIDIA Hopper generation CC 9.0
* - BLACKWELL100
- GPU
- NVIDIA Blackwell generation CC 10.0
* - BLACKWELL120
- GPU
- NVIDIA Blackwell generation CC 12.0
* - AMD_GFX906
- GPU
- AMD GPU MI50/60
@ -716,8 +726,11 @@ They must be specified in uppercase.
* - INTEL_PVC
- GPU
- Intel GPU Ponte Vecchio
* - INTEL_DG2
- GPU
- Intel GPU DG2
This list was last updated for version 4.6.0 of the Kokkos library.
This list was last updated for version 4.6.2 of the Kokkos library.
.. tabs::
@ -1272,6 +1285,34 @@ systems.
----------
.. _apip:
APIP package
-----------------------------
The APIP package depends on the library of the
:ref:`ML-PACE <ml-pace>` package.
The code for the library can be found
at: `https://github.com/ICAMS/lammps-user-pace/ <https://github.com/ICAMS/lammps-user-pace/>`_
.. tabs::
.. tab:: CMake build
No additional settings are needed besides ``-D PKG_APIP=yes``
and ``-D PKG_ML-PACE=yes``.
One can use a local version of the ML-PACE library instead of
automatically downloading the library as described :ref:`here <ml-pace>`.
.. tab:: Traditional make
You need to install the ML-PACE package *first* and follow
the instructions :ref:`here <ml-pace>` before installing
the APIP package.
----------
.. _atc:
ATC package

View File

@ -57,6 +57,8 @@ Python interpreter version 3.8 or later, 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``.
You can also upgrade those packages to their latest available versions
with ``make upgrade``.
For the documentation build a python virtual environment is set up in
the folder ``doc/docenv`` and various python packages are installed into
@ -82,6 +84,7 @@ folder. The following ``make`` commands are available:
make clean # remove intermediate RST files created by HTML build
make clean-all # remove entire build folder and any cached data
make upgrade # upgrade the python packages in the virtual environment
make anchor_check # check for duplicate anchor labels
make style_check # check for complete and consistent style lists

View File

@ -22,6 +22,7 @@ OPT.
* :doc:`append/atoms <fix_append_atoms>`
* :doc:`atc <fix_atc>`
* :doc:`atom/swap <fix_atom_swap>`
* :doc:`atom_weight/apip <fix_atom_weight_apip>`
* :doc:`ave/atom <fix_ave_atom>`
* :doc:`ave/chunk <fix_ave_chunk>`
* :doc:`ave/correlate <fix_ave_correlate>`
@ -65,7 +66,7 @@ OPT.
* :doc:`electrode/conp (i) <fix_electrode>`
* :doc:`electrode/conq (i) <fix_electrode>`
* :doc:`electrode/thermo (i) <fix_electrode>`
* :doc:`electron/stopping <fix_electron_stopping>`
* :doc:`electron/stopping (k) <fix_electron_stopping>`
* :doc:`electron/stopping/fit <fix_electron_stopping>`
* :doc:`enforce2d (k) <fix_enforce2d>`
* :doc:`eos/cv <fix_eos_cv>`
@ -86,11 +87,14 @@ OPT.
* :doc:`halt <fix_halt>`
* :doc:`heat <fix_heat>`
* :doc:`heat/flow <fix_heat_flow>`
* :doc:`hmc <fix_hmc>`
* :doc:`hyper/global <fix_hyper_global>`
* :doc:`hyper/local <fix_hyper_local>`
* :doc:`imd <fix_imd>`
* :doc:`indent <fix_indent>`
* :doc:`ipi <fix_ipi>`
* :doc:`lambda/apip <fix_lambda_apip>`
* :doc:`lambda_thermostat/apip <fix_lambda_thermostat_apip>`
* :doc:`langevin (k) <fix_langevin>`
* :doc:`langevin/drude <fix_langevin_drude>`
* :doc:`langevin/eff <fix_langevin_eff>`
@ -113,6 +117,7 @@ OPT.
* :doc:`mvv/tdpd <fix_mvv_dpd>`
* :doc:`neb <fix_neb>`
* :doc:`neb/spin <fix_neb_spin>`
* :doc:`neighbor/swap <fix_neighbor_swap>`
* :doc:`nonaffine/displacement <fix_nonaffine_displacement>`
* :doc:`nph (ko) <fix_nh>`
* :doc:`nph/asphere (o) <fix_nph_asphere>`

View File

@ -96,7 +96,9 @@ OPT.
* :doc:`eam/cd <pair_eam>`
* :doc:`eam/cd/old <pair_eam>`
* :doc:`eam/fs (gikot) <pair_eam>`
* :doc:`eam/fs/apip <pair_eam_apip>`
* :doc:`eam/he <pair_eam>`
* :doc:`eam/apip <pair_eam_apip>`
* :doc:`edip (o) <pair_edip>`
* :doc:`edip/multi <pair_edip>`
* :doc:`edpd (g) <pair_mesodpd>`
@ -124,6 +126,9 @@ OPT.
* :doc:`ilp/tmd (t) <pair_ilp_tmd>`
* :doc:`kolmogorov/crespi/full <pair_kolmogorov_crespi_full>`
* :doc:`kolmogorov/crespi/z <pair_kolmogorov_crespi_z>`
* :doc:`lambda/input/apip <pair_lambda_input_apip>`
* :doc:`lambda/input/csp/apip <pair_lambda_input_apip>`
* :doc:`lambda/zone/apip <pair_lambda_zone_apip>`
* :doc:`lcbop <pair_lcbop>`
* :doc:`lebedeva/z <pair_lebedeva_z>`
* :doc:`lennard/mdf <pair_mdf>`
@ -237,6 +242,9 @@ OPT.
* :doc:`oxrna2/coaxstk <pair_oxrna2>`
* :doc:`pace (k) <pair_pace>`
* :doc:`pace/extrapolation (k) <pair_pace>`
* :doc:`pace/apip <pair_pace_apip>`
* :doc:`pace/fast/apip <pair_pace_apip>`
* :doc:`pace/precise/apip <pair_pace_apip>`
* :doc:`pedone (o) <pair_pedone>`
* :doc:`pod (k) <pair_pod>`
* :doc:`peri/eps <pair_peri>`

View File

@ -30,6 +30,7 @@ Available topics in mostly chronological order are:
- `Use Output::get_dump_by_id() instead of Output::find_dump()`_
- `Refactored grid communication using Grid3d/Grid2d classes instead of GridComm`_
- `FLERR as first argument to minimum image functions in Domain class`_
- `Use utils::logmesg() instead of error->warning()`_
----
@ -655,3 +656,27 @@ New:
double r2 = sqrt(delx2 * delx2 + dely2 * dely2 + delz2 * delz2);
This change is **required** or else the code will not compile.
Use utils::logmesg() instead of error->warning()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. versionchanged:: TBD
The ``Error::message()`` method has been removed since its functionality
has been superseded by the :cpp:func:`utils::logmesg` function.
Old:
.. code-block:: c++
if (comm->me == 0) {
error->message(FLERR, "INFO: About to read data file: {}", filename);
}
New:
.. code-block:: c++
if (comm->me == 0) utils::logmesg(lmp, "INFO: About to read data file: {}\n", filename);
This change is **required** or else the code will not compile.

View File

@ -1,124 +1,149 @@
Common problems
===============
Common issues that are often regarded as bugs
=============================================
If two LAMMPS runs do not produce the exact same answer on different
machines or different numbers of processors, this is typically not a
bug. In theory you should get identical answers on any number of
processors and on any machine. In practice, numerical round-off can
cause slight differences and eventual divergence of molecular dynamics
phase space trajectories within a few 100s or few 1000s of timesteps.
However, the statistical properties of the two runs (e.g. average
energy or temperature) should still be the same.
The list below are some random notes on behavior of LAMMPS that is
sometimes unexpected or even considered a bug. Most of the time, these
are just issues of understanding how LAMMPS is implemented and
parallelized. Please also have a look at the :doc:`Error details
discussions page <Errors_details>` that contains recommendations for
tracking down issues and explanations for error messages that may
sometimes be confusing or need additional explanations.
If the :doc:`velocity <velocity>` command is used to set initial atom
velocities, a particular atom can be assigned a different velocity
when the problem is run on a different number of processors or on
different machines. If this happens, the phase space trajectories of
the two simulations will rapidly diverge. See the discussion of the
*loop* option in the :doc:`velocity <velocity>` command for details and
options that avoid this issue.
- A LAMMPS simulation typically has two stages, 1) issuing commands
and 2) run or minimize. Most LAMMPS errors are detected in stage 1),
others at the beginning of stage 2), and finally others like a bond
stretching too far may or lost atoms or bonds may not occur until the
middle of a run.
Similarly, the :doc:`create_atoms <create_atoms>` command generates a
lattice of atoms. For the same physical system, the ordering and
numbering of atoms by atom ID may be different depending on the number
of processors.
- If two LAMMPS runs do not produce the exact same answer on different
machines or different numbers of processors, this is typically not a
bug. In theory you should get identical answers on any number of
processors and on any machine. In practice, numerical round-off can
cause slight differences and eventual divergence of molecular dynamics
phase space trajectories within a few 100s or few 1000s of timesteps.
This can be triggered by different ordering of atoms due to different
domain decompositions, but also through different CPU architectures,
different operating systems, different compilers or compiler versions,
different compiler optimization levels, different FFT libraries.
However, the statistical properties of the two runs (e.g. average
energy or temperature) should still be the same.
Some commands use random number generators which may be setup to
produce different random number streams on each processor and hence
will produce different effects when run on different numbers of
processors. A commonly-used example is the :doc:`fix langevin <fix_langevin>` command for thermostatting.
- If the :doc:`velocity <velocity>` command is used to set initial atom
velocities, a particular atom can be assigned a different velocity
when the problem is run on a different number of processors or on
different machines. If this happens, the phase space trajectories of
the two simulations will rapidly diverge. See the discussion of the
*loop* option in the :doc:`velocity <velocity>` command for details
and options that avoid this issue.
A LAMMPS simulation typically has two stages, setup and run. Most
LAMMPS errors are detected at setup time; others like a bond
stretching too far may not occur until the middle of a run.
- Similarly, the :doc:`create_atoms <create_atoms>` command generates a
lattice of atoms. For the same physical system, the ordering and
numbering of atoms by atom ID may be different depending on the number
of processors.
LAMMPS tries to flag errors and print informative error messages so
you can fix the problem. For most errors it will also print the last
input script command that it was processing. Of course, LAMMPS cannot
figure out your physics or numerical mistakes, like choosing too big a
timestep, specifying erroneous force field coefficients, or putting 2
atoms on top of each other! If you run into errors that LAMMPS
does not catch that you think it should flag, please send an email to
the `developers <https://www.lammps.org/authors.html>`_ or create an new
topic on the dedicated `MatSci forum section <https://matsci.org/lammps/>`_.
- Some commands use random number generators which may be setup to
produce different random number streams on each processor and hence
will produce different effects when run on different numbers of
processors. A commonly-used example is the :doc:`fix langevin
<fix_langevin>` command for thermostatting.
If you get an error message about an invalid command in your input
script, you can determine what command is causing the problem by
looking in the log.lammps file or using the :doc:`echo command <echo>`
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 switch <Run_options>`. The installation and
compilation of optional packages is explained on the
:doc:`Build packages <Build_package>` doc page.
- LAMMPS tries to flag errors and print informative error messages so
you can fix the problem. For most errors it will also print the last
input script command that it was processing or even point to the
keyword that is causing troubles. Of course, LAMMPS cannot figure out
your physics or numerical mistakes, like choosing too big a timestep,
specifying erroneous force field coefficients, or putting 2 atoms on
top of each other! Also, LAMMPS does not know what you *intend* to
do, but very strictly applies the syntax as described in the
documentation. If you run into errors that LAMMPS does not catch that
you think it should flag, please send an email to the `developers
<https://www.lammps.org/authors.html>`_ or create an new topic on the
dedicated `MatSci forum section <https://matsci.org/lammps/>`_.
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
may also simply read a bogus argument and assign a value that is
valid, but not what you wanted. E.g. trying to read the string "abc"
as an integer value of 0. Careful reading of the associated doc page
for the command should allow you to fix these problems. In most cases,
where LAMMPS expects to read a number, either integer or floating point,
it performs a stringent test on whether the provided input actually
is an integer or floating-point number, respectively, and reject the
input with an error message (for instance, when an integer is required,
but a floating-point number 1.0 is provided):
- If you get an error message about an invalid command in your input
script, you can determine what command is causing the problem by
looking in the log.lammps file or using the :doc:`echo command <echo>`
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 switch <Run_options>`. The installation and
compilation of optional packages is explained on the :doc:`Build
packages <Build_package>` doc page.
.. parsed-literal::
- 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
may also simply read a bogus argument and assign a value that is
valid, but not what you wanted. E.g. trying to read the string "abc"
as an integer value of 0. Careful reading of the associated doc page
for the command should allow you to fix these problems. In most cases,
where LAMMPS expects to read a number, either integer or floating
point, it performs a stringent test on whether the provided input
actually is an integer or floating-point number, respectively, and
reject the input with an error message (for instance, when an integer
is required, but a floating-point number 1.0 is provided):
ERROR: Expected integer parameter instead of '1.0' in input script or data file
.. parsed-literal::
Some commands allow for using variable references in place of numeric
constants so that the value can be evaluated and may change over the
course of a run. This is typically done with the syntax *v_name* for a
parameter, where name is the name of the variable. On the other hand,
immediate variable expansion with the syntax ${name} is performed while
reading the input and before parsing commands,
ERROR: Expected integer parameter instead of '1.0' in input script or data file
.. note::
- Some commands allow for using variable references in place of numeric
constants so that the value can be evaluated and may change over the
course of a run. This is typically done with the syntax *v_name* for
a parameter, where name is the name of the variable. On the other
hand, immediate variable expansion with the syntax ${name} is
performed while reading the input and before parsing commands,
Using a variable reference (i.e. *v_name*) is only allowed if
the documentation of the corresponding command explicitly says it is.
Otherwise, you will receive an error message of this kind:
.. note::
.. parsed-literal::
Using a variable reference (i.e. *v_name*) is only allowed if
the documentation of the corresponding command explicitly says it is.
Otherwise, you will receive an error message of this kind:
ERROR: Expected floating point parameter instead of 'v_name' in input script or data file
.. parsed-literal::
Generally, LAMMPS will print a message to the screen and logfile and
exit gracefully when it encounters a fatal error. Sometimes it will
print a WARNING to the screen and logfile and continue on; you can
decide if the WARNING is important or not. A WARNING message that is
generated in the middle of a run is only printed to the screen, not to
the logfile, to avoid cluttering up thermodynamic output. If LAMMPS
crashes or hangs without spitting out an error message first then it
could be a bug (see :doc:`this section <Errors_bugs>`) or one of the following
cases:
ERROR: Expected floating point parameter instead of 'v_name' in input script or data file
LAMMPS runs in the available memory a processor allows to be
allocated. Most reasonable MD runs are compute limited, not memory
limited, so this should not be a bottleneck on most platforms. Almost
all large memory allocations in the code are done via C-style malloc's
which will generate an error message if you run out of memory.
Smaller chunks of memory are allocated via C++ "new" statements. If
you are unlucky you could run out of memory just when one of these
small requests is made, in which case the code will crash or hang (in
parallel), since LAMMPS does not trap on those errors.
- Generally, LAMMPS will print a message to the screen and logfile and
exit gracefully when it encounters a fatal error. When running in
parallel this message may be stuck in an I/O buffer and LAMMPS will be
terminated before that buffer is printed. In that case you can try
adding the ``-nonblock`` or ``-nb`` command-line flag to turn off that
buffering. Please note that this should not be used for production
runs, since turning off buffering usually has a significant negative
impact on performance (even worse than :doc:`thermo_modify flush yes
<thermo_modify>`). Sometimes LAMMPS will print a WARNING to the
screen and logfile and continue on; you can decide if the WARNING is
important or not, but as a general rule do not ignore warnings that
you not understand. A WARNING message that is generated in the middle
of a run is only printed to the screen, not to the logfile, to avoid
cluttering up thermodynamic output. If LAMMPS crashes or hangs
without generating an error message first then it could be a bug
(see :doc:`this section <Errors_bugs>`).
Illegal arithmetic can cause LAMMPS to run slow or crash. This is
typically due to invalid physics and numerics that your simulation is
computing. If you see wild thermodynamic values or NaN values in your
LAMMPS output, something is wrong with your simulation. If you
suspect this is happening, it is a good idea to print out
thermodynamic info frequently (e.g. every timestep) via the
:doc:`thermo <thermo>` so you can monitor what is happening.
Visualizing the atom movement is also a good idea to ensure your model
is behaving as you expect.
- LAMMPS runs in the available memory a processor allows to be
allocated. Most reasonable MD runs are compute limited, not memory
limited, so this should not be a bottleneck on most platforms. Almost
all large memory allocations in the code are done via C-style malloc's
which will generate an error message if you run out of memory.
Smaller chunks of memory are allocated via C++ "new" statements. If
you are unlucky you could run out of memory just when one of these
small requests is made, in which case the code will crash or hang (in
parallel).
In parallel, one way LAMMPS can hang is due to how different MPI
implementations handle buffering of messages. If the code hangs
without an error message, it may be that you need to specify an MPI
setting or two (usually via an environment variable) to enable
buffering or boost the sizes of messages that can be buffered.
- Illegal arithmetic can cause LAMMPS to run slow or crash. This is
typically due to invalid physics and numerics that your simulation is
computing. If you see wild thermodynamic values or NaN values in your
LAMMPS output, something is wrong with your simulation. If you
suspect this is happening, it is a good idea to print out
thermodynamic info frequently (e.g. every timestep) via the
:doc:`thermo <thermo>` so you can monitor what is happening.
Visualizing the atom movement is also a good idea to ensure your model
is behaving as you expect.
- When running in parallel with MPI, one way LAMMPS can hang is because
LAMMPS has come across an error condition, but only on one or a few
MPI processes and not all of them. LAMMPS has two different "stop
with an error message" functions and the correct one has to be called
or else it will hang.

View File

@ -51,8 +51,11 @@ Parallel versus serial
^^^^^^^^^^^^^^^^^^^^^^
Issues where something is "lost" or "missing" often exhibit that issue
only when running in parallel. That doesn't mean there is no problem,
only the symptoms are not triggering an error quickly. Correspondingly,
*only* when running in parallel. That doesn't mean there is no problem
when running in serial, only the symptoms are not triggering an error.
This may be because there is no domain decomposition with just one
processor and thus all atoms are accessible, or it may be because the
problem will manifest faster with smaller subdomains. Correspondingly,
errors may be triggered faster with more processors and thus smaller
sub-domains.
@ -244,6 +247,25 @@ equal style (or similar) variables can only be expanded before the box
is defined if they do not reference anything that cannot be defined
before the box (e.g. a compute or fix reference or a thermo keyword).
.. _hint13:
Illegal ... command
^^^^^^^^^^^^^^^^^^^
These are a catchall error messages that used to be used a lot in LAMMPS
(also programmers are sometimes lazy). They usually include the name of
the source file and the line where the error happened. This can be used
to track down what caused the error (most often some form of syntax error)
by looking at the source code. However, this has two disadvantages: 1. one
has to check the source file from the exact same LAMMPS version, or else
the line number would be different or the core may have been rewritten and
that specific error does not exist anymore.
The LAMMPS developers are committed to replace these too generic error
messages with more descriptive errors, e.g. listing *which* keyword was
causing the error, so that it will be much simpler to look up the
correct syntax in the manual (and without referring to the source code).
------
.. _err0001:
@ -1029,13 +1051,15 @@ Even though the LAMMPS error message recommends to increase the "one"
parameter, this may not always be the correct solution. The neighbor
list overflow can also be a symptom for some other error that cannot be
easily detected. For example, a frequent reason for an (unexpected)
high density are incorrect box boundaries (since LAMMPS wraps atoms back
high density are incorrect box dimensions (since LAMMPS wraps atoms back
into the principal box with periodic boundaries) or coordinates provided
as fractional coordinates. In both cases, LAMMPS cannot easily know
whether the input geometry has such a high density (and thus requiring
more neighbor list storage per atom) by intention. Rather than blindly
increasing the "one" parameter, it is thus worth checking if this is
justified by the combination of density and cutoff.
as fractional coordinates (LAMMPS does not support this for data files).
In both cases, LAMMPS cannot easily know whether the input geometry has
such a high density (and thus requiring more neighbor list storage per
atom) on purpose or by accident. Rather than blindly increasing the
"one" parameter, it is thus worth checking if this is justified by the
combination of density and cutoff. This is particularly recommended
when using some tool(s) to convert input or data files.
When boosting (= increasing) the "one" parameter, it is recommended to
also increase the value for the "page" parameter to maintain the ratio

View File

@ -2099,7 +2099,7 @@ Procedures Bound to the :f:type:`lammps` Derived Type
--------
.. f:subroutine:: create_atoms([id,] type, x, [v,] [image,] [bexpand])
.. f:function:: create_atoms([id,] type, x, [v,] [image,] [bexpand])
This method calls :cpp:func:`lammps_create_atoms` to create additional atoms
from a given list of coordinates and a list of atom types. Additionally,
@ -2128,6 +2128,8 @@ Procedures Bound to the :f:type:`lammps` Derived Type
will be created, not dropped, and the box dimensions will be extended.
Default is ``.FALSE.``
:otype bexpand: logical,optional
:r atoms: number of created atoms
:rtype atoms: integer(c_int)
:to: :cpp:func:`lammps_create_atoms`
.. note::
@ -2152,6 +2154,18 @@ Procedures Bound to the :f:type:`lammps` Derived Type
--------
.. f:subroutine:: create_molecule(id, jsonstr)
Add molecule template from string with JSON data
.. versionadded:: TBD
:p character(len=\*) id: desired molecule-ID
:p character(len=\*) jsonstr: string with JSON data defining the molecule template
:to: :cpp:func:`lammps_create_molecule`
--------
.. f:function:: find_pair_neighlist(style[, exact][, nsub][, reqid])
Find index of a neighbor list requested by a pair style.

View File

@ -93,6 +93,7 @@ Packages howto
Howto_manifold
Howto_rheo
Howto_spins
Howto_apip
Tutorials howto
===============

225
doc/src/Howto_apip.rst Normal file
View File

@ -0,0 +1,225 @@
Adaptive-precision interatomic potentials (APIP)
================================================
The :ref:`PKG-APIP <PKG-APIP>` enables use of adaptive-precision potentials
as described in :ref:`(Immel) <Immel2025_1>`.
In the context of this package, precision refers to the accuracy of an interatomic
potential.
Modern machine-learning (ML) potentials translate the accuracy of DFT
simulations into MD simulations, i.e., ML potentials are more accurate
compared to traditional empirical potentials.
However, this accuracy comes at a cost: there is a considerable performance
gap between the evaluation of classical and ML potentials, e.g., the force
calculation of a classical EAM potential is 100-1000 times faster compared
to the ML-based ACE method.
The evaluation time difference results in a conflict between large time and
length scales on the one hand and accuracy on the other.
This conflict is resolved by an APIP model for simulations, in which the highest precision
is required only locally but not globally.
An APIP model uses a precise but
expensive ML potential only for a subset of atoms, while a fast
potential is used for the remaining atoms.
Whether the precise or the fast potential is used is determined
by a continuous switching parameter :math:`\lambda_i` that can be defined for each
atom :math:`i`.
The switching parameter can be adjusted dynamically during a simulation or
kept constant as explained below.
The potential energy :math:`E_i` of an atom :math:`i` described by an
adaptive-precision
interatomic potential is given by :ref:`(Immel) <Immel2025_1>`
.. math::
E_i = \lambda_i E_i^\text{(fast)} + (1-\lambda_i) E_i^\text{(precise)},
whereas :math:`E_i^\text{(fast)}` is the potential energy of atom :math:`i`
according to a fast interatomic potential,
:math:`E_i^\text{(precise)}` is the potential energy according to a precise
interatomic potential and :math:`\lambda_i\in[0,1]` is the
switching parameter that decides how the potential energies are weighted.
Adaptive-precision saves computation time when the computation of the
precise potential is not required for many atoms, i.e., when
:math:`\lambda_i=1` applies for many atoms.
The currently implemented potentials are:
.. list-table::
:header-rows: 1
* - Fast potential
- Precise potential
* - :doc:`ACE <pair_pace_apip>`
- :doc:`ACE <pair_pace_apip>`
* - :doc:`EAM <pair_eam_apip>`
-
In theory, any short-range potential can be used for an adaptive-precision
interatomic potential. How to implement a new (fast or precise)
adaptive-precision
potential is explained in :ref:`here <implementing_new_apip_styles>`.
The switching parameter :math:`\lambda_i` that combines the two potentials
can be dynamically calculated during a
simulation.
Alternatively, one can set a constant switching parameter before the start
of a simulation.
To run a simulation with an adaptive-precision potential, one needs the
following components:
.. tabs::
.. tab:: dynamic switching parameter
#. :doc:`atom_style apip <atom_style>` so that the switching parameter :math:`\lambda_i` can be stored.
#. A fast potential: :doc:`eam/apip <pair_eam_apip>` or :doc:`pace/fast/apip <pair_pace_apip>`.
#. A precise potential: :doc:`pace/precise/apip <pair_pace_apip>`.
#. :doc:`pair_style lambda/input/apip <pair_lambda_input_apip>` to calculate :math:`\lambda_i^\text{input}`, from which :math:`\lambda_i` is calculated.
#. :doc:`fix lambda/apip <fix_lambda_apip>` to calculate the switching parameter :math:`\lambda_i`.
#. :doc:`pair_style lambda/zone/apip <pair_lambda_zone_apip>` to calculate the spatial transition zone of the switching parameter.
#. :doc:`pair_style hybrid/overlay <pair_hybrid>` to combine the previously mentioned pair_styles.
#. :doc:`fix lambda_thermostat/apip <fix_lambda_thermostat_apip>` to conserve the energy when switching parameters change.
#. :doc:`fix atom_weight/apip <fix_atom_weight_apip>` to approximate the load caused by every atom, as the computations of the pair_styles are only required for a subset of atoms.
#. :doc:`fix balance <fix_balance>` to perform dynamic load balancing with the calculated load.
.. tab:: constant switching parameter
#. :doc:`atom_style apip <atom_style>` so that the switching parameter :math:`\lambda_i` can be stored.
#. A fast potential: :doc:`eam/apip <pair_eam_apip>` or :doc:`pace/fast/apip <pair_pace_apip>`.
#. A precise potential: :doc:`pace/precise/apip <pair_pace_apip>`.
#. :doc:`set <set>` command to set the switching parameter :math:`\lambda_i`.
#. :doc:`pair_style hybrid/overlay <pair_hybrid>` to combine the previously mentioned pair_styles.
#. :doc:`fix atom_weight/apip <fix_atom_weight_apip>` to approximate the load caused by every atom, as the computations of the pair_styles are only required for a subset of atoms.
#. :doc:`fix balance <fix_balance>` to perform dynamic load balancing with the calculated load.
----------
Example
"""""""
.. note::
How to select the values of the parameters of an adaptive-precision
interatomic potential is discussed in detail in :ref:`(Immel) <Immel2025_1>`.
.. tabs::
.. tab:: dynamic switching parameter
Lines like these would appear in the input script:
.. code-block:: LAMMPS
atom_style apip
comm_style tiled
pair_style hybrid/overlay eam/fs/apip pace/precise/apip lambda/input/csp/apip fcc cutoff 5.0 lambda/zone/apip 12.0
pair_coeff * * eam/fs/apip Cu.eam.fs Cu
pair_coeff * * pace/precise/apip Cu.yace Cu
pair_coeff * * lambda/input/csp/apip
pair_coeff * * lambda/zone/apip
fix 2 all lambda/apip 2.5 3.0 time_averaged_zone 4.0 12.0 110 110 min_delta_lambda 0.01
fix 3 all lambda_thermostat/apip N_rescaling 200
fix 4 all atom_weight/apip 100 eam ace lambda/input lambda/zone all
variable myweight atom f_4
fix 5 all balance 100 1.1 rcb weight var myweight
First, the :doc:`atom_style apip <atom_style>` and the communication style are set.
.. note::
Note, that :doc:`comm_style <comm_style>` *tiled* is required for the style *rcb* of
:doc:`fix balance <fix_balance>`, but not for APIP.
However, the flexibility offered by the balancing style *rcb*, compared to the
balancing style *shift*, is advantageous for APIP.
An adaptive-precision EAM-ACE potential, for which the switching parameter
:math:`\lambda` is calculated from the CSP, is defined via
:doc:`pair_style hybrid/overlay <pair_hybrid>`.
The fixes ensure that the switching parameter is calculated, the energy conserved,
the weight for the load balancing calculated and the load-balancing itself is done.
.. tab:: constant switching parameter
Lines like these would appear in the input script:
.. code-block:: LAMMPS
atom_style apip
comm_style tiled
pair_style hybrid/overlay eam/fs/apip pace/precise/apip
pair_coeff * * eam/fs/apip Cu.eam.fs Cu
pair_coeff * * pace/precise/apip Cu.yace Cu
# calculate lambda somehow
variable lambda atom ...
set group all apip/lambda v_lambda
fix 4 all atom_weight/apip 100 eam ace lambda/input lambda/zone all
variable myweight atom f_4
fix 5 all balance 100 1.1 rcb weight var myweight
First, the :doc:`atom_style apip <atom_style>` and the communication style are set.
.. note::
Note, that :doc:`comm_style <comm_style>` *tiled* is required for the style *rcb* of
:doc:`fix balance <fix_balance>`, but not for APIP.
However, the flexibility offered by the balancing style *rcb*, compared to the
balancing style *shift*, is advantageous for APIP.
An adaptive-precision EAM-ACE potential is defined via
:doc:`pair_style hybrid/overlay <pair_hybrid>`.
The switching parameter :math:`\lambda_i` of the adaptive-precision
EAM-ACE potential is set via the :doc:`set command <set>`.
The parameter is not updated during the simulation.
Therefore, the potential is conservative.
The fixes ensure that the weight for the load balancing is calculated
and the load-balancing itself is done.
----------
.. _implementing_new_apip_styles:
Implementing new APIP pair styles
"""""""""""""""""""""""""""""""""
One can introduce adaptive-precision to an existing pair style by modifying
the original pair style.
One should calculate the force
:math:`F_i = - \nabla_i \sum_j E_j^\text{original}` for a fast potential or
:math:`F_i = - (1-\nabla_i) \sum_j E_j^\text{original}` for a precise
potential from the original potential
energy :math:`E_j^\text{original}` to see where the switching parameter
:math:`\lambda_i` needs to be introduced in the force calculation.
The switching parameter :math:`\lambda_i` is known for all atoms :math:`i`
in force calculation routine.
One needs to introduce an abortion criterion based on :math:`\lambda_i` to
ensure that all not required calculations are skipped and compute time can
be saved.
Furthermore, one needs to provide the number of calculations and measure the
computation time.
Communication within the force calculation needs to be prevented to allow
effective load-balancing.
With communication, the load balancer cannot balance few calculations of the
precise potential on one processor with many computations of the fast
potential on another processor.
All changes in the pair_style pace/apip compared to the pair_style pace
are annotated and commented.
Thus, the pair_style pace/apip can serve as an example for the implementation
of new adaptive-precision potentials.
----------
.. _Immel2025_1:
**(Immel)** Immel, Drautz and Sutmann, J Chem Phys, 162, 114119 (2025)

View File

@ -1,10 +1,15 @@
Using LAMMPS-GUI
================
.. image:: JPG/lammps-gui-banner.png
:align: center
:scale: 75%
LAMMPS-GUI is a graphical text editor programmed using the `Qt Framework
<https://www.qt.io/>`_ and customized for editing LAMMPS input files. It
is linked to the :ref:`LAMMPS library <lammps_c_api>` and thus can run
LAMMPS directly using the contents of the editor's text buffer as input.
<https://www.qt.io/>`_ and customized for editing and running LAMMPS
input files. It is linked to the :ref:`LAMMPS library <lammps_c_api>`
and thus can run LAMMPS directly using the contents of the editor's text
buffer as input and without having to launch the LAMMPS executable.
It *differs* from other known interfaces to LAMMPS in that it can
retrieve and display information from LAMMPS *while it is running*,
@ -13,7 +18,7 @@ display visualizations created with the :doc:`dump image command
LAMMPS commands and styles, and directly integrates with a collection
of LAMMPS tutorials (:ref:`Gravelle1 <Gravelle1>`).
This document describes **LAMMPS-GUI version 1.6**.
This document describes **LAMMPS-GUI version 1.7**.
-----
@ -21,17 +26,20 @@ This document describes **LAMMPS-GUI version 1.6**.
----
LAMMPS-GUI tries to provide an experience similar to what people
traditionally would have running LAMMPS using a command-line window and
the console LAMMPS executable but just rolled into a single executable:
LAMMPS-GUI aims to provide the traditional experience of running LAMMPS
using a text editor, a command-line window, and launching the LAMMPS
text-mode executable printing output to the screen, but just integrated
into a single application:
- writing & editing LAMMPS input files with a text editor
- run LAMMPS on those input file with selected command-line flags
- extract data from the created files and visualize it with and
external software
- Write and edit LAMMPS input files using the built-in text editor.
- Run LAMMPS on those input file with command-line flags to enable a
specific accelerator package (or none).
- Extract data from the created files (like trajectory files, log files
with thermodynamic data, or images) and visualize it using external
software.
That procedure is quite effective for people proficient in using the
command-line, as that allows them to use tools for the individual steps
That traditional procedure is effective for people proficient in using the
command-line, as it allows them to use the tools for the individual steps
that they are most comfortable with. In fact, it is often *required* to
adopt this workflow when running LAMMPS simulations on high-performance
computing facilities.
@ -42,35 +50,46 @@ window or using external programs, let alone writing scripts to extract
data from the generated output. It also integrates well with graphical
desktop environments where the `.lmp` filename extension can be
registered with LAMMPS-GUI as the executable to launch when double
clicking on such files. Also, LAMMPS-GUI has support for drag-n-drop,
i.e. an input file can be selected and then moved and dropped on the
LAMMPS-GUI executable, and LAMMPS-GUI will launch and read the file into
its buffer. In many cases LAMMPS-GUI will be integrated into the
graphical desktop environment and can be launched like other
applications.
clicking on such files using a file manager. LAMMPS-GUI also has
support for 'drag and drop' for opening inputs: an input file can
be selected and then moved and dropped on the LAMMPS-GUI executable;
LAMMPS-GUI will launch and read the file into its buffer. Input files
also can be dropped into the editor window of the running LAMMPS-GUI
application, which will close the current file and open the new file.
In many cases LAMMPS-GUI will be integrated into the graphical desktop
environment and can be launched just like any other applications from
the graphical interface.
LAMMPS-GUI thus makes it easier for beginners to get started running
simple LAMMPS simulations. It is very suitable for tutorials on LAMMPS
since you only need to learn how to use a single program for most tasks
and thus time can be saved and people can focus on learning LAMMPS.
The tutorials at https://lammpstutorials.github.io/ are specifically
updated for use with LAMMPS-GUI and their tutorial materials can
be downloaded and edited directly from the GUI.
LAMMPS and is well-suited for LAMMPS tutorials, since you only need to
work with a single, ready-to-use program for most of the tasks. Plus it
is available for download as pre-compiled package for popular operating
systems (Linux, macOS, Windows). This saves time and allows users to
focus on learning LAMMPS itself, without the need to learn how to
compile LAMMPS, learn how to use the command line, or learn how to use a
separate text editor.
Another design goal is to keep the barrier low when replacing part of
the functionality of LAMMPS-GUI with external tools. That said, LAMMPS-GUI
has some unique functionality that is not found elsewhere:
The tutorials at https://lammpstutorials.github.io/ are specifically
updated for use with LAMMPS-GUI and their tutorial materials can be
downloaded and edited directly from within the GUI while automatically
loading the matching tutorial instructions into a webbrowser.
Yet the basic control flow remains similar to running LAMMPS from the
command line, so the barrier for replacing parts of the functionality of
LAMMPS-GUI with external tools is low. That said, LAMMPS-GUI offer some
unique features that are not easily found elsewhere:
- auto-adapting to features available in the integrated LAMMPS library
- auto-completion for LAMMPS commands and options
- context-sensitive online help
- auto-completion for available LAMMPS commands and options only
- context-sensitive online help for known LAMMPS commands
- start and stop of simulations via mouse or keyboard
- monitoring of simulation progress
- interactive visualization using the :doc:`dump image <dump_image>`
- monitoring of simulation progress and CPU use
- interactive visualization using the LAMMPS :doc:`dump image feature <dump_image>`
command with the option to copy-paste the resulting settings
- automatic slide show generation from dump image output at runtime
- automatic plotting of thermodynamic data at runtime
- inspection of binary restart files
- integration will a set of LAMMPS tutorials
.. admonition:: Download LAMMPS-GUI for your platform
:class: Hint
@ -93,7 +112,7 @@ has some unique functionality that is not found elsewhere:
-----
The following text provides a detailed tour of the features and
The following text provides a documentation of the features and
functionality of LAMMPS-GUI. Suggestions for new features and
reports of bugs are always welcome. You can use the :doc:`the same
channels as for LAMMPS itself <Errors_bugs>` for that purpose.
@ -230,8 +249,8 @@ editor buffer, which may contain multiple :doc:`run <run>` or
LAMMPS runs in a separate thread, so the GUI stays responsive and is
able to interact with the running calculation and access data it
produces. It is important to note that running LAMMPS this way is
using the contents of the input buffer for the run (via the
produces. It is important to note that running LAMMPS this way is using
the contents of the input buffer for the run (via the
:cpp:func:`lammps_commands_string()` function of the LAMMPS C-library
interface), and **not** the original file it was read from. Thus, if
there are unsaved changes in the buffer, they *will* be used. As an
@ -240,28 +259,55 @@ of a file from the *Run LAMMPS from File* menu entry or with
`Ctrl-Shift-Enter`. This option may be required in some rare cases
where the input uses some functionality that is not compatible with
running LAMMPS from a string buffer. For consistency, any unsaved
changes in the buffer must be either saved to the file or undone
before LAMMPS can be run from a file.
changes in the buffer must be either saved to the file or undone before
LAMMPS can be run from a file.
The line number of the currently executed command is highlighted in
green in the line number display for the *Editor* Window.
.. image:: JPG/lammps-gui-running.png
:align: center
:scale: 75%
While LAMMPS is running, the contents of the status bar change. On
the left side there is a text indicating that LAMMPS is running, which
also indicates the number of active threads, when thread-parallel
acceleration was selected in the *Preferences* dialog. On the right
While LAMMPS is running, the contents of the status bar change. The
text fields that normally show "Ready." and the current working
directory, change into an area showing the CPU utilization in percent.
Nest to it is a text indicating that LAMMPS is running, which also
indicates the number of active threads (in case thread-parallel
acceleration was selected in the *Preferences* dialog). On the right
side, a progress bar is shown that displays the estimated progress for
the current :doc:`run <run>` or :doc:`minimize <minimize>` command.
Also, the line number of the currently executed command is highlighted
in green.
.. admonition:: CPU Utilization
:class: note
The CPU Utilization should ideally be close to 100% times the number
of threads like in the screenshot image above. Since the GUI is
running as a separate thread, the CPU utilization can be higher, for
example when the GUI needs to work hard to keep up with the
simulation. This can be caused by having frequent thermo output or
running a simulation of a small system. In the *Preferences* dialog,
the polling interval for updating the the *Output* and *Charts*
windows can be set. The intervals may need to be lowered to not miss
data between *Charts* data updates or to avoid stalling when the
thermo output is not transferred to the *Output* window fast enough.
It is also possible to reduce the amount of data by increasing the
:doc:`thermo interval <thermo>`. LAMMPS-GUI detects, if the
associated I/O buffer is by a significant percentage and will print a
warning after the run with suggested adjustments. The utilization
can also be lower, e.g. when the simulation is slowed down by the
GUI or other processes also running on the host computer and
competing with LAMMPS-GUI for GPU resources.
.. image:: JPG/lammps-gui-buffer-warn.png
:align: center
:scale: 75%
If an error occurs (in the example below the command :doc:`label
<label>` was incorrectly capitalized as "Label"), an error message
dialog is shown and the line of the input which triggered the error is
highlighted. The state of LAMMPS in the status bar is set to "Failed."
instead of "Ready."
highlighted in red. The state of LAMMPS in the status bar is set to
"Failed." instead of "Ready."
.. image:: JPG/lammps-gui-run-error.png
:align: center
@ -351,33 +397,29 @@ plot of thermodynamic output of the LAMMPS calculation as shown below.
:align: center
:scale: 33%
The drop down menu on the top right allows selection of different
properties that are computed and written to thermo output. Only one
property can be shown at a time. The plots are updated regularly with
new data as the run progresses, so they can be used to visually monitor
the evolution of available properties. The update interval can be set
in the *Preferences* dialog. By default, the raw data for the selected
property is plotted as a blue graph. As soon as there are a sufficient
number of data points, there will be a second graph shown in red with a
smoothed version of the data. From the drop down menu on the top left,
you can select whether to plot only the raw data, only the smoothed
data or both. The smoothing uses a `Savitzky-Golay convolution filter
<https://en.wikipedia.org/wiki/Savitzky%E2%80%93Golay_filter>`_ The
window width (left) and order (right) parameters can be set in the boxes
next to the drop down menu. Default settings are 10 and 4 which means
that the smoothing window includes 10 points each to the left and the
right of the current data point for a total of 21 points and a fourth
order polynomial is fitted to the data in the window.
The "Data:" drop down menu on the top right allows selection of
different properties that are computed and written as thermodynamic
output to the output window. Only one property can be shown at a time.
The plots are updated regularly with new data as the run progresses, so
they can be used to visually monitor the evolution of available
properties. The update interval can be set in the *Preferences* dialog.
By default, the raw data for the selected property is plotted as a blue
graph. From the "Plot:" drop menu on the second row and on the left,
you can select whether to plot only raw data graph, only a smoothed data
graph, or both graphs on top of each other. The smoothing process uses
a `Savitzky-Golay convolution filter
<https://en.wikipedia.org/wiki/Savitzky%E2%80%93Golay_filter>`_. The
convolution window width (left) and order (right) parameters can be set
in the boxes next to the drop down menu. Default settings are 10 and 4
which means that the smoothing window includes 10 points each to the
left and the right of the current data point for a total of 21 points
and a fourth order polynomial is fitted to the data in the window.
The "Title:" and "Y:" input boxes allow to edit the text shown as the
plot title and the y-axis label, respectively. The text entered in the
"Title:" box is applied to *all* charts, while the "Y:" text changes
only the y-axis label of the currently *selected* plot.
You can use the mouse to zoom into the graph (hold the left button and
drag to mark an area) or zoom out (right click) and you can reset the
view with a click to the "lens" button next to the data drop down menu.
The window title shows the current run number that this chart window
corresponds to. Same as for the *Output* window, the chart window is
replaced on each new run, but the behavior can be changed in the
@ -409,6 +451,35 @@ multiple chart-related settings, like the default title, colors for the
graphs, default choice of the raw / smooth graph selection, and the
default chart graph size.
.. admonition:: Slowdown of Simulations from Charts Data Processing
:class: warning
Using frequent thermo output during long simulations can result in a
significant slowdown of that simulation since it is accumulating many
data points for each of the thermo properties in the chart window to
be redrawn with every update. The updates are consuming additional
CPU time when smoothing enabled. This slowdown can be confirmed when
an increasing percentage of the total run time is spent in the
"Output" or "Other" sections of the :doc:`MPI task timing breakdown
<Run_output>`. It is thus recommended to use a large enough value as
argument `N` for the :doc:`thermo command <thermo>` and to select
plotting only the "Raw" data in the *Charts Window* during such
simulations. It is always possible to switch between the different
display styles for charts during the simulation and after it has
finished.
.. versionchanged:: 1.7
As of LAMMPS-GUI version 1.7 the chart data processing is
significantly optimized compared to older versions of LAMMPS-GUI.
The general problem of accumulating excessive amounts of data
and the overhead of too frequently polling LAMMPS for new data
cannot be optimized away, though. If necessary, the command
line LAMMPS executable needs to be used and the output accumulated
of a very fast disk (e.g. a high-performance SSD).
Image Slide Show
----------------
@ -640,13 +711,27 @@ generated with a :doc:`write_data command <write_data>`. The third
window is a :ref:`Snapshot Image Viewer <snapshot_viewer>` containing a
visualization of the system in the restart.
If the restart file is larger than 250 MBytes, a dialog will ask
for confirmation before continuing, since large restart files
may require large amounts of RAM since the entire system must
be read into RAM. Thus restart file for large simulations that
have been run on an HPC cluster may overload a laptop or local
workstation. The *Show Details...* button will display a rough
estimate of the additional memory required.
.. |inspect1| image:: JPG/lammps-gui-inspect-data.png
:width: 32%
.. |inspect2| image:: JPG/lammps-gui-inspect-info.png
:width: 32%
.. |inspect3| image:: JPG/lammps-gui-inspect-image.png
:width: 32%
|inspect1| |inspect2| |inspect3|
.. admonition:: Large Restart Files
:class: warning
If the restart file is larger than 250 MBytes, a dialog will ask for
confirmation before continuing, since large restart files may require
large amounts of RAM since the entire system must be read into RAM.
Thus restart file for large simulations that have been run on an HPC
cluster may overload a laptop or local workstation. The *Show
Details...* button will display a rough estimate of the additional
memory required.
Menu
----
@ -718,6 +803,12 @@ timestep. The *Stop LAMMPS* entry will do this by calling the
:cpp:func:`lammps_force_timeout` library function, which is equivalent
to a :doc:`timer timeout 0 <timer>` command.
The *Relaunch LAMMPS Instance* will destroy the current LAMMPS thread
and free its data and then create a new thread with a new LAMMPS
instance. This is usually not needed, since LAMMPS-GUI tries to detect
when this is needed and does it automatically. This is available
in case it missed something and LAMMPS behaves in unexpected ways.
The *Set Variables...* entry opens a dialog box where
:doc:`index style variables <variable>` can be set. Those variables
are passed to the LAMMPS instance when it is created and are thus
@ -772,6 +863,10 @@ then start downloading the files requested (download progress is
reported in the status line) and load the first input file for the
selected session into LAMMPS-GUI.
.. image:: JPG/lammps-gui-tutorials.png
:align: center
:scale: 50%
About
^^^^^
@ -878,13 +973,12 @@ General Settings:
- *Replace image window on new render:* when checked, an existing
chart window will be replaced when a new snapshot image is requested,
otherwise each command will create a new image window.
- *Path to LAMMPS Shared Library File:* this option is only visible
when LAMMPS-GUI was compiled to load the LAMMPS library at run time
instead of being linked to it directly. With the *Browse..* button
or by changing the text, a different shared library file with a
different compilation of LAMMPS with different settings or from a
different version can be loaded. After this setting was changed,
LAMMPS-GUI needs to be re-launched.
- *Download tutorial solutions enabled* this controls whether the
"Download solutions" option is enabled by default when setting up
a tutorial.
- *Open tutorial webpage enabled* this controls whether the "Open
tutorial webpage in web browser" option is enabled by default when
setting up a tutorial.
- *Select Default Font:* Opens a font selection dialog where the type
and size for the default font (used for everything but the editor and
log) of the application can be set.
@ -908,16 +1002,31 @@ General Settings:
or for downloading tutorial files from the *Tutorials* menu. If the
``https_proxy`` environment variable was set externally, its value is
displayed but cannot be changed.
- *Path to LAMMPS Shared Library File:* this option is only visible
when LAMMPS-GUI was compiled to load the LAMMPS library at run time
instead of being linked to it directly. With the *Browse..* button
or by changing the text, a different shared library file with a
different compilation of LAMMPS with different settings or from a
different version can be loaded. After this setting was changed,
LAMMPS-GUI needs to be re-launched.
Accelerators:
^^^^^^^^^^^^^
This tab enables selection of an accelerator package for LAMMPS to use
and is equivalent to using the `-suffix` and `-package` flags on the
command-line. Only settings supported by the LAMMPS library and local
hardware are available. The `Number of threads` field allows setting
the maximum number of threads for the accelerator packages that use
threads.
This tab enables selection of an accelerator package and modify some of
its settings to use for running LAMMPS and is equivalent to using the
:doc:`-sf <suffix>` and :doc:`-pk <package>` flags :doc:`on the
command-line <Run_options>`. Only settings supported by the LAMMPS
library and local hardware are available. The `Number of threads` field
allows setting the number of threads for the accelerator packages that
support using threads (OPENMP, INTEL, KOKKOS, and GPU). Furthermore,
the choice of precision mode (double, mixed, or single) for the INTEL
package can be selected and for the GPU package, whether the neighbor
lists are built on the GPU or the host (required for :doc:`pair style
hybrid <pair_hybrid>`) and whether only pair styles should be
accelerated (i.e. run PPPM entirely on the CPU, which sometimes leads
to better overall performance). Whether settings can be changed depends
on which accelerator package is chosen (or "None").
Snapshot Image:
^^^^^^^^^^^^^^^

View File

@ -8,6 +8,18 @@ the two O-H bonds and the H-O-H angle rigid. A bond style of
*harmonic* and an angle style of *harmonic* or *charmm* should also be
used.
One suitable pair style with cutoff Coulomb would for instance be:
* :doc:`pair_style lj/cut/coul/cut <pair_lj_cut_coul>`
These commands are examples for a long-range Coulomb model:
* :doc:`pair_style lj/cut/coul/long <pair_lj_cut_coul>`
* :doc:`pair_style lj/cut/coul/long/soft <pair_fep_soft>`
* :doc:`kspace_style pppm <kspace_style>`
* :doc:`pair_style lj/long/coul/long <pair_lj_long>`
* :doc:`kspace_style pppm/disp <kspace_style>`
These are the additional parameters (in real units) to set for O and H
atoms and the water molecule to run a rigid SPC model.
@ -39,7 +51,9 @@ the SPC and SPC/E models.
Below is the code for a LAMMPS input file and a molecule file
(``spce.mol``) of SPC/E water for use with the :doc:`molecule command
<molecule>` demonstrating how to set up a small bulk water system for
SPC/E with rigid bonds.
SPC/E with rigid bonds. For simplicity and speed the example uses a
cutoff Coulomb. Most production simulations require long-range Coulomb
instead.
.. code-block:: LAMMPS

View File

@ -5,17 +5,24 @@ The TIP3P water model as implemented in CHARMM :ref:`(MacKerell)
<howto-tip3p>` specifies a 3-site rigid water molecule with charges and
Lennard-Jones parameters assigned to each of the three atoms.
A suitable pair style with cutoff Coulomb would be:
One suitable pair style with cutoff Coulomb would for instance be:
* :doc:`pair_style lj/cut/coul/cut <pair_lj_cut_coul>`
or these commands for a long-range Coulomb model:
These commands are examples for a long-range Coulomb model:
* :doc:`pair_style lj/cut/coul/long <pair_lj_cut_coul>`
* :doc:`pair_style lj/cut/coul/long/soft <pair_fep_soft>`
* :doc:`kspace_style pppm <kspace_style>`
* :doc:`pair_style lj/long/coul/long <pair_lj_long>`
* :doc:`kspace_style pppm/disp <kspace_style>`
And these pair styles are compatible with the CHARMM force field:
* :doc:`pair_style lj/charmm/coul/charmm <pair_charmm>`
* :doc:`pair_style lj/charmm/coul/long <pair_charmm>`
* :doc:`pair_style lj/charmmfsw/coul/long <pair_charmm>`
In LAMMPS the :doc:`fix shake or fix rattle <fix_shake>` command can be
used to hold the two O-H bonds and the H-O-H angle rigid. A bond style
of :doc:`harmonic <bond_harmonic>` and an angle style of :doc:`harmonic
@ -100,7 +107,9 @@ ignored.
Below is the code for a LAMMPS input file and a molecule file
(``tip3p.mol``) of TIP3P water for use with the :doc:`molecule command
<molecule>` demonstrating how to set up a small bulk water system for
TIP3P with rigid bonds.
TIP3P with rigid bonds. For simplicity and speed the example uses a
cutoff Coulomb. Most production simulations require long-range Coulomb
instead.
.. code-block:: LAMMPS

View File

@ -167,7 +167,9 @@ cutoffs are set in the :doc:`pair_style lj/cut/tip4p/long
Below is the code for a LAMMPS input file using the implicit method and
the :ref:`TIP3P molecule file <tip3p_molecule>`. Because the TIP4P
charges are different from TIP3P they need to be reset (or the molecule
file changed):
file changed). For simplicity and speed the example uses a cutoff
Coulomb. Most production simulations require long-range Coulomb
instead.
.. code-block:: LAMMPS

View File

@ -87,7 +87,9 @@ atom style full or use :doc:`fix property/atom mol <fix_property_atom>`
so that fix rigid/small can identify rigid bodies by their molecule ID.
Also a :doc:`neigh_modify exclude <neigh_modify>` command is added to
exclude computing intramolecular non-bonded interactions, since those
are removed by the rigid fix anyway:
are removed by the rigid fix anyway. For simplicity and speed the
example uses a cutoff Coulomb. Most production simulations require
long-range Coulomb instead.
.. code-block:: LAMMPS

Binary file not shown.

After

Width:  |  Height:  |  Size: 344 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 703 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

View File

@ -93,14 +93,19 @@ run LAMMPS in serial mode.
.. admonition:: Using the C library interface as a plugin
:class: note
Rather than including the C library directly and link to the LAMMPS
Rather than including the C library interface directly using the
``library.h`` header file and link to the LAMMPS (static or shared)
library at compile time, you can use the ``liblammpsplugin.h`` header
file and the ``liblammpsplugin.c`` C code in the
``examples/COUPLE/plugin`` folder for an interface to LAMMPS that is
largely identical to the regular library interface, only that it will
load a LAMMPS shared library file at runtime. This can be useful for
applications where the interface to LAMMPS would be an optional
feature.
feature or where you would like to load different version of the
LAMMPS library (e.g. an updated one) without replacing the executable.
The :ref:`LAMMPS-GUI <lammps_gui>` is an example for such a program.
It has its own wrapper that supports both modes and they can be
changed at compile time.
.. warning::

View File

@ -27,6 +27,7 @@ It documents the following functions:
- :cpp:func:`lammps_scatter`
- :cpp:func:`lammps_scatter_subset`
- :cpp:func:`lammps_create_atoms`
- :cpp:func:`lammps_create_molecule`
-----------------------
@ -103,4 +104,8 @@ It documents the following functions:
.. doxygenfunction:: lammps_create_atoms(void *handle, int n, const int *id, const int *type, const double *x, const double *v, const int *image, int bexpand)
:project: progguide
-----------------------
.. doxygenfunction:: lammps_create_molecule
:project: progguide

View File

@ -28,6 +28,7 @@ gives those details.
* :ref:`ADIOS <PKG-ADIOS>`
* :ref:`AMOEBA <PKG-AMOEBA>`
* :ref:`APIP <PKG-APIP>`
* :ref:`ASPHERE <PKG-ASPHERE>`
* :ref:`ATC <PKG-ATC>`
* :ref:`AWPMD <PKG-AWPMD>`
@ -186,6 +187,60 @@ provided by the Ponder group in their
----------
.. _PKG-APIP:
APIP package
------------
**Contents:**
This package provides adaptive-precision interatomic potentials (APIP) as
described in:
D. Immel, R. Drautz and G. Sutmann, "Adaptive-precision potentials for
large-scale atomistic simulations", J. Chem. Phys. 162, 114119 (2025)
`link <immel2025_doi_>`_
Adaptive-precision means, that a fast interatomic potential, such as EAM,
is coupled to a precise interatomic potential, such as ACE.
This package provides the required pair_styles and fixes to run an efficient,
energy-conserving adaptive-precision simulation.
In the context of this package, precision refers to the accuracy of an interatomic
potential.
.. _immel2025_doi: https://doi.org/10.1063/5.0245877
**Authors:**
This package was written by David Immel^1,
Ralf Drautz^2 and Godehard Sutmann^1^2.
^1: Forschungszentrum Juelich, Juelich, Germany
^2: Ruhr-University Bochum, Bochum, Germany
**Install:**
The APIP package requires also the installation of ML-PACE, which has
:ref:`specific installation instructions <ml-pace>` on the
:doc:`Build extras <Build_extras>` page.
**Supporting info:**
* ``src/APIP``: filenames -> commands
* :doc:`Howto APIP <Howto_apip>`
* ``examples/PACKAGES/apip``
* :doc:`fix atom_weight/apip <fix_atom_weight_apip>`
* :doc:`fix lambda/apip <fix_lambda_apip>`
* :doc:`fix lambda_thermostat/apip <fix_lambda_thermostat_apip>`
* :doc:`pair_style eam/apip <pair_eam_apip>`
* :doc:`pair_style lambda/zone/apip <pair_lambda_zone_apip>`
* :doc:`pair_style lambda/input/apip <pair_lambda_input_apip>`
* :doc:`pair_style pace/apip <pair_pace_apip>`
----------
.. _PKG-ASPHERE:
ASPHERE package

View File

@ -38,6 +38,11 @@ whether an extra library is needed to build and use the package:
- :doc:`AMOEBA and HIPPO howto <Howto_amoeba>`
- amoeba
- no
* - :ref:`APIP <PKG-APIP>`
- adaptive-precision interatomic potentials
- :doc:`Howto APIP <Howto_apip>`
- ``PACKAGES/apip``
- ext
* - :ref:`ASPHERE <PKG-ASPHERE>`
- aspherical particle models
- :doc:`Howto spherical <Howto_spherical>`

View File

@ -106,20 +106,37 @@ folder that the dynamic loader searches or inside of the installed
has to be made during the CMake configuration step.
If the default settings of ``make install-python`` are not what you want,
you can invoke ``install.py`` from the python directory manually as
you can invoke ``install.py`` from the ``python`` directory manually as
.. code-block:: bash
python install.py -p <python package> -l <shared library> -v <version.h file> [-n] [-f]
python3 install.py -p <python package> -l <shared library> -v <version.h file> [-n] [-f]
* The ``-p`` flag argument is the full path to the
``python/lammps`` folder to be installed,
* the ``-l`` flag argument is the full path to the LAMMPS shared
library file to be installed,
* the ``-v`` flag argument is the full path to the ``src/version.h`` file
* the optional ``-n`` flag instructs the script to only build a
wheel file but not attempt to install it (default is to try installing),
* the optional ``-w`` flag argument is the path to a folder where
to store the resulting wheel file (default is the current folder)
* and the optional ``-f`` argument instructs the script to force
installation even if pip would otherwise refuse installation
with an :ref:`error about externally managed environments
<externally_managed>`. The Python developers recommend to not
augment a Python installation with custom packages, both at the
user and the system level, and advise to use virtual
environments instead. Some recent Linux distributions enforce
that recommendation by default.
Example command line for building only the wheel after building
LAMMPS with ``cmake`` in the folder ``build``:
.. code-block:: bash
python3 python/install.py -n -p python/lammps -l build/liblammps.so -v src/version.h -w build
* The ``-p`` flag points to the ``lammps`` Python package folder to be installed,
* the ``-l`` flag points to the LAMMPS shared library file to be installed,
* the ``-v`` flag points to the LAMMPS version header file to extract the version date,
* the optional ``-n`` instructs the script to only build a wheel file but not attempt
to install it,
* and the optional ``-f`` argument instructs the script to force installation even if
pip would otherwise refuse installation with an
:ref:`error about externally managed environments <externally_managed>`.
.. tab:: Virtual environment
@ -335,4 +352,3 @@ that the order of the lines is not deterministic
Proc 1 out of 4 procs
Proc 2 out of 4 procs
Proc 3 out of 4 procs

View File

@ -10,7 +10,7 @@ Syntax
atom_style style args
* style = *amoeba* or *angle* or *atomic* or *body* or *bond* or *charge* or *dielectric* or *dipole* or *dpd* or *edpd* or *electron* or *ellipsoid* or *full* or *line* or *mdpd* or *molecular* or *oxdna* or *peri* or *smd* or *sph* or *sphere* or *bpm/sphere* or *spin* or *tdpd* or *tri* or *template* or *wavepacket* or *hybrid*
* style = *amoeba* or *angle* or *apip* or *atomic* or *body* or *bond* or *charge* or *dielectric* or *dipole* or *dpd* or *edpd* or *electron* or *ellipsoid* or *full* or *line* or *mdpd* or *molecular* or *oxdna* or *peri* or *smd* or *sph* or *sphere* or *bpm/sphere* or *spin* or *tdpd* or *tri* or *template* or *wavepacket* or *hybrid*
.. parsed-literal::
@ -117,6 +117,10 @@ the Additional Information section below.
- *bond* + "angle data"
- :ref:`MOLECULE <PKG-MOLECULE>`
- bead-spring polymers with stiffness
* - *apip*
- *atomic* + apip_lambda, apip_lambda_required, apip_lambda_input, apip_lambda_const, apip_lambda_input_ta, apip_e_fast, apip_e_precise, apip_f_const_lambda, apip_f_dyn_lambda
- :ref:`APIP <PKG-APIP>`
- adaptive-precision interatomic potentials(APIP), see :doc:`APIP howto <Howto_apip>`
* - *atomic*
- tag, type, x, v, f, image, mask
-

View File

@ -49,8 +49,6 @@ proportional to the diffusion coefficient of the diffusing atoms.
The displacement of an atom is from its reference position. This is
normally the original position at the time
the compute command was issued, unless the *average* keyword is set to *yes*\ .
The value of the displacement will be
0.0 for atoms not in the specified compute group.
If the *com* option is set to *yes* then the effect of any drift in
the center-of-mass of the group of atoms is subtracted out before the
@ -111,7 +109,10 @@ distance\ :math:`^2` :doc:`units <units>`.
Restrictions
""""""""""""
Compute *msd* cannot be used with a dynamic group.
Compute *msd* cannot be used with a dynamic group and the number of
atoms in the compute group must not be changed by some fixes like,
for example, :doc:`fix deposit <fix_deposit>` or
:doc:`fix evaporate <fix_evaporate>`.
Related commands
""""""""""""""""

View File

@ -34,6 +34,8 @@ Syntax
i_name, d_name, i2_name[I], d2_name[I],
vfrac, s0, espin, eradius, ervel, erforce,
rho, drho, e, de, cv, buckling,
apip_lambda, apip_lambda_input, apip_e_fast,
apip_e_precise
.. parsed-literal::
@ -70,6 +72,13 @@ Syntax
*i2_name[I]* = Ith column of custom integer array with name
*d2_name[I]* = Ith column of custom floating-point array with name
.. parsed-literal::
APIP package per-atom properties:
*apip_lambda* = switching parameter
*apip_lambda_input* = input used to calculate the switching parameter
*apip_e_fast,apip_e_precise* = potential energies mixed by the adaptive-precision potential
.. parsed-literal::
PERI package per-atom properties:
@ -162,6 +171,22 @@ segment particles and define the end points of each line segment.
*corner2z*, *corner3x*, *corner3y*, *corner3z*, are defined for
triangular particles and define the corner points of each triangle.
The accessible quantities from the :doc:`APIP package <Howto_apip>` are
explained in the doc pages of this package in detail.
In short: *apip_lambda* is the switching parameter :math:`\lambda\in[0,1]`,
that is calculated from *apip_lambda_input* and that mixes the energies
of a fast (*apip_e_fast*) and a precise (*apip_e_precise*) potential
into an adaptive-precision energy.
.. note::
The energy according to the fast and the precise potential are only
computed for the subset of atoms, for which it is required, i.e.,
for an atom :math:`i` with :math:`\lambda_i=1` one does not need
:math:`E_i^\text{precise}` and with :math:`\lambda_i=0` one does
not need :math:`E_i^\text{fast}`.
In addition, the various per-atom quantities listed above for specific
packages are only accessible by this command.

View File

@ -45,13 +45,13 @@ Examples
Description
"""""""""""
Compute *stress/mop* and compute *stress/mop/profile* define
computations that calculate components of the local stress tensor using
the method of planes :ref:`(Todd) <mop-todd>`. Specifically in compute
*stress/mop* calculates 3 components are computed in directions *dir*,\
*x*\ ; *dir*,\ *y*\ ; and *dir*,\ *z*\ ; where *dir* is the direction
normal to the plane, while in compute *stress/mop/profile* the profile
of the stress is computed.
Compute *stress/mop* and compute *stress/mop/profile*
calculate components of the local stress tensor using
the method of planes :ref:`(Todd) <mop-todd>`. Specifically, compute
*stress/mop* calculates 3 components in directions :math:`ix`,
:math:`iy`, and :math:`iz` where :math:`i` is the direction
normal to the plane, while compute *stress/mop/profile* calculates the profile
of the local stress along the :math:`i` direction.
Contrary to methods based on histograms of atomic stress (i.e., using
:doc:`compute stress/atom <compute_stress_atom>`), the method of planes
@ -103,14 +103,15 @@ Output info
Compute *stress/mop* calculates a global vector (indices starting at 1),
with 3 values for each declared keyword (in the order the keywords have
been declared). For each keyword, the stress tensor components are
ordered as follows: stress_dir,x, stress_dir,y, and stress_dir,z.
ordered as follows: :math:`P_{ix}`, :math:`P_{iy}`, and :math:`P_{iz}`,
where :math:`i` is the direction normal to the plane.
Compute *stress/mop/profile* instead calculates a global array, with 1
column giving the position of the planes where the stress tensor was
computed, and with 3 columns of values for each declared keyword (in the
order the keywords have been declared). For each keyword, the profiles
of stress tensor components are ordered as follows: stress_dir,x;
stress_dir,y; and stress_dir,z.
of stress tensor components are ordered as follows: :math:`P_{ix}`,
:math:`P_{iy}`, and :math:`P_{iz}`.
The values are in pressure :doc:`units <units>`.
@ -129,15 +130,11 @@ package <Build_package>` doc page on for more info.
The method is implemented for orthogonal simulation boxes whose
size does not change in time, and axis-aligned planes.
Contributions from bonds, angles, and dihedrals are not compatible
with MPI parallel runs.
The method only works with two-body pair interactions, because it
requires the class method ``Pair::single()`` to be implemented, which is
not possible for manybody potentials. In particular, compute
*stress/mop/profile* and *stress/mop* do not work with more than two-body
pair interactions, long range (kspace) interactions and
improper intramolecular interactions.
Compute *stress/mop* and *stress/mop/profile* do not work with manybody
non-bonded interactions, long range (kspace) interactions and
improper intramolecular interactions. The reason is that the current
implementation requires the class method ``Pair::single()`` to be implemented,
which is not possible for manybody potentials.
The impact of fixes that affect the stress (e.g. fix langevin) is
also not included in the stress computed here.

View File

@ -201,6 +201,7 @@ accelerated styles exist.
* :doc:`append/atoms <fix_append_atoms>` - append atoms to a running simulation
* :doc:`atc <fix_atc>` - initiates a coupled MD/FE simulation
* :doc:`atom/swap <fix_atom_swap>` - Monte Carlo atom type swapping
* :doc:`atom_weight/apip <fix_atom_weight_apip>` - compute atomic load of an :doc:`APIP potential <Howto_apip>` for load balancing
* :doc:`ave/atom <fix_ave_atom>` - compute per-atom time-averaged quantities
* :doc:`ave/chunk <fix_ave_chunk>` - compute per-chunk time-averaged quantities
* :doc:`ave/correlate <fix_ave_correlate>` - compute/output time correlations
@ -265,11 +266,13 @@ accelerated styles exist.
* :doc:`halt <fix_halt>` - terminate a dynamics run or minimization
* :doc:`heat <fix_heat>` - add/subtract momentum-conserving heat
* :doc:`heat/flow <fix_heat_flow>` - plain time integration of heat flow with per-atom temperature updates
* :doc:`hmc <fix_hmc>` - Hybrid/Hamiltonian Monte Carlo (HMC) particle propagation
* :doc:`hyper/global <fix_hyper_global>` - global hyperdynamics
* :doc:`hyper/local <fix_hyper_local>` - local hyperdynamics
* :doc:`imd <fix_imd>` - implements the "Interactive MD" (IMD) protocol
* :doc:`indent <fix_indent>` - impose force due to an indenter
* :doc:`ipi <fix_ipi>` - enable LAMMPS to run as a client for i-PI path-integral simulations
* :doc:`lambda/apip <fix_lambda_apip>` - compute switching parameter, that controls the precision of an :doc:`APIP potential <Howto_apip>`
* :doc:`langevin <fix_langevin>` - Langevin temperature control
* :doc:`langevin/drude <fix_langevin_drude>` - Langevin temperature control of Drude oscillators
* :doc:`langevin/eff <fix_langevin_eff>` - Langevin temperature control for the electron force field model
@ -278,6 +281,7 @@ accelerated styles exist.
* :doc:`lb/momentum <fix_lb_momentum>` - :doc:`fix momentum <fix_momentum>` replacement for use with a lattice-Boltzmann fluid
* :doc:`lb/viscous <fix_lb_viscous>` - :doc:`fix viscous <fix_viscous>` replacement for use with a lattice-Boltzmann fluid
* :doc:`lineforce <fix_lineforce>` - constrain atoms to move in a line
* :doc:`lambda_thermostat/apip <fix_lambda_thermostat_apip>` - apply energy conserving correction for an :doc:`APIP potential <Howto_apip>`
* :doc:`manifoldforce <fix_manifoldforce>` - restrain atoms to a manifold during minimization
* :doc:`mdi/qm <fix_mdi_qm>` - LAMMPS operates as a client for a quantum code via the MolSSI Driver Interface (MDI)
* :doc:`mdi/qmmm <fix_mdi_qmmm>` - LAMMPS operates as client for QM/MM simulation with a quantum code via the MolSSI Driver Interface (MDI)
@ -292,6 +296,7 @@ accelerated styles exist.
* :doc:`mvv/tdpd <fix_mvv_dpd>` - constant temperature DPD using the modified velocity-Verlet algorithm
* :doc:`neb <fix_neb>` - nudged elastic band (NEB) spring forces
* :doc:`neb/spin <fix_neb_spin>` - nudged elastic band (NEB) spring forces for spins
* :doc:`neighbor/swap <fix_neighbor_swap>` - kinetic Monte Carlo (kMC) atom swapping
* :doc:`nonaffine/displacement <fix_nonaffine_displacement>` - calculate nonaffine displacement of atoms
* :doc:`nph <fix_nh>` - constant NPH time integration via Nose/Hoover
* :doc:`nph/asphere <fix_nph_asphere>` - NPH for aspherical particles

View File

@ -116,7 +116,10 @@ charge would not be conserved. As a consequence, no checks on atomic
charges are performed, and successful switches update the atom type but
not the atom charge. While it is possible to use *semi-grand* with
groups of atoms that have different charges, these charges will not be
changed when the atom types change.
changed when the atom types change. The same applies for systems
with per-atom masses: non *semi-grand* will swap atom masses, but
the masses have to be the same each for the atom types. When using
*semi-grand* no per-atom masses are changed.
Since this fix computes total potential energies before and after
proposed swaps, even complicated potential energy calculations are
@ -184,11 +187,10 @@ When this fix is used with a :doc:`hybrid pair style <pair_hybrid>`
system, only swaps between atom types of the same sub-style (or
combination of sub-styles) are permitted.
This fix cannot be used with systems that do not have per-type masses
(e.g. atom style sphere) since the implemented algorithm pre-computes
velocity rescaling factors from per-type masses and ignores any per-atom
masses, if present. In case both, per-type and per-atom masses are
present, a warning is printed.
This fix can be used with systems that have per-atom masses
(e.g. atom style sphere) provided all atoms of the types handled
by this fix have the same mass per type. The fix will check for that.
In case both, per-type and per-atom masses are present, a warning is printed.
Related commands
""""""""""""""""

View File

@ -0,0 +1,143 @@
.. index:: fix atom_weight/apip
fix atom_weight/apip command
============================
Syntax
""""""
.. code-block:: LAMMPS
fix ID group-ID atom_weight/apip nevery fast_potential precise_potential lambda_input lambda_zone group_lambda_input [no_rescale]
* ID, group-ID are documented in :doc:`fix <fix>` command
* atom_weight/apip = style name of this fix command
* nevery = perform load calculation every this many steps
* fast_potential = *eam* or *ace* for time measurements of the corresponding pair_style or float for constant time
* precise_potential = *ace* for a time measurement of the pair_style pace/apip or float for constant time
* lambda_input = *lambda/input* for a time measurement of pair_style lambda/input/apip or float for constant time
* lambda_zone = *lambda/zone* for a time measurement of pair_style lambda/zone/apip or float for constant time
* group_lambda_input = group-ID of the group for which lambda_input is computed
* no_rescale = do not rescale the work per processor to the measured total force-computation time
Examples
""""""""
.. code-block:: LAMMPS
fix 2 all atom_weight/apip 50 eam ace lambda/input lambda/zone all
fix 2 all atom_weight/apip 50 1e-05 0.0004 4e-06 4e-06 all
fix 2 all atom_weight/apip 50 ace ace 4e-06 4e-06 all no_rescale
Description
"""""""""""
This command approximates the load every atom causes when an
adaptive-precision interatomic potential (APIP) according to
:ref:`(Immel) <Immel2025_2>` is used.
This approximated load can be saved as atomic variable and
used as input for the dynamic load balancing via the
:doc:`fix balance <fix_balance>` command.
An adaptive-precision potential like :doc:`eam/apip <pair_eam_apip>`
and :doc:`pace/apip <pair_pace_apip>` is calculated only
for a subset of atoms.
The switching parameter that determines per atom, which potential energy is
used, can be also calculated by
:doc:`pair_style lambda/input/apip <pair_lambda_input_apip>`.
A spatial switching zone, that ensures a smooth transition between two
different interatomic potentials, can be calculated by
:doc:`pair_style lambda/zone/apip <pair_lambda_zone_apip>`.
Thus, there are up to four force-subroutines, that are computed only for a
subset of atoms and combined via the pair_style :doc:`hybrid/overlay <pair_hybrid>`.
For all four force-subroutines, the average work per atom is be measured
per processor by the corresponding pair_style.
This fix extracts these measurements of the pair styles every *nevery*
steps. The average compute times are used to calculates a per-atom vector with
the approximated atomic weight, whereas the average compute time of the four
subroutines contributes only to the load of atoms, for which the corresponding
subroutine was calculated.
If not disabled via *no_rescale*, the so calculated load is
rescaled per processor so that the total atomic compute time matches the
also measured total compute time of the whole pair_style.
This atomic weight is intended to be used
as input for :doc:`fix balance <fix_balance>`:
.. code-block:: LAMMPS
variable nevery equal 10
fix weight_atom all atom_weight/apip ${nevery} eam ace lambda/input lambda/zone all
variable myweight atom f_weight_atom
fix balance all balance ${nevery} 1.1 rcb weight var myweight
Furthermore, this fix provides the over the processors averaged compute time of the
four pair_styles, which are used to approximate the atomic weight, as vector.
----------
Restart, fix_modify, output, run start/stop, minimize info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to
:doc:`binary restart files <restart>`. None of the
:doc:`fix_modify <fix_modify>` options are relevant to this fix.
This fix produces a per-atom vector that contains the atomic
weight of each atom.
The per-atom vector can only be accessed on timesteps that are multiples
of *nevery*.
Furthermore, this fix computes a global vector of length 4 with
statistical information about the four different (possibly)
measured compute times per force subroutine. The four
values in the vector are as follows:
#. average compute time for one atom using the fast pair_style
#. average compute time for one atom using the precise pair_style
#. average compute time of lambda/input/apip for one atom
#. average compute time of lambda/zone/apip for one atom
The compute times are computed as average of all processors that
measured at least one computation of the corresponding style.
The vector values calculated by this fix are "intensive" and
updated whenever the per-atom vector is computed, i.e., in
timesteps that are multiples of *nevery*.
The vector and the per-atom vector can be accessed by various
:doc:`output commands <Howto_output>`.
No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. This fix is not invoked during
:doc:`energy minimization <minimize>`.
----------
Restrictions
""""""""""""
This fix is part of the APIP package. It is only enabled if
LAMMPS was built with that package. See the :doc:`Build package
<Build_package>` page for more info.
Related commands
""""""""""""""""
:doc:`fix balance <fix_balance>`,
:doc:`fix lambda/apip <fix_lambda_apip>`,
:doc:`fix lambda_thermostat/apip <fix_lambda_thermostat_apip>`,
:doc:`pair_style lambda/zone/apip <pair_lambda_zone_apip>`,
:doc:`pair_style lambda/input/apip <pair_lambda_input_apip>`,
:doc:`pair_style eam/apip <pair_eam_apip>`,
:doc:`pair_style pace/apip <pair_pace_apip>`,
Default
"""""""
*no_rescale* is not used by default.
----------
.. _Immel2025_2:
**(Immel)** Immel, Drautz and Sutmann, J Chem Phys, 162, 114119 (2025)

View File

@ -21,7 +21,7 @@ Syntax
* Rmin = two atoms separated by less than Rmin can bond (distance units)
* bondtype = type of created bonds (integer or type label)
* zero or more keyword/value pairs may be appended to args
* keyword = *iparam* or *jparam* or *prob* or *atype* or *dtype* or *itype* or *aconstrain*
* keyword = *iparam* or *jparam* or *prob* or *atype* or *dtype* or *itype* or *aconstrain* or *molecule*
.. parsed-literal::
@ -43,6 +43,10 @@ Syntax
*aconstrain* value = amin amax
amin = minimal angle at which new bonds can be created
amax = maximal angle at which new bonds can be created
*molecule* value = *off* or *inter* or *intra*
*off* = allow both inter- and intramolecular reactions (default)
*inter* = search for reactions between molecules with different IDs
*intra* = search for reactions within the same molecule
Examples
""""""""
@ -52,6 +56,7 @@ Examples
fix 5 all bond/create 10 1 2 0.8 1
fix 5 all bond/create 1 3 3 0.8 1 prob 0.5 85784 iparam 2 3
fix 5 all bond/create 1 3 3 0.8 1 prob 0.5 85784 iparam 2 3 atype 1 dtype 2
fix 5 all bond/create 10 13 25 7 28 iparam 1 15 jparam 1 27 prob 0.2 91322 molecule inter
fix 5 all bond/create/angle 10 1 2 1.122 1 aconstrain 120 180 prob 1 4928459 iparam 2 1 jparam 2 2
labelmap atom 1 c1 2 n2
@ -123,6 +128,8 @@ actually created. The *fraction* setting must be a value between 0.0
and 1.0. A uniform random number between 0.0 and 1.0 is generated and
the eligible bond is only created if the random number is less than *fraction*.
The *molecule* keyword can be used to force the reaction to be intermolecular, intramolecular or either. When the value is set to *off*, molecule IDs are not considered when searching for reactions (default). When the value is set to *inter*, atoms must have different molecule IDs in order to be considered for the reaction. When the value is set to *intra*, only atoms with the same molecule ID are considered for the reaction.
The *aconstrain* keyword is only available with the fix
bond/create/angle command. It allows one to specify minimum and maximum
angles *amin* and *amax*, respectively, between the two prospective bonding

View File

@ -298,7 +298,8 @@ Note that it should return the "change" in box length, not the
absolute box length. This means it should evaluate to 0.0 when
invoked on the initial timestep of the run following the definition of
fix deform. It should evaluate to a value > 0.0 to dilate the box at
future times, or a value < 0.0 to compress the box.
future times, or a value < 0.0 to compress the box. The exception
would be if the run command uses the *pre no* option.
The variable *name2* must also be an :doc:`equal-style variable
<variable>` and should calculate the rate of box length change, in

View File

@ -1,9 +1,12 @@
.. index:: fix electron/stopping
.. index:: fix electron/stopping/kk
.. index:: fix electron/stopping/fit
fix electron/stopping command
=============================
Accelerator Variants: *electron/stopping/kk*
fix electron/stopping/fit command
=================================
@ -157,6 +160,18 @@ of the atom types. There is an examples/PACKAGES/electron_stopping/ directory,
which illustrates uses of this command. Details of this implementation are
further described in :ref:`Stewart2018 <Stewart2018>` and :ref:`Lee2020 <Lee2020>`.
----------
.. include:: accel_styles.rst
.. note::
The region keyword is supported by Kokkos, but a Kokkos-enabled
region must be used. See the region :doc:`region <region>` command for
more information.
----------
Restart, fix_modify, output, run start/stop, minimize info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

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

@ -0,0 +1,250 @@
.. index:: fix hmc
fix hmc command
===============
Syntax
""""""
.. code-block:: LAMMPS
fix ID group-ID hmc N seed T keyword values ...
* ID, group-ID are documented in :doc:`fix <fix>` command
* hmc = style name of this fix command
* N = invoke a Monte Carlo step every N steps
* seed = random # seed (positive integer)
* T = temperature for assigning velocities and acceptance criterion
* one or more keyword/value pairs may be appended
.. parsed-literal::
keyword = *rigid* or *resample* or *mom*
*rigid* value = rigidID
rigidID = ID of :doc:`fix rigid/small <fix_rigid>` command
*resample* value = *yes* or *no*
*mom* value = *yes* or *no*
Examples
""""""""
.. code-block:: LAMMPS
fix 1 all hmc 10 123 500
fix hmc_water all hmc 100 123 298.15 rigid 1
fix 2 all hmc 10 12345 300 mom no resample yes
Description
"""""""""""
.. versionadded:: TBD
This fix implements the hybrid or Hamiltonian Monte Carlo (HMC)
algorithm. The basic idea is to use molecular dynamics (MD) to
generate trial MC "moves" which are then accepted or rejected via the
Metropolis criterion. In this context, an MC "move" is the new
configuration of particles after *N* MD steps, i.e. all the particles
in the system have moved to new positions. HMC generates a canonical
distribution in configuration space. More details on the theory behind
HMC can be found in the references, :ref:`(Mehlig) <Mehlig1>` and
:ref:`(Mehlig) <Mehlig2>`.
The details of the HMC algorithm for a repeating series of $N$ MD
steps are as follows:
(1) The configuration of the system is stored along with its current
total energy. This includes all particle positions and velocities and other
per-atom properties (e.g. dipole orientation vector for particles with
dipole moments).
(2) The system is time integrated in the NVE ensemble for the
specified *N* MD steps and the new energy is calculated. The new
configuration is the trial "move" to accept or reject.
(3) The energy change :math:`\Delta{H}` in the Hamiltonian of the
system due to the "move" is calculated by the following equation:
.. math::
\Delta{H} = H(q',p') - H(q,p)
The new configuration is then accepted/rejected according to the
Metropolis criterion with probability:
.. math::
p^{acc} = min(1,e^{\frac{-\Delta{H}}{k_B T}})
where *T* is the specified temperature.
The idea of HMC is to use a timestep large enough that total energy is
*not* conserved. The change in total energy (the Hamiltonian) is what
the Metropolis criterion is based on, not the change in potential
energy.
(4) If accepted, the new configuration becomes the starting point for
the next trial MC "move". If *resample* is *yes* then the velocities are
resampled at this point as well.
(5) If rejected, the old configuration (from *N* steps ago) is
restored and new momenta (velocities) are assigned to each particle
in the fix group by randomly resampling from a normal distribution
at the specified temperature $T$ using the following equation:
.. math::
p_{x,y,z} = \textbf{N}(0,1) \sqrt{\frac{k_B T}{2 m^2}}
The velocity-modified "old" configuration becomes the starting point
for the next trial MC "move".
.. note::
HMC should be run with a larger timestep than would be used for
traditional MD, which enables total energy fluctuations and
generation of new conformations which MD would not normally generate
as quickly. The timestep size may also affect the acceptance ratio
as a larger timestep will lead to larger and more extreme MC moves
which are less likely to be accepted. The timestep size must strike
a balance between allowing the total energy to change and generating
errors such as lost atoms due to atomic overlap. This means that
during the MD portion of the algorithm, unphysical dynamics will take
place, such as large temperature fluctuations and large forces
between atoms. This is expected and is part of the HMC algorithm, as
the MD step is not intended to produce a physically realistic
trajectory, but rather to generate a new configuration of particles
that can be accepted or rejected based on the Metropolis criterion.
.. note::
High acceptance ratios indicate that the MC algorithm is inefficient,
as it is not generating new configurations of particles any faster
than MD would on its own. In the limit of an acceptance ratio of 1.0,
the algorithm is equivalent to MD (with momentum resampling every *N*
timesteps if *resample* = *yes*), and no benefit is gained from MC.
A good rule of thumb is to aim for an acceptance ratio of 0.5 to 0.8,
which can be monitored via the output of this fix. This can be
achieved by adjusting the *N* parameter and the timestep size.
Increasing either of these values will increase the size of the total
energy fluctuations, which can decrease acceptance ratio. Increasing
*N* will also increase the computation time for each MC step, as more
MD steps are performed before each acceptance/rejection decision. As
noted above, increasing the timestep too much can lead to LAMMPS
errors due to lost atoms or bonds, so both of these parameters should
be chosen carefully.
.. note::
This fix is designed to be used only for constant NVE simulations.
No thermostat or barostat should be used, though LAMMPS does not
check for this. A :doc:`fix nve <fix_nve>` command must be defined
to perform time integration for the MD portion of the algorithm. See
the explanation of the *rigid* keyword below for an exception when
rigid bodies are defined. Also note that only per-atom data is
restored on MC move rejection, so anything which adds or remove
particles, changes the box size, or has some external state not
dependent on per-atom data will have undefined behavior.
----------
The keyword/value options are as follows:
The *rigid* keyword enables use of HMC for systems containing a
collection of small rigid bodies, with or without solvent (atomic
fluid or non-rigid molecular fluid).
The *rigidID* value should be the ID of a :doc:`fix rigid/small
<fix_rigid>` or :doc:`fix rigid/nve/small <fix_rigid>` command which
defines the rigid bodies. Its integrator will be used during the MD
timesteps. If there are additional particles in the system,
e.g. solvent, they should be time-integrated by a :doc:`fix nve
<fix_nve>` command as explained above.
The *resample* keyword determines whether velocities are also
resampled upon acceptance in step (4) above, in addition to step (5).
If *resample* = *yes*, velocities are resampled upon acceptance. If
*resample* = *no* (default), velocities are not resampled upon
acceptance.
The *mom* keyword sets the linear momentum of the ensemble of
particles each time velocities are reset in steps (4 or 5) above. If
*mom* = *yes* (default), the linear momentum of the ensemble of
velocities is zeroed. If *mom* = *no*, the linear momentum of the
ensemble of velocities is not zeroed.
----------
This fix creates several additional computes for monitoring the energy
and virial of the system and storing/restoring the system state. This
is done internally, as if these commands had been issued, where ID is
the ID of this fix:
.. code-block:: LAMMPS
compute hmc_ke_ID all ke
compute hmc_pe_ID all pe
compute hmc_peatom_ID all pe/atom
compute hmc_press_ID all pressure NULL virial
compute hmc_pressatom_ID all stress/atom NULL virial
The output of these computes can be accessed by the input script,
along with the other outputs described in the next section.
----------
Restart, fix_modify, output, run start/stop, minimize info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to :doc:`binary restart files
<restart>`. None of the :doc:`fix_modify <fix_modify>` options are
relevant to this fix.
This fix calculates a global scalar and global vector of length 5,
which can be accessed by various :doc:`output commands
<Howto_output>`. The scalar is the fraction (0-1) of attempted MC
moves which have been accepted. The vector stores the following
quantities:
* 1 = cumulative number of accepted moves
* 2 = cumulative number of rejected moves
* 3 = change in potential energy for last trial move
* 4 = change in kinetic energy for last trial move
* 5 = change in total energy (kinetic + potential energy) for last trial move
These values are updated once every *N* timesteps. The scalar and
cumulative counts are "intensive"; the three energies are "extensive"
and are in energy :doc:`units <units>`.
No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. This fix is not invoked during
:doc:`energy minimization <minimize>`.
Restrictions
""""""""""""
This fix is part of the MC package and requires the RIGID package to
be installed. It is only enabled if LAMMPS was built with both
packages. See the :doc:`Build package <Build_package>` doc page for
more info.
Related commands
""""""""""""""""
:doc:`fix nvt <fix_nh>`, :doc:`fix gcmc <fix_gcmc>`,
:doc:`fix tfmc <fix_tfmc>`
Default
"""""""
The option defaults are resample = no and mom = yes.
----------
.. _Mehlig1:
**(Mehlig1)** Mehlig, B., Heermann, D. W., & Forrest, B. M. (1992).
Hybrid Monte Carlo method for condensed-matter systems. Physical Review B, 45(2), 679.
.. _Mehlig2:
**(Mehlig2)** Mehlig, B., Heermann, D. W., & Forrest, B. M. (1992).
Exact langevin algorithms. Molecular Physics, 76(6), 1347-1357.

262
doc/src/fix_lambda_apip.rst Normal file
View File

@ -0,0 +1,262 @@
.. index:: fix lambda/apip
fix lambda/apip command
=======================
Syntax
""""""
.. code-block:: LAMMPS
fix ID group-ID lambda/apip thr_lo thr_hi keyword args ...
* ID, group-ID are documented in :doc:`fix <fix>` command
* lambda/apip = style name of this fix command
* thr_lo = value below which :math:`\lambda_i^\text{input}` results in a switching parameter of 1
* thr_hi = value above which :math:`\lambda_i^\text{input}` results in a switching parameter of 0
* zero or one keyword/args pairs may be appended
* keyword = *time_averaged_zone* or *min_delta_lambda* or *lambda_non_group* or *store_atomic_stats* or *dump_atomic_history* or *group_fast* or *group_precise* or *group_ignore_lambda_input*
.. parsed-literal::
*time_averaged_zone* args = cut_lo cut_hi history_len_lambda_input history_len_lambda
cut_lo = distance at which the radial function decreases from 1
cut_hi = distance from which on the radial function is 0
history_len_lambda_input = number of time steps for which lambda_input is averaged
history_len_lambda = number of time steps for which the switching parameter is averaged
*min_delta_lambda* args = delta
delta = value below which changes of the switching parameter are neglected (>= 0)
*lambda_non_group* args = lambda_ng
lambda_ng = *precise* or *fast* or float
*precise* = assign a constant switching parameter of 0 to atoms, that are not in the group specified by group-ID
*fast* = assign a constant switching parameter of 1 to atoms, that are not in the group specified by group-ID
float = assign this constant switching parameter to atoms, that are not in the group specified by group-ID (0 <= float <= 1)
*group_fast* args = group-ID-fast
group-ID-fast = the switching parameter of 1 is used instead of the one computed by lambda_input for atoms in the group specified by group-ID-fast
*group_precise* args = group-ID-precise
group-ID-precise = the switching parameter of 0 is used instead of the one computed by lambda_input for atoms in the group specified by group-ID-precise
*group_ignore_lambda_input* args = group-ID-ignore-lambda-input
group-ID-ignore-lambda-input = the switching parameter of lambda_ng is used instead of the one computed by lambda_input for atoms in the group specified by group-ID-ignore-lambda-input
*store_atomic_stats* args = none
*dump_atomic_history* args = none
Examples
""""""""
.. code-block:: LAMMPS
fix 2 all lambda/apip 3.0 3.5 time_averaged_zone 4.0 12.0 110 110 min_delta_lambda 0.01
fix 2 mobile lambda/apip 3.0 3.5 time_averaged_zone 4.0 12.0 110 110 min_delta_lambda 0.01 group_ignore_lambda_input immobile lambda_non_group fast
Description
"""""""""""
The potential energy :math:`E_i` of an atom :math:`i` of an adaptive-precision
potential according to :ref:`(Immel) <Immel2025_3>` is given by
.. math::
E_i = \lambda_i E_i^\text{(fast)} + (1-\lambda_i) E_i^\text{(precise)},
whereas :math:`E_i^\text{(fast)}` is the potential energy of atom :math:`i`
according to a fast interatomic potential like EAM,
:math:`E_i^\text{(precise)}` is the potential energy according to a precise
interatomic potential such as ACE and :math:`\lambda_i\in[0,1]` is the
switching parameter that decides which potential energy is used.
This fix calculates the switching parameter :math:`\lambda_i` based on the
input provided from :doc:`pair_style lambda/input/apip <pair_lambda_input_apip>`.
The calculation of the switching parameter is described in detail in
:ref:`(Immel) <Immel2025_3>`.
This fix calculates the switching parameter for all atoms in the
:doc:`group <group>`
described by group-ID, while the value of *lambda_non_group* is used
as switching parameter for all other atoms.
First, this fix calculates per atom :math:`i` the time averaged input
:math:`\lambda^\text{input}_{\text{avg},i}` from
:math:`\lambda^\text{input}_{i}`, whereas the number of averaged timesteps
can be set via *time_averaged_zone*.
.. note::
:math:`\lambda^\text{input}_{i}` is calculated by
:doc:`pair_style lambda/input/apip <pair_lambda_input_apip>`, which needs to be included
in the input script as well.
The time averaged input :math:`\lambda^\text{input}_{\text{avg},i}` is then
used to calculate the switching parameter
.. math::
\lambda_{0,i}(t) = f^\text{(cut)} \left(\frac{\lambda_{\text{avg},i}^\text{input}(t) - \lambda_\text{lo}^\text{input}}{\lambda_\text{hi}^\text{input} - \lambda_\text{lo}^\text{input}} \right)\,,
whereas the thresholds :math:`\lambda_\text{hi}^\text{input}`
and :math:`\lambda_\text{lo}^\text{input}` are set by the
values provided as *thr_lo* and *thr_hi* and :math:`f^\text{(cut)}(x)` is a cutoff function
that is 1 for :math:`x\leq 0`, decays from 1 to 0 for :math:`x\in[0,1]`, and
is 0 for :math:`x\geq 1`.
If the *group_precise* argument is used, :math:`\lambda_{0,i}=0` is used for all
atoms :math:`i` assigned to the corresponding :doc:`group <group>`.
If the *group_fast* argument is used, :math:`\lambda_{0,i}=1` is used for all
atoms :math:`i` assigned to the corresponding :doc:`group <group>`.
If an atom is in the groups *group_fast* and *group_precise*,
:math:`\lambda_{0,i}=0` is used.
If the *group_ignore_lambda_input* argument is used,
:math:`\lambda_i^\text{input}` is not computed for all atoms :math:`i` assigned
to the corresponding :doc:`group <group>`; instead, if the value is not already
set by *group_fast* or *group_precise*, the value of *lambda_non_group* is
used.
.. note::
The computation of :math:`\lambda_i^\text{input}` is not required for
atoms that are in the groups *group_fast* and *group_precise*.
Thus, one should use *group_ignore_lambda_input* and prevent the
computation of :math:`\lambda_i^\text{input}` for all atoms, for
which a constant input is used.
A spatial transition zone between the fast and the precise potential is
introduced via
.. math::
\lambda_{\text{min},i}(t) = \text{min}\left(\left\{1 - (1 -\lambda_{0,j}(t)) f^\text{(cut)}\left(\frac{r_{ij}(t)-r_{\lambda,\text{lo}}}{r_{\lambda,\text{hi}} - r_{\lambda,\text{lo}}}\right) : j \in \Omega_{\lambda,i} \right\}\right)\,,
whereas the thresholds :math:`r_{\lambda,\text{lo}}` and
:math:`r_{\lambda,\text{hi}}`
of the cutoff function are set via *time_averaged_zone* and
:math:`\Omega_{\lambda,i}` is the set of
neighboring atoms of atom :math:`i`.
.. note::
:math:`\lambda_{\text{min},i}` is calculated by
:doc:`pair_style lambda/zone/apip <pair_lambda_zone_apip>`, which needs to be included
in the input script as well.
The switching parameter is smoothed by the calculation of the time average
.. math::
\lambda_{\text{avg},i}(t) = \frac{1}{N_{\lambda,\text{avg}}} \sum_{n=1}^{N_{\lambda,\text{avg}}} \lambda_{\text{min},i}(t - n \Delta t)\,,
whereas :math:`\Delta t` is the :doc:`timestep <timestep>` and
:math:`N_{\lambda,\text{avg}}` is the number of averaged timesteps, that
can be set via *time_averaged_zone*.
Finally, numerical fluctuations of the switching parameter are suppressed by the usage of
.. math::
\lambda_{i}(t) = \left\{
\begin{array}{ll}
\lambda_{\text{avg},i}(t) & \text{ for } \left|\lambda_{\text{avg},i}(t) - \lambda_{i}(t-\Delta t)\right|\geq \Delta\lambda_\text{min} \text{ or } \lambda_{\text{avg},i}(t)\in\{0,1\}, \\
\lambda_{i}(t-\Delta t) & \text{ otherwise}\,,
\end{array}
\right.
whereas the minimum change :math:`\Delta\lambda_\text{min}` is set by the
*min_delta_lambda* argument.
.. note::
*group_fast* affects only :math:`\lambda_{0,i}(t)`. The switching parameter
of atoms in this :doc:`group <group>` may change due to the calculation of the
spatial switching zone.
A switching parameter of 1 can be enforced by excluding the corresponding
atoms from the :doc:`group <group>` described by group-ID and using *lambda_non_group* 1
as argument.
----------
A code example for the calculation of the switching parameter for an
adaptive-precision potential is given in the following:
The adaptive-precision potential is created
by combining :doc:`pair_style eam/fs/apip <pair_eam_apip>`
and :doc:`pair_style pace/precise/apip <pair_pace_apip>`.
The input, from which the switching parameter is calculated, is provided
by :doc:`pair lambda/input/csp/apip <pair_lambda_input_apip>`.
The switching parameter is calculated by this fix, whereas the spatial
transition zone of the switching parameter is calculated by
:doc:`pair_style lambda/zone/apip <pair_lambda_zone_apip>`.
.. code-block:: LAMMPS
pair_style hybrid/overlay eam/fs/apip pace/precise/apip lambda/input/csp/apip fcc cutoff 5.0 lambda/zone/apip 12.0
pair_coeff * * eam/fs/apip Cu.eam.fs Cu
pair_coeff * * pace/precise/apip Cu_precise.yace Cu
pair_coeff * * lambda/input/csp/apip
pair_coeff * * lambda/zone/apip
fix 2 all lambda/apip 3.0 3.5 time_averaged_zone 4.0 12.0 110 110 min_delta_lambda 0.01
----------
Restart, fix_modify, output, run start/stop, minimize info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
The saved history of the switching parameter :math:`\lambda_i`
and the saved history of
:math:`\lambda_i^\text{input}` are written to
:doc:`binary restart files <restart>` allow a smooth restart of a simulation.
None of the :doc:`fix_modify <fix_modify>` options are relevant to this fix.
If the *store_atomic_stats* argument is used, basic statistics is provided as
per-atom array:
#. :math:`\lambda_i^\text{input}(t)`
#. :math:`\lambda_{\text{avg},i}^\text{input}(t)`
#. :math:`\lambda_{0,i}(t)`
#. :math:`\lambda_{\text{min},i}(t)`
#. :math:`\lambda_{i}(t)`
If the *dump_atomic_history* argument is used, the whole saved history
of :math:`\lambda_i^\text{input}(t)` is appended to the previously
mentioned array per atom.
The per-atom vector can be accessed by various
:doc:`output commands <Howto_output>`.
No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. This fix is not invoked during
:doc:`energy minimization <minimize>`.
----------
Restrictions
""""""""""""
This fix is part of the APIP package. It is only enabled if
LAMMPS was built with that package. See the :doc:`Build package
<Build_package>` page for more info.
Related commands
""""""""""""""""
:doc:`pair_style lambda/zone/apip <pair_lambda_zone_apip>`,
:doc:`pair_style lambda/input/apip <pair_lambda_input_apip>`,
:doc:`pair_style eam/apip <pair_eam_apip>`,
:doc:`pair_style pace/apip <pair_pace_apip>`,
:doc:`fix atom_weight/apip <fix_atom_weight_apip>`
:doc:`fix lambda_thermostat/apip <fix_lambda_thermostat_apip>`,
Default
"""""""
*min_delta_lambda* = 0,
*lambda_non_group* = 1,
*cut_lo* = 4.0,
*cut_hi* = 12.0,
*history_len_lambda_input* = 100,
*history_len_lambda* = 100,
*store_atomic_stats* is not used,
*dump_atomic_history* is not used,
*group_fast* is not used,
*group_precise* is not used,
*group_ignore_lambda_input* is not used
----------
.. _Immel2025_3:
**(Immel)** Immel, Drautz and Sutmann, J Chem Phys, 162, 114119 (2025)

View File

@ -0,0 +1,176 @@
.. index:: fix lambda_thermostat/apip
fix lambda_thermostat/apip command
==================================
Syntax
""""""
.. code-block:: LAMMPS
fix ID group-ID lambda_thermostat/apip keyword values ...
* ID, group-ID are documented in :doc:`fix <fix>` command
* lambda_thermostat/apip = style name of this fix command
* zero or more keyword/value pairs may be appended
* keyword = *seed* or *store_atomic_forces* or *N_rescaling*
.. parsed-literal::
*seed* value = integer
integer = integer that is used as seed for the random number generator (> 0)
*store_atomic_forces* value = nevery
nevery = provide per-atom output every this many steps
*N_rescaling* value = groupsize
groupsize = rescale this many neighboring atoms (> 1)
Examples
""""""""
.. code-block:: LAMMPS
fix 2 all lambda_thermostat/apip
fix 2 all lambda_thermostat/apip N_rescaling 100
fix 2 all lambda_thermostat/apip seed 42
fix 2 all lambda_thermostat/apip seed 42 store_atomic_forces 1000
Description
"""""""""""
This command applies the local thermostat described in
:ref:`(Immel) <Immel2025_4>`
to conserve the energy when the switching parameters of an
:doc:`adaptive-precision interatomic potential <Howto_apip>` (APIP)
are updated while the gradient
of the switching parameter is neglected in the force calculation.
.. warning::
The temperature change caused by this fix is only the means to the end of
conserving the energy. Thus, this fix is not a classical thermostat, that
ensures a given temperature in the system.
All available thermostats are listed :doc:`here <Howto_thermostat>`.
The potential energy :math:`E_i` of an atom :math:`i` is given by the formula from
:ref:`(Immel) <Immel2025_4>`
.. math::
E_i = \lambda_i E_i^\text{(fast)} + (1-\lambda_i) E_i^\text{(precise)},
whereas :math:`E_i^\text{(fast)}` is the potential energy of atom :math:`i`
according to a fast interatomic potential like EAM,
:math:`E_i^\text{(precise)}` is the potential energy according to a precise
interatomic potential such as ACE and :math:`\lambda_i\in[0,1]` is the
switching parameter that decides which potential energy is used.
This potential energy and the corresponding forces are conservative when
the switching parameter :math:`\lambda_i` is constant in time for all atoms
:math:`i`.
For a conservative force calculation and dynamic switching parameters,
the atomic force on an atom is given by
:math:`F_i = -\nabla_i \sum_j E_j` and includes the derivative of the switching
parameter :math:`\lambda_i`.
The force contribution of this gradient of the switching function can cause
large forces which are not similar to the forces of the fast or the precise
interatomic potential as discussed in :ref:`(Immel) <Immel2025_4>`.
Thus, one can neglect the gradient of the switching parameter in the force
calculation and compensate for the violation of energy conservation by
the application of the local thermostat implemented in this fix.
One can compute the violation of the energy conservation :math:`\Delta H_i`
for all atoms :math:`i` as discussed in :ref:`(Immel) <Immel2025_4>`.
To locally correct this energy violation :math:`\Delta H_i`, one
can rescale the velocity of atom :math:`i` and of neighboring atoms.
The rescaling is done relative to the center-of-mass velocity of the
group and, thus, conserves the momentum.
.. note::
This local thermostat provides the NVE ensemble rather than the NVT
ensemble as
the energy :math:`\Delta H_i` determines the rescaling factor rather than
a temperature.
Velocities :math:`v` are updated by the integrator according to
:math:`\Delta v_i = (F_i/m_i)\Delta t`, whereas `m` denotes the mass of atom
:math:`i` and :math:`\Delta t` is the time step.
One can interpret the velocity difference :math:`\Delta v` caused by the
rescaling as the application of an additional force which is given by
:math:`F^\text{lt}_i = (v^\text{unscaled}_i - v^\text{rescaled}_i) m_i
/ \Delta t` :ref:`(Immel) <Immel2025_4>`.
This additional force is computed when the *store_atomic_forces* option
is used.
The local thermostat is not appropriate for simulations at a temperature of 0K.
.. note::
The maximum decrease of the kinetic energy is achieved with a rescaling
factor of 0, i.e., the relative velocity of the group of rescaled atoms
is set to zero. One cannot decrease the energy further. Thus, the
local thermostat can fail, which is, however, reported by the returned
vector.
----------
Restart, fix_modify, output, run start/stop, minimize info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to
:doc:`binary restart files <restart>`. None of the
:doc:`fix_modify <fix_modify>` options are relevant to this fix.
If the *store_atomic_forces* option is used, this fix produces every
*nevery* time steps a per-atom array that contains the theoretical force
applied by the local thermostat in all three spatial dimensions in the first
three components. :math:`\Delta H_i` is the fourth component of the per-atom
array.
The per-atom array can only be accessed on timesteps that are multiples
of *nevery*.
Furthermore, this fix computes a global vector of length 6 with
information about the rescaling:
#. number of atoms whose energy changed due to the last :math:`\lambda` update
#. contribution of the potential energy to the last computed :math:`\Delta H`
#. contribution of the kinetic energy to the last computed :math:`\Delta H`
#. sum over all atoms of the absolute energy change caused by the last rescaling step
#. energy change that could not be compensated accumulated over all timesteps
#. number of atoms whose energy change could not be compensated accumulated over all timesteps
The vector and the per-atom vector can be accessed by various
:doc:`output commands <Howto_output>`.
No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. This fix is not invoked during
:doc:`energy minimization <minimize>`.
----------
Restrictions
""""""""""""
This fix is part of the APIP package. It is only enabled if
LAMMPS was built with that package. See the :doc:`Build package
<Build_package>` page for more info.
Related commands
""""""""""""""""
:doc:`fix lambda/apip <fix_lambda_apip>`,
:doc:`pair_style lambda/zone/apip <pair_lambda_zone_apip>`,
:doc:`pair_style lambda/input/apip <pair_lambda_input_apip>`,
:doc:`pair_style eam/apip <pair_eam_apip>`,
:doc:`pair_style pace/apip <pair_pace_apip>`,
:doc:`fix atom_weight/apip <fix_atom_weight_apip>`
Default
"""""""
seed = 42, N_rescaling = 200, *store_atomic_forces* is not used
----------
.. _Immel2025_4:
**(Immel)** Immel, Drautz and Sutmann, J Chem Phys, 162, 114119 (2025)

View File

@ -0,0 +1,264 @@
.. index:: fix neighbor/swap
fix neighbor/swap command
=========================
Syntax
""""""
.. code-block:: LAMMPS
fix ID group-ID neighbor/swap N X seed T R0 voro-ID keyword values ...
* ID, group-ID are documented in :doc:`fix <fix>` command
* neighbor/swap = style name of this fix command
* N = invoke this fix every N steps
* X = number of swaps to attempt every N steps
* seed = random # seed (positive integer)
* T = scaling temperature of the MC swaps (temperature units)
* R0 = scaling swap probability of the MC swaps (distance units)
* voro-ID = valid voronoi compute id (compute voronoi/atom)
* one or more keyword/value pairs may be appended to args
* keywords *types* and *diff* are mutually exclusive, but one must be specified
* keyword = *types* or *diff* or *ke* or *region* or *rates*
.. parsed-literal::
*types* values = two or more atom types (Integers in range [1,Ntypes] or type labels)
*diff* values = one atom type
*ke* value = *yes* or *no*
*yes* = kinetic energy is conserved after atom swaps
*no* = no conservation of kinetic energy after atom swaps
*region* value = region-ID
region-ID = ID of region to use as an exchange/move volume
*rates* values = V1 V2 . . . Vntypes values to conduct variable diffusion for different atom types (unitless)
Examples
""""""""
.. code-block:: LAMMPS
compute voroN all voronoi/atom neighbors yes
fix mc all neighbor/swap 10 160 15238 1000.0 3.0 voroN diff 2
fix myFix all neighbor/swap 100 1 12345 298.0 3.0 voroN region my_swap_region types 5 6
fix kmc all neighbor/swap 1 100 345 1.0 3.0 voroN diff 3 rates 3 1 6
Description
"""""""""""
.. versionadded:: TBD
This fix performs Monte-Carlo (MC) evaluations to enable kinetic
Monte Carlo (kMC)-type behavior during MD simulation by allowing
neighboring atoms to swap their positions. In contrast to the :doc:`fix
atom/swap <fix_atom_swap>` command which swaps pairs of atoms anywhere
in the simulation domain, the restriction of the MC swapping to
neighbors enables a hybrid MD/kMC-like simulation.
Neighboring atoms are defined by using a Voronoi tesselation performed
by the :doc:`compute voronoi/atom <compute_voronoi_atom>` command.
Two atoms are neighbors if their Voronoi cells share a common face
(3d) or edge (2d).
The selection of a swap neighbor is made using a distance-based
criterion for weighting the selection probability of each swap, in the
same manner as kMC selects a next event using relative probabilities.
The acceptance or rejection of each swap is determined via the
Metropolis criterion after evaluating the change in system energy due
to the swap.
A detailed explanation of the original implementation of this
algorithm can be found in :ref:`(Tavenner 2023) <TavennerMDkMC>`
where it was used to simulated accelerated diffusion in an MD context.
Simulating inherently kinetically-limited behaviors which rely on rare
events (such as atomic diffusion in a solid) is challenging for
traditional MD since its relatively short timescale will not naturally
sample many events. This fix addresses this challenge by allowing rare
neighbor hopping events to be sampled in a kMC-like fashion at a much
faster rate (set by the specified *N* and *X* parameters). This enables
the processes of atomic diffusion to be approximated during an MD
simulation, effectively decoupling the MD atomic vibrational timescale
and the atomic hopping (kMC event) timescale.
The algorithm implemented by this fix is as follows:
- The MD simulation is paused every *N* steps
- A Voronoi tesselation is performed for the current atom configuration.
- Then *X* atom swaps are attempted, one after the other.
- For each swap, an atom *I* is selected randomly from the list of
atom types specified by either the *types* or *diff* keywords.
- One of *I*'s Voronoi neighbors *J* is selected using the
distance-weighted probability for each neighbor detailed below.
- The *I,J* atom IDs are communicated to all processors so that a
global energy evaluation can be performed for the post-swap state
of the system.
- The swap is accepted or rejected based on the Metropolis criterion
using the energy change of the system and the specified temperature
*T*.
Here are a few comments on the computational cost of the swapping
algorithm.
1. The cost of a global energy evaluation is similar to that of an MD
timestep.
2. Similar to other MC algorithms in LAMMPS, improved parallel
efficiency is achieved with a smaller number of atoms per
processor than would typically be used in an standard MD
simulation. This is because the per-energy evaluation cost
increases relative to the balance of MD/MC steps as indicated by
1., but the communication cost remains relatively constant for a
given number of MD steps.
3. The MC portion of the simulation will run dramatically slower if
the pair style uses different cutoffs for different atom types (or
type pairs). This is because each atom swap then requires a
rebuild of the neighbor list to ensure the post-swap global energy
can be computed correctly.
Limitations are imposed on selection of *I,J* atom pairs to avoid
swapping of atoms which are outside of a reasonable cutoff (e.g. due to
a Voronoi tesselation near free surfaces) though the use of a
distance-weighted probability scaling.
----------
This section gives more details on other arguments and keywords.
The random number generator (RNG) used by all the processors for MC
operations is initialized with the specified *seed*.
The distance-based probability is weighted by the specified *R0* which
sets the radius :math:`r_0` in this formula
.. math::
p_{ij} = e^{(\frac{r_{ij}}{r_0})^2}
where :math:`p_{ij}` is the probability of selecting atom :math:`j` to
swap with atom :math:`i`. Typically, a value for *R0* around the
average nearest-neighbor spacing is appropriate. Since this is simply a
probability weighting, the swapping behavior is not very sensitive to
the exact value of *R0*.
The required *voro-ID* value is the compute-ID of a
:doc:`compute voronoi/atom <compute_voronoi_atom>` command like
this:
.. code-block:: LAMMPS
compute compute-ID group-ID voronoi/atom neighbors yes
It must return per-atom list of valid neighbor IDs as in the
:doc:`compute voronoi/atom <compute_voronoi_atom>` command.
The keyword *types* takes two or more atom types as its values. Only
atoms *I* of the first atom type will be selected. Only atoms *J* of the
remaining atom types will be considered as potential swap partners.
The keyword *diff* take a single atom type as its value. Only atoms
*I* of the that atom type will be selected. Atoms *J* of all
remaining atom types will be considered as potential swap partners.
This includes the atom type specified with the *diff* keyword to
account for self-diffusive hops between two atoms of the same type.
Note that the *neighbors yes* option must be enabled for use with this
fix. The group-ID should include all the atoms which this fix will
potentially select. I.e. the group-ID used in the voronoi compute should
include the same atoms as that indicated by the *types* keyword. If the
*diff* keyword is used, the group-ID should include atoms of all types
in the simulation.
The keyword *ke* takes *yes* (default) or *no* as its value. It two
atoms are swapped with different masses, then a value of *yes* will
rescale their respective velocities to conserve the kinetic energy of
the system. A value of *no* will perform no rescaling, so that
kinetic energy is not conserved. See the restriction on this keyword
below.
The *region* keyword takes a *region-ID* as its value. If specified,
then only atoms *I* and *J* within the geometric region will be
considered as swap partners. See the :doc:`region <region>` command
for details. This means the group-ID for the :doc:`compute
voronoi/atom <compute_voronoi_atom>` command also need only contain
atoms within the region.
The keyword *rates* can modify the swap rate based on the type of atom
*J*. Ntype values must be specified, where Ntype = the number of atom
types in the system. Each value is used to scale the probability
weighting given by the equation above. In the third example command
above, a simulation has 3 atoms types. Atom *I*s of type 1 are
eligible for swapping. Swaps may occur with atom *J*s of all 3 types.
Assuming all *J* atoms are equidistant from an atom *I*, *J* atoms of
type 1 will be 3x more likely to be selected as a swap partner than
atoms of type 2. And *J* atoms of type 3 will be 6.5x more likely to
be selected than atoms of type 2. If the *rates* keyword is not used,
all atom types will be treated with the same probability during selection
of swap attempts.
Restart, fix_modify, output, run start/stop, minimize info
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
This fix writes the state of the fix to :doc:`binary restart files
<restart>`. This includes information about the random number generator
seed, the next timestep for MC exchanges, and the number of exchange
attempts and successes. See the :doc:`read_restart <read_restart>`
command for info on how to re-specify a fix in an input script that
reads a restart file, so that the operation of the fix continues in an
uninterrupted fashion.
None of the :doc:`fix_modify <fix_modify>` options are relevant to this
fix.
This fix computes a global vector of length 2, which can be accessed
by various :doc:`output commands <Howto_output>`. The vector values are
the following global cumulative quantities:
#. swap attempts
#. swap accepts
The vector values calculated by this fix are "intensive".
No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. This fix is not invoked during
:doc:`energy minimization <minimize>`.
Restrictions
""""""""""""
This fix is part of the MC package. It is only enabled if LAMMPS was
built with that package. See the :doc:`Build package <Build_package>`
doc page for more info. Also this fix requires that the :ref:`VORONOI
package <PKG-VORONOI>` is installed, otherwise the fix will not be
compiled.
The :doc:`compute voronoi/atom <compute_voronoi_atom>` command
referenced by the required voro-ID must return neighboring atoms as
illustrated in the examples above.
If this fix is used with systems that do not have per-type masses
(e.g. atom style sphere), the *ke* keyword must be set to *off* since
the implemented algorithm will not be able to re-scale velocities
properly.
Related commands
""""""""""""""""
:doc:`fix nvt <fix_nh>`, :doc:`compute voronoi/atom <compute_voronoi_atom>`
:doc:`delete_atoms <delete_atoms>`, :doc:`fix gcmc <fix_gcmc>`,
:doc:`fix atom/swap <fix_atom_swap>`, :doc:`fix mol/swap <fix_mol_swap>`,
:doc:`fix sgcmc <fix_sgcmc>`
Default
"""""""
The option defaults are *ke* = yes and *rates* = 1 for all atom types.
----------
.. _TavennerMDkMC:
**(Tavenner 2023)** J Tavenner, M Mendelev, J Lawson, Computational
Materials Science, 218, 111929 (2023).

View File

@ -35,9 +35,9 @@ consistent with the microcanonical ensemble (NVE) provided there
are (full) periodic boundary conditions and no other "manipulations"
of the system (e.g. fixes that modify forces or velocities).
This fix invokes the velocity form of the
Stoermer-Verlet time integration algorithm (velocity-Verlet). Other
time integration options can be invoked using the :doc:`run_style <run_style>` command.
This fix invokes the velocity form of the Stoermer-Verlet time
integration algorithm (velocity-Verlet). Other time integration
options can be invoked using the :doc:`run_style <run_style>` command.
----------
@ -48,11 +48,13 @@ time integration options can be invoked using the :doc:`run_style <run_style>` c
Restart, fix_modify, output, run start/stop, minimize info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to :doc:`binary restart files <restart>`. None of the :doc:`fix_modify <fix_modify>` options
are relevant to this fix. No global or per-atom quantities are stored
by this fix for access by various :doc:`output commands <Howto_output>`.
No information about this fix is written to :doc:`binary restart files
<restart>`. None of the :doc:`fix_modify <fix_modify>` options are
relevant to this fix. No global or per-atom quantities are stored by
this fix for access by various :doc:`output commands <Howto_output>`.
No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. This fix is not invoked during :doc:`energy minimization <minimize>`.
the :doc:`run <run>` command. This fix is not invoked during
:doc:`energy minimization <minimize>`.
Restrictions
""""""""""""

View File

@ -64,6 +64,7 @@ Syntax
mass = mass scale for reduced units (mass units)
planck = Planck's constant for other unit style
mvv2e = mass * velocity^2 to energy conversion factor for other unit style
*esynch* value = *yes* or *no* (only in *pimd/langevin/bosonic*)
Examples
""""""""
@ -72,8 +73,10 @@ Examples
fix 1 all pimd/nvt method nmpimd fmass 1.0 sp 2.0 temp 300.0 nhc 4
fix 1 all pimd/langevin ensemble npt integrator obabo temp 113.15 thermostat PILE_L 1234 tau 1.0 iso 1.0 barostat BZP taup 1.0
fix 1 all pimd/nvt/bosonic method pimd fmass 1.0 sp 1.0 temp 2.0 nhc 4
fix 1 all pimd/langevin/bosonic integrator obabo temp 113.15 thermostat PILE_L 1234 tau 1.0
Example input files are provided in the examples/PACKAGES/pimd directory.
Example input files are provided in the examples/PACKAGES/pimd and examples/PACKAGES/pimd_bosonic directories.
Description
"""""""""""
@ -116,6 +119,24 @@ beads on the other ring-polymers with the same imaginary time index (the
second term in the effective potential above). The quasi-beads also
interact with the two neighboring quasi-beads through the spring
potential in imaginary-time space (first term in effective potential).
For bosons, the method of Hirshberg et. al. :ref:`(Hirshberg1) <Hirshberg>` is employed, which replaces the spring part of :math:`V_{eff}` by the spring potential :math:`V^{[1,N]}` defined through recurrence relation:
.. math::
e ^ { -\beta V^{[1,N]} } = & \frac{1}{N} \sum_{k=1}^N e ^ { -\beta \left( V^{[1,N-k]} + E^{[N-K+1,N]} \right)} \\
e ^ { -\beta V^{[1,0]}} = & 1
Here, :math:`E^{[N-K+1,N]}` is the spring energy of the ring polymer
obtained by connecting the beads of particles :math:`N - k + 1, N - k +
2, ..., N` in a cycle.
The implementation of the potential and forces evaluation uses the algorithm developed by Feldman and Hirshberg, which scales like :math:`N^2+PN`
:ref:`(Feldman) <Feldman>`.
The minimum-image convention is employed on
the springs to account for periodic boundary conditions; an elaborate
discussion of the validity of the approximation is available in
:ref:`(Higer) <HigerFeldman>`.
To sample the canonical ensemble, any thermostat can be applied.
Fix *pimd/nvt* applies a Nose-Hoover massive chain thermostat
@ -182,6 +203,11 @@ If *method* is *pimd*, the Cartesian representation is used to integrate the
equations of motion. The harmonic force is added to the total force of the
system, and the numerical integrator is used to propagate the Hamiltonian.
Fix *pimd/nvt/bosonic* only supports the *pimd* and *nmpimd* methods. Fix
*pimd/langevin/bosonic* only supports the *pimd* method, which is the default
in this fix. These restrictions are related to the use of normal
modes, which change in bosons.
The keyword *integrator* specifies the Trotter splitting method used by *fix
pimd/langevin*. See :ref:`(Liu) <Liu>` for a discussion on the OBABO and BAOAB
splitting schemes. Typically either of the two should work fine.
@ -211,6 +237,9 @@ If *fmmode* is *normal*, then the fictitious mass is
where :math:`\lambda_i` is the eigenvalue of the :math:`i`-th normal mode.
In *pimd/langevin/bosonic*, *fmmode* should not be used, and would raise an error if set to
a value other than *physical*, due to the lack of support for bosonic normal modes.
.. note::
Fictitious mass is only used in the momentum of the equation of motion
@ -225,6 +254,7 @@ is appropriate for most situations.
The keyword *ensemble* for fix style *pimd/langevin* determines which ensemble is it
going to sample. The value can be *nve* (microcanonical), *nvt* (canonical), *nph* (isoenthalpic),
and *npt* (isothermal-isobaric).
Fix *pimd/langevin/bosonic* currently does not support *ensemble* other than *nve*, *nvt*.
The keyword *temp* specifies temperature parameter for fix styles *pimd/nvt* and *pimd/langevin*. It should read
a positive floating-point number.
@ -249,11 +279,12 @@ damping time of the non-centroid mode :math:`i` is :math:`\frac{P}{\beta\hbar}\s
The barostat parameters for fix style *pimd/langevin* with *npt* or *nph* ensemble is specified using one of *iso* and *aniso*
keywords. A *pressure* value should be given with pressure unit. The keyword *iso* means couple all 3 diagonal components together when pressure is computed (hydrostatic pressure), and dilate/contract the dimensions together. The keyword *aniso* means x, y, and z dimensions are controlled independently using the Pxx, Pyy, and Pzz components of the stress tensor as the driving forces, and the specified scalar external pressure.
These parameters are not supported in *pimd/langevin/bosonic*.
The keyword *barostat* reads *style* of barostat for fix style *pimd/langevin*. *style* can
be *BZP* (Bussi-Zykova-Parrinello, as described in :ref:`Bussi <Bussi>`) or *MTTK* (Martyna-Tuckerman-Tobias-Klein, as described in :ref:`Martyna1 <Martyna3>` and :ref:`Martyna2 <Martyna4>`).
The keyword *taup* specifies the barostat damping time parameter for fix style *pimd/langevin*. It is in time unit.
The keyword *taup* specifies the barostat damping time parameter for fix style *pimd/langevin*. It is in time unit. It is not supported in *pimd/langevin/bosonic*.
The keyword *fixcom* specifies whether the center-of-mass of the extended ring-polymer system is fixed during the pimd simulation.
Once *fixcom* is set to be *yes*, the center-of-mass velocity will be distracted from the centroid-mode velocities in each step.
@ -261,6 +292,8 @@ Once *fixcom* is set to be *yes*, the center-of-mass velocity will be distracted
The keyword *lj* should be used if :doc:`lj units <units>` is used for *fix pimd/langevin*. Typically one may want to use
reduced units to run the simulation, and then convert the results into some physical units (for example, :doc:`metal units <units>`). In this case, the 5 quantities in the physical mass units are needed: epsilon (energy scale), sigma (length scale), mass, Planck's constant, mvv2e (mass * velocity^2 to energy conversion factor). Planck's constant and mvv2e can be found in src/update.cpp. If there is no need to convert reduced units to physical units, you can omit the keyword *lj* and these five values will be set to 1.
Fix *pimd/langevin/bosonic* also has a keyword not available in fix *pimd/langevin*: *esynch*, with default *yes*. If set to *no*, some time consuming synchronization of spring energies and the primitive kinetic energy estimator between processors is avoided.
The PIMD algorithm in LAMMPS is implemented as a hyper-parallel scheme
as described in :ref:`Calhoun <Calhoun>`. In LAMMPS this is done by using
:doc:`multi-replica feature <Howto_replica>` in LAMMPS, where each
@ -351,6 +384,8 @@ the global vector are:
The vector values calculated by fix *pimd/nvt* are "extensive", except for the
temperature, which is "intensive".
Fix *pimd/nvt/bosonic* computes a global 4-vector. The first three are the same as in *pimd/nvt* (the justification for the correctness of the virial estimator for bosons appears in the supporting information of :ref:`(Hirshberg2) <HirshbergInvernizzi>`). The fourth is the current value of the scalar primitive estimator for the kinetic energy of the quantum system :ref:`(Hirshberg1) <Hirshberg>`.
Fix *pimd/langevin* computes a global vector of quantities, which
can be accessed by various :doc:`output commands <Howto_output>`. Note that
it outputs multiple log files, and different log files contain information
@ -409,6 +444,33 @@ If *aniso* or *x* or *y* or *z* is used for the barostat, the vector has 17 valu
#. barostat cell Jacobian
#. enthalpy of the extended system (sum of 4, 14, 15, and 16; conserved if *ensemble* is *nph*)
Fix *pimd/langevin/bosonic* computes a global 6-vector. The quantities in the
global vector are:
#. kinetic energy of the beads,
#. spring elastic energy of the beads,
#. potential energy of the bead,
#. total energy of all beads (conserved if *ensemble* is *nve*) if *esynch* is *yes*
#. primitive kinetic energy estimator :ref:`(Hirshberg1) <Hirshberg>`
#. virial energy estimator :ref:`(Herman) <Herman>` (see the justification in the supporting information of :ref:`(Hirshberg2) <HirshbergInvernizzi>`).
The first three are different for different log files, and the others
are the same for different log files, except for the primitive kinetic
energy estimator when setting *esynch* to *no*. Then, the primitive
kinetic energy estimator is obtained by summing over all log files.
Also note that when *esynch* is set to *no*, the fourth output gives the
total energy of all beads excluding the spring elastic energy; the total
classical energy can then be obtained by adding the sum of second output
over all log files. All vector values calculated by fix
*pimd/langevin/bosonic* are "extensive".
For both *pimd/nvt/bosonic* and *pimd/langevin/bosonic*, the contribution of the
exterior spring to the primitive estimator is printed to the first log
file. The contribution of the :math:`P-1` interior springs is printed
to the other :math:`P-1` log files. The contribution of the constant
:math:`\frac{PdN}{2 \beta}` (with :math:`d` being the dimensionality) is
equally divided over log files.
No parameter of fix *pimd/nvt* or *pimd/langevin* can be used with the *start/stop* keywords
of the :doc:`run <run>` command. Fix *pimd/nvt* or *pimd/langevin* is not invoked during
:doc:`energy minimization <minimize>`.
@ -506,3 +568,19 @@ Path Integrals, McGraw-Hill, New York (1965).
.. _Liujian:
**(Liu)** J. Liu, D. Li, X. Liu, J. Chem. Phys. 145, 024103 (2016).
.. _Hirshberg:
**(Hirshberg1)** B. Hirshberg, V. Rizzi, and M. Parrinello, "Path integral molecular dynamics for bosons," Proc. Natl. Acad. Sci. U. S. A. 116, 21445 (2019)
.. _HirshbergInvernizzi:
**(Hirshberg2)** B. Hirshberg, M. Invernizzi, and M. Parrinello, "Path integral molecular dynamics for fermions: Alleviating the sign problem with the Bogoliubov inequality," J Chem Phys, 152, 171102 (2020)
.. _Feldman:
**(Feldman)** Y. M. Y. Feldman and B. Hirshberg, "Quadratic scaling bosonic path integral molecular dynamics," J. Chem. Phys. 159, 154107 (2023)
.. _HigerFeldman:
**(Higer)** J. Higer, Y. M. Y. Feldman, and B. Hirshberg, "Periodic Boundary Conditions for Bosonic Path Integral Molecular Dynamics," J. Chem. Phys. 163, 024101 (2025)

View File

@ -12,13 +12,14 @@ Syntax
* url = URL of the file to download
* zero or more keyword argument pairs may be provided
* keyword = *output* or *verify* or *overwrite* or *verbose*
* keyword = *output* or *overwrite* or *timeout* or *verify* or *verbose*
.. parsed-literal::
*output* filename = write to *filename* instead of inferring the name from the URL
*verify* yes/no = verify SSL certificate and hostname if *yes*, do not if *no*
*overwrite* yes/no = if *yes* overwrite the output file in case it exists, do not if *no*
*timeout* time = stop download if not completed within given time in seconds
*verify* yes/no = verify SSL certificate and hostname if *yes*, do not if *no*
*verbose* yes/no = if *yes* write verbose debug output from libcurl to screen, do not if *no*
Examples
@ -42,15 +43,20 @@ large variety of protocols including "http", "https", "ftp", "scp",
The *output* keyword can be used to set the filename. By default, the last part
of the URL is used.
The *overwrite* keyword determines whether a file should be overwritten if it
already exists. If the argument is *no*, then the download will be skipped
if the file exists.
The *timeout* keyword can be used to modify the timeout for downloads in
seconds. After the timeout, the download will stop, even if incomplete.
The default time value is 300, i.e. 5 minutes. Setting the timeout to 0
means to wait forever.
The *verify* keyword determines whether ``libcurl`` will validate the
SSL certificate and hostname for encrypted connections. Turning this
off may be required when using a proxy or connecting to a server with a
self-signed SSL certificate.
The *overwrite* keyword determines whether a file should be overwritten if it
already exists. If the argument is *no*, then the download will be skipped
if the file exists.
The *verbose* keyword determines whether a detailed protocol of the steps
performed by libcurl is written to the screen. Using the argument *yes*
can be used to debug connection issues when the *geturl* command does not
@ -105,4 +111,4 @@ Related commands
Default
"""""""
*verify* = yes, *overwrite* = yes
*overwrite* = yes, *timeout* = 300, *verify* = yes, *verbose* = no

View File

@ -76,7 +76,9 @@ contains multiple molecules. The :doc:`atom_style template
system with more than one templated molecule.
The molecule file can be either in a *native* format or in `JSON format
<https://www.json.org/>`_. The details of the two formats are described
<https://www.json.org/>`_. JSON formal filenames **must** have the
extension ".json". Files with any other name will be assumed to be in
the "native" format. The details of the two formats are described
below. When referencing multiple molecule files in a single *molecule*
command, each of those files may be either format.
@ -207,7 +209,7 @@ defining a *body* particle, which requires setting the number of
.. list-table::
:header-rows: 1
:widths: 20 13 42 15
:widths: 21 12 47 20
* - Number(s)
- Keyword
@ -216,7 +218,7 @@ defining a *body* particle, which requires setting the number of
* - N
- atoms
- # of atoms N in molecule
- 0
- keyword is *required*
* - Nb
- bonds
- # of bonds Nb in molecule
@ -239,8 +241,8 @@ defining a *body* particle, which requires setting the number of
- 0
* - Ninteger Ndouble
- body
- # of integer and floating-point values in body particle
- 0
- # of integer and floating-point values in :doc:`body particle <Howto_body>`
- 0 0
* - Mtotal
- mass
- total mass of molecule
@ -693,12 +695,15 @@ and thus the data in the file must follow suitable conventions to be
correctly processed. LAMMPS provides a `JSON schema file
<https://json-schema.org/>`_ for JSON format molecule files in the
:ref:`tools/json folder <json>` to represent those conventions. Using
the schema file any JSON format molecule files can be validated.
the schema file any JSON format molecule files can be validated. Please
note that the format requirement for JSON are very strict and the JSON
reader in LAMMPS does not accept files with extensions like comments.
Validating a particular JSON format molecule file against this schema
ensures that both, the JSON syntax requirement *and* the LAMMPS
conventions for molecule templates are followed. This is a formal check
only and thus it **cannot** check whether the file contents are
physically meaningful.
conventions for molecule template files are followed. LAMMPS should be
able to read and parse any JSON file that passes the schema check. This
is a formal check only and thus it **cannot** check whether the file
contents are consistent or physically meaningful.
Here is a simple example for the same TIP3P water molecule from above in
JSON format and also using :doc:`type labels <labelmap>` instead of
@ -862,6 +867,155 @@ for the "native" molecule file format.
- a data block
- no
- defines impropers in the molecule template with the format "improper-type", "atom1", "atom2", "atom3", "atom4" (same as Impropers without improper-ID)
* - shake
- 3 JSON objects
- no
- contains the sub-sections "flags", "atoms", "bonds" described below
* - special
- 2 JSON objects
- no
- contains the sub-sections "counts" and "bonds" described below
* - body
- 2 JSON objects
- no
- contains the "integers" and "doubles" sub-sections with arrays with the same data as Body Integers and Body Doubles, respectively
The following table describes the sub-sections for the "special" entry from above:
.. list-table::
:header-rows: 1
* - Subsection
- Argument(s)
- Required
- Description
* - counts
- a data block
- yes
- contains the counts of 1-2, 1-3, and 1-4 special neighbors with the format "atom-id", "n12", "n13", "n14" (same as Special Bond Counts)
* - bonds
- a data block
- yes
- contains the lists of special neighbors to atoms with the format "atom-id", "atom-id-list" (same as Special Bonds)
The following table describes the sub-sections for the "shake" entry from above:
.. list-table::
:header-rows: 1
* - Subsection
- Argument(s)
- Required
- Description
* - flags
- a data block
- yes
- contains the counts shake flags for atoms with the format "atom-id", "flag" (same as Shake Flags)
* - atoms
- a data block
- yes
- contains the lists of shake cluster atom-ids for atoms with the format "atom-id", "atom-id-list" (same as Shake Atoms)
* - bonds
- a data block
- yes
- contains the lists of shake bond or angle types for atoms with the format "atom-id", "type-list" (same as Shake Bonds)
The "special" and "shake" sections are usually not needed, since the
data can be auto-generated as soon as the simulation box is defined.
Below is an example for what would have to be *added* to the example
JSON file above in case the molecule command needs to be issued earlier.
.. code-block:: json
"special": {
"counts": {
"format": ["atom-id", "n12", "n13", "n14"],
"data": [
[1, 2, 0, 0],
[2, 1, 1, 0],
[3, 1, 1, 0]
]
},
"bonds": {
"format": ["atom-id", "atom-id-list"],
"data": [
[1, [2, 3]],
[2, [1, 3]],
[3, [1, 2]]
]
}
},
"shake": {
"flags": {
"format": ["atom-id", "flag"],
"data": [
[1, 1],
[2, 1],
[3, 1]
]
},
"atoms": {
"format": ["atom-id", "atom-id-list"],
"data": [
[1, [1, 2, 3]],
[2, [1, 2, 3]],
[3, [1, 2, 3]]
]
},
"types": {
"format": ["atom-id", "type-list"],
"data": [
[1, ["OW-HO1", "OW-HO1", "HO1-OW-HO1"]],
[2, ["OW-HO1", "OW-HO1", "HO1-OW-HO1"]],
[3, ["OW-HO1", "OW-HO1", "HO1-OW-HO1"]]
]
}
}
Below is a minimal example of a JSON format molecule template for a body
particle for :doc:`pair style body/nparticle
<pair_body_nparticle>`. Molecule templates for body particles must
contain only one atom:
.. code-block:: json
{
"application": "LAMMPS",
"format": "molecule",
"revision": 1,
"title": "Square body for body/nparticles",
"schema": "https://download.lammps.org/json/molecule-schema.json",
"units": "real",
"coords": {
"format": ["atom-id", "x", "y", "z"],
"data": [
[1, 0.00000, 0.00000, 0.00000]
]
},
"types": {
"format": ["atom-id", "type"],
"data": [
[1, 1]
]
},
"masses": {
"format": ["atom-id", "mass"],
"data": [
[1, 1.0]
]
},
"body": {
"integers": [4],
"doubles": [
1.0, 1.0, 4.0, 0.0, 0.0, 0.0,
-0.70710678118654752440, -0.70710678118654752440, 0.0,
-0.70710678118654752440, 0.70710678118654752440, 0.0,
0.70710678118654752440, 0.70710678118654752440, 0.0,
0.70710678118654752440, -0.70710678118654752440, 0.0
]
}
}
----------

View File

@ -117,6 +117,16 @@ Syntax
*pair/only* = *off* or *on*
*off* = use device acceleration (e.g. GPU) for all available styles in the KOKKOS package (default)
*on* = use device acceleration only for pair styles (and host acceleration for others)
*threads/per/atom* args = Ntpa
Ntpa = # of threads per atom for multiple GPU threads over the neighbor list per atom
*pair/team/size* args = Nteamsize
Nteamsize = # of threads per block used for the pair compute kernel
*nbin/atoms/per/bin = Natomsperbin
Natomsperbin = # of atoms per bin used for neighbor list builds
*nbor/block/size = blocksize
blocksize = # of GPU threads per block for the flat neighbor build method
*bond/block/size = blocksize
blocksize = # of GPU threads per block for the bond force computation
*omp* args = Nthreads keyword value ...
Nthreads = # of OpenMP threads to associate with each MPI process
zero or more keyword/value pairs may be appended
@ -586,14 +596,14 @@ keyword above.
The *gpu/aware* keyword chooses whether GPU-aware MPI will be used. When
this keyword is set to *on*, buffers in GPU memory are passed directly
through MPI send/receive calls. This reduces overhead of first copying
the data to the host CPU. However GPU-aware MPI is not supported on all
the data to the host CPU. However GPU-aware MPI is not supported on all
systems, which can lead to segmentation faults and would require using a
value of *off*\ . If LAMMPS can safely detect that GPU-aware MPI is not
available (currently only possible with OpenMPI v2.0.0 or later), then
the *gpu/aware* keyword is automatically set to *off* by default. When
the *gpu/aware* keyword is set to *off* while any of the *comm*
keywords are set to *device*, the value for these *comm* keywords will
be automatically changed to *no*\ . This setting has no effect if not
be automatically changed to *no*\ . This setting has no effect if not
running on GPUs or if using only one MPI rank. GPU-aware MPI is available
for OpenMPI 1.8 (or later versions), Mvapich2 1.9 (or later) when the
"MV2_USE_CUDA" environment variable is set to "1", CrayMPI, and IBM
@ -608,6 +618,37 @@ other force computations on the host CPU. The *comm* flags, along with the
This can result in better performance for certain configurations and
system sizes.
The following parameters allow users to tune the overall performance
depending on the simulated systems. If not explicitly specified,
their values will be set internally by the KOKKOS package.
The *threads/per/atom* keyword sets the number of GPU vector lanes per atom
used to perform force calculations. This keyword is only applicable
when *neigh/thread* is set to *on*. For large cutoffs or with a small number
of particles per GPU, increasing the value can improve performance.
The number of lanes per atom must be a power of 2 and currently cannot be
greater than the SIMD width for the GPU / accelerator. In the case
it exceeds the SIMD width, it will automatically be decreased to meet
the restriction.
The *pair/team/size* keyword sets the number of threads per block for
the pair force compute kernel. This keyword is only applicable
when *neigh/thread* is set to *on*. The default value of this parameter
is determined based on the GPU architecture at runtime.
The *nbin/atoms/per/bin* keyword sets the number of atoms per bin
used for the neighbor list builds on the GPU, which then determines
the number of GPU threads per bin. The default value of this parameter is 16.
The *nbor/block/size* keyword sets the number of GPU threads per block
used for the neighbor list builds on the GPU using the flat method (i.e.,
each thread finds the neighbor list of an atom). If not specified, then
the GPU threads are assigned to the bins.
The *bond/block/size* keyword sets the number of GPU threads per block
used for launching the bond force kernel on the GPU. The default value
of this parameter is determined based on the GPU architecture at runtime.
----------
The *omp* style invokes settings associated with the use of the

127
doc/src/pair_eam_apip.rst Normal file
View File

@ -0,0 +1,127 @@
.. index:: pair_style eam/apip
.. index:: pair_style eam/fs/apip
pair_style eam/apip command
=============================
Constant precision variant: *eam*
pair_style eam/fs/apip command
================================
Constant precision variant: *eam/fs*
Syntax
""""""
.. code-block:: LAMMPS
pair_style eam/apip
pair_style eam/fs/apip
Examples
""""""""
.. code-block:: LAMMPS
pair_style hybrid/overlay eam/fs/apip pace/precise/apip lambda/input/csp/apip fcc cutoff 5.0 lambda/zone/apip 12.0
pair_coeff * * eam/fs/apip Cu.eam.fs Cu
pair_coeff * * pace/precise/apip Cu_precise.yace Cu
pair_coeff * * lambda/input/csp/apip
pair_coeff * * lambda/zone/apip
Description
"""""""""""
Style *eam* computes pairwise interactions for metals and metal alloys
using embedded-atom method (EAM) potentials :ref:`(Daw) <Daw2>`. The total
energy :math:`E_i` of an atom :math:`i` is given by
.. math::
E_i^\text{EAM} = F_\alpha \left(\sum_{j \neq i}\ \rho_\beta (r_{ij})\right) +
\frac{1}{2} \sum_{j \neq i} \phi_{\alpha\beta} (r_{ij})
where :math:`F` is the embedding energy which is a function of the atomic
electron density :math:`\rho`, :math:`\phi` is a pair potential interaction,
and :math:`\alpha` and :math:`\beta` are the element types of atoms
:math:`i` and :math:`j`. The multi-body nature of the EAM potential is a
result of the embedding energy term. Both summations in the formula are over
all neighbors :math:`j` of atom :math:`i` within the cutoff distance.
EAM is documented in detail in :doc:`pair_style eam <pair_eam>`.
The potential energy :math:`E_i` of an atom :math:`i` of an adaptive-precision
interatomic potential (APIP) according to :ref:`(Immel) <Immel2025_5>` is given by
.. math::
E_i^\text{APIP} = \lambda_i E_i^\text{(fast)} + (1-\lambda_i) E_i^\text{(precise)}\,,
whereas the switching parameter :math:`\lambda_i` is computed
dynamically during a simulation by :doc:`fix lambda/apip <fix_lambda_apip>`
or set prior to a simulation via :doc:`set <set>`.
The pair style *eam/fs/apip* computes the potential energy
:math:`\lambda_i E_i^\text{EAM}` and the
corresponding force and should be combined
with a precise potential like
:doc:`pair_style pace/precise/apip <pair_pace_apip>` that computes the
potential energy :math:`(1-\lambda_i) E_i^\text{(precise)}` and the
corresponding force via :doc:`pair_style hybrid/overlay <pair_hybrid>`.
Mixing, shift, table, tail correction, restart, rRESPA info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
For atom type pairs I,J and I != J, where types I and J correspond to
two different element types, mixing is performed by LAMMPS as
described above with the individual styles. You never need to specify
a pair_coeff command with I != J arguments for the eam/apip styles.
This pair style does not support the :doc:`pair_modify <pair_modify>`
shift, table, and tail options.
The eam/apip pair styles do not write their information to :doc:`binary
restart files <restart>`, since it is stored in tabulated potential
files. Thus, you need to re-specify the pair_style and pair_coeff
commands in an input script that reads a restart file.
The eam/apip pair styles can only be used via the *pair* keyword of the
:doc:`run_style respa <run_style>` command. They do not support the
*inner*, *middle*, *outer* keywords.
----------
Restrictions
""""""""""""
This pair styles are part of the APIP package. It is only enabled if
LAMMPS was built with that package. See the :doc:`Build package
<Build_package>` page for more info.
Related commands
""""""""""""""""
:doc:`pair_style eam <pair_eam>`,
:doc:`pair_style hybrid/overlay <pair_hybrid>`,
:doc:`fix lambda/apip <fix_lambda_apip>`,
:doc:`fix lambda_thermostat/apip <fix_lambda_thermostat_apip>`,
:doc:`pair_style lambda/zone/apip <pair_lambda_zone_apip>`,
:doc:`pair_style lambda/input/apip <pair_lambda_input_apip>`,
:doc:`pair_style pace/apip <pair_pace_apip>`,
:doc:`fix atom_weight/apip <fix_atom_weight_apip>`
Default
"""""""
none
----------
.. _Immel2025_5:
**(Immel)** Immel, Drautz and Sutmann, J Chem Phys, 162, 114119 (2025)
.. _Daw2:
**(Daw)** Daw, Baskes, Phys Rev Lett, 50, 1285 (1983).
Daw, Baskes, Phys Rev B, 29, 6443 (1984).

View File

@ -171,29 +171,26 @@ restrictions discussed below.
If the *hybrid/scaled* style is used instead of *hybrid/overlay*,
contributions from sub-styles are weighted by their scale factors, which
may be fractional or even negative. Furthermore the scale factor for
each sub-style may a constant, an *equal* style variable, or an *atom*
style variable. Variable scale factors may change during the simulation.
Different sub-styles may use different scale factor styles.
In the case of a sub-style scale factor that is an *atom* style variable,
the force contribution to each atom from that sub-style is weighted
by the value of the variable for that atom, while the contribution
from that sub-style to the global potential energy is zero.
All other contributions to the per-atom energy, per-atom
virial, and global virial (if not obtained from forces)
from that sub-style are zero.
This enables
switching smoothly between two different pair styles or two different
parameter sets during a run in a similar fashion as could be done
with :doc:`fix adapt <fix_adapt>` or :doc:`fix alchemy <fix_alchemy>`.
All pair styles that will be used are listed as "sub-styles" following
the *hybrid* or *hybrid/overlay* keyword, in any order. In case of the
*hybrid/scaled* pair style, each sub-style is prefixed with a scale
factor. The scale factor is either a floating point number or an
*equal* or *atom*
style (or equivalent) variable. Each sub-style's name is followed by
its usual arguments, as illustrated in the examples above. See the doc
pages of the individual pair styles for a listing and explanation of the
appropriate arguments for them.
each sub-style may be a constant, an *equal* style variable, or an
*atom* style variable. Variable scale factors may change during the
simulation. Different sub-styles may use different scale factor styles.
In the case of a sub-style scale factor that is an *atom* style
variable, the force contribution to each atom from that sub-style is
weighted by the value of the variable for that atom, while the
contribution from that sub-style to the global potential energy is zero.
All other contributions to the per-atom energy, per-atom virial, and
global virial (if not obtained from forces) from that sub-style are
zero. This enables switching smoothly between two different pair styles
or two different parameter sets during a run in a similar fashion as
could be done with :doc:`fix adapt <fix_adapt>` or :doc:`fix alchemy
<fix_alchemy>`. All pair styles that will be used are listed as
"sub-styles" following the *hybrid* or *hybrid/overlay* keyword, in any
order. In case of the *hybrid/scaled* pair style, each sub-style is
prefixed with a scale factor. The scale factor is either a floating
point number or an *equal* or *atom* style (or equivalent) variable.
Each sub-style's name is followed by its usual arguments, as illustrated
in the examples above. See the doc pages of the individual pair styles
for a listing and explanation of the appropriate arguments for them.
Note that an individual pair style can be used multiple times as a
sub-style. For efficiency reasons this should only be done if your

View File

@ -0,0 +1,151 @@
.. index:: pair_style lambda/input/apip
.. index:: pair_style lambda/input/csp/apip
pair_style lambda/input/apip command
====================================
Syntax
""""""
.. code-block:: LAMMPS
pair_style lambda/input/apip cutoff
* lambda/input/apip = style name of this pair style
* cutoff = global cutoff (distance units)
pair_style lambda/input/csp/apip command
========================================
Syntax
""""""
.. code-block:: LAMMPS
pair_style lambda/input/csp/apip lattice keyword args
* lambda/input/csp/apip = style name of this pair style
* lattice = *fcc* or *bcc* or integer
.. parsed-literal::
*fcc* = use 12 nearest neighbors to calculate the CSP like in a perfect fcc lattice
*bcc* = use 8 nearest neighbors to calculate the CSP like in a perfect bcc lattice
integer = use N nearest neighbors to calculate the CSP
* zero or more keyword/args pairs may be appended
* keyword = *cutoff* or *N_buffer*
.. parsed-literal::
*cutoff* args = cutoff
cutoff = distance in which neighboring atoms are considered (> 0)
*N_buffer* args = N_buffer
N_buffer = number of additional neighbors, which are included in the j-j+N/2 calculation
Examples
""""""""
.. code-block:: LAMMPS
pair_style lambda/input/csp/apip fcc
pair_style lambda/input/csp/apip fcc cutoff 5.0
pair_style lambda/input/csp/apip bcc cutoff 5.0 N_buffer 2
pair_style lambda/input/csp/apip 14
Description
"""""""""""
This pair_styles calculates :math:`\lambda_i^\text{input}(t)`, which
is required for :doc:`fix lambda/apip <fix_lambda_apip>`.
The pair_style lambda_input sets :math:`\lambda_i^\text{input}(t) = 0`.
The pair_style lambda_input/csp calculates
:math:`\lambda_i^\text{input}(t) = \text{CSP}_i(t)`.
The centro-symmetry parameter (CSP) :ref:`(Kelchner) <Kelchner_2>` is described
in :doc:`compute centro/atom <compute_centro_atom>`.
The lattice argument is described in
:doc:`compute centro/atom <compute_centro_atom>` and determines
the number of neighboring atoms that are used to compute the CSP.
The *N_buffer* argument allows to include more neighboring atoms in
the calculation of the contributions from the pair j,j+N/2 to the CSP as
discussed in :ref:`(Immel) <Immel2025_6>`.
The computation of :math:`\lambda_i^\text{input}(t)` is done by this
pair_style instead of by :doc:`fix lambda/apip <fix_lambda_apip>`, as this computation
takes time and this pair_style can be included in the load-balancing via
:doc:`fix atom_weight/apip <fix_atom_weight_apip>`.
A code example for the calculation of the switching parameter for an adaptive-
precision potential is given in the following:
The adaptive-precision potential is created
by combining :doc:`pair_style eam/fs/apip <pair_eam_apip>`
and :doc:`pair_style pace/precise/apip <pair_pace_apip>`.
The input, from which the switching parameter is calculated, is provided
by this pair_style.
The switching parameter is calculated by :doc:`fix lambda/apip <fix_lambda_apip>`,
whereas the spatial
transition zone of the switching parameter is calculated by
:doc:`pair_style lambda/zone/apip <pair_lambda_zone_apip>`.
.. code-block:: LAMMPS
pair_style hybrid/overlay eam/fs/apip pace/precise/apip lambda/input/csp/apip fcc cutoff 5.0 lambda/zone/apip 12.0
pair_coeff * * eam/fs/apip Cu.eam.fs Cu
pair_coeff * * pace/precise/apip Cu_precise.yace Cu
pair_coeff * * lambda/input/csp/apip
pair_coeff * * lambda/zone/apip
fix 2 all lambda/apip 3.0 3.5 time_averaged_zone 4.0 12.0 110 110 min_delta_lambda 0.01
----------
Mixing, shift, table, tail correction, restart, rRESPA info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
The cutoff distance for this pair style can be mixed. The default mix
value is *geometric*\ . See the "pair_modify" command for details.
This pair style does not support the :doc:`pair_modify <pair_modify>`
shift, table, and tail options.
This pair style writes no information to :doc:`binary restart files <restart>`, so pair_style and pair_coeff commands need
to be specified in an input script that reads a restart file.
This pair style does not support the use of the *inner*, *middle*,
and *outer* keywords of the :doc:`run_style respa <run_style>` command.
----------
Restrictions
""""""""""""
This fix is part of the APIP package. It is only enabled if
LAMMPS was built with that package. See the :doc:`Build package
<Build_package>` page for more info.
Related commands
""""""""""""""""
:doc:`compute centro/atom <compute_centro_atom>`,
:doc:`fix lambda/apip <fix_lambda_apip>`,
:doc:`fix lambda_thermostat/apip <fix_lambda_thermostat_apip>`,
:doc:`pair_style lambda/zone/apip <pair_lambda_zone_apip>`,
:doc:`pair_style eam/apip <pair_eam_apip>`,
:doc:`pair_style pace/apip <pair_pace_apip>`,
:doc:`fix atom_weight/apip <fix_atom_weight_apip>`
Default
"""""""
N_buffer=0, cutoff=5.0
----------
.. _Kelchner_2:
**(Kelchner)** Kelchner, Plimpton, Hamilton, Phys Rev B, 58, 11085 (1998).
.. _Immel2025_6:
**(Immel)** Immel, Drautz and Sutmann, J Chem Phys, 162, 114119 (2025)

View File

@ -0,0 +1,106 @@
.. index:: pair_style lambda/zone/apip
pair_style lambda/zone/apip command
===================================
Syntax
""""""
.. code-block:: LAMMPS
pair_style lambda/zone/apip cutoff
* lambda/zone/apip = style name of this pair style
* cutoff = global cutoff (distance units)
Examples
""""""""
.. code-block:: LAMMPS
pair_style lambda/zone/apip 12.0
Description
"""""""""""
This pair_style calculates :math:`\lambda_{\text{min},i}`, which
is required for :doc:`fix lambda/apip <fix_lambda_apip>`.
The meaning of :math:`\lambda_{\text{min},i}` is documented in
:doc:`fix lambda/apip <fix_lambda_apip>`, as this pair_style is for use with
:doc:`fix lambda/apip <fix_lambda_apip>` only.
This pair_style requires only the global cutoff as argument.
The remaining quantities, that are required to calculate
:math:`\lambda_{\text{min},i}` are extracted from
:doc:`fix lambda/apip <fix_lambda_apip>` and, thus,
do not need to be passed to this pair_style as arguments.
.. warning::
The cutoff given as argument to this pair style is only relevant for the
neighbor list creation. The radii, which define :math:`r_{\lambda,\text{hi}}` and :math:`r_{\lambda,\text{lo}}` are defined by :doc:`fix lambda/apip <fix_lambda_apip>`.
The computation of :math:`\lambda_{\text{min},i}` is done by this
pair_style instead of by :doc:`fix lambda/apip <fix_lambda_apip>`, as this computation
takes time and this pair_style can be included in the load-balancing via
:doc:`fix atom_weight/apip <fix_atom_weight_apip>`.
A code example for the calculation of the switching parameter for an
adaptive-precision interatomic potential (APIP) is given in the following:
The adaptive-precision potential is created
by combining :doc:`pair_style eam/fs/apip <pair_eam_apip>`
and :doc:`pair_style pace/precise/apip <pair_pace_apip>`.
The input, from which the switching parameter is calculated, is provided
by :doc:`pair lambda/input/csp/apip <pair_lambda_input_apip>`.
The switching parameter is calculated by :doc:`fix lambda/apip <fix_lambda_apip>`,
whereas the spatial transition zone of the switching parameter is calculated
by this pair style.
.. code-block:: LAMMPS
pair_style hybrid/overlay eam/fs/apip pace/precise/apip lambda/input/csp/apip fcc cutoff 5.0 lambda/zone/apip 12.0
pair_coeff * * eam/fs/apip Cu.eam.fs Cu
pair_coeff * * pace/precise/apip Cu_precise.yace Cu
pair_coeff * * lambda/input/csp/apip
pair_coeff * * lambda/zone/apip
fix 2 all lambda/apip 3.0 3.5 time_averaged_zone 4.0 12.0 110 110 min_delta_lambda 0.01
----------
Mixing, shift, table, tail correction, restart, rRESPA info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
The cutoff distance for this pair style can be mixed. The default mix
value is *geometric*\ . See the "pair_modify" command for details.
This pair style does not support the :doc:`pair_modify <pair_modify>`
shift, table, and tail options.
This pair style writes no information to :doc:`binary restart files <restart>`, so pair_style and pair_coeff commands need
to be specified in an input script that reads a restart file.
This pair style does not support the use of the *inner*, *middle*,
and *outer* keywords of the :doc:`run_style respa <run_style>` command.
----------
Restrictions
""""""""""""
This fix is part of the APIP package. It is only enabled if
LAMMPS was built with that package. See the :doc:`Build package
<Build_package>` page for more info.
Related commands
""""""""""""""""
:doc:`fix lambda/apip <fix_lambda_apip>`,
:doc:`fix atom_weight/apip <fix_atom_weight_apip>`
:doc:`pair_style lambda/input/apip <pair_lambda_input_apip>`,
:doc:`pair_style eam/apip <pair_eam_apip>`,
:doc:`pair_style pace/apip <pair_pace_apip>`,
:doc:`fix lambda_thermostat/apip <fix_lambda_thermostat_apip>`,
Default
"""""""
none

View File

@ -8,7 +8,17 @@
pair_style lepton command
=========================
Accelerator Variants: *lepton/omp*, *lepton/coul/comp*, *lepton/sphere/comp*
Accelerator Variant: *lepton/omp*
pair_style lepton/coul command
==============================
Accelerator Variant: *lepton/coul/comp*
pair_style lepton/sphere command
================================
Accelerator Variant: *lepton/sphere/comp*
Syntax
""""""

147
doc/src/pair_pace_apip.rst Normal file
View File

@ -0,0 +1,147 @@
.. index:: pair_style pace/apip
.. index:: pair_style pace/fast/apip
.. index:: pair_style pace/precise/apip
pair_style pace/apip command
============================
pair_style pace/fast/apip command
=================================
pair_style pace/precise/apip command
====================================
Constant precision variant: *pace*
Syntax
""""""
.. code-block:: LAMMPS
pair_style pace/apip ... keyword values ...
pair_style pace/fast/apip ... keyword values ...
pair_style pace/precise/apip ... keyword values ...
* one or more keyword/value pairs may be appended
.. parsed-literal::
keyword = keywords of :doc:`pair pace <pair_pace>`
Examples
""""""""
.. code-block:: LAMMPS
pair_style hybrid/overlay pace/fast/apip pace/precise/apip lambda/input/csp/apip fcc cutoff 5.0 lambda/zone/apip 12.0
pair_coeff * * pace/fast/apip Cu_fast.yace Cu
pair_coeff * * pace/precise/apip Cu_precise.yace Cu
pair_coeff * * lambda/input/csp/apip
pair_coeff * * lambda/zone/apip
pair_style hybrid/overlay eam/fs/apip pace/precise/apip lambda/input/csp/apip fcc cutoff 5.0 lambda/zone/apip 12.0
pair_coeff * * eam/fs/apip Cu.eam.fs Cu
pair_coeff * * pace/precise/apip Cu_precise.yace Cu
pair_coeff * * lambda/input/csp/apip
pair_coeff * * lambda/zone/apip
Description
"""""""""""
Pair style :doc:`pace <pair_pace>` computes interactions using the Atomic
Cluster Expansion (ACE), which is a general expansion of the atomic energy in
multi-body basis functions :ref:`(Drautz19) <Drautz2019_2>`. The *pace*
pair style provides an efficient implementation that is described in
this paper :ref:`(Lysogorskiy21) <Lysogorskiy20211_2>`.
The potential energy :math:`E_i` of an atom :math:`i` of an adaptive-precision
interatomic potential (APIP) according to
:ref:`(Immel25) <Immel2025_7>` is given by
.. math::
E_i^\text{APIP} = \lambda_i E_i^\text{(fast)} + (1-\lambda_i) E_i^\text{(precise)}\,,
whereas the switching parameter :math:`\lambda_i` is computed
dynamically during a simulation by :doc:`fix lambda/apip <fix_lambda_apip>`
or set prior to a simulation via :doc:`set <set>`.
The pair style *pace/precise/apip* computes the potential energy
:math:`(1-\lambda_i) E_i^\text{(pace)}` and the
corresponding force and should be combined
with a fast potential that computes the potential energy
:math:`\lambda_i E_i^\text{(fast)}` and the corresponding force
via :doc:`pair_style hybrid/overlay <pair_hybrid>`.
The pair style *pace/fast/apip* computes the potential energy
:math:`\lambda_i E_i^\text{(pace)}` and the
corresponding force and should be combined
with a precise potential that computes the potential energy
:math:`(1-\lambda_i) E_i^\text{(precise)}` and the corresponding force
via :doc:`pair_style hybrid/overlay <pair_hybrid>`.
The pair_styles *pace/fast/apip* and *pace/precise/apip*
commands may be followed by the optional keywords of
:doc:`pair_style pace <pair_pace>`, which are described
:doc:`here <pair_pace>`.
Mixing, shift, table, tail correction, restart, rRESPA info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
For atom type pairs I,J and I != J, where types I and J correspond to
two different element types, mixing is performed by LAMMPS with
user-specifiable parameters as described above. You never need to
specify a pair_coeff command with I != J arguments for this style.
This pair styles does not support the :doc:`pair_modify <pair_modify>`
shift, table, and tail options.
This pair styles does not write its information to :doc:`binary restart
files <restart>`, since it is stored in potential files. Thus, you need
to re-specify the pair_style and pair_coeff commands in an input script
that reads a restart file.
This pair styles can only be used via the *pair* keyword of the
:doc:`run_style respa <run_style>` command. It does not support the
*inner*, *middle*, *outer* keywords.
----------
Restrictions
""""""""""""
This pair styles are part of the APIP package. It is only enabled if
LAMMPS was built with that package. See the :doc:`Build package
<Build_package>` page for more info.
Related commands
""""""""""""""""
:doc:`pair_style pace <pair_pace>`,
:doc:`pair_style hybrid/overlay <pair_hybrid>`,
:doc:`fix lambda/apip <fix_lambda_apip>`,
:doc:`fix lambda_thermostat/apip <fix_lambda_thermostat_apip>`,
:doc:`pair_style lambda/zone/apip <pair_lambda_zone_apip>`,
:doc:`pair_style lambda/input/apip <pair_lambda_input_apip>`,
:doc:`pair_style eam/apip <pair_eam_apip>`,
:doc:`fix atom_weight/apip <fix_atom_weight_apip>`
Default
"""""""
See :doc:`pair_style pace <pair_pace>`.
----------
.. _Drautz2019_2:
**(Drautz19)** Drautz, Phys Rev B, 99, 014104 (2019).
.. _Lysogorskiy20211_2:
**(Lysogorskiy21)** Lysogorskiy, van der Oord, Bochkarev, Menon, Rinaldi, Hammerschmidt, Mrovec, Thompson, Csanyi, Ortner, Drautz, npj Comp Mat, 7, 97 (2021).
.. _Immel2025_7:
**(Immel25)** Immel, Drautz and Sutmann, J Chem Phys, 162, 114119 (2025)

View File

@ -188,7 +188,9 @@ accelerated styles exist.
* :doc:`eam/cd <pair_eam>` - concentration-dependent EAM
* :doc:`eam/cd/old <pair_eam>` - older two-site model for concentration-dependent EAM
* :doc:`eam/fs <pair_eam>` - Finnis-Sinclair EAM
* :doc:`eam/fs/apip <pair_eam_apip>` - :doc:`adaptive precision <Howto_apip>` version of FS EAM, used as fast potential
* :doc:`eam/he <pair_eam>` - Finnis-Sinclair EAM modified for Helium in metals
* :doc:`eam/apip <pair_eam_apip>` - :doc:`adaptive-precision <Howto_apip>` version of EAM, used as fast potential
* :doc:`edip <pair_edip>` - three-body EDIP potential
* :doc:`edip/multi <pair_edip>` - multi-element EDIP potential
* :doc:`edpd <pair_mesodpd>` - eDPD particle interactions
@ -217,6 +219,9 @@ accelerated styles exist.
* :doc:`kim <pair_kim>` - interface to potentials provided by KIM project
* :doc:`kolmogorov/crespi/full <pair_kolmogorov_crespi_full>` - Kolmogorov-Crespi (KC) potential with no simplifications
* :doc:`kolmogorov/crespi/z <pair_kolmogorov_crespi_z>` - Kolmogorov-Crespi (KC) potential with normals along z-axis
* :doc:`lambda/input/apip <pair_lambda_input_apip>` - constant as input for the precision calculation of an :doc:`adaptive-precision interatomic potential (APIP) <Howto_apip>`
* :doc:`lambda/input/csp/apip <pair_lambda_input_apip>` - CSP as input for the precision calculation of an :doc:`adaptive-precision interatomic potential (APIP) <Howto_apip>`
* :doc:`lambda/zone/apip <pair_lambda_zone_apip>` - transition zone of an :doc:`adaptive-precision interatomic potential <Howto_apip>`
* :doc:`lcbop <pair_lcbop>` - long-range bond-order potential (LCBOP)
* :doc:`lebedeva/z <pair_lebedeva_z>` - Lebedeva interlayer potential for graphene with normals along z-axis
* :doc:`lennard/mdf <pair_mdf>` - LJ potential in A/B form with a taper function
@ -330,6 +335,9 @@ accelerated styles exist.
* :doc:`oxrna2/xstk <pair_oxrna2>` -
* :doc:`pace <pair_pace>` - Atomic Cluster Expansion (ACE) machine-learning potential
* :doc:`pace/extrapolation <pair_pace>` - Atomic Cluster Expansion (ACE) machine-learning potential with extrapolation grades
* :doc:`pace/apip <pair_pace_apip>` - :doc:`adaptive-precision <Howto_apip>` version of ACE, used as precise potential
* :doc:`pace/fast/apip <pair_pace_apip>` - :doc:`adaptive-precision <Howto_apip>` version of ACE, used as fast potential
* :doc:`pace/precise/apip <pair_pace_apip>` - :doc:`adaptive-precision <Howto_apip>` version of ACE, used as precise potential
* :doc:`pedone <pair_pedone>` - Pedone (PMMCS) potential (non-Coulomb part)
* :doc:`pod <pair_pod>` - Proper orthogonal decomposition (POD) machine-learning potential
* :doc:`peri/eps <pair_peri>` - Peridynamic EPS potential

View File

@ -16,12 +16,13 @@ Syntax
.. parsed-literal::
field = *x* or *y* or *z* or *vx* or *vy* or *vz* or *q* or *ix* or *iy* or *iz* or *fx* or *fy* or *fz*
field = *x* or *y* or *z* or *vx* or *vy* or *vz* or *q* or *ix* or *iy* or *iz* or *fx* or *fy* or *fz* or *apip_lambda*
*x*,\ *y*,\ *z* = atom coordinates
*vx*,\ *vy*,\ *vz* = velocity components
*q* = charge
*ix*,\ *iy*,\ *iz* = image flags in each dimension
*fx*,\ *fy*,\ *fz* = force components
*apip_lambda* = switching parameter of an :doc:`adaptive-precision interatomic potential <Howto_apip>`
* zero or more keyword/value pairs may be appended
* keyword = *nfile* or *box* or *timestep* or *replace* or *purge* or *trim* or *add* or *label* or *scaled* or *wrapped* or *format*

View File

@ -23,8 +23,8 @@ Syntax
* one or more keyword/value pairs may be appended
* keyword = *angle* or *angmom* or *bond* or *cc* or *charge* or
*density* or *density/disc* or *diameter* or *dihedral* or *dipole*
* keyword = *angle* or *angmom* or *apip/lambda* or *bond* or *cc* or *charge*
or *density* or *density/disc* or *diameter* or *dihedral* or *dipole*
or *dipole/random* or *dpd/theta* or *edpd/cv* or *edpd/temp* or
*epsilon* or *image* or *improper* or *length* or *mass* or *mol* or
*omega* or *quat* or *quat/random* or *radius/electron* or *shape* or
@ -41,6 +41,10 @@ Syntax
*angmom* values = Lx Ly Lz
Lx,Ly,Lz = components of angular momentum vector (distance-mass-velocity units)
any of Lx,Ly,Lz can be an atom-style variable (see below)
*apip/lambda* value = fast or precise or float
fast = switching parameter of fast potential (1)
precise = switching parameter of fast potential (0)
float = constant float or atom-style variable (between 0 and 1)
*bond* value = numeric bond type or bond type label, for all bonds between selected atoms
*cc* values = index cc
index = index of a chemical species (1 to Nspecies)
@ -632,6 +636,13 @@ atoms.
Keywords *x*, *y*, *z* set the coordinates of all selected atoms.
Keyword *apip/lambda* sets the switching parameter of an
adaptive-precision interatomic potential (:doc:`APIP <Howto_apip>`).
The precise potential is used for an atom when its switching parameter
:math:`\lambda` is 0. The fast potential is used for an atom when its
switching parameter :math:`\lambda` is 1. Both potentials are partially
used for :math:`\lambda\in(0,1)`.
Keywords *i_name*, *d_name*, *i2_name*, *d2_name* refer to custom
per-atom integer and floating-point vectors or arrays that have been
added via the :doc:`fix property/atom <fix_property_atom>` command.

View File

@ -20,7 +20,7 @@ Syntax
*yaml* args = none
*custom* args = list of keywords
possible keywords = step, elapsed, elaplong, dt, time,
cpu, tpcpu, spcpu, cpuremain, part, timeremain,
cpu, tpcpu, spcpu, cpuuse, cpuremain, part, timeremain,
atoms, temp, press, pe, ke, etotal,
evdwl, ecoul, epair, ebond, eangle, edihed, eimp,
emol, elong, etail,
@ -48,6 +48,7 @@ Syntax
cpu = elapsed CPU time in seconds since start of this run
tpcpu = time per CPU second
spcpu = timesteps per CPU second
cpuuse = CPU utilization in percent (can be > 100% with multi-threading)
cpuremain = estimated CPU time remaining in run
part = which partition (0 to Npartition-1) this is
timeremain = remaining time in seconds on timer timeout.
@ -292,6 +293,16 @@ steps. The *tpcpu* keyword does not attempt to track any changes in
timestep size, e.g. due to using the :doc:`fix dt/reset <fix_dt_reset>`
command.
The *cpuuse* keyword represents the CPU utilization in percent on
MPI rank 0 for the current run. This should typically be around 100%
for single-threaded runs. Smaller values indicate that LAMMPS may be
stalling on file I/O, or some other process is competing with LAMMPS
for the same CPU. When using multi-threading through the KOKKOS,
INTEL, or OPENMP packages the value can be larger than 100% and
ideally should be close to *nthreads* x 100%. How close depends
on how much of the execution time is spent in multi-threaded parts
of the code versus the non-accelerated parts.
The *cpuremain* keyword estimates the CPU time remaining in the
current run, based on the time elapsed thus far. It will only be a
good estimate if the CPU time/timestep for the rest of the run is

View File

@ -68,7 +68,8 @@ Syntax
bound(group,dir,region), gyration(group,region), ke(group,reigon),
angmom(group,dim,region), torque(group,dim,region),
inertia(group,dimdim,region), omega(group,dim,region)
special functions = sum(x), min(x), max(x), ave(x), trap(x), slope(x), sort(x), rsort(x), \ gmask(x), rmask(x), grmask(x,y), next(x), is_file(name), is_os(name),
special functions = sum(x), min(x), max(x), ave(x), trap(x), slope(x), sort(x), rsort(x),
gmask(x), rmask(x), grmask(x,y), next(x), is_file(name), is_os(name),
extract_setting(name), label2type(kind,label),
is_typelabel(kind,label), is_timeout()
feature functions = is_available(category,feature), is_active(category,feature),
@ -758,10 +759,23 @@ is the nearest integer to its argument.
.. versionadded:: 7Feb2024
The ternary(x,y,z) function is the equivalent of the ternary operator
(? and :) in C or C++. It takes 3 arguments. The first argument is a
.. versionchanged:: TBD
Evaluate only selected argument
The ternary(x,y,z) function is the equivalent of the ternary operator (?
and :) in C or C++. It takes 3 arguments. The first argument is a
conditional. The result of the function is y if x evaluates to true
(non-zero). The result is z if x evaluates to false (zero).
(non-zero). The result is z if x evaluates to false (zero). Same as in
C or C++ only the selected argument y or z is evaluated, so this
function can be used to protect against crashes from evaluating invalid
arguments, e.g. in the following example where "qval" is a variable with
an expression that may become (slightly) negative due to floating-point
math limitations.:
.. code-block:: LAMMPS
variable sqrtofqval equal "ternary(v_qval >= 0, sqrt(v_qval), 0.0)"
The ramp(x,y) function uses the current timestep to generate a value
linearly interpolated between the specified x,y values over the course

View File

@ -2,6 +2,7 @@ Sphinx >= 5.3.0, <8.3.0
sphinxcontrib-spelling
sphinxcontrib-jquery
sphinx-design
sphinx-toolbox
git+https://github.com/akohlmey/sphinx-fortran@parallel-read
sphinx-tabs>=3.4.1
breathe
@ -10,3 +11,4 @@ six
pyyaml
linkchecker
ipython
numpy

View File

@ -50,6 +50,7 @@ extensions = [
'sphinx.ext.mathjax',
'sphinx.ext.imgmath',
'sphinx.ext.autodoc',
'sphinx_toolbox.collapse',
'lammps_theme',
'sphinxcontrib.jquery',
'sphinxfortran.fortran_domain',
@ -370,17 +371,6 @@ latex_elements = {
{%
\hypersetup{pageanchor=false}% avoid duplicate destination warnings
\begin{titlepage}%
\sffamily\Large
The LAMMPS developers are thinking about dropping the PDF format version of
the LAMMPS manual. This would allow us to focus on the HTML version, use
HTML-only features, and skip checking if the documentation source files,
especially the embedded mathematical expressions, are compatible with \LaTeX{} output.
Please let us know how you feel about this change by sending an email to
\texttt{developers@lammps.org} stating whether you agree or disagree with
removing support for the PDF format version of the manual and optionally
provide arguments for your preference.
\clearpage
\sffamily\bfseries
\begingroup % for PDF information dictionary
\def\endgraf{ }\def\and{\& }%
@ -395,8 +385,8 @@ latex_elements = {
\vfill
{\LARGE \lammpsversion \par}
\vfill
{\LARGE The LAMMPS Developers \par}
{\Large developers@lammps.org $^*$ \par}
{\LARGE The LAMMPS Developers$^*$ \par}
{\Large developers@lammps.org \par}
\vfill\vfill\vfill
{\normalsize ${}^*$ see
\sphinxhref{https://www.lammps.org/authors.html}{https://www.lammps.org/authors.html}

View File

@ -33,6 +33,7 @@ activationfunctions
acylindricity
addforce
Addington
addstep
addtorque
adf
Adhikari
@ -135,6 +136,8 @@ anton
Antonelli
anysize
api
apip
APIP
apolar
Apoorva
Appl
@ -530,6 +533,7 @@ civ
CKD
ckk
Clang
clearstep
clearstore
Cleary
Clebsch
@ -654,6 +658,7 @@ CSiC
csld
cslib
CSlib
csp
cstdio
cstdlib
cstring
@ -1384,6 +1389,7 @@ gmres
gname
gneb
GNEB
Godehard
Goerigk
Goga
Goldfarb
@ -1489,6 +1495,7 @@ Hebbeker
Hebenstreit
Hecht
Heenen
Heermann
heFFTe
Hendrik
Henin
@ -1526,6 +1533,7 @@ histogrammed
histogramming
hma
hmaktulga
hmc
hoc
Hochbruck
Hofling
@ -1619,6 +1627,7 @@ Imageint
Imagemagick
imagename
imd
Immel
Impey
impl
improperlist
@ -2087,6 +2096,7 @@ Loewen
logfile
logfreq
logicals
logmesg
loID
Lomdahl
Lond
@ -2259,6 +2269,7 @@ mediumturquoise
mediumvioletred
Mees
Mehl
Mehlig
Mei
Meissner
Melchor
@ -3196,6 +3207,7 @@ queryargs
Queteschiner
quickmin
quintic
qval
qw
qx
qy
@ -3847,6 +3859,7 @@ Thiaville
Thibaudeau
Thijsse
Thirumalai
thr
Threadripper
threebody
thrid

View File

@ -141,6 +141,7 @@ liblammpsplugin_t *liblammpsplugin_load(const char *lib)
ADDSYM(scatter_subset);
ADDSYM(create_atoms);
ADDSYM(create_molecule);
ADDSYM(find_pair_neighlist);
ADDSYM(find_fix_neighlist);

View File

@ -207,6 +207,7 @@ struct _liblammpsplugin {
int (*create_atoms)(void *, int, const int64_t *, const int *, const double *, const double *,
const int64_t *, int);
#endif
int (*create_molecule)(void *, const char *, const char *);
int (*find_pair_neighlist)(void *, const char *, int, int, int);
int (*find_fix_neighlist)(void *, const char *, int);

View File

@ -0,0 +1,34 @@
NOTE: This is a simple potential for the example. Production usage without testing is not recommended. Provided by Yury Lysogorskiy (ICAMS, RUB, Germany).
elements: [Cu]
E0: [0]
deltaSplineBins: 0.001
embeddings:
0: {ndensity: 2, FS_parameters: [1, 1, 1, 0.5], npoti: FinnisSinclairShiftedScaled, rho_core_cutoff: 100000, drho_core_cutoff: 250}
bonds:
[0, 0]: {nradmax: 2, lmax: 2, nradbasemax: 15, radbasename: ChebPow, radparameters: [2], radcoefficients: [[[0.99440439385969503, -0.085048653403583918, -0.23248632054717755, -0.22732701549371864, 0.026354948476648921, 0.21853318667456997, 0.05745747498169812, -0.19717925712228765, -0.11474256770370879, 0.12738668745839368, 0.053777769435472259, -0.11094768379576209, 0.072620812391582482, -0.058715761632824881, 0.030359986427775303], [0.96259704765772924, -0.10129488003029259, -0.10345557604916655, -0.020393848425879282, 0.076671442494272601, 0.10318554794001746, 0.0555341702761026, 0.00083194423680727696, -0.018184436957498409, -0.021866885826555403, -0.020179969116479776, 0.021880011516616484, 0.053112509345249602, -0.083707026393616657, 0.020611714544479017], [1.001530579978529, -0.030080648426358471, -0.13318582671063051, -0.24371635685809706, -0.22760541127468878, -0.041144767051648642, 0.18080289144697201, 0.24543156067198274, 0.11014559411659355, -0.069512010077804498, -0.1172049950938457, -0.027509386703874331, 0.056985864219913585, 0.037536629112081353, -0.044222474537374087]], [[0.25716120576634355, 1.7485527550537943, 0.91889737965719875, 0.50902244208852199, -0.15895537149482841, -0.48109723575282892, -0.17843605933015286, 0.39450608859531944, 0.59293909285591195, 0.18268386912819001, -0.34706543720907351, -0.3210061634328315, 0.21678650779400246, 0.39500148786376449, -0.31820913370341625], [0.0079213202761679105, 1.0212489038630681, 0.011530454475879359, -0.049445152058907642, -0.15268524878755677, -0.2319378608755131, -0.20612580998548105, -0.067027395211212315, 0.08241096034972574, 0.11288597065081186, 0.01355948960244063, -0.074722461388416803, -0.022724332047049267, 0.088871664887057056, 0.031667459613258314], [-0.0069872405356639312, 0.9939655327342134, 0.035044055182587928, 0.099765277857093104, 0.11687607289674087, 0.030241996404391416, -0.12367698594314165, -0.22480900218170197, -0.17727517861619441, -0.015144941558075584, 0.11375495728241894, 0.090680932947050971, -0.041190210394591399, -0.10085768296286811, 0.055789864104988186]]], prehc: 0, lambdahc: 0, rcut: 3.8999999999999999, dcut: 0.01, rcut_in: 0, dcut_in: 0, inner_cutoff_type: density}
functions:
0:
- {mu0: 0, rank: 1, ndensity: 2, num_ms_combs: 1, mus: [0], ns: [1], ls: [0], ms_combs: [0], ctildes: [0.26072556900842869, -0.03073189825062177]}
- {mu0: 0, rank: 1, ndensity: 2, num_ms_combs: 1, mus: [0], ns: [2], ls: [0], ms_combs: [0], ctildes: [0.64429175483702295, -0.1630534353246999]}
- {mu0: 0, rank: 1, ndensity: 2, num_ms_combs: 1, mus: [0], ns: [3], ls: [0], ms_combs: [0], ctildes: [0.51856313423563594, -0.4259316875879266]}
- {mu0: 0, rank: 1, ndensity: 2, num_ms_combs: 1, mus: [0], ns: [4], ls: [0], ms_combs: [0], ctildes: [-0.078113533662468398, -0.70352070540668643]}
- {mu0: 0, rank: 1, ndensity: 2, num_ms_combs: 1, mus: [0], ns: [5], ls: [0], ms_combs: [0], ctildes: [-0.45633111544093646, -0.7859368117550467]}
- {mu0: 0, rank: 1, ndensity: 2, num_ms_combs: 1, mus: [0], ns: [6], ls: [0], ms_combs: [0], ctildes: [-0.19608401600520556, -0.59151667874441172]}
- {mu0: 0, rank: 1, ndensity: 2, num_ms_combs: 1, mus: [0], ns: [7], ls: [0], ms_combs: [0], ctildes: [0.30580228338697285, -0.29248216980800118]}
- {mu0: 0, rank: 1, ndensity: 2, num_ms_combs: 1, mus: [0], ns: [8], ls: [0], ms_combs: [0], ctildes: [0.40167461008815436, -0.15647925731818518]}
- {mu0: 0, rank: 1, ndensity: 2, num_ms_combs: 1, mus: [0], ns: [9], ls: [0], ms_combs: [0], ctildes: [0.053519057558225343, -0.25900906688118652]}
- {mu0: 0, rank: 1, ndensity: 2, num_ms_combs: 1, mus: [0], ns: [10], ls: [0], ms_combs: [0], ctildes: [-0.20446546815457517, -0.40019216010057629]}
- {mu0: 0, rank: 1, ndensity: 2, num_ms_combs: 1, mus: [0], ns: [11], ls: [0], ms_combs: [0], ctildes: [-0.070020661105060208, -0.33441939205411986]}
- {mu0: 0, rank: 1, ndensity: 2, num_ms_combs: 1, mus: [0], ns: [12], ls: [0], ms_combs: [0], ctildes: [0.15734064575001952, -0.055233119903794807]}
- {mu0: 0, rank: 1, ndensity: 2, num_ms_combs: 1, mus: [0], ns: [13], ls: [0], ms_combs: [0], ctildes: [0.10021406559793103, 0.18641744536767416]}
- {mu0: 0, rank: 1, ndensity: 2, num_ms_combs: 1, mus: [0], ns: [14], ls: [0], ms_combs: [0], ctildes: [-0.14066730990975543, 0.14711096149210373]}
- {mu0: 0, rank: 1, ndensity: 2, num_ms_combs: 1, mus: [0], ns: [15], ls: [0], ms_combs: [0], ctildes: [0.031100766650549283, -0.13720067925313634]}
- {mu0: 0, rank: 2, ndensity: 2, num_ms_combs: 1, mus: [0, 0], ns: [1, 1], ls: [0, 0], ms_combs: [0, 0], ctildes: [1.0984212008195524, 0.49756623164565855]}
- {mu0: 0, rank: 2, ndensity: 2, num_ms_combs: 2, mus: [0, 0], ns: [1, 1], ls: [1, 1], ms_combs: [0, 0, 1, -1], ctildes: [0.2591109116320176, 0.21348077494861176, -0.5182218232640351, -0.4269615498972234]}
- {mu0: 0, rank: 2, ndensity: 2, num_ms_combs: 3, mus: [0, 0], ns: [1, 1], ls: [2, 2], ms_combs: [0, 0, 1, -1, 2, -2], ctildes: [0.015905361441871636, 0.023783303055646809, -0.031810722883743273, -0.047566606111293624, 0.031810722883743286, 0.047566606111293638]}
- {mu0: 0, rank: 2, ndensity: 2, num_ms_combs: 1, mus: [0, 0], ns: [2, 1], ls: [0, 0], ms_combs: [0, 0], ctildes: [0.63958612617724186, 1.6623415103929948]}
- {mu0: 0, rank: 2, ndensity: 2, num_ms_combs: 2, mus: [0, 0], ns: [2, 1], ls: [1, 1], ms_combs: [0, 0, 1, -1], ctildes: [0.14199022782503917, 0.0069900458821809735, -0.28398045565007829, -0.013980091764361944]}
- {mu0: 0, rank: 2, ndensity: 2, num_ms_combs: 3, mus: [0, 0], ns: [2, 1], ls: [2, 2], ms_combs: [0, 0, 1, -1, 2, -2], ctildes: [0.028732470496968317, -0.037173039560267927, -0.05746494099393664, 0.074346079120535868, 0.057464940993936654, -0.074346079120535882]}
- {mu0: 0, rank: 2, ndensity: 2, num_ms_combs: 1, mus: [0, 0], ns: [2, 2], ls: [0, 0], ms_combs: [0, 0], ctildes: [0.056442895466964321, 0.0054387873274233034]}
- {mu0: 0, rank: 2, ndensity: 2, num_ms_combs: 2, mus: [0, 0], ns: [2, 2], ls: [1, 1], ms_combs: [0, 0, 1, -1], ctildes: [0.025326283180140272, -0.19511149476156769, -0.050652566360280531, 0.39022298952313533]}
- {mu0: 0, rank: 2, ndensity: 2, num_ms_combs: 3, mus: [0, 0], ns: [2, 2], ls: [2, 2], ms_combs: [0, 0, 1, -1, 2, -2], ctildes: [0.012754475331985416, -0.058934602152610385, -0.025508950663970836, 0.11786920430522078, 0.025508950663970843, -0.11786920430522081]}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,11 @@
The APIP package is based on the paper:
David Immel, Ralf Drautz, Godehard Sutmann; Adaptive-precision potentials for large-scale atomistic simulations. J. Chem. Phys. 14 March 2025; 162 (11): 114119. https://doi.org/10.1063/5.0245877
The pair_style pace/apip requires the installation of lib/pace of the ML-PACE package.
The installation of lib/pace is described in src/ML-PACE/README .
Examples of how to use an adaptive-precision potential are provided in examples/PACKAGES/apip .
in.vacancy contains a small example that can be used to visualize the transition region and get a visual impression of the selected parameters.
in.surface.balance in a more realistic example, in which a surface is simulated and the benefit of fix apip_atom_weight and fix balance for adaptive-precision interatomic potentials is demonstrated.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,80 @@
LAMMPS data file via write_data, version 2 Apr 2025, timestep = 0, units = metal
31 atoms
1 atom types
0 7.23 xlo xhi
0 7.23 ylo yhi
0 7.23 zlo zhi
Masses
1 63.546
Atoms # apip
1 1 3.255649577011424 2.1469408310018205 1.596546647595962 0 0 0
2 1 5.312133977687514 0.2962629940541289 1.7986410677440656 0 0 0
3 1 0.3570136530341179 1.9589665444185802 1.8227120430766197 0 0 0
4 1 1.538770434276094 1.8506888783106994 3.5984777679252336 0 0 0
5 1 5.414379916412933 1.9802551521608864 3.5428423680157133 0 0 0
6 1 3.3396207511420926 0.34696444514694835 3.3284295847601864 0 0 0
7 1 0.04692381499727436 3.470558659189874 0.20838500420697273 0 0 0
8 1 3.5507628116865004 3.419576015011443 0.09808429731968064 0 0 0
9 1 3.4359438466091845 3.3442299605630015 3.344947182361245 0 0 0
10 1 3.262172986855113 1.8898900738753799 5.6074716235080135 0 0 0
11 1 5.616180533384058 0.24272458584617107 5.728614316596936 0 0 0
12 1 0.3320737270957668 2.133631298552561 5.648234772896504 0 0 0
13 1 7.193910458696732 0.040079315967661934 7.007063468494249 -1 0 -1
14 1 1.9428459507398523 2.008894084694746 6.974381464595852 0 0 -1
15 1 5.17195441765988 1.6398976096007498 7.144624559798802 0 0 -1
16 1 3.828212487222493 0.27427274843853566 7.084083006467942 0 0 -1
17 1 0.3576896118392189 3.5593061817506357 3.8539966829342287 0 0 0
18 1 5.549388330643712 3.3771731288636446 5.733276811271104 0 0 0
19 1 1.474782367736 3.311754538948766 5.203036111913638 0 0 0
20 1 3.353885621487343 5.483140337766679 1.559656844576661 0 0 0
21 1 1.4600851633288363 5.3693400677513985 0.16901869775192754 0 0 0
22 1 1.865319826459661 3.680823307523189 1.909829542233995 0 0 0
23 1 6.919428313555163 5.704165921616911 1.5626446154218376 -1 0 0
24 1 5.286111954406888 3.9741177165543746 1.894962129368895 0 0 0
25 1 5.661441532175263 5.770831269632481 0.2726487131030991 0 0 0
26 1 5.749451385769738 5.694440631979816 3.315201684766776 0 0 0
27 1 2.1656354707333425 5.630356615286487 3.525133119978771 0 0 0
28 1 3.4802512558478638 5.136357035041954 5.613687950103865 0 0 0
29 1 6.9476459434582605 5.669871702976 5.748711917622347 -1 0 0
30 1 0.3145319513743893 6.992506749359428 3.748936483911442 0 -1 0
31 1 2.0688280140984934 7.144932953378388 5.071647430554334 0 -1 0
Velocities
1 0 0 0
2 0 0 0
3 0 0 0
4 0 0 0
5 0 0 0
6 0 0 0
7 0 0 0
8 0 0 0
9 0 0 0
10 0 0 0
11 0 0 0
12 0 0 0
13 0 0 0
14 0 0 0
15 0 0 0
16 0 0 0
17 0 0 0
18 0 0 0
19 0 0 0
20 0 0 0
21 0 0 0
22 0 0 0
23 0 0 0
24 0 0 0
25 0 0 0
26 0 0 0
27 0 0 0
28 0 0 0
29 0 0 0
30 0 0 0
31 0 0 0

View File

@ -0,0 +1,75 @@
##################################################
# parameters of the adaptive-precision potential #
##################################################
# We couple an EAM potential with an ACE potential.
variable eamfs_file string "Cu_300K_Immel_2023.eam.fs"
variable ace_file1 string "Cu-1.yace"
variable ace_file2 string "../../../potentials/Cu-PBE-core-rep.ace"
# The csp is used as detection mechanism for atoms of interest.
variable csp_lattice string "fcc"
variable csp_cutoff equal 6.0
# The range [r_sw_lo, r_sw_hi] determines where the switching parameter changes from 0 to 1.
variable r_sw_lo equal 4.0
variable r_sw_hi equal 12.0
# Thresholds between which the switching parameter changes from 1 to 0 based on the csp.
variable lambda_input_thr_lo equal 7.5
variable lambda_input_thr_hi equal 8.0
# Number of averaged steps.
variable lambda_input_histlen equal 110
variable lambda_histlen equal 110
# Minimum required change of the switching parameter
variable min_delta_lambda equal 1/${lambda_histlen}
# number of atoms rescaled by the lambda_thermostat
variable N_rescaling equal 600
# basic stuff
units metal
dimension 3
boundary p p s
atom_style apip # own atom style required for APIP
timestep 0.001
read_data data.surface.balance
fix nve all nve
comm_style tiled
# Only the upper surface should be treated precisely.
# Thus, we create group, for whose atoms the csp is ignored, as the corresponding
# argument of fix lambda is used.
region bottom block INF INF INF INF INF 0 units box
group group_ignore_csp region bottom
# use adaptive-precision eam-ace potential with lambda_thermostat
pair_style hybrid/overlay eam/fs/apip pace/apip lambda/input/csp/apip ${csp_lattice} cutoff ${csp_cutoff} lambda/zone/apip ${r_sw_hi}
pair_coeff * * eam/fs/apip ${eamfs_file} Cu
pair_coeff * * pace/apip ${ace_file2} Cu
pair_coeff * * lambda/input/csp/apip
pair_coeff * * lambda/zone/apip
fix lambda all lambda/apip ${lambda_input_thr_lo} ${lambda_input_thr_hi} time_averaged_zone ${r_sw_lo} ${r_sw_hi} ${lambda_input_histlen} ${lambda_histlen} min_delta_lambda ${min_delta_lambda} group_ignore_lambda_input group_ignore_csp
fix lambda_thermostat all lambda_thermostat/apip N_rescaling ${N_rescaling}
fix weight_atom all atom_weight/apip 10 eam ace lambda/input lambda/zone all
# store weight in variable
fix property_atom all property/atom d_usedweight
variable myweight atom f_weight_atom
#compute lambda all property/atom apip_lambda
#compute lambda_input all property/atom apip_lambda_input
#dump 1 all custom 10 dump/surface_ap_balance.dump.* id type x y z c_lambda c_lambda_input f_weight_atom proc d_usedweight
## apply load balancing
## no load-balancing
#fix balance all balance 10 0.9 report weight time 1.0 weight store usedweight
## load balancing with times per atom per processor
#fix balance all balance 10 0.9 rcb weight time 1.0 weight store usedweight
## load balancing with an approximated load per atom by fix apip_atom_weight
fix balance all balance 10 0.9 rcb weight var myweight weight store usedweight
thermo_style custom step f_balance spcpu f_weight_atom[*]
thermo 10
run 100

View File

@ -0,0 +1,54 @@
##################################################
# parameters of the adaptive-precision potential #
##################################################
# We couple an EAM potential with an ACE potential.
variable eamfs_file string "Cu_300K_Immel_2023.eam.fs"
variable ace_file1 string "Cu-1.yace"
variable ace_file2 string "../../../potentials/Cu-PBE-core-rep.ace"
## basic stuff
units metal
atom_style apip # own atom style required for APIP
timestep 0.001
# copper at room temperature with a vacancy
read_data data.vacancy
# set lambda
group vacancy id 145 147 148 149 150 994 997 995 1024 1026 1028 1922
group transition id 77 79 81 84 88 151 152 153 154 155 158 1089 188 189 192 1033 1039 1964 1022 1021 999 998 996 948 950 952 992 993 139 1025 1027 1029 1034 1035 1038 1088 1920 1921 1923 1924 1925 1930
group bulk subtract all vacancy transition
set group vacancy apip/lambda precise
set group transition apip/lambda 0.5
set group bulk apip/lambda fast
fix nve all nve
# Use adaptive-precision eam-ace potential with constant lambda.
# Calculate atomic weight that could be used for load balancing.
pair_style hybrid/overlay eam/fs/apip pace/apip
pair_coeff * * eam/fs/apip ${eamfs_file} Cu
pair_coeff * * pace/apip ${ace_file2} Cu
fix weight_atom all atom_weight/apip 50 eam ace 0.5 0 all
# get statistics about lambda
compute lambda all property/atom apip_lambda
compute lambda_input all property/atom apip_lambda_input
variable flag_simple atom c_lambda==1
variable flag_switch atom c_lambda<1&&c_lambda>0
variable flag_complex atom c_lambda==0
compute lambda_types all reduce sum v_flag_simple v_flag_switch v_flag_complex
thermo_style custom step etotal c_lambda_types[*]
thermo 1
run 100
# dump atoms
#write_dump all custom dump.vacancy.* id type x y z fx fy fz c_lambda c_lambda_input f_weight_atom

View File

@ -0,0 +1,101 @@
##################################################
# parameters of the adaptive-precision potential #
##################################################
# We couple an EAM potential with an ACE potential.
variable eamfs_file string "Cu_300K_Immel_2023.eam.fs"
variable ace_file1 string "Cu-1.yace"
variable ace_file2 string "../../../potentials/Cu-PBE-core-rep.ace"
# The csp is used as detection mechanism for atoms of interest.
variable csp_lattice string "fcc"
variable csp_cutoff equal 6.0
# The range [r_sw_lo, r_sw_hi] determines where the switching parameter changes from 0 to 1.
variable r_sw_lo equal 2.0
variable r_sw_hi equal 3.0
# Thresholds between which the switching parameter changes from 1 to 0 based on the csp.
variable lambda_input_thr_lo equal 2.5
variable lambda_input_thr_hi equal 3.0
# Number of averaged steps.
variable lambda_input_histlen equal 110
variable lambda_histlen equal 110
# Minimum required change of the switching parameter
variable min_delta_lambda equal 1/${lambda_histlen}
# number of atoms rescaled by the lambda_thermostat
variable N_rescaling equal 600
## basic stuff
units metal
atom_style apip # own atom style required for APIP
timestep 0.001
# copper at room temperature with a vacancy
read_data data.vacancy
fix nve all nve
## Use adaptive-precision ace-ace potential without lambda_thermostat.
## Calculate atomic weight that could be used for load balancing.
#pair_style hybrid/overlay pace/fast/apip pace/precise/apip lambda/input/csp/apip ${csp_lattice} cutoff ${csp_cutoff} lambda/zone/apip ${r_sw_hi}
#pair_coeff * * pace/fast/apip ${ace_file1} Cu
#pair_coeff * * pace/precise/apip ${ace_file2} Cu
#pair_coeff * * lambda/input/csp/apip
#pair_coeff * * lambda/zone/apip
#fix lambda all lambda/apip ${lambda_input_thr_lo} ${lambda_input_thr_hi} time_averaged_zone ${r_sw_lo} ${r_sw_hi} ${lambda_input_histlen} ${lambda_histlen} min_delta_lambda ${min_delta_lambda}
#fix weight_atom all atom_weight/apip 100 ace ace lambda/input lambda/zone all
# Use adaptive-precision eam-ace potential without lambda_thermostat.
# Calculate atomic weight that could be used for load balancing.
pair_style hybrid/overlay eam/fs/apip pace/apip lambda/input/csp/apip ${csp_lattice} cutoff ${csp_cutoff} lambda/zone/apip ${r_sw_hi}
pair_coeff * * eam/fs/apip ${eamfs_file} Cu
pair_coeff * * pace/apip ${ace_file2} Cu
pair_coeff * * lambda/input/csp/apip
pair_coeff * * lambda/zone/apip
fix lambda all lambda/apip ${lambda_input_thr_lo} ${lambda_input_thr_hi} time_averaged_zone ${r_sw_lo} ${r_sw_hi} ${lambda_input_histlen} ${lambda_histlen} min_delta_lambda ${min_delta_lambda}
fix weight_atom all atom_weight/apip 100 eam ace lambda/input lambda/zone all
## One can comment out fix lambda_thermostat to see the energy change caused by the neglection of the
## gradient of the switching function. This neglection can be compensated by the local thermostat and the
## energy can be conserved within numerical precision.
fix lambda_thermostat all lambda_thermostat/apip N_rescaling ${N_rescaling} store_atomic_forces 100
# get statistics about lambda
compute lambda all property/atom apip_lambda
compute lambda_input all property/atom apip_lambda_input
variable flag_simple atom c_lambda==1
variable flag_switch atom c_lambda<1&&c_lambda>0
variable flag_complex atom c_lambda==0
compute lambda_types all reduce sum v_flag_simple v_flag_switch v_flag_complex
thermo_style custom step etotal c_lambda_types[*]
thermo 1
run 100
# dump atoms
#write_dump all custom dump/vacancy.dump.* id type x y z fx fy fz c_lambda c_lambda_input f_weight_atom f_lambda_thermostat[*]
## A smooth restart of the simulation is possible as the history of lambda and lambda_input is stored.
#write_restart vacancy_ap.restart
#clear
#read_restart vacancy_ap.restart
#pair_style hybrid/overlay eam/fs/apip pace/apip lambda/input/csp/apip fcc cutoff 6.0 lambda/zone/apip 12.0
#pair_coeff * * eam/fs/apip "Cu_300K_Immel_2023.eam.fs" Cu
#pair_coeff * * pace/apip "../../../potentials/Cu-PBE-core-rep.ace" Cu
#pair_coeff * * lambda/input/csp/apip
#pair_coeff * * lambda/zone/apip
#fix lambda all lambda/apip 2.5 3.0 time_averaged_zone 4.0 12.0 110 110 min_delta_lambda $(1/110)
#fix lambda_thermostat all lambda_thermostat/apip N_rescaling ${N_rescaling} store_atomic_forces 100
#fix nve all nve
#thermo_style custom step etotal
#thermo 1
#run 10
#shell rm vacancy_ap.restart

View File

@ -0,0 +1,51 @@
##################################################
# parameters of the adaptive-precision potential #
##################################################
# We couple an EAM potential with an ACE potential.
variable eamfs_file string "Cu_300K_Immel_2023.eam.fs"
variable ace_file string "Cu-1.yace"
## basic stuff
units metal
atom_style apip # own atom style required for APIP
timestep 0.001
## copper with a vacancy
#lattice fcc 3.615
#region box block 0 2 0 2 0 2 units lattice
#create_box 1 box
#create_atoms 1 box
#mass 1 63.546
#displace_atoms all random 0.1 0.1 0.1 42 units lattice
#delete_atoms random count 1 yes all NULL 42
#write_data data.validate
read_data data.validate
fix 1 all nve
thermo_style custom step pe fnorm fmax
# use ACE potential
pair_style pace
pair_coeff * * ${ace_file} Cu
run 0
# use adaptive-precision EAM-ACE potential with constant lambda
pair_style hybrid/overlay eam/fs/apip pace/apip
pair_coeff * * eam/fs/apip ${eamfs_file} Cu
pair_coeff * * pace/apip ${ace_file} Cu
# use ACE of adaptive-precision potential
set group all apip/lambda precise
run 0
# use EAM of adaptive-precision potential
set group all apip/lambda fast
run 0
# Use EAM potential
pair_style eam/fs
pair_coeff * * ${eamfs_file} Cu
run 0

View File

@ -0,0 +1,108 @@
LAMMPS (2 Apr 2025 - Development - )
Reading data file ...
orthogonal box = (0 0 -1.1656272) to (36.15 36.15 362.81506)
1 by 1 by 4 MPI processor grid
reading atoms ...
40200 atoms
reading velocities ...
40200 velocities
read_data CPU = 0.135 seconds
200 atoms in group group_ignore_csp
ACE version: 2023.11.25
Recursive evaluator is used by ACE
Loading ../../../potentials/Cu-PBE-core-rep.ace
Total number of basis functions
Cu: 16 (r=1) 726 (r>1)
Mapping LAMMPS atom type #1(Cu) -> ACE species type #0
atomic load lambda:
fast potential: extract eam/apip:time_per_atom
precise potential: extract pace/apip:time_per_atom
lambda_input: extract lambda/input/apip:time_per_atom
lambda: extract lambda/zone/apip:time_per_atom
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- fix lambda command: doi.org/10.1063/5.0245877
The log file lists these citations in BibTeX format.
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 14
ghost atom cutoff = 14
binsize = 7, bins = 6 6 52
5 neighbor lists, perpetual/occasional/extra = 5 0 0
(1) pair eam/fs/apip, perpetual
attributes: full, newton on
pair build: full/bin/atomonly
stencil: full/bin/3d
bin: standard
(2) pair pace/apip, perpetual, trim from (4)
attributes: full, newton on, cut 9.4
pair build: trim
stencil: none
bin: none
(3) pair lambda/input/csp/apip, perpetual, trim from (2)
attributes: full, newton on, cut 8
pair build: trim
stencil: none
bin: none
(4) pair lambda/zone/apip, perpetual
attributes: full, newton on, ghost, cut 14
pair build: full/bin/ghost
stencil: full/ghost/bin/3d
bin: standard
(5) fix lambda_thermostat/apip, perpetual, copy from (1)
attributes: full, newton on
pair build: copy
stencil: none
bin: none
Setting up Verlet run ...
Unit style : metal
Current step : 0
Time step : 0.001
Per MPI rank memory allocation (min/avg/max) = 297.9 | 306.9 | 315.9 Mbytes
Step f_balance S/CPU f_weight_atom[1] f_weight_atom[2] f_weight_atom[3] f_weight_atom[4]
0 1.0139303 0 0 0 0 0
10 2.6176099 0.23789922 3.4933844e-05 0.0018769787 2.0912678e-05 3.414976e-05
20 2.1242027 0.2259695 4.2800036e-05 0.0022124427 2.4613899e-05 4.0819606e-05
30 2.1197082 0.22281117 4.3885117e-05 0.0022416604 2.4808124e-05 4.081464e-05
40 2.1149313 0.2245266 4.3328755e-05 0.0022134411 2.4645468e-05 4.0892224e-05
50 2.1066618 0.22308398 4.3884622e-05 0.0022085846 2.464161e-05 4.0909229e-05
60 2.1000306 0.22186291 4.4839801e-05 0.0022299631 2.4816945e-05 4.1173119e-05
70 2.1062658 0.22406791 4.3740709e-05 0.0022049729 2.4693417e-05 4.0963037e-05
80 2.1072933 0.22241288 4.4160464e-05 0.0022245226 2.4854938e-05 4.2491144e-05
90 2.0981181 0.22412189 4.3990788e-05 0.0022086162 2.4710948e-05 4.09478e-05
100 2.1033304 0.2237968 4.3982714e-05 0.0022112815 2.4658851e-05 4.1060551e-05
Loop time of 444.499 on 4 procs for 100 steps with 40200 atoms
Performance: 0.019 ns/day, 1234.721 hours/ns, 0.225 timesteps/s, 9.044 katom-step/s
99.0% CPU use with 4 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 67.764 | 146.15 | 378.03 |1107.5 | 32.88
Neigh | 55.764 | 59.579 | 62.94 | 43.1 | 13.40
Comm | 0.6589 | 153.57 | 302.72 |1199.1 | 34.55
Output | 0.0032423 | 6.1068 | 24.01 | 418.3 | 1.37
Modify | 8.0892 | 16.162 | 38.588 | 322.6 | 3.64
Other | | 62.93 | | | 14.16
Nlocal: 10050 ave 10180 max 10000 min
Histogram: 2 1 0 0 0 0 0 0 0 1
Nghost: 27854.5 ave 30385 max 25525 min
Histogram: 2 0 0 0 0 0 0 0 0 2
Neighs: 0 ave 0 max 0 min
Histogram: 4 0 0 0 0 0 0 0 0 0
FullNghs: 9.49222e+06 ave 9.76687e+06 max 9.29466e+06 min
Histogram: 2 0 0 0 0 0 1 0 0 1
Total # of neighbors = 37968882
Ave neighs/atom = 944.49955
Neighbor list builds = 10
Dangerous builds = 0
Total wall time: 0:07:25

View File

@ -0,0 +1,108 @@
LAMMPS (2 Apr 2025 - Development - )
Reading data file ...
orthogonal box = (0 0 -1.1656272) to (36.15 36.15 362.81506)
1 by 1 by 4 MPI processor grid
reading atoms ...
40200 atoms
reading velocities ...
40200 velocities
read_data CPU = 0.161 seconds
200 atoms in group group_ignore_csp
ACE version: 2023.11.25
Recursive evaluator is used by ACE
Loading ../../../potentials/Cu-PBE-core-rep.ace
Total number of basis functions
Cu: 16 (r=1) 726 (r>1)
Mapping LAMMPS atom type #1(Cu) -> ACE species type #0
atomic load lambda:
fast potential: extract eam/apip:time_per_atom
precise potential: extract pace/apip:time_per_atom
lambda_input: extract lambda/input/apip:time_per_atom
lambda: extract lambda/zone/apip:time_per_atom
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- fix lambda command: doi.org/10.1063/5.0245877
The log file lists these citations in BibTeX format.
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 14
ghost atom cutoff = 14
binsize = 7, bins = 6 6 52
5 neighbor lists, perpetual/occasional/extra = 5 0 0
(1) pair eam/fs/apip, perpetual
attributes: full, newton on
pair build: full/bin/atomonly
stencil: full/bin/3d
bin: standard
(2) pair pace/apip, perpetual, trim from (4)
attributes: full, newton on, cut 9.4
pair build: trim
stencil: none
bin: none
(3) pair lambda/input/csp/apip, perpetual, trim from (2)
attributes: full, newton on, cut 8
pair build: trim
stencil: none
bin: none
(4) pair lambda/zone/apip, perpetual
attributes: full, newton on, ghost, cut 14
pair build: full/bin/ghost
stencil: full/ghost/bin/3d
bin: standard
(5) fix lambda_thermostat/apip, perpetual, copy from (1)
attributes: full, newton on
pair build: copy
stencil: none
bin: none
Setting up Verlet run ...
Unit style : metal
Current step : 0
Time step : 0.001
Per MPI rank memory allocation (min/avg/max) = 298.1 | 306.3 | 314.5 Mbytes
Step f_balance S/CPU f_weight_atom[1] f_weight_atom[2] f_weight_atom[3] f_weight_atom[4]
0 1 0 0 0 0 0
10 1.0018226 0.21929744 4.2082278e-05 0.0022147425 2.472285e-05 4.0694771e-05
20 1.002451 0.38193369 4.9389333e-05 0.0023722824 2.4776133e-05 2.168819e-05
30 1.0004234 0.39492198 4.8977088e-05 0.002249832 2.4610967e-05 2.1465621e-05
40 1.0012276 0.39068387 4.9886201e-05 0.0022529811 2.4663509e-05 2.1540032e-05
50 1.0013752 0.39170654 5.0527084e-05 0.002253323 2.4721079e-05 2.153442e-05
60 1.0007053 0.3758265 5.0935226e-05 0.0022581901 2.4772692e-05 2.1596641e-05
70 1.0003982 0.38524379 5.1685387e-05 0.002263544 2.495032e-05 2.1714264e-05
80 1.0022848 0.38409158 5.1897166e-05 0.0022557711 2.4755235e-05 2.1595246e-05
90 1.0012911 0.38122934 5.2440631e-05 0.0022574019 2.4795351e-05 2.1615786e-05
100 1.0005279 0.37983246 5.2871808e-05 0.0022583136 2.484618e-05 2.1569403e-05
Loop time of 279.389 on 4 procs for 100 steps with 40200 atoms
Performance: 0.031 ns/day, 776.081 hours/ns, 0.358 timesteps/s, 14.389 katom-step/s
98.6% CPU use with 4 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 148.19 | 155.34 | 175.77 | 94.7 | 55.60
Neigh | 87.542 | 87.924 | 88.444 | 3.6 | 31.47
Comm | 4.9019 | 18.932 | 33.429 | 322.2 | 6.78
Output | 0.01326 | 0.04615 | 0.075485 | 10.3 | 0.02
Modify | 9.5358 | 10.391 | 12.424 | 36.6 | 3.72
Other | | 6.756 | | | 2.42
Nlocal: 10050 ave 10283 max 9838 min
Histogram: 1 0 1 0 0 0 1 0 0 1
Nghost: 52763 ave 52975 max 52530 min
Histogram: 1 0 0 1 0 0 0 1 0 1
Neighs: 0 ave 0 max 0 min
Histogram: 4 0 0 0 0 0 0 0 0 0
FullNghs: 9.49222e+06 ave 9.71459e+06 max 9.29015e+06 min
Histogram: 1 0 1 0 0 0 1 0 0 1
Total # of neighbors = 37968882
Ave neighs/atom = 944.49955
Neighbor list builds = 10
Dangerous builds = 0
Total wall time: 0:04:48

View File

@ -0,0 +1,108 @@
LAMMPS (2 Apr 2025 - Development - )
Reading data file ...
orthogonal box = (0 0 -1.1656272) to (36.15 36.15 362.81506)
1 by 1 by 4 MPI processor grid
reading atoms ...
40200 atoms
reading velocities ...
40200 velocities
read_data CPU = 0.134 seconds
200 atoms in group group_ignore_csp
ACE version: 2023.11.25
Recursive evaluator is used by ACE
Loading ../../../potentials/Cu-PBE-core-rep.ace
Total number of basis functions
Cu: 16 (r=1) 726 (r>1)
Mapping LAMMPS atom type #1(Cu) -> ACE species type #0
atomic load lambda:
fast potential: extract eam/apip:time_per_atom
precise potential: extract pace/apip:time_per_atom
lambda_input: extract lambda/input/apip:time_per_atom
lambda: extract lambda/zone/apip:time_per_atom
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- fix lambda command: doi.org/10.1063/5.0245877
The log file lists these citations in BibTeX format.
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 14
ghost atom cutoff = 14
binsize = 7, bins = 6 6 52
5 neighbor lists, perpetual/occasional/extra = 5 0 0
(1) pair eam/fs/apip, perpetual
attributes: full, newton on
pair build: full/bin/atomonly
stencil: full/bin/3d
bin: standard
(2) pair pace/apip, perpetual, trim from (4)
attributes: full, newton on, cut 9.4
pair build: trim
stencil: none
bin: none
(3) pair lambda/input/csp/apip, perpetual, trim from (2)
attributes: full, newton on, cut 8
pair build: trim
stencil: none
bin: none
(4) pair lambda/zone/apip, perpetual
attributes: full, newton on, ghost, cut 14
pair build: full/bin/ghost
stencil: full/ghost/bin/3d
bin: standard
(5) fix lambda_thermostat/apip, perpetual, copy from (1)
attributes: full, newton on
pair build: copy
stencil: none
bin: none
Setting up Verlet run ...
Unit style : metal
Current step : 0
Time step : 0.001
Per MPI rank memory allocation (min/avg/max) = 298.1 | 306.3 | 314.5 Mbytes
Step f_balance S/CPU f_weight_atom[1] f_weight_atom[2] f_weight_atom[3] f_weight_atom[4]
0 1 0 0 0 0 0
10 1.000245 0.23168829 2.8965377e-05 0.0016346261 1.8194173e-05 2.8621987e-05
20 1.0001156 0.23012235 4.2703387e-05 0.0022174634 2.4522315e-05 4.0198928e-05
30 1.0003479 0.24170843 4.2900821e-05 0.0022358654 2.4496934e-05 4.0262644e-05
40 1.0000952 0.34743014 4.4687983e-05 0.0022336389 2.4626704e-05 2.8362965e-05
50 1.000399 0.23273413 4.4278568e-05 0.0022319529 2.4645291e-05 4.0394287e-05
60 1.000137 0.23531789 4.5212176e-05 0.0022671271 2.4758267e-05 4.0607561e-05
70 1.0001901 0.34359487 4.5647742e-05 0.0022386998 2.473236e-05 2.8357019e-05
80 1.0003173 0.23324348 4.5372627e-05 0.0022272881 2.4704053e-05 4.0760615e-05
90 1.0009828 0.2360927 4.5867574e-05 0.0022616272 2.4715122e-05 4.0548519e-05
100 1.0005337 0.34332801 4.6171376e-05 0.0022394199 2.4724815e-05 2.8552653e-05
Loop time of 385.695 on 4 procs for 100 steps with 40200 atoms
Performance: 0.022 ns/day, 1071.376 hours/ns, 0.259 timesteps/s, 10.423 katom-step/s
98.9% CPU use with 4 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 80.949 | 145.84 | 287.45 | 683.6 | 37.81
Neigh | 21.125 | 61.121 | 98.27 | 452.7 | 15.85
Comm | 23.839 | 129.54 | 261.28 | 833.4 | 33.59
Output | 0.10319 | 2.5231 | 8.6153 | 222.9 | 0.65
Modify | 5.3228 | 13.101 | 29.2 | 267.2 | 3.40
Other | | 33.57 | | | 8.70
Nlocal: 10050 ave 16825 max 3772 min
Histogram: 2 0 0 0 0 0 0 0 0 2
Nghost: 27618.8 ave 41748 max 12149 min
Histogram: 1 1 0 0 0 0 0 0 0 2
Neighs: 0 ave 0 max 0 min
Histogram: 4 0 0 0 0 0 0 0 0 0
FullNghs: 9.49222e+06 ave 1.58445e+07 max 3.337e+06 min
Histogram: 2 0 0 0 0 0 0 0 0 2
Total # of neighbors = 37968882
Ave neighs/atom = 944.49955
Neighbor list builds = 10
Dangerous builds = 0
Total wall time: 0:06:27

View File

@ -0,0 +1,182 @@
LAMMPS (2 Apr 2025 - Development - )
Reading data file ...
orthogonal box = (0 0 0) to (28.92 28.92 28.92)
1 by 1 by 1 MPI processor grid
reading atoms ...
2047 atoms
reading velocities ...
2047 velocities
read_data CPU = 0.009 seconds
12 atoms in group vacancy
42 atoms in group transition
1993 atoms in group bulk
Setting atom values ...
12 settings made for apip/lambda
Setting atom values ...
42 settings made for apip/lambda
Setting atom values ...
1993 settings made for apip/lambda
ACE version: 2023.11.25
Recursive evaluator is used by ACE
Loading ../../../potentials/Cu-PBE-core-rep.ace
Total number of basis functions
Cu: 16 (r=1) 726 (r>1)
Mapping LAMMPS atom type #1(Cu) -> ACE species type #0
atomic load lambda:
fast potential: extract eam/apip:time_per_atom
precise potential: extract pace/apip:time_per_atom
lambda_input: const 0.5
lambda: const 0
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 9.4
ghost atom cutoff = 9.4
binsize = 4.7, bins = 7 7 7
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair eam/fs/apip, perpetual
attributes: full, newton on
pair build: full/bin/atomonly
stencil: full/bin/3d
bin: standard
(2) pair pace/apip, perpetual
attributes: full, newton on, cut 9.4
pair build: full/bin/atomonly
stencil: full/bin/3d
bin: standard
Setting up Verlet run ...
Unit style : metal
Current step : 0
Time step : 0.001
Per MPI rank memory allocation (min/avg/max) = 11.08 | 11.08 | 11.08 Mbytes
Step TotEng c_lambda_types[1] c_lambda_types[2] c_lambda_types[3]
0 -7408.6798 1993 42 12
1 -7408.6798 1993 42 12
2 -7408.6798 1993 42 12
3 -7408.6798 1993 42 12
4 -7408.6798 1993 42 12
5 -7408.6798 1993 42 12
6 -7408.6799 1993 42 12
7 -7408.6799 1993 42 12
8 -7408.6799 1993 42 12
9 -7408.6799 1993 42 12
10 -7408.6799 1993 42 12
11 -7408.68 1993 42 12
12 -7408.68 1993 42 12
13 -7408.68 1993 42 12
14 -7408.68 1993 42 12
15 -7408.68 1993 42 12
16 -7408.68 1993 42 12
17 -7408.6801 1993 42 12
18 -7408.6801 1993 42 12
19 -7408.6801 1993 42 12
20 -7408.6801 1993 42 12
21 -7408.6801 1993 42 12
22 -7408.6801 1993 42 12
23 -7408.6801 1993 42 12
24 -7408.6801 1993 42 12
25 -7408.6801 1993 42 12
26 -7408.6801 1993 42 12
27 -7408.6801 1993 42 12
28 -7408.6801 1993 42 12
29 -7408.6801 1993 42 12
30 -7408.6801 1993 42 12
31 -7408.6801 1993 42 12
32 -7408.68 1993 42 12
33 -7408.68 1993 42 12
34 -7408.68 1993 42 12
35 -7408.68 1993 42 12
36 -7408.68 1993 42 12
37 -7408.68 1993 42 12
38 -7408.68 1993 42 12
39 -7408.68 1993 42 12
40 -7408.6801 1993 42 12
41 -7408.6801 1993 42 12
42 -7408.6801 1993 42 12
43 -7408.6801 1993 42 12
44 -7408.6801 1993 42 12
45 -7408.6801 1993 42 12
46 -7408.6801 1993 42 12
47 -7408.6801 1993 42 12
48 -7408.6801 1993 42 12
49 -7408.6802 1993 42 12
50 -7408.6802 1993 42 12
51 -7408.6802 1993 42 12
52 -7408.6802 1993 42 12
53 -7408.6802 1993 42 12
54 -7408.6802 1993 42 12
55 -7408.6802 1993 42 12
56 -7408.6802 1993 42 12
57 -7408.6802 1993 42 12
58 -7408.6802 1993 42 12
59 -7408.6801 1993 42 12
60 -7408.6801 1993 42 12
61 -7408.6801 1993 42 12
62 -7408.6801 1993 42 12
63 -7408.6801 1993 42 12
64 -7408.68 1993 42 12
65 -7408.68 1993 42 12
66 -7408.68 1993 42 12
67 -7408.68 1993 42 12
68 -7408.68 1993 42 12
69 -7408.6799 1993 42 12
70 -7408.6799 1993 42 12
71 -7408.6799 1993 42 12
72 -7408.6799 1993 42 12
73 -7408.6799 1993 42 12
74 -7408.6799 1993 42 12
75 -7408.6798 1993 42 12
76 -7408.6798 1993 42 12
77 -7408.6798 1993 42 12
78 -7408.6798 1993 42 12
79 -7408.6798 1993 42 12
80 -7408.6798 1993 42 12
81 -7408.6799 1993 42 12
82 -7408.6799 1993 42 12
83 -7408.6799 1993 42 12
84 -7408.6799 1993 42 12
85 -7408.6799 1993 42 12
86 -7408.6799 1993 42 12
87 -7408.6799 1993 42 12
88 -7408.68 1993 42 12
89 -7408.68 1993 42 12
90 -7408.68 1993 42 12
91 -7408.68 1993 42 12
92 -7408.68 1993 42 12
93 -7408.68 1993 42 12
94 -7408.68 1993 42 12
95 -7408.68 1993 42 12
96 -7408.68 1993 42 12
97 -7408.6801 1993 42 12
98 -7408.6801 1993 42 12
99 -7408.6801 1993 42 12
100 -7408.6801 1993 42 12
Loop time of 1.65093 on 1 procs for 100 steps with 2047 atoms
Performance: 5.233 ns/day, 4.586 hours/ns, 60.572 timesteps/s, 123.991 katom-step/s
99.8% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 1.6272 | 1.6272 | 1.6272 | 0.0 | 98.56
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.012716 | 0.012716 | 0.012716 | 0.0 | 0.77
Output | 0.0078409 | 0.0078409 | 0.0078409 | 0.0 | 0.47
Modify | 0.0013654 | 0.0013654 | 0.0013654 | 0.0 | 0.08
Other | | 0.001839 | | | 0.11
Nlocal: 2047 ave 2047 max 2047 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 7790 ave 7790 max 7790 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
FullNghs: 648022 ave 648022 max 648022 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 648022
Ave neighs/atom = 316.57157
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:01

View File

@ -0,0 +1,193 @@
LAMMPS (2 Apr 2025 - Development - )
Reading data file ...
orthogonal box = (0 0 0) to (28.92 28.92 28.92)
1 by 1 by 1 MPI processor grid
reading atoms ...
2047 atoms
reading velocities ...
2047 velocities
read_data CPU = 0.009 seconds
ACE version: 2023.11.25
Recursive evaluator is used by ACE
Loading ../../../potentials/Cu-PBE-core-rep.ace
Total number of basis functions
Cu: 16 (r=1) 726 (r>1)
Mapping LAMMPS atom type #1(Cu) -> ACE species type #0
atomic load lambda:
fast potential: extract eam/apip:time_per_atom
precise potential: extract pace/apip:time_per_atom
lambda_input: extract lambda/input/apip:time_per_atom
lambda: extract lambda/zone/apip:time_per_atom
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- fix lambda command: doi.org/10.1063/5.0245877
The log file lists these citations in BibTeX format.
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
WARNING: The energy is not conserved when lambda changes as fix lambda_thermostat/apip is not used. (../fix_lambda_apip.cpp:248)
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 9.4
ghost atom cutoff = 9.4
binsize = 4.7, bins = 7 7 7
4 neighbor lists, perpetual/occasional/extra = 4 0 0
(1) pair eam/fs/apip, perpetual, trim from (3)
attributes: full, newton on, cut 7.50679
pair build: trim
stencil: none
bin: none
(2) pair pace/apip, perpetual
attributes: full, newton on, cut 9.4
pair build: full/bin/atomonly
stencil: full/bin/3d
bin: standard
(3) pair lambda/input/csp/apip, perpetual, trim from (2)
attributes: full, newton on, cut 8
pair build: trim
stencil: none
bin: none
(4) pair lambda/zone/apip, perpetual
attributes: full, newton on, ghost
pair build: full/bin/ghost
stencil: full/ghost/bin/3d
bin: standard
Setting up Verlet run ...
Unit style : metal
Current step : 0
Time step : 0.001
Per MPI rank memory allocation (min/avg/max) = 49.37 | 49.37 | 49.37 Mbytes
Step TotEng c_lambda_types[1] c_lambda_types[2] c_lambda_types[3]
0 -7408.7649 1993 42 12
1 -7408.7649 1993 42 12
2 -7408.7649 1993 42 12
3 -7408.765 1993 42 12
4 -7408.7657 1993 42 12
5 -7408.7785 1993 42 12
6 -7408.7769 1993 42 12
7 -7408.778 1993 42 12
8 -7408.7862 1993 42 12
9 -7408.79 1993 42 12
10 -7408.7912 1993 42 12
11 -7408.8005 1993 42 12
12 -7408.8012 1993 42 12
13 -7408.8016 1993 42 12
14 -7408.8123 1993 42 12
15 -7408.8154 1993 42 12
16 -7408.8144 1993 42 12
17 -7408.8271 1993 42 12
18 -7408.8277 1993 42 12
19 -7408.8289 1993 42 12
20 -7408.8352 1993 42 12
21 -7408.8376 1993 42 12
22 -7408.841 1993 42 12
23 -7408.8507 1993 42 12
24 -7408.8496 1993 42 12
25 -7408.8544 1993 42 12
26 -7408.8645 1993 42 12
27 -7408.8665 1993 42 12
28 -7408.8713 1993 42 12
29 -7408.8763 1993 42 12
30 -7408.8812 1993 42 12
31 -7408.8842 1993 42 12
32 -7408.8905 1993 42 12
33 -7408.8947 1993 42 12
34 -7408.9048 1993 42 12
35 -7408.9099 1993 42 12
36 -7408.9101 1993 42 12
37 -7408.9159 1993 42 12
38 -7408.9256 1993 42 12
39 -7408.9241 1993 42 12
40 -7408.9342 1993 42 12
41 -7408.9423 1993 42 12
42 -7408.9402 1993 42 12
43 -7408.9452 1993 42 12
44 -7408.9548 1993 42 12
45 -7408.9543 1993 42 12
46 -7408.9607 1993 42 12
47 -7408.9699 1993 42 12
48 -7408.9751 1993 42 12
49 -7408.978 1993 42 12
50 -7408.9797 1993 42 12
51 -7408.9851 1993 42 12
52 -7408.9937 1993 42 12
53 -7408.9977 1993 42 12
54 -7408.9961 1993 42 12
55 -7409.0011 1993 42 12
56 -7409.0098 1993 42 12
57 -7409.0132 1993 42 12
58 -7409.0173 1993 42 12
59 -7409.0174 1993 42 12
60 -7409.0204 1993 42 12
61 -7409.0259 1993 42 12
62 -7409.0324 1993 42 12
63 -7409.0365 1993 42 12
64 -7409.0407 1993 42 12
65 -7409.0407 1993 42 12
66 -7409.0428 1993 42 12
67 -7409.0437 1993 42 12
68 -7409.0437 1993 42 12
69 -7409.0502 1993 42 12
70 -7409.0558 1993 42 12
71 -7409.0572 1993 42 12
72 -7409.0624 1993 42 12
73 -7409.0686 1993 42 12
74 -7409.0721 1993 42 12
75 -7409.075 1993 42 12
76 -7409.0751 1993 42 12
77 -7409.0728 1993 42 12
78 -7409.0732 1993 42 12
79 -7409.0764 1993 42 12
80 -7409.077 1993 42 12
81 -7409.0879 1993 42 12
82 -7409.0898 1993 42 12
83 -7409.0922 1993 42 12
84 -7409.0916 1993 42 12
85 -7409.0928 1993 42 12
86 -7409.0944 1993 42 12
87 -7409.1058 1993 42 12
88 -7409.1084 1993 42 12
89 -7409.1103 1993 42 12
90 -7409.1121 1993 42 12
91 -7409.1145 1993 42 12
92 -7409.1133 1993 42 12
93 -7409.1166 1993 42 12
94 -7409.12 1993 42 12
95 -7409.119 1993 42 12
96 -7409.1208 1993 42 12
97 -7409.1217 1993 42 12
98 -7409.1229 1993 42 12
99 -7409.1235 1993 42 12
100 -7409.1206 1993 42 12
Loop time of 2.01276 on 1 procs for 100 steps with 2047 atoms
Performance: 4.293 ns/day, 5.591 hours/ns, 49.683 timesteps/s, 101.701 katom-step/s
99.8% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 1.985 | 1.985 | 1.985 | 0.0 | 98.62
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.012367 | 0.012367 | 0.012367 | 0.0 | 0.61
Output | 0.0080612 | 0.0080612 | 0.0080612 | 0.0 | 0.40
Modify | 0.0053111 | 0.0053111 | 0.0053111 | 0.0 | 0.26
Other | | 0.002 | | | 0.10
Nlocal: 2047 ave 2047 max 2047 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 7790 ave 7790 max 7790 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
FullNghs: 291196 ave 291196 max 291196 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 291196
Ave neighs/atom = 142.25501
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:02

View File

@ -0,0 +1,197 @@
LAMMPS (2 Apr 2025 - Development - )
Reading data file ...
orthogonal box = (0 0 0) to (28.92 28.92 28.92)
1 by 1 by 1 MPI processor grid
reading atoms ...
2047 atoms
reading velocities ...
2047 velocities
read_data CPU = 0.009 seconds
ACE version: 2023.11.25
Recursive evaluator is used by ACE
Loading ../../../potentials/Cu-PBE-core-rep.ace
Total number of basis functions
Cu: 16 (r=1) 726 (r>1)
Mapping LAMMPS atom type #1(Cu) -> ACE species type #0
atomic load lambda:
fast potential: extract eam/apip:time_per_atom
precise potential: extract pace/apip:time_per_atom
lambda_input: extract lambda/input/apip:time_per_atom
lambda: extract lambda/zone/apip:time_per_atom
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- fix lambda command: doi.org/10.1063/5.0245877
The log file lists these citations in BibTeX format.
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 9.4
ghost atom cutoff = 9.4
binsize = 4.7, bins = 7 7 7
5 neighbor lists, perpetual/occasional/extra = 5 0 0
(1) pair eam/fs/apip, perpetual, trim from (3)
attributes: full, newton on, cut 7.50679
pair build: trim
stencil: none
bin: none
(2) pair pace/apip, perpetual
attributes: full, newton on, cut 9.4
pair build: full/bin/atomonly
stencil: full/bin/3d
bin: standard
(3) pair lambda/input/csp/apip, perpetual, trim from (2)
attributes: full, newton on, cut 8
pair build: trim
stencil: none
bin: none
(4) pair lambda/zone/apip, perpetual
attributes: full, newton on, ghost
pair build: full/bin/ghost
stencil: full/ghost/bin/3d
bin: standard
(5) fix lambda_thermostat/apip, perpetual, copy from (2)
attributes: full, newton on
pair build: copy
stencil: none
bin: none
Setting up Verlet run ...
Unit style : metal
Current step : 0
Time step : 0.001
Per MPI rank memory allocation (min/avg/max) = 52.93 | 52.93 | 52.93 Mbytes
Step TotEng c_lambda_types[1] c_lambda_types[2] c_lambda_types[3]
0 -7408.7649 1993 42 12
1 -7408.7649 1993 42 12
2 -7408.7649 1993 42 12
3 -7408.765 1993 42 12
4 -7408.765 1993 42 12
5 -7408.765 1993 42 12
6 -7408.765 1993 42 12
7 -7408.765 1993 42 12
8 -7408.765 1993 42 12
9 -7408.765 1993 42 12
10 -7408.7651 1993 42 12
11 -7408.7651 1993 42 12
12 -7408.7651 1993 42 12
13 -7408.7651 1993 42 12
14 -7408.7651 1993 42 12
15 -7408.7651 1993 42 12
16 -7408.7652 1993 42 12
17 -7408.7652 1993 42 12
18 -7408.7652 1993 42 12
19 -7408.7652 1993 42 12
20 -7408.7652 1993 42 12
21 -7408.7652 1993 42 12
22 -7408.7652 1993 42 12
23 -7408.7652 1993 42 12
24 -7408.7652 1993 42 12
25 -7408.7652 1993 42 12
26 -7408.7652 1993 42 12
27 -7408.7652 1993 42 12
28 -7408.7652 1993 42 12
29 -7408.7652 1993 42 12
30 -7408.7652 1993 42 12
31 -7408.7652 1993 42 12
32 -7408.7652 1993 42 12
33 -7408.7652 1993 42 12
34 -7408.7652 1993 42 12
35 -7408.7652 1993 42 12
36 -7408.7652 1993 42 12
37 -7408.7652 1993 42 12
38 -7408.7652 1993 42 12
39 -7408.7652 1993 42 12
40 -7408.7652 1993 42 12
41 -7408.7652 1993 42 12
42 -7408.7652 1993 42 12
43 -7408.7652 1993 42 12
44 -7408.7652 1993 42 12
45 -7408.7652 1993 42 12
46 -7408.7652 1993 42 12
47 -7408.7653 1993 42 12
48 -7408.7653 1993 42 12
49 -7408.7653 1993 42 12
50 -7408.7653 1993 42 12
51 -7408.7653 1993 42 12
52 -7408.7653 1993 42 12
53 -7408.7653 1993 42 12
54 -7408.7653 1993 42 12
55 -7408.7653 1993 42 12
56 -7408.7653 1993 42 12
57 -7408.7653 1993 42 12
58 -7408.7653 1993 42 12
59 -7408.7653 1993 42 12
60 -7408.7652 1993 42 12
61 -7408.7652 1993 42 12
62 -7408.7652 1993 42 12
63 -7408.7652 1993 42 12
64 -7408.7652 1993 42 12
65 -7408.7651 1993 42 12
66 -7408.7651 1993 42 12
67 -7408.7651 1993 42 12
68 -7408.7651 1993 42 12
69 -7408.7651 1993 42 12
70 -7408.765 1993 42 12
71 -7408.765 1993 42 12
72 -7408.765 1993 42 12
73 -7408.765 1993 42 12
74 -7408.765 1993 42 12
75 -7408.765 1993 42 12
76 -7408.765 1993 42 12
77 -7408.765 1993 42 12
78 -7408.765 1993 42 12
79 -7408.765 1993 42 12
80 -7408.765 1993 42 12
81 -7408.765 1993 42 12
82 -7408.765 1993 42 12
83 -7408.765 1993 42 12
84 -7408.765 1993 42 12
85 -7408.765 1993 42 12
86 -7408.765 1993 42 12
87 -7408.765 1993 42 12
88 -7408.765 1993 42 12
89 -7408.7651 1993 42 12
90 -7408.7651 1993 42 12
91 -7408.7651 1993 42 12
92 -7408.7651 1993 42 12
93 -7408.7651 1993 42 12
94 -7408.7651 1993 42 12
95 -7408.7651 1993 42 12
96 -7408.7651 1993 42 12
97 -7408.7651 1993 42 12
98 -7408.7651 1993 42 12
99 -7408.7651 1993 42 12
100 -7408.7651 1993 42 12
Loop time of 2.19492 on 1 procs for 100 steps with 2047 atoms
Performance: 3.936 ns/day, 6.097 hours/ns, 45.560 timesteps/s, 93.261 katom-step/s
99.8% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 2.0683 | 2.0683 | 2.0683 | 0.0 | 94.23
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.012156 | 0.012156 | 0.012156 | 0.0 | 0.55
Output | 0.0084851 | 0.0084851 | 0.0084851 | 0.0 | 0.39
Modify | 0.10386 | 0.10386 | 0.10386 | 0.0 | 4.73
Other | | 0.002096 | | | 0.10
Nlocal: 2047 ave 2047 max 2047 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 7790 ave 7790 max 7790 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
FullNghs: 291196 ave 291196 max 291196 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 291196
Ave neighs/atom = 142.25501
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:02

View File

@ -0,0 +1,201 @@
LAMMPS (2 Apr 2025 - Development - )
Reading data file ...
orthogonal box = (0 0 0) to (7.23 7.23 7.23)
1 by 1 by 1 MPI processor grid
reading atoms ...
31 atoms
reading velocities ...
31 velocities
read_data CPU = 0.002 seconds
ACE version: 2023.11.25
Recursive evaluator is used
Loading Cu-1.yace
Total number of basis functions
Cu: 15 (r=1) 9 (r>1)
Mapping LAMMPS atom type #1(Cu) -> ACE species type #0
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 5.9
ghost atom cutoff = 5.9
binsize = 2.95, bins = 3 3 3
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair pace, perpetual
attributes: full, newton on
pair build: full/bin/atomonly
stencil: full/bin/3d
bin: standard
Setting up Verlet run ...
Unit style : metal
Current step : 0
Time step : 0.001
Per MPI rank memory allocation (min/avg/max) = 4.908 | 4.908 | 4.908 Mbytes
Step PotEng Fnorm Fmax
0 -98.699376 49.367618 19.563052
Loop time of 6.74e-07 on 1 procs for 0 steps with 31 atoms
148.4% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0 | 0 | 0 | 0.0 | 0.00
Output | 0 | 0 | 0 | 0.0 | 0.00
Modify | 0 | 0 | 0 | 0.0 | 0.00
Other | | 6.74e-07 | | |100.00
Nlocal: 31 ave 31 max 31 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 616 ave 616 max 616 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
FullNghs: 2132 ave 2132 max 2132 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 2132
Ave neighs/atom = 68.774194
Neighbor list builds = 0
Dangerous builds = 0
ACE version: 2023.11.25
Recursive evaluator is used by ACE
Loading Cu-1.yace
Total number of basis functions
Cu: 15 (r=1) 9 (r>1)
Mapping LAMMPS atom type #1(Cu) -> ACE species type #0
Setting atom values ...
31 settings made for apip/lambda
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 7.50679
ghost atom cutoff = 7.50679
binsize = 3.753395, bins = 2 2 2
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair eam/fs/apip, perpetual
attributes: full, newton on, cut 7.50679
pair build: full/bin/atomonly
stencil: full/bin/3d
bin: standard
(2) pair pace/apip, perpetual, copy from (1)
attributes: full, newton on
pair build: copy
stencil: none
bin: none
Setting up Verlet run ...
Unit style : metal
Current step : 0
Time step : 0.001
Per MPI rank memory allocation (min/avg/max) = 5.564 | 5.564 | 5.564 Mbytes
Step PotEng Fnorm Fmax
0 -98.699376 49.367618 19.563052
Loop time of 5.62e-07 on 1 procs for 0 steps with 31 atoms
177.9% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0 | 0 | 0 | 0.0 | 0.00
Output | 0 | 0 | 0 | 0.0 | 0.00
Modify | 0 | 0 | 0 | 0.0 | 0.00
Other | | 5.62e-07 | | |100.00
Nlocal: 31 ave 31 max 31 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 957 ave 957 max 957 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
FullNghs: 4558 ave 4558 max 4558 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 4558
Ave neighs/atom = 147.03226
Neighbor list builds = 0
Dangerous builds = 0
Setting atom values ...
31 settings made for apip/lambda
Setting up Verlet run ...
Unit style : metal
Current step : 0
Time step : 0.001
Per MPI rank memory allocation (min/avg/max) = 5.564 | 5.564 | 5.564 Mbytes
Step PotEng Fnorm Fmax
0 -85.025323 53.839249 22.182149
Loop time of 5.49e-07 on 1 procs for 0 steps with 31 atoms
182.1% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0 | 0 | 0 | 0.0 | 0.00
Output | 0 | 0 | 0 | 0.0 | 0.00
Modify | 0 | 0 | 0 | 0.0 | 0.00
Other | | 5.49e-07 | | |100.00
Nlocal: 31 ave 31 max 31 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 957 ave 957 max 957 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
FullNghs: 4558 ave 4558 max 4558 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 4558
Ave neighs/atom = 147.03226
Neighbor list builds = 0
Dangerous builds = 0
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 7.50679
ghost atom cutoff = 7.50679
binsize = 3.753395, bins = 2 2 2
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair eam/fs, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d
bin: standard
Setting up Verlet run ...
Unit style : metal
Current step : 0
Time step : 0.001
Per MPI rank memory allocation (min/avg/max) = 5.183 | 5.183 | 5.183 Mbytes
Step PotEng Fnorm Fmax
0 -85.025323 53.839249 22.182149
Loop time of 4.77e-07 on 1 procs for 0 steps with 31 atoms
0.0% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0 | 0 | 0 | 0.0 | 0.00
Output | 0 | 0 | 0 | 0.0 | 0.00
Modify | 0 | 0 | 0 | 0.0 | 0.00
Other | | 4.77e-07 | | |100.00
Nlocal: 31 ave 31 max 31 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 957 ave 957 max 957 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 2279 ave 2279 max 2279 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 2279
Ave neighs/atom = 73.516129
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:00

View File

@ -0,0 +1 @@
../../../potentials/MoCoNiVFeAlCr_2nn.meam

View File

@ -0,0 +1,46 @@
# May 2025
# Test script for MD-KMC accelerated diffusion testing in LAMMPS
# Created by Jacob Tavenner, Baylor University
# Initiation -------------------------------------
units metal
dimension 3
boundary p p p
atom_style atomic
# Atom Definition --------------------------------
lattice fcc 3.762
region whole block 0 1 0 1 0 1
create_box 2 whole
create_atoms 1 region whole
replicate 6 16 6
region puck block INF INF 7 9 INF INF
set region puck type 2
# Force Fields -----------------------------------
pair_style meam
pair_coeff * * library_2nn.meam Mo Co Ni V Fe Al Cr MoCoNiVFeAlCr_2nn.meam Ni Cr
# Settings ---------------------------------------
timestep 0.002
thermo 100
# Computations -----------------------------------
compute voroN all voronoi/atom neighbors yes
run 0
thermo_style custom step temp press pxx pyy pzz lx ly lz vol pe
# Execution --------------------------------------
velocity all create 2400 908124 loop geom
fix temp all npt temp 1000 1000 1000 aniso 0 0 1
fix mc all neighbor/swap 50 12 1340723 1000 3 voroN diff 2
thermo_style custom step temp press pxx pyy pzz lx ly lz vol pe f_mc[*]
#dump dump2 all custom 5000 dump.edge-3_Ni-Cr.* id type x y z c_eng c_csym
run 1000
#write_data pulse_center.data

View File

@ -0,0 +1,47 @@
# May 2025
# Test script for MD-KMC accelerated diffusion testing in LAMMPS
# Created by Jacob Tavenner, Baylor University
# Initiation -------------------------------------
units metal
dimension 3
boundary p p p
atom_style atomic
# Atom Definition --------------------------------
lattice fcc 3.762
region whole block 0 1 0 1 0 1
create_box 2 whole
create_atoms 1 region whole
replicate 6 16 6
region puck block INF INF INF 2 INF INF
set region puck type 2
# Force Fields -----------------------------------
pair_style meam
pair_coeff * * library_2nn.meam Mo Co Ni V Fe Al Cr MoCoNiVFeAlCr_2nn.meam Ni Cr
# Settings ---------------------------------------
timestep 0.002
thermo 100
# Computations -----------------------------------
compute voroN all voronoi/atom neighbors yes
run 0
thermo_style custom step temp press pxx pyy pzz lx ly lz vol pe
# Execution --------------------------------------
velocity all create 2400 908124 loop geom
fix temp all npt temp 1000 1000 1000 aniso 0 0 1
fix mc all neighbor/swap 50 12 1340723 1000 3 voroN diff 2
thermo_style custom step temp press pxx pyy pzz lx ly lz vol pe f_mc[*]
#dump dump2 all custom 5000 dump.edge-3_Ni-Cr.* id type x y z c_eng c_csym
run 1000
#write_data pulse_end.data

View File

@ -0,0 +1 @@
../../../potentials/library_2nn.meam

View File

@ -0,0 +1,174 @@
LAMMPS (12 Jun 2025 - Development - patch_12Jun2025-605-g5eb61491f0-modified)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread.
using 1 OpenMP thread(s) per MPI task
# May 2025
# Test script for MD-KMC accelerated diffusion testing in LAMMPS
# Created by Jacob Tavenner, Baylor University
# Initiation -------------------------------------
units metal
dimension 3
boundary p p p
atom_style atomic
# Atom Definition --------------------------------
lattice fcc 3.762
Lattice spacing in x,y,z = 3.762 3.762 3.762
region whole block 0 1 0 1 0 1
create_box 2 whole
Created orthogonal box = (0 0 0) to (3.762 3.762 3.762)
1 by 1 by 1 MPI processor grid
create_atoms 1 region whole
Created 4 atoms
using lattice units in orthogonal box = (0 0 0) to (3.762 3.762 3.762)
create_atoms CPU = 0.000 seconds
replicate 6 16 6
Replication is creating a 6x16x6 = 576 times larger system...
orthogonal box = (0 0 0) to (22.572 60.192 22.572)
1 by 1 by 1 MPI processor grid
2304 atoms
replicate CPU = 0.000 seconds
region puck block INF INF 7 9 INF INF
set region puck type 2
Setting atom values ...
360 settings made for type
# Force Fields -----------------------------------
pair_style meam
pair_coeff * * library_2nn.meam Mo Co Ni V Fe Al Cr MoCoNiVFeAlCr_2nn.meam Ni Cr
Reading MEAM library file library_2nn.meam with DATE: 2024-08-08
Reading MEAM potential file MoCoNiVFeAlCr_2nn.meam with DATE: 2024-08-08
# Settings ---------------------------------------
timestep 0.002
thermo 100
# Computations -----------------------------------
compute voroN all voronoi/atom neighbors yes
run 0
WARNING: No fixes with time integration, atoms won't move
For more information see https://docs.lammps.org/err0028 (src/verlet.cpp:60)
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 6.8
ghost atom cutoff = 6.8
binsize = 3.4, bins = 7 18 7
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair meam, perpetual
attributes: full, newton on
pair build: full/bin/atomonly
stencil: full/bin/3d
bin: standard
(2) pair meam, perpetual, half/full from (1)
attributes: half, newton on
pair build: halffull/newton
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 13.32 | 13.32 | 13.32 Mbytes
Step Temp E_pair E_mol TotEng Press
0 0 -9674.3728 0 -9674.3728 -212400.94
Loop time of 8.62e-07 on 1 procs for 0 steps with 2304 atoms
0.0% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0 | 0 | 0 | 0.0 | 0.00
Output | 0 | 0 | 0 | 0.0 | 0.00
Modify | 0 | 0 | 0 | 0.0 | 0.00
Other | | 8.62e-07 | | |100.00
Nlocal: 2304 ave 2304 max 2304 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 4735 ave 4735 max 4735 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 99072 ave 99072 max 99072 min
Histogram: 1 0 0 0 0 0 0 0 0 0
FullNghs: 198144 ave 198144 max 198144 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 198144
Ave neighs/atom = 86
Neighbor list builds = 0
Dangerous builds = 0
thermo_style custom step temp press pxx pyy pzz lx ly lz vol pe
# Execution --------------------------------------
velocity all create 2400 908124 loop geom
fix temp all npt temp 1000 1000 1000 aniso 0 0 1
fix mc all neighbor/swap 50 12 1340723 1000 3 voroN diff 2
thermo_style custom step temp press pxx pyy pzz lx ly lz vol pe f_mc[*]
#dump dump2 all custom 5000 dump.edge-3_Ni-Cr.* id type x y z c_eng c_csym
run 1000
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- fix neighbor/swap command: doi:10.1016/j.commatsci.2022.111929
@Article{Tavenner2023111929,
author = {Jacob P. Tavenner and Mikhail I. Mendelev and John W. Lawson},
title = {Molecular dynamics based kinetic Monte Carlo simulation for accelerated diffusion},
journal = {Computational Materials Science},
year = {2023},
volume = {218},
pages = {111929}
url = {https://dx.doi.org/10.1016/j.commatsci.2022.111929}
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Per MPI rank memory allocation (min/avg/max) = 13.32 | 13.32 | 13.32 Mbytes
Step Temp Press Pxx Pyy Pzz Lx Ly Lz Volume PotEng f_mc[1] f_mc[2]
0 2400 -187517.52 -187464.28 -188202.86 -186885.42 22.572 60.192 22.572 30667.534 -9674.3728 0 0
100 1687.1584 13681.454 14112.794 14026.902 12904.667 21.637683 57.728817 21.63703 27027.2 -9600.6424 24 23
200 1578.9879 -6074.2872 -7170.074 -4456.4001 -6596.3875 21.71812 58.13626 21.712735 27414.722 -9569.7632 48 44
300 1586.0502 1921.5002 2871.8396 1449.0001 1443.661 21.677891 58.13829 21.643595 27277.759 -9572.2349 72 67
400 1599.8151 459.13309 -890.62191 638.40686 1629.6143 21.662475 58.208733 21.64368 27291.495 -9576.3711 96 88
500 1622.7406 -980.83045 -358.66202 -2883.0275 299.19813 21.627475 58.244052 21.683194 27313.708 -9583.2244 120 110
600 1558.3072 661.01491 2134.4817 -1069.4315 917.99455 21.675158 58.08722 21.705367 27328.136 -9564.1953 144 132
700 1585.7908 2896.8915 2712.2516 5131.3298 847.09324 21.703761 57.89964 21.704281 27274.466 -9572.077 168 154
800 1593.7707 -754.08728 -529.51328 807.24585 -2539.9944 21.682927 58.129291 21.67599 27320.704 -9574.7174 192 175
900 1594.1026 -504.80889 147.79949 -1421.9393 -240.28691 21.678023 58.172814 21.655846 27309.572 -9574.7989 216 198
1000 1604.8161 1017.6914 707.59987 2068.9348 276.53957 21.696786 57.985179 21.676799 27271.408 -9578.0587 240 221
Loop time of 30.6062 on 1 procs for 1000 steps with 2304 atoms
Performance: 5.646 ns/day, 4.251 hours/ns, 32.673 timesteps/s, 75.279 katom-step/s
99.6% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 27.514 | 27.514 | 27.514 | 0.0 | 89.90
Neigh | 0.22106 | 0.22106 | 0.22106 | 0.0 | 0.72
Comm | 0.011786 | 0.011786 | 0.011786 | 0.0 | 0.04
Output | 0.00030095 | 0.00030095 | 0.00030095 | 0.0 | 0.00
Modify | 2.854 | 2.854 | 2.854 | 0.0 | 9.32
Other | | 0.004794 | | | 0.02
Nlocal: 2304 ave 2304 max 2304 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 4744 ave 4744 max 4744 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 130039 ave 130039 max 130039 min
Histogram: 1 0 0 0 0 0 0 0 0 0
FullNghs: 260078 ave 260078 max 260078 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 260078
Ave neighs/atom = 112.88108
Neighbor list builds = 62
Dangerous builds = 0
#write_data pulse_center.data
Total wall time: 0:00:30

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