update style guide and requirements/suggestions for contributions
This commit is contained in:
58
.github/CONTRIBUTING.md
vendored
58
.github/CONTRIBUTING.md
vendored
@ -5,8 +5,9 @@ Thank your for considering to contribute to the LAMMPS software project.
|
|||||||
The following is a set of guidelines as well as explanations of policies and work flows for contributing to the LAMMPS molecular dynamics software project. These guidelines focus on submitting issues or pull requests on the LAMMPS GitHub project.
|
The following is a set of guidelines as well as explanations of policies and work flows for contributing to the LAMMPS molecular dynamics software project. These guidelines focus on submitting issues or pull requests on the LAMMPS GitHub project.
|
||||||
|
|
||||||
Thus please also have a look at:
|
Thus please also have a look at:
|
||||||
* [The Section on submitting new features for inclusion in LAMMPS of the Manual](https://lammps.sandia.gov/doc/Modify_contribute.html)
|
* [The guide for submitting new features in the LAMMPS manual](https://lammps.sandia.gov/doc/Modify_contribute.html)
|
||||||
* [The LAMMPS GitHub Tutorial in the Manual](http://lammps.sandia.gov/doc/Howto_github.html)
|
* [The guide on programming style and requirement in the LAMMPS manual](https://lammps.sandia.gov/doc/Modify_contribute.html)
|
||||||
|
* [The GitHub tutorial in the LAMMPS manual](http://lammps.sandia.gov/doc/Howto_github.html)
|
||||||
|
|
||||||
## Table of Contents
|
## Table of Contents
|
||||||
|
|
||||||
@ -26,11 +27,11 @@ __
|
|||||||
|
|
||||||
## I don't want to read this whole thing I just have a question!
|
## I don't want to read this whole thing I just have a question!
|
||||||
|
|
||||||
> **Note:** Please do not file an issue to ask a general question about LAMMPS, its features, how to use specific commands, or how perform simulations or analysis in LAMMPS. Instead post your question to either the ['lammps-users' mailing list](https://lammps.sandia.gov/mail.html) or the [LAMMPS Material Science Discourse forum](https://matsci.org/lammps). You do not need to be subscribed to post to the list (but a mailing list subscription avoids having your post delayed until it is approved by a mailing list moderator). Most posts to the mailing list receive a response within less than 24 hours. Before posting to the mailing list, please read the [mailing list guidelines](https://lammps.sandia.gov/guidelines.html). Following those guidelines will help greatly to get a helpful response. Always mention which LAMMPS version you are using. The LAMMPS forum was recently created as part of a larger effort to build a materials science community and have discussions not just about using LAMMPS. Thus the forum may be also used for discussions that would be off-topic for the mailing list. Those will just have to be moved to a more general category.
|
> **Note:** Please do not file an issue to ask a general question about LAMMPS, its features, how to use specific commands, or how perform simulations or analysis in LAMMPS. Instead post your question to either the ['lammps-users' mailing list](https://lammps.sandia.gov/mail.html) or the [LAMMPS Material Science Discourse forum](https://matsci.org/lammps). You do not need to be subscribed to post to the list (but a mailing list subscription avoids having your post delayed until it is approved by a mailing list moderator). Most posts to the mailing list receive a response within less than 24 hours. Before posting to the mailing list, please read the [mailing list guidelines](https://lammps.sandia.gov/guidelines.html). Following those guidelines will help greatly to get a helpful response. Always mention which LAMMPS version you are using. The LAMMPS forum was recently created as part of a larger effort to build a materials science community and have discussions not just about using LAMMPS. Thus the forum may be also used for discussions that would be off-topic for the mailing list. Those will just have to be posted to a more general category.
|
||||||
|
|
||||||
## How Can I Contribute?
|
## How Can I Contribute?
|
||||||
|
|
||||||
There are several ways how you can actively contribute to the LAMMPS project: you can discuss compiling and using LAMMPS, and solving LAMMPS related problems with other LAMMPS users on the lammps-users mailing list, you can report bugs or suggest enhancements by creating issues on GitHub (or posting them to the lammps-users mailing list or posting in the LAMMPS Materials Science Discourse forum), and you can contribute by submitting pull requests on GitHub or e-mail your code
|
There are several ways how you can actively contribute to the LAMMPS project: you can discuss compiling and using LAMMPS, and solving LAMMPS related problems with other LAMMPS users on the lammps-users mailing list or the forum, you can report bugs or suggest enhancements by creating issues on GitHub (or posting them to the lammps-users mailing list or posting in the LAMMPS Materials Science Discourse forum), and you can contribute by submitting pull requests on GitHub or e-mail your code
|
||||||
to one of the [LAMMPS core developers](https://lammps.sandia.gov/authors.html). As you may see from the aforementioned developer page, the LAMMPS software package includes the efforts of a very large number of contributors beyond the principal authors and maintainers.
|
to one of the [LAMMPS core developers](https://lammps.sandia.gov/authors.html). As you may see from the aforementioned developer page, the LAMMPS software package includes the efforts of a very large number of contributors beyond the principal authors and maintainers.
|
||||||
|
|
||||||
### Discussing How To Use LAMMPS
|
### Discussing How To Use LAMMPS
|
||||||
@ -62,37 +63,12 @@ To be able to submit an issue on GitHub, you have to register for an account (fo
|
|||||||
|
|
||||||
### Contributing Code
|
### Contributing Code
|
||||||
|
|
||||||
We encourage users to submit new features or modifications for LAMMPS to the core developers so they can be added to the LAMMPS distribution. The preferred way to manage and coordinate this is by submitting a pull request at the LAMMPS project on GitHub. For any larger modifications or programming project, you are encouraged to contact the LAMMPS developers ahead of time, in order to discuss implementation strategies and coding guidelines, that will make it easier to integrate your contribution and result in less work for everybody involved. You are also encouraged to search through the list of open issues on GitHub and submit a new issue for a planned feature, so you would not duplicate the work of others (and possibly get scooped by them) or have your work duplicated by others.
|
We encourage users to submit new features or modifications for LAMMPS. Instructions, guidelines, requirements,
|
||||||
|
and recommendations are in the following sections of the LAMMPS manual:
|
||||||
|
* [The guide for submitting new features in the LAMMPS manual](https://lammps.sandia.gov/doc/Modify_contribute.html)
|
||||||
|
* [The guide on programming style and requirement in the LAMMPS manual](https://lammps.sandia.gov/doc/Modify_contribute.html)
|
||||||
|
* [The GitHub tutorial in the LAMMPS manual](http://lammps.sandia.gov/doc/Howto_github.html)
|
||||||
|
|
||||||
How quickly your contribution will be integrated depends largely on how much effort it will cause to integrate and test it, how much it requires changes to the core code base, and of how much interest it is to the larger LAMMPS community. Please see below for a checklist of typical requirements. Once you have prepared everything, see [this tutorial](https://lammps.sandia.gov/doc/Howto_github.html)
|
|
||||||
for instructions on how to submit your changes or new files through a GitHub pull request
|
|
||||||
|
|
||||||
Here is a checklist of steps you need to follow to submit a single file or user package for our consideration. Following these steps will save both you and us time. See existing files in packages in the source directory for examples. If you are uncertain, please ask on the lammps-users mailing list.
|
|
||||||
|
|
||||||
* C++ source code must be compatible with the C++-11 standard. Packages may require a later standard, if justified.
|
|
||||||
* All source files you provide must compile with the most current version of LAMMPS with multiple configurations. In particular you need to test compiling LAMMPS from scratch with `-DLAMMPS_BIGBIG` set in addition to the default `-DLAMMPS_SMALLBIG` setting. Your code will need to work correctly in serial and in parallel using MPI.
|
|
||||||
* For consistency with the rest of LAMMPS and especially, if you want your contribution(s) to be added to main LAMMPS code or one of its standard packages, it needs to be written in a style compatible with other LAMMPS source files. This means: 2-character indentation per level, no tabs, no trailing whitespace, no lines over 80 characters. I/O is done via the C-style stdio library, style class header files should not import any system headers, STL containers should be avoided in headers, and forward declarations used where possible or needed. All added code should be placed into the LAMMPS_NS namespace or a sub-namespace; global or static variables should be avoided, as they conflict with the modular nature of LAMMPS and the C++ class structure. There MUST NOT be any "using namespace XXX;" statements in headers. In the implementation file (<name>.cpp) system includes should be placed in angular brackets (<>) and for c-library functions the C++ style header files should be included (<cstdio> instead of <stdio.h>, or <cstring> instead of <string.h>). This all is so the developers can more easily understand, integrate, and maintain your contribution and reduce conflicts with other parts of LAMMPS. This basically means that the code accesses data structures, performs its operations, and is formatted similar to other LAMMPS source files, including the use of the error class for error and warning messages.
|
|
||||||
* Source, style name, and documentation file should follow the following naming convention: style names should be lowercase and words separated by a forward slash; for a new fix style 'foo/bar', the class should be named FixFooBar, the name of the source files should be 'fix_foo_bar.h' and 'fix_foo_bar.cpp' and the corresponding documentation should be in a file 'fix_foo_bar.rst'.
|
|
||||||
* 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 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 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.
|
|
||||||
* 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 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/PACKAGES 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 new utility functions or class (i.e. anything that does not depend on a LAMMPS object), new unit tests should be added to the unittest tree.
|
|
||||||
* When adding a new LAMMPS style, a .yaml file with a test configuration and reference data should be added for the styles where a suitable tester program already exists (e.g. pair styles, bond styles, etc.).
|
|
||||||
* 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 <name>.cpp source file. See src/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.
|
|
||||||
|
|
||||||
Finally, as a general rule-of-thumb, the more clear and self-explanatory you make your documentation and README files, and the easier you make it for people to get started, e.g. by providing example scripts, the more likely it is that users will try out your new feature.
|
|
||||||
|
|
||||||
If the new features/files are broadly useful we may add them as core files to LAMMPS or as part of a standard package. Else we will add them as a user-contributed file or package. Examples of user packages are in src sub-directories that start with USER. The USER-MISC package is simply a collection of (mostly) unrelated single files, which is the simplest way to have your contribution quickly added to the LAMMPS distribution. You can see a list of the both standard and user packages by typing "make package" in the LAMMPS src directory.
|
|
||||||
|
|
||||||
Note that by providing us files to release, you are agreeing to make them open-source, i.e. we can release them under the terms of the GPL, used as a license for the rest of LAMMPS. See Section 1.4 for details.
|
|
||||||
|
|
||||||
With user packages and files, all we are really providing (aside from the fame and fortune that accompanies having your name in the source code and on the Authors page of the LAMMPS WWW site), is a means for you to distribute your work to the LAMMPS user community, and a mechanism for others to easily try out your new feature. This may help you find bugs or make contact with new collaborators. Note that you are also implicitly agreeing to support your code which means answer questions, fix bugs, and maintain it if LAMMPS changes in some way that breaks it (an unusual event).
|
|
||||||
|
|
||||||
To be able to submit an issue on GitHub, you have to register for an account (for GitHub in general). If you do not want to do that, or have other reservations or difficulties to submit a pull request, you can - as an alternative - contact one or more of the core LAMMPS developers and ask if one of them would be interested in manually merging your code into LAMMPS and send them your source code. Since the effort to merge a pull request is a small fraction of the effort of integrating source code manually (which would usually be done by converting the contribution into a pull request), your chances to have your new code included quickly are the best with a pull request.
|
|
||||||
|
|
||||||
If you prefer to submit patches or full files, you should first make certain, that your code works correctly with the latest patch-level version of LAMMPS and contains all bug fixes from it. Then create a gzipped tar file of all changed or added files or a corresponding patch file using 'diff -u' or 'diff -c' and compress it with gzip. Please only use gzip compression, as this works well on all platforms.
|
|
||||||
|
|
||||||
## GitHub Workflows
|
## GitHub Workflows
|
||||||
|
|
||||||
@ -102,17 +78,17 @@ This section briefly summarizes the steps that will happen **after** you have su
|
|||||||
|
|
||||||
After submitting an issue, one or more of the LAMMPS developers will review it and categorize it by assigning labels. Confirmed bug reports will be labeled `bug`; if the bug report also contains a suggestion for how to fix it, it will be labeled `bugfix`; if the issue is a feature request, it will be labeled `enhancement`. Other labels may be attached as well, depending on which parts of the LAMMPS code are affected. If the assessment is, that the issue does not warrant any changes, the `wontfix` label will be applied and if the submission is incorrect or something that should not be submitted as an issue, the `invalid` label will be applied. In both of the last two cases, the issue will then be closed without further action.
|
After submitting an issue, one or more of the LAMMPS developers will review it and categorize it by assigning labels. Confirmed bug reports will be labeled `bug`; if the bug report also contains a suggestion for how to fix it, it will be labeled `bugfix`; if the issue is a feature request, it will be labeled `enhancement`. Other labels may be attached as well, depending on which parts of the LAMMPS code are affected. If the assessment is, that the issue does not warrant any changes, the `wontfix` label will be applied and if the submission is incorrect or something that should not be submitted as an issue, the `invalid` label will be applied. In both of the last two cases, the issue will then be closed without further action.
|
||||||
|
|
||||||
For feature requests, what happens next is that developers may comment on the viability or relevance of the request, discuss and make suggestions for how to implement it. If a LAMMPS developer or user is planning to implement the feature, the issue will be assigned to that developer. For developers, that are not yet listed as LAMMPS project collaborators, they will receive an invitation to be added to the LAMMPS project as a collaborator so they can get assigned. If the requested feature or enhancement is implemented, it will usually be submitted as a pull request, which will contain a reference to the issue number. And once the pull request is reviewed and accepted for inclusion into LAMMPS, the issue will be closed. For details on how pull requests are processed, please see below.
|
For feature requests, what happens next is that developers may comment on the viability or relevance of the request, discuss and make suggestions for how to implement it. If a LAMMPS developer or user is planning to implement the feature, the issue will be assigned to that developer. For developers, that are not yet listed as LAMMPS project collaborators, they will receive an invitation to be added to the LAMMPS project as a collaborator so they can get assigned. If the requested feature or enhancement is implemented, it will be submitted as a pull request, which will contain a reference to the issue number. And once the pull request is reviewed and accepted for inclusion into LAMMPS, the issue will be closed. For details on how pull requests are processed, please see below. Feature requests may be labeled with `volunteer_needed` if none of the LAMMPS developers has the time and the required knowledge implement the feature.
|
||||||
|
|
||||||
For bug reports, the next step is that one of the core LAMMPS developers will self-assign to the issue and try to confirm the bug. If confirmed, the `bug` label and potentially other labels are added to classify the issue and its impact to LAMMPS. Before confirming, further questions may be asked or requests for providing additional input files or details about the steps required to reproduce the issue. Any bugfix is likely to be submitted as a pull request (more about that below) and since most bugs require only local changes, the bugfix may be included in a pull request specifically set up to collect such local bugfixes or small enhancements. Once the bugfix is included in the master branch, the issue will be closed.
|
For bug reports, the next step is that one of the core LAMMPS developers will self-assign to the issue and try to confirm the bug. If confirmed, the `bug` label and potentially other labels are added to classify the issue and its impact to LAMMPS. Otherwise the `unconfirmed` label will be applied and some comment about what was tried to confirm the bug added. Before confirming, further questions may be asked or requests for providing additional input files or details about the steps required to reproduce the issue. Any bugfix will be submitted as a pull request (more about that below) and since most bugs require only local changes, the bugfix may be included in a pull request specifically set up to collect such local bugfixes or small enhancements. Once the bugfix is included in the master branch, the issue will be closed.
|
||||||
|
|
||||||
### Pull Requests
|
### Pull Requests
|
||||||
|
|
||||||
For submitting pull requests, there is a [detailed tutorial](https://lammps.sandia.gov/doc/Howto_github.html) in the LAMMPS manual. Thus only a brief breakdown of the steps is presented here. Please note, that the LAMMPS developers are still reviewing and trying to improve the process. If you are unsure about something, do not hesitate to post a question on the lammps-users mailing list or contact one fo the core LAMMPS developers.
|
Pull requests are the **only** way that changes get made to the LAMMPS distribution. So also the LAMMPS core developers will submit pull requests for their own changes and discuss them on GitHub. Thus if you submit a pull request it will be treated in a similar fashion. When you submit a pull request you may opt to submit a "Draft" pull request. That means your changes are visible and will be subject to testing, but reviewers will not be (auto-)assigned and comments will take into account that this is not complete. On the other hand, this is a perfect way to ask the LAMMPS developers for comments on non-obvious changes and get feedback and possible suggestions for improvements or recommendations about what to avoid.
|
||||||
Immediately after the submission, the LAMMPS continuing integration server at ci.lammps.org will download your submitted branch and perform a simple compilation test, i.e. will test whether your submitted code can be compiled under various conditions. It will also do a check on whether your included documentation translates cleanly. Whether these tests are successful or fail will be recorded. If a test fails, please inspect the corresponding output on the CI server and take the necessary steps, if needed, so that the code can compile cleanly again. The test will be re-run each the pull request is updated with a push to the remote branch on GitHub.
|
Immediately after the submission, the LAMMPS continuing integration server at ci.lammps.org will download your submitted branch and perform a number of tests: it will tests whether it compiles cleanly under various conditions, it will also do a check on whether your included documentation translates cleanly and run some unit tests and other checks. Whether these tests are successful or fail will be recorded. If a test fails, please inspect the corresponding output on the CI server and take the necessary steps, if needed, so that the code can compile cleanly again. The test will be re-run each time the pull request is updated with a push to the remote branch on GitHub. If you are unsure about what you need to change, ask a question in the discussion area of the pull request.
|
||||||
Next a LAMMPS core developer will self-assign and do an overall technical assessment of the submission. If you are not yet registered as a LAMMPS collaborator, you will receive an invitation for that. As part of the assessment, the pull request will be categorized with labels. There are two special labels: `needs_work` (indicates that work from the submitter of the pull request is needed) and `work_in_progress` (indicates, that the assigned LAMMPS developer will make changes, if not done by the contributor who made the submit).
|
Next a LAMMPS core developer will self-assign and do an overall technical assessment of the submission. If you submitted a draft pull request, this will not happen unless you mark it "ready for review". If you are not yet invited as a LAMMPS collaborator, and your contribution seems significant, you may also receive an invitation for collaboration on the LAMMPS repository. As part of the assessment, the pull request will be categorized with labels. There are two special labels: `needs_work` (indicates that work from the submitter of the pull request is needed) and `work_in_progress` (indicates, that the assigned LAMMPS developer will make changes, if not done by the contributor who made the submit).
|
||||||
You may also receive comments and suggestions on the overall submission or specific details and on occasion specific requests for changes as part of the review. If permitted, also additional changes may be pushed into your pull request branch or a pull request may be filed in your LAMMPS fork on GitHub to include those changes.
|
You may also receive comments and suggestions on the overall submission or specific details and on occasion specific requests for changes as part of the review. If permitted, also additional changes may be pushed into your pull request branch or a pull request may be filed in your LAMMPS fork on GitHub to include those changes.
|
||||||
The LAMMPS developer may then decide to assign the pull request to another developer (e.g. when that developer is more knowledgeable about the submitted feature or enhancement or has written the modified code). It may also happen, that additional developers are requested to provide a review and approve the changes. For submissions, that may change the general behavior of LAMMPS, or where a possibility of unwanted side effects exists, additional tests may be requested by the assigned developer.
|
The LAMMPS developer may then decide to assign the pull request to another developer (e.g. when that developer is more knowledgeable about the submitted feature or enhancement or has written the modified code). It may also happen, that additional developers are requested to provide a review and approve the changes. For submissions, that may change the general behavior of LAMMPS, or where a possibility of unwanted side effects exists, additional tests may be requested by the assigned developer.
|
||||||
If the assigned developer is satisfied and considers the submission ready for inclusion into LAMMPS, the pull request will receive approvals and be merged into the master branch by one of the core LAMMPS developers. After the pull request is merged, you may delete the feature branch used for the pull request in your personal LAMMPS fork.
|
If the assigned developer is satisfied and considers the submission ready for inclusion into LAMMPS, the pull request will receive approvals and be merged into the master branch by one of the core LAMMPS developers. After the pull request is merged, you may delete the feature branch used for the pull request in your personal LAMMPS fork. The minimum requirement to merge a pull request is that all automated tests have to pass and at least one LAMMPS developer has approved integrating the submitted code. Since the approver will not be the person merging a pull request, you will have at least two LAMMPS developers that looked at your contribution.
|
||||||
Since the learning curve for git is quite steep for efficiently managing remote repositories, local and remote branches, pull requests and more, do not hesitate to ask questions, if you are not sure about how to do certain steps that are asked of you. Even if the changes asked of you do not make sense to you, they may be important for the LAMMPS developers. Please also note, that these all are guidelines and nothing set in stone. So depending on the nature of the contribution, the workflow may be adjusted.
|
Since the learning curve for git is quite steep for efficiently managing remote repositories, local and remote branches, pull requests and more, do not hesitate to ask questions, if you are not sure about how to do certain steps that are asked of you. Even if the changes asked of you do not make sense to you, they may be important for the LAMMPS developers. Please also note, that these all are guidelines and nothing set in stone. So depending on the nature of the contribution, the work flow may be adjusted.
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@ choices the LAMMPS developers have agreed on. Git and GitHub provide the
|
|||||||
tools, but do not set policies, so it is up to the developers to come to
|
tools, but do not set policies, so it is up to the developers to come to
|
||||||
an agreement as to how to define and interpret policies. This document
|
an agreement as to how to define and interpret policies. This document
|
||||||
is likely to change as our experiences and needs change and we try to
|
is likely to change as our experiences and needs change and we try to
|
||||||
adapt accordingly. Last change 2018-12-19.
|
adapt accordingly. Last change 2021-09-02.
|
||||||
|
|
||||||
## Table of Contents
|
## Table of Contents
|
||||||
|
|
||||||
@ -23,10 +23,10 @@ adapt accordingly. Last change 2018-12-19.
|
|||||||
|
|
||||||
In the interest of consistency, ONLY ONE of the core LAMMPS developers
|
In the interest of consistency, ONLY ONE of the core LAMMPS developers
|
||||||
should doing the merging itself. This is currently
|
should doing the merging itself. This is currently
|
||||||
[@akohlmey](https://github.com/akohlmey) (Axel Kohlmeyer).
|
[@akohlmey](https://github.com/akohlmey) (Axel Kohlmeyer). If this
|
||||||
If this assignment needs to be changed, it shall be done right after a
|
assignment needs to be changed, it shall be done right after a stable
|
||||||
stable release. If the currently assigned developer cannot merge outstanding pull
|
release. If the currently assigned developer cannot merge outstanding
|
||||||
requests in a timely manner, or in other extenuating circumstances,
|
pull requests in a timely manner, or in other extenuating circumstances,
|
||||||
other core LAMMPS developers with merge rights can merge pull requests,
|
other core LAMMPS developers with merge rights can merge pull requests,
|
||||||
when necessary.
|
when necessary.
|
||||||
|
|
||||||
@ -55,13 +55,14 @@ the required changes or ask the submitter of the pull request to implement
|
|||||||
them. Even though, all LAMMPS developers may have write access to pull
|
them. Even though, all LAMMPS developers may have write access to pull
|
||||||
requests (if enabled by the submitter, which is the default), only the
|
requests (if enabled by the submitter, which is the default), only the
|
||||||
submitter or the assignee of a pull request may do so. During this
|
submitter or the assignee of a pull request may do so. During this
|
||||||
period the `work_in_progress` label shall be applied to the pull
|
period the `work_in_progress` label may be applied to the pull
|
||||||
request. The assignee gets to decide what happens to the pull request
|
request. The assignee gets to decide what happens to the pull request
|
||||||
next, e.g. whether it should be assigned to a different developer for
|
next, e.g. whether it should be assigned to a different developer for
|
||||||
additional checks and changes, or is recommended to be merged. Removing
|
additional checks and changes, or is recommended to be merged. Removing
|
||||||
the `work_in_progress` label and assigning the pull request to the
|
the `work_in_progress` label and assigning the pull request to the
|
||||||
developer tasked with merging signals that a pull request is ready to be
|
developer tasked with merging signals that a pull request is ready to be
|
||||||
merged.
|
merged. In addition, a `ready_for_merge` label may also be assigned
|
||||||
|
to signal urgency to merge this pull request quickly.
|
||||||
|
|
||||||
### Pull Request Reviews
|
### Pull Request Reviews
|
||||||
|
|
||||||
@ -97,108 +98,50 @@ rationale behind choices made. Exceptions to this policy are technical
|
|||||||
discussions, that are centered on tools or policies themselves
|
discussions, that are centered on tools or policies themselves
|
||||||
(git, GitHub, c++) rather than on the content of the pull request.
|
(git, GitHub, c++) rather than on the content of the pull request.
|
||||||
|
|
||||||
### Checklist for Pull Requests
|
|
||||||
|
|
||||||
Here are some items to check:
|
|
||||||
* source and text files should not have CR/LF line endings (use dos2unix to remove)
|
|
||||||
* every new command or style should have documentation. The names of
|
|
||||||
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,
|
|
||||||
implementing the class `FixNVE`, documented in `doc/src/fix_nve.rst`)
|
|
||||||
* all new style names should be lower case, the must be no dashes,
|
|
||||||
blanks, or underscores separating words, only forward slashes.
|
|
||||||
* new style docs should be added to the "overview" files in
|
|
||||||
`doc/src/Commands_*.rst`, `doc/src/{fixes,computes,pairs,bonds,...}.rst`
|
|
||||||
* 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 style tables and command lists with `make style_check`
|
|
||||||
* new source files in packages should be added to `src/.gitignore`
|
|
||||||
* 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-library APIs, e.g. `#include <cstdlib>` instead of `#include <stdlib.h>`.
|
|
||||||
And they should use angular brackets instead of double quotes. Full list:
|
|
||||||
* assert.h -> cassert
|
|
||||||
* ctype.h -> cctype
|
|
||||||
* errno.h -> cerrno
|
|
||||||
* float.h -> cfloat
|
|
||||||
* limits.h -> climits
|
|
||||||
* math.h -> cmath
|
|
||||||
* complex.h -> complex
|
|
||||||
* setjmp.h -> csetjmp
|
|
||||||
* signal.h -> csignal
|
|
||||||
* stddef.h -> cstddef
|
|
||||||
* stdint.h -> cstdint
|
|
||||||
* stdio.h -> cstdio
|
|
||||||
* stdlib.h -> cstdlib
|
|
||||||
* string.h -> cstring
|
|
||||||
* time.h -> ctime
|
|
||||||
* Do NOT replace (as they are C++-11): `inttypes.h` and `stdint.h`.
|
|
||||||
* Code must follow the C++-11 standard. C++98-only is no longer accepted
|
|
||||||
* Code should use `nullptr` instead of `NULL` where applicable.
|
|
||||||
in individual special purpose packages
|
|
||||||
* indentation is 2 spaces per level
|
|
||||||
* there should be NO tabs and no trailing whitespace (review the "checkstyle" test on pull requests)
|
|
||||||
* header files, especially of new styles, should not include any
|
|
||||||
other headers, except the header with the base class or cstdio.
|
|
||||||
Forward declarations should be used instead when possible.
|
|
||||||
* iostreams should be avoided. LAMMPS uses stdio from the C-library.
|
|
||||||
* use of STL in headers and class definitions should be avoided.
|
|
||||||
exception is <string>, but it won't need to be explicitly included
|
|
||||||
since pointers.h already includes it. so std::string can be used directly.
|
|
||||||
* there MUST NOT be any "using namespace XXX;" statements in headers.
|
|
||||||
* static class members should be avoided at all cost.
|
|
||||||
* anything storing atom IDs should be using `tagint` and not `int`.
|
|
||||||
This can be flagged by the compiler only for pointers and only when
|
|
||||||
compiling LAMMPS with `-DLAMMPS_BIGBIG`.
|
|
||||||
* when including both `lmptype.h` (and using defines or macros from it)
|
|
||||||
and `mpi.h`, `lmptype.h` must be included first.
|
|
||||||
* see https://github.com/lammps/lammps/blob/master/doc/include-file-conventions.md
|
|
||||||
for general include file conventions and best practices
|
|
||||||
* when pair styles are added, check if settings for flags like
|
|
||||||
`single_enable`, `writedata`, `reinitflag`, `manybody_flag`
|
|
||||||
and others are correctly set and supported.
|
|
||||||
|
|
||||||
## GitHub Issues
|
## GitHub Issues
|
||||||
|
|
||||||
The GitHub issue tracker is the location where the LAMMPS developers
|
The GitHub issue tracker is the location where the LAMMPS developers
|
||||||
and other contributors or LAMMPS users can report issues or bugs with
|
and other contributors or LAMMPS users can report issues or bugs with
|
||||||
the LAMMPS code or request new features to be added. Feature requests
|
the LAMMPS code or request new features to be added. Bug reports have
|
||||||
are usually indicated by a `[Feature Request]` marker in the subject.
|
a `[Bug]` marker in the subject line; suggestions for changes or
|
||||||
Issues are assigned to a person, if this person is working on this
|
adding new functionality are indicated by a `[Feature Request]`
|
||||||
feature or working to resolve an issue. Issues that have nobody working
|
marker in the subject. This is automatically done when using the
|
||||||
on them at the moment, have the label `volunteer needed` attached.
|
corresponding template for submitting an issue. Issues may be assigned
|
||||||
|
to one or more developers, if they are working on this feature or
|
||||||
|
working to resolve an issue. Issues that have nobody working
|
||||||
|
on them at the moment or in the near future, have the label
|
||||||
|
`volunteer needed` attached.
|
||||||
|
|
||||||
When an issue, say `#125` is resolved by a specific pull request,
|
When an issue, say `#125` is resolved by a specific pull request,
|
||||||
the comment for the pull request shall contain the text `closes #125`
|
the comment for the pull request shall contain the text `closes #125`
|
||||||
or `fixes #125`, so that the issue is automatically deleted when
|
or `fixes #125`, so that the issue is automatically deleted when
|
||||||
the pull request is merged.
|
the pull request is merged. The template for pull requests includes
|
||||||
|
a header where connections between pull requests and issues can be listed
|
||||||
|
and thus were this comment should be placed.
|
||||||
|
|
||||||
## Milestones and Release Planning
|
## Milestones and Release Planning
|
||||||
|
|
||||||
LAMMPS uses a continuous release development model with incremental
|
LAMMPS uses a continuous release development model with incremental
|
||||||
changes, i.e. significant effort is made - including automated pre-merge
|
changes, i.e. significant effort is made - including automated pre-merge
|
||||||
testing - that the code in the branch "master" does not get broken.
|
testing - that the code in the branch "master" does not get easily
|
||||||
More extensive testing (including regression testing) is performed after
|
broken. These tests are run after every update to a pull request. More
|
||||||
code is merged to the "master" branch. There are patch releases of
|
extensive and time consuming tests (including regression testing) are
|
||||||
LAMMPS every 1-3 weeks at a point, when the LAMMPS developers feel, that
|
performed after code is merged to the "master" branch. There are patch
|
||||||
a sufficient amount of changes have happened, and the post-merge testing
|
releases of LAMMPS every 3-5 weeks at a point, when the LAMMPS
|
||||||
has been successful. These patch releases are marked with a
|
developers feel, that a sufficient amount of changes have happened, and
|
||||||
`patch_<version date>` tag and the "unstable" branch follows only these
|
the post-merge testing has been successful. These patch releases are
|
||||||
versions (and thus is always supposed to be of production quality,
|
marked with a `patch_<version date>` tag and the "unstable" branch
|
||||||
unlike "master", which may be temporary broken, in the case of larger
|
follows only these versions (and thus is always supposed to be of
|
||||||
change sets or unexpected incompatibilities or side effects.
|
production quality, unlike "master", which may be temporary broken, in
|
||||||
|
the case of larger change sets or unexpected incompatibilities or side
|
||||||
|
effects.
|
||||||
|
|
||||||
About 3-4 times each year, there are going to be "stable" releases
|
About 1-2 times each year, there are going to be "stable" releases of
|
||||||
of LAMMPS. These have seen additional, manual testing and review of
|
LAMMPS. These have seen additional, manual testing and review of
|
||||||
results from testing with instrumented code and static code analysis.
|
results from testing with instrumented code and static code analysis.
|
||||||
Also, in the last 2-3 patch releases before a stable release are
|
Also, the last 1-3 patch releases before a stable release are "release
|
||||||
"release candidate" versions which only contain bugfixes and
|
candidate" versions which only contain bugfixes and documentation
|
||||||
documentation updates. For release planning and the information of
|
updates. For release planning and the information of code contributors,
|
||||||
code contributors, issues and pull requests being actively worked on
|
issues and pull requests being actively worked on are assigned a
|
||||||
are assigned a "milestone", which corresponds to the next stable
|
"milestone", which corresponds to the next stable release or the stable
|
||||||
release or the stable release after that, with a tentative release
|
release after that, with a tentative release date.
|
||||||
date.
|
|
||||||
|
|
||||||
|
|||||||
@ -1,128 +0,0 @@
|
|||||||
# 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 2020-08-31
|
|
||||||
|
|
||||||
## 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>` instead of `#include <stdlib.h>` or
|
|
||||||
`#include<ctypes.h>` ).
|
|
||||||
|
|
||||||
### C++ Standard Compliance
|
|
||||||
|
|
||||||
LAMMPS core files use standard conforming C++ compatible with the
|
|
||||||
C++11 standard, unless explicitly noted. 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 (only if needed)
|
|
||||||
* LAMMPS local headers (preferably in alphabetical order)
|
|
||||||
* system and library headers (anything that is using angular brackets; preferably in alphabetical order)
|
|
||||||
* conditional include statements (i.e. anything bracketed with ifdefs)
|
|
||||||
|
|
||||||
### Special Cases and Exceptions
|
|
||||||
|
|
||||||
#### pointers.h
|
|
||||||
|
|
||||||
The `pointer.h` header file also includes (in this order) `lmptype.h`,
|
|
||||||
`mpi.h`, `cstddef`, `cstdio`, `string`, `utils.h`, and `fmt/format.h`
|
|
||||||
and through `lmptype.h` indirectly also `climits`, `cstdlib`, `cinttypes`.
|
|
||||||
This means any header including `pointers.h` can assume that `FILE`,
|
|
||||||
`NULL`, `INT_MAX` are defined, and the may freely use the std::string
|
|
||||||
for arguments. Corresponding implementation files do not need to include
|
|
||||||
those headers.
|
|
||||||
|
|
||||||
## Tools
|
|
||||||
|
|
||||||
The [Include What You Use tool](https://include-what-you-use.org/)
|
|
||||||
can be used to provide supporting information about compliance with
|
|
||||||
the rules listed here. Through setting `-DENABLE_IWYU=on` when running
|
|
||||||
CMake, a custom build target is added that will enable recording
|
|
||||||
the compilation commands and then run the `iwyu_tool` using the
|
|
||||||
recorded compilation commands information when typing `make iwyu`.
|
|
||||||
|
|
||||||
## Legacy Code
|
|
||||||
|
|
||||||
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 REAXFF, or the ATC package. The LAMMPS
|
|
||||||
developers are dedicated to make an effort to improve the compliance
|
|
||||||
and welcome volunteers wanting to help with the process.
|
|
||||||
|
|
||||||
@ -56,8 +56,7 @@ Report missing and unneeded '#include' statements (CMake only)
|
|||||||
--------------------------------------------------------------
|
--------------------------------------------------------------
|
||||||
|
|
||||||
The conventions for how and when to use and order include statements in
|
The conventions for how and when to use and order include statements in
|
||||||
LAMMPS are `documented in a separate file <https://github.com/lammps/lammps/blob/master/doc/include-file-conventions.md>`_
|
LAMMPS are documented in :doc:`Modify_style`. To assist with following
|
||||||
(also included in the source code distribution). To assist with following
|
|
||||||
these conventions one can use the `Include What You Use tool <https://include-what-you-use.org/>`_.
|
these conventions one can use the `Include What You Use tool <https://include-what-you-use.org/>`_.
|
||||||
This is still under development and for large and complex projects like LAMMPS
|
This is still under development and for large and complex projects like LAMMPS
|
||||||
there are some false positives, so suggested changes need to be verified manually.
|
there are some false positives, so suggested changes need to be verified manually.
|
||||||
|
|||||||
@ -22,7 +22,6 @@ files. Here is a list with descriptions:
|
|||||||
.gitignore # list of files and folders to be ignored by git
|
.gitignore # list of files and folders to be ignored by git
|
||||||
doxygen-warn.log # logfile with warnings from running doxygen
|
doxygen-warn.log # logfile with warnings from running doxygen
|
||||||
github-development-workflow.md # notes on the LAMMPS development workflow
|
github-development-workflow.md # notes on the LAMMPS development workflow
|
||||||
include-file-conventions.md # notes on LAMMPS' include file conventions
|
|
||||||
|
|
||||||
If you downloaded LAMMPS as a tarball from `the LAMMPS website <lws_>`_,
|
If you downloaded LAMMPS as a tarball from `the LAMMPS website <lws_>`_,
|
||||||
the html folder and the PDF files should be included.
|
the html folder and the PDF files should be included.
|
||||||
|
|||||||
@ -9,13 +9,15 @@ this.
|
|||||||
If you add a new feature to LAMMPS and think it will be of interest to
|
If you add a new feature to LAMMPS and think it will be of interest to
|
||||||
general users, we encourage you to submit it for inclusion in LAMMPS
|
general users, we encourage you to submit it for inclusion in LAMMPS
|
||||||
as a pull request on our `GitHub site <https://github.com/lammps/lammps>`_,
|
as a pull request on our `GitHub site <https://github.com/lammps/lammps>`_,
|
||||||
after reading :doc:`this page <Modify_contribute>`.
|
after reading about :doc:`how to prepare your code for submission <Modify_contribute>`
|
||||||
|
and :doc:`the style requirements and recommendations <Modify_style>`.
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
Modify_overview
|
Modify_overview
|
||||||
Modify_contribute
|
Modify_contribute
|
||||||
|
Modify_style
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|||||||
@ -1,18 +1,16 @@
|
|||||||
Submitting new features for inclusion in LAMMPS
|
Submitting new features for inclusion in LAMMPS
|
||||||
===============================================
|
===============================================
|
||||||
|
|
||||||
We encourage users to submit new features or modifications for LAMMPS to
|
We encourage LAMMPS users to submit new features they wrote for LAMMPS
|
||||||
`the core developers <https://www.lammps.org/authors.html>`_ so they
|
to be included into the LAMMPS distribution and thus become easily
|
||||||
can be added to the LAMMPS distribution. The preferred way to manage and
|
accessible to all LAMMPS users. The LAMMPS source code is managed with
|
||||||
coordinate this is via the LAMMPS project on `GitHub
|
git and public development is hosted on `GitHub
|
||||||
<https://github.com/lammps/lammps>`_. Please see the :doc:`GitHub
|
<https://github.com/lammps/lammps>`_. You can monitor the repository to
|
||||||
Tutorial <Howto_github>` for a demonstration on how to do that. An
|
be notified of releases, follow the ongoing development, and comment on
|
||||||
alternative is to contact the LAMMPS developers or the indicated
|
topics of interest to you.
|
||||||
developer of a package or feature directly and send in your contribution
|
|
||||||
via e-mail, but that can add a significant delay on getting your
|
Communication with the LAMMPS developers
|
||||||
contribution included, depending on how busy the respective developer
|
----------------------------------------
|
||||||
is, how complex a task it would be to integrate that code, and how
|
|
||||||
many - if any - changes are required before the code can be included.
|
|
||||||
|
|
||||||
For any larger modifications or programming project, you are encouraged
|
For any larger modifications or programming project, you are encouraged
|
||||||
to contact the LAMMPS developers ahead of time in order to discuss
|
to contact the LAMMPS developers ahead of time in order to discuss
|
||||||
@ -24,235 +22,105 @@ and submit a new issue for a planned feature, so you would not duplicate
|
|||||||
the work of others (and possibly get scooped by them) or have your work
|
the work of others (and possibly get scooped by them) or have your work
|
||||||
duplicated by others.
|
duplicated by others.
|
||||||
|
|
||||||
For informal communication with (some of) the LAMMPS developers you may
|
For informal communication with the LAMMPS developers you may ask to
|
||||||
ask to join the `LAMMPS developers on Slack
|
join the `LAMMPS developers on Slack <https://lammps.slack.com>`_. This
|
||||||
<https://lammps.slack.com>`_. This slack work space is by invitation
|
slack work space is by invitation only. Thus for access, please send an
|
||||||
only. Thus for access, please send an e-mail to ``slack@lammps.org``
|
e-mail to ``slack@lammps.org`` explaining what part of LAMMPS you are
|
||||||
explaining what part of LAMMPS you are working on. Only discussions
|
working on. Only discussions related to LAMMPS development are
|
||||||
related to LAMMPS development are tolerated, so this is **NOT** for
|
tolerated in that work space, so this is **NOT** for people that look for
|
||||||
people that look for help with compiling, installing, or using
|
help with compiling, installing, or using LAMMPS. Please post a message
|
||||||
LAMMPS. Please contact the
|
to the `lammps-users mailing list <https://www.lammps.org/mail.html>`_
|
||||||
`lammps-users mailing list <https://www.lammps.org/mail.html>`_ or the
|
or the `LAMMPS forum <https://www.lammps.org/forum.html>`_ for those
|
||||||
`LAMMPS forum <https://www.lammps.org/forum.html>`_ for those purposes
|
purposes.
|
||||||
instead.
|
|
||||||
|
|
||||||
How quickly your contribution will be integrated depends largely on how
|
Packages versus individual files
|
||||||
much effort it will cause to integrate and test it, how many and what
|
--------------------------------
|
||||||
kind of changes it requires to the core codebase, and of how much
|
|
||||||
interest it is to the larger LAMMPS community. Please see below for a
|
The remainder of this chapter describes how to add new "style" files of
|
||||||
checklist of typical requirements. Once you have prepared everything,
|
various kinds to LAMMPS. Packages are simply collections of one or more
|
||||||
see the :doc:`LAMMPS GitHub Tutorial <Howto_github>` page for
|
such new class files which are invoked as a new style within a LAMMPS
|
||||||
instructions on how to submit your changes or new files through a GitHub
|
input script. In some cases also collections of supporting functions or
|
||||||
pull request. If you prefer to submit patches or full files, you should
|
classes are included as separate files in a package, especially when
|
||||||
first make certain, that your code works correctly with the latest
|
they can be shared between multiple styles. If designed correctly, these
|
||||||
patch-level version of LAMMPS and contains all bug fixes from it. Then
|
additions typically do not require any changes to the core code of
|
||||||
create a gzipped tar file of all changed or added files or a
|
LAMMPS; they are simply add-on files that are compiled with the rest of
|
||||||
corresponding patch file using 'diff -u' or 'diff -c' and compress it
|
LAMMPS. To make those styles work, you may need some trivial changes to
|
||||||
with gzip. Please only use gzip compression, as this works well and is
|
the core code; an example of a trivial change is making a parent-class
|
||||||
available on all platforms.
|
method "virtual" when you derive a new child class from it.
|
||||||
|
|
||||||
|
If you think your new feature or package requires some non-trivial
|
||||||
|
changes in core LAMMPS files, you should communicate with the LAMMPS
|
||||||
|
developers `on Slack <https://lammps.org/slack.html>`_, `on GitHub
|
||||||
|
<https://github.com/lammps/lammps/issues>`_, or `via email
|
||||||
|
<https://www.lammps.org/authors.html>`_, since we may have
|
||||||
|
recommendations about what changes to do where, or may not want to
|
||||||
|
include certain changes for some reason and thus you would need to look
|
||||||
|
for alternatives.
|
||||||
|
|
||||||
|
Time and effort required
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
How quickly your contribution will be integrated can vary a lot. It
|
||||||
|
depends largely on how much effort it will cause the LAMMPS developers
|
||||||
|
to integrate and test it, how many and what kind of changes to the core
|
||||||
|
code are required, how quickly you can address them and of how much
|
||||||
|
interest it is to the larger LAMMPS community. Please see the section
|
||||||
|
on :doc:`LAMMPS programming style and requirements <Modify_style>` for
|
||||||
|
instructions, recommendations, and formal requirements. A small,
|
||||||
|
modular, well written contribution may be integrated within hours, but a
|
||||||
|
complex change that will require a redesign of some core functionality
|
||||||
|
in LAMMPS for a clean integration can take many months until it is
|
||||||
|
considered ready for inclusion (though this is rare).
|
||||||
|
|
||||||
|
|
||||||
|
Submission procedure
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
All changes to LAMMPS (including those from LAMMPS developers) are
|
||||||
|
integrated via pull requests on GitHub and cannot be merged without
|
||||||
|
passing the automated testing and an approving review by a LAMMPS core
|
||||||
|
developer. Thus before submitting your contribution, you should first
|
||||||
|
make certain, that your added or modified code compiles and works
|
||||||
|
correctly with the latest patch-level or development version of LAMMPS
|
||||||
|
and contains all bug fixes from it.
|
||||||
|
|
||||||
|
Once you have prepared everything, see the :doc:`LAMMPS GitHub Tutorial
|
||||||
|
<Howto_github>` page for instructions on how to submit your changes or
|
||||||
|
new files through a GitHub pull request yourself. If you are unable or
|
||||||
|
unwilling to submit via GitHub yourself, you may also submit patch files
|
||||||
|
or full files to the LAMMPS developers and ask them to submit a pull
|
||||||
|
request on GitHub on your behalf. Then create a gzipped tar file of
|
||||||
|
all changed or added files or a corresponding patch file using
|
||||||
|
'diff -u' or 'diff -c' format and compress it with gzip. Please only
|
||||||
|
use gzip compression, as this works well and is available on all platforms.
|
||||||
|
|
||||||
If the new features/files are broadly useful we may add them as core
|
If the new features/files are broadly useful we may add them as core
|
||||||
files to LAMMPS or as part of a :doc:`package <Packages_list>`. All
|
files to LAMMPS or as part of a :doc:`package <Packages_list>`. All
|
||||||
packages are listed and described on the :doc:`Packages details
|
packages are listed and described on the :doc:`Packages details
|
||||||
<Packages_details>` doc page.
|
<Packages_details>` doc page.
|
||||||
|
|
||||||
Note that by providing us files to release, you are agreeing to make
|
Licensing
|
||||||
them open-source, i.e. we can release them under the terms of the GPL
|
---------
|
||||||
(version 2), used as a license for the rest of LAMMPS. And as part of
|
|
||||||
a LGPL (version 2.1) distribution that we make available to developers
|
Note that by providing us files to release, you agree to make them
|
||||||
on request only and with files that are authorized for that kind of
|
open-source, i.e. we can release them under the terms of the GPL
|
||||||
distribution removed (e.g. interface to FFTW). See the
|
(version 2) with the rest of LAMMPS. And similarly as part of a LGPL
|
||||||
|
(version 2.1) distribution of LAMMPS that we make available to
|
||||||
|
developers on request only and with files that are not authorized for
|
||||||
|
that kind of distribution removed (e.g. interface to FFTW). See the
|
||||||
:doc:`LAMMPS license <Intro_opensource>` page for details.
|
:doc:`LAMMPS license <Intro_opensource>` page for details.
|
||||||
|
|
||||||
.. note::
|
External contributions
|
||||||
|
----------------------
|
||||||
|
|
||||||
If you prefer to actively develop and support your add-on feature
|
If you prefer to do so, you can also develop and support your add-on
|
||||||
yourself, then you may wish to make it available for download from
|
feature **without** having it included in the LAMMPS distribution, for
|
||||||
your own website, as a user package that LAMMPS users can add to
|
example as a download from a website of your own. See the `Offsite
|
||||||
their copy of LAMMPS. See the `Offsite LAMMPS packages and tools
|
LAMMPS packages and tools <https://www.lammps.org/offsite.html>`_ page
|
||||||
<https://www.lammps.org/offsite.html>`_ page of the LAMMPS web site
|
of the LAMMPS website for examples of groups that do this. We are happy
|
||||||
for examples of groups that do this. We are happy to advertise your
|
to advertise your package and website from that page. Simply email the
|
||||||
package and web site from that page. Simply email the `developers
|
`developers <https://www.lammps.org/authors.html>`_ with info about your
|
||||||
<https://www.lammps.org/authors.html>`_ with info about your package
|
package and we will post it there. We recommend to name external
|
||||||
and we will post it there. We recommend to name external packages
|
packages USER-\<name\> so they can be easily distinguished from bundled
|
||||||
USER-\<name\> so they can be easily distinguished from bundled packages
|
packages that do not have the USER- prefix.
|
||||||
that do not have the USER- prefix.
|
|
||||||
|
|
||||||
.. _lws: https://www.lammps.org
|
|
||||||
|
|
||||||
The previous sections of this page describe how to add new "style"
|
|
||||||
files of various kinds to LAMMPS. Packages are simply collections of
|
|
||||||
one or more new class files which are invoked as a new style within a
|
|
||||||
LAMMPS input script. If designed correctly, these additions typically
|
|
||||||
do not require changes to the main core of LAMMPS; they are simply
|
|
||||||
add-on files. If you think your new feature requires non-trivial
|
|
||||||
changes in core LAMMPS files, you should `communicate with the
|
|
||||||
developers <https://www.lammps.org/authors.html>`_, since we may or
|
|
||||||
may not want to include those changes for some reason. An example of a
|
|
||||||
trivial change is making a parent-class method "virtual" when you derive
|
|
||||||
a new child class from it.
|
|
||||||
|
|
||||||
Here is a checklist of steps you need to follow to submit a single file
|
|
||||||
or package for our consideration. Following these steps will save
|
|
||||||
both you and us time. Please have a look at the existing files in
|
|
||||||
packages in the src directory for examples. If you are uncertain, please ask.
|
|
||||||
|
|
||||||
* 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 100 characters. I/O is done via
|
|
||||||
the C-style stdio library (mixing of stdio and iostreams is generally
|
|
||||||
discouraged), class header files should not import any system headers
|
|
||||||
outside of <cstdio>, STL containers should be avoided in headers,
|
|
||||||
system header from the C library should use the C++-style names
|
|
||||||
(<cstdlib>, <cstdio>, or <cstring>) instead of the C-style names
|
|
||||||
<stdlib.h>, <stdio.h>, or <string.h>), and forward declarations
|
|
||||||
used where possible or needed to avoid including headers.
|
|
||||||
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.
|
|
||||||
Header files must **not** import namespaces with *using*\ .
|
|
||||||
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.
|
|
||||||
|
|
||||||
* To simplify reformatting contributed code in a way that is compatible
|
|
||||||
with the LAMMPS formatting styles, you can use clang-format (version 8
|
|
||||||
or later). The LAMMPS distribution includes a suitable ``.clang-format``
|
|
||||||
file which will be applied if you run ``clang-format -i some_file.cpp``
|
|
||||||
on your files inside the LAMMPS src tree. Please only reformat files
|
|
||||||
that you have contributed. For header files containing a
|
|
||||||
``SomeStyle(keyword, ClassName)`` macros it is required to have this
|
|
||||||
macro embedded with a pair of ``// clang-format off``, ``// clang-format on``
|
|
||||||
commends and the line must be terminated with a semi-colon (;).
|
|
||||||
Example:
|
|
||||||
|
|
||||||
.. code-block:: c++
|
|
||||||
|
|
||||||
#ifdef COMMAND_CLASS
|
|
||||||
// clang-format off
|
|
||||||
CommandStyle(run,Run);
|
|
||||||
// clang-format on
|
|
||||||
#else
|
|
||||||
|
|
||||||
#ifndef LMP_RUN_H
|
|
||||||
[...]
|
|
||||||
|
|
||||||
You may also use ``// clang-format on/off`` throughout your file
|
|
||||||
to protect sections of the file from being reformatted.
|
|
||||||
|
|
||||||
* Please review the list of :doc:`available Packages <Packages_details>`
|
|
||||||
to see if your contribution could be added to be added to one of them.
|
|
||||||
It should fit into the general purposed of that package. If it does not
|
|
||||||
fit well, it can be added to one of the EXTRA- packages or the MISC package.
|
|
||||||
|
|
||||||
* If your contribution has several related features that are not covered
|
|
||||||
by one of the existing packages or is dependent on a library (bundled
|
|
||||||
or external), it is best to make it a package directory with a name
|
|
||||||
like 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 and modifications to src/Depend.sh to trigger the checks.
|
|
||||||
See other README and Install.sh files in other directories as examples.
|
|
||||||
Similarly for CMake support changes need to be made to cmake/CMakeLists.txt,
|
|
||||||
the files in cmake/presets, and possibly a file to cmake/Modules/Packages/
|
|
||||||
added. Please check out how this is handled for existing packages and
|
|
||||||
ask the LAMMPS developers if you need assistance. Please submit a pull
|
|
||||||
request on GitHub or send us a tarball of this FOO directory and all
|
|
||||||
modified files. Pull requests are strongly encouraged since they greatly
|
|
||||||
reduce the effort required to integrate a contribution and simplify the
|
|
||||||
process of adjusting the contributed code to cleanly fit into the
|
|
||||||
LAMMPS distribution.
|
|
||||||
|
|
||||||
* 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. To simplify maintenance, we
|
|
||||||
may ask to adjust the programming style and formatting style to closer
|
|
||||||
match the rest of LAMMPS. We bundle a clang-format configuration file
|
|
||||||
that can help with adjusting the formatting, although this is not a
|
|
||||||
strict requirement.
|
|
||||||
|
|
||||||
* You **must** also create 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 text files with a .rst extension using the `reStructuredText
|
|
||||||
<rst_>`_ markup language, that are then converted to HTML and PDF
|
|
||||||
using the `Sphinx <sphinx_>`_ documentation generator tool. Running
|
|
||||||
Sphinx with the included configuration requires Python 3.x.
|
|
||||||
Configuration settings and custom extensions for this conversion are
|
|
||||||
included in the source distribution, and missing python packages will
|
|
||||||
be transparently downloaded into a virtual environment via pip. Thus,
|
|
||||||
if your local system is missing required packages, you need access to
|
|
||||||
the internet. The translation can be as simple as doing "make html
|
|
||||||
pdf" in the doc folder. As appropriate, the text files can include
|
|
||||||
inline mathematical expression or figures (see doc/JPG for examples).
|
|
||||||
Additional PDF files with further details (see doc/PDF for examples)
|
|
||||||
may also be included. The 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. Citation labels must be unique across all .rst files.
|
|
||||||
The "Restrictions" section of the page should indicate if your
|
|
||||||
command is only available if LAMMPS is built with the appropriate
|
|
||||||
FOO package. See other package doc files for examples of
|
|
||||||
how to do this. Please run at least "make html" and "make spelling"
|
|
||||||
and carefully inspect and proofread the resulting HTML format doc page
|
|
||||||
before submitting your code. Upon submission of a pull request,
|
|
||||||
checks for error free completion of the HTML and PDF build will be
|
|
||||||
performed and also a spell check, a check for correct anchors and
|
|
||||||
labels, and a check for completeness of references all styles in their
|
|
||||||
corresponding tables and lists is run. In case the spell check
|
|
||||||
reports false positives they can be added to the file
|
|
||||||
doc/utils/sphinx-config/false_positives.txt
|
|
||||||
|
|
||||||
* 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/PACKAGES 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/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 registering this variable is added to the
|
|
||||||
constructor of the class. If there is additional functionality (which
|
|
||||||
may have been added later) described in a different publication,
|
|
||||||
additional citation descriptions may be added for as long as they
|
|
||||||
are only registered when the corresponding keyword activating this
|
|
||||||
functionality is used. With these options it is possible to have
|
|
||||||
LAMMPS output a specific citation reminder whenever a user invokes
|
|
||||||
your feature from their input script. Note that you should only use
|
|
||||||
this for the most relevant paper for a feature and a publication that
|
|
||||||
you or your group authored. E.g. adding a citation 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 included in the documentation page you provide describing
|
|
||||||
your contribution. If you are not sure what the best option would
|
|
||||||
be, please contact the LAMMPS developers for advice.
|
|
||||||
|
|
||||||
Finally, as a general rule-of-thumb, the more clear and
|
|
||||||
self-explanatory you make your documentation and README files, and the
|
|
||||||
easier you make it for people to get started, e.g. by providing example
|
|
||||||
scripts, the more likely it is that users will try out your new feature.
|
|
||||||
|
|
||||||
.. _rst: https://docutils.readthedocs.io/en/sphinx-docs/user/rst/quickstart.html
|
|
||||||
.. _sphinx: https://sphinx-doc.org
|
|
||||||
|
|||||||
@ -40,8 +40,10 @@ then your pair_foo.h file should be structured as follows:
|
|||||||
.. code-block:: c++
|
.. code-block:: c++
|
||||||
|
|
||||||
#ifdef PAIR_CLASS
|
#ifdef PAIR_CLASS
|
||||||
PairStyle(foo,PairFoo)
|
// clang-format off
|
||||||
|
PairStyle(foo,PairFoo);
|
||||||
#else
|
#else
|
||||||
|
// clanf-format on
|
||||||
...
|
...
|
||||||
(class definition for PairFoo)
|
(class definition for PairFoo)
|
||||||
...
|
...
|
||||||
|
|||||||
436
doc/src/Modify_style.rst
Normal file
436
doc/src/Modify_style.rst
Normal file
@ -0,0 +1,436 @@
|
|||||||
|
LAMMPS programming style and requirements for contributions
|
||||||
|
===========================================================
|
||||||
|
|
||||||
|
The following is a summary of the current requirements and
|
||||||
|
recommendations for including contributed source code or documentation
|
||||||
|
into the LAMMPS software distribution.
|
||||||
|
|
||||||
|
Motivation
|
||||||
|
----------
|
||||||
|
|
||||||
|
The LAMMPS developers are committed to providing a software package that
|
||||||
|
is versatile, reliable, high-quality, efficient, portable, and easy to
|
||||||
|
maintain and modify. Achieving all of these goals is challenging since
|
||||||
|
a large part of LAMMPS consists of contributed code from many different
|
||||||
|
authors and not many of them are professionally trained programmers and
|
||||||
|
familiar with the idiosyncrasies of maintaining a large software
|
||||||
|
package. In addition, changes that interfere with the parallel
|
||||||
|
efficiency of the core code must be avoided. As LAMMPS continues to
|
||||||
|
grow and more features and functionality are added, it becomes a
|
||||||
|
necessity to be more discriminating with new contributions while also
|
||||||
|
working at the same time to improve the existing code.
|
||||||
|
|
||||||
|
The following requirements and recommendations are provided to help
|
||||||
|
maintaining or improving that status. Where possible we utilize
|
||||||
|
available continuous integration tools to search for common programming
|
||||||
|
mistakes, portability limitations, incompatible formatting, and
|
||||||
|
undesired side effects. It is indicated which requirements are strict,
|
||||||
|
and which represent a preference and thus are negotiable or optional.
|
||||||
|
|
||||||
|
Please feel free to contact the LAMMPS core developers in case you need
|
||||||
|
additional explanations or clarifications or in case you need assistance
|
||||||
|
in realizing the (strict) requirements for your contributions.
|
||||||
|
|
||||||
|
Licensing requirements (strict)
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
Contributing authors agree when submitting a pull request that their
|
||||||
|
contributions can be distributed under the LAMMPS license
|
||||||
|
conditions. This is the GNU public license in version 2 (not 3 or later)
|
||||||
|
for the publicly distributed versions, e.g. on the LAMMPS homepage or on
|
||||||
|
GitHub. On request we also make a version of LAMMPS available under
|
||||||
|
LGPL 2.1 terms; this will usually be the latest available or a previous
|
||||||
|
stable version with a few LGPL 2.1 incompatible files removed.
|
||||||
|
|
||||||
|
Your new source files should have the LAMMPS copyright, GPL notice, and
|
||||||
|
your name and email address at the top, like other user-contributed
|
||||||
|
LAMMPS source files.
|
||||||
|
|
||||||
|
Contributions may be under a different license for long as that
|
||||||
|
license does not conflict with the aforementioned terms. Contributions
|
||||||
|
that use code with a conflicting license can be split into two parts:
|
||||||
|
|
||||||
|
1. the core parts (i.e. parts that must be in the `src` tree) that are
|
||||||
|
licensed under compatible terms and bundled with the LAMMPS sources
|
||||||
|
2. an external library that must be downloaded and compiled (either
|
||||||
|
separately or as part of the LAMMPS compilation)
|
||||||
|
|
||||||
|
Please note, that this split licensed mode may complicate including the
|
||||||
|
contribution in binary packages.
|
||||||
|
|
||||||
|
Using Pull Requests on GitHub (preferred)
|
||||||
|
-----------------------------------------
|
||||||
|
|
||||||
|
All contributions to LAMMPS are processed as pull requests on GitHub
|
||||||
|
(this also applies to the work of the core LAMMPS developers). A
|
||||||
|
:doc:`tutorial for submitting pull requests on GitHub <Howto_github>` is
|
||||||
|
provided. If this is still problematic, contributors may contact any of
|
||||||
|
the core LAMMPS developers for help or to create a pull request on their
|
||||||
|
behalf. This latter way of submission may delay the integration as it
|
||||||
|
depends on the amount of time required to prepare the pull request and
|
||||||
|
free time available by the LAMMPS developer in question to spend on this
|
||||||
|
task.
|
||||||
|
|
||||||
|
Integration Testing (strict)
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
Contributed code, like all pull requests, must pass the automated
|
||||||
|
tests on GitHub before it can be merged with the LAMMPS distribution.
|
||||||
|
These tests compile LAMMPS in a variety of environments and settings and
|
||||||
|
run the bundled unit tests. At the discretion of the LAMMPS developer
|
||||||
|
managing the pull request, additional tests may be activated that test
|
||||||
|
for "side effects" on running a collection of input decks and create
|
||||||
|
consistent results. Also, the translation of the documentation to HTML
|
||||||
|
and PDF is tested for.
|
||||||
|
|
||||||
|
More specifically, this means that contributed source code **must**
|
||||||
|
compile with the most current version of LAMMPS with ``-DLAMMPS_BIGBIG``
|
||||||
|
in addition to the default setting of ``-DLAMMPS_SMALLBIG``. The code
|
||||||
|
needs to work correctly in both cases and also in serial and parallel
|
||||||
|
using MPI.
|
||||||
|
|
||||||
|
Some "disruptive" changes may break tests and require updates to the
|
||||||
|
testing tools or scripts or tests themselves. This is rare. If in
|
||||||
|
doubt, contact the LAMMPS developer that is assigned to the pull request
|
||||||
|
for further details and explanations and suggestions of what needs to be
|
||||||
|
done.
|
||||||
|
|
||||||
|
Documentation (strict)
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
Contributions that add new styles or commands or augment existing ones
|
||||||
|
must include the corresponding new or modified documentation in
|
||||||
|
`ReStructuredText format <rst>`_ (.rst files in the ``doc/src/`` folder). The
|
||||||
|
documentation shall be written in American English and the .rst file
|
||||||
|
must use only ASCII characters so it can be cleanly translated to PDF
|
||||||
|
files (via `sphinx <sphinx>`_ and PDFLaTeX). Special characters may be included via
|
||||||
|
embedded math expression typeset in a LaTeX subset.
|
||||||
|
|
||||||
|
.. _rst: https://docutils.readthedocs.io/en/sphinx-docs/user/rst/quickstart.html
|
||||||
|
|
||||||
|
When adding new commands, they need to be integrated into the sphinx
|
||||||
|
documentation system, and the corresponding command tables and lists
|
||||||
|
updated. When translating the documentation into html files there should
|
||||||
|
be no warnings. When adding a new package also some lists describing
|
||||||
|
packages must be updated as well as a package specific description added
|
||||||
|
and, if necessary, some package specific build instructions included.
|
||||||
|
|
||||||
|
As appropriate, the text files with the documentation can include inline
|
||||||
|
mathematical expression or figures (see ``doc/JPG`` for examples).
|
||||||
|
Additional PDF files with further details (see ``doc/PDF`` for examples) may
|
||||||
|
also be included. The 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.
|
||||||
|
Citation labels must be unique across **all** .rst files. The
|
||||||
|
"Restrictions" section of the page should indicate if your command is
|
||||||
|
only available if LAMMPS is built with the appropriate FOO package. See
|
||||||
|
other package doc files for examples of how to do this.
|
||||||
|
|
||||||
|
Please run at least "make html" and "make spelling" and carefully
|
||||||
|
inspect and proofread the resulting HTML format doc page before
|
||||||
|
submitting your code. Upon submission of a pull request, checks for
|
||||||
|
error free completion of the HTML and PDF build will be performed and
|
||||||
|
also a spell check, a check for correct anchors and labels, and a check
|
||||||
|
for completeness of references all styles in their corresponding tables
|
||||||
|
and lists is run. In case the spell check reports false positives they
|
||||||
|
can be added to the file doc/utils/sphinx-config/false_positives.txt
|
||||||
|
|
||||||
|
Contributions that add or modify the library interface or "public" APIs
|
||||||
|
from the C++ code or the Fortran module must include suitable doxygen
|
||||||
|
comments in the source and corresponding changes to the documentation
|
||||||
|
sources for the "Programmer Guide" guide section of the LAMMPS manual.
|
||||||
|
|
||||||
|
Examples (preferred)
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
In most cases, it is preferred that example scripts (simple, small, fast
|
||||||
|
to complete on 1 CPU) are included that demonstrate the use of new or
|
||||||
|
extended functionality. These are typically under the examples or
|
||||||
|
examples/PACKAGES directory. A few guidelines for such example input
|
||||||
|
decks.
|
||||||
|
|
||||||
|
- commands that generate output should be commented out (except when the
|
||||||
|
output is the sole purpose or the feature, e.g. for a new compute).
|
||||||
|
|
||||||
|
- commands like :doc:`log <log>`, :doc:`echo <echo>`, :doc:`package
|
||||||
|
<package>`, :doc:`processors <processors>`, :doc:`suffix <suffix>` may
|
||||||
|
**not** be used in the input file (exception: "processors * * 1" or
|
||||||
|
similar is acceptable when used to avoid unwanted domain decomposition
|
||||||
|
of empty volumes).
|
||||||
|
|
||||||
|
- outside of the log files no generated output should be included
|
||||||
|
|
||||||
|
- custom thermo_style settings may not include output measuring CPU or other time
|
||||||
|
as that makes comparing the thermo output between different runs more complicated.
|
||||||
|
|
||||||
|
- input files should be named ``in.name``, data files should be named
|
||||||
|
``data.name`` and log files should be named ``log.version.name.<compiler>.<ncpu>``
|
||||||
|
|
||||||
|
- the total file size of all the inputs and outputs should be small
|
||||||
|
|
||||||
|
- where possible potential files from the "potentials" folder or data
|
||||||
|
file from other folders should be re-used through symbolic links
|
||||||
|
|
||||||
|
Howto document (optional)
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
If your feature requires some more complex steps and explanations to be
|
||||||
|
used correctly or some external or bundled tools or scripts, we
|
||||||
|
recommend that you also contribute a :doc:`Howto document <Howto>`
|
||||||
|
providing some more background information and some tutorial material.
|
||||||
|
This can also be used to provide more in-depth explanations for bundled
|
||||||
|
examples.
|
||||||
|
|
||||||
|
As a general rule-of-thumb, the more clear and self-explanatory you make
|
||||||
|
your documentation, README files and examples, and the easier you make
|
||||||
|
it for people to get started, the more likely it is that users will try
|
||||||
|
out your new feature.
|
||||||
|
|
||||||
|
Programming Style Requirements (varied)
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
The LAMMPS developers aim to employ a consistent programming style and
|
||||||
|
naming conventions across the entire code base, as this helps with
|
||||||
|
maintenance, debugging, and understanding the code, both for developers
|
||||||
|
and users.
|
||||||
|
|
||||||
|
The files `pair_lj_cut.h`, `pair_lj_cut.cpp`, `utils.h`, and `utils.cpp`
|
||||||
|
may serve as representative examples.
|
||||||
|
|
||||||
|
Command or Style names, file names, and keywords (mostly strict)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
All user-visible command or style names should be all lower case and
|
||||||
|
should only use letters, numbers, or forward slashes. They should be
|
||||||
|
descriptive and initialisms should be avoided unless they are well
|
||||||
|
established (e.g. lj for Lennard-Jones). For a compute style
|
||||||
|
"some/name" the source files must be called `compute_some_name.h` and
|
||||||
|
`compute_some_name.cpp`. The "include guard" would then be
|
||||||
|
`LMP_COMPUTE_SOME_NAME_H` and the class name `ComputeSomeName`.
|
||||||
|
|
||||||
|
Whitespace and permissions (preferred)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Source files should not contain TAB characters unless required by the
|
||||||
|
syntax (e.g. in makefiles) and no trailing whitespace. Text files
|
||||||
|
should be added with Unix-style line endings (LF-only). Git will
|
||||||
|
automatically convert those in both directions when running on Windows;
|
||||||
|
use dos2unix on Linux machines to convert files. Text files should have
|
||||||
|
a line ending on the last line.
|
||||||
|
|
||||||
|
All files should have 0644 permissions, i.e writable to the user only
|
||||||
|
and readable by all and no executable permissions. Executable
|
||||||
|
permissions (0755) should only be on shell scripts or python or similar
|
||||||
|
scripts for interpreted script languages.
|
||||||
|
|
||||||
|
Indentation and Placement of Braces (strongly preferred)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
LAMMPS uses 2 characters per indentation level and lines should be
|
||||||
|
kept within 100 characters wide.
|
||||||
|
|
||||||
|
For new files added to the "src" tree, a `clang-format
|
||||||
|
<https://clang.llvm.org/docs/ClangFormat.html>`_ configuration file is
|
||||||
|
provided under the name `.clang-format`. This file is compatible with
|
||||||
|
clang-format version 8 and later. With that file present files can be
|
||||||
|
reformatted according to the configuration with a command like:
|
||||||
|
`clang-format -i new-file.cpp`. Ideally, this is done while writing the
|
||||||
|
code or before a pull request is submitted. Blocks of code where the
|
||||||
|
reformatting from clang-format yields undesirable output may be
|
||||||
|
protected with placing a pair `// clang-format off` and `// clang-format
|
||||||
|
on` comments around that block.
|
||||||
|
|
||||||
|
Programming language standards (required)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
The core of LAMMPS is written in C++11 in a style that can be mostly
|
||||||
|
described as "C with classes". Advanced C++ features like operator
|
||||||
|
overloading or excessive use of templates are avoided with the intent to
|
||||||
|
keep the code readable to programmers that have limited C++ programming
|
||||||
|
experience. C++ constructs are acceptable when they help improving the
|
||||||
|
readability and reliability of the code, e.g. when using the
|
||||||
|
`std::string` class instead of manipulating pointers and calling the
|
||||||
|
string functions of the C library. In addition and number of convenient
|
||||||
|
:doc:`utility functions and classes <Developer_utils>` for recurring
|
||||||
|
tasks are provided.
|
||||||
|
|
||||||
|
Included Fortran code has to be compatible with the Fortran 2003
|
||||||
|
standard. Python code must be compatible with Python 3.5. Large parts
|
||||||
|
or LAMMPS (including the :ref:`PYTHON package <PKG-PYTHON>`) are also
|
||||||
|
compatible with Python 2.7. Compatibility with Python 2.7 is
|
||||||
|
desirable, but compatibility with Python 3.5 is **required**.
|
||||||
|
|
||||||
|
Compatibility with these older programming language standards is very
|
||||||
|
important to maintain portability, especially with HPC cluster
|
||||||
|
environments, which tend to be running older software stacks and LAMMPS
|
||||||
|
users may be required to use those older tools or not have the option to
|
||||||
|
install newer compilers.
|
||||||
|
|
||||||
|
Programming conventions (varied)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
The following is a collection of conventions that should be applied when
|
||||||
|
writing code for LAMMPS. Following these steps will make it much easier
|
||||||
|
to integrate your contribution. Please have a look at the existing files
|
||||||
|
in packages in the src directory for examples. As a demonstration for
|
||||||
|
how can be adapted to these conventions you may compare the REAXFF
|
||||||
|
package with the what it looked like when it was called USER-REAXC. If
|
||||||
|
you are uncertain, please ask.
|
||||||
|
|
||||||
|
- system headers or from installed libraries are include with angular
|
||||||
|
brackets (example: ``#include <vector>``), while local include file
|
||||||
|
use double quotes (example: ``#include "atom.h"``).
|
||||||
|
|
||||||
|
- when including system header files from the C library use the
|
||||||
|
C++-style names (``<cstdlib>`` or ``<cstring>``) instead of the
|
||||||
|
C-style names (``<stdlib.h>`` or ``<string.h>``)
|
||||||
|
|
||||||
|
- the order of ``#include`` statements in a file ``some_name.cpp`` that
|
||||||
|
implements a class ``SomeName`` defined in a header file
|
||||||
|
``some_name.h`` should be as follows:
|
||||||
|
|
||||||
|
- ``#include "some_name.h"`` followed by an empty line
|
||||||
|
|
||||||
|
- LAMMPS include files e.g. ``#include "comm.h"`` or ``#include
|
||||||
|
"modify.h"`` in alphabetical order followed by an empty line
|
||||||
|
|
||||||
|
- system header files from the C++ or C standard library followed by
|
||||||
|
an empty line
|
||||||
|
|
||||||
|
- ``using namespace LAMMPS_NS`` or other namespace imports.
|
||||||
|
|
||||||
|
- I/O is done via the C-style stdio library and **not** iostreams.
|
||||||
|
|
||||||
|
- Output to the screen and the logfile should be using the corresponding
|
||||||
|
FILE pointers and only be done on MPI rank 0. Use the :cpp:func:`utils::logmesg`
|
||||||
|
convenience function where possible.
|
||||||
|
|
||||||
|
- header files should only include the absolute minimum number of
|
||||||
|
include files and **must not** contain any ``using`` statements;
|
||||||
|
rather the include statements should be put into the corresponding
|
||||||
|
implementation files. For implementation files, the
|
||||||
|
"include-what-you-use" principle should be employed. However, when
|
||||||
|
including the ``pointers.h`` header (or one of the base classes
|
||||||
|
derived from it) certain headers will be included and thus need to be
|
||||||
|
specified. These are: `mpi.h`, `cstddef`, `cstdio`, `cstdlib`,
|
||||||
|
`string`, `utils.h`, `fmt/format.h`, `climits`, `cinttypes`. This also
|
||||||
|
means any header can assume that `FILE`, `NULL`, and `INT_MAX` are
|
||||||
|
defined.
|
||||||
|
|
||||||
|
- header files that define a new LAMMPS style (i.e. that have a
|
||||||
|
``SomeStyle(some/name,SomeName);`` macro in them) should only use the
|
||||||
|
include file for the base class and otherwise use forward declarations
|
||||||
|
and pointers; when interfacing to a library use the PIMPL (pointer
|
||||||
|
to implementation) approach where you have a pointer to a struct
|
||||||
|
that contains all library specific data (and thus requires the library
|
||||||
|
header) but use a forward declaration and define the struct only in
|
||||||
|
the implementation file. This is a **strict** requirement since this
|
||||||
|
is where type clashes between packages and hard to fine bugs have
|
||||||
|
regularly manifested in the past.
|
||||||
|
|
||||||
|
- Please use clang-format only to reformat files that you have
|
||||||
|
contributed. For header files containing a ``SomeStyle(keyword,
|
||||||
|
ClassName)`` macros it is required to have this macro embedded with a
|
||||||
|
pair of ``// clang-format off``, ``// clang-format on`` commends and
|
||||||
|
the line must be terminated with a semi-colon (;). Example:
|
||||||
|
|
||||||
|
.. code-block:: c++
|
||||||
|
|
||||||
|
#ifdef COMMAND_CLASS
|
||||||
|
// clang-format off
|
||||||
|
CommandStyle(run,Run);
|
||||||
|
// clang-format on
|
||||||
|
#else
|
||||||
|
|
||||||
|
#ifndef LMP_RUN_H
|
||||||
|
[...]
|
||||||
|
|
||||||
|
You may also use ``// clang-format on/off`` throughout your files
|
||||||
|
to protect individual sections from being reformatted.
|
||||||
|
|
||||||
|
- We rarely accept new styles in the core src folder. Thus please
|
||||||
|
review the list of :doc:`available Packages <Packages_details>` to see
|
||||||
|
if your contribution could be added to be added to one of them. It
|
||||||
|
should fit into the general purposed of that package. If it does not
|
||||||
|
fit well, it may be added to one of the EXTRA- packages or the MISC
|
||||||
|
package.
|
||||||
|
|
||||||
|
|
||||||
|
Contributing a package
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
If your contribution has several related features that are not covered
|
||||||
|
by one of the existing packages or is dependent on a library (bundled or
|
||||||
|
external), it is best to make it a package directory with a name like
|
||||||
|
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.
|
||||||
|
|
||||||
|
|
||||||
|
Build system (strongly preferred)
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
LAMMPS currently supports two build systems: one that is based on
|
||||||
|
:doc:`traditional Makefiles <Build_make>` and one that is based on
|
||||||
|
:doc:`CMake <Build_cmake>`. Thus your contribution must be compatible
|
||||||
|
with and support both.
|
||||||
|
|
||||||
|
For a single pair of header and implementation files that are an
|
||||||
|
independent feature, it is usually only required to add them to
|
||||||
|
`src/.gitignore``.
|
||||||
|
|
||||||
|
For traditional make, if your contributed files or package depend on
|
||||||
|
other LAMMPS style files or packages 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 and
|
||||||
|
modifications to src/Depend.sh to trigger the checks. See other README
|
||||||
|
and Install.sh files in other directories as examples.
|
||||||
|
|
||||||
|
Similarly for CMake support, changes may need to be made to
|
||||||
|
cmake/CMakeLists.txt, some of the files in cmake/presets, and possibly a
|
||||||
|
file with specific instructions needs to be added to
|
||||||
|
cmake/Modules/Packages/. Please check out how this is handled for
|
||||||
|
existing packages and ask the LAMMPS developers if you need assistance.
|
||||||
|
|
||||||
|
|
||||||
|
Citation reminder (suggested)
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
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/DIFFRACTION/compute_saed.cpp`` for an example.
|
||||||
|
A BibTeX format citation is stored in a string variable at the top
|
||||||
|
of the file and a single line of code registering this variable is
|
||||||
|
added to the constructor of the class. When your feature is used,
|
||||||
|
by default, LAMMPS will print the brief info and the DOI
|
||||||
|
in the first line to the screen and the full citation to the log file.
|
||||||
|
|
||||||
|
If there is additional functionality (which may have been added later)
|
||||||
|
described in a different publication, additional citation descriptions
|
||||||
|
may be added for as long as they are only registered when the
|
||||||
|
corresponding keyword activating this functionality is used. With these
|
||||||
|
options it is possible to have LAMMPS output a specific citation
|
||||||
|
reminder whenever a user invokes your feature from their input script.
|
||||||
|
Please note that you should *only* use this for the *most* relevant
|
||||||
|
paper for a feature and a publication that you or your group authored.
|
||||||
|
E.g. adding a citation 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 latter kind of citation should just be included in the
|
||||||
|
documentation page you provide describing your contribution. If you are
|
||||||
|
not sure what the best option would be, please contact the LAMMPS
|
||||||
|
developers for advice.
|
||||||
|
|
||||||
|
|
||||||
|
Testing (optional)
|
||||||
|
------------------
|
||||||
|
|
||||||
|
If your contribution contains new utility functions or a supporting class
|
||||||
|
(i.e. anything that does not depend on a LAMMPS object), new unit tests
|
||||||
|
should be added to a suitable folder in the ``unittest`` tree.
|
||||||
|
When adding a new LAMMPS style computing forces or selected fixes,
|
||||||
|
a ``.yaml`` file with a test configuration and reference data should be
|
||||||
|
added for the styles where a suitable tester program already exists
|
||||||
|
(e.g. pair styles, bond styles, etc.). Please see
|
||||||
|
:ref:`this section in the manual <testing>` for more information on
|
||||||
|
how to enable, run, and expand testing.
|
||||||
@ -72,7 +72,8 @@ Alexey
|
|||||||
ali
|
ali
|
||||||
aliceblue
|
aliceblue
|
||||||
Allinger
|
Allinger
|
||||||
allocaters
|
allocator
|
||||||
|
allocators
|
||||||
allosws
|
allosws
|
||||||
AlO
|
AlO
|
||||||
Alonso
|
Alonso
|
||||||
@ -1008,6 +1009,7 @@ FFmpeg
|
|||||||
ffplay
|
ffplay
|
||||||
fft
|
fft
|
||||||
fftbench
|
fftbench
|
||||||
|
fftMPI
|
||||||
fftw
|
fftw
|
||||||
fgets
|
fgets
|
||||||
fhg
|
fhg
|
||||||
@ -1384,6 +1386,7 @@ inhomogeneities
|
|||||||
inhomogeneous
|
inhomogeneous
|
||||||
init
|
init
|
||||||
initialdelay
|
initialdelay
|
||||||
|
initialisms
|
||||||
initializations
|
initializations
|
||||||
InitiatorIDs
|
InitiatorIDs
|
||||||
initio
|
initio
|
||||||
@ -1690,6 +1693,7 @@ Lett
|
|||||||
Leuven
|
Leuven
|
||||||
Leven
|
Leven
|
||||||
Lewy
|
Lewy
|
||||||
|
LF
|
||||||
LGPL
|
LGPL
|
||||||
lgvdw
|
lgvdw
|
||||||
Liang
|
Liang
|
||||||
@ -2095,6 +2099,7 @@ Murdick
|
|||||||
Murtola
|
Murtola
|
||||||
Murty
|
Murty
|
||||||
Muser
|
Muser
|
||||||
|
mutexes
|
||||||
Muto
|
Muto
|
||||||
muVT
|
muVT
|
||||||
mux
|
mux
|
||||||
|
|||||||
Reference in New Issue
Block a user