Compare commits
650 Commits
patch_2Apr
...
maintenanc
| Author | SHA1 | Date | |
|---|---|---|---|
| e788f090f5 | |||
| b91e1129fa | |||
| eb6e0dbb1f | |||
| 98f1f12827 | |||
| 0b07b0f009 | |||
| 92ea683359 | |||
| 12e1307281 | |||
| 597885df19 | |||
| 53768758f1 | |||
| f854f2ddaa | |||
| 8488916ad9 | |||
| 95ca8a253e | |||
| 31df7d5fc2 | |||
| 013dfbaaab | |||
| 1864db1c17 | |||
| 8e13598d8b | |||
| dd2f781a68 | |||
| ce0688cbf9 | |||
| 5fdb34aff1 | |||
| b3da9ebee8 | |||
| be6d90c8b7 | |||
| 5223a9a0b1 | |||
| b3a6f63d55 | |||
| 374bc21a9d | |||
| 72c70090f0 | |||
| f36cbc1325 | |||
| cd7033562b | |||
| f0799c6d3d | |||
| ecd702793e | |||
| d1d55a0006 | |||
| 893451c123 | |||
| e49763ec3b | |||
| 6760687c56 | |||
| a4a9738d94 | |||
| dc7c26fa80 | |||
| 418eb585d7 | |||
| a87178efb8 | |||
| c1b803c0fc | |||
| 55c8461c44 | |||
| cc74b2b502 | |||
| 1a85f8ac25 | |||
| 2e73891370 | |||
| 964c556bed | |||
| 8c2216a692 | |||
| 95e1ecc8fc | |||
| e252944da1 | |||
| 6804cf9321 | |||
| 32504f701c | |||
| 0db50bd5d7 | |||
| 055c74c430 | |||
| 7e6f5af731 | |||
| 687c525a9f | |||
| afc4bbdaa6 | |||
| ff7c50edd0 | |||
| 642e220bd2 | |||
| bd4641ac0f | |||
| c4911f9eea | |||
| def9245092 | |||
| 1d5c4ee4b4 | |||
| 2d50f74ae5 | |||
| bd2990f20b | |||
| 8f6b334e54 | |||
| c8a97fc943 | |||
| 66fc58c936 | |||
| fdd3efe72f | |||
| 671b0caaf9 | |||
| ddf0edcb98 | |||
| b6086601e4 | |||
| b0d55b38e4 | |||
| 26527bd5b2 | |||
| 29b29fcf66 | |||
| c2c8f06511 | |||
| 461051be95 | |||
| 73b023cccf | |||
| 7546143ad3 | |||
| 505365c80c | |||
| 09cffd2df5 | |||
| 290aa116f5 | |||
| bda0e59177 | |||
| 3b07abbf5f | |||
| cf45119a70 | |||
| 849b6fc95d | |||
| 9ef8f8590e | |||
| 3a3ba77ced | |||
| 3eae4066f3 | |||
| eae76faa1f | |||
| 2818f86bdf | |||
| f03fd33137 | |||
| 0562db29cb | |||
| 857c413572 | |||
| df776c0dc1 | |||
| f0ffce3940 | |||
| ae66910c7b | |||
| 6c791477ae | |||
| 9ffa9c6eb1 | |||
| 5a4d659fc3 | |||
| 32e3c1c2df | |||
| c7162f96f5 | |||
| abdb785ca5 | |||
| 0a0850ddf8 | |||
| 59f3f52304 | |||
| d35cdbc074 | |||
| c64945060d | |||
| 81980666de | |||
| 7d4757e745 | |||
| e7bbc48097 | |||
| 3454810c80 | |||
| 71ee3ea7aa | |||
| 74b1f10bbd | |||
| 8bcb6cc9ff | |||
| 32dbf9a2e9 | |||
| a21ade450e | |||
| eeaea74e71 | |||
| ec3c04bb9c | |||
| 7c89fa1492 | |||
| 741a3175a6 | |||
| 7cb10a480a | |||
| 62cfa3151c | |||
| a3a67ef3f3 | |||
| 64d7bbb375 | |||
| 602088f60b | |||
| ff19f3406c | |||
| d7f281f494 | |||
| ba2ea35210 | |||
| 00907af0df | |||
| ff6df29692 | |||
| 29aba1d068 | |||
| 90b195d548 | |||
| 8945a6d47c | |||
| ccd7a3d5e2 | |||
| f111f05ecf | |||
| fa9cdff45c | |||
| 156c9cf1d2 | |||
| 0cc67bc3f2 | |||
| 5e4655b2cd | |||
| d1088b4287 | |||
| d0ec0503fb | |||
| 5817fa5dc1 | |||
| d11c8ca8bc | |||
| 2a28f8311b | |||
| a9323f1f36 | |||
| 2e26836110 | |||
| f2c07c96ec | |||
| f38dc51051 | |||
| 11bf6eab2a | |||
| 00e9308853 | |||
| eb91b226e0 | |||
| 0926c691ed | |||
| 9d512e10d7 | |||
| 9d68c3ac45 | |||
| ae6a83c19f | |||
| 36c052ef49 | |||
| 06a39d9558 | |||
| 9b8bd6b78b | |||
| 62472e7465 | |||
| c19fefb782 | |||
| 12364742b1 | |||
| 1308a61a46 | |||
| 7c60bce3a2 | |||
| 4f47d59d1e | |||
| 608be97c14 | |||
| 088954fe79 | |||
| 2d56b01153 | |||
| 6025dbd46f | |||
| 1fc6862046 | |||
| e135bd7696 | |||
| d984ba9e32 | |||
| b97611a919 | |||
| 43662165f0 | |||
| 0a9278d45b | |||
| 177dbe638e | |||
| 6fcf20f098 | |||
| 733f88d207 | |||
| 2b166f201e | |||
| 748ffe0fa6 | |||
| 9f418715b1 | |||
| a23698f962 | |||
| 0435e156ba | |||
| f8c51818e7 | |||
| 5e7377414e | |||
| dea9c0f53c | |||
| ea330c3c0f | |||
| 266924d6e1 | |||
| 928209c64b | |||
| 36e03bcd36 | |||
| 9f55ae6fdb | |||
| a8b82f8e41 | |||
| 3895f7100f | |||
| 0b06bce086 | |||
| 9c60b5f7af | |||
| 19c0242530 | |||
| 06ba77c554 | |||
| ddfad6853e | |||
| 7cdad6fa06 | |||
| f068d8395a | |||
| 13cc5fe9bd | |||
| 35edb0f3b1 | |||
| fb6d4eb607 | |||
| 260060f4a4 | |||
| 1f8f0f37c1 | |||
| bae0fe562e | |||
| 07f56405a4 | |||
| 5791ca7263 | |||
| 87de8b79ca | |||
| 3c131f8c76 | |||
| d829cebd83 | |||
| 45eff54f79 | |||
| 199c25c2e7 | |||
| 5e0c01d056 | |||
| a6f2a6b674 | |||
| deaa96fea1 | |||
| e8df9e46a5 | |||
| f7e3b893ce | |||
| 269c9c6f6e | |||
| 85d1597f2e | |||
| 66098ddd39 | |||
| 6c67165049 | |||
| 2320d28f7c | |||
| a1aa66ee8b | |||
| 7468f6c30f | |||
| 912c1acedb | |||
| a76a37bf67 | |||
| a3bc393b89 | |||
| e0256f8d3e | |||
| 65e1bf61dc | |||
| 448d02f12e | |||
| cc3406ff72 | |||
| 0fbcf89058 | |||
| a22cdba3d6 | |||
| eda90863b8 | |||
| 423bbaa51a | |||
| a9e42c6c6c | |||
| 849d308268 | |||
| ffd53e4945 | |||
| 4545b3b9e9 | |||
| 3853d32e85 | |||
| e86ae3912e | |||
| 7adeb3adee | |||
| 59587e0f69 | |||
| 4258d6f923 | |||
| 8813038a6c | |||
| 872eb1c0cc | |||
| ec6080b369 | |||
| 8b8d1d7bdb | |||
| 7acafd8989 | |||
| 940833113b | |||
| 644e8064d4 | |||
| b6714794c7 | |||
| 26bbf12e2a | |||
| d406d2ab6b | |||
| 12fae74fa9 | |||
| a8a089f25c | |||
| 2709b47b64 | |||
| aa742516a4 | |||
| 16c79f0af7 | |||
| 2099411873 | |||
| 927dfe76e7 | |||
| c9a1cf0656 | |||
| 9fa8130bc1 | |||
| 758b08f695 | |||
| b14a323e73 | |||
| 4b9efca3c0 | |||
| 1ca87cd021 | |||
| 73c1b69dc7 | |||
| 02babb2344 | |||
| c1c7473a7a | |||
| 9845e070a9 | |||
| 90a4518122 | |||
| 65ecc87f7e | |||
| d485647d02 | |||
| d49bed3c27 | |||
| b9a14a5ccf | |||
| 014b304827 | |||
| 90b455bbac | |||
| c0ab7e9a9e | |||
| 845e2f8954 | |||
| 3e56d6945b | |||
| 74f05273e7 | |||
| e8b9611bd6 | |||
| d65af29020 | |||
| a38fce9b2c | |||
| f254201397 | |||
| 89e442dac1 | |||
| 4693cc88fa | |||
| 2b2ea9aaa2 | |||
| a3cd14bb82 | |||
| c752de6621 | |||
| d781541f5f | |||
| 89cfeafbc7 | |||
| 7377d6cc20 | |||
| 85e497a97d | |||
| 30fabc5a28 | |||
| b8466e5caf | |||
| 3ccd6fa483 | |||
| fec7422781 | |||
| f710205874 | |||
| 1ecf754b2d | |||
| b54a487266 | |||
| f4e4bc93c9 | |||
| d3a717c030 | |||
| 3ddcc0ca51 | |||
| 5dc7ea9663 | |||
| 6f71fb6d2f | |||
| 884961f267 | |||
| 698285904d | |||
| df4eb09e6f | |||
| 2aa1ed6923 | |||
| 9e622e767a | |||
| e410a2816a | |||
| f489ff1699 | |||
| ec839d494c | |||
| 346d1de4dd | |||
| 29819b29ae | |||
| 076c711dba | |||
| c4a822a4cf | |||
| 84b2b1c231 | |||
| 4c47ff284c | |||
| 503d7230a6 | |||
| e46d511885 | |||
| 7c6ec1409f | |||
| dcfdbef0a0 | |||
| 6b02db9e21 | |||
| 001c1cd938 | |||
| d74fd195a3 | |||
| eb2b5aa0ac | |||
| 89d3c0b0a6 | |||
| f0abbc80be | |||
| 3cb951e729 | |||
| bea24c70a6 | |||
| 87f022576d | |||
| 20d10ec751 | |||
| 2e502b59bb | |||
| 0ed1b85d6f | |||
| 8b665764cc | |||
| 77da90df2a | |||
| 69693750ce | |||
| b41e3c9939 | |||
| 1208f3dd5e | |||
| 04a5fe06e7 | |||
| dc94ff97de | |||
| 31b5ffbeca | |||
| 570c9d190f | |||
| b5e21701ee | |||
| 0cb72423b8 | |||
| 8fc48ad374 | |||
| 6fbb96140f | |||
| c00326debc | |||
| 112f311591 | |||
| f3be84a22b | |||
| 307a5b9592 | |||
| 14d9e2b722 | |||
| 78fe9585a4 | |||
| f0f8b49afb | |||
| d0cfe2d00f | |||
| b1654f11c1 | |||
| 6573a8d882 | |||
| aa68d6aacd | |||
| bdc08a99fe | |||
| fc6fe9e740 | |||
| e2fede9076 | |||
| 48cde7c566 | |||
| 14583e5fb6 | |||
| ab2558db15 | |||
| 5fa0c4951a | |||
| f8a0e1524e | |||
| 592bd770a8 | |||
| 13c56473a2 | |||
| 3d7088a9d9 | |||
| 2f6567ad76 | |||
| 910bb4e111 | |||
| 6e7e2b7aee | |||
| bdbb391364 | |||
| ea67e3104d | |||
| 6c94fb5eea | |||
| 84bfbe7936 | |||
| 891e97ecf5 | |||
| 1fa18a45a8 | |||
| 9a60dbbf31 | |||
| 92d07ceba4 | |||
| fe90838843 | |||
| 2d0aa2daf5 | |||
| 696c2d15da | |||
| b570782d5e | |||
| 88cd314dc9 | |||
| 7e51d1e049 | |||
| d8c4115b86 | |||
| baa3c8e98c | |||
| 1a258d4349 | |||
| 87bbd70fd2 | |||
| 850e4d14cd | |||
| 0717019b2d | |||
| 0c7720843b | |||
| 4c18b2fe99 | |||
| 1d7b0b730f | |||
| 2946087b45 | |||
| 94b2cd7fc5 | |||
| dea53be1a5 | |||
| c3c72a3bff | |||
| 82b86031ef | |||
| 3dda8d752c | |||
| e5809d8be1 | |||
| 9861c93225 | |||
| 65b21b8772 | |||
| 8d8f6c3efd | |||
| 7d2238d7be | |||
| 638f6e9551 | |||
| a6979e5489 | |||
| 411574a39c | |||
| 874f5577d4 | |||
| 456449d4ff | |||
| 22cfd97f46 | |||
| 453469d6fe | |||
| e699ced7bd | |||
| 6baa2f432c | |||
| c114938867 | |||
| e8294aa207 | |||
| 6e32b0cada | |||
| 6243735af4 | |||
| 5816c0875a | |||
| a31617ef7b | |||
| d5c7da1b0e | |||
| 0b1453f7ea | |||
| ba204b3989 | |||
| fd86bbd982 | |||
| 020a4f6ee7 | |||
| 36b9d93b52 | |||
| cbe2266e40 | |||
| fb10881636 | |||
| dcbb09f321 | |||
| b00cb7e6bd | |||
| edfe752b2a | |||
| 6d28d53d60 | |||
| 9976d58b34 | |||
| 46265e36ce | |||
| 2a8d16ee4b | |||
| 54035fba79 | |||
| 7ac835a12f | |||
| 6058fcc37e | |||
| ee5ee22b47 | |||
| 6138369079 | |||
| b7820bfd0e | |||
| 50b8fe9c61 | |||
| 8fa42612e6 | |||
| a6c5f3f714 | |||
| 573021b362 | |||
| 688f4f5288 | |||
| 2831b904e9 | |||
| bff40d2add | |||
| 7d2b2ff776 | |||
| 1d09911bdb | |||
| e446b17d41 | |||
| e7ce03aa0a | |||
| a9eaa71f8c | |||
| 6203c18ef0 | |||
| a7aacd2440 | |||
| 2178ba2513 | |||
| 8277218cbb | |||
| 13d7178f95 | |||
| 1255772864 | |||
| 0878fca16e | |||
| 147ad3c67c | |||
| 05e4dded0f | |||
| 5739203ad3 | |||
| 3c232ce6a6 | |||
| f24ced3bb6 | |||
| d8b74e907e | |||
| 039161112b | |||
| 522608b59e | |||
| 24e65b618b | |||
| e22cea04e2 | |||
| a70aece450 | |||
| 92d5772dfa | |||
| 5f04990bc2 | |||
| d9a7365273 | |||
| eaa00c238a | |||
| 20dae33563 | |||
| 9d360af2c5 | |||
| cafa9ccec2 | |||
| 9296357851 | |||
| c53afef070 | |||
| 7bdac7eafd | |||
| a01a6f3a27 | |||
| bfd15408ba | |||
| 48e0859f0d | |||
| 66930a4e5c | |||
| c434b96a9b | |||
| 6d3945d367 | |||
| 84443eb114 | |||
| e37b579237 | |||
| 58c2c89d1b | |||
| 023960e7d5 | |||
| 84975f31cb | |||
| 27e8d0f19c | |||
| 9befd421ca | |||
| b3e54549db | |||
| 85393862af | |||
| ac1db251cb | |||
| 3f48d48eea | |||
| d9804d7590 | |||
| 4128d52e1c | |||
| 2d961e76b3 | |||
| 016c9ef4b2 | |||
| e69c65431f | |||
| a40e9222aa | |||
| 283e2103e3 | |||
| 2808e6fc52 | |||
| c742b20c5a | |||
| 530f487dd7 | |||
| ba8ca9258b | |||
| cd21f67cc6 | |||
| 07257595ff | |||
| 413d485617 | |||
| 8759a18437 | |||
| f79e9a113f | |||
| c1fa89186a | |||
| 609f5ec64b | |||
| 38b79eeb9b | |||
| 7035249abd | |||
| 816d74d80c | |||
| 4926164050 | |||
| a102d64a95 | |||
| 77db8e422a | |||
| ee0c5dc121 | |||
| 184f5a7f5e | |||
| 162b9c3ff3 | |||
| 4d06a9928f | |||
| 938682a751 | |||
| 00bccbf067 | |||
| 67085517ff | |||
| 3a2d94822a | |||
| c272e8f94f | |||
| 7f41eb6d9a | |||
| a716df7e59 | |||
| 08eae40f9a | |||
| b6c031fd03 | |||
| 990c07a133 | |||
| 4e94e697ec | |||
| 4526dccaca | |||
| 917606e40e | |||
| acaae8a36f | |||
| 28803ee78d | |||
| dd498fcbf8 | |||
| 0f8af20d0b | |||
| 00ef4ca3f6 | |||
| 50fbe61616 | |||
| 854c6d93e2 | |||
| e8e2c5f986 | |||
| cff21ce808 | |||
| 97c4875a08 | |||
| c9aedf9df8 | |||
| 723dc17d80 | |||
| c90f874a0d | |||
| 4ed5243d9b | |||
| 71c7d143b7 | |||
| e944140ff2 | |||
| b54545d1a4 | |||
| fc7119982b | |||
| 9e45df19c1 | |||
| 8bfec75568 | |||
| 0f948e98f2 | |||
| b9ce258935 | |||
| 058f87e019 | |||
| 6c2e469f5d | |||
| 810e3e5fa5 | |||
| a5374997d2 | |||
| e65ed32ecd | |||
| d326327bd7 | |||
| aa1c901f94 | |||
| 2ba7059c00 | |||
| 23691d4336 | |||
| 78adc1727a | |||
| 9def610c08 | |||
| a939e93a08 | |||
| 308207d5f9 | |||
| 75d0d9be1d | |||
| 2f71bc7886 | |||
| ddbdaaafdc | |||
| 8946995199 | |||
| d567fdae97 | |||
| ed9bfb433f | |||
| f8493ed805 | |||
| f3beb206c9 | |||
| b5480e4e1b | |||
| f634b25e31 | |||
| b21db641d9 | |||
| 6ba94d1619 | |||
| ce756540e8 | |||
| bb462b9ea3 | |||
| 63eda98779 | |||
| 0ca72bb58e | |||
| a6bcf507e1 | |||
| a1621a7229 | |||
| 62d41c6afb | |||
| 5480d25e36 | |||
| a4145ec852 | |||
| 5b16f15b25 | |||
| e77aaba3a4 | |||
| 7f08e8d11c | |||
| f62b129dec | |||
| db967a5bbf | |||
| f20af66312 | |||
| 01766c7631 | |||
| 7846bb59db | |||
| c27951cb1f | |||
| 4ab82d76ad | |||
| c6cbc1f965 | |||
| 88e58e9189 | |||
| e14005c443 | |||
| 9570c2fb50 | |||
| 180ce5277f | |||
| e81b86e114 | |||
| 6c6262a637 | |||
| 062bb88561 | |||
| cf5b653a9a | |||
| c5a5e4a099 | |||
| ccab900342 | |||
| fc400af724 | |||
| b1ea4d9601 | |||
| 2ca3be7b16 | |||
| 31b94aa1b0 | |||
| b1b94980fa | |||
| 770ad34267 | |||
| 10c523a950 | |||
| 62ef884564 | |||
| b3860a82de | |||
| 1deb3d8865 | |||
| 266e519013 | |||
| fffb86cb02 | |||
| fcaabe510e | |||
| a6043d92cb | |||
| ee16f6503e | |||
| 84168fc84d | |||
| 8a5fd08fa1 | |||
| 8944609419 | |||
| e90478e932 | |||
| 52c23785c5 | |||
| 088ff4ad27 | |||
| e32ae65aa1 | |||
| a5bf853c35 | |||
| b0a1b58c68 | |||
| bdaf3c64a6 | |||
| ccc478ad96 | |||
| fadb210052 | |||
| c105a187d9 | |||
| d74f86f2cd | |||
| c5b35970dc | |||
| 5626836995 | |||
| 53111f8c0e | |||
| e0ca512f50 | |||
| e87bad43f9 |
6
.github/CODEOWNERS
vendored
6
.github/CODEOWNERS
vendored
@ -71,10 +71,7 @@ src/EXTRA-COMMAND/group_ndx.* @akohlmey
|
||||
src/EXTRA-COMMAND/ndx_group.* @akohlmey
|
||||
src/EXTRA-COMPUTE/compute_stress_mop*.* @RomainVermorel
|
||||
src/EXTRA-COMPUTE/compute_born_matrix.* @Bibobu @athomps
|
||||
src/EXTRA-DUMP/dump_extxyz.* @fxcoudert
|
||||
src/EXTRA-FIX/fix_deform_pressure.* @jtclemm
|
||||
src/EXTRA-PAIR/pair_dispersion_d3.* @soniasolomoni @arthurfl
|
||||
src/EXTRA-PAIR/d3_parameters.h @soniasolomoni @arthurfl
|
||||
src/MISC/*_tracker.* @jtclemm
|
||||
src/MC/fix_gcmc.* @athomps
|
||||
src/MC/fix_sgcmc.* @athomps
|
||||
@ -104,8 +101,7 @@ src/group.* @sjplimp
|
||||
src/improper.* @sjplimp
|
||||
src/info.* @akohlmey
|
||||
src/kspace.* @sjplimp
|
||||
src/lmptype.h @sjplimp
|
||||
src/label_map.* @jrgissing @akohlmey
|
||||
src/lmptyp.h @sjplimp
|
||||
src/library.* @sjplimp @akohlmey
|
||||
src/main.cpp @sjplimp
|
||||
src/min_*.* @sjplimp
|
||||
|
||||
370
.github/release_steps.md
vendored
370
.github/release_steps.md
vendored
@ -1,370 +0,0 @@
|
||||
# LAMMPS Release Steps
|
||||
|
||||
The following notes chronicle the current steps for preparing and
|
||||
publishing LAMMPS releases. For definitions of LAMMPS versions and
|
||||
releases, please refer to [the corresponding section in the LAMMPS
|
||||
manual](https://docs.lammps.org/Manual_version.html).
|
||||
|
||||
## LAMMPS Feature Release
|
||||
|
||||
A LAMMPS feature release is currently prepared after about 500 to 750
|
||||
commits to the 'develop' branch or after a period of four weeks up to
|
||||
two months. This is not a fixed rule, though, since external
|
||||
circumstances can cause delays in preparing a release, or pull requests
|
||||
that are desired to be merged for the release are not yet completed.
|
||||
|
||||
### Preparing a 'next\_release' branch
|
||||
|
||||
Create a 'next\_release' branch off 'develop' and make the following changes:
|
||||
|
||||
- set the LAMMPS\_VERSION define to the planned release date in
|
||||
src/version.h in the format "D Mmm YYYY" or "DD Mmm YYYY"
|
||||
- remove the LAMMPS\_UPDATE define in src/version.h
|
||||
- update the release date in doc/lammps.1
|
||||
- update all TBD arguments for ..versionadded::, ..versionchanged::
|
||||
..deprecated:: to the planned release date in the format "DMmmYYYY" or
|
||||
"DDMmmYYYY"
|
||||
- check release notes for merged new features and check if
|
||||
..versionadded:: or ..versionchanged:: are missing and need to be
|
||||
added
|
||||
|
||||
Submit this pull request. This is the last pull request merged for the
|
||||
release and should not contain any other changes. (Exceptions: this
|
||||
document, last minute trivial(!) changes).
|
||||
|
||||
This PR shall not be merged before **all** pending tests have completed
|
||||
and cleared. We currently use a mix of automated tests running on
|
||||
either Temple's Jenkins cluster or GitHub workflows. Those include time
|
||||
consuming tests not run on pull requests. If needed, a bug-fix pull
|
||||
request should be created and merged to clear all tests.
|
||||
|
||||
### Create release on GitHub
|
||||
|
||||
When all pending pull requests for the release are merged and have
|
||||
cleared testing, the 'next\_release' branch is merged into 'develop'.
|
||||
|
||||
Check out or update the 'develop' branch locally, pull the latest
|
||||
changes, merge them into 'release' with a fast forward(!) merge, and
|
||||
apply a suitable release tag (for historical reasons the tag starts with
|
||||
"patch_" followed by the date, and finally push everything back to
|
||||
GitHub. There should be no commits made to 'release' but only
|
||||
fast forward merges. Example:
|
||||
|
||||
```
|
||||
git checkout develop
|
||||
git pull
|
||||
git checkout release
|
||||
git pull
|
||||
git merge --ff-only develop
|
||||
git tag -s -m "LAMMPS feature release 4 February 2025" patch_4Feb2025
|
||||
git push git@github.com:lammps/lammps.git --tags develop release
|
||||
```
|
||||
|
||||
Applying this tag will trigger two actions on the Temple Jenkins cluster:
|
||||
- The online manual at https://docs.lammps.org/ will be updated to the
|
||||
state of the 'release' branch. Merges to the 'develop' branch will
|
||||
trigger updating https://docs.lammps.org/latest/ so by reviewing the
|
||||
version of the manual under the "latest" URL, it is possible to preview
|
||||
what the updated release documentation will look like.
|
||||
- A downloadable tar archive of the LAMMPS distribution that includes the
|
||||
html format documentation and a PDF of the manual will be created and
|
||||
uploaded to the download server at https://download.lammps.org/tars
|
||||
Note that the file is added, but the `index.html` file is not updated,
|
||||
so it is not yet publicly visible.
|
||||
|
||||
Go to https://github.com/lammps/lammps/releases and create a new (draft)
|
||||
release page with a summary of all the changes included and references
|
||||
to the pull requests they were merged from or check the existing draft
|
||||
for any necessary changes from pull requests that were merged but are
|
||||
not listed. Then select the applied tag for the release in the "Choose
|
||||
a tag" drop-down list. Go to the bottom of the list and select the "Set
|
||||
as pre-release" checkbox. The "Set as the latest release" button is
|
||||
reserved for stable releases and updates to them.
|
||||
|
||||
If everything is in order, you can click on the "Publish release"
|
||||
button. Otherwise, click on "Save draft" and finish pending tasks until
|
||||
you can return to edit the release page and publish it.
|
||||
|
||||
### Prepare pre-compiled packages, update packages to GitHub
|
||||
|
||||
A suitable build environment is provided with the
|
||||
https://download.lammps.org/static/fedora41_musl_mingw.sif container
|
||||
image. The corresponding container build definition file is maintained
|
||||
in the tools/singularity folder of the LAMMPS source distribution.
|
||||
|
||||
#### Fully portable static Linux x86_64 non-MPI binaries
|
||||
|
||||
The following commands use the Fedora container to build a fully static
|
||||
LAMMPS installation using a musl-libc cross-compiler, install it into a
|
||||
`lammps-static` folder, and create a tarball called
|
||||
`lammps-linux-x86_64-4Feb2025.tar.gz` (or using a corresponding date
|
||||
with a future release) from the `lammps-static` folder.
|
||||
|
||||
``` sh
|
||||
rm -rf release-packages
|
||||
mkdir release-packages
|
||||
cd release-packages
|
||||
wget https://download.lammps.org/static/fedora41_musl.sif
|
||||
apptainer shell fedora41_musl.sif
|
||||
git clone -b release --depth 10 https://github.com/lammps/lammps.git lammps-release
|
||||
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/*
|
||||
tar -czvvf ../lammps-linux-x86_64-4Feb2025.tar.gz lammps-static
|
||||
exit # fedora 41 container
|
||||
cd ..
|
||||
```
|
||||
|
||||
The resulting tar archive can be uploaded to the GitHub release page with:
|
||||
|
||||
``` sh
|
||||
gh release upload patch_4Feb2025 lammps-linux-x86_64-4Feb2025.tar.gz
|
||||
```
|
||||
|
||||
#### Linux x86_64 Flatpak bundle with GUI included
|
||||
|
||||
Make sure you have the `flatpak` and `flatpak-builder` packages
|
||||
installed locally (they require binaries that run with elevated
|
||||
privileges and thus cannot be used from the container) and build a
|
||||
LAMMPS and LAMMPS-GUI flatpak bundle in the `release-packages` folder
|
||||
with:
|
||||
|
||||
``` sh
|
||||
cd release-packages
|
||||
flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
|
||||
flatpak-builder --force-clean --verbose --repo=$PWD/flatpak-repo --install-deps-from=flathub --state-dir=$PWD --user --ccache --default-branch=release flatpak-build lammps-release/tools/lammps-gui/org.lammps.lammps-gui.yml
|
||||
flatpak build-bundle --runtime-repo=https://flathub.org/repo/flathub.flatpakrepo --verbose $PWD/flatpak-repo ../LAMMPS-Linux-x86_64-GUI-4Feb2025.flatpak org.lammps.lammps-gui release
|
||||
cd ..
|
||||
```
|
||||
|
||||
The resulting flatpak bundle file can be uploaded to the GitHub release page with:
|
||||
|
||||
``` sh
|
||||
gh release upload patch_4Feb2025 LAMMPS-Linux-x86_64-GUI-4Feb2025.flatpak
|
||||
```
|
||||
|
||||
#### LAMMPS Source tarball
|
||||
|
||||
The container for the static binary can also be used to prepare the source
|
||||
tarball including the HTML and PDF manual (this is currently done automatically
|
||||
when the releases is created and the tarball uploaded to https://download.lammps.org/tars/).
|
||||
The steps are as follows:
|
||||
|
||||
``` sh
|
||||
cd release-packages
|
||||
apptainer shell fedora41_musl_mingw.sif
|
||||
cd lammps-release
|
||||
rm -f ../release.tar*
|
||||
git archive --output=../release.tar --prefix=lammps-4Feb2025/ HEAD
|
||||
cd doc
|
||||
make clean-all
|
||||
make html pdf
|
||||
tar -rf ../../release.tar --transform 's,^,lammps-4Feb2025/doc/,' html Manual.pdf
|
||||
gzip -9v ../../release.tar
|
||||
mv ../../release.tar.gz ../../lammps-src-4Feb2025.tar.gz
|
||||
exit # fedora41 container
|
||||
cd ..
|
||||
```
|
||||
|
||||
The resulting source tarball can be uploaded to the GitHub release page with:
|
||||
|
||||
``` sh
|
||||
gh release upload patch_4Feb2025 lammps-src-4Feb2025.tar.gz
|
||||
```
|
||||
|
||||
#### Build Windows Installer Packages with MinGW Linux-to-Windows Cross-compiler
|
||||
|
||||
The various Windows installer packages can also be built with
|
||||
apptainer container image.
|
||||
|
||||
``` sh
|
||||
cd release-packages
|
||||
apptainer shell fedora41_musl_mingw.sif
|
||||
git clone --depth 10 https://github.com/lammps/lammps-packages.git lammps-packages
|
||||
cd lammps-packages/mingw-cross
|
||||
ln -sf ../../lammps-release lammps
|
||||
./buildall.sh release >& mk.log & less +F mk.log
|
||||
```
|
||||
|
||||
The installer with the GUI included can be uploaded to the GitHub release page with:
|
||||
|
||||
``` sh
|
||||
ln -sf LAMMPS-64bit-GUI-4Feb2025.exe LAMMPS-Win10-64bit-GUI-4Feb2025.exe
|
||||
gh release upload patch_4Feb2025 LAMMPS-Win10-64bit-GUI-4Feb2025.exe
|
||||
```
|
||||
|
||||
The symbolic link is used to have a consistent naming scheme for the packages
|
||||
attached to the GitHub release page.
|
||||
|
||||
#### Clean up:
|
||||
|
||||
``` sh
|
||||
cd ..
|
||||
rm -r release-packages
|
||||
```
|
||||
|
||||
#### Build Multi-arch App-bundle for macOS
|
||||
|
||||
Building app-bundles for macOS is not as easily automated and portable
|
||||
as some of the other steps. It requires a machine actually running
|
||||
macOS. In that machine the Xcode compiler package needs to be
|
||||
installed. This also includes tools for building and manipulating disk
|
||||
images. This compiler supports building executables for both, the
|
||||
x86_64 and the arm64 architectures. This requires building with CMake
|
||||
and using the CMake settings:
|
||||
|
||||
``` sh
|
||||
-D CMAKE_OSX_ARCHITECTURES=arm64;x86_64
|
||||
-D CMAKE_OSX_DEPLOYMENT_TARGET=11.0
|
||||
```
|
||||
|
||||
This will add the compiler flags `-arch arm64 -arch x86_64
|
||||
-mmacosx-version-min=11.0` and thus produce object for both
|
||||
architectures and support for macOS versions back to version 11 (aka Big
|
||||
Sur). With these settings the following libraries should be compiled
|
||||
and installed (e.g. to `$HOME/.local`) as static libraries only:
|
||||
- libomp taken from the LLVM/Clang source distribution (to support OpenMP)
|
||||
- jpeg
|
||||
- zlib
|
||||
- png
|
||||
- Qt (for LAMMPS-GUI)
|
||||
|
||||
When configuring LAMMPS the `cmake/presets/clang.cmake` should be used
|
||||
and as many packages as possible enabled. For LAMMPS-GUI, MPI should be
|
||||
disabled with `-D BUILD_MPI=OFF` and LAMMPS-GUI enabled with
|
||||
`-D BUILD_LAMMPS_GUI=ON`. If the CMake configuration is successful,
|
||||
settings for building a macOS app-bundle are enabled and with `cmake
|
||||
--build build --target dmg` extra steps will be executed that will build
|
||||
a macOS application installer image under the name
|
||||
`LAMMPS_GUI-macOS-multiarch-4Feb2025.dmg`
|
||||
|
||||
The application image can be uploaded to the GitHub release page with:
|
||||
|
||||
``` sh
|
||||
ln -sf LAMMPS_GUI-macOS-multiarch-4Feb2025.dmg LAMMPS-macOS-multiarch-GUI-4Feb2025.dmg
|
||||
gh release upload patch_4Feb2025 LAMMPS-macOS-multiarch-GUI-4Feb2025.dmg
|
||||
```
|
||||
|
||||
The symbolic link is used to have a consistent naming scheme for the packages
|
||||
attached to the GitHub release page.
|
||||
|
||||
We are currently building the application images on macOS 12 (aka Monterey).
|
||||
|
||||
#### Build Linux x86_64 binary tarball on Ubuntu 20.04LTS
|
||||
|
||||
While the flatpak Linux version uses portable runtime libraries provided
|
||||
by the flatpak environment, we also build regular Linux executables that
|
||||
use a wrapper script and matching shared libraries in a tarball. To be
|
||||
compatible with many Linux distributions, one has to build this on a
|
||||
very old Linux distribution, since most Linux system libraries are
|
||||
usually backward compatible but not forward compatible. This is
|
||||
currently done on an Ubuntu 20.04LTS system. Once LAMMPS moves to
|
||||
require CMake 3.20 and C++17, we will have to move to Ubuntu 22.04LTS.
|
||||
This installation (either on a real or a virtual machine) should have
|
||||
the packages installed that are indicated in
|
||||
`tools/singularity/ubuntu20.04.def` plus Qt version 5.x with development
|
||||
headers, so that LAMMPS-GUI can be compiled.
|
||||
|
||||
Also the building of the binary tarball and setup of the bundled
|
||||
libraries and wrapper scripts is automated and can executed with `cmake
|
||||
--build build --target tgz`. This should produce a file
|
||||
`LAMMPS_GUI-Linux-amd64-4Feb2025.tar.gz` which can be uploaded to the
|
||||
GitHub release page with:
|
||||
|
||||
``` sh
|
||||
ln -sf LAMMPS_GUI-Linux-amd64-4Feb2025.tar.gz LAMMPS-Linux-x86_64-GUI-4Feb2025.tar.gz
|
||||
gh release upload patch_4Feb2025 LAMMPS-Linux-x86_64-GUI-4Feb2025.tar.gz
|
||||
```
|
||||
|
||||
### Update download page on LAMMPS website
|
||||
|
||||
Check out the LAMMPS website repo
|
||||
https://github.com/lammps/lammps-website.git and edit the file
|
||||
`src/download.txt` for the new release. Test translation with `make
|
||||
html` and review `html/download.html` Then add and commit to git and
|
||||
push the changes to GitHub. The Temple Jenkis cluster will
|
||||
automatically update https://www.lammps.org/download.html accordingly.
|
||||
|
||||
Also notify Steve of the release so he can update `src/bug.txt` on the
|
||||
website from the available release notes.
|
||||
|
||||
## LAMMPS Stable Release
|
||||
|
||||
A LAMMPS stable release is prepared about once per year in the months
|
||||
July, August, or September. One (or two, if needed) feature releases
|
||||
before the stable release shall contain only bug fixes or minor feature
|
||||
updates in optional packages. Also substantial changes to the core of
|
||||
the code shall be applied rather toward the beginning of a development
|
||||
cycle between two stable releases than toward the end. The intention is
|
||||
to stablilize significant change to the core and have outside users and
|
||||
developers try them out during the development cycle; the sooner the
|
||||
changes are included, the better chances for spotting peripheral bugs
|
||||
and issues.
|
||||
|
||||
### Prerequesites
|
||||
|
||||
Before making a stable release all remaining backported bugfixes shall
|
||||
be released as a (final) stable update release (see below).
|
||||
|
||||
A LAMMPS stable release process starts like a feature release (see
|
||||
above), only that this feature release is called a "Stable Release
|
||||
Candidate" and no assets are uploaded to GitHub.
|
||||
|
||||
### Synchronize 'maintenance' branch with 'release'
|
||||
|
||||
The state of the 'release' branch is then transferred to the
|
||||
'maintenance' branch (which will have diverged significantly from
|
||||
'release' due to the selectively backported bug fixes).
|
||||
|
||||
### Fast-forward merge of 'maintenance' into 'stable' and apply tag
|
||||
|
||||
At this point it should be possible to do a fast-forward merge of
|
||||
'maintenance' to 'stable' and then apply the stable\_DMmmYYYY tag.
|
||||
|
||||
### Push branches and tags
|
||||
|
||||
## LAMMPS Stable Update Release
|
||||
|
||||
After making a stable release, bugfixes from the 'develop' branch
|
||||
are selectively backported to the 'maintenance' branch. This is
|
||||
done with "git cherry-pick \<commit hash\>' wherever possible.
|
||||
The LAMMPS\_UPDATE define in "src/version.h" is set to "Maintenance".
|
||||
|
||||
### Prerequesites
|
||||
|
||||
When a sufficient number of bugfixes has accumulated or an urgent
|
||||
or important bugfix needs to be distributed a new stable update
|
||||
release is made. To make this publicly visible a pull request
|
||||
is submitted that will merge 'maintenance' into 'stable'. Before
|
||||
merging, set LAMMPS\_UPDATE in "src/version.h" to "Update #" with
|
||||
"#" indicating the update count (1, 2, and so on).
|
||||
Also draft suitable release notes under https://github.com/lammps/lammps/releases
|
||||
|
||||
### Fast-forward merge of 'maintenance' into 'stable', apply tag, and publish
|
||||
|
||||
Do a fast-forward merge of 'maintenance' to 'stable' and then
|
||||
apply the stable\_DMmmYYYY\_update# tag and push branch and tag
|
||||
to GitHub. The corresponding pull request will be automatically
|
||||
closed. Example:
|
||||
|
||||
```
|
||||
git checkout maintenance
|
||||
git pull
|
||||
git checkout stable
|
||||
git pull
|
||||
git merge --ff-only maintenance
|
||||
git tag -s -m 'Update 2 for Stable LAMMPS version 29 August 2024' stable_29Aug2024_update2
|
||||
git push git@github.com:lammps/lammps.git --tags maintenance stable
|
||||
```
|
||||
|
||||
Associate draft release notes with new tag and publish as "latest release".
|
||||
|
||||
On https://ci.lammps.org/ go to "dev", "stable" and manually execute
|
||||
the "update\_release" task. This will update https://docs.lammps.org/stable
|
||||
and prepare a stable tarball.
|
||||
|
||||
### Build and upload binary packages and source tarball to GitHub
|
||||
|
||||
The build procedure is the same as for the feature releases, only
|
||||
that packages are built from the 'stable' branch.
|
||||
92
.github/workflows/check-cpp23.yml
vendored
92
.github/workflows/check-cpp23.yml
vendored
@ -1,92 +0,0 @@
|
||||
# GitHub action to build LAMMPS on Linux with gcc and C++23
|
||||
name: "Check for C++23 Compatibility"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- develop
|
||||
pull_request:
|
||||
branches:
|
||||
- develop
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build with C++23 support enabled
|
||||
if: ${{ github.repository == 'lammps/lammps' }}
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 2
|
||||
|
||||
- name: Install extra packages
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y ccache \
|
||||
libeigen3-dev \
|
||||
libcurl4-openssl-dev \
|
||||
mold \
|
||||
mpi-default-bin \
|
||||
mpi-default-dev \
|
||||
ninja-build \
|
||||
python3-dev
|
||||
|
||||
- name: Create Build Environment
|
||||
run: mkdir build
|
||||
|
||||
- name: Set up ccache
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: linux-cpp23-ccache-${{ github.sha }}
|
||||
restore-keys: linux-cpp23-ccache-
|
||||
|
||||
- name: Building LAMMPS via CMake
|
||||
shell: bash
|
||||
run: |
|
||||
ccache -z
|
||||
python3 -m venv linuxenv
|
||||
source linuxenv/bin/activate
|
||||
python3 -m pip install numpy
|
||||
python3 -m pip install pyyaml
|
||||
cmake -S cmake -B build \
|
||||
-C cmake/presets/most.cmake \
|
||||
-C cmake/presets/kokkos-openmp.cmake \
|
||||
-D CMAKE_CXX_STANDARD=23 \
|
||||
-D CMAKE_CXX_COMPILER=g++ \
|
||||
-D CMAKE_C_COMPILER=gcc \
|
||||
-D CMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
||||
-D CMAKE_C_COMPILER_LAUNCHER=ccache \
|
||||
-D CMAKE_BUILD_TYPE=Debug \
|
||||
-D CMAKE_CXX_FLAGS_DEBUG="-Og -g" \
|
||||
-D DOWNLOAD_POTENTIALS=off \
|
||||
-D BUILD_MPI=on \
|
||||
-D BUILD_SHARED_LIBS=on \
|
||||
-D BUILD_TOOLS=off \
|
||||
-D ENABLE_TESTING=off \
|
||||
-D MLIAP_ENABLE_ACE=on \
|
||||
-D MLIAP_ENABLE_PYTHON=off \
|
||||
-D PKG_AWPMD=on \
|
||||
-D PKG_GPU=on \
|
||||
-D GPU_API=opencl \
|
||||
-D PKG_KOKKOS=on \
|
||||
-D PKG_LATBOLTZ=on \
|
||||
-D PKG_MDI=on \
|
||||
-D PKG_MANIFOLD=on \
|
||||
-D PKG_ML-PACE=on \
|
||||
-D PKG_ML-RANN=off \
|
||||
-D PKG_MOLFILE=on \
|
||||
-D PKG_RHEO=on \
|
||||
-D PKG_PTM=on \
|
||||
-D PKG_PYTHON=on \
|
||||
-D PKG_QTB=on \
|
||||
-D PKG_SMTBQ=on \
|
||||
-G Ninja
|
||||
cmake --build build
|
||||
ccache -s
|
||||
89
.github/workflows/check-vla.yml
vendored
89
.github/workflows/check-vla.yml
vendored
@ -1,89 +0,0 @@
|
||||
# GitHub action to build LAMMPS on Linux with gcc and -Werror=vla
|
||||
name: "Check for Variable Length Arrays"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- develop
|
||||
pull_request:
|
||||
branches:
|
||||
- develop
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build with -Werror=vla
|
||||
if: ${{ github.repository == 'lammps/lammps' }}
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 2
|
||||
|
||||
- name: Install extra packages
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y ccache \
|
||||
libeigen3-dev \
|
||||
libcurl4-openssl-dev \
|
||||
mold \
|
||||
mpi-default-bin \
|
||||
mpi-default-dev \
|
||||
ninja-build \
|
||||
python3-dev
|
||||
|
||||
- name: Create Build Environment
|
||||
run: mkdir build
|
||||
|
||||
- name: Set up ccache
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: linux-vla-ccache-${{ github.sha }}
|
||||
restore-keys: linux-vla-ccache-
|
||||
|
||||
- name: Building LAMMPS via CMake
|
||||
shell: bash
|
||||
run: |
|
||||
ccache -z
|
||||
python3 -m venv linuxenv
|
||||
source linuxenv/bin/activate
|
||||
python3 -m pip install numpy
|
||||
python3 -m pip install pyyaml
|
||||
cmake -S cmake -B build \
|
||||
-C cmake/presets/most.cmake \
|
||||
-D CMAKE_CXX_COMPILER=g++ \
|
||||
-D CMAKE_C_COMPILER=gcc \
|
||||
-D CMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
||||
-D CMAKE_C_COMPILER_LAUNCHER=ccache \
|
||||
-D CMAKE_BUILD_TYPE=Debug \
|
||||
-D CMAKE_CXX_FLAGS_DEBUG="-Og -g -Werror=vla" \
|
||||
-D DOWNLOAD_POTENTIALS=off \
|
||||
-D BUILD_MPI=on \
|
||||
-D BUILD_SHARED_LIBS=off \
|
||||
-D BUILD_TOOLS=off \
|
||||
-D ENABLE_TESTING=off \
|
||||
-D MLIAP_ENABLE_ACE=on \
|
||||
-D MLIAP_ENABLE_PYTHON=off \
|
||||
-D PKG_AWPMD=on \
|
||||
-D PKG_GPU=on \
|
||||
-D GPU_API=opencl \
|
||||
-D PKG_LATBOLTZ=on \
|
||||
-D PKG_MDI=on \
|
||||
-D PKG_MANIFOLD=on \
|
||||
-D PKG_ML-PACE=on \
|
||||
-D PKG_ML-RANN=on \
|
||||
-D PKG_MOLFILE=on \
|
||||
-D PKG_RHEO=on \
|
||||
-D PKG_PTM=on \
|
||||
-D PKG_PYTHON=on \
|
||||
-D PKG_QTB=on \
|
||||
-D PKG_SMTBQ=on \
|
||||
-G Ninja
|
||||
cmake --build build
|
||||
ccache -s
|
||||
51
.github/workflows/compile-msvc.yml
vendored
51
.github/workflows/compile-msvc.yml
vendored
@ -1,5 +1,5 @@
|
||||
# GitHub action to test LAMMPS on Windows with Visual C++
|
||||
name: "Windows Unit Tests"
|
||||
# GitHub action to build LAMMPS on Windows with Visual C++
|
||||
name: "Native Windows Compilation and Unit Tests"
|
||||
|
||||
on:
|
||||
push:
|
||||
@ -11,17 +11,11 @@ on:
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.event_name }}-${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{github.event_name == 'pull_request'}}
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Windows Compilation Test
|
||||
if: ${{ github.repository == 'lammps/lammps' }}
|
||||
runs-on: windows-latest
|
||||
env:
|
||||
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
@ -29,41 +23,36 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 2
|
||||
|
||||
- name: Enable MSVC++
|
||||
uses: lammps/setup-msvc-dev@v3
|
||||
with:
|
||||
arch: x64
|
||||
|
||||
- name: Install Ccache
|
||||
run: |
|
||||
choco install ccache ninja -y
|
||||
|
||||
- name: Set up ccache
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: win-unit-ccache-${{ github.sha }}
|
||||
restore-keys: win-unit-ccache-
|
||||
|
||||
- name: Select Python version
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.11'
|
||||
|
||||
- name: Building LAMMPS via CMake
|
||||
shell: bash
|
||||
run: |
|
||||
ccache -z
|
||||
python3 -m pip install numpy
|
||||
python3 -m pip install pyyaml
|
||||
cmake -C cmake\presets\windows.cmake -D CMAKE_CXX_COMPILER=cl -D CMAKE_CXX_COMPILER_LAUNCHER=ccache -D CMAKE_C_COMPILER=cl -D CMAKE_C_COMPILER_LAUNCHER=ccache -D CMAKE_Fortran_COMPILER="" -D DOWNLOAD_POTENTIALS=off -D PKG_PYTHON=on -D WITH_PNG=off -D WITH_JPEG=off -S cmake -B build -D BUILD_SHARED_LIBS=on -D ENABLE_TESTING=on -D CMAKE_BUILD_TYPE=Release -G Ninja
|
||||
cmake --build build
|
||||
ccache -s
|
||||
nuget install MSMPIsdk
|
||||
nuget install MSMPIDIST
|
||||
cmake -C cmake/presets/windows.cmake \
|
||||
-D DOWNLOAD_POTENTIALS=off \
|
||||
-D PKG_PYTHON=on \
|
||||
-D WITH_PNG=off \
|
||||
-D WITH_JPEG=off \
|
||||
-S cmake -B build \
|
||||
-D BUILD_SHARED_LIBS=on \
|
||||
-D LAMMPS_EXCEPTIONS=on \
|
||||
-D ENABLE_TESTING=on
|
||||
cmake --build build --config Release --parallel 2
|
||||
|
||||
- name: Run LAMMPS executable
|
||||
shell: bash
|
||||
run: |
|
||||
build\lmp.exe -h
|
||||
build\lmp.exe -in bench\in.lj
|
||||
./build/Release/lmp.exe -h
|
||||
./build/Release/lmp.exe -in bench/in.lj
|
||||
|
||||
- name: Run Unit Tests
|
||||
working-directory: build
|
||||
run: ctest -V -E FixTimestep:python_move_nve
|
||||
shell: bash
|
||||
run: ctest -V -C Release -E FixTimestep:python_move_nve
|
||||
|
||||
1
.github/workflows/coverity.yml
vendored
1
.github/workflows/coverity.yml
vendored
@ -67,6 +67,7 @@ jobs:
|
||||
-D PKG_MANIFOLD=on \
|
||||
-D PKG_MDI=on \
|
||||
-D PKG_MGPT=on \
|
||||
-D PKG_ML-PACE=on \
|
||||
-D PKG_ML-RANN=on \
|
||||
-D PKG_MOLFILE=on \
|
||||
-D PKG_NETCDF=on \
|
||||
|
||||
109
.github/workflows/full-regression.yml
vendored
109
.github/workflows/full-regression.yml
vendored
@ -1,109 +0,0 @@
|
||||
# GitHub action to build LAMMPS on Linux and run regression tests
|
||||
name: "Full Regression Test"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- develop
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build LAMMPS
|
||||
# restrict to official LAMMPS repository
|
||||
if: ${{ github.repository == 'lammps/lammps' }}
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||
strategy:
|
||||
max-parallel: 8
|
||||
matrix:
|
||||
idx: [ 0, 1, 2, 3, 4, 5, 6, 7 ]
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 2
|
||||
show-progress: false
|
||||
|
||||
- name: Install extra packages
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y ccache ninja-build libeigen3-dev \
|
||||
libcurl4-openssl-dev python3-dev \
|
||||
mpi-default-bin mpi-default-dev
|
||||
|
||||
- name: Create Build Environment
|
||||
run: mkdir build
|
||||
|
||||
- name: Set up ccache
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: linux-full-ccache-${{ github.sha }}
|
||||
restore-keys: linux-full-ccache-
|
||||
|
||||
- name: Building LAMMPS via CMake
|
||||
shell: bash
|
||||
run: |
|
||||
ccache -z
|
||||
python3 -m venv linuxenv
|
||||
source linuxenv/bin/activate
|
||||
python3 -m pip install --upgrade pip
|
||||
python3 -m pip install numpy pyyaml junit_xml
|
||||
cmake -S cmake -B build \
|
||||
-C cmake/presets/gcc.cmake \
|
||||
-C cmake/presets/most.cmake \
|
||||
-D CMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
||||
-D CMAKE_C_COMPILER_LAUNCHER=ccache \
|
||||
-D BUILD_SHARED_LIBS=off \
|
||||
-D DOWNLOAD_POTENTIALS=off \
|
||||
-D PKG_MANIFOLD=on \
|
||||
-D PKG_ML-PACE=on \
|
||||
-D PKG_ML-RANN=on \
|
||||
-D PKG_RHEO=on \
|
||||
-D PKG_PTM=on \
|
||||
-D PKG_PYTHON=on \
|
||||
-D PKG_QTB=on \
|
||||
-D PKG_SMTBQ=on \
|
||||
-G Ninja
|
||||
cmake --build build
|
||||
ccache -s
|
||||
|
||||
- name: Run Full Regression Tests
|
||||
shell: bash
|
||||
run: |
|
||||
source linuxenv/bin/activate
|
||||
python3 tools/regression-tests/run_tests.py \
|
||||
--lmp-bin=build/lmp \
|
||||
--config-file=tools/regression-tests/config_serial.yaml \
|
||||
--examples-top-level=examples --analyze --num-workers=8
|
||||
|
||||
python3 tools/regression-tests/run_tests.py \
|
||||
--lmp-bin=build/lmp \
|
||||
--config-file=tools/regression-tests/config_serial.yaml \
|
||||
--list-input=input-list-${{ matrix.idx }}.txt \
|
||||
--output-file=output-${{ matrix.idx }}.xml \
|
||||
--progress-file=progress-${{ matrix.idx }}.yaml \
|
||||
--log-file=run-${{ matrix.idx }}.log
|
||||
|
||||
tar -cvf full-regression-test-${{ matrix.idx }}.tar run-${{ matrix.idx }}.log progress-${{ matrix.idx }}.yaml output-${{ matrix.idx }}.xml
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: full-regression-test-artifact-${{ matrix.idx }}
|
||||
path: full-regression-test-${{ matrix.idx }}.tar
|
||||
|
||||
merge:
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
steps:
|
||||
- name: Merge Artifacts
|
||||
uses: actions/upload-artifact/merge@v4
|
||||
with:
|
||||
name: merged-full-regresssion-artifact
|
||||
pattern: full-regression-test-artifact-*
|
||||
|
||||
126
.github/workflows/kokkos-regression.yaml
vendored
126
.github/workflows/kokkos-regression.yaml
vendored
@ -1,126 +0,0 @@
|
||||
# GitHub action to build LAMMPS on Linux and run selected regression tests
|
||||
name: "Kokkos OpenMP Regression Test"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- develop
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build LAMMPS with Kokkos OpenMP
|
||||
# restrict to official LAMMPS repository
|
||||
if: ${{ github.repository == 'lammps/lammps' }}
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||
strategy:
|
||||
max-parallel: 6
|
||||
matrix:
|
||||
idx: [ 'pair-0', 'pair-1', 'fix-0', 'fix-1', 'compute', 'misc' ]
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 2
|
||||
show-progress: false
|
||||
|
||||
- name: Install extra packages
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y ccache ninja-build libeigen3-dev \
|
||||
libcurl4-openssl-dev python3-dev \
|
||||
mpi-default-bin mpi-default-dev
|
||||
|
||||
- name: Create Build Environment
|
||||
run: mkdir build
|
||||
|
||||
- name: Set up ccache
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: linux-kokkos-ccache-${{ github.sha }}
|
||||
restore-keys: linux-kokkos-ccache-
|
||||
|
||||
- name: Building LAMMPS via CMake
|
||||
shell: bash
|
||||
run: |
|
||||
ccache -z
|
||||
python3 -m venv linuxenv
|
||||
source linuxenv/bin/activate
|
||||
python3 -m pip install --upgrade pip
|
||||
python3 -m pip install numpy pyyaml junit_xml
|
||||
cmake -S cmake -B build \
|
||||
-C cmake/presets/gcc.cmake \
|
||||
-C cmake/presets/basic.cmake \
|
||||
-C cmake/presets/kokkos-openmp.cmake \
|
||||
-D CMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
||||
-D CMAKE_C_COMPILER_LAUNCHER=ccache \
|
||||
-D BUILD_SHARED_LIBS=off \
|
||||
-D DOWNLOAD_POTENTIALS=off \
|
||||
-D PKG_AMOEBA=on \
|
||||
-D PKG_ASPHERE=on \
|
||||
-D PKG_BROWNIAN=on \
|
||||
-D PKG_CLASS2=on \
|
||||
-D PKG_COLLOID=on \
|
||||
-D PKG_CORESHELL=on \
|
||||
-D PKG_DIPOLE=on \
|
||||
-D PKG_DPD-BASIC=on \
|
||||
-D PKG_EXTRA-COMPUTE=on \
|
||||
-D PKG_EXTRA-FIX=on \
|
||||
-D PKG_EXTRA-MOLECULE=on \
|
||||
-D PKG_EXTRA-PAIR=on \
|
||||
-D PKG_GRANULAR=on \
|
||||
-D PKG_LEPTON=on \
|
||||
-D PKG_MC=on \
|
||||
-D PKG_MEAM=on \
|
||||
-D PKG_POEMS=on \
|
||||
-D PKG_PYTHON=on \
|
||||
-D PKG_QEQ=on \
|
||||
-D PKG_REAXFF=on \
|
||||
-D PKG_REPLICA=on \
|
||||
-D PKG_SRD=on \
|
||||
-D PKG_SPH=on \
|
||||
-D PKG_VORONOI=on \
|
||||
-G Ninja
|
||||
cmake --build build
|
||||
ccache -s
|
||||
|
||||
- name: Run Regression Tests for Selected Examples
|
||||
shell: bash
|
||||
run: |
|
||||
source linuxenv/bin/activate
|
||||
python3 tools/regression-tests/get_kokkos_input.py \
|
||||
--examples-top-level=examples --batch-size=50 \
|
||||
--filter-out="balance;fire;gcmc;granregion;hyper;mc;mdi;mliap;neb;pace;prd;pour;python;rigid;snap;streitz;shear;ttm"
|
||||
|
||||
export OMP_PROC_BIND=false
|
||||
python3 tools/regression-tests/run_tests.py \
|
||||
--lmp-bin=build/lmp \
|
||||
--config-file=tools/regression-tests/config_kokkos_openmp.yaml \
|
||||
--list-input=input-list-${{ matrix.idx }}-kk.txt \
|
||||
--output-file=output-${{ matrix.idx }}.xml \
|
||||
--progress-file=progress-${{ matrix.idx }}.yaml \
|
||||
--log-file=run-${{ matrix.idx }}.log \
|
||||
--quick-max=100
|
||||
|
||||
tar -cvf kokkos-regression-test-${{ matrix.idx }}.tar run-${{ matrix.idx }}.log progress-${{ matrix.idx }}.yaml output-${{ matrix.idx }}.xml
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: kokkos-regression-test-artifact-${{ matrix.idx }}
|
||||
path: kokkos-regression-test-${{ matrix.idx }}.tar
|
||||
|
||||
merge:
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
steps:
|
||||
- name: Merge Artifacts
|
||||
uses: actions/upload-artifact/merge@v4
|
||||
with:
|
||||
name: merged-kokkos-regresssion-artifact
|
||||
pattern: kokkos-regression-test-artifact-*
|
||||
53
.github/workflows/lammps-gui-flatpak.yml
vendored
53
.github/workflows/lammps-gui-flatpak.yml
vendored
@ -1,53 +0,0 @@
|
||||
# GitHub action to build LAMMPS-GUI as a flatpak bundle
|
||||
name: "Build LAMMPS-GUI as flatpak bundle"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- develop
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.event_name }}-${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{github.event_name == 'pull_request'}}
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: LAMMPS-GUI flatpak build
|
||||
if: ${{ github.repository == 'lammps/lammps' }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 2
|
||||
|
||||
- name: Install extra packages
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y ccache \
|
||||
libeigen3-dev \
|
||||
libcurl4-openssl-dev \
|
||||
mold \
|
||||
ninja-build \
|
||||
python3-dev \
|
||||
flatpak \
|
||||
flatpak-builder
|
||||
|
||||
- name: Set up access to flatpak repo
|
||||
run: flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
|
||||
|
||||
- name: Build flatpak
|
||||
run: |
|
||||
mkdir flatpack-state
|
||||
sed -i -e 's/branch:.*/branch: develop/' tools/lammps-gui/org.lammps.lammps-gui.yml
|
||||
flatpak-builder --force-clean --verbose --repo=flatpak-repo \
|
||||
--install-deps-from=flathub --state-dir=flatpak-state \
|
||||
--user --ccache --default-branch=${{ github.ref_name }} \
|
||||
flatpak-build tools/lammps-gui/org.lammps.lammps-gui.yml
|
||||
flatpak build-bundle --runtime-repo=https://flathub.org/repo/flathub.flatpakrepo \
|
||||
--verbose flatpak-repo LAMMPS-Linux-x86_64-GUI.flatpak \
|
||||
org.lammps.lammps-gui ${{ github.ref_name }}
|
||||
flatpak install -y -v --user LAMMPS-Linux-x86_64-GUI.flatpak
|
||||
118
.github/workflows/quick-regression.yml
vendored
118
.github/workflows/quick-regression.yml
vendored
@ -1,118 +0,0 @@
|
||||
# GitHub action to build LAMMPS on Linux and run selected regression tests
|
||||
name: "Quick Regression Test"
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- develop
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.event_name }}-${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{github.event_name == 'pull_request'}}
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build LAMMPS
|
||||
# restrict to official LAMMPS repository
|
||||
if: ${{ github.repository == 'lammps/lammps' }}
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||
strategy:
|
||||
max-parallel: 4
|
||||
matrix:
|
||||
idx: [ 0, 1, 2, 3 ]
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
show-progress: false
|
||||
|
||||
- name: Install extra packages
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y ccache ninja-build libeigen3-dev \
|
||||
libcurl4-openssl-dev python3-dev \
|
||||
mpi-default-bin mpi-default-dev
|
||||
|
||||
- name: Create Build Environment
|
||||
run: mkdir build
|
||||
|
||||
- name: Set up ccache
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: linux-quick-ccache-${{ github.sha }}
|
||||
restore-keys: linux-quick-ccache-
|
||||
|
||||
- name: Building LAMMPS via CMake
|
||||
shell: bash
|
||||
run: |
|
||||
ccache -z
|
||||
python3 -m venv linuxenv
|
||||
source linuxenv/bin/activate
|
||||
python3 -m pip install --upgrade pip
|
||||
python3 -m pip install numpy pyyaml junit_xml
|
||||
cmake -S cmake -B build \
|
||||
-C cmake/presets/gcc.cmake \
|
||||
-C cmake/presets/most.cmake \
|
||||
-D CMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
||||
-D CMAKE_C_COMPILER_LAUNCHER=ccache \
|
||||
-D BUILD_SHARED_LIBS=off \
|
||||
-D DOWNLOAD_POTENTIALS=off \
|
||||
-D PKG_MANIFOLD=on \
|
||||
-D PKG_ML-PACE=on \
|
||||
-D PKG_ML-RANN=on \
|
||||
-D PKG_RHEO=on \
|
||||
-D PKG_PTM=on \
|
||||
-D PKG_PYTHON=on \
|
||||
-D PKG_QTB=on \
|
||||
-D PKG_SMTBQ=on \
|
||||
-G Ninja
|
||||
cmake --build build
|
||||
ccache -s
|
||||
|
||||
- name: Run Regression Tests for Modified Styles
|
||||
shell: bash
|
||||
run: |
|
||||
source linuxenv/bin/activate
|
||||
python3 tools/regression-tests/run_tests.py \
|
||||
--lmp-bin=build/lmp \
|
||||
--config-file=tools/regression-tests/config_quick.yaml \
|
||||
--examples-top-level=examples \
|
||||
--quick-reference=tools/regression-tests/reference.yaml \
|
||||
--quick --quick-branch=origin/develop --quick-max=100 --num-workers=4
|
||||
|
||||
if [ -f input-list-${{ matrix.idx }}.txt ]
|
||||
then \
|
||||
python3 tools/regression-tests/run_tests.py \
|
||||
--lmp-bin=build/lmp \
|
||||
--config-file=tools/regression-tests/config_quick.yaml \
|
||||
--list-input=input-list-${{ matrix.idx }}.txt \
|
||||
--output-file=output-${{ matrix.idx }}.xml \
|
||||
--progress-file=progress-${{ matrix.idx }}.yaml \
|
||||
--log-file=run-${{ matrix.idx }}.log
|
||||
fi
|
||||
|
||||
tar -cvf quick-regression-test-${{ matrix.idx }}.tar run-${{ matrix.idx }}.log progress-${{ matrix.idx }}.yaml output-${{ matrix.idx }}.xml
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: quick-regression-test-artifact-${{ matrix.idx }}
|
||||
path: quick-regression-test-${{ matrix.idx }}.tar
|
||||
|
||||
merge:
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
steps:
|
||||
- name: Merge Artifacts
|
||||
uses: actions/upload-artifact/merge@v4
|
||||
with:
|
||||
name: merged-quick-regresssion-artifact
|
||||
pattern: quick-regression-test-artifact-*
|
||||
|
||||
38
.github/workflows/style-check.yml
vendored
38
.github/workflows/style-check.yml
vendored
@ -1,38 +0,0 @@
|
||||
# GitHub action to run checks from tools/coding_standard
|
||||
name: "Check for Programming Style Conformance"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- develop
|
||||
pull_request:
|
||||
branches:
|
||||
- develop
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.event_name }}-${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{github.event_name == 'pull_request'}}
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Programming Style Conformance
|
||||
if: ${{ github.repository == 'lammps/lammps' }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Run Tests
|
||||
working-directory: src
|
||||
shell: bash
|
||||
run: |
|
||||
make check-whitespace
|
||||
make check-permissions
|
||||
make check-homepage
|
||||
make check-errordocs
|
||||
make check-fmtlib
|
||||
81
.github/workflows/unittest-arm64.yml
vendored
81
.github/workflows/unittest-arm64.yml
vendored
@ -1,81 +0,0 @@
|
||||
# GitHub action to build LAMMPS on Linux with ARM64 and run standard unit tests
|
||||
name: "Unittest for Linux on ARM64"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [develop]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.event_name }}-${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{github.event_name == 'pull_request'}}
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Linux ARM64 Unit Test
|
||||
if: ${{ github.repository == 'lammps/lammps' }}
|
||||
runs-on: ubuntu-22.04-arm
|
||||
env:
|
||||
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 2
|
||||
|
||||
- name: Install extra packages
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y ccache \
|
||||
libeigen3-dev \
|
||||
libcurl4-openssl-dev \
|
||||
mold \
|
||||
ninja-build \
|
||||
python3-dev
|
||||
|
||||
- name: Create Build Environment
|
||||
run: mkdir build
|
||||
|
||||
- name: Set up ccache
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: linux-unit-ccache-${{ github.sha }}
|
||||
restore-keys: linux-unit-ccache-
|
||||
|
||||
- name: Building LAMMPS via CMake
|
||||
shell: bash
|
||||
run: |
|
||||
ccache -z
|
||||
python3 -m venv linuxenv
|
||||
source linuxenv/bin/activate
|
||||
python3 -m pip install numpy
|
||||
python3 -m pip install pyyaml
|
||||
cmake -S cmake -B build \
|
||||
-C cmake/presets/gcc.cmake \
|
||||
-C cmake/presets/most.cmake \
|
||||
-D CMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
||||
-D CMAKE_C_COMPILER_LAUNCHER=ccache \
|
||||
-D BUILD_SHARED_LIBS=on \
|
||||
-D DOWNLOAD_POTENTIALS=off \
|
||||
-D ENABLE_TESTING=on \
|
||||
-D MLIAP_ENABLE_ACE=on \
|
||||
-D MLIAP_ENABLE_PYTHON=off \
|
||||
-D PKG_MANIFOLD=on \
|
||||
-D PKG_ML-PACE=on \
|
||||
-D PKG_ML-RANN=on \
|
||||
-D PKG_RHEO=on \
|
||||
-D PKG_PTM=on \
|
||||
-D PKG_PYTHON=on \
|
||||
-D PKG_QTB=on \
|
||||
-D PKG_SMTBQ=on \
|
||||
-G Ninja
|
||||
cmake --build build
|
||||
ccache -s
|
||||
|
||||
- name: Run Tests
|
||||
working-directory: build
|
||||
shell: bash
|
||||
run: ctest -V -LE unstable
|
||||
86
.github/workflows/unittest-linux.yml
vendored
86
.github/workflows/unittest-linux.yml
vendored
@ -1,86 +0,0 @@
|
||||
# GitHub action to build LAMMPS on Linux and run standard unit tests
|
||||
name: "Unittest for Linux /w LAMMPS_BIGBIG"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- develop
|
||||
pull_request:
|
||||
branches:
|
||||
- develop
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.event_name }}-${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{github.event_name == 'pull_request'}}
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Linux Unit Test
|
||||
if: ${{ github.repository == 'lammps/lammps' }}
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 2
|
||||
|
||||
- name: Install extra packages
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y ccache \
|
||||
libeigen3-dev \
|
||||
libcurl4-openssl-dev \
|
||||
mold \
|
||||
ninja-build \
|
||||
python3-dev
|
||||
|
||||
- name: Create Build Environment
|
||||
run: mkdir build
|
||||
|
||||
- name: Set up ccache
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: linux-unit-ccache-${{ github.sha }}
|
||||
restore-keys: linux-unit-ccache-
|
||||
|
||||
- name: Building LAMMPS via CMake
|
||||
shell: bash
|
||||
run: |
|
||||
ccache -z
|
||||
python3 -m venv linuxenv
|
||||
source linuxenv/bin/activate
|
||||
python3 -m pip install numpy
|
||||
python3 -m pip install pyyaml
|
||||
cmake -S cmake -B build \
|
||||
-C cmake/presets/gcc.cmake \
|
||||
-C cmake/presets/most.cmake \
|
||||
-D CMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
||||
-D CMAKE_C_COMPILER_LAUNCHER=ccache \
|
||||
-D BUILD_SHARED_LIBS=on \
|
||||
-D LAMMPS_SIZES=bigbig \
|
||||
-D DOWNLOAD_POTENTIALS=off \
|
||||
-D ENABLE_TESTING=on \
|
||||
-D MLIAP_ENABLE_ACE=on \
|
||||
-D MLIAP_ENABLE_PYTHON=off \
|
||||
-D PKG_MANIFOLD=on \
|
||||
-D PKG_ML-PACE=on \
|
||||
-D PKG_ML-RANN=on \
|
||||
-D PKG_RHEO=on \
|
||||
-D PKG_PTM=on \
|
||||
-D PKG_PYTHON=on \
|
||||
-D PKG_QTB=on \
|
||||
-D PKG_SMTBQ=on \
|
||||
-G Ninja
|
||||
cmake --build build
|
||||
ccache -s
|
||||
|
||||
- name: Run Tests
|
||||
working-directory: build
|
||||
shell: bash
|
||||
run: ctest -V
|
||||
4
.github/workflows/unittest-macos.yml
vendored
4
.github/workflows/unittest-macos.yml
vendored
@ -11,10 +11,6 @@ on:
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.event_name }}-${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{github.event_name == 'pull_request'}}
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: MacOS Unit Test
|
||||
|
||||
15
README
15
README
@ -23,20 +23,17 @@ more information about the code and its uses.
|
||||
The LAMMPS distribution includes the following files and directories:
|
||||
|
||||
README this file
|
||||
LICENSE the GNU General Public License (GPLv2)
|
||||
CITATION.cff Citation information for LAMMPS in CFF format
|
||||
bench benchmark inputs
|
||||
LICENSE the GNU General Public License (GPL)
|
||||
bench benchmark problems
|
||||
cmake CMake build files
|
||||
doc documentation
|
||||
examples example inputs for many LAMMPS commands
|
||||
fortran Fortran 2003 module for LAMMPS
|
||||
examples simple test problems
|
||||
fortran Fortran wrapper for LAMMPS
|
||||
lib additional provided or external libraries
|
||||
potentials interatomic potential files
|
||||
python Python module for LAMMPS
|
||||
python Python wrappers for LAMMPS
|
||||
src source files
|
||||
tools pre- and post-processing tools
|
||||
unittest test programs for use with CTest
|
||||
.github Git and GitHub related files and tools
|
||||
|
||||
Point your browser at any of these files to get started:
|
||||
|
||||
@ -45,8 +42,6 @@ https://docs.lammps.org/Intro.html hi-level introduction
|
||||
https://docs.lammps.org/Build.html how to build LAMMPS
|
||||
https://docs.lammps.org/Run_head.html how to run LAMMPS
|
||||
https://docs.lammps.org/Commands_all.html Table of available commands
|
||||
https://docs.lammps.org/Howto.html Short tutorials and HowTo discussions
|
||||
https://docs.lammps.org/Errors.html How to interpret and debug errors
|
||||
https://docs.lammps.org/Library.html LAMMPS library interfaces
|
||||
https://docs.lammps.org/Modify.html how to modify and extend LAMMPS
|
||||
https://docs.lammps.org/Developer.html LAMMPS developer info
|
||||
|
||||
@ -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()
|
||||
########################################
|
||||
# set policy to silence warnings about ignoring <PackageName>_ROOT but use it
|
||||
if(POLICY CMP0074)
|
||||
@ -121,7 +118,7 @@ endif()
|
||||
|
||||
# silence excessive warnings for new Intel Compilers
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM")
|
||||
set(CMAKE_TUNE_DEFAULT "-fp-model precise -Wno-tautological-constant-compare -Wno-unused-command-line-argument")
|
||||
set(CMAKE_TUNE_DEFAULT "-Wno-tautological-constant-compare -Wno-unused-command-line-argument")
|
||||
endif()
|
||||
|
||||
# silence excessive warnings for PGI/NVHPC compilers
|
||||
@ -144,31 +141,19 @@ endif()
|
||||
|
||||
# silence nvcc warnings
|
||||
if((PKG_KOKKOS) AND (Kokkos_ENABLE_CUDA) AND NOT (CMAKE_CXX_COMPILER_ID STREQUAL "Clang"))
|
||||
set(CMAKE_TUNE_DEFAULT "${CMAKE_TUNE_DEFAULT}" "-Xcudafe --diag_suppress=unrecognized_pragma,--diag_suppress=128")
|
||||
set(CMAKE_TUNE_DEFAULT "${CMAKE_TUNE_DEFAULT} -Xcudafe --diag_suppress=unrecognized_pragma")
|
||||
endif()
|
||||
|
||||
# we *require* C++11 without extensions but prefer C++17.
|
||||
# Kokkos requires at least C++17 (currently)
|
||||
# we require C++11 without extensions. Kokkos requires at least C++17 (currently)
|
||||
if(NOT CMAKE_CXX_STANDARD)
|
||||
if(cxx_std_17 IN_LIST CMAKE_CXX_COMPILE_FEATURES)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
else()
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
endif()
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
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()
|
||||
# turn off C++17 check in lmptype.h
|
||||
if(LAMMPS_CXX11)
|
||||
add_compile_definitions(LAMMPS_CXX11)
|
||||
endif()
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF CACHE BOOL "Use compiler extensions")
|
||||
# ugly hacks for MSVC which by default always reports an old C++ standard in the __cplusplus macro
|
||||
@ -180,7 +165,6 @@ if(MSVC)
|
||||
add_compile_options(/wd4267)
|
||||
add_compile_options(/wd4250)
|
||||
add_compile_options(/EHsc)
|
||||
add_compile_options(/utf-8)
|
||||
endif()
|
||||
add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
|
||||
endif()
|
||||
@ -209,7 +193,7 @@ endif()
|
||||
########################################################################
|
||||
# User input options #
|
||||
########################################################################
|
||||
# backward compatibility with older LAMMPS documentation
|
||||
# backward compatibility with CMake before 3.12 and older LAMMPS documentation
|
||||
if (PYTHON_EXECUTABLE)
|
||||
set(Python_EXECUTABLE "${PYTHON_EXECUTABLE}")
|
||||
endif()
|
||||
@ -225,12 +209,6 @@ if(DEFINED ENV{VIRTUAL_ENV} AND NOT Python_EXECUTABLE)
|
||||
" Setting Python interpreter to: ${Python_EXECUTABLE}")
|
||||
endif()
|
||||
|
||||
find_package(Python COMPONENTS Interpreter QUIET)
|
||||
# NOTE: RHEL 8.0 and Ubuntu 18.04LTS ship with Python 3.6, Python 3.8 was EOL in 2024
|
||||
if(Python_VERSION VERSION_LESS 3.6)
|
||||
message(FATAL_ERROR "LAMMPS requires Python 3.6 or later")
|
||||
endif()
|
||||
|
||||
set(LAMMPS_MACHINE "" CACHE STRING "Suffix to append to lmp binary (WON'T enable any features automatically")
|
||||
mark_as_advanced(LAMMPS_MACHINE)
|
||||
if(LAMMPS_MACHINE)
|
||||
@ -368,17 +346,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
|
||||
######################################################
|
||||
@ -431,8 +398,8 @@ else()
|
||||
target_link_libraries(lammps PUBLIC mpi_stubs)
|
||||
endif()
|
||||
|
||||
set(LAMMPS_SIZES "smallbig" CACHE STRING "LAMMPS integer sizes (smallbig: 64-bit #atoms #timesteps, bigbig: also 64-bit imageint, 64-bit atom ids)")
|
||||
set(LAMMPS_SIZES_VALUES smallbig bigbig)
|
||||
set(LAMMPS_SIZES "smallbig" CACHE STRING "LAMMPS integer sizes (smallsmall: all 32-bit, smallbig: 64-bit #atoms #timesteps, bigbig: also 64-bit imageint, 64-bit atom ids)")
|
||||
set(LAMMPS_SIZES_VALUES smallbig bigbig smallsmall)
|
||||
set_property(CACHE LAMMPS_SIZES PROPERTY STRINGS ${LAMMPS_SIZES_VALUES})
|
||||
validate_option(LAMMPS_SIZES LAMMPS_SIZES_VALUES)
|
||||
string(TOUPPER ${LAMMPS_SIZES} LAMMPS_SIZES)
|
||||
@ -530,7 +497,7 @@ if((CMAKE_CXX_COMPILER_ID STREQUAL "Intel") AND (CMAKE_CXX_STANDARD GREATER_EQUA
|
||||
PROPERTIES COMPILE_OPTIONS "-std=c++14")
|
||||
endif()
|
||||
|
||||
if(PKG_ATC OR PKG_AWPMD OR PKG_ML-QUIP OR PKG_ML-POD OR PKG_ELECTRODE OR PKG_RHEO OR BUILD_TOOLS)
|
||||
if(PKG_ATC OR PKG_AWPMD OR PKG_ML-QUIP OR PKG_ML-POD OR PKG_ELECTRODE OR BUILD_TOOLS)
|
||||
enable_language(C)
|
||||
if (NOT USE_INTERNAL_LINALG)
|
||||
find_package(LAPACK)
|
||||
@ -548,6 +515,22 @@ if(PKG_ATC OR PKG_AWPMD OR PKG_ML-QUIP OR PKG_ML-POD OR PKG_ELECTRODE OR PKG_RHE
|
||||
endif()
|
||||
endif()
|
||||
|
||||
find_package(CURL QUIET)
|
||||
option(WITH_CURL "Enable libcurl support" ${CURL_FOUND})
|
||||
if(WITH_CURL)
|
||||
target_compile_definitions(lammps PRIVATE -DLAMMPS_CURL)
|
||||
|
||||
# need to use pkgconfig for fully static bins to find custom static libs
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "LinuxMUSL")
|
||||
include(FindPkgConfig)
|
||||
pkg_check_modules(CURL IMPORTED_TARGET libcurl libssl libcrypto)
|
||||
target_link_libraries(lammps PUBLIC PkgConfig::CURL)
|
||||
else()
|
||||
find_package(CURL REQUIRED)
|
||||
target_link_libraries(lammps PRIVATE CURL::libcurl)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# tweak jpeg library names to avoid linker errors with MinGW cross-compilation
|
||||
set(JPEG_NAMES libjpeg libjpeg-62)
|
||||
find_package(JPEG QUIET)
|
||||
@ -605,22 +588,12 @@ else()
|
||||
endif()
|
||||
|
||||
foreach(PKG_WITH_INCL KSPACE PYTHON ML-IAP VORONOI COLVARS ML-HDNNP MDI MOLFILE NETCDF
|
||||
PLUMED QMMM ML-QUIP SCAFACOS MACHDYN VTK KIM COMPRESS ML-PACE LEPTON EXTRA-COMMAND)
|
||||
PLUMED QMMM ML-QUIP SCAFACOS MACHDYN VTK KIM COMPRESS ML-PACE LEPTON RHEO)
|
||||
if(PKG_${PKG_WITH_INCL})
|
||||
include(Packages/${PKG_WITH_INCL})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
# settings for misc packages and styles
|
||||
if(PKG_MISC)
|
||||
option(LAMMPS_ASYNC_IMD "Asynchronous IMD processing" OFF)
|
||||
mark_as_advanced(LAMMPS_ASYNC_IMD)
|
||||
if(LAMMPS_ASYNC_IMD)
|
||||
target_compile_definitions(lammps PRIVATE -DLAMMPS_ASYNC_IMD)
|
||||
message(STATUS "Using IMD in asynchronous mode")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# optionally enable building script wrappers using swig
|
||||
option(WITH_SWIG "Build scripting language wrappers with SWIG" OFF)
|
||||
if(WITH_SWIG)
|
||||
@ -630,8 +603,13 @@ endif()
|
||||
|
||||
set(CMAKE_TUNE_FLAGS "${CMAKE_TUNE_DEFAULT}" CACHE STRING "Compiler and machine specific optimization flags (compilation only)")
|
||||
separate_arguments(CMAKE_TUNE_FLAGS)
|
||||
target_compile_options(lammps PRIVATE ${CMAKE_TUNE_FLAGS})
|
||||
target_compile_options(lmp PRIVATE ${CMAKE_TUNE_FLAGS})
|
||||
foreach(_FLAG ${CMAKE_TUNE_FLAGS})
|
||||
target_compile_options(lammps PRIVATE ${_FLAG})
|
||||
# skip these flags when linking the main executable
|
||||
if(NOT (("${_FLAG}" STREQUAL "-Xcudafe") OR (("${_FLAG}" STREQUAL "--diag_suppress=unrecognized_pragma"))))
|
||||
target_compile_options(lmp PRIVATE ${_FLAG})
|
||||
endif()
|
||||
endforeach()
|
||||
########################################################################
|
||||
# Basic system tests (standard libraries, headers, functions, types) #
|
||||
########################################################################
|
||||
@ -860,15 +838,9 @@ foreach(_DEF ${LAMMPS_DEFINES})
|
||||
set(LAMMPS_API_DEFINES "${LAMMPS_API_DEFINES} -D${_DEF}")
|
||||
endforeach()
|
||||
if(BUILD_SHARED_LIBS)
|
||||
install(TARGETS lammps EXPORT LAMMPS_Targets
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
install(TARGETS lammps EXPORT LAMMPS_Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||
if(NOT BUILD_MPI)
|
||||
install(TARGETS mpi_stubs EXPORT LAMMPS_Targets
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
install(TARGETS mpi_stubs EXPORT LAMMPS_Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||
endif()
|
||||
configure_file(pkgconfig/liblammps.pc.in ${CMAKE_CURRENT_BINARY_DIR}/liblammps${LAMMPS_MACHINE}.pc @ONLY)
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/liblammps${LAMMPS_MACHINE}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
||||
@ -936,7 +908,7 @@ endif()
|
||||
include(Testing)
|
||||
include(CodeCoverage)
|
||||
include(CodingStandard)
|
||||
find_package(ClangFormat 11.0 QUIET)
|
||||
find_package(ClangFormat 11.0)
|
||||
|
||||
if(ClangFormat_FOUND)
|
||||
add_custom_target(format-src
|
||||
@ -1009,9 +981,6 @@ message(STATUS "<<< Compilers and Flags: >>>
|
||||
C++ Standard: ${CMAKE_CXX_STANDARD}
|
||||
C++ Flags: ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}}
|
||||
Defines: ${DEFINES}")
|
||||
if(CMAKE_CXX_COMPILER_LAUNCHER)
|
||||
message(STATUS " Launcher: ${CMAKE_CXX_COMPILER_LAUNCHER}")
|
||||
endif()
|
||||
get_target_property(OPTIONS lammps COMPILE_OPTIONS)
|
||||
if(OPTIONS)
|
||||
message(" Options: ${OPTIONS}")
|
||||
@ -1030,9 +999,6 @@ if(_index GREATER -1)
|
||||
Type: ${CMAKE_C_COMPILER_ID}
|
||||
Version: ${CMAKE_C_COMPILER_VERSION}
|
||||
C Flags: ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${BTYPE}}")
|
||||
if(CMAKE_C_COMPILER_LAUNCHER)
|
||||
message(STATUS " Launcher: ${CMAKE_C_COMPILER_LAUNCHER}")
|
||||
endif()
|
||||
endif()
|
||||
message(STATUS "<<< Linker flags: >>>")
|
||||
message(STATUS "Executable name: ${LAMMPS_BINARY}")
|
||||
|
||||
@ -7,76 +7,76 @@
|
||||
# For Python coverage the coverage package needs to be installed
|
||||
###############################################################################
|
||||
if(ENABLE_COVERAGE)
|
||||
find_program(GCOVR_BINARY gcovr)
|
||||
find_package_handle_standard_args(GCOVR DEFAULT_MSG GCOVR_BINARY)
|
||||
find_program(GCOVR_BINARY gcovr)
|
||||
find_package_handle_standard_args(GCOVR DEFAULT_MSG GCOVR_BINARY)
|
||||
|
||||
find_program(COVERAGE_BINARY coverage)
|
||||
find_package_handle_standard_args(COVERAGE DEFAULT_MSG COVERAGE_BINARY)
|
||||
find_program(COVERAGE_BINARY coverage)
|
||||
find_package_handle_standard_args(COVERAGE DEFAULT_MSG COVERAGE_BINARY)
|
||||
|
||||
if(GCOVR_FOUND)
|
||||
get_filename_component(ABSOLUTE_LAMMPS_SOURCE_DIR ${LAMMPS_SOURCE_DIR} ABSOLUTE)
|
||||
if(GCOVR_FOUND)
|
||||
get_filename_component(ABSOLUTE_LAMMPS_SOURCE_DIR ${LAMMPS_SOURCE_DIR} ABSOLUTE)
|
||||
|
||||
add_custom_target(
|
||||
gen_coverage_xml
|
||||
COMMAND ${GCOVR_BINARY} -s -x -r ${ABSOLUTE_LAMMPS_SOURCE_DIR} --object-directory=${CMAKE_BINARY_DIR} -o coverage.xml
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
COMMENT "Generating XML coverage report..."
|
||||
)
|
||||
add_custom_target(
|
||||
gen_coverage_xml
|
||||
COMMAND ${GCOVR_BINARY} -s -x -r ${ABSOLUTE_LAMMPS_SOURCE_DIR} --object-directory=${CMAKE_BINARY_DIR} -o coverage.xml
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
COMMENT "Generating XML coverage report..."
|
||||
)
|
||||
|
||||
set(COVERAGE_HTML_DIR ${CMAKE_BINARY_DIR}/coverage_html)
|
||||
set(COVERAGE_HTML_DIR ${CMAKE_BINARY_DIR}/coverage_html)
|
||||
|
||||
add_custom_target(coverage_html_folder
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${COVERAGE_HTML_DIR})
|
||||
add_custom_target(coverage_html_folder
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${COVERAGE_HTML_DIR})
|
||||
|
||||
add_custom_target(
|
||||
gen_coverage_html
|
||||
COMMAND ${GCOVR_BINARY} -s --html --html-details -r ${ABSOLUTE_LAMMPS_SOURCE_DIR} --object-directory=${CMAKE_BINARY_DIR} -o ${COVERAGE_HTML_DIR}/index.html
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
COMMENT "Generating HTML coverage report..."
|
||||
)
|
||||
add_dependencies(gen_coverage_html coverage_html_folder)
|
||||
add_custom_target(
|
||||
gen_coverage_html
|
||||
COMMAND ${GCOVR_BINARY} -s --html --html-details -r ${ABSOLUTE_LAMMPS_SOURCE_DIR} --object-directory=${CMAKE_BINARY_DIR} -o ${COVERAGE_HTML_DIR}/index.html
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
COMMENT "Generating HTML coverage report..."
|
||||
)
|
||||
add_dependencies(gen_coverage_html coverage_html_folder)
|
||||
|
||||
add_custom_target(clean_coverage_html
|
||||
${CMAKE_COMMAND} -E remove_directory ${COVERAGE_HTML_DIR}
|
||||
COMMENT "Deleting HTML coverage report..."
|
||||
)
|
||||
add_custom_target(clean_coverage_html
|
||||
${CMAKE_COMMAND} -E remove_directory ${COVERAGE_HTML_DIR}
|
||||
COMMENT "Deleting HTML coverage report..."
|
||||
)
|
||||
|
||||
add_custom_target(reset_coverage
|
||||
${CMAKE_COMMAND} -E remove -f */*.gcda */*/*.gcda */*/*/*.gcda
|
||||
*/*/*/*/*.gcda */*/*/*/*/*.gcda */*/*/*/*/*/*.gcda
|
||||
*/*/*/*/*/*/*/*.gcda */*/*/*/*/*/*/*/*.gcda
|
||||
*/*/*/*/*/*/*/*/*/*.gcda */*/*/*/*/*/*/*/*/*/*.gcda
|
||||
WORKIND_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
COMMENT "Deleting coverage data files..."
|
||||
)
|
||||
add_dependencies(reset_coverage clean_coverage_html)
|
||||
endif()
|
||||
add_custom_target(reset_coverage
|
||||
${CMAKE_COMMAND} -E remove -f */*.gcda */*/*.gcda */*/*/*.gcda
|
||||
*/*/*/*/*.gcda */*/*/*/*/*.gcda */*/*/*/*/*/*.gcda
|
||||
*/*/*/*/*/*/*/*.gcda */*/*/*/*/*/*/*/*.gcda
|
||||
*/*/*/*/*/*/*/*/*/*.gcda */*/*/*/*/*/*/*/*/*/*.gcda
|
||||
WORKIND_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
COMMENT "Deleting coverage data files..."
|
||||
)
|
||||
add_dependencies(reset_coverage clean_coverage_html)
|
||||
endif()
|
||||
|
||||
if(COVERAGE_FOUND)
|
||||
set(PYTHON_COVERAGE_HTML_DIR ${CMAKE_BINARY_DIR}/python_coverage_html)
|
||||
configure_file(.coveragerc.in ${CMAKE_BINARY_DIR}/.coveragerc @ONLY)
|
||||
if(COVERAGE_FOUND)
|
||||
set(PYTHON_COVERAGE_HTML_DIR ${CMAKE_BINARY_DIR}/python_coverage_html)
|
||||
configure_file(.coveragerc.in ${CMAKE_BINARY_DIR}/.coveragerc @ONLY)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${CMAKE_BINARY_DIR}/unittest/python/.coverage
|
||||
COMMAND ${COVERAGE_BINARY} combine
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/unittest/python
|
||||
COMMENT "Combine Python coverage files..."
|
||||
)
|
||||
add_custom_command(
|
||||
OUTPUT ${CMAKE_BINARY_DIR}/unittest/python/.coverage
|
||||
COMMAND ${COVERAGE_BINARY} combine
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/unittest/python
|
||||
COMMENT "Combine Python coverage files..."
|
||||
)
|
||||
|
||||
add_custom_target(
|
||||
gen_python_coverage_html
|
||||
COMMAND ${COVERAGE_BINARY} html --rcfile=${CMAKE_BINARY_DIR}/.coveragerc -d ${PYTHON_COVERAGE_HTML_DIR}
|
||||
DEPENDS ${CMAKE_BINARY_DIR}/unittest/python/.coverage ${CMAKE_BINARY_DIR}/.coveragerc
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/unittest/python
|
||||
COMMENT "Generating HTML Python coverage report..."
|
||||
)
|
||||
add_custom_target(
|
||||
gen_python_coverage_html
|
||||
COMMAND ${COVERAGE_BINARY} html --rcfile=${CMAKE_BINARY_DIR}/.coveragerc -d ${PYTHON_COVERAGE_HTML_DIR}
|
||||
DEPENDS ${CMAKE_BINARY_DIR}/unittest/python/.coverage ${CMAKE_BINARY_DIR}/.coveragerc
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/unittest/python
|
||||
COMMENT "Generating HTML Python coverage report..."
|
||||
)
|
||||
|
||||
add_custom_target(
|
||||
gen_python_coverage_xml
|
||||
COMMAND ${COVERAGE_BINARY} xml --rcfile=${CMAKE_BINARY_DIR}/.coveragerc -o ${CMAKE_BINARY_DIR}/python_coverage.xml
|
||||
DEPENDS ${CMAKE_BINARY_DIR}/unittest/python/.coverage ${CMAKE_BINARY_DIR}/.coveragerc
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/unittest/python
|
||||
COMMENT "Generating XML Python coverage report..."
|
||||
)
|
||||
endif()
|
||||
add_custom_target(
|
||||
gen_python_coverage_xml
|
||||
COMMAND ${COVERAGE_BINARY} xml --rcfile=${CMAKE_BINARY_DIR}/.coveragerc -o ${CMAKE_BINARY_DIR}/python_coverage.xml
|
||||
DEPENDS ${CMAKE_BINARY_DIR}/unittest/python/.coverage ${CMAKE_BINARY_DIR}/.coveragerc
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/unittest/python
|
||||
COMMENT "Generating XML Python coverage report..."
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@ -1,39 +1,40 @@
|
||||
# use default (or custom) Python executable.
|
||||
# Python version check is in main CMakeLists.txt file
|
||||
if(Python_EXECUTABLE)
|
||||
# use default (or custom) Python executable, if version is sufficient
|
||||
if(Python_VERSION VERSION_GREATER_EQUAL 3.6)
|
||||
set(Python3_EXECUTABLE ${Python_EXECUTABLE})
|
||||
endif()
|
||||
find_package(Python3 COMPONENTS Interpreter)
|
||||
|
||||
if(Python3_EXECUTABLE)
|
||||
add_custom_target(
|
||||
check-whitespace
|
||||
${Python3_EXECUTABLE} ${LAMMPS_TOOLS_DIR}/coding_standard/whitespace.py .
|
||||
WORKING_DIRECTORY ${LAMMPS_DIR}
|
||||
COMMENT "Check for whitespace errors")
|
||||
add_custom_target(
|
||||
check-homepage
|
||||
${Python3_EXECUTABLE} ${LAMMPS_TOOLS_DIR}/coding_standard/homepage.py .
|
||||
WORKING_DIRECTORY ${LAMMPS_DIR}
|
||||
COMMENT "Check for homepage URL errors")
|
||||
add_custom_target(
|
||||
check-permissions
|
||||
${Python3_EXECUTABLE} ${LAMMPS_TOOLS_DIR}/coding_standard/permissions.py .
|
||||
WORKING_DIRECTORY ${LAMMPS_DIR}
|
||||
COMMENT "Check for permission errors")
|
||||
add_custom_target(
|
||||
fix-whitespace
|
||||
${Python3_EXECUTABLE} ${LAMMPS_TOOLS_DIR}/coding_standard/whitespace.py -f .
|
||||
WORKING_DIRECTORY ${LAMMPS_DIR}
|
||||
COMMENT "Fix whitespace errors")
|
||||
add_custom_target(
|
||||
fix-homepage
|
||||
${Python3_EXECUTABLE} ${LAMMPS_TOOLS_DIR}/coding_standard/homepage.py -f .
|
||||
WORKING_DIRECTORY ${LAMMPS_DIR}
|
||||
COMMENT "Fix homepage URL errors")
|
||||
add_custom_target(
|
||||
fix-permissions
|
||||
${Python3_EXECUTABLE} ${LAMMPS_TOOLS_DIR}/coding_standard/permissions.py -f .
|
||||
WORKING_DIRECTORY ${LAMMPS_DIR}
|
||||
COMMENT "Fix permission errors")
|
||||
if(Python3_VERSION VERSION_GREATER_EQUAL 3.6)
|
||||
add_custom_target(
|
||||
check-whitespace
|
||||
${Python3_EXECUTABLE} ${LAMMPS_TOOLS_DIR}/coding_standard/whitespace.py .
|
||||
WORKING_DIRECTORY ${LAMMPS_DIR}
|
||||
COMMENT "Check for whitespace errors")
|
||||
add_custom_target(
|
||||
check-homepage
|
||||
${Python3_EXECUTABLE} ${LAMMPS_TOOLS_DIR}/coding_standard/homepage.py .
|
||||
WORKING_DIRECTORY ${LAMMPS_DIR}
|
||||
COMMENT "Check for homepage URL errors")
|
||||
add_custom_target(
|
||||
check-permissions
|
||||
${Python3_EXECUTABLE} ${LAMMPS_TOOLS_DIR}/coding_standard/permissions.py .
|
||||
WORKING_DIRECTORY ${LAMMPS_DIR}
|
||||
COMMENT "Check for permission errors")
|
||||
add_custom_target(
|
||||
fix-whitespace
|
||||
${Python3_EXECUTABLE} ${LAMMPS_TOOLS_DIR}/coding_standard/whitespace.py -f .
|
||||
WORKING_DIRECTORY ${LAMMPS_DIR}
|
||||
COMMENT "Fix whitespace errors")
|
||||
add_custom_target(
|
||||
fix-homepage
|
||||
${Python3_EXECUTABLE} ${LAMMPS_TOOLS_DIR}/coding_standard/homepage.py -f .
|
||||
WORKING_DIRECTORY ${LAMMPS_DIR}
|
||||
COMMENT "Fix homepage URL errors")
|
||||
add_custom_target(
|
||||
fix-permissions
|
||||
${Python3_EXECUTABLE} ${LAMMPS_TOOLS_DIR}/coding_standard/permissions.py -f .
|
||||
WORKING_DIRECTORY ${LAMMPS_DIR}
|
||||
COMMENT "Fix permission errors")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@ -4,8 +4,6 @@
|
||||
option(BUILD_DOC "Build LAMMPS HTML documentation" OFF)
|
||||
|
||||
if(BUILD_DOC)
|
||||
option(BUILD_DOC_VENV "Build LAMMPS documentation virtual environment" ON)
|
||||
mark_as_advanced(BUILD_DOC_VENV)
|
||||
# Current Sphinx versions require at least Python 3.8
|
||||
# use default (or custom) Python executable, if version is sufficient
|
||||
if(Python_VERSION VERSION_GREATER_EQUAL 3.8)
|
||||
@ -13,13 +11,21 @@ if(BUILD_DOC)
|
||||
endif()
|
||||
find_package(Python3 REQUIRED COMPONENTS Interpreter)
|
||||
if(Python3_VERSION VERSION_LESS 3.8)
|
||||
message(FATAL_ERROR "Python 3.8 and up is required to build the LAMMPS HTML documentation")
|
||||
message(FATAL_ERROR "Python 3.8 and up is required to build the HTML documentation")
|
||||
endif()
|
||||
set(VIRTUALENV ${Python3_EXECUTABLE} -m venv)
|
||||
|
||||
find_package(Doxygen 1.8.10 REQUIRED)
|
||||
file(GLOB DOC_SOURCES CONFIGURE_DEPENDS ${LAMMPS_DOC_DIR}/src/[^.]*.rst)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT docenv
|
||||
COMMAND ${VIRTUALENV} docenv
|
||||
)
|
||||
|
||||
set(DOCENV_BINARY_DIR ${CMAKE_BINARY_DIR}/docenv/bin)
|
||||
set(DOCENV_REQUIREMENTS_FILE ${LAMMPS_DOC_DIR}/utils/requirements.txt)
|
||||
|
||||
set(SPHINX_CONFIG_DIR ${LAMMPS_DOC_DIR}/utils/sphinx-config)
|
||||
set(SPHINX_CONFIG_FILE_TEMPLATE ${SPHINX_CONFIG_DIR}/conf.py.in)
|
||||
set(SPHINX_STATIC_DIR ${SPHINX_CONFIG_DIR}/_static)
|
||||
@ -38,35 +44,17 @@ if(BUILD_DOC)
|
||||
# configure paths in conf.py, since relative paths change when file is copied
|
||||
configure_file(${SPHINX_CONFIG_FILE_TEMPLATE} ${DOC_BUILD_CONFIG_FILE})
|
||||
|
||||
if(BUILD_DOC_VENV)
|
||||
add_custom_command(
|
||||
OUTPUT docenv
|
||||
COMMAND ${VIRTUALENV} docenv
|
||||
)
|
||||
add_custom_command(
|
||||
OUTPUT ${DOC_BUILD_DIR}/requirements.txt
|
||||
DEPENDS docenv ${DOCENV_REQUIREMENTS_FILE}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${DOCENV_REQUIREMENTS_FILE} ${DOC_BUILD_DIR}/requirements.txt
|
||||
COMMAND ${DOCENV_BINARY_DIR}/pip $ENV{PIP_OPTIONS} install --upgrade pip
|
||||
COMMAND ${DOCENV_BINARY_DIR}/pip $ENV{PIP_OPTIONS} install --upgrade ${LAMMPS_DOC_DIR}/utils/converters
|
||||
COMMAND ${DOCENV_BINARY_DIR}/pip $ENV{PIP_OPTIONS} install -r ${DOC_BUILD_DIR}/requirements.txt --upgrade
|
||||
)
|
||||
|
||||
set(DOCENV_BINARY_DIR ${CMAKE_BINARY_DIR}/docenv/bin)
|
||||
set(DOCENV_REQUIREMENTS_FILE ${LAMMPS_DOC_DIR}/utils/requirements.txt)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${DOC_BUILD_DIR}/requirements.txt
|
||||
DEPENDS docenv ${DOCENV_REQUIREMENTS_FILE}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${DOCENV_REQUIREMENTS_FILE} ${DOC_BUILD_DIR}/requirements.txt
|
||||
COMMAND ${DOCENV_BINARY_DIR}/pip $ENV{PIP_OPTIONS} install --upgrade pip
|
||||
COMMAND ${DOCENV_BINARY_DIR}/pip $ENV{PIP_OPTIONS} install --upgrade ${LAMMPS_DOC_DIR}/utils/converters
|
||||
COMMAND ${DOCENV_BINARY_DIR}/pip $ENV{PIP_OPTIONS} install -r ${DOC_BUILD_DIR}/requirements.txt --upgrade
|
||||
)
|
||||
|
||||
set(DOCENV_DEPS docenv ${DOC_BUILD_DIR}/requirements.txt)
|
||||
if(NOT TARGET Sphinx::sphinx-build)
|
||||
add_executable(Sphinx::sphinx-build IMPORTED GLOBAL)
|
||||
set_target_properties(Sphinx::sphinx-build PROPERTIES IMPORTED_LOCATION "${DOCENV_BINARY_DIR}/sphinx-build")
|
||||
endif()
|
||||
else()
|
||||
find_package(Sphinx)
|
||||
endif()
|
||||
|
||||
set(MATHJAX_URL "https://github.com/mathjax/MathJax/archive/3.2.2.tar.gz" CACHE STRING "URL for MathJax tarball")
|
||||
set(MATHJAX_MD5 "08dd6ef33ca08870220d9aade2a62845" CACHE STRING "MD5 checksum of MathJax tarball")
|
||||
set(MATHJAX_URL "https://github.com/mathjax/MathJax/archive/3.1.3.tar.gz" CACHE STRING "URL for MathJax tarball")
|
||||
set(MATHJAX_MD5 "b81661c6e6ba06278e6ae37b30b0c492" CACHE STRING "MD5 checksum of MathJax tarball")
|
||||
mark_as_advanced(MATHJAX_URL)
|
||||
GetFallbackURL(MATHJAX_URL MATHJAX_FALLBACK)
|
||||
|
||||
@ -109,9 +97,8 @@ if(BUILD_DOC)
|
||||
endif()
|
||||
add_custom_command(
|
||||
OUTPUT html
|
||||
DEPENDS ${DOC_SOURCES} ${DOCENV_DEPS} ${DOXYGEN_XML_DIR}/index.xml ${BUILD_DOC_CONFIG_FILE}
|
||||
COMMAND ${Python3_EXECUTABLE} ${LAMMPS_DOC_DIR}/utils/make-globbed-tocs.py -d ${LAMMPS_DOC_DIR}/src
|
||||
COMMAND Sphinx::sphinx-build ${SPHINX_EXTRA_OPTS} -b html -c ${DOC_BUILD_DIR} -d ${DOC_BUILD_DIR}/doctrees ${LAMMPS_DOC_DIR}/src ${DOC_BUILD_DIR}/html
|
||||
DEPENDS ${DOC_SOURCES} docenv ${DOC_BUILD_DIR}/requirements.txt ${DOXYGEN_XML_DIR}/index.xml ${BUILD_DOC_CONFIG_FILE}
|
||||
COMMAND ${DOCENV_BINARY_DIR}/sphinx-build ${SPHINX_EXTRA_OPTS} -b html -c ${DOC_BUILD_DIR} -d ${DOC_BUILD_DIR}/doctrees ${LAMMPS_DOC_DIR}/src ${DOC_BUILD_DIR}/html
|
||||
COMMAND ${CMAKE_COMMAND} -E create_symlink Manual.html ${DOC_BUILD_DIR}/html/index.html
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LAMMPS_DOC_DIR}/src/PDF ${DOC_BUILD_DIR}/html/PDF
|
||||
COMMAND ${CMAKE_COMMAND} -E remove -f ${DOXYGEN_XML_DIR}/run.stamp
|
||||
|
||||
@ -1,29 +0,0 @@
|
||||
# Find sphinx-build
|
||||
find_program(Sphinx_EXECUTABLE NAMES sphinx-build
|
||||
PATH_SUFFIXES bin
|
||||
DOC "Sphinx documenation build executable")
|
||||
mark_as_advanced(Sphinx_EXECUTABLE)
|
||||
|
||||
if(Sphinx_EXECUTABLE)
|
||||
execute_process(COMMAND ${Sphinx_EXECUTABLE} --version
|
||||
OUTPUT_VARIABLE sphinx_version
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
RESULT_VARIABLE _sphinx_version_result)
|
||||
|
||||
if(_sphinx_version_result)
|
||||
message(WARNING "Unable to determine sphinx-build verison: ${_sphinx_version_result}")
|
||||
else()
|
||||
string(REGEX REPLACE "sphinx-build ([0-9.]+).*"
|
||||
"\\1"
|
||||
Sphinx_VERSION
|
||||
"${sphinx_version}")
|
||||
endif()
|
||||
|
||||
if(NOT TARGET Sphinx::sphinx-build)
|
||||
add_executable(Sphinx::sphinx-build IMPORTED GLOBAL)
|
||||
set_target_properties(Sphinx::sphinx-build PROPERTIES IMPORTED_LOCATION "${Sphinx_EXECUTABLE}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(Sphinx REQUIRED_VARS Sphinx_EXECUTABLE VERSION_VAR Sphinx_VERSION)
|
||||
@ -21,9 +21,9 @@ if(VORO_FOUND)
|
||||
set(VORO_LIBRARIES ${VORO_LIBRARY})
|
||||
set(VORO_INCLUDE_DIRS ${VORO_INCLUDE_DIR})
|
||||
|
||||
if(NOT TARGET VORO::voro++)
|
||||
add_library(VORO::voro++ UNKNOWN IMPORTED)
|
||||
set_target_properties(VORO::voro++ PROPERTIES
|
||||
if(NOT TARGET VORO::VORO)
|
||||
add_library(VORO::VORO UNKNOWN IMPORTED)
|
||||
set_target_properties(VORO::VORO PROPERTIES
|
||||
IMPORTED_LOCATION "${VORO_LIBRARY}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${VORO_INCLUDE_DIR}")
|
||||
endif()
|
||||
|
||||
@ -34,26 +34,8 @@ if(MSVC)
|
||||
add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_CXX_STANDARD)
|
||||
if(cxx_std_17 IN_LIST CMAKE_CXX_COMPILE_FEATURES)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
else()
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
endif()
|
||||
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()
|
||||
# turn off C++17 check in lmptype.h
|
||||
if(LAMMPS_CXX11)
|
||||
add_compile_definitions(LAMMPS_CXX11)
|
||||
endif()
|
||||
# C++11 is required
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
# Need -restrict with Intel compilers
|
||||
@ -260,8 +242,8 @@ endif()
|
||||
|
||||
################
|
||||
# integer size selection
|
||||
set(LAMMPS_SIZES "smallbig" CACHE STRING "LAMMPS integer sizes (smallbig: 64-bit #atoms #timesteps, bigbig: also 64-bit imageint, 64-bit atom ids)")
|
||||
set(LAMMPS_SIZES_VALUES smallbig bigbig)
|
||||
set(LAMMPS_SIZES "smallbig" CACHE STRING "LAMMPS integer sizes (smallsmall: all 32-bit, smallbig: 64-bit #atoms #timesteps, bigbig: also 64-bit imageint, 64-bit atom ids)")
|
||||
set(LAMMPS_SIZES_VALUES smallbig bigbig smallsmall)
|
||||
set_property(CACHE LAMMPS_SIZES PROPERTY STRINGS ${LAMMPS_SIZES_VALUES})
|
||||
validate_option(LAMMPS_SIZES LAMMPS_SIZES_VALUES)
|
||||
string(TOUPPER ${LAMMPS_SIZES} LAMMPS_SIZES)
|
||||
|
||||
@ -1,10 +0,0 @@
|
||||
# the geturl command needs libcurl
|
||||
|
||||
find_package(CURL QUIET COMPONENTS HTTP HTTPS)
|
||||
option(WITH_CURL "Enable libcurl support" ${CURL_FOUND})
|
||||
if(WITH_CURL)
|
||||
find_package(CURL REQUIRED COMPONENTS HTTP HTTPS)
|
||||
target_compile_definitions(lammps PRIVATE -DLAMMPS_CURL)
|
||||
target_link_libraries(lammps PRIVATE CURL::libcurl)
|
||||
endif()
|
||||
|
||||
@ -189,7 +189,7 @@ if(GPU_API STREQUAL "CUDA")
|
||||
endif()
|
||||
|
||||
add_executable(nvc_get_devices ${LAMMPS_LIB_SOURCE_DIR}/gpu/geryon/ucl_get_devices.cpp)
|
||||
target_compile_definitions(nvc_get_devices PRIVATE -DUCL_CUDADR)
|
||||
target_compile_definitions(nvc_get_devices PRIVATE -DUCL_CUDADR -DLAMMPS_${LAMMPS_SIZES})
|
||||
target_link_libraries(nvc_get_devices PRIVATE ${CUDA_LIBRARIES} ${CUDA_CUDA_LIBRARY})
|
||||
target_include_directories(nvc_get_devices PRIVATE ${CUDA_INCLUDE_DIRS})
|
||||
|
||||
@ -489,7 +489,7 @@ else()
|
||||
target_link_libraries(gpu PRIVATE mpi_stubs)
|
||||
endif()
|
||||
|
||||
target_compile_definitions(gpu PRIVATE -DLAMMPS_${LAMMPS_SIZES})
|
||||
set_target_properties(gpu PROPERTIES OUTPUT_NAME lammps_gpu${LAMMPS_MACHINE})
|
||||
target_compile_definitions(gpu PRIVATE -DLAMMPS_${LAMMPS_SIZES})
|
||||
target_sources(lammps PRIVATE ${GPU_SOURCES})
|
||||
target_include_directories(lammps PRIVATE ${GPU_SOURCES_DIR})
|
||||
|
||||
@ -72,10 +72,6 @@ if(INTEL_ARCH STREQUAL "KNL")
|
||||
if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
|
||||
message(FATAL_ERROR "Must use Intel compiler with INTEL for KNL architecture")
|
||||
endif()
|
||||
message(WARNING, "Support for Intel Xeon Phi accelerators and Knight's Landing CPUs "
|
||||
"will be removed from LAMMPS in Summer 2025 due to lack of available machines "
|
||||
"in labs and HPC centers and removed support in recent compilers "
|
||||
"Please contact developers@lammps.org if you have any concerns about this step.")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -xHost -qopenmp -qoffload")
|
||||
set(MIC_OPTIONS "-qoffload-option,mic,compiler,\"-fp-model fast=2 -mGLOB_default_function_attrs=\\\"gather_scatter_loop_unroll=4\\\"\"")
|
||||
target_compile_options(lammps PRIVATE -xMIC-AVX512 -qoffload -fno-alias -ansi-alias -restrict -qoverride-limits ${MIC_OPTIONS})
|
||||
|
||||
@ -7,13 +7,10 @@ endif()
|
||||
|
||||
########################################################################
|
||||
# consistency checks and Kokkos options/settings required by LAMMPS
|
||||
if(Kokkos_ENABLE_HIP)
|
||||
option(Kokkos_ENABLE_HIP_MULTIPLE_KERNEL_INSTANTIATIONS "Enable multiple kernel instantiations with HIP" ON)
|
||||
mark_as_advanced(Kokkos_ENABLE_HIP_MULTIPLE_KERNEL_INSTANTIATIONS)
|
||||
option(Kokkos_ENABLE_ROCTHRUST "Use RoCThrust library" ON)
|
||||
mark_as_advanced(Kokkos_ENABLE_ROCTHRUST)
|
||||
if(Kokkos_ENABLE_CUDA)
|
||||
message(STATUS "KOKKOS: Enabling CUDA LAMBDA function support")
|
||||
set(Kokkos_ENABLE_CUDA_LAMBDA ON CACHE BOOL "" FORCE)
|
||||
endif()
|
||||
|
||||
# Adding OpenMP compiler flags without the checks done for
|
||||
# BUILD_OMP can result in compile failures. Enforce consistency.
|
||||
if(Kokkos_ENABLE_OPENMP)
|
||||
@ -21,15 +18,6 @@ if(Kokkos_ENABLE_OPENMP)
|
||||
message(FATAL_ERROR "Must enable BUILD_OMP with Kokkos_ENABLE_OPENMP")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(Kokkos_ENABLE_SERIAL)
|
||||
if(NOT (Kokkos_ENABLE_OPENMP OR Kokkos_ENABLE_THREADS OR
|
||||
Kokkos_ENABLE_CUDA OR Kokkos_ENABLE_HIP OR Kokkos_ENABLE_SYCL
|
||||
OR Kokkos_ENABLE_OPENMPTARGET))
|
||||
option(Kokkos_ENABLE_ATOMICS_BYPASS "Disable atomics for Kokkos Serial Backend" ON)
|
||||
mark_as_advanced(Kokkos_ENABLE_ATOMICS_BYPASS)
|
||||
endif()
|
||||
endif()
|
||||
########################################################################
|
||||
|
||||
option(EXTERNAL_KOKKOS "Build against external kokkos library" OFF)
|
||||
@ -57,8 +45,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.3.01.tar.gz" CACHE STRING "URL for KOKKOS tarball")
|
||||
set(KOKKOS_MD5 "243de871b3dc2cf3990c1c404032df83" CACHE STRING "MD5 checksum of KOKKOS tarball")
|
||||
mark_as_advanced(KOKKOS_URL)
|
||||
mark_as_advanced(KOKKOS_MD5)
|
||||
GetFallbackURL(KOKKOS_URL KOKKOS_FALLBACK)
|
||||
@ -83,7 +71,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.3.01 REQUIRED CONFIG)
|
||||
target_link_libraries(lammps PRIVATE Kokkos::kokkos)
|
||||
else()
|
||||
set(LAMMPS_LIB_KOKKOS_SRC_DIR ${LAMMPS_LIB_SOURCE_DIR}/kokkos)
|
||||
@ -139,7 +127,7 @@ if(PKG_KSPACE)
|
||||
${KOKKOS_PKG_SOURCES_DIR}/grid3d_kokkos.cpp
|
||||
${KOKKOS_PKG_SOURCES_DIR}/remap_kokkos.cpp)
|
||||
set(FFT_KOKKOS "KISS" CACHE STRING "FFT library for Kokkos-enabled KSPACE package")
|
||||
set(FFT_KOKKOS_VALUES KISS FFTW3 MKL NVPL HIPFFT CUFFT MKL_GPU)
|
||||
set(FFT_KOKKOS_VALUES KISS FFTW3 MKL HIPFFT CUFFT)
|
||||
set_property(CACHE FFT_KOKKOS PROPERTY STRINGS ${FFT_KOKKOS_VALUES})
|
||||
validate_option(FFT_KOKKOS FFT_KOKKOS_VALUES)
|
||||
string(TOUPPER ${FFT_KOKKOS} FFT_KOKKOS)
|
||||
@ -149,8 +137,10 @@ if(PKG_KSPACE)
|
||||
message(FATAL_ERROR "The CUDA backend of Kokkos requires either KISS FFT or CUFFT.")
|
||||
elseif(FFT_KOKKOS STREQUAL "KISS")
|
||||
message(WARNING "Using KISS FFT with the CUDA backend of Kokkos may be sub-optimal.")
|
||||
target_compile_definitions(lammps PRIVATE -DFFT_KOKKOS_KISS)
|
||||
elseif(FFT_KOKKOS STREQUAL "CUFFT")
|
||||
find_package(CUDAToolkit REQUIRED)
|
||||
target_compile_definitions(lammps PRIVATE -DFFT_KOKKOS_CUFFT)
|
||||
target_link_libraries(lammps PRIVATE CUDA::cufft)
|
||||
endif()
|
||||
elseif(Kokkos_ENABLE_HIP)
|
||||
@ -162,21 +152,10 @@ if(PKG_KSPACE)
|
||||
elseif(FFT_KOKKOS STREQUAL "HIPFFT")
|
||||
include(DetectHIPInstallation)
|
||||
find_package(hipfft REQUIRED)
|
||||
target_compile_definitions(lammps PRIVATE -DFFT_KOKKOS_HIPFFT)
|
||||
target_link_libraries(lammps PRIVATE hip::hipfft)
|
||||
endif()
|
||||
elseif(FFT_KOKKOS STREQUAL "MKL_GPU")
|
||||
if(NOT Kokkos_ENABLE_SYCL)
|
||||
message(FATAL_ERROR "Using MKL_GPU FFT currently requires the SYCL backend of Kokkos.")
|
||||
endif()
|
||||
find_package(MKL REQUIRED)
|
||||
target_link_libraries(lammps PRIVATE mkl_sycl_dft mkl_intel_ilp64 mkl_tbb_thread mkl_core tbb)
|
||||
elseif(FFT_KOKKOS STREQUAL "MKL")
|
||||
find_package(MKL REQUIRED)
|
||||
elseif(FFT_KOKKOS STREQUAL "NVPL")
|
||||
find_package(nvpl_fft REQUIRED)
|
||||
target_link_libraries(lammps PRIVATE nvpl::fftw)
|
||||
endif()
|
||||
target_compile_definitions(lammps PRIVATE -DFFT_KOKKOS_${FFT_KOKKOS})
|
||||
endif()
|
||||
|
||||
if(PKG_ML-IAP)
|
||||
|
||||
@ -10,7 +10,7 @@ if(${FFTW}_FOUND)
|
||||
else()
|
||||
set(FFT "KISS" CACHE STRING "FFT library for KSPACE package")
|
||||
endif()
|
||||
set(FFT_VALUES KISS FFTW3 MKL NVPL)
|
||||
set(FFT_VALUES KISS FFTW3 MKL)
|
||||
set_property(CACHE FFT PROPERTY STRINGS ${FFT_VALUES})
|
||||
validate_option(FFT FFT_VALUES)
|
||||
string(TOUPPER ${FFT} FFT)
|
||||
@ -41,10 +41,6 @@ elseif(FFT STREQUAL "MKL")
|
||||
target_compile_definitions(lammps PRIVATE -DFFT_MKL_THREADS)
|
||||
endif()
|
||||
target_link_libraries(lammps PRIVATE MKL::MKL)
|
||||
elseif(FFT STREQUAL "NVPL")
|
||||
find_package(nvpl_fft REQUIRED)
|
||||
target_compile_definitions(lammps PRIVATE -DFFT_NVPL)
|
||||
target_link_libraries(lammps PRIVATE nvpl::fftw)
|
||||
else()
|
||||
# last option is KISSFFT
|
||||
target_compile_definitions(lammps PRIVATE -DFFT_KISS)
|
||||
|
||||
@ -24,7 +24,9 @@ if(MLIAP_ENABLE_PYTHON)
|
||||
if(NOT PKG_PYTHON)
|
||||
message(FATAL_ERROR "Must enable PYTHON package for including Python support in ML-IAP")
|
||||
endif()
|
||||
# Python version check is in main CMakeLists.txt file
|
||||
if(Python_VERSION VERSION_LESS 3.6)
|
||||
message(FATAL_ERROR "Python support in ML-IAP requires Python 3.6 or later")
|
||||
endif()
|
||||
|
||||
set(MLIAP_BINARY_DIR ${CMAKE_BINARY_DIR}/cython)
|
||||
file(GLOB MLIAP_CYTHON_SRC CONFIGURE_DEPENDS ${LAMMPS_SOURCE_DIR}/ML-IAP/*.pyx)
|
||||
|
||||
@ -1,62 +1,57 @@
|
||||
# PACE library support for ML-PACE package
|
||||
find_package(pace QUIET)
|
||||
|
||||
if(pace_FOUND)
|
||||
find_package(pace)
|
||||
target_link_libraries(lammps PRIVATE pace::pace)
|
||||
else()
|
||||
# set policy to silence warnings about timestamps of downloaded files. review occasionally if it may be set to NEW
|
||||
if(POLICY CMP0135)
|
||||
cmake_policy(SET CMP0135 OLD)
|
||||
endif()
|
||||
|
||||
set(PACELIB_URL "https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2023.11.25.fix2.tar.gz" CACHE STRING "URL for PACE evaluator library sources")
|
||||
set(PACELIB_MD5 "a53bd87cfee8b07d9f44bc17aad69c3f" CACHE STRING "MD5 checksum of PACE evaluator library tarball")
|
||||
mark_as_advanced(PACELIB_URL)
|
||||
mark_as_advanced(PACELIB_MD5)
|
||||
GetFallbackURL(PACELIB_URL PACELIB_FALLBACK)
|
||||
|
||||
# LOCAL_ML-PACE points to top-level dir with local lammps-user-pace repo,
|
||||
# to make it easier to check local build without going through the public github releases
|
||||
if(LOCAL_ML-PACE)
|
||||
set(lib-pace "${LOCAL_ML-PACE}")
|
||||
else()
|
||||
# download library sources to build folder
|
||||
if(EXISTS ${CMAKE_BINARY_DIR}/libpace.tar.gz)
|
||||
file(MD5 ${CMAKE_BINARY_DIR}/libpace.tar.gz DL_MD5)
|
||||
endif()
|
||||
if(NOT "${DL_MD5}" STREQUAL "${PACELIB_MD5}")
|
||||
message(STATUS "Downloading ${PACELIB_URL}")
|
||||
file(DOWNLOAD ${PACELIB_URL} ${CMAKE_BINARY_DIR}/libpace.tar.gz STATUS DL_STATUS SHOW_PROGRESS)
|
||||
file(MD5 ${CMAKE_BINARY_DIR}/libpace.tar.gz DL_MD5)
|
||||
if((NOT DL_STATUS EQUAL 0) OR (NOT "${DL_MD5}" STREQUAL "${PACELIB_MD5}"))
|
||||
message(WARNING "Download from primary URL ${PACELIB_URL} failed\nTrying fallback URL ${PACELIB_FALLBACK}")
|
||||
file(DOWNLOAD ${PACELIB_FALLBACK} ${CMAKE_BINARY_DIR}/libpace.tar.gz EXPECTED_HASH MD5=${PACELIB_MD5} SHOW_PROGRESS)
|
||||
endif()
|
||||
else()
|
||||
message(STATUS "Using already downloaded archive ${CMAKE_BINARY_DIR}/libpace.tar.gz")
|
||||
endif()
|
||||
|
||||
|
||||
# uncompress downloaded sources
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} -E remove_directory lammps-user-pace*
|
||||
COMMAND ${CMAKE_COMMAND} -E tar xzf libpace.tar.gz
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
)
|
||||
get_newest_file(${CMAKE_BINARY_DIR}/lammps-user-pace-* lib-pace)
|
||||
endif()
|
||||
|
||||
# some preinstalled yaml-cpp versions don't provide a namespaced target
|
||||
find_package(yaml-cpp QUIET)
|
||||
if(TARGET yaml-cpp AND NOT TARGET yaml-cpp::yaml-cpp)
|
||||
add_library(yaml-cpp::yaml-cpp ALIAS yaml-cpp)
|
||||
endif()
|
||||
|
||||
add_subdirectory(${lib-pace} build-pace)
|
||||
set_target_properties(pace PROPERTIES CXX_EXTENSIONS ON OUTPUT_NAME lammps_pace${LAMMPS_MACHINE})
|
||||
|
||||
if(CMAKE_PROJECT_NAME STREQUAL "lammps")
|
||||
target_link_libraries(lammps PRIVATE pace)
|
||||
endif()
|
||||
# set policy to silence warnings about timestamps of downloaded files. review occasionally if it may be set to NEW
|
||||
if(POLICY CMP0135)
|
||||
cmake_policy(SET CMP0135 OLD)
|
||||
endif()
|
||||
|
||||
set(PACELIB_URL "https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2023.11.25.fix.tar.gz" CACHE STRING "URL for PACE evaluator library sources")
|
||||
set(PACELIB_MD5 "b45de9a633f42ed65422567e3ce56f9f" CACHE STRING "MD5 checksum of PACE evaluator library tarball")
|
||||
mark_as_advanced(PACELIB_URL)
|
||||
mark_as_advanced(PACELIB_MD5)
|
||||
GetFallbackURL(PACELIB_URL PACELIB_FALLBACK)
|
||||
|
||||
# LOCAL_ML-PACE points to top-level dir with local lammps-user-pace repo,
|
||||
# to make it easier to check local build without going through the public github releases
|
||||
if(LOCAL_ML-PACE)
|
||||
set(lib-pace "${LOCAL_ML-PACE}")
|
||||
else()
|
||||
# download library sources to build folder
|
||||
if(EXISTS ${CMAKE_BINARY_DIR}/libpace.tar.gz)
|
||||
file(MD5 ${CMAKE_BINARY_DIR}/libpace.tar.gz DL_MD5)
|
||||
endif()
|
||||
if(NOT "${DL_MD5}" STREQUAL "${PACELIB_MD5}")
|
||||
message(STATUS "Downloading ${PACELIB_URL}")
|
||||
file(DOWNLOAD ${PACELIB_URL} ${CMAKE_BINARY_DIR}/libpace.tar.gz STATUS DL_STATUS SHOW_PROGRESS)
|
||||
file(MD5 ${CMAKE_BINARY_DIR}/libpace.tar.gz DL_MD5)
|
||||
if((NOT DL_STATUS EQUAL 0) OR (NOT "${DL_MD5}" STREQUAL "${PACELIB_MD5}"))
|
||||
message(WARNING "Download from primary URL ${PACELIB_URL} failed\nTrying fallback URL ${PACELIB_FALLBACK}")
|
||||
file(DOWNLOAD ${PACELIB_FALLBACK} ${CMAKE_BINARY_DIR}/libpace.tar.gz EXPECTED_HASH MD5=${PACELIB_MD5} SHOW_PROGRESS)
|
||||
endif()
|
||||
else()
|
||||
message(STATUS "Using already downloaded archive ${CMAKE_BINARY_DIR}/libpace.tar.gz")
|
||||
endif()
|
||||
|
||||
|
||||
# uncompress downloaded sources
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} -E remove_directory lammps-user-pace*
|
||||
COMMAND ${CMAKE_COMMAND} -E tar xzf libpace.tar.gz
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
)
|
||||
get_newest_file(${CMAKE_BINARY_DIR}/lammps-user-pace-* lib-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}")
|
||||
|
||||
endif()
|
||||
|
||||
add_subdirectory(${lib-pace} build-pace)
|
||||
set_target_properties(pace PROPERTIES CXX_EXTENSIONS ON OUTPUT_NAME lammps_pace${LAMMPS_MACHINE})
|
||||
|
||||
if(CMAKE_PROJECT_NAME STREQUAL "lammps")
|
||||
target_link_libraries(lammps PRIVATE pace)
|
||||
endif()
|
||||
|
||||
@ -37,7 +37,7 @@ if(DOWNLOAD_QUIP)
|
||||
endforeach()
|
||||
# Fix cmake crashing when MATH_LINKOPTS not set, required for e.g. recent Cray Programming Environment
|
||||
set(temp "${temp} -L/_DUMMY_PATH_\n")
|
||||
set(temp "${temp}PYTHON=${Python_EXECUTABLE}\nPIP=pip\nEXTRA_LINKOPTS=\n")
|
||||
set(temp "${temp}PYTHON=python\nPIP=pip\nEXTRA_LINKOPTS=\n")
|
||||
set(temp "${temp}HAVE_CP2K=0\nHAVE_VASP=0\nHAVE_TB=0\nHAVE_PRECON=1\nHAVE_LOTF=0\nHAVE_ONIOM=0\n")
|
||||
set(temp "${temp}HAVE_LOCAL_E_MIX=0\nHAVE_QC=0\nHAVE_GAP=1\nHAVE_DESCRIPTORS_NONCOMMERCIAL=1\n")
|
||||
set(temp "${temp}HAVE_TURBOGAP=0\nHAVE_QR=1\nHAVE_THIRDPARTY=0\nHAVE_FX=0\nHAVE_SCME=0\nHAVE_MTP=0\n")
|
||||
|
||||
@ -32,21 +32,14 @@ endif()
|
||||
|
||||
# Note: must also adjust check for supported API versions in
|
||||
# fix_plumed.cpp when version changes from v2.n.x to v2.n+1.y
|
||||
set(PLUMED_URL "https://github.com/plumed/plumed2/releases/download/v2.9.3/plumed-src-2.9.3.tgz"
|
||||
set(PLUMED_URL "https://github.com/plumed/plumed2/releases/download/v2.9.1/plumed-src-2.9.1.tgz"
|
||||
CACHE STRING "URL for PLUMED tarball")
|
||||
set(PLUMED_MD5 "ee1249805fe94bccee17d10610d3f6f1" CACHE STRING "MD5 checksum of PLUMED tarball")
|
||||
set(PLUMED_MD5 "c3b2d31479c1e9ce211719d40e9efbd7" CACHE STRING "MD5 checksum of PLUMED tarball")
|
||||
|
||||
mark_as_advanced(PLUMED_URL)
|
||||
mark_as_advanced(PLUMED_MD5)
|
||||
GetFallbackURL(PLUMED_URL PLUMED_FALLBACK)
|
||||
|
||||
# adjust C++ standard support for self-compiled Plumed2
|
||||
if(CMAKE_CXX_STANDARD GREATER 11)
|
||||
set(PLUMED_CXX_STANDARD 14)
|
||||
else()
|
||||
set(PLUMED_CXX_STANDARD 11)
|
||||
endif()
|
||||
|
||||
if((CMAKE_SYSTEM_NAME STREQUAL "Windows") AND (CMAKE_CROSSCOMPILING))
|
||||
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
|
||||
set(CROSS_CONFIGURE mingw64-configure)
|
||||
@ -62,7 +55,7 @@ if((CMAKE_SYSTEM_NAME STREQUAL "Windows") AND (CMAKE_CROSSCOMPILING))
|
||||
URL_MD5 ${PLUMED_MD5}
|
||||
BUILD_IN_SOURCE 1
|
||||
CONFIGURE_COMMAND ${CROSS_CONFIGURE} --disable-shared --disable-bsymbolic
|
||||
--disable-python --enable-cxx=${PLUMED_CXX_STANDARD}
|
||||
--disable-python --enable-cxx=11
|
||||
--enable-modules=-adjmat:+crystallization:-dimred:+drr:+eds:-fisst:+funnel:+logmfd:+manyrestraints:+maze:+opes:+multicolvar:-pamm:-piv:+s2cm:-sasa:-ves
|
||||
${PLUMED_CONFIG_OMP}
|
||||
${PLUMED_CONFIG_MPI}
|
||||
@ -149,7 +142,7 @@ else()
|
||||
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR>
|
||||
${CONFIGURE_REQUEST_PIC}
|
||||
--enable-modules=all
|
||||
--enable-cxx=${PLUMED_CXX_STANDARD}
|
||||
--enable-cxx=11
|
||||
--disable-python
|
||||
${PLUMED_CONFIG_MPI}
|
||||
${PLUMED_CONFIG_OMP}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
|
||||
if(NOT Python_INTERPRETER)
|
||||
# backward compatibility with older LAMMPS documentation
|
||||
# backward compatibility with CMake before 3.12 and older LAMMPS documentation
|
||||
if(PYTHON_EXECUTABLE)
|
||||
set(Python_EXECUTABLE ${PYTHON_EXECUTABLE})
|
||||
endif()
|
||||
|
||||
2
cmake/Modules/Packages/RHEO.cmake
Normal file
2
cmake/Modules/Packages/RHEO.cmake
Normal file
@ -0,0 +1,2 @@
|
||||
find_package(GSL 2.6 REQUIRED)
|
||||
target_link_libraries(lammps PRIVATE GSL::gsl)
|
||||
@ -54,5 +54,5 @@ else()
|
||||
if(NOT VORO_FOUND)
|
||||
message(FATAL_ERROR "Voro++ library not found. Help CMake to find it by setting VORO_LIBRARY and VORO_INCLUDE_DIR, or set DOWNLOAD_VORO=ON to download it")
|
||||
endif()
|
||||
target_link_libraries(lammps PRIVATE VORO::voro++)
|
||||
target_link_libraries(lammps PRIVATE VORO::VORO)
|
||||
endif()
|
||||
|
||||
@ -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}" "$@"
|
||||
|
||||
@ -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 \
|
||||
|
||||
@ -1,9 +1,8 @@
|
||||
# preset that enables KOKKOS and selects CUDA compilation with OpenMP
|
||||
# enabled as well. The GPU architecture *must* match your hardware
|
||||
# enabled as well. The GPU architecture *must* match your hardware (If not manually set, Kokkos will try to autodetect it).
|
||||
set(PKG_KOKKOS ON CACHE BOOL "" FORCE)
|
||||
set(Kokkos_ENABLE_SERIAL ON CACHE BOOL "" FORCE)
|
||||
set(Kokkos_ENABLE_CUDA ON CACHE BOOL "" FORCE)
|
||||
set(Kokkos_ARCH_PASCAL60 ON CACHE BOOL "" FORCE)
|
||||
set(BUILD_OMP ON CACHE BOOL "" FORCE)
|
||||
get_filename_component(NVCC_WRAPPER_CMD ${CMAKE_CURRENT_SOURCE_DIR}/../lib/kokkos/bin/nvcc_wrapper ABSOLUTE)
|
||||
set(CMAKE_CXX_COMPILER ${NVCC_WRAPPER_CMD} CACHE FILEPATH "" FORCE)
|
||||
|
||||
@ -1,29 +0,0 @@
|
||||
# preset that enables KOKKOS and selects SYCL compilation with OpenMP
|
||||
# enabled as well. Also sets some performance related compiler flags.
|
||||
set(PKG_KOKKOS ON CACHE BOOL "" FORCE)
|
||||
set(Kokkos_ENABLE_SERIAL ON CACHE BOOL "" FORCE)
|
||||
set(Kokkos_ENABLE_OPENMP ON CACHE BOOL "" FORCE)
|
||||
set(Kokkos_ENABLE_CUDA OFF CACHE BOOL "" FORCE)
|
||||
set(Kokkos_ENABLE_SYCL ON CACHE BOOL "" FORCE)
|
||||
|
||||
set(FFT "MKL" CACHE STRING "" FORCE)
|
||||
set(FFT_KOKKOS "MKL_GPU" CACHE STRING "" FORCE)
|
||||
|
||||
unset(USE_INTERNAL_LINALG)
|
||||
unset(USE_INTERNAL_LINALG CACHE)
|
||||
set(BLAS_VENDOR "Intel10_64_dyn")
|
||||
|
||||
# hide deprecation warnings temporarily for stable release
|
||||
set(Kokkos_ENABLE_DEPRECATION_WARNINGS OFF CACHE BOOL "" FORCE)
|
||||
|
||||
set(CMAKE_CXX_COMPILER icpx CACHE STRING "" FORCE)
|
||||
set(CMAKE_C_COMPILER icx CACHE STRING "" FORCE)
|
||||
set(CMAKE_Fortran_COMPILER "" CACHE STRING "" FORCE)
|
||||
set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE)
|
||||
set(CMAKE_CXX_STANDARD 17 CACHE STRING "" FORCE)
|
||||
# Silence everything
|
||||
set(CMAKE_CXX_FLAGS "-w" CACHE STRING "" FORCE)
|
||||
#set(CMAKE_EXE_LINKER_FLAGS "-fsycl -flink-huge-device-code -fsycl-targets=spir64_gen " CACHE STRING "" FORCE)
|
||||
#set(CMAKE_TUNE_FLAGS "-O3 -fsycl -fsycl-device-code-split=per_kernel -fsycl-targets=spir64_gen" CACHE STRING "" FORCE)
|
||||
set(CMAKE_EXE_LINKER_FLAGS "-fsycl -flink-huge-device-code " CACHE STRING "" FORCE)
|
||||
set(CMAKE_TUNE_FLAGS "-O3 -fsycl -fsycl-device-code-split=per_kernel " CACHE STRING "" FORCE)
|
||||
@ -67,7 +67,6 @@ set(WIN_PACKAGES
|
||||
REACTION
|
||||
REAXFF
|
||||
REPLICA
|
||||
RHEO
|
||||
RIGID
|
||||
SHOCK
|
||||
SMTBQ
|
||||
|
||||
@ -60,7 +60,6 @@ set(ALL_PACKAGES
|
||||
REACTION
|
||||
REAXFF
|
||||
REPLICA
|
||||
RHEO
|
||||
RIGID
|
||||
SHOCK
|
||||
SPH
|
||||
|
||||
@ -3,9 +3,26 @@
|
||||
set(CMAKE_CXX_COMPILER "icpx" CACHE STRING "" FORCE)
|
||||
set(CMAKE_C_COMPILER "icx" CACHE STRING "" FORCE)
|
||||
set(CMAKE_Fortran_COMPILER "ifx" CACHE STRING "" FORCE)
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "-Wall -Wextra -g" CACHE STRING "" FORCE)
|
||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-Wall -Wextra -g -O2 -DNDEBUG" CACHE STRING "" FORCE)
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG" CACHE STRING "" FORCE)
|
||||
set(CMAKE_Fortran_FLAGS_DEBUG "-Wall -Wextra -g" CACHE STRING "" FORCE)
|
||||
set(CMAKE_Fortran_FLAGS_RELWITHDEBINFO "-Wall -Wextra -g -O2 -DNDEBUG" CACHE STRING "" FORCE)
|
||||
set(CMAKE_Fortran_FLAGS_RELEASE "-O3 -DNDEBUG" CACHE STRING "" FORCE)
|
||||
set(CMAKE_C_FLAGS_DEBUG "-Wall -Wextra -g" CACHE STRING "" FORCE)
|
||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-Wall -Wextra -g -O2 -DNDEBUG" CACHE STRING "" FORCE)
|
||||
set(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG" CACHE STRING "" FORCE)
|
||||
|
||||
set(MPI_CXX "icpx" CACHE STRING "" FORCE)
|
||||
set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE)
|
||||
|
||||
# force using internal BLAS/LAPCK since external ones may not be ABI compatible
|
||||
set(USE_INTERNAL_LINALG ON CACHE BOOL "" FORCE)
|
||||
unset(HAVE_OMP_H_INCLUDE CACHE)
|
||||
set(OpenMP_C "icx" CACHE STRING "" FORCE)
|
||||
set(OpenMP_C_FLAGS "-qopenmp;-qopenmp-simd" CACHE STRING "" FORCE)
|
||||
set(OpenMP_C_LIB_NAMES "omp" CACHE STRING "" FORCE)
|
||||
set(OpenMP_CXX "icpx" CACHE STRING "" FORCE)
|
||||
set(OpenMP_CXX_FLAGS "-qopenmp;-qopenmp-simd" CACHE STRING "" FORCE)
|
||||
set(OpenMP_CXX_LIB_NAMES "omp" CACHE STRING "" FORCE)
|
||||
set(OpenMP_Fortran_FLAGS "-qopenmp;-qopenmp-simd" CACHE STRING "" FORCE)
|
||||
set(OpenMP_omp_LIBRARY "libiomp5.so" CACHE PATH "" FORCE)
|
||||
|
||||
|
||||
@ -60,7 +60,6 @@ set(WIN_PACKAGES
|
||||
REACTION
|
||||
REAXFF
|
||||
REPLICA
|
||||
RHEO
|
||||
RIGID
|
||||
SHOCK
|
||||
SMTBQ
|
||||
|
||||
7
doc/.gitignore
vendored
7
doc/.gitignore
vendored
@ -17,10 +17,3 @@
|
||||
*.el
|
||||
/utils/sphinx-config/_static/mathjax
|
||||
/utils/sphinx-config/_static/polyfill.js
|
||||
/src/pairs.rst
|
||||
/src/bonds.rst
|
||||
/src/angles.rst
|
||||
/src/dihedrals.rst
|
||||
/src/impropers.rst
|
||||
/src/computes.rst
|
||||
/src/fixes.rst
|
||||
|
||||
60
doc/Makefile
60
doc/Makefile
@ -17,11 +17,9 @@ MATHJAXTAG = 3.2.2
|
||||
|
||||
PYTHON = $(word 3,$(shell type python3))
|
||||
DOXYGEN = $(word 3,$(shell type doxygen))
|
||||
PANDOC = $(word 3,$(shell type pandoc))
|
||||
HAS_PYTHON3 = NO
|
||||
HAS_DOXYGEN = NO
|
||||
HAS_PDFLATEX = NO
|
||||
HAS_PANDOC = NO
|
||||
|
||||
ifeq ($(shell type python3 >/dev/null 2>&1; echo $$?), 0)
|
||||
HAS_PYTHON3 = YES
|
||||
@ -33,14 +31,10 @@ endif
|
||||
|
||||
ifeq ($(shell type pdflatex >/dev/null 2>&1; echo $$?), 0)
|
||||
ifeq ($(shell type latexmk >/dev/null 2>&1; echo $$?), 0)
|
||||
HAS_PDFLATEX = YES
|
||||
HAS_PDFLATEX = YES
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(shell type pandoc >/dev/null 2>&1; echo $$?), 0)
|
||||
HAS_PANDOC = YES
|
||||
endif
|
||||
|
||||
# override settings for PIP commands
|
||||
# PIP_OPTIONS = --cert /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt --proxy http://proxy.mydomain.org
|
||||
|
||||
@ -51,9 +45,8 @@ SPHINXEXTRA = -j $(shell $(PYTHON) -c 'import multiprocessing;print(multiprocess
|
||||
# we only want to use explicitly listed files.
|
||||
DOXYFILES = $(shell sed -n -e 's/\#.*$$//' -e '/^ *INPUT \+=/,/^[A-Z_]\+ \+=/p' doxygen/Doxyfile.in | sed -e 's/@LAMMPS_SOURCE_DIR@/..\/src/g' -e 's/\\//g' -e 's/ \+/ /' -e 's/[A-Z_]\+ \+= *\(YES\|NO\|\)//')
|
||||
|
||||
.PHONY: help clean-all clean clean-spelling epub mobi html pdf spelling anchor_check style_check char_check role_check xmlgen fasthtml fasthtml-init
|
||||
.PHONY: help clean-all clean clean-spelling epub mobi html pdf spelling anchor_check style_check char_check role_check xmlgen fasthtml
|
||||
|
||||
FASTHTMLFILES = $(patsubst $(RSTDIR)/%.rst,fasthtml/%.html,$(wildcard $(RSTDIR)/*rst))
|
||||
# ------------------------------------------
|
||||
|
||||
help:
|
||||
@ -90,10 +83,7 @@ $(SPHINXCONFIG)/conf.py: $(SPHINXCONFIG)/conf.py.in
|
||||
-e 's,@LAMMPS_PYTHON_DIR@,$(BUILDDIR)/../python,g' \
|
||||
-e 's,@LAMMPS_DOC_DIR@,$(BUILDDIR),g' $< > $@
|
||||
|
||||
globbed-tocs:
|
||||
$(PYTHON) $(BUILDDIR)/utils/make-globbed-tocs.py -d $(RSTDIR)
|
||||
|
||||
html: xmlgen globbed-tocs $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK) $(MATHJAX)
|
||||
html: xmlgen $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK) $(MATHJAX)
|
||||
@if [ "$(HAS_BASH)" == "NO" ] ; then echo "bash was not found at $(OSHELL)! Please use: $(MAKE) SHELL=/path/to/bash" 1>&2; exit 1; fi
|
||||
@$(MAKE) $(MFLAGS) -C graphviz all
|
||||
@(\
|
||||
@ -112,8 +102,6 @@ html: xmlgen globbed-tocs $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK) $(MATHJ
|
||||
env LC_ALL=C grep -n ':\(ref\|doc\):[^`]' $(RSTDIR)/*.rst ;\
|
||||
env LC_ALL=C grep -n '\(ref\|doc\)`[^`]' $(RSTDIR)/*.rst ;\
|
||||
$(PYTHON) $(BUILDDIR)/utils/check-styles.py -s ../src -d src ;\
|
||||
env LC_ALL=C grep -n -E '^ *\.\. [a-z0-9]+:(\s+.*|)$$' \
|
||||
$(RSTDIR)/*.rst ../src/*.{cpp,h} ../src/*/*.{cpp,h} ;\
|
||||
echo "############################################" ;\
|
||||
deactivate ;\
|
||||
)
|
||||
@ -125,24 +113,26 @@ html: xmlgen globbed-tocs $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK) $(MATHJ
|
||||
@rm -rf html/PDF/.[sg]*
|
||||
@echo "Build finished. The HTML pages are in doc/html."
|
||||
|
||||
fasthtml: fasthtml-init $(FASTHTMLFILES)
|
||||
fasthtml: xmlgen $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK) $(MATHJAX)
|
||||
@if [ "$(HAS_BASH)" == "NO" ] ; then echo "bash was not found at $(OSHELL)! Please use: $(MAKE) SHELL=/path/to/bash" 1>&2; exit 1; fi
|
||||
@$(MAKE) $(MFLAGS) -C graphviz all
|
||||
@mkdir -p fasthtml
|
||||
@(\
|
||||
. $(VENV)/bin/activate ; env PYTHONWARNINGS= PYTHONDONTWRITEBYTECODE=1 \
|
||||
sphinx-build $(SPHINXEXTRA) -b html -c $(SPHINXCONFIG) -d $(BUILDDIR)/fasthtml/doctrees $(RSTDIR) fasthtml ;\
|
||||
touch $(RSTDIR)/Fortran.rst ; env PYTHONWARNINGS= PYTHONDONTWRITEBYTECODE=1 \
|
||||
sphinx-build $(SPHINXEXTRA) -b html -c $(SPHINXCONFIG) -d $(BUILDDIR)/fasthtml/doctrees $(RSTDIR) fasthtml ;\
|
||||
deactivate ;\
|
||||
)
|
||||
@rm -rf fasthtml/_sources
|
||||
@rm -rf fasthtml/PDF
|
||||
@rm -rf fasthtml/USER
|
||||
@rm -rf fasthtml/JPG
|
||||
@cp -r src/PDF fasthtml/PDF
|
||||
@rm -rf fasthtml/PDF/.[sg]*
|
||||
@echo "Fast HTML build finished. The HTML pages are in doc/fasthtml."
|
||||
|
||||
fasthtml-init:
|
||||
@mkdir -p fasthtml/JPG
|
||||
@cp src/JPG/*.* fasthtml/JPG
|
||||
@cp $(RSTDIR)/accel_styles.rst $(RSTDIR)/lepton_expression.rst fasthtml/
|
||||
@cp $(BUILDDIR)/utils/pandoc.css fasthtml/
|
||||
|
||||
fasthtml/%.html: $(RSTDIR)/%.rst
|
||||
@if [ "$(HAS_PANDOC)" == "NO" ] ; then echo "Make 'fasthtml' requires the 'pandoc' software" 1>&2; exit 1; fi
|
||||
@mkdir -p fasthtml
|
||||
@echo converting $< to $@
|
||||
@sed -e 's/\\AA/\\mathring{\\mathrm{A}}/g' $< > fasthtml/$*.temp.rst
|
||||
@pandoc -s --mathml --css="pandoc.css" --template=$(BUILDDIR)/utils/pandoc.html --metadata title="$@" -o $@ fasthtml/$*.temp.rst
|
||||
@rm -f fasthtml/$*.temp.rst
|
||||
|
||||
spelling: xmlgen globbed-tocs $(SPHINXCONFIG)/conf.py $(VENV) $(SPHINXCONFIG)/false_positives.txt
|
||||
spelling: xmlgen $(SPHINXCONFIG)/conf.py $(VENV) $(SPHINXCONFIG)/false_positives.txt
|
||||
@if [ "$(HAS_BASH)" == "NO" ] ; then echo "bash was not found at $(OSHELL)! Please use: $(MAKE) SHELL=/path/to/bash" 1>&2; exit 1; fi
|
||||
@(\
|
||||
. $(VENV)/bin/activate ; \
|
||||
@ -153,7 +143,7 @@ spelling: xmlgen globbed-tocs $(SPHINXCONFIG)/conf.py $(VENV) $(SPHINXCONFIG)/fa
|
||||
)
|
||||
@echo "Spell check finished."
|
||||
|
||||
epub: xmlgen globbed-tocs $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK)
|
||||
epub: xmlgen $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK)
|
||||
@if [ "$(HAS_BASH)" == "NO" ] ; then echo "bash was not found at $(OSHELL)! Please use: $(MAKE) SHELL=/path/to/bash" 1>&2; exit 1; fi
|
||||
@$(MAKE) $(MFLAGS) -C graphviz all
|
||||
@mkdir -p epub/JPG
|
||||
@ -176,7 +166,7 @@ mobi: epub
|
||||
@ebook-convert LAMMPS.epub LAMMPS.mobi
|
||||
@echo "Conversion finished. The MOBI manual file is created."
|
||||
|
||||
pdf: xmlgen globbed-tocs $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK)
|
||||
pdf: xmlgen $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK)
|
||||
@if [ "$(HAS_BASH)" == "NO" ] ; then echo "bash was not found at $(OSHELL)! Please use: $(MAKE) SHELL=/path/to/bash" 1>&2; exit 1; fi
|
||||
@$(MAKE) $(MFLAGS) -C graphviz all
|
||||
@if [ "$(HAS_PDFLATEX)" == "NO" ] ; then echo "PDFLaTeX or latexmk were not found! Please check README for further instructions" 1>&2; exit 1; fi
|
||||
@ -195,8 +185,6 @@ pdf: xmlgen globbed-tocs $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK)
|
||||
env LC_ALL=C grep -n ':\(ref\|doc\):[^`]' $(RSTDIR)/*.rst ;\
|
||||
env LC_ALL=C grep -n '\(ref\|doc\)`[^`]' $(RSTDIR)/*.rst ;\
|
||||
$(PYTHON) utils/check-styles.py -s ../src -d src ;\
|
||||
env LC_ALL=C grep -n -E '^ *\.\. [a-z0-9]+:(\s+.*|)$$' \
|
||||
$(RSTDIR)/*.rst ../src/*.{cpp,h} ../src/*/*.{cpp,h} ;\
|
||||
echo "############################################" ;\
|
||||
deactivate ;\
|
||||
)
|
||||
@ -246,8 +234,6 @@ role_check :
|
||||
@( env LC_ALL=C grep -n ' `[^`]\+<[a-z][^`]\+`[^_]' $(RSTDIR)/*.rst && exit 1 || : )
|
||||
@( env LC_ALL=C grep -n ':\(ref\|doc\):[^`]' $(RSTDIR)/*.rst && exit 1 || : )
|
||||
@( env LC_ALL=C grep -n '\(ref\|doc\)`[^`]' $(RSTDIR)/*.rst && exit 1 || : )
|
||||
@( env LC_ALL=C grep -n -E '^ *\.\. [a-z0-9]+:(\s+.*|)$$' \
|
||||
$(RSTDIR)/*.rst ../src/*.{cpp,h} ../src/*/*.{cpp,h} && exit 1 || : )
|
||||
|
||||
link_check : $(VENV) html
|
||||
@(\
|
||||
|
||||
20
doc/README
20
doc/README
@ -22,12 +22,12 @@ doxygen-warn.log logfile with warnings from running doxygen
|
||||
and:
|
||||
|
||||
github-development-workflow.md notes on the LAMMPS development workflow
|
||||
include-file-conventions.md notes on LAMMPS' include file conventions
|
||||
documentation_conventions.md notes on writing documentation for LAMMPS
|
||||
|
||||
If you downloaded a LAMMPS tarball from www.lammps.org, then the html
|
||||
folder and the PDF manual should be included. If you downloaded LAMMPS
|
||||
using GitHub then you either need to build them yourself or read the
|
||||
online version at https://docs.lammps.org/
|
||||
from GitHub then you either need to build them.
|
||||
|
||||
You can build the HTML and PDF files yourself, by typing "make html"
|
||||
or by "make pdf", respectively. This requires various tools and files.
|
||||
@ -39,10 +39,10 @@ environment and local folders.
|
||||
|
||||
Installing prerequisites for the documentation build
|
||||
|
||||
To run the HTML documention build toolchain, python 3.8 or later,
|
||||
doxygen 1.8.10 or later, git, and the venv python module have to be
|
||||
installed if not already available. Also internet access is initially
|
||||
required to download external files and tools.
|
||||
To run the HTML documention build toolchain, python 3.x, doxygen, git,
|
||||
and the venv python module have to be installed if not already available.
|
||||
Also internet access is initially required to download external files
|
||||
and tools.
|
||||
|
||||
Building the PDF format manual requires in addition a compatible LaTeX
|
||||
installation with support for PDFLaTeX and several add-on LaTeX packages
|
||||
@ -52,24 +52,16 @@ installed. This includes:
|
||||
- babel
|
||||
- capt-of
|
||||
- cmap
|
||||
- dvipng
|
||||
- ellipse
|
||||
- fncychap
|
||||
- fontawesom
|
||||
- framed
|
||||
- geometry
|
||||
- gyre
|
||||
- hyperref
|
||||
- hypcap
|
||||
- needspace
|
||||
- pict2e
|
||||
- times
|
||||
- tabulary
|
||||
- titlesec
|
||||
- upquote
|
||||
- wrapfig
|
||||
- xindy
|
||||
|
||||
Also the latexmk script is required to run PDFLaTeX and related tools.
|
||||
the required number of times to have self-consistent output and include
|
||||
updated bibliography and indices.
|
||||
|
||||
@ -10,7 +10,7 @@ Last change: 2022-12-30
|
||||
|
||||
In fall 2019, the LAMMPS documentation file format has changed from a
|
||||
home grown markup designed to generate HTML format files only, to
|
||||
[reStructuredText](https://docutils.sourceforge.io/rst.html>). For a
|
||||
[reStructuredText](https://docutils.sourceforge.io/rst.html>. For a
|
||||
transition period all files in the old .txt format were transparently
|
||||
converted to .rst and then processed. The `txt2rst tool` is still
|
||||
included in the distribution to obtain an initial .rst file for legacy
|
||||
@ -45,7 +45,8 @@ what kind of information and sections are needed.
|
||||
|
||||
## Formatting conventions
|
||||
|
||||
For headlines we try to follow the conventions posted [here](https://documentation-style-guide-sphinx.readthedocs.io/en/latest/style-guide.html#headings).
|
||||
For headlines we try to follow the conventions posted here:
|
||||
https://documentation-style-guide-sphinx.readthedocs.io/en/latest/style-guide.html#headings
|
||||
It seems to be sufficient to have this consistent only within
|
||||
any single file and it is not (yet) enforced strictly, but making
|
||||
this globally consistent makes it easier to move sections around.
|
||||
@ -63,7 +64,7 @@ Groups of shell commands or LAMMPS input script or C/C++/Python source
|
||||
code should be typeset into a `.. code-block::` section. A syntax
|
||||
highlighting extension for LAMMPS input scripts is provided, so `LAMMPS`
|
||||
can be used to indicate the language in the code block in addition to
|
||||
`bash`, `c`, `c++`, `console`, `csh`, `diff`, `fortran`, `json`, `make`,
|
||||
`bash`, `c`, `c++`, `console`, `csh`, `diff', `fortran`, `json`, `make`,
|
||||
`perl`, `powershell`, `python`, `sh`, or `tcl`, `text`, or `yaml`. When
|
||||
no syntax style is indicated, no syntax highlighting is performed. When
|
||||
typesetting commands executed on the shell, please do not prefix
|
||||
@ -83,7 +84,7 @@ block can be used, followed by multiple `.. tab::` blocks, one
|
||||
for each alternative. This is only used for HTML output. For other
|
||||
outputs, the `.. tabs::` directive is transparently removed and
|
||||
the individual `.. tab::` blocks will be replaced with an
|
||||
`.. admonition::` block. Thus in PDF and ePUB output those will
|
||||
`.. admonition::`` block. Thus in PDF and ePUB output those will
|
||||
be realized as sequential and plain notes.
|
||||
|
||||
Special remarks can be highlighted with a `.. note::` block and
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
|
||||
DOXYFILE_ENCODING = UTF-8
|
||||
PROJECT_NAME = "LAMMPS Programmer's Guide"
|
||||
PROJECT_NUMBER = "19 November 2024"
|
||||
PROJECT_NUMBER = "4 May 2022"
|
||||
PROJECT_BRIEF = "Documentation of the LAMMPS library interface and Python wrapper"
|
||||
PROJECT_LOGO = lammps-logo.png
|
||||
CREATE_SUBDIRS = NO
|
||||
|
||||
@ -6,9 +6,7 @@ choices the LAMMPS developers have agreed on. Git and GitHub provide the
|
||||
tools, but do not set policies, so it is up to the developers to come to
|
||||
an agreement as to how to define and interpret policies. This document
|
||||
is likely to change as our experiences and needs change, and we try to
|
||||
adapt it accordingly.
|
||||
|
||||
Last change: 2023-02-10
|
||||
adapt it accordingly. Last change 2023-02-10.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
@ -74,7 +72,7 @@ be assigned to signal urgency to merge this pull request quickly.
|
||||
People can be assigned to review a pull request in two ways:
|
||||
|
||||
* They can be assigned manually to review a pull request
|
||||
by the submitter or a LAMMPS developer.
|
||||
by the submitter or a LAMMPS developer
|
||||
* They can be automatically assigned, because a developer's GitHub
|
||||
handle matches a file pattern in the `.github/CODEOWNERS` file,
|
||||
which associates developers with the code they contributed and
|
||||
@ -88,9 +86,9 @@ required before merging, in addition to passing all automated
|
||||
compilation and unit tests. Merging counts as implicit approval, so
|
||||
does submission of a pull request (by a LAMMPS developer). So the person
|
||||
doing the merge may not also submit an approving review. The GitHub
|
||||
feature that reviews from code owners are "hard" reviews (i.e. they
|
||||
must all approve before merging is allowed) is currently disabled.
|
||||
It is at the discretion of the merge maintainer to assess when a
|
||||
feature, that reviews from code owners are "hard" reviews (i.e. they
|
||||
must all approve before merging is allowed), is currently disabled.
|
||||
It is in the discretion of the merge maintainer to assess when a
|
||||
sufficient degree of approval has been reached, especially from external
|
||||
collaborators. Reviews may be (automatically) dismissed, when the
|
||||
reviewed code has been changed. Review may be requested a second time.
|
||||
@ -149,8 +147,7 @@ only contain bug fixes, feature additions to peripheral functionality,
|
||||
and documentation updates. In between stable releases, bug fixes and
|
||||
infrastructure updates are back-ported from the "develop" branch to the
|
||||
"maintenance" branch and occasionally merged into "stable" and published
|
||||
as update releases. Further explanation of LAMMPS versions can be found
|
||||
[in the documentation](https://docs.lammps.org/Manual_version.html).
|
||||
as update releases.
|
||||
|
||||
## Project Management
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
.TH LAMMPS "1" "2 April 2025" "2025-04-02"
|
||||
.TH LAMMPS "1" "29 August 2024" "2024-08-29"
|
||||
.SH NAME
|
||||
.B LAMMPS
|
||||
\- Molecular Dynamics Simulator. Version 2 April 2025
|
||||
\- Molecular Dynamics Simulator. Version 29 August 2024
|
||||
|
||||
.SH SYNOPSIS
|
||||
.B lmp
|
||||
@ -311,7 +311,7 @@ the chapter on errors in the
|
||||
manual gives some additional information about error messages, if possible.
|
||||
|
||||
.SH COPYRIGHT
|
||||
© 2003--2025 Sandia Corporation
|
||||
© 2003--2024 Sandia Corporation
|
||||
|
||||
This package is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License version 2 as
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
.TH MSI2LMP "1" "v3.9.11" "2024-09-06"
|
||||
.TH MSI2LMP "1" "v3.9.10" "2023-03-10"
|
||||
.SH NAME
|
||||
.B MSI2LMP
|
||||
\- Converter for Materials Studio files to LAMMPS
|
||||
@ -101,7 +101,7 @@ msi2lmp decane -c 0 -f oplsaa
|
||||
|
||||
|
||||
.SH COPYRIGHT
|
||||
© 2003--2024 Sandia Corporation
|
||||
© 2003--2022 Sandia Corporation
|
||||
|
||||
This package is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License version 2 as
|
||||
|
||||
@ -1,42 +1,15 @@
|
||||
Build LAMMPS
|
||||
============
|
||||
|
||||
LAMMPS is built as a library and an executable from source code using a
|
||||
build environment generated by CMake (Unix Makefiles, Ninja, Xcode,
|
||||
Visual Studio, KDevelop, CodeBlocks and more depending on the platform).
|
||||
Using CMake is the preferred way to build LAMMPS. In addition, LAMMPS
|
||||
can be compiled using the legacy build system based on traditional
|
||||
makefiles for use with GNU make (which may require manual editing).
|
||||
Support for the legacy build system is slowly being phased out and may
|
||||
not be available for all optional features.
|
||||
LAMMPS is built as a library and an executable from source code using
|
||||
either traditional makefiles for use with GNU make (which may require
|
||||
manual editing), or using a build environment generated by CMake (Unix
|
||||
Makefiles, Ninja, Xcode, Visual Studio, KDevelop, CodeBlocks and more).
|
||||
|
||||
As an alternative, you can download a package with pre-built executables
|
||||
or automated build trees, as described in the :doc:`Install <Install>`
|
||||
section of the manual.
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
|
||||
Which software you need to compile and use LAMMPS strongly depends on
|
||||
which :doc:`features and settings <Build_settings>` and which
|
||||
:doc:`optional packages <Packages_list>` you are trying to include.
|
||||
Common to all is that you need a C++ and C compiler, where the C++
|
||||
compiler has to support at least the C++11 standard (note that some
|
||||
compilers require command-line flag to activate C++11 support).
|
||||
Furthermore, if you are building with CMake, you need at least CMake
|
||||
version 3.20 and a compatible build tool (make or ninja-build); if you
|
||||
are building the the legacy GNU make based build system you need GNU
|
||||
make (other make variants are not going to work since the build system
|
||||
uses features unique to GNU make) and a Unix-like build environment with
|
||||
a Bourne shell, and shell tools like "sed", "grep", "touch", "test",
|
||||
"tr", "cp", "mv", "rm", "ln", "diff" and so on. Parts of LAMMPS
|
||||
interface with or use Python version 3.6 or later.
|
||||
|
||||
The LAMMPS developers aim to keep LAMMPS very portable and usable -
|
||||
at least in parts - on most operating systems commonly used for
|
||||
running MD simulations. Please see the :doc:`section on portablility
|
||||
<Intro_portability>` for more details.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
|
||||
@ -160,7 +160,7 @@ with the OpenMP 3.1 semantics used in LAMMPS for maximal compatibility
|
||||
with compiler versions in use. If compilation with OpenMP enabled fails
|
||||
because of your compiler requiring strict OpenMP 4.0 semantics, you can
|
||||
change the behavior by adding ``-D LAMMPS_OMP_COMPAT=4`` to the
|
||||
``LMP_INC`` variable in your makefile, or add it to the command-line flags
|
||||
``LMP_INC`` variable in your makefile, or add it to the command line
|
||||
while configuring with CMake. LAMMPS will auto-detect a suitable setting
|
||||
for most GNU, Clang, and Intel compilers.
|
||||
|
||||
@ -196,18 +196,13 @@ LAMMPS.
|
||||
|
||||
.. tab:: CMake build
|
||||
|
||||
By default CMake will use the compiler it finds according to its
|
||||
By default CMake will use the compiler it finds according to
|
||||
internal preferences, and it will add optimization flags
|
||||
appropriate to that compiler and any :doc:`accelerator packages
|
||||
<Speed_packages>` you have included in the build. CMake will
|
||||
check if the detected or selected compiler is compatible with the
|
||||
C++ support requirements of LAMMPS and stop with an error, if this
|
||||
is not the case. A C++11 compatible compiler is currently
|
||||
required, but a transition to require C++17 is in progress and
|
||||
planned to be completed in Summer 2025. Currently, setting
|
||||
``-DLAMMPS_CXX11=yes`` is required when configuring with CMake while
|
||||
using a C++11 compatible compiler that does not support C++17,
|
||||
otherwise setting ``-DCMAKE_CXX_STANDARD=17`` is preferred.
|
||||
is not the case.
|
||||
|
||||
You can tell CMake to look for a specific compiler with setting
|
||||
CMake variables (listed below) during configuration. For a few
|
||||
@ -228,8 +223,6 @@ LAMMPS.
|
||||
-D CMAKE_C_COMPILER=name # name of C compiler
|
||||
-D CMAKE_Fortran_COMPILER=name # name of Fortran compiler
|
||||
|
||||
-D CMAKE_CXX_STANDARD=17 # put compiler in C++17 mode
|
||||
-D LAMMPS_CXX11=yes # enforce compilation in C++11 mode
|
||||
-D CMAKE_CXX_FLAGS=string # flags to use with C++ compiler
|
||||
-D CMAKE_C_FLAGS=string # flags to use with C compiler
|
||||
-D CMAKE_Fortran_FLAGS=string # flags to use with Fortran compiler
|
||||
@ -328,23 +321,15 @@ LAMMPS.
|
||||
you would have to install a newer compiler that supports C++11;
|
||||
either as a binary package or through compiling from source.
|
||||
|
||||
While a C++11 compatible compiler is currently sufficient to compile
|
||||
LAMMPS, a transition to require C++17 is in progress and planned to
|
||||
be completed in Summer 2025. Currently, setting ``-DLAMMPS_CXX11``
|
||||
in the ``LMP_INC =`` line in the machine makefile is required when
|
||||
using a C++11 compatible compiler that does not support C++17.
|
||||
Otherwise, to enable C++17 support (if not enabled by default) using
|
||||
a compiler flag like ``-std=c++17`` in CCFLAGS may needed.
|
||||
|
||||
If you build LAMMPS with any :doc:`Speed_packages` included,
|
||||
there may be specific compiler or linker flags that are either
|
||||
required or recommended to enable required features and to
|
||||
achieve optimal performance. You need to include these in the
|
||||
``CCFLAGS`` and ``LINKFLAGS`` settings above. For details, see the
|
||||
documentation for the individual packages listed on the
|
||||
:doc:`Speed_packages` page. Or examine these files in the
|
||||
``src/MAKE/OPTIONS`` directory. They correspond to each of the 5
|
||||
accelerator packages and their hardware variants:
|
||||
If you build LAMMPS with any :doc:`Speed_packages` included,
|
||||
there may be specific compiler or linker flags that are either
|
||||
required or recommended to enable required features and to
|
||||
achieve optimal performance. You need to include these in the
|
||||
``CCFLAGS`` and ``LINKFLAGS`` settings above. For details, see the
|
||||
documentation for the individual packages listed on the
|
||||
:doc:`Speed_packages` page. Or examine these files in the
|
||||
``src/MAKE/OPTIONS`` directory. They correspond to each of the 5
|
||||
accelerator packages and their hardware variants:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
|
||||
@ -8,7 +8,7 @@ packages. Links to those pages on the :doc:`Build overview <Build>`
|
||||
page.
|
||||
|
||||
The following text assumes some familiarity with CMake and focuses on
|
||||
using the command-line tool ``cmake`` and what settings are supported
|
||||
using the command line tool ``cmake`` and what settings are supported
|
||||
for building LAMMPS. A more detailed tutorial on how to use CMake
|
||||
itself, the text mode or graphical user interface, to change the
|
||||
generated output files for different build tools and development
|
||||
@ -16,7 +16,7 @@ environments is on a :doc:`separate page <Howto_cmake>`.
|
||||
|
||||
.. note::
|
||||
|
||||
LAMMPS currently requires that CMake version 3.20 or later is available.
|
||||
LAMMPS currently requires that CMake version 3.16 or later is available.
|
||||
|
||||
.. warning::
|
||||
|
||||
@ -32,29 +32,29 @@ environments is on a :doc:`separate page <Howto_cmake>`.
|
||||
Advantages of using CMake
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
CMake is the preferred way of compiling LAMMPS in contrast to the legacy
|
||||
build system based on GNU make and through :doc:`(manually customized)
|
||||
makefiles <Build_make>`. Using CMake has multiple advantages that are
|
||||
specifically helpful for people with limited experience in compiling
|
||||
software or for people that want to modify or extend LAMMPS.
|
||||
CMake is an alternative to compiling LAMMPS in the traditional way
|
||||
through :doc:`(manually customized) makefiles <Build_make>`. Using
|
||||
CMake has multiple advantages that are specifically helpful for
|
||||
people with limited experience in compiling software or for people
|
||||
that want to modify or extend LAMMPS.
|
||||
|
||||
- CMake can detect available hardware, tools, features, and libraries
|
||||
and adapt the LAMMPS default build configuration accordingly.
|
||||
- CMake can generate files for different build tools and integrated
|
||||
development environments (IDE).
|
||||
- CMake supports customization of settings with a command-line, text
|
||||
- CMake supports customization of settings with a command line, text
|
||||
mode, or graphical user interface. No manual editing of files,
|
||||
knowledge of file formats or complex command-line syntax is required.
|
||||
knowledge of file formats or complex command line syntax is required.
|
||||
- All enabled components are compiled in a single build operation.
|
||||
- Automated dependency tracking for all files and configuration options.
|
||||
- Support for true out-of-source compilation. Multiple configurations
|
||||
- Support for true out-of-source compilation. Multiple configurations
|
||||
and settings with different choices of LAMMPS packages, settings, or
|
||||
compilers can be configured and built concurrently from the same
|
||||
source tree.
|
||||
- Simplified packaging of LAMMPS for Linux distributions, environment
|
||||
modules, or automated build tools like `Spack <https://spack.io>`_
|
||||
or `Homebrew <https://brew.sh/>`_.
|
||||
- Integration of automated unit and regression testing.
|
||||
modules, or automated build tools like `Homebrew <https://brew.sh/>`_.
|
||||
- Integration of automated unit and regression testing (the LAMMPS side
|
||||
of this is still under active development).
|
||||
|
||||
.. _cmake_build:
|
||||
|
||||
@ -68,7 +68,7 @@ that purpose you can use either the command-line utility ``cmake`` (or
|
||||
graphical utility ``cmake-gui``, or use them interchangeably. The
|
||||
second step is then the compilation and linking of all objects,
|
||||
libraries, and executables using the selected build tool. Here is a
|
||||
minimal example using the command-line version of CMake to build LAMMPS
|
||||
minimal example using the command line version of CMake to build LAMMPS
|
||||
with no add-on packages enabled and no customization:
|
||||
|
||||
.. code-block:: bash
|
||||
@ -119,13 +119,6 @@ configured) and additional files like LAMMPS API headers, manpages,
|
||||
potential and force field files. The location of the installation tree
|
||||
defaults to ``${HOME}/.local``.
|
||||
|
||||
.. note::
|
||||
|
||||
If you have set `-D CMAKE_INSTALL_PREFIX` to install LAMMPS into a
|
||||
system location on a Linux machine , you may also have to run (as
|
||||
root) the `ldconfig` program to update the cache file for fast lookup
|
||||
of system shared libraries.
|
||||
|
||||
.. _cmake_options:
|
||||
|
||||
Configuration and build options
|
||||
@ -138,7 +131,7 @@ file called ``CMakeLists.txt`` (for LAMMPS it is located in the
|
||||
configuration step. The cache file contains all current CMake settings.
|
||||
|
||||
To modify settings, enable or disable features, you need to set
|
||||
*variables* with either the ``-D`` command-line flag (``-D
|
||||
*variables* with either the ``-D`` command line flag (``-D
|
||||
VARIABLE1_NAME=value``) or change them in the text mode of the graphical
|
||||
user interface. The ``-D`` flag can be used several times in one command.
|
||||
|
||||
@ -148,11 +141,11 @@ a different compiler tool chain. Those are loaded with the ``-C`` flag
|
||||
(``-C ../cmake/presets/basic.cmake``). This step would only be needed
|
||||
once, as the settings from the preset files are stored in the
|
||||
``CMakeCache.txt`` file. It is also possible to customize the build
|
||||
by adding one or more ``-D`` flags to the CMake command.
|
||||
by adding one or more ``-D`` flags to the CMake command line.
|
||||
|
||||
Generating files for alternate build tools (e.g. Ninja) and project files
|
||||
for IDEs like Eclipse, CodeBlocks, or Kate can be selected using the ``-G``
|
||||
command-line flag. A list of available generator settings for your
|
||||
command line flag. A list of available generator settings for your
|
||||
specific CMake version is given when running ``cmake --help``.
|
||||
|
||||
.. _cmake_multiconfig:
|
||||
|
||||
@ -138,27 +138,12 @@ during development:
|
||||
The status of this automated testing can be viewed on `https://ci.lammps.org
|
||||
<https://ci.lammps.org>`_.
|
||||
|
||||
The scripts and inputs for integration, run, and legacy regression
|
||||
testing are maintained in a `separate repository
|
||||
<https://github.com/lammps/lammps-testing>`_ of the LAMMPS project on
|
||||
GitHub. A few tests are also run as GitHub Actions and their
|
||||
configuration files are in the ``.github/workflows/`` folder of the
|
||||
LAMMPS git tree.
|
||||
|
||||
Regression tests can also be performed locally with the :ref:`regression
|
||||
tester tool <regression>`. The tool checks if a given LAMMPS binary run
|
||||
with selected input examples produces thermo output that is consistent
|
||||
with the provided log files. The script can be run in one pass over all
|
||||
available input files, but it can also first create multiple lists of
|
||||
inputs or folders that can then be run with multiple workers
|
||||
concurrently to speed things up. Another mode allows to do a quick
|
||||
check of inputs that contain commands that have changes in the current
|
||||
checkout branch relative to a git branch. This works similar to the two
|
||||
pass mode, but will select only shorter runs and no more than 100 inputs
|
||||
that are chosen randomly. This ensures that this test runs
|
||||
significantly faster compared to the full test run. These test runs can
|
||||
also be performed with instrumented LAMMPS binaries (see previous
|
||||
section).
|
||||
The scripts and inputs for integration, run, and regression testing
|
||||
are maintained in a
|
||||
`separate repository <https://github.com/lammps/lammps-testing>`_
|
||||
of the LAMMPS project on GitHub. A few tests are also run as GitHub
|
||||
Actions and their configuration files are in the ``.github/workflows/``
|
||||
folder of the LAMMPS git tree.
|
||||
|
||||
The unit testing facility is integrated into the CMake build process of
|
||||
the LAMMPS source code distribution itself. It can be enabled by
|
||||
@ -263,9 +248,9 @@ will be skipped if prerequisite features are not available in LAMMPS.
|
||||
time. Preference is given to parts of the code base that are easy to
|
||||
test or commonly used.
|
||||
|
||||
Tests as shown by the ``ctest`` program are commands defined in the
|
||||
Tests as shown by the ``ctest`` program are command lines defined in the
|
||||
``CMakeLists.txt`` files in the ``unittest`` directory tree. A few
|
||||
tests simply execute LAMMPS with specific command-line flags and check
|
||||
tests simply execute LAMMPS with specific command line flags and check
|
||||
the output to the screen for expected content. A large number of unit
|
||||
tests are special tests programs using the `GoogleTest framework
|
||||
<https://github.com/google/googletest/>`_ and linked to the LAMMPS
|
||||
@ -420,7 +405,7 @@ during MD timestepping and manipulate per-atom properties like
|
||||
positions, velocities, and forces. For those fix styles, testing can be
|
||||
done in a very similar fashion as for force fields and thus there is a
|
||||
test program `test_fix_timestep` that shares a lot of code, properties,
|
||||
and command-line flags with the force field style testers described in
|
||||
and command line flags with the force field style testers described in
|
||||
the previous section.
|
||||
|
||||
This tester will set up a small molecular system run with verlet run
|
||||
@ -642,38 +627,14 @@ The following target are available for both, GNU make and CMake:
|
||||
|
||||
.. _gh-cli:
|
||||
|
||||
GitHub command-line interface
|
||||
GitHub command line interface
|
||||
-----------------------------
|
||||
|
||||
GitHub has developed a `command-line tool <https://cli.github.com>`_
|
||||
to interact with the GitHub website via a command called ``gh``.
|
||||
This is extremely convenient when working with a Git repository hosted
|
||||
on GitHub (like LAMMPS). It is thus highly recommended to install it
|
||||
when doing LAMMPS development. To use ``gh`` you must be within a git
|
||||
checkout of a repository and you must obtain an authentication token
|
||||
to connect your checkout with a GitHub user. This is done with the
|
||||
command: ``gh auth login`` where you then have to follow the prompts.
|
||||
Here are some examples:
|
||||
GitHub is developing a `tool for the command line
|
||||
<https://cli.github.com>`_ that interacts with the GitHub website via a
|
||||
command called ``gh``. This can be extremely convenient when working
|
||||
with a Git repository hosted on GitHub (like LAMMPS). It is thus highly
|
||||
recommended to install it when doing LAMMPS development.
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:widths: 34 66
|
||||
|
||||
* - Command
|
||||
- Description
|
||||
* - ``gh pr list``
|
||||
- List currently open pull requests
|
||||
* - ``gh pr checks 404``
|
||||
- Shows the status of all checks for pull request #404
|
||||
* - ``gh pr view 404``
|
||||
- Shows the description and recent comments for pull request #404
|
||||
* - ``gh co 404``
|
||||
- Check out the branch from pull request #404; set up for pushing changes
|
||||
* - ``gh issue list``
|
||||
- List currently open issues
|
||||
* - ``gh issue view 430 --comments``
|
||||
- Shows the description and all comments for issue #430
|
||||
|
||||
The capabilities of the ``gh`` command are continually expanding, so
|
||||
for more details please see the documentation at https://cli.github.com/manual/
|
||||
or use ``gh --help`` or ``gh <command> --help`` for embedded help.
|
||||
The capabilities of the ``gh`` command is continually expanding, so
|
||||
please see the documentation at https://cli.github.com/manual/
|
||||
|
||||
@ -7,8 +7,6 @@ in addition to
|
||||
.. list-table::
|
||||
:align: center
|
||||
:header-rows: 1
|
||||
:widths: 50 50
|
||||
:width: 80%
|
||||
|
||||
* - CMake build
|
||||
- Traditional make
|
||||
@ -48,7 +46,6 @@ This is the list of packages that may require additional steps.
|
||||
* :ref:`LEPTON <lepton>`
|
||||
* :ref:`MACHDYN <machdyn>`
|
||||
* :ref:`MDI <mdi>`
|
||||
* :ref:`MISC <misc>`
|
||||
* :ref:`ML-HDNNP <ml-hdnnp>`
|
||||
* :ref:`ML-IAP <mliap>`
|
||||
* :ref:`ML-PACE <ml-pace>`
|
||||
@ -118,7 +115,7 @@ GPU package
|
||||
|
||||
To build with this package, you must choose options for precision and
|
||||
which GPU hardware to build for. The GPU package currently supports
|
||||
three different types of back ends: OpenCL, CUDA and HIP.
|
||||
three different types of backends: OpenCL, CUDA and HIP.
|
||||
|
||||
CMake build
|
||||
^^^^^^^^^^^
|
||||
@ -208,9 +205,9 @@ necessary for ``hipcc`` and the linker to work correctly.
|
||||
.. versionadded:: 3Aug2022
|
||||
|
||||
Using the CHIP-SPV implementation of HIP is supported. It allows one to
|
||||
run HIP code on Intel GPUs via the OpenCL or Level Zero back ends. To use
|
||||
run HIP code on Intel GPUs via the OpenCL or Level Zero backends. To use
|
||||
CHIP-SPV, you must set ``-DHIP_USE_DEVICE_SORT=OFF`` in your CMake
|
||||
command-line as CHIP-SPV does not yet support hipCUB. As of Summer 2022,
|
||||
command line as CHIP-SPV does not yet support hipCUB. As of Summer 2022,
|
||||
the use of HIP for Intel GPUs is experimental. You should only use this
|
||||
option in preparations to run on Aurora system at Argonne.
|
||||
|
||||
@ -233,7 +230,7 @@ option in preparations to run on Aurora system at Argonne.
|
||||
|
||||
.. code:: bash
|
||||
|
||||
# CUDA target (not recommended, use GPU_API=cuda)
|
||||
# CUDA target (not recommended, use GPU_ARCH=cuda)
|
||||
# !!! DO NOT set CMAKE_CXX_COMPILER !!!
|
||||
export HIP_PLATFORM=nvcc
|
||||
export HIP_PATH=/path/to/HIP/install
|
||||
@ -255,10 +252,11 @@ Traditional make
|
||||
|
||||
Before building LAMMPS, you must build the GPU library in ``lib/gpu``\ .
|
||||
You can do this manually if you prefer; follow the instructions in
|
||||
``lib/gpu/README``. Note that the GPU library uses MPI calls, so you
|
||||
must use the same MPI library (or the STUBS library) settings as the
|
||||
main LAMMPS code. This also applies to the ``-DLAMMPS_BIGBIG`` or
|
||||
``-DLAMMPS_SMALLBIG`` settings in whichever Makefile you use.
|
||||
``lib/gpu/README``. Note that the GPU library uses MPI calls, so you must
|
||||
use the same MPI library (or the STUBS library) settings as the main
|
||||
LAMMPS code. This also applies to the ``-DLAMMPS_BIGBIG``\ ,
|
||||
``-DLAMMPS_SMALLBIG``\ , or ``-DLAMMPS_SMALLSMALL`` settings in whichever
|
||||
Makefile you use.
|
||||
|
||||
You can also build the library in one step from the ``lammps/src`` dir,
|
||||
using a command like these, which simply invokes the ``lib/gpu/Install.py``
|
||||
@ -421,10 +419,9 @@ minutes to hours) to build. Of course you only need to do that once.)
|
||||
cmake build system. The ``lib/kim/Install.py`` script supports a
|
||||
``CMAKE`` environment variable if the cmake executable is named other
|
||||
than ``cmake`` on your system. Additional environment variables may be
|
||||
set with the ``make`` command for use by cmake. For example, to use the
|
||||
``cmake3`` executable and tell it to use the GNU version 11 compilers
|
||||
called ``g++-11``, ``gcc-11`` and ``gfortran-11`` to build KIM, one
|
||||
could use the following command.
|
||||
provided on the command line for use by cmake. For example, to use the
|
||||
``cmake3`` executable and tell it to use the gnu version 11 compilers
|
||||
to build KIM, one could use the following command line.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
@ -547,7 +544,16 @@ They must be specified in uppercase.
|
||||
- Local machine
|
||||
* - AMDAVX
|
||||
- HOST
|
||||
- AMD chip
|
||||
- AMD 64-bit x86 CPU (AVX 1)
|
||||
* - ZEN
|
||||
- HOST
|
||||
- AMD Zen class CPU (AVX 2)
|
||||
* - ZEN2
|
||||
- HOST
|
||||
- AMD Zen2 class CPU (AVX 2)
|
||||
* - ZEN3
|
||||
- HOST
|
||||
- AMD Zen3 class CPU (AVX 2)
|
||||
* - ARMV80
|
||||
- HOST
|
||||
- ARMv8.0 Compatible CPU
|
||||
@ -563,129 +569,105 @@ They must be specified in uppercase.
|
||||
* - A64FX
|
||||
- HOST
|
||||
- ARMv8.2 with SVE Support
|
||||
* - ARMV9_GRACE
|
||||
- HOST
|
||||
- ARMv9 NVIDIA Grace CPU
|
||||
* - SNB
|
||||
- HOST
|
||||
- Intel Sandy/Ivy Bridge CPUs
|
||||
- Intel Sandy/Ivy Bridge CPU (AVX 1)
|
||||
* - HSW
|
||||
- HOST
|
||||
- Intel Haswell CPUs
|
||||
- Intel Haswell CPU (AVX 2)
|
||||
* - BDW
|
||||
- HOST
|
||||
- Intel Broadwell Xeon E-class CPUs
|
||||
* - ICL
|
||||
- HOST
|
||||
- Intel Ice Lake Client CPUs (AVX512)
|
||||
* - ICX
|
||||
- HOST
|
||||
- Intel Ice Lake Xeon Server CPUs (AVX512)
|
||||
- Intel Broadwell Xeon E-class CPU (AVX 2 + transactional mem)
|
||||
* - SKL
|
||||
- HOST
|
||||
- Intel Skylake Client CPUs
|
||||
- Intel Skylake Client CPU
|
||||
* - SKX
|
||||
- HOST
|
||||
- Intel Skylake Xeon Server CPUs (AVX512)
|
||||
- Intel Skylake Xeon Server CPU (AVX512)
|
||||
* - ICL
|
||||
- HOST
|
||||
- Intel Ice Lake Client CPU (AVX512)
|
||||
* - ICX
|
||||
- HOST
|
||||
- Intel Ice Lake Xeon Server CPU (AVX512)
|
||||
* - SPR
|
||||
- HOST
|
||||
- Intel Sapphire Rapids Xeon Server CPU (AVX512)
|
||||
* - KNC
|
||||
- HOST
|
||||
- Intel Knights Corner Xeon Phi
|
||||
* - KNL
|
||||
- HOST
|
||||
- Intel Knights Landing Xeon Phi
|
||||
* - SPR
|
||||
- HOST
|
||||
- Intel Sapphire Rapids Xeon Server CPUs (AVX512)
|
||||
* - POWER8
|
||||
- HOST
|
||||
- IBM POWER8 CPUs
|
||||
- IBM POWER8 CPU
|
||||
* - POWER9
|
||||
- HOST
|
||||
- IBM POWER9 CPUs
|
||||
* - ZEN
|
||||
- HOST
|
||||
- AMD Zen architecture
|
||||
* - ZEN2
|
||||
- HOST
|
||||
- AMD Zen2 architecture
|
||||
* - ZEN3
|
||||
- HOST
|
||||
- AMD Zen3 architecture
|
||||
* - ZEN4
|
||||
- HOST
|
||||
- AMD Zen4 architecture
|
||||
- IBM POWER9 CPU
|
||||
* - RISCV_SG2042
|
||||
- HOST
|
||||
- SG2042 (RISC-V) CPUs
|
||||
* - RISCV_RVA22V
|
||||
- HOST
|
||||
- RVA22V (RISC-V) CPUs
|
||||
- SG2042 (RISC-V) CPU
|
||||
* - KEPLER30
|
||||
- GPU
|
||||
- NVIDIA Kepler generation CC 3.0
|
||||
- NVIDIA Kepler generation CC 3.0 GPU
|
||||
* - KEPLER32
|
||||
- GPU
|
||||
- NVIDIA Kepler generation CC 3.2
|
||||
- NVIDIA Kepler generation CC 3.2 GPU
|
||||
* - KEPLER35
|
||||
- GPU
|
||||
- NVIDIA Kepler generation CC 3.5
|
||||
- NVIDIA Kepler generation CC 3.5 GPU
|
||||
* - KEPLER37
|
||||
- GPU
|
||||
- NVIDIA Kepler generation CC 3.7
|
||||
- NVIDIA Kepler generation CC 3.7 GPU
|
||||
* - MAXWELL50
|
||||
- GPU
|
||||
- NVIDIA Maxwell generation CC 5.0
|
||||
- NVIDIA Maxwell generation CC 5.0 GPU
|
||||
* - MAXWELL52
|
||||
- GPU
|
||||
- NVIDIA Maxwell generation CC 5.2
|
||||
- NVIDIA Maxwell generation CC 5.2 GPU
|
||||
* - MAXWELL53
|
||||
- GPU
|
||||
- NVIDIA Maxwell generation CC 5.3
|
||||
- NVIDIA Maxwell generation CC 5.3 GPU
|
||||
* - PASCAL60
|
||||
- GPU
|
||||
- NVIDIA Pascal generation CC 6.0
|
||||
- NVIDIA Pascal generation CC 6.0 GPU
|
||||
* - PASCAL61
|
||||
- GPU
|
||||
- NVIDIA Pascal generation CC 6.1
|
||||
- NVIDIA Pascal generation CC 6.1 GPU
|
||||
* - VOLTA70
|
||||
- GPU
|
||||
- NVIDIA Volta generation CC 7.0
|
||||
- NVIDIA Volta generation CC 7.0 GPU
|
||||
* - VOLTA72
|
||||
- GPU
|
||||
- NVIDIA Volta generation CC 7.2
|
||||
- NVIDIA Volta generation CC 7.2 GPU
|
||||
* - TURING75
|
||||
- GPU
|
||||
- NVIDIA Turing generation CC 7.5
|
||||
- NVIDIA Turing generation CC 7.5 GPU
|
||||
* - AMPERE80
|
||||
- GPU
|
||||
- NVIDIA Ampere generation CC 8.0
|
||||
- NVIDIA Ampere generation CC 8.0 GPU
|
||||
* - AMPERE86
|
||||
- GPU
|
||||
- NVIDIA Ampere generation CC 8.6
|
||||
- NVIDIA Ampere generation CC 8.6 GPU
|
||||
* - ADA89
|
||||
- GPU
|
||||
- NVIDIA Ada generation CC 8.9
|
||||
- NVIDIA Ada Lovelace generation CC 8.9 GPU
|
||||
* - HOPPER90
|
||||
- GPU
|
||||
- NVIDIA Hopper generation CC 9.0
|
||||
- NVIDIA Hopper generation CC 9.0 GPU
|
||||
* - AMD_GFX906
|
||||
- GPU
|
||||
- AMD GPU MI50/60
|
||||
- AMD GPU MI50/MI60
|
||||
* - AMD_GFX908
|
||||
- GPU
|
||||
- AMD GPU MI100
|
||||
* - AMD_GFX90A
|
||||
- GPU
|
||||
- AMD GPU MI200
|
||||
* - AMD_GFX940
|
||||
- GPU
|
||||
- AMD GPU MI300
|
||||
* - AMD_GFX942
|
||||
- GPU
|
||||
- AMD GPU MI300
|
||||
* - AMD_GFX942_APU
|
||||
- GPU
|
||||
- AMD APU MI300A
|
||||
* - AMD_GFX1030
|
||||
- GPU
|
||||
- AMD GPU V620/W6800
|
||||
@ -694,7 +676,7 @@ They must be specified in uppercase.
|
||||
- AMD GPU RX7900XTX
|
||||
* - AMD_GFX1103
|
||||
- GPU
|
||||
- AMD APU Phoenix
|
||||
- AMD Phoenix APU with Radeon 740M/760M/780M/880M/890M
|
||||
* - INTEL_GEN
|
||||
- GPU
|
||||
- SPIR64-based devices, e.g. Intel GPUs, using JIT
|
||||
@ -717,7 +699,7 @@ They must be specified in uppercase.
|
||||
- GPU
|
||||
- Intel GPU Ponte Vecchio
|
||||
|
||||
This list was last updated for version 4.6.0 of the Kokkos library.
|
||||
This list was last updated for version 4.3.0 of the Kokkos library.
|
||||
|
||||
.. tabs::
|
||||
|
||||
@ -769,27 +751,14 @@ This list was last updated for version 4.6.0 of the Kokkos library.
|
||||
platform-appropriate vendor library: rocFFT on AMD GPUs or cuFFT on
|
||||
NVIDIA GPUs.
|
||||
|
||||
For Intel GPUs using SYCL, set these variables:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
-D Kokkos_ARCH_HOSTARCH=yes # HOSTARCH = HOST from list above
|
||||
-D Kokkos_ARCH_GPUARCH=yes # GPUARCH = GPU from list above
|
||||
-D Kokkos_ENABLE_SYCL=yes
|
||||
-D Kokkos_ENABLE_OPENMP=yes
|
||||
-D FFT_KOKKOS=MKL_GPU
|
||||
|
||||
This will enable FFTs on the GPU using the oneMKL library.
|
||||
|
||||
To simplify compilation, six preset files are included in the
|
||||
To simplify compilation, five preset files are included in the
|
||||
``cmake/presets`` folder, ``kokkos-serial.cmake``,
|
||||
``kokkos-openmp.cmake``, ``kokkos-cuda.cmake``,
|
||||
``kokkos-hip.cmake``, ``kokkos-sycl-nvidia.cmake``, and
|
||||
``kokkos-sycl-intel.cmake``. They will enable the KOKKOS
|
||||
package and enable some hardware choices. For GPU support those
|
||||
preset files must be customized to match the hardware used. So
|
||||
to compile with CUDA device parallelization with some common
|
||||
packages enabled, you can do the following:
|
||||
``kokkos-hip.cmake``, and ``kokkos-sycl.cmake``. They will enable
|
||||
the KOKKOS package and enable some hardware choices. For GPU
|
||||
support those preset files must be customized to match the
|
||||
hardware used. So to compile with CUDA device parallelization with
|
||||
some common packages enabled, you can do the following:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
@ -861,18 +830,6 @@ This list was last updated for version 4.6.0 of the Kokkos library.
|
||||
FFT_INC = -DFFT_HIPFFT # enable use of hipFFT (optional)
|
||||
FFT_LIB = -lhipfft # link to hipFFT library
|
||||
|
||||
For Intel GPUs using SYCL:
|
||||
|
||||
.. code-block:: make
|
||||
|
||||
KOKKOS_DEVICES = SYCL
|
||||
KOKKOS_ARCH = HOSTARCH,GPUARCH # HOSTARCH = HOST from list above that is
|
||||
# hosting the GPU
|
||||
# GPUARCH = GPU from list above
|
||||
FFT_INC = -DFFT_KOKKOS_MKL_GPU # enable use of oneMKL for Intel GPUs (optional)
|
||||
# link to oneMKL FFT library
|
||||
FFT_LIB = -lmkl_sycl_dft -lmkl_intel_ilp64 -lmkl_tbb_thread -mkl_core -ltbb
|
||||
|
||||
Advanced KOKKOS compilation settings
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
@ -1141,10 +1098,11 @@ POEMS package
|
||||
PYTHON package
|
||||
---------------------------
|
||||
|
||||
Building with the PYTHON package requires you have a the Python
|
||||
development headers and library available on your system, which
|
||||
needs to be Python version 3.6 or later. See ``lib/python/README``
|
||||
for additional details.
|
||||
Building with the PYTHON package requires you have a the Python development
|
||||
headers and library available on your system, which needs to be a Python 2.7
|
||||
version or a Python 3.x version. Since support for Python 2.x has ended,
|
||||
using Python 3.x is strongly recommended. See ``lib/python/README`` for
|
||||
additional details.
|
||||
|
||||
.. tabs::
|
||||
|
||||
@ -1160,7 +1118,7 @@ for additional details.
|
||||
set the Python_EXECUTABLE variable to specify which Python
|
||||
interpreter should be used. Note note that you will also need to
|
||||
have the development headers installed for this version,
|
||||
e.g. python3-devel.
|
||||
e.g. python2-devel.
|
||||
|
||||
.. tab:: Traditional make
|
||||
|
||||
@ -2033,7 +1991,7 @@ TBB and MKL.
|
||||
.. _mdi:
|
||||
|
||||
MDI package
|
||||
-----------
|
||||
-----------------------------
|
||||
|
||||
.. tabs::
|
||||
|
||||
@ -2060,37 +2018,6 @@ MDI package
|
||||
|
||||
----------
|
||||
|
||||
.. _misc:
|
||||
|
||||
MISC package
|
||||
------------
|
||||
|
||||
The :doc:`fix imd <fix_imd>` style in this package can be run either
|
||||
synchronously (communication with IMD clients is done in the main
|
||||
process) or asynchronously (the fix spawns a separate thread that can
|
||||
communicate with IMD clients concurrently to the LAMMPS execution).
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. tab:: CMake build
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
-D LAMMPS_ASYNC_IMD=value # Run IMD server asynchronously
|
||||
# value = no (default) or yes
|
||||
|
||||
.. tab:: Traditional make
|
||||
|
||||
To enable asynchronous mode the ``-DLAMMPS_ASYNC_IMD`` define
|
||||
needs to be added to the ``LMP_INC`` variable in the
|
||||
``Makefile.machine`` you are using. For example:
|
||||
|
||||
.. code-block:: make
|
||||
|
||||
LMP_INC = -DLAMMPS_ASYNC_IMD -DLAMMPS_MEMALIGN=64
|
||||
|
||||
----------
|
||||
|
||||
.. _molfile:
|
||||
|
||||
MOLFILE package
|
||||
@ -2237,7 +2164,7 @@ verified to work in February 2020 with Quantum Espresso versions 6.3 to
|
||||
from the sources in the *lib* folder (including the essential
|
||||
libqmmm.a) are not included in the static LAMMPS library and
|
||||
(currently) not installed, while their code is included in the
|
||||
shared LAMMPS library. Thus a typical command to configure
|
||||
shared LAMMPS library. Thus a typical command line to configure
|
||||
building LAMMPS for QMMM would be:
|
||||
|
||||
.. code-block:: bash
|
||||
@ -2297,38 +2224,28 @@ verified to work in February 2020 with Quantum Espresso versions 6.3 to
|
||||
RHEO package
|
||||
------------
|
||||
|
||||
This package depends on the BPM package.
|
||||
To build with this package you must have the `GNU Scientific Library
|
||||
(GSL) <https://www.gnu.org/software/gsl/>` installed in locations that
|
||||
are accessible in your environment. The GSL library should be at least
|
||||
version 2.7.
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. tab:: CMake build
|
||||
|
||||
If CMake cannot find the GSL library or include files, you can set:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
-D PKG_RHEO=yes # enable the package itself
|
||||
-D PKG_BPM=yes # the RHEO package requires BPM
|
||||
-D USE_INTERNAL_LINALG=value # prefer internal LAPACK if true
|
||||
|
||||
Some features in the RHEO package are dependent on code in the BPM
|
||||
package so the latter one *must* be enabled as well.
|
||||
|
||||
The RHEO package also requires LAPACK (and BLAS) and CMake
|
||||
can identify their locations and pass that info to the RHEO
|
||||
build script. But on some systems this may cause problems when
|
||||
linking or the dependency is not desired. By using the setting
|
||||
``-D USE_INTERNAL_LINALG=yes`` when running the CMake
|
||||
configuration, you will select compiling and linking the bundled
|
||||
linear algebra library and work around the limitations.
|
||||
-D GSL_ROOT_DIR=path # path to root of GSL installation
|
||||
|
||||
.. tab:: Traditional make
|
||||
|
||||
The RHEO package requires LAPACK (and BLAS) which can be either
|
||||
a system provided library or the bundled "linalg" library. This
|
||||
is a subset of LAPACK translated to C++. For that, one of the
|
||||
provided ``Makefile.lammps.<config>`` files needs to be copied
|
||||
to ``Makefile.lammps`` and edited as needed. The default file
|
||||
uses the bundled "linalg" library, which can be built by
|
||||
``make lib-linalg args='-m serial'`` in the ``src`` folder.
|
||||
LAMMPS will try to auto-detect the GSL compiler and linker flags
|
||||
from the corresponding ``pkg-config`` file (``gsl.pc``), otherwise
|
||||
you can edit the file ``lib/rheo/Makefile.lammps``
|
||||
to specify the paths and library names where indicated by comments.
|
||||
This must be done **before** the package is installed.
|
||||
|
||||
----------
|
||||
|
||||
|
||||
@ -8,10 +8,6 @@ Building LAMMPS with traditional makefiles requires that you have a
|
||||
for customizing your LAMMPS build with a number of global compilation
|
||||
options and features.
|
||||
|
||||
This build system is slowly being phased out and may not support all
|
||||
optional features and packages in LAMMPS. It is recommended to switch
|
||||
to the :doc:`CMake based build system <Build_cmake>`.
|
||||
|
||||
Requirements
|
||||
^^^^^^^^^^^^
|
||||
|
||||
@ -30,9 +26,9 @@ additional tools to be available and functioning.
|
||||
* A Bourne shell compatible "Unix" shell program (frequently this is ``bash``)
|
||||
* A few shell utilities: ``ls``, ``mv``, ``ln``, ``rm``, ``grep``, ``sed``, ``tr``, ``cat``, ``touch``, ``diff``, ``dirname``
|
||||
* Python (optional, required for ``make lib-<pkg>`` in the ``src``
|
||||
folder). Python scripts are currently tested with 3.6 to 3.11.
|
||||
The procedure for :doc:`building the documentation <Build_manual>`
|
||||
*requires* Python 3.8 or later.
|
||||
folder). Python scripts are currently tested with python 2.7 and
|
||||
3.6 to 3.11. The procedure for :doc:`building the documentation
|
||||
<Build_manual>` *requires* Python 3.5 or later.
|
||||
|
||||
Getting started
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
@ -78,7 +78,8 @@ folder. The following ``make`` commands are available:
|
||||
make epub # generate LAMMPS.epub in ePUB format using Sphinx
|
||||
make mobi # generate LAMMPS.mobi in MOBI format using ebook-convert
|
||||
|
||||
make fasthtml # generate approximate HTML in fasthtml dir using pandoc
|
||||
make fasthtml # generate approximate HTML in fasthtml dir using Sphinx
|
||||
# some Sphinx extensions do not work correctly with this
|
||||
|
||||
make clean # remove intermediate RST files created by HTML build
|
||||
make clean-all # remove entire build folder and any cached data
|
||||
@ -115,9 +116,9 @@ environment variable.
|
||||
Prerequisites for HTML
|
||||
----------------------
|
||||
|
||||
To run the HTML documentation build toolchain, Python 3.8 or later, git,
|
||||
doxygen, and virtualenv have to be installed locally. Here are
|
||||
instructions for common setups:
|
||||
To run the HTML documentation build toolchain, python 3, git, doxygen,
|
||||
and virtualenv have to be installed locally. Here are instructions for
|
||||
common setups:
|
||||
|
||||
.. tabs::
|
||||
|
||||
@ -127,7 +128,13 @@ instructions for common setups:
|
||||
|
||||
sudo apt-get install git doxygen
|
||||
|
||||
.. tab:: Fedora or RHEL/AlmaLinux/RockyLinux (8.x or later)
|
||||
.. tab:: RHEL or CentOS (Version 7.x)
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo yum install git doxygen
|
||||
|
||||
.. tab:: Fedora or RHEL/CentOS (8.x or later)
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
@ -147,36 +154,7 @@ Prerequisites for PDF
|
||||
|
||||
In addition to the tools needed for building the HTML format manual,
|
||||
a working LaTeX installation with support for PDFLaTeX and a selection
|
||||
of LaTeX styles/packages are required. Apart from LaTeX packages that
|
||||
are usually installed by default, the following packages are required:
|
||||
|
||||
.. table_from_list::
|
||||
:columns: 11
|
||||
|
||||
- amsmath
|
||||
- anysize
|
||||
- babel
|
||||
- capt-of
|
||||
- cmap
|
||||
- dvipng
|
||||
- ellipse
|
||||
- fncychap
|
||||
- fontawesome
|
||||
- framed
|
||||
- geometry
|
||||
- gyre
|
||||
- hyperref
|
||||
- hypcap
|
||||
- needspace
|
||||
- pict2e
|
||||
- times
|
||||
- tabulary
|
||||
- titlesec
|
||||
- upquote
|
||||
- wrapfig
|
||||
- xindy
|
||||
|
||||
To run the PDFLaTeX translation
|
||||
of LaTeX styles/packages are required. To run the PDFLaTeX translation
|
||||
the ``latexmk`` script needs to be installed as well.
|
||||
|
||||
Prerequisites for ePUB and MOBI
|
||||
@ -204,42 +182,12 @@ documentation is required and either existing files in the ``src``
|
||||
folder need to be updated or new files added. These files are written in
|
||||
`reStructuredText <rst_>`_ markup for translation with the Sphinx tool.
|
||||
|
||||
Testing your contribution
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Before contributing any documentation, please check that both the HTML
|
||||
and the PDF format documentation can translate without errors and that
|
||||
there are no spelling issues. This is done with ``make html``, ``make pdf``,
|
||||
and ``make spelling``, respectively.
|
||||
|
||||
Fast and approximate translation to HTML
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Translating the full manual to HTML or PDF can take a long time. Thus
|
||||
there is a fast and approximate way to translate the reStructuredText to
|
||||
HTML as a quick-n-dirty way of checking your manual page.
|
||||
|
||||
This translation uses `Pandoc <https://pandoc.org>`_ instead of Sphinx
|
||||
and thus all special Sphinx features (cross-references, advanced tables,
|
||||
embedding of Python docstrings or doxygen documentation, and so on) will
|
||||
not render correctly. Most embedded math should render correctly. This
|
||||
is a **very fast** way to check the syntax and layout of a documentation
|
||||
file translated to HTML while writing or updating it.
|
||||
|
||||
To translate **all** manual pages, you can type ``make fasthtml`` at the
|
||||
command line. The translated HTML files are then in the ``fasthtml``
|
||||
folder. All subsequent ``make fasthtml`` commands will only translate
|
||||
``.rst`` files that have been changed. The ``make fasthtml`` command
|
||||
can be parallelized with make using the `-j` flag. You can also
|
||||
directly translate only individual pages: e.g. to translate only the
|
||||
``doc/src/pair_lj.rst`` page type ``make fasthtml/pair_lj.html``
|
||||
|
||||
After writing the documentation is completed, you will still need
|
||||
to verify with ``make html`` and ``make pdf`` that it translates
|
||||
correctly in both formats.
|
||||
|
||||
Tests for consistency, completeness, and other known issues
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
and the PDF format documentation can translate without errors. During
|
||||
testing the html translation, you may use the ``make fasthtml`` command
|
||||
which does an approximate translation (i.e. not all Sphinx features and
|
||||
extensions will work), but runs very fast because it will only translate
|
||||
files that have been changed since the last ``make fasthtml`` command.
|
||||
|
||||
Please also check the output to the console for any warnings or problems. There will
|
||||
be multiple tests run automatically:
|
||||
|
||||
@ -49,7 +49,6 @@ packages:
|
||||
* :ref:`LEPTON <lepton>`
|
||||
* :ref:`MACHDYN <machdyn>`
|
||||
* :ref:`MDI <mdi>`
|
||||
* :ref:`MISC <misc>`
|
||||
* :ref:`ML-HDNNP <ml-hdnnp>`
|
||||
* :ref:`ML-IAP <mliap>`
|
||||
* :ref:`ML-PACE <ml-pace>`
|
||||
|
||||
@ -8,13 +8,12 @@ Optional build settings
|
||||
LAMMPS can be built with several optional settings. Each subsection
|
||||
explains how to do this for building both with CMake and make.
|
||||
|
||||
* `C++11 and C++17 standard compliance`_ when building all of LAMMPS
|
||||
* `C++11 standard compliance`_ when building all of LAMMPS
|
||||
* `FFT library`_ for use with the :doc:`kspace_style pppm <kspace_style>` command
|
||||
* `Size of LAMMPS integer types and size limits`_
|
||||
* `Read or write compressed files`_
|
||||
* `Output of JPEG, PNG, and movie files`_ via the :doc:`dump image <dump_image>` or :doc:`dump movie <dump_image>` commands
|
||||
* `Support for downloading files from the input`_
|
||||
* `Prevent download of large potential files`_
|
||||
* `Support for downloading files`_
|
||||
* `Memory allocation alignment`_
|
||||
* `Workaround for long long integers`_
|
||||
* `Exception handling when using LAMMPS as a library`_ to capture errors
|
||||
@ -24,15 +23,14 @@ explains how to do this for building both with CMake and make.
|
||||
|
||||
.. _cxx11:
|
||||
|
||||
C++11 and C++17 standard compliance
|
||||
-----------------------------------
|
||||
C++11 standard compliance
|
||||
-------------------------
|
||||
|
||||
A C++11 standard compatible compiler is currently the minimum
|
||||
requirement for compiling LAMMPS. LAMMPS version 3 March 2020 is the
|
||||
last version compatible with the previous C++98 standard for the core
|
||||
code and most packages. Most currently used C++ compilers are compatible
|
||||
with C++11, but some older ones may need extra flags to enable C++11
|
||||
compliance. Example for GNU c++ 4.8.x:
|
||||
A C++11 standard compatible compiler is a requirement for compiling LAMMPS.
|
||||
LAMMPS version 3 March 2020 is the last version compatible with the previous
|
||||
C++98 standard for the core code and most packages. Most currently used
|
||||
C++ compilers are compatible with C++11, but some older ones may need extra
|
||||
flags to enable C++11 compliance. Example for GNU c++ 4.8.x:
|
||||
|
||||
.. code-block:: make
|
||||
|
||||
@ -42,17 +40,6 @@ Individual packages may require compliance with a later C++ standard
|
||||
like C++14 or C++17. These requirements will be documented with the
|
||||
:doc:`individual packages <Packages_details>`.
|
||||
|
||||
.. versionchanged:: 4Feb2025
|
||||
|
||||
Starting with LAMMPS version 4 February 2025 we are starting a
|
||||
transition to require the C++17 standard. Most current compilers are
|
||||
compatible and if the C++17 standard is available by default, LAMMPS
|
||||
will enable C++17 and will compile normally. If the chosen compiler is
|
||||
not compatible with C++17, but only supports C++11, then the define
|
||||
-DLAMMPS_CXX11 is required to fall back to compiling with a C++11
|
||||
compiler. After the next stable release of LAMMPS in summer 2025, the
|
||||
LAMMPS development branch and future releases will require C++17.
|
||||
|
||||
----------
|
||||
|
||||
.. _fft:
|
||||
@ -80,10 +67,10 @@ libraries and better pipelining for packing and communication.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
-D FFT=value # FFTW3 or MKL or NVPL or KISS,
|
||||
# default is FFTW3 if found, else KISS
|
||||
-D FFT_KOKKOS=value # FFTW3 or MKL or NVPL or KISS or CUFFT
|
||||
# or HIPFFT or MKL_GPU, default is KISS
|
||||
-D FFT=value # FFTW3 or MKL or KISS, default is FFTW3 if found,
|
||||
# else KISS
|
||||
-D FFT_KOKKOS=value # FFTW3 or MKL or KISS or CUFFT or HIPFFT,
|
||||
# default is KISS
|
||||
-D FFT_SINGLE=value # yes or no (default), no = double precision
|
||||
-D FFT_PACK=value # array (default) or pointer or memcpy
|
||||
-D FFT_USE_HEFFTE=value # yes or no (default), yes links to heFFTe
|
||||
@ -116,8 +103,6 @@ libraries and better pipelining for packing and communication.
|
||||
-D FFT_HEFFTE_BACKEND=value # FFTW or MKL or empty/undefined for the stock
|
||||
# heFFTe back end
|
||||
-D Heffte_ROOT=path # path to an existing heFFTe installation
|
||||
-D nvpl_fft_INCLUDE_DIR=path # path to NVPL FFT include files
|
||||
-D nvpl_fft_LIBRARY_DIR=path # path to NVPL FFT libraries
|
||||
|
||||
.. note::
|
||||
|
||||
@ -136,10 +121,9 @@ libraries and better pipelining for packing and communication.
|
||||
.. code-block:: make
|
||||
|
||||
FFT_INC = -DFFT_<NAME> # where <NAME> is KISS (default), FFTW3,
|
||||
# FFTW (same as FFTW3), NVPL, or MKL
|
||||
# FFTW (same as FFTW3), or MKL
|
||||
FFT_INC = -DFFT_KOKKOS_<NAME> # where <NAME> is KISS (default), FFTW3,
|
||||
# FFTW (same as FFTW3), NVPL, MKL, CUFFT,
|
||||
# HIPFFT, or MKL_GPU
|
||||
# FFTW (same as FFTW3), MKL, CUFFT, or HIPFFT
|
||||
FFT_INC = -DFFT_SINGLE # do not specify for double precision
|
||||
FFT_INC = -DFFT_FFTW_THREADS # enable using threaded FFTW3 libraries
|
||||
FFT_INC = -DFFT_MKL_THREADS # enable using threaded FFTs with MKL libraries
|
||||
@ -157,9 +141,6 @@ libraries and better pipelining for packing and communication.
|
||||
# cuFFT either precision
|
||||
FFT_LIB = -lcufft
|
||||
|
||||
# MKL_GPU either precision
|
||||
FFT_LIB = -lmkl_sycl_dft -lmkl_intel_ilp64 -lmkl_tbb_thread -lmkl_core -ltbb
|
||||
|
||||
# FFTW3 double precision
|
||||
FFT_LIB = -lfftw3
|
||||
|
||||
@ -184,10 +165,6 @@ libraries and better pipelining for packing and communication.
|
||||
# MKL with automatic runtime selection of interface libs
|
||||
FFT_LIB = -lmkl_rt
|
||||
|
||||
# threaded NVPL FFT
|
||||
FFT_LIB = -lnvpl_fftw
|
||||
|
||||
|
||||
As with CMake, you do not need to set paths in ``FFT_INC`` or
|
||||
``FFT_PATH``, if the compiler can find the FFT header and library
|
||||
files in its default search path. You must specify ``FFT_LIB``
|
||||
@ -241,15 +218,10 @@ The Intel MKL math library is part of the Intel compiler suite. It
|
||||
can be used with the Intel or GNU compiler (see the ``FFT_LIB`` setting
|
||||
above).
|
||||
|
||||
The NVIDIA Performance Libraries (NVPL) FFT library is optimized for NVIDIA
|
||||
Grace Armv9.0 architecture. You can download it from https://docs.nvidia.com/nvpl/
|
||||
|
||||
The cuFFT and hipFFT FFT libraries are packaged with NVIDIA's CUDA and
|
||||
AMD's HIP installations, respectively. These FFT libraries require the
|
||||
Kokkos acceleration package to be enabled and the Kokkos back end to be
|
||||
GPU-resident (i.e., HIP or CUDA). Similarly, GPU offload of FFTs on
|
||||
Intel GPUs with oneMKL currently requires the Kokkos acceleration
|
||||
package to be enabled with the SYCL back end.
|
||||
GPU-resident (i.e., HIP or CUDA).
|
||||
|
||||
Performing 3d FFTs in parallel can be time-consuming due to data access
|
||||
and required communication. This cost can be reduced by performing
|
||||
@ -316,7 +288,7 @@ large counters can become before "rolling over". The default setting of
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
-D LAMMPS_SIZES=value # smallbig (default) or bigbig
|
||||
-D LAMMPS_SIZES=value # smallbig (default) or bigbig or smallsmall
|
||||
|
||||
If the variable is not set explicitly, "smallbig" is used.
|
||||
|
||||
@ -327,7 +299,7 @@ large counters can become before "rolling over". The default setting of
|
||||
|
||||
.. code-block:: make
|
||||
|
||||
LMP_INC = -DLAMMPS_SMALLBIG # or -DLAMMPS_BIGBIG
|
||||
LMP_INC = -DLAMMPS_SMALLBIG # or -DLAMMPS_BIGBIG or -DLAMMPS_SMALLSMALL
|
||||
|
||||
The default setting is ``-DLAMMPS_SMALLBIG`` if nothing is specified
|
||||
|
||||
@ -336,27 +308,34 @@ LAMMPS system size restrictions
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:widths: 27 36 37
|
||||
:widths: 18 27 28 27
|
||||
:align: center
|
||||
|
||||
* -
|
||||
- smallbig
|
||||
- bigbig
|
||||
- smallsmall
|
||||
* - Total atom count
|
||||
- :math:`2^{63}` atoms (= :math:`9.223 \cdot 10^{18}`)
|
||||
- :math:`2^{63}` atoms (= :math:`9.223 \cdot 10^{18}`)
|
||||
- :math:`2^{31}` atoms (= :math:`2.147 \cdot 10^9`)
|
||||
* - Total timesteps
|
||||
- :math:`2^{63}` steps (= :math:`9.223 \cdot 10^{18}`)
|
||||
- :math:`2^{63}` steps (= :math:`9.223 \cdot 10^{18}`)
|
||||
- :math:`2^{31}` steps (= :math:`2.147 \cdot 10^9`)
|
||||
* - Atom ID values
|
||||
- :math:`1 \le i \le 2^{31} (= 2.147 \cdot 10^9)`
|
||||
- :math:`1 \le i \le 2^{63} (= 9.223 \cdot 10^{18})`
|
||||
- :math:`1 \le i \le 2^{31} (= 2.147 \cdot 10^9)`
|
||||
* - Image flag values
|
||||
- :math:`-512 \le i \le 511`
|
||||
- :math:`- 1\,048\,576 \le i \le 1\,048\,575`
|
||||
- :math:`-512 \le i \le 511`
|
||||
|
||||
The "bigbig" setting increases the size of image flags and atom IDs over
|
||||
the default "smallbig" setting.
|
||||
"smallbig" and the "smallsmall" setting is only needed if your machine
|
||||
does not support 64-bit integers or incurs performance penalties when
|
||||
using them.
|
||||
|
||||
These are limits for the core of the LAMMPS code, specific features or
|
||||
some styles may impose additional limits. The :ref:`ATC
|
||||
@ -510,8 +489,8 @@ during a run.
|
||||
|
||||
.. _libcurl:
|
||||
|
||||
Support for downloading files from the input
|
||||
--------------------------------------------
|
||||
Support for downloading files
|
||||
-----------------------------
|
||||
|
||||
.. versionadded:: 29Aug2024
|
||||
|
||||
@ -554,25 +533,6 @@ LAMMPS is compiled accordingly which needs the following settings:
|
||||
|
||||
----------
|
||||
|
||||
.. _download_pot:
|
||||
|
||||
Prevent download of large potential files
|
||||
-----------------------------------------
|
||||
|
||||
.. versionadded:: 8Feb2023
|
||||
|
||||
LAMMPS bundles a selection of potential files in the ``potentials``
|
||||
folder as examples of how those kinds of potential files look like and
|
||||
for use with the provided input examples in the ``examples`` tree. To
|
||||
keep the size of the distributed LAMMPS source package small, very large
|
||||
potential files (> 5 MBytes) are not bundled, but only downloaded on
|
||||
demand when the :doc:`corresponding package <Packages_list>` is
|
||||
installed. This automatic download can be prevented when :doc:`building
|
||||
LAMMPS with CMake <Build_cmake>` by adding the setting `-D
|
||||
DOWNLOAD_POTENTIALS=off` when configuring.
|
||||
|
||||
----------
|
||||
|
||||
.. _align:
|
||||
|
||||
Memory allocation alignment
|
||||
|
||||
@ -100,9 +100,9 @@ procedure.
|
||||
|
||||
It is possible to use both the integrated CMake support of the Visual
|
||||
Studio IDE or use an external CMake installation (e.g. downloaded from
|
||||
cmake.org) to create build files and compile LAMMPS from the command-line.
|
||||
cmake.org) to create build files and compile LAMMPS from the command line.
|
||||
|
||||
Compilation via command-line and unit tests are checked automatically
|
||||
Compilation via command line and unit tests are checked automatically
|
||||
for the LAMMPS development branch through
|
||||
`GitHub Actions <https://github.com/lammps/lammps/actions/workflows/compile-msvc.yml>`_.
|
||||
|
||||
@ -115,7 +115,7 @@ for the LAMMPS development branch through
|
||||
|
||||
Please note, that for either approach CMake will create a so-called
|
||||
:ref:`"multi-configuration" build environment <cmake_multiconfig>`, and
|
||||
the commands for building and testing LAMMPS must be adjusted
|
||||
the command lines for building and testing LAMMPS must be adjusted
|
||||
accordingly.
|
||||
|
||||
The LAMMPS cmake folder contains a ``CMakeSettings.json`` file with
|
||||
|
||||
@ -4,7 +4,7 @@ LAMMPS Class
|
||||
The LAMMPS class is encapsulating an MD simulation state and thus it is
|
||||
the class that needs to be created when starting a new simulation system
|
||||
state. The LAMMPS executable essentially creates one instance of this
|
||||
class and passes the command-line flags and tells it to process the
|
||||
class and passes the command line flags and tells it to process the
|
||||
provided input (a file or ``stdin``). It shuts the class down when
|
||||
control is returned to it and then exits. When using LAMMPS as a
|
||||
library from another code it is required to create an instance of this
|
||||
|
||||
@ -140,7 +140,6 @@ additional letter in parenthesis: k = KOKKOS.
|
||||
* :doc:`plugin <plugin>`
|
||||
* :doc:`prd <prd>`
|
||||
* :doc:`python <python>`
|
||||
* :doc:`region2vmd <region2vmd>`
|
||||
* :doc:`tad <tad>`
|
||||
* :doc:`temper <temper>`
|
||||
* :doc:`temper/grem <temper_grem>`
|
||||
|
||||
@ -23,7 +23,6 @@ OPT.
|
||||
*
|
||||
* :doc:`bpm/rotational <bond_bpm_rotational>`
|
||||
* :doc:`bpm/spring <bond_bpm_spring>`
|
||||
* :doc:`bpm/spring/plastic <bond_bpm_spring_plastic>`
|
||||
* :doc:`class2 (ko) <bond_class2>`
|
||||
* :doc:`fene (iko) <bond_fene>`
|
||||
* :doc:`fene/expand (o) <bond_fene_expand>`
|
||||
@ -91,7 +90,6 @@ OPT.
|
||||
* :doc:`lepton (o) <angle_lepton>`
|
||||
* :doc:`mesocnt <angle_mesocnt>`
|
||||
* :doc:`mm3 <angle_mm3>`
|
||||
* :doc:`mwlc <angle_mwlc>`
|
||||
* :doc:`quartic (o) <angle_quartic>`
|
||||
* :doc:`spica (ko) <angle_spica>`
|
||||
* :doc:`table (o) <angle_table>`
|
||||
@ -128,7 +126,7 @@ OPT.
|
||||
* :doc:`harmonic (iko) <dihedral_harmonic>`
|
||||
* :doc:`helix (o) <dihedral_helix>`
|
||||
* :doc:`lepton (o) <dihedral_lepton>`
|
||||
* :doc:`multi/harmonic (ko) <dihedral_multi_harmonic>`
|
||||
* :doc:`multi/harmonic (o) <dihedral_multi_harmonic>`
|
||||
* :doc:`nharmonic (o) <dihedral_nharmonic>`
|
||||
* :doc:`opls (iko) <dihedral_opls>`
|
||||
* :doc:`quadratic (o) <dihedral_quadratic>`
|
||||
|
||||
@ -58,7 +58,6 @@ KOKKOS, o = OPENMP, t = OPT.
|
||||
* :doc:`fep/ta <compute_fep_ta>`
|
||||
* :doc:`force/tally <compute_tally>`
|
||||
* :doc:`fragment/atom <compute_cluster_atom>`
|
||||
* :doc:`gaussian/grid/local (k) <compute_gaussian_grid_local>`
|
||||
* :doc:`global/atom <compute_global_atom>`
|
||||
* :doc:`group/group <compute_group_group>`
|
||||
* :doc:`gyration <compute_gyration>`
|
||||
@ -141,8 +140,8 @@ KOKKOS, o = OPENMP, t = OPT.
|
||||
* :doc:`smd/vol <compute_smd_vol>`
|
||||
* :doc:`snap <compute_sna_atom>`
|
||||
* :doc:`sna/atom <compute_sna_atom>`
|
||||
* :doc:`sna/grid (k) <compute_sna_atom>`
|
||||
* :doc:`sna/grid/local (k) <compute_sna_atom>`
|
||||
* :doc:`sna/grid <compute_sna_atom>`
|
||||
* :doc:`sna/grid/local <compute_sna_atom>`
|
||||
* :doc:`snad/atom <compute_sna_atom>`
|
||||
* :doc:`snav/atom <compute_sna_atom>`
|
||||
* :doc:`sph/e/atom <compute_sph_e_atom>`
|
||||
@ -178,7 +177,6 @@ KOKKOS, o = OPENMP, t = OPT.
|
||||
* :doc:`ti <compute_ti>`
|
||||
* :doc:`torque/chunk <compute_torque_chunk>`
|
||||
* :doc:`vacf <compute_vacf>`
|
||||
* :doc:`vacf/chunk <compute_vacf_chunk>`
|
||||
* :doc:`vcm/chunk <compute_vcm_chunk>`
|
||||
* :doc:`viscosity/cos <compute_viscosity_cos>`
|
||||
* :doc:`voronoi/atom <compute_voronoi_atom>`
|
||||
|
||||
@ -19,7 +19,6 @@ An alphabetic list of all LAMMPS :doc:`dump <dump>` commands.
|
||||
* :doc:`custom/gz <dump>`
|
||||
* :doc:`custom/zstd <dump>`
|
||||
* :doc:`dcd <dump>`
|
||||
* :doc:`extxyz <dump>`
|
||||
* :doc:`grid <dump>`
|
||||
* :doc:`grid/vtk <dump>`
|
||||
* :doc:`h5md <dump_h5md>`
|
||||
|
||||
@ -43,7 +43,7 @@ OPT.
|
||||
* :doc:`brownian/asphere <fix_brownian>`
|
||||
* :doc:`brownian/sphere <fix_brownian>`
|
||||
* :doc:`charge/regulation <fix_charge_regulation>`
|
||||
* :doc:`cmap (k) <fix_cmap>`
|
||||
* :doc:`cmap <fix_cmap>`
|
||||
* :doc:`colvars <fix_colvars>`
|
||||
* :doc:`controller <fix_controller>`
|
||||
* :doc:`damping/cundall <fix_damping_cundall>`
|
||||
@ -58,7 +58,6 @@ OPT.
|
||||
* :doc:`dt/reset (k) <fix_dt_reset>`
|
||||
* :doc:`edpd/source <fix_dpd_source>`
|
||||
* :doc:`efield (k) <fix_efield>`
|
||||
* :doc:`efield/lepton <fix_efield_lepton>`
|
||||
* :doc:`efield/tip4p <fix_efield>`
|
||||
* :doc:`ehex <fix_ehex>`
|
||||
* :doc:`electrode/conp (i) <fix_electrode>`
|
||||
@ -135,7 +134,7 @@ OPT.
|
||||
* :doc:`nve/dot <fix_nve_dot>`
|
||||
* :doc:`nve/dotc/langevin <fix_nve_dotc_langevin>`
|
||||
* :doc:`nve/eff <fix_nve_eff>`
|
||||
* :doc:`nve/limit (k) <fix_nve_limit>`
|
||||
* :doc:`nve/limit <fix_nve_limit>`
|
||||
* :doc:`nve/line <fix_nve_line>`
|
||||
* :doc:`nve/manifold/rattle <fix_nve_manifold_rattle>`
|
||||
* :doc:`nve/noforce <fix_nve_noforce>`
|
||||
@ -162,8 +161,6 @@ OPT.
|
||||
* :doc:`phonon <fix_phonon>`
|
||||
* :doc:`pimd/langevin <fix_pimd>`
|
||||
* :doc:`pimd/nvt <fix_pimd>`
|
||||
* :doc:`pimd/langevin/bosonic <fix_pimd>`
|
||||
* :doc:`pimd/nvt/bosonic <fix_pimd>`
|
||||
* :doc:`planeforce <fix_planeforce>`
|
||||
* :doc:`plumed <fix_plumed>`
|
||||
* :doc:`poems <fix_poems>`
|
||||
@ -181,21 +178,18 @@ OPT.
|
||||
* :doc:`python/move <fix_python_move>`
|
||||
* :doc:`qbmsst <fix_qbmsst>`
|
||||
* :doc:`qeq/comb (o) <fix_qeq_comb>`
|
||||
* :doc:`qeq/ctip <fix_qeq>`
|
||||
* :doc:`qeq/dynamic <fix_qeq>`
|
||||
* :doc:`qeq/fire <fix_qeq>`
|
||||
* :doc:`qeq/point <fix_qeq>`
|
||||
* :doc:`qeq/reaxff (ko) <fix_qeq_reaxff>`
|
||||
* :doc:`qeq/rel/reaxff <fix_qeq_rel_reaxff>`
|
||||
* :doc:`qeq/shielded <fix_qeq>`
|
||||
* :doc:`qeq/slater <fix_qeq>`
|
||||
* :doc:`qmmm <fix_qmmm>`
|
||||
* :doc:`qtb <fix_qtb>`
|
||||
* :doc:`qtpie/reaxff <fix_qtpie_reaxff>`
|
||||
* :doc:`rattle <fix_shake>`
|
||||
* :doc:`reaxff/bonds (k) <fix_reaxff_bonds>`
|
||||
* :doc:`reaxff/species (k) <fix_reaxff_species>`
|
||||
* :doc:`recenter (k) <fix_recenter>`
|
||||
* :doc:`recenter <fix_recenter>`
|
||||
* :doc:`restrain <fix_restrain>`
|
||||
* :doc:`rheo <fix_rheo>`
|
||||
* :doc:`rheo/oxidation <fix_rheo_oxidation>`
|
||||
@ -273,7 +267,7 @@ OPT.
|
||||
* :doc:`wall/piston <fix_wall_piston>`
|
||||
* :doc:`wall/reflect (k) <fix_wall_reflect>`
|
||||
* :doc:`wall/reflect/stochastic <fix_wall_reflect_stochastic>`
|
||||
* :doc:`wall/region (k) <fix_wall_region>`
|
||||
* :doc:`wall/region <fix_wall_region>`
|
||||
* :doc:`wall/region/ees <fix_wall_ees>`
|
||||
* :doc:`wall/srd <fix_wall_srd>`
|
||||
* :doc:`wall/table <fix_wall>`
|
||||
|
||||
@ -69,7 +69,7 @@ WARNING message is printed. The :doc:`Errors <Errors>` page gives
|
||||
more information on what errors mean. The documentation for each
|
||||
command lists restrictions on how the command can be used.
|
||||
|
||||
You can use the :ref:`-skiprun <skiprun>` command-line flag
|
||||
You can use the :ref:`-skiprun <skiprun>` command line flag
|
||||
to have LAMMPS skip the execution of any ``run``, ``minimize``, or similar
|
||||
commands to check the entire input for correct syntax to avoid crashes
|
||||
on typos or syntax errors in long runs.
|
||||
|
||||
@ -44,7 +44,7 @@ OPT.
|
||||
* :doc:`born/coul/wolf/cs (g) <pair_cs>`
|
||||
* :doc:`born/gauss <pair_born_gauss>`
|
||||
* :doc:`bpm/spring <pair_bpm_spring>`
|
||||
* :doc:`brownian (ko) <pair_brownian>`
|
||||
* :doc:`brownian (o) <pair_brownian>`
|
||||
* :doc:`brownian/poly (o) <pair_brownian>`
|
||||
* :doc:`buck (giko) <pair_buck>`
|
||||
* :doc:`buck/coul/cut (giko) <pair_buck>`
|
||||
@ -59,7 +59,6 @@ OPT.
|
||||
* :doc:`comb (o) <pair_comb>`
|
||||
* :doc:`comb3 <pair_comb>`
|
||||
* :doc:`cosine/squared <pair_cosine_squared>`
|
||||
* :doc:`coul/ctip <pair_coul>`
|
||||
* :doc:`coul/cut (gko) <pair_coul>`
|
||||
* :doc:`coul/cut/dielectric <pair_dielectric>`
|
||||
* :doc:`coul/cut/global (o) <pair_coul>`
|
||||
@ -80,7 +79,6 @@ OPT.
|
||||
* :doc:`coul/tt <pair_coul_tt>`
|
||||
* :doc:`coul/wolf (ko) <pair_coul>`
|
||||
* :doc:`coul/wolf/cs <pair_cs>`
|
||||
* :doc:`dispersion/d3 <pair_dispersion_d3>`
|
||||
* :doc:`dpd (giko) <pair_dpd>`
|
||||
* :doc:`dpd/coul/slater/long (g) <pair_dpd_coul_slater_long>`
|
||||
* :doc:`dpd/ext (ko) <pair_dpd_ext>`
|
||||
@ -115,9 +113,7 @@ OPT.
|
||||
* :doc:`gw/zbl <pair_gw>`
|
||||
* :doc:`harmonic/cut (o) <pair_harmonic_cut>`
|
||||
* :doc:`hbond/dreiding/lj (o) <pair_hbond_dreiding>`
|
||||
* :doc:`hbond/dreiding/lj/angleoffset (o) <pair_hbond_dreiding>`
|
||||
* :doc:`hbond/dreiding/morse (o) <pair_hbond_dreiding>`
|
||||
* :doc:`hbond/dreiding/morse/angleoffset (o) <pair_hbond_dreiding>`
|
||||
* :doc:`hdnnp <pair_hdnnp>`
|
||||
* :doc:`hippo (g) <pair_amoeba>`
|
||||
* :doc:`ilp/graphene/hbn (t) <pair_ilp_graphene_hbn>`
|
||||
|
||||
@ -1,10 +1,6 @@
|
||||
Removed commands and packages
|
||||
=============================
|
||||
|
||||
.. contents:: \
|
||||
|
||||
------
|
||||
|
||||
This page lists LAMMPS commands and packages that have been removed from
|
||||
the distribution and provides suggestions for alternatives or
|
||||
replacements. LAMMPS has special dummy styles implemented, that will
|
||||
@ -12,95 +8,29 @@ stop LAMMPS and print a suitable error message in most cases, when a
|
||||
style/command is used that has been removed or will replace the command
|
||||
with the direct alternative (if available) and print a warning.
|
||||
|
||||
LAMMPS shell
|
||||
------------
|
||||
restart2data tool
|
||||
-----------------
|
||||
|
||||
.. versionchanged:: 29Aug2024
|
||||
.. versionchanged:: 23Nov2013
|
||||
|
||||
The LAMMPS shell has been removed from the LAMMPS distribution. Users
|
||||
are encouraged to use the :ref:`LAMMPS-GUI <lammps_gui>` tool instead.
|
||||
The functionality of the restart2data tool has been folded into the
|
||||
LAMMPS executable directly instead of having a separate tool. A
|
||||
combination of the commands :doc:`read_restart <read_restart>` and
|
||||
:doc:`write_data <write_data>` can be used to the same effect. For
|
||||
added convenience this conversion can also be triggered by
|
||||
:doc:`command line flags <Run_options>`
|
||||
|
||||
i-PI tool
|
||||
---------
|
||||
Fix ave/spatial and fix ave/spatial/sphere
|
||||
------------------------------------------
|
||||
|
||||
.. versionchanged:: 27Jun2024
|
||||
.. deprecated:: 11Dec2015
|
||||
|
||||
The i-PI tool has been removed from the LAMMPS distribution. Instead,
|
||||
instructions to install i-PI from PyPI via pip are provided.
|
||||
|
||||
USER-REAXC package
|
||||
------------------
|
||||
|
||||
.. deprecated:: 7Feb2024
|
||||
|
||||
The USER-REAXC package has been renamed to :ref:`REAXFF <PKG-REAXFF>`.
|
||||
In the process also the pair style and related fixes were renamed to use
|
||||
the "reaxff" string instead of "reax/c". For a while LAMMPS was maintaining
|
||||
backward compatibility by providing aliases for the styles. These have
|
||||
been removed, so using "reaxff" is now *required*.
|
||||
|
||||
MPIIO package
|
||||
-------------
|
||||
|
||||
.. deprecated:: 21Nov2023
|
||||
|
||||
The MPIIO package has been removed from LAMMPS since it was unmaintained
|
||||
for many years and thus not updated to incorporate required changes that
|
||||
had been applied to the corresponding non-MPIIO commands. As a
|
||||
consequence the MPIIO commands had become unreliable and sometimes
|
||||
crashing LAMMPS or corrupting data. Similar functionality is available
|
||||
through the :ref:`ADIOS package <PKG-ADIOS>` and the :ref:`NETCDF
|
||||
package <PKG-NETCDF>`. Also, the :doc:`dump_modify nfile or dump_modify
|
||||
fileper <dump_modify>` keywords may be used for an efficient way of
|
||||
writing out dump files when running on large numbers of processors.
|
||||
Similarly, the "nfile" and "fileper" keywords exist for restarts:
|
||||
see :doc:`restart <restart>`, :doc:`read_restart <read_restart>`,
|
||||
:doc:`write_restart <write_restart>`.
|
||||
|
||||
MSCG package
|
||||
------------
|
||||
|
||||
.. deprecated:: 21Nov2023
|
||||
|
||||
The MSCG package has been removed from LAMMPS since it was unmaintained
|
||||
for many years and instead superseded by the `OpenMSCG software
|
||||
<https://software.rcc.uchicago.edu/mscg/>`_ of the Voth group at the
|
||||
University of Chicago, which can be used independent from LAMMPS.
|
||||
|
||||
LATTE package
|
||||
-------------
|
||||
|
||||
.. deprecated:: 15Jun2023
|
||||
|
||||
The LATTE package with the fix latte command was removed from LAMMPS.
|
||||
This functionality has been superseded by :doc:`fix mdi/qm <fix_mdi_qm>`
|
||||
and :doc:`fix mdi/qmmm <fix_mdi_qmmm>` from the :ref:`MDI package
|
||||
<PKG-MDI>`. These fixes are compatible with several quantum software
|
||||
packages, including LATTE. See the ``examples/QUANTUM`` dir and the
|
||||
:doc:`MDI coupling HOWTO <Howto_mdi>` page. MDI supports running LAMMPS
|
||||
with LATTE as a plugin library (similar to the way fix latte worked), as
|
||||
well as on a different set of MPI processors.
|
||||
|
||||
Minimize style fire/old
|
||||
-----------------------
|
||||
|
||||
.. deprecated:: 8Feb2023
|
||||
|
||||
Minimize style *fire/old* has been removed. Its functionality can be
|
||||
reproduced with style *fire* with specific options. Please see the
|
||||
:doc:`min_modify command <min_modify>` documentation for details.
|
||||
|
||||
Pair style mesont/tpm, compute style mesont, atom style mesont
|
||||
--------------------------------------------------------------
|
||||
|
||||
.. deprecated:: 8Feb2023
|
||||
|
||||
Pair style *mesont/tpm*, compute style *mesont*, and atom style
|
||||
*mesont* have been removed from the :ref:`MESONT package <PKG-MESONT>`.
|
||||
The same functionality is available through
|
||||
:doc:`pair style mesocnt <pair_mesocnt>`,
|
||||
:doc:`bond style mesocnt <bond_mesocnt>` and
|
||||
:doc:`angle style mesocnt <angle_mesocnt>`.
|
||||
The fixes ave/spatial and ave/spatial/sphere have been removed from LAMMPS
|
||||
since they were superseded by the more general and extensible "chunk
|
||||
infrastructure". Here the system is partitioned in one of many possible
|
||||
ways through the :doc:`compute chunk/atom <compute_chunk_atom>` command
|
||||
and then averaging is done using :doc:`fix ave/chunk <fix_ave_chunk>`.
|
||||
Please refer to the :doc:`chunk HOWTO <Howto_chunk>` section for an overview.
|
||||
|
||||
Box command
|
||||
-----------
|
||||
@ -120,34 +50,23 @@ been folded into the :doc:`reset_atoms <reset_atoms>` command. If
|
||||
present, LAMMPS will replace the commands accordingly and print a
|
||||
warning.
|
||||
|
||||
MESSAGE package
|
||||
---------------
|
||||
LATTE package
|
||||
-------------
|
||||
|
||||
.. deprecated:: 4May2022
|
||||
.. deprecated:: 15Jun2023
|
||||
|
||||
The MESSAGE package has been removed since it was superseded by the
|
||||
:ref:`MDI package <PKG-MDI>`. MDI implements the same functionality
|
||||
and in a more general way with direct support for more applications.
|
||||
|
||||
REAX package
|
||||
------------
|
||||
|
||||
.. deprecated:: 4Jan2019
|
||||
|
||||
The REAX package has been removed since it was superseded by the
|
||||
:ref:`REAXFF package <PKG-REAXFF>`. The REAXFF package has been tested
|
||||
to yield equivalent results to the REAX package, offers better
|
||||
performance, supports OpenMP multi-threading via OPENMP, and GPU and
|
||||
threading parallelization through KOKKOS. The new pair styles are not
|
||||
syntax compatible with the removed reax pair style, so input files will
|
||||
have to be adapted. The REAXFF package was originally called
|
||||
USER-REAXC.
|
||||
The LATTE package with the fix latte command was removed from LAMMPS.
|
||||
This functionality has been superseded by :doc:`fix mdi/qm <fix_mdi_qm>`
|
||||
and :doc:`fix mdi/qmmm <fix_mdi_qmmm>` from the :ref:`MDI package
|
||||
<PKG-MDI>`. These fixes are compatible with several quantum software
|
||||
packages, including LATTE. See the ``examples/QUANTUM`` dir and the
|
||||
:doc:`MDI coupling HOWTO <Howto_mdi>` page. MDI supports running LAMMPS
|
||||
with LATTE as a plugin library (similar to the way fix latte worked), as
|
||||
well as on a different set of MPI processors.
|
||||
|
||||
MEAM package
|
||||
------------
|
||||
|
||||
.. deprecated:: 4Jan2019
|
||||
|
||||
The MEAM package in Fortran has been replaced by a C++ implementation.
|
||||
The code in the :ref:`MEAM package <PKG-MEAM>` is a translation of the
|
||||
Fortran code of MEAM into C++, which removes several restrictions
|
||||
@ -157,11 +76,82 @@ for some optimizations leading to better performance. The pair style
|
||||
period the C++ version of MEAM was called USER-MEAMC so it could
|
||||
coexist with the Fortran version.
|
||||
|
||||
Minimize style fire/old
|
||||
-----------------------
|
||||
|
||||
.. deprecated:: 8Feb2023
|
||||
|
||||
Minimize style *fire/old* has been removed. Its functionality can be
|
||||
reproduced with *fire* with specific options. Please see the
|
||||
:doc:`min_modify command <min_modify>` documentation for details.
|
||||
|
||||
Pair style mesont/tpm, compute style mesont, atom style mesont
|
||||
--------------------------------------------------------------
|
||||
|
||||
.. deprecated:: 8Feb2023
|
||||
|
||||
Pair style *mesont/tpm*, compute style *mesont*, and atom style
|
||||
*mesont* have been removed from the :ref:`MESONT package <PKG-MESONT>`.
|
||||
The same functionality is available through
|
||||
:doc:`pair style mesocnt <pair_mesocnt>`,
|
||||
:doc:`bond style mesocnt <bond_mesocnt>` and
|
||||
:doc:`angle style mesocnt <angle_mesocnt>`.
|
||||
|
||||
MPIIO package
|
||||
-------------
|
||||
|
||||
.. deprecated:: 21Nov2023
|
||||
|
||||
The MPIIO package has been removed from LAMMPS since it was unmaintained
|
||||
for many years and thus not updated to incorporate required changes that
|
||||
had been applied to the corresponding non-MPIIO commands. As a
|
||||
consequence the MPIIO commands had become unreliable and sometimes
|
||||
crashing LAMMPS or corrupting data. Similar functionality is available
|
||||
through the :ref:`ADIOS package <PKG-ADIOS>` and the :ref:`NETCDF
|
||||
package <PKG-NETCDF>`. Also, the :doc:`dump_modify nfile or dump_modify
|
||||
fileper <dump_modify>` keywords may be used for an efficient way of
|
||||
writing out dump files when running on large numbers of processors.
|
||||
Similarly, the "nfile" and "fileper" keywords exist for restarts:
|
||||
see :doc:`restart <restart>`, :doc:`read_restart <read_restart>`,
|
||||
:doc:`write_restart <write_restart>`.
|
||||
|
||||
|
||||
MSCG package
|
||||
------------
|
||||
|
||||
.. deprecated:: 21Nov2023
|
||||
|
||||
The MSCG package has been removed from LAMMPS since it was unmaintained
|
||||
for many years and instead superseded by the `OpenMSCG software
|
||||
<https://software.rcc.uchicago.edu/mscg/>`_ of the Voth group at the
|
||||
University of Chicago, which can be used independent from LAMMPS.
|
||||
|
||||
REAX package
|
||||
------------
|
||||
|
||||
The REAX package has been removed since it was superseded by the
|
||||
:ref:`REAXFF package <PKG-REAXFF>`. The REAXFF package has been tested
|
||||
to yield equivalent results to the REAX package, offers better
|
||||
performance, supports OpenMP multi-threading via OPENMP, and GPU and
|
||||
threading parallelization through KOKKOS. The new pair styles are not
|
||||
syntax compatible with the removed reax pair style, so input files will
|
||||
have to be adapted. The REAXFF package was originally called
|
||||
USER-REAXC.
|
||||
|
||||
USER-REAXC package
|
||||
------------------
|
||||
|
||||
.. deprecated:: 7Feb2024
|
||||
|
||||
The USER-REAXC package has been renamed to :ref:`REAXFF <PKG-REAXFF>`.
|
||||
In the process also the pair style and related fixes were renamed to use
|
||||
the "reaxff" string instead of "reax/c". For a while LAMMPS was maintaining
|
||||
backward compatibility by providing aliases for the styles. These have
|
||||
been removed, so using "reaxff" is now *required*.
|
||||
|
||||
USER-CUDA package
|
||||
-----------------
|
||||
|
||||
.. deprecated:: 31May2016
|
||||
|
||||
The USER-CUDA package had been removed, since it had been unmaintained
|
||||
for a long time and had known bugs and problems. Significant parts of
|
||||
the design were transferred to the
|
||||
@ -170,39 +160,19 @@ performance characteristics on NVIDIA GPUs. Both, the KOKKOS
|
||||
and the :ref:`GPU package <PKG-GPU>` are maintained
|
||||
and allow running LAMMPS with GPU acceleration.
|
||||
|
||||
Compute atom/molecule
|
||||
---------------------
|
||||
i-PI tool
|
||||
---------
|
||||
|
||||
.. deprecated:: 11 Dec2015
|
||||
.. versionchanged:: 27Jun2024
|
||||
|
||||
The atom/molecule command has been removed from LAMMPS since it was superseded
|
||||
by the more general and extensible "chunk infrastructure". Here the system is
|
||||
partitioned in one of many possible ways - including using molecule IDs -
|
||||
through the :doc:`compute chunk/atom <compute_chunk_atom>` command and then
|
||||
summing is done using :doc:`compute reduce/chunk <compute_reduce_chunk>` Please
|
||||
refer to the :doc:`chunk HOWTO <Howto_chunk>` section for an overview.
|
||||
The i-PI tool has been removed from the LAMMPS distribution. Instead,
|
||||
instructions to install i-PI from PyPI via pip are provided.
|
||||
|
||||
Fix ave/spatial and fix ave/spatial/sphere
|
||||
------------------------------------------
|
||||
LAMMPS shell
|
||||
------------
|
||||
|
||||
.. deprecated:: 11Dec2015
|
||||
.. versionchanged:: 29Aug2024
|
||||
|
||||
The fixes ave/spatial and ave/spatial/sphere have been removed from LAMMPS
|
||||
since they were superseded by the more general and extensible "chunk
|
||||
infrastructure". Here the system is partitioned in one of many possible
|
||||
ways through the :doc:`compute chunk/atom <compute_chunk_atom>` command
|
||||
and then averaging is done using :doc:`fix ave/chunk <fix_ave_chunk>`.
|
||||
Please refer to the :doc:`chunk HOWTO <Howto_chunk>` section for an overview.
|
||||
|
||||
restart2data tool
|
||||
-----------------
|
||||
|
||||
.. deprecated:: 23Nov2013
|
||||
|
||||
The functionality of the restart2data tool has been folded into the
|
||||
LAMMPS executable directly instead of having a separate tool. A
|
||||
combination of the commands :doc:`read_restart <read_restart>` and
|
||||
:doc:`write_data <write_data>` can be used to the same effect. For
|
||||
added convenience this conversion can also be triggered by
|
||||
:doc:`command-line flags <Run_options>`
|
||||
The LAMMPS shell has been removed from the LAMMPS distribution. Users
|
||||
are encouraged to use the :ref:`LAMMPS-GUI <lammps_gui>` tool instead.
|
||||
|
||||
|
||||
@ -24,5 +24,4 @@ of time and requests from the LAMMPS user community.
|
||||
Classes
|
||||
Developer_platform
|
||||
Developer_utils
|
||||
Developer_internal
|
||||
Developer_grid
|
||||
|
||||
@ -203,7 +203,6 @@ processed in the expected order before types are removed from dynamic
|
||||
dispatch.
|
||||
|
||||
.. admonition:: Important Notes
|
||||
:class: note
|
||||
|
||||
In order to be able to detect incompatibilities at compile time and
|
||||
to avoid unexpected behavior, it is crucial that all member functions
|
||||
@ -301,24 +300,18 @@ Formatting with the {fmt} library
|
||||
|
||||
The LAMMPS source code includes a copy of the `{fmt} library
|
||||
<https://fmt.dev>`_, which is preferred over formatting with the
|
||||
"printf()" family of functions. The primary reason is that it allows a
|
||||
typesafe default format for any type of supported data. This is
|
||||
"printf()" family of functions. The primary reason is that it allows
|
||||
a typesafe default format for any type of supported data. This is
|
||||
particularly useful for formatting integers of a given size (32-bit or
|
||||
64-bit) which may require different format strings depending on compile
|
||||
time settings or compilers/operating systems. Furthermore, {fmt} gives
|
||||
better performance, has more functionality, a familiar formatting syntax
|
||||
that has similarities to ``format()`` in Python, and provides a facility
|
||||
that can be used to integrate format strings and a variable number of
|
||||
arguments into custom functions in a much simpler way than the varargs
|
||||
mechanism of the C library. Finally, {fmt} has been included into the
|
||||
C++20 language standard as ``std::format()``, so changes to adopt it are
|
||||
future-proof, for as long as they are not using any extensions that are
|
||||
not (yet) included into C++.
|
||||
|
||||
The long-term plan is to switch to using ``std::format()`` instead of
|
||||
``fmt::format()`` when the minimum C++ standard required for LAMMPS will
|
||||
be set to C++20. See the :ref:`basic build instructions <compile>` for
|
||||
more details.
|
||||
64-bit) which may require different format strings depending on
|
||||
compile time settings or compilers/operating systems. Furthermore,
|
||||
{fmt} gives better performance, has more functionality, a familiar
|
||||
formatting syntax that has similarities to ``format()`` in Python, and
|
||||
provides a facility that can be used to integrate format strings and a
|
||||
variable number of arguments into custom functions in a much simpler
|
||||
way than the varargs mechanism of the C library. Finally, {fmt} has
|
||||
been included into the C++20 language standard, so changes to adopt it
|
||||
are future-proof.
|
||||
|
||||
Formatted strings are frequently created by calling the
|
||||
``fmt::format()`` function, which will return a string as a
|
||||
@ -326,13 +319,11 @@ Formatted strings are frequently created by calling the
|
||||
``printf()``, the {fmt} library uses ``{}`` to embed format descriptors.
|
||||
In the simplest case, no additional characters are needed, as {fmt} will
|
||||
choose the default format based on the data type of the argument.
|
||||
Otherwise, the :cpp:func:`utils::print() <LAMMPS_NS::utils::print>`
|
||||
function may be used instead of ``printf()`` or ``fprintf()``. In
|
||||
addition, several LAMMPS output functions, that originally accepted a
|
||||
single string as argument have been overloaded to accept a format string
|
||||
with optional arguments as well (e.g., ``Error::all()``,
|
||||
``Error::one()``, :cpp:func:`utils::logmesg()
|
||||
<LAMMPS_NS::utils::logmesg>`).
|
||||
Otherwise, the ``fmt::print()`` function may be used instead of
|
||||
``printf()`` or ``fprintf()``. In addition, several LAMMPS output
|
||||
functions, that originally accepted a single string as argument have
|
||||
been overloaded to accept a format string with optional arguments as
|
||||
well (e.g., ``Error::all()``, ``Error::one()``, ``utils::logmesg()``).
|
||||
|
||||
Summary of the {fmt} format syntax
|
||||
==================================
|
||||
|
||||
@ -79,19 +79,19 @@ containing ``double`` values. To correctly store integers that may be
|
||||
64-bit (bigint, tagint, imageint) in the buffer, you need to use the
|
||||
:ref:`ubuf union <communication_buffer_coding_with_ubuf>` construct.
|
||||
|
||||
The *Fix*, *Bond*, *Compute*, and *Dump* classes can also invoke the
|
||||
same kind of forward and reverse communication operations using the
|
||||
same *Comm* class methods. Likewise, the same pack/unpack methods and
|
||||
The *Fix*, *Compute*, and *Dump* classes can also invoke the same kind
|
||||
of forward and reverse communication operations using the same *Comm*
|
||||
class methods. Likewise, the same pack/unpack methods and
|
||||
comm_forward/comm_reverse variables must be defined by the calling
|
||||
*Fix*, *Bond*, *Compute*, or *Dump* class.
|
||||
*Fix*, *Compute*, or *Dump* class.
|
||||
|
||||
For all of these classes, there is an optional second argument to the
|
||||
For *Fix* classes, there is an optional second argument to the
|
||||
*forward_comm()* and *reverse_comm()* call which can be used when the
|
||||
class performs multiple modes of communication, with different numbers
|
||||
of values per atom. The class should set the *comm_forward* and
|
||||
fix performs multiple modes of communication, with different numbers
|
||||
of values per atom. The fix should set the *comm_forward* and
|
||||
*comm_reverse* variables to the maximum value, but can invoke the
|
||||
communication for a particular mode with a smaller value. For this
|
||||
to work, the *pack_forward_comm()*, etc. methods typically use a class
|
||||
to work, the *pack_forward_comm()*, etc methods typically use a class
|
||||
member variable to choose which values to pack/unpack into/from the
|
||||
buffer.
|
||||
|
||||
|
||||
@ -209,7 +209,7 @@ nve, nvt, npt.
|
||||
|
||||
At the end of the timestep, fixes that contain an ``end_of_step()``
|
||||
method are invoked. These typically perform a diagnostic calculation,
|
||||
e.g. the ave/time and ave/chunk fixes. The final operation of the
|
||||
e.g. the ave/time and ave/spatial fixes. The final operation of the
|
||||
timestep is to perform any requested output, via the ``write()`` method
|
||||
of the Output class. There are 3 kinds of LAMMPS output: thermodynamic
|
||||
output to the screen and log file, snapshots of atom data to a dump
|
||||
|
||||
@ -1,120 +0,0 @@
|
||||
Internal Styles
|
||||
---------------
|
||||
|
||||
LAMMPS has a number of styles that are not meant to be used in an input
|
||||
file and thus are not documented in the :doc:`LAMMPS command
|
||||
documentation <Commands_all>`. The differentiation between user
|
||||
commands and internal commands is through the case of the command name:
|
||||
user commands and styles are all lower case, internal styles are all
|
||||
upper case. Internal styles are not called from the input file, but
|
||||
their classes are instantiated by other styles. Often they are
|
||||
created by other styles to store internal data or to perform actions
|
||||
regularly at specific steps of the simulation.
|
||||
|
||||
The paragraphs below document some of those styles that have general
|
||||
utility and may be used to avoid redundant implementation.
|
||||
|
||||
DEPRECATED Styles
|
||||
^^^^^^^^^^^^^^^^^
|
||||
|
||||
The styles called DEPRECATED (e.g. pair, bond, fix, compute, region, etc.)
|
||||
have the purpose to inform users that a specific style has been removed
|
||||
or renamed. This is achieved by creating an alias for the deprecated
|
||||
style to the corresponding class. For example, the fix style DEPRECATED
|
||||
is aliased to fix style ave/spatial and fix style ave/spatial/sphere with
|
||||
the following code:
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
FixStyle(DEPRECATED,FixDeprecated);
|
||||
FixStyle(ave/spatial,FixDeprecated);
|
||||
FixStyle(ave/spatial/sphere,FixDeprecated);
|
||||
|
||||
The individual class will then determine based on the style name
|
||||
what action to perform:
|
||||
|
||||
- inform that the style has been removed and what style replaces it, if any, and then error out
|
||||
- inform that the style has been renamed and then either execute the replacement or error out
|
||||
- inform that the style is no longer required, and it is thus ignored and continue
|
||||
|
||||
There is also a section in the user's guide for :doc:`removed commands
|
||||
and packages <Commands_removed>` with additional explanations.
|
||||
|
||||
Internal fix styles
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
These provide an implementation of features that would otherwise have
|
||||
been replicated across multiple styles. The used fix ID is generally
|
||||
derived from the compute or fix ID creating the fix with some string
|
||||
appended. When needed, the fix can be looked up with
|
||||
``Modify::get_fix_by_id()``, which returns a pointer to the fix
|
||||
instance. The data managed by the fix can be accessed just as for other
|
||||
fixes that can be used in input files.
|
||||
|
||||
fix DUMMY
|
||||
"""""""""
|
||||
|
||||
Most fix classes cannot be instantiated before the simulation box has
|
||||
been created since they access data that is only available then.
|
||||
However, in some cases it is required that a fix must be at or close to
|
||||
the top of the list of all fixes. In those cases an instance of the
|
||||
DUMMY fix style may be created by calling ``Modify::add_fix()`` and then
|
||||
later replaced by the intended fix through calling ``Modify::replace_fix()``.
|
||||
|
||||
fix STORE/ATOM
|
||||
""""""""""""""
|
||||
|
||||
Fix STORE/ATOM can be used as persistent storage of per-atom data.
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
fix ID group-ID STORE/ATOM N1 N2 gflag rflag
|
||||
|
||||
* ID, group-ID are documented in :doc:`fix <fix>` command
|
||||
* STORE/ATOM = style name of this fix command
|
||||
* N1 = 1, N2 = 0 : data is per-atom vector = single value per atom
|
||||
* N1 > 1, N2 = 0 : data is per-atom array = N1 values per atom
|
||||
* N1 > 0, N2 > 0 : data is per-atom tensor = N1xN2 values per atom
|
||||
* gflag = 1 communicate per-atom values with ghost atoms, 0 do not update ghost atom data
|
||||
* rflag = 1 store per-atom value in restart file, 0 do not store data in restart
|
||||
|
||||
Similar functionality is also available through using custom per-atom
|
||||
properties with :doc:`fix property/atom <fix_property_atom>`. The
|
||||
choice between the two fixes should be based on whether the user should
|
||||
be able to access this per-atom data: if yes, then fix property/atom is
|
||||
preferred, otherwise fix STORE/ATOM.
|
||||
|
||||
fix STORE/GLOBAL
|
||||
""""""""""""""""
|
||||
|
||||
Fix STORE/GLOBAL can be used as persistent storage of global data with support for restarts
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
fix ID group-ID STORE/GLOBAL N1 N2
|
||||
|
||||
* ID, group-ID are documented in :doc:`fix <fix>` command
|
||||
* STORE/GLOBAL = style name of this fix command
|
||||
* N1 >=1 : number of global items to store
|
||||
* N2 = 1 : data is global vector of length N1
|
||||
* N2 > 1 : data is global N1xN2 array
|
||||
|
||||
fix STORE/LOCAL
|
||||
"""""""""""""""
|
||||
|
||||
Fix STORE/LOCAL can be used as persistent storage for local data
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
fix ID group-ID STORE/LOCAL Nreset Nvalues
|
||||
|
||||
* ID, group-ID are documented in :doc:`fix <fix>` command
|
||||
* STORE/LOCAL = style name of this fix command
|
||||
* Nreset = frequency at which local data is available
|
||||
* Nvalues = number of values per local item, that is the number of columns
|
||||
@ -7,7 +7,13 @@ typically document what a variable stores, what a small section of
|
||||
code does, or what a function does and its input/outputs. The topics
|
||||
on this page are intended to document code functionality at a higher level.
|
||||
|
||||
.. contents:: Available notes
|
||||
Available topics are:
|
||||
|
||||
- `Reading and parsing of text and text files`_
|
||||
- `Requesting and accessing neighbor lists`_
|
||||
- `Choosing between a custom atom style, fix property/atom, and fix STORE/ATOM`_
|
||||
- `Fix contributions to instantaneous energy, virial, and cumulative energy`_
|
||||
- `KSpace PPPM FFT grids`_
|
||||
|
||||
----
|
||||
|
||||
@ -212,149 +218,6 @@ command:
|
||||
|
||||
neighbor->add_request(this, "delete_atoms", NeighConst::REQ_FULL);
|
||||
|
||||
|
||||
Errors, warnings, and informational messages
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
LAMMPS has specialized functionality to handle errors (which should
|
||||
terminate LAMMPS), warning messages (which should indicate possible
|
||||
problems *without* terminating LAMMPS), and informational text for
|
||||
messages about the progress and chosen settings. We *strongly*
|
||||
encourage using these facilities and to *stay away* from using
|
||||
``printf()`` or ``fprintf()`` or ``std::cout`` or ``std::cerr`` and
|
||||
calling ``MPI_Abort()`` or ``exit()`` directly. Warnings and
|
||||
informational messages should be printed only on MPI rank 0 to avoid
|
||||
flooding the output when running in parallel with many MPI processes.
|
||||
|
||||
**Errors**
|
||||
|
||||
When LAMMPS encounters an error, for example a syntax error in the
|
||||
input, then a suitable error message should be printed giving a brief,
|
||||
one line remark about the reason and then call either ``Error::all()``
|
||||
or ``Error::one()``. ``Error::all()`` must be called when the failing
|
||||
code path is executed by *all* MPI processes and the error condition
|
||||
will appear for *all* MPI processes the same. If desired, each MPI
|
||||
process may set a flag to either 0 or 1 and then MPI_Allreduce()
|
||||
searching for the maximum can be used to determine if there was an error
|
||||
on *any* of the MPI processes and make this information available to
|
||||
*all*. ``Error::one()`` in contrast needs to be called when only one or
|
||||
a few MPI processes execute the code path or can have the error
|
||||
condition. ``Error::all()`` is generally the preferred option.
|
||||
|
||||
Calling these functions does not abort LAMMPS directly, but rather
|
||||
throws either a ``LAMMPSException`` (from ``Error::all()``) or a
|
||||
``LAMMPSAbortException`` (from ``Error::one()``). These exceptions are
|
||||
caught by the LAMMPS ``main()`` program and then handled accordingly.
|
||||
The reason for this approach is to support applications, especially
|
||||
graphical applications like :ref:`LAMMPS-GUI <lammps_gui>`, that are
|
||||
linked to the LAMMPS library and have a mechanism to avoid that an error
|
||||
in LAMMPS terminates the application. By catching the exceptions, the
|
||||
application can delete the failing LAMMPS class instance and create a
|
||||
new one to try again. In a similar fashion, the :doc:`LAMMPS Python
|
||||
module <Python_module>` checks for this and then re-throws corresponding
|
||||
Python exception, which in turn can be caught by the calling Python
|
||||
code.
|
||||
|
||||
There are multiple "signatures" that can be called:
|
||||
|
||||
- ``Error::all(FLERR, "Error message")``: this will abort LAMMPS with
|
||||
the error message "Error message", followed by the last line of input
|
||||
that was read and processed before the error condition happened.
|
||||
|
||||
- ``Error::all(FLERR, Error::NOLASTLINE, "Error message")``: this is the
|
||||
same as before but without the last line of input. This is preferred
|
||||
for errors that would happen *during* a :doc:`run <run>` or
|
||||
:doc:`minimization <minimize>`, since showing the "run" or "minimize"
|
||||
command would be the last line, but is unrelated to the error.
|
||||
|
||||
- ``Error::all(FLERR, idx, "Error message")``: this is for argument
|
||||
parsing where "idx" is the index (starting at 0) of the argument for a
|
||||
LAMMPS command that is causing the failure (use -1 for the command
|
||||
itself). For index 0, you need to use the constant ``Error::ARGZERO``
|
||||
to work around the inability of some compilers to disambiguate between
|
||||
a NULL pointer and an integer constant 0, even with an added type cast.
|
||||
The output may also include the last input line *before* and
|
||||
*after*, if they differ due to substituting variables. A textual
|
||||
indicator is pointing to the specific word that failed. Using the
|
||||
constant ``Error::NOPOINTER`` in place of the *idx* argument will
|
||||
suppress the marker and then the behavior is like the *idx* argument
|
||||
is not provided.
|
||||
|
||||
FLERR is a macro containing the filename and line where the Error class
|
||||
is called and that information is appended to the error message. This
|
||||
allows to quickly find the relevant source code causing the error. For
|
||||
all three signatures, the single string "Error message" may be replaced
|
||||
with a format string using '{}' placeholders and followed by a variable
|
||||
number of arguments, one for each placeholder. This format string and
|
||||
the arguments are then handed for formatting to the `{fmt} library
|
||||
<https://fmt.dev>`_ (which is bundled with LAMMPS) and thus allow
|
||||
processing similar to the "format()" functionality in Python.
|
||||
|
||||
.. note::
|
||||
|
||||
For commands like :doc:`fix ave/time <fix_ave_time>` that accept
|
||||
wildcard arguments, the :cpp:func:`utils::expand_args` function
|
||||
may be passed as an optional argument where the function will provide
|
||||
a map to the original arguments from the expanded argument indices.
|
||||
|
||||
For complex errors, that can have multiple causes and which cannot be
|
||||
explained in a single line, you can append to the error message, the
|
||||
string created by :cpp:func:`utils::errorurl`, which then provides a
|
||||
URL pointing to a paragraph of the :doc:`Errors_details` that
|
||||
corresponds to the number provided. Example:
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
error->all(FLERR, "Unknown identifier in data file: {}{}", keyword, utils::errorurl(1));
|
||||
|
||||
This will output something like this:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
ERROR: Unknown identifier in data file: Massess
|
||||
For more information see https://docs.lammps.org/err0001 (src/read_data.cpp:1482)
|
||||
Last input line: read_data data.peptide
|
||||
|
||||
Where the URL points to the first paragraph with explanations on
|
||||
the :doc:`Errors_details` page in the manual.
|
||||
|
||||
**Warnings**
|
||||
|
||||
To print warnings, the ``Errors::warning()`` function should be used.
|
||||
It also requires the FLERR macros as first argument to easily identify
|
||||
the location of the warning in the source code. Same as with the error
|
||||
functions above, the function has two variants: one just taking a single
|
||||
string as final argument and a second that uses the `{fmt} library
|
||||
<https://fmt.dev>`_ to make it similar to, say, ``fprintf()``. One
|
||||
motivation to use this function is that it will output warnings with
|
||||
always the same capitalization of the leading "WARNING" string. A
|
||||
second is that it has a built in rate limiter. After a given number (by
|
||||
default 100), that can be set via the :doc:`thermo_modify command
|
||||
<thermo_modify>` no more warnings are printed. Also, warnings are
|
||||
written consistently to both screen and logfile or not, depending on the
|
||||
settings for :ref:`screen <screen>` or :doc:`logfile <log>` output.
|
||||
|
||||
.. note::
|
||||
|
||||
Unlike ``Error::all()``, the warning function will produce output on
|
||||
*every* MPI process, so it typically would be prefixed with an if
|
||||
statement testing for ``comm->me == 0``, i.e. limiting output to MPI
|
||||
rank 0.
|
||||
|
||||
**Informational messages**
|
||||
|
||||
Finally, for informational message LAMMPS has the
|
||||
:cpp:func:`utils::logmesg() convenience function
|
||||
<LAMMPS_NS::utils::logmesg>`. It also uses the `{fmt} library
|
||||
<https://fmt.dev>`_ to support using a format string followed by a
|
||||
matching number of arguments. It will output the resulting formatted
|
||||
text to both, the screen and the logfile and will honor the
|
||||
corresponding settings about whether this output is active and to which
|
||||
file it should be send. Same as for ``Error::warning()``, it would
|
||||
produce output for every MPI process and thus should usually be called
|
||||
only on MPI rank 0 to avoid flooding the output when running with many
|
||||
parallel processes.
|
||||
|
||||
Choosing between a custom atom style, fix property/atom, and fix STORE/ATOM
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
|
||||
@ -94,12 +94,12 @@ represents what is generally referred to as an "instance of LAMMPS". It
|
||||
is a composite holding pointers to instances of other core classes
|
||||
providing the core functionality of the MD engine in LAMMPS and through
|
||||
them abstractions of the required operations. The constructor of the
|
||||
LAMMPS class will instantiate those instances, process the command-line
|
||||
LAMMPS class will instantiate those instances, process the command line
|
||||
flags, initialize MPI (if not already done) and set up file pointers for
|
||||
input and output. The destructor will shut everything down and free all
|
||||
associated memory. Thus code for the standalone LAMMPS executable in
|
||||
``main.cpp`` simply initializes MPI, instantiates a single instance of
|
||||
LAMMPS while passing it the command-line flags and input script. It
|
||||
LAMMPS while passing it the command line flags and input script. It
|
||||
deletes the LAMMPS instance after the method reading the input returns
|
||||
and shuts down the MPI environment before it exits the executable.
|
||||
|
||||
|
||||
@ -227,12 +227,12 @@ Tests for the C-style library interface
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Tests for validating the LAMMPS C-style library interface are in the
|
||||
``unittest/c-library`` folder. They text either utility functions or
|
||||
LAMMPS commands, but use the functions implemented in
|
||||
``src/library.cpp`` as much as possible. There may be some overlap with
|
||||
other tests as far as the LAMMPS functionality is concerned, but the
|
||||
focus is on testing the C-style library API. The tests are distributed
|
||||
over multiple test programs which try to match the grouping of the
|
||||
``unittest/c-library`` folder. They are implemented either to be used
|
||||
for utility functions or for LAMMPS commands, but use the functions
|
||||
implemented in the ``src/library.cpp`` file as much as possible. There
|
||||
may be some overlap with other tests, but only in as much as is required
|
||||
to test the C-style library API. The tests are distributed over
|
||||
multiple test programs which try to match the grouping of the
|
||||
functions in the source code and :ref:`in the manual <lammps_c_api>`.
|
||||
|
||||
This group of tests also includes tests invoking LAMMPS in parallel
|
||||
@ -258,7 +258,7 @@ Tests for the Python module and package
|
||||
|
||||
The ``unittest/python`` folder contains primarily tests for classes and
|
||||
functions in the LAMMPS python module but also for commands in the
|
||||
PYTHON package. These tests are only enabled, if the necessary
|
||||
PYTHON package. These tests are only enabled if the necessary
|
||||
prerequisites are detected or enabled during configuration and
|
||||
compilation of LAMMPS (shared library build enabled, Python interpreter
|
||||
found, Python development files found).
|
||||
@ -272,30 +272,29 @@ Tests for the Fortran interface
|
||||
|
||||
Tests for using the Fortran module are in the ``unittest/fortran``
|
||||
folder. Since they are also using the GoogleTest library, they require
|
||||
test wrappers written in C++ that will call fortran functions with a C
|
||||
function interface through ISO_C_BINDINGS which will in turn call the
|
||||
functions in the LAMMPS Fortran module.
|
||||
implementing test wrappers in C++ that will call fortran functions
|
||||
which provide a C function interface through ISO_C_BINDINGS that will in
|
||||
turn call the functions in the LAMMPS Fortran module.
|
||||
|
||||
Tests for the C++-style library interface
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The tests in the ``unittest/cplusplus`` folder are somewhat similar to
|
||||
the tests for the C-style library interface, but do not need to test the
|
||||
convenience and utility functions that are only available through the
|
||||
C-style library interface. Instead they focus on the more generic
|
||||
features that are used in LAMMPS internally. This part of the unit
|
||||
tests is currently still mostly in the planning stage.
|
||||
several convenience and utility functions that are only available through
|
||||
the C-style interface. Instead it can focus on the more generic features
|
||||
that are used internally. This part of the unit tests is currently still
|
||||
mostly in the planning stage.
|
||||
|
||||
Tests for reading and writing file formats
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The ``unittest/formats`` folder contains test programs for reading and
|
||||
writing files like data files, restart files, potential files or dump
|
||||
files. This covers simple things like the file i/o convenience
|
||||
functions in the ``utils::`` namespace to complex tests of atom styles
|
||||
where creating and deleting of atoms with different properties is tested
|
||||
in different ways and through script commands or reading and writing of
|
||||
data or restart files.
|
||||
writing files like data files, restart files, potential files or dump files.
|
||||
This covers simple things like the file i/o convenience functions in the
|
||||
``utils::`` namespace to complex tests of atom styles where creating and
|
||||
deleting atoms with different properties is tested in different ways
|
||||
and through script commands or reading and writing of data or restart files.
|
||||
|
||||
Tests for styles computing or modifying forces
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@ -444,7 +443,7 @@ file for a style that is similar to one to be tested. The file name should
|
||||
follow the naming conventions described above and after copying the file,
|
||||
the first step is to replace the style names where needed. The coefficient
|
||||
values do not have to be meaningful, just in a reasonable range for the
|
||||
given system. It does not matter if some forces are large, for as long as
|
||||
given system. It does not matter if some forces are large, as long as
|
||||
they do not diverge.
|
||||
|
||||
The template input files define a large number of index variables at the top
|
||||
@ -477,7 +476,7 @@ the tabulated coulomb, to test both code paths. The reference results in the YA
|
||||
files then should be compared manually, if they agree well enough within the limits
|
||||
of those two approximations.
|
||||
|
||||
The ``test_pair_style`` and equivalent programs have special command-line options
|
||||
The ``test_pair_style`` and equivalent programs have special command line options
|
||||
to update the YAML files. Running a command like
|
||||
|
||||
.. code-block:: bash
|
||||
@ -532,20 +531,19 @@ Python module.
|
||||
Troubleshooting failed unit tests
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
There are by default no unit tests for newly added features (e.g. pair,
|
||||
fix, or compute styles) unless your pull request also includes tests for
|
||||
these added features. If you are modifying some existing LAMMPS
|
||||
features, you may see failures for existing tests, if your modifications
|
||||
have some unexpected side effects or your changes render the existing
|
||||
test invalid. If you are adding an accelerated version of an existing
|
||||
style, then only tests for INTEL, KOKKOS (with OpenMP only), OPENMP, and
|
||||
OPT will be run automatically. Tests for the GPU package are time
|
||||
consuming and thus are only run *after* a merge, or when a special
|
||||
label, ``gpu_unit_tests`` is added to the pull request. After the test
|
||||
has started, it is often best to remove the label since every PR
|
||||
activity will re-trigger the test (that is a limitation of triggering a
|
||||
test with a label). Support for unit tests using KOKKOS with GPU
|
||||
acceleration is currently not supported.
|
||||
The are by default no unit tests for newly added features (e.g. pair, fix,
|
||||
or compute styles) unless your pull request also includes tests for the
|
||||
added features. If you are modifying some features, you may see failures
|
||||
for existing tests, if your modifications have some unexpected side effects
|
||||
or your changes render the existing test invalid. If you are adding an
|
||||
accelerated version of an existing style, then only tests for INTEL,
|
||||
KOKKOS (with OpenMP only), OPENMP, and OPT will be run automatically.
|
||||
Tests for the GPU package are time consuming and thus are only run
|
||||
*after* a merge, or when a special label, ``gpu_unit_tests`` is added
|
||||
to the pull request. After the test has started, it is often best to
|
||||
remove the label since every PR activity will re-trigger the test (that
|
||||
is a limitation of triggering a test with a label). Support for unit
|
||||
tests when using KOKKOS with GPU acceleration is currently not supported.
|
||||
|
||||
When you see a failed build on GitHub, click on ``Details`` to be taken
|
||||
to the corresponding LAMMPS Jenkins CI web page. Click on the "Exit"
|
||||
@ -590,7 +588,7 @@ While the epsilon (relative precision) for a single, `IEEE 754 compliant
|
||||
<https://en.wikipedia.org/wiki/IEEE_754>`_, double precision floating
|
||||
point operation is at about 2.2e-16, the achievable precision for the
|
||||
tests is lower due to most numbers being sums over intermediate results
|
||||
for which the non-associativity of floating point math leads to larger
|
||||
and the non-associativity of floating point math leading to larger
|
||||
errors. As a rule of thumb, the test epsilon can often be in the range
|
||||
5.0e-14 to 1.0e-13. But for "noisy" force kernels, e.g. those a larger
|
||||
amount of arithmetic operations involving `exp()`, `log()` or `sin()`
|
||||
@ -604,14 +602,14 @@ of floating point operations or that some or most intermediate operations
|
||||
may be done using approximations or with single precision floating point
|
||||
math.
|
||||
|
||||
To rerun a failed unit test individually, change to the ``build`` directory
|
||||
To rerun the failed unit test individually, change to the ``build`` directory
|
||||
and run the test with verbose output. For example,
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
env TEST_ARGS=-v ctest -R ^MolPairStyle:lj_cut_coul_long -V
|
||||
|
||||
``ctest`` with the ``-V`` flag also shows the exact command
|
||||
``ctest`` with the ``-V`` flag also shows the exact command line
|
||||
of the test. One can then use ``gdb --args`` to further debug and
|
||||
catch exceptions with the test command, for example,
|
||||
|
||||
|
||||
@ -133,9 +133,6 @@ and parsing files or arguments.
|
||||
.. doxygenfunction:: trim_comment
|
||||
:project: progguide
|
||||
|
||||
.. doxygenfunction:: strcompress
|
||||
:project: progguide
|
||||
|
||||
.. doxygenfunction:: strip_style_suffix
|
||||
:project: progguide
|
||||
|
||||
@ -169,9 +166,6 @@ and parsing files or arguments.
|
||||
.. doxygenfunction:: split_lines
|
||||
:project: progguide
|
||||
|
||||
.. doxygenfunction:: strsame
|
||||
:project: progguide
|
||||
|
||||
.. doxygenfunction:: strmatch
|
||||
:project: progguide
|
||||
|
||||
@ -238,21 +232,12 @@ Convenience functions
|
||||
.. doxygenfunction:: logmesg(LAMMPS *lmp, const std::string &mesg)
|
||||
:project: progguide
|
||||
|
||||
.. doxygenfunction:: print(FILE *fp, const std::string &format, Args&&... args)
|
||||
:project: progguide
|
||||
|
||||
.. doxygenfunction:: print(FILE *fp, const std::string &mesg)
|
||||
:project: progguide
|
||||
|
||||
.. doxygenfunction:: errorurl
|
||||
:project: progguide
|
||||
|
||||
.. doxygenfunction:: missing_cmd_args
|
||||
:project: progguide
|
||||
|
||||
.. doxygenfunction:: point_to_error
|
||||
:project: progguide
|
||||
|
||||
.. doxygenfunction:: flush_buffers(LAMMPS *lmp)
|
||||
:project: progguide
|
||||
|
||||
|
||||
@ -12,4 +12,3 @@ details are provided for writing code for LAMMPS.
|
||||
|
||||
Developer_write_pair
|
||||
Developer_write_fix
|
||||
Developer_write_command
|
||||
|
||||
@ -1,348 +0,0 @@
|
||||
Writing a new command style
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Command styles allow to do system manipulations or interfaces to the
|
||||
operating system.
|
||||
|
||||
In the text below, we will discuss the implementation of one example. As
|
||||
shown on the page for :doc:`writing or extending command styles
|
||||
<Modify_command>`, in order to implement a new command style, a new class
|
||||
must be written that is either directly or indirectly derived from the
|
||||
``Command`` class. There is just one method that must be implemented:
|
||||
``Command::command()``. In addition, a custom constructor is needed to get
|
||||
access to the members of the ``LAMMPS`` class like the ``Error`` class to
|
||||
print out error messages. The ``Command::command()`` method processes the
|
||||
arguments passed to the command in the input and executes it. Any other
|
||||
methods would be for the convenience of implementation of the new command.
|
||||
|
||||
In general, new command styles should be added to the :ref:`EXTRA-COMMAND
|
||||
package <PKG-EXTRA-COMMAND>`. If you feel that your contribution should be
|
||||
added to a different package, please consult with the :doc:`LAMMPS
|
||||
developers <Intro_authors>` first. The contributed code needs to support
|
||||
the :doc:`traditional GNU make build process <Build_make>` **and** the
|
||||
:doc:`CMake build process <Build_cmake>`.
|
||||
|
||||
----
|
||||
|
||||
Case 1: Implementing the geturl command
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
In this section, we will describe the procedure of adding a simple command
|
||||
style to LAMMPS: the :doc:`geturl command <geturl>` that allows to download
|
||||
files directly without having to rely on an external program like "wget" or
|
||||
"curl". The complete implementation can be found in the files
|
||||
``src/EXTRA-COMMAND/geturl.cpp`` and ``src/EXTRA-COMMAND/geturl.h`` of the
|
||||
LAMMPS source code.
|
||||
|
||||
Interfacing the *libcurl* library
|
||||
"""""""""""""""""""""""""""""""""
|
||||
|
||||
Rather than implementing the various protocols for downloading files, we
|
||||
rely on an external library: `libcurl library <https:://curl.se/libcurl/>`_.
|
||||
This requires that the library and its headers are installed. For the
|
||||
traditional GNU make build system, this simply requires edits to the machine
|
||||
makefile to add compilation flags like for other libraries. For the CMake
|
||||
based build system, we need to add some lines to the file
|
||||
``cmake/Modules/Packages/EXTRA-COMMAND.cmake``:
|
||||
|
||||
.. code-block:: cmake
|
||||
|
||||
find_package(CURL QUIET COMPONENTS HTTP HTTPS)
|
||||
option(WITH_CURL "Enable libcurl support" ${CURL_FOUND})
|
||||
if(WITH_CURL)
|
||||
find_package(CURL REQUIRED COMPONENTS HTTP HTTPS)
|
||||
target_compile_definitions(lammps PRIVATE -DLAMMPS_CURL)
|
||||
target_link_libraries(lammps PRIVATE CURL::libcurl)
|
||||
endif()
|
||||
|
||||
The first ``find_package()`` command uses a built-in CMake module to find
|
||||
an existing *libcurl* installation with development headers and support for
|
||||
using the HTTP and HTTPS protocols. The "QUIET" flag ensures that there is
|
||||
no screen output and no error if the search fails. The status of the search
|
||||
is recorded in the "${CURL_FOUND}" variable. That variable sets the default
|
||||
of the WITH_CURL option, which toggles whether support for *libcurl* is included
|
||||
or not.
|
||||
|
||||
The second ``find_package()`` uses the "REQUIRED" flag to produce an error
|
||||
if the WITH_CURL option was set to ``True``, but no suitable *libcurl*
|
||||
implementation with development support was found. This construct is used
|
||||
so that the CMake script code inside the ``if(WITH_CURL)`` and ``endif()``
|
||||
block can be expanded later to download and compile *libcurl* as part of the
|
||||
LAMMPS build process, if it is not found locally. The
|
||||
``target_compile_definitions()`` function added the define ``-DLAMMPS_CURL``
|
||||
to the compilation flags when compiling objects for the LAMMPS library.
|
||||
This allows to always compile the :doc:`geturl command <geturl>`, but use
|
||||
pre-processing to compile in the interface to *libcurl* only when it is
|
||||
present and usable and otherwise stop with an error message about the
|
||||
unavailability of *libcurl* to execute the functionality of the command.
|
||||
|
||||
Header file
|
||||
"""""""""""
|
||||
|
||||
The first segment of any LAMMPS source should be the copyright and
|
||||
license statement. Note the marker in the first line to indicate to
|
||||
editors like emacs that this file is a C++ source, even though the .h
|
||||
extension suggests a C source (this is a convention inherited from the
|
||||
very beginning of the C++ version of LAMMPS).
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
/* -*- c++ -*- ----------------------------------------------------------
|
||||
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||
https://www.lammps.org/, Sandia National Laboratories
|
||||
LAMMPS development team: developers@lammps.org
|
||||
|
||||
Copyright (2003) Sandia Corporation. Under the terms of Contract
|
||||
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
|
||||
certain rights in this software. This software is distributed under
|
||||
the GNU General Public License.
|
||||
|
||||
See the README file in the top-level LAMMPS directory.
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
Every command style must be registered in LAMMPS by including the following
|
||||
lines of code in the second part of the header after the copyright
|
||||
message and before the include guards for the class definition:
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
#ifdef COMMAND_CLASS
|
||||
// clang-format off
|
||||
CommandStyle(geturl,GetURL);
|
||||
// clang-format on
|
||||
#else
|
||||
|
||||
This block between ``#ifdef COMMAND_CLASS`` and ``#else`` will be
|
||||
included by the ``Input`` class in ``input.cpp`` to build a map of
|
||||
"factory functions" that will create an instance of a Command class
|
||||
and call its ``command()`` method. The map connects the name of the
|
||||
command ``geturl`` with the name of the class ``GetURL``. During
|
||||
compilation, LAMMPS constructs a file ``style_command.h`` that contains
|
||||
``#include`` statements for all "installed" command styles. Before
|
||||
including ``style_command.h`` into ``input.cpp``, the ``COMMAND_CLASS``
|
||||
define is set and the ``CommandStyle(name,class)`` macro defined. The
|
||||
code of the macro adds the installed command styles to the "factory map"
|
||||
which enables the ``Input`` to execute the command.
|
||||
|
||||
The list of header files to include in ``style_command.h`` is automatically
|
||||
updated by the build system if there are new files, so the presence of the
|
||||
new header file in the ``src/EXTRA-COMMAND`` folder and the enabling of the
|
||||
EXTRA-COMMAND package will trigger LAMMPS to include the new command style
|
||||
when it is (re-)compiled. The "// clang-format" format comments are needed
|
||||
so that running :ref:`clang-format <clang-format>` on the file will not
|
||||
insert unwanted blanks which would break the ``CommandStyle`` macro.
|
||||
|
||||
The third part of the header file is the actual class definition of the
|
||||
``GetURL`` class. This has the custom constructor and the ``command()``
|
||||
method implemented by this command style. For the constructor there is
|
||||
nothing to do but to pass the ``lmp`` pointer to the base class. Since the
|
||||
``command()`` method is labeled "virtual" in the base class, it must be
|
||||
given the "override" property.
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
#ifndef LMP_GETURL_H
|
||||
#define LMP_GETURL_H
|
||||
|
||||
#include "command.h"
|
||||
|
||||
namespace LAMMPS_NS {
|
||||
|
||||
class GetURL : public Command {
|
||||
public:
|
||||
GetURL(class LAMMPS *lmp) : Command(lmp) {};
|
||||
void command(int, char **) override;
|
||||
};
|
||||
} // namespace LAMMPS_NS
|
||||
#endif
|
||||
#endif
|
||||
|
||||
The "override" property helps to detect unexpected mismatches because
|
||||
compilation will stop with an error in case the signature of a function
|
||||
is changed in the base class without also changing it in all derived
|
||||
classes.
|
||||
|
||||
Implementation file
|
||||
"""""""""""""""""""
|
||||
|
||||
We move on to the implementation of the ``GetURL`` class in the
|
||||
``geturl.cpp`` file. This file also starts with a LAMMPS copyright and
|
||||
license header. Below that notice is typically the space where comments may
|
||||
be added with additional information about this specific file, the
|
||||
author(s), affiliation(s), and email address(es). This way the contributing
|
||||
author(s) can be easily contacted, when there are questions about the
|
||||
implementation later. Since the file(s) may be around for a long time, it
|
||||
is beneficial to use some kind of "permanent" email address, if possible.
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||
https://www.lammps.org/, Sandia National Laboratories
|
||||
LAMMPS development team: developers@lammps.org
|
||||
|
||||
Copyright (2003) Sandia Corporation. Under the terms of Contract
|
||||
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
|
||||
certain rights in this software. This software is distributed under
|
||||
the GNU General Public License.
|
||||
|
||||
See the README file in the top-level LAMMPS directory.
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
Contributing authors: Axel Kohlmeyer (Temple U),
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
#include "geturl.h"
|
||||
|
||||
#include "comm.h"
|
||||
#include "error.h"
|
||||
|
||||
#if defined(LAMMPS_CURL)
|
||||
#include <curl/curl.h>
|
||||
#endif
|
||||
|
||||
using namespace LAMMPS_NS;
|
||||
|
||||
The second section of the implementation file has various include
|
||||
statements. The include file for the class header has to come first, then a
|
||||
couple of LAMMPS classes (sorted alphabetically) followed by the header for
|
||||
the *libcurl* interface. This is wrapped into an ``#ifdef`` block so that
|
||||
LAMMPS will compile this file without error when the *libcurl* header is not
|
||||
available and thus the define not set. The final statement of this segment
|
||||
imports the ``LAMMPS_NS::`` namespace globally for this file. This way, all
|
||||
LAMMPS specific functions and classes do not have to be prefixed with
|
||||
``LAMMPS_NS::``.
|
||||
|
||||
The command() function (required)
|
||||
"""""""""""""""""""""""""""""""""
|
||||
|
||||
Since the required custom constructor is trivial and implemented in the
|
||||
header, there is only one function that must be implemented for a command
|
||||
style and that is the ``command()`` function.
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
void GetURL::command(int narg, char **arg)
|
||||
{
|
||||
#if !defined(LAMMPS_CURL)
|
||||
error->all(FLERR, "LAMMPS has not been compiled with libcurl support");
|
||||
#else
|
||||
if (narg < 1) utils::missing_cmd_args(FLERR, "geturl", error);
|
||||
int verify = 1;
|
||||
int overwrite = 1;
|
||||
int verbose = 0;
|
||||
|
||||
This first part also has the ``#ifdef`` block depending on the LAMMPS_CURL
|
||||
define. This way the command will simply print an error, if *libcurl* is
|
||||
not available but will not fail to compile. Furthermore, it sets the
|
||||
defaults for the following optional arguments.
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
// process arguments
|
||||
|
||||
std::string url = arg[0];
|
||||
|
||||
// sanity check
|
||||
|
||||
if ((url.find(':') == std::string::npos) || (url.find('/') == std::string::npos))
|
||||
error->all(FLERR, "URL '{}' is not a supported URL", url);
|
||||
|
||||
std::string output = url.substr(url.find_last_of('/') + 1);
|
||||
if (output.empty()) error->all(FLERR, "URL '{}' must end in a file string", url);
|
||||
|
||||
This block stores the positional, i.e. non-optional argument of the URL to
|
||||
be downloaded and adds a couple of sanity checks on the string to make sure it is
|
||||
a valid URL. Also it derives the default name of the output file from the URL.
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
int iarg = 1;
|
||||
while (iarg < narg) {
|
||||
if (strcmp(arg[iarg], "output") == 0) {
|
||||
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "geturl output", error);
|
||||
output = arg[iarg + 1];
|
||||
++iarg;
|
||||
} else if (strcmp(arg[iarg], "overwrite") == 0) {
|
||||
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "geturl overwrite", error);
|
||||
overwrite = utils::logical(FLERR, arg[iarg + 1], false, lmp);
|
||||
++iarg;
|
||||
} else if (strcmp(arg[iarg], "verify") == 0) {
|
||||
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "geturl verify", error);
|
||||
verify = utils::logical(FLERR, arg[iarg + 1], false, lmp);
|
||||
++iarg;
|
||||
} else if (strcmp(arg[iarg], "verbose") == 0) {
|
||||
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "geturl verbose", error);
|
||||
verbose = utils::logical(FLERR, arg[iarg + 1], false, lmp);
|
||||
++iarg;
|
||||
} else {
|
||||
error->all(FLERR, "Unknown geturl keyword: {}", arg[iarg]);
|
||||
}
|
||||
++iarg;
|
||||
}
|
||||
|
||||
This block parses the optional arguments following the URL and stops with an
|
||||
error if there are arguments missing or an unknown argument is encountered.
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
// only download files from rank 0
|
||||
|
||||
if (comm->me != 0) return;
|
||||
|
||||
if (!overwrite && platform::file_is_readable(output)) return;
|
||||
|
||||
// open output file for writing
|
||||
|
||||
FILE *out = fopen(output.c_str(), "wb");
|
||||
if (!out)
|
||||
error->all(FLERR, "Cannot open output file {} for writing: {}", output, utils::getsyserror());
|
||||
|
||||
Here all MPI ranks other than 0 will return, so that the URL download will
|
||||
only happen from a single MPI rank. For that rank the output file is opened
|
||||
for writing using the C library function ``fopen()``.
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
// initialize curl and perform download
|
||||
|
||||
CURL *curl;
|
||||
curl_global_init(CURL_GLOBAL_DEFAULT);
|
||||
curl = curl_easy_init();
|
||||
if (curl) {
|
||||
(void) curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
|
||||
(void) curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *) out);
|
||||
(void) curl_easy_setopt(curl, CURLOPT_FILETIME, 1L);
|
||||
(void) curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1L);
|
||||
if (verbose && screen) {
|
||||
(void) curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
|
||||
(void) curl_easy_setopt(curl, CURLOPT_STDERR, (void *) screen);
|
||||
}
|
||||
if (!verify) {
|
||||
(void) curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
|
||||
(void) curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
|
||||
}
|
||||
auto res = curl_easy_perform(curl);
|
||||
if (res != CURLE_OK) {
|
||||
long response = 0L;
|
||||
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response);
|
||||
error->one(FLERR, "Download of {} failed with: {} {}", output, curl_easy_strerror(res),
|
||||
response);
|
||||
}
|
||||
curl_easy_cleanup(curl);
|
||||
|
||||
This block now implements the actual URL download with the selected options
|
||||
via the "easy" interface of *libcurl*. For the details of what these
|
||||
function calls do, please have a look at the `*libcurl documentation
|
||||
<https://curl.se/libcurl/c/allfuncs.html>`_.
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
}
|
||||
curl_global_cleanup();
|
||||
fclose(out);
|
||||
#endif
|
||||
}
|
||||
|
||||
Finally, the previously opened file is closed and the command is complete.
|
||||
@ -96,8 +96,8 @@ Here the we specify which methods of the fix should be called during
|
||||
MPI_Allreduce(localAvgVel, globalAvgVel, 4, MPI_DOUBLE, MPI_SUM, world);
|
||||
scale3(1.0 / globalAvgVel[3], globalAvgVel);
|
||||
if ((comm->me == 0) && screen) {
|
||||
utils::print(screen, "{}, {}, {}\n",
|
||||
globalAvgVel[0], globalAvgVel[1], globalAvgVel[2]);
|
||||
fmt::print(screen,"{}, {}, {}\n",
|
||||
globalAvgVel[0], globalAvgVel[1], globalAvgVel[2]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -160,7 +160,7 @@ message and before the include guards for the class definition:
|
||||
|
||||
#endif
|
||||
|
||||
This block between ``#ifdef PAIR_CLASS`` and ``#else`` will be
|
||||
This block of between ``#ifdef PAIR_CLASS`` and ``#else`` will be
|
||||
included by the ``Force`` class in ``force.cpp`` to build a map of
|
||||
"factory functions" that will create an instance of these classes and
|
||||
return a pointer to it. The map connects the name of the pair style,
|
||||
@ -310,7 +310,7 @@ the constructor and the destructor.
|
||||
|
||||
Pair styles are different from most classes in LAMMPS that define a
|
||||
"style", as their constructor only uses the LAMMPS class instance
|
||||
pointer as an argument, but **not** the arguments of the
|
||||
pointer as an argument, but **not** the command line arguments of the
|
||||
:doc:`pair_style command <pair_style>`. Instead, those arguments are
|
||||
processed in the ``Pair::settings()`` function (or rather the version in
|
||||
the derived class). The constructor is the place where global defaults
|
||||
@ -891,7 +891,7 @@ originally created from mixing or not).
|
||||
These data file output functions are only useful for true pair-wise
|
||||
additive potentials, where the potential parameters can be entered
|
||||
through *multiple* :doc:`pair_coeff commands <pair_coeff>`. Pair styles
|
||||
that require a single "pair_coeff \* \*" command are not compatible
|
||||
that require a single "pair_coeff \* \*" command line are not compatible
|
||||
with reading their parameters from data files. For pair styles like
|
||||
*born/gauss* that do support writing to data files, the potential
|
||||
parameters will be read from the data file, if present, and
|
||||
@ -1122,7 +1122,7 @@ once. Thus, the ``coeff()`` function has to do three tasks, each of
|
||||
which is delegated to a function in the ``PairTersoff`` class:
|
||||
|
||||
#. map elements to atom types. Those follow the potential file name in the
|
||||
command arguments and are processed by the ``map_element2type()`` function.
|
||||
command line arguments and are processed by the ``map_element2type()`` function.
|
||||
#. read and parse the potential parameter file in the ``read_file()`` function.
|
||||
#. Build data structures where the original and derived parameters are
|
||||
indexed by all possible triples of atom types and thus can be looked
|
||||
@ -1356,8 +1356,8 @@ either 0 or 1.
|
||||
|
||||
The ``morseflag`` variable defaults to 0 and is set to 1 in the
|
||||
``PairAIREBOMorse::settings()`` function which is called by the
|
||||
:doc:`pair_style <pair_style>` command. This function delegates all
|
||||
command argument processing and setting of other parameters to the
|
||||
:doc:`pair_style <pair_style>` command. This function delegates
|
||||
all command line processing and setting of other parameters to the
|
||||
``PairAIREBO::settings()`` function of the base class.
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
@ -83,7 +83,7 @@ Run LAMMPS from within the debugger
|
||||
Running LAMMPS under the control of the debugger as shown below only
|
||||
works for a single MPI rank (for debugging a program running in parallel
|
||||
you usually need a parallel debugger program). A simple way to launch
|
||||
GDB is to prefix the LAMMPS command-line with ``gdb --args`` and then
|
||||
GDB is to prefix the LAMMPS command line with ``gdb --args`` and then
|
||||
type the command "run" at the GDB prompt. This will launch the
|
||||
debugger, load the LAMMPS executable and its debug info, and then run
|
||||
it. When it reaches the code causing the segmentation fault, it will
|
||||
@ -180,7 +180,7 @@ inspect the behavior of a compiled program by essentially emulating a
|
||||
CPU and instrumenting the program while running. This slows down
|
||||
execution quite significantly, but can also report issues that are not
|
||||
resulting in a crash. The default valgrind tool is a memory checker and
|
||||
you can use it by prefixing the normal command-line with ``valgrind``.
|
||||
you can use it by prefixing the normal command line with ``valgrind``.
|
||||
Unlike GDB, this will also work for parallel execution, but it is
|
||||
recommended to redirect the valgrind output to a file (e.g. with
|
||||
``--log-file=crash-%p.txt``, the %p will be substituted with the
|
||||
@ -235,53 +235,3 @@ from GDB. In addition you get a more specific hint about what cause the
|
||||
segmentation fault, i.e. that it is a NULL pointer dereference. To find
|
||||
out which pointer exactly was NULL, you need to use the debugger, though.
|
||||
|
||||
Debugging when LAMMPS appears to be stuck
|
||||
=========================================
|
||||
|
||||
Sometimes the LAMMPS calculation appears to be stuck, that is the LAMMPS
|
||||
process or processes are active, but there is no visible progress. This
|
||||
can have multiple reasons:
|
||||
|
||||
- The selected styles are slow and require a lot of CPU time and the
|
||||
system is large. When extrapolating the expected speed from smaller
|
||||
systems, one has to factor in that not all models scale linearly with
|
||||
system size, e.g. :doc:`kspace styles like ewald or pppm
|
||||
<kspace_style>`. There is very little that can be done in this case.
|
||||
- The output interval is not set or set to a large value with the
|
||||
:doc:`thermo <thermo>` command. I the first case, there will be output
|
||||
only at the first and last step.
|
||||
- The output is block-buffered and instead of line-buffered. The output
|
||||
will only be written to the screen after 4096 or 8192 characters of
|
||||
output have accumulated. This most often happens for files but also
|
||||
with MPI parallel executables for output to the screen, since the
|
||||
output to the screen is handled by the MPI library so that output from
|
||||
all processes can be shown. This can be suppressed by using the
|
||||
``-nonblock`` or ``-nb`` command-line flag, which turns off buffering
|
||||
for screen and logfile output.
|
||||
- An MPI parallel calculation has a bug where a collective MPI function
|
||||
is called (e.g. ``MPI_Barrier()``, ``MPI_Bcast()``,
|
||||
``MPI_Allreduce()`` and so on) before pending point-to-point
|
||||
communications are completed or when the collective function is only
|
||||
called from a subset of the MPI processes. This also applies to some
|
||||
internal LAMMPS functions like ``Error::all()`` which uses
|
||||
``MPI_Barrier()`` and thus ``Error::one()`` must be called, if the
|
||||
error condition does not happen on all MPI processes simultaneously.
|
||||
- Some function in LAMMPS has a bug where a ``for`` or ``while`` loop
|
||||
does not trigger the exit condition and thus will loop forever. This
|
||||
can happen when the wrong variable is incremented or when one value in
|
||||
a comparison becomes ``NaN`` due to an overflow.
|
||||
|
||||
In the latter two cases, further information and stack traces (see above)
|
||||
can be obtain by attaching a debugger to a running process. For that the
|
||||
process ID (PID) is needed; this can be found on Linux machines with the
|
||||
``top``, ``htop``, ``ps``, or ``pstree`` commands.
|
||||
|
||||
Then running the (GNU) debugger ``gdb`` with the ``-p`` flag followed by
|
||||
the process id will attach the process to the debugger and stop
|
||||
execution of that specific process. From there on it is possible to
|
||||
issue all debugger commands in the same way as when LAMMPS was started
|
||||
from the debugger (see above). Most importantly it is possible to
|
||||
obtain a stack trace with the ``where`` command and thus determine where
|
||||
in the execution of a timestep this process is. Also internal data can
|
||||
be printed and execution single stepped or continued. When the debugger
|
||||
is exited, the calculation will resume normally.
|
||||
|
||||
@ -1,246 +1,12 @@
|
||||
Errors and warnings details
|
||||
===========================
|
||||
Error and warning details
|
||||
=========================
|
||||
|
||||
Many errors and warnings that LAMMPS outputs are self-explanatory and
|
||||
thus straightforward to resolve. However, there are also cases where
|
||||
there is no single cause or simple explanation that can be provided in a
|
||||
short message printed by LAMMPS. Therefore, more detailed discussions
|
||||
of such scenarios are provided here; first on a more general level and
|
||||
then for specific errors. In the latter cases, LAMMPS will output a
|
||||
short message and then provide a URL that links to a specific section on
|
||||
this page.
|
||||
|
||||
-------
|
||||
|
||||
.. contents:: Individual paragraphs
|
||||
|
||||
------
|
||||
|
||||
General troubleshooting advice
|
||||
------------------------------
|
||||
|
||||
Below are suggestions that can help to understand the causes of problems
|
||||
with simulations leading to errors or unexpected results.
|
||||
|
||||
.. _hint01:
|
||||
|
||||
Create a small test system
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Debugging problems often requires running a simulation many times with
|
||||
small modifications, thus it can be a huge time saver to first assemble
|
||||
a small test system input that has the same issue, but will take much
|
||||
time until it triggers the error condition. Also, it will be easier to
|
||||
see what happens.
|
||||
|
||||
.. _hint02:
|
||||
|
||||
Visualize your trajectory
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
To better understand what is causing problems, it is often very useful
|
||||
to visualize the system close to the point of failure. It may be
|
||||
necessary to have LAMMPS output trajectory frames rather frequently. To
|
||||
avoid gigantic files, you can use :doc:`dump_modify delay <dump_modify>`
|
||||
to delay output until the critical section is reached, and you can use a
|
||||
smaller test system (see above).
|
||||
|
||||
.. _hint03:
|
||||
|
||||
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,
|
||||
errors may be triggered faster with more processors and thus smaller
|
||||
sub-domains.
|
||||
|
||||
.. _hint04:
|
||||
|
||||
Segmentation Fault
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
|
||||
A segmentation fault is an error reported by the **operating system**
|
||||
and not LAMMPS itself. It happens when a process tries to access a
|
||||
memory address that is not available. This can have **many** reasons:
|
||||
memory has not been allocated, a memory buffer is not large enough, a
|
||||
memory address is computed from an incorrect index, a memory buffer is
|
||||
used after it has been freed, some general memory corruption. When
|
||||
investigating a segmentation fault (aka segfault), it is important to
|
||||
determine which process is causing it; it may not always be LAMMPS. For
|
||||
example, some MPI library implementations report a segmentation fault
|
||||
from their "mpirun" or "mpiexec" command when the application has been
|
||||
terminated unexpectedly.
|
||||
|
||||
While a segmentation fault is likely an indication of a bug in LAMMPS,
|
||||
it need not always be; it can also be the consequence of too aggressive
|
||||
simulation settings. For time critical code paths, LAMMPS will assume
|
||||
the user has chosen the settings carefully and will not make any checks
|
||||
to avoid to avoid performance penalties.
|
||||
|
||||
A crucial step in resolving a segmentation fault is to identify the
|
||||
exact location in the code where it happens. Please see `Errors_debug`
|
||||
for a couple of examples showing how to do this on a Linux machine.
|
||||
With this information -- a simple way to reproduce the segmentation
|
||||
fault and the exact :doc:`LAMMPS version <Manual_version>` and platform
|
||||
you are running on -- you can contact the LAMMPS developers or post in
|
||||
the LAMMPS forum to get assistance.
|
||||
|
||||
.. _hint05:
|
||||
|
||||
Fast moving atoms
|
||||
^^^^^^^^^^^^^^^^^
|
||||
|
||||
Fast moving atoms may be "lost" or "missing" when their velocity becomes
|
||||
so large that they can cross a sub-domain within one timestep. This
|
||||
often happens when atoms are too close, but atoms may also "move" too
|
||||
fast from sub-domain to sub-domain if the box changes rapidly.
|
||||
E.g. when setting a large an initial box with :doc:`shrink-wrap boundary
|
||||
conditions <boundary>` that collapses on the first step (in this case
|
||||
the solution is often using 'm' instead of 's' as a boundary condition).
|
||||
|
||||
To reduce the impact of "close contacts", one can remove those atoms or
|
||||
molecules with something like :doc:`delete_atoms overlap 0.1 all all
|
||||
<delete_atoms>`. With periodic boundaries, a close contact pair of
|
||||
atoms may be on opposite sides of the simulation box. Another option
|
||||
would be to first run a minimization (aka quench) before starting
|
||||
the MD. Reducing the time step can also help. Many times, one just
|
||||
needs to "ease" the system into a balanced state and can then switch to
|
||||
more aggressive settings.
|
||||
|
||||
The speed of atoms during an MD run depends on the steepness of the
|
||||
potential function and their mass. Since the positions and velocities
|
||||
of atoms are computed with finite timesteps, the timestep needs to be
|
||||
small enough for stable numeric integration of the trajectory. If the
|
||||
timestep is too large during initialization (or other instances of
|
||||
extreme dynamics), using :doc:`fix nve/limit <fix_nve_limit>` or
|
||||
:doc:`fix dt/reset <fix_dt_reset>` temporarily can help to avoid too
|
||||
large updates or adapt the timestep according to the displacements.
|
||||
|
||||
.. _hint06:
|
||||
|
||||
Ignoring lost atoms
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
It is tempting to use the :doc:`thermo_modify lost ignore
|
||||
<thermo_modify>` to avoid LAMMPS aborting with an error on lost atoms.
|
||||
This setting should, however, *only* be used when atoms *should* leave
|
||||
the system. In general, ignoring a problem does not solve it.
|
||||
|
||||
.. _hint07:
|
||||
|
||||
Pressure, forces, positions becoming NaN or Inf
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Some potentials can overflow or have a division by zero with close
|
||||
contacts or bad geometries (for the given force styles in use) leading
|
||||
to forces that can no longer be represented as numbers. Those will show
|
||||
as "NaN" or "Inf". On most machines, the program will continue, but
|
||||
there is no way to recover from it and those NaN or Inf values will
|
||||
propagate. So-called :doc:`"soft-core" potentials <pair_fep_soft>` or
|
||||
the :doc:`"soft" repulsive-only pair style <pair_soft>` are less prone
|
||||
for this behavior (depending on the settings in use) and can be used at
|
||||
the beginning of a simulation. Also, single precision numbers can
|
||||
overflow much faster, so for the GPU or INTEL package it may be
|
||||
beneficial to run with double precision initially before switching to
|
||||
mixed or single precision for faster execution when the system has
|
||||
relaxed.
|
||||
|
||||
.. _hint08:
|
||||
|
||||
Communication cutoff
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The communication cutoff determines the "overlap" between sub-domains
|
||||
and atoms in these regions are referred to in LAMMPS as "ghost atoms".
|
||||
This region has to be large enough to contain all atoms of a bond,
|
||||
angle, dihedral, or improper with just one atom in the actual
|
||||
sub-domain. Typically, this cutoff is set to the largest cutoff from
|
||||
the :doc:`pair style(s) <pair_style>` plus the :doc:`neighbor list skin
|
||||
distance <neighbor>` and will typically be sufficient for all bonded
|
||||
interactions. But if the pair style cutoff is small, this may not be
|
||||
enough. LAMMPS will print a warning in this case using some heuristic
|
||||
based on the equilibrium bond length, but that still may not be
|
||||
sufficient for cases where the force constants are small and thus bonds
|
||||
may be stretched very far. The communication cutoff can be adjusted
|
||||
with :doc:`comm_modify cutoff \<value\> <comm_modify>`, but setting this
|
||||
too large will waste CPU time and memory.
|
||||
|
||||
.. _hint09:
|
||||
|
||||
Neighbor list settings
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Every time LAMMPS rebuilds the neighbor lists, LAMMPS will also check
|
||||
for "lost" or "missing" atoms. Thus it can help to use very
|
||||
conservative :doc:`neighbor list settings <neigh_modify>` and then
|
||||
examine the neighbor list statistics if the neighbor list rebuild can be
|
||||
safely delayed. Rebuilding the neighbor list less frequently
|
||||
(i.e. through increasing the *delay* or *every*) setting has diminishing
|
||||
returns and increasing risks.
|
||||
|
||||
.. _hint10:
|
||||
|
||||
Units
|
||||
^^^^^
|
||||
|
||||
A frequent cause for a variety of problems is due to using the wrong
|
||||
:doc:`units <units>` settings for a particular potentials, especially
|
||||
when reading them from a potential file. Most of the (example)
|
||||
potentials bundled with LAMMPS have a "UNITS:" tag that allows LAMMPS to
|
||||
check of the units are consistent with what is intended, but potential
|
||||
files from publications or potential parameter databases may lack this
|
||||
metadata information and thus will not error out or warn when using the
|
||||
wrong setting. Most potential files usually use "metal" units, but some
|
||||
are parameterized for other settings, most notably :doc:`ReaxFF
|
||||
potentials <pair_reaxff>` that use "real" units.
|
||||
|
||||
Also, individual parameters for :doc:`pair_coeff <pair_coeff>` commands
|
||||
taken from publications or other MD software may need to be converted
|
||||
and sometimes in unexpected ways. Thus some careful checking is
|
||||
recommended.
|
||||
|
||||
.. _hint11:
|
||||
|
||||
No error message printed
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
In some cases -- especially when running in parallel with MPI -- LAMMPS
|
||||
may stop without displaying an error. But the fact that nothing was
|
||||
displayed does not mean there was not an error message. Instead it is
|
||||
highly likely that the message was written to a buffer and LAMMPS was
|
||||
aborted before the buffer was output. Usually, output buffers are
|
||||
output for every line of output, but sometimes this is delayed until
|
||||
4096 or 8192 bytes of output have been accumulated. This buffering for
|
||||
screen and logfile output can be disabled by using the :ref:`-nb
|
||||
or -nonbuf <nonbuf>` command-line flag. This is most often needed when
|
||||
debugging crashing multi-replica calculations.
|
||||
|
||||
.. _hint12:
|
||||
|
||||
Errors before or after the simulation box is created
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
As critical step in a LAMMPS input is when the simulation box is
|
||||
defined, either with a :doc:`create_box command <create_box>`, a
|
||||
:doc:`read_data command <read_data>`, or a :doc:`read_restart command
|
||||
<read_restart>`. After this step, certain settings are locked in (e.g.
|
||||
units, or number of atom, bond, angle, dihedral, improper types) and
|
||||
cannot be changed after that. Consequently, commands that change such
|
||||
settings (e.g. :doc:`units <units>`) are only allowed before the box is
|
||||
defined. Very few commands can be used before and after, like
|
||||
:doc:`pair_style <pair_style>` (but not :doc:`pair_coeff <pair_coeff>`).
|
||||
Most LAMMPS commands must be used after the simulation box is created.
|
||||
|
||||
Consequently, LAMMPS will stop with an error, if a command is used in
|
||||
the wrong place. This is not always obvious. So index or string style
|
||||
:doc:`variables <variable>` can be expanded anywhere in the input, but
|
||||
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).
|
||||
|
||||
------
|
||||
Many errors or warnings are self-explanatory and thus straightforward to
|
||||
resolve. However, there are also cases, where there is no single cause
|
||||
and explanation, where LAMMPS can only detect symptoms of an error but
|
||||
not the exact cause, or where the explanation needs to be more detailed than
|
||||
what can be fit into a message printed by the program. The following are
|
||||
discussions of such cases.
|
||||
|
||||
.. _err0001:
|
||||
|
||||
@ -257,20 +23,19 @@ The header section informs LAMMPS how many entries or lines are expected
|
||||
in the various sections (like Atoms, Masses, Pair Coeffs, *etc.*\ ) of
|
||||
the data file. If there is a mismatch, LAMMPS will either keep reading
|
||||
beyond the end of a section or stop reading before the section has
|
||||
ended. In that case the next line will not contain a recognized
|
||||
keyword.
|
||||
ended. In that case the next line will not contain a recognized keyword.
|
||||
|
||||
Such a mismatch can also happen when the first line of the data is *not*
|
||||
a comment as required by the format, but a line with a valid header
|
||||
keyword. That would result in LAMMPS expecting, for instance, 0 atoms
|
||||
because the "atoms" header line is the first line and thus treated as a
|
||||
comment.
|
||||
Such a mismatch can also happen when the first line of the data
|
||||
is *not* a comment as required by the format, but a line with a valid
|
||||
header keyword. That would result in LAMMPS expecting, for instance,
|
||||
0 atoms because the "atoms" header line is the first line and thus
|
||||
treated as a comment.
|
||||
|
||||
Another possibility to trigger this error is to have a keyword in the
|
||||
data file that corresponds to a fix (e.g. :doc:`fix cmap <fix_cmap>`)
|
||||
but the :doc:`read_data <read_data>` command is missing the (optional)
|
||||
arguments that identify the fix and its header and section keywords.
|
||||
Alternatively, those arguments are inconsistent with the keywords in the
|
||||
arguments that identify the fix and the header keyword and section
|
||||
keyword or those arguments are inconsistent with the keywords in the
|
||||
data file.
|
||||
|
||||
.. _err0002:
|
||||
@ -280,705 +45,12 @@ Incorrect format in ... section of data file
|
||||
|
||||
This error happens when LAMMPS reads the contents of a section of a
|
||||
:doc:`data file <read_data>` and the number of parameters in the line
|
||||
differs from what is expected. This most commonly happens when the atom
|
||||
style is different from what is expected for a specific data file since
|
||||
changing the atom style usually changes the format of the line.
|
||||
differs from what is expected. This most commonly happens, when the
|
||||
atom style is different from what is expected for a specific data file
|
||||
since changing the atom style usually changes the format of the line.
|
||||
|
||||
This error can also occur when the number of entries indicated in the
|
||||
This error can also happen when the number of entries indicated in the
|
||||
header of a data file (e.g. the number of atoms) is larger than the
|
||||
number of lines provided (e.g. in the corresponding Atoms section)
|
||||
causing LAMMPS to continue reading into the next section which has a
|
||||
completely different format.
|
||||
|
||||
.. _err0003:
|
||||
|
||||
Illegal variable command: expected X arguments but found Y
|
||||
----------------------------------------------------------
|
||||
|
||||
This error indicates that a variable command has the wrong number of
|
||||
arguments. A common reason for this is that the variable expression has
|
||||
whitespace, but is not enclosed in single or double quotes.
|
||||
|
||||
To explain, the LAMMPS input parser reads and processes lines. The
|
||||
resulting line is broken down into "words". Those are usually
|
||||
individual commands, labels, names, and values separated by whitespace
|
||||
(a space or tab character). For "words" that may contain whitespace,
|
||||
they have to be enclosed in single (') or double (") quotes. The parser
|
||||
will then remove the outermost pair of quotes and pass that string as
|
||||
"word" to the variable command.
|
||||
|
||||
Thus missing quotes or accidental extra whitespace will trigger this
|
||||
error because the unquoted whitespace will result in the text being
|
||||
broken into more "words", i.e. the variable expression being split.
|
||||
|
||||
.. _err0004:
|
||||
|
||||
Out of range atoms - cannot compute ...
|
||||
---------------------------------------
|
||||
|
||||
The PPPM (and also PPPMDisp and MSM) methods need to assemble a grid of
|
||||
electron density data derived from the (partial) charges assigned to the
|
||||
atoms. These charges are smeared out across multiple grid points (see
|
||||
:doc:`kspace_modify order <kspace_modify>`). When running in parallel
|
||||
with MPI, LAMMPS uses a :doc:`domain decomposition scheme
|
||||
<Developer_par_part>` where each processor manages a subset of atoms and
|
||||
thus also a grid representing the density. The processor's grid covers
|
||||
the actual volume of the sub-domain and some extra space corresponding
|
||||
to the :doc:`neighbor list skin <neighbor>`. These are then
|
||||
:doc:`combined and redistributed <Developer_par_long>` for parallel
|
||||
processing of the long-range component of the Coulomb interaction.
|
||||
|
||||
The ``Out of range atoms`` error can happen when atoms move too fast,
|
||||
the neighbor list skin is too small, or the neighbor lists are not
|
||||
updated frequently enough. The smeared charges cannot then be fully
|
||||
assigned to the density grid for all atoms. LAMMPS checks for this
|
||||
condition and stops with an error. Most of the time, this is an
|
||||
indication of a system with very high forces, often at the beginning of
|
||||
a simulation or when boundary conditions are changed. The error becomes
|
||||
more likely with more MPI processes.
|
||||
|
||||
There are multiple options to explore for avoiding the error. The best
|
||||
choice depends strongly on the individual system, and often a
|
||||
combination of changes is required. For example, more conservative MD
|
||||
parameter settings can be used (larger neighbor skin, shorter time step,
|
||||
more frequent neighbor list updates). Sometimes, it helps to revisit
|
||||
the system generation and avoid close contacts when building it.
|
||||
Otherwise one can use the :doc:`delete_atoms overlap<delete_atoms>`
|
||||
command to delete those close contact atoms or run a minimization before
|
||||
the MD. It can also help to temporarily use a cutoff-Coulomb pair style
|
||||
and no kspace style until the system has somewhat equilibrated and then
|
||||
switch to the long-range solver.
|
||||
|
||||
.. _err0005:
|
||||
|
||||
Bond (or angle, dihedral, improper, cmap, or shake) atoms missing
|
||||
-----------------------------------------------------------------
|
||||
|
||||
The second atom needed to compute a particular bond (or the third or
|
||||
fourth atom for angle, dihedral, or improper) is missing on the
|
||||
indicated timestep and processor. Typically, this is because the two
|
||||
bonded atoms have become too far apart relative to the communication
|
||||
cutoff distance for ghost atoms. By default, the communication cutoff
|
||||
is set by the pair cutoff. However, to accommodate larger distances
|
||||
between topologically connected atoms, it can be manually adjusted using
|
||||
:doc:`comm_modify <comm_modify>` at the cost of increased communication
|
||||
and more ghost atoms. However, missing bond atoms may also indicate
|
||||
that there are unstable dynamics which caused the atoms to blow apart.
|
||||
In this scenario, increasing the communication distance will not solve
|
||||
the underlying issue. Rather, see :ref:`Fast moving atoms <hint05>` and
|
||||
:ref:`Neighbor list settings <hint09>` in the general troubleshooting
|
||||
section above for ideas to fix unstable dynamics.
|
||||
|
||||
If atoms are intended to be lost during a simulation (e.g. due to open
|
||||
boundary conditions or :doc:`fix evaporate <fix_evaporate>`) such that
|
||||
two bonded atoms may be lost at different times from each other, this
|
||||
error can be converted to a warning or turned off using the *lost/bond*
|
||||
keyword in the :doc:`thermo_modify <thermo_modify>` command.
|
||||
|
||||
.. _err0006:
|
||||
|
||||
Non-numeric atom coords or pressure or box dimensions - simulation unstable
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
This error usually occurs due to overly aggressive simulation settings
|
||||
or issues with the system geometry or the potential. See
|
||||
:ref:`Pressure, forces, positions becoming NaN or Inf <hint07>` above in
|
||||
the general troubleshooting section. This error is more likely to
|
||||
happen during equilibration, so it can help to do a minimization before
|
||||
or even add a second or third minimization after running a few
|
||||
equilibration MD steps. It also is more likely when directly using a
|
||||
Nose-Hoover (or other) barostat, and thus it may be advisable to run
|
||||
with only a thermostat for a bit until the potential energy has
|
||||
stabilized.
|
||||
|
||||
.. _err007:
|
||||
|
||||
Fix used in ... not computed at compatible time
|
||||
-----------------------------------------------
|
||||
|
||||
Many fix styles are invoked only every *nevery* timesteps, which means
|
||||
their data is only valid on those steps. When data from a fix is used
|
||||
as input for a compute, a dump, another fix, or thermo output, it must
|
||||
read that data at timesteps when the fix in question was invoked, i.e.
|
||||
on timesteps that are multiples of its *nevery* setting. If this is not
|
||||
the case, LAMMPS will stop with an error. To remedy this, it may be
|
||||
required to change the output frequency or the *nevery* setting of the
|
||||
fix.
|
||||
|
||||
.. _err0008:
|
||||
|
||||
Lost atoms ...
|
||||
--------------
|
||||
|
||||
A simulation stopping with an error due to lost atoms can have multiple
|
||||
causes. By default, LAMMPS checks for whether the total number of atoms
|
||||
is consistent with the sum of atoms "owned" by MPI processors every time
|
||||
that thermodynamic output is written. In the majority of cases, lost
|
||||
atoms are unexpected and a result of extremely high velocities causing
|
||||
instabilities in the system. Such velocities can result from a variety
|
||||
of issues. For ideas on how to track down issues with unexpected lost
|
||||
atoms, see :ref:`Fast moving atoms <hint05>` and :ref:`Neighbor list
|
||||
settings <hint09>` in the general troubleshooting section above. In
|
||||
specific situations however, losing atoms is expected material behavior
|
||||
(e.g. with sputtering and surface evaporation simulations), and an
|
||||
unwanted crash can be avoided by changing the :doc:`thermo_modify lost
|
||||
<thermo_modify>` keyword from the default 'error' to 'warn' or 'ignore'
|
||||
(though heed the advice in :ref:`Ignoring lost atoms <hint06>` above!).
|
||||
|
||||
.. _err0009:
|
||||
|
||||
Too many neighbor bins
|
||||
----------------------
|
||||
|
||||
The simulation box is or has become too large relative to the size of a
|
||||
neighbor bin (which in turn depends on the largest pair-wise cutoff by
|
||||
default) such that LAMMPS is unable to store the needed number of bins.
|
||||
This typically implies the simulation box has expanded too far. That
|
||||
can occur when some atoms move rapidly apart with shrink-wrap boundaries
|
||||
or when a fix (like fix deform or a barostat) excessively grows the
|
||||
simulation box. This can also happen if the largest pair-wise cutoff is
|
||||
small. In this case, the error can be avoided by using the
|
||||
:doc:`neigh_modify command <neigh_modify>` to set the bin width to a
|
||||
suitably large value.
|
||||
|
||||
.. _err0010:
|
||||
|
||||
Unrecognized ... style ... is part of ... package which is not enabled in this LAMMPS binary
|
||||
--------------------------------------------------------------------------------------------
|
||||
|
||||
The LAMMPS executable (binary) being used was not compiled with a
|
||||
package containing the specified style. This indicates that the
|
||||
executable needs to be re-built after enabling the correct package in
|
||||
the relevant Makefile or CMake build directory. See
|
||||
:doc:`Section 3. Build LAMMPS <Build>` for more details. One can check
|
||||
if the expected package and pair style is present in the executable by
|
||||
running it with the ``-help`` (or ``-h``) flag on the command line. One
|
||||
common oversight, especially for beginner LAMMPS users, is enabling the
|
||||
package but forgetting to run commands to rebuild (e.g., to run the
|
||||
final ``make`` or ``cmake`` command).
|
||||
|
||||
If this error occurs with an executable that the user does not control
|
||||
(e.g., through a module on HPC clusters), the user will need to get in
|
||||
contact with the relevant person or people who can update the
|
||||
executable.
|
||||
|
||||
.. _err011:
|
||||
|
||||
Energy or stress was not tallied by pair style
|
||||
----------------------------------------------
|
||||
|
||||
This warning can be printed by computes from the :ref:`TALLY package
|
||||
<PKG-TALLY>`. Those use a callback mechanism that only work for regular
|
||||
pair-wise additive pair styles like :doc:`Lennard-Jones <pair_lj>`,
|
||||
:doc:`Morse <pair_morse>`, :doc:`Born-Meyer-Huggins <pair_born>`, and
|
||||
similar. Such required callbacks have not been implemented for
|
||||
many-body potentials so one would have to implement them to add
|
||||
compatibility with these computes (which may be difficult to do in a
|
||||
generic fashion). Whether this warning indicates that contributions to
|
||||
the computed properties are missing depends on the groups used. At any
|
||||
rate, careful testing of the results is advised when this warning
|
||||
appears.
|
||||
|
||||
.. _err0012:
|
||||
|
||||
fmt::format_error
|
||||
-----------------
|
||||
|
||||
LAMMPS uses the `{fmt} library <https://fmt.dev>`_ for advanced string
|
||||
formatting tasks. This is similar to the ``printf()`` family of
|
||||
functions from the standard C library, but more flexible. If there is a
|
||||
bug in the LAMMPS code and the format string does not match the list of
|
||||
arguments or has some other error, this error message will be shown.
|
||||
You should contact the LAMMPS developers and report the bug as a `GitHub
|
||||
Bug Report Issue <https://github.com/lammps/lammps/issues>`_ along with
|
||||
sufficient information to easily reproduce it.
|
||||
|
||||
|
||||
.. _err0013:
|
||||
|
||||
Substitution for illegal variable
|
||||
---------------------------------
|
||||
|
||||
A variable in an input script or a variable expression was not found in
|
||||
the list of valid variables. The most common reason for this is a typo
|
||||
somewhere in the input file such that the expression uses an invalid
|
||||
variable name. The second most common reason is omitting the curly
|
||||
braces for a direct variable with a name that is not a single letter.
|
||||
For example:
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
variable cutoff index 10.0
|
||||
pair_style lj/cut ${cutoff} # this is correct
|
||||
pair_style lj/cut $cutoff # this is incorrect, LAMMPS looks for 'c' instead of 'cutoff'
|
||||
variable c index 5.0 # if $c is defined, LAMMPS subsitutes only '$c' and reads: 5utoff
|
||||
|
||||
Another potential source of this error may be invalid command line
|
||||
variables (-var or -v argument) used when launching LAMMPS from an
|
||||
interactive shell or shell scripts. An uncommon source for this error
|
||||
is using the :doc:`next command <next>` to advance through a list of
|
||||
values provided by an index style variable. If there is no remaining
|
||||
element in the list, LAMMPS will delete the variable and any following
|
||||
expansion or reference attempt will trigger the error.
|
||||
|
||||
Users with harder-to-track variable errors might also find reading the
|
||||
:doc:`Parsing rules for input scripts <Commands_parse>` helpful.
|
||||
|
||||
.. _err0014:
|
||||
|
||||
Bond atom missing in image check or box size check
|
||||
--------------------------------------------------
|
||||
|
||||
This can be either an error or a warning depending on your
|
||||
:doc:`thermo_modify settings <thermo_modify>`. It is flagged in a part
|
||||
of the LAMMPS code where it updates the domain decomposition and before
|
||||
it builds the neighbor lists. It checks that both atoms of a bond are
|
||||
within the communication cutoff of a subdomain. It is usually caused by
|
||||
atoms moving too fast (see the :ref:`paragraph on fast moving atoms
|
||||
<hint05>`), or by the :doc:`communication cutoff being too small
|
||||
<comm_modify>`, or by waiting too long between :doc:`sub-domain and
|
||||
neighbor list updates <neigh_modify>`.
|
||||
|
||||
.. _err0015:
|
||||
|
||||
Cannot use neighbor bins - box size \<\< cutoff
|
||||
-----------------------------------------------
|
||||
|
||||
LAMMPS is unable to build neighbor bins since the size of the box is
|
||||
much smaller than an interaction cutoff in at least one of its
|
||||
dimensions. Typically, this error is triggered when the simulation box
|
||||
has one very thin dimension. If a cubic neighbor bin had to fit exactly
|
||||
within the thin dimension, then an inordinate amount of bins would be
|
||||
created to fill space. This error can be avoided using the generally
|
||||
slower :doc:`nsq neighbor style <neighbor>` or by increasing the size of
|
||||
the smallest box lengths.
|
||||
|
||||
.. _err0016:
|
||||
|
||||
Did not assign all atoms correctly
|
||||
----------------------------------
|
||||
|
||||
This error happens most commonly when :doc:`reading a data file
|
||||
<read_data>` under :doc:`non-periodic boundary conditions<boundary>`.
|
||||
Only atoms with positions **inside** the simulation box will be read and
|
||||
thus any atoms outside the box will be skipped and the total atom count
|
||||
will not match, which triggers the error. This does not happen with
|
||||
periodic boundary conditions where atoms outside the principal box will
|
||||
be "wrapped" into the principal box and their image flags set
|
||||
accordingly.
|
||||
|
||||
Similar errors can happen with the :doc:`replicate command<replicate>`
|
||||
or the :doc:`read_restart command<read_restart>`. In these cases the
|
||||
cause may be a problematic geometry, an insufficient communication
|
||||
cutoff, or a bug in the LAMMPS source code. In these cases it is
|
||||
advisable to set up :ref:`small test case <hint01>` for testing and
|
||||
debugging. This will be required in case you need to get help from a
|
||||
LAMMPS developer.
|
||||
|
||||
.. _err0017:
|
||||
|
||||
Domain too large for neighbor bins
|
||||
----------------------------------
|
||||
|
||||
The domain has become extremely large so that neighbor bins cannot be
|
||||
used. Too many neighbor bins would need to be created to fill space.
|
||||
Most likely, one or more atoms have been blown a great distance out of
|
||||
the simulation box or a fix (like fix deform or a barostat) has
|
||||
excessively grown the simulation box.
|
||||
|
||||
.. _err0018:
|
||||
|
||||
Step X: (h)bondchk failed
|
||||
-------------------------
|
||||
|
||||
This error is a consequence of the heuristic memory allocations for
|
||||
buffers of the regular ReaxFF version. In ReaxFF simulations, the lists
|
||||
of bonds and hydrogen bonds can change due to chemical reactions. The
|
||||
default approach, however, assumes that these changes are not very
|
||||
large, so it allocates buffers for the current system setup plus a
|
||||
safety margin. This can be adjusted with the :doc:`safezone, mincap,
|
||||
and minhbonds settings of the pair style <pair_reaxff>`, but only to
|
||||
some extent. When equilibrating a new system, or simulating a sparse
|
||||
system in parallel, this can be difficult to control and become
|
||||
wasteful. A simple workaround is often to break a simulation down in
|
||||
multiple chunks. A better approach, however, is to compile and use the
|
||||
KOKKOS package version of ReaxFF (you do not need a GPU for that, but
|
||||
can also compile it in serial or OpenMP mode), which uses a more robust
|
||||
memory allocation approach.
|
||||
|
||||
.. _err0019:
|
||||
|
||||
Numeric index X is out of bounds
|
||||
--------------------------------
|
||||
|
||||
This error most commonly happens when setting force field coefficients
|
||||
with either the :doc:`pair_coeff <pair_coeff>`, the :doc:`bond_coeff
|
||||
<bond_coeff>`, the :doc:`angle_coeff <angle_coeff>`, the
|
||||
:doc:`dihedral_coeff <dihedral_coeff>`, or the :doc:`improper_coeff
|
||||
<improper_coeff>` command. These commands accept type labels, explicit
|
||||
numbers, and wildcards for ranges of numbers. If the numeric value of
|
||||
any of these is outside the valid range (defined by the number of
|
||||
corresponding types), LAMMPS will stop with this error. A few other
|
||||
commands and styles also allow ranges of numbers and check using the
|
||||
same method and thus print the same kind of error.
|
||||
|
||||
The cause is almost always a typo in the input or a logic error when
|
||||
defining the values or ranges. So one needs to carefully review the
|
||||
input. Along with the error, LAMMPS will print the valid range as a
|
||||
hint.
|
||||
|
||||
.. _err0020:
|
||||
|
||||
Compute, fix, or variable vector or array is accessed out-of-range
|
||||
------------------------------------------------------------------
|
||||
|
||||
When accessing an individual element of a global vector or array or a
|
||||
per-atom vector or array provided by a compute or fix or atom-style or
|
||||
vector-style variable or data from a specific atom, an index in square
|
||||
brackets ("[ ]") (or two indices) must be provided to determine which
|
||||
element to access and it must be in a valid range or else LAMMPS would
|
||||
access invalid data or crash with a segmentation fault. In the two most
|
||||
common cases, where this data is accessed, :doc:`variable expressions
|
||||
<variable>` and :doc:`thermodynamic output <thermo_style>`, LAMMPS will
|
||||
check for valid indices and stop with an error otherwise.
|
||||
|
||||
While LAMMPS is written in C++ (which uses 0 based indexing) these
|
||||
indices start at 1 (i.e. similar to Fortran). Any index smaller than 1
|
||||
or larger than the maximum allowed value should trigger this error.
|
||||
Since this kind of error frequently happens with rather complex
|
||||
expressions, it is recommended to test these with small test systems,
|
||||
where the values can be tracked with output files for all relevant
|
||||
properties at every step.
|
||||
|
||||
.. _err0021:
|
||||
|
||||
Incorrect args for pair coefficients (also bond/angle/dihedral/improper coefficients)
|
||||
-------------------------------------------------------------------------------------
|
||||
|
||||
The parameters in the :doc:`pair_coeff <pair_coeff>` command for a
|
||||
specified :doc:`pair_style <pair_style>` have a missing or erroneous
|
||||
argument. The same applies when seeing this error for :doc:`bond_coeff
|
||||
<bond_coeff>`, :doc:`angle_coeff <angle_coeff>`, :doc:`dihedral_coeff
|
||||
<dihedral_coeff>`, or :doc:`improper_coeff <improper_coeff>` and their
|
||||
respective style commands when using the MOLECULE or EXTRA-MOLECULE
|
||||
packages. The cases below describe some ways to approach pair
|
||||
coefficient errors, but the same strategies apply to bonded systems as
|
||||
well.
|
||||
|
||||
Outside of normal typos, this error can have several sources. In all
|
||||
cases, the first step is to compare the command arguments to the
|
||||
expected format found in the corresponding :doc:`pair_style
|
||||
<pair_style>` page. This can reveal cases where, for example, a pair
|
||||
style was changed, but the pair coefficients were not updated. This can
|
||||
happen especially with pair style variants such as :doc:`pair_style eam
|
||||
<pair_eam>` vs. :doc:`pair_style eam/alloy <pair_style>` that look very
|
||||
similar but accept different parameters (the latter 'eam/alloy' variant
|
||||
takes element type names while 'eam' does not).
|
||||
|
||||
Another common source of coefficient errors is when using multiple pair
|
||||
styles with commands such as :doc:`pair_style hybrid <pair_hybrid>`.
|
||||
Using hybrid pair styles requires adding an extra "label" argument in
|
||||
the coefficient commands that designates which pair style the command
|
||||
line refers to. Moreover, if the same pair style is used multiple
|
||||
times, this label must be followed by an additional numeric argument.
|
||||
Also, different pair styles may require different arguments.
|
||||
|
||||
This error message might also require a close look at other LAMMPS input
|
||||
files that are read in by the input script, such as data files or
|
||||
restart files.
|
||||
|
||||
.. _err0022:
|
||||
|
||||
Energy was not tallied on needed timestep (also virial, per-atom energy, per-atom virial)
|
||||
-----------------------------------------------------------------------------------------
|
||||
|
||||
This error is generated when LAMMPS attempts to access an out-of-date or
|
||||
non-existent energy, pressure, or virial. For efficiency reasons,
|
||||
LAMMPS does *not* calculate these quantities when the forces are
|
||||
calculated on every timestep or iteration. Global quantities are only
|
||||
calculated when they are needed for :doc:`thermo <thermo_style>` output
|
||||
(at the beginning, end, and at regular intervals specified by the
|
||||
:doc:`thermo <thermo>` command). Similarly, per-atom quantities are
|
||||
only calculated if they are needed to write per-atom energy or virial to
|
||||
a dump file. This system works fine for simple input scripts. However,
|
||||
the many user-specified `variable`, `fix`, and `compute` commands that
|
||||
LAMMPS provides make it difficult to anticipate when a quantity will be
|
||||
requested. In some use cases, LAMMPS will figure out that a quantity is
|
||||
needed and arrange for it to be calculated on that timestep e.g. if it
|
||||
is requested by :doc:`fix ave/time <fix_ave_time>` or similar commands.
|
||||
If that fails, it can be detected by a mismatch between the current
|
||||
timestep and when a quantity was last calculated, in which case an error
|
||||
message of this type is generated.
|
||||
|
||||
The most common cause of this type of error is requesting a quantity
|
||||
before the start of the simulation.
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
# run 0 post no # this will fix the error
|
||||
variable e equal pe # requesting energy compute
|
||||
print "Potential energy = $e" # this will generate the error
|
||||
run 1000 # start of simulation
|
||||
|
||||
This situation can be avoided by adding in a "run 0" command, as
|
||||
explained in more detail in the "Variable Accuracy" section of the
|
||||
:doc:`variable <variable>` doc page.
|
||||
|
||||
Another cause is requesting a quantity on a timestep that is not a
|
||||
thermo or dump output timestep. This can often be remedied by
|
||||
increasing the frequency of thermo or dump output.
|
||||
|
||||
.. _err0023:
|
||||
|
||||
Molecule auto special bond generation overflow
|
||||
----------------------------------------------
|
||||
|
||||
In order to correctly apply the :doc:`special_bonds <special_bonds>`
|
||||
settings (also known as "exclusions"), LAMMPS needs to maintain for each
|
||||
atom a list of atoms that are connected to this atom, either directly
|
||||
with a bond or indirectly through bonding with an intermediate atom(s).
|
||||
The purpose is to either remove or tag those pairs of atoms in the
|
||||
neighbor list. This information is stored with individual atoms and
|
||||
thus the maximum number of such "special" neighbors is set when the
|
||||
simulation box is created. When reading (relative) geometry and
|
||||
topology of a 'molecule' from a :doc:`molecule file <molecule>`, LAMMPS
|
||||
will build the list of such "special" neighbors for the molecule atom
|
||||
(if not given in the molecule file explicitly). The error is triggered
|
||||
when the resulting list is too long for the space reserved when creating
|
||||
the simulation box. The solution is to increase the corresponding
|
||||
setting. Overestimating this value will only consume more memory, and
|
||||
is thus a safe choice.
|
||||
|
||||
.. _err0024:
|
||||
|
||||
Molecule topology/atom exceeds system topology/atom
|
||||
---------------------------------------------------
|
||||
|
||||
LAMMPS uses :doc:`domain decomposition <Developer_par_part>` to
|
||||
distribute data (i.e. atoms) across the MPI processes in parallel runs.
|
||||
This includes topology data about bonds, angles, dihedrals, impropers
|
||||
and :doc:`"special" neighbors <special_bonds>`. This information is
|
||||
stored with either one or all atoms involved in such a topology entry
|
||||
(which of the two option applies depends on the :doc:`newton <newton>`
|
||||
setting for bonds). When reading a data file, LAMMPS analyzes the
|
||||
requirements for this file and then the values are "locked in" and
|
||||
cannot be extended.
|
||||
|
||||
So loading a molecule file that requires more of the topology per atom
|
||||
storage or adding a data file with such needs will lead to an error. To
|
||||
avoid the error, one or more of the `extra/XXX/per/atom` keywords are
|
||||
required to extend the corresponding storage. It is no problem to
|
||||
choose those numbers generously and have more storage reserved than
|
||||
actually needed, but having these numbers set too small will lead to an
|
||||
error.
|
||||
|
||||
.. _err0025:
|
||||
|
||||
Molecule topology type exceeds system topology type
|
||||
---------------------------------------------------
|
||||
|
||||
The total number of atom, bond, angle, dihedral, and improper types is
|
||||
"locked in" when LAMMPS creates the simulation box. This can happen
|
||||
through either the :doc:`create_box <create_box>`, the :doc:`read_data
|
||||
<read_data>`, or the :doc:`read_restart <read_restart>` command. After
|
||||
this it is not possible to refer to an additional type. So loading a
|
||||
molecule file that uses additional types or adding a data file that
|
||||
would require additional types will lead to an error. To avoid the
|
||||
error, one or more of the `extra/XXX/types` keywords are required to
|
||||
extend the maximum number of the individual types.
|
||||
|
||||
.. _err0026:
|
||||
|
||||
Molecule attributes do not match system attributes
|
||||
--------------------------------------------------
|
||||
|
||||
Choosing an :doc:`atom_style <atom_style>` in LAMMPS determines which
|
||||
per-atom properties are available. In a :doc:`molecule file
|
||||
<molecule>`, however, it is possible to add sections (for example Masses
|
||||
or Charges) that are not supported by the atom style. Masses for
|
||||
example, are usually not a per-atom property, but defined through the
|
||||
atom type. Thus it would not be required to have a Masses section and
|
||||
the included data would be ignored. LAMMPS prints this warning to
|
||||
inform about this case.
|
||||
|
||||
.. _err0027:
|
||||
|
||||
Inconsistent image flags
|
||||
------------------------
|
||||
|
||||
This warning happens when the distance between the *unwrapped* x-, y-,
|
||||
or z-components of the coordinates of a bond is larger than half the box
|
||||
with periodic boundaries or larger than the box with non-periodic
|
||||
boundaries. It means that the positions and image flags have become
|
||||
inconsistent. LAMMPS will still compute bonded interactions based on
|
||||
the closest periodic images of the atoms and thus in most cases the
|
||||
results will be correct. However they can cause problems when such
|
||||
atoms are used with the fix rigid or replicate commands. Thus, it is
|
||||
good practice to update the system so that the message does not appear.
|
||||
It will help with future manipulations of the system.
|
||||
|
||||
There is one case where this warning *must* appear: when you have a
|
||||
chain of connected bonds that pass through the entire box and connect
|
||||
back to the first atom in the chain through periodic boundaries,
|
||||
i.e. some kind of "infinite polymer". In that case, the bond image
|
||||
flags *must* be inconsistent for the one bond that reaches back to the
|
||||
beginning of the chain.
|
||||
|
||||
|
||||
.. _err0028:
|
||||
|
||||
No fixes with time integration, atoms won't move
|
||||
------------------------------------------------
|
||||
|
||||
This warning will be issued if LAMMPS encounters a :doc:`run <run>`
|
||||
command that does not have a preceding :doc:`fix <fix>` command that
|
||||
updates atom/object positions and velocities per step. In other words,
|
||||
there are no fixes detected that perform velocity-Verlet time
|
||||
integration, such as :doc:`fix nve <fix_nve>`. Note that this alert
|
||||
does not mean that there are no active fixes. LAMMPS has a very wide
|
||||
variety of fixes, many of which do not move objects but also operate
|
||||
through steps, such as printing outputs (e.g. :doc:`fix print
|
||||
<fix_print>`), performing calculations (e.g. :doc:`fix ave/time
|
||||
<fix_ave_time>`), or changing other system parameters (e.g. :doc:`fix
|
||||
dt/reset <fix_dt_reset>`). It is up to the user to determine whether
|
||||
the lack of a time-integrating fix is intentional or not.
|
||||
|
||||
|
||||
.. _err0029:
|
||||
|
||||
System is not charge neutral, net charge = ...
|
||||
----------------------------------------------
|
||||
|
||||
the sum of charges in the system is not zero. When a system is not
|
||||
charge-neutral, methods that evolve/manipulate per-atom charges,
|
||||
evaluate Coulomb interactions, evaluate Coulomb forces, or
|
||||
evaluate/manipulate other properties relying on per-atom charges may
|
||||
raise this warning. A non-zero net charge most commonly arises after
|
||||
setting per-atom charges :doc:`set <set>` such that the sum is non-zero
|
||||
or by reading in a system through :doc:`read_data <read_data>` where the
|
||||
per-atom charges do not sum to zero. However, a loss of charge
|
||||
neutrality may occur in other less common ways, like when charge
|
||||
equilibration methods (e.g., :doc:`fix qeq <fix_qeq>`) fail.
|
||||
|
||||
A similar warning/error may be raised when using certain charge
|
||||
equilibration methods: :doc:`fix qeq <fix_qeq>`, :doc:`fix qeq/comb
|
||||
<fix_qeq_comb>`, :doc:`fix qeq/reaxff <fix_qeq_reaxff>`, and :doc:`fix
|
||||
qtpie/reaxff <fix_qtpie_reaxff>`. In such cases, this warning/error
|
||||
will be raised for the fix :doc:`group <group>` when the group has a
|
||||
non-zero net charge.
|
||||
|
||||
When the system is expected to be charge-neutral, this warning often
|
||||
arises due to an error in the lammps input (e.g., an incorrect :doc:`set
|
||||
<set>` command, error in the data file read by :doc:`read_data
|
||||
<read_data>`, incorrectly grouping atoms with charge, etc.). If the
|
||||
system is NOT expected to be charge-neutral, the user should make sure
|
||||
that the method(s) used are appropriate for systems with a non-zero net
|
||||
charge. Some commonly used fixes for charge equilibration :doc:`fix qeq
|
||||
<fix_qeq>`, pair styles that include charge interactions
|
||||
:doc:`pair_style coul/XXX <pair_coul>`, and kspace methods
|
||||
:doc:`kspace_style <kspace_style>` can, in theory, support systems with
|
||||
non-zero net charge. However, non-zero net charge can lead to spurious
|
||||
artifacts. The severity of these artifacts depends on the magnitude of
|
||||
total charge, system size, and methods used. Before running simulations
|
||||
or calculations for systems with non-zero net charge, users should test
|
||||
for artifacts and convergence of properties.
|
||||
|
||||
.. _err0030:
|
||||
|
||||
Variable evaluation before simulation box is defined
|
||||
----------------------------------------------------
|
||||
|
||||
This error happens, when trying to expand or use an equal- or atom-style
|
||||
variable (or an equivalent style), where the expression contains a
|
||||
reference to something (e.g. a compute reference, a property of an atom,
|
||||
or a thermo keyword) that is not allowed to be used before the
|
||||
simulation box is defined. See the paragraph on :ref:`errors before or
|
||||
after the simulation box is created <hint12>` for additional
|
||||
information.
|
||||
|
||||
.. _err0031:
|
||||
|
||||
Invalid thermo keyword 'X' in variable formula
|
||||
----------------------------------------------
|
||||
|
||||
This error message is often misleading. It is caused when evaluating a
|
||||
:doc:`variable command <variable>` expression and LAMMPS comes across a
|
||||
string that it does not recognize. LAMMPS first checks if a string is a
|
||||
reference to a compute, fix, custom property, or another variable by
|
||||
looking at the first 2-3 characters (and if it is, it checks whether the
|
||||
referenced item exists). Next LAMMPS checks if the string matches one
|
||||
of the available functions or constants. If that fails, LAMMPS will
|
||||
assume that this string is a :doc:`thermo keyword <thermo_style>` and
|
||||
let the code for printing thermodynamic output return the corresponding
|
||||
value. However, if this fails too, since the string is not a thermo
|
||||
keyword, LAMMPS stops with the 'Invalid thermo keyword' error. But it
|
||||
is also possible, that there is just a typo in the name of a valid
|
||||
variable function. Thus it is recommended to check the failing variable
|
||||
expression very carefully.
|
||||
|
||||
.. _err0032:
|
||||
|
||||
One or more atoms are time integrated more than once
|
||||
----------------------------------------------------
|
||||
|
||||
This is probably an error since you typically do not want to advance the
|
||||
positions or velocities of an atom more than once per timestep. This
|
||||
typically happens when there are multiple fix commands that advance atom
|
||||
positions with overlapping groups. Also, for some fix styles it is not
|
||||
immediately obvious that they include time integration. Please check
|
||||
the documentation carefully.
|
||||
|
||||
.. _err0033:
|
||||
|
||||
XXX command before simulation box is defined
|
||||
--------------------------------------------
|
||||
|
||||
This error occurs when trying to execute a LAMMPS command that requires
|
||||
information about the system dimensions, or the number atom, bond,
|
||||
angle, dihedral, or improper types, or the number of atoms or similar
|
||||
data that is only available *after* the simulation box has been created.
|
||||
See the paragraph on :ref:`errors before or after the simulation box is
|
||||
created <hint12>` for additional information.
|
||||
|
||||
.. _err0034:
|
||||
|
||||
XXX command after simulation box is defined
|
||||
--------------------------------------------
|
||||
|
||||
This error occurs when trying to execute a LAMMPS command that changes a
|
||||
global setting *after* it is locked in when the simulation box is
|
||||
created (for instance defining the :doc:`atom style <atom_style>`,
|
||||
:doc:`dimension <dimension>`, :doc:`newton <newton>`, or :doc:`units
|
||||
<units>` setting). These settings may only be changed *before* the
|
||||
simulation box has been created. See the paragraph on :ref:`errors
|
||||
before or after the simulation box is created <hint12>` for additional
|
||||
information.
|
||||
|
||||
.. _err0035:
|
||||
|
||||
Error messages ending in 'Please contact the LAMMPS developers'
|
||||
---------------------------------------------------------------
|
||||
|
||||
Such error messages indicate that something unexpected has happened and
|
||||
that it will require a good understanding of the details of the design
|
||||
of LAMMPS to resolve this. This can be due to some bug in contributed
|
||||
code, and oversight when updating functionality, a feature that is
|
||||
scheduled to be removed or reaching a combination of flags and settings
|
||||
that should not be possible or similar.
|
||||
|
||||
Even if you find a way to work around this error or warning, you should
|
||||
contact the LAMMPS developers and prepare a minimal set of inputs that
|
||||
can be used to reproduce this error or warning. By providing the input,
|
||||
the LAMMPS developers can then assess whether additional action is
|
||||
needed and who else to contact about this, if needed.
|
||||
|
||||
There are multiple ways to get into contact and report your issue. In
|
||||
order of preference there are:
|
||||
|
||||
- Submit a bug report `issue in the LAMMPS GitHub
|
||||
<https://github.com/lammps/lammps/issues>` repository
|
||||
- Post a message in the "LAMMPS Development" forum in the
|
||||
`MatSci Community Discourse <https://matsci.org/c/lammps/lammps-development/42>`_
|
||||
- Send an email to ``developers@lammps.org``
|
||||
- Send an email to an :doc:`individual LAMMPS developer <Intro_authors>`
|
||||
that you know and trust
|
||||
and then LAMMPS will continue reading into the next section and that
|
||||
would have a completely different format.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,15 +1,11 @@
|
||||
Warning messages
|
||||
================
|
||||
|
||||
This is an alphabetic list of some of the WARNING messages LAMMPS prints
|
||||
out and the reason why. If the explanation here is not sufficient, the
|
||||
documentation for the offending command may help. This is a historic
|
||||
list and no longer updated. Instead the LAMMPS developers are trying
|
||||
to provide more details right with the error message or link to a
|
||||
paragraph with :doc:`detailed explanations <Errors_details>`.
|
||||
|
||||
Warning messages also list the source file and line number where the
|
||||
warning was generated. For example, a message like this:
|
||||
This is an alphabetic list of the WARNING messages LAMMPS prints out
|
||||
and the reason why. If the explanation here is not sufficient, the
|
||||
documentation for the offending command may help. Warning messages
|
||||
also list the source file and line number where the warning was
|
||||
generated. For example, a message like this:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
@ -18,7 +14,7 @@ warning was generated. For example, a message like this:
|
||||
means that line #187 in the file src/domain.cpp generated the error.
|
||||
Looking in the source code may help you figure out what went wrong.
|
||||
|
||||
Please also see the page with :doc:`Error messages <Errors_messages>`
|
||||
Doc page with :doc:`ERROR messages <Errors_messages>`
|
||||
|
||||
----------
|
||||
|
||||
@ -32,10 +28,16 @@ Please also see the page with :doc:`Error messages <Errors_messages>`
|
||||
cutoff is set too short or the angle has blown apart and an atom is
|
||||
too far away.
|
||||
|
||||
*Angle style in data file differs from currently defined angle style*
|
||||
Self-explanatory.
|
||||
|
||||
*Angles are defined but no angle style is set*
|
||||
The topology contains angles, but there are no angle forces computed
|
||||
since there was no angle_style command.
|
||||
|
||||
*Atom style in data file differs from currently defined atom style*
|
||||
Self-explanatory.
|
||||
|
||||
*Bond atom missing in box size check*
|
||||
The second atom needed to compute a particular bond is missing on this
|
||||
processor. Typically this is because the pairwise cutoff is set too
|
||||
@ -51,6 +53,9 @@ Please also see the page with :doc:`Error messages <Errors_messages>`
|
||||
processor. Typically this is because the pairwise cutoff is set too
|
||||
short or the bond has blown apart and an atom is too far away.
|
||||
|
||||
*Bond style in data file differs from currently defined bond style*
|
||||
Self-explanatory.
|
||||
|
||||
*Bonds are defined but no bond style is set*
|
||||
The topology contains bonds, but there are no bond forces computed
|
||||
since there was no bond_style command.
|
||||
@ -63,6 +68,9 @@ Please also see the page with :doc:`Error messages <Errors_messages>`
|
||||
length, multiplying by the number of bonds in the interaction (e.g. 3
|
||||
for a dihedral) and adding a small amount of stretch.
|
||||
|
||||
*Both groups in compute group/group have a net charge; the Kspace boundary correction to energy will be non-zero*
|
||||
Self-explanatory.
|
||||
|
||||
*Calling write_dump before a full system init.*
|
||||
The write_dump command is used before the system has been fully
|
||||
initialized as part of a 'run' or 'minimize' command. Not all dump
|
||||
@ -78,6 +86,18 @@ Please also see the page with :doc:`Error messages <Errors_messages>`
|
||||
This means the temperature associated with the rigid bodies may be
|
||||
incorrect on this timestep.
|
||||
|
||||
*Cannot include log terms without 1/r terms; setting flagHI to 1*
|
||||
Self-explanatory.
|
||||
|
||||
*Cannot include log terms without 1/r terms; setting flagHI to 1.*
|
||||
Self-explanatory.
|
||||
|
||||
*Charges are set, but coulombic solver is not used*
|
||||
Self-explanatory.
|
||||
|
||||
*Charges did not converge at step %ld: %lg*
|
||||
Self-explanatory.
|
||||
|
||||
*Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost*
|
||||
The communication cutoff defaults to the maximum of what is inferred from
|
||||
pair and bond styles (will be zero, if none are defined) and what is specified
|
||||
@ -103,6 +123,9 @@ Please also see the page with :doc:`Error messages <Errors_messages>`
|
||||
is not changed automatically and the warning may be ignored depending
|
||||
on the specific system being simulated.
|
||||
|
||||
*Communication cutoff is too small for SNAP micro load balancing, increased to %lf*
|
||||
Self-explanatory.
|
||||
|
||||
*Compute cna/atom cutoff may be too large to find ghost atom neighbors*
|
||||
The neighbor cutoff used may not encompass enough ghost atoms
|
||||
to perform this operation correctly.
|
||||
@ -135,6 +158,9 @@ Please also see the page with :doc:`Error messages <Errors_messages>`
|
||||
Conformation of the 4 listed dihedral atoms is extreme; you may want
|
||||
to check your simulation geometry.
|
||||
|
||||
*Dihedral style in data file differs from currently defined dihedral style*
|
||||
Self-explanatory.
|
||||
|
||||
*Dihedrals are defined but no dihedral style is set*
|
||||
The topology contains dihedrals, but there are no dihedral forces computed
|
||||
since there was no dihedral_style command.
|
||||
@ -151,6 +177,9 @@ Please also see the page with :doc:`Error messages <Errors_messages>`
|
||||
*Estimated error in splitting of dispersion coeffs is %g*
|
||||
Error is greater than 0.0001 percent.
|
||||
|
||||
*Ewald/disp Newton solver failed, using old method to estimate g_ewald*
|
||||
Self-explanatory. Choosing a different cutoff value may help.
|
||||
|
||||
*FENE bond too long*
|
||||
A FENE bond has stretched dangerously far. It's interaction strength
|
||||
will be truncated to attempt to prevent the bond from blowing up.
|
||||
@ -163,6 +192,9 @@ Please also see the page with :doc:`Error messages <Errors_messages>`
|
||||
A FENE bond has stretched dangerously far. It's interaction strength
|
||||
will be truncated to attempt to prevent the bond from blowing up.
|
||||
|
||||
*Fix halt condition for fix-id %s met on step %ld with value %g*
|
||||
Self explanatory.
|
||||
|
||||
*Fix SRD walls overlap but fix srd overlap not set*
|
||||
You likely want to set this in your input script.
|
||||
|
||||
@ -206,12 +238,21 @@ Please also see the page with :doc:`Error messages <Errors_messages>`
|
||||
*Fix property/atom mol or charge w/out ghost communication*
|
||||
A model typically needs these properties defined for ghost atoms.
|
||||
|
||||
*Fix qeq CG convergence failed (%g) after %d iterations at %ld step*
|
||||
Self-explanatory.
|
||||
|
||||
*Fix qeq has non-zero lower Taper radius cutoff*
|
||||
Absolute value must be <= 0.01.
|
||||
|
||||
*Fix qeq has very low Taper radius cutoff*
|
||||
Value should typically be >= 5.0.
|
||||
|
||||
*Fix qeq/dynamic tolerance may be too small for damped dynamics*
|
||||
Self-explanatory.
|
||||
|
||||
*Fix qeq/fire tolerance may be too small for damped fires*
|
||||
Self-explanatory.
|
||||
|
||||
*Fix rattle should come after all other integration fixes*
|
||||
This fix is designed to work after all other integration fixes change
|
||||
atom positions. Thus it should be the last integration fix specified.
|
||||
@ -244,6 +285,9 @@ Please also see the page with :doc:`Error messages <Errors_messages>`
|
||||
The user-specified force accuracy cannot be achieved unless the table
|
||||
feature is disabled by using 'pair_modify table 0'.
|
||||
|
||||
*Geometric mixing assumed for 1/r\^6 coefficients*
|
||||
Self-explanatory.
|
||||
|
||||
*Group for fix_modify temp != fix group*
|
||||
The fix_modify command is specifying a temperature computation that
|
||||
computes a temperature on a different group of atoms than the fix
|
||||
@ -266,14 +310,46 @@ Please also see the page with :doc:`Error messages <Errors_messages>`
|
||||
Conformation of the 4 listed improper atoms is extreme; you may want
|
||||
to check your simulation geometry.
|
||||
|
||||
*Improper style in data file differs from currently defined improper style*
|
||||
Self-explanatory.
|
||||
|
||||
*Impropers are defined but no improper style is set*
|
||||
The topology contains impropers, but there are no improper forces computed
|
||||
since there was no improper_style command.
|
||||
|
||||
*Inconsistent image flags*
|
||||
The image flags for a pair on bonded atoms appear to be inconsistent.
|
||||
Inconsistent means that when the coordinates of the two atoms are
|
||||
unwrapped using the image flags, the two atoms are far apart.
|
||||
Specifically they are further apart than half a periodic box length.
|
||||
Or they are more than a box length apart in a non-periodic dimension.
|
||||
This is usually due to the initial data file not having correct image
|
||||
flags for the two atoms in a bond that straddles a periodic boundary.
|
||||
They should be different by 1 in that case. This is a warning because
|
||||
inconsistent image flags will not cause problems for dynamics or most
|
||||
LAMMPS simulations. However they can cause problems when such atoms
|
||||
are used with the fix rigid or replicate commands. Note that if you
|
||||
have an infinite periodic crystal with bonds then it is impossible to
|
||||
have fully consistent image flags, since some bonds will cross
|
||||
periodic boundaries and connect two atoms with the same image
|
||||
flag.
|
||||
|
||||
*Increasing communication cutoff for GPU style*
|
||||
The pair style has increased the communication cutoff to be consistent with
|
||||
the communication cutoff requirements for this pair style when run on the GPU.
|
||||
|
||||
*KIM Model does not provide 'energy'; Potential energy will be zero*
|
||||
Self-explanatory.
|
||||
|
||||
*KIM Model does not provide 'forces'; Forces will be zero*
|
||||
Self-explanatory.
|
||||
|
||||
*KIM Model does not provide 'particleEnergy'; energy per atom will be zero*
|
||||
Self-explanatory.
|
||||
|
||||
*KIM Model does not provide 'particleVirial'; virial per atom will be zero*
|
||||
Self-explanatory.
|
||||
|
||||
*Kspace_modify slab param < 2.0 may cause unphysical behavior*
|
||||
The kspace_modify slab parameter should be larger to ensure periodic
|
||||
grids padded with empty space do not overlap.
|
||||
@ -325,10 +401,20 @@ Please also see the page with :doc:`Error messages <Errors_messages>`
|
||||
box, or moved further than one processor's subdomain away before
|
||||
reneighboring.
|
||||
|
||||
*MSM mesh too small, increasing to 2 points in each direction*
|
||||
Self-explanatory.
|
||||
|
||||
*Mismatch between velocity and compute groups*
|
||||
The temperature computation used by the velocity command will not be
|
||||
on the same group of atoms that velocities are being set for.
|
||||
|
||||
*Mixing forced for lj coefficients*
|
||||
Self-explanatory.
|
||||
|
||||
*Molecule attributes do not match system attributes*
|
||||
An attribute is specified (e.g. diameter, charge) that is
|
||||
not defined for the specified atom style.
|
||||
|
||||
*Molecule has bond topology but no special bond settings*
|
||||
This means the bonded atoms will not be excluded in pairwise
|
||||
interactions.
|
||||
@ -363,6 +449,9 @@ Please also see the page with :doc:`Error messages <Errors_messages>`
|
||||
*More than one compute damage/atom*
|
||||
It is not efficient to use compute ke/atom more than once.
|
||||
|
||||
*More than one compute dilatation/atom*
|
||||
Self-explanatory.
|
||||
|
||||
*More than one compute erotate/sphere/atom*
|
||||
It is not efficient to use compute erorate/sphere/atom more than once.
|
||||
|
||||
@ -375,6 +464,24 @@ Please also see the page with :doc:`Error messages <Errors_messages>`
|
||||
*More than one compute orientorder/atom*
|
||||
It is not efficient to use compute orientorder/atom more than once.
|
||||
|
||||
*More than one compute plasticity/atom*
|
||||
Self-explanatory.
|
||||
|
||||
*More than one compute sna/atom*
|
||||
Self-explanatory.
|
||||
|
||||
*More than one compute sna/grid*
|
||||
Self-explanatory.
|
||||
|
||||
*More than one compute sna/grid/local*
|
||||
Self-explanatory.
|
||||
|
||||
*More than one compute snad/atom*
|
||||
Self-explanatory.
|
||||
|
||||
*More than one compute snav/atom*
|
||||
Self-explanatory.
|
||||
|
||||
*More than one fix poems*
|
||||
It is not efficient to use fix poems more than once.
|
||||
|
||||
@ -450,12 +557,21 @@ Please also see the page with :doc:`Error messages <Errors_messages>`
|
||||
*Pair COMB charge %.10f with force %.10f hit min barrier*
|
||||
Something is possibly wrong with your model.
|
||||
|
||||
*Pair brownian needs newton pair on for momentum conservation*
|
||||
Self-explanatory.
|
||||
|
||||
*Pair dpd needs newton pair on for momentum conservation*
|
||||
Self-explanatory.
|
||||
|
||||
*Pair dsmc: num_of_collisions > number_of_A*
|
||||
Collision model in DSMC is breaking down.
|
||||
|
||||
*Pair dsmc: num_of_collisions > number_of_B*
|
||||
Collision model in DSMC is breaking down.
|
||||
|
||||
*Pair style in data file differs from currently defined pair style*
|
||||
Self-explanatory.
|
||||
|
||||
*Pair style restartinfo set but has no restart support*
|
||||
This pair style has a bug, where it does not support reading and
|
||||
writing information to a restart file, but does not set the member
|
||||
@ -565,6 +681,9 @@ Please also see the page with :doc:`Error messages <Errors_messages>`
|
||||
cluster specified by the fix shake command is numerically suspect. LAMMPS
|
||||
will set it to 0.0 and continue.
|
||||
|
||||
*Shell command '%s' failed with error '%s'*
|
||||
Self-explanatory.
|
||||
|
||||
*Shell command returned with non-zero status*
|
||||
This may indicate the shell command did not operate as expected.
|
||||
|
||||
@ -575,9 +694,15 @@ Please also see the page with :doc:`Error messages <Errors_messages>`
|
||||
This will lead to invalid constraint forces in the SHAKE/RATTLE
|
||||
computation.
|
||||
|
||||
*Simulations might be very slow because of large number of structure factors*
|
||||
Self-explanatory.
|
||||
|
||||
*Slab correction not needed for MSM*
|
||||
Slab correction is intended to be used with Ewald or PPPM and is not needed by MSM.
|
||||
|
||||
*Specifying an 'subset' value of '0' is equivalent to no 'subset' keyword*
|
||||
Self-explanatory.
|
||||
|
||||
*System is not charge neutral, net charge = %g*
|
||||
The total charge on all atoms on the system is not 0.0.
|
||||
For some KSpace solvers this is only a warning.
|
||||
@ -609,6 +734,9 @@ Please also see the page with :doc:`Error messages <Errors_messages>`
|
||||
assumed to also be for all atoms. Thus the pressure printed by thermo
|
||||
could be inaccurate.
|
||||
|
||||
*The fix ave/spatial command has been replaced by the more flexible fix ave/chunk and compute chunk/atom commands -- fix ave/spatial will be removed in the summer of 2015*
|
||||
Self-explanatory.
|
||||
|
||||
*The minimizer does not re-orient dipoles when using fix efield*
|
||||
This means that only the atom coordinates will be minimized,
|
||||
not the orientation of the dipoles.
|
||||
@ -617,6 +745,9 @@ Please also see the page with :doc:`Error messages <Errors_messages>`
|
||||
More than the maximum # of neighbors was found multiple times. This
|
||||
was unexpected.
|
||||
|
||||
*Too many inner timesteps in fix ttm*
|
||||
Self-explanatory.
|
||||
|
||||
*Too many neighbors in CNA for %d atoms*
|
||||
More than the maximum # of neighbors was found multiple times. This
|
||||
was unexpected.
|
||||
@ -644,6 +775,24 @@ Please also see the page with :doc:`Error messages <Errors_messages>`
|
||||
The deformation will heat the SRD particles so this can
|
||||
be dangerous.
|
||||
|
||||
*Using kspace solver on system with no charge*
|
||||
Self-explanatory.
|
||||
|
||||
*Using largest cut-off for lj/long/dipole/long long long*
|
||||
Self-explanatory.
|
||||
|
||||
*Using largest cutoff for buck/long/coul/long*
|
||||
Self-explanatory.
|
||||
|
||||
*Using largest cutoff for lj/long/coul/long*
|
||||
Self-explanatory.
|
||||
|
||||
*Using largest cutoff for pair_style lj/long/tip4p/long*
|
||||
Self-explanatory.
|
||||
|
||||
*Using package gpu without any pair style defined*
|
||||
Self-explanatory.
|
||||
|
||||
*Using pair potential shift with pair_modify compute no*
|
||||
The shift effects will thus not be computed.
|
||||
|
||||
|
||||
@ -54,7 +54,7 @@ Lowercase directories
|
||||
+-------------+------------------------------------------------------------------+
|
||||
| body | body particles, 2d system |
|
||||
+-------------+------------------------------------------------------------------+
|
||||
| bpm | simulations of solid elastic/plastic deformation and fracture |
|
||||
| bpm | BPM simulations of pouring elastic grains and plate impact |
|
||||
+-------------+------------------------------------------------------------------+
|
||||
| cmap | CMAP 5-body contributions to CHARMM force field |
|
||||
+-------------+------------------------------------------------------------------+
|
||||
@ -146,8 +146,6 @@ Lowercase directories
|
||||
+-------------+------------------------------------------------------------------+
|
||||
| streitz | use of Streitz/Mintmire potential with charge equilibration |
|
||||
+-------------+------------------------------------------------------------------+
|
||||
| stress_vcm | removing binned rigid body motion from binned stress profile |
|
||||
+-------------+------------------------------------------------------------------+
|
||||
| tad | temperature-accelerated dynamics of vacancy diffusion in bulk Si |
|
||||
+-------------+------------------------------------------------------------------+
|
||||
| threebody | regression test input for a variety of manybody potentials |
|
||||
|
||||
@ -16,7 +16,7 @@ compiled alongside the code using it from the source code in
|
||||
``fortran/lammps.f90`` *and* with the same compiler used to build the
|
||||
rest of the Fortran code that interfaces to LAMMPS. When linking, you
|
||||
also need to :doc:`link to the LAMMPS library <Build_link>`. A typical
|
||||
command for a simple program using the Fortran interface would be:
|
||||
command line for a simple program using the Fortran interface would be:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
@ -91,12 +91,12 @@ function and triggered with the optional logical argument set to
|
||||
CALL lmp%close(.TRUE.)
|
||||
END PROGRAM testlib
|
||||
|
||||
It is also possible to pass command-line flags from Fortran to C/C++ and
|
||||
It is also possible to pass command line flags from Fortran to C/C++ and
|
||||
thus make the resulting executable behave similarly to the standalone
|
||||
executable (it will ignore the `-in/-i` flag, though). This allows
|
||||
using the command-line to configure accelerator and suffix settings,
|
||||
using the command line to configure accelerator and suffix settings,
|
||||
configure screen and logfile output, or to set index style variables
|
||||
from the command-line and more. Here is a correspondingly adapted
|
||||
from the command line and more. Here is a correspondingly adapted
|
||||
version of the previous example:
|
||||
|
||||
.. code-block:: fortran
|
||||
@ -108,7 +108,7 @@ version of the previous example:
|
||||
CHARACTER(LEN=128), ALLOCATABLE :: command_args(:)
|
||||
INTEGER :: i, argc
|
||||
|
||||
! copy command-line flags to `command_args()`
|
||||
! copy command line flags to `command_args()`
|
||||
argc = COMMAND_ARGUMENT_COUNT()
|
||||
ALLOCATE(command_args(0:argc))
|
||||
DO i=0, argc
|
||||
@ -321,14 +321,6 @@ of the contents of the :f:mod:`LIBLAMMPS` Fortran interface to LAMMPS.
|
||||
:ftype set_string_variable: subroutine
|
||||
:f set_internal_variable: :f:subr:`set_internal_variable`
|
||||
:ftype set_internal_variable: subroutine
|
||||
:f eval: :f:func:`eval`
|
||||
:ftype eval: function
|
||||
:f clearstep_compute: :f:subr:`clearstep_compute`
|
||||
:ftype clearstep_compute: subroutine
|
||||
:f addstep_compute: :f:subr:`addstep_compute`
|
||||
:ftype addstep_compute: subroutine
|
||||
:f addstep_compute_all: :f:subr:`addstep_compute_all`
|
||||
:ftype addstep_compute_all: subroutine
|
||||
:f gather_atoms: :f:subr:`gather_atoms`
|
||||
:ftype gather_atoms: subroutine
|
||||
:f gather_atoms_concat: :f:subr:`gather_atoms_concat`
|
||||
@ -456,7 +448,7 @@ of the contents of the :f:mod:`LIBLAMMPS` Fortran interface to LAMMPS.
|
||||
compiled with MPI support, it will also initialize MPI, if it has
|
||||
not already been initialized before.
|
||||
|
||||
The *args* argument with the list of command-line parameters is
|
||||
The *args* argument with the list of command line parameters is
|
||||
optional and so it the *comm* argument with the MPI communicator.
|
||||
If *comm* is not provided, ``MPI_COMM_WORLD`` is assumed. For
|
||||
more details please see the documentation of :cpp:func:`lammps_open`.
|
||||
@ -962,7 +954,6 @@ Procedures Bound to the :f:type:`lammps` Derived Type
|
||||
:f:func:`extract_atom` between runs.
|
||||
|
||||
.. admonition:: Array index order
|
||||
:class: tip
|
||||
|
||||
Two-dimensional arrays returned from :f:func:`extract_atom` will be
|
||||
**transposed** from equivalent arrays in C, and they will be indexed
|
||||
@ -1075,7 +1066,6 @@ Procedures Bound to the :f:type:`lammps` Derived Type
|
||||
you based on data from the :cpp:class:`Compute` class.
|
||||
|
||||
.. admonition:: Array index order
|
||||
:class: tip
|
||||
|
||||
Two-dimensional arrays returned from :f:func:`extract_compute` will be
|
||||
**transposed** from equivalent arrays in C, and they will be indexed
|
||||
@ -1334,7 +1324,6 @@ Procedures Bound to the :f:type:`lammps` Derived Type
|
||||
:rtype data: polymorphic
|
||||
|
||||
.. admonition:: Array index order
|
||||
:class: tip
|
||||
|
||||
Two-dimensional global, per-atom, or local array data from
|
||||
:f:func:`extract_fix` will be **transposed** from equivalent arrays in
|
||||
@ -1459,62 +1448,11 @@ Procedures Bound to the :f:type:`lammps` Derived Type
|
||||
an internal-style variable, an error is generated.
|
||||
|
||||
:p character(len=*) name: name of the variable
|
||||
:p real(c_double) val: new value to assign to the variable
|
||||
:p read(c_double) val: new value to assign to the variable
|
||||
:to: :cpp:func:`lammps_set_internal_variable`
|
||||
|
||||
--------
|
||||
|
||||
.. f:function:: eval(expr)
|
||||
|
||||
This function is a wrapper around :cpp:func:`lammps_eval` that takes a
|
||||
LAMMPS equal style variable string, evaluates it and returns the resulting
|
||||
scalar value as a floating-point number.
|
||||
|
||||
.. versionadded:: 4Feb2025
|
||||
|
||||
:p character(len=\*) expr: string to be evaluated
|
||||
:to: :cpp:func:`lammps_eval`
|
||||
:r value [real(c_double)]: result of the evaluated string
|
||||
|
||||
--------
|
||||
|
||||
.. f:subroutine:: clearstep_compute()
|
||||
|
||||
Clear whether a compute has been invoked
|
||||
|
||||
.. versionadded:: 4Feb2025
|
||||
|
||||
:to: :cpp:func:`lammps_clearstep_compute`
|
||||
|
||||
--------
|
||||
|
||||
.. f:subroutine:: addstep_compute(nextstep)
|
||||
|
||||
Add timestep to list of future compute invocations
|
||||
if the compute has been invoked on the current timestep
|
||||
|
||||
.. versionadded:: 4Feb2025
|
||||
|
||||
overloaded for 32-bit and 64-bit integer arguments
|
||||
|
||||
:p integer(kind=8 or kind=4) nextstep: next timestep
|
||||
:to: :cpp:func:`lammps_addstep_compute`
|
||||
|
||||
--------
|
||||
|
||||
.. f:subroutine:: addstep_compute_all(nextstep)
|
||||
|
||||
Add timestep to list of future compute invocations
|
||||
|
||||
.. versionadded:: 4Feb2025
|
||||
|
||||
overloaded for 32-bit and 64-bit integer arguments
|
||||
|
||||
:p integer(kind=8 or kind=4) nextstep: next timestep
|
||||
:to: :cpp:func:`lammps_addstep_compute_all`
|
||||
|
||||
--------
|
||||
|
||||
.. f:subroutine:: gather_atoms(name, count, data)
|
||||
|
||||
This function calls :cpp:func:`lammps_gather_atoms` to gather the named
|
||||
@ -2773,7 +2711,8 @@ Procedures Bound to the :f:type:`lammps` Derived Type
|
||||
END SUBROUTINE external_callback
|
||||
END INTERFACE
|
||||
|
||||
where ``c_bigint`` is ``c_int64_t`` and ``c_tagint`` is ``c_int64_t`` if
|
||||
where ``c_bigint`` is ``c_int`` if ``-DLAMMPS_SMALLSMALL`` was used and
|
||||
``c_int64_t`` otherwise; and ``c_tagint`` is ``c_int64_t`` if
|
||||
``-DLAMMPS_BIGBIG`` was used and ``c_int`` otherwise.
|
||||
|
||||
The argument *caller* to :f:subr:`set_fix_external_callback` is unlimited
|
||||
|
||||
@ -40,7 +40,6 @@ Settings howto
|
||||
Howto_walls
|
||||
Howto_nemd
|
||||
Howto_dispersion
|
||||
Howto_bulk2slab
|
||||
|
||||
Analysis howto
|
||||
==============
|
||||
@ -104,7 +103,6 @@ Tutorials howto
|
||||
Howto_github
|
||||
Howto_lammps_gui
|
||||
Howto_moltemplate
|
||||
Howto_python
|
||||
Howto_pylammps
|
||||
Howto_wsl
|
||||
|
||||
|
||||
@ -10,21 +10,20 @@ and/or pressure (P) is specified by the user, and the thermostat or
|
||||
barostat attempts to equilibrate the system to the requested T and/or
|
||||
P.
|
||||
|
||||
Barostatting in LAMMPS is performed by :doc:`fixes <fix>`. Three
|
||||
Barostatting in LAMMPS is performed by :doc:`fixes <fix>`. Two
|
||||
barostatting methods are currently available: Nose-Hoover (npt and
|
||||
nph), Berendsen, and various linear controllers in deform/pressure:
|
||||
nph) and Berendsen:
|
||||
|
||||
* :doc:`fix npt <fix_nh>`
|
||||
* :doc:`fix npt/sphere <fix_npt_sphere>`
|
||||
* :doc:`fix npt/asphere <fix_npt_asphere>`
|
||||
* :doc:`fix nph <fix_nh>`
|
||||
* :doc:`fix press/berendsen <fix_press_berendsen>`
|
||||
* :doc:`fix deform/pressure <fix_deform_pressure>`
|
||||
|
||||
The :doc:`fix npt <fix_nh>` commands include a Nose-Hoover thermostat
|
||||
and barostat. :doc:`Fix nph <fix_nh>` is just a Nose/Hoover barostat;
|
||||
it does no thermostatting. The fixes :doc:`nph <fix_nh>`, :doc:`press/berendsen <fix_press_berendsen>`, and :doc:`deform/pressure <fix_deform_pressure>`
|
||||
can be used in conjunction with any of the thermostatting fixes.
|
||||
it does no thermostatting. Both :doc:`fix nph <fix_nh>` and :doc:`fix press/berendsen <fix_press_berendsen>` can be used in conjunction
|
||||
with any of the thermostatting fixes.
|
||||
|
||||
As with the :doc:`thermostats <Howto_thermostat>`, :doc:`fix npt <fix_nh>`
|
||||
and :doc:`fix nph <fix_nh>` only use translational motion of the
|
||||
@ -45,9 +44,9 @@ a temperature or pressure compute to a barostatting fix.
|
||||
.. note::
|
||||
|
||||
As with the thermostats, the Nose/Hoover methods (:doc:`fix npt <fix_nh>` and :doc:`fix nph <fix_nh>`) perform time integration.
|
||||
:doc:`Fix press/berendsen <fix_press_berendsen>` and :doc:`fix deform/pressure <fix_deform_pressure>`
|
||||
do NOT, so they should be used with one of the constant NVE fixes or with
|
||||
one of the NVT fixes.
|
||||
:doc:`Fix press/berendsen <fix_press_berendsen>` does NOT, so it should
|
||||
be used with one of the constant NVE fixes or with one of the NVT
|
||||
fixes.
|
||||
|
||||
Thermodynamic output, which can be setup via the
|
||||
:doc:`thermo_style <thermo_style>` command, often includes pressure
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
CHARMM, AMBER, COMPASS, DREIDING, and OPLS force fields
|
||||
=======================================================
|
||||
CHARMM, AMBER, COMPASS, and DREIDING force fields
|
||||
=================================================
|
||||
|
||||
A compact summary of the concepts, definitions, and properties of
|
||||
force fields with explicit bonded interactions (like the ones discussed
|
||||
@ -236,40 +236,6 @@ documentation for the formula it computes.
|
||||
|
||||
* :doc:`special_bonds <special_bonds>` dreiding
|
||||
|
||||
OPLS
|
||||
----
|
||||
|
||||
OPLS (Optimized Potentials for Liquid Simulations) is a general force
|
||||
field for atomistic simulation of organic molecules in solvent. It was
|
||||
developed by the `Jorgensen group
|
||||
<https://traken.chem.yale.edu/oplsaam.html>`_ at Purdue University and
|
||||
later at Yale University. Multiple versions of the OPLS parameters
|
||||
exist for united atom representations (OPLS-UA) and for all-atom
|
||||
representations (OPLS-AA).
|
||||
|
||||
This force field is based on atom types mapped to specific functional
|
||||
groups in organic and biological molecules. Each atom includes a
|
||||
static, partial atomic charge reflecting the oxidation state of the
|
||||
element derived from its bonded neighbors :ref:`(Jorgensen)
|
||||
<howto-jorgensen>` and computed based on increments determined by the
|
||||
atom type of the atoms bond to it.
|
||||
|
||||
The interaction styles listed below compute force field formulas that
|
||||
are fully or in part consistent with the OPLS style force fields. See
|
||||
each command's documentation for the formula it computes. Some are only
|
||||
compatible with a subset of OPLS interactions.
|
||||
|
||||
* :doc:`bond_style <bond_harmonic>` harmonic
|
||||
* :doc:`angle_style <angle_harmonic>` harmonic
|
||||
* :doc:`dihedral_style <dihedral_opls>` opls
|
||||
* :doc:`improper_style <improper_cvff>` cvff
|
||||
* :doc:`improper_style <improper_fourier>` fourier
|
||||
* :doc:`improper_style <improper_harmonic>` harmonic
|
||||
* :doc:`pair_style <pair_lj_cut_coul>` lj/cut/coul/cut
|
||||
* :doc:`pair_style <pair_lj_cut_coul>` lj/cut/coul/long
|
||||
* :doc:`pair_modify <pair_modify>` geometric
|
||||
* :doc:`special_bonds <special_bonds>` lj/coul 0.0 0.0 0.5
|
||||
|
||||
----------
|
||||
|
||||
.. _Typelabel2:
|
||||
@ -300,6 +266,3 @@ compatible with a subset of OPLS interactions.
|
||||
|
||||
**(Mayo)** Mayo, Olfason, Goddard III (1990). J Phys Chem, 94, 8897-8909. https://doi.org/10.1021/j100389a010
|
||||
|
||||
.. _howto-Jorgensen:
|
||||
|
||||
**(Jorgensen)** Jorgensen, Tirado-Rives (1988). J Am Chem Soc, 110, 1657-1666. https://doi.org/10.1021/ja00214a001
|
||||
|
||||
@ -5,11 +5,7 @@ The BPM package implements bonded particle models which can be used to
|
||||
simulate mesoscale solids. Solids are constructed as a collection of
|
||||
particles, which each represent a coarse-grained region of space much
|
||||
larger than the atomistic scale. Particles within a solid region are
|
||||
then connected by a network of bonds to model solid elasticity.
|
||||
There are many names for methods that are based on similar (or
|
||||
equivalent) capabilities to those in this package, including, but not
|
||||
limited to, cohesive beam models, bonded DEMs, lattice spring models,
|
||||
mass spring models, and lattice particle methods.
|
||||
then connected by a network of bonds to provide solid elasticity.
|
||||
|
||||
Unlike traditional bonds in molecular dynamics, the equilibrium bond
|
||||
length can vary between bonds. Bonds store the reference state. This
|
||||
@ -42,14 +38,11 @@ such as those created by pouring grains using :doc:`fix pour
|
||||
|
||||
----------
|
||||
|
||||
Currently, there are three types of bonds included in the BPM package. The
|
||||
Currently, there are two types of bonds included in the BPM package. The
|
||||
first bond style, :doc:`bond bpm/spring <bond_bpm_spring>`, only applies
|
||||
pairwise, central body forces. Point particles must have :doc:`bond atom
|
||||
style <atom_style>` and may be thought of as nodes in a spring
|
||||
network. An optional multibody term can be used to adjust the network's
|
||||
Poisson's ratio. The :doc:`bpm/spring/plastic <bond_bpm_spring_plastic>`
|
||||
bond style is similar except it adds a plastic yield strain.
|
||||
Alternatively, the third bond style, :doc:`bond bpm/rotational
|
||||
network. Alternatively, the second bond style, :doc:`bond bpm/rotational
|
||||
<bond_bpm_rotational>`, resolves tangential forces and torques arising
|
||||
with the shearing, bending, and twisting of the bond due to rotation or
|
||||
displacement of particles. Particles are similar to those used in the
|
||||
@ -62,9 +55,8 @@ orientation similar to :doc:`fix nve/asphere <fix_nve_asphere>`.
|
||||
|
||||
In addition to bond styles, a new pair style :doc:`pair bpm/spring
|
||||
<pair_bpm_spring>` was added to accompany the bpm/spring bond
|
||||
style. By default, this pair style is simply a hookean repulsion with
|
||||
similar velocity damping as its sister bond style, but optional
|
||||
arguments can be used to modify the force.
|
||||
style. This pair style is simply a hookean repulsion with similar
|
||||
velocity damping as its sister bond style.
|
||||
|
||||
----------
|
||||
|
||||
|
||||
@ -1,160 +0,0 @@
|
||||
===========================
|
||||
Convert bulk system to slab
|
||||
===========================
|
||||
|
||||
A regularly encountered simulation problem is how to convert a bulk
|
||||
system that has been run for a while to equilibrate into a slab system
|
||||
with some vacuum space and free surfaces. The challenge here is that
|
||||
one cannot just change the box dimensions with the :doc:`change_box
|
||||
command <change_box>` or edit the box boundaries in a data file because
|
||||
some atoms will have non-zero image flags from diffusing around.
|
||||
|
||||
Changing the box dimensions results in an undesired displacement of
|
||||
those atoms, since the image flags indicate how many times the box
|
||||
length in x-, y-, or z-direction needs to be added or subtracted to get
|
||||
the "unwrapped" coordinates. By changing the box dimension this
|
||||
distance is changed and thus those atoms move unphysically relative to
|
||||
their neighbors with zero image flags. Setting image flags forcibly to
|
||||
zero creates problems because that could break apart molecules by having
|
||||
one atom of a bond on the top of the system and the other at the bottom.
|
||||
|
||||
.. _bulk2slab:
|
||||
.. figure:: JPG/rhodo-both.jpg
|
||||
:figwidth: 80%
|
||||
:figclass: align-center
|
||||
|
||||
Snapshots of the bulk Rhodopsin in lipid layer and water system (right)
|
||||
and the generated slab geometry (left)
|
||||
|
||||
.. admonition:: Disclaimer
|
||||
:class: note
|
||||
|
||||
The following workflow will work for many bulk systems, but not all.
|
||||
Some systems cannot be converted (e.g. polymers with bonds to the
|
||||
same molecule across periodic boundaries, sometimes called "infinite
|
||||
polymers"). The amount of vacuum that needs to be added depends on
|
||||
the length of the molecules where the system is split (the example
|
||||
here splits where there is water with short molecules). In some
|
||||
cases, the system may need to be re-centered in the box first using
|
||||
the :doc:`displace_atoms command <displace_atoms>`. Also, the time
|
||||
spent on strong thermalization and equilibration will depend on the
|
||||
specific system and its thermodynamic conditions.
|
||||
|
||||
Below is a suggested workflow using the :doc:`Rhodopsin benchmark input
|
||||
<Speed_bench>` for demonstration. The figure shows the state *before*
|
||||
the procedure on the left (with unwrapped atoms that have diffused out
|
||||
of the box) and *after* on the right (with the vacuum added above and
|
||||
below). The procedure is implemented by modifying a copy of the
|
||||
``in.rhodo`` input file. The first lines up to and including the
|
||||
:doc:`read_data command <read_data>` remain unchanged. Then we insert
|
||||
the following lines to add vacuum to the z direction above and below the
|
||||
system:
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
variable delta index 10.0
|
||||
reset_atoms image all
|
||||
write_dump all custom rhodo-unwrap.lammpstrj id xu yu zu
|
||||
change_box all z final $(zlo-2.0*v_delta) $(zhi+2.0*v_delta) &
|
||||
boundary p p f
|
||||
read_dump rhodo-unwrap.lammpstrj 0 x y z box no replace yes
|
||||
kspace_modify slab 3.0
|
||||
|
||||
Specifically, the :doc:`variable delta <variable>` (set to 10.0)
|
||||
represents a distance that determines the amount of vacuum added: we add
|
||||
twice its value in each direction to the z-dimension; thus in total
|
||||
:math:`40 \AA` get added. The :doc:`reset_atoms image all
|
||||
<reset_atoms>` command shall reset any image flags to become either 0 or
|
||||
:math:`\pm 1` and thus have the minimum distance from the center of the
|
||||
simulation box, but the correct relative distance for bonded atoms.
|
||||
|
||||
The :doc:`write_dump command <write_dump>` then writes out the resulting
|
||||
*unwrapped* coordinates of the system. After expanding the box,
|
||||
coordinates that were outside the box should now be inside and the
|
||||
unwrapped coordinates will become "wrapped", while atoms outside the
|
||||
periodic boundaries will be wrapped back into the box and their image
|
||||
flags in those directions restored.
|
||||
|
||||
The :doc:`change_box command <change_box>` adds the desired
|
||||
distance to the low and high box boundary in z-direction and then changes
|
||||
the :doc:`boundary to "p p f" <boundary>` which will force the image
|
||||
flags in z-direction to zero and create an undesired displacement for
|
||||
the atoms with non-zero image flags.
|
||||
|
||||
With the :doc:`read_dump command <read_dump>` we read back and replace
|
||||
partially incorrect coordinates with the previously saved, unwrapped
|
||||
coordinates. It is important to ignore the box dimensions stored in the
|
||||
dump file. We want to preserve the expanded box. Finally, we turn on
|
||||
the slab correction for the PPPM long-range solver with the
|
||||
:doc:`kspace_modify command <kspace_modify>` as required when using a
|
||||
long range Coulomb solver for non-periodic z-dimension.
|
||||
|
||||
Next we replace the :doc:`fix npt command <fix_nh>` with:
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
fix 2 nvt temp 300.0 300.0 10.0
|
||||
|
||||
We now have an open system and thus the adjustment of the cell in
|
||||
z-direction is no longer required. Since splitting the bulk water
|
||||
region where the vacuum is inserted, creates surface atoms with high
|
||||
potential energy, we reduce the thermostat time constant from 100.0 to
|
||||
10.0 to remove excess kinetic energy resulting from that change faster.
|
||||
|
||||
Also the high potential energy of the surface atoms can cause that some
|
||||
of them are ejected from the slab. In order to suppress that, we add
|
||||
soft harmonic walls to push back any atoms that want to leave the slab.
|
||||
To determine the position of the wall, we first need to to determine the
|
||||
extent of the atoms in z-direction and then place the harmonic walls
|
||||
based on that information:
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
compute zmin all reduce min z
|
||||
compute zmax all reduce max z
|
||||
thermo_style custom zlo c_zmin zhi c_zmax
|
||||
run 0 post no
|
||||
fix 3 all wall/harmonic zhi $(c_zmax+v_delta) 10.0 0.0 ${delta} &
|
||||
zlo $(c_zmin-v_delta) 10.0 0.0 ${delta}
|
||||
|
||||
The two :doc:`compute reduce <compute_reduce>` command determine the
|
||||
minimum and maximum z-coordinate across all atoms. In order to trigger
|
||||
the execution of the compute commands we need to "consume" them. This
|
||||
is done with the :doc:`thermo_style custom <thermo_style>` command
|
||||
followed by the :doc:`run 0 <run>` command. This avoids and error
|
||||
accessing the min/max values determined by the compute commands to
|
||||
compute the location of the wall in lower and upper direction. This
|
||||
uses the previously defined *delta* variable to determine the distance
|
||||
of the wall from the extent of the system and the cutoff for the wall
|
||||
interaction. This way only atoms that move beyond the min/max values in
|
||||
z-direction will experience a restoring force, nudging them back to the
|
||||
slab. The force constant of :math:`10.0 \frac{\mathrm{kcal/mol}}{\AA}`
|
||||
was determined empirically.
|
||||
|
||||
Adding these "restoring" soft walls assist in making the free surfaces
|
||||
above and below the slab flat, instead of having rugged or ondulated
|
||||
surfaces. The impact of the walls can be changed by adjusting the force
|
||||
constant, cutoff, and position of the wall.
|
||||
|
||||
Finally, we replace the :doc:`run 100 <run>` of the original input with:
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
run 1000 post no
|
||||
|
||||
unfix 3
|
||||
fix 2 all nvt temp 300.0 300.0 100.0
|
||||
run 1000 post no
|
||||
|
||||
write_data data.rhodo-slab
|
||||
|
||||
This runs the system converted to a slab first for 1000 MD steps using
|
||||
the walls and stronger Nose-Hoover thermostat. Then the walls are
|
||||
removed with :doc:`unfix 3 <unfix>` and the thermostat time constant
|
||||
reset to 100.0 and the system run for another 1000 steps. Finally the
|
||||
resulting slab geometry is written to a new data file
|
||||
``data.rhodo-slab`` with a :doc:`write_data command <write_data>`. The
|
||||
number of MD steps required to reach a proper equilibrium state is very
|
||||
likely larger. The number of 1000 steps (corresponding to 2
|
||||
picoseconds) was chosen for demonstration purposes, so that the
|
||||
procedure can be easily and quickly tested.
|
||||
@ -58,30 +58,28 @@ chunk ID for an individual atom can also be static (e.g. a molecule
|
||||
ID), or dynamic (e.g. what spatial bin an atom is in as it moves).
|
||||
|
||||
Note that this compute allows the per-atom output of other
|
||||
:doc:`computes <compute>`, :doc:`fixes <fix>`, and :doc:`variables
|
||||
<variable>` to be used to define chunk IDs for each atom. This means
|
||||
you can write your own compute or fix to output a per-atom quantity to
|
||||
use as chunk ID. See the :doc:`Modify <Modify>` doc pages for info on
|
||||
how to do this. You can also define a :doc:`per-atom variable
|
||||
<variable>` in the input script that uses a formula to generate a chunk
|
||||
ID for each atom.
|
||||
:doc:`computes <compute>`, :doc:`fixes <fix>`, and
|
||||
:doc:`variables <variable>` to be used to define chunk IDs for each
|
||||
atom. This means you can write your own compute or fix to output a
|
||||
per-atom quantity to use as chunk ID. See the :doc:`Modify <Modify>`
|
||||
doc pages for info on how to do this. You can also define a :doc:`per-atom variable <variable>` in the input script that uses a formula to
|
||||
generate a chunk ID for each atom.
|
||||
|
||||
Fix ave/chunk command:
|
||||
----------------------
|
||||
|
||||
This fix takes the ID of a :doc:`compute chunk/atom
|
||||
<compute_chunk_atom>` command as input. For each chunk, it then sums
|
||||
one or more specified per-atom values over the atoms in each chunk. The
|
||||
per-atom values can be any atom property, such as velocity, force,
|
||||
charge, potential energy, kinetic energy, stress, etc. Additional
|
||||
keywords are defined for per-chunk properties like density and
|
||||
temperature. More generally any per-atom value generated by other
|
||||
:doc:`computes <compute>`, :doc:`fixes <fix>`, and :doc:`per-atom
|
||||
variables <variable>`, can be summed over atoms in each chunk.
|
||||
This fix takes the ID of a :doc:`compute chunk/atom <compute_chunk_atom>` command as input. For each chunk,
|
||||
it then sums one or more specified per-atom values over the atoms in
|
||||
each chunk. The per-atom values can be any atom property, such as
|
||||
velocity, force, charge, potential energy, kinetic energy, stress,
|
||||
etc. Additional keywords are defined for per-chunk properties like
|
||||
density and temperature. More generally any per-atom value generated
|
||||
by other :doc:`computes <compute>`, :doc:`fixes <fix>`, and :doc:`per-atom variables <variable>`, can be summed over atoms in each chunk.
|
||||
|
||||
Similar to other averaging fixes, this fix allows the summed per-chunk
|
||||
values to be time-averaged in various ways, and output to a file. The
|
||||
fix produces a global array as output with one row of values per chunk.
|
||||
fix produces a global array as output with one row of values per
|
||||
chunk.
|
||||
|
||||
Compute \*/chunk commands:
|
||||
--------------------------
|
||||
@ -99,20 +97,17 @@ category:
|
||||
* :doc:`compute torque/chunk <compute_vcm_chunk>`
|
||||
* :doc:`compute vcm/chunk <compute_vcm_chunk>`
|
||||
|
||||
They each take the ID of a :doc:`compute chunk/atom
|
||||
<compute_chunk_atom>` command as input. As their names indicate, they
|
||||
calculate the center-of-mass, radius of gyration, moments of inertia,
|
||||
mean-squared displacement, temperature, torque, and velocity of
|
||||
center-of-mass for each chunk of atoms. The :doc:`compute
|
||||
property/chunk <compute_property_chunk>` command can tally the count of
|
||||
atoms in each chunk and extract other per-chunk properties.
|
||||
They each take the ID of a :doc:`compute chunk/atom <compute_chunk_atom>` command as input. As their names
|
||||
indicate, they calculate the center-of-mass, radius of gyration,
|
||||
moments of inertia, mean-squared displacement, temperature, torque,
|
||||
and velocity of center-of-mass for each chunk of atoms. The :doc:`compute property/chunk <compute_property_chunk>` command can tally the
|
||||
count of atoms in each chunk and extract other per-chunk properties.
|
||||
|
||||
The reason these various calculations are not part of the :doc:`fix
|
||||
ave/chunk command <fix_ave_chunk>`, is that each requires a more
|
||||
The reason these various calculations are not part of the :doc:`fix ave/chunk command <fix_ave_chunk>`, is that each requires a more
|
||||
complicated operation than simply summing and averaging over per-atom
|
||||
values in each chunk. For example, many of them require calculation of
|
||||
a center of mass, which requires summing mass\*position over the atoms
|
||||
and then dividing by summed mass.
|
||||
values in each chunk. For example, many of them require calculation
|
||||
of a center of mass, which requires summing mass\*position over the
|
||||
atoms and then dividing by summed mass.
|
||||
|
||||
All of these computes produce a global vector or global array as
|
||||
output, with one or more values per chunk. The output can be used in
|
||||
@ -123,10 +118,9 @@ various ways:
|
||||
* As input to the :doc:`fix ave/histo <fix_ave_histo>` command to
|
||||
histogram values across chunks. E.g. a histogram of cluster sizes or
|
||||
molecule diffusion rates.
|
||||
* As input to special functions of :doc:`equal-style variables
|
||||
<variable>`, like sum() and max() and ave(). E.g. to find the largest
|
||||
cluster or fastest diffusing molecule or average radius-of-gyration of
|
||||
a set of molecules (chunks).
|
||||
* As input to special functions of :doc:`equal-style variables <variable>`, like sum() and max() and ave(). E.g. to
|
||||
find the largest cluster or fastest diffusing molecule or average
|
||||
radius-of-gyration of a set of molecules (chunks).
|
||||
|
||||
Other chunk commands:
|
||||
---------------------
|
||||
@ -144,10 +138,9 @@ spatially average per-chunk values calculated by a per-chunk compute.
|
||||
|
||||
The :doc:`compute reduce/chunk <compute_reduce_chunk>` command reduces a
|
||||
peratom value across the atoms in each chunk to produce a value per
|
||||
chunk. When used with the :doc:`compute chunk/spread/atom
|
||||
<compute_chunk_spread_atom>` command it can create peratom values that
|
||||
induce a new set of chunks with a second :doc:`compute chunk/atom
|
||||
<compute_chunk_atom>` command.
|
||||
chunk. When used with the :doc:`compute chunk/spread/atom <compute_chunk_spread_atom>` command it can
|
||||
create peratom values that induce a new set of chunks with a second
|
||||
:doc:`compute chunk/atom <compute_chunk_atom>` command.
|
||||
|
||||
Example calculations with chunks
|
||||
--------------------------------
|
||||
|
||||
@ -56,7 +56,7 @@ using a shell like Bash or Zsh.
|
||||
Visual Studio IDE with the bundled CMake or from the Windows command prompt using
|
||||
a separately installed CMake package, both using the native Microsoft Visual C++
|
||||
compilers and (optionally) the Microsoft MPI SDK. This tutorial, however, only
|
||||
covers unix-like command-line interfaces.
|
||||
covers unix-like command line interfaces.
|
||||
|
||||
We also assume that you have downloaded and unpacked a recent LAMMPS source code package
|
||||
or used Git to create a clone of the LAMMPS sources on your compilation machine.
|
||||
@ -277,7 +277,7 @@ Setting options
|
||||
---------------
|
||||
|
||||
Options that enable, disable or modify settings are modified by setting
|
||||
the value of CMake variables. This is done on the command-line with the
|
||||
the value of CMake variables. This is done on the command line with the
|
||||
*-D* flag in the format ``-D VARIABLE=value``, e.g. ``-D
|
||||
CMAKE_BUILD_TYPE=Release`` or ``-D BUILD_MPI=on``. There is one quirk:
|
||||
when used before the CMake directory, there may be a space between the
|
||||
@ -348,7 +348,7 @@ Some common LAMMPS specific variables
|
||||
* - ``FFT``
|
||||
- select which FFT library to use: ``FFTW3``, ``MKL``, ``KISS`` (default, unless FFTW3 is found)
|
||||
* - ``FFT_KOKKOS``
|
||||
- select which FFT library to use in Kokkos-enabled styles: ``FFTW3``, ``MKL``, ``HIPFFT``, ``CUFFT``, ``MKL_GPU``, ``KISS`` (default)
|
||||
- select which FFT library to use in Kokkos-enabled styles: ``FFTW3``, ``MKL``, ``HIPFFT``, ``CUFFT``, ``KISS`` (default)
|
||||
* - ``FFT_SINGLE``
|
||||
- select whether to use single precision FFTs (default: ``off``)
|
||||
* - ``WITH_JPEG``
|
||||
@ -376,7 +376,7 @@ Using presets
|
||||
-------------
|
||||
|
||||
Since LAMMPS has a lot of optional features and packages, specifying
|
||||
them all on the command-line can be tedious. Or when selecting a
|
||||
them all on the command line can be tedious. Or when selecting a
|
||||
different compiler toolchain, multiple options have to be changed
|
||||
consistently and that is rather error prone. Or when enabling certain
|
||||
packages, they require consistent settings to be operated in a
|
||||
@ -384,7 +384,7 @@ particular mode. For this purpose, we are providing a selection of
|
||||
"preset files" for CMake in the folder ``cmake/presets``. They
|
||||
represent a way to pre-load or override the CMake configuration cache by
|
||||
setting or changing CMake variables. Preset files are loaded using the
|
||||
*-C* command-line flag. You can combine loading multiple preset files or
|
||||
*-C* command line flag. You can combine loading multiple preset files or
|
||||
change some variables later with additional *-D* flags. A few examples:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
@ -163,7 +163,7 @@ After everything is done, add the files to the branch and commit them:
|
||||
*git rm*, *git mv* for adding, removing, renaming individual files,
|
||||
respectively, and then *git commit* to finalize the commit.
|
||||
Carefully check all pending changes with *git status* before
|
||||
committing them. If you find doing this on the command-line too
|
||||
committing them. If you find doing this on the command line too
|
||||
tedious, consider using a GUI, for example the one included in git
|
||||
distributions written in Tk, i.e. use *git gui* (on some Linux
|
||||
distributions it may be required to install an additional package to
|
||||
@ -487,10 +487,10 @@ updates are back-ported from the *develop* branch to the *maintenance*
|
||||
branch and occasionally merged to *stable* as an update release.
|
||||
|
||||
Furthermore, the naming of the release tags now follow the pattern
|
||||
"patch\_<Day><Month><Year>" to simplify comparisons between releases.
|
||||
For stable releases additional "stable\_<Day><Month><Year>" tags are
|
||||
"patch_<Day><Month><Year>" to simplify comparisons between releases.
|
||||
For stable releases additional "stable_<Day><Month><Year>" tags are
|
||||
applied and update releases are tagged with
|
||||
"stable\_<Day><Month><Year>\_update<Number>", Finally, all releases and
|
||||
"stable_<Day><Month><Year>_update<Number>", Finally, all releases and
|
||||
submissions are subject to automatic testing and code checks to make
|
||||
sure they compile with a variety of compilers and popular operating
|
||||
systems. Some unit and regression testing is applied as well.
|
||||
|
||||
@ -1,47 +1,45 @@
|
||||
Using LAMMPS-GUI
|
||||
================
|
||||
|
||||
This document describes **LAMMPS-GUI version 1.6**.
|
||||
.. 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 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*,
|
||||
display visualizations created with the :doc:`dump image command
|
||||
<dump_image>`, can launch the online LAMMPS documentation for known
|
||||
LAMMPS commands and styles, and directly integrates with a collection
|
||||
of LAMMPS tutorials (:ref:`Gravelle1 <Gravelle1>`).
|
||||
|
||||
This document describes **LAMMPS-GUI version 1.7**.
|
||||
|
||||
-----
|
||||
|
||||
LAMMPS-GUI is a graphical text editor customized for editing LAMMPS
|
||||
input files that 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. It can retrieve and display information from LAMMPS
|
||||
while it is running, display visualizations created with the :doc:`dump
|
||||
image command <dump_image>`, and is adapted specifically for editing
|
||||
LAMMPS input files through text completion and reformatting, and linking
|
||||
to the online LAMMPS documentation for known LAMMPS commands and styles.
|
||||
.. contents::
|
||||
|
||||
.. note::
|
||||
----
|
||||
|
||||
Pre-compiled, ready-to-use LAMMPS-GUI executables for Linux x86\_64
|
||||
(Ubuntu 20.04LTS or later and compatible), macOS (version 11 aka Big
|
||||
Sur or later), and Windows (version 10 or later) :ref:`are available
|
||||
<lammps_gui_install>` for download. Non-MPI LAMMPS executables (as
|
||||
``lmp``) for running LAMMPS from the command-line and :doc:`some
|
||||
LAMMPS tools <Tools>` compiled executables are also included.
|
||||
Also, the pre-compiled LAMMPS-GUI packages include the WHAM executables
|
||||
from http://membrane.urmc.rochester.edu/content/wham/ for use with
|
||||
LAMMPS tutorials.
|
||||
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:
|
||||
|
||||
The source code for LAMMPS-GUI is included in the LAMMPS source code
|
||||
distribution and can be found in the ``tools/lammps-gui`` folder. It
|
||||
can be compiled alongside LAMMPS when :doc:`compiling with CMake
|
||||
<Build_cmake>`.
|
||||
- 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.
|
||||
|
||||
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:
|
||||
|
||||
- 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
|
||||
|
||||
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.
|
||||
@ -52,37 +50,69 @@ 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 can their tutorial materials can
|
||||
be downloaded and loaded 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 out at runtime
|
||||
- automatic plotting of thermodynamics data at runtime
|
||||
- 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
|
||||
|
||||
The following text provides a detailed tour of the features and
|
||||
.. admonition:: Download LAMMPS-GUI for your platform
|
||||
:class: Hint
|
||||
|
||||
Pre-compiled, ready-to-use LAMMPS-GUI executables for Linux x86\_64
|
||||
(Ubuntu 20.04LTS or later and compatible), macOS (version 11 aka Big
|
||||
Sur or later), and Windows (version 10 or later) :ref:`are available
|
||||
<lammps_gui_install>` for download. Non-MPI LAMMPS executables (as
|
||||
``lmp``) for running LAMMPS from the command-line and :doc:`some
|
||||
LAMMPS tools <Tools>` compiled executables are also included. Also,
|
||||
the pre-compiled LAMMPS-GUI packages include the WHAM executables
|
||||
from http://membrane.urmc.rochester.edu/content/wham/ for use with
|
||||
LAMMPS tutorials documented in this paper (:ref:`Gravelle1
|
||||
<Gravelle1>`).
|
||||
|
||||
The source code for LAMMPS-GUI is included in the LAMMPS source code
|
||||
distribution and can be found in the ``tools/lammps-gui`` folder. It
|
||||
can be compiled alongside LAMMPS when :doc:`compiling with CMake
|
||||
<Build_cmake>`.
|
||||
|
||||
-----
|
||||
|
||||
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.
|
||||
@ -92,9 +122,12 @@ channels as for LAMMPS itself <Errors_bugs>` for that purpose.
|
||||
Installing Pre-compiled LAMMPS-GUI Packages
|
||||
-------------------------------------------
|
||||
|
||||
LAMMPS-GUI is available as pre-compiled binary packages for Linux
|
||||
x86\_64, macOS 11 and later, and Windows 10 and later. Alternately, it
|
||||
can be compiled from source.
|
||||
LAMMPS-GUI is available for download as pre-compiled binary packages for
|
||||
Linux x86\_64 (Ubuntu 20.04LTS or later and compatible), macOS (version
|
||||
11 aka Big Sur or later), and Windows (version 10 or later) from the
|
||||
`LAMMPS release pages on GitHub <https://github.com/lammps/lammps/releases/>`_.
|
||||
A backup download location is at https://download.lammps.org/static/
|
||||
Alternately, LAMMPS-GUI can be compiled from source when building LAMMPS.
|
||||
|
||||
Windows 10 and later
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
@ -216,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
|
||||
@ -226,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
|
||||
@ -334,27 +394,28 @@ 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 and a fourth order polynomial is fit 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.
|
||||
|
||||
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 "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.
|
||||
|
||||
The window title shows the current run number that this chart window
|
||||
corresponds to. Same as for the *Output* window, the chart window is
|
||||
@ -382,6 +443,40 @@ here you get the compounded data set starting with the last change of
|
||||
output fields or timestep setting, while the export from the log will
|
||||
contain *all* YAML output but *segmented* into individual runs.
|
||||
|
||||
The *Preferences* dialog has a *Charts* tab, where you can configure
|
||||
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
|
||||
----------------
|
||||
|
||||
@ -461,11 +556,11 @@ correspond to (via their mass) and then colorize them in the image and
|
||||
set their atom diameters accordingly. If this is not possible, for
|
||||
instance when using reduced (= 'lj') :doc:`units <units>`, then
|
||||
LAMMPS-GUI will check the current pair style and if it is a
|
||||
Lennard-Jones type potential, it will extract the *sigma* parameter
|
||||
for each atom type and assign atom diameters from those numbers.
|
||||
For cases where atom diameters are not auto-detected, the *Atom size* field
|
||||
can be edited and a suitable value set manually. The default value
|
||||
is inferred from the x-direction lattice spacing.
|
||||
Lennard-Jones type potential, it will extract the *sigma* parameter for
|
||||
each atom type and assign atom diameters from those numbers. For cases
|
||||
where atom diameters are not auto-detected, the *Atom size* field can be
|
||||
edited and a suitable value set manually. The default value is inferred
|
||||
from the x-direction lattice spacing.
|
||||
|
||||
If elements cannot be detected the default sequence of colors of the
|
||||
:doc:`dump image <dump_image>` command is assigned to the different atom
|
||||
@ -480,22 +575,31 @@ types.
|
||||
|gui-image1| |gui-image2|
|
||||
|
||||
The default image size, some default image quality settings, the view
|
||||
style and some colors can be changed in the *Preferences* dialog
|
||||
window. From the image viewer window further adjustments can be made:
|
||||
actual image size, high-quality (SSAO) rendering, anti-aliasing, view
|
||||
style, display of box or axes, zoom factor. The view of the system can
|
||||
be rotated horizontally and vertically. It is also possible to only
|
||||
display the atoms within a group defined in the input script (default is
|
||||
"all"). The image can also be re-centered on the center of mass of the
|
||||
selected group. After each change, the image is rendered again and the
|
||||
display updated. The small palette icon on the top left is colored
|
||||
while LAMMPS is running to render the new image; it is grayed out when
|
||||
LAMMPS is finished. When there are many atoms to render and high
|
||||
quality images with anti-aliasing are requested, re-rendering may take
|
||||
several seconds. From the *File* menu of the image window, the
|
||||
current image can be saved to a file (keyboard shortcut `Ctrl-S`) or
|
||||
copied to the clipboard (keyboard shortcut `Ctrl-C`) for pasting the
|
||||
image into another application.
|
||||
style and some colors can be changed in the *Preferences* dialog window.
|
||||
From the image viewer window further adjustments can be made: actual
|
||||
image size, high-quality (SSAO) rendering, anti-aliasing, view style,
|
||||
display of box or axes, zoom factor. The view of the system can be
|
||||
rotated horizontally and vertically.
|
||||
|
||||
It is also possible to display only the atoms within a :doc:`group
|
||||
defined in the input script <group>` (default is "all"). The available
|
||||
groups can be selected from the drop down list next to the "Group:"
|
||||
label. Similarly, if there are :doc:`molecules defined in the input
|
||||
<molecule>`, it is possible to select one of them (default is "none")
|
||||
and visualize it (it will be shown at the center of the simulation box).
|
||||
While a molecule is selected, the group selection is disabled. It can
|
||||
be restored by selecting the molecule "none".
|
||||
|
||||
The image can also be re-centered on the center of mass of the selected
|
||||
group. After each change, the image is rendered again and the display
|
||||
updated. The small palette icon on the top left is colored while LAMMPS
|
||||
is running to render the new image; it is grayed out when LAMMPS is
|
||||
finished. When there are many atoms to render and high quality images
|
||||
with anti-aliasing are requested, re-rendering may take several seconds.
|
||||
From the *File* menu of the image window, the current image can be saved
|
||||
to a file (keyboard shortcut `Ctrl-S`) or copied to the clipboard
|
||||
(keyboard shortcut `Ctrl-C`) for pasting the image into another
|
||||
application.
|
||||
|
||||
From the *File* menu it is also possible to copy the current
|
||||
:doc:`dump image <dump_image>` and :doc:`dump_modify <dump_image>`
|
||||
@ -604,13 +708,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
|
||||
----
|
||||
@ -682,6 +800,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
|
||||
@ -720,6 +844,26 @@ output, charts, slide show, variables, or snapshot images. The
|
||||
default settings for their visibility can be changed in the
|
||||
*Preferences* dialog.
|
||||
|
||||
Tutorials
|
||||
^^^^^^^^^
|
||||
|
||||
The *Tutorials* menu is to support the set of LAMMPS tutorials for
|
||||
beginners and intermediate LAMMPS users documented in (:ref:`Gravelle1
|
||||
<Gravelle1>`). From the drop down menu you can select which of the
|
||||
eight currently available tutorial sessions you want to begin. This
|
||||
opens a 'wizard' dialog where you can choose in which folder you want to
|
||||
work, whether you want that folder to be wiped from *any* files, whether
|
||||
you want to download the solutions files (which can be large) to a
|
||||
``solution`` sub-folder, and whether you want the corresponding
|
||||
tutorial's online version opened in your web browser. The dialog will
|
||||
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
|
||||
^^^^^
|
||||
|
||||
@ -783,18 +927,21 @@ look of LAMMPS-GUI. The settings are grouped and each group is
|
||||
displayed within a tab.
|
||||
|
||||
.. |guiprefs1| image:: JPG/lammps-gui-prefs-general.png
|
||||
:width: 24%
|
||||
:width: 19%
|
||||
|
||||
.. |guiprefs2| image:: JPG/lammps-gui-prefs-accel.png
|
||||
:width: 24%
|
||||
:width: 19%
|
||||
|
||||
.. |guiprefs3| image:: JPG/lammps-gui-prefs-image.png
|
||||
:width: 24%
|
||||
:width: 19%
|
||||
|
||||
.. |guiprefs4| image:: JPG/lammps-gui-prefs-editor.png
|
||||
:width: 24%
|
||||
:width: 19%
|
||||
|
||||
|guiprefs1| |guiprefs2| |guiprefs3| |guiprefs4|
|
||||
.. |guiprefs5| image:: JPG/lammps-gui-prefs-charts.png
|
||||
:width: 19%
|
||||
|
||||
|guiprefs1| |guiprefs2| |guiprefs3| |guiprefs4| |guiprefs5|
|
||||
|
||||
General Settings:
|
||||
^^^^^^^^^^^^^^^^^
|
||||
@ -823,13 +970,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.
|
||||
@ -848,16 +994,36 @@ General Settings:
|
||||
the plots in the *Charts* window in milliseconds. The default is to
|
||||
redraw the plots every 500 milliseconds. This is just for the drawing,
|
||||
data collection is managed with the previous setting.
|
||||
- *HTTPS proxy setting:* Allows to enter a URL for an HTTPS proxy. This
|
||||
may be needed when the LAMMPS input contains :doc:`geturl commands <geturl>`
|
||||
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:
|
||||
^^^^^^^^^^^^^^^
|
||||
@ -884,7 +1050,7 @@ lists to select the background and box colors.
|
||||
Editor Settings:
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
This tab allows tweaking settings of the editor window. Specifically
|
||||
This tab allows tweaking settings of the editor window. Specifically,
|
||||
the amount of padding to be added to LAMMPS commands, types or type
|
||||
ranges, IDs (e.g. for fixes), and names (e.g. for groups). The value
|
||||
set is the minimum width for the text element and it can be chosen in
|
||||
@ -896,6 +1062,16 @@ the completion pop-up window, and whether auto-save mode is enabled.
|
||||
In auto-save mode the editor buffer is saved before a run or before
|
||||
exiting LAMMPS-GUI.
|
||||
|
||||
Charts Settings:
|
||||
----------------
|
||||
|
||||
This tab allows tweaking settings of the *Charts* window. Specifically,
|
||||
one can set the default chart title (if the title contains '%f' it will
|
||||
be replaced with the name of the current input file), one can select
|
||||
whether by default the raw data, the smoothed data or both will be
|
||||
plotted, one can set the colors for the two lines, the default smoothing
|
||||
parameters, and the default size of the chart graph in pixels.
|
||||
|
||||
-----------
|
||||
|
||||
Keyboard Shortcuts
|
||||
@ -976,10 +1152,21 @@ available (On macOS use the Command key instead of Ctrl/Control).
|
||||
- Ctrl+Shift+T
|
||||
- LAMMPS Tutorial
|
||||
|
||||
Further editing keybindings `are documented with the Qt documentation
|
||||
Further keybindings of the editor window `are documented with the Qt
|
||||
documentation
|
||||
<https://doc.qt.io/qt-5/qplaintextedit.html#editing-key-bindings>`_. In
|
||||
case of conflicts the list above takes precedence.
|
||||
|
||||
All other windows only support a subset of keyboard shortcuts listed
|
||||
above. Typically, the shortcuts `Ctrl-/` (Stop Run), `Ctrl-W` (Close
|
||||
Window), and `Ctrl-Q` (Quit Application) are supported.
|
||||
|
||||
-------------
|
||||
|
||||
.. _Gravelle1:
|
||||
|
||||
**(Gravelle1)** Gravelle, Gissinger, Kohlmeyer, `arXiv:2503.14020 \[physics.comp-ph\] <https://doi.org/10.48550/arXiv.2503.14020>`_ (2025)
|
||||
|
||||
.. _Gravelle2:
|
||||
|
||||
**(Gravelle2)** Gravelle https://lammpstutorials.github.io/
|
||||
|
||||
@ -2,18 +2,14 @@ Moltemplate Tutorial
|
||||
====================
|
||||
|
||||
In this tutorial, we are going to use the tool :ref:`Moltemplate
|
||||
<Moltemplate1>` from https://moltemplate.org/ to set up a classical
|
||||
molecular dynamic simulation using the :ref:`OPLS-AA force field
|
||||
<oplsaa2024>`. The first task is to describe an organic compound and
|
||||
create a complete input deck for LAMMPS. The second task is to use
|
||||
moltemplate to build a polymer. The third task is to map the OPLS-AA
|
||||
force field to a molecular sample created with an external tool,
|
||||
e.g. PACKMOL, and exported as a PDB file. The files used in this
|
||||
tutorial can be found in the ``tools/moltemplate/tutorial-files`` folder
|
||||
of the LAMMPS source code distribution.
|
||||
|
||||
Many more examples can be found here: https://moltemplate.org/examples.html
|
||||
|
||||
<moltemplate>` to set up a classical molecular dynamic simulation using
|
||||
the :ref:`OPLS-AA force field <OPLSAA96>`. The first
|
||||
task is to describe an organic compound and create a complete input deck
|
||||
for LAMMPS. The second task is to map the OPLS-AA force field to a
|
||||
molecular sample created with an external tool, e.g. PACKMOL, and
|
||||
exported as a PDB file. The files used in this tutorial can be found
|
||||
in the ``tools/moltemplate/tutorial-files`` folder of the LAMMPS
|
||||
source code distribution.
|
||||
|
||||
Simulating an organic solvent
|
||||
"""""""""""""""""""""""""""""
|
||||
@ -21,13 +17,14 @@ Simulating an organic solvent
|
||||
This example aims to create a cubic box of the organic solvent
|
||||
formamide.
|
||||
|
||||
The first step is to create a molecular topology in the LAMMPS-template
|
||||
(LT) file format representing a single molecule, which will be
|
||||
stored in a Moltemplate object called ``_FAM inherits OPLSAA {}``.
|
||||
The first step is to create a molecular topology in the
|
||||
LAMMPS-template (LT) file format representing a single molecule, which
|
||||
will be stored in a Moltemplate object called ``_FAM inherits OPLSAA {}``.
|
||||
This command states that the object ``_FAM`` is based on an existing
|
||||
object called ``OPLSAA``, which contains OPLS-AA parameters, atom type
|
||||
definitions, partial charges, masses and bond-angle rules for many organic
|
||||
and biological compounds.
|
||||
|
||||
The atomic structure is the starting point to populate the command
|
||||
``write('Data Atoms') {}``, which will write the ``Atoms`` section in the
|
||||
LAMMPS data file. The OPLS-AA force field uses the ``atom_style full``,
|
||||
@ -39,23 +36,21 @@ to the ``molID``, except that the same variable is used for the whole
|
||||
molecule. The atom types are assigned using ``@``-type variables. The
|
||||
assignment of atom types (e.g. ``@atom:177``, ``@atom:178``) is done using
|
||||
the OPLS-AA atom types defined in the "In Charges" section of the file
|
||||
``oplsaa2024.lt``, looking for a reasonable match with the description of the atom.
|
||||
``oplsaa.lt``, looking for a reasonable match with the description of the atom.
|
||||
The resulting file (``formamide.lt``) follows:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
import /usr/local/moltemplate/moltemplate/force_fields/oplsaa2024.lt # defines OPLSAA
|
||||
|
||||
_FAM inherits OPLSAA {
|
||||
|
||||
# atomID molID atomType charge coordX coordY coordZ
|
||||
write('Data Atoms') {
|
||||
$atom:C00 $mol @atom:235 0.00 0.100 0.490 0.0
|
||||
$atom:O01 $mol @atom:236 0.00 1.091 -0.250 0.0
|
||||
$atom:N02 $mol @atom:237 0.00 -1.121 -0.181 0.0
|
||||
$atom:H03 $mol @atom:240 0.00 -2.013 0.272 0.0
|
||||
$atom:H04 $mol @atom:240 0.00 -1.056 -1.190 0.0
|
||||
$atom:H05 $mol @atom:279 0.00 0.144 1.570 0.0
|
||||
$atom:C00 $mol @atom:177 0.00 0.100 0.490 0.0
|
||||
$atom:O01 $mol @atom:178 0.00 1.091 -0.250 0.0
|
||||
$atom:N02 $mol @atom:179 0.00 -1.121 -0.181 0.0
|
||||
$atom:H03 $mol @atom:182 0.00 -2.013 0.272 0.0
|
||||
$atom:H04 $mol @atom:182 0.00 -1.056 -1.190 0.0
|
||||
$atom:H05 $mol @atom:221 0.00 0.144 1.570 0.0
|
||||
}
|
||||
|
||||
# A list of the bonds in the molecule:
|
||||
@ -69,17 +64,16 @@ The resulting file (``formamide.lt``) follows:
|
||||
}
|
||||
}
|
||||
|
||||
You don't have to specify the charge in this example because the OPLSAA
|
||||
force-field assigns charge according to the atom type. (This is not true
|
||||
when using other force fields.) A "Data Bond List" section is needed as
|
||||
the atom type will determine the bond type. The other bonded interactions
|
||||
(e.g. angles, dihedrals, and impropers) will be automatically generated by
|
||||
You don't have to specify the charge in this example because they will
|
||||
be assigned according to the atom type. Analogously, only a
|
||||
"Data Bond List" section is needed as the atom type will determine the
|
||||
bond type. The other bonded interactions (e.g. angles,
|
||||
dihedrals, and impropers) will be automatically generated by
|
||||
Moltemplate.
|
||||
|
||||
If the simulation is not charge-neutral, or Moltemplate complains that
|
||||
you have missing bond, angle, or dihedral types, this probably means that
|
||||
at least one of your atom types is incorrect (or that perhaps there is no
|
||||
suitable atom type currently defined in the ``oplsaa2024.lt`` file).
|
||||
If the simulation is non-neutral, or Moltemplate complains that you have
|
||||
missing bond, angle, or dihedral types, this means at least one of your
|
||||
atom types is incorrect.
|
||||
|
||||
The second step is to create a master file with instructions to build a
|
||||
starting structure and the LAMMPS commands to run an NPT simulation. The
|
||||
@ -87,9 +81,11 @@ master file (``solv_01.lt``) follows:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
import formamide.lt # Defines "_FAM" and OPLSAA
|
||||
# Import the force field.
|
||||
import /usr/local/moltemplate/moltemplate/force_fields/oplsaa.lt
|
||||
import formamide.lt # after oplsaa.lt, as it depends on it.
|
||||
|
||||
# Distribute the molecules on a 5x5x5 cubic grid with spacing 4.6
|
||||
# Create the input sample.
|
||||
solv = new _FAM [5].move( 4.6, 0, 0)
|
||||
[5].move( 0, 4.6, 0)
|
||||
[5].move( 0, 0, 4.6)
|
||||
@ -102,11 +98,8 @@ master file (``solv_01.lt``) follows:
|
||||
-11.5 11.5 zlo zhi
|
||||
}
|
||||
|
||||
# Note: The lines below in the "In Run" section are often omitted.
|
||||
|
||||
write_once("In Run"){
|
||||
# Create an input deck for LAMMPS.
|
||||
# Run an NPT simulation.
|
||||
# Create an input deck for LAMMPS.
|
||||
write_once("In Init"){
|
||||
# Input variables.
|
||||
variable run string solv_01 # output name
|
||||
variable ts equal 1 # timestep
|
||||
@ -116,6 +109,12 @@ master file (``solv_01.lt``) follows:
|
||||
variable equi equal 5000 # Equilibration steps
|
||||
variable prod equal 30000 # Production steps
|
||||
|
||||
# PBC (set them before the creation of the box).
|
||||
boundary p p p
|
||||
}
|
||||
|
||||
# Run an NPT simulation.
|
||||
write_once("In Run"){
|
||||
# Derived variables.
|
||||
variable tcouple equal \$\{ts\}*100
|
||||
variable pcouple equal \$\{ts\}*1000
|
||||
@ -144,7 +143,7 @@ master file (``solv_01.lt``) follows:
|
||||
unfix NPT
|
||||
}
|
||||
|
||||
The first two commands insert the content of files ``oplsaa2024.lt`` and
|
||||
The first two commands insert the content of files ``oplsaa.lt`` and
|
||||
``formamide.lt`` into the master file. At this point, we can use the
|
||||
command ``solv = new _FAM [N]`` to create N copies of a molecule of type
|
||||
``_FAM``. In this case, we create an array of 5*5*5 molecules on a cubic
|
||||
@ -154,37 +153,21 @@ the sample was created from scratch, we also specify the simulation box
|
||||
size in the "Data Boundary" section.
|
||||
|
||||
The LAMMPS setting for the force field are specified in the file
|
||||
``oplsaa2024.lt`` and are written automatically in the input deck. We also
|
||||
``oplsaa.lt`` and are written automatically in the input deck. We also
|
||||
specify the boundary conditions and a set of variables in
|
||||
the "In Init" section.
|
||||
|
||||
The remaining commands to run an NPT simulation
|
||||
the "In Init" section. The remaining commands to run an NPT simulation
|
||||
are written in the "In Run" section. Note that in this script, LAMMPS
|
||||
variables are protected with the escape character ``\`` to distinguish
|
||||
them from Moltemplate variables, e.g. ``\$\{run\}`` is a LAMMPS
|
||||
variable that is written in the input deck as ``${run}``.
|
||||
|
||||
(Note: Moltemplate can be slow to run, so you need to change you run
|
||||
settings frequently, I recommended moving those commands (from "In Run")
|
||||
out of your .lt files and into a separate file. Moltemplate creates a
|
||||
file named ``run.in.EXAMPLE`` for this purpose. You can put your run
|
||||
settings and fixes that file and then invoke LAMMPS using
|
||||
``mpirun -np 4 lmp -in run.in.EXAMPLE`` instead.)
|
||||
|
||||
|
||||
Compile the master file with:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
moltemplate.sh solv_01.lt
|
||||
cleanup_moltemplate.sh # <-- optional: see below
|
||||
moltemplate.sh -overlay-all solv_01.lt
|
||||
|
||||
(Note: The optional "cleanup_moltemplate.sh" command deletes
|
||||
unused atom types, which sometimes makes LAMMPS run faster.
|
||||
But it does not work with many-body pair styles or dreiding-style h-bonds.
|
||||
Fortunately most force fields, including OPLSAA, don't use those features.)
|
||||
|
||||
Then execute the simulation with the following:
|
||||
And execute the simulation with the following:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
@ -197,116 +180,15 @@ Then execute the simulation with the following:
|
||||
Snapshot of the sample at the beginning and end of the simulation.
|
||||
Rendered with Ovito.
|
||||
|
||||
|
||||
Building a simple polymer
|
||||
"""""""""""""""""""""""""
|
||||
Moltemplate is particularly useful for building polymers (and other molecules
|
||||
with sub-units). As an simple example, consider butane:
|
||||
|
||||
.. figure:: JPG/butane.jpg
|
||||
|
||||
The ``butane.lt`` file below defines Butane as a polymer containing
|
||||
4 monomers (of type ``CH3``, ``CH2``, ``CH2``, ``CH3``).
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
import /usr/local/moltemplate/moltemplate/force_fields/oplsaa2024.lt # defines OPLSAA
|
||||
|
||||
CH3 inherits OPLSAA {
|
||||
|
||||
# atomID molID atomType charge coordX coordY coordZ
|
||||
write("Data Atoms") {
|
||||
$atom:c $mol:... @atom:54 0.0 0.000000 0.4431163 0.000000
|
||||
$atom:h1 $mol:... @atom:60 0.0 0.000000 1.0741603 0.892431
|
||||
$atom:h2 $mol:... @atom:60 0.0 0.000000 1.0741603 -0.892431
|
||||
$atom:h3 $mol:... @atom:60 0.0 -0.892431 -0.1879277 0.000000
|
||||
}
|
||||
# (Using "$mol:..." indicates this object ("CH3") is part of a larger
|
||||
# molecule. Moltemplate will share the molecule-ID with that molecule.)
|
||||
|
||||
# A list of the bonds within the "CH3" molecular sub-unit:
|
||||
# BondID AtomID1 AtomID2
|
||||
write('Data Bond List') {
|
||||
$bond:ch1 $atom:c $atom:h1
|
||||
$bond:ch2 $atom:c $atom:h2
|
||||
$bond:ch3 $atom:c $atom:h3
|
||||
}
|
||||
}
|
||||
|
||||
CH2 inherits OPLSAA {
|
||||
|
||||
# atomID molID atomType charge coordX coordY coordZ
|
||||
write("Data Atoms") {
|
||||
$atom:c $mol:... @atom:57 0.0 0.000000 0.4431163 0.000000
|
||||
$atom:h1 $mol:... @atom:60 0.0 0.000000 1.0741603 0.892431
|
||||
$atom:h2 $mol:... @atom:60 0.0 0.000000 1.0741603 -0.892431
|
||||
}
|
||||
|
||||
# A list of the bonds within the "CH2" molecular sub-unit:
|
||||
# BondID AtomID1 AtomID2
|
||||
write('Data Bond List') {
|
||||
$bond:ch1 $atom:c $atom:h1
|
||||
$bond:ch2 $atom:c $atom:h2
|
||||
}
|
||||
}
|
||||
|
||||
Butane inherits OPLSAA {
|
||||
|
||||
create_var {$mol} # optional:force all monomers to share the same molecule-ID
|
||||
|
||||
# - Create 4 monomers
|
||||
# - Move them along the X axis using ".move()",
|
||||
# - Rotate them 180 degrees with respect to the previous monomer
|
||||
monomer1 = new CH3
|
||||
monomer2 = new CH2.rot(180,1,0,0).move(1.2533223,0,0)
|
||||
monomer3 = new CH2.move(2.5066446,0,0)
|
||||
monomer4 = new CH3.rot(180,0,0,1).move(3.7599669,0,0)
|
||||
|
||||
# A list of the bonds connecting different monomers together:
|
||||
write('Data Bond List') {
|
||||
$bond:b1 $atom:monomer1/c $atom:monomer2/c
|
||||
$bond:b2 $atom:monomer2/c $atom:monomer3/c
|
||||
$bond:b3 $atom:monomer3/c $atom:monomer4/c
|
||||
}
|
||||
}
|
||||
|
||||
Again, you don't have to specify the charge in this example because OPLSAA
|
||||
assigns charges according to the atom type.
|
||||
|
||||
This ``Butane`` object is a molecule which can be used anywhere other molecules
|
||||
can be used. (You can arrange ``Butane`` molecules on a lattice, as we did previously.
|
||||
You can also modify individual butane molecules by adding or deleting atoms or bonds.
|
||||
You can add bonds between specific butane molecules or use ``Butane`` as a
|
||||
sub-unit to define even larger molecules. See the moltemplate manual for details.)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
How to build a complex polymer
|
||||
""""""""""""""""""""""""""""""""""""""""""
|
||||
A similar procedure can be used to create more complicated polymers,
|
||||
such as the NIPAM polymer example shown below. For details, see:
|
||||
|
||||
https://github.com/jewettaij/moltemplate/tree/master/examples/all_atom/force_field_OPLSAA/NIPAM_polymer+water+ions
|
||||
|
||||
|
||||
|
||||
|
||||
Mapping an existing structure
|
||||
"""""""""""""""""""""""""""""
|
||||
|
||||
Another helpful way to use Moltemplate is mapping an existing molecular
|
||||
sample to a force field. This is useful when a complex sample is assembled
|
||||
from different simulations or created with specialized software (e.g. PACKMOL).
|
||||
(Note: The previous link shows how to build this entire system from scratch
|
||||
using only moltemplate. However here we will assume instead that we obtained
|
||||
a PDB file for this system using PACKMOL.)
|
||||
|
||||
As in the previous examples, all molecular species in the sample
|
||||
are defined using single-molecule Moltemplate objects.
|
||||
For this example, we use a short polymer in a box containing
|
||||
sample to a force field. This is useful when a complex sample is
|
||||
assembled from different simulations or created with specialized
|
||||
software (e.g. PACKMOL). As in the previous example, all molecular
|
||||
species in the sample must be defined using single-molecule Moltemplate
|
||||
objects. For this example, we use a short polymer in a box containing
|
||||
water molecules and ions in the PDB file ``model.pdb``.
|
||||
|
||||
It is essential to understand that the order of atoms in the PDB file
|
||||
@ -364,25 +246,25 @@ The resulting master LT file defining short annealing at a fixed volume
|
||||
.. code-block:: bash
|
||||
|
||||
# Use the OPLS-AA force field for all species.
|
||||
import /usr/local/moltemplate/moltemplate/force_fields/oplsaa2024.lt
|
||||
import /usr/local/moltemplate/moltemplate/force_fields/oplsaa.lt
|
||||
import PolyNIPAM.lt
|
||||
|
||||
# Define the SPC water and ions as in the OPLS-AA
|
||||
Ca inherits OPLSAA {
|
||||
write("Data Atoms"){
|
||||
$atom:a1 $mol:. @atom:412 0.0 0.00000 0.00000 0.000000
|
||||
$atom:a1 $mol:. @atom:354 0.0 0.00000 0.00000 0.000000
|
||||
}
|
||||
}
|
||||
Cl inherits OPLSAA {
|
||||
write("Data Atoms"){
|
||||
$atom:a1 $mol:. @atom:401 0.0 0.00000 0.00000 0.000000
|
||||
$atom:a1 $mol:. @atom:344 0.0 0.00000 0.00000 0.000000
|
||||
}
|
||||
}
|
||||
SPC inherits OPLSAA {
|
||||
write("Data Atoms"){
|
||||
$atom:O $mol:. @atom:9991 0. 0.0000000 0.00000 0.0000000
|
||||
$atom:H1 $mol:. @atom:9990 0. 0.8164904 0.00000 0.5773590
|
||||
$atom:H2 $mol:. @atom:9990 0. -0.8164904 0.00000 0.5773590
|
||||
$atom:O $mol:. @atom:76 0. 0.0000000 0.00000 0.000000
|
||||
$atom:H1 $mol:. @atom:77 0. 0.8164904 0.00000 0.5773590
|
||||
$atom:H2 $mol:. @atom:77 0. -0.8164904 0.00000 0.5773590
|
||||
}
|
||||
write("Data Bond List") {
|
||||
$bond:OH1 $atom:O $atom:H1
|
||||
@ -403,15 +285,8 @@ The resulting master LT file defining short annealing at a fixed volume
|
||||
0 26 zlo zhi
|
||||
}
|
||||
|
||||
# Define the input variables.
|
||||
write_once("In Init"){
|
||||
boundary p p p # "p p p" is the default. This line is optional.
|
||||
neighbor 3 bin # (This line is also optional in this example.)
|
||||
}
|
||||
|
||||
# Note: The lines below in the "In Run" section are often omitted.
|
||||
|
||||
# Run an NVT simulation.
|
||||
write_once("In Run"){
|
||||
# Input variables.
|
||||
variable run string sample01 # output name
|
||||
variable ts equal 2 # timestep
|
||||
@ -419,6 +294,13 @@ The resulting master LT file defining short annealing at a fixed volume
|
||||
variable p equal 1. # equilibrium pressure
|
||||
variable equi equal 30000 # equilibration steps
|
||||
|
||||
# PBC (set them before the creation of the box).
|
||||
boundary p p p
|
||||
neighbor 3 bin
|
||||
}
|
||||
|
||||
# Run an NVT simulation.
|
||||
write_once("In Run"){
|
||||
# Set the output.
|
||||
thermo 1000
|
||||
thermo_style custom step etotal evdwl ecoul elong ebond eangle &
|
||||
@ -432,8 +314,8 @@ The resulting master LT file defining short annealing at a fixed volume
|
||||
write_data \$\{run\}.min
|
||||
|
||||
# Set the constrains.
|
||||
group watergroup type @atom:9991 @atom:9990
|
||||
fix 0 watergroup shake 0.0001 10 0 b @bond:spcO_spcH a @angle:spcH_spcO_spcH
|
||||
group watergroup type @atom:76 @atom:77
|
||||
fix 0 watergroup shake 0.0001 10 0 b @bond:042_043 a @angle:043_042_043
|
||||
|
||||
# Short annealing.
|
||||
timestep \$\{ts\}
|
||||
@ -445,7 +327,7 @@ The resulting master LT file defining short annealing at a fixed volume
|
||||
|
||||
|
||||
In this example, the water model is SPC and it is defined in the
|
||||
``oplsaa2024.lt`` file with atom types ``@atom:9991`` and ``@atom:9990``. For
|
||||
``oplsaa.lt`` file with atom types ``@atom:76`` and ``@atom:77``. For
|
||||
water we also use the ``group`` and ``fix shake`` commands with
|
||||
Moltemplate ``@``-type variables, to ensure consistency with the
|
||||
numerical values assigned during compilation. To identify the bond and
|
||||
@ -454,20 +336,19 @@ are:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
replace{ @atom:9991 @atom:9991_bspcO_aspcO_dspcO_ispcO }
|
||||
replace{ @atom:9990 @atom:9990_bspcH_aspcH_dspcH_ispcH }
|
||||
replace{ @atom:76 @atom:76_b042_a042_d042_i042 }
|
||||
replace{ @atom:77 @atom:77_b043_a043_d043_i043 }
|
||||
|
||||
From which we can identify the following "Data Bonds By Type":
|
||||
``@bond:spcO_spcH @atom:*_bspcO*_a*_d*_i* @atom:*_bspcH*_a*_d*_i*``
|
||||
and "Data Angles By Type":
|
||||
``@angle:spcH_spcO_spcH @atom:*_b*_aspcH*_d*_i* @atom:*_b*_aspcO*_d*_i* @atom:*_b*_aspcH*_d*_i*``
|
||||
``@bond:042_043 @atom:*_b042*_a*_d*_i* @atom:*_b043*_a*_d*_i*`` and
|
||||
"Data Angles By Type": ``@angle:043_042_043 @atom:*_b*_a043*_d*_i*
|
||||
@atom:*_b*_a042*_d*_i* @atom:*_b*_a043*_d*_i*``
|
||||
|
||||
Compile the master file with:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
moltemplate.sh -pdb model.pdb sample01.lt
|
||||
cleanup_moltemplate.sh
|
||||
moltemplate.sh -overlay-all -pdb model.pdb sample01.lt
|
||||
|
||||
And execute the simulation with the following:
|
||||
|
||||
@ -482,13 +363,8 @@ And execute the simulation with the following:
|
||||
Sample visualized with Ovito loading the trajectory into the DATA
|
||||
file written after minimization.
|
||||
|
||||
|
||||
------------
|
||||
|
||||
.. _oplsaa2024:
|
||||
.. _OPLSAA96:
|
||||
|
||||
**(OPLS-AA)** Jorgensen, W.L., Ghahremanpour, M.M., Saar, A., Tirado-Rives, J., J. Phys. Chem. B, 128(1), 250-262 (2024).
|
||||
|
||||
.. _Moltemplate1:
|
||||
|
||||
**(Moltemplate)** Jewett et al., J. Mol. Biol., 433(11), 166841 (2021)
|
||||
**(OPLS-AA)** Jorgensen, Maxwell, Tirado-Rives, J Am Chem Soc, 118(45), 11225-11236 (1996).
|
||||
|
||||
@ -197,7 +197,7 @@ The LPS model has a force scalar state
|
||||
.. math::
|
||||
|
||||
\underline{t} = \frac{3K\theta}{m}\underline{\omega}\,\underline{x} +
|
||||
\alpha \underline{\omega}\,\underline{e}^\mathrm{d}, \qquad\qquad\textrm{(3)}
|
||||
\alpha \underline{\omega}\,\underline{e}^{\rm d}, \qquad\qquad\textrm{(3)}
|
||||
|
||||
with :math:`K` the bulk modulus and :math:`\alpha` related to the shear
|
||||
modulus :math:`G` as
|
||||
@ -242,14 +242,14 @@ scalar state are defined, respectively, as
|
||||
|
||||
.. math::
|
||||
|
||||
\underline{e}^\mathrm{i}=\frac{\theta \underline{x}}{3}, \qquad
|
||||
\underline{e}^\mathrm{d} = \underline{e}- \underline{e}^\mathrm{i},
|
||||
\underline{e}^{\rm i}=\frac{\theta \underline{x}}{3}, \qquad
|
||||
\underline{e}^{\rm d} = \underline{e}- \underline{e}^{\rm i},
|
||||
|
||||
|
||||
where the arguments of the state functions and the vectors on which they
|
||||
operate are omitted for simplicity. We note that the LPS model is linear
|
||||
in the dilatation :math:`\theta`, and in the deviatoric part of the
|
||||
extension :math:`\underline{e}^\mathrm{d}`.
|
||||
extension :math:`\underline{e}^{\rm d}`.
|
||||
|
||||
.. note::
|
||||
|
||||
@ -738,8 +738,8 @@ command.
|
||||
|
||||
This can be done, for example, by using the built-in visualizer of the
|
||||
:doc:`dump image or dump movie <dump_image>` command to create snapshot
|
||||
images or a movie. Below are example command for using dump image with
|
||||
the :ref:`example listed below <periexample>` and a set of images
|
||||
images or a movie. Below are example command lines for using dump image
|
||||
with the :ref:`example listed below <periexample>` and a set of images
|
||||
created for steps 300, 600, and 2000 this way.
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user