update fork
This commit is contained in:
1
.github/CODEOWNERS
vendored
1
.github/CODEOWNERS
vendored
@ -111,6 +111,7 @@ src/exceptions.h @rbberger
|
|||||||
src/fix_nh.* @athomps
|
src/fix_nh.* @athomps
|
||||||
src/info.* @akohlmey @rbberger
|
src/info.* @akohlmey @rbberger
|
||||||
src/timer.* @akohlmey
|
src/timer.* @akohlmey
|
||||||
|
src/min* @sjplimp @stanmoore1
|
||||||
|
|
||||||
# tools
|
# tools
|
||||||
tools/msi2lmp/* @akohlmey
|
tools/msi2lmp/* @akohlmey
|
||||||
|
|||||||
5
.github/CONTRIBUTING.md
vendored
5
.github/CONTRIBUTING.md
vendored
@ -68,11 +68,12 @@ How quickly your contribution will be integrated depends largely on how much eff
|
|||||||
Here is a checklist of steps you need to follow to submit a single file or user package for our consideration. Following these steps will save both you and us time. See existing files in packages in the source directory for examples. If you are uncertain, please ask on the lammps-users mailing list.
|
Here is a checklist of steps you need to follow to submit a single file or user package for our consideration. Following these steps will save both you and us time. See existing files in packages in the source directory for examples. If you are uncertain, please ask on the lammps-users mailing list.
|
||||||
|
|
||||||
* All source files you provide must compile with the most current version of LAMMPS with multiple configurations. In particular you need to test compiling LAMMPS from scratch with `-DLAMMPS_BIGBIG` set in addition to the default `-DLAMMPS_SMALLBIG` setting. Your code will need to work correctly in serial and in parallel using MPI.
|
* All source files you provide must compile with the most current version of LAMMPS with multiple configurations. In particular you need to test compiling LAMMPS from scratch with `-DLAMMPS_BIGBIG` set in addition to the default `-DLAMMPS_SMALLBIG` setting. Your code will need to work correctly in serial and in parallel using MPI.
|
||||||
* For consistency with the rest of LAMMPS and especially, if you want your contribution(s) to be added to main LAMMPS code or one of its standard packages, it needs to be written in a style compatible with other LAMMPS source files. This means: 2-character indentation per level, no tabs, no lines over 80 characters. I/O is done via the C-style stdio library, style class header files should not import any system headers outside of <cstdio>, STL containers should be avoided in headers, and forward declarations used where possible or needed. All added code should be placed into the LAMMPS_NS namespace or a sub-namespace; global or static variables should be avoided, as they conflict with the modular nature of LAMMPS and the C++ class structure. There MUST NOT be any "using namespace XXX;" statements in headers. In the implementation file (<name>.cpp) system includes should be placed in angular brackets (<>) and for c-library functions the C++ style header files should be included (<cstdio> instead of <stdio.h>, or <cstring> instead of <string.h>). This all is so the developers can more easily understand, integrate, and maintain your contribution and reduce conflicts with other parts of LAMMPS. This basically means that the code accesses data structures, performs its operations, and is formatted similar to other LAMMPS source files, including the use of the error class for error and warning messages.
|
* For consistency with the rest of LAMMPS and especially, if you want your contribution(s) to be added to main LAMMPS code or one of its standard packages, it needs to be written in a style compatible with other LAMMPS source files. This means: 2-character indentation per level, no tabs, no trailing whitespace, no lines over 80 characters. I/O is done via the C-style stdio library, style class header files should not import any system headers, STL containers should be avoided in headers, and forward declarations used where possible or needed. All added code should be placed into the LAMMPS_NS namespace or a sub-namespace; global or static variables should be avoided, as they conflict with the modular nature of LAMMPS and the C++ class structure. There MUST NOT be any "using namespace XXX;" statements in headers. In the implementation file (<name>.cpp) system includes should be placed in angular brackets (<>) and for c-library functions the C++ style header files should be included (<cstdio> instead of <stdio.h>, or <cstring> instead of <string.h>). This all is so the developers can more easily understand, integrate, and maintain your contribution and reduce conflicts with other parts of LAMMPS. This basically means that the code accesses data structures, performs its operations, and is formatted similar to other LAMMPS source files, including the use of the error class for error and warning messages.
|
||||||
|
* Source, style name, and documentation file should follow the following naming convention: style names should be lowercase and words separated by a forward slash; for a new fix style 'foo/bar', the class should be named FixFooBar, the name of the source files should be 'fix_foo_bar.h' and 'fix_foo_bar.cpp' and the corresponding documentation should be in a file 'fix_foo_bar.rst'.
|
||||||
* If you want your contribution to be added as a user-contributed feature, and it is a single file (actually a `<name>.cpp` and `<name>.h` file) it can be rapidly added to the USER-MISC directory. Include the one-line entry to add to the USER-MISC/README file in that directory, along with the 2 source files. You can do this multiple times if you wish to contribute several individual features.
|
* If you want your contribution to be added as a user-contributed feature, and it is a single file (actually a `<name>.cpp` and `<name>.h` file) it can be rapidly added to the USER-MISC directory. Include the one-line entry to add to the USER-MISC/README file in that directory, along with the 2 source files. You can do this multiple times if you wish to contribute several individual features.
|
||||||
* If you want your contribution to be added as a user-contribution and it is several related features, it is probably best to make it a user package directory with a name like USER-FOO. In addition to your new files, the directory should contain a README text file. The README should contain your name and contact information and a brief description of what your new package does. If your files depend on other LAMMPS style files also being installed (e.g. because your file is a derived class from the other LAMMPS class), then an Install.sh file is also needed to check for those dependencies. See other README and Install.sh files in other USER directories as examples. Send us a tarball of this USER-FOO directory.
|
* If you want your contribution to be added as a user-contribution and it is several related features, it is probably best to make it a user package directory with a name like USER-FOO. In addition to your new files, the directory should contain a README text file. The README should contain your name and contact information and a brief description of what your new package does. If your files depend on other LAMMPS style files also being installed (e.g. because your file is a derived class from the other LAMMPS class), then an Install.sh file is also needed to check for those dependencies. See other README and Install.sh files in other USER directories as examples. Send us a tarball of this USER-FOO directory.
|
||||||
* Your new source files need to have the LAMMPS copyright, GPL notice, and your name and email address at the top, like other user-contributed LAMMPS source files. They need to create a class that is inside the LAMMPS namespace. If the file is for one of the USER packages, including USER-MISC, then we are not as picky about the coding style (see above). I.e. the files do not need to be in the same stylistic format and syntax as other LAMMPS files, though that would be nice for developers as well as users who try to read your code.
|
* Your new source files need to have the LAMMPS copyright, GPL notice, and your name and email address at the top, like other user-contributed LAMMPS source files. They need to create a class that is inside the LAMMPS namespace. If the file is for one of the USER packages, including USER-MISC, then we are not as picky about the coding style (see above). I.e. the files do not need to be in the same stylistic format and syntax as other LAMMPS files, though that would be nice for developers as well as users who try to read your code.
|
||||||
* You **must** also create or extend a documentation file for each new command or style you are adding to LAMMPS. For simplicity and convenience, the documentation of groups of closely related commands or styles may be combined into a single file. This will be one file for a single-file feature. For a package, it might be several files. These are simple text files with a specific markup language, that are then auto-converted to HTML and PDF. The tools for this conversion are included in the source distribution, and the translation can be as simple as doing "make html pdf" in the doc folder. Thus the documentation source files must be in the same format and style as other `<name>.txt` files in the lammps/doc/src directory for similar commands and styles; use one or more of them as a starting point. A description of the markup can also be found in `lammps/doc/utils/txt2html/README.html` As appropriate, the text files can include links to equations (see doc/Eqs/*.tex for examples, we auto-create the associated JPG files), or figures (see doc/JPG for examples), or even additional PDF files with further details (see doc/PDF for examples). The doc page should also include literature citations as appropriate; see the bottom of doc/fix_nh.txt for examples and the earlier part of the same file for how to format the cite itself. The "Restrictions" section of the doc page should indicate that your command is only available if LAMMPS is built with the appropriate USER-MISC or USER-FOO package. See other user package doc files for examples of how to do this. The prerequisite for building the HTML format files are Python 3.x and virtualenv, the requirement for generating the PDF format manual is the htmldoc software. Please run at least "make html" and carefully inspect and proofread the resulting HTML format doc page before submitting your code.
|
* You **must** also create or extend a documentation file for each new command or style you are adding to LAMMPS. For simplicity and convenience, the documentation of groups of closely related commands or styles may be combined into a single file. This will be one file for a single-file feature. For a package, it might be several files. These are files in the [reStructuredText](https://docutils.sourceforge.io/rst.html) markup language, that are then converted to HTML and PDF. The tools for this conversion are included in the source distribution, and the translation can be as simple as doing "make html pdf" in the doc folder. Thus the documentation source files must be in the same format and style as other `<name>.rst` files in the lammps/doc/src directory for similar commands and styles; use one or more of them as a starting point. An introduction to reStructuredText can be found at [https://docutils.sourceforge.io/docs/user/rst/quickstart.html](https://docutils.sourceforge.io/docs/user/rst/quickstart.html). The text files can include mathematical expressions and symbol in ".. math::" sections or ":math:" expressions or figures (see doc/JPG for examples), or even additional PDF files with further details (see doc/PDF for examples). The doc page should also include literature citations as appropriate; see the bottom of doc/fix_nh.rst for examples and the earlier part of the same file for how to format the cite itself. The "Restrictions" section of the doc page should indicate that your command is only available if LAMMPS is built with the appropriate USER-MISC or USER-FOO package. See other user package doc files for examples of how to do this. The prerequisite for building the HTML format files are Python 3.x and virtualenv. Please run at least `make html`, `make pdf` and `make spelling` and carefully inspect and proofread the resulting HTML format doc page as well as the output produced to the screen. Make sure that all spelling errors are fixed or the necessary false positives are added to the `doc/utils/sphinx-config/false_positives.txt` file. For new styles, those usually also need to be added to lists on the respective overview pages. This can be checked for also with `make style_check`.
|
||||||
* For a new package (or even a single command) you should include one or more example scripts demonstrating its use. These should run in no more than a couple minutes, even on a single processor, and not require large data files as input. See directories under examples/USER for examples of input scripts other users provided for their packages. These example inputs are also required for validating memory accesses and testing for memory leaks with valgrind
|
* For a new package (or even a single command) you should include one or more example scripts demonstrating its use. These should run in no more than a couple minutes, even on a single processor, and not require large data files as input. See directories under examples/USER for examples of input scripts other users provided for their packages. These example inputs are also required for validating memory accesses and testing for memory leaks with valgrind
|
||||||
* If there is a paper of yours describing your feature (either the algorithm/science behind the feature itself, or its initial usage, or its implementation in LAMMPS), you can add the citation to the *.cpp source file. See src/USER-EFF/atom_vec_electron.cpp for an example. A LaTeX citation is stored in a variable at the top of the file and a single line of code that references the variable is added to the constructor of the class. Whenever a user invokes your feature from their input script, this will cause LAMMPS to output the citation to a log.cite file and prompt the user to examine the file. Note that you should only use this for a paper you or your group authored. E.g. adding a cite in the code for a paper by Nose and Hoover if you write a fix that implements their integrator is not the intended usage. That kind of citation should just be in the doc page you provide.
|
* If there is a paper of yours describing your feature (either the algorithm/science behind the feature itself, or its initial usage, or its implementation in LAMMPS), you can add the citation to the *.cpp source file. See src/USER-EFF/atom_vec_electron.cpp for an example. A LaTeX citation is stored in a variable at the top of the file and a single line of code that references the variable is added to the constructor of the class. Whenever a user invokes your feature from their input script, this will cause LAMMPS to output the citation to a log.cite file and prompt the user to examine the file. Note that you should only use this for a paper you or your group authored. E.g. adding a cite in the code for a paper by Nose and Hoover if you write a fix that implements their integrator is not the intended usage. That kind of citation should just be in the doc page you provide.
|
||||||
|
|
||||||
|
|||||||
2
.gitignore
vendored
2
.gitignore
vendored
@ -9,6 +9,7 @@
|
|||||||
*.d
|
*.d
|
||||||
*.x
|
*.x
|
||||||
*.exe
|
*.exe
|
||||||
|
*.sif
|
||||||
*.dll
|
*.dll
|
||||||
*.pyc
|
*.pyc
|
||||||
__pycache__
|
__pycache__
|
||||||
@ -26,6 +27,7 @@ vgcore.*
|
|||||||
.vagrant
|
.vagrant
|
||||||
\#*#
|
\#*#
|
||||||
.#*
|
.#*
|
||||||
|
.vscode
|
||||||
|
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.DS_Store?
|
.DS_Store?
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
1
bench/POTENTIALS/CH.airebo
Symbolic link
1
bench/POTENTIALS/CH.airebo
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../potentials/CH.airebo
|
||||||
File diff suppressed because it is too large
Load Diff
1
bench/POTENTIALS/CdTe.bop.table
Symbolic link
1
bench/POTENTIALS/CdTe.bop.table
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../potentials/CdTe.bop.table
|
||||||
@ -1,305 +0,0 @@
|
|||||||
Cu functions (universal 3), SM Foiles et al, PRB, 33, 7983 (1986)
|
|
||||||
29 63.550 3.6150 FCC
|
|
||||||
500 5.0100200400801306e-04 500 1.0000000000000009e-02 4.9499999999999886e+00
|
|
||||||
0. -3.1561636903424350e-01 -5.2324876182494506e-01 -6.9740831416804383e-01 -8.5202525457518519e-01
|
|
||||||
-9.9329216586042435e-01 -1.1246331970890324e+00 -1.2481882647347859e+00 -1.3654054700363645e+00 -1.4773214276236644e+00
|
|
||||||
-1.5847099936904741e+00 -1.6865851873526410e+00 -1.7843534091637920e+00 -1.8790616476576076e+00 -1.9710188604521761e+00
|
|
||||||
-2.0604838665854572e+00 -2.1476762477372944e+00 -2.2327843595560068e+00 -2.3159713409697673e+00 -2.3973797031286352e+00
|
|
||||||
-2.4771348895887826e+00 -2.5553480773272810e+00 -2.6321184083774227e+00 -2.7075347880408458e+00 -2.7816773487592030e+00
|
|
||||||
-2.8546186529652005e+00 -2.9264246898861899e+00 -2.9971557080624507e+00 -3.0668669157065978e+00 -3.1356090736776849e+00
|
|
||||||
-3.2034290008357829e+00 -3.2703700069757247e+00 -3.3364722658277230e+00 -3.4017731379735778e+00 -3.4663074517059016e+00
|
|
||||||
-3.5301077484029122e+00 -3.5932044977085980e+00 -3.6556262870729199e+00 -3.7173999892229403e+00 -3.7785509106421671e+00
|
|
||||||
-3.8391029237823773e+00 -3.8990785849196925e+00 -3.9584992397079333e+00 -4.0173851179270912e+00 -4.0744518500210916e+00
|
|
||||||
-4.1306733564032641e+00 -4.1864034067843932e+00 -4.2416582335814326e+00 -4.2964533268445280e+00 -4.3508034838872618e+00
|
|
||||||
-4.4047228547107977e+00 -4.4582249835318351e+00 -4.5113228468570128e+00 -4.5640288884490872e+00 -4.6163550514904443e+00
|
|
||||||
-4.6683128082199232e+00 -4.7199131872767452e+00 -4.7711667990036801e+00 -4.8220838587683374e+00 -4.8726742087289665e+00
|
|
||||||
-4.9229473379113813e+00 -4.9729124009208192e+00 -5.0225782353423369e+00 -5.0719533779533492e+00 -5.1210460798461668e+00
|
|
||||||
-5.1698643205481289e+00 -5.2184158212228908e+00 -5.2667080570261362e+00 -5.3147482686812282e+00 -5.3625434733324937e+00
|
|
||||||
-5.4101004747367369e+00 -5.4574258728391953e+00 -5.5045260727784751e+00 -5.5514072933650311e+00 -5.5980755750691458e+00
|
|
||||||
-5.6445367875538750e+00 -5.6907966367860183e+00 -5.7368606717507191e+00 -5.7827342908000219e+00 -5.8284227476608805e+00
|
|
||||||
-5.8739311571204382e+00 -5.9192645004390272e+00 -5.9644276303605182e+00 -6.0094252761103064e+00 -6.0542620478988169e+00
|
|
||||||
-6.0989424413057520e+00 -6.1434708414539330e+00 -6.1878515269578429e+00 -6.2320886736884802e+00 -6.2761863583589275e+00
|
|
||||||
-6.3201485619430571e+00 -6.3639791729330000e+00 -6.4076819904493902e+00 -6.4512607272098990e+00 -6.4947190123648113e+00
|
|
||||||
-6.5380603942065250e+00 -6.5812883427622069e+00 -6.6243939095620874e+00 -6.6670830925929181e+00 -6.7096660473058591e+00
|
|
||||||
-6.7521459135001862e+00 -6.7945257643836499e+00 -6.8368086085521611e+00 -6.8789973918942735e+00 -6.9210949994162263e+00
|
|
||||||
-6.9631042569970703e+00 -7.0050279330721992e+00 -7.0468687402560874e+00 -7.0886293368973554e+00 -7.1303123285804020e+00
|
|
||||||
-7.1719202695651916e+00 -7.2134556641788095e+00 -7.2549209681507421e+00 -7.2963185899023415e+00 -7.3376508917899628e+00
|
|
||||||
-7.3789201913012903e+00 -7.4201287622117036e+00 -7.4612788356982946e+00 -7.5023726014152032e+00 -7.5434122085331978e+00
|
|
||||||
-7.5843997667427345e+00 -7.6253373472216595e+00 -7.6662269835740062e+00 -7.7070706727342895e+00 -7.7478703758424388e+00
|
|
||||||
-7.7886280190928119e+00 -7.8293454945503811e+00 -7.8700246609474789e+00 -7.9106673444489104e+00 -7.9512753393968865e+00
|
|
||||||
-7.9918504090315139e+00 -8.0323942861870705e+00 -8.0729086739704030e+00 -8.1133952464140293e+00 -8.1538556491162808e+00
|
|
||||||
-8.1942914998523975e+00 -8.2347043891773524e+00 -8.2750958810033808e+00 -8.3154675131659701e+00 -8.3558207979692725e+00
|
|
||||||
-8.3961572227176475e+00 -8.4364782502312892e+00 -8.4767853193496308e+00 -8.5170798454139458e+00 -8.5573632207473906e+00
|
|
||||||
-8.5976368151087286e+00 -8.6379019761436666e+00 -8.6781600298199919e+00 -8.7184122808490656e+00 -8.7586600130993020e+00
|
|
||||||
-8.7989044899963460e+00 -8.8391469549140993e+00 -8.8793886315543773e+00 -8.9196307243150841e+00 -8.9598744186541239e+00
|
|
||||||
-9.0001208814363167e+00 -9.0403712612778122e+00 -9.0806266888772029e+00 -9.1208882773446476e+00 -9.1611571225108719e+00
|
|
||||||
-9.2014343032440138e+00 -9.2417208817437881e+00 -9.2820179038447463e+00 -9.3223263992829857e+00 -9.3626473819958278e+00
|
|
||||||
-9.4029818503831279e+00 -9.4433307875392529e+00 -9.4836951616705960e+00 -9.5237840547885071e+00 -9.5637918926951784e+00
|
|
||||||
-9.6038142178817338e+00 -9.6438519061474608e+00 -9.6839058194810832e+00 -9.7239768064614509e+00 -9.7640657024289226e+00
|
|
||||||
-9.8041733297054634e+00 -9.8443004978059889e+00 -9.8844480036373170e+00 -9.9246166317080906e+00 -9.9648071543198853e+00
|
|
||||||
-1.0005020331762637e+01 -1.0045256912501884e+01 -1.0085517633366123e+01 -1.0125803219723423e+01 -1.0166114385662183e+01
|
|
||||||
-1.0206451834160134e+01 -1.0246816257258331e+01 -1.0287208336224353e+01 -1.0327628741713852e+01 -1.0368078133934148e+01
|
|
||||||
-1.0408557162795717e+01 -1.0449066468066974e+01 -1.0489606679525650e+01 -1.0530178417100558e+01 -1.0570782291022510e+01
|
|
||||||
-1.0611418901960292e+01 -1.0652088841158786e+01 -1.0692792690577562e+01 -1.0733531023022920e+01 -1.0774304402276016e+01
|
|
||||||
-1.0815113383222808e+01 -1.0855958511980305e+01 -1.0896840326017184e+01 -1.0937759354276295e+01 -1.0978716117290730e+01
|
|
||||||
-1.1019711127305925e+01 -1.1060744888386239e+01 -1.1101817896531486e+01 -1.1142930639787664e+01 -1.1184083598352004e+01
|
|
||||||
-1.1225277244679319e+01 -1.1266512043589387e+01 -1.1307788452364719e+01 -1.1349106920870327e+01 -1.1390467891550486e+01
|
|
||||||
-1.1431871799781504e+01 -1.1473319073642074e+01 -1.1514810134213008e+01 -1.1556345395619132e+01 -1.1597925265115521e+01
|
|
||||||
-1.1639550143177303e+01 -1.1681220423591583e+01 -1.1722936493536452e+01 -1.1764698733669888e+01 -1.1806507518187232e+01
|
|
||||||
-1.1848363215029394e+01 -1.1890266185706139e+01 -1.1932216785634637e+01 -1.1974215364086319e+01 -1.2016262264291129e+01
|
|
||||||
-1.2058357823507606e+01 -1.2100502373105996e+01 -1.2142696238631970e+01 -1.2184939739884385e+01 -1.2227233190982815e+01
|
|
||||||
-1.2269576900438324e+01 -1.2311971171220080e+01 -1.2354416300827552e+01 -1.2396912581348374e+01 -1.2439460299532641e+01
|
|
||||||
-1.2482059736851909e+01 -1.2524711169562636e+01 -1.2567414868772744e+01 -1.2610171100495961e+01 -1.2652980125719694e+01
|
|
||||||
-1.2695842200459083e+01 -1.2738757575819193e+01 -1.2781726498053729e+01 -1.2824749208615117e+01 -1.2867825944219817e+01
|
|
||||||
-1.2910956936899197e+01 -1.2954142414054047e+01 -1.2997382598508125e+01 -1.3040677708563408e+01 -1.3084027958052218e+01
|
|
||||||
-1.3127433556386677e+01 -1.3170894708610035e+01 -1.3214411615448739e+01 -1.3257984473359954e+01 -1.3301613474583519e+01
|
|
||||||
-1.3345298807190659e+01 -1.3389040655121903e+01 -1.3432839198243016e+01 -1.3476694612386723e+01 -1.3520607069407617e+01
|
|
||||||
-1.3564576737214225e+01 -1.3608603779754390e+01 -1.3652688357330362e+01 -1.3696830626228689e+01 -1.3741030739041094e+01
|
|
||||||
-1.3785288844633044e+01 -1.3829605088192579e+01 -1.3873979611263849e+01 -1.3918412551792358e+01 -1.3962904044165157e+01
|
|
||||||
-1.4007454219246995e+01 -1.4052063204422609e+01 -1.4096731123636516e+01 -1.4141458097424390e+01 -1.4186244242962175e+01
|
|
||||||
-1.4231089674089560e+01 -1.4275994501358696e+01 -1.4320958832063411e+01 -1.4365982770278379e+01 -1.4411066416893846e+01
|
|
||||||
-1.4456209869649911e+01 -1.4501413223171539e+01 -1.4546676569005058e+01 -1.4591999995647598e+01 -1.4637383588581656e+01
|
|
||||||
-1.4682827430315228e+01 -1.4728331600403862e+01 -1.4773896175488971e+01 -1.4819521229330235e+01 -1.4865206832833337e+01
|
|
||||||
-1.4910953054084985e+01 -1.4956759958383259e+01 -1.5002627608264334e+01 -1.5048556063539081e+01 -1.5094545381317744e+01
|
|
||||||
-1.5140595616041765e+01 -1.5186706819511983e+01 -1.5232879040916600e+01 -1.5279112326867676e+01 -1.5325406721414765e+01
|
|
||||||
-1.5371762266086876e+01 -1.5418178999911675e+01 -1.5464656959446415e+01 -1.5511196178805903e+01 -1.5557796689685119e+01
|
|
||||||
-1.5604458521389688e+01 -1.5651181700861002e+01 -1.5697966252703509e+01 -1.5744812199205967e+01 -1.5791719560374304e+01
|
|
||||||
-1.5838688353945599e+01 -1.5885718595428898e+01 -1.5932810298111235e+01 -1.5979963473102316e+01 -1.6027178129340314e+01
|
|
||||||
-1.6074454273625634e+01 -1.6121791910645470e+01 -1.6169191042992907e+01 -1.6216651671189425e+01 -1.6264173793714576e+01
|
|
||||||
-1.6311757407021901e+01 -1.6359402505566209e+01 -1.6407109081822910e+01 -1.6454877126310635e+01 -1.6502706627614998e+01
|
|
||||||
-1.6550597572407241e+01 -1.6598549945469813e+01 -1.6646563729715353e+01 -1.6694638906205682e+01 -1.6742775454176012e+01
|
|
||||||
-1.6790973351056778e+01 -1.6839232572488413e+01 -1.6887553092348412e+01 -1.6935934882766333e+01 -1.6984377914146876e+01
|
|
||||||
-1.7032882155186826e+01 -1.7081447572897673e+01 -1.7130074132623690e+01 -1.7178761798061373e+01 -1.7227510531275698e+01
|
|
||||||
-1.7276320292724563e+01 -1.7325191041271864e+01 -1.7374122734215121e+01 -1.7423115327299456e+01 -1.7472168774711918e+01
|
|
||||||
-1.7521283029136725e+01 -1.7570458041655343e+01 -1.7619693762170868e+01 -1.7668990138814479e+01 -1.7718347118374936e+01
|
|
||||||
-1.7767764646209685e+01 -1.7817242666259403e+01 -1.7866781121071881e+01 -1.7916379951810882e+01 -1.7966039098283659e+01
|
|
||||||
-1.8015758498943796e+01 -1.8065538090918608e+01 -1.8115377810021755e+01 -1.8165277590764617e+01 -1.8215237366381530e+01
|
|
||||||
-1.8265257068836149e+01 -1.8315336628844307e+01 -1.8365475975885602e+01 -1.8415675038220570e+01 -1.8465933742903644e+01
|
|
||||||
-1.8516252015799409e+01 -1.8566629781600568e+01 -1.8617066963838965e+01 -1.8667563484898778e+01 -1.8718119266039025e+01
|
|
||||||
-1.8768734227397317e+01 -1.8819408288014415e+01 -1.8870141365839345e+01 -1.8920933377750998e+01 -1.8971784239569388e+01
|
|
||||||
-1.9022693866067016e+01 -1.9073662170983084e+01 -1.9124689067045438e+01 -1.9175774465969539e+01 -1.9226918278483254e+01
|
|
||||||
-1.9278120414338218e+01 -1.9329380782317116e+01 -1.9380699290257098e+01 -1.9432075845048644e+01 -1.9483510352663075e+01
|
|
||||||
-1.9535002718153464e+01 -1.9586552845676124e+01 -1.9638160638497766e+01 -1.9689825999008235e+01 -1.9741548828738019e+01
|
|
||||||
-1.9793329028359494e+01 -1.9845166497711489e+01 -1.9897061135804051e+01 -1.9949012840833348e+01 -2.0001021510188707e+01
|
|
||||||
-2.0053087040468540e+01 -2.0105209327494322e+01 -2.0157388266314911e+01 -2.0209623751249865e+01 -2.0261915675825890e+01
|
|
||||||
-2.0314263932714312e+01 -2.0366668414255741e+01 -2.0419129011700647e+01 -2.0471645615726288e+01 -2.0524218116314501e+01
|
|
||||||
-2.0576846402769888e+01 -2.0629530363722893e+01 -2.0682269887147754e+01 -2.0735064860369221e+01 -2.0787915170073120e+01
|
|
||||||
-2.0840820702317274e+01 -2.0893781342541502e+01 -2.0946796975575580e+01 -2.0999867485656864e+01 -2.1052992756428125e+01
|
|
||||||
-2.1106172670961428e+01 -2.1159407111702421e+01 -2.1212695960751944e+01 -2.1266039099329419e+01 -2.1319436408360275e+01
|
|
||||||
-2.1372887768154328e+01 -2.1426393058473991e+01 -2.1479952158748461e+01 -2.1533564947619766e+01 -2.1587231303431395e+01
|
|
||||||
-2.1640951103995235e+01 -2.1694724226644553e+01 -2.1748550548245930e+01 -2.1802429945213817e+01 -2.1856362293508028e+01
|
|
||||||
-2.1910347468648524e+01 -2.1964385345728829e+01 -2.2018475799410339e+01 -2.2072618703948137e+01 -2.2126813933181779e+01
|
|
||||||
-2.2181061360561898e+01 -2.2235360859143157e+01 -2.2289712301596296e+01 -2.2344115560361388e+01 -2.2398570507087584e+01
|
|
||||||
-2.2453077013515781e+01 -2.2507634950890292e+01 -2.2562244190064348e+01 -2.2616904601590250e+01 -2.2671616055687764e+01
|
|
||||||
-2.2726378422261405e+01 -2.2781191570901910e+01 -2.2836055370890790e+01 -2.2890969691219198e+01 -2.2945934400583837e+01
|
|
||||||
-2.3000949367399926e+01 -2.3056014459808921e+01 -2.3111129545678523e+01 -2.3166294492618363e+01 -2.3221509167983868e+01
|
|
||||||
-2.3276773438880355e+01 -2.3332087172173260e+01 -2.3387450234495873e+01 -2.3442862492249787e+01 -2.3498323811618320e+01
|
|
||||||
-2.3553834058571510e+01 -2.3609393098863848e+01 -2.3665000798062465e+01 -2.3720657021526677e+01 -2.3776361634436626e+01
|
|
||||||
-2.3832114501780552e+01 -2.3887915488378439e+01 -2.3943764458878377e+01 -2.3999661277761106e+01 -2.4055605809352301e+01
|
|
||||||
-2.4111597917826657e+01 -2.4167637467209488e+01 -2.4223724321393092e+01 -2.4279858344124932e+01 -2.4336039399030597e+01
|
|
||||||
-2.4392267349614485e+01 -2.4448542059257761e+01 -2.4504863391234494e+01 -2.4561231208711206e+01 -2.4617645374753693e+01
|
|
||||||
-2.4674105752332935e+01 -2.4730612204329191e+01 -2.4787164593538137e+01 -2.4843762782677913e+01 -2.4900406634392539e+01
|
|
||||||
-2.4957096011252133e+01 -2.5013830775771112e+01 -2.5070610790396586e+01 -2.5127435917366029e+01 -2.5184306019355063e+01
|
|
||||||
-2.5241220958503845e+01 -2.5298180597080318e+01 -2.5355184797285347e+01 -2.5412233421340488e+01 -2.5469326331427965e+01
|
|
||||||
1.0000000000000000e+01 1.0801534951171448e+01 1.0617375158244670e+01 1.0436688151228793e+01 1.0259403283230313e+01
|
|
||||||
1.0085451405601304e+01 9.9147648356938589e+00 9.7472773253084029e+00 9.5829240298195373e+00 9.4216414779654656e+00
|
|
||||||
9.2633675422888473e+00 9.1080414102110012e+00 8.9556035557302494e+00 8.8059957117284853e+00 8.6591608428743143e+00
|
|
||||||
8.5150431191084976e+00 8.3735878897014118e+00 8.2347416578681987e+00 8.0984520559319435e+00 7.9646678210201571e+00
|
|
||||||
7.8333387712866624e+00 7.7044157826449009e+00 7.5778507660022569e+00 7.4535966449878401e+00 7.3316073341564731e+00
|
|
||||||
7.2118377176659578e+00 7.0942436284134374e+00 6.9787818276207929e+00 6.8654099848621115e+00 6.7540866585212882e+00
|
|
||||||
6.6447712766712357e+00 6.5374241183666584e+00 6.4320062953403578e+00 6.3284797340946000e+00 6.2268071583795574e+00
|
|
||||||
6.1269520720505000e+00 6.0288787422946655e+00 5.9325521832211621e+00 5.8379381398054591e+00 5.7450030721804524e+00
|
|
||||||
5.6537141402680220e+00 5.5640391887418730e+00 5.4759467323160322e+00 5.3894059413519244e+00 5.3043866277758980e+00
|
|
||||||
5.2208592313018016e+00 5.1387948059520454e+00 5.0581650068698707e+00 4.9789420774166615e+00 4.9010988365496075e+00
|
|
||||||
4.8246086664712777e+00 4.7494455005478358e+00 4.6755838114879396e+00 4.6029985997776066e+00 4.5316653823665547e+00
|
|
||||||
4.4615601815980312e+00 4.3926595143797726e+00 4.3249403815888456e+00 4.2583802577058805e+00 4.1929570806747449e+00
|
|
||||||
4.1286492419807814e+00 4.0654355769448500e+00 4.0032953552278059e+00 3.9422082715398403e+00 3.8821544365521561e+00
|
|
||||||
3.8231143680053350e+00 3.7650689820101348e+00 3.7079995845373759e+00 3.6518878630917868e+00 3.5967158785670392e+00
|
|
||||||
3.5424660572764992e+00 3.4891211831576925e+00 3.4366643901451397e+00 3.3850791547089756e+00 3.3343492885547761e+00
|
|
||||||
3.2844589314827459e+00 3.2353925444006251e+00 3.1871349024889781e+00 3.1396710885139782e+00 3.0929864862859660e+00
|
|
||||||
3.0470667742591075e+00 3.0018979192706325e+00 2.9574661704151453e+00 2.9137580530522627e+00 2.8707603629438552e+00
|
|
||||||
2.8284601605189152e+00 2.7868447652620318e+00 2.7459017502243626e+00 2.7056189366531243e+00 2.6659843887374848e+00
|
|
||||||
2.6269864084689516e+00 2.5886135306124487e+00 2.5508545177868598e+00 2.5136983556521244e+00 2.4771342482006986e+00
|
|
||||||
2.4411516131510069e+00 2.4057400774406830e+00 2.3708894728175807e+00 2.3365898315265383e+00 2.3028313820887689e+00
|
|
||||||
2.2696045451740474e+00 2.2368999295609058e+00 2.2047083281853901e+00 2.1730207142748128e+00 2.1418282375653348e+00
|
|
||||||
2.1111222206016862e+00 2.0808941551166384e+00 2.0511356984892615e+00 2.0218386702793651e+00 1.9929950488372441e+00
|
|
||||||
1.9645969679867363e+00 1.9366367137799969e+00 1.9091067213223525e+00 1.8819995716660998e+00 1.8553079887710169e+00
|
|
||||||
1.8290248365311754e+00 1.8031431158652609e+00 1.7776559618705363e+00 1.7525566410377422e+00 1.7278385485262007e+00
|
|
||||||
1.7034952054980579e+00 1.6795202565098251e+00 1.6559074669601728e+00 1.6326507205929630e+00 1.6097440170540054e+00
|
|
||||||
1.5871814695006066e+00 1.5649573022624637e+00 1.5430658485530984e+00 1.5215015482308161e+00 1.5002589456071576e+00
|
|
||||||
1.4793326873036463e+00 1.4587175201534635e+00 1.4384082891492156e+00 1.4183999354343300e+00 1.3986874943378140e+00
|
|
||||||
1.3792660934511431e+00 1.3601309507466510e+00 1.3412773727360872e+00 1.3227007526689576e+00 1.3043965687692420e+00
|
|
||||||
1.2863603825102174e+00 1.2685878369261090e+00 1.2510746549598935e+00 1.2338166378466084e+00 1.2168096635312082e+00
|
|
||||||
1.2000496851203266e+00 1.1835327293670588e+00 1.1672548951882362e+00 1.1512123522134416e+00 1.1354013393647548e+00
|
|
||||||
1.1198181634671940e+00 1.1044591978884952e+00 1.0893208812080033e+00 1.0743997159140335e+00 1.0596922671287743e+00
|
|
||||||
1.0451951613605601e+00 1.0309050852825337e+00 1.0168187845373140e+00 1.0029330625671378e+00 9.8924477946872713e-01
|
|
||||||
9.7575085087259694e-01 9.6244824684604424e-01 9.4933399081931213e-01 9.3640515853477169e-01 9.2365887701803118e-01
|
|
||||||
9.1109232357100112e-01 8.9870272478628266e-01 8.8648735558209424e-01 8.7444353825798160e-01 8.6256864157006774e-01
|
|
||||||
8.5086007982605949e-01 8.3931531199913678e-01 8.2793184086057892e-01 8.1670721213066955e-01 8.0563901364725510e-01
|
|
||||||
7.9472487455206675e-01 7.8396246449372953e-01 7.7334949284779597e-01 7.6288370795296245e-01 7.5256289636327622e-01
|
|
||||||
7.4238488211596021e-01 7.3234752601463171e-01 7.2244872492728618e-01 7.1268641109915265e-01 7.0305855147956464e-01
|
|
||||||
6.9356314706317335e-01 6.8419823224459719e-01 6.7496187418651843e-01 6.6585217220099224e-01 6.5686725714346750e-01
|
|
||||||
6.4800529081937697e-01 6.3926446540306614e-01 6.3064300286859520e-01 6.2213915443241774e-01 6.1375120000748140e-01
|
|
||||||
6.0547744766850542e-01 5.9731623312840654e-01 5.8926591922531912e-01 5.8132489542033028e-01 5.7349157730523359e-01
|
|
||||||
5.6576440612064971e-01 5.5814184828379609e-01 5.5062239492602316e-01 5.4320456143964790e-01 5.3588688703414888e-01
|
|
||||||
5.2866793430138515e-01 5.2154628878946241e-01 5.1452055858552015e-01 5.0758937390678227e-01 5.0075138669987496e-01
|
|
||||||
4.9400527024841523e-01 4.8734971878830358e-01 4.8078344713093557e-01 4.7430519029390972e-01 4.6791370313911962e-01
|
|
||||||
4.6160776001828552e-01 4.5538615442535857e-01 4.4924769865602876e-01 4.4319122347399365e-01 4.3721557778390086e-01
|
|
||||||
4.3131962831075654e-01 4.2550225928575891e-01 4.1976237213834899e-01 4.1409888519439697e-01 4.0851073338028954e-01
|
|
||||||
4.0299686793291478e-01 3.9755625611540779e-01 3.9218788093843493e-01 3.8689074088692443e-01 3.8166384965228239e-01
|
|
||||||
3.7650623586976018e-01 3.7141694286095728e-01 3.6639502838144544e-01 3.6143956437320846e-01 3.5654963672189943e-01
|
|
||||||
3.5172434501901328e-01 3.4696280232829579e-01 3.4226413495707497e-01 3.3762748223177219e-01 3.3305199627774762e-01
|
|
||||||
3.2853684180349596e-01 3.2408119588894380e-01 3.1968424777773841e-01 3.1534519867361155e-01 3.1106326154055530e-01
|
|
||||||
3.0683766090688813e-01 3.0266763267296426e-01 2.9855242392259740e-01 2.9449129273803010e-01 2.9048350801842027e-01
|
|
||||||
2.8652834930171167e-01 2.8262510658997009e-01 2.7877308017785829e-01 2.7497158048439907e-01 2.7121992788793392e-01
|
|
||||||
2.6751745256412462e-01 2.6386349432690004e-01 2.6025740247248841e-01 2.5669853562631850e-01 2.5318626159266877e-01
|
|
||||||
2.4971995720718354e-01 2.4629900819206618e-01 2.4292280901402563e-01 2.3959076274464408e-01 2.3630228092351846e-01
|
|
||||||
2.3305678342376535e-01 2.2985369832002167e-01 2.2669246175884616e-01 2.2357251783148069e-01 2.2049331844890929e-01
|
|
||||||
2.1745432321916880e-01 2.1445499932688783e-01 2.1149482141498144e-01 2.0857327146848004e-01 2.0568983870040114e-01
|
|
||||||
2.0284401943976604e-01 2.0003531702142130e-01 1.9726324167804599e-01 1.9452731043391402e-01 1.9182704700056608e-01
|
|
||||||
1.8916198167437770e-01 1.8653165123588344e-01 1.8393559885088084e-01 1.8137337397327791e-01 1.7884453224959973e-01
|
|
||||||
1.7634863542523593e-01 1.7388525125224241e-01 1.7145395339876757e-01 1.6905432136008169e-01 1.6668594037109052e-01
|
|
||||||
1.6434840132036665e-01 1.6204130066570688e-01 1.5976424035106618e-01 1.5751682772493769e-01 1.5529867546015819e-01
|
|
||||||
1.5310940147503249e-01 1.5094862885580707e-01 1.4881598578045718e-01 1.4671110544379484e-01 1.4463362598375351e-01
|
|
||||||
1.4258319040899092e-01 1.4055944652768915e-01 1.3856204687748974e-01 1.3659064865666881e-01 1.3464491365640630e-01
|
|
||||||
1.3272450819420012e-01 1.3082910304837103e-01 1.2895837339364213e-01 1.2711199873781265e-01 1.2528966285941134e-01
|
|
||||||
1.2349105374641756e-01 1.2171586353596986e-01 1.1996378845505173e-01 1.1823452876211782e-01 1.1652778868972380e-01
|
|
||||||
1.1484327638801961e-01 1.1318070386919254e-01 1.1153978695277944e-01 1.0992024521187505e-01 1.0832180192018548e-01
|
|
||||||
1.0674418399992769e-01 1.0518712197055757e-01 1.0365034989832456e-01 1.0213360534659532e-01 1.0063662932698936e-01
|
|
||||||
9.9159166251264974e-02 9.7700963883974534e-02 9.6261773295835962e-02 9.4841348817873428e-02 9.3439447996227276e-02
|
|
||||||
9.2055831547688260e-02 9.0690263315935660e-02 8.9342510228411331e-02 8.8012342253891429e-02 8.6699532360706044e-02
|
|
||||||
8.5403856475584128e-02 8.4125093443141896e-02 8.2863024985984080e-02 8.1617435665412685e-02 8.0388112842733062e-02
|
|
||||||
7.9174846641143493e-02 7.7977429908209661e-02 7.6795658178889781e-02 7.5629329639115728e-02 7.4478245089953710e-02
|
|
||||||
7.3342207912248103e-02 7.2221024031827064e-02 7.1114501885225945e-02 7.0022452385910761e-02 6.8944688890991479e-02
|
|
||||||
6.7881027168450458e-02 6.6831285364849169e-02 6.5795283973477225e-02 6.4772845803028556e-02 6.3763795946680801e-02
|
|
||||||
6.2767961751651669e-02 6.1785172789201148e-02 6.0815260825057393e-02 5.9858059790287577e-02 5.8913405752569759e-02
|
|
||||||
5.7981136887894191e-02 5.7061093452682510e-02 5.6153117756271964e-02 5.5257054133826422e-02 5.4372748919636837e-02
|
|
||||||
5.3500050420772105e-02 5.2638808891131372e-02 5.1788876505864945e-02 5.0950107336147354e-02 5.0122357324306366e-02
|
|
||||||
4.9305484259319243e-02 4.8499347752635869e-02 4.7703809214351578e-02 4.6918731829721727e-02 4.6143980535982010e-02
|
|
||||||
4.5379421999521163e-02 4.4624924593352100e-02 4.3880358374905226e-02 4.3145595064128850e-02 4.2420508021892900e-02
|
|
||||||
4.1704972228691739e-02 4.0998864263647405e-02 4.0302062283785300e-02 3.9614446003616965e-02 3.8935896674993531e-02
|
|
||||||
3.8266297067221844e-02 3.7605531447481688e-02 3.6953485561492139e-02 3.6310046614435487e-02 3.5675103252157392e-02
|
|
||||||
3.5048545542616605e-02 3.4430264957581835e-02 3.3820154354582632e-02 3.3218107959093635e-02 3.2624021346983278e-02
|
|
||||||
3.2037791427166340e-02 3.1459316424514716e-02 3.0888495862994469e-02 3.0325230549015147e-02 2.9769422555015357e-02
|
|
||||||
2.9220975203265720e-02 2.8679793049885216e-02 2.8145781869070463e-02 2.7618848637539717e-02 2.7098901519172047e-02
|
|
||||||
2.6585849849867671e-02 2.6079604122596356e-02 2.5580075972643668e-02 2.5087178163056167e-02 2.4600824570288671e-02
|
|
||||||
2.4120930170012267e-02 2.3647411023137499e-02 2.3180184262011627e-02 2.2719168076792418e-02 2.2264281702001121e-02
|
|
||||||
2.1815445403263078e-02 2.1372580464206647e-02 2.0935609173537761e-02 2.0504454812290795e-02 2.0079041641240414e-02
|
|
||||||
1.9659294888467183e-02 1.9245140737102040e-02 1.8836506313223755e-02 1.8433319673904158e-02 1.8035509795416238e-02
|
|
||||||
1.7643006561603891e-02 1.7255740752380899e-02 1.6873644032391555e-02 1.6496648939823388e-02 1.6124688875347792e-02
|
|
||||||
1.5757698091213634e-02 1.5395611680482646e-02 1.5038365566394485e-02 1.4685896491875350e-02 1.4338142009180710e-02
|
|
||||||
1.3995040469664266e-02 1.3656531013687800e-02 1.3322553560652262e-02 1.2993048799157525e-02 1.2667958177290606e-02
|
|
||||||
1.2347223893038994e-02 1.2030788884814458e-02 1.1718596822117511e-02 1.1410592096299910e-02 1.1106719811460941e-02
|
|
||||||
1.0806925775450060e-02 1.0511156490982998e-02 1.0219359146882878e-02 9.9314816094114855e-03 9.6474724137328716e-03
|
|
||||||
9.3672807554677773e-03 9.0908564823645177e-03 8.8181500860711193e-03 8.5491126940134832e-03 8.2836960613733579e-03
|
|
||||||
8.0218525631707838e-03 7.7635351864465685e-03 7.5086975225370223e-03 7.2572937594544973e-03 7.0092786743605195e-03
|
|
||||||
6.7646076261301813e-03 6.5232365480138998e-03 6.2851219403949887e-03 6.0502208636273869e-03 5.8184909309735300e-03
|
|
||||||
5.5898903016277091e-03 5.3643776738254711e-03 5.1419122780385074e-03 4.9224538702609122e-03 4.7059627253757674e-03
|
|
||||||
4.4923996305976099e-03 4.2817258790122659e-03 4.0739032631877392e-03 3.8688940688609841e-03 3.6666610687164924e-03
|
|
||||||
3.4671675162341598e-03 3.2703771396105918e-03 3.0762541357672313e-03 2.8847631644254856e-03 2.6958693422570179e-03
|
|
||||||
2.5095382371091990e-03 2.3257358623008373e-03 2.1444286709895732e-03 1.9655835506104946e-03 1.7891678173820869e-03
|
|
||||||
1.6151492108847365e-03 1.4434958887007410e-03 1.2741764211267048e-03 1.1071597859496629e-03 9.4241536328815156e-04
|
|
||||||
7.7991293049733956e-04 6.1962265713921827e-04 4.6151510001329887e-04 3.0556119825198014e-04 1.5173226847375876e-04
|
|
||||||
0. 0. 0. 0. 0.
|
|
||||||
0. 5.4383329664155645e-05 9.3944898415945083e-04 4.3251847212615047e-03 1.2334244035325348e-02
|
|
||||||
2.7137722173468548e-02 5.0697119791449641e-02 8.4607638668976470e-02 1.3001641279549414e-01 1.8759487452762702e-01
|
|
||||||
2.5754900895683441e-01 3.3965493779430744e-01 4.3331024634064264e-01 5.3759384878832961e-01 6.5132908316254046e-01
|
|
||||||
7.7314622535699939e-01 9.0154178511424377e-01 1.0349328562818201e+00 1.1717054897399350e+00 1.3102565818166738e+00
|
|
||||||
1.4490291582473986e+00 1.5865412121263560e+00 1.7214084470448441e+00 1.8523614026473965e+00 1.9782575145276269e+00
|
|
||||||
2.0980886961566938e+00 2.2109850373516764e+00 2.3162151996095730e+00 2.4131840597491703e+00 2.5014281146549706e+00
|
|
||||||
2.5806091153285706e+00 2.6505063508648590e+00 2.7110079545661563e+00 2.7621015568249447e+00 2.8038645637913220e+00
|
|
||||||
2.8364542979766156e+00 2.8600981973448825e+00 2.8750842333755031e+00 2.8817516761559574e+00 2.8804823057701157e+00
|
|
||||||
2.8716921439699092e+00 2.8558237581894161e+00 2.8333391711552594e+00 2.8047133934346959e+00 2.7704285829676252e+00
|
|
||||||
2.7309688247181469e+00 2.6868155147671331e+00 2.6384433262347358e+00 2.5863167291097398e+00 2.5308870321738226e+00
|
|
||||||
2.4725899125317596e+00 2.4118433966060167e+00 2.3490462556752334e+00 2.2845767789603002e+00 2.2187918877813502e+00
|
|
||||||
2.1520265552815943e+00 2.0845934975626363e+00 2.0167831036919637e+00 1.9488635738636404e+00 1.8810812369508270e+00
|
|
||||||
1.8136610207193371e+00 1.7468070500507196e+00 1.6807033505858371e+00 1.6155146372447149e+00 1.5513871690559142e+00
|
|
||||||
1.4884496536383409e+00 1.4268141864958608e+00 1.3665772120042590e+00 1.3078204945836447e+00 1.2506120900523854e+00
|
|
||||||
1.1950073085502879e+00 1.1410496616995687e+00 1.0887717878420631e+00 1.0381963502565981e+00 9.8933690422003551e-01
|
|
||||||
9.4219872964247031e-01 8.9677962677415124e-01 8.5307067316958651e-01 8.1105694069385592e-01 7.7071817188505065e-01
|
|
||||||
7.3202941544290212e-01 6.9496162100761794e-01 6.5948219372701189e-01 6.2555550939233484e-01 5.9314339115629977e-01
|
|
||||||
5.6220554903693554e-01 5.3269998356387660e-01 5.0458335504023211e-01 4.7781131998032222e-01 4.5233883634534777e-01
|
|
||||||
4.2812043923464138e-01 4.0511048870905242e-01 3.8326339142174781e-01 3.6253379771729577e-01 3.4287677583286325e-01
|
|
||||||
3.2424796479760154e-01 3.0660370758054967e-01 2.8990116598452254e-01 2.7409841872609064e-01 2.5915454407883409e-01
|
|
||||||
2.4502968839369110e-01 2.3168512174254197e-01 2.1908328186436687e-01 2.0718780752542632e-01 1.9596356233750800e-01
|
|
||||||
1.8537665001230508e-01 1.7539442196444632e-01 1.6598547811304609e-01 1.5711966166996927e-01 1.4876804864444715e-01
|
|
||||||
1.4090293273673637e-01 1.3349780623990259e-01 1.2652733751724909e-01 1.1996734557434463e-01 1.1379477219856060e-01
|
|
||||||
1.0798765209582406e-01 1.0252508141368288e-01 9.7387185001678311e-02 9.2555082724584015e-02 8.8010855111109620e-02
|
|
||||||
8.3737508589961873e-02 7.9718940536826377e-02 7.5939904329596963e-02 7.2385974585237101e-02 6.9043512729294765e-02
|
|
||||||
6.5899633029043336e-02 6.2942169202580001e-02 6.0159641699440547e-02 5.7541225732930634e-02 5.5076720130546430e-02
|
|
||||||
5.2756517056398833e-02 5.0571572648238083e-02 4.8513378601664936e-02 4.6573934725081756e-02 4.4745722480991068e-02
|
|
||||||
4.3021679522073253e-02 4.1395175224364866e-02 3.9859987214311721e-02 3.8410278881708670e-02 3.7040577866510604e-02
|
|
||||||
3.5745755503880039e-02 3.4521007208912380e-02 3.3361833779917971e-02 3.2264023597108116e-02 3.1223635691821294e-02
|
|
||||||
3.0236983660070216e-02 2.9300620393215571e-02 2.8411323597772320e-02 2.7566082075896281e-02 2.6762082737777249e-02
|
|
||||||
2.5996698317105604e-02 2.5267475760840985e-02 2.4572125264713973e-02 2.3908509926274246e-02 2.3274635987705516e-02
|
|
||||||
2.2668643641204911e-02 2.2088798370316409e-02 2.1533482801290083e-02 2.1001189039288493e-02 2.0490511464994254e-02
|
|
||||||
2.0000139967999431e-02 1.9528853594166895e-02 1.9075514584991349e-02 1.8639062787818239e-02 1.8218510416650235e-02
|
|
||||||
1.7812937144080498e-02 1.7421485505751177e-02 1.7043356599549031e-02 1.6677806062561751e-02 1.6324140309613155e-02
|
|
||||||
1.5981713017976018e-02 1.5649921843605585e-02 1.5328205354974755e-02 1.5016040171312250e-02 1.4712938292708366e-02
|
|
||||||
1.4418444610242331e-02 1.4132134584901757e-02 1.3853612084676337e-02 1.3582507369821917e-02 1.3318475216818060e-02
|
|
||||||
1.3061193172097418e-02 1.2810359927147186e-02 1.2565693807050415e-02 1.2326931365025051e-02 1.2093826075940506e-02
|
|
||||||
1.1866147122233661e-02 1.1643678266026136e-02 1.1426216801644407e-02 1.1213572583084475e-02 1.1005567121320226e-02
|
|
||||||
1.0802032746662471e-02 1.0602811831688208e-02 1.0407756070544782e-02 1.0216725810699157e-02 1.0029589433467268e-02
|
|
||||||
9.8462227798860602e-03 9.6665086187306404e-03 9.4903361536790021e-03 9.3176005668363371e-03 9.1482025960089031e-03
|
|
||||||
8.9820481433065535e-03 8.8190479128032462e-03 8.6591170751522117e-03 8.5021749571883021e-03 8.3481447546937537e-03
|
|
||||||
8.1969532666261724e-03 8.0485306492223962e-03 7.9028101885199598e-03 7.7597280899136256e-03 7.6192232834934315e-03
|
|
||||||
7.4812372439735375e-03 7.3457138241272979e-03 7.2125991007052359e-03 7.0818412319012813e-03 6.9533903254870300e-03
|
|
||||||
6.8271983168139705e-03 6.7032188559211503e-03 6.5814072030662141e-03 6.4617201320263939e-03 6.3441158405819764e-03
|
|
||||||
6.2285538676237207e-03 6.1149950163802147e-03 6.0034012832899109e-03 5.8937357920846312e-03 5.7859627326801166e-03
|
|
||||||
5.6800473044990030e-03 5.5759556638887986e-03 5.4736548753111791e-03 5.3731128660109428e-03 5.2742983838981461e-03
|
|
||||||
5.1771809583849582e-03 5.0817308639591330e-03 4.9879190862693046e-03 4.8957172905357560e-03 4.8050977921015592e-03
|
|
||||||
4.7160335289582467e-03 4.6284980360953021e-03 4.5424654215287241e-03 4.4579103438822931e-03 4.3748079913988880e-03
|
|
||||||
4.2931340622749670e-03 4.2128647462132407e-03 4.1339767071033873e-03 4.0564470667446839e-03 3.9802533895282599e-03
|
|
||||||
3.9053736680121076e-03 3.8317863093158128e-03 3.7594701222811860e-03 3.6884043053326127e-03 3.6185684349951674e-03
|
|
||||||
3.5499424550168301e-03 3.4825066660512660e-03 3.4162417158645347e-03 3.3511285900229004e-03 3.2871486030347646e-03
|
|
||||||
3.2242833899080170e-03 3.1625148980992668e-03 3.1018253798278661e-03 3.0421973847258310e-03 2.9836137528083811e-03
|
|
||||||
2.9260576077371064e-03 2.8695123503632708e-03 2.8139616525287708e-03 2.7593894511106498e-03 2.7057799422959966e-03
|
|
||||||
2.6531175760685227e-03 2.6013870509009052e-03 2.5505733086344240e-03 2.5006615295404683e-03 2.4516371275501436e-03
|
|
||||||
2.4034857456453340e-03 2.3561932514012535e-03 2.3097457326723414e-03 2.2641294934160616e-03 2.2193310496436136e-03
|
|
||||||
2.1753371254977782e-03 2.1321346494441173e-03 2.0897107505768314e-03 2.0480527550303662e-03 2.0071481824917164e-03
|
|
||||||
1.9669847428123305e-03 1.9275503327108034e-03 1.8888330325659355e-03 1.8508211032951805e-03 1.8135029833145980e-03
|
|
||||||
1.7768672855772646e-03 1.7409027946878666e-03 1.7055984640891586e-03 1.6709434133182904e-03 1.6369269253308227e-03
|
|
||||||
1.6035384438881917e-03 1.5707675710093030e-03 1.5386040644797400e-03 1.5070378354209296e-03 1.4760589459142243e-03
|
|
||||||
1.4456576066784674e-03 1.4158241748004133e-03 1.3865491515145517e-03 1.3578231800324136e-03 1.3296370434173130e-03
|
|
||||||
1.3019816625059188e-03 1.2748480938728074e-03 1.2482275278369870e-03 1.2221112865106742e-03 1.1964908218862064e-03
|
|
||||||
1.1713577139624703e-03 1.1467036689077198e-03 1.1225205172586891e-03 1.0988002121543120e-03 1.0755348276031765e-03
|
|
||||||
1.0527165567835728e-03 1.0303377103750150e-03 1.0083907149206553e-03 9.8686811121878604e-04 9.6576255274356815e-04
|
|
||||||
9.4506680409354657e-04 9.2477373946662708e-04 9.0487634116191706e-04 8.8536769810608137e-04 8.6624100440530968e-04
|
|
||||||
8.4748955791986991e-04 8.2910675886310736e-04 8.1108610842155551e-04 7.9342120739794852e-04 7.7610575487466887e-04
|
|
||||||
7.5913354689786591e-04 7.4249847518158968e-04 7.2619452583109687e-04 7.1021577808524222e-04 6.9455640307671332e-04
|
|
||||||
6.7921066261025093e-04 6.6417290795844214e-04 6.4943757867335500e-04 6.3499920141575628e-04 6.2085238879914031e-04
|
|
||||||
6.0699183824991856e-04 5.9341233088238896e-04 5.8010873038847818e-04 5.6707598194186137e-04 5.5430911111587280e-04
|
|
||||||
5.4180322281523891e-04 5.2955350022104025e-04 5.1755520374872563e-04 5.0580367001857793e-04 4.9429431083891986e-04
|
|
||||||
4.8302261220136561e-04 4.7198413328763435e-04 4.6117450548847222e-04 4.5058943143359842e-04 4.4022468403297037e-04
|
|
||||||
4.3007610552883886e-04 4.2013960655883260e-04 4.1041116522908330e-04 4.0088682619821882e-04 3.9156269977118005e-04
|
|
||||||
3.8243496100300207e-04 3.7349984881274514e-04 3.6475366510662147e-04 3.5619277391102898e-04 3.4781360051482253e-04
|
|
||||||
3.3961263062063513e-04 3.3158640950565685e-04 3.2373154119109092e-04 3.1604468762060252e-04 3.0852256784754707e-04
|
|
||||||
3.0116195723081836e-04 2.9395968663908575e-04 2.8691264166377101e-04 2.8001776184017647e-04 2.7327203987681688e-04
|
|
||||||
2.6667252089326854e-04 2.6021630166557681e-04 2.5390052988028163e-04 2.4772240339593181e-04 2.4167916951265550e-04
|
|
||||||
2.3576812424967210e-04 2.2998661163024531e-04 2.2433202297460642e-04 2.1880179620031078e-04 2.1339341513026532e-04
|
|
||||||
2.0810440880823181e-04 2.0293235082175821e-04 1.9787485863260665e-04 1.9292959291436311e-04 1.8809425689761319e-04
|
|
||||||
1.8336659572205580e-04 1.7874439579616125e-04 1.7422548416372047e-04 1.6980772787763936e-04 1.6548903338088530e-04
|
|
||||||
1.6126734589430591e-04 1.5714064881157744e-04 1.5310696310104604e-04 1.4916434671449329e-04 1.4531089400280153e-04
|
|
||||||
1.4154473513841234e-04 1.3786403554466153e-04 1.3426699533172857e-04 1.3075184873951283e-04 1.2731686358694039e-04
|
|
||||||
1.2396034072819674e-04 1.2068061351527565e-04 1.1747604726729168e-04 1.1434503874632306e-04 1.1128601563955686e-04
|
|
||||||
1.0829743604811193e-04 1.0537778798212988e-04 1.0252558886227753e-04 9.9739385027582898e-05 9.7017751249615057e-05
|
|
||||||
9.4359290252773662e-05 9.1762632240957511e-05 8.9226434430383569e-05 8.6749380588361721e-05 8.4330180578390864e-05
|
|
||||||
8.1967569911181246e-05 7.9660309301724484e-05 7.7407184232279429e-05 7.5207004521348451e-05 7.3058603898526649e-05
|
|
||||||
7.0960839585107720e-05 6.8912591880629977e-05 6.6912763755002085e-05 6.4960280446513426e-05 6.3054089065330086e-05
|
|
||||||
6.1193158202771814e-05 5.9376477546041213e-05 5.7603057498502742e-05 5.5871928805544500e-05 5.4182142185708361e-05
|
|
||||||
5.2532767967318744e-05 5.0922895730446966e-05 4.9351633954125953e-05 4.7818109668823321e-05 4.6321468114150300e-05
|
|
||||||
4.4860872401664663e-05 4.3435503182825573e-05 4.2044558321957873e-05 4.0687252574273750e-05 3.9362817268785450e-05
|
|
||||||
3.8070499996214428e-05 3.6809564301621984e-05 3.5579289382025496e-05 3.4378969788611451e-05 3.3207915133769052e-05
|
|
||||||
3.2065449802711312e-05 3.0950912669766876e-05 2.9863656819185611e-05 2.8803049270468119e-05 2.7768470708167169e-05
|
|
||||||
2.6759315216115260e-05 2.5774990015931323e-05 2.4814915209964844e-05 2.3878523528387922e-05 2.2965260080560611e-05
|
|
||||||
2.2074582110528148e-05 2.1205958756658535e-05 2.0358870815317476e-05 1.9532810508535560e-05 1.8727281255713447e-05
|
|
||||||
1.7941797449145505e-05 1.7175884233475961e-05 1.6429077288930018e-05 1.5700922618341645e-05 1.4990976337865471e-05
|
|
||||||
1.4298804471386687e-05 1.3623982748522034e-05 1.2966096406226424e-05 1.2324739993882115e-05 1.1699517181902770e-05
|
|
||||||
1.1090040573734860e-05 1.0495931521266495e-05 9.9168199435395021e-06 9.3523441487842465e-06 8.8021506596591475e-06
|
|
||||||
8.2658940417265321e-06 7.7432367350197678e-06 7.2338488887770244e-06 6.7374081991923703e-06 6.2535997501888662e-06
|
|
||||||
5.7821158571569505e-06 5.3226559136389283e-06 4.8749262408651290e-06 4.4386399401326240e-06 4.0135167480073166e-06
|
|
||||||
3.5992828942305738e-06 3.1956709623667747e-06 2.8024197531120341e-06 2.4192741502208947e-06 2.0459849890155880e-06
|
|
||||||
1.6823089274468580e-06 1.3280083196495871e-06 9.8285109196557868e-07 6.4661062138351467e-07 3.1906561636122974e-07
|
|
||||||
0. 0. 0. 0. 0.
|
|
||||||
|
|
||||||
|
|
||||||
1
bench/POTENTIALS/Cu_u3.eam
Symbolic link
1
bench/POTENTIALS/Cu_u3.eam
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../potentials/Cu_u3.eam
|
||||||
43007
bench/POTENTIALS/Ni.adp
43007
bench/POTENTIALS/Ni.adp
File diff suppressed because it is too large
Load Diff
1
bench/POTENTIALS/Ni.adp
Symbolic link
1
bench/POTENTIALS/Ni.adp
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../potentials/Ni.adp
|
||||||
1636
cmake/CMakeLists.txt
1636
cmake/CMakeLists.txt
File diff suppressed because it is too large
Load Diff
@ -1,48 +0,0 @@
|
|||||||
# - Find liblammps
|
|
||||||
# Find the native liblammps headers and libraries.
|
|
||||||
#
|
|
||||||
# The following variables will set:
|
|
||||||
# LAMMPS_INCLUDE_DIRS - where to find lammps/library.h, etc.
|
|
||||||
# LAMMPS_LIBRARIES - List of libraries when using lammps.
|
|
||||||
# LAMMPS_API_DEFINES - lammps library api defines
|
|
||||||
# LAMMPS_VERSION - lammps library version
|
|
||||||
# LAMMPS_FOUND - True if liblammps found.
|
|
||||||
#
|
|
||||||
# In addition a LAMMPS::LAMMPS imported target is getting created.
|
|
||||||
#
|
|
||||||
# LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
|
||||||
# http://lammps.sandia.gov, Sandia National Laboratories
|
|
||||||
# Steve Plimpton, sjplimp@sandia.gov
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
#
|
|
||||||
|
|
||||||
find_package(PkgConfig)
|
|
||||||
|
|
||||||
pkg_check_modules(PC_LAMMPS liblammps@LAMMPS_LIB_SUFFIX@)
|
|
||||||
find_path(LAMMPS_INCLUDE_DIR lammps/library.h HINTS ${PC_LAMMPS_INCLUDE_DIRS} @CMAKE_INSTALL_FULL_INCLUDEDIR@)
|
|
||||||
|
|
||||||
set(LAMMPS_VERSION @LAMMPS_VERSION@)
|
|
||||||
set(LAMMPS_API_DEFINES @LAMMPS_API_DEFINES@)
|
|
||||||
|
|
||||||
find_library(LAMMPS_LIBRARY NAMES lammps@LAMMPS_LIB_SUFFIX@ HINTS ${PC_LAMMPS_LIBRARY_DIRS} @CMAKE_INSTALL_FULL_LIBDIR@)
|
|
||||||
|
|
||||||
set(LAMMPS_INCLUDE_DIRS "${LAMMPS_INCLUDE_DIR}")
|
|
||||||
set(LAMMPS_LIBRARIES "${LAMMPS_LIBRARY}")
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
# handle the QUIETLY and REQUIRED arguments and set LAMMPS_FOUND to TRUE
|
|
||||||
# if all listed variables are TRUE
|
|
||||||
find_package_handle_standard_args(LAMMPS REQUIRED_VARS LAMMPS_LIBRARY LAMMPS_INCLUDE_DIR VERSION_VAR LAMMPS_VERSION)
|
|
||||||
|
|
||||||
mark_as_advanced(LAMMPS_INCLUDE_DIR LAMMPS_LIBRARY)
|
|
||||||
|
|
||||||
if(LAMMPS_FOUND AND NOT TARGET LAMMPS::LAMMPS)
|
|
||||||
add_library(LAMMPS::LAMMPS UNKNOWN IMPORTED)
|
|
||||||
set_target_properties(LAMMPS::LAMMPS PROPERTIES IMPORTED_LOCATION "${LAMMPS_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${LAMMPS_INCLUDE_DIR}" INTERFACE_COMPILE_DEFINITIONS "${LAMMPS_API_DEFINES}")
|
|
||||||
endif()
|
|
||||||
92
cmake/LAMMPSConfig.cmake.in
Normal file
92
cmake/LAMMPSConfig.cmake.in
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
include(CMakeFindDependencyMacro)
|
||||||
|
if(@BUILD_MPI@)
|
||||||
|
find_dependency(MPI REQUIRED CXX)
|
||||||
|
endif()
|
||||||
|
if(@PKG_KSPACE@ AND @FFT@ STREQUAL "FFTW3")
|
||||||
|
if(@FFTW@ STREQUAL "FFTW3" AND NOT TARGET FFTW3::FFTW3)
|
||||||
|
add_library(FFTW3::FFTW3 UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(FFTW3::FFTW3 PROPERTIES
|
||||||
|
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
||||||
|
IMPORTED_LOCATION "@FFTW3_LIBRARY@"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "@FFTW3_INCLUDE_DIRS@")
|
||||||
|
endif()
|
||||||
|
if(@FFTW@ STREQUAL "FFTW3F" AND NOT TARGET FFTW3F::FFTW3F)
|
||||||
|
add_library(FFTW3F::FFTW3F UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(FFTW3F::FFTW3F PROPERTIES
|
||||||
|
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
||||||
|
IMPORTED_LOCATION "@FFTW3F_LIBRARY@"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "@FFTW3F_INCLUDE_DIRS@")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
if(NOT @BUILD_SHARED_LIBS@)
|
||||||
|
if(@WITH_JPEG@)
|
||||||
|
find_dependency(JPEG REQUIRED)
|
||||||
|
endif()
|
||||||
|
if(@WITH_PNG@)
|
||||||
|
find_dependency(PNG REQUIRED)
|
||||||
|
find_dependency(ZLIB REQUIRED)
|
||||||
|
endif()
|
||||||
|
if(@PKG_KIM@ AND NOT @DOWNLOAD_KIM@)
|
||||||
|
find_dependency(PkgConfig REQUIRED)
|
||||||
|
pkg_check_modules(KIM-API REQUIRED IMPORTED_TARGET libkim-api>=@KIM-API_MIN_VERSION@)
|
||||||
|
if(@CURL_FOUND@)
|
||||||
|
find_dependency(CURL REQUIRED)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
if(@PKG_USER-SMD@ AND NOT @DOWNLOAD_EIGEN3@)
|
||||||
|
find_dependency(Eigen3 NO_MODULE REQUIRED)
|
||||||
|
endif()
|
||||||
|
if(@PKG_KSPACE@ AND @FFT@ STREQUAL "FFTW3" AND @FFT_FFTW_THREADS@)
|
||||||
|
if(@FFTW@ STREQUAL "FFTW3" AND NOT TARGET FFTW3::FFTW3_OMP)
|
||||||
|
add_library(FFTW3::FFTW3_OMP UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(FFTW3::FFTW3_OMP PROPERTIES
|
||||||
|
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
||||||
|
IMPORTED_LOCATION "@FFTW3_OMP_LIBRARY@"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "@FFTW3_OMP_INCLUDE_DIRS@")
|
||||||
|
endif()
|
||||||
|
if(@FFTW@ STREQUAL "FFTW3F" AND NOT TARGET FFTW3F::FFTW3F_OMP)
|
||||||
|
add_library(FFTW3F::FFTW3F_OMP UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(FFTW3F::FFTW3F_OMP PROPERTIES
|
||||||
|
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
||||||
|
IMPORTED_LOCATION "@FFTW3F_OMP_LIBRARY@"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "@FFTW3F_OMP_INCLUDE_DIRS@")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
if(@PKG_USER-SCAFACOS@ AND NOT @DOWNLOAD_SCAFACOS@)
|
||||||
|
find_dependency(PkgConfig REQUIRED)
|
||||||
|
pkg_check_modules(SCAFACOS REQUIRED IMPORTED_TARGET scafacos)
|
||||||
|
endif()
|
||||||
|
if(@PKG_PYTHON@ AND NOT CMAKE_VERSION VERSION_LESS 3.12)
|
||||||
|
find_package(Python REQUIRED COMPONENTS Development)
|
||||||
|
endif()
|
||||||
|
if(@PKG_COMPRESS@)
|
||||||
|
find_dependency(ZLIB REQUIRED)
|
||||||
|
endif()
|
||||||
|
if(@PKG_KOKKOS@)
|
||||||
|
if(@EXTERNAL_KOKKOS@)
|
||||||
|
find_dependency(Kokkos 3 REQUIRED)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
if(@PKG_VORONOI@ AND NOT @DOWNLOAD_VORO@)
|
||||||
|
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()
|
||||||
|
endif()
|
||||||
|
if(@PKG_USER-INTEL@)
|
||||||
|
if(@INTEL_LRT_MODE@ STREQUAL "THREADS")
|
||||||
|
find_dependency(Threads REQUIRED)
|
||||||
|
endif()
|
||||||
|
if(@TBB_MALLOC_FOUND@)
|
||||||
|
if(NOT TARGET TBB::TBB_MALLOC)
|
||||||
|
add_library(TBB::TBB_MALLOC UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(TBB::TBB_MALLOC PROPERTIES
|
||||||
|
IMPORTED_LOCATION "@TBB_MALLOC_LIBRARY@"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "@TBB_MALLOC_INCLUDE_DIR@")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
include("${CMAKE_CURRENT_LIST_DIR}/LAMMPS_Targets.cmake")
|
||||||
21
cmake/Modules/CheckGeneratorSupport.cmake
Normal file
21
cmake/Modules/CheckGeneratorSupport.cmake
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# ninja-build<1.10 does not support fortran.
|
||||||
|
if(CMAKE_GENERATOR STREQUAL "Ninja")
|
||||||
|
set(CMAKE_GENERATOR_SUPPORT_FORTRAN FALSE)
|
||||||
|
execute_process(COMMAND "${CMAKE_MAKE_PROGRAM}" --version
|
||||||
|
OUTPUT_VARIABLE NINJA_VERSION
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
RESULT_VARIABLE _Ninja_version_result
|
||||||
|
)
|
||||||
|
if(_Ninja_version_result)
|
||||||
|
message(WARNING "Unable to determine ninja version: ${_Ninja_version_result}, assuming fortran isn't supported")
|
||||||
|
elseif(NINJA_VERSION VERSION_LESS "1.10")
|
||||||
|
message(WARNING "Ninja build tool too old, to compile Fortran code, please install ninja-1.10 or newer")
|
||||||
|
else()
|
||||||
|
set(CMAKE_GENERATOR_SUPPORT_FORTRAN TRUE)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set(CMAKE_GENERATOR_SUPPORT_FORTRAN TRUE)
|
||||||
|
if(NOT CMAKE_GENERATOR STREQUAL "Unix Makefiles")
|
||||||
|
message(WARNING "Assuming fortran is supported for ${CMAKE_GENERATOR}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
28
cmake/Modules/CodeCoverage.cmake
Normal file
28
cmake/Modules/CodeCoverage.cmake
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
###############################################################################
|
||||||
|
# Coverage
|
||||||
|
#
|
||||||
|
# Requires latest gcovr (for GCC 8.1 support):#
|
||||||
|
# pip install git+https://github.com/gcovr/gcovr.git
|
||||||
|
###############################################################################
|
||||||
|
if(ENABLE_COVERAGE)
|
||||||
|
find_program(GCOVR_BINARY gcovr)
|
||||||
|
find_package_handle_standard_args(GCOVR DEFAULT_MSG GCOVR_BINARY)
|
||||||
|
|
||||||
|
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_html
|
||||||
|
COMMAND ${GCOVR_BINARY} -s --html --html-details -r ${ABSOLUTE_LAMMPS_SOURCE_DIR} --object-directory=${CMAKE_BINARY_DIR} -o coverage.html
|
||||||
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
|
COMMENT "Generating HTML Coverage Report..."
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
42
cmake/Modules/Documentation.cmake
Normal file
42
cmake/Modules/Documentation.cmake
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
###############################################################################
|
||||||
|
# Build documentation
|
||||||
|
###############################################################################
|
||||||
|
option(BUILD_DOC "Build LAMMPS documentation" OFF)
|
||||||
|
if(BUILD_DOC)
|
||||||
|
include(ProcessorCount)
|
||||||
|
ProcessorCount(NPROCS)
|
||||||
|
find_package(PythonInterp 3 REQUIRED)
|
||||||
|
|
||||||
|
set(VIRTUALENV ${PYTHON_EXECUTABLE} -m virtualenv)
|
||||||
|
|
||||||
|
file(GLOB DOC_SOURCES ${LAMMPS_DOC_DIR}/src/[^.]*.rst)
|
||||||
|
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT docenv
|
||||||
|
COMMAND ${VIRTUALENV} docenv
|
||||||
|
)
|
||||||
|
|
||||||
|
set(DOCENV_BINARY_DIR ${CMAKE_BINARY_DIR}/docenv/bin)
|
||||||
|
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT requirements.txt
|
||||||
|
DEPENDS docenv
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LAMMPS_DOC_DIR}/utils/requirements.txt requirements.txt
|
||||||
|
COMMAND ${DOCENV_BINARY_DIR}/pip install -r requirements.txt --upgrade
|
||||||
|
COMMAND ${DOCENV_BINARY_DIR}/pip install --upgrade ${LAMMPS_DOC_DIR}/utils/converters
|
||||||
|
)
|
||||||
|
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT html
|
||||||
|
DEPENDS ${DOC_SOURCES} docenv requirements.txt
|
||||||
|
COMMAND ${DOCENV_BINARY_DIR}/sphinx-build -j ${NPROCS} -b html -c ${LAMMPS_DOC_DIR}/utils/sphinx-config -d ${CMAKE_BINARY_DIR}/doctrees ${LAMMPS_DOC_DIR}/src html
|
||||||
|
)
|
||||||
|
|
||||||
|
add_custom_target(
|
||||||
|
doc ALL
|
||||||
|
DEPENDS html
|
||||||
|
SOURCES ${LAMMPS_DOC_DIR}/utils/requirements.txt ${DOC_SOURCES}
|
||||||
|
)
|
||||||
|
|
||||||
|
install(DIRECTORY ${CMAKE_BINARY_DIR}/html DESTINATION ${CMAKE_INSTALL_DOCDIR})
|
||||||
|
endif()
|
||||||
16
cmake/Modules/FindCUB.cmake
Normal file
16
cmake/Modules/FindCUB.cmake
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# - Find CUB
|
||||||
|
# Find the CUB header library
|
||||||
|
#
|
||||||
|
# CUB_INCLUDE_DIRS - where to find cub/cub.cuh
|
||||||
|
# CUB_FOUND - True if CUB found.
|
||||||
|
#
|
||||||
|
|
||||||
|
find_path(CUB_INCLUDE_DIR cub.cuh PATH_SUFFIXES cub)
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
# handle the QUIETLY and REQUIRED arguments and set CUB_FOUND to TRUE
|
||||||
|
# if all listed variables are TRUE
|
||||||
|
|
||||||
|
find_package_handle_standard_args(CUB DEFAULT_MSG CUB_INCLUDE_DIR)
|
||||||
|
|
||||||
|
mark_as_advanced(CUB_INCLUDE_DIR)
|
||||||
@ -1,8 +1,9 @@
|
|||||||
# - Find fftw3
|
# - Find fftw3
|
||||||
# Find the native FFTW3 headers and libraries.
|
# Find the native double precision FFTW3 headers and libraries.
|
||||||
#
|
#
|
||||||
# FFTW3_INCLUDE_DIRS - where to find fftw3.h, etc.
|
# FFTW3_INCLUDE_DIRS - where to find fftw3.h, etc.
|
||||||
# FFTW3_LIBRARIES - List of libraries when using fftw3.
|
# FFTW3_LIBRARIES - List of libraries when using fftw3.
|
||||||
|
# FFTW3_OMP_LIBRARIES - List of libraries when using fftw3.
|
||||||
# FFTW3_FOUND - True if fftw3 found.
|
# FFTW3_FOUND - True if fftw3 found.
|
||||||
#
|
#
|
||||||
|
|
||||||
@ -10,11 +11,8 @@ find_package(PkgConfig)
|
|||||||
|
|
||||||
pkg_check_modules(PC_FFTW3 fftw3)
|
pkg_check_modules(PC_FFTW3 fftw3)
|
||||||
find_path(FFTW3_INCLUDE_DIR fftw3.h HINTS ${PC_FFTW3_INCLUDE_DIRS})
|
find_path(FFTW3_INCLUDE_DIR fftw3.h HINTS ${PC_FFTW3_INCLUDE_DIRS})
|
||||||
|
|
||||||
find_library(FFTW3_LIBRARY NAMES fftw3 HINTS ${PC_FFTW3_LIBRARY_DIRS})
|
find_library(FFTW3_LIBRARY NAMES fftw3 HINTS ${PC_FFTW3_LIBRARY_DIRS})
|
||||||
|
find_library(FFTW3_OMP_LIBRARY NAMES fftw3_omp HINTS ${PC_FFTW3_LIBRARY_DIRS})
|
||||||
set(FFTW3_LIBRARIES ${FFTW3_LIBRARY})
|
|
||||||
set(FFTW3_INCLUDE_DIRS ${FFTW3_INCLUDE_DIR})
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
include(FindPackageHandleStandardArgs)
|
||||||
# handle the QUIETLY and REQUIRED arguments and set FFTW3_FOUND to TRUE
|
# handle the QUIETLY and REQUIRED arguments and set FFTW3_FOUND to TRUE
|
||||||
@ -22,4 +20,28 @@ include(FindPackageHandleStandardArgs)
|
|||||||
|
|
||||||
find_package_handle_standard_args(FFTW3 DEFAULT_MSG FFTW3_LIBRARY FFTW3_INCLUDE_DIR)
|
find_package_handle_standard_args(FFTW3 DEFAULT_MSG FFTW3_LIBRARY FFTW3_INCLUDE_DIR)
|
||||||
|
|
||||||
mark_as_advanced(FFTW3_INCLUDE_DIR FFTW3_LIBRARY )
|
# Copy the results to the output variables and target.
|
||||||
|
if(FFTW3_FOUND)
|
||||||
|
set(FFTW3_LIBRARIES ${FFTW3_LIBRARY} )
|
||||||
|
set(FFTW3_INCLUDE_DIRS ${FFTW3_INCLUDE_DIR} )
|
||||||
|
|
||||||
|
if(NOT TARGET FFTW3::FFTW3)
|
||||||
|
add_library(FFTW3::FFTW3 UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(FFTW3::FFTW3 PROPERTIES
|
||||||
|
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
||||||
|
IMPORTED_LOCATION "${FFTW3_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${FFTW3_INCLUDE_DIRS}")
|
||||||
|
endif()
|
||||||
|
if(FFTW3_OMP_LIBRARY)
|
||||||
|
set(FFTW3_OMP_LIBRARIES ${FFTW3_OMP_LIBRARY})
|
||||||
|
if(NOT TARGET FFTW3::FFTW3_OMP)
|
||||||
|
add_library(FFTW3::FFTW3_OMP UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(FFTW3::FFTW3_OMP PROPERTIES
|
||||||
|
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
||||||
|
IMPORTED_LOCATION "${FFTW3_OMP_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${FFTW3_INCLUDE_DIRS}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
mark_as_advanced(FFTW3_INCLUDE_DIR FFTW3_LIBRARY FFTW3_OMP_LIBRARY)
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
# - Find fftw3f
|
# Find the native single precision FFTW3 headers and libraries.
|
||||||
# Find the native FFTW3F headers and libraries.
|
|
||||||
#
|
#
|
||||||
# FFTW3F_INCLUDE_DIRS - where to find fftw3f.h, etc.
|
# FFTW3F_INCLUDE_DIRS - where to find fftw3f.h, etc.
|
||||||
# FFTW3F_LIBRARIES - List of libraries when using fftw3f.
|
# FFTW3F_LIBRARIES - List of libraries when using fftw3f.
|
||||||
|
# FFTW3F_OMP_LIBRARIES - List of libraries when using fftw3.
|
||||||
# FFTW3F_FOUND - True if fftw3f found.
|
# FFTW3F_FOUND - True if fftw3f found.
|
||||||
#
|
#
|
||||||
|
|
||||||
@ -10,11 +10,8 @@ find_package(PkgConfig)
|
|||||||
|
|
||||||
pkg_check_modules(PC_FFTW3F fftw3f)
|
pkg_check_modules(PC_FFTW3F fftw3f)
|
||||||
find_path(FFTW3F_INCLUDE_DIR fftw3.h HINTS ${PC_FFTW3F_INCLUDE_DIRS})
|
find_path(FFTW3F_INCLUDE_DIR fftw3.h HINTS ${PC_FFTW3F_INCLUDE_DIRS})
|
||||||
|
|
||||||
find_library(FFTW3F_LIBRARY NAMES fftw3f HINTS ${PC_FFTW3F_LIBRARY_DIRS})
|
find_library(FFTW3F_LIBRARY NAMES fftw3f HINTS ${PC_FFTW3F_LIBRARY_DIRS})
|
||||||
|
find_library(FFTW3F_OMP_LIBRARY NAMES fftw3f_omp HINTS ${PC_FFTW3F_LIBRARY_DIRS})
|
||||||
set(FFTW3F_LIBRARIES ${FFTW3F_LIBRARY})
|
|
||||||
set(FFTW3F_INCLUDE_DIRS ${FFTW3F_INCLUDE_DIR})
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
include(FindPackageHandleStandardArgs)
|
||||||
# handle the QUIETLY and REQUIRED arguments and set FFTW3F_FOUND to TRUE
|
# handle the QUIETLY and REQUIRED arguments and set FFTW3F_FOUND to TRUE
|
||||||
@ -22,4 +19,28 @@ include(FindPackageHandleStandardArgs)
|
|||||||
|
|
||||||
find_package_handle_standard_args(FFTW3F DEFAULT_MSG FFTW3F_LIBRARY FFTW3F_INCLUDE_DIR)
|
find_package_handle_standard_args(FFTW3F DEFAULT_MSG FFTW3F_LIBRARY FFTW3F_INCLUDE_DIR)
|
||||||
|
|
||||||
mark_as_advanced(FFTW3F_INCLUDE_DIR FFTW3F_LIBRARY )
|
# Copy the results to the output variables and target.
|
||||||
|
if(FFTW3F_FOUND)
|
||||||
|
set(FFTW3F_LIBRARIES ${FFTW3F_LIBRARY} )
|
||||||
|
set(FFTW3F_INCLUDE_DIRS ${FFTW3F_INCLUDE_DIR} )
|
||||||
|
|
||||||
|
if(NOT TARGET FFTW3F::FFTW3F)
|
||||||
|
add_library(FFTW3F::FFTW3F UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(FFTW3F::FFTW3F PROPERTIES
|
||||||
|
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
||||||
|
IMPORTED_LOCATION "${FFTW3F_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${FFTW3F_INCLUDE_DIRS}")
|
||||||
|
endif()
|
||||||
|
if(FFTW3F_OMP_LIBRARY)
|
||||||
|
set(FFTW3F_OMP_LIBRARIES ${FFTW3F_OMP_LIBRARY})
|
||||||
|
if(NOT TARGET FFTW3F::FFTW3F_OMP)
|
||||||
|
add_library(FFTW3F::FFTW3F_OMP UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(FFTW3F::FFTW3F_OMP PROPERTIES
|
||||||
|
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
||||||
|
IMPORTED_LOCATION "${FFTW3F_OMP_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${FFTW3F_INCLUDE_DIRS}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
mark_as_advanced(FFTW3F_INCLUDE_DIR FFTW3F_LIBRARY FFTW3F_OMP_LIBRARY)
|
||||||
|
|||||||
@ -1,59 +0,0 @@
|
|||||||
#
|
|
||||||
# CDDL HEADER START
|
|
||||||
#
|
|
||||||
# The contents of this file are subject to the terms of the Common Development
|
|
||||||
# and Distribution License Version 1.0 (the "License").
|
|
||||||
#
|
|
||||||
# You can obtain a copy of the license at
|
|
||||||
# http://www.opensource.org/licenses/CDDL-1.0. See the License for the
|
|
||||||
# specific language governing permissions and limitations under the License.
|
|
||||||
#
|
|
||||||
# When distributing Covered Code, include this CDDL HEADER in each file and
|
|
||||||
# include the License file in a prominent location with the name LICENSE.CDDL.
|
|
||||||
# If applicable, add the following below this CDDL HEADER, with the fields
|
|
||||||
# enclosed by brackets "[]" replaced with your own identifying information:
|
|
||||||
#
|
|
||||||
# Portions Copyright (c) [yyyy] [name of copyright owner]. All rights reserved.
|
|
||||||
#
|
|
||||||
# CDDL HEADER END
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
|
||||||
# Copyright (c) 2013--2019, Regents of the University of Minnesota.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Contributors:
|
|
||||||
# Richard Berger
|
|
||||||
# Christoph Junghans
|
|
||||||
# Ryan S. Elliott
|
|
||||||
#
|
|
||||||
|
|
||||||
# - Find KIM-API
|
|
||||||
#
|
|
||||||
# sets standard pkg_check_modules variables plus:
|
|
||||||
#
|
|
||||||
# KIM-API-CMAKE_C_COMPILER
|
|
||||||
# KIM-API-CMAKE_CXX_COMPILER
|
|
||||||
# KIM-API-CMAKE_Fortran_COMPILER
|
|
||||||
#
|
|
||||||
|
|
||||||
if(KIM-API_FIND_QUIETLY)
|
|
||||||
set(REQ_OR_QUI "QUIET")
|
|
||||||
else()
|
|
||||||
set(REQ_OR_QUI "REQUIRED")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_package(PkgConfig ${REQ_OR_QUI})
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
|
|
||||||
pkg_check_modules(KIM-API ${REQ_OR_QUI} libkim-api>=2.0)
|
|
||||||
|
|
||||||
if(KIM-API_FOUND)
|
|
||||||
pkg_get_variable(KIM-API-CMAKE_C_COMPILER libkim-api CMAKE_C_COMPILER)
|
|
||||||
pkg_get_variable(KIM-API-CMAKE_CXX_COMPILER libkim-api CMAKE_CXX_COMPILER)
|
|
||||||
pkg_get_variable(KIM-API_CMAKE_Fortran_COMPILER libkim-api CMAKE_Fortran_COMPILER)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# handle the QUIETLY and REQUIRED arguments and set KIM-API_FOUND to TRUE
|
|
||||||
# if all listed variables are TRUE
|
|
||||||
find_package_handle_standard_args(KIM-API REQUIRED_VARS KIM-API_LIBRARIES)
|
|
||||||
@ -7,12 +7,21 @@
|
|||||||
|
|
||||||
find_library(LATTE_LIBRARY NAMES latte)
|
find_library(LATTE_LIBRARY NAMES latte)
|
||||||
|
|
||||||
set(LATTE_LIBRARIES ${LATTE_LIBRARY})
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
include(FindPackageHandleStandardArgs)
|
||||||
# handle the QUIETLY and REQUIRED arguments and set LATTE_FOUND to TRUE
|
# handle the QUIETLY and REQUIRED arguments and set LATTE_FOUND to TRUE
|
||||||
# if all listed variables are TRUE
|
# if all listed variables are TRUE
|
||||||
|
|
||||||
find_package_handle_standard_args(LATTE DEFAULT_MSG LATTE_LIBRARY)
|
find_package_handle_standard_args(LATTE DEFAULT_MSG LATTE_LIBRARY)
|
||||||
|
|
||||||
|
# Copy the results to the output variables and target.
|
||||||
|
if(LATTE_FOUND)
|
||||||
|
set(LATTE_LIBRARIES ${LATTE_LIBRARY})
|
||||||
|
|
||||||
|
if(NOT TARGET LATTE::latte)
|
||||||
|
add_library(LATTE::latte UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(LATTE::latte PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${LATTE_LIBRARY}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
mark_as_advanced(LATTE_LIBRARY)
|
mark_as_advanced(LATTE_LIBRARY)
|
||||||
|
|||||||
@ -10,13 +10,22 @@ find_path(MKL_INCLUDE_DIR mkl_dfti.h HINTS $ENV{MKLROOT}/include)
|
|||||||
|
|
||||||
find_library(MKL_LIBRARY NAMES mkl_rt HINTS $ENV{MKLROOT}/lib $ENV{MKLROOT}/lib/intel64)
|
find_library(MKL_LIBRARY NAMES mkl_rt HINTS $ENV{MKLROOT}/lib $ENV{MKLROOT}/lib/intel64)
|
||||||
|
|
||||||
set(MKL_LIBRARIES ${MKL_LIBRARY})
|
|
||||||
set(MKL_INCLUDE_DIRS ${MKL_INCLUDE_DIR})
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
include(FindPackageHandleStandardArgs)
|
||||||
# handle the QUIETLY and REQUIRED arguments and set MKL_FOUND to TRUE
|
# handle the QUIETLY and REQUIRED arguments and set MKL_FOUND to TRUE
|
||||||
# if all listed variables are TRUE
|
# if all listed variables are TRUE
|
||||||
|
|
||||||
find_package_handle_standard_args(MKL DEFAULT_MSG MKL_LIBRARY MKL_INCLUDE_DIR)
|
find_package_handle_standard_args(MKL DEFAULT_MSG MKL_LIBRARY MKL_INCLUDE_DIR)
|
||||||
|
|
||||||
|
if(MKL_FOUND)
|
||||||
|
set(MKL_LIBRARIES ${MKL_LIBRARY})
|
||||||
|
set(MKL_INCLUDE_DIRS ${MKL_INCLUDE_DIR})
|
||||||
|
|
||||||
|
if(NOT TARGET MKL::MKL)
|
||||||
|
add_library(MKL::MKL UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(MKL::MKL PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${MKL_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${MKL_INCLUDE_DIR}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
mark_as_advanced(MKL_INCLUDE_DIR MKL_LIBRARY )
|
mark_as_advanced(MKL_INCLUDE_DIR MKL_LIBRARY )
|
||||||
|
|||||||
@ -10,13 +10,23 @@ find_path(MSCG_INCLUDE_DIR mscg.h PATH_SUFFIXES mscg)
|
|||||||
|
|
||||||
find_library(MSCG_LIBRARY NAMES mscg)
|
find_library(MSCG_LIBRARY NAMES mscg)
|
||||||
|
|
||||||
set(MSCG_LIBRARIES ${MSCG_LIBRARY})
|
|
||||||
set(MSCG_INCLUDE_DIRS ${MSCG_INCLUDE_DIR})
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
include(FindPackageHandleStandardArgs)
|
||||||
# handle the QUIETLY and REQUIRED arguments and set MSCG_FOUND to TRUE
|
# handle the QUIETLY and REQUIRED arguments and set MSCG_FOUND to TRUE
|
||||||
# if all listed variables are TRUE
|
# if all listed variables are TRUE
|
||||||
|
|
||||||
find_package_handle_standard_args(MSCG DEFAULT_MSG MSCG_LIBRARY MSCG_INCLUDE_DIR)
|
find_package_handle_standard_args(MSCG DEFAULT_MSG MSCG_LIBRARY MSCG_INCLUDE_DIR)
|
||||||
|
|
||||||
|
# Copy the results to the output variables and target.
|
||||||
|
if(MSCG_FOUND)
|
||||||
|
set(MSCG_LIBRARIES ${MSCG_LIBRARY})
|
||||||
|
set(MSCG_INCLUDE_DIRS ${MSCG_INCLUDE_DIR})
|
||||||
|
|
||||||
|
if(NOT TARGET MSCG::MSCG)
|
||||||
|
add_library(MSCG::MSCG UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(MSCG::MSCG PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${MSCG_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${MSCG_INCLUDE_DIR}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
mark_as_advanced(MSCG_INCLUDE_DIR MSCG_LIBRARY )
|
mark_as_advanced(MSCG_INCLUDE_DIR MSCG_LIBRARY )
|
||||||
|
|||||||
@ -46,10 +46,14 @@ endif()
|
|||||||
find_path (NETCDF_INCLUDE_DIR netcdf.h
|
find_path (NETCDF_INCLUDE_DIR netcdf.h
|
||||||
HINTS "${NETCDF_DIR}/include")
|
HINTS "${NETCDF_DIR}/include")
|
||||||
mark_as_advanced (NETCDF_INCLUDE_DIR)
|
mark_as_advanced (NETCDF_INCLUDE_DIR)
|
||||||
|
|
||||||
set (NETCDF_C_INCLUDE_DIRS ${NETCDF_INCLUDE_DIR})
|
set (NETCDF_C_INCLUDE_DIRS ${NETCDF_INCLUDE_DIR})
|
||||||
|
|
||||||
|
string(REGEX REPLACE "/include/?$" ""
|
||||||
|
NETCDF_LIB_HINT ${NETCDF_INCLUDE_DIR})
|
||||||
|
|
||||||
find_library (NETCDF_LIBRARY NAMES netcdf
|
find_library (NETCDF_LIBRARY NAMES netcdf
|
||||||
HINTS "${NETCDF_DIR}/lib")
|
HINTS "${NETCDF_DIR}" "${NETCDF_LIB_HINT}" PATH_SUFFIXES lib lib64)
|
||||||
mark_as_advanced (NETCDF_LIBRARY)
|
mark_as_advanced (NETCDF_LIBRARY)
|
||||||
|
|
||||||
set (NETCDF_C_LIBRARIES ${NETCDF_LIBRARY})
|
set (NETCDF_C_LIBRARIES ${NETCDF_LIBRARY})
|
||||||
@ -116,3 +120,14 @@ set (NETCDF_INCLUDE_DIRS ${NetCDF_includes})
|
|||||||
include (FindPackageHandleStandardArgs)
|
include (FindPackageHandleStandardArgs)
|
||||||
find_package_handle_standard_args (NetCDF
|
find_package_handle_standard_args (NetCDF
|
||||||
DEFAULT_MSG NETCDF_LIBRARIES NETCDF_INCLUDE_DIRS NETCDF_HAS_INTERFACES)
|
DEFAULT_MSG NETCDF_LIBRARIES NETCDF_INCLUDE_DIRS NETCDF_HAS_INTERFACES)
|
||||||
|
|
||||||
|
# Copy the results to the output variables and target.
|
||||||
|
if(NetCDF_FOUND)
|
||||||
|
if(NOT TARGET NetCDF::NetCDF)
|
||||||
|
add_library(NetCDF::NetCDF UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(NetCDF::NetCDF PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${NETCDF_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${NETCDF_INCLUDE_DIRS}"
|
||||||
|
INTERFACE_LINK_LIBRARIES "${NETCDF_LIBRARIES}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|||||||
64
cmake/Modules/FindPNetCDF.cmake
Normal file
64
cmake/Modules/FindPNetCDF.cmake
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
# source: https://ftp.space.dtu.dk/pub/Ioana/pism0.6.1-10/CMake/FindPNetCDF.cmake
|
||||||
|
# license: GPL v3 (https://ftp.space.dtu.dk/pub/Ioana/pism0.6.1-10/COPYING)
|
||||||
|
#
|
||||||
|
# - Find PNetCDF
|
||||||
|
# Find the native PNetCDF includes and library
|
||||||
|
#
|
||||||
|
# PNETCDF_INCLUDES - where to find netcdf.h, etc
|
||||||
|
# PNETCDF_LIBRARIES - Link these libraries when using NetCDF
|
||||||
|
# PNETCDF_FOUND - True if PNetCDF was found
|
||||||
|
#
|
||||||
|
# Normal usage would be:
|
||||||
|
# find_package (PNetCDF REQUIRED)
|
||||||
|
# target_link_libraries (uses_pnetcdf ${PNETCDF_LIBRARIES})
|
||||||
|
|
||||||
|
if (PNETCDF_INCLUDES AND PNETCDF_LIBRARIES)
|
||||||
|
# Already in cache, be silent
|
||||||
|
set (PNETCDF_FIND_QUIETLY TRUE)
|
||||||
|
endif (PNETCDF_INCLUDES AND PNETCDF_LIBRARIES)
|
||||||
|
|
||||||
|
find_path (PNETCDF_INCLUDES pnetcdf.h
|
||||||
|
HINTS "${PNETCDF_ROOT}/include" "$ENV{PNETCDF_ROOT}/include")
|
||||||
|
|
||||||
|
string(REGEX REPLACE "/include/?$" ""
|
||||||
|
PNETCDF_LIB_HINT ${PNETCDF_INCLUDES})
|
||||||
|
|
||||||
|
find_library (PNETCDF_LIBRARIES
|
||||||
|
NAMES pnetcdf
|
||||||
|
HINTS ${PNETCDF_LIB_HINT} PATH_SUFFIXES lib lib64)
|
||||||
|
|
||||||
|
if ((NOT PNETCDF_LIBRARIES) OR (NOT PNETCDF_INCLUDES))
|
||||||
|
message(STATUS "Trying to find PNetCDF using LD_LIBRARY_PATH (we're desperate)...")
|
||||||
|
|
||||||
|
file(TO_CMAKE_PATH "$ENV{LD_LIBRARY_PATH}" LD_LIBRARY_PATH)
|
||||||
|
|
||||||
|
find_library(PNETCDF_LIBRARIES
|
||||||
|
NAMES pnetcdf
|
||||||
|
HINTS ${LD_LIBRARY_PATH})
|
||||||
|
|
||||||
|
if (PNETCDF_LIBRARIES)
|
||||||
|
get_filename_component(PNETCDF_LIB_DIR ${PNETCDF_LIBRARIES} PATH)
|
||||||
|
string(REGEX REPLACE "/(lib|lib64)/?$" "/include"
|
||||||
|
PNETCDF_H_HINT ${PNETCDF_LIB_DIR})
|
||||||
|
|
||||||
|
find_path (PNETCDF_INCLUDES pnetcdf.h
|
||||||
|
HINTS ${PNETCDF_H_HINT}
|
||||||
|
DOC "Path to pnetcdf.h")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# handle the QUIETLY and REQUIRED arguments and set PNETCDF_FOUND to TRUE if
|
||||||
|
# all listed variables are TRUE
|
||||||
|
include (FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args (PNetCDF DEFAULT_MSG PNETCDF_LIBRARIES PNETCDF_INCLUDES)
|
||||||
|
|
||||||
|
mark_as_advanced (PNETCDF_LIBRARIES PNETCDF_INCLUDES)
|
||||||
|
|
||||||
|
if(PNetCDF_FOUND)
|
||||||
|
if(NOT TARGET PNetCDF::PNetCDF)
|
||||||
|
add_library(PNetCDF::PNetCDF UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(PNetCDF::PNetCDF PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${PNETCDF_LIBRARIES}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${PNETCDF_INCLUDES}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
@ -1,29 +0,0 @@
|
|||||||
# - Find quantum-espresso
|
|
||||||
# Find the native QE headers and libraries.
|
|
||||||
#
|
|
||||||
# QE_INCLUDE_DIRS - where to find quantum-espresso.h, etc.
|
|
||||||
# QE_LIBRARIES - List of libraries when using quantum-espresso.
|
|
||||||
# QE_FOUND - True if quantum-espresso found.
|
|
||||||
#
|
|
||||||
|
|
||||||
find_path(QE_INCLUDE_DIR libqecouple.h PATH_SUFFIXES COUPLE/include)
|
|
||||||
|
|
||||||
find_library(QECOUPLE_LIBRARY NAMES qecouple)
|
|
||||||
find_library(PW_LIBRARY NAMES pw)
|
|
||||||
find_library(QEMOD_LIBRARY NAMES qemod)
|
|
||||||
find_library(QEFFT_LIBRARY NAMES qefft)
|
|
||||||
find_library(QELA_LIBRARY NAMES qela)
|
|
||||||
find_library(CLIB_LIBRARY NAMES clib)
|
|
||||||
find_library(IOTK_LIBRARY NAMES iotk)
|
|
||||||
|
|
||||||
|
|
||||||
set(QE_LIBRARIES ${QECOUPLE_LIBRARY} ${PW_LIBRARY} ${QEMOD_LIBRARY} ${QEFFT_LIBRARY} ${QELA_LIBRARY} ${CLIB_LIBRARY} ${IOTK_LIBRARY})
|
|
||||||
set(QE_INCLUDE_DIRS ${QE_INCLUDE_DIR})
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
# handle the QUIETLY and REQUIRED arguments and set QE_FOUND to TRUE
|
|
||||||
# if all listed variables are TRUE
|
|
||||||
|
|
||||||
find_package_handle_standard_args(QE DEFAULT_MSG QECOUPLE_LIBRARY PW_LIBRARY QEMOD_LIBRARY QEFFT_LIBRARY QELA_LIBRARY CLIB_LIBRARY IOTK_LIBRARY QE_INCLUDE_DIR)
|
|
||||||
|
|
||||||
mark_as_advanced(QE_INCLUDE_DIR QECOUPLE_LIBRARY PW_LIBRARY QEMOD_LIBRARY QEFFT_LIBRARY QELA_LIBRARY CLIB_LIBRARY IOTK_LIBRARY)
|
|
||||||
@ -7,12 +7,21 @@
|
|||||||
|
|
||||||
find_library(QUIP_LIBRARY NAMES quip)
|
find_library(QUIP_LIBRARY NAMES quip)
|
||||||
|
|
||||||
set(QUIP_LIBRARIES ${QUIP_LIBRARY})
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
include(FindPackageHandleStandardArgs)
|
||||||
# handle the QUIETLY and REQUIRED arguments and set QUIP_FOUND to TRUE
|
# handle the QUIETLY and REQUIRED arguments and set QUIP_FOUND to TRUE
|
||||||
# if all listed variables are TRUE
|
# if all listed variables are TRUE
|
||||||
|
|
||||||
find_package_handle_standard_args(QUIP DEFAULT_MSG QUIP_LIBRARY)
|
find_package_handle_standard_args(QUIP DEFAULT_MSG QUIP_LIBRARY)
|
||||||
|
|
||||||
|
# Copy the results to the output variables and target.
|
||||||
|
if(QUIP_FOUND)
|
||||||
|
set(QUIP_LIBRARIES ${QUIP_LIBRARY})
|
||||||
|
|
||||||
|
if(NOT TARGET QUIP::QUIP)
|
||||||
|
add_library(QUIP::QUIP UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(QUIP::QUIP PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${QUIP_LIBRARY}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
mark_as_advanced(QUIP_LIBRARY)
|
mark_as_advanced(QUIP_LIBRARY)
|
||||||
|
|||||||
@ -1,46 +0,0 @@
|
|||||||
# - Find parts of TBB
|
|
||||||
# Find the native TBB headers and libraries.
|
|
||||||
#
|
|
||||||
# TBB_INCLUDE_DIRS - where to find tbb.h, etc.
|
|
||||||
# TBB_LIBRARIES - List of libraries when using tbb.
|
|
||||||
# TBB_FOUND - True if tbb found.
|
|
||||||
#
|
|
||||||
|
|
||||||
########################################################
|
|
||||||
# TBB
|
|
||||||
|
|
||||||
# TODO use more generic FindTBB
|
|
||||||
|
|
||||||
find_path(TBB_INCLUDE_DIR NAMES tbb/tbb.h PATHS $ENV{TBBROOT}/include)
|
|
||||||
find_library(TBB_LIBRARY NAMES tbb PATHS $ENV{TBBROOT}/lib/intel64/gcc4.7
|
|
||||||
$ENV{TBBROOT}/lib/intel64/gcc4.4
|
|
||||||
$ENV{TBBROOT}/lib/intel64/gcc4.1)
|
|
||||||
set(TBB_LIBRARIES ${TBB_LIBRARY})
|
|
||||||
set(TBB_INCLUDE_DIRS ${TBB_INCLUDE_DIR})
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
# handle the QUIETLY and REQUIRED arguments and set TBB_FOUND to TRUE
|
|
||||||
# if all listed variables are TRUE
|
|
||||||
|
|
||||||
find_package_handle_standard_args(TBB DEFAULT_MSG TBB_LIBRARY TBB_INCLUDE_DIR)
|
|
||||||
|
|
||||||
mark_as_advanced(TBB_INCLUDE_DIR TBB_LIBRARY )
|
|
||||||
|
|
||||||
########################################################
|
|
||||||
# TBB Malloc
|
|
||||||
|
|
||||||
find_path(TBB_MALLOC_INCLUDE_DIR NAMES tbb/tbb.h PATHS $ENV{TBBROOT}/include)
|
|
||||||
find_library(TBB_MALLOC_LIBRARY NAMES tbbmalloc PATHS $ENV{TBBROOT}/lib/intel64/gcc4.7
|
|
||||||
$ENV{TBBROOT}/lib/intel64/gcc4.4
|
|
||||||
$ENV{TBBROOT}/lib/intel64/gcc4.1)
|
|
||||||
|
|
||||||
set(TBB_MALLOC_LIBRARIES ${TBB_MALLOC_LIBRARY})
|
|
||||||
set(TBB_MALLOC_INCLUDE_DIRS ${TBB_MALLOC_INCLUDE_DIR})
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
# handle the QUIETLY and REQUIRED arguments and set TBB_MALLOC_FOUND to TRUE
|
|
||||||
# if all listed variables are TRUE
|
|
||||||
|
|
||||||
find_package_handle_standard_args(TBB_MALLOC DEFAULT_MSG TBB_MALLOC_LIBRARY TBB_MALLOC_INCLUDE_DIR)
|
|
||||||
|
|
||||||
mark_as_advanced(TBB_MALLOC_INCLUDE_DIR TBB_MALLOC_LIBRARY )
|
|
||||||
36
cmake/Modules/FindTBB_MALLOC.cmake
Normal file
36
cmake/Modules/FindTBB_MALLOC.cmake
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
# - Find parts of TBB_MALLOC
|
||||||
|
# Find the native TBB_MALLOC headers and libraries.
|
||||||
|
#
|
||||||
|
# TBB_MALLOC_INCLUDE_DIRS - where to find tbb.h, etc.
|
||||||
|
# TBB_MALLOC_LIBRARIES - List of libraries when using tbb.
|
||||||
|
# TBB_MALLOC_FOUND - True if tbb found.
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
########################################################
|
||||||
|
# TBB Malloc
|
||||||
|
|
||||||
|
find_path(TBB_MALLOC_INCLUDE_DIR NAMES tbb/tbb.h PATHS $ENV{TBBROOT}/include)
|
||||||
|
find_library(TBB_MALLOC_LIBRARY NAMES tbbmalloc PATHS $ENV{TBBROOT}/lib/intel64/gcc4.7
|
||||||
|
$ENV{TBBROOT}/lib/intel64/gcc4.4
|
||||||
|
$ENV{TBBROOT}/lib/intel64/gcc4.1)
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
# handle the QUIETLY and REQUIRED arguments and set TBB_MALLOC_FOUND to TRUE
|
||||||
|
# if all listed variables are TRUE
|
||||||
|
|
||||||
|
find_package_handle_standard_args(TBB_MALLOC DEFAULT_MSG TBB_MALLOC_LIBRARY TBB_MALLOC_INCLUDE_DIR)
|
||||||
|
|
||||||
|
if(TBB_MALLOC_FOUND)
|
||||||
|
set(TBB_MALLOC_LIBRARIES ${TBB_MALLOC_LIBRARY})
|
||||||
|
set(TBB_MALLOC_INCLUDE_DIRS ${TBB_MALLOC_INCLUDE_DIR})
|
||||||
|
|
||||||
|
if(NOT TARGET TBB::TBB_MALLOC)
|
||||||
|
add_library(TBB::TBB_MALLOC UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(TBB::TBB_MALLOC PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${TBB_MALLOC_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${TBB_MALLOC_INCLUDE_DIR}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
mark_as_advanced(TBB_MALLOC_INCLUDE_DIR TBB_MALLOC_LIBRARY )
|
||||||
@ -10,13 +10,23 @@ find_path(VORO_INCLUDE_DIR voro++.hh PATH_SUFFIXES voro++)
|
|||||||
|
|
||||||
find_library(VORO_LIBRARY NAMES voro++)
|
find_library(VORO_LIBRARY NAMES voro++)
|
||||||
|
|
||||||
set(VORO_LIBRARIES ${VORO_LIBRARY})
|
|
||||||
set(VORO_INCLUDE_DIRS ${VORO_INCLUDE_DIR})
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
include(FindPackageHandleStandardArgs)
|
||||||
# handle the QUIETLY and REQUIRED arguments and set VORO_FOUND to TRUE
|
# handle the QUIETLY and REQUIRED arguments and set VORO_FOUND to TRUE
|
||||||
# if all listed variables are TRUE
|
# if all listed variables are TRUE
|
||||||
|
|
||||||
find_package_handle_standard_args(VORO DEFAULT_MSG VORO_LIBRARY VORO_INCLUDE_DIR)
|
find_package_handle_standard_args(VORO DEFAULT_MSG VORO_LIBRARY VORO_INCLUDE_DIR)
|
||||||
|
|
||||||
|
# Copy the results to the output variables and target.
|
||||||
|
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
|
||||||
|
IMPORTED_LOCATION "${VORO_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${VORO_INCLUDE_DIR}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
mark_as_advanced(VORO_INCLUDE_DIR VORO_LIBRARY )
|
mark_as_advanced(VORO_INCLUDE_DIR VORO_LIBRARY )
|
||||||
|
|||||||
@ -1,8 +1,19 @@
|
|||||||
find_path(ZMQ_INCLUDE_DIR zmq.h)
|
find_path(ZMQ_INCLUDE_DIR zmq.h)
|
||||||
find_library(ZMQ_LIBRARY NAMES zmq)
|
find_library(ZMQ_LIBRARY NAMES zmq)
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(ZMQ DEFAULT_MSG ZMQ_LIBRARY ZMQ_INCLUDE_DIR)
|
||||||
|
|
||||||
|
# Copy the results to the output variables and target.
|
||||||
|
if(ZMQ_FOUND)
|
||||||
set(ZMQ_LIBRARIES ${ZMQ_LIBRARY})
|
set(ZMQ_LIBRARIES ${ZMQ_LIBRARY})
|
||||||
set(ZMQ_INCLUDE_DIRS ${ZMQ_INCLUDE_DIR})
|
set(ZMQ_INCLUDE_DIRS ${ZMQ_INCLUDE_DIR})
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
if(NOT TARGET ZMQ::ZMQ)
|
||||||
find_package_handle_standard_args(ZMQ DEFAULT_MSG ZMQ_LIBRARY ZMQ_INCLUDE_DIR)
|
add_library(ZMQ::ZMQ UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(ZMQ::ZMQ PROPERTIES
|
||||||
|
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
||||||
|
IMPORTED_LOCATION "${ZMQ_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${ZMQ_INCLUDE_DIR}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|||||||
3
cmake/Modules/GenerateBinaryHeader.cmake
Normal file
3
cmake/Modules/GenerateBinaryHeader.cmake
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# utility script to call GenerateBinaryHeader function
|
||||||
|
include(${SOURCE_DIR}/Modules/LAMMPSUtils.cmake)
|
||||||
|
GenerateBinaryHeader(${VARNAME} ${HEADER_FILE} ${SOURCE_FILES})
|
||||||
87
cmake/Modules/LAMMPSUtils.cmake
Normal file
87
cmake/Modules/LAMMPSUtils.cmake
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
# Utility functions
|
||||||
|
function(list_to_bulletpoints result)
|
||||||
|
list(REMOVE_AT ARGV 0)
|
||||||
|
set(temp "")
|
||||||
|
foreach(item ${ARGV})
|
||||||
|
set(temp "${temp}* ${item}\n")
|
||||||
|
endforeach()
|
||||||
|
set(${result} "${temp}" PARENT_SCOPE)
|
||||||
|
endfunction(list_to_bulletpoints)
|
||||||
|
|
||||||
|
function(validate_option name values)
|
||||||
|
string(TOLOWER ${${name}} needle_lower)
|
||||||
|
string(TOUPPER ${${name}} needle_upper)
|
||||||
|
list(FIND ${values} ${needle_lower} IDX_LOWER)
|
||||||
|
list(FIND ${values} ${needle_upper} IDX_UPPER)
|
||||||
|
if(${IDX_LOWER} LESS 0 AND ${IDX_UPPER} LESS 0)
|
||||||
|
list_to_bulletpoints(POSSIBLE_VALUE_LIST ${${values}})
|
||||||
|
message(FATAL_ERROR "\n########################################################################\n"
|
||||||
|
"Invalid value '${${name}}' for option ${name}\n"
|
||||||
|
"\n"
|
||||||
|
"Possible values are:\n"
|
||||||
|
"${POSSIBLE_VALUE_LIST}"
|
||||||
|
"########################################################################")
|
||||||
|
endif()
|
||||||
|
endfunction(validate_option)
|
||||||
|
|
||||||
|
function(get_lammps_version version_header variable)
|
||||||
|
file(READ ${version_header} line)
|
||||||
|
set(MONTHS x Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
|
||||||
|
string(REGEX REPLACE "#define LAMMPS_VERSION \"([0-9]+) ([A-Za-z]+) ([0-9]+)\"" "\\1" day "${line}")
|
||||||
|
string(REGEX REPLACE "#define LAMMPS_VERSION \"([0-9]+) ([A-Za-z]+) ([0-9]+)\"" "\\2" month "${line}")
|
||||||
|
string(REGEX REPLACE "#define LAMMPS_VERSION \"([0-9]+) ([A-Za-z]+) ([0-9]+)\"" "\\3" year "${line}")
|
||||||
|
string(STRIP ${day} day)
|
||||||
|
string(STRIP ${month} month)
|
||||||
|
string(STRIP ${year} year)
|
||||||
|
list(FIND MONTHS "${month}" month)
|
||||||
|
string(LENGTH ${day} day_length)
|
||||||
|
string(LENGTH ${month} month_length)
|
||||||
|
if(day_length EQUAL 1)
|
||||||
|
set(day "0${day}")
|
||||||
|
endif()
|
||||||
|
if(month_length EQUAL 1)
|
||||||
|
set(month "0${month}")
|
||||||
|
endif()
|
||||||
|
set(${variable} "${year}${month}${day}" PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(check_for_autogen_files source_dir)
|
||||||
|
message(STATUS "Running check for auto-generated files from make-based build system")
|
||||||
|
file(GLOB SRC_AUTOGEN_FILES ${source_dir}/style_*.h)
|
||||||
|
file(GLOB SRC_AUTOGEN_PACKAGES ${source_dir}/packages_*.h)
|
||||||
|
list(APPEND SRC_AUTOGEN_FILES ${SRC_AUTOGEN_PACKAGES} ${source_dir}/lmpinstalledpkgs.h ${source_dir}/lmpgitversion.h)
|
||||||
|
foreach(_SRC ${SRC_AUTOGEN_FILES})
|
||||||
|
get_filename_component(FILENAME "${_SRC}" NAME)
|
||||||
|
if(EXISTS ${source_dir}/${FILENAME})
|
||||||
|
message(FATAL_ERROR "\n########################################################################\n"
|
||||||
|
"Found header file(s) generated by the make-based build system\n"
|
||||||
|
"\n"
|
||||||
|
"Please run\n"
|
||||||
|
"make -C ${source_dir} purge\n"
|
||||||
|
"to remove\n"
|
||||||
|
"########################################################################")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
macro(pkg_depends PKG1 PKG2)
|
||||||
|
if(PKG_${PKG1} AND NOT (PKG_${PKG2} OR BUILD_${PKG2}))
|
||||||
|
message(FATAL_ERROR "${PKG1} package needs LAMMPS to be build with ${PKG2}")
|
||||||
|
endif()
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
# CMake-only replacement for bin2c and xxd
|
||||||
|
function(GenerateBinaryHeader varname outfile files)
|
||||||
|
message("Creating ${outfile}...")
|
||||||
|
file(WRITE ${outfile} "// CMake generated file\n")
|
||||||
|
math(EXPR ARG_END "${ARGC}-1")
|
||||||
|
|
||||||
|
foreach(IDX RANGE 2 ${ARG_END})
|
||||||
|
list(GET ARGV ${IDX} filename)
|
||||||
|
file(READ ${filename} content HEX)
|
||||||
|
string(REGEX REPLACE "([0-9a-f][0-9a-f])" "0x\\1," content "${content}")
|
||||||
|
string(REGEX REPLACE ",$" "" content "${content}")
|
||||||
|
file(APPEND ${outfile} "const unsigned char ${varname}[] = { ${content} };\n")
|
||||||
|
file(APPEND ${outfile} "const unsigned int ${varname}_size = sizeof(${varname});\n")
|
||||||
|
endforeach()
|
||||||
|
endfunction(GenerateBinaryHeader)
|
||||||
25
cmake/Modules/MPI4WIN.cmake
Normal file
25
cmake/Modules/MPI4WIN.cmake
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
# Download and configure custom MPICH files for Windows
|
||||||
|
message(STATUS "Downloading and configuring MPICH-1.4.1 for Windows")
|
||||||
|
include(ExternalProject)
|
||||||
|
if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
|
||||||
|
ExternalProject_Add(mpi4win_build
|
||||||
|
URL https://download.lammps.org/thirdparty/mpich2-win64-devel.tar.gz
|
||||||
|
URL_MD5 4939fdb59d13182fd5dd65211e469f14
|
||||||
|
CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND ""
|
||||||
|
BUILD_BYPRODUCTS <SOURCE_DIR>/lib/libmpi.a)
|
||||||
|
else()
|
||||||
|
ExternalProject_Add(mpi4win_build
|
||||||
|
URL https://download.lammps.org/thirdparty/mpich2-win32-devel.tar.gz
|
||||||
|
URL_MD5 a61d153500dce44e21b755ee7257e031
|
||||||
|
CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND ""
|
||||||
|
BUILD_BYPRODUCTS <SOURCE_DIR>/lib/libmpi.a)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
ExternalProject_get_property(mpi4win_build SOURCE_DIR)
|
||||||
|
file(MAKE_DIRECTORY "${SOURCE_DIR}/include")
|
||||||
|
add_library(MPI::MPI_CXX UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(MPI::MPI_CXX PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${SOURCE_DIR}/lib/libmpi.a"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include"
|
||||||
|
INTERFACE_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX")
|
||||||
|
add_dependencies(MPI::MPI_CXX mpi4win_build)
|
||||||
2
cmake/Modules/Packages/COMPRESS.cmake
Normal file
2
cmake/Modules/Packages/COMPRESS.cmake
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
find_package(ZLIB REQUIRED)
|
||||||
|
target_link_libraries(lammps PRIVATE ZLIB::ZLIB)
|
||||||
11
cmake/Modules/Packages/CORESHELL.cmake
Normal file
11
cmake/Modules/Packages/CORESHELL.cmake
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
set(CORESHELL_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/CORESHELL)
|
||||||
|
set(CORESHELL_SOURCES)
|
||||||
|
set_property(GLOBAL PROPERTY "CORESHELL_SOURCES" "${CORESHELL_SOURCES}")
|
||||||
|
|
||||||
|
# detects styles which have a CORESHELL version
|
||||||
|
RegisterStylesExt(${CORESHELL_SOURCES_DIR} cs CORESHELL_SOURCES)
|
||||||
|
|
||||||
|
get_property(CORESHELL_SOURCES GLOBAL PROPERTY CORESHELL_SOURCES)
|
||||||
|
|
||||||
|
target_sources(lammps PRIVATE ${CORESHELL_SOURCES})
|
||||||
|
target_include_directories(lammps PRIVATE ${CORESHELL_SOURCES_DIR})
|
||||||
365
cmake/Modules/Packages/GPU.cmake
Normal file
365
cmake/Modules/Packages/GPU.cmake
Normal file
@ -0,0 +1,365 @@
|
|||||||
|
set(GPU_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/GPU)
|
||||||
|
set(GPU_SOURCES ${GPU_SOURCES_DIR}/gpu_extra.h
|
||||||
|
${GPU_SOURCES_DIR}/fix_gpu.h
|
||||||
|
${GPU_SOURCES_DIR}/fix_gpu.cpp)
|
||||||
|
|
||||||
|
set(GPU_API "opencl" CACHE STRING "API used by GPU package")
|
||||||
|
set(GPU_API_VALUES opencl cuda hip)
|
||||||
|
set_property(CACHE GPU_API PROPERTY STRINGS ${GPU_API_VALUES})
|
||||||
|
validate_option(GPU_API GPU_API_VALUES)
|
||||||
|
string(TOUPPER ${GPU_API} GPU_API)
|
||||||
|
|
||||||
|
set(GPU_PREC "mixed" CACHE STRING "LAMMPS GPU precision")
|
||||||
|
set(GPU_PREC_VALUES double mixed single)
|
||||||
|
set_property(CACHE GPU_PREC PROPERTY STRINGS ${GPU_PREC_VALUES})
|
||||||
|
validate_option(GPU_PREC GPU_PREC_VALUES)
|
||||||
|
string(TOUPPER ${GPU_PREC} GPU_PREC)
|
||||||
|
|
||||||
|
if(GPU_PREC STREQUAL "DOUBLE")
|
||||||
|
set(GPU_PREC_SETTING "DOUBLE_DOUBLE")
|
||||||
|
elseif(GPU_PREC STREQUAL "MIXED")
|
||||||
|
set(GPU_PREC_SETTING "SINGLE_DOUBLE")
|
||||||
|
elseif(GPU_PREC STREQUAL "SINGLE")
|
||||||
|
set(GPU_PREC_SETTING "SINGLE_SINGLE")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
file(GLOB GPU_LIB_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/gpu/[^.]*.cpp)
|
||||||
|
file(MAKE_DIRECTORY ${LAMMPS_LIB_BINARY_DIR}/gpu)
|
||||||
|
|
||||||
|
if(GPU_API STREQUAL "CUDA")
|
||||||
|
find_package(CUDA REQUIRED)
|
||||||
|
find_program(BIN2C bin2c)
|
||||||
|
if(NOT BIN2C)
|
||||||
|
message(FATAL_ERROR "Could not find bin2c, use -DBIN2C=/path/to/bin2c to help cmake finding it.")
|
||||||
|
endif()
|
||||||
|
option(CUDPP_OPT "Enable CUDPP_OPT" ON)
|
||||||
|
option(CUDA_MPS_SUPPORT "Enable tweaks to support CUDA Multi-process service (MPS)" OFF)
|
||||||
|
if(CUDA_MPS_SUPPORT)
|
||||||
|
set(GPU_CUDA_MPS_FLAGS "-DCUDA_PROXY")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(GPU_ARCH "sm_30" CACHE STRING "LAMMPS GPU CUDA SM primary architecture (e.g. sm_60)")
|
||||||
|
|
||||||
|
file(GLOB GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/[^.]*.cu ${CMAKE_CURRENT_SOURCE_DIR}/gpu/[^.]*.cu)
|
||||||
|
list(REMOVE_ITEM GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_pppm.cu)
|
||||||
|
|
||||||
|
cuda_include_directories(${LAMMPS_LIB_SOURCE_DIR}/gpu ${LAMMPS_LIB_BINARY_DIR}/gpu)
|
||||||
|
|
||||||
|
if(CUDPP_OPT)
|
||||||
|
cuda_include_directories(${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini)
|
||||||
|
file(GLOB GPU_LIB_CUDPP_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini/[^.]*.cpp)
|
||||||
|
file(GLOB GPU_LIB_CUDPP_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini/[^.]*.cu)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# build arch/gencode commands for nvcc based on CUDA toolkit version and use choice
|
||||||
|
# --arch translates directly instead of JIT, so this should be for the preferred or most common architecture
|
||||||
|
set(GPU_CUDA_GENCODE "-arch=${GPU_ARCH} ")
|
||||||
|
# Fermi (GPU Arch 2.x) is supported by CUDA 3.2 to CUDA 8.0
|
||||||
|
if((CUDA_VERSION VERSION_GREATER "3.1") AND (CUDA_VERSION VERSION_LESS "9.0"))
|
||||||
|
string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_20,code=[sm_20,compute_20] ")
|
||||||
|
endif()
|
||||||
|
# Kepler (GPU Arch 3.x) is supported by CUDA 5 and later
|
||||||
|
if(CUDA_VERSION VERSION_GREATER "4.9")
|
||||||
|
string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_30,code=[sm_30,compute_30] -gencode arch=compute_35,code=[sm_35,compute_35] ")
|
||||||
|
endif()
|
||||||
|
# Maxwell (GPU Arch 5.x) is supported by CUDA 6 and later
|
||||||
|
if(CUDA_VERSION VERSION_GREATER "5.9")
|
||||||
|
string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_50,code=[sm_50,compute_50] -gencode arch=compute_52,code=[sm_52,compute_52] ")
|
||||||
|
endif()
|
||||||
|
# Pascal (GPU Arch 6.x) is supported by CUDA 8 and later
|
||||||
|
if(CUDA_VERSION VERSION_GREATER "7.9")
|
||||||
|
string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_60,code=[sm_60,compute_60] -gencode arch=compute_61,code=[sm_61,compute_61] ")
|
||||||
|
endif()
|
||||||
|
# Volta (GPU Arch 7.0) is supported by CUDA 9 and later
|
||||||
|
if(CUDA_VERSION VERSION_GREATER "8.9")
|
||||||
|
string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_70,code=[sm_70,compute_70] ")
|
||||||
|
endif()
|
||||||
|
# Turing (GPU Arch 7.5) is supported by CUDA 10 and later
|
||||||
|
if(CUDA_VERSION VERSION_GREATER "9.9")
|
||||||
|
string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_75,code=[sm_75,compute_75] ")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
cuda_compile_fatbin(GPU_GEN_OBJS ${GPU_LIB_CU} OPTIONS
|
||||||
|
-DUNIX -O3 --use_fast_math -Wno-deprecated-gpu-targets -DNV_KERNEL -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING})
|
||||||
|
|
||||||
|
cuda_compile(GPU_OBJS ${GPU_LIB_CUDPP_CU} OPTIONS ${CUDA_REQUEST_PIC}
|
||||||
|
-DUNIX -O3 --use_fast_math -Wno-deprecated-gpu-targets -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING})
|
||||||
|
|
||||||
|
foreach(CU_OBJ ${GPU_GEN_OBJS})
|
||||||
|
get_filename_component(CU_NAME ${CU_OBJ} NAME_WE)
|
||||||
|
string(REGEX REPLACE "^.*_lal_" "" CU_NAME "${CU_NAME}")
|
||||||
|
add_custom_command(OUTPUT ${LAMMPS_LIB_BINARY_DIR}/gpu/${CU_NAME}_cubin.h
|
||||||
|
COMMAND ${BIN2C} -c -n ${CU_NAME} ${CU_OBJ} > ${LAMMPS_LIB_BINARY_DIR}/gpu/${CU_NAME}_cubin.h
|
||||||
|
DEPENDS ${CU_OBJ}
|
||||||
|
COMMENT "Generating ${CU_NAME}_cubin.h")
|
||||||
|
list(APPEND GPU_LIB_SOURCES ${LAMMPS_LIB_BINARY_DIR}/gpu/${CU_NAME}_cubin.h)
|
||||||
|
endforeach()
|
||||||
|
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${LAMMPS_LIB_BINARY_DIR}/gpu/*_cubin.h")
|
||||||
|
|
||||||
|
|
||||||
|
add_library(gpu STATIC ${GPU_LIB_SOURCES} ${GPU_LIB_CUDPP_SOURCES} ${GPU_OBJS})
|
||||||
|
target_link_libraries(gpu PRIVATE ${CUDA_LIBRARIES} ${CUDA_CUDA_LIBRARY})
|
||||||
|
target_include_directories(gpu PRIVATE ${LAMMPS_LIB_BINARY_DIR}/gpu ${CUDA_INCLUDE_DIRS})
|
||||||
|
target_compile_definitions(gpu PRIVATE -D_${GPU_PREC_SETTING} -DMPI_GERYON -DUCL_NO_EXIT ${GPU_CUDA_MPS_FLAGS})
|
||||||
|
if(CUDPP_OPT)
|
||||||
|
target_include_directories(gpu PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini)
|
||||||
|
target_compile_definitions(gpu PRIVATE -DUSE_CUDPP)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_link_libraries(lammps PRIVATE gpu)
|
||||||
|
|
||||||
|
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_link_libraries(nvc_get_devices PRIVATE ${CUDA_LIBRARIES} ${CUDA_CUDA_LIBRARY})
|
||||||
|
target_include_directories(nvc_get_devices PRIVATE ${CUDA_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
|
||||||
|
elseif(GPU_API STREQUAL "OPENCL")
|
||||||
|
if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
|
||||||
|
# download and unpack support binaries for compilation of windows binaries.
|
||||||
|
set(LAMMPS_THIRDPARTY_URL "http://download.lammps.org/thirdparty")
|
||||||
|
file(DOWNLOAD "${LAMMPS_THIRDPARTY_URL}/opencl-win-devel.tar.gz" "${CMAKE_CURRENT_BINARY_DIR}/opencl-win-devel.tar.gz"
|
||||||
|
EXPECTED_MD5 2c00364888d5671195598b44c2e0d44d)
|
||||||
|
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf opencl-win-devel.tar.gz WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
||||||
|
add_library(OpenCL::OpenCL UNKNOWN IMPORTED)
|
||||||
|
if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86")
|
||||||
|
set_target_properties(OpenCL::OpenCL PROPERTIES IMPORTED_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/OpenCL/lib_win32/libOpenCL.dll")
|
||||||
|
elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64")
|
||||||
|
set_target_properties(OpenCL::OpenCL PROPERTIES IMPORTED_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/OpenCL/lib_win64/libOpenCL.dll")
|
||||||
|
endif()
|
||||||
|
set_target_properties(OpenCL::OpenCL PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BINARY_DIR}/OpenCL/include")
|
||||||
|
else()
|
||||||
|
find_package(OpenCL REQUIRED)
|
||||||
|
endif()
|
||||||
|
set(OCL_TUNE "generic" CACHE STRING "OpenCL Device Tuning")
|
||||||
|
set(OCL_TUNE_VALUES intel fermi kepler cypress generic)
|
||||||
|
set_property(CACHE OCL_TUNE PROPERTY STRINGS ${OCL_TUNE_VALUES})
|
||||||
|
validate_option(OCL_TUNE OCL_TUNE_VALUES)
|
||||||
|
string(TOUPPER ${OCL_TUNE} OCL_TUNE)
|
||||||
|
|
||||||
|
include(OpenCLUtils)
|
||||||
|
set(OCL_COMMON_HEADERS ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_preprocessor.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_aux_fun1.h)
|
||||||
|
|
||||||
|
file(GLOB GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/[^.]*.cu)
|
||||||
|
list(REMOVE_ITEM GPU_LIB_CU
|
||||||
|
${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_gayberne.cu
|
||||||
|
${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_gayberne_lj.cu
|
||||||
|
${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_re_squared.cu
|
||||||
|
${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_re_squared_lj.cu
|
||||||
|
${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff.cu
|
||||||
|
${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_zbl.cu
|
||||||
|
${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_mod.cu
|
||||||
|
)
|
||||||
|
|
||||||
|
foreach(GPU_KERNEL ${GPU_LIB_CU})
|
||||||
|
get_filename_component(basename ${GPU_KERNEL} NAME_WE)
|
||||||
|
string(SUBSTRING ${basename} 4 -1 KERNEL_NAME)
|
||||||
|
GenerateOpenCLHeader(${KERNEL_NAME} ${CMAKE_CURRENT_BINARY_DIR}/gpu/${KERNEL_NAME}_cl.h ${OCL_COMMON_HEADERS} ${GPU_KERNEL})
|
||||||
|
list(APPEND GPU_LIB_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/gpu/${KERNEL_NAME}_cl.h)
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
GenerateOpenCLHeader(gayberne ${CMAKE_CURRENT_BINARY_DIR}/gpu/gayberne_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_ellipsoid_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_gayberne.cu)
|
||||||
|
GenerateOpenCLHeader(gayberne_lj ${CMAKE_CURRENT_BINARY_DIR}/gpu/gayberne_lj_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_ellipsoid_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_gayberne_lj.cu)
|
||||||
|
GenerateOpenCLHeader(re_squared ${CMAKE_CURRENT_BINARY_DIR}/gpu/re_squared_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_ellipsoid_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_re_squared.cu)
|
||||||
|
GenerateOpenCLHeader(re_squared_lj ${CMAKE_CURRENT_BINARY_DIR}/gpu/re_squared_lj_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_ellipsoid_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_re_squared_lj.cu)
|
||||||
|
GenerateOpenCLHeader(tersoff ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff.cu)
|
||||||
|
GenerateOpenCLHeader(tersoff_zbl ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_zbl_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_zbl_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_zbl.cu)
|
||||||
|
GenerateOpenCLHeader(tersoff_mod ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_mod_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_mod_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_mod.cu)
|
||||||
|
|
||||||
|
list(APPEND GPU_LIB_SOURCES
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/gpu/gayberne_cl.h
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/gpu/gayberne_lj_cl.h
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/gpu/re_squared_cl.h
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/gpu/re_squared_lj_cl.h
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_cl.h
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_zbl_cl.h
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_mod_cl.h
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(gpu STATIC ${GPU_LIB_SOURCES})
|
||||||
|
target_link_libraries(gpu PRIVATE OpenCL::OpenCL)
|
||||||
|
target_include_directories(gpu PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/gpu)
|
||||||
|
target_compile_definitions(gpu PRIVATE -D_${GPU_PREC_SETTING} -D${OCL_TUNE}_OCL -DMPI_GERYON -DUCL_NO_EXIT)
|
||||||
|
target_compile_definitions(gpu PRIVATE -DUSE_OPENCL)
|
||||||
|
|
||||||
|
target_link_libraries(lammps PRIVATE gpu)
|
||||||
|
|
||||||
|
add_executable(ocl_get_devices ${LAMMPS_LIB_SOURCE_DIR}/gpu/geryon/ucl_get_devices.cpp)
|
||||||
|
target_compile_definitions(ocl_get_devices PRIVATE -DUCL_OPENCL)
|
||||||
|
target_link_libraries(ocl_get_devices PRIVATE OpenCL::OpenCL)
|
||||||
|
elseif(GPU_API STREQUAL "HIP")
|
||||||
|
if(NOT DEFINED HIP_PATH)
|
||||||
|
if(NOT DEFINED ENV{HIP_PATH})
|
||||||
|
set(HIP_PATH "/opt/rocm/hip" CACHE PATH "Path to which HIP has been installed")
|
||||||
|
else()
|
||||||
|
set(HIP_PATH $ENV{HIP_PATH} CACHE PATH "Path to which HIP has been installed")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
set(CMAKE_MODULE_PATH "${HIP_PATH}/cmake" ${CMAKE_MODULE_PATH})
|
||||||
|
find_package(HIP REQUIRED)
|
||||||
|
option(HIP_USE_DEVICE_SORT "Use GPU sorting" ON)
|
||||||
|
|
||||||
|
if(NOT DEFINED HIP_PLATFORM)
|
||||||
|
if(NOT DEFINED ENV{HIP_PLATFORM})
|
||||||
|
set(HIP_PLATFORM "hcc" CACHE PATH "HIP Platform to be used during compilation")
|
||||||
|
else()
|
||||||
|
set(HIP_PLATFORM $ENV{HIP_PLATFORM} CACHE PATH "HIP Platform used during compilation")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(ENV{HIP_PLATFORM} ${HIP_PLATFORM})
|
||||||
|
|
||||||
|
if(HIP_PLATFORM STREQUAL "hcc")
|
||||||
|
set(HIP_ARCH "gfx906" CACHE STRING "HIP target architecture")
|
||||||
|
elseif(HIP_PLATFORM STREQUAL "nvcc")
|
||||||
|
find_package(CUDA REQUIRED)
|
||||||
|
set(HIP_ARCH "sm_30" CACHE STRING "HIP primary CUDA architecture (e.g. sm_60)")
|
||||||
|
|
||||||
|
# build arch/gencode commands for nvcc based on CUDA toolkit version and use choice
|
||||||
|
# --arch translates directly instead of JIT, so this should be for the preferred or most common architecture
|
||||||
|
set(HIP_CUDA_GENCODE "-arch=${HIP_ARCH} ")
|
||||||
|
# Fermi (GPU Arch 2.x) is supported by CUDA 3.2 to CUDA 8.0
|
||||||
|
if((CUDA_VERSION VERSION_GREATER "3.1") AND (CUDA_VERSION VERSION_LESS "9.0"))
|
||||||
|
string(APPEND HIP_CUDA_GENCODE "-gencode arch=compute_20,code=[sm_20,compute_20] ")
|
||||||
|
endif()
|
||||||
|
# Kepler (GPU Arch 3.x) is supported by CUDA 5 and later
|
||||||
|
if(CUDA_VERSION VERSION_GREATER "4.9")
|
||||||
|
string(APPEND HIP_CUDA_GENCODE "-gencode arch=compute_30,code=[sm_30,compute_30] -gencode arch=compute_35,code=[sm_35,compute_35] ")
|
||||||
|
endif()
|
||||||
|
# Maxwell (GPU Arch 5.x) is supported by CUDA 6 and later
|
||||||
|
if(CUDA_VERSION VERSION_GREATER "5.9")
|
||||||
|
string(APPEND HIP_CUDA_GENCODE "-gencode arch=compute_50,code=[sm_50,compute_50] -gencode arch=compute_52,code=[sm_52,compute_52] ")
|
||||||
|
endif()
|
||||||
|
# Pascal (GPU Arch 6.x) is supported by CUDA 8 and later
|
||||||
|
if(CUDA_VERSION VERSION_GREATER "7.9")
|
||||||
|
string(APPEND HIP_CUDA_GENCODE "-gencode arch=compute_60,code=[sm_60,compute_60] -gencode arch=compute_61,code=[sm_61,compute_61] ")
|
||||||
|
endif()
|
||||||
|
# Volta (GPU Arch 7.0) is supported by CUDA 9 and later
|
||||||
|
if(CUDA_VERSION VERSION_GREATER "8.9")
|
||||||
|
string(APPEND HIP_CUDA_GENCODE "-gencode arch=compute_70,code=[sm_70,compute_70] ")
|
||||||
|
endif()
|
||||||
|
# Turing (GPU Arch 7.5) is supported by CUDA 10 and later
|
||||||
|
if(CUDA_VERSION VERSION_GREATER "9.9")
|
||||||
|
string(APPEND HIP_CUDA_GENCODE "-gencode arch=compute_75,code=[sm_75,compute_75] ")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
file(GLOB GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/[^.]*.cu ${CMAKE_CURRENT_SOURCE_DIR}/gpu/[^.]*.cu)
|
||||||
|
list(REMOVE_ITEM GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_pppm.cu)
|
||||||
|
|
||||||
|
set(GPU_LIB_CU_HIP "")
|
||||||
|
foreach(CU_FILE ${GPU_LIB_CU})
|
||||||
|
get_filename_component(CU_NAME ${CU_FILE} NAME_WE)
|
||||||
|
string(REGEX REPLACE "^.*lal_" "" CU_NAME "${CU_NAME}")
|
||||||
|
|
||||||
|
set(CU_CPP_FILE "${LAMMPS_LIB_BINARY_DIR}/gpu/${CU_NAME}.cu.cpp")
|
||||||
|
set(CUBIN_FILE "${LAMMPS_LIB_BINARY_DIR}/gpu/${CU_NAME}.cubin")
|
||||||
|
set(CUBIN_H_FILE "${LAMMPS_LIB_BINARY_DIR}/gpu/${CU_NAME}_cubin.h")
|
||||||
|
|
||||||
|
if(HIP_PLATFORM STREQUAL "hcc")
|
||||||
|
configure_file(${CU_FILE} ${CU_CPP_FILE} COPYONLY)
|
||||||
|
|
||||||
|
add_custom_command(OUTPUT ${CUBIN_FILE}
|
||||||
|
VERBATIM COMMAND ${HIP_HIPCC_EXECUTABLE} --genco -t="${HIP_ARCH}" -f=\"-O3 -ffast-math -DUSE_HIP -D_${GPU_PREC_SETTING} -I${LAMMPS_LIB_SOURCE_DIR}/gpu\" -o ${CUBIN_FILE} ${CU_CPP_FILE}
|
||||||
|
DEPENDS ${CU_CPP_FILE}
|
||||||
|
COMMENT "Generating ${CU_NAME}.cubin")
|
||||||
|
elseif(HIP_PLATFORM STREQUAL "nvcc")
|
||||||
|
add_custom_command(OUTPUT ${CUBIN_FILE}
|
||||||
|
VERBATIM COMMAND ${HIP_HIPCC_EXECUTABLE} --fatbin --use_fast_math -DUSE_HIP -D_${GPU_PREC_SETTING} ${HIP_CUDA_GENCODE} -I${LAMMPS_LIB_SOURCE_DIR}/gpu -o ${CUBIN_FILE} ${CU_FILE}
|
||||||
|
DEPENDS ${CU_FILE}
|
||||||
|
COMMENT "Generating ${CU_NAME}.cubin")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_custom_command(OUTPUT ${CUBIN_H_FILE}
|
||||||
|
COMMAND ${CMAKE_COMMAND} -D SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -D VARNAME=${CU_NAME} -D HEADER_FILE=${CUBIN_H_FILE} -D SOURCE_FILES=${CUBIN_FILE} -P ${CMAKE_CURRENT_SOURCE_DIR}/Modules/GenerateBinaryHeader.cmake
|
||||||
|
DEPENDS ${CUBIN_FILE}
|
||||||
|
COMMENT "Generating ${CU_NAME}_cubin.h")
|
||||||
|
|
||||||
|
list(APPEND GPU_LIB_SOURCES ${CUBIN_H_FILE})
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${LAMMPS_LIB_BINARY_DIR}/gpu/*_cubin.h ${LAMMPS_LIB_BINARY_DIR}/gpu/*.cu.cpp")
|
||||||
|
|
||||||
|
hip_add_library(gpu STATIC ${GPU_LIB_SOURCES})
|
||||||
|
target_include_directories(gpu PRIVATE ${LAMMPS_LIB_BINARY_DIR}/gpu)
|
||||||
|
target_compile_definitions(gpu PRIVATE -D_${GPU_PREC_SETTING} -DMPI_GERYON -DUCL_NO_EXIT)
|
||||||
|
target_compile_definitions(gpu PRIVATE -DUSE_HIP)
|
||||||
|
|
||||||
|
if(HIP_USE_DEVICE_SORT)
|
||||||
|
# add hipCUB
|
||||||
|
target_include_directories(gpu PRIVATE ${HIP_ROOT_DIR}/../include)
|
||||||
|
target_compile_definitions(gpu PRIVATE -DUSE_HIP_DEVICE_SORT)
|
||||||
|
|
||||||
|
if(HIP_PLATFORM STREQUAL "nvcc")
|
||||||
|
find_package(CUB)
|
||||||
|
|
||||||
|
if(CUB_FOUND)
|
||||||
|
set(DOWNLOAD_CUB_DEFAULT OFF)
|
||||||
|
else()
|
||||||
|
set(DOWNLOAD_CUB_DEFAULT ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
option(DOWNLOAD_CUB "Download and compile the CUB library instead of using an already installed one" ${DOWNLOAD_CUB_DEFAULT})
|
||||||
|
|
||||||
|
if(DOWNLOAD_CUB)
|
||||||
|
message(STATUS "CUB download requested")
|
||||||
|
include(ExternalProject)
|
||||||
|
|
||||||
|
ExternalProject_Add(CUB
|
||||||
|
GIT_REPOSITORY https://github.com/NVlabs/cub
|
||||||
|
TIMEOUT 5
|
||||||
|
PREFIX "${CMAKE_CURRENT_BINARY_DIR}"
|
||||||
|
CONFIGURE_COMMAND ""
|
||||||
|
BUILD_COMMAND ""
|
||||||
|
INSTALL_COMMAND ""
|
||||||
|
UPDATE_COMMAND ""
|
||||||
|
)
|
||||||
|
ExternalProject_get_property(CUB SOURCE_DIR)
|
||||||
|
set(CUB_INCLUDE_DIR ${SOURCE_DIR})
|
||||||
|
else()
|
||||||
|
find_package(CUB)
|
||||||
|
if(NOT CUB_FOUND)
|
||||||
|
message(FATAL_ERROR "CUB library not found. Help CMake to find it by setting CUB_INCLUDE_DIR, or set DOWNLOAD_VORO=ON to download it")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_include_directories(gpu PRIVATE ${CUB_INCLUDE_DIR})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
hip_add_executable(hip_get_devices ${LAMMPS_LIB_SOURCE_DIR}/gpu/geryon/ucl_get_devices.cpp)
|
||||||
|
target_compile_definitions(hip_get_devices PRIVATE -DUCL_HIP)
|
||||||
|
|
||||||
|
if(HIP_PLATFORM STREQUAL "nvcc")
|
||||||
|
target_compile_definitions(gpu PRIVATE -D__HIP_PLATFORM_NVCC__)
|
||||||
|
target_include_directories(gpu PRIVATE ${HIP_ROOT_DIR}/include)
|
||||||
|
target_include_directories(gpu PRIVATE ${CUDA_INCLUDE_DIRS})
|
||||||
|
target_link_libraries(gpu PRIVATE ${CUDA_LIBRARIES} ${CUDA_CUDA_LIBRARY})
|
||||||
|
|
||||||
|
target_compile_definitions(hip_get_devices PRIVATE -D__HIP_PLATFORM_NVCC__)
|
||||||
|
target_include_directories(hip_get_devices PRIVATE ${HIP_ROOT_DIR}/include)
|
||||||
|
target_include_directories(hip_get_devices PRIVATE ${CUDA_INCLUDE_DIRS})
|
||||||
|
target_link_libraries(hip_get_devices PRIVATE ${CUDA_LIBRARIES} ${CUDA_CUDA_LIBRARY})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_link_libraries(lammps PRIVATE gpu)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# GPU package
|
||||||
|
FindStyleHeaders(${GPU_SOURCES_DIR} FIX_CLASS fix_ FIX)
|
||||||
|
|
||||||
|
set_property(GLOBAL PROPERTY "GPU_SOURCES" "${GPU_SOURCES}")
|
||||||
|
|
||||||
|
# detects styles which have GPU version
|
||||||
|
RegisterStylesExt(${GPU_SOURCES_DIR} gpu GPU_SOURCES)
|
||||||
|
|
||||||
|
get_property(GPU_SOURCES GLOBAL PROPERTY GPU_SOURCES)
|
||||||
|
|
||||||
|
target_link_libraries(gpu PRIVATE MPI::MPI_CXX)
|
||||||
|
if(BUILD_LIB AND NOT BUILD_SHARED_LIBS)
|
||||||
|
install(TARGETS gpu EXPORT LAMMPS_Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
|
endif()
|
||||||
|
target_compile_definitions(gpu PRIVATE -DLAMMPS_${LAMMPS_SIZES})
|
||||||
|
set_target_properties(gpu PROPERTIES OUTPUT_NAME lammps_gpu${LAMMPS_LIB_SUFFIX})
|
||||||
|
target_sources(lammps PRIVATE ${GPU_SOURCES})
|
||||||
|
target_include_directories(lammps PRIVATE ${GPU_SOURCES_DIR})
|
||||||
58
cmake/Modules/Packages/KIM.cmake
Normal file
58
cmake/Modules/Packages/KIM.cmake
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
set(KIM-API_MIN_VERSION 2.1.3)
|
||||||
|
find_package(CURL)
|
||||||
|
if(CURL_FOUND)
|
||||||
|
target_link_libraries(lammps PRIVATE CURL::libcurl)
|
||||||
|
target_compile_definitions(lammps PRIVATE -DLMP_KIM_CURL)
|
||||||
|
set(LMP_DEBUG_CURL OFF CACHE STRING "Set libcurl verbose mode on/off. If on, it displays a lot of verbose information about its operations.")
|
||||||
|
mark_as_advanced(LMP_DEBUG_CURL)
|
||||||
|
if(LMP_DEBUG_CURL)
|
||||||
|
target_compile_definitions(lammps PRIVATE -DLMP_DEBUG_CURL)
|
||||||
|
endif()
|
||||||
|
set(LMP_NO_SSL_CHECK OFF CACHE STRING "Tell libcurl to not verify the peer. If on, the connection succeeds regardless of the names in the certificate. Insecure - Use with caution!")
|
||||||
|
mark_as_advanced(LMP_NO_SSL_CHECK)
|
||||||
|
if(LMP_NO_SSL_CHECK)
|
||||||
|
target_compile_definitions(lammps PRIVATE -DLMP_NO_SSL_CHECK)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
find_package(PkgConfig QUIET)
|
||||||
|
set(DOWNLOAD_KIM_DEFAULT ON)
|
||||||
|
if(PKG_CONFIG_FOUND)
|
||||||
|
pkg_check_modules(KIM-API QUIET libkim-api>=${KIM-API_MIN_VERSION})
|
||||||
|
if(KIM-API_FOUND)
|
||||||
|
set(DOWNLOAD_KIM_DEFAULT OFF)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
option(DOWNLOAD_KIM "Download KIM-API from OpenKIM instead of using an already installed one" ${DOWNLOAD_KIM_DEFAULT})
|
||||||
|
if(DOWNLOAD_KIM)
|
||||||
|
message(STATUS "KIM-API download requested - we will build our own")
|
||||||
|
include(ExternalProject)
|
||||||
|
enable_language(C)
|
||||||
|
enable_language(Fortran)
|
||||||
|
ExternalProject_Add(kim_build
|
||||||
|
URL https://s3.openkim.org/kim-api/kim-api-2.1.3.txz
|
||||||
|
URL_MD5 6ee829a1bbba5f8b9874c88c4c4ebff8
|
||||||
|
BINARY_DIR build
|
||||||
|
CMAKE_ARGS ${CMAKE_REQUEST_PIC}
|
||||||
|
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
|
||||||
|
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
|
||||||
|
-DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER}
|
||||||
|
-DCMAKE_INSTALL_LIBDIR=lib
|
||||||
|
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
|
||||||
|
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
||||||
|
-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
|
||||||
|
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
|
||||||
|
BUILD_BYPRODUCTS <INSTALL_DIR>/lib/libkim-api${CMAKE_SHARED_LIBRARY_SUFFIX}
|
||||||
|
)
|
||||||
|
ExternalProject_get_property(kim_build INSTALL_DIR)
|
||||||
|
file(MAKE_DIRECTORY ${INSTALL_DIR}/include/kim-api)
|
||||||
|
add_library(LAMMPS::KIM UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(LAMMPS::KIM PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${INSTALL_DIR}/lib/libkim-api${CMAKE_SHARED_LIBRARY_SUFFIX}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${INSTALL_DIR}/include/kim-api")
|
||||||
|
target_link_libraries(lammps PRIVATE LAMMPS::KIM)
|
||||||
|
add_dependencies(LAMMPS::KIM kim_build)
|
||||||
|
else()
|
||||||
|
find_package(PkgConfig REQUIRED)
|
||||||
|
pkg_check_modules(KIM-API REQUIRED IMPORTED_TARGET libkim-api>=${KIM-API_MIN_VERSION})
|
||||||
|
target_link_libraries(lammps PRIVATE PkgConfig::KIM-API)
|
||||||
|
endif()
|
||||||
95
cmake/Modules/Packages/KOKKOS.cmake
Normal file
95
cmake/Modules/Packages/KOKKOS.cmake
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
option(EXTERNAL_KOKKOS "Build against external kokkos library" OFF)
|
||||||
|
option(DOWNLOAD_KOKKOS "Download the KOKKOS library instead of using the bundled one" OFF)
|
||||||
|
if(DOWNLOAD_KOKKOS)
|
||||||
|
message(STATUS "KOKKOS download requested - we will build our own")
|
||||||
|
file(DOWNLOAD https://github.com/kokkos/kokkos/compare/3.0.00...stanmoore1:lammps.diff ${CMAKE_CURRENT_BINARY_DIR}/kokkos-lammps.patch)
|
||||||
|
include(ExternalProject)
|
||||||
|
ExternalProject_Add(kokkos_build
|
||||||
|
URL https://github.com/kokkos/kokkos/archive/3.0.00.tar.gz
|
||||||
|
URL_MD5 281c7093aa3a603276e93abdf4be23b9
|
||||||
|
PATCH_COMMAND patch -p1 < ${CMAKE_CURRENT_BINARY_DIR}/kokkos-lammps.patch
|
||||||
|
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> ${CMAKE_REQUEST_PIC}
|
||||||
|
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_LIBDIR=lib
|
||||||
|
-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
|
||||||
|
BUILD_BYPRODUCTS <INSTALL_DIR>/lib/libkokkoscore.a
|
||||||
|
)
|
||||||
|
ExternalProject_get_property(kokkos_build INSTALL_DIR)
|
||||||
|
file(MAKE_DIRECTORY ${INSTALL_DIR}/include)
|
||||||
|
add_library(LAMMPS::KOKKOS UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(LAMMPS::KOKKOS PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${INSTALL_DIR}/lib/libkokkoscore.a"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${INSTALL_DIR}/include"
|
||||||
|
INTERFACE_LINK_LIBRARIES ${CMAKE_DL_LIBS})
|
||||||
|
target_link_libraries(lammps PRIVATE LAMMPS::KOKKOS)
|
||||||
|
add_dependencies(LAMMPS::KOKKOS kokkos_build)
|
||||||
|
elseif(EXTERNAL_KOKKOS)
|
||||||
|
find_package(Kokkos 3)
|
||||||
|
if(NOT Kokkos_FOUND)
|
||||||
|
message(FATAL_ERROR "KOKKOS library not found, help CMake to find it by setting KOKKOS_LIBRARY, or set DOWNLOAD_KOKKOS=ON to download it")
|
||||||
|
endif()
|
||||||
|
target_link_libraries(lammps PRIVATE Kokkos::kokkos)
|
||||||
|
else()
|
||||||
|
set(LAMMPS_LIB_KOKKOS_SRC_DIR ${LAMMPS_LIB_SOURCE_DIR}/kokkos)
|
||||||
|
set(LAMMPS_LIB_KOKKOS_BIN_DIR ${LAMMPS_LIB_BINARY_DIR}/kokkos)
|
||||||
|
add_subdirectory(${LAMMPS_LIB_KOKKOS_SRC_DIR} ${LAMMPS_LIB_KOKKOS_BIN_DIR})
|
||||||
|
|
||||||
|
set(Kokkos_INCLUDE_DIRS ${LAMMPS_LIB_KOKKOS_SRC_DIR}/core/src
|
||||||
|
${LAMMPS_LIB_KOKKOS_SRC_DIR}/containers/src
|
||||||
|
${LAMMPS_LIB_KOKKOS_SRC_DIR}/algorithms/src
|
||||||
|
${LAMMPS_LIB_KOKKOS_BIN_DIR})
|
||||||
|
target_include_directories(lammps PRIVATE ${Kokkos_INCLUDE_DIRS})
|
||||||
|
target_link_libraries(lammps PRIVATE kokkos)
|
||||||
|
endif()
|
||||||
|
target_compile_definitions(lammps PRIVATE -DLMP_KOKKOS)
|
||||||
|
|
||||||
|
set(KOKKOS_PKG_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/KOKKOS)
|
||||||
|
set(KOKKOS_PKG_SOURCES ${KOKKOS_PKG_SOURCES_DIR}/kokkos.cpp
|
||||||
|
${KOKKOS_PKG_SOURCES_DIR}/atom_kokkos.cpp
|
||||||
|
${KOKKOS_PKG_SOURCES_DIR}/atom_vec_kokkos.cpp
|
||||||
|
${KOKKOS_PKG_SOURCES_DIR}/comm_kokkos.cpp
|
||||||
|
${KOKKOS_PKG_SOURCES_DIR}/comm_tiled_kokkos.cpp
|
||||||
|
${KOKKOS_PKG_SOURCES_DIR}/min_kokkos.cpp
|
||||||
|
${KOKKOS_PKG_SOURCES_DIR}/min_linesearch_kokkos.cpp
|
||||||
|
${KOKKOS_PKG_SOURCES_DIR}/neighbor_kokkos.cpp
|
||||||
|
${KOKKOS_PKG_SOURCES_DIR}/neigh_list_kokkos.cpp
|
||||||
|
${KOKKOS_PKG_SOURCES_DIR}/neigh_bond_kokkos.cpp
|
||||||
|
${KOKKOS_PKG_SOURCES_DIR}/fix_nh_kokkos.cpp
|
||||||
|
${KOKKOS_PKG_SOURCES_DIR}/nbin_kokkos.cpp
|
||||||
|
${KOKKOS_PKG_SOURCES_DIR}/npair_kokkos.cpp
|
||||||
|
${KOKKOS_PKG_SOURCES_DIR}/npair_halffull_kokkos.cpp
|
||||||
|
${KOKKOS_PKG_SOURCES_DIR}/domain_kokkos.cpp
|
||||||
|
${KOKKOS_PKG_SOURCES_DIR}/modify_kokkos.cpp)
|
||||||
|
|
||||||
|
if(PKG_KSPACE)
|
||||||
|
list(APPEND KOKKOS_PKG_SOURCES ${KOKKOS_PKG_SOURCES_DIR}/fft3d_kokkos.cpp
|
||||||
|
${KOKKOS_PKG_SOURCES_DIR}/gridcomm_kokkos.cpp
|
||||||
|
${KOKKOS_PKG_SOURCES_DIR}/remap_kokkos.cpp)
|
||||||
|
if(KOKKOS_ENABLE_CUDA)
|
||||||
|
if(NOT ${FFT} STREQUAL "KISS")
|
||||||
|
target_compile_definitions(lammps PRIVATE -DFFT_CUFFT)
|
||||||
|
target_link_libraries(lammps PRIVATE cufft)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set_property(GLOBAL PROPERTY "KOKKOS_PKG_SOURCES" "${KOKKOS_PKG_SOURCES}")
|
||||||
|
|
||||||
|
# detects styles which have KOKKOS version
|
||||||
|
RegisterStylesExt(${KOKKOS_PKG_SOURCES_DIR} kokkos KOKKOS_PKG_SOURCES)
|
||||||
|
|
||||||
|
# register kokkos-only styles
|
||||||
|
RegisterNBinStyle(${KOKKOS_PKG_SOURCES_DIR}/nbin_kokkos.h)
|
||||||
|
RegisterNPairStyle(${KOKKOS_PKG_SOURCES_DIR}/npair_kokkos.h)
|
||||||
|
RegisterNPairStyle(${KOKKOS_PKG_SOURCES_DIR}/npair_halffull_kokkos.h)
|
||||||
|
|
||||||
|
if(PKG_USER-DPD)
|
||||||
|
get_property(KOKKOS_PKG_SOURCES GLOBAL PROPERTY KOKKOS_PKG_SOURCES)
|
||||||
|
list(APPEND KOKKOS_PKG_SOURCES ${KOKKOS_PKG_SOURCES_DIR}/npair_ssa_kokkos.cpp)
|
||||||
|
RegisterNPairStyle(${KOKKOS_PKG_SOURCES_DIR}/npair_ssa_kokkos.h)
|
||||||
|
set_property(GLOBAL PROPERTY "KOKKOS_PKG_SOURCES" "${KOKKOS_PKG_SOURCES}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
get_property(KOKKOS_PKG_SOURCES GLOBAL PROPERTY KOKKOS_PKG_SOURCES)
|
||||||
|
|
||||||
|
target_sources(lammps PRIVATE ${KOKKOS_PKG_SOURCES})
|
||||||
|
target_include_directories(lammps PRIVATE ${KOKKOS_PKG_SOURCES_DIR})
|
||||||
56
cmake/Modules/Packages/KSPACE.cmake
Normal file
56
cmake/Modules/Packages/KSPACE.cmake
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
option(FFT_SINGLE "Use single precision FFTs instead of double precision FFTs" OFF)
|
||||||
|
set(FFTW "FFTW3")
|
||||||
|
if(FFT_SINGLE)
|
||||||
|
set(FFTW "FFTW3F")
|
||||||
|
target_compile_definitions(lammps PUBLIC -DFFT_SINGLE)
|
||||||
|
endif()
|
||||||
|
find_package(${FFTW} QUIET)
|
||||||
|
if(${FFTW}_FOUND)
|
||||||
|
set(FFT "FFTW3" CACHE STRING "FFT library for KSPACE package")
|
||||||
|
else()
|
||||||
|
set(FFT "KISS" CACHE STRING "FFT library for KSPACE package")
|
||||||
|
endif()
|
||||||
|
set(FFT_VALUES KISS FFTW3 MKL)
|
||||||
|
set_property(CACHE FFT PROPERTY STRINGS ${FFT_VALUES})
|
||||||
|
validate_option(FFT FFT_VALUES)
|
||||||
|
string(TOUPPER ${FFT} FFT)
|
||||||
|
|
||||||
|
if(FFT STREQUAL "FFTW3")
|
||||||
|
find_package(${FFTW} REQUIRED)
|
||||||
|
target_compile_definitions(lammps PUBLIC -DFFT_FFTW3)
|
||||||
|
target_link_libraries(lammps PUBLIC ${FFTW}::${FFTW})
|
||||||
|
if(FFTW3_OMP_LIBRARY OR FFTW3F_OMP_LIBRARY)
|
||||||
|
option(FFT_FFTW_THREADS "Use threaded FFTW library" ON)
|
||||||
|
else()
|
||||||
|
option(FFT_FFTW_THREADS "Use threaded FFT library" OFF)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(FFT_FFTW_THREADS)
|
||||||
|
if(FFTW3_OMP_LIBRARY OR FFTW3F_OMP_LIBRARY)
|
||||||
|
target_compile_definitions(lammps PRIVATE -DFFT_FFTW_THREADS)
|
||||||
|
target_link_libraries(lammps PRIVATE ${FFTW}::${FFTW}_OMP)
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "Need OpenMP enabled FFTW3 library for FFT_THREADS")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
elseif(FFT STREQUAL "MKL")
|
||||||
|
find_package(MKL REQUIRED)
|
||||||
|
target_compile_definitions(lammps PRIVATE -DFFT_MKL)
|
||||||
|
option(FFT_MKL_THREADS "Use threaded MKL FFT" ON)
|
||||||
|
if(FFT_MKL_THREADS)
|
||||||
|
target_compile_definitions(lammps PRIVATE -DFFT_MKL_THREADS)
|
||||||
|
endif()
|
||||||
|
target_link_libraries(lammps PRIVATE MKL::MKL)
|
||||||
|
else()
|
||||||
|
# last option is KISSFFT
|
||||||
|
target_compile_definitions(lammps PRIVATE -DFFT_KISS)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(FFT_PACK "array" CACHE STRING "Optimization for FFT")
|
||||||
|
set(FFT_PACK_VALUES array pointer memcpy)
|
||||||
|
set_property(CACHE FFT_PACK PROPERTY STRINGS ${FFT_PACK_VALUES})
|
||||||
|
validate_option(FFT_PACK FFT_PACK_VALUES)
|
||||||
|
if(NOT FFT_PACK STREQUAL "array")
|
||||||
|
string(TOUPPER ${FFT_PACK} FFT_PACK)
|
||||||
|
target_compile_definitions(lammps PRIVATE -DFFT_PACK_${FFT_PACK})
|
||||||
|
endif()
|
||||||
36
cmake/Modules/Packages/LATTE.cmake
Normal file
36
cmake/Modules/Packages/LATTE.cmake
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
enable_language(Fortran)
|
||||||
|
find_package(LATTE)
|
||||||
|
if(LATTE_FOUND)
|
||||||
|
set(DOWNLOAD_LATTE_DEFAULT OFF)
|
||||||
|
else()
|
||||||
|
set(DOWNLOAD_LATTE_DEFAULT ON)
|
||||||
|
endif()
|
||||||
|
option(DOWNLOAD_LATTE "Download the LATTE library instead of using an already installed one" ${DOWNLOAD_LATTE_DEFAULT})
|
||||||
|
if(DOWNLOAD_LATTE)
|
||||||
|
message(STATUS "LATTE download requested - we will build our own")
|
||||||
|
include(ExternalProject)
|
||||||
|
ExternalProject_Add(latte_build
|
||||||
|
URL https://github.com/lanl/LATTE/archive/v1.2.1.tar.gz
|
||||||
|
URL_MD5 85ac414fdada2d04619c8f936344df14
|
||||||
|
SOURCE_SUBDIR cmake
|
||||||
|
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> ${CMAKE_REQUEST_PIC} -DCMAKE_INSTALL_LIBDIR=lib
|
||||||
|
-DBLAS_LIBRARIES=${BLAS_LIBRARIES} -DLAPACK_LIBRARIES=${LAPACK_LIBRARIES}
|
||||||
|
-DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER} -DCMAKE_Fortran_FLAGS=${CMAKE_Fortran_FLAGS}
|
||||||
|
-DCMAKE_Fortran_FLAGS_${BTYPE}=${CMAKE_Fortran_FLAGS_${BTYPE}} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
||||||
|
-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
|
||||||
|
BUILD_BYPRODUCTS <INSTALL_DIR>/lib/liblatte.a
|
||||||
|
)
|
||||||
|
ExternalProject_get_property(latte_build INSTALL_DIR)
|
||||||
|
add_library(LAMMPS::LATTE UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(LAMMPS::LATTE PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${INSTALL_DIR}/lib/liblatte.a"
|
||||||
|
INTERFACE_LINK_LIBRARIES "${LAPACK_LIBRARIES}")
|
||||||
|
target_link_libraries(lammps PRIVATE LAMMPS::LATTE)
|
||||||
|
add_dependencies(LAMMPS::LATTE latte_build)
|
||||||
|
else()
|
||||||
|
find_package(LATTE)
|
||||||
|
if(NOT LATTE_FOUND)
|
||||||
|
message(FATAL_ERROR "LATTE library not found, help CMake to find it by setting LATTE_LIBRARY, or set DOWNLOAD_LATTE=ON to download it")
|
||||||
|
endif()
|
||||||
|
target_link_libraries(lammps PRIVATE LATTE::latte)
|
||||||
|
endif()
|
||||||
35
cmake/Modules/Packages/MESSAGE.cmake
Normal file
35
cmake/Modules/Packages/MESSAGE.cmake
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
if(LAMMPS_SIZES STREQUAL BIGBIG)
|
||||||
|
message(FATAL_ERROR "The MESSAGE Package is not compatible with -DLAMMPS_BIGBIG")
|
||||||
|
endif()
|
||||||
|
option(MESSAGE_ZMQ "Use ZeroMQ in MESSAGE package" OFF)
|
||||||
|
file(GLOB_RECURSE cslib_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/[^.]*.F
|
||||||
|
${LAMMPS_LIB_SOURCE_DIR}/message/cslib/[^.]*.c
|
||||||
|
${LAMMPS_LIB_SOURCE_DIR}/message/cslib/[^.]*.cpp)
|
||||||
|
|
||||||
|
add_library(cslib STATIC ${cslib_SOURCES})
|
||||||
|
if(BUILD_LIB AND NOT BUILD_SHARED_LIBS)
|
||||||
|
install(TARGETS cslib EXPORT LAMMPS_Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
|
endif()
|
||||||
|
target_compile_definitions(cslib PRIVATE -DLAMMPS_${LAMMPS_SIZES})
|
||||||
|
set_target_properties(cslib PROPERTIES OUTPUT_NAME lammps_cslib${LAMMPS_LIB_SUFFIX})
|
||||||
|
if(BUILD_MPI)
|
||||||
|
target_compile_definitions(cslib PRIVATE -DMPI_YES)
|
||||||
|
set_target_properties(cslib PROPERTIES OUTPUT_NAME "csmpi")
|
||||||
|
target_link_libraries(cslib PRIVATE MPI::MPI_CXX)
|
||||||
|
else()
|
||||||
|
target_compile_definitions(cslib PRIVATE -DMPI_NO)
|
||||||
|
target_include_directories(cslib PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/src/STUBS_MPI)
|
||||||
|
set_target_properties(cslib PROPERTIES OUTPUT_NAME "csnompi")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(MESSAGE_ZMQ)
|
||||||
|
target_compile_definitions(cslib PRIVATE -DZMQ_YES)
|
||||||
|
find_package(ZMQ REQUIRED)
|
||||||
|
target_link_libraries(cslib PUBLIC ZMQ::ZMQ)
|
||||||
|
else()
|
||||||
|
target_compile_definitions(cslib PRIVATE -DZMQ_NO)
|
||||||
|
target_include_directories(cslib PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/src/STUBS_ZMQ)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_link_libraries(lammps PRIVATE cslib)
|
||||||
|
target_include_directories(lammps PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/src)
|
||||||
45
cmake/Modules/Packages/MSCG.cmake
Normal file
45
cmake/Modules/Packages/MSCG.cmake
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
find_package(GSL REQUIRED)
|
||||||
|
find_package(MSCG QUIET)
|
||||||
|
if(MSGC_FOUND)
|
||||||
|
set(DOWNLOAD_MSCG_DEFAULT OFF)
|
||||||
|
else()
|
||||||
|
set(DOWNLOAD_MSCG_DEFAULT ON)
|
||||||
|
endif()
|
||||||
|
option(DOWNLOAD_MSCG "Download MSCG library instead of using an already installed one)" ${DOWNLOAD_MSCG_DEFAULT})
|
||||||
|
if(DOWNLOAD_MSCG)
|
||||||
|
include(ExternalProject)
|
||||||
|
ExternalProject_Add(mscg_build
|
||||||
|
URL https://github.com/uchicago-voth/MSCG-release/archive/1.7.3.1.tar.gz
|
||||||
|
URL_MD5 8c45e269ee13f60b303edd7823866a91
|
||||||
|
SOURCE_SUBDIR src/CMake
|
||||||
|
CMAKE_ARGS ${CMAKE_REQUEST_PIC} ${EXTRA_MSCG_OPTS}
|
||||||
|
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
|
||||||
|
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
|
||||||
|
-DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER}
|
||||||
|
-DBLAS_LIBRARIES=${BLAS_LIBRARIES} -DLAPACK_LIBRARIES=${LAPACK_LIBRARIES}
|
||||||
|
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
|
||||||
|
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
||||||
|
-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
|
||||||
|
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
|
||||||
|
BUILD_COMMAND ${CMAKE_COMMAND} --build . --target mscg
|
||||||
|
INSTALL_COMMAND ""
|
||||||
|
BUILD_BYPRODUCTS <BINARY_DIR>/libmscg.a
|
||||||
|
)
|
||||||
|
ExternalProject_get_property(mscg_build BINARY_DIR)
|
||||||
|
ExternalProject_get_property(mscg_build SOURCE_DIR)
|
||||||
|
file(MAKE_DIRECTORY ${SOURCE_DIR}/src)
|
||||||
|
add_library(LAMMPS::MSCG UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(LAMMPS::MSCG PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${BINARY_DIR}/libmscg.a"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/src"
|
||||||
|
INTERFACE_LINK_LIBRARIES "${LAPACK_LIBRARIES}")
|
||||||
|
target_link_libraries(lammps PRIVATE LAMMPS::MSCG)
|
||||||
|
add_dependencies(LAMMPS::MSCG mscg_build)
|
||||||
|
else()
|
||||||
|
find_package(MSCG)
|
||||||
|
if(NOT MSCG_FOUND)
|
||||||
|
message(FATAL_ERROR "MSCG not found, help CMake to find it by setting MSCG_LIBRARY and MSCG_INCLUDE_DIRS, or set DOWNLOAD_MSCG=ON to download it")
|
||||||
|
endif()
|
||||||
|
target_link_libraries(lammps PRIVATE MSCG::MSCG)
|
||||||
|
endif()
|
||||||
|
target_link_libraries(lammps PRIVATE GSL::gsl ${LAPACK_LIBRARIES})
|
||||||
11
cmake/Modules/Packages/OPT.cmake
Normal file
11
cmake/Modules/Packages/OPT.cmake
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
set(OPT_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/OPT)
|
||||||
|
set(OPT_SOURCES)
|
||||||
|
set_property(GLOBAL PROPERTY "OPT_SOURCES" "${OPT_SOURCES}")
|
||||||
|
|
||||||
|
# detects styles which have OPT version
|
||||||
|
RegisterStylesExt(${OPT_SOURCES_DIR} opt OPT_SOURCES)
|
||||||
|
|
||||||
|
get_property(OPT_SOURCES GLOBAL PROPERTY OPT_SOURCES)
|
||||||
|
|
||||||
|
target_sources(lammps PRIVATE ${OPT_SOURCES})
|
||||||
|
target_include_directories(lammps PRIVATE ${OPT_SOURCES_DIR})
|
||||||
9
cmake/Modules/Packages/PYTHON.cmake
Normal file
9
cmake/Modules/Packages/PYTHON.cmake
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
if(CMAKE_VERSION VERSION_LESS 3.12)
|
||||||
|
find_package(PythonLibs REQUIRED) # Deprecated since version 3.12
|
||||||
|
target_include_directories(lammps PRIVATE ${PYTHON_INCLUDE_DIR})
|
||||||
|
target_link_libraries(lammps PRIVATE ${PYTHON_LIBRARY})
|
||||||
|
else()
|
||||||
|
find_package(Python REQUIRED COMPONENTS Development)
|
||||||
|
target_link_libraries(lammps PRIVATE Python::Python)
|
||||||
|
endif()
|
||||||
|
target_compile_definitions(lammps PRIVATE -DLMP_PYTHON)
|
||||||
18
cmake/Modules/Packages/QEQ.cmake
Normal file
18
cmake/Modules/Packages/QEQ.cmake
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Fix qeq/fire requires MANYBODY (i.e. COMB and COMB3) to be installed
|
||||||
|
set(QEQ_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/QEQ)
|
||||||
|
file(GLOB QEQ_HEADERS ${QEQ_SOURCES_DIR}/fix*.h)
|
||||||
|
file(GLOB QEQ_SOURCES ${QEQ_SOURCES_DIR}/fix*.cpp)
|
||||||
|
|
||||||
|
if(NOT PKG_MANYBODY)
|
||||||
|
list(REMOVE_ITEM QEQ_HEADERS ${QEQ_SOURCES_DIR}/fix_qeq_fire.h)
|
||||||
|
list(REMOVE_ITEM QEQ_SOURCES ${QEQ_SOURCES_DIR}/fix_qeq_fire.cpp)
|
||||||
|
endif()
|
||||||
|
set_property(GLOBAL PROPERTY "QEQ_SOURCES" "${QEQ_SOURCES}")
|
||||||
|
|
||||||
|
foreach(MY_HEADER ${QEQ_HEADERS})
|
||||||
|
AddStyleHeader(${MY_HEADER} FIX)
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
get_property(QEQ_SOURCES GLOBAL PROPERTY QEQ_SOURCES)
|
||||||
|
target_sources(lammps PRIVATE ${QEQ_SOURCES})
|
||||||
|
target_include_directories(lammps PRIVATE ${QEQ_SOURCES_DIR})
|
||||||
32
cmake/Modules/Packages/USER-COLVARS.cmake
Normal file
32
cmake/Modules/Packages/USER-COLVARS.cmake
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
set(COLVARS_SOURCE_DIR ${LAMMPS_LIB_SOURCE_DIR}/colvars)
|
||||||
|
|
||||||
|
file(GLOB COLVARS_SOURCES ${COLVARS_SOURCE_DIR}/[^.]*.cpp)
|
||||||
|
|
||||||
|
# Build Lepton by default
|
||||||
|
option(COLVARS_LEPTON "Build and link the Lepton library" ON)
|
||||||
|
|
||||||
|
if(COLVARS_LEPTON)
|
||||||
|
set(LEPTON_DIR ${LAMMPS_LIB_SOURCE_DIR}/colvars/lepton)
|
||||||
|
file(GLOB LEPTON_SOURCES ${LEPTON_DIR}/src/[^.]*.cpp)
|
||||||
|
add_library(lepton STATIC ${LEPTON_SOURCES})
|
||||||
|
if(BUILD_LIB AND NOT BUILD_SHARED_LIBS)
|
||||||
|
install(TARGETS lepton EXPORT LAMMPS_Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
|
endif()
|
||||||
|
set_target_properties(lepton PROPERTIES OUTPUT_NAME lammps_lepton${LAMMPS_LIB_SUFFIX})
|
||||||
|
target_include_directories(lepton PRIVATE ${LEPTON_DIR}/include)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_library(colvars STATIC ${COLVARS_SOURCES})
|
||||||
|
if(BUILD_LIB AND NOT BUILD_SHARED_LIBS)
|
||||||
|
install(TARGETS colvars EXPORT LAMMPS_Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
|
endif()
|
||||||
|
target_compile_definitions(colvars PRIVATE -DLAMMPS_${LAMMPS_SIZES})
|
||||||
|
set_target_properties(colvars PROPERTIES OUTPUT_NAME lammps_colvars${LAMMPS_LIB_SUFFIX})
|
||||||
|
target_include_directories(colvars PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/colvars)
|
||||||
|
target_link_libraries(lammps PRIVATE colvars)
|
||||||
|
|
||||||
|
if(COLVARS_LEPTON)
|
||||||
|
target_link_libraries(lammps PRIVATE lepton)
|
||||||
|
target_compile_options(colvars PRIVATE -DLEPTON)
|
||||||
|
target_include_directories(colvars PUBLIC ${LEPTON_DIR}/include)
|
||||||
|
endif()
|
||||||
5
cmake/Modules/Packages/USER-H5MD.cmake
Normal file
5
cmake/Modules/Packages/USER-H5MD.cmake
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
enable_language(C)
|
||||||
|
|
||||||
|
find_package(HDF5 REQUIRED)
|
||||||
|
target_link_libraries(h5md PRIVATE ${HDF5_LIBRARIES})
|
||||||
|
target_include_directories(h5md PUBLIC ${HDF5_INCLUDE_DIRS})
|
||||||
109
cmake/Modules/Packages/USER-INTEL.cmake
Normal file
109
cmake/Modules/Packages/USER-INTEL.cmake
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
check_include_file_cxx(immintrin.h FOUND_IMMINTRIN)
|
||||||
|
if(NOT FOUND_IMMINTRIN)
|
||||||
|
message(FATAL_ERROR "immintrin.h header not found, Intel package won't work without it")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_compile_definitions(lammps PRIVATE -DLMP_USER_INTEL)
|
||||||
|
|
||||||
|
set(INTEL_ARCH "cpu" CACHE STRING "Architectures used by USER-INTEL (cpu or knl)")
|
||||||
|
set(INTEL_ARCH_VALUES cpu knl)
|
||||||
|
set_property(CACHE INTEL_ARCH PROPERTY STRINGS ${INTEL_ARCH_VALUES})
|
||||||
|
validate_option(INTEL_ARCH INTEL_ARCH_VALUES)
|
||||||
|
string(TOUPPER ${INTEL_ARCH} INTEL_ARCH)
|
||||||
|
|
||||||
|
find_package(Threads QUIET)
|
||||||
|
if(Threads_FOUND)
|
||||||
|
set(INTEL_LRT_MODE "threads" CACHE STRING "Long-range threads mode (none, threads, or c++11)")
|
||||||
|
else()
|
||||||
|
set(INTEL_LRT_MODE "none" CACHE STRING "Long-range threads mode (none, threads, or c++11)")
|
||||||
|
endif()
|
||||||
|
set(INTEL_LRT_VALUES none threads c++11)
|
||||||
|
set_property(CACHE INTEL_LRT_MODE PROPERTY STRINGS ${INTEL_LRT_VALUES})
|
||||||
|
validate_option(INTEL_LRT_MODE INTEL_LRT_VALUES)
|
||||||
|
string(TOUPPER ${INTEL_LRT_MODE} INTEL_LRT_MODE)
|
||||||
|
if(INTEL_LRT_MODE STREQUAL "THREADS")
|
||||||
|
if(Threads_FOUND)
|
||||||
|
target_compile_definitions(lammps PRIVATE -DLMP_INTEL_USELRT)
|
||||||
|
target_link_libraries(lammps PRIVATE Threads::Threads)
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "Must have working threads library for Long-range thread support")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
if(INTEL_LRT_MODE STREQUAL "C++11")
|
||||||
|
target_compile_definitions(lammps PRIVATE -DLMP_INTEL_USELRT -DLMP_INTEL_LRT11)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
|
||||||
|
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16)
|
||||||
|
message(FATAL_ERROR "USER-INTEL needs at least a 2016 Intel compiler, found ${CMAKE_CXX_COMPILER_VERSION}")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
message(WARNING "USER-INTEL gives best performance with Intel compilers")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_package(TBB_MALLOC QUIET)
|
||||||
|
if(TBB_MALLOC_FOUND)
|
||||||
|
target_link_libraries(lammps PRIVATE TBB::TBB_MALLOC)
|
||||||
|
else()
|
||||||
|
target_compile_definitions(lammps PRIVATE -DLMP_INTEL_NO_TBB)
|
||||||
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
|
||||||
|
message(WARNING "USER-INTEL with Intel compilers should use TBB malloc libraries")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_package(MKL QUIET)
|
||||||
|
if(MKL_FOUND)
|
||||||
|
target_compile_definitions(lammps PRIVATE -DLMP_USE_MKL_RNG)
|
||||||
|
target_link_libraries(lammps PRIVATE MKL::MKL)
|
||||||
|
else()
|
||||||
|
message(STATUS "Pair style dpd/intel will be faster with MKL libraries")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if((NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows") AND (NOT ${LAMMPS_MEMALIGN} STREQUAL "64") AND (NOT ${LAMMPS_MEMALIGN} STREQUAL "128") AND (NOT ${LAMMPS_MEMALIGN} STREQUAL "256"))
|
||||||
|
message(FATAL_ERROR "USER-INTEL only supports memory alignment of 64, 128 or 256 on this platform")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(INTEL_ARCH STREQUAL "KNL")
|
||||||
|
if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
|
||||||
|
message(FATAL_ERROR "Must use Intel compiler with USER-INTEL for KNL architecture")
|
||||||
|
endif()
|
||||||
|
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})
|
||||||
|
target_compile_definitions(lammps PRIVATE -DLMP_INTEL_OFFLOAD)
|
||||||
|
else()
|
||||||
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
|
||||||
|
include(CheckCXXCompilerFlag)
|
||||||
|
foreach(_FLAG -O2 -fp-model fast=2 -no-prec-div -qoverride-limits -qopt-zmm-usage=high -qno-offload -fno-alias -ansi-alias -restrict)
|
||||||
|
check_cxx_compiler_flag("${_FLAG}" COMPILER_SUPPORTS${_FLAG})
|
||||||
|
if(COMPILER_SUPPORTS${_FLAG})
|
||||||
|
target_compile_options(lammps PRIVATE ${_FLAG})
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# collect sources
|
||||||
|
set(USER-INTEL_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-INTEL)
|
||||||
|
set(USER-INTEL_SOURCES ${USER-INTEL_SOURCES_DIR}/fix_intel.cpp
|
||||||
|
${USER-INTEL_SOURCES_DIR}/fix_nh_intel.cpp
|
||||||
|
${USER-INTEL_SOURCES_DIR}/intel_buffers.cpp
|
||||||
|
${USER-INTEL_SOURCES_DIR}/nbin_intel.cpp
|
||||||
|
${USER-INTEL_SOURCES_DIR}/npair_intel.cpp)
|
||||||
|
|
||||||
|
set_property(GLOBAL PROPERTY "USER-INTEL_SOURCES" "${USER-INTEL_SOURCES}")
|
||||||
|
|
||||||
|
# detect styles which have a USER-INTEL version
|
||||||
|
RegisterStylesExt(${USER-INTEL_SOURCES_DIR} intel USER-INTEL_SOURCES)
|
||||||
|
RegisterNBinStyle(${USER-INTEL_SOURCES_DIR}/nbin_intel.h)
|
||||||
|
RegisterNPairStyle(${USER-INTEL_SOURCES_DIR}/npair_intel.h)
|
||||||
|
RegisterFixStyle(${USER-INTEL_SOURCES_DIR}/fix_intel.h)
|
||||||
|
|
||||||
|
get_property(USER-INTEL_SOURCES GLOBAL PROPERTY USER-INTEL_SOURCES)
|
||||||
|
if(PKG_KSPACE)
|
||||||
|
list(APPEND USER-INTEL_SOURCES ${USER-INTEL_SOURCES_DIR}/verlet_lrt_intel.cpp)
|
||||||
|
RegisterIntegrateStyle(${USER-INTEL_SOURCES_DIR}/verlet_lrt_intel.h)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_sources(lammps PRIVATE ${USER-INTEL_SOURCES})
|
||||||
|
target_include_directories(lammps PRIVATE ${USER-INTEL_SOURCES_DIR})
|
||||||
11
cmake/Modules/Packages/USER-MOLFILE.cmake
Normal file
11
cmake/Modules/Packages/USER-MOLFILE.cmake
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
set(MOLFILE_INCLUDE_DIRS "${LAMMPS_LIB_SOURCE_DIR}/molfile" CACHE STRING "Path to VMD molfile plugin headers")
|
||||||
|
add_library(molfile INTERFACE)
|
||||||
|
if(BUILD_LIB AND NOT BUILD_SHARED_LIBS)
|
||||||
|
install(TARGETS molfile EXPORT LAMMPS_Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
|
endif()
|
||||||
|
target_include_directories(molfile INTERFACE ${MOLFILE_INCLUDE_DIRS})
|
||||||
|
# no need to link with -ldl on windows
|
||||||
|
if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
|
||||||
|
target_link_libraries(molfile INTERFACE ${CMAKE_DL_LIBS})
|
||||||
|
endif()
|
||||||
|
target_link_libraries(lammps PRIVATE molfile)
|
||||||
20
cmake/Modules/Packages/USER-NETCDF.cmake
Normal file
20
cmake/Modules/Packages/USER-NETCDF.cmake
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
# USER-NETCDF can use NetCDF, Parallel NetCDF (PNetCDF), or both. At least one necessary.
|
||||||
|
# NetCDF library enables dump style "netcdf", while PNetCDF enables dump style "netcdf/mpiio"
|
||||||
|
find_package(NetCDF)
|
||||||
|
if(NETCDF_FOUND)
|
||||||
|
find_package(PNetCDF)
|
||||||
|
else(NETCDF_FOUND)
|
||||||
|
find_package(PNetCDF REQUIRED)
|
||||||
|
endif(NETCDF_FOUND)
|
||||||
|
|
||||||
|
if(NETCDF_FOUND)
|
||||||
|
target_link_libraries(lammps PRIVATE NetCDF::NetCDF)
|
||||||
|
target_compile_definitions(lammps PRIVATE -DLMP_HAS_NETCDF)
|
||||||
|
endif(NETCDF_FOUND)
|
||||||
|
|
||||||
|
if(PNETCDF_FOUND)
|
||||||
|
target_link_libraries(lammps PRIVATE PNetCDF::PNetCDF)
|
||||||
|
target_compile_definitions(lammps PRIVATE -DLMP_HAS_PNETCDF)
|
||||||
|
endif(PNETCDF_FOUND)
|
||||||
|
|
||||||
|
target_compile_definitions(lammps PRIVATE -DNC_64BIT_DATA=0x0020)
|
||||||
40
cmake/Modules/Packages/USER-OMP.cmake
Normal file
40
cmake/Modules/Packages/USER-OMP.cmake
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
set(USER-OMP_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-OMP)
|
||||||
|
set(USER-OMP_SOURCES ${USER-OMP_SOURCES_DIR}/thr_data.cpp
|
||||||
|
${USER-OMP_SOURCES_DIR}/thr_omp.cpp
|
||||||
|
${USER-OMP_SOURCES_DIR}/fix_omp.cpp
|
||||||
|
${USER-OMP_SOURCES_DIR}/fix_nh_omp.cpp
|
||||||
|
${USER-OMP_SOURCES_DIR}/fix_nh_sphere_omp.cpp
|
||||||
|
${USER-OMP_SOURCES_DIR}/domain_omp.cpp)
|
||||||
|
target_compile_definitions(lammps PRIVATE -DLMP_USER_OMP)
|
||||||
|
set_property(GLOBAL PROPERTY "OMP_SOURCES" "${USER-OMP_SOURCES}")
|
||||||
|
|
||||||
|
# detects styles which have USER-OMP version
|
||||||
|
RegisterStylesExt(${USER-OMP_SOURCES_DIR} omp OMP_SOURCES)
|
||||||
|
RegisterFixStyle(${USER-OMP_SOURCES_DIR}/fix_omp.h)
|
||||||
|
|
||||||
|
get_property(USER-OMP_SOURCES GLOBAL PROPERTY OMP_SOURCES)
|
||||||
|
|
||||||
|
# manually add package dependent source files from USER-OMP that do not provide styles
|
||||||
|
|
||||||
|
if(PKG_ASPHERE)
|
||||||
|
list(APPEND USER-OMP_SOURCES ${USER-OMP_SOURCES_DIR}/fix_nh_asphere_omp.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(PKG_RIGID)
|
||||||
|
list(APPEND USER-OMP_SOURCES ${USER-OMP_SOURCES_DIR}/fix_rigid_nh_omp.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(PKG_USER-REAXC)
|
||||||
|
list(APPEND USER-OMP_SOURCES ${USER-OMP_SOURCES_DIR}/reaxc_bond_orders_omp.cpp
|
||||||
|
${USER-OMP_SOURCES_DIR}/reaxc_hydrogen_bonds_omp.cpp
|
||||||
|
${USER-OMP_SOURCES_DIR}/reaxc_nonbonded_omp.cpp
|
||||||
|
${USER-OMP_SOURCES_DIR}/reaxc_bonds_omp.cpp
|
||||||
|
${USER-OMP_SOURCES_DIR}/reaxc_init_md_omp.cpp
|
||||||
|
${USER-OMP_SOURCES_DIR}/reaxc_torsion_angles_omp.cpp
|
||||||
|
${USER-OMP_SOURCES_DIR}/reaxc_forces_omp.cpp
|
||||||
|
${USER-OMP_SOURCES_DIR}/reaxc_multi_body_omp.cpp
|
||||||
|
${USER-OMP_SOURCES_DIR}/reaxc_valence_angles_omp.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_sources(lammps PRIVATE ${USER-OMP_SOURCES})
|
||||||
|
target_include_directories(lammps PRIVATE ${USER-OMP_SOURCES_DIR})
|
||||||
100
cmake/Modules/Packages/USER-PLUMED.cmake
Normal file
100
cmake/Modules/Packages/USER-PLUMED.cmake
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
set(PLUMED_MODE "static" CACHE STRING "Linkage mode for Plumed2 library")
|
||||||
|
set(PLUMED_MODE_VALUES static shared runtime)
|
||||||
|
set_property(CACHE PLUMED_MODE PROPERTY STRINGS ${PLUMED_MODE_VALUES})
|
||||||
|
validate_option(PLUMED_MODE PLUMED_MODE_VALUES)
|
||||||
|
string(TOUPPER ${PLUMED_MODE} PLUMED_MODE)
|
||||||
|
|
||||||
|
set(PLUMED_LINK_LIBS)
|
||||||
|
if(PLUMED_MODE STREQUAL "STATIC")
|
||||||
|
find_package(LAPACK REQUIRED)
|
||||||
|
find_package(BLAS REQUIRED)
|
||||||
|
find_package(GSL REQUIRED)
|
||||||
|
list(APPEND PLUMED_LINK_LIBS ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES} GSL::gsl)
|
||||||
|
find_package(ZLIB QUIET)
|
||||||
|
if(ZLIB_FOUND)
|
||||||
|
list(APPEND PLUMED_LINK_LIBS ZLIB::ZLIB)
|
||||||
|
endif()
|
||||||
|
find_package(FFTW3 QUIET)
|
||||||
|
if(FFTW3_FOUND)
|
||||||
|
list(APPEND PLUMED_LINK_LIBS FFTW3::FFTW3)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_package(PkgConfig QUIET)
|
||||||
|
set(DOWNLOAD_PLUMED_DEFAULT ON)
|
||||||
|
if(PKG_CONFIG_FOUND)
|
||||||
|
pkg_check_modules(PLUMED QUIET plumed)
|
||||||
|
if(PLUMED_FOUND)
|
||||||
|
set(DOWNLOAD_PLUMED_DEFAULT OFF)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
option(DOWNLOAD_PLUMED "Download Plumed package instead of using an already installed one" ${DOWNLOAD_PLUMED_DEFAULT})
|
||||||
|
if(DOWNLOAD_PLUMED)
|
||||||
|
if(BUILD_MPI)
|
||||||
|
set(PLUMED_CONFIG_MPI "--enable-mpi")
|
||||||
|
set(PLUMED_CONFIG_CC ${CMAKE_MPI_C_COMPILER})
|
||||||
|
set(PLUMED_CONFIG_CXX ${CMAKE_MPI_CXX_COMPILER})
|
||||||
|
else()
|
||||||
|
set(PLUMED_CONFIG_MPI "--disable-mpi")
|
||||||
|
set(PLUMED_CONFIG_CC ${CMAKE_C_COMPILER})
|
||||||
|
set(PLUMED_CONFIG_CXX ${CMAKE_CXX_COMPILER})
|
||||||
|
endif()
|
||||||
|
if(BUILD_OMP)
|
||||||
|
set(PLUMED_CONFIG_OMP "--enable-openmp")
|
||||||
|
else()
|
||||||
|
set(PLUMED_CONFIG_OMP "--disable-openmp")
|
||||||
|
endif()
|
||||||
|
message(STATUS "PLUMED download requested - we will build our own")
|
||||||
|
if(PLUMED_MODE STREQUAL "STATIC")
|
||||||
|
set(PLUMED_BUILD_BYPRODUCTS "<INSTALL_DIR>/lib/libplumed.a")
|
||||||
|
elseif(PLUMED_MODE STREQUAL "SHARED")
|
||||||
|
set(PLUMED_BUILD_BYPRODUCTS "<INSTALL_DIR>/lib/libplumed${CMAKE_SHARED_LIBRARY_SUFFIX};<INSTALL_DIR>/lib/libplumedKernel${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
||||||
|
elseif(PLUMED_MODE STREQUAL "RUNTIME")
|
||||||
|
set(PLUMED_BUILD_BYPRODUCTS "<INSTALL_DIR>/lib/libplumedWrapper.a")
|
||||||
|
endif()
|
||||||
|
include(ExternalProject)
|
||||||
|
ExternalProject_Add(plumed_build
|
||||||
|
URL https://github.com/plumed/plumed2/releases/download/v2.6.0/plumed-src-2.6.0.tgz
|
||||||
|
URL_MD5 204d2edae58d9b10ba3ad460cad64191
|
||||||
|
BUILD_IN_SOURCE 1
|
||||||
|
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR>
|
||||||
|
${CONFIGURE_REQUEST_PIC}
|
||||||
|
--enable-modules=all
|
||||||
|
${PLUMED_CONFIG_MPI}
|
||||||
|
${PLUMED_CONFIG_OMP}
|
||||||
|
CXX=${PLUMED_CONFIG_CXX}
|
||||||
|
CC=${PLUMED_CONFIG_CC}
|
||||||
|
BUILD_BYPRODUCTS ${PLUMED_BUILD_BYPRODUCTS}
|
||||||
|
)
|
||||||
|
ExternalProject_get_property(plumed_build INSTALL_DIR)
|
||||||
|
add_library(LAMMPS::PLUMED UNKNOWN IMPORTED)
|
||||||
|
add_dependencies(LAMMPS::PLUMED plumed_build)
|
||||||
|
if(PLUMED_MODE STREQUAL "STATIC")
|
||||||
|
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_COMPILE_DEFINITIONS "__PLUMED_WRAPPER_CXX=1")
|
||||||
|
set_target_properties(LAMMPS::PLUMED PROPERTIES IMPORTED_LOCATION ${INSTALL_DIR}/lib/libplumed.a INTERFACE_LINK_LIBRARIES "${PLUMED_LINK_LIBS};${CMAKE_DL_LIBS}")
|
||||||
|
elseif(PLUMED_MODE STREQUAL "SHARED")
|
||||||
|
set_target_properties(LAMMPS::PLUMED PROPERTIES IMPORTED_LOCATION ${INSTALL_DIR}/lib/libplumed${CMAKE_SHARED_LIBRARY_SUFFIX} INTERFACE_LINK_LIBRARIES "${INSTALL_DIR}/lib/libplumedKernel${CMAKE_SHARED_LIBRARY_SUFFIX};${CMAKE_DL_LIBS}")
|
||||||
|
elseif(PLUMED_MODE STREQUAL "RUNTIME")
|
||||||
|
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_COMPILE_DEFINITIONS "__PLUMED_HAS_DLOPEN=1;__PLUMED_DEFAULT_KERNEL=${INSTALL_DIR}/lib/libplumedKernel${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
||||||
|
set_target_properties(LAMMPS::PLUMED PROPERTIES IMPORTED_LOCATION ${INSTALL_DIR}/lib/libplumedWrapper.a INTERFACE_LINK_LIBRARIES "${CMAKE_DL_LIBS}")
|
||||||
|
endif()
|
||||||
|
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include)
|
||||||
|
file(MAKE_DIRECTORY ${INSTALL_DIR}/include)
|
||||||
|
else()
|
||||||
|
find_package(PkgConfig REQUIRED)
|
||||||
|
pkg_check_modules(PLUMED REQUIRED plumed)
|
||||||
|
add_library(LAMMPS::PLUMED INTERFACE IMPORTED)
|
||||||
|
if(PLUMED_MODE STREQUAL "STATIC")
|
||||||
|
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_COMPILE_DEFINITIONS "__PLUMED_WRAPPER_CXX=1")
|
||||||
|
include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.static)
|
||||||
|
elseif(PLUMED_MODE STREQUAL "SHARED")
|
||||||
|
include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.shared)
|
||||||
|
elseif(PLUMED_MODE STREQUAL "RUNTIME")
|
||||||
|
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_COMPILE_DEFINITIONS "__PLUMED_HAS_DLOPEN=1;__PLUMED_DEFAULT_KERNEL=${PLUMED_LIBDIR}/libplumedKernel${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
||||||
|
include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.runtime)
|
||||||
|
endif()
|
||||||
|
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_LINK_LIBRARIES "${PLUMED_LOAD}")
|
||||||
|
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${PLUMED_INCLUDE_DIRS}")
|
||||||
|
endif()
|
||||||
|
target_link_libraries(lammps PRIVATE LAMMPS::PLUMED)
|
||||||
15
cmake/Modules/Packages/USER-QMMM.cmake
Normal file
15
cmake/Modules/Packages/USER-QMMM.cmake
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
enable_language(C)
|
||||||
|
|
||||||
|
if(NOT BUILD_LIB)
|
||||||
|
message(FATAL_ERROR "Building a QM/MM executable with USER-QMMM requires BUILD_LIB=yes")
|
||||||
|
endif()
|
||||||
|
if(NOT BUILD_SHARED_LIBS)
|
||||||
|
message(WARNING "It is recommended to use BUILD_SHARED_LIBS=yes with USER-QMMM")
|
||||||
|
endif()
|
||||||
|
add_library(qmmm STATIC ${LAMMPS_LIB_SOURCE_DIR}/qmmm/libqmmm.c)
|
||||||
|
if(BUILD_LIB AND NOT BUILD_SHARED_LIBS)
|
||||||
|
install(TARGETS qmmm EXPORT LAMMPS_Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
|
endif()
|
||||||
|
set_target_properties(qmmm PROPERTIES OUTPUT_NAME lammps_qmmm${LAMMPS_LIB_SUFFIX})
|
||||||
|
target_link_libraries(lammps PRIVATE qmmm)
|
||||||
|
target_include_directories(qmmm PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/qmmm)
|
||||||
3
cmake/Modules/Packages/USER-QUIP.cmake
Normal file
3
cmake/Modules/Packages/USER-QUIP.cmake
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
enable_language(Fortran)
|
||||||
|
find_package(QUIP REQUIRED)
|
||||||
|
target_link_libraries(lammps PRIVATE QUIP::QUIP ${LAPACK_LIBRARIES})
|
||||||
59
cmake/Modules/Packages/USER-SCAFACOS.cmake
Normal file
59
cmake/Modules/Packages/USER-SCAFACOS.cmake
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
enable_language(Fortran)
|
||||||
|
enable_language(C)
|
||||||
|
|
||||||
|
find_package(GSL REQUIRED)
|
||||||
|
find_package(PkgConfig QUIET)
|
||||||
|
find_package(MPI REQUIRED)
|
||||||
|
set(DOWNLOAD_SCAFACOS_DEFAULT ON)
|
||||||
|
if(PKG_CONFIG_FOUND)
|
||||||
|
pkg_check_modules(SCAFACOS QUIET scafacos)
|
||||||
|
if(SCAFACOS_FOUND)
|
||||||
|
set(DOWNLOAD_SCAFACOS_DEFAULT OFF)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
option(DOWNLOAD_SCAFACOS "Download ScaFaCoS library instead of using an already installed one" ${DOWNLOAD_SCAFACOS_DEFAULT})
|
||||||
|
if(DOWNLOAD_SCAFACOS)
|
||||||
|
message(STATUS "ScaFaCoS download requested - we will build our own")
|
||||||
|
include(ExternalProject)
|
||||||
|
ExternalProject_Add(scafacos_build
|
||||||
|
URL https://github.com/scafacos/scafacos/releases/download/v1.0.1/scafacos-1.0.1.tar.gz
|
||||||
|
URL_MD5 bd46d74e3296bd8a444d731bb10c1738
|
||||||
|
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR> --disable-doc
|
||||||
|
--enable-fcs-solvers=fmm,p2nfft,direct,ewald,p3m
|
||||||
|
--with-internal-fftw --with-internal-pfft
|
||||||
|
--with-internal-pnfft ${CONFIGURE_REQUEST_PIC}
|
||||||
|
FC=${CMAKE_MPI_Fortran_COMPILER}
|
||||||
|
CXX=${CMAKE_MPI_CXX_COMPILER}
|
||||||
|
CC=${CMAKE_MPI_C_COMPILER}
|
||||||
|
F77=
|
||||||
|
BUILD_BYPRODUCTS
|
||||||
|
<INSTALL_DIR>/lib/libfcs.a
|
||||||
|
<INSTALL_DIR>/lib/libfcs_direct.a
|
||||||
|
<INSTALL_DIR>/lib/libfcs_ewald.a
|
||||||
|
<INSTALL_DIR>/lib/libfcs_fmm.a
|
||||||
|
<INSTALL_DIR>/lib/libfcs_p2nfft.a
|
||||||
|
<INSTALL_DIR>/lib/libfcs_p3m.a
|
||||||
|
<INSTALL_DIR>/lib/libfcs_near.a
|
||||||
|
<INSTALL_DIR>/lib/libfcs_gridsort.a
|
||||||
|
<INSTALL_DIR>/lib/libfcs_resort.a
|
||||||
|
<INSTALL_DIR>/lib/libfcs_redist.a
|
||||||
|
<INSTALL_DIR>/lib/libfcs_common.a
|
||||||
|
<INSTALL_DIR>/lib/libfcs_pnfft.a
|
||||||
|
<INSTALL_DIR>/lib/libfcs_pfft.a
|
||||||
|
<INSTALL_DIR>/lib/libfcs_fftw3_mpi.a
|
||||||
|
<INSTALL_DIR>/lib/libfcs_fftw3.a
|
||||||
|
)
|
||||||
|
ExternalProject_get_property(scafacos_build INSTALL_DIR)
|
||||||
|
file(MAKE_DIRECTORY ${INSTALL_DIR}/include)
|
||||||
|
add_library(LAMMPS::SCAFACOS UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(LAMMPS::SCAFACOS PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${INSTALL_DIR}/lib/libfcs.a"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${INSTALL_DIR}/include"
|
||||||
|
INTERFACE_LINK_LIBRARIES "${INSTALL_DIR}/lib/libfcs.a;${INSTALL_DIR}/lib/libfcs_direct.a;${INSTALL_DIR}/lib/libfcs_ewald.a;${INSTALL_DIR}/lib/libfcs_fmm.a;${INSTALL_DIR}/lib/libfcs_p2nfft.a;${INSTALL_DIR}/lib/libfcs_p3m.a;GSL::gsl;${INSTALL_DIR}/lib/libfcs_near.a;${INSTALL_DIR}/lib/libfcs_gridsort.a;${INSTALL_DIR}/lib/libfcs_resort.a;${INSTALL_DIR}/lib/libfcs_redist.a;${INSTALL_DIR}/lib/libfcs_common.a;${INSTALL_DIR}/lib/libfcs_pnfft.a;${INSTALL_DIR}/lib/libfcs_pfft.a;${INSTALL_DIR}/lib/libfcs_fftw3_mpi.a;${INSTALL_DIR}/lib/libfcs_fftw3.a;MPI::MPI_Fortran;MPI::MPI_C")
|
||||||
|
target_link_libraries(lammps PRIVATE LAMMPS::SCAFACOS)
|
||||||
|
add_dependencies(LAMMPS::SCAFACOS scafacos_build)
|
||||||
|
else()
|
||||||
|
find_package(PkgConfig REQUIRED)
|
||||||
|
pkg_check_modules(SCAFACOS REQUIRED IMPORTED_TARGET scafacos)
|
||||||
|
target_link_libraries(lammps PRIVATE PkgConfig::SCAFACOS)
|
||||||
|
endif()
|
||||||
13
cmake/Modules/Packages/USER-SDPD.cmake
Normal file
13
cmake/Modules/Packages/USER-SDPD.cmake
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# Fix rigid/meso requires RIGID to be installed
|
||||||
|
set(USER-SDPD_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-SDPD)
|
||||||
|
|
||||||
|
get_property(hlist GLOBAL PROPERTY FIX)
|
||||||
|
if(NOT PKG_RIGID)
|
||||||
|
list(REMOVE_ITEM hlist ${USER-SDPD_SOURCES_DIR}/fix_rigid_meso.h)
|
||||||
|
get_target_property(LAMMPS_SOURCES lammps SOURCES)
|
||||||
|
list(REMOVE_ITEM LAMMPS_SOURCES ${USER-SDPD_SOURCES_DIR}/fix_rigid_meso.cpp)
|
||||||
|
set_property(TARGET lammps PROPERTY SOURCES ${LAMMPS_SOURCES})
|
||||||
|
endif()
|
||||||
|
set_property(GLOBAL PROPERTY FIX "${hlist}")
|
||||||
|
|
||||||
|
target_include_directories(lammps PRIVATE ${USER-SDPD_SOURCES_DIR})
|
||||||
28
cmake/Modules/Packages/USER-SMD.cmake
Normal file
28
cmake/Modules/Packages/USER-SMD.cmake
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
find_package(Eigen3 NO_MODULE)
|
||||||
|
if(EIGEN3_FOUND)
|
||||||
|
set(DOWNLOAD_EIGEN3_DEFAULT OFF)
|
||||||
|
else()
|
||||||
|
set(DOWNLOAD_EIGEN3_DEFAULT ON)
|
||||||
|
endif()
|
||||||
|
option(DOWNLOAD_EIGEN3 "Download Eigen3 instead of using an already installed one)" ${DOWNLOAD_EIGEN3_DEFAULT})
|
||||||
|
if(DOWNLOAD_EIGEN3)
|
||||||
|
message(STATUS "Eigen3 download requested - we will build our own")
|
||||||
|
include(ExternalProject)
|
||||||
|
ExternalProject_Add(Eigen3_build
|
||||||
|
URL http://bitbucket.org/eigen/eigen/get/3.3.7.tar.gz
|
||||||
|
URL_MD5 f2a417d083fe8ca4b8ed2bc613d20f07
|
||||||
|
CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND ""
|
||||||
|
)
|
||||||
|
ExternalProject_get_property(Eigen3_build SOURCE_DIR)
|
||||||
|
add_library(LAMMPS::EIGEN3 INTERFACE IMPORTED)
|
||||||
|
set_target_properties(LAMMPS::EIGEN3 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}")
|
||||||
|
target_link_libraries(lammps PRIVATE LAMMPS::EIGEN3)
|
||||||
|
add_dependencies(LAMMPS::EIGEN3 Eigen3_build)
|
||||||
|
else()
|
||||||
|
find_package(Eigen3 NO_MODULE)
|
||||||
|
mark_as_advanced(Eigen3_DIR)
|
||||||
|
if(NOT EIGEN3_FOUND)
|
||||||
|
message(FATAL_ERROR "Eigen3 not found, help CMake to find it by setting EIGEN3_INCLUDE_DIR, or set DOWNLOAD_EIGEN3=ON to download it")
|
||||||
|
endif()
|
||||||
|
target_link_libraries(lammps PRIVATE Eigen3::Eigen)
|
||||||
|
endif()
|
||||||
4
cmake/Modules/Packages/USER-VTK.cmake
Normal file
4
cmake/Modules/Packages/USER-VTK.cmake
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
find_package(VTK REQUIRED NO_MODULE)
|
||||||
|
include(${VTK_USE_FILE})
|
||||||
|
target_compile_definitions(lammps PRIVATE -DLAMMPS_VTK)
|
||||||
|
target_link_libraries(lammps PRIVATE ${VTK_LIBRARIES})
|
||||||
44
cmake/Modules/Packages/VORONOI.cmake
Normal file
44
cmake/Modules/Packages/VORONOI.cmake
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
find_package(VORO)
|
||||||
|
if(VORO_FOUND)
|
||||||
|
set(DOWNLOAD_VORO_DEFAULT OFF)
|
||||||
|
else()
|
||||||
|
set(DOWNLOAD_VORO_DEFAULT ON)
|
||||||
|
endif()
|
||||||
|
option(DOWNLOAD_VORO "Download and compile the Voro++ library instead of using an already installed one" ${DOWNLOAD_VORO_DEFAULT})
|
||||||
|
if(DOWNLOAD_VORO)
|
||||||
|
message(STATUS "Voro++ download requested - we will build our own")
|
||||||
|
include(ExternalProject)
|
||||||
|
|
||||||
|
if(BUILD_SHARED_LIBS)
|
||||||
|
set(VORO_BUILD_CFLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS} ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}}")
|
||||||
|
else()
|
||||||
|
set(VORO_BUILD_CFLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}}")
|
||||||
|
endif()
|
||||||
|
if(APPLE)
|
||||||
|
get_filename_component(VORO_CXX ${CMAKE_CXX_COMPILER} NAME_WE)
|
||||||
|
set(VORO_BUILD_OPTIONS CXX=${VORO_CXX} CFLAGS=${VORO_BUILD_CFLAGS})
|
||||||
|
else()
|
||||||
|
set(VORO_BUILD_OPTIONS CXX=${CMAKE_CXX_COMPILER} CFLAGS=${VORO_BUILD_CFLAGS})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
ExternalProject_Add(voro_build
|
||||||
|
URL https://download.lammps.org/thirdparty/voro++-0.4.6.tar.gz
|
||||||
|
URL_MD5 2338b824c3b7b25590e18e8df5d68af9
|
||||||
|
CONFIGURE_COMMAND "" BUILD_COMMAND make ${VORO_BUILD_OPTIONS} BUILD_IN_SOURCE 1 INSTALL_COMMAND ""
|
||||||
|
BUILD_BYPRODUCTS <SOURCE_DIR>/src/libvoro++.a
|
||||||
|
)
|
||||||
|
ExternalProject_get_property(voro_build SOURCE_DIR)
|
||||||
|
file(MAKE_DIRECTORY ${SOURCE_DIR}/src)
|
||||||
|
add_library(LAMMPS::VORO UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(LAMMPS::VORO PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${SOURCE_DIR}/src/libvoro++.a"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/src")
|
||||||
|
target_link_libraries(lammps PRIVATE LAMMPS::VORO)
|
||||||
|
add_dependencies(LAMMPS::VORO voro_build)
|
||||||
|
else()
|
||||||
|
find_package(VORO)
|
||||||
|
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)
|
||||||
|
endif()
|
||||||
@ -181,3 +181,88 @@ function(DetectBuildSystemConflict lammps_src_dir)
|
|||||||
endforeach()
|
endforeach()
|
||||||
endif()
|
endif()
|
||||||
endfunction(DetectBuildSystemConflict)
|
endfunction(DetectBuildSystemConflict)
|
||||||
|
|
||||||
|
|
||||||
|
function(FindPackagesHeaders path style_class file_pattern headers)
|
||||||
|
file(GLOB files "${path}/${file_pattern}*.h")
|
||||||
|
get_property(plist GLOBAL PROPERTY ${headers})
|
||||||
|
|
||||||
|
foreach(file_name ${files})
|
||||||
|
file(STRINGS ${file_name} is_style LIMIT_COUNT 1 REGEX ${style_class})
|
||||||
|
if(is_style)
|
||||||
|
list(APPEND plist ${file_name})
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
set_property(GLOBAL PROPERTY ${headers} "${plist}")
|
||||||
|
endfunction(FindPackagesHeaders)
|
||||||
|
|
||||||
|
function(RegisterPackages search_path)
|
||||||
|
FindPackagesHeaders(${search_path} ANGLE_CLASS angle_ PKGANGLE ) # angle ) # force
|
||||||
|
FindPackagesHeaders(${search_path} ATOM_CLASS atom_vec_ PKGATOM_VEC ) # atom ) # atom atom_vec_hybrid
|
||||||
|
FindPackagesHeaders(${search_path} BODY_CLASS body_ PKGBODY ) # body ) # atom_vec_body
|
||||||
|
FindPackagesHeaders(${search_path} BOND_CLASS bond_ PKGBOND ) # bond ) # force
|
||||||
|
FindPackagesHeaders(${search_path} COMMAND_CLASS "[^.]" PKGCOMMAND ) # command ) # input
|
||||||
|
FindPackagesHeaders(${search_path} COMPUTE_CLASS compute_ PKGCOMPUTE ) # compute ) # modify
|
||||||
|
FindPackagesHeaders(${search_path} DIHEDRAL_CLASS dihedral_ PKGDIHEDRAL ) # dihedral ) # force
|
||||||
|
FindPackagesHeaders(${search_path} DUMP_CLASS dump_ PKGDUMP ) # dump ) # output write_dump
|
||||||
|
FindPackagesHeaders(${search_path} FIX_CLASS fix_ PKGFIX ) # fix ) # modify
|
||||||
|
FindPackagesHeaders(${search_path} IMPROPER_CLASS improper_ PKGIMPROPER ) # improper ) # force
|
||||||
|
FindPackagesHeaders(${search_path} INTEGRATE_CLASS "[^.]" PKGINTEGRATE ) # integrate ) # update
|
||||||
|
FindPackagesHeaders(${search_path} KSPACE_CLASS "[^.]" PKGKSPACE ) # kspace ) # force
|
||||||
|
FindPackagesHeaders(${search_path} MINIMIZE_CLASS min_ PKGMINIMIZE ) # minimize ) # update
|
||||||
|
FindPackagesHeaders(${search_path} NBIN_CLASS nbin_ PKGNBIN ) # nbin ) # neighbor
|
||||||
|
FindPackagesHeaders(${search_path} NPAIR_CLASS npair_ PKGNPAIR ) # npair ) # neighbor
|
||||||
|
FindPackagesHeaders(${search_path} NSTENCIL_CLASS nstencil_ PKGNSTENCIL ) # nstencil ) # neighbor
|
||||||
|
FindPackagesHeaders(${search_path} NTOPO_CLASS ntopo_ PKGNTOPO ) # ntopo ) # neighbor
|
||||||
|
FindPackagesHeaders(${search_path} PAIR_CLASS pair_ PKGPAIR ) # pair ) # force
|
||||||
|
FindPackagesHeaders(${search_path} READER_CLASS reader_ PKGREADER ) # reader ) # read_dump
|
||||||
|
FindPackagesHeaders(${search_path} REGION_CLASS region_ PKGREGION ) # region ) # domain
|
||||||
|
endfunction(RegisterPackages)
|
||||||
|
|
||||||
|
function(CreatePackagesHeader path filename)
|
||||||
|
set(temp "")
|
||||||
|
if(ARGC GREATER 2)
|
||||||
|
list(REMOVE_AT ARGV 0 1)
|
||||||
|
foreach(FNAME ${ARGV})
|
||||||
|
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${FNAME}")
|
||||||
|
get_filename_component(DNAME ${FNAME} DIRECTORY)
|
||||||
|
get_filename_component(DNAME ${DNAME} NAME)
|
||||||
|
get_filename_component(FNAME ${FNAME} NAME)
|
||||||
|
set(temp "${temp}#undef PACKAGE\n#define PACKAGE \"${DNAME}\"\n")
|
||||||
|
set(temp "${temp}#include \"${DNAME}/${FNAME}\"\n")
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
message(STATUS "Generating ${filename}...")
|
||||||
|
file(WRITE "${path}/${filename}.tmp" "${temp}" )
|
||||||
|
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${path}/${filename}.tmp" "${path}/${filename}")
|
||||||
|
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${path}/${filename}")
|
||||||
|
endfunction(CreatePackagesHeader)
|
||||||
|
|
||||||
|
function(GeneratePackagesHeader path property style)
|
||||||
|
get_property(files GLOBAL PROPERTY ${property})
|
||||||
|
CreatePackagesHeader("${path}" "packages_${style}.h" ${files})
|
||||||
|
endfunction(GeneratePackagesHeader)
|
||||||
|
|
||||||
|
function(GeneratePackagesHeaders output_path)
|
||||||
|
GeneratePackagesHeader(${output_path} PKGANGLE angle ) # force
|
||||||
|
GeneratePackagesHeader(${output_path} PKGATOM_VEC atom ) # atom atom_vec_hybrid
|
||||||
|
GeneratePackagesHeader(${output_path} PKGBODY body ) # atom_vec_body
|
||||||
|
GeneratePackagesHeader(${output_path} PKGBOND bond ) # force
|
||||||
|
GeneratePackagesHeader(${output_path} PKGCOMMAND command ) # input
|
||||||
|
GeneratePackagesHeader(${output_path} PKGCOMPUTE compute ) # modify
|
||||||
|
GeneratePackagesHeader(${output_path} PKGDIHEDRAL dihedral ) # force
|
||||||
|
GeneratePackagesHeader(${output_path} PKGDUMP dump ) # output write_dump
|
||||||
|
GeneratePackagesHeader(${output_path} PKGFIX fix ) # modify
|
||||||
|
GeneratePackagesHeader(${output_path} PKGIMPROPER improper ) # force
|
||||||
|
GeneratePackagesHeader(${output_path} PKGINTEGRATE integrate ) # update
|
||||||
|
GeneratePackagesHeader(${output_path} PKGKSPACE kspace ) # force
|
||||||
|
GeneratePackagesHeader(${output_path} PKGMINIMIZE minimize ) # update
|
||||||
|
GeneratePackagesHeader(${output_path} PKGNBIN nbin ) # neighbor
|
||||||
|
GeneratePackagesHeader(${output_path} PKGNPAIR npair ) # neighbor
|
||||||
|
GeneratePackagesHeader(${output_path} PKGNSTENCIL nstencil ) # neighbor
|
||||||
|
GeneratePackagesHeader(${output_path} PKGNTOPO ntopo ) # neighbor
|
||||||
|
GeneratePackagesHeader(${output_path} PKGPAIR pair ) # force
|
||||||
|
GeneratePackagesHeader(${output_path} PKGREADER reader ) # read_dump
|
||||||
|
GeneratePackagesHeader(${output_path} PKGREGION region ) # domain
|
||||||
|
endfunction(GeneratePackagesHeaders)
|
||||||
|
|
||||||
|
|||||||
52
cmake/Modules/Testing.cmake
Normal file
52
cmake/Modules/Testing.cmake
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
###############################################################################
|
||||||
|
# Testing
|
||||||
|
###############################################################################
|
||||||
|
option(ENABLE_TESTING "Enable testing" OFF)
|
||||||
|
if(ENABLE_TESTING AND BUILD_EXE)
|
||||||
|
enable_testing()
|
||||||
|
option(LAMMPS_TESTING_SOURCE_DIR "Location of lammps-testing source directory" "")
|
||||||
|
option(LAMMPS_TESTING_GIT_TAG "Git tag of lammps-testing" "master")
|
||||||
|
mark_as_advanced(LAMMPS_TESTING_SOURCE_DIR LAMMPS_TESTING_GIT_TAG)
|
||||||
|
|
||||||
|
if (CMAKE_VERSION VERSION_GREATER "3.10.3" AND NOT LAMMPS_TESTING_SOURCE_DIR)
|
||||||
|
include(FetchContent)
|
||||||
|
|
||||||
|
FetchContent_Declare(lammps-testing
|
||||||
|
GIT_REPOSITORY https://github.com/lammps/lammps-testing.git
|
||||||
|
GIT_TAG ${LAMMPS_TESTING_GIT_TAG}
|
||||||
|
)
|
||||||
|
|
||||||
|
FetchContent_GetProperties(lammps-testing)
|
||||||
|
if(NOT lammps-testing_POPULATED)
|
||||||
|
message(STATUS "Downloading tests...")
|
||||||
|
FetchContent_Populate(lammps-testing)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(LAMMPS_TESTING_SOURCE_DIR ${lammps-testing_SOURCE_DIR})
|
||||||
|
elseif(NOT LAMMPS_TESTING_SOURCE_DIR)
|
||||||
|
message(WARNING "Full test-suite requires CMake >= 3.11 or copy of\n"
|
||||||
|
"https://github.com/lammps/lammps-testing in LAMMPS_TESTING_SOURCE_DIR")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_test(ShowHelp ${CMAKE_BINARY_DIR}/${LAMMPS_BINARY} -help)
|
||||||
|
|
||||||
|
if(EXISTS ${LAMMPS_TESTING_SOURCE_DIR})
|
||||||
|
message(STATUS "Running test discovery...")
|
||||||
|
|
||||||
|
file(GLOB_RECURSE TEST_SCRIPTS ${LAMMPS_TESTING_SOURCE_DIR}/tests/core/*/in.*)
|
||||||
|
foreach(script_path ${TEST_SCRIPTS})
|
||||||
|
get_filename_component(TEST_NAME ${script_path} EXT)
|
||||||
|
get_filename_component(SCRIPT_NAME ${script_path} NAME)
|
||||||
|
get_filename_component(PARENT_DIR ${script_path} DIRECTORY)
|
||||||
|
string(SUBSTRING ${TEST_NAME} 1 -1 TEST_NAME)
|
||||||
|
string(REPLACE "-" "_" TEST_NAME ${TEST_NAME})
|
||||||
|
string(REPLACE "+" "_" TEST_NAME ${TEST_NAME})
|
||||||
|
set(TEST_NAME "test_core_${TEST_NAME}_serial")
|
||||||
|
add_test(${TEST_NAME} ${CMAKE_BINARY_DIR}/${LAMMPS_BINARY} -in ${SCRIPT_NAME})
|
||||||
|
set_tests_properties(${TEST_NAME} PROPERTIES WORKING_DIRECTORY ${PARENT_DIR})
|
||||||
|
endforeach()
|
||||||
|
list(LENGTH TEST_SCRIPTS NUM_TESTS)
|
||||||
|
|
||||||
|
message(STATUS "Found ${NUM_TESTS} tests.")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
741
cmake/README.md
741
cmake/README.md
@ -33,12 +33,17 @@ tasks, act as a reference and provide examples of typical use cases.
|
|||||||
* [Package-Specific Configuration Options](#package-specific-configuration-options)
|
* [Package-Specific Configuration Options](#package-specific-configuration-options)
|
||||||
* [KSPACE Package](#kspace-package)
|
* [KSPACE Package](#kspace-package)
|
||||||
* [MKL](#mkl)
|
* [MKL](#mkl)
|
||||||
* [FFTW2](#fftw2)
|
|
||||||
* [FFTW3](#fftw3)
|
* [FFTW3](#fftw3)
|
||||||
|
* [BLAS](#blas)
|
||||||
* [LAPACK](#lapack)
|
* [LAPACK](#lapack)
|
||||||
* [PYTHON Package](#python-package)
|
* [PYTHON Package](#python-package)
|
||||||
* [GPU Package](#gpu-package)
|
* [GPU Package](#gpu-package)
|
||||||
|
* [MESSAGE Package](#message-package)
|
||||||
|
* [MSCG Package](#mscg-package)
|
||||||
* [VORONOI Package](#voronoi-package)
|
* [VORONOI Package](#voronoi-package)
|
||||||
|
* [USER-LATTE Package](#user-latte-package)
|
||||||
|
* [USER-PLUMED Package](#user-plumed-package)
|
||||||
|
* [USER-SCAFACOS Package](#user-scafacos-package)
|
||||||
* [USER-SMD Package](#user-smd-package)
|
* [USER-SMD Package](#user-smd-package)
|
||||||
* [Optional Features](#optional-features)
|
* [Optional Features](#optional-features)
|
||||||
* [zlib support](#zlib-support)
|
* [zlib support](#zlib-support)
|
||||||
@ -50,8 +55,6 @@ tasks, act as a reference and provide examples of typical use cases.
|
|||||||
* [Building with GNU Compilers](#building-with-gnu-compilers)
|
* [Building with GNU Compilers](#building-with-gnu-compilers)
|
||||||
* [Building with Intel Compilers](#building-with-intel-compilers)
|
* [Building with Intel Compilers](#building-with-intel-compilers)
|
||||||
* [Building with LLVM/Clang Compilers](#building-with-llvmclang-compilers)
|
* [Building with LLVM/Clang Compilers](#building-with-llvmclang-compilers)
|
||||||
* [Examples](#examples)
|
|
||||||
|
|
||||||
|
|
||||||
## Quick Start for the Impatient
|
## Quick Start for the Impatient
|
||||||
If you want to skip ahead and just run the compilation using `cmake`, please
|
If you want to skip ahead and just run the compilation using `cmake`, please
|
||||||
@ -205,14 +208,16 @@ cmake -C ../cmake/presets/all_on.cmake -C ../cmake/presets/nolib.cmake -D PKG_GP
|
|||||||
<td>Controls if debugging symbols are added to the generated binaries</td>
|
<td>Controls if debugging symbols are added to the generated binaries</td>
|
||||||
<td>
|
<td>
|
||||||
<dl>
|
<dl>
|
||||||
<dt><code>Release</code> (default)</dt>
|
<dt><code>RelWithDebInfo (default)</code></dt>
|
||||||
|
<dt><code>Release</code></dt>
|
||||||
<dt><code>Debug</code></dt>
|
<dt><code>Debug</code></dt>
|
||||||
|
<dt><code>MinSizeRel</code></dt>
|
||||||
</dl>
|
</dl>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><code>CMAKE_VERBOSE_MAKEFILE</code></td>
|
<td><code>CMAKE_VERBOSE_MAKEFILE</code></td>
|
||||||
<td>Enable verbose output from Makefile builds (useful for debugging), the same can be achived by adding `VERBOSE=1` to the `make` call.</td>
|
<td>Enable verbose output from Makefile builds (useful for debugging), the same can be achieved by adding `VERBOSE=1` to the `make` call.</td>
|
||||||
<td>
|
<td>
|
||||||
<dl>
|
<dl>
|
||||||
<dt><code>off</code> (default)</dt>
|
<dt><code>off</code> (default)</dt>
|
||||||
@ -249,6 +254,16 @@ cmake -C ../cmake/presets/all_on.cmake -C ../cmake/presets/nolib.cmake -D PKG_GP
|
|||||||
</dl>
|
</dl>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>LAMMPS_LONGLONG_TO_LONG</code></td>
|
||||||
|
<td>Workaround if your system or MPI version does not recognize <code>long long</code> data types</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>off</code> (default)</dt>
|
||||||
|
<dt><code>on</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><code>LAMMPS_MEMALIGN</code></td>
|
<td><code>LAMMPS_MEMALIGN</code></td>
|
||||||
<td>controls the alignment of blocks of memory allocated by LAMMPS</td>
|
<td>controls the alignment of blocks of memory allocated by LAMMPS</td>
|
||||||
@ -271,7 +286,16 @@ cmake -C ../cmake/presets/all_on.cmake -C ../cmake/presets/nolib.cmake -D PKG_GP
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><code>LAMMPS_MACHINE</code></td>
|
<td><code>LAMMPS_MACHINE</code></td>
|
||||||
<td>allows appending a machine suffix to the generate LAMMPS binary</td>
|
<td>allows appending a machine suffix to the generated LAMMPS binary</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt>*none* (default)</dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>LAMMPS_LIB_SUFFIX</code></td>
|
||||||
|
<td>allows appending a suffix to the generated LAMMPS library</td>
|
||||||
<td>
|
<td>
|
||||||
<dl>
|
<dl>
|
||||||
<dt>*none* (default)</dt>
|
<dt>*none* (default)</dt>
|
||||||
@ -319,8 +343,8 @@ cmake -C ../cmake/presets/all_on.cmake -C ../cmake/presets/nolib.cmake -D PKG_GP
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><code>LAMMPS_LONGLONG_TO_LONG</code></td>
|
<td><code>BUILD_TOOLS</code></td>
|
||||||
<td>Workaround if your system or MPI version does not recognize <code>long long</code> data types</td>
|
<td>control whether to build LAMMPS tools</td>
|
||||||
<td>
|
<td>
|
||||||
<dl>
|
<dl>
|
||||||
<dt><code>off</code> (default)</dt>
|
<dt><code>off</code> (default)</dt>
|
||||||
@ -552,24 +576,7 @@ cmake -C ../cmake/presets/all_on.cmake -C ../cmake/presets/nolib.cmake -D PKG_GP
|
|||||||
Several fixes and a pair style that have Monte Carlo (MC) or MC-like
|
Several fixes and a pair style that have Monte Carlo (MC) or MC-like
|
||||||
attributes. These include fixes for creating, breaking, and swapping bonds,
|
attributes. These include fixes for creating, breaking, and swapping bonds,
|
||||||
for performing atomic swaps, and performing grand-canonical MC (GCMC) in
|
for performing atomic swaps, and performing grand-canonical MC (GCMC) in
|
||||||
conjuction with dynamics.
|
conjunction with dynamics.
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<dl>
|
|
||||||
<dt><code>off</code> (default)</dt>
|
|
||||||
<dt><code>on</code></dt>
|
|
||||||
</dl>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><code>PKG_MEAM</code></td>
|
|
||||||
<td>
|
|
||||||
<p>A pair style for the modified embedded atom (MEAM) potential.</p>
|
|
||||||
|
|
||||||
<p><strong>Please note that the MEAM package has been superseded by the USER-MEAMC package,
|
|
||||||
which is a direct translation of the MEAM package to C++. USER-MEAMC contains
|
|
||||||
additional optimizations making it run faster than MEAM on most machines, while
|
|
||||||
providing the identical features and USER interface.</strong></p>
|
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<dl>
|
<dl>
|
||||||
@ -634,21 +641,6 @@ providing the identical features and USER interface.</strong></p>
|
|||||||
</dl>
|
</dl>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
|
||||||
<td><code>PKG_REAX</code></td>
|
|
||||||
<td>
|
|
||||||
A pair style which wraps a Fortran library which implements the ReaxFF
|
|
||||||
potential, which is a universal reactive force field. See the USER-REAXC
|
|
||||||
package for an alternate implementation in C/C++. Also a fix reax/bonds
|
|
||||||
command for monitoring molecules as bonds are created and destroyed.
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<dl>
|
|
||||||
<dt><code>off</code> (default)</dt>
|
|
||||||
<dt><code>on</code></dt>
|
|
||||||
</dl>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
<tr>
|
||||||
<td><code>PKG_REPLICA</code></td>
|
<td><code>PKG_REPLICA</code></td>
|
||||||
<td>
|
<td>
|
||||||
@ -695,6 +687,16 @@ providing the identical features and USER interface.</strong></p>
|
|||||||
</dl>
|
</dl>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>PKG_SPIN</code></td>
|
||||||
|
<td>Model atomic magnetic spins classically, coupled to atoms moving in the usual manner via MD. Various pair, fix, and compute styles.</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>off</code> (default)</dt>
|
||||||
|
<dt><code>on</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><code>PKG_SNAP</code></td>
|
<td><code>PKG_SNAP</code></td>
|
||||||
<td>
|
<td>
|
||||||
@ -757,6 +759,16 @@ providing the identical features and USER interface.</strong></p>
|
|||||||
</dl>
|
</dl>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>PKG_MESSAGE</code></td>
|
||||||
|
<td>Commands to use LAMMPS as either a client or server and couple it to another application.</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>off</code> (default)</dt>
|
||||||
|
<dt><code>on</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><code>PKG_MSCG</code></td>
|
<td><code>PKG_MSCG</code></td>
|
||||||
<td>
|
<td>
|
||||||
@ -811,6 +823,18 @@ providing the identical features and USER interface.</strong></p>
|
|||||||
</dl>
|
</dl>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>PKG_VORONOI</code></td>
|
||||||
|
<td>
|
||||||
|
A compute command which calculates the Voronoi tesselation of a collection of atoms by wrapping the Voro++ library. This can be used to calculate the local volume or each atoms or its near neighbors.
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>off</code> (default)</dt>
|
||||||
|
<dt><code>on</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
@ -825,6 +849,16 @@ providing the identical features and USER interface.</strong></p>
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><code>PKG_USER-ADIOS</code></td>
|
||||||
|
<td>ADIOS is a high-performance I/O library. This package implements the dump “atom/adios” and dump “custom/adios” commands to write data using the ADIOS library.</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>off</code> (default)</dt>
|
||||||
|
<dt><code>on</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><code>PKG_USER-ATC</code></td>
|
<td><code>PKG_USER-ATC</code></td>
|
||||||
<td>
|
<td>
|
||||||
@ -853,6 +887,18 @@ providing the identical features and USER interface.</strong></p>
|
|||||||
</dl>
|
</dl>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>PKG_USER-BOCS</code></td>
|
||||||
|
<td>
|
||||||
|
This package provides fix bocs, a modified version of fix npt which includes the pressure correction to the barostat as outlined in: N. J. H. Dunn and W. G. Noid, “Bottom-up coarse-grained models that accurately describe the structure, pressure, and compressibility of molecular liquids,” J. Chem. Phys. 143, 243148 (2015).
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>off</code> (default)</dt>
|
||||||
|
<dt><code>on</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><code>PKG_USER-CGDNA</code></td>
|
<td><code>PKG_USER-CGDNA</code></td>
|
||||||
<td>
|
<td>
|
||||||
@ -1142,6 +1188,30 @@ providing the identical features and USER interface.</strong></p>
|
|||||||
</dl>
|
</dl>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>PKG_USER-PLUMED</code></td>
|
||||||
|
<td>
|
||||||
|
The fix plumed command allows you to use the PLUMED free energy plugin for molecular dynamics to analyze and bias your LAMMPS trajectory on the fly. The PLUMED library is called from within the LAMMPS input script by using the <code>fix plumed</code> command.
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>off</code> (default)</dt>
|
||||||
|
<dt><code>on</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>PKG_USER-PTM</code></td>
|
||||||
|
<td>
|
||||||
|
A <code>compute ptm/atom</code> command that calculates local structure characterization using the Polyhedral Template Matching methodology.
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>off</code> (default)</dt>
|
||||||
|
<dt><code>on</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><code>PKG_USER-QTB</code></td>
|
<td><code>PKG_USER-QTB</code></td>
|
||||||
<td>
|
<td>
|
||||||
@ -1197,6 +1267,33 @@ providing the identical features and USER interface.</strong></p>
|
|||||||
</dl>
|
</dl>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>PKG_USER-SCAFACOS</code></td>
|
||||||
|
<td>
|
||||||
|
A KSpace style which wraps the ScaFaCoS Coulomb solver library to compute long-range Coulombic interactions.
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>off</code> (default)</dt>
|
||||||
|
<dt><code>on</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>PKG_USER-SDPD</code></td>
|
||||||
|
<td>
|
||||||
|
A pair style for smoothed dissipative particle dynamics (SDPD), which is an
|
||||||
|
extension of smoothed particle hydrodynamics (SPH) to mesoscale where thermal
|
||||||
|
fluctuations are important (see the USER-SPH package). Also two fixes for
|
||||||
|
moving and rigid body integration of SPH/SDPD particles (particles of
|
||||||
|
<code>atom_style meso</code>).</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>off</code> (default)</dt>
|
||||||
|
<dt><code>on</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><code>PKG_USER-SMD</code></td>
|
<td><code>PKG_USER-SMD</code></td>
|
||||||
<td>
|
<td>
|
||||||
@ -1280,6 +1377,23 @@ providing the identical features and USER interface.</strong></p>
|
|||||||
</dl>
|
</dl>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>PKG_USER-YAFF</code></td>
|
||||||
|
<td>
|
||||||
|
Some potentials that are also implemented in the Yet Another Force Field (YAFF) code.
|
||||||
|
The expressions and their use are discussed in the following papers:
|
||||||
|
<ul>
|
||||||
|
<li><a href="https://doi.org/10.1002/jcc.23877" target="_blank">Vanduyfhuys et al., J. Comput. Chem., 36 (13), 1015-1027 (2015)</a></li>
|
||||||
|
<li><a href="https://doi.org/10.1002/jcc.25173" target="_blank">Vanduyfhuys et al., J. Comput. Chem., 39 (16), 999-1011 (2018)</a></li>
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>off</code> (default)</dt>
|
||||||
|
<dt><code>on</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
@ -1300,14 +1414,27 @@ providing the identical features and USER interface.</strong></p>
|
|||||||
<td><code>FFT</code></td>
|
<td><code>FFT</code></td>
|
||||||
<td>
|
<td>
|
||||||
<p>FFT library for KSPACE package</p>
|
<p>FFT library for KSPACE package</p>
|
||||||
<p>If either MKL or FFTW is selected <code>cmake</code> will try to locate these libraries automatically. To control which one should be used please see the options below for each FFT library.</p>
|
<p>If either MKL or FFTW is selected <code>cmake</code> will try to locate
|
||||||
|
these libraries automatically. To control which one should be used please see
|
||||||
|
the options below for each FFT library. Otherwise it will default to KISS
|
||||||
|
FFT.</p>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<dl>
|
<dl>
|
||||||
<dt><code>KISS</code></dt>
|
|
||||||
<dt><code>FFTW3</code></dt>
|
<dt><code>FFTW3</code></dt>
|
||||||
<dt><code>FFTW2</code></dt>
|
<dt><code>FFTW2</code></dt>
|
||||||
<dt><code>MKL</code></dt>
|
<dt><code>MKL</code></dt>
|
||||||
|
<dt><code>KISS</code> (default)</dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>FFT_SINGLE</code></td>
|
||||||
|
<td>Use single-precision floating-point in FFT</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>off</code> (default = double precision)</dt>
|
||||||
|
<dt><code>on</code></dt>
|
||||||
</dl>
|
</dl>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -1325,60 +1452,6 @@ providing the identical features and USER interface.</strong></p>
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
### MKL
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Option</th>
|
|
||||||
<th>Description</th>
|
|
||||||
<th>Values</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td><code>MKL_INCLUDE_DIRS</code></td>
|
|
||||||
<td></td>
|
|
||||||
<td>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><code>MKL_LIBRARIES</code></td>
|
|
||||||
<td></td>
|
|
||||||
<td>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
TODO static vs dynamic linking
|
|
||||||
|
|
||||||
### FFTW2
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Option</th>
|
|
||||||
<th>Description</th>
|
|
||||||
<th>Values</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td><code>FFTW2_INCLUDE_DIRS</code></td>
|
|
||||||
<td></td>
|
|
||||||
<td>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><code>FFTW2_LIBRARIES</code></td>
|
|
||||||
<td></td>
|
|
||||||
<td>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
### FFTW3
|
### FFTW3
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
@ -1392,24 +1465,57 @@ TODO static vs dynamic linking
|
|||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td><code>FFTW3_INCLUDE_DIRS</code></td>
|
<td><code>FFTW3_INCLUDE_DIRS</code></td>
|
||||||
<td></td>
|
<td>path to FFTW3 include files</td>
|
||||||
<td>
|
<td>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><code>FFTW3_LIBRARIES</code></td>
|
<td><code>FFTW3_LIBRARIES</code></td>
|
||||||
<td></td>
|
<td>list of paths to FFTW3 libraries</td>
|
||||||
<td>
|
<td>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
### MKL
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Option</th>
|
||||||
|
<th>Description</th>
|
||||||
|
<th>Values</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><code>MKL_INCLUDE_DIRS</code></td>
|
||||||
|
<td>path to MKL include files</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>MKL_LIBRARIES</code></td>
|
||||||
|
<td>list of paths to MKL libraries</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
### BLAS
|
||||||
|
|
||||||
|
See [FindBLAS documentation](https://cmake.org/cmake/help/latest/module/FindBLAS.html)
|
||||||
|
|
||||||
### LAPACK
|
### LAPACK
|
||||||
TODO
|
|
||||||
|
See [FindLAPACK documentation](https://cmake.org/cmake/help/latest/module/FindLAPACK.html)
|
||||||
|
|
||||||
### PYTHON Package
|
### PYTHON Package
|
||||||
|
|
||||||
|
See [FindPYTHON documentation](https://cmake.org/cmake/help/latest/module/FindPython.html)
|
||||||
|
|
||||||
### USER-INTEL Package
|
### USER-INTEL Package
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
@ -1499,10 +1605,11 @@ target API.
|
|||||||
<td>
|
<td>
|
||||||
<dl>
|
<dl>
|
||||||
<dt><code>sm_20</code> (Fermi)</dt>
|
<dt><code>sm_20</code> (Fermi)</dt>
|
||||||
<dt><code>sm_30</code> (Kepler)</dt>
|
<dt><code>sm_30</code> (Kepler) (default)</dt>
|
||||||
<dt><code>sm_50</code> (Maxwell)</dt>
|
<dt><code>sm_50</code> (Maxwell)</dt>
|
||||||
<dt><code>sm_60</code> (Pascal)</dt>
|
<dt><code>sm_60</code> (Pascal)</dt>
|
||||||
<dt><code>sm_70</code> (Volta)</dt>
|
<dt><code>sm_70</code> (Volta)</dt>
|
||||||
|
<dt><code>sm_75</code> (Turing)</dt>
|
||||||
</dl>
|
</dl>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -1534,13 +1641,14 @@ target API.
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
### VORONOI Package
|
### KIM Package
|
||||||
|
|
||||||
TODO
|
Requires installation of the KIM library with API v2
|
||||||
|
|
||||||
### USER-SMD Package
|
If `DOWNLOAD_KIM` is set, the KIM library will be downloaded and built inside
|
||||||
|
the CMake build directory. If the KIM library is already on your system (in a
|
||||||
Requires a Eigen3 installation
|
location CMake cannot find it), set the `PKG_CONFIG_PATH` environment variable
|
||||||
|
so that `libkim-api` can be found.
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
@ -1551,9 +1659,349 @@ Requires a Eigen3 installation
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><code>DOWNLOAD_KIM</code></td>
|
||||||
|
<td>Download KIM API v2 and compile it as part of the build.</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>off</code> (default)</dt>
|
||||||
|
<dt><code>on</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
### MESSAGE Package
|
||||||
|
|
||||||
|
This package can optionally include support for messaging via sockets, using the open-source [ZeroMQ library](http://zeromq.org/), which must be installed on your system.
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Option</th>
|
||||||
|
<th>Description</th>
|
||||||
|
<th>Values</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><code>MESSAGE_ZMQ</code></td>
|
||||||
|
<td>Build with ZeroMQ support</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>off</code> (default)</dt>
|
||||||
|
<dt><code>on</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>ZMQ_LIBRARY</code></td>
|
||||||
|
<td>
|
||||||
|
ZMQ library file (only needed if at custom location)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>ZMG_INCLUDE_DIR</code></td>
|
||||||
|
<td>
|
||||||
|
Provide include directory of existing ZMQ installation (only needed if at custom location)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
### MSCG Package
|
||||||
|
|
||||||
|
Requires installation of the MSCG library
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Option</th>
|
||||||
|
<th>Description</th>
|
||||||
|
<th>Values</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><code>DOWNLOAD_MSCG</code></td>
|
||||||
|
<td>Download MSCG and compile it as part of the build</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>off</code> (default)</dt>
|
||||||
|
<dt><code>on</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>MSCG_LIBRARY</code></td>
|
||||||
|
<td>
|
||||||
|
MSCG library file (only needed if at custom location)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>MSCG_INCLUDE_DIR</code></td>
|
||||||
|
<td>
|
||||||
|
Provide include directory of existing MSCG installation (only needed if at custom location)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
### VORONOI Package
|
||||||
|
|
||||||
|
Requires installation of the Voro++ library
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Option</th>
|
||||||
|
<th>Description</th>
|
||||||
|
<th>Values</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><code>DOWNLOAD_VORO</code></td>
|
||||||
|
<td>Download Voro++ and compile it as part of the build</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>off</code> (default)</dt>
|
||||||
|
<dt><code>on</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>VORO_LIBRARY</code></td>
|
||||||
|
<td>
|
||||||
|
Voro++ library file (only needed if at custom location)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>VORO_INCLUDE_DIR</code></td>
|
||||||
|
<td>
|
||||||
|
Provide include directory of existing Voro++ installation (only needed if at custom location)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
### USER-COLVARS Package
|
||||||
|
|
||||||
|
Requires a C++11 compiler to compile with the Lepton library included.
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Option</th>
|
||||||
|
<th>Description</th>
|
||||||
|
<th>Values</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><code>COLVARS_LEPTON</code></td>
|
||||||
|
<td>Enable the use of the Lepton library inside the Colvars library.
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>on</code> (default)</dt>
|
||||||
|
<dt><code>off</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
### USER-LATTE Package
|
||||||
|
|
||||||
|
Requires installation of the LATTE library
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Option</th>
|
||||||
|
<th>Description</th>
|
||||||
|
<th>Values</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><code>DOWNLOAD_LATTE</code></td>
|
||||||
|
<td>Download LATTE and compile it as part of the build</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>off</code> (default)</dt>
|
||||||
|
<dt><code>on</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>LATTE_LIBRARY</code></td>
|
||||||
|
<td>
|
||||||
|
LATTE library file (only needed if at custom location)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
### USER-PLUMED Package
|
||||||
|
|
||||||
|
Requires installation of the PLUMED library
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Option</th>
|
||||||
|
<th>Description</th>
|
||||||
|
<th>Values</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><code>DOWNLOAD_PLUMED</code></td>
|
||||||
|
<td>Download PLUMED and compile it as part of the build</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>off</code> (default)</dt>
|
||||||
|
<dt><code>on</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>PLUMED_MODE</code></td>
|
||||||
|
<td>
|
||||||
|
Determines the linkage mode for the PLUMED library.
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>static</code> (default)</dt>
|
||||||
|
<dt><code>shared</code></dt>
|
||||||
|
<dt><code>runtime</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
### USER-LATTE Package
|
||||||
|
|
||||||
|
Requires installation of the LATTE library
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Option</th>
|
||||||
|
<th>Description</th>
|
||||||
|
<th>Values</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><code>DOWNLOAD_LATTE</code></td>
|
||||||
|
<td>Download LATTE and compile it as part of the build</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>off</code> (default)</dt>
|
||||||
|
<dt><code>on</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>LATTE_LIBRARY</code></td>
|
||||||
|
<td>
|
||||||
|
LATTE library file (only needed if at custom location)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
### USER-SMD Package
|
||||||
|
|
||||||
|
Requires installation of the Eigen3 library
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Option</th>
|
||||||
|
<th>Description</th>
|
||||||
|
<th>Values</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><code>DOWNLOAD_EIGEN3</code></td>
|
||||||
|
<td>Download Eigen3 and compile it as part of the build</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>off</code> (default)</dt>
|
||||||
|
<dt><code>on</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><code>EIGEN3_INCLUDE_DIR</code></td>
|
<td><code>EIGEN3_INCLUDE_DIR</code></td>
|
||||||
<td></td>
|
<td>
|
||||||
|
Provide include directory of existing Eigen3 installation (only needed if at custom location)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
### USER-SCAFACOS Package
|
||||||
|
|
||||||
|
To build with this package, you must download and build the [ScaFaCoS Coulomb solver library](http://www.scafacos.de/)
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Option</th>
|
||||||
|
<th>Description</th>
|
||||||
|
<th>Values</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><code>DOWNLOAD_SCAFACOS</code></td>
|
||||||
|
<td>Download SCAFACOS and compile it as part of the build</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>off</code> (default)</dt>
|
||||||
|
<dt><code>on</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>SCAFACOS_LIBRARY</code></td>
|
||||||
|
<td>
|
||||||
|
SCAFACOS library file (only needed if at custom location)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>SCAFACOS_INCLUDE_DIR</code></td>
|
||||||
|
<td>
|
||||||
|
SCAFACOS include directory (only needed if at custom location)
|
||||||
|
</td>
|
||||||
<td>
|
<td>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -1791,5 +2239,82 @@ cmake -D CMAKE_C_COMPILER=icc -D CMAKE_CXX_COMPILER=icpc -D CMAKE_Fortran_COMPIL
|
|||||||
cmake -D CMAKE_C_COMPILER=clang -D CMAKE_CXX_COMPILER=clang++ -D CMAKE_Fortran_COMPILER=flang ../cmake
|
cmake -D CMAKE_C_COMPILER=clang -D CMAKE_CXX_COMPILER=clang++ -D CMAKE_Fortran_COMPILER=flang ../cmake
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## LAMMPS Developer Options
|
||||||
|
|
||||||
## Examples
|
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Option</th>
|
||||||
|
<th>Description</th>
|
||||||
|
<th>Values</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><code>ENABLE_TESTING</code></td>
|
||||||
|
<td>Control wheather to add tests via CTest</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>off</code> (default)</dt>
|
||||||
|
<dt><code>on</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>LAMMPS_TESTING_SOURCE_DIR</code></td>
|
||||||
|
<td>Custom location of lammps-testing repository (optional). If not specified it will download it via Git</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>LAMMPS_TESTING_GIT_TAG</code></td>
|
||||||
|
<td>If lammps-testing repository is cloned, this is the tag/commit that will be checked out</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>master</code> (default)</dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>ENABLE_COVERAGE</code></td>
|
||||||
|
<td>Enables code coverage support via gcov and adds a gcovr build target to generate a coverage report.</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>off</code> (default)</dt>
|
||||||
|
<dt><code>on</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>ENABLE_SANITIZE_ADDRESS</code></td>
|
||||||
|
<td>Enables Address Sanitizer support when compiling using GCC or Clang for detecting memory leaks in binaries while running them. See https://clang.llvm.org/docs/AddressSanitizer.html</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>off</code> (default)</dt>
|
||||||
|
<dt><code>on</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>ENABLE_SANITIZE_UNDEFINED</code></td>
|
||||||
|
<td>Enables Undefined Behavior Sanitizer support when compiling using GCC or Clang for detecting code that is running into undefined behavior of the language. See https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>off</code> (default)</dt>
|
||||||
|
<dt><code>on</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>ENABLE_SANITIZE_THREAD</code></td>
|
||||||
|
<td>Enables Thread Sanitizer support when compiling using GCC or Clang for detecting data races in binaries while running them. See https://clang.llvm.org/docs/ThreadSanitizer.html</td>
|
||||||
|
<td>
|
||||||
|
<dl>
|
||||||
|
<dt><code>off</code> (default)</dt>
|
||||||
|
<dt><code>on</code></dt>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
# set environment for LAMMPS and msi2lmp executables
|
# set environment for LAMMPS and msi2lmp executables
|
||||||
# to find potential and force field files
|
# to find potential and force field files
|
||||||
if ( "$?LAMMPS_POTENTIALS" == 0 ) setenv LAMMPS_POTENTIALS @LAMMPS_POTENTIALS_DIR@
|
if ( "$?LAMMPS_POTENTIALS" == 0 ) setenv LAMMPS_POTENTIALS @LAMMPS_INSTALL_DATADIR@/potentials
|
||||||
if ( "$?MSI2LMP_LIBRARY" == 0 ) setenv MSI2LMP_LIBRARY @LAMMPS_FRC_FILES_DIR@
|
if ( "$?MSI2LMP_LIBRARY" == 0 ) setenv MSI2LMP_LIBRARY @LAMMPS_INSTALL_DATADIR@/frc_files
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
# set environment for LAMMPS and msi2lmp executables
|
# set environment for LAMMPS and msi2lmp executables
|
||||||
# to find potential and force field files
|
# to find potential and force field files
|
||||||
LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS-@LAMMPS_POTENTIALS_DIR@}
|
LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS-@LAMMPS_INSTALL_DATADIR@/potentials}
|
||||||
MSI2LMP_LIBRARY=${MSI2LMP_LIBRARY-@LAMMPS_FRC_FILES_DIR@}
|
MSI2LMP_LIBRARY=${MSI2LMP_LIBRARY-@LAMMPS_INSTALL_DATADIR@/frc_files}
|
||||||
export LAMMPS_POTENTIALS MSI2LMP_LIBRARY
|
export LAMMPS_POTENTIALS MSI2LMP_LIBRARY
|
||||||
|
|||||||
@ -18,12 +18,6 @@
|
|||||||
# myapp_CFLAGS = $(LAMMPS_CFLAGS)
|
# myapp_CFLAGS = $(LAMMPS_CFLAGS)
|
||||||
# myapp_LDADD = $(LAMMPS_LIBS)
|
# myapp_LDADD = $(LAMMPS_LIBS)
|
||||||
|
|
||||||
# Use this in CMake:
|
|
||||||
# CMakeLists.txt:
|
|
||||||
# find_package(PkgConfig)
|
|
||||||
# pkg_check_modules(LAMMPS IMPORTED_TARGET lammps)
|
|
||||||
# target_link_libraries(<lib> PkgConfig::LAMMPS)
|
|
||||||
|
|
||||||
prefix=@CMAKE_INSTALL_PREFIX@
|
prefix=@CMAKE_INSTALL_PREFIX@
|
||||||
libdir=@CMAKE_INSTALL_FULL_LIBDIR@
|
libdir=@CMAKE_INSTALL_FULL_LIBDIR@
|
||||||
includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
|
includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
|
||||||
@ -31,7 +25,7 @@ includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
|
|||||||
Name: liblammps@LAMMPS_MACHINE@
|
Name: liblammps@LAMMPS_MACHINE@
|
||||||
Description: Large-scale Atomic/Molecular Massively Parallel Simulator Library
|
Description: Large-scale Atomic/Molecular Massively Parallel Simulator Library
|
||||||
URL: http://lammps.sandia.gov
|
URL: http://lammps.sandia.gov
|
||||||
Version: @LAMMPS_VERSION@
|
Version: @PROJECT_VERSION@
|
||||||
Requires:
|
Requires:
|
||||||
Libs: -L${libdir} -llammps@LAMMPS_LIB_SUFFIX@
|
Libs: -L${libdir} -llammps@LAMMPS_LIB_SUFFIX@
|
||||||
Libs.private: -lm
|
Libs.private: -lm
|
||||||
|
|||||||
@ -7,11 +7,11 @@ set(ALL_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU
|
|||||||
SRD VORONOI
|
SRD VORONOI
|
||||||
USER-ADIOS USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK
|
USER-ADIOS USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK
|
||||||
USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP
|
USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP
|
||||||
USER-H5MD USER-INTEL USER-LB USER-MANIFOLD USER-MEAMC USER-MESO
|
USER-H5MD USER-INTEL USER-LB USER-MANIFOLD USER-MEAMC USER-MESODPD
|
||||||
USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF USER-OMP
|
USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF USER-OMP
|
||||||
USER-PHONON USER-PLUMED USER-PTM USER-QMMM USER-QTB USER-QUIP
|
USER-PHONON USER-PLUMED USER-PTM USER-QMMM USER-QTB USER-QUIP
|
||||||
USER-REAXC USER-SCAFACOS USER-SDPD USER-SMD USER-SMTBQ USER-SPH
|
USER-REACTION USER-REAXC USER-SCAFACOS USER-SDPD USER-SMD USER-SMTBQ
|
||||||
USER-TALLY USER-UEF USER-VTK USER-YAFF)
|
USER-SPH USER-TALLY USER-UEF USER-VTK USER-YAFF)
|
||||||
|
|
||||||
foreach(PKG ${ALL_PACKAGES})
|
foreach(PKG ${ALL_PACKAGES})
|
||||||
set(PKG_${PKG} OFF CACHE BOOL "" FORCE)
|
set(PKG_${PKG} OFF CACHE BOOL "" FORCE)
|
||||||
|
|||||||
@ -9,11 +9,11 @@ set(ALL_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU
|
|||||||
SRD VORONOI
|
SRD VORONOI
|
||||||
USER-ADIOS USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK
|
USER-ADIOS USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK
|
||||||
USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP
|
USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP
|
||||||
USER-H5MD USER-INTEL USER-LB USER-MANIFOLD USER-MEAMC USER-MESO
|
USER-H5MD USER-INTEL USER-LB USER-MANIFOLD USER-MEAMC USER-MESODPD
|
||||||
USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF USER-OMP
|
USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF USER-OMP
|
||||||
USER-PHONON USER-PLUMED USER-PTM USER-QMMM USER-QTB USER-QUIP
|
USER-PHONON USER-PLUMED USER-PTM USER-QMMM USER-QTB USER-QUIP
|
||||||
USER-REAXC USER-SCAFACOS USER-SDPD USER-SMD USER-SMTBQ USER-SPH
|
USER-REACTION USER-REAXC USER-SCAFACOS USER-SDPD USER-SMD USER-SMTBQ
|
||||||
USER-TALLY USER-UEF USER-VTK USER-YAFF)
|
USER-SPH USER-TALLY USER-UEF USER-VTK USER-YAFF)
|
||||||
|
|
||||||
foreach(PKG ${ALL_PACKAGES})
|
foreach(PKG ${ALL_PACKAGES})
|
||||||
set(PKG_${PKG} ON CACHE BOOL "" FORCE)
|
set(PKG_${PKG} ON CACHE BOOL "" FORCE)
|
||||||
|
|||||||
@ -13,5 +13,5 @@ set(OpenMP_C_LIB_NAMES "omp" CACHE STRING "" FORCE)
|
|||||||
set(OpenMP_CXX "clang++" CACHE STRING "" FORCE)
|
set(OpenMP_CXX "clang++" CACHE STRING "" FORCE)
|
||||||
set(OpenMP_CXX_FLAGS "-fopenmp" CACHE STRING "" FORCE)
|
set(OpenMP_CXX_FLAGS "-fopenmp" CACHE STRING "" FORCE)
|
||||||
set(OpenMP_CXX_LIB_NAMES "omp" CACHE STRING "" FORCE)
|
set(OpenMP_CXX_LIB_NAMES "omp" CACHE STRING "" FORCE)
|
||||||
set(OpenMP_omp_LIBRARY "/usr/lib64/libomp.so" CACHE PATH "" FORCE)
|
set(OpenMP_omp_LIBRARY "libomp.so" CACHE PATH "" FORCE)
|
||||||
|
|
||||||
|
|||||||
16
cmake/presets/intel.cmake
Normal file
16
cmake/presets/intel.cmake
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# preset that will enable clang/clang++ with support for MPI and OpenMP (on Linux boxes)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_COMPILER "icpc" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_C_COMPILER "icc" CACHE STRING "" FORCE)
|
||||||
|
set(MPI_CXX "icpc" CACHE STRING "" FORCE)
|
||||||
|
set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE)
|
||||||
|
unset(HAVE_OMP_H_INCLUDE CACHE)
|
||||||
|
|
||||||
|
set(OpenMP_C "icc" CACHE STRING "" FORCE)
|
||||||
|
set(OpenMP_C_FLAGS "-qopenmp" CACHE STRING "" FORCE)
|
||||||
|
set(OpenMP_C_LIB_NAMES "omp" CACHE STRING "" FORCE)
|
||||||
|
set(OpenMP_CXX "icpc" CACHE STRING "" FORCE)
|
||||||
|
set(OpenMP_CXX_FLAGS "-qopenmp" CACHE STRING "" FORCE)
|
||||||
|
set(OpenMP_CXX_LIB_NAMES "omp" CACHE STRING "" FORCE)
|
||||||
|
set(OpenMP_omp_LIBRARY "libiomp5.so" CACHE PATH "" FORCE)
|
||||||
|
|
||||||
@ -1,17 +1,29 @@
|
|||||||
set(WIN_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU
|
set(WIN_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU
|
||||||
GRANULAR KSPACE MANYBODY MC MISC MOLECULE OPT PERI POEMS QEQ
|
GRANULAR KSPACE LATTE MANYBODY MC MISC MOLECULE OPT PERI
|
||||||
REPLICA RIGID SHOCK SNAP SPIN SRD VORONOI USER-ATC USER-AWPMD
|
POEMS QEQ REPLICA RIGID SHOCK SNAP SPIN SRD VORONOI
|
||||||
USER-BOCS USER-CGDNA USER-CGSDK USER-COLVARS USER-DIFFRACTION
|
USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK
|
||||||
USER-DPD USER-DRUDE USER-EFF USER-FEP USER-INTEL USER-MANIFOLD
|
USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF
|
||||||
USER-MEAMC USER-MESO USER-MISC USER-MOFFF USER-MOLFILE USER-OMP
|
USER-FEP USER-INTEL USER-MANIFOLD USER-MEAMC USER-MESODPD
|
||||||
USER-PHONON USER-PTM USER-QTB USER-REAXC USER-SDPD USER-SMD
|
USER-MISC USER-MGPT USER-MOFFF USER-MOLFILE USER-OMP
|
||||||
USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-YAFF)
|
USER-PHONON USER-PTM USER-QTB USER-REACTION USER-REAXC
|
||||||
|
USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF
|
||||||
|
USER-YAFF)
|
||||||
|
|
||||||
foreach(PKG ${WIN_PACKAGES})
|
foreach(PKG ${WIN_PACKAGES})
|
||||||
set(PKG_${PKG} ON CACHE BOOL "" FORCE)
|
set(PKG_${PKG} ON CACHE BOOL "" FORCE)
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
|
# these two packages require a full MPI implementation
|
||||||
|
if(BUILD_MPI)
|
||||||
|
set(PKG_MPIIO ON CACHE BOOL "" FORCE)
|
||||||
|
set(PKG_USER-LB ON CACHE BOOL "" FORCE)
|
||||||
|
endif()
|
||||||
|
|
||||||
set(DOWNLOAD_VORO ON CACHE BOOL "" FORCE)
|
set(DOWNLOAD_VORO ON CACHE BOOL "" FORCE)
|
||||||
set(DOWNLOAD_EIGEN3 ON CACHE BOOL "" FORCE)
|
set(DOWNLOAD_EIGEN3 ON CACHE BOOL "" FORCE)
|
||||||
set(LAMMPS_MEMALIGN "0" CACHE STRING "" FORCE)
|
set(LAMMPS_MEMALIGN "0" CACHE STRING "" FORCE)
|
||||||
set(INTEL_LRT_MODE "none" CACHE STRING "" FORCE)
|
set(CMAKE_TUNE_FLAGS "-Wno-missing-include-dirs" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-stdcall-fixup" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--enable-stdcall-fixup" CACHE STRING "" FORCE)
|
||||||
|
set(BUILD_TOOLS ON CACHE BOOL "" FORCE)
|
||||||
|
set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/lammps-installer")
|
||||||
|
|||||||
@ -2,14 +2,16 @@
|
|||||||
# external libraries. Compared to all_on.cmake some more unusual packages
|
# external libraries. Compared to all_on.cmake some more unusual packages
|
||||||
# are removed. The resulting binary should be able to run most inputs.
|
# are removed. The resulting binary should be able to run most inputs.
|
||||||
|
|
||||||
set(ALL_PACKAGES ASPHERE CLASS2 COLLOID CORESHELL DIPOLE
|
set(ALL_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL
|
||||||
GRANULAR KSPACE MANYBODY MC MISC MOLECULE OPT PERI
|
DIPOLE GRANULAR KSPACE MANYBODY MC MISC MOLECULE OPT PERI
|
||||||
PYTHON QEQ REPLICA RIGID SHOCK SRD VORONOI
|
POEMS PYTHON QEQ REPLICA RIGID SHOCK SNAP SPIN SRD VORONOI
|
||||||
USER-CGDNA USER-CGSDK USER-COLVARS USER-DIFFRACTION USER-DPD
|
USER-CGDNA USER-CGSDK USER-COLVARS USER-DIFFRACTION
|
||||||
USER-DRUDE USER-FEP USER-MEAMC USER-MESO
|
USER-DPD USER-DRUDE USER-FEP USER-MEAMC USER-MESODPD
|
||||||
USER-MISC USER-MOFFF USER-OMP USER-PLUMED USER-PHONON USER-REAXC
|
USER-MISC USER-MOFFF USER-OMP USER-PHONON USER-REACTION
|
||||||
USER-SPH USER-SMD USER-UEF USER-YAFF)
|
USER-REAXC USER-SPH USER-SMD USER-UEF USER-YAFF)
|
||||||
|
|
||||||
foreach(PKG ${ALL_PACKAGES})
|
foreach(PKG ${ALL_PACKAGES})
|
||||||
set(PKG_${PKG} ON CACHE BOOL "" FORCE)
|
set(PKG_${PKG} ON CACHE BOOL "" FORCE)
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
|
set(BUILD_TOOLS ON CACHE BOOL "" FORCE)
|
||||||
|
|||||||
4
doc/.gitignore
vendored
4
doc/.gitignore
vendored
@ -1,8 +1,12 @@
|
|||||||
/old
|
/old
|
||||||
/html
|
/html
|
||||||
|
/html-offline
|
||||||
/latex
|
/latex
|
||||||
|
/mathjax
|
||||||
/spelling
|
/spelling
|
||||||
/LAMMPS.epub
|
/LAMMPS.epub
|
||||||
/LAMMPS.mobi
|
/LAMMPS.mobi
|
||||||
/Manual.pdf
|
/Manual.pdf
|
||||||
/Developer.pdf
|
/Developer.pdf
|
||||||
|
/doctrees
|
||||||
|
/docenv
|
||||||
|
|||||||
130
doc/Makefile
130
doc/Makefile
@ -1,17 +1,18 @@
|
|||||||
# Makefile for LAMMPS documentation
|
# Makefile for LAMMPS documentation
|
||||||
|
|
||||||
SHELL = /bin/bash
|
SHELL = /bin/bash
|
||||||
SHA1 = $(shell echo ${USER}-${PWD} | python utils/sha1sum.py)
|
BUILDDIR = ${CURDIR}
|
||||||
BUILDDIR = /tmp/lammps-docs-$(SHA1)
|
RSTDIR = $(BUILDDIR)/src
|
||||||
RSTDIR = $(BUILDDIR)/rst
|
|
||||||
VENV = $(BUILDDIR)/docenv
|
VENV = $(BUILDDIR)/docenv
|
||||||
|
MATHJAX = $(BUILDDIR)/mathjax
|
||||||
TXT2RST = $(VENV)/bin/txt2rst
|
TXT2RST = $(VENV)/bin/txt2rst
|
||||||
ANCHORCHECK = $(VENV)/bin/doc_anchor_check
|
ANCHORCHECK = $(VENV)/bin/rst_anchor_check
|
||||||
|
|
||||||
PYTHON = $(shell which python3)
|
PYTHON = $(shell which python3)
|
||||||
VIRTUALENV = virtualenv
|
VIRTUALENV = virtualenv
|
||||||
HAS_PYTHON3 = NO
|
HAS_PYTHON3 = NO
|
||||||
HAS_VIRTUALENV = NO
|
HAS_VIRTUALENV = NO
|
||||||
|
HAS_PDFLATEX = NO
|
||||||
|
|
||||||
ifeq ($(shell which python3 >/dev/null 2>&1; echo $$?), 0)
|
ifeq ($(shell which python3 >/dev/null 2>&1; echo $$?), 0)
|
||||||
HAS_PYTHON3 = YES
|
HAS_PYTHON3 = YES
|
||||||
@ -27,11 +28,14 @@ VIRTUALENV = virtualenv
|
|||||||
HAS_VIRTUALENV = YES
|
HAS_VIRTUALENV = YES
|
||||||
endif
|
endif
|
||||||
|
|
||||||
SPHINXEXTRA = -j $(shell $(PYTHON) -c 'import multiprocessing;print(multiprocessing.cpu_count())')
|
ifeq ($(shell which pdflatex >/dev/null 2>&1; echo $$?), 0)
|
||||||
SOURCES=$(filter-out $(wildcard src/lammps_commands*.txt) src/lammps_support.txt src/lammps_tutorials.txt,$(wildcard src/*.txt))
|
HAS_PDFLATEX = YES
|
||||||
OBJECTS=$(SOURCES:src/%.txt=$(RSTDIR)/%.rst)
|
endif
|
||||||
|
|
||||||
.PHONY: help clean-all clean epub mobi html pdf old venv spelling anchor_check
|
|
||||||
|
SPHINXEXTRA = -j $(shell $(PYTHON) -c 'import multiprocessing;print(multiprocessing.cpu_count())')
|
||||||
|
|
||||||
|
.PHONY: help clean-all clean clean-spelling epub mobi rst html pdf spelling anchor_check style_check
|
||||||
|
|
||||||
# ------------------------------------------
|
# ------------------------------------------
|
||||||
|
|
||||||
@ -39,70 +43,68 @@ help:
|
|||||||
@echo "Please use \`make <target>' where <target> is one of"
|
@echo "Please use \`make <target>' where <target> is one of"
|
||||||
@echo " html create HTML doc pages in html dir"
|
@echo " html create HTML doc pages in html dir"
|
||||||
@echo " pdf create Developer.pdf and Manual.pdf in this dir"
|
@echo " pdf create Developer.pdf and Manual.pdf in this dir"
|
||||||
@echo " old create old-style HTML doc pages and Manual.pdf in old dir"
|
|
||||||
@echo " fetch fetch HTML and PDF files from LAMMPS web site"
|
@echo " fetch fetch HTML and PDF files from LAMMPS web site"
|
||||||
@echo " epub create ePUB format manual for e-book readers"
|
@echo " epub create ePUB format manual for e-book readers"
|
||||||
@echo " mobi convert ePUB to MOBI format manual for e-book readers (e.g. Kindle)"
|
@echo " mobi convert ePUB to MOBI format manual for e-book readers (e.g. Kindle)"
|
||||||
@echo " (requires ebook-convert tool from calibre)"
|
@echo " (requires ebook-convert tool from calibre)"
|
||||||
@echo " clean remove all intermediate RST files"
|
@echo " clean remove all intermediate RST files"
|
||||||
@echo " clean-all reset the entire build environment"
|
@echo " clean-all reset the entire build environment"
|
||||||
@echo " txt2html build txt2html tool"
|
|
||||||
@echo " anchor_check scan for duplicate anchor labels"
|
@echo " anchor_check scan for duplicate anchor labels"
|
||||||
|
@echo " style_check check for complete and consistent style lists"
|
||||||
|
@echo " package_check check for complete and consistent package lists"
|
||||||
@echo " spelling spell-check the manual"
|
@echo " spelling spell-check the manual"
|
||||||
|
|
||||||
# ------------------------------------------
|
# ------------------------------------------
|
||||||
|
|
||||||
clean-all: clean
|
clean-all: clean
|
||||||
rm -rf $(BUILDDIR)/* utils/txt2html/txt2html.exe
|
rm -rf $(BUILDDIR)/docenv $(BUILDDIR)/doctrees $(BUILDDIR)/mathjax
|
||||||
|
|
||||||
clean:
|
clean: clean-spelling
|
||||||
rm -rf $(RSTDIR) html old epub latex
|
rm -rf html epub latex
|
||||||
rm -rf spelling
|
|
||||||
|
|
||||||
clean-spelling:
|
clean-spelling:
|
||||||
rm -rf spelling
|
rm -rf spelling
|
||||||
|
|
||||||
html: $(OBJECTS) $(ANCHORCHECK)
|
html: $(ANCHORCHECK) $(MATHJAX)
|
||||||
@(\
|
@(\
|
||||||
. $(VENV)/bin/activate ;\
|
. $(VENV)/bin/activate ;\
|
||||||
cp -r src/* $(RSTDIR)/ ;\
|
|
||||||
sphinx-build $(SPHINXEXTRA) -b html -c utils/sphinx-config -d $(BUILDDIR)/doctrees $(RSTDIR) html ;\
|
sphinx-build $(SPHINXEXTRA) -b html -c utils/sphinx-config -d $(BUILDDIR)/doctrees $(RSTDIR) html ;\
|
||||||
echo "############################################" ;\
|
echo "############################################" ;\
|
||||||
doc_anchor_check src/*.txt ;\
|
rst_anchor_check src/*.rst ;\
|
||||||
|
python utils/check-packages.py -s ../src -d src ;\
|
||||||
|
env LC_ALL=C grep -n '[^ -~]' $(RSTDIR)/*.rst ;\
|
||||||
|
python utils/check-styles.py -s ../src -d src ;\
|
||||||
echo "############################################" ;\
|
echo "############################################" ;\
|
||||||
deactivate ;\
|
deactivate ;\
|
||||||
)
|
)
|
||||||
-rm html/searchindex.js
|
|
||||||
@rm -rf html/_sources
|
@rm -rf html/_sources
|
||||||
@rm -rf html/PDF
|
@rm -rf html/PDF
|
||||||
@rm -rf html/USER
|
@rm -rf html/USER
|
||||||
|
@rm -rf html/JPG
|
||||||
@cp -r src/PDF html/PDF
|
@cp -r src/PDF html/PDF
|
||||||
@cp -r src/USER html/USER
|
@mkdir -p html/JPG
|
||||||
|
@cp `grep -A2 '\.\. .*image::' src/*.rst | grep ':target:' | sed -e 's,.*:target: JPG/,src/JPG/,' | sort | uniq` html/JPG/
|
||||||
@rm -rf html/PDF/.[sg]*
|
@rm -rf html/PDF/.[sg]*
|
||||||
@rm -rf html/USER/.[sg]*
|
@mkdir -p html/_static/mathjax
|
||||||
@rm -rf html/USER/*/.[sg]*
|
@cp -r $(MATHJAX)/es5 html/_static/mathjax/
|
||||||
@rm -rf html/USER/*/*.[sg]*
|
|
||||||
@echo "Build finished. The HTML pages are in doc/html."
|
@echo "Build finished. The HTML pages are in doc/html."
|
||||||
|
|
||||||
spelling: $(OBJECTS) utils/sphinx-config/false_positives.txt
|
spelling: $(VENV) utils/sphinx-config/false_positives.txt
|
||||||
@(\
|
@(\
|
||||||
. $(VENV)/bin/activate ;\
|
. $(VENV)/bin/activate ;\
|
||||||
pip install sphinxcontrib-spelling ;\
|
cp utils/sphinx-config/false_positives.txt $(RSTDIR)/ ; env PYTHONWARNINGS= \
|
||||||
cp -r src/* $(RSTDIR)/ ;\
|
|
||||||
cp utils/sphinx-config/false_positives.txt $(RSTDIR)/ ;\
|
|
||||||
sphinx-build -b spelling -c utils/sphinx-config -d $(BUILDDIR)/doctrees $(RSTDIR) spelling ;\
|
sphinx-build -b spelling -c utils/sphinx-config -d $(BUILDDIR)/doctrees $(RSTDIR) spelling ;\
|
||||||
deactivate ;\
|
deactivate ;\
|
||||||
)
|
)
|
||||||
@echo "Spell check finished."
|
@echo "Spell check finished."
|
||||||
|
|
||||||
epub: $(OBJECTS)
|
epub: $(VENV)
|
||||||
@mkdir -p epub/JPG
|
@mkdir -p epub/JPG
|
||||||
@rm -f LAMMPS.epub
|
@rm -f LAMMPS.epub
|
||||||
@cp src/JPG/lammps-logo.png epub/
|
@cp src/JPG/lammps-logo.png epub/
|
||||||
@cp src/JPG/*.* epub/JPG
|
@cp src/JPG/*.* epub/JPG
|
||||||
@(\
|
@(\
|
||||||
. $(VENV)/bin/activate ;\
|
. $(VENV)/bin/activate ;\
|
||||||
cp -r src/* $(RSTDIR)/ ;\
|
|
||||||
sphinx-build $(SPHINXEXTRA) -b epub -c utils/sphinx-config -d $(BUILDDIR)/doctrees $(RSTDIR) epub ;\
|
sphinx-build $(SPHINXEXTRA) -b epub -c utils/sphinx-config -d $(BUILDDIR)/doctrees $(RSTDIR) epub ;\
|
||||||
deactivate ;\
|
deactivate ;\
|
||||||
)
|
)
|
||||||
@ -115,7 +117,8 @@ mobi: epub
|
|||||||
@ebook-convert LAMMPS.epub LAMMPS.mobi
|
@ebook-convert LAMMPS.epub LAMMPS.mobi
|
||||||
@echo "Conversion finished. The MOBI manual file is created."
|
@echo "Conversion finished. The MOBI manual file is created."
|
||||||
|
|
||||||
pdf: $(OBJECTS) $(ANCHORCHECK)
|
pdf: $(ANCHORCHECK)
|
||||||
|
@if [ "$(HAS_PDFLATEX)" == "NO" ] ; then echo "PDFLaTeX was not found! Please check README.md for further instructions" 1>&2; exit 1; fi
|
||||||
@(\
|
@(\
|
||||||
cd src/Developer; \
|
cd src/Developer; \
|
||||||
pdflatex developer; \
|
pdflatex developer; \
|
||||||
@ -125,10 +128,12 @@ pdf: $(OBJECTS) $(ANCHORCHECK)
|
|||||||
)
|
)
|
||||||
@(\
|
@(\
|
||||||
. $(VENV)/bin/activate ;\
|
. $(VENV)/bin/activate ;\
|
||||||
cp -r src/* $(RSTDIR)/ ;\
|
|
||||||
sphinx-build $(SPHINXEXTRA) -b latex -c utils/sphinx-config -d $(BUILDDIR)/doctrees $(RSTDIR) latex ;\
|
sphinx-build $(SPHINXEXTRA) -b latex -c utils/sphinx-config -d $(BUILDDIR)/doctrees $(RSTDIR) latex ;\
|
||||||
echo "############################################" ;\
|
echo "############################################" ;\
|
||||||
doc_anchor_check src/*.txt ;\
|
rst_anchor_check src/*.rst ;\
|
||||||
|
python utils/check-packages.py -s ../src -d src ;\
|
||||||
|
env LC_ALL=C grep -n '[^ -~]' $(RSTDIR)/*.rst ;\
|
||||||
|
python utils/check-styles.py -s ../src -d src ;\
|
||||||
echo "############################################" ;\
|
echo "############################################" ;\
|
||||||
deactivate ;\
|
deactivate ;\
|
||||||
)
|
)
|
||||||
@ -141,40 +146,16 @@ pdf: $(OBJECTS) $(ANCHORCHECK)
|
|||||||
mv tmp.tex LAMMPS.tex && \
|
mv tmp.tex LAMMPS.tex && \
|
||||||
make && \
|
make && \
|
||||||
make && \
|
make && \
|
||||||
|
make && \
|
||||||
mv LAMMPS.pdf ../Manual.pdf && \
|
mv LAMMPS.pdf ../Manual.pdf && \
|
||||||
cd ../;
|
cd ../;
|
||||||
@rm -rf latex/_sources
|
@rm -rf latex/_sources
|
||||||
@rm -rf latex/PDF
|
@rm -rf latex/PDF
|
||||||
@rm -rf latex/USER
|
@rm -rf latex/USER
|
||||||
@cp -r src/PDF latex/PDF
|
@cp -r src/PDF latex/PDF
|
||||||
@cp -r src/USER latex/USER
|
|
||||||
@rm -rf latex/PDF/.[sg]*
|
@rm -rf latex/PDF/.[sg]*
|
||||||
@rm -rf latex/USER/.[sg]*
|
|
||||||
@rm -rf latex/USER/*/.[sg]*
|
|
||||||
@rm -rf latex/USER/*/*.[sg]*
|
|
||||||
@echo "Build finished. Manual.pdf and Developer.pdf are in this directory."
|
@echo "Build finished. Manual.pdf and Developer.pdf are in this directory."
|
||||||
|
|
||||||
old: utils/txt2html/txt2html.exe
|
|
||||||
@rm -rf old
|
|
||||||
@mkdir old; mkdir old/Eqs; mkdir old/JPG; mkdir old/PDF
|
|
||||||
@cd src; ../utils/txt2html/txt2html.exe -b *.txt; \
|
|
||||||
mv *.html ../old; \
|
|
||||||
cp Eqs/*.jpg ../old/Eqs; \
|
|
||||||
cp JPG/* ../old/JPG; \
|
|
||||||
cp PDF/* ../old/PDF;
|
|
||||||
@( set -e;\
|
|
||||||
cd src/Developer; \
|
|
||||||
pdflatex developer; \
|
|
||||||
pdflatex developer; \
|
|
||||||
mv developer.pdf ../../old/Developer.pdf; \
|
|
||||||
cd ../../old; \
|
|
||||||
for s in `echo ../src/*.txt | sed -e 's,\.\./src/,,g' -e 's/ \(pairs\|bonds\|angles\|dihedrals\|impropers\|commands_list\|fixes\|computes\).txt/ /g' | sed -e 's,\.txt,\.html,g'` ; \
|
|
||||||
do grep -q ^$$s ../src/lammps.book || \
|
|
||||||
echo WARNING: doc file $$s missing in src/lammps.book; done; \
|
|
||||||
htmldoc --batch ../src/lammps.book; \
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
fetch:
|
fetch:
|
||||||
@rm -rf html_www Manual_www.pdf Developer_www.pdf
|
@rm -rf html_www Manual_www.pdf Developer_www.pdf
|
||||||
@curl -s -o Manual_www.pdf http://lammps.sandia.gov/doc/Manual.pdf
|
@curl -s -o Manual_www.pdf http://lammps.sandia.gov/doc/Manual.pdf
|
||||||
@ -183,38 +164,45 @@ fetch:
|
|||||||
@tar xzf lammps-doc.tar.gz
|
@tar xzf lammps-doc.tar.gz
|
||||||
@rm -f lammps-doc.tar.gz
|
@rm -f lammps-doc.tar.gz
|
||||||
|
|
||||||
txt2html: utils/txt2html/txt2html.exe
|
|
||||||
|
|
||||||
anchor_check : $(ANCHORCHECK)
|
anchor_check : $(ANCHORCHECK)
|
||||||
@(\
|
@(\
|
||||||
. $(VENV)/bin/activate ;\
|
. $(VENV)/bin/activate ;\
|
||||||
doc_anchor_check src/*.txt ;\
|
rst_anchor_check src/*.rst ;\
|
||||||
|
deactivate ;\
|
||||||
|
)
|
||||||
|
|
||||||
|
style_check : $(VENV)
|
||||||
|
@(\
|
||||||
|
. $(VENV)/bin/activate ;\
|
||||||
|
python utils/check-styles.py -s ../src -d src ;\
|
||||||
|
deactivate ;\
|
||||||
|
)
|
||||||
|
|
||||||
|
package_check : $(VENV)
|
||||||
|
@(\
|
||||||
|
. $(VENV)/bin/activate ;\
|
||||||
|
python utils/check-packages.py -s ../src -d src ;\
|
||||||
deactivate ;\
|
deactivate ;\
|
||||||
)
|
)
|
||||||
|
|
||||||
# ------------------------------------------
|
# ------------------------------------------
|
||||||
|
|
||||||
utils/txt2html/txt2html.exe: utils/txt2html/txt2html.cpp
|
|
||||||
g++ -O -Wall -o $@ $<
|
|
||||||
|
|
||||||
$(RSTDIR)/%.rst : src/%.txt $(TXT2RST)
|
|
||||||
@(\
|
|
||||||
mkdir -p $(RSTDIR) ; \
|
|
||||||
. $(VENV)/bin/activate ;\
|
|
||||||
txt2rst -v $< > $@ ;\
|
|
||||||
deactivate ;\
|
|
||||||
)
|
|
||||||
|
|
||||||
$(VENV):
|
$(VENV):
|
||||||
@if [ "$(HAS_PYTHON3)" == "NO" ] ; then echo "Python3 was not found! Please check README.md for further instructions" 1>&2; exit 1; fi
|
@if [ "$(HAS_PYTHON3)" == "NO" ] ; then echo "Python3 was not found! Please check README.md for further instructions" 1>&2; exit 1; fi
|
||||||
@if [ "$(HAS_VIRTUALENV)" == "NO" ] ; then echo "virtualenv was not found! Please check README.md for further instructions" 1>&2; exit 1; fi
|
@if [ "$(HAS_VIRTUALENV)" == "NO" ] ; then echo "virtualenv was not found! Please check README.md for further instructions" 1>&2; exit 1; fi
|
||||||
@( \
|
@( \
|
||||||
$(VIRTUALENV) -p $(PYTHON) $(VENV); \
|
$(VIRTUALENV) -p $(PYTHON) $(VENV); \
|
||||||
. $(VENV)/bin/activate; \
|
. $(VENV)/bin/activate; \
|
||||||
pip install Sphinx; \
|
pip install --upgrade pip; \
|
||||||
|
pip install Sphinx==2.4.4; \
|
||||||
|
pip install sphinxcontrib-spelling ;\
|
||||||
|
pip install breathe; \
|
||||||
deactivate;\
|
deactivate;\
|
||||||
)
|
)
|
||||||
|
|
||||||
|
$(MATHJAX):
|
||||||
|
@git clone --depth 1 https://github.com/mathjax/MathJax.git mathjax
|
||||||
|
|
||||||
$(TXT2RST) $(ANCHORCHECK): $(VENV)
|
$(TXT2RST) $(ANCHORCHECK): $(VENV)
|
||||||
@( \
|
@( \
|
||||||
. $(VENV)/bin/activate; \
|
. $(VENV)/bin/activate; \
|
||||||
|
|||||||
47
doc/README
47
doc/README
@ -5,7 +5,7 @@ sub-directories and optionally 2 PDF files and an ePUB file:
|
|||||||
|
|
||||||
src content files for LAMMPS documentation
|
src content files for LAMMPS documentation
|
||||||
html HTML version of the LAMMPS manual (see html/Manual.html)
|
html HTML version of the LAMMPS manual (see html/Manual.html)
|
||||||
tools tools and settings for building the documentation
|
utils utilities and settings for building the documentation
|
||||||
Manual.pdf large PDF version of entire manual
|
Manual.pdf large PDF version of entire manual
|
||||||
Developer.pdf small PDF with info about how LAMMPS is structured
|
Developer.pdf small PDF with info about how LAMMPS is structured
|
||||||
LAMMPS.epub Manual in ePUB format
|
LAMMPS.epub Manual in ePUB format
|
||||||
@ -25,17 +25,12 @@ the fetched documentation will include those changes (but your source
|
|||||||
code will not, unless you update your local repository).
|
code will not, unless you update your local repository).
|
||||||
|
|
||||||
(b) You can build the HTML and PDF files yourself, by typing "make
|
(b) You can build the HTML and PDF files yourself, by typing "make
|
||||||
html" followed by "make pdf". Note that the PDF make requires the
|
html" or by "make pdf", respectively. This requires various tools
|
||||||
HTML files already exist. This requires various tools including
|
including the Python documentation processing tool Sphinx, which the
|
||||||
Sphinx, which the build process will attempt to download and install
|
build process will attempt to download and install on your system into
|
||||||
on your system, if not already available. See more details below.
|
a python virtual environment, if not already available. The PDF file
|
||||||
|
will require a working LaTeX installation with several add-on packages
|
||||||
(c) You can genererate an older, simpler, less-fancy style of HTML
|
in addition to the Python/Sphinx setup. See more details below.
|
||||||
documentation by typing "make old". This will create an "old"
|
|
||||||
directory. This can be useful if (b) does not work on your box for
|
|
||||||
some reason, or you want to quickly view the HTML version of a doc
|
|
||||||
page you have created or edited yourself within the src directory.
|
|
||||||
E.g. if you are planning to submit a new feature to LAMMPS.
|
|
||||||
|
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
@ -46,8 +41,7 @@ Options:
|
|||||||
|
|
||||||
make html # generate HTML in html dir using Sphinx
|
make html # generate HTML in html dir using Sphinx
|
||||||
make pdf # generate 2 PDF files (Manual.pdf,Developer.pdf)
|
make pdf # generate 2 PDF files (Manual.pdf,Developer.pdf)
|
||||||
# in this dir via htmldoc and pdflatex
|
# in this dir via Sphinx and PDFLaTeX
|
||||||
make old # generate old-style HTML pages in old dir via txt2html
|
|
||||||
make fetch # fetch HTML doc pages and 2 PDF files from web site
|
make fetch # fetch HTML doc pages and 2 PDF files from web site
|
||||||
# as a tarball and unpack into html dir and 2 PDFs
|
# as a tarball and unpack into html dir and 2 PDFs
|
||||||
make epub # generate LAMMPS.epub in ePUB format using Sphinx
|
make epub # generate LAMMPS.epub in ePUB format using Sphinx
|
||||||
@ -94,8 +88,23 @@ This will install virtualenv from the Python Package Index.
|
|||||||
|
|
||||||
Installing prerequisites for PDF build
|
Installing prerequisites for PDF build
|
||||||
|
|
||||||
[TBA]
|
Same as for HTML plus a compatible LaTeX installation with
|
||||||
|
support for PDFLaTeX. Also the following LaTeX packages need
|
||||||
|
to be installed (e.g. from texlive):
|
||||||
|
- amsmath
|
||||||
|
- babel
|
||||||
|
- capt-of
|
||||||
|
- cmap
|
||||||
|
- fncychap
|
||||||
|
- framed
|
||||||
|
- geometry
|
||||||
|
- hyperref
|
||||||
|
- hypcap
|
||||||
|
- needspace
|
||||||
|
- times
|
||||||
|
- tabulary
|
||||||
|
- upquote
|
||||||
|
- wrapfig
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
Installing prerequisites for epub build
|
Installing prerequisites for epub build
|
||||||
@ -103,7 +112,11 @@ Installing prerequisites for epub build
|
|||||||
## ePUB
|
## ePUB
|
||||||
|
|
||||||
Same as for HTML. This uses the same tools and configuration
|
Same as for HTML. This uses the same tools and configuration
|
||||||
files as the HTML tree.
|
files as the HTML tree. The ePUB format conversion currently
|
||||||
|
does not support processing mathematical expressions via MathJAX,
|
||||||
|
so there will be limitations on some pages. For the time being
|
||||||
|
until this is resolved, building and using the PDF format file
|
||||||
|
is recommended instead.
|
||||||
|
|
||||||
For converting the generated ePUB file to a mobi format file
|
For converting the generated ePUB file to a mobi format file
|
||||||
(for e-book readers like Kindle, that cannot read ePUB), you
|
(for e-book readers like Kindle, that cannot read ePUB), you
|
||||||
|
|||||||
@ -104,14 +104,17 @@ Here are some items to check:
|
|||||||
* every new command or style should have documentation. The names of
|
* every new command or style should have documentation. The names of
|
||||||
source files (c++ and manual) should follow the name of the style.
|
source files (c++ and manual) should follow the name of the style.
|
||||||
(example: `src/fix_nve.cpp`, `src/fix_nve.h` for `fix nve` command,
|
(example: `src/fix_nve.cpp`, `src/fix_nve.h` for `fix nve` command,
|
||||||
implementing the class `FixNVE`, documented in `doc/src/fix_nve.txt`)
|
implementing the class `FixNVE`, documented in `doc/src/fix_nve.rst`)
|
||||||
* all new style names should be lower case, the must be no dashes,
|
* all new style names should be lower case, the must be no dashes,
|
||||||
blanks, or underscores separating words, only forward slashes.
|
blanks, or underscores separating words, only forward slashes.
|
||||||
* new style docs should be added to the "overview" files in
|
* new style docs should be added to the "overview" files in
|
||||||
`doc/src/Commands_*.txt`, `doc/src/{fixes,computes,pairs,bonds,...}.txt`
|
`doc/src/Commands_*.rst`, `doc/src/{fixes,computes,pairs,bonds,...}.rst`
|
||||||
and `doc/src/lammps.book`
|
|
||||||
* check whether manual cleanly translates with `make html` and `make pdf`
|
* check whether manual cleanly translates with `make html` and `make pdf`
|
||||||
|
* if documentation is (still) provided as a .txt file, convert to .rst
|
||||||
|
and remove the .txt file. For files in doc/txt the conversion is automatic.
|
||||||
|
* remove all .txt files in `doc/txt` that are out of sync with their .rst counterparts in `doc/src`
|
||||||
* check spelling of manual with `make spelling` in doc folder
|
* check spelling of manual with `make spelling` in doc folder
|
||||||
|
* check style tables and command lists with `make style_check`
|
||||||
* new source files in packages should be added to `src/.gitignore`
|
* new source files in packages should be added to `src/.gitignore`
|
||||||
* removed or renamed files in packages should be added to `src/Purge.list`
|
* removed or renamed files in packages should be added to `src/Purge.list`
|
||||||
* C++ source files should use C++ style include files for accessing
|
* C++ source files should use C++ style include files for accessing
|
||||||
@ -136,7 +139,7 @@ Here are some items to check:
|
|||||||
* Code should follow the C++-98 standard. C++-11 is only accepted
|
* Code should follow the C++-98 standard. C++-11 is only accepted
|
||||||
in individual special purpose packages
|
in individual special purpose packages
|
||||||
* indentation is 2 spaces per level
|
* indentation is 2 spaces per level
|
||||||
* there should be NO tabs and no trailing whitespace
|
* there should be NO tabs and no trailing whitespace (review the "checkstyle" test on pull requests)
|
||||||
* header files, especially of new styles, should not include any
|
* header files, especially of new styles, should not include any
|
||||||
other headers, except the header with the base class or cstdio.
|
other headers, except the header with the base class or cstdio.
|
||||||
Forward declarations should be used instead when possible.
|
Forward declarations should be used instead when possible.
|
||||||
|
|||||||
133
doc/include-file-conventions.md
Normal file
133
doc/include-file-conventions.md
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
# Outline of include file conventions in LAMMPS
|
||||||
|
|
||||||
|
This purpose of this document is to provide a point of reference
|
||||||
|
for LAMMPS developers and contributors as to what include files
|
||||||
|
and definitions to put where into LAMMPS source.
|
||||||
|
Last change 2019-07-05
|
||||||
|
|
||||||
|
## Table of Contents
|
||||||
|
|
||||||
|
* [Motivation](#motivation)
|
||||||
|
* [Rules](#rules)
|
||||||
|
* [Tools](#tools)
|
||||||
|
* [Legacy Code](#legacy-code)
|
||||||
|
|
||||||
|
## Motivation
|
||||||
|
|
||||||
|
The conventions outlined in this document are supposed to help make
|
||||||
|
maintenance of the LAMMPS software easier. By trying to achieve
|
||||||
|
consistency across files contributed by different developers, it will
|
||||||
|
become easier for the code maintainers to modify and adjust files and,
|
||||||
|
overall, the chance for errors or portability issues will be reduced.
|
||||||
|
The rules employed are supposed to minimize naming conflicts and
|
||||||
|
simplify dependencies between files and thus speed up compilation. They
|
||||||
|
may, as well, make otherwise hidden dependencies visible.
|
||||||
|
|
||||||
|
## Rules
|
||||||
|
|
||||||
|
Below are the various rules that are applied. Not all are enforced
|
||||||
|
strictly and automatically. If there are no significant side effects,
|
||||||
|
exceptions may be possible for cases where a full compliance to the
|
||||||
|
rules may require a large effort compared to the benefit.
|
||||||
|
|
||||||
|
### Core Files Versus Package Files
|
||||||
|
|
||||||
|
All rules listed below are most strictly observed for core LAMMPS files,
|
||||||
|
which are the files that are not part of a package, and the files of the
|
||||||
|
packages MOLECULE, MANYBODY, KSPACE, and RIGID. On the other end of
|
||||||
|
the spectrum are USER packages and legacy packages that predate these
|
||||||
|
rules and thus may not be fully compliant. Also, new contributions
|
||||||
|
will be checked more closely, while existing code will be incrementally
|
||||||
|
adapted to the rules as time and required effort permits.
|
||||||
|
|
||||||
|
### System Versus Local Header Files
|
||||||
|
|
||||||
|
All system- or library-provided include files are included with angular
|
||||||
|
brackets (examples: `#include <cstring>` or `#include <mpi.h>`) while
|
||||||
|
include files provided with LAMMPS are included with double quotes
|
||||||
|
(examples: `#include "pointers.h"` or `#include "compute_temp.h"`).
|
||||||
|
|
||||||
|
For headers declaring functions of the C-library, the corresponding
|
||||||
|
C++ versions should be included (examples: `#include <cstdlib>` or
|
||||||
|
`#include <cctypes>`). However, these includes are limited to those defined
|
||||||
|
in the C++98 standard. Some files thus must use the older style until
|
||||||
|
the minimum C++ standard requirement of LAMMPS is lifted to C++11 or
|
||||||
|
even beyond (examples: `#include <stdint.h>` versus `#include <cstdint>`
|
||||||
|
or `#include <inttypes.h>` versus `#include <cinttypes>`).
|
||||||
|
|
||||||
|
### C++ Standard Compliance
|
||||||
|
|
||||||
|
LAMMPS core files currently correspond to the C++98 standard. Files
|
||||||
|
requiring C++11 or later are only permitted in (optional) packages
|
||||||
|
and particularly packages that are not part of the list of commonly
|
||||||
|
used packages such as MOLECULE, KSPACE, MANYBODY, or RIGID.
|
||||||
|
|
||||||
|
Also, LAMMPS uses the C-style stdio library for I/O instead of iostreams.
|
||||||
|
Since using both at the same time can cause problems, iostreams should
|
||||||
|
be avoided where possible.
|
||||||
|
|
||||||
|
### Lean Header Files
|
||||||
|
|
||||||
|
Header files will typically contain the definition of a (single) class.
|
||||||
|
These header files should have as few include statements as possible.
|
||||||
|
This is particularly important for classes that implement a "style" and
|
||||||
|
thus use a macro of the kind `SomeStyle(some/name,SomeName)`. These will
|
||||||
|
all be included in the auto-generated `"some_style.h"` files which
|
||||||
|
results in a high potential for direct or indirect symbol name clashes.
|
||||||
|
|
||||||
|
In the ideal case, the header would only include one file defining the
|
||||||
|
parent class. That would typically be either `#include "pointers.h"` for
|
||||||
|
the `Pointers` class, or a header of a class derived from it like
|
||||||
|
`#include "pair.h"` for the `Pair` class and so on. References to other
|
||||||
|
classes inside the class should be make through pointers, for which forward
|
||||||
|
declarations (inside the `LAMMPS_NS` or the new class' namespace) can
|
||||||
|
be employed. The full definition will then be included into the corresponding
|
||||||
|
implementation file. In the given example from above, the header file
|
||||||
|
would be called `some_name.h` and the implementation `some_name.cpp` (all
|
||||||
|
lower case with underscores, while the class itself would be in camel case
|
||||||
|
and no underscores `SomeName`, and the style name with lower case names separated by
|
||||||
|
a forward slash).
|
||||||
|
|
||||||
|
### Implementation Files
|
||||||
|
|
||||||
|
In the implementation files (typically, those would have the same base name
|
||||||
|
as the corresponding header with a .cpp extension instead of .h) include
|
||||||
|
statements should follow the "include what you use" principle.
|
||||||
|
|
||||||
|
### Order of Include Statements
|
||||||
|
|
||||||
|
Include files should be included in this order:
|
||||||
|
* the header matching the implementation (`some_class.h` for file `some_class.cpp`)
|
||||||
|
* mpi.h
|
||||||
|
* system and library headers (anything that is using angular brackets; C-library headers first, then C++)
|
||||||
|
* LAMMPS local headers (preferably in alphabetical order)
|
||||||
|
|
||||||
|
### Special Cases and Exceptions
|
||||||
|
|
||||||
|
#### pointers.h
|
||||||
|
|
||||||
|
The `pointer.h` header file also includes `cstdio` and `lmptype.h`
|
||||||
|
(and through it `stdint.h`, `intttypes.h`, cstdlib, and `climits`).
|
||||||
|
This means any header including `pointers.h` can assume that `FILE`,
|
||||||
|
`NULL`, `INT_MAX` are defined.
|
||||||
|
|
||||||
|
## Tools
|
||||||
|
|
||||||
|
The [Include What You Use tool](https://include-what-you-use.org/)
|
||||||
|
can be used to provide supporting information about compliance with
|
||||||
|
the rules listed here. There are some limitations and the IWYU tool
|
||||||
|
may give incorrect advice. The tools is activated by setting the
|
||||||
|
CMake variable `CMAKE_CXX_INCLUDE_WHAT_YOU_USE` variable to the
|
||||||
|
path of the `include-what-you-use` command. When activated, the
|
||||||
|
tool will be run after each compilation and provide suggestions for
|
||||||
|
which include files should be added or removed.
|
||||||
|
|
||||||
|
## Legacy Code
|
||||||
|
|
||||||
|
A lot of code predates the application of the rules in this document
|
||||||
|
and the rules themselves are a moving target. So there are going to be
|
||||||
|
significant chunks of code that do not fully comply. This applies
|
||||||
|
for example to the USER-REAXC, or the USER-ATC package. The LAMMPS
|
||||||
|
developers are dedicated to make an effort to improve the compliance
|
||||||
|
and welcome volunteers wanting to help with the process.
|
||||||
|
|
||||||
11
doc/lammps.1
11
doc/lammps.1
@ -1,4 +1,4 @@
|
|||||||
.TH LAMMPS "15 May 2019" "2019-05-15"
|
.TH LAMMPS "19 March 2020" "2020-03-19"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
.B LAMMPS
|
.B LAMMPS
|
||||||
\- Molecular Dynamics Simulator.
|
\- Molecular Dynamics Simulator.
|
||||||
@ -11,13 +11,18 @@ or
|
|||||||
|
|
||||||
mpirun \-np 2
|
mpirun \-np 2
|
||||||
.B lmp
|
.B lmp
|
||||||
<input file> [OPTIONS] ...
|
\-in <input file> [OPTIONS] ...
|
||||||
|
|
||||||
or
|
or
|
||||||
|
|
||||||
.B lmp
|
.B lmp
|
||||||
\-r2data file.restart file.data
|
\-r2data file.restart file.data
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
.B lmp
|
||||||
|
\-h
|
||||||
|
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
.B LAMMPS
|
.B LAMMPS
|
||||||
is a classical molecular dynamics code, and an acronym for \fBL\fRarge-scale
|
is a classical molecular dynamics code, and an acronym for \fBL\fRarge-scale
|
||||||
@ -249,7 +254,7 @@ the chapter on errors in the
|
|||||||
manual gives some additional information about error messages, if possible.
|
manual gives some additional information about error messages, if possible.
|
||||||
|
|
||||||
.SH COPYRIGHT
|
.SH COPYRIGHT
|
||||||
© 2003--2019 Sandia Corporation
|
© 2003--2020 Sandia Corporation
|
||||||
|
|
||||||
This package is free software; you can redistribute it and/or modify
|
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
|
it under the terms of the GNU General Public License version 2 as
|
||||||
|
|||||||
@ -31,7 +31,7 @@ of benzene, you have to provide the files 'benzene.car' and 'benzene.mdf'
|
|||||||
in the current working directory.
|
in the current working directory.
|
||||||
.B msi2lmp
|
.B msi2lmp
|
||||||
will then read and process those files according to its remaining settings.
|
will then read and process those files according to its remaining settings.
|
||||||
All other settins are optional and have defaults as listed.
|
All other settings are optional and have defaults as listed.
|
||||||
.TP
|
.TP
|
||||||
\fB\-c <I,1,II,2,O,0>\fR, \fB\-class <I,1,II,2,O,0>\fR
|
\fB\-c <I,1,II,2,O,0>\fR, \fB\-class <I,1,II,2,O,0>\fR
|
||||||
The \-c or \-class option selects the force field class, i.e which pair
|
The \-c or \-class option selects the force field class, i.e which pair
|
||||||
|
|||||||
3
doc/src/.gitignore
vendored
Normal file
3
doc/src/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
/Eqs
|
||||||
|
/JPG
|
||||||
|
/false_positives.txt
|
||||||
@ -10,7 +10,7 @@ LAMMPS</H2>
|
|||||||
LAMMPS = Large-scale Atomic/Molecular Massively Parallel Simulator</P>
|
LAMMPS = Large-scale Atomic/Molecular Massively Parallel Simulator</P>
|
||||||
<P>
|
<P>
|
||||||
This is the documentation for the LAMMPS 2001 version, written in F90,
|
This is the documentation for the LAMMPS 2001 version, written in F90,
|
||||||
which has been superceded by more current versions. See the <A
|
which has been superseded by more current versions. See the <A
|
||||||
HREF="http://www.cs.sandia.gov/~sjplimp/lammps.html">LAMMPS WWW
|
HREF="http://www.cs.sandia.gov/~sjplimp/lammps.html">LAMMPS WWW
|
||||||
Site</A> for more information.
|
Site</A> for more information.
|
||||||
<P>
|
<P>
|
||||||
|
|||||||
@ -47,7 +47,7 @@ directories: </P>
|
|||||||
<P>
|
<P>
|
||||||
The src directory contains the F90 and C source files for LAMMPS as
|
The src directory contains the F90 and C source files for LAMMPS as
|
||||||
well as several sample Makefiles for different machines. To make LAMMPS
|
well as several sample Makefiles for different machines. To make LAMMPS
|
||||||
for a specfic machine, you simply type</P>
|
for a specific machine, you simply type</P>
|
||||||
<P>
|
<P>
|
||||||
make machine</P>
|
make machine</P>
|
||||||
<P>
|
<P>
|
||||||
|
|||||||
@ -1079,7 +1079,7 @@ for style aveforce, average force on the group of fixed atoms is computed,
|
|||||||
to new total value -> has effect of applying same force to entire group
|
to new total value -> has effect of applying same force to entire group
|
||||||
of atoms
|
of atoms
|
||||||
thermostatting constraints (rescale, hoover/drag, langevin) cannot be used in
|
thermostatting constraints (rescale, hoover/drag, langevin) cannot be used in
|
||||||
conjuction with global "temp control", since they conflict and will
|
conjunction with global "temp control", since they conflict and will
|
||||||
cause atom velocities to be reset twice
|
cause atom velocities to be reset twice
|
||||||
thermostatting constraints (rescale, hoover/drag, langevin) cannot be used
|
thermostatting constraints (rescale, hoover/drag, langevin) cannot be used
|
||||||
when performing a minimization
|
when performing a minimization
|
||||||
@ -1089,7 +1089,7 @@ meaning of rescale and Langevin thermostatting coefficients is same as in
|
|||||||
"temp control" command
|
"temp control" command
|
||||||
for rescale style, it can be used as a coarse temperature rescaler,
|
for rescale style, it can be used as a coarse temperature rescaler,
|
||||||
for example "rescale 200.0 300.0 100 10.0 1.0" will ramp the temperature
|
for example "rescale 200.0 300.0 100 10.0 1.0" will ramp the temperature
|
||||||
up during the simulation, resetting it to the target temperatue as needed
|
up during the simulation, resetting it to the target temperature as needed
|
||||||
for rescale style, it can be used to create an instantaneous
|
for rescale style, it can be used to create an instantaneous
|
||||||
drag force that slowly rescales the temperature without oscillation,
|
drag force that slowly rescales the temperature without oscillation,
|
||||||
for example "rescale 300.0 300.0 1 0.0 0.0001" will force (or keep)
|
for example "rescale 300.0 300.0 1 0.0 0.0001" will force (or keep)
|
||||||
@ -1952,7 +1952,7 @@ for rescale style, the amount of rescaling is contfolled by the fractional
|
|||||||
to halfway between the current and target temperature
|
to halfway between the current and target temperature
|
||||||
for rescale style, it can be used as a coarse temperature rescaler,
|
for rescale style, it can be used as a coarse temperature rescaler,
|
||||||
for example "rescale 200.0 300.0 100 10.0 1.0" will ramp the temperature
|
for example "rescale 200.0 300.0 100 10.0 1.0" will ramp the temperature
|
||||||
up during the simulation, resetting it to the target temperatue as needed
|
up during the simulation, resetting it to the target temperature as needed
|
||||||
for rescale style, it can be used to create an instantaneous
|
for rescale style, it can be used to create an instantaneous
|
||||||
drag force that slowly rescales the temperature without oscillation,
|
drag force that slowly rescales the temperature without oscillation,
|
||||||
for example "rescale 300.0 300.0 1 0.0 0.0001" will force (or keep)
|
for example "rescale 300.0 300.0 1 0.0 0.0001" will force (or keep)
|
||||||
|
|||||||
@ -10,7 +10,7 @@ LAMMPS</H2>
|
|||||||
LAMMPS = Large-scale Atomic/Molecular Massively Parallel Simulator</P>
|
LAMMPS = Large-scale Atomic/Molecular Massively Parallel Simulator</P>
|
||||||
<P>
|
<P>
|
||||||
This is the documentation for the LAMMPS 99 version, written in F77,
|
This is the documentation for the LAMMPS 99 version, written in F77,
|
||||||
which has been superceded by more current versions. See the <A
|
which has been superseded by more current versions. See the <A
|
||||||
HREF="http://www.cs.sandia.gov/~sjplimp/lammps.html">LAMMPS WWW
|
HREF="http://www.cs.sandia.gov/~sjplimp/lammps.html">LAMMPS WWW
|
||||||
Site</A> for more information.
|
Site</A> for more information.
|
||||||
<P>
|
<P>
|
||||||
|
|||||||
@ -45,7 +45,7 @@ directories: </P>
|
|||||||
<P>
|
<P>
|
||||||
The src directory contains the F77 and C source files for LAMMPS as
|
The src directory contains the F77 and C source files for LAMMPS as
|
||||||
well as several sample Makefiles for different machines. To make LAMMPS
|
well as several sample Makefiles for different machines. To make LAMMPS
|
||||||
for a specfic machine, you simply type</P>
|
for a specific machine, you simply type</P>
|
||||||
<P>
|
<P>
|
||||||
make machine</P>
|
make machine</P>
|
||||||
<P>
|
<P>
|
||||||
|
|||||||
@ -430,7 +430,7 @@ accuracy criterion effectively determines how many k-space vectors are used
|
|||||||
for PPPM, accuracy criterion determines mesh spacing (see "particle mesh"
|
for PPPM, accuracy criterion determines mesh spacing (see "particle mesh"
|
||||||
command)
|
command)
|
||||||
for PPPM, must be running on power-of-2 number of processors for FFTs
|
for PPPM, must be running on power-of-2 number of processors for FFTs
|
||||||
must use periodic boundary conditions in conjuction with Ewald and PPPM
|
must use periodic boundary conditions in conjunction with Ewald and PPPM
|
||||||
cannot use any styles other than none with nonbond style = lj/shift or
|
cannot use any styles other than none with nonbond style = lj/shift or
|
||||||
nonbond style = soft
|
nonbond style = soft
|
||||||
Coulomb style = smooth should be used with nonbond style = lj/switch,
|
Coulomb style = smooth should be used with nonbond style = lj/switch,
|
||||||
@ -772,7 +772,7 @@ for style aveforce, average force on the group of fixed atoms is computed,
|
|||||||
to new total value -> has effect of applying same force to entire group
|
to new total value -> has effect of applying same force to entire group
|
||||||
of atoms
|
of atoms
|
||||||
thermostatting constraints (rescale, langevin, nose/hoover) cannot be used in
|
thermostatting constraints (rescale, langevin, nose/hoover) cannot be used in
|
||||||
conjuction with global "temp control", since they conflict and will
|
conjunction with global "temp control", since they conflict and will
|
||||||
cause atom velocities to be reset twice
|
cause atom velocities to be reset twice
|
||||||
if multiple Langevin constraints are specified the Marsaglia RNG will
|
if multiple Langevin constraints are specified the Marsaglia RNG will
|
||||||
only use the last RNG seed specified for initialization
|
only use the last RNG seed specified for initialization
|
||||||
|
|||||||
22
doc/src/Build.rst
Normal file
22
doc/src/Build.rst
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
Build LAMMPS
|
||||||
|
************
|
||||||
|
|
||||||
|
LAMMPS can be built as an executable or library from source code via
|
||||||
|
either traditional makefiles (which may require manual editing)
|
||||||
|
for use with GNU make or gmake, or a build environment generated by CMake
|
||||||
|
(Unix Makefiles, Xcode, Visual Studio, KDevelop or more). As an
|
||||||
|
alternative you can download a package with pre-built executables
|
||||||
|
as described on the :doc:`Install <Install>` doc page.
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
Build_cmake
|
||||||
|
Build_make
|
||||||
|
Build_link
|
||||||
|
Build_basics
|
||||||
|
Build_settings
|
||||||
|
Build_package
|
||||||
|
Build_extras
|
||||||
|
Build_windows
|
||||||
|
Build_development
|
||||||
@ -1,49 +0,0 @@
|
|||||||
"Previous Section"_Install.html - "LAMMPS WWW Site"_lws - "LAMMPS
|
|
||||||
Documentation"_ld - "LAMMPS Commands"_lc - "Next Section"_Run_head.html :c
|
|
||||||
|
|
||||||
:link(lws,http://lammps.sandia.gov)
|
|
||||||
:link(ld,Manual.html)
|
|
||||||
:link(lc,Commands_all.html)
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
Build LAMMPS :h2
|
|
||||||
|
|
||||||
LAMMPS can be built as an executable or library from source code via
|
|
||||||
either traditional makefiles (which may require manual editing)
|
|
||||||
for use with GNU make or gmake, or a build environment generated by CMake
|
|
||||||
(Unix Makefiles, Xcode, Visual Studio, KDevelop or more). As an
|
|
||||||
alternative you can download a package with pre-built executables
|
|
||||||
as described on the "Install"_Install.html doc page.
|
|
||||||
|
|
||||||
<!-- RST
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 1
|
|
||||||
|
|
||||||
Build_cmake
|
|
||||||
Build_make
|
|
||||||
Build_link
|
|
||||||
Build_basics
|
|
||||||
Build_settings
|
|
||||||
Build_package
|
|
||||||
Build_extras
|
|
||||||
Build_windows
|
|
||||||
|
|
||||||
END_RST -->
|
|
||||||
|
|
||||||
<!-- HTML_ONLY -->
|
|
||||||
|
|
||||||
"Build LAMMPS with CMake"_Build_cmake.html
|
|
||||||
"Build LAMMPS with make"_Build_make.html
|
|
||||||
"Link LAMMPS as a library to another code"_Build_link.html
|
|
||||||
"Basic build options"_Build_basics.html
|
|
||||||
"Optional build settings"_Build_settings.html
|
|
||||||
"Include packages in build"_Build_package.html
|
|
||||||
"Packages with extra build options"_Build_extras.html
|
|
||||||
"Notes for building LAMMPS on Windows"_Build_windows.html :all(b)
|
|
||||||
|
|
||||||
If you have problems building LAMMPS, it is often due to software
|
|
||||||
issues on your local machine. If you can, find a local expert to
|
|
||||||
help. If you're still stuck, send an email to the "LAMMPS mail
|
|
||||||
list"_http://lammps.sandia.gov/mail.html.
|
|
||||||
491
doc/src/Build_basics.rst
Normal file
491
doc/src/Build_basics.rst
Normal file
@ -0,0 +1,491 @@
|
|||||||
|
Basic build options
|
||||||
|
===================
|
||||||
|
|
||||||
|
The following topics are covered on this page, for building both with
|
||||||
|
CMake and make:
|
||||||
|
|
||||||
|
* :ref:`Serial vs parallel build <serial>`
|
||||||
|
* :ref:`Choice of compiler and compile/link options <compile>`
|
||||||
|
* :ref:`Build LAMMPS as an executable or a library <exe>`
|
||||||
|
* :ref:`Build the LAMMPS documentation <doc>`
|
||||||
|
* :ref:`Install LAMMPS after a build <install>`
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. _serial:
|
||||||
|
|
||||||
|
Serial vs parallel build
|
||||||
|
-------------------------------------
|
||||||
|
|
||||||
|
LAMMPS is written to use the ubiquitous `MPI (Message Passing Interface)
|
||||||
|
<https://en.wikipedia.org/wiki/Message_Passing_Interface>`_ library API
|
||||||
|
for distributed memory parallel computation. You need to have such a
|
||||||
|
library installed for building and running LAMMPS in parallel using a
|
||||||
|
domain decomposition parallelization. It is compatible with the MPI
|
||||||
|
standard version 2.x and later. LAMMPS can also be built into a
|
||||||
|
"serial" executable for use with a single processor using the bundled
|
||||||
|
MPI STUBS library.
|
||||||
|
|
||||||
|
Independent of the distributed memory MPI parallelization, parts of
|
||||||
|
LAMMPS are also written with support for shared memory parallelization
|
||||||
|
using the OpenMP threading standard. A more detailed discussion of that
|
||||||
|
is below.
|
||||||
|
|
||||||
|
**CMake build**\ :
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
-D BUILD_MPI=value # yes or no, default is yes if CMake finds MPI, else no
|
||||||
|
-D BUILD_OMP=value # yes or no, default is yes if a compatible compiler is detected
|
||||||
|
-D LAMMPS_MACHINE=name # name = mpi, serial, mybox, titan, laptop, etc
|
||||||
|
# no default value
|
||||||
|
|
||||||
|
The executable created by CMake (after running make) is named ``lmp`` unless
|
||||||
|
the LAMMPS_MACHINE option is set. When setting ``LAMMPS_MACHINE=name``
|
||||||
|
the executable will be called ``lmp_name``. Using ``BUILD_MPI=no`` will
|
||||||
|
enforce building a serial executable using the MPI STUBS library.
|
||||||
|
|
||||||
|
**Traditional make**\ :
|
||||||
|
|
||||||
|
The build with traditional makefiles has to be done inside the source folder ``src``.
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
make mpi # parallel build, produces lmp_mpi using Makefile.mpi
|
||||||
|
make serial # serial build, produces lmp_serial using Makefile/serial
|
||||||
|
make mybox # uses Makefile.mybox to produce lmp_mybox
|
||||||
|
|
||||||
|
Any "make machine" command will look up the make settings from a file
|
||||||
|
Makefile.machine, create a folder Obj_machine with all objects and
|
||||||
|
generated files and an executable called ``lmp_machine``\ . The standard
|
||||||
|
parallel build with ``make mpi`` assumes a standard MPI installation with
|
||||||
|
MPI compiler wrappers where all necessary compiler and linker flags to
|
||||||
|
get access and link with the suitable MPI headers and libraries are set
|
||||||
|
by the wrapper programs. For other cases or the serial build, you have
|
||||||
|
to adjust the make file variables ``MPI_INC``, ``MPI_PATH``, ``MPI_LIB``
|
||||||
|
as well as ``CC`` and ``LINK``\ . To enable OpenMP threading usually
|
||||||
|
a compiler specific flag needs to be added to the compile and link
|
||||||
|
commands. For the GNU compilers, this is ``-fopenmp``\ , which can be
|
||||||
|
added to the ``CC`` and ``LINK`` makefile variables.
|
||||||
|
|
||||||
|
For the serial build the following make variables are set (see src/MAKE/Makefile.serial):
|
||||||
|
|
||||||
|
.. code-block:: make
|
||||||
|
|
||||||
|
CC = g++
|
||||||
|
LINK = g++
|
||||||
|
MPI_INC = -I../STUBS
|
||||||
|
MPI_PATH = -L../STUBS
|
||||||
|
MPI_LIB = -lmpi_stubs
|
||||||
|
|
||||||
|
You also need to build the STUBS library for your platform before making
|
||||||
|
LAMMPS itself. A ``make serial`` build does this for you automatically,
|
||||||
|
otherwise, type ``make mpi-stubs`` from the src directory, or ``make`` from
|
||||||
|
the src/STUBS dir. If the build fails, you will need to edit the
|
||||||
|
STUBS/Makefile for your platform. The stubs library does not provide
|
||||||
|
MPI/IO functions required by some LAMMPS packages, e.g. MPIIO or USER-LB,
|
||||||
|
and thus is not compatible with those packages.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
The file ``src/STUBS/mpi.c`` provides a CPU timer function called
|
||||||
|
MPI_Wtime() that calls gettimeofday() . If your operating system
|
||||||
|
does not support gettimeofday() , you will need to insert code to
|
||||||
|
call another timer. Note that the ANSI-standard function clock()
|
||||||
|
rolls over after an hour or so, and is therefore insufficient for
|
||||||
|
timing long LAMMPS simulations.
|
||||||
|
|
||||||
|
**MPI and OpenMP support info**\ :
|
||||||
|
|
||||||
|
If you are installing MPI yourself to build a parallel LAMMPS
|
||||||
|
executable, we recommend either MPICH or OpenMPI which are regularly
|
||||||
|
used and tested with LAMMPS by the LAMMPS developers. MPICH can be
|
||||||
|
downloaded from the `MPICH home page <https://www.mpich.org>`_ and
|
||||||
|
OpenMPI can be downloaded correspondingly from the `OpenMPI home page
|
||||||
|
<https://www.open-mpi.org>`_. Other MPI packages should also work. No
|
||||||
|
specific vendor provided and standard compliant MPI library is currently
|
||||||
|
known to be incompatible with LAMMPS. If you are running on a large
|
||||||
|
parallel machine, your system admins or the vendor should have already
|
||||||
|
installed a version of MPI, which is likely to be faster than a
|
||||||
|
self-installed MPICH or OpenMPI, so you should study the provided
|
||||||
|
documentation to find out how to build and link with it.
|
||||||
|
|
||||||
|
The majority of OpenMP (threading) support in LAMMPS is provided by the
|
||||||
|
USER-OMP package; see the :doc:`Speed omp <Speed_omp>` doc page for
|
||||||
|
details. The USER-INTEL package also includes OpenMP threading (it is
|
||||||
|
compatible with USER-OMP) and adds vectorization support when compiled
|
||||||
|
with compatible compilers, in particular the Intel compilers on top of
|
||||||
|
OpenMP. Also, the KOKKOS package can be compiled to include OpenMP
|
||||||
|
threading.
|
||||||
|
|
||||||
|
In addition, there are a few commands in LAMMPS that have native OpenMP
|
||||||
|
support included as well. These are commands in the MPIIO, SNAP,
|
||||||
|
USER-DIFFRACTION, and USER-DPD packages. In addition some packages
|
||||||
|
support OpenMP threading indirectly through the libraries they interface
|
||||||
|
to: e.g. LATTE and USER-COLVARS. See the :doc:`Packages details
|
||||||
|
<Packages_details>` doc page for more info on these packages and the doc
|
||||||
|
pages for their respective commands for OpenMP threading info.
|
||||||
|
|
||||||
|
For CMake, if you use ``BUILD_OMP=yes``, you can use these packages
|
||||||
|
and turn on their native OpenMP support and turn on their native OpenMP
|
||||||
|
support at run time, by setting the ``OMP_NUM_THREADS`` environment
|
||||||
|
variable before you launch LAMMPS.
|
||||||
|
|
||||||
|
For building via conventional make, the ``CCFLAGS`` and ``LINKFLAGS``
|
||||||
|
variables in Makefile.machine need to include the compiler flag that
|
||||||
|
enables OpenMP. For GNU compilers it is ``-fopenmp``\ . For (recent) Intel
|
||||||
|
compilers it is ``-qopenmp``\ . If you are using a different compiler,
|
||||||
|
please refer to its documentation.
|
||||||
|
|
||||||
|
.. _default-none-issues:
|
||||||
|
|
||||||
|
**OpenMP Compiler compatibility info**\ :
|
||||||
|
|
||||||
|
Some compilers do not fully support the ``default(none)`` directive
|
||||||
|
and others (e.g. GCC version 9 and beyond) may implement OpenMP 4.0
|
||||||
|
semantics, which are incompatible with the OpenMP 3.1 semantics used
|
||||||
|
in LAMMPS (for maximal compatibility with compiler versions in use).
|
||||||
|
In those case, all ``default(none)`` directives (which aid in detecting
|
||||||
|
incorrect and unwanted sharing) can be replaced with ``default(shared)``
|
||||||
|
while dropping all ``shared()`` directives. The script
|
||||||
|
'src/USER-OMP/hack_openmp_for_pgi_gcc9.sh' can be used to automate
|
||||||
|
this conversion.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. _compile:
|
||||||
|
|
||||||
|
Choice of compiler and compile/link options
|
||||||
|
---------------------------------------------------------
|
||||||
|
|
||||||
|
The choice of compiler and compiler flags can be important for
|
||||||
|
performance. Vendor provided compilers for a specific hardware can
|
||||||
|
produce faster code than open-source compilers like the GNU compilers.
|
||||||
|
On x86 hardware most popular compilers are quite similar in performance
|
||||||
|
of C/C++ code at high optimization levels. When using the USER-INTEL
|
||||||
|
package, there is a distinct advantage in using the `Intel C++ compiler
|
||||||
|
<intel_>`_ due to much improved vectorization through SSE and AVX
|
||||||
|
instructions on compatible hardware as the source code includes changes
|
||||||
|
and compiler directives to enable high degrees of vectorization.
|
||||||
|
|
||||||
|
.. _intel: https://software.intel.com/en-us/intel-compilers
|
||||||
|
|
||||||
|
On parallel clusters or supercomputers which use "environment modules"
|
||||||
|
for their compile/link environments, you can often access different
|
||||||
|
compilers by simply loading the appropriate module before building
|
||||||
|
LAMMPS.
|
||||||
|
|
||||||
|
**CMake build**\ :
|
||||||
|
|
||||||
|
By default CMake will use a compiler it finds and it will add
|
||||||
|
optimization flags appropriate to that compiler and any
|
||||||
|
:doc:`accelerator packages <Speed_packages>` you have included in the
|
||||||
|
build.
|
||||||
|
|
||||||
|
You can tell CMake to look for a specific compiler with these variable
|
||||||
|
settings. Likewise you can specify the corresponding ``CMAKE_*_FLAGS``
|
||||||
|
variables if you want to experiment with alternate optimization flags.
|
||||||
|
You should specify all 3 compilers, so that the small number of LAMMPS
|
||||||
|
source files written in C or Fortran are built with a compiler consistent
|
||||||
|
with the one used for all the C++ files:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
-D CMAKE_CXX_COMPILER=name # name of C++ compiler
|
||||||
|
-D CMAKE_C_COMPILER=name # name of C compiler
|
||||||
|
-D CMAKE_Fortran_COMPILER=name # name of Fortran compiler
|
||||||
|
|
||||||
|
-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
|
||||||
|
|
||||||
|
A few example command lines are:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
# Building with GNU Compilers:
|
||||||
|
cmake ../cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_Fortran_COMPILER=gfortran
|
||||||
|
# Building with Intel Compilers:
|
||||||
|
cmake ../cmake -DCMAKE_C_COMPILER=icc -DCMAKE_CXX_COMPILER=icpc -DCMAKE_Fortran_COMPILER=ifort
|
||||||
|
# Building with LLVM/Clang Compilers:
|
||||||
|
cmake ../cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_Fortran_COMPILER=flang
|
||||||
|
|
||||||
|
For compiling with the Clang/LLVM compilers a special CMake preset is
|
||||||
|
included that can be loaded with `-C ../cmake/presets/clang.cmake`.
|
||||||
|
|
||||||
|
In addition you can set ``CMAKE_TUNE_FLAGS`` to specifically add compiler
|
||||||
|
flags to tune for optimal performance on given hosts. By default these are
|
||||||
|
initialized to some compiler specific flags, where known, to optimize the
|
||||||
|
LAMMPS executable with optimizations and instructions available on the host
|
||||||
|
where LAMMPS is compiled. For example, for Intel compilers this would be
|
||||||
|
``-xHost`` and for GNU compilers this would be ``-march=native``. To turn
|
||||||
|
these flags off, set ``-D CMAKE_TUNE_FLAGS=``.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
When the cmake command completes, it prints a summary to the screen
|
||||||
|
which compilers it is using and what flags and settings will be used
|
||||||
|
for the compilation. Note that if the top-level compiler is mpicxx,
|
||||||
|
it is simply a wrapper on a real compiler. The underlying compiler
|
||||||
|
info is what CMake will try to determine and report. You should check
|
||||||
|
to confirm you are using the compiler and optimization flags you want.
|
||||||
|
|
||||||
|
**Makefile.machine settings for traditional make**\ :
|
||||||
|
|
||||||
|
The "compiler/linker settings" section of a Makefile.machine lists
|
||||||
|
compiler and linker settings for your C++ compiler, including
|
||||||
|
optimization flags. For a parallel build it is recommended to use
|
||||||
|
mpicxx or mpiCC, since these compiler wrappers will include a variety of
|
||||||
|
settings appropriate for your MPI installation and thus avoiding the
|
||||||
|
guesswork of finding the right flags.
|
||||||
|
|
||||||
|
Parallel build (see src/MAKE/Makefile.mpi):
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
CC = mpicxx
|
||||||
|
CCFLAGS = -g -O3
|
||||||
|
LINK = mpicxx
|
||||||
|
LINKFLAGS = -g -O
|
||||||
|
|
||||||
|
Serial build (see src/MAKE/Makefile.serial):
|
||||||
|
|
||||||
|
.. code-block:: make
|
||||||
|
|
||||||
|
CC = g++
|
||||||
|
CCFLAGS = -g -O3
|
||||||
|
LINK = g++
|
||||||
|
LINKFLAGS = -g -O
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
If you build LAMMPS with any :doc:`accelerator packages <Speed_packages>`
|
||||||
|
included, there may be specific optimization flags that are either
|
||||||
|
required or recommended to enable required features and to achieve
|
||||||
|
optimal performance. You need to include these in the CCFLAGS and
|
||||||
|
LINKFLAGS settings above. For details, see the individual package
|
||||||
|
doc pages listed on the :doc:`Speed packages <Speed_packages>` doc
|
||||||
|
page. Or examine these files in the src/MAKE/OPTIONS directory.
|
||||||
|
They correspond to each of the 5 accelerator packages and their
|
||||||
|
hardware variants:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
Makefile.opt # OPT package
|
||||||
|
Makefile.omp # USER-OMP package
|
||||||
|
Makefile.intel_cpu # USER-INTEL package for CPUs
|
||||||
|
Makefile.intel_coprocessor # USER-INTEL package for KNLs
|
||||||
|
Makefile.gpu # GPU package
|
||||||
|
Makefile.kokkos_cuda_mpi # KOKKOS package for GPUs
|
||||||
|
Makefile.kokkos_omp # KOKKOS package for CPUs (OpenMP)
|
||||||
|
Makefile.kokkos_phi # KOKKOS package for KNLs (OpenMP)
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. _exe:
|
||||||
|
|
||||||
|
Build LAMMPS as an executable or a library
|
||||||
|
----------------------------------------------------
|
||||||
|
|
||||||
|
LAMMPS can be built as either an executable or as a static or shared
|
||||||
|
library. The LAMMPS library can be called from another application or
|
||||||
|
a scripting language. See the :doc:`Howto couple <Howto_couple>` doc
|
||||||
|
page for more info on coupling LAMMPS to other codes. See the
|
||||||
|
:doc:`Python <Python_head>` doc page for more info on wrapping and
|
||||||
|
running LAMMPS from Python via its library interface.
|
||||||
|
|
||||||
|
**CMake build**\ :
|
||||||
|
|
||||||
|
For CMake builds, you can select through setting CMake variables which
|
||||||
|
files the compilation produces during the configuration step. If none
|
||||||
|
are set, defaults are applied.
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
-D BUILD_EXE=value # yes (default) or no
|
||||||
|
-D BUILD_LIB=value # yes or no (default)
|
||||||
|
-D BUILD_SHARED_LIBS=value # yes or no (default)
|
||||||
|
-D LAMMPS_LIB_SUFFIX=name # name = mpi, serial, mybox, titan, laptop, etc
|
||||||
|
# no default value
|
||||||
|
|
||||||
|
Setting ``BUILD_EXE=no`` will not produce an executable. Setting
|
||||||
|
``BUILD_LIB=yes`` will produce a static library named ``liblammps.a``\ .
|
||||||
|
Setting both ``BUILD_LIB=yes`` and ``BUILD_SHARED_LIBS=yes`` will produce a
|
||||||
|
shared library named ``liblammps.so`` instead. If ``LAMMPS_LIB_SUFFIX=name``
|
||||||
|
is set in addition, the name of the generated libraries will be changed to
|
||||||
|
either ``liblammps_name.a`` or ``liblammps_name.so``\ , respectively.
|
||||||
|
|
||||||
|
**Traditional make**\ :
|
||||||
|
|
||||||
|
With the traditional makefile based build process, the choice of
|
||||||
|
the generated executable or library depends on the "mode" setting.
|
||||||
|
Several options are available and ``mode=exe`` is the default.
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
make machine # build LAMMPS executable lmp_machine
|
||||||
|
make mode=exe machine # same as "make machine"
|
||||||
|
make mode=lib machine # build LAMMPS static lib liblammps_machine.a
|
||||||
|
make mode=shlib machine # build LAMMPS shared lib liblammps_machine.so
|
||||||
|
make mode=shexe machine # same as "mode=exe" but uses objects from "mode=shlib"
|
||||||
|
|
||||||
|
The two "exe" builds will generate and executable ``lmp_machine``\ ,
|
||||||
|
while the two library builds will create a file ``liblammps_machine.a``
|
||||||
|
or ``liblammps_machine.so``\ . They will also create generic soft links,
|
||||||
|
named ``liblammps.a`` and ``liblammps.so``\ , which point to the specific
|
||||||
|
``liblammps_machine.a/so`` files.
|
||||||
|
|
||||||
|
**CMake and make info**\ :
|
||||||
|
|
||||||
|
Note that for a shared library to be usable by a calling program, all
|
||||||
|
the auxiliary libraries it depends on must also exist as shared
|
||||||
|
libraries. This will be the case for libraries included with LAMMPS,
|
||||||
|
such as the dummy MPI library in src/STUBS or any package libraries in
|
||||||
|
the lib/packages directory, since they are always built in a shared
|
||||||
|
library compatible way using the ``-fPIC`` switch. However, if a library
|
||||||
|
like MPI or FFTW does not exist as a shared library, the shared library
|
||||||
|
build may generate an error. This means you will need to install a
|
||||||
|
shared library version of the auxiliary library. The build instructions
|
||||||
|
for the library should tell you how to do this.
|
||||||
|
|
||||||
|
As an example, here is how to build and install the `MPICH library
|
||||||
|
<mpich_>`_, a popular open-source version of MPI, as a shared library
|
||||||
|
in the default /usr/local/lib location:
|
||||||
|
|
||||||
|
.. _mpich: https://www.mpich.org
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
./configure --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
You may need to use ``sudo make install`` in place of the last line if you
|
||||||
|
do not have write privileges for ``/usr/local/lib``. The end result should
|
||||||
|
be the file ``/usr/local/lib/libmpich.so``. On many Linux installations the
|
||||||
|
folder ``${HOME}/.local`` is an alternative to using ``/usr/local`` and does
|
||||||
|
not require superuser or sudo access. In that case the configuration
|
||||||
|
step becomes:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
./configure --enable-shared --prefix=${HOME}/.local
|
||||||
|
|
||||||
|
Avoiding using "sudo" for custom software installation (i.e. from source
|
||||||
|
and not through a package manager tool provided by the OS) is generally
|
||||||
|
recommended to ensure the integrity of the system software installation.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. _doc:
|
||||||
|
|
||||||
|
Build the LAMMPS documentation
|
||||||
|
----------------------------------------
|
||||||
|
|
||||||
|
The LAMMPS manual is written in `reStructuredText <rst_>`_ format which
|
||||||
|
can be translated to different output format using the `Sphinx <sphinx_>`_
|
||||||
|
document generator tool. Currently the translation to HTML and PDF (via
|
||||||
|
LaTeX) are supported. For that to work a Python 3 interpreter and
|
||||||
|
internet access is required. For the documentation build a python
|
||||||
|
based virtual environment is set up in the folder doc/docenv and various
|
||||||
|
python packages are installed into that virtual environment via the pip
|
||||||
|
tool. The actual translation is then done via make commands.
|
||||||
|
|
||||||
|
.. _rst: https://docutils.readthedocs.io/en/sphinx-docs/user/rst/quickstart.html
|
||||||
|
.. _sphinx: https://sphinx-doc.org
|
||||||
|
|
||||||
|
**Documentation make option**\ :
|
||||||
|
|
||||||
|
The following make commands can be issued in the doc folder of the
|
||||||
|
LAMMPS source distribution.
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
make html # create HTML doc pages in html directory
|
||||||
|
make pdf # create Developer.pdf and Manual.pdf in this directory
|
||||||
|
make fetch # fetch HTML and PDF files from LAMMPS web site
|
||||||
|
make clean # remove all intermediate files
|
||||||
|
make clean-all # reset the entire doc build environment
|
||||||
|
make anchor_check # scan for duplicate anchor labels
|
||||||
|
make style_check # check for complete and consistent style lists
|
||||||
|
make package_check # check for complete and consistent package lists
|
||||||
|
make spelling # spell-check the manual
|
||||||
|
|
||||||
|
Thus "make html" will create a "doc/html" directory with the HTML format
|
||||||
|
manual pages so that you can browse them with a web browser locally on
|
||||||
|
your system.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
You can also download a tarball of the documentation for the
|
||||||
|
current LAMMPS version (HTML and PDF files), from the website
|
||||||
|
`download page <https://lammps.sandia.gov/download.html>`_.
|
||||||
|
|
||||||
|
**CMake build option**\ :
|
||||||
|
|
||||||
|
It is also possible to create the HTML version of the manual within
|
||||||
|
the :doc:`CMake build directory <Build_cmake>`. The reason for this
|
||||||
|
option is to include the installation of the HTML manual pages into
|
||||||
|
the "install" step when installing LAMMPS after the CMake build via
|
||||||
|
``make install``.
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
-D BUILD_DOC=value # yes or no (default)
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. _tools:
|
||||||
|
|
||||||
|
Build LAMMPS tools
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
Some tools described in :doc:`Auxiliary tools <Tools>` can be built directly
|
||||||
|
using CMake or Make.
|
||||||
|
|
||||||
|
**CMake build3**\ :
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
-D BUILD_TOOLS=value # yes or no (default)
|
||||||
|
|
||||||
|
The generated binaries will also become part of the LAMMPS installation
|
||||||
|
(see below).
|
||||||
|
|
||||||
|
**Traditional make**\ :
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
cd lammps/tools
|
||||||
|
make all # build all binaries of tools
|
||||||
|
make binary2txt # build only binary2txt tool
|
||||||
|
make chain # build only chain tool
|
||||||
|
make micelle2d # build only micelle2d tool
|
||||||
|
make thermo_extract # build only thermo_extract tool
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. _install:
|
||||||
|
|
||||||
|
Install LAMMPS after a build
|
||||||
|
------------------------------------------
|
||||||
|
|
||||||
|
After building LAMMPS, you may wish to copy the LAMMPS executable of
|
||||||
|
library, along with other LAMMPS files (library header, doc files) to
|
||||||
|
a globally visible place on your system, for others to access. Note
|
||||||
|
that you may need super-user privileges (e.g. sudo) if the directory
|
||||||
|
you want to copy files to is protected.
|
||||||
|
|
||||||
|
**CMake build**\ :
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
cmake -D CMAKE_INSTALL_PREFIX=path [options ...] ../cmake
|
||||||
|
make # perform make after CMake command
|
||||||
|
make install # perform the installation into prefix
|
||||||
|
|
||||||
|
**Traditional make**\ :
|
||||||
|
|
||||||
|
There is no "install" option in the ``src/Makefile`` for LAMMPS. If
|
||||||
|
you wish to do this you will need to first build LAMMPS, then manually
|
||||||
|
copy the desired LAMMPS files to the appropriate system directories.
|
||||||
@ -1,331 +0,0 @@
|
|||||||
"Higher level section"_Build.html - "LAMMPS WWW Site"_lws - "LAMMPS
|
|
||||||
Documentation"_ld - "LAMMPS Commands"_lc :c
|
|
||||||
|
|
||||||
:link(lws,http://lammps.sandia.gov)
|
|
||||||
:link(ld,Manual.html)
|
|
||||||
:link(lc,Commands_all.html)
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
Basic build options :h3
|
|
||||||
|
|
||||||
The following topics are covered on this page, for building both with
|
|
||||||
CMake and make:
|
|
||||||
|
|
||||||
"Serial vs parallel build"_#serial
|
|
||||||
"Choice of compiler and compile/link options"_#compile
|
|
||||||
"Build LAMMPS as an executable or a library"_#exe
|
|
||||||
"Build the LAMMPS documentation"_#doc
|
|
||||||
"Install LAMMPS after a build"_#install :ul
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
Serial vs parallel build :h4,link(serial)
|
|
||||||
|
|
||||||
LAMMPS can be built to run in parallel using the ubiquitous "MPI
|
|
||||||
(message-passing
|
|
||||||
interface)"_https://en.wikipedia.org/wiki/Message_Passing_Interface
|
|
||||||
library. Or it can built to run on a single processor (serial)
|
|
||||||
without MPI. It can also be built with support for OpenMP threading
|
|
||||||
(see more discussion below).
|
|
||||||
|
|
||||||
[CMake variables]:
|
|
||||||
|
|
||||||
-D BUILD_MPI=value # yes or no, default is yes if CMake finds MPI, else no
|
|
||||||
-D BUILD_OMP=value # yes or no (default)
|
|
||||||
-D LAMMPS_MACHINE=name # name = mpi, serial, mybox, titan, laptop, etc
|
|
||||||
# no default value :pre
|
|
||||||
|
|
||||||
The executable created by CMake (after running make) is lmp_name. If
|
|
||||||
the LAMMPS_MACHINE variable is not specified, the executable is just
|
|
||||||
lmp. Using BUILD_MPI=no will produce a serial executable.
|
|
||||||
|
|
||||||
[Traditional make]:
|
|
||||||
|
|
||||||
cd lammps/src
|
|
||||||
make mpi # parallel build, produces lmp_mpi using Makefile.mpi
|
|
||||||
make serial # serial build, produces lmp_serial using Makefile/serial
|
|
||||||
make mybox :pre # uses Makefile.mybox to produce lmp_mybox :pre
|
|
||||||
|
|
||||||
Serial build (see src/MAKE/Makefile.serial):
|
|
||||||
|
|
||||||
MPI_INC = -I../STUBS
|
|
||||||
MPI_PATH = -L../STUBS
|
|
||||||
MPI_LIB = -lmpi_stubs :pre
|
|
||||||
|
|
||||||
For a parallel build, if MPI is installed on your system in the usual
|
|
||||||
place (e.g. under /usr/local), you do not need to specify the 3
|
|
||||||
variables MPI_INC, MPI_PATH, MPI_LIB. The MPI wrapper on the compiler
|
|
||||||
(e.g. mpicxx, mpiCC) knows where to find the needed include and
|
|
||||||
library files. Failing this, these 3 variables can be used to specify
|
|
||||||
where the mpi.h file (MPI_INC), and the MPI library files (MPI_PATH)
|
|
||||||
are found, and the name of the library files (MPI_LIB).
|
|
||||||
|
|
||||||
For a serial build, you need to specify the 3 variables, as shown
|
|
||||||
above.
|
|
||||||
|
|
||||||
For a serial LAMMPS build, use the dummy MPI library provided in
|
|
||||||
src/STUBS. You also need to build the STUBS library for your platform
|
|
||||||
before making LAMMPS itself. A "make serial" build does this for.
|
|
||||||
Otherwise, type "make mpi-stubs" from the src directory, or "make"
|
|
||||||
from the src/STUBS dir. If the build fails, you will need to edit the
|
|
||||||
STUBS/Makefile for your platform.
|
|
||||||
|
|
||||||
The file STUBS/mpi.c provides a CPU timer function called MPI_Wtime()
|
|
||||||
that calls gettimeofday() . If your system doesn't support
|
|
||||||
gettimeofday() , you'll need to insert code to call another timer.
|
|
||||||
Note that the ANSI-standard function clock() rolls over after an hour
|
|
||||||
or so, and is therefore insufficient for timing long LAMMPS
|
|
||||||
simulations.
|
|
||||||
|
|
||||||
[CMake and make info]:
|
|
||||||
|
|
||||||
If you are installing MPI yourself, we recommend MPICH2 from Argonne
|
|
||||||
National Laboratory or OpenMPI. MPICH can be downloaded from the
|
|
||||||
"Argonne MPI site"_http://www.mcs.anl.gov/research/projects/mpich2/.
|
|
||||||
OpenMPI can be downloaded from the "OpenMPI
|
|
||||||
site"_http://www.open-mpi.org. Other MPI packages should also work.
|
|
||||||
If you are running on a large parallel machine, your system admins or
|
|
||||||
the vendor should have already installed a version of MPI, which is
|
|
||||||
likely to be faster than a self-installed MPICH or OpenMPI, so find
|
|
||||||
out how to build and link with it.
|
|
||||||
|
|
||||||
The majority of OpenMP (threading) support in LAMMPS is provided by
|
|
||||||
the USER-OMP package; see the "Speed omp"_Speed_omp.html doc page for
|
|
||||||
details. The USER-INTEL package also provides OpenMP support (it is
|
|
||||||
compatible with USER-OMP) and adds vectorization support when compiled
|
|
||||||
with the Intel compilers on top of that. Also, the KOKKOS package can
|
|
||||||
be compiled for using OpenMP threading.
|
|
||||||
|
|
||||||
However, there are a few commands in LAMMPS that have native OpenMP
|
|
||||||
support. These are commands in the MPIIO, SNAP, USER-DIFFRACTION, and
|
|
||||||
USER-DPD packages. In addition some packages support OpenMP threading
|
|
||||||
indirectly through the libraries they interface to: e.g. LATTE and
|
|
||||||
USER-COLVARS. See the "Packages details"_Packages_details.html doc
|
|
||||||
page for more info on these packages and the doc pages for their
|
|
||||||
respective commands for OpenMP threading info.
|
|
||||||
|
|
||||||
For CMake, if you use BUILD_OMP=yes, you can use these packages and
|
|
||||||
turn on their native OpenMP support and turn on their native OpenMP
|
|
||||||
support at run time, by setting the OMP_NUM_THREADS environment
|
|
||||||
variable before you launch LAMMPS.
|
|
||||||
|
|
||||||
For building via conventional make, the CCFLAGS and LINKFLAGS
|
|
||||||
variables in Makefile.machine need to include the compiler flag that
|
|
||||||
enables OpenMP. For GNU compilers it is -fopenmp. For (recent) Intel
|
|
||||||
compilers it is -qopenmp. If you are using a different compiler,
|
|
||||||
please refer to its documentation.
|
|
||||||
|
|
||||||
[OpenMP Compiler compatibility info]: :link(default-none-issues)
|
|
||||||
|
|
||||||
Some compilers do not fully support the 'default(none)' directive
|
|
||||||
and others (e.g. GCC version 9 and beyond) may implement OpenMP 4.0
|
|
||||||
semantics, which are incompatible with the OpenMP 3.1 directives used
|
|
||||||
in LAMMPS (for maximal compatibility with compiler versions in use).
|
|
||||||
In those case, all 'default(none)' directives (which aid in detecting
|
|
||||||
incorrect and unwanted sharing) can be replaced with 'default(shared)'
|
|
||||||
while dropping all 'shared()' directives. The script
|
|
||||||
'src/USER-OMP/hack_openmp_for_pgi_gcc9.sh' can be used to automate
|
|
||||||
this conversion.
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
Choice of compiler and compile/link options :h4,link(compile)
|
|
||||||
|
|
||||||
The choice of compiler and compiler flags can be important for
|
|
||||||
performance. Vendor compilers can produce faster code than
|
|
||||||
open-source compilers like GNU. On boxes with Intel CPUs, we suggest
|
|
||||||
trying the "Intel C++ compiler"_intel.
|
|
||||||
|
|
||||||
:link(intel,https://software.intel.com/en-us/intel-compilers)
|
|
||||||
|
|
||||||
On parallel clusters or supercomputers which use "modules" for their
|
|
||||||
compile/link environments, you can often access different compilers by
|
|
||||||
simply loading the appropriate module before building LAMMPS.
|
|
||||||
|
|
||||||
[CMake variables]:
|
|
||||||
|
|
||||||
-D CMAKE_CXX_COMPILER=name # name of C++ compiler
|
|
||||||
-D CMAKE_C_COMPILER=name # name of C compiler
|
|
||||||
-D CMAKE_Fortran_COMPILER=name # name of Fortran compiler :pre
|
|
||||||
|
|
||||||
-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 :pre
|
|
||||||
|
|
||||||
By default CMake will use a compiler it finds and it will add
|
|
||||||
optimization flags appropriate to that compiler and any "accelerator
|
|
||||||
packages"_Speed_packages.html you have included in the build.
|
|
||||||
|
|
||||||
You can tell CMake to look for a specific compiler with these variable
|
|
||||||
settings. Likewise you can specify the FLAGS variables if you want to
|
|
||||||
experiment with alternate optimization flags. You should specify all
|
|
||||||
3 compilers, so that the small number of LAMMPS source files written
|
|
||||||
in C or Fortran are built with a compiler consistent with the one used
|
|
||||||
for all the C++ files:
|
|
||||||
|
|
||||||
Building with GNU Compilers:
|
|
||||||
cmake ../cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_Fortran_COMPILER=gfortran
|
|
||||||
Building with Intel Compilers:
|
|
||||||
cmake ../cmake -DCMAKE_C_COMPILER=icc -DCMAKE_CXX_COMPILER=icpc -DCMAKE_Fortran_COMPILER=ifort
|
|
||||||
Building with LLVM/Clang Compilers:
|
|
||||||
cmake ../cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_Fortran_COMPILER=flang :pre
|
|
||||||
|
|
||||||
NOTE: When the cmake command completes, it prints info to the screen
|
|
||||||
as to which compilers it is using, and what flags will be used in the
|
|
||||||
compilation. Note that if the top-level compiler is mpicxx, it is
|
|
||||||
simply a wrapper on a real compiler. The underlying compiler info is
|
|
||||||
what will be listed in the CMake output. You should check to insure
|
|
||||||
you are using the compiler and optimization flags are the ones you
|
|
||||||
want.
|
|
||||||
|
|
||||||
[Makefile.machine settings]:
|
|
||||||
|
|
||||||
Parallel build (see src/MAKE/Makefile.mpi):
|
|
||||||
|
|
||||||
CC = mpicxx
|
|
||||||
CCFLAGS = -g -O3
|
|
||||||
LINK = mpicxx
|
|
||||||
LINKFLAGS = -g -O :pre
|
|
||||||
|
|
||||||
Serial build (see src/MAKE/Makefile.serial):
|
|
||||||
|
|
||||||
CC = g++
|
|
||||||
CCFLAGS = -g -O3
|
|
||||||
LINK = g++
|
|
||||||
LINKFLAGS = -g -O :pre
|
|
||||||
|
|
||||||
The "compiler/linker settings" section of a Makefile.machine lists
|
|
||||||
compiler and linker settings for your C++ compiler, including
|
|
||||||
optimization flags. You should always use mpicxx or mpiCC for
|
|
||||||
a parallel build, since these compiler wrappers will include
|
|
||||||
a variety of settings appropriate for your MPI installation.
|
|
||||||
|
|
||||||
NOTE: If you build LAMMPS with any "accelerator
|
|
||||||
packages"_Speed_packages.html included, they have specific
|
|
||||||
optimization flags that are either required or recommended for optimal
|
|
||||||
performance. You need to include these in the CCFLAGS and LINKFLAGS
|
|
||||||
settings above. For details, see the individual package doc pages
|
|
||||||
listed on the "Speed packages"_Speed_packages.html doc page. Or
|
|
||||||
examine these files in the src/MAKE/OPTIONS directory. They
|
|
||||||
correspond to each of the 5 accelerator packages and their hardware
|
|
||||||
variants:
|
|
||||||
|
|
||||||
Makefile.opt # OPT package
|
|
||||||
Makefile.omp # USER-OMP package
|
|
||||||
Makefile.intel_cpu # USER-INTEL package for CPUs
|
|
||||||
Makefile.intel_coprocessor # USER-INTEL package for KNLs
|
|
||||||
Makefile.gpu # GPU package
|
|
||||||
Makefile.kokkos_cuda_mpi # KOKKOS package for GPUs
|
|
||||||
Makefile.kokkos_omp # KOKKOS package for CPUs (OpenMP)
|
|
||||||
Makefile.kokkos_phi # KOKKOS package for KNLs (OpenMP) :pre
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
Build LAMMPS as an executable or a library :h4,link(exe)
|
|
||||||
|
|
||||||
LAMMPS can be built as either an executable or as a static or shared
|
|
||||||
library. The LAMMPS library can be called from another application or
|
|
||||||
a scripting language. See the "Howto couple"_Howto_couple.html doc
|
|
||||||
page for more info on coupling LAMMPS to other codes. See the
|
|
||||||
"Python"_Python_head.html doc page for more info on wrapping and
|
|
||||||
running LAMMPS from Python via its library interface.
|
|
||||||
|
|
||||||
[CMake variables]:
|
|
||||||
|
|
||||||
-D BUILD_EXE=value # yes (default) or no
|
|
||||||
-D BUILD_LIB=value # yes or no (default)
|
|
||||||
-D BUILD_SHARED_LIBS=value # yes or no (default) :pre
|
|
||||||
|
|
||||||
Setting BUILD_EXE=no will not produce an executable. Setting
|
|
||||||
BUILD_LIB=yes will produce a static library named liblammps.a.
|
|
||||||
Setting both BUILD_LIB=yes and BUILD_SHARED_LIBS=yes will produce a
|
|
||||||
shared library named liblammps.so.
|
|
||||||
|
|
||||||
[Traditional make]:
|
|
||||||
|
|
||||||
cd lammps/src
|
|
||||||
make machine # build LAMMPS executable lmp_machine
|
|
||||||
make mode=lib machine # build LAMMPS static lib liblammps_machine.a
|
|
||||||
make mode=shlib machine # build LAMMPS shared lib liblammps_machine.so :pre
|
|
||||||
|
|
||||||
The two library builds also create generic soft links, named
|
|
||||||
liblammps.a and liblammps.so, which point to the liblammps_machine
|
|
||||||
files.
|
|
||||||
|
|
||||||
[CMake and make info]:
|
|
||||||
|
|
||||||
Note that for a shared library to be usable by a calling program, all
|
|
||||||
the auxiliary libraries it depends on must also exist as shared
|
|
||||||
libraries. This will be the case for libraries included with LAMMPS,
|
|
||||||
such as the dummy MPI library in src/STUBS or any package libraries in
|
|
||||||
the lib/packages directory, since they are always built as shared
|
|
||||||
libraries using the -fPIC switch. However, if a library like MPI or
|
|
||||||
FFTW does not exist as a shared library, the shared library build will
|
|
||||||
generate an error. This means you will need to install a shared
|
|
||||||
library version of the auxiliary library. The build instructions for
|
|
||||||
the library should tell you how to do this.
|
|
||||||
|
|
||||||
As an example, here is how to build and install the "MPICH
|
|
||||||
library"_mpich, a popular open-source version of MPI, distributed by
|
|
||||||
Argonne National Lab, as a shared library in the default
|
|
||||||
/usr/local/lib location:
|
|
||||||
|
|
||||||
:link(mpich,http://www-unix.mcs.anl.gov/mpi)
|
|
||||||
|
|
||||||
./configure --enable-shared
|
|
||||||
make
|
|
||||||
make install :pre
|
|
||||||
|
|
||||||
You may need to use "sudo make install" in place of the last line if
|
|
||||||
you do not have write privileges for /usr/local/lib. The end result
|
|
||||||
should be the file /usr/local/lib/libmpich.so.
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
Build the LAMMPS documentation :h4,link(doc)
|
|
||||||
|
|
||||||
[CMake variable]:
|
|
||||||
|
|
||||||
-D BUILD_DOC=value # yes or no (default) :pre
|
|
||||||
|
|
||||||
This will create the HTML doc pages within the CMake build directory.
|
|
||||||
The reason to do this is if you want to "install" LAMMPS on a system
|
|
||||||
after the CMake build via "make install", and include the doc pages in
|
|
||||||
the install.
|
|
||||||
|
|
||||||
[Traditional make]:
|
|
||||||
|
|
||||||
cd lammps/doc
|
|
||||||
make html # html doc pages
|
|
||||||
make pdf # single Manual.pdf file :pre
|
|
||||||
|
|
||||||
This will create a lammps/doc/html dir with the HTML doc pages so that
|
|
||||||
you can browse them locally on your system. Type "make" from the
|
|
||||||
lammps/doc dir to see other options.
|
|
||||||
|
|
||||||
NOTE: You can also download a tarball of the documentation for the
|
|
||||||
current LAMMPS version (HTML and PDF files), from the website
|
|
||||||
"download page"_http://lammps.sandia.gov/download.html.
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
Install LAMMPS after a build :h4,link(install)
|
|
||||||
|
|
||||||
After building LAMMPS, you may wish to copy the LAMMPS executable of
|
|
||||||
library, along with other LAMMPS files (library header, doc files) to
|
|
||||||
a globally visible place on your system, for others to access. Note
|
|
||||||
that you may need super-user privileges (e.g. sudo) if the directory
|
|
||||||
you want to copy files to is protected.
|
|
||||||
|
|
||||||
[CMake variable]:
|
|
||||||
|
|
||||||
cmake -D CMAKE_INSTALL_PREFIX=path \[options ...\] ../cmake
|
|
||||||
make # perform make after CMake command
|
|
||||||
make install # perform the installation into prefix :pre
|
|
||||||
|
|
||||||
[Traditional make]:
|
|
||||||
|
|
||||||
There is no "install" option in the src/Makefile for LAMMPS. If you
|
|
||||||
wish to do this you will need to first build LAMMPS, then manually
|
|
||||||
copy the desired LAMMPS files to the appropriate system directories.
|
|
||||||
226
doc/src/Build_cmake.rst
Normal file
226
doc/src/Build_cmake.rst
Normal file
@ -0,0 +1,226 @@
|
|||||||
|
Build LAMMPS with CMake
|
||||||
|
=======================
|
||||||
|
|
||||||
|
This page is a short summary of how to use CMake to build LAMMPS.
|
||||||
|
Details on CMake variables that enable specific LAMMPS build options
|
||||||
|
are given on the pages linked to from the :doc:`Build <Build>` doc page.
|
||||||
|
|
||||||
|
Richard Berger (Temple U) has also written a `more comprehensive guide <https://github.com/lammps/lammps/blob/master/cmake/README.md>`_
|
||||||
|
for how to use CMake to build LAMMPS. If you are new to CMake it is a
|
||||||
|
good place to start.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
Building LAMMPS with CMake is a two-step process. First you use CMake
|
||||||
|
to create a build environment in a new directory. On Linux systems,
|
||||||
|
this will be by default based on Unix-style makefiles for use with make.
|
||||||
|
Then you use the *make* command to build LAMMPS, which uses the created
|
||||||
|
Makefile(s). Example:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
cd lammps # change to the LAMMPS distribution directory
|
||||||
|
mkdir build; cd build # create a new directory (folder) for build
|
||||||
|
cmake [options ...] ../cmake # configuration with (command-line) cmake
|
||||||
|
cmake --build . # compilation (or type "make")
|
||||||
|
|
||||||
|
The ``cmake`` command will detect available features, enable selected
|
||||||
|
packages and options, and will generate the build environment. By default
|
||||||
|
this build environment will be created for "Unix Makefiles" on most
|
||||||
|
platforms and particularly on Linux. However, alternate build tools
|
||||||
|
(e.g. Ninja) and project files for Integrated Development Environments
|
||||||
|
(IDEs) like Eclipse, CodeBlocks, or Kate can be generated, too. This is
|
||||||
|
selected via the ``-G`` command line flag. Further details about features
|
||||||
|
and settings for CMake are in the `CMake online documentation <cmake_doc_>`_
|
||||||
|
|
||||||
|
.. _cmake_doc: https://cmake.org/documentation/
|
||||||
|
|
||||||
|
For the rest of the documentation
|
||||||
|
we will assume that the build environment is generated for "Unix Makefiles"
|
||||||
|
and thus the ``make`` command will be used to compile and link LAMMPS as
|
||||||
|
indicated above, producing (by default) an executable called ``lmp`` and
|
||||||
|
a library called ``liblammps.a`` in the ``build`` folder.
|
||||||
|
|
||||||
|
If your machine has multiple CPU cores (most do these days), you can
|
||||||
|
compile sources in parallel with a command like ``make -j N`` (with N
|
||||||
|
being the maximum number of concurrently executed tasks). Also
|
||||||
|
installation of the ``ccache`` (= Compiler Cache) software may speed
|
||||||
|
up repeated compilation, e.g. during code development, significantly.
|
||||||
|
|
||||||
|
After compilation, you may optionally install the LAMMPS executable into
|
||||||
|
your system with:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
make install # optional, copy LAMMPS executable & library elsewhere
|
||||||
|
|
||||||
|
This will install the lammps executable and library (if requested), some
|
||||||
|
tools (if configured) and additional files like library API headers,
|
||||||
|
manpages, potential and force field files. The location of the installation
|
||||||
|
tree is set by the CMake variable "CMAKE_INSTALL_PREFIX" which defaults
|
||||||
|
to ${HOME}/.local
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. _cmake_build:
|
||||||
|
|
||||||
|
There are 3 variants of the CMake command itself: a command-line version
|
||||||
|
(``cmake`` or ``cmake3``), a text mode UI version (``ccmake`` or ``ccmake3``),
|
||||||
|
and a graphical GUI version (``cmake-gui``). You can use any of them
|
||||||
|
interchangeably to configure and create the LAMMPS build environment.
|
||||||
|
On Linux all the versions produce a Makefile as their output by default.
|
||||||
|
See more details on each below.
|
||||||
|
|
||||||
|
You can specify a variety of options with any of the 3 versions, which
|
||||||
|
affect how the build is performed and what is included in the LAMMPS
|
||||||
|
executable. Links to pages explaining all the options are listed on
|
||||||
|
the :doc:`Build <Build>` doc page.
|
||||||
|
|
||||||
|
You must perform the CMake build system generation and compilation in
|
||||||
|
a new directory you create. It can be anywhere on your local machine.
|
||||||
|
In these Build pages we assume that you are building in a directory
|
||||||
|
called ``lammps/build``. You can perform separate builds independently
|
||||||
|
with different options, so long as you perform each of them in a
|
||||||
|
separate directory you create. All the auxiliary files created by one
|
||||||
|
build process (executable, object files, log files, etc) are stored in
|
||||||
|
this directory or sub-directories within it that CMake creates.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
To perform a CMake build, no packages can be installed or a build
|
||||||
|
been previously attempted in the LAMMPS src directory by using ``make``
|
||||||
|
commands to :doc:`perform a conventional LAMMPS build <Build_make>`.
|
||||||
|
CMake detects if this is the case and generates an error, telling you
|
||||||
|
to type ``make no-all purge`` in the src directory to un-install all
|
||||||
|
packages. The purge removes all the \*.h files auto-generated by
|
||||||
|
make.
|
||||||
|
|
||||||
|
You must have CMake version 3.10 or later on your system to build
|
||||||
|
LAMMPS. Installation instructions for CMake are below.
|
||||||
|
|
||||||
|
After the initial build, if you edit LAMMPS source files, or add your
|
||||||
|
own new files to the source directory, you can just re-type make from
|
||||||
|
your build directory and it will re-compile only the files that have
|
||||||
|
changed. If you want to change CMake options you can run cmake (or
|
||||||
|
ccmake or cmake-gui) again from the same build directory and alter
|
||||||
|
various options; see details below. Or you can remove the entire build
|
||||||
|
folder, recreate the directory and start over.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
**Command-line version of CMake**\ :
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
cmake [options ...] /path/to/lammps/cmake # build from any dir
|
||||||
|
cmake [options ...] ../cmake # build from lammps/build
|
||||||
|
cmake3 [options ...] ../cmake # build from lammps/build
|
||||||
|
|
||||||
|
The cmake command takes one required argument, which is the LAMMPS
|
||||||
|
cmake directory which contains the CMakeLists.txt file.
|
||||||
|
|
||||||
|
The argument can be prefixed or followed by various CMake
|
||||||
|
command-line options. Several useful ones are:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
-D CMAKE_INSTALL_PREFIX=path # where to install LAMMPS executable/lib if desired
|
||||||
|
-D CMAKE_BUILD_TYPE=type # type = RelWithDebInfo (default), Release, MinSizeRel, or Debug
|
||||||
|
-G output # style of output CMake generates (e.g. "Unix Makefiles" or "Ninja")
|
||||||
|
-D CMAKE_MAKE_PROGRAM=builder # name of the builder executable (e.g. when using "gmake" instead of "make")
|
||||||
|
-DVARIABLE=value # setting for a LAMMPS feature to enable
|
||||||
|
-D VARIABLE=value # ditto, but cannot come after CMakeLists.txt dir
|
||||||
|
-C path/to/preset/file # load some CMake settings before configuring
|
||||||
|
|
||||||
|
All the LAMMPS-specific -D variables that a LAMMPS build supports are
|
||||||
|
described on the pages linked to from the :doc:`Build <Build>` doc page.
|
||||||
|
All of these variable names are upper-case and their values are
|
||||||
|
lower-case, e.g. -D LAMMPS_SIZES=smallbig. For boolean values, any of
|
||||||
|
these forms can be used: yes/no, on/off, 1/0.
|
||||||
|
|
||||||
|
On Unix/Linux machines, CMake generates a Makefile by default to
|
||||||
|
perform the LAMMPS build. Alternate forms of build info can be
|
||||||
|
generated via the -G switch, e.g. Visual Studio on a Windows machine,
|
||||||
|
Xcode on MacOS, or KDevelop on Linux. Type ``cmake --help`` to see the
|
||||||
|
"Generator" styles of output your system supports.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
When CMake runs, it prints configuration info to the screen.
|
||||||
|
You should review this to verify all the features you requested were
|
||||||
|
enabled, including packages. You can also see what compilers and
|
||||||
|
compile options will be used for the build. Any errors in CMake
|
||||||
|
variable syntax will also be flagged, e.g. mis-typed variable names or
|
||||||
|
variable values.
|
||||||
|
|
||||||
|
CMake creates a CMakeCache.txt file when it runs. This stores all the
|
||||||
|
settings, so that when running CMake again you can use the current
|
||||||
|
folder '.' instead of the path to the LAMMPS cmake folder as the
|
||||||
|
required argument to the CMake command. Either way the existing
|
||||||
|
settings will be inherited unless the CMakeCache.txt file is removed.
|
||||||
|
|
||||||
|
If you later want to change a setting you can rerun cmake in the build
|
||||||
|
directory with different setting. Please note that some automatically
|
||||||
|
detected variables will not change their value when you rerun cmake.
|
||||||
|
In these cases it is usually better to first remove all the
|
||||||
|
files/directories in the build directory, or start with a fresh build
|
||||||
|
directory.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
**Curses version (terminal-style menu) of CMake**\ :
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
ccmake ../cmake
|
||||||
|
|
||||||
|
You initiate the configuration and build environment generation steps
|
||||||
|
separately. For the first you have to type **c**\ , for the second you
|
||||||
|
have to type **g**\ . You may need to type **c** multiple times, and may be
|
||||||
|
required to edit some of the entries of CMake configuration variables
|
||||||
|
in between. Please see the `ccmake manual <https://cmake.org/cmake/help/latest/manual/ccmake.1.html>`_ for
|
||||||
|
more information.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
**GUI version of CMake**\ :
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
cmake-gui ../cmake
|
||||||
|
|
||||||
|
You initiate the configuration and build environment generation steps
|
||||||
|
separately. For the first you have to click on the **Configure** button,
|
||||||
|
for the second you have to click on the **Generate** button. You may
|
||||||
|
need to click on **Configure** multiple times, and may be required to
|
||||||
|
edit some of the entries of CMake configuration variables in between.
|
||||||
|
Please see the `cmake-gui manual <https://cmake.org/cmake/help/latest/manual/cmake-gui.1.html>`_
|
||||||
|
for more information.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
**Installing CMake**
|
||||||
|
|
||||||
|
Check if your machine already has CMake installed:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
which cmake # do you have it?
|
||||||
|
which cmake3 # version 3 may have this name
|
||||||
|
cmake --version # what specific version you have
|
||||||
|
|
||||||
|
On clusters or supercomputers which use environment modules to manage
|
||||||
|
software packages, do this:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
module list # is a module for cmake already loaded?
|
||||||
|
module avail # is a module for cmake available?
|
||||||
|
module load cmake3 # load cmake module with appropriate name
|
||||||
|
|
||||||
|
Most Linux distributions offer pre-compiled cmake packages through
|
||||||
|
their package management system. If you do not have CMake or a new
|
||||||
|
enough version, you can download the latest version at
|
||||||
|
`https://cmake.org/download/ <https://cmake.org/download/>`_.
|
||||||
|
Instructions on how to install it on various platforms can be found
|
||||||
|
`on this page <https://cmake.org/install/>`_.
|
||||||
@ -1,198 +0,0 @@
|
|||||||
"Higher level section"_Build.html - "LAMMPS WWW Site"_lws - "LAMMPS
|
|
||||||
Documentation"_ld - "LAMMPS Commands"_lc :c
|
|
||||||
|
|
||||||
:link(lws,http://lammps.sandia.gov)
|
|
||||||
:link(ld,Manual.html)
|
|
||||||
:link(lc,Commands_all.html)
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
Build LAMMPS with CMake :h3
|
|
||||||
|
|
||||||
This page is a short summary of how to use CMake to build LAMMPS.
|
|
||||||
Details on CMake variables that enable specific LAMMPS build options
|
|
||||||
are given on the pages linked to from the "Build"_Build.html doc page.
|
|
||||||
|
|
||||||
Richard Berger (Temple U) has also written a "more comprehensive
|
|
||||||
guide"_https://github.com/lammps/lammps/blob/master/cmake/README.md
|
|
||||||
for how to use CMake to build LAMMPS. If you are new to CMake it is a
|
|
||||||
good place to start.
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
Building LAMMPS with CMake is a two-step process. First you use CMake
|
|
||||||
to create a build environment in a new directory. On Linux systems,
|
|
||||||
this will be based on makefiles for use with make. Then you use the
|
|
||||||
make command to build LAMMPS, which uses the created
|
|
||||||
Makefile(s). Example:
|
|
||||||
|
|
||||||
cd lammps # change to the LAMMPS distribution directory
|
|
||||||
mkdir build; cd build # create a new directory (folder) for build
|
|
||||||
cmake \[options ...\] ../cmake # configuration with (command-line) cmake
|
|
||||||
make # compilation :pre
|
|
||||||
|
|
||||||
The cmake command will detect available features, enable selected
|
|
||||||
packages and options, and will generate the build environment. The make
|
|
||||||
command will then compile and link LAMMPS, producing (by default) an
|
|
||||||
executable called "lmp" and a library called "liblammps.a" in the
|
|
||||||
"build" folder.
|
|
||||||
|
|
||||||
If your machine has multiple CPU cores (most do these days), using a
|
|
||||||
command like "make -jN" (with N being the number of available local
|
|
||||||
CPU cores) can be much faster. If you plan to do development on
|
|
||||||
LAMMPS or need to re-compile LAMMPS repeatedly, installation of the
|
|
||||||
ccache (= Compiler Cache) software may speed up repeated compilation
|
|
||||||
even more.
|
|
||||||
|
|
||||||
After compilation, you can optionally copy the LAMMPS executable and
|
|
||||||
library into your system folders (by default under $HOME/.local) with:
|
|
||||||
|
|
||||||
make install # optional, copy LAMMPS executable & library elsewhere :pre
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
There are 3 variants of CMake: a command-line version (cmake), a text mode
|
|
||||||
UI version (ccmake), and a graphical GUI version (cmake-GUI). You can use
|
|
||||||
any of them interchangeably to configure and create the LAMMPS build
|
|
||||||
environment. On Linux all the versions produce a Makefile as their
|
|
||||||
output. See more details on each below.
|
|
||||||
|
|
||||||
You can specify a variety of options with any of the 3 versions, which
|
|
||||||
affect how the build is performed and what is included in the LAMMPS
|
|
||||||
executable. Links to pages explaining all the options are listed on
|
|
||||||
the "Build"_Build.html doc page.
|
|
||||||
|
|
||||||
You must perform the CMake build system generation and compilation in
|
|
||||||
a new directory you create. It can be anywhere on your local machine.
|
|
||||||
In these Build pages we assume that you are building in a directory
|
|
||||||
called "lammps/build". You can perform separate builds independently
|
|
||||||
with different options, so long as you perform each of them in a
|
|
||||||
separate directory you create. All the auxiliary files created by one
|
|
||||||
build process (executable, object files, log files, etc) are stored in
|
|
||||||
this directory or sub-directories within it that CMake creates.
|
|
||||||
|
|
||||||
NOTE: To perform a CMake build, no packages can be installed or a
|
|
||||||
build been previously attempted in the LAMMPS src directory by using
|
|
||||||
"make" commands to "perform a conventional LAMMPS
|
|
||||||
build"_Build_make.html. CMake detects if this is the case and
|
|
||||||
generates an error, telling you to type "make no-all purge" in the src
|
|
||||||
directory to un-install all packages. The purge removes all the *.h
|
|
||||||
files auto-generated by make.
|
|
||||||
|
|
||||||
You must have CMake version 2.8 or later on your system to build
|
|
||||||
LAMMPS. A handful of LAMMPS packages (KOKKOS, LATTE, MSCG) require a
|
|
||||||
later version. CMake will print a message telling you if a later
|
|
||||||
version is required. Installation instructions for CMake are below.
|
|
||||||
|
|
||||||
After the initial build, if you edit LAMMPS source files, or add your
|
|
||||||
own new files to the source directory, you can just re-type make from
|
|
||||||
your build directory and it will re-compile only the files that have
|
|
||||||
changed. If you want to change CMake options you can run cmake (or
|
|
||||||
ccmake or cmake-gui) again from the same build directory and alter
|
|
||||||
various options; see details below. Or you can remove the entire build
|
|
||||||
folder, recreate the directory and start over.
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
[Command-line version of CMake]:
|
|
||||||
|
|
||||||
cmake \[options ...\] /path/to/lammps/cmake # build from any dir
|
|
||||||
cmake \[options ...\] ../cmake # build from lammps/build :pre
|
|
||||||
|
|
||||||
The cmake command takes one required argument, which is the LAMMPS
|
|
||||||
cmake directory which contains the CMakeLists.txt file.
|
|
||||||
|
|
||||||
The argument can be preceeded or followed by various CMake
|
|
||||||
command-line options. Several useful ones are:
|
|
||||||
|
|
||||||
-D CMAKE_INSTALL_PREFIX=path # where to install LAMMPS executable/lib if desired
|
|
||||||
-D CMAKE_BUILD_TYPE=type # type = Release or Debug
|
|
||||||
-G output # style of output CMake generates
|
|
||||||
-DVARIABLE=value # setting for a LAMMPS feature to enable
|
|
||||||
-D VARIABLE=value # ditto, but cannot come after CMakeLists.txt dir
|
|
||||||
-C path/to/preset/file # load some CMake settings before configuring :pre
|
|
||||||
|
|
||||||
All the LAMMPS-specific -D variables that a LAMMPS build supports are
|
|
||||||
described on the pages linked to from the "Build"_Build.html doc page.
|
|
||||||
All of these variable names are upper-case and their values are
|
|
||||||
lower-case, e.g. -D LAMMPS_SIZES=smallbig. For boolean values, any of
|
|
||||||
these forms can be used: yes/no, on/off, 1/0.
|
|
||||||
|
|
||||||
On Unix/Linux machines, CMake generates a Makefile by default to
|
|
||||||
perform the LAMMPS build. Alternate forms of build info can be
|
|
||||||
generated via the -G switch, e.g. Visual Studio on a Windows machine,
|
|
||||||
Xcode on MacOS, or KDevelop on Linux. Type "cmake --help" to see the
|
|
||||||
"Generator" styles of output your system supports.
|
|
||||||
|
|
||||||
NOTE: When CMake runs, it prints configuration info to the screen.
|
|
||||||
You should review this to verify all the features you requested were
|
|
||||||
enabled, including packages. You can also see what compilers and
|
|
||||||
compile options will be used for the build. Any errors in CMake
|
|
||||||
variable syntax will also be flagged, e.g. mis-typed variable names or
|
|
||||||
variable values.
|
|
||||||
|
|
||||||
CMake creates a CMakeCache.txt file when it runs. This stores all the
|
|
||||||
settings, so that when running CMake again you can use the current
|
|
||||||
folder '.' instead of the path to the LAMMPS cmake folder as the
|
|
||||||
required argument to the CMake command. Either way the existing
|
|
||||||
settings will be inherited unless the CMakeCache.txt file is removed.
|
|
||||||
|
|
||||||
If you later want to change a setting you can rerun cmake in the build
|
|
||||||
directory with different setting. Please note that some automatically
|
|
||||||
detected variables will not change their value when you rerun cmake.
|
|
||||||
In these cases it is usually better to first remove all the
|
|
||||||
files/directories in the build directory, or start with a fresh build
|
|
||||||
directory.
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
[Curses version (terminal-style menu) of CMake]:
|
|
||||||
|
|
||||||
ccmake ../cmake :pre
|
|
||||||
|
|
||||||
You initiate the configuration and build environment generation steps
|
|
||||||
separately. For the first you have to type [c], for the second you
|
|
||||||
have to type [g]. You may need to type [c] multiple times, and may be
|
|
||||||
required to edit some of the entries of CMake configuration variables
|
|
||||||
in between. Please see the "ccmake
|
|
||||||
manual"_https://cmake.org/cmake/help/latest/manual/ccmake.1.html for
|
|
||||||
more information.
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
[GUI version of CMake]:
|
|
||||||
|
|
||||||
cmake-gui ../cmake :pre
|
|
||||||
|
|
||||||
You initiate the configuration and build environment generation steps
|
|
||||||
separately. For the first you have to click on the [Configure] button,
|
|
||||||
for the second you have to click on the [Generate] button. You may
|
|
||||||
need to click on [Configure] multiple times, and may be required to
|
|
||||||
edit some of the entries of CMake configuration variables in between.
|
|
||||||
Please see the "cmake-gui
|
|
||||||
manual"_https://cmake.org/cmake/help/latest/manual/cmake-gui.1.html
|
|
||||||
for more information.
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
[Installing CMake]
|
|
||||||
|
|
||||||
Check if your machine already has CMake installed:
|
|
||||||
|
|
||||||
which cmake # do you have it?
|
|
||||||
which cmake3 # version 3 may have this name
|
|
||||||
cmake --version # what specific version you have :pre
|
|
||||||
|
|
||||||
On clusters or supercomputers which use environment modules to manage
|
|
||||||
software packages, do this:
|
|
||||||
|
|
||||||
module list # is a cmake module already loaded?
|
|
||||||
module avail # is a cmake module available?
|
|
||||||
module load cmake3 # load cmake module with appropriate name :pre
|
|
||||||
|
|
||||||
Most Linux distributions offer pre-compiled cmake packages through
|
|
||||||
their package management system. If you do not have CMake or a new
|
|
||||||
enough version, you can download the latest version at
|
|
||||||
"https://cmake.org/download/"_https://cmake.org/download/.
|
|
||||||
Instructions on how to install it on various platforms can be found
|
|
||||||
"on this page"_https://cmake.org/install/.
|
|
||||||
107
doc/src/Build_development.rst
Normal file
107
doc/src/Build_development.rst
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
Development build options (CMake only)
|
||||||
|
======================================
|
||||||
|
|
||||||
|
The CMake build of LAMMPS has a few extra options which are useful during
|
||||||
|
development, testing or debugging.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. _compilation:
|
||||||
|
|
||||||
|
Verify compilation flags
|
||||||
|
------------------------------------------
|
||||||
|
|
||||||
|
Sometimes it is necessary to verify the complete sequence of compilation flags
|
||||||
|
generated by the CMake build. To enable a more verbose output during
|
||||||
|
compilation you can use the following option.
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
-D CMAKE_VERBOSE_MAKEFILE=value # value = no (default) or yes
|
||||||
|
|
||||||
|
Another way of doing this without reconfiguration is calling make with variable VERBOSE set to 1:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
make VERBOSE=1
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. _sanitizer:
|
||||||
|
|
||||||
|
Address, Undefined Behavior, and Thread Sanitizer Support
|
||||||
|
-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Compilers such as GCC and Clang support generating instrumented binaries
|
||||||
|
which use different sanitizer libraries to detect problems in code
|
||||||
|
during run-time. They can detect issues like:
|
||||||
|
|
||||||
|
- `memory leaks <https://clang.llvm.org/docs/AddressSanitizer.html>`_
|
||||||
|
- `undefined behavior <https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html>`_
|
||||||
|
- `data races <https://clang.llvm.org/docs/ThreadSanitizer.html>`_
|
||||||
|
|
||||||
|
Please note that this kind of instrumentation usually comes with a small
|
||||||
|
performance hit (much less than using tools like `Valgrind <valgrind_>`_).
|
||||||
|
The to enable these features additional compiler flags need to be added
|
||||||
|
to the compilation and linking stages. This is most easily done through
|
||||||
|
setting the ``CMAKE_TUNE_FLAGS`` variable during configuration. Examples:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
-D CMAKE_TUNE_FLAGS=-fsanitize=address # enable address sanitizer / memory leak checker
|
||||||
|
-D CMAKE_TUNE_FLAGS=-fsanitize=undefined # enable undefined behavior sanitizer
|
||||||
|
-D CMAKE_TUNE_FLAGS=-fsanitize=thread # enable thread sanitizer
|
||||||
|
|
||||||
|
.. _valgrind: https://valgrind.org
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. _testing:
|
||||||
|
|
||||||
|
Code Coverage and Testing
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
We do extensive regression testing of the LAMMPS code base on a continuous
|
||||||
|
basis. Some of the logic to do this has been added to the CMake build so
|
||||||
|
developers can run the tests directly on their workstation.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
this is incomplete and only represents a small subset of tests that we run
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
-D ENABLE_TESTING=value # enable simple run tests of LAMMPS, value = no (default) or yes
|
||||||
|
-D LAMMPS_TESTING_SOURCE_DIR=path # path to lammps-testing repository (option if in custom location)
|
||||||
|
-D LAMMPS_TESTING_GIT_TAG=value # version of lammps-testing repository that should be used, value = master (default) or custom git commit or tag
|
||||||
|
|
||||||
|
If you enable testing in the CMake build it will create an additional target called "test". You can run them with:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
make test
|
||||||
|
|
||||||
|
The test cases used come from the lammps-testing repository. They are
|
||||||
|
derivatives of the examples folder with some modifications to make the run
|
||||||
|
faster.
|
||||||
|
|
||||||
|
You can also collect code coverage metrics while running the tests by enabling
|
||||||
|
coverage support during building.
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
-D ENABLE_COVERAGE=value # enable coverage measurements, value = no (default) or yes
|
||||||
|
|
||||||
|
This will also add the following targets to generate coverage reports after running the LAMMPS executable:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
make test # run tests first!
|
||||||
|
make gen_coverage_html # generate coverage report in HTML format
|
||||||
|
make gen_coverage_xml # generate coverage report in XML format
|
||||||
|
|
||||||
|
These reports require GCOVR to be installed. The easiest way to do this to install it via pip:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
pip install git+https://github.com/gcovr/gcovr.git
|
||||||
1415
doc/src/Build_extras.rst
Normal file
1415
doc/src/Build_extras.rst
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
250
doc/src/Build_link.rst
Normal file
250
doc/src/Build_link.rst
Normal file
@ -0,0 +1,250 @@
|
|||||||
|
Link LAMMPS as a library to another code
|
||||||
|
========================================
|
||||||
|
|
||||||
|
LAMMPS can be used as a library by another application, including
|
||||||
|
Python scripts. The files src/library.cpp and library.h define the
|
||||||
|
C-style API for using LAMMPS as a library. See the :doc:`Howto
|
||||||
|
library <Howto_library>` doc page for a description of the interface
|
||||||
|
and how to extend it for your needs.
|
||||||
|
|
||||||
|
The :doc:`Build basics <Build_basics>` doc page explains how to build
|
||||||
|
LAMMPS as either a shared or static library. This results in one of
|
||||||
|
these 2 files:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
liblammps.so # shared library
|
||||||
|
liblammps.a # static library
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
Care should be taken to use the same MPI library for the calling
|
||||||
|
code and the LAMMPS library. The library.h file includes mpi.h and
|
||||||
|
uses definitions from it so those need to be available and
|
||||||
|
consistent. When LAMMPS is compiled with the MPI STUBS library,
|
||||||
|
then its mpi.h file needs to be included. While it is technically
|
||||||
|
possible to use a full MPI library in the calling code and link to
|
||||||
|
a serial LAMMPS library compiled with MPI STUBS, it is recommended
|
||||||
|
to use the *same* MPI library for both, and then use MPI_Comm_split()
|
||||||
|
in the calling code to pass a suitable communicator with a subset
|
||||||
|
of MPI ranks to the function creating the LAMMPS instance.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
**Link with LAMMPS as a static library**\ :
|
||||||
|
|
||||||
|
The calling application can link to LAMMPS as a static library with
|
||||||
|
compilation and link commands as in the examples shown below. These
|
||||||
|
are examples for a code written in C in the file *caller.c*.
|
||||||
|
The benefit of linking to a static library is, that the resulting
|
||||||
|
executable is independent of that library since all required
|
||||||
|
executable code from the library is copied into the calling executable.
|
||||||
|
|
||||||
|
*CMake build*\ :
|
||||||
|
|
||||||
|
This assumes that LAMMPS has been configured with "-D BUILD_LIB=yes"
|
||||||
|
and installed with "make install" and the PKG_CONFIG_PATH environment
|
||||||
|
variable updated to include the *liblammps.pc* file installed into the
|
||||||
|
configured destination folder, if needed. The commands to compile and
|
||||||
|
link the coupled executable are then:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
mpicc -c -O $(pkgconf liblammps --cflags) caller.c
|
||||||
|
mpicxx -o caller caller.o -$(pkgconf liblammps --libs)
|
||||||
|
|
||||||
|
*Traditional make*\ :
|
||||||
|
|
||||||
|
This assumes that LAMMPS has been compiled in the folder
|
||||||
|
"${HOME}/lammps/src" with "make mode=lib mpi". The commands to compile
|
||||||
|
and link the coupled executable are then:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
mpicc -c -O -I${HOME}/lammps/src caller.c
|
||||||
|
mpicxx -o caller caller.o -L${HOME}/lammps/src -llammps
|
||||||
|
|
||||||
|
The *-I* argument is the path to the location of the *library.h*
|
||||||
|
header file containing the interface to the LAMMPS C-style library
|
||||||
|
interface. The *-L* argument is the path to where the *liblammps.a*
|
||||||
|
file is located. The *-llammps* argument is shorthand for telling the
|
||||||
|
compiler to link the file *liblammps.a*\ .
|
||||||
|
|
||||||
|
However, it is only as simple as shown above for the case of a plain
|
||||||
|
LAMMPS library without any optional packages that depend on libraries
|
||||||
|
(bundled or external). Otherwise, you need to include all flags,
|
||||||
|
libraries, and paths for the coupled executable, that are also
|
||||||
|
required to link the LAMMPS executable.
|
||||||
|
|
||||||
|
*CMake build*\ :
|
||||||
|
|
||||||
|
When using CMake, additional libraries with sources in the lib folder
|
||||||
|
are built, but not included in liblammps.a and (currently) not
|
||||||
|
installed with "make install" and not included in the *pkgconfig*
|
||||||
|
configuration file. They can be found in the top level build folder,
|
||||||
|
but you have to determine the necessary link flags manually. It is
|
||||||
|
therefore recommended to either use the traditional make procedure to
|
||||||
|
build and link with a static library or build and link with a shared
|
||||||
|
library instead.
|
||||||
|
|
||||||
|
*Traditional make*\ :
|
||||||
|
|
||||||
|
After you have compiled a static LAMMPS library using the conventional
|
||||||
|
build system for example with "make mode=lib serial". And you also
|
||||||
|
have installed the POEMS package after building its bundled library in
|
||||||
|
lib/poems. Then the commands to build and link the coupled executable
|
||||||
|
change to:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
gcc -c -O -I${HOME}/lammps/src/STUBS -I${HOME}/lammps/src -caller.c
|
||||||
|
g++ -o caller caller.o -L${HOME}/lammps/lib/poems \
|
||||||
|
-L${HOME}/lammps/src/STUBS -L${HOME}/lammps/src -llammps -lpoems -lmpi_stubs
|
||||||
|
|
||||||
|
Note, that you need to link with "g++" instead of "gcc", since LAMMPS
|
||||||
|
is C++ code. You can display the currently applied settings for building
|
||||||
|
LAMMPS for the "serial" machine target by using the command:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
make mode=print serial
|
||||||
|
|
||||||
|
Which should output something like:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
# Compiler:
|
||||||
|
CXX=g++
|
||||||
|
# Linker:
|
||||||
|
LD=g++
|
||||||
|
# Compilation:
|
||||||
|
CXXFLAGS=-g -O3 -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 -I${HOME}/lammps/lib/poems -I${HOME}/lammps/src/STUBS
|
||||||
|
# Linking:
|
||||||
|
LDFLAGS=-g -O
|
||||||
|
# Libraries:
|
||||||
|
LDLIBS=-L${HOME}/lammps/lib/poems -L${HOME}/lammps/src/STUBS -lpoems -lmpi_stubs
|
||||||
|
|
||||||
|
From this you can gather the necessary paths and flags. With
|
||||||
|
makefiles for other *machine* configurations you need to do the
|
||||||
|
equivalent and replace "serial" with the corresponding *machine* name
|
||||||
|
of the makefile.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
**Link with LAMMPS as a shared library**\ :
|
||||||
|
|
||||||
|
When linking to LAMMPS built as a shared library, the situation
|
||||||
|
becomes much simpler, as all dependent libraries and objects are
|
||||||
|
included in the shared library, which is - technically speaking -
|
||||||
|
effectively a regular LAMMPS executable that is missing the `main()`
|
||||||
|
function. Thus those libraries need not to be specified when linking
|
||||||
|
the calling executable. Only the *-I* flags are needed. So the
|
||||||
|
example case from above of the serial version static LAMMPS library
|
||||||
|
with the POEMS package installed becomes:
|
||||||
|
|
||||||
|
*CMake build*\ :
|
||||||
|
|
||||||
|
The commands with a shared LAMMPS library compiled with the CMake
|
||||||
|
build process are the same as for the static library.
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
mpicc -c -O $(pkgconf liblammps --cflags) caller.c
|
||||||
|
mpicxx -o caller caller.o -$(pkgconf --libs)
|
||||||
|
|
||||||
|
*Traditional make*\ :
|
||||||
|
|
||||||
|
The commands with a shared LAMMPS library compiled with the
|
||||||
|
traditional make build using "make mode=shlib serial" becomes:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
gcc -c -O -I${HOME}/lammps/src/STUBS -I${HOME}/lammps/src -caller.c
|
||||||
|
g++ -o caller caller.o -L${HOME}/lammps/src -llammps
|
||||||
|
|
||||||
|
*Locating liblammps.so at runtime*\ :
|
||||||
|
|
||||||
|
However, now the `liblammps.so` file is required at runtime and needs
|
||||||
|
to be in a folder, where the shared linker program of the operating
|
||||||
|
system can find it. This would be either a folder like "/usr/local/lib64"
|
||||||
|
or "${HOME}/.local/lib64" or a folder pointed to by the LD_LIBRARY_PATH
|
||||||
|
environment variable. You can type
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
printenv LD_LIBRARY_PATH
|
||||||
|
|
||||||
|
to see what directories are in that list.
|
||||||
|
|
||||||
|
Or you can add the LAMMPS src directory (or the directory you performed
|
||||||
|
a CMake style build in) to your LD_LIBRARY_PATH, so that the current
|
||||||
|
version of the shared library is always available to programs that use it.
|
||||||
|
|
||||||
|
For the Bourne or Korn shells (/bin/sh, /bin/ksh, /bin/bash etc.), you
|
||||||
|
would add something like this to your ~/.profile file:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
LD_LIBRARY_PATH ${LD_LIBRARY_PATH-/usr/lib64}:${HOME}/lammps/src
|
||||||
|
export LD_LIBRARY_PATH
|
||||||
|
|
||||||
|
For the csh or tcsh shells, you would equivalently add something like this
|
||||||
|
to your ~/.cshrc file:
|
||||||
|
|
||||||
|
.. code-block:: csh
|
||||||
|
|
||||||
|
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${HOME}/lammps/src
|
||||||
|
|
||||||
|
You can verify whether all required shared libraries are found with the
|
||||||
|
`ldd` tool. Example:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ LD_LIBRARY_PATH=/home/user/lammps/src ldd caller
|
||||||
|
linux-vdso.so.1 (0x00007ffe729e0000)
|
||||||
|
liblammps.so => /home/user/lammps/src/liblammps.so (0x00007fc91bb9e000)
|
||||||
|
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fc91b984000)
|
||||||
|
libm.so.6 => /lib64/libm.so.6 (0x00007fc91b83e000)
|
||||||
|
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fc91b824000)
|
||||||
|
libc.so.6 => /lib64/libc.so.6 (0x00007fc91b65b000)
|
||||||
|
/lib64/ld-linux-x86-64.so.2 (0x00007fc91c094000)
|
||||||
|
|
||||||
|
If a required library is missing, you would get a 'not found' entry:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ ldd caller
|
||||||
|
linux-vdso.so.1 (0x00007ffd672fe000)
|
||||||
|
liblammps.so => not found
|
||||||
|
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fb7c7e86000)
|
||||||
|
libm.so.6 => /usr/lib64/libm.so.6 (0x00007fb7c7d40000)
|
||||||
|
libgcc_s.so.1 => /usr/lib64/libgcc_s.so.1 (0x00007fb7c7d26000)
|
||||||
|
libc.so.6 => /usr/lib64/libc.so.6 (0x00007fb7c7b5d000)
|
||||||
|
/lib64/ld-linux-x86-64.so.2 (0x00007fb7c80a2000)
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
**Calling the LAMMPS library**\ :
|
||||||
|
|
||||||
|
Either flavor of library (static or shared) allows one or more LAMMPS
|
||||||
|
objects to be instantiated from the calling program. When used from a
|
||||||
|
C++ program, most of the symbols and functions in LAMMPS are wrapped
|
||||||
|
in a LAMMPS_NS namespace; you can safely use any of its classes and
|
||||||
|
methods from within the calling code, as needed, and you will not incur
|
||||||
|
conflicts with functions and variables in your code that share the name.
|
||||||
|
This, however, does not extend to all additional libraries bundled with
|
||||||
|
LAMMPS in the lib folder and some of the low-level code of some packages.
|
||||||
|
|
||||||
|
To be compatible with C, Fortran, Python programs, the library has a simple
|
||||||
|
C-style interface, provided in src/library.cpp and src/library.h.
|
||||||
|
|
||||||
|
See the :doc:`Python library <Python_library>` doc page for a
|
||||||
|
description of the Python interface to LAMMPS, which wraps the C-style
|
||||||
|
interface from a shared library through the `ctypes python module <ctypes_>`_.
|
||||||
|
|
||||||
|
See the sample codes in examples/COUPLE/simple for examples of C++ and
|
||||||
|
C and Fortran codes that invoke LAMMPS through its library interface.
|
||||||
|
Other examples in the COUPLE directory use coupling ideas discussed on
|
||||||
|
the :doc:`Howto couple <Howto_couple>` doc page.
|
||||||
|
|
||||||
|
.. _ctypes: https://docs.python.org/3/library/ctypes.html
|
||||||
@ -1,85 +0,0 @@
|
|||||||
"Higher level section"_Build.html - "LAMMPS WWW Site"_lws - "LAMMPS
|
|
||||||
Documentation"_ld - "LAMMPS Commands"_lc :c
|
|
||||||
|
|
||||||
:link(lws,http://lammps.sandia.gov)
|
|
||||||
:link(ld,Manual.html)
|
|
||||||
:link(lc,Commands_all.html)
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
Link LAMMPS as a library to another code :h3
|
|
||||||
|
|
||||||
LAMMPS can be used as a library by another application, including
|
|
||||||
Python scripts. The files src/library.cpp and library.h define the
|
|
||||||
C-style API for using LAMMPS as a library. See the "Howto
|
|
||||||
library"_Howto_library.html doc page for a description of the
|
|
||||||
interface and how to extend it for your needs.
|
|
||||||
|
|
||||||
The "Build basics"_Build_basics.html doc page explains how to build
|
|
||||||
LAMMPS as either a shared or static library. This results in one of
|
|
||||||
these 2 files:
|
|
||||||
|
|
||||||
liblammps.so # shared library
|
|
||||||
liblammps.a # static library
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
[Link with LAMMPS as a static library]:
|
|
||||||
|
|
||||||
The calling application can link to LAMMPS as a static library with a
|
|
||||||
link command like this:
|
|
||||||
|
|
||||||
g++ caller.o -L/home/sjplimp/lammps/src -llammps -o caller
|
|
||||||
|
|
||||||
The -L argument is the path to where the liblammps.a file is. The
|
|
||||||
-llammps argument is shorthand for the file liblammps.a.
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
[Link with LAMMPS as a shared library]:
|
|
||||||
|
|
||||||
If you wish to link to liblammps.so, the operating system finds shared
|
|
||||||
libraries to load at run-time using the environment variable
|
|
||||||
LD_LIBRARY_PATH. To enable this you can do one of two things:
|
|
||||||
|
|
||||||
(1) Copy the liblammps.so file to a location the system can find it,
|
|
||||||
such as /usr/local/lib. I.e. a directory already listed in your
|
|
||||||
LD_LIBRARY_PATH variable. You can type
|
|
||||||
|
|
||||||
printenv LD_LIBRARY_PATH :pre
|
|
||||||
|
|
||||||
to see what directories are in that list.
|
|
||||||
|
|
||||||
(2) Add the LAMMPS src directory (or the directory you perform CMake
|
|
||||||
build in) to your LD_LIBRARY_PATH, so that the current version of the
|
|
||||||
shared library is always available to programs that use it.
|
|
||||||
|
|
||||||
For the csh or tcsh shells, you would add something like this to your
|
|
||||||
~/.cshrc file:
|
|
||||||
|
|
||||||
setenv LD_LIBRARY_PATH $\{LD_LIBRARY_PATH\}:/home/sjplimp/lammps/src :pre
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
[Calling the LAMMPS library]:
|
|
||||||
|
|
||||||
Either flavor of library (static or shared) allows one or more LAMMPS
|
|
||||||
objects to be instantiated from the calling program.
|
|
||||||
|
|
||||||
When used from a C++ program, all of LAMMPS is wrapped in a LAMMPS_NS
|
|
||||||
namespace; you can safely use any of its classes and methods from
|
|
||||||
within the calling code, as needed.
|
|
||||||
|
|
||||||
When used from a C or Fortran program, the library has a simple
|
|
||||||
C-style interface, provided in src/library.cpp and src/library.h.
|
|
||||||
|
|
||||||
See the "Python library"_Python_library.html doc page for a
|
|
||||||
description of the Python interface to LAMMPS, which wraps the C-style
|
|
||||||
interface.
|
|
||||||
|
|
||||||
See the sample codes in examples/COUPLE/simple for examples of C++ and
|
|
||||||
C and Fortran codes that invoke LAMMPS through its library interface.
|
|
||||||
Other examples in the COUPLE directory use coupling ideas discussed on
|
|
||||||
the "Howto couple"_Howto_couple.html doc page.
|
|
||||||
|
|
||||||
|
|
||||||
105
doc/src/Build_make.rst
Normal file
105
doc/src/Build_make.rst
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
Build LAMMPS with make
|
||||||
|
======================
|
||||||
|
|
||||||
|
Building LAMMPS with traditional makefiles requires that you have a
|
||||||
|
Makefile."machine" file appropriate for your system in the src/MAKE,
|
||||||
|
src/MAKE/MACHINES, src/MAKE/OPTIONS, or src/MAKE/MINE directory (see
|
||||||
|
below). It can include various options for customizing your LAMMPS
|
||||||
|
build with a number of global compilation options and features.
|
||||||
|
|
||||||
|
Those makefiles are written for and tested with GNU make and may not
|
||||||
|
be compatible with other make programs. In most cases, if the "make"
|
||||||
|
program is not GNU make, then there will be a GNU make program
|
||||||
|
available under the name "gmake". If GNU make or a compatible make is
|
||||||
|
not available, you may have to first install it or switch to building
|
||||||
|
with :doc:`CMake <Build_cmake>`. The makefiles of the traditional
|
||||||
|
make based build process and the scripts they are calling expect a few
|
||||||
|
additional tools to be available and functioning.
|
||||||
|
|
||||||
|
* a Bourne shell compatible "Unix" shell program (often this is bash)
|
||||||
|
* a few shell utilities: ls, mv, ln, rm, grep, sed, tr, cat, touch, diff, dirname
|
||||||
|
* python (optional, required for "make lib-XXX" in the src folder)
|
||||||
|
|
||||||
|
To include LAMMPS packages (i.e. optional commands and styles) you
|
||||||
|
must enable them first, as discussed on the :doc:`Build package
|
||||||
|
<Build_package>` doc page. If a packages requires (provided or
|
||||||
|
external) libraries, you must configure and build those libraries
|
||||||
|
**before** building LAMMPS itself and especially **before** enabling
|
||||||
|
such a package with "make yes-<package>". Building :doc:`LAMMPS
|
||||||
|
with CMake <Build_cmake>` can automate much of this for many types of
|
||||||
|
machines, especially workstations, desktops, and laptops, so we suggest
|
||||||
|
you try it first when building LAMMPS in those cases.
|
||||||
|
|
||||||
|
The commands below perform a default LAMMPS build, producing the LAMMPS
|
||||||
|
executable lmp_serial and lmp_mpi in lammps/src:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
cd lammps/src
|
||||||
|
make serial # build a serial LAMMPS executable
|
||||||
|
make mpi # build a parallel LAMMPS executable with MPI
|
||||||
|
make # see a variety of make options
|
||||||
|
|
||||||
|
This initial compilation can take a long time, since LAMMPS is a large
|
||||||
|
project with many features. If your machine has multiple CPU cores
|
||||||
|
(most do these days), using a command like "make -jN mpi" (with N =
|
||||||
|
the number of available CPU cores) can be much faster. If you plan to
|
||||||
|
do development on LAMMPS or need to re-compile LAMMPS repeatedly, the
|
||||||
|
installation of the ccache (= Compiler Cache) software may speed up
|
||||||
|
compilation even more.
|
||||||
|
|
||||||
|
After the initial build, whenever you edit LAMMPS source files, or add
|
||||||
|
or remove new files to the source directory (e.g. by installing or
|
||||||
|
uninstalling packages), you must re-compile and relink the LAMMPS
|
||||||
|
executable with the same "make" command. This makefiles dependencies
|
||||||
|
should insure that only the subset of files that need to be are
|
||||||
|
re-compiled.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
Before the actual compilation starts, LAMMPS will perform several
|
||||||
|
steps to collect information from the configuration and setup that
|
||||||
|
is then embedded into the executable. When you build LAMMPS for
|
||||||
|
the first time, it will also compile a tool to quickly assemble
|
||||||
|
a list of dependencies, that are required for the make program to
|
||||||
|
correctly detect which parts need to be recompiled after changes
|
||||||
|
were made to the sources.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
The lammps/src/MAKE tree contains the Makefile.machine files included
|
||||||
|
in the LAMMPS distribution. Typing "make machine" uses
|
||||||
|
*Makefile.machine*\ . Thus the "make serial" or "make mpi" lines above
|
||||||
|
use Makefile.serial and Makefile.mpi, respectively. Other makefiles
|
||||||
|
are in these directories:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
OPTIONS # Makefiles which enable specific options
|
||||||
|
MACHINES # Makefiles for specific machines
|
||||||
|
MINE # customized Makefiles you create (you may need to create this folder)
|
||||||
|
|
||||||
|
Typing "make" lists all the available Makefile.machine files. A file
|
||||||
|
with the same name can appear in multiple folders (not a good idea).
|
||||||
|
The order the directories are searched is as follows: src/MAKE/MINE,
|
||||||
|
src/MAKE, src/MAKE/OPTIONS, src/MAKE/MACHINES. This gives preference
|
||||||
|
to a customized file you put in src/MAKE/MINE.
|
||||||
|
|
||||||
|
Makefiles you may wish to try include these (some require a package
|
||||||
|
first be installed). Many of these include specific compiler flags
|
||||||
|
for optimized performance. Please note, however, that some of these
|
||||||
|
customized machine Makefile are contributed by users. Since both
|
||||||
|
compilers, OS configurations, and LAMMPS itself keep changing, their
|
||||||
|
settings may become outdated:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
make mac # build serial LAMMPS on a Mac
|
||||||
|
make mac_mpi # build parallel LAMMPS on a Mac
|
||||||
|
make intel_cpu # build with the USER-INTEL package optimized for CPUs
|
||||||
|
make knl # build with the USER-INTEL package optimized for KNLs
|
||||||
|
make opt # build with the OPT package optimized for CPUs
|
||||||
|
make omp # build with the USER-OMP package optimized for OpenMP
|
||||||
|
make kokkos_omp # build with the KOKKOS package for OpenMP
|
||||||
|
make kokkos_cuda_mpi # build with the KOKKOS package for GPUs
|
||||||
|
make kokkos_phi # build with the KOKKOS package for KNLs
|
||||||
@ -1,85 +0,0 @@
|
|||||||
"Higher level section"_Build.html - "LAMMPS WWW Site"_lws - "LAMMPS
|
|
||||||
Documentation"_ld - "LAMMPS Commands"_lc :c
|
|
||||||
|
|
||||||
:link(lws,http://lammps.sandia.gov)
|
|
||||||
:link(ld,Manual.html)
|
|
||||||
:link(lc,Commands_all.html)
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
Build LAMMPS with make :h3
|
|
||||||
|
|
||||||
Building LAMMPS with traditional makefiles requires that you have a
|
|
||||||
Makefile."machine" file appropriate for your system in the src/MAKE,
|
|
||||||
src/MAKE/MACHINES, src/MAKE/OPTIONS, or src/MAKE/MINE directory (see
|
|
||||||
below). It can include various options for customizing your LAMMPS
|
|
||||||
build with a number of global compilation options and features.
|
|
||||||
|
|
||||||
To include LAMMPS packages (i.e. optional commands and styles) you
|
|
||||||
must install them first, as discussed on the "Build
|
|
||||||
package"_Build_package.html doc page. If the packages require
|
|
||||||
provided or external libraries, you must build those libraries before
|
|
||||||
building LAMMPS. Building "LAMMPS with CMake"_Build_cmake.html can
|
|
||||||
automate all of this for many types of machines, especially
|
|
||||||
workstations, desktops and laptops, so we suggest you try it first.
|
|
||||||
|
|
||||||
These commands perform a default LAMMPS build, producing the LAMMPS
|
|
||||||
executable lmp_serial or lmp_mpi in lammps/src:
|
|
||||||
|
|
||||||
cd lammps/src
|
|
||||||
make serial # build a serial LAMMPS executable
|
|
||||||
make mpi # build a parallel LAMMPS executable with MPI
|
|
||||||
make # see a variety of make options :pre
|
|
||||||
|
|
||||||
This initial compilation can take a long time, since LAMMPS is a large
|
|
||||||
project with many features. If your machine has multiple CPU cores
|
|
||||||
(most do these days), using a command like "make -jN mpi" (with N =
|
|
||||||
the number of available CPU cores) can be much faster. If you plan to
|
|
||||||
do development on LAMMPS or need to re-compile LAMMPS repeatedly, the
|
|
||||||
installation of the ccache (= Compiler Cache) software may speed up
|
|
||||||
compilation even more.
|
|
||||||
|
|
||||||
After the initial build, whenever you edit LAMMPS source files, or add
|
|
||||||
or remove new files to the source directory (e.g. by installing or
|
|
||||||
uninstalling packages), you must re-compile and relink the LAMMPS
|
|
||||||
executable with the same "make" command. This makefiles dependencies
|
|
||||||
should insure that only the subset of files that need to be are
|
|
||||||
re-compiled.
|
|
||||||
|
|
||||||
NOTE: When you build LAMMPS for the first time, a long list of *.d
|
|
||||||
files will be printed out rapidly. This is not an error; it is the
|
|
||||||
Makefile doing its normal creation of dependencies.
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
The lammps/src/MAKE tree contains all the Makefile.machine files
|
|
||||||
included in the LAMMPS distribution. Typing "make machine" uses
|
|
||||||
Makefile.machine. Thus the "make serial" or "make mpi" lines above
|
|
||||||
use Makefile.serial and Makefile.mpi. Others are in these dirs:
|
|
||||||
|
|
||||||
OPTIONS # Makefiles which enable specific options
|
|
||||||
MACHINES # Makefiles for specific machines
|
|
||||||
MINE # customized Makefiles you create (you may need to create this folder) :pre
|
|
||||||
|
|
||||||
Typing "make" lists all the available Makefile.machine files. A file
|
|
||||||
with the same name can appear in multiple folders (not a good idea).
|
|
||||||
The order the dirs are searched is as follows: src/MAKE/MINE,
|
|
||||||
src/MAKE, src/MAKE/OPTIONS, src/MAKE/MACHINES. This gives preference
|
|
||||||
to a customized file you put in src/MAKE/MINE.
|
|
||||||
|
|
||||||
Makefiles you may wish to try include these (some require a package
|
|
||||||
first be installed). Many of these include specific compiler flags
|
|
||||||
for optimized performance. Please note, however, that some of these
|
|
||||||
customized machine Makefile are contributed by users. Since both
|
|
||||||
compilers, OS configurations, and LAMMPS itself keep changing, their
|
|
||||||
settings may become outdated:
|
|
||||||
|
|
||||||
make mac # build serial LAMMPS on a Mac
|
|
||||||
make mac_mpi # build parallel LAMMPS on a Mac
|
|
||||||
make intel_cpu # build with the USER-INTEL package optimized for CPUs
|
|
||||||
make knl # build with the USER-INTEL package optimized for KNLs
|
|
||||||
make opt # build with the OPT package optimized for CPUs
|
|
||||||
make omp # build with the USER-OMP package optimized for OpenMP
|
|
||||||
make kokkos_omp # build with the KOKKOS package for OpenMP
|
|
||||||
make kokkos_cuda_mpi # build with the KOKKOS package for GPUs
|
|
||||||
make kokkos_phi # build with the KOKKOS package for KNLs :pre
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user